/** * Return all searchable properties of the given description. Complex properties * {@link TypeName#PODO} and {@link TypeName#COLLECTION} are not returned, but their inner * primitive type leaf properties up to a configurable level are. They are returned in * {@link QuerySpecification} format. * * @see {@link QuerySpecification#buildCompositeFieldName(String...)} */ public static Set<String> getExpandedQueryPropertyNames(ServiceDocumentDescription description) { if (description == null) { throw new IllegalArgumentException("description is required"); } return getExpandedQueryPropertyNames(description.propertyDescriptions, MAX_NEST_LEVEL_EXPAND_PROPERTY); }
private static Set<String> getExpandedQueryPropertyNames( Map<String, PropertyDescription> propertyDescriptions, int complexFieldNestLevel) { Set<String> result = new HashSet<>(); for (Entry<String, PropertyDescription> entry : propertyDescriptions.entrySet()) { result.addAll(getExpandedQueryPropertyNames(entry.getKey(), entry.getValue(), complexFieldNestLevel)); } return result; }
Set<String> innerPropertyNames = getExpandedQueryPropertyNames( pd.fieldDescriptions, complexFieldNestLevel - 1); Set<String> innerPropertyNames = getExpandedQueryPropertyNames( QuerySpecification.COLLECTION_FIELD_SUFFIX, pd.elementDescription, complexFieldNestLevel - 1);
@Test public void testGetMultiLevelNestedQueryPropertyNames() throws Throwable { ServiceDocumentDescription desc = Builder.create().buildDescription( ComplexServiceState.class); Set<String> queryPropertyNames = QueryTaskUtils.getExpandedQueryPropertyNames(desc); Set<String> expectedPropertyNames = new HashSet<>(); expectedPropertyNames.add("name"); expectedPropertyNames.add("innerServices.item.nameInner"); expectedPropertyNames.add("singleInnerService.nameInner"); expectedPropertyNames.add("singleInnerService.singleInnerService.nameSecondInner"); assertEquals(expectedPropertyNames, queryPropertyNames); }
@Test public void testGetQueryPropertyNames() throws Throwable { ServiceDocumentDescription desc = Builder.create().buildDescription( ExampleServiceState.class); Set<String> queryPropertyNames = QueryTaskUtils.getExpandedQueryPropertyNames(desc); Set<String> expectedPropertyNames = new HashSet<>(); expectedPropertyNames.add(ExampleServiceState.FIELD_NAME_COUNTER); expectedPropertyNames.add(ExampleServiceState.FIELD_NAME_SORTED_COUNTER); expectedPropertyNames.add(ExampleServiceState.FIELD_NAME_NAME); expectedPropertyNames.add(ExampleServiceState.FIELD_NAME_ID); expectedPropertyNames.add(ExampleServiceState.FIELD_NAME_REQUIRED); expectedPropertyNames.add(ExampleServiceState.FIELD_NAME_KEY_VALUES); expectedPropertyNames.add(ExampleServiceState.FIELD_NAME_IS_FROM_MIGRATION); expectedPropertyNames.add("tags.item"); assertEquals(expectedPropertyNames, queryPropertyNames); }
@Test public void testGetQueryPropertyNames() throws Throwable { ServiceDocumentDescription desc = Builder.create().buildDescription( ExampleServiceState.class); Set<String> queryPropertyNames = QueryTaskUtils.getExpandedQueryPropertyNames(desc); Set<String> expectedPropertyNames = new HashSet<>(); expectedPropertyNames.add(ExampleServiceState.FIELD_NAME_COUNTER); expectedPropertyNames.add(ExampleServiceState.FIELD_NAME_SORTED_COUNTER); expectedPropertyNames.add(ExampleServiceState.FIELD_NAME_NAME); expectedPropertyNames.add(ExampleServiceState.FIELD_NAME_ID); expectedPropertyNames.add(ExampleServiceState.FIELD_NAME_REQUIRED); expectedPropertyNames.add(ExampleServiceState.FIELD_NAME_KEY_VALUES); expectedPropertyNames.add(ExampleServiceState.FIELD_NAME_IS_FROM_MIGRATION); expectedPropertyNames.add("tags.item"); assertEquals(expectedPropertyNames, queryPropertyNames); }
@Test public void testGetMultiLevelNestedQueryPropertyNames() throws Throwable { ServiceDocumentDescription desc = Builder.create().buildDescription( ComplexServiceState.class); Set<String> queryPropertyNames = QueryTaskUtils.getExpandedQueryPropertyNames(desc); Set<String> expectedPropertyNames = new HashSet<>(); expectedPropertyNames.add("name"); expectedPropertyNames.add("innerServices.item.nameInner"); expectedPropertyNames.add("singleInnerService.nameInner"); expectedPropertyNames.add("singleInnerService.singleInnerService.nameSecondInner"); assertEquals(expectedPropertyNames, queryPropertyNames); }
.getExpandedQueryPropertyNames(desc); Query q = new ODataQueryVisitor(expandedQueryPropertyNames).toQuery(hostsFilter); if (q != null) {
private void handleGetOdataCompletion(Operation op) { Set<String> expandedQueryPropertyNames = QueryTaskUtils .getExpandedQueryPropertyNames(this.childTemplate.documentDescription);
.getExpandedQueryPropertyNames(desc); Query q = new ODataQueryVisitor(expandedQueryPropertyNames).toQuery(filter); if (q != null) {