Skip to content

Commit 3c89d16

Browse files
committed
Moving mapping parsing into a single method
1 parent 4300a06 commit 3c89d16

File tree

3 files changed

+27
-38
lines changed

3 files changed

+27
-38
lines changed

modules/data-streams/src/main/java/org/elasticsearch/datastreams/rest/RestUpdateDataStreamMappingsAction.java

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010

1111
import org.elasticsearch.action.datastreams.UpdateDataStreamMappingsAction;
1212
import org.elasticsearch.client.internal.node.NodeClient;
13+
import org.elasticsearch.cluster.metadata.Template;
1314
import org.elasticsearch.common.Strings;
1415
import org.elasticsearch.common.compress.CompressedXContent;
1516
import org.elasticsearch.rest.BaseRestHandler;
@@ -19,11 +20,9 @@
1920
import org.elasticsearch.rest.ServerlessScope;
2021
import org.elasticsearch.rest.action.RestCancellableNodeClient;
2122
import org.elasticsearch.rest.action.RestRefCountedChunkedToXContentListener;
22-
import org.elasticsearch.xcontent.XContentFactory;
2323
import org.elasticsearch.xcontent.XContentParser;
2424

2525
import java.io.IOException;
26-
import java.util.Base64;
2726
import java.util.List;
2827

2928
import static org.elasticsearch.rest.RestRequest.Method.PUT;
@@ -45,16 +44,7 @@ public List<Route> routes() {
4544
protected RestChannelConsumer prepareRequest(RestRequest request, NodeClient client) throws IOException {
4645
CompressedXContent mappings;
4746
try (XContentParser parser = request.contentParser()) {
48-
XContentParser.Token token = parser.nextToken();
49-
if (token == XContentParser.Token.VALUE_STRING) {
50-
mappings = new CompressedXContent(Base64.getDecoder().decode(parser.text()));
51-
} else if (token == XContentParser.Token.VALUE_EMBEDDED_OBJECT) {
52-
mappings = new CompressedXContent(parser.binaryValue());
53-
} else if (token == XContentParser.Token.START_OBJECT) {
54-
mappings = new CompressedXContent(Strings.toString(XContentFactory.jsonBuilder().map(parser.mapOrdered())));
55-
} else {
56-
throw new IllegalArgumentException("Unexpected token: " + token);
57-
}
47+
mappings = Template.parseMappings(parser);
5848
}
5949
boolean dryRun = request.paramAsBoolean("dry_run", false);
6050

server/src/main/java/org/elasticsearch/cluster/metadata/DataStream.java

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,6 @@
5252
import org.elasticsearch.xcontent.ParseField;
5353
import org.elasticsearch.xcontent.ToXContentObject;
5454
import org.elasticsearch.xcontent.XContentBuilder;
55-
import org.elasticsearch.xcontent.XContentFactory;
5655
import org.elasticsearch.xcontent.XContentParser;
5756
import org.elasticsearch.xcontent.XContentParserConfiguration;
5857
import org.elasticsearch.xcontent.XContentType;
@@ -61,7 +60,6 @@
6160
import java.time.Instant;
6261
import java.time.temporal.ChronoUnit;
6362
import java.util.ArrayList;
64-
import java.util.Base64;
6563
import java.util.Comparator;
6664
import java.util.HashMap;
6765
import java.util.List;
@@ -1488,18 +1486,12 @@ public void writeTo(StreamOutput out) throws IOException {
14881486
DATA_STREAM_OPTIONS_FIELD
14891487
);
14901488
PARSER.declareObject(ConstructingObjectParser.optionalConstructorArg(), (p, c) -> Settings.fromXContent(p), SETTINGS_FIELD);
1491-
PARSER.declareField(ConstructingObjectParser.optionalConstructorArg(), (p, c) -> {
1492-
XContentParser.Token token = p.currentToken();
1493-
if (token == XContentParser.Token.VALUE_STRING) {
1494-
return new CompressedXContent(Base64.getDecoder().decode(p.text()));
1495-
} else if (token == XContentParser.Token.VALUE_EMBEDDED_OBJECT) {
1496-
return new CompressedXContent(p.binaryValue());
1497-
} else if (token == XContentParser.Token.START_OBJECT) {
1498-
return new CompressedXContent(Strings.toString(XContentFactory.jsonBuilder().map(p.mapOrdered())));
1499-
} else {
1500-
throw new IllegalArgumentException("Unexpected token: " + token);
1501-
}
1502-
}, MAPPINGS_FIELD, ObjectParser.ValueType.VALUE_OBJECT_ARRAY);
1489+
PARSER.declareField(
1490+
ConstructingObjectParser.optionalConstructorArg(),
1491+
(p, c) -> { return Template.parseMappings(p); },
1492+
MAPPINGS_FIELD,
1493+
ObjectParser.ValueType.VALUE_OBJECT_ARRAY
1494+
);
15031495
}
15041496

15051497
public static DataStream fromXContent(XContentParser parser) throws IOException {

server/src/main/java/org/elasticsearch/cluster/metadata/Template.java

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -67,18 +67,12 @@ public class Template implements SimpleDiffable<Template>, ToXContentObject {
6767

6868
static {
6969
PARSER.declareObject(ConstructingObjectParser.optionalConstructorArg(), (p, c) -> Settings.fromXContent(p), SETTINGS);
70-
PARSER.declareField(ConstructingObjectParser.optionalConstructorArg(), (p, c) -> {
71-
XContentParser.Token token = p.currentToken();
72-
if (token == XContentParser.Token.VALUE_STRING) {
73-
return new CompressedXContent(Base64.getDecoder().decode(p.text()));
74-
} else if (token == XContentParser.Token.VALUE_EMBEDDED_OBJECT) {
75-
return new CompressedXContent(p.binaryValue());
76-
} else if (token == XContentParser.Token.START_OBJECT) {
77-
return new CompressedXContent(Strings.toString(XContentFactory.jsonBuilder().map(p.mapOrdered())));
78-
} else {
79-
throw new IllegalArgumentException("Unexpected token: " + token);
80-
}
81-
}, MAPPINGS, ObjectParser.ValueType.VALUE_OBJECT_ARRAY);
70+
PARSER.declareField(
71+
ConstructingObjectParser.optionalConstructorArg(),
72+
(p, c) -> { return parseMappings(p); },
73+
MAPPINGS,
74+
ObjectParser.ValueType.VALUE_OBJECT_ARRAY
75+
);
8276
PARSER.declareObject(ConstructingObjectParser.optionalConstructorArg(), (p, c) -> {
8377
Map<String, AliasMetadata> aliasMap = new HashMap<>();
8478
XContentParser.Token token;
@@ -104,6 +98,19 @@ public class Template implements SimpleDiffable<Template>, ToXContentObject {
10498
);
10599
}
106100

101+
public static CompressedXContent parseMappings(XContentParser parser) throws IOException {
102+
XContentParser.Token token = parser.currentToken();
103+
if (token == XContentParser.Token.VALUE_STRING) {
104+
return new CompressedXContent(Base64.getDecoder().decode(parser.text()));
105+
} else if (token == XContentParser.Token.VALUE_EMBEDDED_OBJECT) {
106+
return new CompressedXContent(parser.binaryValue());
107+
} else if (token == XContentParser.Token.START_OBJECT) {
108+
return new CompressedXContent(Strings.toString(XContentFactory.jsonBuilder().map(parser.mapOrdered())));
109+
} else {
110+
throw new IllegalArgumentException("Unexpected token: " + token);
111+
}
112+
}
113+
107114
@Nullable
108115
private final Settings settings;
109116
@Nullable

0 commit comments

Comments
 (0)