Search in sources :

Example 1 with NodeTransformer

use of org.hisp.dhis.node.NodeTransformer in project dhis2-core by dhis2.

the class DefaultFieldFilterService method init.

@PostConstruct
public void init() {
    ImmutableMap.Builder<String, Preset> presetBuilder = ImmutableMap.builder();
    for (Preset preset : Preset.values()) {
        presetBuilder.put(preset.getName(), preset);
    }
    presets = presetBuilder.build();
    ImmutableMap.Builder<String, NodeTransformer> transformerBuilder = ImmutableMap.builder();
    for (NodeTransformer transformer : nodeTransformers) {
        transformerBuilder.put(transformer.name(), transformer);
    }
    transformers = transformerBuilder.build();
    baseIdentifiableIdProperty = schemaService.getDynamicSchema(BaseIdentifiableObject.class).getProperty("id");
}
Also used : NodeTransformer(org.hisp.dhis.node.NodeTransformer) Preset(org.hisp.dhis.node.Preset) ImmutableMap(com.google.common.collect.ImmutableMap) PostConstruct(javax.annotation.PostConstruct)

Example 2 with NodeTransformer

use of org.hisp.dhis.node.NodeTransformer in project dhis2-core by dhis2.

the class DefaultFieldFilterService method updateFields.

private void updateFields(FieldMap fieldMap, Class<?> klass, boolean expandOnly) {
    if (fieldMap.isEmpty()) {
        return;
    }
    Schema schema = schemaService.getDynamicSchema(klass);
    List<String> cleanupFields = Lists.newArrayList();
    for (String fieldKey : Sets.newHashSet(fieldMap.keySet())) {
        Collection<Property> properties = schema.getReadableProperties().values();
        if ("*".equals(fieldKey)) {
            properties.stream().filter(property -> !fieldMap.containsKey(property.key())).forEach(property -> fieldMap.put(property.key(), new FieldMap()));
            cleanupFields.add(fieldKey);
        } else if (":persisted".equals(fieldKey)) {
            properties.stream().filter(property -> !fieldMap.containsKey(property.key()) && property.isPersisted()).forEach(property -> fieldMap.put(property.key(), new FieldMap()));
            cleanupFields.add(fieldKey);
        } else if (":owner".equals(fieldKey)) {
            properties.stream().filter(property -> !fieldMap.containsKey(property.key()) && property.isPersisted() && property.isOwner()).forEach(property -> fieldMap.put(property.key(), new FieldMap()));
            cleanupFields.add(fieldKey);
        } else if (fieldKey.startsWith(":")) {
            Preset preset = presets.get(fieldKey.substring(1));
            if (preset == null) {
                continue;
            }
            List<String> fields = preset.getFields();
            fields.stream().filter(field -> !fieldMap.containsKey(field)).forEach(field -> fieldMap.put(field, new FieldMap()));
            cleanupFields.add(fieldKey);
        } else if (fieldKey.startsWith("!") && !expandOnly) {
            cleanupFields.add(fieldKey);
        } else if (fieldKey.contains("::") || fieldKey.contains("|") || fieldKey.contains("~")) {
            Matcher matcher = FIELD_PATTERN.matcher(fieldKey);
            if (!matcher.find()) {
                continue;
            }
            String fieldName = matcher.group("field");
            FieldMap value = new FieldMap();
            value.putAll(fieldMap.get(fieldKey));
            matcher = TRANSFORMER_PATTERN.matcher(fieldKey);
            while (matcher.find()) {
                String nameMatch = matcher.group("name");
                String argsMatch = matcher.group("args");
                if (transformers.containsKey(nameMatch)) {
                    NodeTransformer transformer = transformers.get(nameMatch);
                    List<String> args = argsMatch == null ? new ArrayList<>() : Lists.newArrayList(argsMatch.split(";"));
                    value.getPipeline().addTransformer(transformer, args);
                }
            }
            fieldMap.put(fieldName, value);
            cleanupFields.add(fieldKey);
        }
    }
    for (String field : cleanupFields) {
        fieldMap.remove(field);
        if (!expandOnly) {
            fieldMap.remove(field.substring(1));
        }
    }
}
Also used : ReflectionUtils(org.hisp.dhis.system.util.ReflectionUtils) Preheat(org.hisp.dhis.preheat.Preheat) Autowired(org.springframework.beans.factory.annotation.Autowired) StringUtils(org.apache.commons.lang3.StringUtils) EmbeddedObject(org.hisp.dhis.common.EmbeddedObject) NodeTransformer(org.hisp.dhis.node.NodeTransformer) Matcher(java.util.regex.Matcher) Preset(org.hisp.dhis.node.Preset) UserService(org.hisp.dhis.user.UserService) ImmutableMap(com.google.common.collect.ImmutableMap) BaseIdentifiableObject(org.hisp.dhis.common.BaseIdentifiableObject) Collection(java.util.Collection) Set(java.util.Set) SchemaService(org.hisp.dhis.schema.SchemaService) Collectors(java.util.stream.Collectors) Property(org.hisp.dhis.schema.Property) Sets(com.google.common.collect.Sets) Objects(java.util.Objects) SimpleNode(org.hisp.dhis.node.types.SimpleNode) List(java.util.List) Slf4j(lombok.extern.slf4j.Slf4j) Stream(java.util.stream.Stream) ComplexNode(org.hisp.dhis.node.types.ComplexNode) AttributeService(org.hisp.dhis.attribute.AttributeService) UserGroupService(org.hisp.dhis.user.UserGroupService) UserAccess(org.hisp.dhis.user.UserAccess) CollectionUtils(org.springframework.util.CollectionUtils) Modifier(java.lang.reflect.Modifier) Cache(org.hisp.dhis.cache.Cache) PostConstruct(javax.annotation.PostConstruct) AclService(org.hisp.dhis.security.acl.AclService) Schema(org.hisp.dhis.schema.Schema) Pattern(java.util.regex.Pattern) Joiner(com.google.common.base.Joiner) AttributeValue(org.hisp.dhis.attribute.AttributeValue) CollectionNode(org.hisp.dhis.node.types.CollectionNode) PropertyTransformer(org.hisp.dhis.schema.PropertyTransformer) Attribute(org.hisp.dhis.attribute.Attribute) ArrayList(java.util.ArrayList) HashSet(java.util.HashSet) AbstractNode(org.hisp.dhis.node.AbstractNode) Lists(com.google.common.collect.Lists) User(org.hisp.dhis.user.User) Nonnull(javax.annotation.Nonnull) IdentifiableObject(org.hisp.dhis.common.IdentifiableObject) Access(org.hisp.dhis.security.acl.Access) HibernateProxyUtils(org.hisp.dhis.hibernate.HibernateProxyUtils) Node(org.hisp.dhis.node.Node) Field(java.lang.reflect.Field) UserGroupAccess(org.hisp.dhis.user.UserGroupAccess) Introspector.decapitalize(java.beans.Introspector.decapitalize) CacheProvider(org.hisp.dhis.cache.CacheProvider) Component(org.springframework.stereotype.Component) CurrentUserService(org.hisp.dhis.user.CurrentUserService) PeriodType(org.hisp.dhis.period.PeriodType) Collections(java.util.Collections) NodeTransformer(org.hisp.dhis.node.NodeTransformer) Matcher(java.util.regex.Matcher) Preset(org.hisp.dhis.node.Preset) Schema(org.hisp.dhis.schema.Schema) ArrayList(java.util.ArrayList) List(java.util.List) ArrayList(java.util.ArrayList) Property(org.hisp.dhis.schema.Property)

Example 3 with NodeTransformer

use of org.hisp.dhis.node.NodeTransformer in project dhis2-core by dhis2.

the class DefaultFieldFilterServiceTest method setUp.

@BeforeEach
public void setUp() {
    final Set<NodeTransformer> nodeTransformers = new HashSet<>();
    nodeTransformers.add(new PluckNodeTransformer());
    final SchemaService schemaService = new DefaultSchemaService(new DefaultPropertyIntrospectorService(new JacksonPropertyIntrospector()), sessionFactory);
    CacheProvider cacheProvider = mock(CacheProvider.class);
    when(cacheProvider.createPropertyTransformerCache()).thenReturn(new NoOpCache<>());
    service = new DefaultFieldFilterService(new DefaultFieldParser(), schemaService, aclService, currentUserService, attributeService, cacheProvider, userGroupService, userService, nodeTransformers);
    service.init();
}
Also used : NodeTransformer(org.hisp.dhis.node.NodeTransformer) PluckNodeTransformer(org.hisp.dhis.node.transformers.PluckNodeTransformer) DefaultSchemaService(org.hisp.dhis.schema.DefaultSchemaService) SchemaService(org.hisp.dhis.schema.SchemaService) PluckNodeTransformer(org.hisp.dhis.node.transformers.PluckNodeTransformer) DefaultSchemaService(org.hisp.dhis.schema.DefaultSchemaService) CacheProvider(org.hisp.dhis.cache.CacheProvider) JacksonPropertyIntrospector(org.hisp.dhis.schema.introspection.JacksonPropertyIntrospector) HashSet(java.util.HashSet) DefaultPropertyIntrospectorService(org.hisp.dhis.schema.DefaultPropertyIntrospectorService) BeforeEach(org.junit.jupiter.api.BeforeEach)

Aggregations

NodeTransformer (org.hisp.dhis.node.NodeTransformer)3 ImmutableMap (com.google.common.collect.ImmutableMap)2 HashSet (java.util.HashSet)2 PostConstruct (javax.annotation.PostConstruct)2 CacheProvider (org.hisp.dhis.cache.CacheProvider)2 Preset (org.hisp.dhis.node.Preset)2 Joiner (com.google.common.base.Joiner)1 Lists (com.google.common.collect.Lists)1 Sets (com.google.common.collect.Sets)1 Introspector.decapitalize (java.beans.Introspector.decapitalize)1 Field (java.lang.reflect.Field)1 Modifier (java.lang.reflect.Modifier)1 ArrayList (java.util.ArrayList)1 Collection (java.util.Collection)1 Collections (java.util.Collections)1 List (java.util.List)1 Objects (java.util.Objects)1 Set (java.util.Set)1 Matcher (java.util.regex.Matcher)1 Pattern (java.util.regex.Pattern)1