=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/organisationunit/OrganisationUnit.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/organisationunit/OrganisationUnit.java 2010-12-14 03:56:00 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/organisationunit/OrganisationUnit.java 2011-01-13 17:32:48 +0000 @@ -79,8 +79,6 @@ private Set groups = new HashSet(); - private transient int level; - private String contactPerson; private String address; @@ -88,6 +86,10 @@ private String email; private String phoneNumber; + + private transient int level; + + private transient boolean currentParent; // ------------------------------------------------------------------------- // Constructors @@ -488,16 +490,6 @@ this.groups = groups; } - public int getLevel() - { - return level; - } - - public void setLevel( int level ) - { - this.level = level; - } - public String getContactPerson() { return contactPerson; @@ -537,5 +529,24 @@ { this.phoneNumber = phoneNumber; } - + + public int getLevel() + { + return level; + } + + public void setLevel( int level ) + { + this.level = level; + } + + public boolean isCurrentParent() + { + return currentParent; + } + + public void setCurrentParent( boolean currentParent ) + { + this.currentParent = currentParent; + } } === modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/reporttable/ReportTable.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/reporttable/ReportTable.java 2011-01-13 04:50:36 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/reporttable/ReportTable.java 2011-01-13 17:32:48 +0000 @@ -29,8 +29,8 @@ import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; import java.util.HashMap; -import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.regex.Matcher; @@ -77,6 +77,7 @@ public static final String REPORTING_MONTH_COLUMN_NAME = "reporting_month_name"; public static final String PARAM_ORGANISATIONUNIT_COLUMN_NAME = "param_organisationunit_name"; + public static final String ORGANISATION_UNIT_IS_PARENT_COLUMN_NAME = "organisation_unit_is_parent"; public static final String SEPARATOR = "_"; public static final String SPACE = " "; @@ -91,8 +92,11 @@ public static final String REGRESSION_COLUMN_PREFIX = "regression_"; - public static final List DB_COLUMNS = Arrays.asList( DATAELEMENT_ID, CATEGORYCOMBO_ID, - INDICATOR_ID, DATASET_ID, PERIOD_ID, ORGANISATIONUNIT_ID, REPORTING_MONTH_COLUMN_NAME, PARAM_ORGANISATIONUNIT_COLUMN_NAME ); + public static final String TRUE = "true"; + public static final String FALSE = "false"; + + public static final List DB_COLUMNS = Arrays.asList( DATAELEMENT_ID, CATEGORYCOMBO_ID, INDICATOR_ID, DATASET_ID, + PERIOD_ID, ORGANISATIONUNIT_ID, REPORTING_MONTH_COLUMN_NAME, PARAM_ORGANISATIONUNIT_COLUMN_NAME, ORGANISATION_UNIT_IS_PARENT_COLUMN_NAME ); public static final Map PRETTY_COLUMNS = new HashMap() { { put( DATAELEMENT_NAME, "Data element" ); @@ -546,7 +550,7 @@ else { crossTabPeriods.add( null ); - reportPeriods = new ArrayList( new HashSet( allPeriods ) ); // Remove potential duplicates from relative periods / params + reportPeriods = new ArrayList( removeDuplicates( allPeriods ) ); // Remove potential duplicates from relative periods / params indexColumns.add( PERIOD_ID ); indexNameColumns.add( PERIOD_NAME ); } @@ -560,7 +564,7 @@ else { crossTabUnits.add( null ); - reportUnits = new ArrayList( new HashSet( allUnits ) ); // Remove potential duplicates from params + reportUnits = new ArrayList( removeDuplicates( allUnits ) ); // Remove potential duplicates from params indexColumns.add( ORGANISATIONUNIT_ID ); indexNameColumns.add( ORGANISATIONUNIT_NAME ); } @@ -993,6 +997,26 @@ return string; } + + /** + * Removes duplicates from the given list while maintaining the order. + */ + private List removeDuplicates( List list ) + { + final List temp = new ArrayList( list ); + Collections.reverse( temp ); + list.clear(); + + for ( T object : temp ) + { + if ( !list.contains( object ) ) + { + list.add( object ); + } + } + + return list; + } /** * Supportive method. === modified file 'dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/reporttable/impl/DefaultReportTableService.java' --- dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/reporttable/impl/DefaultReportTableService.java 2010-12-26 15:38:45 +0000 +++ dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/reporttable/impl/DefaultReportTableService.java 2011-01-13 17:32:48 +0000 @@ -181,6 +181,8 @@ if ( reportTable.getReportParams() != null && reportTable.getReportParams().isParamParentOrganisationUnit() ) { OrganisationUnit organisationUnit = organisationUnitService.getOrganisationUnit( organisationUnitId ); + organisationUnit.setCurrentParent( true ); + reportTable.getRelativeUnits().add( organisationUnit ); reportTable.getRelativeUnits().addAll( new ArrayList( organisationUnit.getChildren() ) ); reportTable.setOrganisationUnitName( organisationUnit.getName() ); @@ -507,6 +509,12 @@ // ----------------------------------------------------- grid.addValue( reportTable.getOrganisationUnitName() ); + + // --------------------------------------------------------------------- + // Organisation unit is parent + // --------------------------------------------------------------------- + + grid.addValue( unit != null && unit.isCurrentParent() ? ReportTable.TRUE : ReportTable.FALSE ); // ----------------------------------------------------- // Values === modified file 'dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/reporttable/statement/CreateReportTableStatement.java' --- dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/reporttable/statement/CreateReportTableStatement.java 2010-12-10 19:33:05 +0000 +++ dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/reporttable/statement/CreateReportTableStatement.java 2011-01-13 17:32:48 +0000 @@ -92,6 +92,12 @@ // --------------------------------------------------------------------- buffer.append( ReportTable.PARAM_ORGANISATIONUNIT_COLUMN_NAME + SPACE + LONG_TEXT_COLUMN_TYPE + SEPARATOR ); + + // --------------------------------------------------------------------- + // Organisation unit is parent + // --------------------------------------------------------------------- + + buffer.append( ReportTable.ORGANISATION_UNIT_IS_PARENT_COLUMN_NAME + SPACE + SHORT_TEXT_COLUMN_TYPE + SEPARATOR ); // --------------------------------------------------------------------- // Crosstab