dhis2-devs team mailing list archive
-
dhis2-devs team
-
Mailing list archive
-
Message #28810
[Branch ~dhis2-devs-core/dhis2/trunk] Rev 14448: Moved DimensionService from dhis-service-core to dhis-service-analytics
------------------------------------------------------------
revno: 14448
committer: Lars Helge Øverland <larshelge@xxxxxxxxx>
branch nick: dhis2
timestamp: Wed 2014-03-26 19:14:37 +0100
message:
Moved DimensionService from dhis-service-core to dhis-service-analytics
removed:
dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/common/DefaultDimensionService.java
dhis-2/dhis-services/dhis-service-core/src/test/java/org/hisp/dhis/common/DimensionServiceTest.java
added:
dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/dimension/
dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/dimension/DefaultDimensionService.java
dhis-2/dhis-services/dhis-service-analytics/src/test/java/org/hisp/dhis/analytics/dimension/
dhis-2/dhis-services/dhis-service-analytics/src/test/java/org/hisp/dhis/analytics/dimension/DimensionServiceTest.java
modified:
dhis-2/dhis-services/dhis-service-analytics/src/main/resources/META-INF/dhis/beans.xml
dhis-2/dhis-services/dhis-service-core/src/main/resources/META-INF/dhis/beans.xml
--
lp:dhis2
https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk
Your team DHIS 2 developers is subscribed to branch lp:dhis2.
To unsubscribe from this branch go to https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk/+edit-subscription
=== added directory 'dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/dimension'
=== added file 'dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/dimension/DefaultDimensionService.java'
--- dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/dimension/DefaultDimensionService.java 1970-01-01 00:00:00 +0000
+++ dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/dimension/DefaultDimensionService.java 2014-03-26 18:14:37 +0000
@@ -0,0 +1,396 @@
+package org.hisp.dhis.analytics.dimension;
+
+/*
+ * Copyright (c) 2004-2014, University of Oslo
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * Neither the name of the HISP project nor the names of its contributors may
+ * be used to endorse or promote products derived from this software without
+ * specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import org.hisp.dhis.common.BaseAnalyticalObject;
+import org.hisp.dhis.common.DimensionService;
+import org.hisp.dhis.common.DimensionType;
+import org.hisp.dhis.common.DimensionalObject;
+import org.hisp.dhis.common.DimensionalObjectUtils;
+import org.hisp.dhis.common.IdentifiableObjectManager;
+import org.hisp.dhis.common.NameableObject;
+import org.hisp.dhis.dataelement.CategoryOptionGroup;
+import org.hisp.dhis.dataelement.CategoryOptionGroupSet;
+import org.hisp.dhis.dataelement.DataElement;
+import org.hisp.dhis.dataelement.DataElementCategory;
+import org.hisp.dhis.dataelement.DataElementCategoryDimension;
+import org.hisp.dhis.dataelement.DataElementCategoryService;
+import org.hisp.dhis.dataelement.DataElementGroup;
+import org.hisp.dhis.dataelement.DataElementGroupSet;
+import org.hisp.dhis.dataelement.DataElementOperandService;
+import org.hisp.dhis.dataelement.DataElementService;
+import org.hisp.dhis.dataset.DataSet;
+import org.hisp.dhis.indicator.Indicator;
+import org.hisp.dhis.organisationunit.OrganisationUnit;
+import org.hisp.dhis.organisationunit.OrganisationUnitGroup;
+import org.hisp.dhis.organisationunit.OrganisationUnitGroupService;
+import org.hisp.dhis.organisationunit.OrganisationUnitGroupSet;
+import org.hisp.dhis.period.Period;
+import org.hisp.dhis.period.PeriodService;
+import org.hisp.dhis.period.PeriodType;
+import org.hisp.dhis.period.RelativePeriodEnum;
+import org.hisp.dhis.period.RelativePeriods;
+import org.hisp.dhis.sharing.SharingService;
+import org.hisp.dhis.system.util.UniqueArrayList;
+import org.hisp.dhis.user.CurrentUserService;
+import org.hisp.dhis.user.User;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import static org.hisp.dhis.common.DimensionType.*;
+import static org.hisp.dhis.common.IdentifiableObjectUtils.getUids;
+import static org.hisp.dhis.organisationunit.OrganisationUnit.*;
+
+/**
+ * @author Lars Helge Overland
+ */
+public class DefaultDimensionService
+ implements DimensionService
+{
+ @Autowired
+ private IdentifiableObjectManager identifiableObjectManager;
+
+ @Autowired
+ private DataElementCategoryService categoryService;
+
+ @Autowired
+ private DataElementOperandService operandService;
+
+ @Autowired
+ private PeriodService periodService;
+
+ @Autowired
+ private OrganisationUnitGroupService organisationUnitGroupService;
+
+ @Autowired
+ private DataElementService dataElementService;
+
+ @Autowired
+ private SharingService sharingService;
+
+ @Autowired
+ private CurrentUserService currentUserService;
+
+ //--------------------------------------------------------------------------
+ // DimensionService implementation
+ //--------------------------------------------------------------------------
+
+ @Override
+ public DimensionalObject getDimension( String uid )
+ {
+ DataElementCategory cat = identifiableObjectManager.get( DataElementCategory.class, uid );
+
+ if ( cat != null )
+ {
+ return cat;
+ }
+
+ DataElementGroupSet degs = identifiableObjectManager.get( DataElementGroupSet.class, uid );
+
+ if ( degs != null )
+ {
+ return degs;
+ }
+
+ OrganisationUnitGroupSet ougs = identifiableObjectManager.get( OrganisationUnitGroupSet.class, uid );
+
+ if ( ougs != null )
+ {
+ return ougs;
+ }
+
+ CategoryOptionGroupSet cogs = identifiableObjectManager.get( CategoryOptionGroupSet.class, uid );
+
+ if ( cogs != null )
+ {
+ return cogs;
+ }
+
+ return null;
+ }
+
+ public List<NameableObject> getCanReadDimensionItems( String uid )
+ {
+ DimensionalObject dimension = getDimension( uid );
+
+ List<NameableObject> items = new ArrayList<NameableObject>();
+
+ if ( dimension != null && dimension.getItems() != null )
+ {
+ User user = currentUserService.getCurrentUser();
+
+ for ( NameableObject item : dimension.getItems() )
+ {
+ boolean canRead = sharingService.canRead( user, item );
+
+ if ( canRead )
+ {
+ items.add( item );
+ }
+ }
+ }
+
+ return items;
+ }
+
+ public DimensionType getDimensionType( String uid )
+ {
+ DataElementCategory cat = identifiableObjectManager.get( DataElementCategory.class, uid );
+
+ if ( cat != null )
+ {
+ return DimensionType.CATEGORY;
+ }
+
+ DataElementGroupSet degs = identifiableObjectManager.get( DataElementGroupSet.class, uid );
+
+ if ( degs != null )
+ {
+ return DimensionType.DATAELEMENT_GROUPSET;
+ }
+
+ OrganisationUnitGroupSet ougs = identifiableObjectManager.get( OrganisationUnitGroupSet.class, uid );
+
+ if ( ougs != null )
+ {
+ return DimensionType.ORGANISATIONUNIT_GROUPSET;
+ }
+
+ CategoryOptionGroupSet cogs = identifiableObjectManager.get( CategoryOptionGroupSet.class, uid );
+
+ if ( cogs != null )
+ {
+ return DimensionType.CATEGORYOPTION_GROUPSET;
+ }
+
+ final Map<String, DimensionType> dimObjectTypeMap = new HashMap<String, DimensionType>();
+
+ dimObjectTypeMap.put( DimensionalObject.DATA_X_DIM_ID, DimensionType.DATA_X );
+ dimObjectTypeMap.put( DimensionalObject.INDICATOR_DIM_ID, DimensionType.INDICATOR );
+ dimObjectTypeMap.put( DimensionalObject.DATAELEMENT_DIM_ID, DimensionType.DATAELEMENT );
+ dimObjectTypeMap.put( DimensionalObject.DATASET_DIM_ID, DimensionType.DATASET );
+ dimObjectTypeMap.put( DimensionalObject.DATAELEMENT_OPERAND_ID, DimensionType.DATAELEMENT_OPERAND );
+ dimObjectTypeMap.put( DimensionalObject.PERIOD_DIM_ID, DimensionType.PERIOD );
+ dimObjectTypeMap.put( DimensionalObject.ORGUNIT_DIM_ID, DimensionType.ORGANISATIONUNIT );
+
+ return dimObjectTypeMap.get( uid );
+ }
+
+ @Override
+ public List<DimensionalObject> getAllDimensions()
+ {
+ Collection<DataElementCategory> dcs = categoryService.getDataDimensionDataElementCategories();
+ Collection<CategoryOptionGroupSet> cogs = categoryService.getDataDimensionCategoryOptionGroupSets();
+ Collection<DataElementGroupSet> degs = dataElementService.getDataDimensionDataElementGroupSets();
+ Collection<OrganisationUnitGroupSet> ougs = organisationUnitGroupService.getDataDimensionOrganisationUnitGroupSets();
+
+ final List<DimensionalObject> dimensions = new ArrayList<DimensionalObject>();
+
+ dimensions.addAll( dcs );
+ dimensions.addAll( cogs );
+ dimensions.addAll( degs );
+ dimensions.addAll( ougs );
+
+ return dimensions;
+ }
+
+ @Override
+ public void mergeAnalyticalObject( BaseAnalyticalObject object )
+ {
+ if ( object != null )
+ {
+ object.clear();
+
+ if ( object.getUser() != null )
+ {
+ object.setUser( identifiableObjectManager.get( User.class, object.getUser().getUid() ) );
+ }
+ else
+ {
+ object.setUser( currentUserService.getCurrentUser() );
+ }
+
+ mergeDimensionalObjects( object, object.getColumns() );
+ mergeDimensionalObjects( object, object.getRows() );
+ mergeDimensionalObjects( object, object.getFilters() );
+ }
+ }
+
+ //--------------------------------------------------------------------------
+ // Supportive methods
+ //--------------------------------------------------------------------------
+
+ /**
+ * 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
+ */
+ 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<NameableObject> items = dimension.getItems();
+
+ if ( items != null )
+ {
+ List<String> uids = getUids( items );
+
+ if ( INDICATOR.equals( type ) )
+ {
+ object.getIndicators().addAll( identifiableObjectManager.getByUid( Indicator.class, uids ) );
+ }
+ else if ( DATAELEMENT.equals( type ) )
+ {
+ object.getDataElements().addAll( identifiableObjectManager.getByUid( DataElement.class, uids ) );
+ }
+ else if ( DATAELEMENT_OPERAND.equals( type ) )
+ {
+ object.getDataElementOperands().addAll( operandService.getDataElementOperandsByUid( uids ) );
+ }
+ else if ( DATASET.equals( type ) )
+ {
+ object.getDataSets().addAll( identifiableObjectManager.getByUid( DataSet.class, uids ) );
+ }
+ else if ( PERIOD.equals( type ) )
+ {
+ List<RelativePeriodEnum> enums = new ArrayList<RelativePeriodEnum>();
+ List<Period> periods = new UniqueArrayList<Period>();
+
+ 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<Period>( periods ) ) );
+ }
+ else if ( ORGANISATIONUNIT.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 ) )
+ {
+ int level = DimensionalObjectUtils.getLevelFromLevelParam( ou );
+
+ if ( level > 0 )
+ {
+ object.getOrganisationUnitLevels().add( level );
+ }
+ }
+ else if ( ou != null && ou.startsWith( KEY_ORGUNIT_GROUP ) )
+ {
+ String uid = DimensionalObjectUtils.getUidFromOrgUnitGroupParam( ou );
+
+ OrganisationUnitGroup group = identifiableObjectManager.get( OrganisationUnitGroup.class, uid );
+
+ if ( group != null )
+ {
+ object.getItemOrganisationUnitGroups().add( group );
+ }
+ }
+ else
+ {
+ OrganisationUnit unit = identifiableObjectManager.get( OrganisationUnit.class, ou );
+
+ if ( unit != null )
+ {
+ object.getOrganisationUnits().add( unit );
+ }
+ }
+ }
+ }
+ else if ( CATEGORY.equals( type ) )
+ {
+ DataElementCategoryDimension categoryDimension = new DataElementCategoryDimension();
+ categoryDimension.setDimension( categoryService.getDataElementCategory( dimensionId ) );
+ categoryDimension.getItems().addAll( categoryService.getDataElementCategoryOptionsByUid( uids ) );
+
+ object.getCategoryDimensions().add( categoryDimension );
+ }
+ else if ( DATAELEMENT_GROUPSET.equals( type ) )
+ {
+ object.getDataElementGroups().addAll( identifiableObjectManager.getByUid( DataElementGroup.class, uids ) );
+ }
+ else if ( ORGANISATIONUNIT_GROUPSET.equals( type ) )
+ {
+ object.getOrganisationUnitGroups().addAll( identifiableObjectManager.getByUid( OrganisationUnitGroup.class, uids ) );
+ }
+ else if ( CATEGORYOPTION_GROUPSET.equals( type ) )
+ {
+ object.getCategoryOptionGroups().addAll( identifiableObjectManager.getByUid( CategoryOptionGroup.class, uids ) );
+ }
+ }
+ }
+ }
+}
=== modified file 'dhis-2/dhis-services/dhis-service-analytics/src/main/resources/META-INF/dhis/beans.xml'
--- dhis-2/dhis-services/dhis-service-analytics/src/main/resources/META-INF/dhis/beans.xml 2014-01-30 10:13:58 +0000
+++ dhis-2/dhis-services/dhis-service-analytics/src/main/resources/META-INF/dhis/beans.xml 2014-03-26 18:14:37 +0000
@@ -50,6 +50,10 @@
<bean id="org.hisp.dhis.analytics.event.EventQueryPlanner" class="org.hisp.dhis.analytics.event.data.DefaultEventQueryPlanner" />
+ <!-- Dimension -->
+
+ <bean id="org.hisp.dhis.analytics.dimension.DimensionService" class="org.hisp.dhis.analytics.dimension.DefaultDimensionService" />
+
<!-- Scheduled tasks -->
<bean id="analyticsAllTask" class="org.hisp.dhis.analytics.scheduling.AnalyticsTableTask">
=== added directory 'dhis-2/dhis-services/dhis-service-analytics/src/test/java/org/hisp/dhis/analytics/dimension'
=== added file 'dhis-2/dhis-services/dhis-service-analytics/src/test/java/org/hisp/dhis/analytics/dimension/DimensionServiceTest.java'
--- dhis-2/dhis-services/dhis-service-analytics/src/test/java/org/hisp/dhis/analytics/dimension/DimensionServiceTest.java 1970-01-01 00:00:00 +0000
+++ dhis-2/dhis-services/dhis-service-analytics/src/test/java/org/hisp/dhis/analytics/dimension/DimensionServiceTest.java 2014-03-26 18:14:37 +0000
@@ -0,0 +1,240 @@
+package org.hisp.dhis.analytics.dimension;
+
+/*
+ * Copyright (c) 2004-2014, University of Oslo
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * Neither the name of the HISP project nor the names of its contributors may
+ * be used to endorse or promote products derived from this software without
+ * specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import static org.hisp.dhis.organisationunit.OrganisationUnit.KEY_LEVEL;
+import static org.hisp.dhis.organisationunit.OrganisationUnit.KEY_USER_ORGUNIT;
+import static org.hisp.dhis.period.RelativePeriodEnum.LAST_12_MONTHS;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import java.util.Arrays;
+
+import org.hisp.dhis.DhisSpringTest;
+import org.hisp.dhis.common.BaseDimensionalObject;
+import org.hisp.dhis.common.BaseNameableObject;
+import org.hisp.dhis.common.DimensionService;
+import org.hisp.dhis.common.DimensionalObject;
+import org.hisp.dhis.dataelement.DataElement;
+import org.hisp.dhis.dataelement.DataElementService;
+import org.hisp.dhis.organisationunit.OrganisationUnit;
+import org.hisp.dhis.organisationunit.OrganisationUnitGroup;
+import org.hisp.dhis.organisationunit.OrganisationUnitGroupService;
+import org.hisp.dhis.organisationunit.OrganisationUnitGroupSet;
+import org.hisp.dhis.organisationunit.OrganisationUnitService;
+import org.hisp.dhis.period.Period;
+import org.hisp.dhis.reporttable.ReportTable;
+import org.junit.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * @author Lars Helge Overland
+ */
+public class DimensionServiceTest
+ extends DhisSpringTest
+{
+ private DataElement deA;
+ private DataElement deB;
+
+ private Period peA;
+ private Period peB;
+
+ private BaseNameableObject peLast12Months;
+
+ private OrganisationUnit ouA;
+ private OrganisationUnit ouB;
+ private OrganisationUnit ouC;
+ private OrganisationUnit ouD;
+ private OrganisationUnit ouE;
+
+ private BaseNameableObject ouUser;
+ private BaseNameableObject ouLevel2;
+
+ private OrganisationUnitGroup ouGroupA;
+ private OrganisationUnitGroup ouGroupB;
+ private OrganisationUnitGroup ouGroupC;
+
+ private OrganisationUnitGroupSet ouGroupSetA;
+
+ @Autowired
+ private DataElementService dataElementService;
+
+ @Autowired
+ private OrganisationUnitService organisationUnitService;
+
+ @Autowired
+ private OrganisationUnitGroupService organisationUnitGroupService;
+
+ @Autowired
+ private DimensionService dimensionService;
+
+ @Override
+ public void setUpTest()
+ {
+ deA = createDataElement( 'A' );
+ deB = createDataElement( 'B' );
+
+ dataElementService.addDataElement( deA );
+ dataElementService.addDataElement( deB );
+
+ peA = createPeriod( "201201" );
+ peB = createPeriod( "201202" );
+ peLast12Months = new BaseNameableObject( LAST_12_MONTHS.toString(), LAST_12_MONTHS.toString(), LAST_12_MONTHS.toString() );
+
+ peA.setUid( "201201" );
+ peB.setUid( "201202" );
+
+ ouA = createOrganisationUnit( 'A' );
+ ouB = createOrganisationUnit( 'B' );
+ ouC = createOrganisationUnit( 'C' );
+ ouD = createOrganisationUnit( 'D' );
+ ouE = createOrganisationUnit( 'E' );
+
+ ouB.updateParent( ouA );
+ ouC.updateParent( ouA );
+ ouD.updateParent( ouB );
+ ouE.updateParent( ouB );
+
+ organisationUnitService.addOrganisationUnit( ouA );
+ organisationUnitService.addOrganisationUnit( ouB );
+ organisationUnitService.addOrganisationUnit( ouC );
+ organisationUnitService.addOrganisationUnit( ouD );
+ organisationUnitService.addOrganisationUnit( ouE );
+
+ String level2 = KEY_LEVEL + 2;
+
+ ouUser = new BaseNameableObject( KEY_USER_ORGUNIT, KEY_USER_ORGUNIT, KEY_USER_ORGUNIT );
+ ouLevel2 = new BaseNameableObject( level2, level2, level2 );
+
+ ouGroupSetA = createOrganisationUnitGroupSet( 'A' );
+
+ organisationUnitGroupService.addOrganisationUnitGroupSet( ouGroupSetA );
+
+ ouGroupA = createOrganisationUnitGroup( 'A' );
+ ouGroupB = createOrganisationUnitGroup( 'B' );
+ ouGroupC = createOrganisationUnitGroup( 'C' );
+
+ ouGroupA.setGroupSet( ouGroupSetA );
+ ouGroupB.setGroupSet( ouGroupSetA );
+ ouGroupC.setGroupSet( ouGroupSetA );
+
+ organisationUnitGroupService.addOrganisationUnitGroup( ouGroupA );
+ organisationUnitGroupService.addOrganisationUnitGroup( ouGroupB );
+ organisationUnitGroupService.addOrganisationUnitGroup( ouGroupC );
+
+ ouGroupSetA.getOrganisationUnitGroups().add( ouGroupA );
+ ouGroupSetA.getOrganisationUnitGroups().add( ouGroupB );
+ ouGroupSetA.getOrganisationUnitGroups().add( ouGroupC );
+
+ organisationUnitGroupService.updateOrganisationUnitGroupSet( ouGroupSetA );
+ }
+
+ @Test
+ public void testMergeAnalyticalObject()
+ {
+ ReportTable reportTable = new ReportTable();
+
+ reportTable.getColumns().add( new BaseDimensionalObject( DimensionalObject.DATAELEMENT_DIM_ID, Arrays.asList( deA, deB ) ) );
+ reportTable.getRows().add( new BaseDimensionalObject( DimensionalObject.ORGUNIT_DIM_ID, Arrays.asList( ouA, ouB, ouC, ouD, ouE ) ) );
+ reportTable.getFilters().add( new BaseDimensionalObject( DimensionalObject.PERIOD_DIM_ID, Arrays.asList( peA, peB ) ) );
+
+ dimensionService.mergeAnalyticalObject( reportTable );
+
+ assertEquals( 2, reportTable.getDataElements().size() );
+ assertEquals( 2, reportTable.getPeriods().size() );
+ assertEquals( 5, reportTable.getOrganisationUnits().size() );
+ }
+
+ @Test
+ public void testMergeAnalyticalObjectUserOrgUnit()
+ {
+ ReportTable reportTable = new ReportTable();
+
+ reportTable.getColumns().add( new BaseDimensionalObject( DimensionalObject.DATAELEMENT_DIM_ID, Arrays.asList( deA, deB ) ) );
+ reportTable.getRows().add( new BaseDimensionalObject( DimensionalObject.ORGUNIT_DIM_ID, Arrays.asList( ouUser ) ) );
+ reportTable.getFilters().add( new BaseDimensionalObject( DimensionalObject.PERIOD_DIM_ID, Arrays.asList( peA ) ) );
+
+ dimensionService.mergeAnalyticalObject( reportTable );
+
+ assertEquals( 2, reportTable.getDataElements().size() );
+ assertEquals( 1, reportTable.getPeriods().size() );
+ assertEquals( 0, reportTable.getOrganisationUnits().size() );
+ assertTrue( reportTable.isUserOrganisationUnit() );
+ }
+
+ @Test
+ public void testMergeAnalyticalObjectOrgUnitLevel()
+ {
+ ReportTable reportTable = new ReportTable();
+
+ reportTable.getColumns().add( new BaseDimensionalObject( DimensionalObject.DATAELEMENT_DIM_ID, Arrays.asList( deA, deB ) ) );
+ reportTable.getRows().add( new BaseDimensionalObject( DimensionalObject.ORGUNIT_DIM_ID, Arrays.asList( ouLevel2, ouA ) ) );
+ reportTable.getFilters().add( new BaseDimensionalObject( DimensionalObject.PERIOD_DIM_ID, Arrays.asList( peA ) ) );
+
+ dimensionService.mergeAnalyticalObject( reportTable );
+
+ assertEquals( 2, reportTable.getDataElements().size() );
+ assertEquals( 1, reportTable.getPeriods().size() );
+ assertEquals( 1, reportTable.getOrganisationUnits().size() );
+ assertEquals( Integer.valueOf( 2 ), reportTable.getOrganisationUnitLevels().get( 0 ) );
+ }
+
+ @Test
+ public void testMergeAnalyticalObjectRelativePeriods()
+ {
+ ReportTable reportTable = new ReportTable();
+
+ reportTable.getColumns().add( new BaseDimensionalObject( DimensionalObject.DATAELEMENT_DIM_ID, Arrays.asList( deA, deB ) ) );
+ reportTable.getRows().add( new BaseDimensionalObject( DimensionalObject.ORGUNIT_DIM_ID, Arrays.asList( ouA, ouB, ouC, ouD, ouE ) ) );
+ reportTable.getFilters().add( new BaseDimensionalObject( DimensionalObject.PERIOD_DIM_ID, Arrays.asList( peLast12Months ) ) );
+
+ dimensionService.mergeAnalyticalObject( reportTable );
+
+ assertEquals( 2, reportTable.getDataElements().size() );
+ assertEquals( 0, reportTable.getPeriods().size() );
+ assertTrue( reportTable.getRelatives().isLast12Months() );
+ assertEquals( 5, reportTable.getOrganisationUnits().size() );
+ }
+
+ @Test
+ public void testMergeAnalyticalObjectOrgUnitGroupSet()
+ {
+ ReportTable reportTable = new ReportTable();
+
+ reportTable.getColumns().add( new BaseDimensionalObject( DimensionalObject.DATAELEMENT_DIM_ID, Arrays.asList( deA, deB ) ) );
+ reportTable.getRows().add( ouGroupSetA );
+ reportTable.getFilters().add( new BaseDimensionalObject( DimensionalObject.PERIOD_DIM_ID, Arrays.asList( peA, peB ) ) );
+
+ dimensionService.mergeAnalyticalObject( reportTable );
+
+ assertEquals( 2, reportTable.getDataElements().size() );
+ assertEquals( 2, reportTable.getPeriods().size() );
+ assertEquals( 3, reportTable.getOrganisationUnitGroups().size() );
+ }
+}
=== removed file 'dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/common/DefaultDimensionService.java'
--- dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/common/DefaultDimensionService.java 2014-03-21 12:20:36 +0000
+++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/common/DefaultDimensionService.java 1970-01-01 00:00:00 +0000
@@ -1,389 +0,0 @@
-package org.hisp.dhis.common;
-
-/*
- * Copyright (c) 2004-2014, University of Oslo
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- * Redistributions of source code must retain the above copyright notice, this
- * list of conditions and the following disclaimer.
- *
- * Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * Neither the name of the HISP project nor the names of its contributors may
- * be used to endorse or promote products derived from this software without
- * specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
- * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-import org.hisp.dhis.dataelement.CategoryOptionGroup;
-import org.hisp.dhis.dataelement.CategoryOptionGroupSet;
-import org.hisp.dhis.dataelement.DataElement;
-import org.hisp.dhis.dataelement.DataElementCategory;
-import org.hisp.dhis.dataelement.DataElementCategoryDimension;
-import org.hisp.dhis.dataelement.DataElementCategoryService;
-import org.hisp.dhis.dataelement.DataElementGroup;
-import org.hisp.dhis.dataelement.DataElementGroupSet;
-import org.hisp.dhis.dataelement.DataElementOperandService;
-import org.hisp.dhis.dataelement.DataElementService;
-import org.hisp.dhis.dataset.DataSet;
-import org.hisp.dhis.indicator.Indicator;
-import org.hisp.dhis.organisationunit.OrganisationUnit;
-import org.hisp.dhis.organisationunit.OrganisationUnitGroup;
-import org.hisp.dhis.organisationunit.OrganisationUnitGroupService;
-import org.hisp.dhis.organisationunit.OrganisationUnitGroupSet;
-import org.hisp.dhis.period.Period;
-import org.hisp.dhis.period.PeriodService;
-import org.hisp.dhis.period.PeriodType;
-import org.hisp.dhis.period.RelativePeriodEnum;
-import org.hisp.dhis.period.RelativePeriods;
-import org.hisp.dhis.sharing.SharingService;
-import org.hisp.dhis.system.util.UniqueArrayList;
-import org.hisp.dhis.user.CurrentUserService;
-import org.hisp.dhis.user.User;
-import org.springframework.beans.factory.annotation.Autowired;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import static org.hisp.dhis.common.DimensionType.*;
-import static org.hisp.dhis.common.IdentifiableObjectUtils.getUids;
-import static org.hisp.dhis.organisationunit.OrganisationUnit.*;
-
-/**
- * @author Lars Helge Overland
- */
-public class DefaultDimensionService
- implements DimensionService
-{
- @Autowired
- private IdentifiableObjectManager identifiableObjectManager;
-
- @Autowired
- private DataElementCategoryService categoryService;
-
- @Autowired
- private DataElementOperandService operandService;
-
- @Autowired
- private PeriodService periodService;
-
- @Autowired
- private OrganisationUnitGroupService organisationUnitGroupService;
-
- @Autowired
- private DataElementService dataElementService;
-
- @Autowired
- private SharingService sharingService;
-
- @Autowired
- private CurrentUserService currentUserService;
-
- //--------------------------------------------------------------------------
- // DimensionService implementation
- //--------------------------------------------------------------------------
-
- @Override
- public DimensionalObject getDimension( String uid )
- {
- DataElementCategory cat = identifiableObjectManager.get( DataElementCategory.class, uid );
-
- if ( cat != null )
- {
- return cat;
- }
-
- DataElementGroupSet degs = identifiableObjectManager.get( DataElementGroupSet.class, uid );
-
- if ( degs != null )
- {
- return degs;
- }
-
- OrganisationUnitGroupSet ougs = identifiableObjectManager.get( OrganisationUnitGroupSet.class, uid );
-
- if ( ougs != null )
- {
- return ougs;
- }
-
- CategoryOptionGroupSet cogs = identifiableObjectManager.get( CategoryOptionGroupSet.class, uid );
-
- if ( cogs != null )
- {
- return cogs;
- }
-
- return null;
- }
-
- public List<NameableObject> getCanReadDimensionItems( String uid )
- {
- DimensionalObject dimension = getDimension( uid );
-
- List<NameableObject> items = new ArrayList<NameableObject>();
-
- if ( dimension != null && dimension.getItems() != null )
- {
- User user = currentUserService.getCurrentUser();
-
- for ( NameableObject item : dimension.getItems() )
- {
- boolean canRead = sharingService.canRead( user, item );
-
- if ( canRead )
- {
- items.add( item );
- }
- }
- }
-
- return items;
- }
-
- public DimensionType getDimensionType( String uid )
- {
- DataElementCategory cat = identifiableObjectManager.get( DataElementCategory.class, uid );
-
- if ( cat != null )
- {
- return DimensionType.CATEGORY;
- }
-
- DataElementGroupSet degs = identifiableObjectManager.get( DataElementGroupSet.class, uid );
-
- if ( degs != null )
- {
- return DimensionType.DATAELEMENT_GROUPSET;
- }
-
- OrganisationUnitGroupSet ougs = identifiableObjectManager.get( OrganisationUnitGroupSet.class, uid );
-
- if ( ougs != null )
- {
- return DimensionType.ORGANISATIONUNIT_GROUPSET;
- }
-
- CategoryOptionGroupSet cogs = identifiableObjectManager.get( CategoryOptionGroupSet.class, uid );
-
- if ( cogs != null )
- {
- return DimensionType.CATEGORYOPTION_GROUPSET;
- }
-
- final Map<String, DimensionType> dimObjectTypeMap = new HashMap<String, DimensionType>();
-
- dimObjectTypeMap.put( DimensionalObject.DATA_X_DIM_ID, DimensionType.DATA_X );
- dimObjectTypeMap.put( DimensionalObject.INDICATOR_DIM_ID, DimensionType.INDICATOR );
- dimObjectTypeMap.put( DimensionalObject.DATAELEMENT_DIM_ID, DimensionType.DATAELEMENT );
- dimObjectTypeMap.put( DimensionalObject.DATASET_DIM_ID, DimensionType.DATASET );
- dimObjectTypeMap.put( DimensionalObject.DATAELEMENT_OPERAND_ID, DimensionType.DATAELEMENT_OPERAND );
- dimObjectTypeMap.put( DimensionalObject.PERIOD_DIM_ID, DimensionType.PERIOD );
- dimObjectTypeMap.put( DimensionalObject.ORGUNIT_DIM_ID, DimensionType.ORGANISATIONUNIT );
-
- return dimObjectTypeMap.get( uid );
- }
-
- @Override
- public List<DimensionalObject> getAllDimensions()
- {
- Collection<DataElementCategory> dcs = categoryService.getDataDimensionDataElementCategories();
- Collection<CategoryOptionGroupSet> cogs = categoryService.getDataDimensionCategoryOptionGroupSets();
- Collection<DataElementGroupSet> degs = dataElementService.getDataDimensionDataElementGroupSets();
- Collection<OrganisationUnitGroupSet> ougs = organisationUnitGroupService.getDataDimensionOrganisationUnitGroupSets();
-
- final List<DimensionalObject> dimensions = new ArrayList<DimensionalObject>();
-
- dimensions.addAll( dcs );
- dimensions.addAll( cogs );
- dimensions.addAll( degs );
- dimensions.addAll( ougs );
-
- return dimensions;
- }
-
- @Override
- public void mergeAnalyticalObject( BaseAnalyticalObject object )
- {
- if ( object != null )
- {
- object.clear();
-
- if ( object.getUser() != null )
- {
- object.setUser( identifiableObjectManager.get( User.class, object.getUser().getUid() ) );
- }
- else
- {
- object.setUser( currentUserService.getCurrentUser() );
- }
-
- mergeDimensionalObjects( object, object.getColumns() );
- mergeDimensionalObjects( object, object.getRows() );
- mergeDimensionalObjects( object, object.getFilters() );
- }
- }
-
- //--------------------------------------------------------------------------
- // Supportive methods
- //--------------------------------------------------------------------------
-
- /**
- * 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
- */
- 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<NameableObject> items = dimension.getItems();
-
- if ( items != null )
- {
- List<String> uids = getUids( items );
-
- if ( INDICATOR.equals( type ) )
- {
- object.getIndicators().addAll( identifiableObjectManager.getByUid( Indicator.class, uids ) );
- }
- else if ( DATAELEMENT.equals( type ) )
- {
- object.getDataElements().addAll( identifiableObjectManager.getByUid( DataElement.class, uids ) );
- }
- else if ( DATAELEMENT_OPERAND.equals( type ) )
- {
- object.getDataElementOperands().addAll( operandService.getDataElementOperandsByUid( uids ) );
- }
- else if ( DATASET.equals( type ) )
- {
- object.getDataSets().addAll( identifiableObjectManager.getByUid( DataSet.class, uids ) );
- }
- else if ( PERIOD.equals( type ) )
- {
- List<RelativePeriodEnum> enums = new ArrayList<RelativePeriodEnum>();
- List<Period> periods = new UniqueArrayList<Period>();
-
- 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<Period>( periods ) ) );
- }
- else if ( ORGANISATIONUNIT.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 ) )
- {
- int level = DimensionalObjectUtils.getLevelFromLevelParam( ou );
-
- if ( level > 0 )
- {
- object.getOrganisationUnitLevels().add( level );
- }
- }
- else if ( ou != null && ou.startsWith( KEY_ORGUNIT_GROUP ) )
- {
- String uid = DimensionalObjectUtils.getUidFromOrgUnitGroupParam( ou );
-
- OrganisationUnitGroup group = identifiableObjectManager.get( OrganisationUnitGroup.class, uid );
-
- if ( group != null )
- {
- object.getItemOrganisationUnitGroups().add( group );
- }
- }
- else
- {
- OrganisationUnit unit = identifiableObjectManager.get( OrganisationUnit.class, ou );
-
- if ( unit != null )
- {
- object.getOrganisationUnits().add( unit );
- }
- }
- }
- }
- else if ( CATEGORY.equals( type ) )
- {
- DataElementCategoryDimension categoryDimension = new DataElementCategoryDimension();
- categoryDimension.setDimension( categoryService.getDataElementCategory( dimensionId ) );
- categoryDimension.getItems().addAll( categoryService.getDataElementCategoryOptionsByUid( uids ) );
-
- object.getCategoryDimensions().add( categoryDimension );
- }
- else if ( DATAELEMENT_GROUPSET.equals( type ) )
- {
- object.getDataElementGroups().addAll( identifiableObjectManager.getByUid( DataElementGroup.class, uids ) );
- }
- else if ( ORGANISATIONUNIT_GROUPSET.equals( type ) )
- {
- object.getOrganisationUnitGroups().addAll( identifiableObjectManager.getByUid( OrganisationUnitGroup.class, uids ) );
- }
- else if ( CATEGORYOPTION_GROUPSET.equals( type ) )
- {
- object.getCategoryOptionGroups().addAll( identifiableObjectManager.getByUid( CategoryOptionGroup.class, uids ) );
- }
- }
- }
- }
-}
=== modified file 'dhis-2/dhis-services/dhis-service-core/src/main/resources/META-INF/dhis/beans.xml'
--- dhis-2/dhis-services/dhis-service-core/src/main/resources/META-INF/dhis/beans.xml 2014-03-26 11:38:14 +0000
+++ dhis-2/dhis-services/dhis-service-core/src/main/resources/META-INF/dhis/beans.xml 2014-03-26 18:14:37 +0000
@@ -774,8 +774,6 @@
<bean id="org.hisp.dhis.help.HelpManager" class="org.hisp.dhis.help.DefaultHelpManager" />
- <bean id="org.hisp.dhis.common.DimensionService" class="org.hisp.dhis.common.DefaultDimensionService" />
-
<bean id="org.hisp.dhis.appmanager.AppManager" class="org.hisp.dhis.appmanager.DefaultAppManager" />
<bean id="org.hisp.dhis.system.SystemService" class="org.hisp.dhis.system.DefaultSystemService" />
=== removed file 'dhis-2/dhis-services/dhis-service-core/src/test/java/org/hisp/dhis/common/DimensionServiceTest.java'
--- dhis-2/dhis-services/dhis-service-core/src/test/java/org/hisp/dhis/common/DimensionServiceTest.java 2014-03-18 08:10:10 +0000
+++ dhis-2/dhis-services/dhis-service-core/src/test/java/org/hisp/dhis/common/DimensionServiceTest.java 1970-01-01 00:00:00 +0000
@@ -1,236 +0,0 @@
-package org.hisp.dhis.common;
-
-/*
- * Copyright (c) 2004-2014, University of Oslo
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- * Redistributions of source code must retain the above copyright notice, this
- * list of conditions and the following disclaimer.
- *
- * Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * Neither the name of the HISP project nor the names of its contributors may
- * be used to endorse or promote products derived from this software without
- * specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
- * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-import static org.hisp.dhis.organisationunit.OrganisationUnit.KEY_LEVEL;
-import static org.hisp.dhis.organisationunit.OrganisationUnit.KEY_USER_ORGUNIT;
-import static org.hisp.dhis.period.RelativePeriodEnum.LAST_12_MONTHS;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-
-import java.util.Arrays;
-
-import org.hisp.dhis.DhisSpringTest;
-import org.hisp.dhis.dataelement.DataElement;
-import org.hisp.dhis.dataelement.DataElementService;
-import org.hisp.dhis.organisationunit.OrganisationUnit;
-import org.hisp.dhis.organisationunit.OrganisationUnitGroup;
-import org.hisp.dhis.organisationunit.OrganisationUnitGroupService;
-import org.hisp.dhis.organisationunit.OrganisationUnitGroupSet;
-import org.hisp.dhis.organisationunit.OrganisationUnitService;
-import org.hisp.dhis.period.Period;
-import org.hisp.dhis.reporttable.ReportTable;
-import org.junit.Test;
-import org.springframework.beans.factory.annotation.Autowired;
-
-/**
- * @author Lars Helge Overland
- */
-public class DimensionServiceTest
- extends DhisSpringTest
-{
- private DataElement deA;
- private DataElement deB;
-
- private Period peA;
- private Period peB;
-
- private BaseNameableObject peLast12Months;
-
- private OrganisationUnit ouA;
- private OrganisationUnit ouB;
- private OrganisationUnit ouC;
- private OrganisationUnit ouD;
- private OrganisationUnit ouE;
-
- private BaseNameableObject ouUser;
- private BaseNameableObject ouLevel2;
-
- private OrganisationUnitGroup ouGroupA;
- private OrganisationUnitGroup ouGroupB;
- private OrganisationUnitGroup ouGroupC;
-
- private OrganisationUnitGroupSet ouGroupSetA;
-
- @Autowired
- private DataElementService dataElementService;
-
- @Autowired
- private OrganisationUnitService organisationUnitService;
-
- @Autowired
- private OrganisationUnitGroupService organisationUnitGroupService;
-
- @Autowired
- private DimensionService dimensionService;
-
- @Override
- public void setUpTest()
- {
- deA = createDataElement( 'A' );
- deB = createDataElement( 'B' );
-
- dataElementService.addDataElement( deA );
- dataElementService.addDataElement( deB );
-
- peA = createPeriod( "201201" );
- peB = createPeriod( "201202" );
- peLast12Months = new BaseNameableObject( LAST_12_MONTHS.toString(), LAST_12_MONTHS.toString(), LAST_12_MONTHS.toString() );
-
- peA.setUid( "201201" );
- peB.setUid( "201202" );
-
- ouA = createOrganisationUnit( 'A' );
- ouB = createOrganisationUnit( 'B' );
- ouC = createOrganisationUnit( 'C' );
- ouD = createOrganisationUnit( 'D' );
- ouE = createOrganisationUnit( 'E' );
-
- ouB.updateParent( ouA );
- ouC.updateParent( ouA );
- ouD.updateParent( ouB );
- ouE.updateParent( ouB );
-
- organisationUnitService.addOrganisationUnit( ouA );
- organisationUnitService.addOrganisationUnit( ouB );
- organisationUnitService.addOrganisationUnit( ouC );
- organisationUnitService.addOrganisationUnit( ouD );
- organisationUnitService.addOrganisationUnit( ouE );
-
- String level2 = KEY_LEVEL + 2;
-
- ouUser = new BaseNameableObject( KEY_USER_ORGUNIT, KEY_USER_ORGUNIT, KEY_USER_ORGUNIT );
- ouLevel2 = new BaseNameableObject( level2, level2, level2 );
-
- ouGroupSetA = createOrganisationUnitGroupSet( 'A' );
-
- organisationUnitGroupService.addOrganisationUnitGroupSet( ouGroupSetA );
-
- ouGroupA = createOrganisationUnitGroup( 'A' );
- ouGroupB = createOrganisationUnitGroup( 'B' );
- ouGroupC = createOrganisationUnitGroup( 'C' );
-
- ouGroupA.setGroupSet( ouGroupSetA );
- ouGroupB.setGroupSet( ouGroupSetA );
- ouGroupC.setGroupSet( ouGroupSetA );
-
- organisationUnitGroupService.addOrganisationUnitGroup( ouGroupA );
- organisationUnitGroupService.addOrganisationUnitGroup( ouGroupB );
- organisationUnitGroupService.addOrganisationUnitGroup( ouGroupC );
-
- ouGroupSetA.getOrganisationUnitGroups().add( ouGroupA );
- ouGroupSetA.getOrganisationUnitGroups().add( ouGroupB );
- ouGroupSetA.getOrganisationUnitGroups().add( ouGroupC );
-
- organisationUnitGroupService.updateOrganisationUnitGroupSet( ouGroupSetA );
- }
-
- @Test
- public void testMergeAnalyticalObject()
- {
- ReportTable reportTable = new ReportTable();
-
- reportTable.getColumns().add( new BaseDimensionalObject( DimensionalObject.DATAELEMENT_DIM_ID, Arrays.asList( deA, deB ) ) );
- reportTable.getRows().add( new BaseDimensionalObject( DimensionalObject.ORGUNIT_DIM_ID, Arrays.asList( ouA, ouB, ouC, ouD, ouE ) ) );
- reportTable.getFilters().add( new BaseDimensionalObject( DimensionalObject.PERIOD_DIM_ID, Arrays.asList( peA, peB ) ) );
-
- dimensionService.mergeAnalyticalObject( reportTable );
-
- assertEquals( 2, reportTable.getDataElements().size() );
- assertEquals( 2, reportTable.getPeriods().size() );
- assertEquals( 5, reportTable.getOrganisationUnits().size() );
- }
-
- @Test
- public void testMergeAnalyticalObjectUserOrgUnit()
- {
- ReportTable reportTable = new ReportTable();
-
- reportTable.getColumns().add( new BaseDimensionalObject( DimensionalObject.DATAELEMENT_DIM_ID, Arrays.asList( deA, deB ) ) );
- reportTable.getRows().add( new BaseDimensionalObject( DimensionalObject.ORGUNIT_DIM_ID, Arrays.asList( ouUser ) ) );
- reportTable.getFilters().add( new BaseDimensionalObject( DimensionalObject.PERIOD_DIM_ID, Arrays.asList( peA ) ) );
-
- dimensionService.mergeAnalyticalObject( reportTable );
-
- assertEquals( 2, reportTable.getDataElements().size() );
- assertEquals( 1, reportTable.getPeriods().size() );
- assertEquals( 0, reportTable.getOrganisationUnits().size() );
- assertTrue( reportTable.isUserOrganisationUnit() );
- }
-
- @Test
- public void testMergeAnalyticalObjectOrgUnitLevel()
- {
- ReportTable reportTable = new ReportTable();
-
- reportTable.getColumns().add( new BaseDimensionalObject( DimensionalObject.DATAELEMENT_DIM_ID, Arrays.asList( deA, deB ) ) );
- reportTable.getRows().add( new BaseDimensionalObject( DimensionalObject.ORGUNIT_DIM_ID, Arrays.asList( ouLevel2, ouA ) ) );
- reportTable.getFilters().add( new BaseDimensionalObject( DimensionalObject.PERIOD_DIM_ID, Arrays.asList( peA ) ) );
-
- dimensionService.mergeAnalyticalObject( reportTable );
-
- assertEquals( 2, reportTable.getDataElements().size() );
- assertEquals( 1, reportTable.getPeriods().size() );
- assertEquals( 1, reportTable.getOrganisationUnits().size() );
- assertEquals( Integer.valueOf( 2 ), reportTable.getOrganisationUnitLevels().get( 0 ) );
- }
-
- @Test
- public void testMergeAnalyticalObjectRelativePeriods()
- {
- ReportTable reportTable = new ReportTable();
-
- reportTable.getColumns().add( new BaseDimensionalObject( DimensionalObject.DATAELEMENT_DIM_ID, Arrays.asList( deA, deB ) ) );
- reportTable.getRows().add( new BaseDimensionalObject( DimensionalObject.ORGUNIT_DIM_ID, Arrays.asList( ouA, ouB, ouC, ouD, ouE ) ) );
- reportTable.getFilters().add( new BaseDimensionalObject( DimensionalObject.PERIOD_DIM_ID, Arrays.asList( peLast12Months ) ) );
-
- dimensionService.mergeAnalyticalObject( reportTable );
-
- assertEquals( 2, reportTable.getDataElements().size() );
- assertEquals( 0, reportTable.getPeriods().size() );
- assertTrue( reportTable.getRelatives().isLast12Months() );
- assertEquals( 5, reportTable.getOrganisationUnits().size() );
- }
-
- @Test
- public void testMergeAnalyticalObjectOrgUnitGroupSet()
- {
- ReportTable reportTable = new ReportTable();
-
- reportTable.getColumns().add( new BaseDimensionalObject( DimensionalObject.DATAELEMENT_DIM_ID, Arrays.asList( deA, deB ) ) );
- reportTable.getRows().add( ouGroupSetA );
- reportTable.getFilters().add( new BaseDimensionalObject( DimensionalObject.PERIOD_DIM_ID, Arrays.asList( peA, peB ) ) );
-
- dimensionService.mergeAnalyticalObject( reportTable );
-
- assertEquals( 2, reportTable.getDataElements().size() );
- assertEquals( 2, reportTable.getPeriods().size() );
- assertEquals( 3, reportTable.getOrganisationUnitGroups().size() );
- }
-}