Search in sources :

Example 1 with StringMatcher

use of org.springframework.data.domain.ExampleMatcher.StringMatcher in project spring-data-mongodb by spring-projects.

the class MongoExampleMapper method applyPropertySpecs.

private void applyPropertySpecs(String path, Document source, Class<?> probeType, ExampleMatcherAccessor exampleSpecAccessor) {
    if (source == null) {
        return;
    }
    Iterator<Map.Entry<String, Object>> iter = source.entrySet().iterator();
    while (iter.hasNext()) {
        Map.Entry<String, Object> entry = iter.next();
        String propertyPath = StringUtils.hasText(path) ? path + "." + entry.getKey() : entry.getKey();
        String mappedPropertyPath = getMappedPropertyPath(propertyPath, probeType);
        if (isEmptyIdProperty(entry)) {
            iter.remove();
            continue;
        }
        if (exampleSpecAccessor.isIgnoredPath(propertyPath) || exampleSpecAccessor.isIgnoredPath(mappedPropertyPath)) {
            iter.remove();
            continue;
        }
        StringMatcher stringMatcher = exampleSpecAccessor.getDefaultStringMatcher();
        Object value = entry.getValue();
        boolean ignoreCase = exampleSpecAccessor.isIgnoreCaseEnabled();
        if (exampleSpecAccessor.hasPropertySpecifiers()) {
            mappedPropertyPath = exampleSpecAccessor.hasPropertySpecifier(propertyPath) ? propertyPath : getMappedPropertyPath(propertyPath, probeType);
            stringMatcher = exampleSpecAccessor.getStringMatcherForPath(mappedPropertyPath);
            ignoreCase = exampleSpecAccessor.isIgnoreCaseForPath(mappedPropertyPath);
        }
        // TODO: should a PropertySpecifier outrule the later on string matching?
        if (exampleSpecAccessor.hasPropertySpecifier(mappedPropertyPath)) {
            PropertyValueTransformer valueTransformer = exampleSpecAccessor.getValueTransformerForPath(mappedPropertyPath);
            value = valueTransformer.convert(value);
            if (value == null) {
                iter.remove();
                continue;
            }
            entry.setValue(value);
        }
        if (entry.getValue() instanceof String) {
            applyStringMatcher(entry, stringMatcher, ignoreCase);
        } else if (entry.getValue() instanceof Document) {
            applyPropertySpecs(propertyPath, (Document) entry.getValue(), probeType, exampleSpecAccessor);
        }
    }
}
Also used : Entry(java.util.Map.Entry) PropertyValueTransformer(org.springframework.data.domain.ExampleMatcher.PropertyValueTransformer) StringMatcher(org.springframework.data.domain.ExampleMatcher.StringMatcher) Document(org.bson.Document) Map(java.util.Map)

Aggregations

Map (java.util.Map)1 Entry (java.util.Map.Entry)1 Document (org.bson.Document)1 PropertyValueTransformer (org.springframework.data.domain.ExampleMatcher.PropertyValueTransformer)1 StringMatcher (org.springframework.data.domain.ExampleMatcher.StringMatcher)1