Search in sources :

Example 1 with CategoryDimension

use of org.hisp.dhis.category.CategoryDimension in project dhis2-core by dhis2.

the class DefaultAnalyticalObjectImportHandler method handleCategoryDimensions.

private void handleCategoryDimensions(Session session, Schema schema, BaseAnalyticalObject analyticalObject, ObjectBundle bundle) {
    if (!schema.havePersistedProperty("categoryDimensions"))
        return;
    for (CategoryDimension categoryDimension : analyticalObject.getCategoryDimensions()) {
        if (categoryDimension == null) {
            continue;
        }
        categoryDimension.setDimension(bundle.getPreheat().get(bundle.getPreheatIdentifier(), categoryDimension.getDimension()));
        List<CategoryOption> categoryOptions = new ArrayList<>(categoryDimension.getItems());
        categoryDimension.getItems().clear();
        categoryOptions.forEach(co -> {
            CategoryOption categoryOption = bundle.getPreheat().get(bundle.getPreheatIdentifier(), co);
            if (categoryOption != null)
                categoryDimension.getItems().add(categoryOption);
        });
        preheatService.connectReferences(categoryDimension, bundle.getPreheat(), bundle.getPreheatIdentifier());
        session.save(categoryDimension);
    }
}
Also used : CategoryDimension(org.hisp.dhis.category.CategoryDimension) ArrayList(java.util.ArrayList) CategoryOption(org.hisp.dhis.category.CategoryOption)

Example 2 with CategoryDimension

use of org.hisp.dhis.category.CategoryDimension in project dhis2-core by dhis2.

the class DefaultPreheatService method collectAnalyticalObjectReferences.

/**
 * Collect references for {@link AnalyticalObject}.
 *
 * @param map the mapping between {@link PreheatIdentifier} and object
 *        identifiers.
 * @param object the object.
 */
private void collectAnalyticalObjectReferences(Map<PreheatIdentifier, Map<Class<? extends IdentifiableObject>, Set<String>>> map, Object object) {
    if (object instanceof AnalyticalObject) {
        BaseAnalyticalObject analyticalObject = (BaseAnalyticalObject) object;
        List<DataDimensionItem> dataDimensionItems = analyticalObject.getDataDimensionItems();
        List<CategoryDimension> categoryDimensions = analyticalObject.getCategoryDimensions();
        List<TrackedEntityDataElementDimension> trackedEntityDataElementDimensions = analyticalObject.getDataElementDimensions();
        List<TrackedEntityAttributeDimension> attributeDimensions = analyticalObject.getAttributeDimensions();
        List<TrackedEntityProgramIndicatorDimension> programIndicatorDimensions = analyticalObject.getProgramIndicatorDimensions();
        CollectionUtils.nullSafeForEach(dataDimensionItems, dataDimensionItem -> {
            addIdentifiers(map, dataDimensionItem.getDimensionalItemObject());
            if (dataDimensionItem.getDataElementOperand() != null) {
                addIdentifiers(map, dataDimensionItem.getDataElementOperand().getDataElement());
                addIdentifiers(map, dataDimensionItem.getDataElementOperand().getCategoryOptionCombo());
            }
            if (dataDimensionItem.getReportingRate() != null) {
                addIdentifiers(map, dataDimensionItem.getReportingRate().getDataSet());
            }
            if (dataDimensionItem.getProgramDataElement() != null) {
                addIdentifiers(map, dataDimensionItem.getProgramDataElement().getDataElement());
                addIdentifiers(map, dataDimensionItem.getProgramDataElement().getProgram());
            }
            if (dataDimensionItem.getProgramAttribute() != null) {
                addIdentifiers(map, dataDimensionItem.getProgramAttribute().getAttribute());
                addIdentifiers(map, dataDimensionItem.getProgramAttribute().getProgram());
            }
        });
        CollectionUtils.nullSafeForEach(categoryDimensions, categoryDimension -> {
            addIdentifiers(map, categoryDimension.getDimension());
            categoryDimension.getItems().forEach(item -> addIdentifiers(map, item));
        });
        CollectionUtils.nullSafeForEach(trackedEntityDataElementDimensions, trackedEntityDataElementDimension -> {
            addIdentifiers(map, trackedEntityDataElementDimension.getDataElement());
            addIdentifiers(map, trackedEntityDataElementDimension.getLegendSet());
            addIdentifiers(map, trackedEntityDataElementDimension.getProgramStage());
        });
        CollectionUtils.nullSafeForEach(attributeDimensions, trackedEntityAttributeDimension -> {
            addIdentifiers(map, trackedEntityAttributeDimension.getAttribute());
            addIdentifiers(map, trackedEntityAttributeDimension.getLegendSet());
        });
        CollectionUtils.nullSafeForEach(programIndicatorDimensions, programIndicatorDimension -> {
            addIdentifiers(map, programIndicatorDimension.getProgramIndicator());
            addIdentifiers(map, programIndicatorDimension.getLegendSet());
        });
    }
}
Also used : TrackedEntityAttributeDimension(org.hisp.dhis.trackedentity.TrackedEntityAttributeDimension) BaseAnalyticalObject(org.hisp.dhis.common.BaseAnalyticalObject) CategoryDimension(org.hisp.dhis.category.CategoryDimension) TrackedEntityProgramIndicatorDimension(org.hisp.dhis.trackedentity.TrackedEntityProgramIndicatorDimension) DataDimensionItem(org.hisp.dhis.common.DataDimensionItem) TrackedEntityDataElementDimension(org.hisp.dhis.trackedentity.TrackedEntityDataElementDimension) BaseAnalyticalObject(org.hisp.dhis.common.BaseAnalyticalObject) AnalyticalObject(org.hisp.dhis.common.AnalyticalObject)

Example 3 with CategoryDimension

use of org.hisp.dhis.category.CategoryDimension in project dhis2-core by dhis2.

the class DefaultCascadeSharingService method handleCategoryDimension.

/**
 * Check if can merge sharing from given source to given analyticalObject's
 * {@link CategoryDimension} and all related objects that has Sharing
 * enabled.
 *
 * @param sourceSharing {@link Sharing}
 * @param analyticalObject any object extends {@link BaseAnalyticalObject}
 * @param listUpdateObjects Set of objects need to be updated
 * @param parameters {@link CascadeSharingParameters}
 */
private void handleCategoryDimension(final Sharing sourceSharing, BaseAnalyticalObject analyticalObject, Set<IdentifiableObject> listUpdateObjects, CascadeSharingParameters parameters) {
    List<CategoryDimension> catDimensions = analyticalObject.getCategoryDimensions();
    if (CollectionUtils.isEmpty(catDimensions)) {
        return;
    }
    catDimensions.forEach(catDimension -> {
        Category category = catDimension.getDimension();
        handleIdentifiableObject(sourceSharing, Category.class, category, listUpdateObjects, parameters);
        List<CategoryOption> catOptions = catDimension.getItems();
        if (CollectionUtils.isEmpty(catOptions)) {
            return;
        }
        catOptions.forEach(catOption -> handleIdentifiableObject(sourceSharing, CategoryOption.class, catOption, listUpdateObjects, parameters));
    });
}
Also used : Category(org.hisp.dhis.category.Category) CategoryDimension(org.hisp.dhis.category.CategoryDimension) CategoryOption(org.hisp.dhis.category.CategoryOption)

Example 4 with CategoryDimension

use of org.hisp.dhis.category.CategoryDimension in project dhis2-core by dhis2.

the class MappingServiceTest method testAddGet.

@Test
void testAddGet() {
    MapView mvA = new MapView("thematic");
    CategoryDimension cadA = new CategoryDimension();
    cadA.setDimension(caA);
    cadA.setItems(Lists.newArrayList(coA));
    OrganisationUnitGroupSetDimension ougsdA = new OrganisationUnitGroupSetDimension();
    ougsdA.setDimension(ougsA);
    ougsdA.setItems(Lists.newArrayList(ougA));
    mvA.addCategoryDimension(cadA);
    mvA.addDataDimensionItem(deA);
    mvA.getOrganisationUnits().add(ouA);
    mvA.addOrganisationUnitGroupSetDimension(ougsdA);
    Map mpA = new Map("MapA", null, 0d, 0d, 0);
    mpA.getMapViews().add(mvA);
    long id = mappingService.addMap(mpA);
    Map map = mappingService.getMap(id);
    assertNotNull(map);
    assertEquals(1, map.getMapViews().size());
    MapView mapView = map.getMapViews().get(0);
    assertNotNull(mapView);
    assertEquals(1, mapView.getCategoryDimensions().size());
    assertEquals(1, mapView.getDataElements().size());
    assertEquals(1, mapView.getOrganisationUnits().size());
    assertEquals(1, mapView.getOrganisationUnitGroupSetDimensions().size());
    assertEquals(cadA, mapView.getCategoryDimensions().get(0));
    assertEquals(deA, mapView.getDataElements().get(0));
    assertEquals(ouA, mapView.getOrganisationUnits().get(0));
    assertEquals(ougsdA, mapView.getOrganisationUnitGroupSetDimensions().get(0));
}
Also used : OrganisationUnitGroupSetDimension(org.hisp.dhis.organisationunit.OrganisationUnitGroupSetDimension) CategoryDimension(org.hisp.dhis.category.CategoryDimension) Test(org.junit.jupiter.api.Test) DhisSpringTest(org.hisp.dhis.DhisSpringTest)

Example 5 with CategoryDimension

use of org.hisp.dhis.category.CategoryDimension in project dhis2-core by dhis2.

the class DefaultDimensionService method mergeDimensionalObjects.

/**
 * Sets persistent objects for dimensional associations on the given
 * BaseAnalyticalObject based on the given list of transient
 * DimensionalObjects.
 * <p>
 * Relative periods represented by enums are converted into a
 * RelativePeriods object. User organisation units represented by enums are
 * converted and represented by the user organisation unit persisted
 * properties on the BaseAnalyticalObject.
 *
 * @param object the BaseAnalyticalObject to merge.
 * @param dimensions the list of dimensions.
 */
private void mergeDimensionalObjects(BaseAnalyticalObject object, List<DimensionalObject> dimensions) {
    if (object == null || dimensions == null) {
        return;
    }
    for (DimensionalObject dimension : dimensions) {
        DimensionType type = getDimensionType(dimension.getDimension());
        String dimensionId = dimension.getDimension();
        List<DimensionalItemObject> items = dimension.getItems();
        if (items != null) {
            List<String> uids = getUids(items);
            if (DATA_X.equals(type)) {
                for (String uid : uids) {
                    DimensionalItemObject dimItemObject = getDataDimensionalItemObject(IdScheme.UID, uid);
                    if (dimItemObject != null) {
                        DataDimensionItem item = DataDimensionItem.create(dimItemObject);
                        object.getDataDimensionItems().add(item);
                    }
                }
            } else if (PERIOD.equals(type)) {
                List<RelativePeriodEnum> enums = new ArrayList<>();
                List<Period> periods = new UniqueArrayList<>();
                for (String isoPeriod : uids) {
                    if (RelativePeriodEnum.contains(isoPeriod)) {
                        enums.add(RelativePeriodEnum.valueOf(isoPeriod));
                    } else {
                        Period period = PeriodType.getPeriodFromIsoString(isoPeriod);
                        if (period != null) {
                            periods.add(period);
                        }
                    }
                }
                object.setRelatives(new RelativePeriods().setRelativePeriodsFromEnums(enums));
                object.setPeriods(periodService.reloadPeriods(new ArrayList<>(periods)));
            } else if (ORGANISATION_UNIT.equals(type)) {
                for (String ou : uids) {
                    if (KEY_USER_ORGUNIT.equals(ou)) {
                        object.setUserOrganisationUnit(true);
                    } else if (KEY_USER_ORGUNIT_CHILDREN.equals(ou)) {
                        object.setUserOrganisationUnitChildren(true);
                    } else if (KEY_USER_ORGUNIT_GRANDCHILDREN.equals(ou)) {
                        object.setUserOrganisationUnitGrandChildren(true);
                    } else if (ou != null && ou.startsWith(KEY_LEVEL)) {
                        String level = DimensionalObjectUtils.getValueFromKeywordParam(ou);
                        Integer orgUnitLevel = organisationUnitService.getOrganisationUnitLevelByLevelOrUid(level);
                        if (orgUnitLevel != null) {
                            object.getOrganisationUnitLevels().add(orgUnitLevel);
                        }
                    } else if (ou != null && ou.startsWith(KEY_ORGUNIT_GROUP)) {
                        String uid = DimensionalObjectUtils.getUidFromGroupParam(ou);
                        OrganisationUnitGroup group = idObjectManager.get(OrganisationUnitGroup.class, uid);
                        if (group != null) {
                            object.getItemOrganisationUnitGroups().add(group);
                        }
                    } else {
                        OrganisationUnit unit = idObjectManager.get(OrganisationUnit.class, ou);
                        if (unit != null) {
                            object.getOrganisationUnits().add(unit);
                        }
                    }
                }
            } else if (DATA_ELEMENT_GROUP_SET.equals(type)) {
                DataElementGroupSetDimension groupSetDimension = new DataElementGroupSetDimension();
                groupSetDimension.setDimension(idObjectManager.get(DataElementGroupSet.class, dimensionId));
                groupSetDimension.getItems().addAll(idObjectManager.getByUidOrdered(DataElementGroup.class, uids));
                object.getDataElementGroupSetDimensions().add(groupSetDimension);
            } else if (ORGANISATION_UNIT_GROUP_SET.equals(type)) {
                OrganisationUnitGroupSetDimension groupSetDimension = new OrganisationUnitGroupSetDimension();
                groupSetDimension.setDimension(idObjectManager.get(OrganisationUnitGroupSet.class, dimensionId));
                groupSetDimension.getItems().addAll(idObjectManager.getByUidOrdered(OrganisationUnitGroup.class, uids));
                object.getOrganisationUnitGroupSetDimensions().add(groupSetDimension);
            } else if (CATEGORY.equals(type)) {
                CategoryDimension categoryDimension = new CategoryDimension();
                categoryDimension.setDimension(idObjectManager.get(Category.class, dimensionId));
                categoryDimension.getItems().addAll(idObjectManager.getByUidOrdered(CategoryOption.class, uids));
                object.getCategoryDimensions().add(categoryDimension);
            } else if (CATEGORY_OPTION_GROUP_SET.equals(type)) {
                CategoryOptionGroupSetDimension groupSetDimension = new CategoryOptionGroupSetDimension();
                groupSetDimension.setDimension(idObjectManager.get(CategoryOptionGroupSet.class, dimensionId));
                groupSetDimension.getItems().addAll(idObjectManager.getByUidOrdered(CategoryOptionGroup.class, uids));
                object.getCategoryOptionGroupSetDimensions().add(groupSetDimension);
            } else if (PROGRAM_ATTRIBUTE.equals(type)) {
                TrackedEntityAttributeDimension attributeDimension = new TrackedEntityAttributeDimension();
                attributeDimension.setAttribute(idObjectManager.get(TrackedEntityAttribute.class, dimensionId));
                attributeDimension.setLegendSet(dimension.hasLegendSet() ? idObjectManager.get(LegendSet.class, dimension.getLegendSet().getUid()) : null);
                attributeDimension.setFilter(dimension.getFilter());
                object.getAttributeDimensions().add(attributeDimension);
            } else if (PROGRAM_DATA_ELEMENT.equals(type)) {
                TrackedEntityDataElementDimension dataElementDimension = new TrackedEntityDataElementDimension();
                dataElementDimension.setDataElement(idObjectManager.get(DataElement.class, dimensionId));
                dataElementDimension.setLegendSet(dimension.hasLegendSet() ? idObjectManager.get(LegendSet.class, dimension.getLegendSet().getUid()) : null);
                dataElementDimension.setProgramStage(dimension.hasProgramStage() ? idObjectManager.get(ProgramStage.class, dimension.getProgramStage().getUid()) : null);
                dataElementDimension.setFilter(dimension.getFilter());
                object.getDataElementDimensions().add(dataElementDimension);
            } else if (PROGRAM_INDICATOR.equals(type)) {
                TrackedEntityProgramIndicatorDimension programIndicatorDimension = new TrackedEntityProgramIndicatorDimension();
                programIndicatorDimension.setProgramIndicator(idObjectManager.get(ProgramIndicator.class, dimensionId));
                programIndicatorDimension.setLegendSet(dimension.hasLegendSet() ? idObjectManager.get(LegendSet.class, dimension.getLegendSet().getUid()) : null);
                programIndicatorDimension.setFilter(dimension.getFilter());
                object.getProgramIndicatorDimensions().add(programIndicatorDimension);
            }
        }
    }
}
Also used : DimensionType(org.hisp.dhis.common.DimensionType) RelativePeriods(org.hisp.dhis.period.RelativePeriods) DataElementGroupSetDimension(org.hisp.dhis.dataelement.DataElementGroupSetDimension) CategoryDimension(org.hisp.dhis.category.CategoryDimension) CategoryOptionGroupSetDimension(org.hisp.dhis.category.CategoryOptionGroupSetDimension) TrackedEntityDataElementDimension(org.hisp.dhis.trackedentity.TrackedEntityDataElementDimension) DimensionalObject(org.hisp.dhis.common.DimensionalObject) BaseDimensionalObject(org.hisp.dhis.common.BaseDimensionalObject) DataElement(org.hisp.dhis.dataelement.DataElement) CategoryOptionGroup(org.hisp.dhis.category.CategoryOptionGroup) DimensionalItemObject(org.hisp.dhis.common.DimensionalItemObject) DataDimensionItem(org.hisp.dhis.common.DataDimensionItem) UniqueArrayList(org.hisp.dhis.commons.collection.UniqueArrayList) List(java.util.List) ArrayList(java.util.ArrayList) TrackedEntityAttributeDimension(org.hisp.dhis.trackedentity.TrackedEntityAttributeDimension) OrganisationUnit(org.hisp.dhis.organisationunit.OrganisationUnit) CategoryOptionGroupSet(org.hisp.dhis.category.CategoryOptionGroupSet) Period(org.hisp.dhis.period.Period) TrackedEntityProgramIndicatorDimension(org.hisp.dhis.trackedentity.TrackedEntityProgramIndicatorDimension) LegendSet(org.hisp.dhis.legend.LegendSet) OrganisationUnitGroup(org.hisp.dhis.organisationunit.OrganisationUnitGroup) OrganisationUnitGroupSetDimension(org.hisp.dhis.organisationunit.OrganisationUnitGroupSetDimension) OrganisationUnitGroupSet(org.hisp.dhis.organisationunit.OrganisationUnitGroupSet)

Aggregations

CategoryDimension (org.hisp.dhis.category.CategoryDimension)5 ArrayList (java.util.ArrayList)2 CategoryOption (org.hisp.dhis.category.CategoryOption)2 DataDimensionItem (org.hisp.dhis.common.DataDimensionItem)2 OrganisationUnitGroupSetDimension (org.hisp.dhis.organisationunit.OrganisationUnitGroupSetDimension)2 TrackedEntityAttributeDimension (org.hisp.dhis.trackedentity.TrackedEntityAttributeDimension)2 TrackedEntityDataElementDimension (org.hisp.dhis.trackedentity.TrackedEntityDataElementDimension)2 TrackedEntityProgramIndicatorDimension (org.hisp.dhis.trackedentity.TrackedEntityProgramIndicatorDimension)2 List (java.util.List)1 DhisSpringTest (org.hisp.dhis.DhisSpringTest)1 Category (org.hisp.dhis.category.Category)1 CategoryOptionGroup (org.hisp.dhis.category.CategoryOptionGroup)1 CategoryOptionGroupSet (org.hisp.dhis.category.CategoryOptionGroupSet)1 CategoryOptionGroupSetDimension (org.hisp.dhis.category.CategoryOptionGroupSetDimension)1 AnalyticalObject (org.hisp.dhis.common.AnalyticalObject)1 BaseAnalyticalObject (org.hisp.dhis.common.BaseAnalyticalObject)1 BaseDimensionalObject (org.hisp.dhis.common.BaseDimensionalObject)1 DimensionType (org.hisp.dhis.common.DimensionType)1 DimensionalItemObject (org.hisp.dhis.common.DimensionalItemObject)1 DimensionalObject (org.hisp.dhis.common.DimensionalObject)1