=== modified file 'dhis-2/dhis-services/dhis-service-administration/src/main/java/org/hisp/dhis/databrowser/DefaultDataBrowserGridService.java' --- dhis-2/dhis-services/dhis-service-administration/src/main/java/org/hisp/dhis/databrowser/DefaultDataBrowserGridService.java 2014-01-24 08:41:50 +0000 +++ dhis-2/dhis-services/dhis-service-administration/src/main/java/org/hisp/dhis/databrowser/DefaultDataBrowserGridService.java 2014-01-25 14:05:26 +0000 @@ -34,7 +34,6 @@ import java.util.Collection; import java.util.Collections; import java.util.Date; -import java.util.Iterator; import java.util.List; import org.hisp.dhis.common.Grid; @@ -55,12 +54,9 @@ public class DefaultDataBrowserGridService implements DataBrowserGridService { - private static final String STARTDATE = "1900-01-01"; - - private static final String ENDDATE = "3000-01-01"; - + private static final String DEFAULT_STARTDATE = "1900-01-01"; + private static final String DEFAULT_ENDDATE = "3000-01-01"; private static final String SPACE = " "; - private static final String DASH = " - "; // ------------------------------------------------------------------------- @@ -83,15 +79,11 @@ // ------------------------------------------------------------------------- // DataBrowserGridService implementation - // - // Basic // ------------------------------------------------------------------------- - public Grid getDataSetsInPeriod( String startDate, String endDate, PeriodType periodType, I18nFormat format, - boolean isZeroAdded ) + public Grid getDataSetsInPeriod( String startDate, String endDate, PeriodType periodType, I18nFormat format, boolean isZeroAdded ) { - List betweenPeriodIds = getAllPeriodIdsBetweenDatesOnPeriodType( startDate, endDate, periodType, - format ); + List betweenPeriodIds = getAllPeriodIdsBetweenDatesOnPeriodType( startDate, endDate, periodType, format ); return dataBrowserGridStore.getDataSetsBetweenPeriods( betweenPeriodIds, periodType, isZeroAdded ); } @@ -99,8 +91,7 @@ public Grid getDataElementGroupsInPeriod( String startDate, String endDate, PeriodType periodType, I18nFormat format, boolean isZeroAdded ) { - List betweenPeriodIds = getAllPeriodIdsBetweenDatesOnPeriodType( startDate, endDate, periodType, - format ); + List betweenPeriodIds = getAllPeriodIdsBetweenDatesOnPeriodType( startDate, endDate, periodType, format ); return dataBrowserGridStore.getDataElementGroupsBetweenPeriods( betweenPeriodIds, isZeroAdded ); } @@ -108,8 +99,7 @@ public Grid getOrgUnitGroupsInPeriod( String startDate, String endDate, PeriodType periodType, I18nFormat format, boolean isZeroAdded ) { - List betweenPeriodIds = getAllPeriodIdsBetweenDatesOnPeriodType( startDate, endDate, periodType, - format ); + List betweenPeriodIds = getAllPeriodIdsBetweenDatesOnPeriodType( startDate, endDate, periodType, format ); return dataBrowserGridStore.getOrgUnitGroupsBetweenPeriods( betweenPeriodIds, isZeroAdded ); } @@ -262,41 +252,34 @@ // Supportive methods // ------------------------------------------------------------------------- /** - * Helper-method that finds all PeriodIds between a given period. Uses - * functionality already in the DHIS. Returns a list with all id's that was - * found. - * - * @param startDate - * @param endDate - * @param periodType - * @return List + * Returns identifiers of periods between the given dates for the given period + * type. */ private List getAllPeriodIdsBetweenDatesOnPeriodType( String startDate, String endDate, PeriodType periodType, I18nFormat i18nFormat ) { - if ( startDate == null || startDate.length() == 0 ) + if ( startDate == null || startDate.isEmpty() ) { - startDate = STARTDATE; + startDate = DEFAULT_STARTDATE; } - if ( endDate == null || endDate.length() == 0 ) + if ( endDate == null || endDate.isEmpty() ) { - endDate = ENDDATE; + endDate = DEFAULT_ENDDATE; } Date date1 = i18nFormat.parseDate( startDate ); Date date2 = i18nFormat.parseDate( endDate ); - Collection pp = periodService.getPeriodsBetweenDates( periodType, date1, date2 ); + Collection periods = periodService.getPeriodsBetweenDates( periodType, date1, date2 ); - Iterator it = pp.iterator(); List betweenPeriodIds = new ArrayList(); - while ( it.hasNext() ) + for ( Period period : periods ) { - betweenPeriodIds.add( it.next().getId() ); + betweenPeriodIds.add( period.getId() ); } - if ( betweenPeriodIds.size() <= 0 ) + if ( betweenPeriodIds.isEmpty() ) { betweenPeriodIds.add( -1 ); } @@ -322,8 +305,8 @@ Date date1 = sdf.parse( fromDate ); Date date2 = sdf.parse( toDate ); - List periods = new ArrayList( periodService.getPeriodsBetweenDates( periodType, date1, - date2 ) ); + List periods = new ArrayList( periodService.getPeriodsBetweenDates( + periodType, date1, date2 ) ); if ( periods.isEmpty() ) { === modified file 'dhis-2/dhis-services/dhis-service-administration/src/main/java/org/hisp/dhis/databrowser/jdbc/JDBCDataBrowserStore.java' --- dhis-2/dhis-services/dhis-service-administration/src/main/java/org/hisp/dhis/databrowser/jdbc/JDBCDataBrowserStore.java 2013-08-23 16:00:30 +0000 +++ dhis-2/dhis-services/dhis-service-administration/src/main/java/org/hisp/dhis/databrowser/jdbc/JDBCDataBrowserStore.java 2014-01-25 14:05:26 +0000 @@ -31,6 +31,8 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.hisp.dhis.common.Grid; import org.hisp.dhis.common.GridHeader; import org.hisp.dhis.databrowser.DataBrowserGridStore; @@ -49,6 +51,8 @@ public class JDBCDataBrowserStore implements DataBrowserGridStore { + private static final Log log = LogFactory.getLog( JDBCDataBrowserStore.class ); + // ------------------------------------------------------------------------- // Dependencies // ------------------------------------------------------------------------- @@ -92,15 +96,14 @@ sqlsb.append( "ORDER BY counts_of_aggregated_values DESC)" ); // Gets all the dataSets in a period with a count attached to the - // dataSet. The table returned has only 2 columns. They are created here - // in this method directly + // dataSet. The table returned has 2 columns. Grid dataSetGrid = new ListGrid(); dataSetGrid.addHeader( new GridHeader( "drilldown_data_set", false, false ) ); dataSetGrid.addHeader( new GridHeader( "counts_of_aggregated_values", false, false ) ); - fillUpDataBasic( dataSetGrid, sqlsb, isZeroAdded, jdbcTemplate ); + populateGrid( dataSetGrid, sqlsb.toString(), isZeroAdded, jdbcTemplate ); return dataSetGrid; } @@ -122,7 +125,7 @@ gridDEG.addHeader( new GridHeader( "drilldown_data_element_group", false, false ) ); gridDEG.addHeader( new GridHeader( "counts_of_aggregated_values", false, false ) ); - fillUpDataBasic( gridDEG, sqlsb, isZeroAdded, jdbcTemplate ); + populateGrid( gridDEG, sqlsb.toString(), isZeroAdded, jdbcTemplate ); return gridDEG; } @@ -145,7 +148,7 @@ gridOUG.addHeader( new GridHeader( "drilldown_orgunit_group", false, false ) ); gridOUG.addHeader( new GridHeader( "counts_of_aggregated_values", false, false ) ); - fillUpDataBasic( gridOUG, sqlsb, isZeroAdded, jdbcTemplate ); + populateGrid( gridOUG, sqlsb.toString(), isZeroAdded, jdbcTemplate ); return gridOUG; } @@ -165,7 +168,7 @@ sqlsb.append( "ORDER BY de.name) " ); grid.addHeader( new GridHeader( "drilldown_data_element", false, false ) ); - setMetaStructure( grid, sqlsb, metaIds, jdbcTemplate ); + populateMetaStructure( grid, sqlsb.toString(), metaIds, jdbcTemplate ); } public void setDataElementStructureForDataElementGroup( Grid grid, Integer dataElementGroupId, List metaIds ) @@ -180,7 +183,7 @@ sqlsb.append( "ORDER BY de.name) " ); grid.addHeader( new GridHeader( "drilldown_data_element", false, false ) ); - setMetaStructure( grid, sqlsb, metaIds, jdbcTemplate ); + populateMetaStructure( grid, sqlsb.toString(), metaIds, jdbcTemplate ); } public void setDataElementGroupStructureForOrgUnitGroup( Grid grid, Integer orgUnitGroupId, List metaIds ) @@ -198,7 +201,7 @@ sqlsb.append( "ORDER BY deg.name ASC) " ); grid.addHeader( new GridHeader( "drilldown_data_element_group", false, false ) ); - setMetaStructure( grid, sqlsb, metaIds, jdbcTemplate ); + populateMetaStructure( grid, sqlsb.toString(), metaIds, jdbcTemplate ); } @@ -212,7 +215,7 @@ sqlsb.append( "ORDER BY o.name)" ); grid.addHeader( new GridHeader( "drilldown_orgunit", false, false ) ); - setMetaStructure( grid, sqlsb, metaIds, jdbcTemplate ); + populateMetaStructure( grid, sqlsb.toString(), metaIds, jdbcTemplate ); } public void setDataElementStructureForOrgUnit( Grid grid, Integer orgUnitId, List metaIds ) @@ -222,7 +225,7 @@ sqlsb.append( statementBuilder.queryDataElementStructureForOrgUnit() ); grid.addHeader( new GridHeader( "drilldown_data_element", false, false ) ); - setMetaStructure( grid, sqlsb, metaIds, jdbcTemplate ); + populateMetaStructure( grid, sqlsb.toString(), metaIds, jdbcTemplate ); } // ------------------------------------------------------------------------- @@ -259,7 +262,7 @@ sqlsb.append( i == betweenPeriodIds.size() ? "ORDER BY ColumnHeader" : " UNION " ); } - return fillUpDataAdvance( grid, sqlsb, metaIds, isZeroAdded, jdbcTemplate ); + return populateGridAdvanced( grid, sqlsb.toString(), metaIds, isZeroAdded, jdbcTemplate ); } public Integer setCountDataElementsForDataElementGroupBetweenPeriods( Grid grid, Integer dataElementGroupId, @@ -283,7 +286,7 @@ sqlsb.append( i == betweenPeriodIds.size() ? "ORDER BY ColumnHeader" : " UNION " ); } - return fillUpDataAdvance( grid, sqlsb, metaIds, isZeroAdded, jdbcTemplate ); + return populateGridAdvanced( grid, sqlsb.toString(), metaIds, isZeroAdded, jdbcTemplate ); } public Integer setCountDataElementGroupsForOrgUnitGroupBetweenPeriods( Grid grid, Integer orgUnitGroupId, @@ -308,18 +311,18 @@ sqlsb.append( i == betweenPeriodIds.size() ? "ORDER BY ColumnHeader" : " UNION " ); } - return fillUpDataAdvance( grid, sqlsb, metaIds, isZeroAdded, jdbcTemplate ); + return populateGridAdvanced( grid, sqlsb.toString(), metaIds, isZeroAdded, jdbcTemplate ); } public Integer setCountOrgUnitsBetweenPeriods( Grid grid, Integer orgUnitParent, List betweenPeriodIds, Integer maxLevel, List metaIds, boolean isZeroAdded ) { - StringBuffer sqlsbDescentdants = new StringBuffer(); + StringBuffer sql = new StringBuffer(); - boolean valid = this.setUpQueryForDrillDownDescendants( sqlsbDescentdants, orgUnitParent, betweenPeriodIds, + boolean valid = this.setUpQueryForDrillDownDescendants( sql, orgUnitParent, betweenPeriodIds, maxLevel ); - return (valid ? fillUpDataAdvance( grid, sqlsbDescentdants, metaIds, isZeroAdded, jdbcTemplate ) : 0); + return valid ? populateGridAdvanced( grid, sql.toString(), metaIds, isZeroAdded, jdbcTemplate ) : 0; } @@ -330,23 +333,23 @@ sqlsb.append( statementBuilder.queryRawDataElementsForOrgUnitBetweenPeriods( orgUnitId, betweenPeriodIds ) ); - return fillUpDataAdvance( grid, sqlsb, metaIds, isZeroAdded, jdbcTemplate ); + return populateGridAdvanced( grid, sqlsb.toString(), metaIds, isZeroAdded, jdbcTemplate ); } // ------------------------------------------------------------------------- // Private methods // ------------------------------------------------------------------------- - private static void setMetaStructure( Grid grid, StringBuffer sqlsb, List metaIds, JdbcTemplate jdbcTemplate ) + private static void populateMetaStructure( Grid grid, final String sql, List metaIds, JdbcTemplate jdbcTemplate ) { - Integer metaId = null; - String metaName = null; - SqlRowSet resultSet = jdbcTemplate.queryForRowSet( sqlsb.toString() ); + log.info( "Meta SQL: " + sql ); + + SqlRowSet resultSet = jdbcTemplate.queryForRowSet( sql ); while ( resultSet.next() ) { - metaId = resultSet.getInt( 1 ); - metaName = resultSet.getString( 2 ); + Integer metaId = resultSet.getInt( 1 ); + String metaName = resultSet.getString( 2 ); metaIds.add( metaId ); grid.addRow().addValue( new MetaValue( metaId, metaName ) ); @@ -378,9 +381,11 @@ } } - private static void fillUpDataBasic( Grid grid, StringBuffer sqlsb, boolean isZeroAdded, JdbcTemplate jdbcTemplate ) + private static void populateGrid( Grid grid, final String sql, boolean isZeroAdded, JdbcTemplate jdbcTemplate ) { - SqlRowSet resultSet = jdbcTemplate.queryForRowSet( sqlsb.toString() ); + log.info( "Grid SQL: " + sql ); + + SqlRowSet resultSet = jdbcTemplate.queryForRowSet( sql ); while ( resultSet.next() ) { @@ -390,15 +395,15 @@ } } - private static int fillUpDataAdvance( Grid grid, StringBuffer sqlsb, List metaIds, boolean isZeroAdded, + private static int populateGridAdvanced( Grid grid, final String sql, List metaIds, boolean isZeroAdded, JdbcTemplate jdbcTemplate ) { int countRows = 0; - int rowIndex = -1; - int columnIndex = -1; int oldWidth = grid.getWidth(); - SqlRowSet rs = jdbcTemplate.queryForRowSet( sqlsb.toString() ); + log.info( "Advanced SQL: " + sql ); + + SqlRowSet rs = jdbcTemplate.queryForRowSet( sql ); List headerIds = new ArrayList(); setHeaderStructure( grid, rs, headerIds, isZeroAdded ); @@ -412,8 +417,8 @@ while ( rs.next() ) { - rowIndex = metaIds.indexOf( rs.getInt( 1 ) ); - columnIndex = headerIds.indexOf( rs.getInt( 4 ) ) + oldWidth; + int rowIndex = metaIds.indexOf( rs.getInt( 1 ) ); + int columnIndex = headerIds.indexOf( rs.getInt( 4 ) ) + oldWidth; grid.getRow( rowIndex ).set( columnIndex, checkValue( rs.getString( 3 ), isZeroAdded ) ); === removed file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/java/org/hisp/dhis/dataadmin/action/databrowser/ActionSupport.java' --- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/java/org/hisp/dhis/dataadmin/action/databrowser/ActionSupport.java 2013-08-23 16:05:01 +0000 +++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/java/org/hisp/dhis/dataadmin/action/databrowser/ActionSupport.java 1970-01-01 00:00:00 +0000 @@ -1,457 +0,0 @@ -package org.hisp.dhis.dataadmin.action.databrowser; - -/* - * Copyright (c) 2004-2013, 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 java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.Hashtable; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import org.hisp.dhis.common.Grid; -import org.hisp.dhis.common.GridHeader; -import org.hisp.dhis.common.comparator.IdentifiableObjectNameComparator; -import org.hisp.dhis.databrowser.DataBrowserGridService; -import org.hisp.dhis.databrowser.MetaValue; -import org.hisp.dhis.dataelement.DataElementGroup; -import org.hisp.dhis.dataelement.DataElementService; -import org.hisp.dhis.dataset.DataSetService; -import org.hisp.dhis.i18n.I18n; -import org.hisp.dhis.i18n.I18nFormat; -import org.hisp.dhis.organisationunit.OrganisationUnit; -import org.hisp.dhis.organisationunit.OrganisationUnitGroupService; -import org.hisp.dhis.organisationunit.OrganisationUnitService; -import org.hisp.dhis.oust.manager.SelectionTreeManager; -import org.hisp.dhis.paging.ActionPagingSupport; -import org.hisp.dhis.period.PeriodService; -import org.hisp.dhis.period.PeriodType; - -/** - * @author Dang Duy Hieu - * @version $Id$ - */ -public abstract class ActionSupport - extends ActionPagingSupport -{ - protected static final String KEY_DATABROWSERGRID = "dataBrowserGridResults"; - - protected static final String TRUE = "on"; - - protected static final String EMPTY = ""; - - // ------------------------------------------------------------------------- - // Dependencies - // ------------------------------------------------------------------------- - - protected OrganisationUnitService organisationUnitService; - - public void setOrganisationUnitService( OrganisationUnitService organisationUnitService ) - { - this.organisationUnitService = organisationUnitService; - } - - protected DataBrowserGridService dataBrowserGridService; - - public void setDataBrowserGridService( DataBrowserGridService dataBrowserGridService ) - { - this.dataBrowserGridService = dataBrowserGridService; - } - - protected DataElementService dataElementService; - - public void setDataElementService( DataElementService dataElementService ) - { - this.dataElementService = dataElementService; - } - - protected DataSetService dataSetService; - - public void setDataSetService( DataSetService dataSetService ) - { - this.dataSetService = dataSetService; - } - - protected OrganisationUnitGroupService organisationUnitGroupService; - - public void setOrganisationUnitGroupService( OrganisationUnitGroupService organisationUnitGroupService ) - { - this.organisationUnitGroupService = organisationUnitGroupService; - } - - protected PeriodService periodService; - - public void setPeriodService( PeriodService periodService ) - { - this.periodService = periodService; - } - - protected SelectionTreeManager selectionTreeManager; - - public void setSelectionTreeManager( SelectionTreeManager selectionTreeManager ) - { - this.selectionTreeManager = selectionTreeManager; - } - - // ------------------------------------------------------------------------- - // I18n & I18nFormat - // ------------------------------------------------------------------------- - - protected I18n i18n; - - public void setI18n( I18n i18n ) - { - this.i18n = i18n; - } - - protected I18nFormat format; - - public void setFormat( I18nFormat format ) - { - this.format = format; - } - - // ------------------------------------------------------------------------- - // Parameters - // ------------------------------------------------------------------------- - - protected Grid grid; - - protected String mode; - - protected String toDate; - - protected String fromDate; - - protected String fromToDate; - - protected String periodTypeId; - - protected String parent; - - protected String tmpParent; - - protected String orgunitid; - - protected String selectedUnitChanger; - - protected String dataElementName; - - protected String drillDownCheckBox; - - protected String showZeroCheckBox; - - protected OrganisationUnit selectedUnit; - - protected boolean isSummary; - - // ------------------------------------------------------------------------- - // Input - // ------------------------------------------------------------------------- - - public void setMode( String mode ) - { - this.mode = mode; - } - - public void setToDate( String toDate ) - { - this.toDate = toDate; - } - - public void setFromDate( String fromDate ) - { - this.fromDate = fromDate; - } - - public void setPeriodTypeId( String periodTypeId ) - { - this.periodTypeId = periodTypeId; - } - - public void setParent( String parent ) - { - this.parent = parent; - } - - public void setSelectedUnitChanger( String selectedUnitChanger ) - { - this.selectedUnitChanger = selectedUnitChanger.trim(); - } - - public void setOrgunitid( String orgunitid ) - { - this.orgunitid = orgunitid; - } - - public void setDrillDownCheckBox( String drillDownCheckBox ) - { - this.drillDownCheckBox = drillDownCheckBox; - } - - public void setShowZeroCheckBox( String showZeroCheckBox ) - { - this.showZeroCheckBox = showZeroCheckBox; - } - - public void setSummary( boolean isSummary ) - { - this.isSummary = isSummary; - } - - // ------------------------------------------------------------------------- - // Output - // ------------------------------------------------------------------------- - - public boolean isSummary() - { - return isSummary; - } - - public Grid getGrid() - { - return grid; - } - - public Collection getDataElementGroups() - { - return dataElementService.getAllDataElementGroups(); - } - - public String getMode() - { - return mode; - } - - public String getToDate() - { - return toDate; - } - - public String getFromDate() - { - return fromDate; - } - - public String getFromToDate() - { - return fromToDate; - } - - public String getPeriodTypeId() - { - return periodTypeId; - } - - public String getParent() - { - return parent; - } - - public String getOrgunitid() - { - return orgunitid; - } - - public String getTmpParent() - { - return tmpParent; - } - - public String getDataElementName() - { - return dataElementName; - } - - public String getShowZeroCheckBox() - { - return showZeroCheckBox; - } - - public String getParentName() - { - if ( mode.equals( "OU" ) ) - { - return selectedUnit.getName(); - } - - if ( parent == null ) - { - return EMPTY; - } - - if ( mode.equals( "DS" ) ) - { - return dataSetService.getDataSet( Integer.parseInt( parent ) ).getName(); - } - - if ( mode.equals( "OUG" ) ) - { - return organisationUnitGroupService.getOrganisationUnitGroup( Integer.parseInt( parent ) ).getName(); - } - - if ( mode.equals( "DEG" ) ) - { - return dataElementService.getDataElementGroup( Integer.parseInt( parent ) ).getName(); - } - - return EMPTY; - } - - public String getCurrentParentsParent() - { - try - { - return selectedUnit.getParent().getName(); - } - catch ( Exception e ) - { - return EMPTY; - } - } - - public List getCurrentChildren() - { - Set tmp = selectedUnit.getChildren(); - List list = new ArrayList(); - - for ( OrganisationUnit o : tmp ) - { - if ( o.getChildren().size() > 0 ) - { - list.add( o ); - } - } - Collections.sort( list, IdentifiableObjectNameComparator.INSTANCE ); - - return list; - } - - public List getBreadCrumbOrgUnit() - { - List myList = new ArrayList(); - - boolean loop = true; - OrganisationUnit currentOrgUnit = selectedUnit; - - while ( loop ) - { - myList.add( currentOrgUnit ); - - if ( currentOrgUnit.getParent() == null ) - { - loop = false; - } - else - { - currentOrgUnit = currentOrgUnit.getParent(); - } - } - Collections.reverse( myList ); - - return myList; - } - - public List getMetaValues() - { - return grid.getColumn( 0 ); - } - - public Map> getMetaValueMaps() - { - Map> maps = new Hashtable>(); - - for ( List row : grid.getRows() ) - { - if ( !row.isEmpty() && row.size() > 1 ) - { - maps.put( ((MetaValue) row.get( 0 )).getId(), row.subList( 1, row.size() ) ); - } - } - - return maps; - } - - // ------------------------------------------------------------------------- - // Supportive methods - // ------------------------------------------------------------------------- - - /** - * This is a helper method for populating a list of converted column names - * - * @param DataBrowserTable - */ - protected void convertColumnNames( Grid grid ) - { - PeriodType periodType = periodService.getPeriodTypeByName( periodTypeId ); - - for ( GridHeader col : grid.getVisibleHeaders() ) - { - col.setName( dataBrowserGridService.convertDate( periodType, col.getName(), i18n, format ) ); - } - } - - protected void setGridTitle() - { - grid.setTitle( i18n.getString( mappingMode( mode ) ) - + (mode.equals( "OU" ) == true ? " - " + getParentName() : EMPTY) ); - grid.setSubtitle( i18n.getString( "from_date" ) + ": " + fromDate + " " + i18n.getString( "to_date" ) + ": " - + toDate + ", " + i18n.getString( "period_type" ) + ": " + i18n.getString( periodTypeId ) ); - } - - protected void doPaging() - { - this.paging = this.createPaging( grid.getHeight() ); - - grid.limitGrid( paging.getStartPos(), paging.getEndPos() ); - } - - private String mappingMode( String mode ) - { - if ( mode.equals( "DS" ) ) - { - return "data_sets"; - } - else if ( mode.equals( "DEG" ) ) - { - return "data_element_groups"; - } - else if ( mode.equals( "OU" ) ) - { - return "organisation_units"; - } - else if ( mode.equals( "OUG" ) ) - { - return "organisation_unit_groups"; - } - - return mode; - } -} === modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/java/org/hisp/dhis/dataadmin/action/databrowser/DataBrowserAction.java' --- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/java/org/hisp/dhis/dataadmin/action/databrowser/DataBrowserAction.java 2013-08-23 16:05:01 +0000 +++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/java/org/hisp/dhis/dataadmin/action/databrowser/DataBrowserAction.java 2014-01-25 14:05:26 +0000 @@ -30,18 +30,379 @@ import static org.hisp.dhis.system.util.TextUtils.nullIfEmpty; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.Hashtable; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.hisp.dhis.common.Grid; +import org.hisp.dhis.common.GridHeader; +import org.hisp.dhis.common.comparator.IdentifiableObjectNameComparator; +import org.hisp.dhis.databrowser.DataBrowserGridService; +import org.hisp.dhis.databrowser.MetaValue; +import org.hisp.dhis.dataelement.DataElementGroup; +import org.hisp.dhis.dataelement.DataElementService; +import org.hisp.dhis.dataset.DataSetService; +import org.hisp.dhis.i18n.I18n; +import org.hisp.dhis.i18n.I18nFormat; +import org.hisp.dhis.organisationunit.OrganisationUnit; +import org.hisp.dhis.organisationunit.OrganisationUnitGroupService; +import org.hisp.dhis.organisationunit.OrganisationUnitService; +import org.hisp.dhis.oust.manager.SelectionTreeManager; +import org.hisp.dhis.paging.ActionPagingSupport; +import org.hisp.dhis.period.PeriodService; import org.hisp.dhis.period.PeriodType; import org.hisp.dhis.system.util.DateUtils; import org.hisp.dhis.util.SessionUtils; /** * @author espenjac, joakibj, briane, eivinhb - * @version $Id DataBrowerAction.java Apr 06, 2010 ddhieu */ public class DataBrowserAction - extends ActionSupport + extends ActionPagingSupport { - private boolean isZeroAdded = false; + private static final Log log = LogFactory.getLog( DataBrowserAction.class ); + + private static final String KEY_DATABROWSERGRID = "dataBrowserGridResults"; + private static final String TRUE = "on"; + private static final String EMPTY = ""; + + // ------------------------------------------------------------------------- + // Dependencies + // ------------------------------------------------------------------------- + + private OrganisationUnitService organisationUnitService; + + public void setOrganisationUnitService( OrganisationUnitService organisationUnitService ) + { + this.organisationUnitService = organisationUnitService; + } + + private DataBrowserGridService dataBrowserGridService; + + public void setDataBrowserGridService( DataBrowserGridService dataBrowserGridService ) + { + this.dataBrowserGridService = dataBrowserGridService; + } + + private DataElementService dataElementService; + + public void setDataElementService( DataElementService dataElementService ) + { + this.dataElementService = dataElementService; + } + + private DataSetService dataSetService; + + public void setDataSetService( DataSetService dataSetService ) + { + this.dataSetService = dataSetService; + } + + private OrganisationUnitGroupService organisationUnitGroupService; + + public void setOrganisationUnitGroupService( OrganisationUnitGroupService organisationUnitGroupService ) + { + this.organisationUnitGroupService = organisationUnitGroupService; + } + + private PeriodService periodService; + + public void setPeriodService( PeriodService periodService ) + { + this.periodService = periodService; + } + + private SelectionTreeManager selectionTreeManager; + + public void setSelectionTreeManager( SelectionTreeManager selectionTreeManager ) + { + this.selectionTreeManager = selectionTreeManager; + } + + // ------------------------------------------------------------------------- + // I18n & I18nFormat + // ------------------------------------------------------------------------- + + private I18n i18n; + + public void setI18n( I18n i18n ) + { + this.i18n = i18n; + } + + private I18nFormat format; + + public void setFormat( I18nFormat format ) + { + this.format = format; + } + + // ------------------------------------------------------------------------- + // Parameters + // ------------------------------------------------------------------------- + + private Grid grid; + + private String mode; + + private String toDate; + + private String fromDate; + + private String fromToDate; + + private String periodTypeId; + + private String parent; + + private String tmpParent; + + private String orgunitid; + + private String selectedUnitChanger; + + private String dataElementName; + + private String drillDownCheckBox; + + private String showZeroCheckBox; + + private OrganisationUnit selectedUnit; + + private boolean isSummary; + + // ------------------------------------------------------------------------- + // Input + // ------------------------------------------------------------------------- + + public void setMode( String mode ) + { + this.mode = mode; + } + + public void setToDate( String toDate ) + { + this.toDate = toDate; + } + + public void setFromDate( String fromDate ) + { + this.fromDate = fromDate; + } + + public void setPeriodTypeId( String periodTypeId ) + { + this.periodTypeId = periodTypeId; + } + + public void setParent( String parent ) + { + this.parent = parent; + } + + public void setSelectedUnitChanger( String selectedUnitChanger ) + { + this.selectedUnitChanger = selectedUnitChanger.trim(); + } + + public void setOrgunitid( String orgunitid ) + { + this.orgunitid = orgunitid; + } + + public void setDrillDownCheckBox( String drillDownCheckBox ) + { + this.drillDownCheckBox = drillDownCheckBox; + } + + public void setShowZeroCheckBox( String showZeroCheckBox ) + { + this.showZeroCheckBox = showZeroCheckBox; + } + + public void setSummary( boolean isSummary ) + { + this.isSummary = isSummary; + } + + // ------------------------------------------------------------------------- + // Output + // ------------------------------------------------------------------------- + + public boolean isSummary() + { + return isSummary; + } + + public Grid getGrid() + { + return grid; + } + + public Collection getDataElementGroups() + { + return dataElementService.getAllDataElementGroups(); + } + + public String getMode() + { + return mode; + } + + public String getToDate() + { + return toDate; + } + + public String getFromDate() + { + return fromDate; + } + + public String getFromToDate() + { + return fromToDate; + } + + public String getPeriodTypeId() + { + return periodTypeId; + } + + public String getParent() + { + return parent; + } + + public String getOrgunitid() + { + return orgunitid; + } + + public String getTmpParent() + { + return tmpParent; + } + + public String getDataElementName() + { + return dataElementName; + } + + public String getShowZeroCheckBox() + { + return showZeroCheckBox; + } + + public String getParentName() + { + if ( mode.equals( "OU" ) ) + { + return selectedUnit.getName(); + } + + if ( parent == null ) + { + return EMPTY; + } + + if ( mode.equals( "DS" ) ) + { + return dataSetService.getDataSet( Integer.parseInt( parent ) ).getName(); + } + + if ( mode.equals( "OUG" ) ) + { + return organisationUnitGroupService.getOrganisationUnitGroup( Integer.parseInt( parent ) ).getName(); + } + + if ( mode.equals( "DEG" ) ) + { + return dataElementService.getDataElementGroup( Integer.parseInt( parent ) ).getName(); + } + + return EMPTY; + } + + public String getCurrentParentsParent() + { + try + { + return selectedUnit.getParent().getName(); + } + catch ( Exception e ) + { + return EMPTY; + } + } + + public List getCurrentChildren() + { + Set tmp = selectedUnit.getChildren(); + List list = new ArrayList(); + + for ( OrganisationUnit o : tmp ) + { + if ( o.getChildren().size() > 0 ) + { + list.add( o ); + } + } + Collections.sort( list, IdentifiableObjectNameComparator.INSTANCE ); + + return list; + } + + public List getBreadCrumbOrgUnit() + { + List myList = new ArrayList(); + + boolean loop = true; + OrganisationUnit currentOrgUnit = selectedUnit; + + while ( loop ) + { + myList.add( currentOrgUnit ); + + if ( currentOrgUnit.getParent() == null ) + { + loop = false; + } + else + { + currentOrgUnit = currentOrgUnit.getParent(); + } + } + Collections.reverse( myList ); + + return myList; + } + + public List getMetaValues() + { + return grid.getColumn( 0 ); + } + + public Map> getMetaValueMaps() + { + Map> maps = new Hashtable>(); + + for ( List row : grid.getRows() ) + { + if ( !row.isEmpty() && row.size() > 1 ) + { + maps.put( ((MetaValue) row.get( 0 )).getId(), row.subList( 1, row.size() ) ); + } + } + + return maps; + } // ------------------------------------------------------------------------- // Action implementation @@ -50,10 +411,14 @@ @Override public String execute() { - isZeroAdded = (showZeroCheckBox != null) && showZeroCheckBox.equals( TRUE ); - - // Check if the second selected date is later than the first selected - // date + // --------------------------------------------------------------------- + // Validation + // --------------------------------------------------------------------- + + boolean isZeroAdded = (showZeroCheckBox != null) && showZeroCheckBox.equals( TRUE ); + + // Check if the second selected date is later than the first + if ( nullIfEmpty( fromDate ) == null && nullIfEmpty( toDate ) == null ) { if ( DateUtils.checkDates( fromDate, toDate ) ) @@ -63,6 +428,7 @@ } // If set, change the current selected unit + if ( selectedUnitChanger != null ) { selectionTreeManager.setSelectedOrganisationUnit( organisationUnitService.getOrganisationUnit( Integer @@ -71,20 +437,25 @@ selectedUnit = selectionTreeManager.getReloadedSelectedOrganisationUnit(); - // Checks if the selected unit is a leaf node of tree then - // We must add parent as the same parameter value + // Checks if the selected unit is a leaf node, if so add parent + if ( parent == null && mode.equals( "OU" ) && selectedUnit != null && selectedUnit.getChildren().size() == 0 ) { parent = selectedUnit.getId() + EMPTY; } - PeriodType periodType = periodService.getPeriodTypeByName( periodTypeId ); + PeriodType periodType = periodService.reloadPeriodType( periodService.getPeriodTypeByName( periodTypeId ) ); + + // --------------------------------------------------------------------- + // Data set mode + // --------------------------------------------------------------------- + log.info( "Mode: " + mode + ", parent: " + parent ); + if ( mode.equals( "DS" ) ) { if ( parent != null ) { - // Show DataElement for a given DataSet Integer parentInt = Integer.parseInt( parent ); grid = dataBrowserGridService.getCountDataElementsForDataSetInPeriod( parentInt, fromDate, toDate, @@ -92,18 +463,20 @@ } else { - // Get all DataSets grid = dataBrowserGridService.getDataSetsInPeriod( fromDate, toDate, periodType, format, isZeroAdded ); } this.setSummary( true ); } + + // --------------------------------------------------------------------- + // Data element group mode + // --------------------------------------------------------------------- + else if ( mode.equals( "DEG" ) ) { - // Get all DataElementGroup objects if ( parent != null ) { - // Show DataElement Integer parentInt = Integer.parseInt( parent ); grid = dataBrowserGridService.getCountDataElementsForDataElementGroupInPeriod( parentInt, fromDate, @@ -117,11 +490,15 @@ this.setSummary( true ); } + + // --------------------------------------------------------------------- + // Organisation unit group mode + // --------------------------------------------------------------------- + else if ( mode.equals( "OUG" ) ) { if ( parent != null ) { - // Show DataElementGroups Integer parentInt = Integer.parseInt( parent ); grid = dataBrowserGridService.getCountDataElementGroupsForOrgUnitGroupInPeriod( parentInt, fromDate, toDate, periodType, format, isZeroAdded ); @@ -134,6 +511,11 @@ this.setSummary( true ); } + + // --------------------------------------------------------------------- + // Organisation unit mode + // --------------------------------------------------------------------- + else if ( mode.equals( "OU" ) ) { selectedUnit = selectionTreeManager.getSelectedOrganisationUnit(); @@ -143,12 +525,12 @@ parent = String.valueOf( selectedUnit.getId() ); } - // This one is used for itself if ( parent != null ) { Integer parentInt = Integer.parseInt( parent ); - // Show DataElement values entered for this specified unit only + // Show data values entered for this specified unit only + grid = dataBrowserGridService.getRawDataElementsForOrgUnitInPeriod( parentInt, fromDate, toDate, periodType, format, isZeroAdded ); @@ -156,8 +538,8 @@ } else if ( selectedUnit != null ) { - // Show the summary values for the immediate and descendant - // units of the specified unit + // Show the summary values for the immediate and descendant units of the specified unit + grid = dataBrowserGridService.getOrgUnitsInPeriod( selectedUnit.getId(), fromDate, toDate, periodType, null, format, isZeroAdded ); @@ -173,18 +555,72 @@ return ERROR; } - // Set title to grid setGridTitle(); - // Convert column date names convertColumnNames( grid ); - // Do paging doPaging(); // Set DataBrowserTable variable for PDF export + SessionUtils.setSessionVar( KEY_DATABROWSERGRID, grid ); return SUCCESS; } + + // ------------------------------------------------------------------------- + // Supportive methods + // ------------------------------------------------------------------------- + + /** + * This is a helper method for populating a list of converted column names + * + * @param DataBrowserTable + */ + private void convertColumnNames( Grid grid ) + { + PeriodType periodType = periodService.getPeriodTypeByName( periodTypeId ); + + for ( GridHeader col : grid.getVisibleHeaders() ) + { + col.setName( dataBrowserGridService.convertDate( periodType, col.getName(), i18n, format ) ); + } + } + + private void setGridTitle() + { + grid.setTitle( i18n.getString( mappingMode( mode ) ) + + (mode.equals( "OU" ) == true ? " - " + getParentName() : EMPTY) ); + grid.setSubtitle( i18n.getString( "from_date" ) + ": " + fromDate + " " + i18n.getString( "to_date" ) + ": " + + toDate + ", " + i18n.getString( "period_type" ) + ": " + i18n.getString( periodTypeId ) ); + } + + private void doPaging() + { + this.paging = this.createPaging( grid.getHeight() ); + + grid.limitGrid( paging.getStartPos(), paging.getEndPos() ); + } + + private String mappingMode( String mode ) + { + if ( mode.equals( "DS" ) ) + { + return "data_sets"; + } + else if ( mode.equals( "DEG" ) ) + { + return "data_element_groups"; + } + else if ( mode.equals( "OU" ) ) + { + return "organisation_units"; + } + else if ( mode.equals( "OUG" ) ) + { + return "organisation_unit_groups"; + } + + return mode; + } } === modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/webapp/dhis-web-maintenance-dataadmin/dataBrowserGrid.vm' --- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/webapp/dhis-web-maintenance-dataadmin/dataBrowserGrid.vm 2013-02-01 04:45:45 +0000 +++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/webapp/dhis-web-maintenance-dataadmin/dataBrowserGrid.vm 2014-01-25 14:05:26 +0000 @@ -1,35 +1,33 @@ #if ( $grid.getHeight() == 0 || $grid.getWidth() == 0 )