27
27
import org .elasticsearch .common .xcontent .ToXContent ;
28
28
import org .elasticsearch .common .xcontent .XContentBuilder ;
29
29
import org .elasticsearch .common .xcontent .XContentParser ;
30
- import org .elasticsearch .index .mapper .*;
30
+ import org .elasticsearch .index .mapper .FieldMapper ;
31
+ import org .elasticsearch .index .mapper .FieldMapperListener ;
32
+ import org .elasticsearch .index .mapper .InternalMapper ;
33
+ import org .elasticsearch .index .mapper .MapperParsingException ;
34
+ import org .elasticsearch .index .mapper .MergeMappingException ;
35
+ import org .elasticsearch .index .mapper .StrictDynamicMappingException ;
31
36
32
37
import java .io .IOException ;
33
38
import java .util .HashMap ;
@@ -553,7 +558,7 @@ private void serializeValue(final ParseContext context, String currentFieldName,
553
558
}
554
559
}
555
560
556
- @ Override public void merge (XContentMapper mergeWith , MergeContext mergeContext ) throws MergeMappingException {
561
+ @ Override public void merge (final XContentMapper mergeWith , final MergeContext mergeContext ) throws MergeMappingException {
557
562
if (!(mergeWith instanceof ObjectMapper )) {
558
563
mergeContext .addConflict ("Can't merge a non object mapping [" + mergeWith .name () + "] with an object mapping [" + name () + "]" );
559
564
return ;
@@ -569,9 +574,11 @@ private void serializeValue(final ParseContext context, String currentFieldName,
569
574
// no mapping, simply add it if not simulating
570
575
if (!mergeContext .mergeFlags ().simulate ()) {
571
576
putMapper (mergeWithMapper );
572
- if (mergeWithMapper instanceof AbstractFieldMapper ) {
573
- mergeContext .docMapper ().addFieldMapper ((FieldMapper ) mergeWithMapper );
574
- }
577
+ mergeWithMapper .traverse (new FieldMapperListener () {
578
+ @ Override public void fieldMapper (FieldMapper fieldMapper ) {
579
+ mergeContext .docMapper ().addFieldMapper (fieldMapper );
580
+ }
581
+ });
575
582
}
576
583
} else {
577
584
if ((mergeWithMapper instanceof MultiFieldMapper ) && !(mergeIntoMapper instanceof MultiFieldMapper )) {
@@ -581,9 +588,11 @@ private void serializeValue(final ParseContext context, String currentFieldName,
581
588
putMapper (mergeWithMultiField );
582
589
// now, raise events for all mappers
583
590
for (XContentMapper mapper : mergeWithMultiField .mappers ().values ()) {
584
- if (mapper instanceof AbstractFieldMapper ) {
585
- mergeContext .docMapper ().addFieldMapper ((FieldMapper ) mapper );
586
- }
591
+ mapper .traverse (new FieldMapperListener () {
592
+ @ Override public void fieldMapper (FieldMapper fieldMapper ) {
593
+ mergeContext .docMapper ().addFieldMapper (fieldMapper );
594
+ }
595
+ });
587
596
}
588
597
}
589
598
} else {
0 commit comments