=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/BaseAnalyticalObject.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/BaseAnalyticalObject.java 2013-07-04 15:41:57 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/BaseAnalyticalObject.java 2013-08-09 14:10:43 +0000 @@ -39,6 +39,7 @@ import static org.hisp.dhis.organisationunit.OrganisationUnit.KEY_USER_ORGUNIT; import static org.hisp.dhis.organisationunit.OrganisationUnit.KEY_USER_ORGUNIT_CHILDREN; import static org.hisp.dhis.organisationunit.OrganisationUnit.KEY_LEVEL; +import static org.hisp.dhis.organisationunit.OrganisationUnit.KEY_ORGUNIT_GROUP; import java.util.ArrayList; import java.util.Arrays; @@ -46,8 +47,10 @@ import java.util.Collections; import java.util.Date; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Set; import org.apache.commons.lang.StringUtils; import org.hisp.dhis.common.adapter.JacksonPeriodDeserializer; @@ -131,8 +134,16 @@ protected boolean userOrganisationUnitChildren; + /** + * Level of dimension item organisation units. + */ protected Integer organisationUnitLevel; + /** + * Groups containing dimension item organisation units. + */ + protected List itemOrganisationUnitGroups = new ArrayList(); + protected boolean rewindRelativePeriods; // ------------------------------------------------------------------------- @@ -193,6 +204,18 @@ } } + protected Set getOrganisationUnitsInItemGroups() + { + Set units = new HashSet(); + + for ( OrganisationUnitGroup group : itemOrganisationUnitGroups ) + { + units.addAll( group.getMembers() ); + } + + return units; + } + /** * Assembles a DimensionalObject. Collapses indicators, data elements, data * element operands and data sets into the dx dimension. @@ -264,6 +287,11 @@ items.addAll( organisationUnitsAtLevel ); } + if ( itemOrganisationUnitGroups != null && !itemOrganisationUnitGroups.isEmpty() ) + { + items.addAll( getOrganisationUnitsInItemGroups() ); + } + type = DimensionType.ORGANISATIONUNIT; } else if ( CATEGORYOPTIONCOMBO_DIM_ID.equals( dimension ) ) @@ -407,6 +435,16 @@ } } + if ( itemOrganisationUnitGroups != null && !itemOrganisationUnitGroups.isEmpty() ) + { + for ( OrganisationUnitGroup group : itemOrganisationUnitGroups ) + { + String id = KEY_ORGUNIT_GROUP + group.getUid(); + + ouList.add( new BaseNameableObject( id, id, id ) ); + } + } + objects.add( new BaseDimensionalObject( dimension, DimensionType.ORGANISATIONUNIT, ouList ) ); } else if ( CATEGORYOPTIONCOMBO_DIM_ID.equals( dimension ) ) @@ -762,6 +800,20 @@ @JsonProperty @JsonView( {DetailedView.class, ExportView.class} ) + @JacksonXmlElementWrapper( localName = "itemOrganisationUnitGroups", namespace = DxfNamespaces.DXF_2_0) + @JacksonXmlProperty( localName = "itemOrganisationUnitGroup", namespace = DxfNamespaces.DXF_2_0) + public List getItemOrganisationUnitGroups() + { + return itemOrganisationUnitGroups; + } + + public void setItemOrganisationUnitGroups( List itemOrganisationUnitGroups ) + { + this.itemOrganisationUnitGroups = itemOrganisationUnitGroups; + } + + @JsonProperty + @JsonView( {DetailedView.class, ExportView.class} ) @JacksonXmlProperty( namespace = DxfNamespaces.DXF_2_0) public boolean isRewindRelativePeriods() { === modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/DimensionalObjectUtils.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/DimensionalObjectUtils.java 2013-07-04 15:41:57 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/DimensionalObjectUtils.java 2013-08-09 14:10:43 +0000 @@ -166,4 +166,25 @@ return null; } + + /** + * Retrieves the uid from an org unit group parameter string, which is on + * the format OU_GROUP- . + */ + public static String getUidFromOrgUnitGroupParam( String param ) + { + if ( param == null ) + { + return null; + } + + String[] split = param.split( "-" ); + + if ( split.length > 1 && split[1] != null ) + { + return String.valueOf( split[1] ); + } + + return null; + } } === modified file 'dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/DataQueryParams.java' --- dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/DataQueryParams.java 2013-06-24 13:38:28 +0000 +++ dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/DataQueryParams.java 2013-08-09 14:10:43 +0000 @@ -793,6 +793,8 @@ return new ArrayList(); } + // TODO move these to DimensionalObjectUtils or API, duplication of code + /** * Retrieves the level from a level parameter string, which is on the format * LEVEL-- . @@ -834,6 +836,27 @@ return null; } + + /** + * Retrieves the uid from an org unit group parameter string, which is on + * the format OU_GROUP- . + */ + public static String getUidFromOrgUnitGroupParam( String param ) + { + if ( param == null ) + { + return null; + } + + String[] split = param.split( ITEM_SEP ); + + if ( split.length > 1 && split[1] != null ) + { + return String.valueOf( split[1] ); + } + + return null; + } /** * Splits the given string on the ; character and returns the items in a === modified file 'dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/data/DefaultAnalyticsService.java' --- dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/data/DefaultAnalyticsService.java 2013-07-17 19:40:31 +0000 +++ dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/data/DefaultAnalyticsService.java 2013-08-09 14:10:43 +0000 @@ -50,6 +50,7 @@ import static org.hisp.dhis.common.NameableObjectUtils.asList; import static org.hisp.dhis.common.NameableObjectUtils.asTypedList; import static org.hisp.dhis.organisationunit.OrganisationUnit.KEY_LEVEL; +import static org.hisp.dhis.organisationunit.OrganisationUnit.KEY_ORGUNIT_GROUP; import static org.hisp.dhis.organisationunit.OrganisationUnit.KEY_USER_ORGUNIT; import static org.hisp.dhis.organisationunit.OrganisationUnit.KEY_USER_ORGUNIT_CHILDREN; import static org.hisp.dhis.period.PeriodType.getPeriodTypeFromIsoString; @@ -105,6 +106,7 @@ import org.hisp.dhis.indicator.Indicator; import org.hisp.dhis.indicator.IndicatorService; 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; @@ -823,6 +825,17 @@ ous.addAll( organisationUnitService.getOrganisationUnitsAtLevel( level, boundary ) ); } } + else if ( ou != null && ou.startsWith( KEY_ORGUNIT_GROUP ) ) + { + String uid = DataQueryParams.getUidFromOrgUnitGroupParam( ou ); + + OrganisationUnitGroup group = null; + + if ( uid != null && ( group = organisationUnitGroupService.getOrganisationUnitGroup( uid ) ) != null ) + { + ous.addAll( group.getMembers() ); + } + } else { OrganisationUnit unit = organisationUnitService.getOrganisationUnit( ou ); === modified 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 2013-07-17 12:38:00 +0000 +++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/common/DefaultDimensionService.java 2013-08-09 14:10:43 +0000 @@ -38,6 +38,7 @@ import static org.hisp.dhis.common.DimensionType.PERIOD; import static org.hisp.dhis.common.IdentifiableObjectUtils.getUids; import static org.hisp.dhis.organisationunit.OrganisationUnit.KEY_LEVEL; +import static org.hisp.dhis.organisationunit.OrganisationUnit.KEY_ORGUNIT_GROUP; import static org.hisp.dhis.organisationunit.OrganisationUnit.KEY_USER_ORGUNIT; import static org.hisp.dhis.organisationunit.OrganisationUnit.KEY_USER_ORGUNIT_CHILDREN; @@ -292,14 +293,25 @@ String boundary = DimensionalObjectUtils.getBoundaryFromLevelParam( ou ); - OrganisationUnit unit = identifiableObjectManager.get( OrganisationUnit.class, boundary ); + OrganisationUnit unit = null; - if ( level > 0 && unit != null ) + if ( level > 0 && boundary != null && ( unit = identifiableObjectManager.get( OrganisationUnit.class, boundary ) ) != null ) { object.setOrganisationUnitLevel( level ); ous.add( unit ); } } + else if ( ou != null && ou.startsWith( KEY_ORGUNIT_GROUP ) ) + { + String uid = DimensionalObjectUtils.getUidFromOrgUnitGroupParam( ou ); + + OrganisationUnitGroup group = null; + + if ( uid != null && ( group = identifiableObjectManager.get( OrganisationUnitGroup.class, uid ) ) != null ) + { + ous.addAll( group.getMembers() ); + } + } else { OrganisationUnit unit = identifiableObjectManager.get( OrganisationUnit.class, ou ); === modified file 'dhis-2/dhis-services/dhis-service-reporting/src/main/resources/org/hisp/dhis/chart/hibernate/Chart.hbm.xml' --- dhis-2/dhis-services/dhis-service-reporting/src/main/resources/org/hisp/dhis/chart/hibernate/Chart.hbm.xml 2013-08-08 15:14:50 +0000 +++ dhis-2/dhis-services/dhis-service-reporting/src/main/resources/org/hisp/dhis/chart/hibernate/Chart.hbm.xml 2013-08-09 14:10:43 +0000 @@ -127,6 +127,14 @@ foreign-key="fk_chart_orgunitgroups_orgunitgroupid" /> + + + + + + + === modified file 'dhis-2/dhis-services/dhis-service-reporting/src/main/resources/org/hisp/dhis/reporttable/hibernate/ReportTable.hbm.xml' --- dhis-2/dhis-services/dhis-service-reporting/src/main/resources/org/hisp/dhis/reporttable/hibernate/ReportTable.hbm.xml 2013-07-04 15:41:57 +0000 +++ dhis-2/dhis-services/dhis-service-reporting/src/main/resources/org/hisp/dhis/reporttable/hibernate/ReportTable.hbm.xml 2013-08-09 14:10:43 +0000 @@ -96,6 +96,14 @@ foreign-key="fk_reporttable_orgunitgroups_orgunitgroupid" /> + + + + + + + === modified file 'dhis-2/dhis-support/dhis-support-hibernate/src/main/resources/ehcache.xml' --- dhis-2/dhis-support/dhis-support-hibernate/src/main/resources/ehcache.xml 2013-05-27 08:39:36 +0000 +++ dhis-2/dhis-support/dhis-support-hibernate/src/main/resources/ehcache.xml 2013-08-09 14:10:43 +0000 @@ -180,6 +180,8 @@ + + @@ -204,6 +206,8 @@ + +