9
9
import java .util .ArrayList ;
10
10
import java .util .Collections ;
11
11
import java .util .List ;
12
+ import java .util .Map ;
12
13
13
14
import org .hibernate .search .backend .elasticsearch .lowlevel .index .mapping .impl .DataTypes ;
14
15
import org .hibernate .search .backend .elasticsearch .lowlevel .index .mapping .impl .ElasticsearchDenseVectorIndexOptions ;
15
16
import org .hibernate .search .backend .elasticsearch .lowlevel .index .mapping .impl .OpenSearchVectorTypeMethod ;
16
17
import org .hibernate .search .backend .elasticsearch .lowlevel .index .mapping .impl .PropertyMapping ;
18
+ import org .hibernate .search .backend .elasticsearch .reporting .impl .ElasticsearchValidationMessages ;
17
19
import org .hibernate .search .engine .backend .analysis .AnalyzerNames ;
18
20
import org .hibernate .search .util .common .impl .CollectionHelper ;
19
21
22
+ import com .google .gson .JsonElement ;
23
+
20
24
abstract class PropertyMappingValidator extends AbstractTypeMappingValidator <PropertyMapping > {
21
25
22
26
private static final List <String > DEFAULT_DATE_FORMAT ;
@@ -196,47 +200,68 @@ protected void validateVectorMapping(ValidationErrorCollector errorCollector, Pr
196
200
}
197
201
198
202
private static class ElasticsearchDenseVectorIndexOptionsValidator
199
- implements Validator <ElasticsearchDenseVectorIndexOptions > {
203
+ extends AbstractVectorAttributesValidator <ElasticsearchDenseVectorIndexOptions > {
200
204
201
205
@ Override
202
- public void validate (ValidationErrorCollector errorCollector , ElasticsearchDenseVectorIndexOptions expected ,
206
+ protected String propertyName () {
207
+ return "index_options" ;
208
+ }
209
+
210
+ @ Override
211
+ public void doValidate (ValidationErrorCollector errorCollector , ElasticsearchDenseVectorIndexOptions expected ,
203
212
ElasticsearchDenseVectorIndexOptions actual ) {
204
213
LeafValidators .EQUAL .validate (
205
- errorCollector , ValidationContextType .MAPPING_ATTRIBUTE , "index_options. type" ,
214
+ errorCollector , ValidationContextType .MAPPING_ATTRIBUTE , "type" ,
206
215
expected .getType (), actual .getType ()
207
216
);
208
217
LeafValidators .EQUAL .validateWithDefault (
209
- errorCollector , ValidationContextType .MAPPING_ATTRIBUTE , "index_options. m" ,
218
+ errorCollector , ValidationContextType .MAPPING_ATTRIBUTE , "m" ,
210
219
expected .getM (), actual .getM (), 16
211
220
);
212
221
LeafValidators .EQUAL .validateWithDefault (
213
- errorCollector , ValidationContextType .MAPPING_ATTRIBUTE , "index_options. ef_construction" ,
222
+ errorCollector , ValidationContextType .MAPPING_ATTRIBUTE , "ef_construction" ,
214
223
expected .getEfConstruction (), actual .getEfConstruction (), 100
215
224
);
216
225
}
226
+
227
+ @ Override
228
+ protected Map <String , JsonElement > expectedMappingExtraAttributes (ElasticsearchDenseVectorIndexOptions expected ) {
229
+ return expected .getExtraAttributes ();
230
+ }
231
+
232
+ @ Override
233
+ protected Map <String , JsonElement > actualMappingExtraAttributes (ElasticsearchDenseVectorIndexOptions actual ) {
234
+ return actual .getExtraAttributes ();
235
+ }
217
236
}
218
237
219
- private static class OpenSearchVectorTypeMethodValidator implements Validator <OpenSearchVectorTypeMethod > {
238
+ private static class OpenSearchVectorTypeMethodValidator
239
+ extends AbstractVectorAttributesValidator <OpenSearchVectorTypeMethod > {
220
240
221
241
private final OpenSearchVectorTypeMethodParametersValidator parametersValidator =
222
242
new OpenSearchVectorTypeMethodParametersValidator ();
223
243
224
244
@ Override
225
- public void validate (ValidationErrorCollector errorCollector , OpenSearchVectorTypeMethod expected ,
245
+ protected String propertyName () {
246
+ return "method" ;
247
+ }
248
+
249
+ @ Override
250
+ public void doValidate (ValidationErrorCollector errorCollector , OpenSearchVectorTypeMethod expected ,
226
251
OpenSearchVectorTypeMethod actual ) {
227
252
LeafValidators .EQUAL .validate (
228
- errorCollector , ValidationContextType .MAPPING_ATTRIBUTE , "method. name" ,
253
+ errorCollector , ValidationContextType .MAPPING_ATTRIBUTE , "name" ,
229
254
expected .getName (), actual .getName ()
230
255
);
231
256
232
257
LeafValidators .EQUAL .validateWithDefault (
233
- errorCollector , ValidationContextType .MAPPING_ATTRIBUTE , "method. space_type" ,
258
+ errorCollector , ValidationContextType .MAPPING_ATTRIBUTE , "space_type" ,
234
259
expected .getSpaceType (), actual .getSpaceType (),
235
260
"l2"
236
261
);
237
262
238
263
LeafValidators .EQUAL .validate (
239
- errorCollector , ValidationContextType .MAPPING_ATTRIBUTE , "method. engine" ,
264
+ errorCollector , ValidationContextType .MAPPING_ATTRIBUTE , "engine" ,
240
265
expected .getEngine (), actual .getEngine ()
241
266
);
242
267
@@ -245,24 +270,77 @@ public void validate(ValidationErrorCollector errorCollector, OpenSearchVectorTy
245
270
parametersValidator .validate ( errorCollector , expectedParameters , actual .getParameters () );
246
271
}
247
272
}
273
+
274
+ @ Override
275
+ protected Map <String , JsonElement > expectedMappingExtraAttributes (OpenSearchVectorTypeMethod expected ) {
276
+ return expected .getExtraAttributes ();
277
+ }
278
+
279
+ @ Override
280
+ protected Map <String , JsonElement > actualMappingExtraAttributes (OpenSearchVectorTypeMethod actual ) {
281
+ return actual .getExtraAttributes ();
282
+ }
248
283
}
249
284
250
285
private static class OpenSearchVectorTypeMethodParametersValidator
251
- implements Validator <OpenSearchVectorTypeMethod .Parameters > {
286
+ extends AbstractVectorAttributesValidator <OpenSearchVectorTypeMethod .Parameters > {
252
287
@ Override
253
- public void validate (ValidationErrorCollector errorCollector , OpenSearchVectorTypeMethod .Parameters expected ,
288
+ protected String propertyName () {
289
+ return "parameters" ;
290
+ }
291
+
292
+ @ Override
293
+ public void doValidate (ValidationErrorCollector errorCollector , OpenSearchVectorTypeMethod .Parameters expected ,
254
294
OpenSearchVectorTypeMethod .Parameters actual ) {
255
295
LeafValidators .EQUAL .validate (
256
- errorCollector , ValidationContextType .MAPPING_ATTRIBUTE , "method.parameters. m" ,
296
+ errorCollector , ValidationContextType .MAPPING_ATTRIBUTE , "m" ,
257
297
expected .getM (), actual .getM ()
258
298
);
259
299
260
300
LeafValidators .EQUAL .validate (
261
- errorCollector , ValidationContextType .MAPPING_ATTRIBUTE , "method.parameters. ef_construction" ,
301
+ errorCollector , ValidationContextType .MAPPING_ATTRIBUTE , "ef_construction" ,
262
302
expected .getEfConstruction (),
263
303
actual .getEfConstruction ()
264
304
);
305
+ }
306
+
307
+ @ Override
308
+ protected Map <String , JsonElement > expectedMappingExtraAttributes (OpenSearchVectorTypeMethod .Parameters expected ) {
309
+ return expected .getExtraAttributes ();
310
+ }
265
311
312
+ @ Override
313
+ protected Map <String , JsonElement > actualMappingExtraAttributes (OpenSearchVectorTypeMethod .Parameters actual ) {
314
+ return actual .getExtraAttributes ();
266
315
}
267
316
}
317
+
318
+ abstract static class AbstractVectorAttributesValidator <T > implements Validator <T > {
319
+ private final Validator <JsonElement > extraAttributeValidator = new JsonElementValidator ( new JsonElementEquivalence () );
320
+
321
+ @ Override
322
+ public final void validate (ValidationErrorCollector errorCollector , T expected , T actual ) {
323
+ errorCollector .push ( ValidationContextType .MAPPING_ATTRIBUTE , propertyName () );
324
+ try {
325
+ doValidate ( errorCollector , expected , actual );
326
+
327
+ extraAttributeValidator .validateAllIgnoreUnexpected (
328
+ errorCollector , ValidationContextType .CUSTOM_INDEX_MAPPING_ATTRIBUTE ,
329
+ ElasticsearchValidationMessages .INSTANCE .customIndexMappingAttributeMissing (),
330
+ expectedMappingExtraAttributes ( expected ), actualMappingExtraAttributes ( actual )
331
+ );
332
+ }
333
+ finally {
334
+ errorCollector .pop ();
335
+ }
336
+ }
337
+
338
+ protected abstract String propertyName ();
339
+
340
+ protected abstract void doValidate (ValidationErrorCollector errorCollector , T expected , T actual );
341
+
342
+ protected abstract Map <String , JsonElement > expectedMappingExtraAttributes (T expected );
343
+
344
+ protected abstract Map <String , JsonElement > actualMappingExtraAttributes (T actual );
345
+ }
268
346
}
0 commit comments