Search in sources :

Example 1 with Schema

use of org.hisp.dhis.schema.Schema in project dhis2-core by dhis2.

the class DefaultRenderService method fromMetadata.

@Override
@SuppressWarnings("unchecked")
public Map<Class<? extends IdentifiableObject>, List<IdentifiableObject>> fromMetadata(InputStream inputStream, RenderFormat format) throws IOException {
    Map<Class<? extends IdentifiableObject>, List<IdentifiableObject>> map = new HashMap<>();
    ObjectMapper mapper;
    if (RenderFormat.JSON == format) {
        mapper = jsonMapper;
    } else if (RenderFormat.XML == format) {
        throw new IllegalArgumentException("XML format is not supported.");
    } else {
        return map;
    }
    JsonNode rootNode = mapper.readTree(inputStream);
    Iterator<String> fieldNames = rootNode.fieldNames();
    while (fieldNames.hasNext()) {
        String fieldName = fieldNames.next();
        JsonNode node = rootNode.get(fieldName);
        Schema schema = schemaService.getSchemaByPluralName(fieldName);
        if (schema == null || !schema.isIdentifiableObject()) {
            log.info("Skipping unknown property '" + fieldName + "'.");
            continue;
        }
        if (!schema.isMetadata()) {
            log.debug("Skipping non-metadata property `" + fieldName + "`.");
            continue;
        }
        List<IdentifiableObject> collection = new ArrayList<>();
        for (JsonNode item : node) {
            IdentifiableObject value = mapper.treeToValue(item, (Class<? extends IdentifiableObject>) schema.getKlass());
            if (value != null)
                collection.add(value);
        }
        map.put((Class<? extends IdentifiableObject>) schema.getKlass(), collection);
    }
    return map;
}
Also used : HashMap(java.util.HashMap) Schema(org.hisp.dhis.schema.Schema) ArrayList(java.util.ArrayList) JsonNode(com.fasterxml.jackson.databind.JsonNode) IdentifiableObject(org.hisp.dhis.common.IdentifiableObject) ArrayList(java.util.ArrayList) List(java.util.List) ObjectMapper(com.fasterxml.jackson.databind.ObjectMapper)

Example 2 with Schema

use of org.hisp.dhis.schema.Schema in project dhis2-core by dhis2.

the class DefaultQueryParser method getProperty.

@Override
public Property getProperty(Schema schema, String path) throws QueryParserException {
    String[] paths = path.split("\\.");
    Schema currentSchema = schema;
    Property currentProperty = null;
    for (int i = 0; i < paths.length; i++) {
        if (!currentSchema.haveProperty(paths[i])) {
            return null;
        }
        currentProperty = currentSchema.getProperty(paths[i]);
        if (currentProperty == null) {
            throw new QueryParserException("Unknown path property: " + paths[i] + " (" + path + ")");
        }
        if ((currentProperty.isSimple() && !currentProperty.isCollection()) && i != (paths.length - 1)) {
            throw new QueryParserException("Simple type was found before finished parsing path expression, please check your path string.");
        }
        if (currentProperty.isCollection()) {
            currentSchema = schemaService.getDynamicSchema(currentProperty.getItemKlass());
        } else {
            currentSchema = schemaService.getDynamicSchema(currentProperty.getKlass());
        }
    }
    return currentProperty;
}
Also used : Schema(org.hisp.dhis.schema.Schema) Property(org.hisp.dhis.schema.Property)

Example 3 with Schema

use of org.hisp.dhis.schema.Schema in project dhis2-core by dhis2.

the class DefaultQueryPlanner method getQueryPath.

@Override
public QueryPath getQueryPath(Schema schema, String path) {
    Schema curSchema = schema;
    Property curProperty = null;
    boolean persisted = true;
    List<String> alias = new ArrayList<>();
    String[] pathComponents = path.split("\\.");
    if (pathComponents.length == 0) {
        return null;
    }
    for (int idx = 0; idx < pathComponents.length; idx++) {
        String name = pathComponents[idx];
        curProperty = curSchema.getProperty(name);
        if (curProperty == null) {
            throw new RuntimeException("Invalid path property: " + name);
        }
        if (!curProperty.isPersisted()) {
            persisted = false;
        }
        if ((!curProperty.isSimple() && idx == pathComponents.length - 1)) {
            return new QueryPath(curProperty, persisted, alias.toArray(new String[] {}));
        }
        if (curProperty.isCollection()) {
            curSchema = schemaService.getDynamicSchema(curProperty.getItemKlass());
            alias.add(curProperty.getFieldName());
        } else if (!curProperty.isSimple()) {
            curSchema = schemaService.getDynamicSchema(curProperty.getKlass());
            alias.add(curProperty.getFieldName());
        } else {
            return new QueryPath(curProperty, persisted, alias.toArray(new String[] {}));
        }
    }
    return new QueryPath(curProperty, persisted, alias.toArray(new String[] {}));
}
Also used : Schema(org.hisp.dhis.schema.Schema) ArrayList(java.util.ArrayList) Property(org.hisp.dhis.schema.Property)

Example 4 with Schema

use of org.hisp.dhis.schema.Schema in project dhis2-core by dhis2.

the class CategoryOptionComboSchemaDescriptor method getSchema.

@Override
public Schema getSchema() {
    Schema schema = new Schema(DataElementCategoryOptionCombo.class, SINGULAR, PLURAL);
    schema.setRelativeApiEndpoint(API_ENDPOINT);
    schema.setOrder(1190);
    schema.getAuthorities().add(new Authority(AuthorityType.CREATE, Lists.newArrayList("F_CATEGORY_COMBO_PUBLIC_ADD", "F_CATEGORY_COMBO_PRIVATE_ADD")));
    schema.getAuthorities().add(new Authority(AuthorityType.DELETE, Lists.newArrayList("F_CATEGORY_COMBO_DELETE")));
    return schema;
}
Also used : Authority(org.hisp.dhis.security.Authority) Schema(org.hisp.dhis.schema.Schema)

Example 5 with Schema

use of org.hisp.dhis.schema.Schema in project dhis2-core by dhis2.

the class DefaultPreheatService method preheat.

@Override
@SuppressWarnings("unchecked")
public Preheat preheat(PreheatParams params) {
    Timer timer = new SystemTimer().start();
    Preheat preheat = new Preheat();
    preheat.setUser(params.getUser());
    preheat.setDefaults(manager.getDefaults());
    if (preheat.getUser() == null) {
        preheat.setUser(currentUserService.getCurrentUser());
    }
    preheat.put(PreheatIdentifier.UID, preheat.getUser());
    preheat.put(PreheatIdentifier.CODE, preheat.getUser());
    for (Class<? extends IdentifiableObject> klass : params.getObjects().keySet()) {
        params.getObjects().get(klass).stream().filter(identifiableObject -> StringUtils.isEmpty(identifiableObject.getUid())).forEach(identifiableObject -> ((BaseIdentifiableObject) identifiableObject).setUid(CodeGenerator.generateUid()));
    }
    Map<Class<? extends IdentifiableObject>, List<IdentifiableObject>> uniqueCollectionMap = new HashMap<>();
    Set<Class<? extends IdentifiableObject>> klasses = new HashSet<>(params.getObjects().keySet());
    if (PreheatMode.ALL == params.getPreheatMode()) {
        if (params.getClasses().isEmpty()) {
            schemaService.getMetadataSchemas().stream().filter(Schema::isIdentifiableObject).forEach(schema -> params.getClasses().add((Class<? extends IdentifiableObject>) schema.getKlass()));
        }
        for (Class<? extends IdentifiableObject> klass : params.getClasses()) {
            Query query = Query.from(schemaService.getDynamicSchema(klass));
            query.setUser(preheat.getUser());
            List<? extends IdentifiableObject> objects = queryService.query(query);
            if (PreheatIdentifier.UID == params.getPreheatIdentifier() || PreheatIdentifier.AUTO == params.getPreheatIdentifier()) {
                preheat.put(PreheatIdentifier.UID, objects);
            }
            if (PreheatIdentifier.CODE == params.getPreheatIdentifier() || PreheatIdentifier.AUTO == params.getPreheatIdentifier()) {
                preheat.put(PreheatIdentifier.CODE, objects);
            }
            if (klasses.contains(klass) && !objects.isEmpty()) {
                uniqueCollectionMap.put(klass, new ArrayList<>(objects));
            }
        }
    } else if (PreheatMode.REFERENCE == params.getPreheatMode()) {
        Map<PreheatIdentifier, Map<Class<? extends IdentifiableObject>, Set<String>>> references = collectReferences(params.getObjects());
        Map<Class<? extends IdentifiableObject>, Set<String>> uidMap = references.get(PreheatIdentifier.UID);
        Map<Class<? extends IdentifiableObject>, Set<String>> codeMap = references.get(PreheatIdentifier.CODE);
        if (uidMap != null && (PreheatIdentifier.UID == params.getPreheatIdentifier() || PreheatIdentifier.AUTO == params.getPreheatIdentifier())) {
            for (Class<? extends IdentifiableObject> klass : uidMap.keySet()) {
                List<List<String>> identifiers = Lists.partition(Lists.newArrayList(uidMap.get(klass)), 20000);
                if (!identifiers.isEmpty()) {
                    for (List<String> ids : identifiers) {
                        Query query = Query.from(schemaService.getDynamicSchema(klass));
                        query.setUser(preheat.getUser());
                        query.add(Restrictions.in("id", ids));
                        List<? extends IdentifiableObject> objects = queryService.query(query);
                        preheat.put(PreheatIdentifier.UID, objects);
                    }
                }
            }
        }
        if (codeMap != null && (PreheatIdentifier.CODE == params.getPreheatIdentifier() || PreheatIdentifier.AUTO == params.getPreheatIdentifier())) {
            for (Class<? extends IdentifiableObject> klass : codeMap.keySet()) {
                List<List<String>> identifiers = Lists.partition(Lists.newArrayList(codeMap.get(klass)), 20000);
                if (!identifiers.isEmpty()) {
                    for (List<String> ids : identifiers) {
                        Query query = Query.from(schemaService.getDynamicSchema(klass));
                        query.setUser(preheat.getUser());
                        query.add(Restrictions.in("code", ids));
                        List<? extends IdentifiableObject> objects = queryService.query(query);
                        preheat.put(PreheatIdentifier.CODE, objects);
                    }
                }
            }
        }
        for (Class<? extends IdentifiableObject> klass : klasses) {
            Query query = Query.from(schemaService.getDynamicSchema(klass));
            query.setUser(preheat.getUser());
            List<? extends IdentifiableObject> objects = queryService.query(query);
            if (!objects.isEmpty()) {
                uniqueCollectionMap.put(klass, new ArrayList<>(objects));
            }
        }
    }
    if (uniqueCollectionMap.containsKey(User.class)) {
        List<IdentifiableObject> userCredentials = new ArrayList<>();
        for (IdentifiableObject identifiableObject : uniqueCollectionMap.get(User.class)) {
            User user = (User) identifiableObject;
            if (user.getUserCredentials() != null) {
                userCredentials.add(user.getUserCredentials());
            }
        }
        uniqueCollectionMap.put(UserCredentials.class, userCredentials);
    }
    preheat.setUniquenessMap(collectUniqueness(uniqueCollectionMap));
    // add preheat placeholders for objects that will be created and set mandatory/unique attributes
    for (Class<? extends IdentifiableObject> klass : params.getObjects().keySet()) {
        List<IdentifiableObject> objects = params.getObjects().get(klass);
        preheat.put(params.getPreheatIdentifier(), objects);
    }
    handleAttributes(params.getObjects(), preheat);
    handleSecurity(params.getObjects(), params.getPreheatIdentifier(), preheat);
    periodStore.getAll().forEach(period -> preheat.getPeriodMap().put(period.getName(), period));
    periodStore.getAllPeriodTypes().forEach(periodType -> preheat.getPeriodTypeMap().put(periodType.getName(), periodType));
    log.info("(" + preheat.getUsername() + ") Import:Preheat[" + params.getPreheatMode() + "] took " + timer.toString());
    return preheat;
}
Also used : ReflectionUtils(org.hisp.dhis.system.util.ReflectionUtils) BaseAnalyticalObject(org.hisp.dhis.common.BaseAnalyticalObject) Restrictions(org.hisp.dhis.query.Restrictions) PeriodService(org.hisp.dhis.period.PeriodService) MergeService(org.hisp.dhis.schema.MergeService) Autowired(org.springframework.beans.factory.annotation.Autowired) TrackedEntityAttributeDimension(org.hisp.dhis.trackedentity.TrackedEntityAttributeDimension) StringUtils(org.apache.commons.lang3.StringUtils) MergeParams(org.hisp.dhis.schema.MergeParams) EmbeddedObject(org.hisp.dhis.common.EmbeddedObject) CategoryDimension(org.hisp.dhis.dataelement.CategoryDimension) UserCredentials(org.hisp.dhis.user.UserCredentials) Map(java.util.Map) Period(org.hisp.dhis.period.Period) Query(org.hisp.dhis.query.Query) BaseIdentifiableObject(org.hisp.dhis.common.BaseIdentifiableObject) UserGroup(org.hisp.dhis.user.UserGroup) Collection(java.util.Collection) Set(java.util.Set) SchemaService(org.hisp.dhis.schema.SchemaService) QueryService(org.hisp.dhis.query.QueryService) Property(org.hisp.dhis.schema.Property) Collectors(java.util.stream.Collectors) DataDimensionItem(org.hisp.dhis.common.DataDimensionItem) List(java.util.List) AttributeService(org.hisp.dhis.attribute.AttributeService) Schema(org.hisp.dhis.schema.Schema) LogFactory(org.apache.commons.logging.LogFactory) AnalyticalObject(org.hisp.dhis.common.AnalyticalObject) PropertyType(org.hisp.dhis.schema.PropertyType) DataSetElement(org.hisp.dhis.dataset.DataSetElement) HashMap(java.util.HashMap) Attribute(org.hisp.dhis.attribute.Attribute) ArrayList(java.util.ArrayList) HashSet(java.util.HashSet) Lists(com.google.common.collect.Lists) IdentifiableObjectManager(org.hisp.dhis.common.IdentifiableObjectManager) User(org.hisp.dhis.user.User) IdentifiableObject(org.hisp.dhis.common.IdentifiableObject) SystemTimer(org.hisp.dhis.commons.timer.SystemTimer) DataElementOperand(org.hisp.dhis.dataelement.DataElementOperand) TrackedEntityProgramIndicatorDimension(org.hisp.dhis.trackedentity.TrackedEntityProgramIndicatorDimension) Timer(org.hisp.dhis.commons.timer.Timer) CollectionUtils(org.hisp.dhis.commons.collection.CollectionUtils) CurrentUserService(org.hisp.dhis.user.CurrentUserService) PeriodStore(org.hisp.dhis.period.PeriodStore) TrackedEntityDataElementDimension(org.hisp.dhis.trackedentity.TrackedEntityDataElementDimension) Log(org.apache.commons.logging.Log) CodeGenerator(org.hisp.dhis.common.CodeGenerator) Transactional(org.springframework.transaction.annotation.Transactional) Set(java.util.Set) HashSet(java.util.HashSet) User(org.hisp.dhis.user.User) Query(org.hisp.dhis.query.Query) HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) BaseIdentifiableObject(org.hisp.dhis.common.BaseIdentifiableObject) IdentifiableObject(org.hisp.dhis.common.IdentifiableObject) SystemTimer(org.hisp.dhis.commons.timer.SystemTimer) Timer(org.hisp.dhis.commons.timer.Timer) List(java.util.List) ArrayList(java.util.ArrayList) Map(java.util.Map) HashMap(java.util.HashMap) SystemTimer(org.hisp.dhis.commons.timer.SystemTimer) HashSet(java.util.HashSet)

Aggregations

Schema (org.hisp.dhis.schema.Schema)149 Authority (org.hisp.dhis.security.Authority)65 Property (org.hisp.dhis.schema.Property)29 ArrayList (java.util.ArrayList)20 IdentifiableObject (org.hisp.dhis.common.IdentifiableObject)20 Test (org.junit.Test)16 Collection (java.util.Collection)14 List (java.util.List)13 HashMap (java.util.HashMap)12 DhisSpringTest (org.hisp.dhis.DhisSpringTest)12 EmbeddedObject (org.hisp.dhis.common.EmbeddedObject)12 Map (java.util.Map)10 BaseIdentifiableObject (org.hisp.dhis.common.BaseIdentifiableObject)10 User (org.hisp.dhis.user.User)10 AnalyticalObject (org.hisp.dhis.common.AnalyticalObject)9 BaseAnalyticalObject (org.hisp.dhis.common.BaseAnalyticalObject)9 UserCredentials (org.hisp.dhis.user.UserCredentials)9 HashSet (java.util.HashSet)8 Set (java.util.Set)8 Log (org.apache.commons.logging.Log)8