=== modified file 'local/vn/dhis-web-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/exporting/action/GenerateReportOrgGroupListingAction.java' --- local/vn/dhis-web-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/exporting/action/GenerateReportOrgGroupListingAction.java 2012-05-04 09:50:39 +0000 +++ local/vn/dhis-web-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/exporting/action/GenerateReportOrgGroupListingAction.java 2012-07-10 04:54:06 +0000 @@ -59,6 +59,8 @@ { private static final String PREFIX_FORMULA_SUM = "SUM("; + private static Map> childrenGroupMap = new HashMap>(); + // ------------------------------------------------------------------------- // Dependency // ------------------------------------------------------------------------- @@ -78,31 +80,88 @@ ExportReportOrganizationGroupListing exportReportInstance = (ExportReportOrganizationGroupListing) exportReport; - Map orgUniGroupAtLevels = new HashMap( - exportReportInstance.getOrganisationUnitLevels() ); + Map orgUnitGroupAtLevels = exportReportInstance + .getOrganisationUnitLevels(); + + prepareChildrenGroupMap( exportReportInstance, organisationUnit, orgUnitGroupAtLevels ); this.installReadTemplateFile( exportReportInstance, period, organisationUnit ); + Collection exportReportItems = null; + for ( Integer sheetNo : exportReportService.getSheets( selectionManager.getSelectedReportId() ) ) { Sheet sheet = this.templateWorkbook.getSheetAt( sheetNo - 1 ); - Collection exportReportItems = exportReportInstance.getExportItemBySheet( sheetNo ); + exportReportItems = exportReportInstance.getExportItemBySheet( sheetNo ); - generateOutPutFile( exportReportInstance, orgUniGroupAtLevels, exportReportItems, organisationUnit, sheet ); + generateOutPutFile( exportReportInstance, exportReportItems, sheet ); } + + /** + * Garbage + */ + exportReportItems = null; + orgUnitGroupAtLevels = null; + childrenGroupMap = null; } // ------------------------------------------------------------------------- // Supportive method // ------------------------------------------------------------------------- + private void prepareChildrenGroupMap( ExportReportOrganizationGroupListing exportReport, + OrganisationUnit organisationUnit, Map orgUnitGroupAtLevels ) + { + OrganisationUnitLevel organisationUnitLevel = null; + Collection membersOfGroup = null; + Collection organisationUnitsAtLevel = null; + Collection childrens = organisationUnit.getChildren(); + + for ( OrganisationUnitGroup organisationUnitGroup : exportReport.getOrganisationUnitGroups() ) + { + List organisationUnits = new ArrayList(); + + membersOfGroup = organisationUnitGroup.getMembers(); + + if ( membersOfGroup != null && !membersOfGroup.isEmpty() ) + { + organisationUnits.addAll( membersOfGroup ); + } + + organisationUnitLevel = orgUnitGroupAtLevels.get( organisationUnitGroup ); + + if ( organisationUnitLevel != null ) + { + organisationUnitsAtLevel = organisationUnitService.getOrganisationUnitsAtLevel( organisationUnitLevel + .getLevel(), organisationUnit ); + + organisationUnits.retainAll( organisationUnitsAtLevel ); + } + else + { + organisationUnits.retainAll( childrens ); + } + + Collections.sort( organisationUnits, new IdentifiableObjectNameComparator() ); + + childrenGroupMap.put( organisationUnitGroup.getId(), organisationUnits ); + } + + /** + * Garbage + */ + childrens = null; + membersOfGroup = null; + organisationUnitLevel = null; + organisationUnitsAtLevel = null; + } + private void generateOutPutFile( ExportReportOrganizationGroupListing exportReport, - Map orgUniGroupAtLevels, - Collection exportReportItems, OrganisationUnit organisationUnit, Sheet sheet ) + Collection exportReportItems, Sheet sheet ) { - List childrens = new ArrayList( organisationUnit.getChildren() ); - + List organisationUnits = null; + for ( ExportItem reportItem : exportReportItems ) { int run = 0; @@ -115,28 +174,10 @@ for ( OrganisationUnitGroup organisationUnitGroup : exportReport.getOrganisationUnitGroups() ) { - List organisationUnits = new ArrayList( organisationUnitGroup - .getMembers() ); - - OrganisationUnitLevel organisationUnitLevel = orgUniGroupAtLevels.get( organisationUnitGroup ); - - if ( organisationUnitLevel != null ) - { - List organisationUnitsAtLevel = new ArrayList( - organisationUnitService.getOrganisationUnitsAtLevel( organisationUnitLevel.getLevel(), - organisationUnit ) ); - - organisationUnits.retainAll( organisationUnitsAtLevel ); - } - else - { - organisationUnits.retainAll( childrens ); - } - - Collections.sort( organisationUnits, new IdentifiableObjectNameComparator() ); - int beginChapter = rowBegin; + organisationUnits = childrenGroupMap.get( organisationUnitGroup.getId() ); + if ( reportItem.getItemType().equalsIgnoreCase( ExportItem.TYPE.ORGANISATION ) && (!organisationUnits.isEmpty()) ) { @@ -232,5 +273,7 @@ ExcelUtils.writeFormulaByPOI( firstRow, reportItem.getColumn(), totalFormula, sheet, this.csFormula ); } } + + organisationUnits = null; } }