Skip to content

Commit 767baf5

Browse files
committed
[GEO] Refactor DeprecatedParameters in AbstractGeometryFieldMapper (elastic#44923)
Refactors DeprecatedParameters specific to legacy geo_shape out of AbstractGeometryFieldMapper.TypeParser#parse.
1 parent f364393 commit 767baf5

File tree

1 file changed

+44
-29
lines changed

1 file changed

+44
-29
lines changed

server/src/main/java/org/elasticsearch/index/mapper/AbstractGeometryFieldMapper.java

+44-29
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
import java.io.IOException;
4444
import java.text.ParseException;
4545
import java.util.ArrayList;
46+
import java.util.HashMap;
4647
import java.util.Iterator;
4748
import java.util.List;
4849
import java.util.Map;
@@ -193,61 +194,73 @@ protected void setupFieldType(BuilderContext context) {
193194
}
194195
}
195196

197+
protected static final String DEPRECATED_PARAMETERS_KEY = "deprecated_parameters";
198+
196199
public static class TypeParser implements Mapper.TypeParser {
200+
protected boolean parseXContentParameters(String name, Map.Entry<String, Object> entry, Map<String, Object> params)
201+
throws MapperParsingException {
202+
if (DeprecatedParameters.parse(name, entry.getKey(), entry.getValue(),
203+
(DeprecatedParameters)params.get(DEPRECATED_PARAMETERS_KEY))) {
204+
return true;
205+
}
206+
return false;
207+
}
208+
209+
protected Builder newBuilder(String name, Map<String, Object> params) {
210+
if (params.containsKey(DEPRECATED_PARAMETERS_KEY)) {
211+
return new LegacyGeoShapeFieldMapper.Builder(name, (DeprecatedParameters)params.get(DEPRECATED_PARAMETERS_KEY));
212+
}
213+
return new GeoShapeFieldMapper.Builder(name);
214+
}
197215

198216
@Override
199217
public Mapper.Builder parse(String name, Map<String, Object> node, ParserContext parserContext) throws MapperParsingException {
200-
Boolean coerce = null;
201-
Boolean ignoreZ = null;
202-
Boolean ignoreMalformed = null;
203-
Orientation orientation = null;
204-
DeprecatedParameters deprecatedParameters = new DeprecatedParameters();
205-
boolean parsedDeprecatedParams = false;
218+
Map<String, Object> params = new HashMap<>();
219+
boolean parsedDeprecatedParameters = false;
220+
params.put(DEPRECATED_PARAMETERS_KEY, new DeprecatedParameters());
206221
for (Iterator<Map.Entry<String, Object>> iterator = node.entrySet().iterator(); iterator.hasNext();) {
207222
Map.Entry<String, Object> entry = iterator.next();
208223
String fieldName = entry.getKey();
209224
Object fieldNode = entry.getValue();
210-
if (DeprecatedParameters.parse(name, fieldName, fieldNode, deprecatedParameters)) {
211-
parsedDeprecatedParams = true;
225+
if (parseXContentParameters(name, entry, params)) {
226+
parsedDeprecatedParameters = true;
212227
iterator.remove();
213228
} else if (Names.ORIENTATION.match(fieldName, LoggingDeprecationHandler.INSTANCE)) {
214-
orientation = ShapeBuilder.Orientation.fromString(fieldNode.toString());
229+
params.put(Names.ORIENTATION.getPreferredName(), ShapeBuilder.Orientation.fromString(fieldNode.toString()));
215230
iterator.remove();
216231
} else if (IGNORE_MALFORMED.equals(fieldName)) {
217-
ignoreMalformed = XContentMapValues.nodeBooleanValue(fieldNode, name + ".ignore_malformed");
232+
params.put(IGNORE_MALFORMED, XContentMapValues.nodeBooleanValue(fieldNode, name + ".ignore_malformed"));
218233
iterator.remove();
219234
} else if (Names.COERCE.match(fieldName, LoggingDeprecationHandler.INSTANCE)) {
220-
coerce = XContentMapValues.nodeBooleanValue(fieldNode, name + "." + Names.COERCE.getPreferredName());
235+
params.put(Names.COERCE.getPreferredName(),
236+
XContentMapValues.nodeBooleanValue(fieldNode, name + "." + Names.COERCE.getPreferredName()));
221237
iterator.remove();
222238
} else if (GeoPointFieldMapper.Names.IGNORE_Z_VALUE.getPreferredName().equals(fieldName)) {
223-
ignoreZ = XContentMapValues.nodeBooleanValue(fieldNode,
224-
name + "." + GeoPointFieldMapper.Names.IGNORE_Z_VALUE.getPreferredName());
239+
params.put(GeoPointFieldMapper.Names.IGNORE_Z_VALUE.getPreferredName(),
240+
XContentMapValues.nodeBooleanValue(fieldNode,
241+
name + "." + GeoPointFieldMapper.Names.IGNORE_Z_VALUE.getPreferredName()));
225242
iterator.remove();
226243
}
227244
}
228-
final Builder builder;
229-
if (parsedDeprecatedParams || parserContext.indexVersionCreated().before(Version.V_6_6_0)) {
230-
// Legacy index-based shape
231-
builder = new LegacyGeoShapeFieldMapper.Builder(name, deprecatedParameters);
232-
} else {
233-
// BKD-based shape
234-
builder = new GeoShapeFieldMapper.Builder(name);
245+
if (parsedDeprecatedParameters == false) {
246+
params.remove(DEPRECATED_PARAMETERS_KEY);
235247
}
248+
Builder builder = newBuilder(name, params);
236249

237-
if (coerce != null) {
238-
builder.coerce(coerce);
250+
if (params.containsKey(Names.COERCE.getPreferredName())) {
251+
builder.coerce((Boolean)params.get(Names.COERCE.getPreferredName()));
239252
}
240253

241-
if (ignoreZ != null) {
242-
builder.ignoreZValue(ignoreZ);
254+
if (params.containsKey(GeoPointFieldMapper.Names.IGNORE_Z_VALUE.getPreferredName())) {
255+
builder.ignoreZValue((Boolean)params.get(GeoPointFieldMapper.Names.IGNORE_Z_VALUE.getPreferredName()));
243256
}
244257

245-
if (ignoreMalformed != null) {
246-
builder.ignoreMalformed(ignoreMalformed);
258+
if (params.containsKey(IGNORE_MALFORMED)) {
259+
builder.ignoreMalformed((Boolean)params.get(IGNORE_MALFORMED));
247260
}
248261

249-
if (orientation != null) {
250-
builder.orientation(orientation);
262+
if (params.containsKey(Names.ORIENTATION.getPreferredName())) {
263+
builder.orientation((Orientation)params.get(Names.ORIENTATION.getPreferredName()));
251264
}
252265

253266
return builder;
@@ -302,7 +315,8 @@ public Query existsQuery(QueryShardContext context) {
302315

303316
@Override
304317
public Query termQuery(Object value, QueryShardContext context) {
305-
throw new QueryShardException(context, "Geo fields do not support exact searching, use dedicated geo queries instead");
318+
throw new QueryShardException(context,
319+
"Geometry fields do not support exact searching, use dedicated geometry queries instead");
306320
}
307321

308322
public void setGeometryIndexer(Indexer<Parsed, Processed> geometryIndexer) {
@@ -361,6 +375,7 @@ protected void doMerge(Mapper mergeWith) {
361375

362376
@Override
363377
protected void parseCreateField(ParseContext context, List<IndexableField> fields) throws IOException {
378+
throw new UnsupportedOperationException("Parsing is implemented in parse(), this method should NEVER be called");
364379
}
365380

366381
@Override

0 commit comments

Comments
 (0)