=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/dataanalysis/DataAnalysisStore.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/dataanalysis/DataAnalysisStore.java 2009-12-23 18:55:58 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/dataanalysis/DataAnalysisStore.java 2009-12-24 08:55:53 +0000 @@ -47,6 +47,6 @@ Collection getDeflatedDataValues( DataElement dataElement, DataElementCategoryOptionCombo categoryOptionCombo, Collection periods, OrganisationUnit organisationUnit, int lowerBound, int upperBound ); - Collection getNonExistingDeflatedDataValues( DataElement dataElement, DataElementCategoryOptionCombo categoryOptionCombo, + Collection getDeflatedDataValueGaps( DataElement dataElement, DataElementCategoryOptionCombo categoryOptionCombo, Collection periods, OrganisationUnit organisationUnit ); } === modified file 'dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/dataanalysis/GapAnalysisService.java' --- dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/dataanalysis/GapAnalysisService.java 2009-12-23 18:55:58 +0000 +++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/dataanalysis/GapAnalysisService.java 2009-12-24 08:55:53 +0000 @@ -69,9 +69,9 @@ Collection dataElements, Collection periods, Double stdDevFactor ) { Collection units = organisationUnitService.getOrganisationUnitWithChildren( organisationUnit.getId() ); + + Collection gapCollection = new ArrayList(); - Collection outlierCollection = new ArrayList(); - for ( DataElement dataElement : dataElements ) { if ( dataElement.getType().equals( DataElement.VALUE_TYPE_INT ) ) @@ -82,13 +82,12 @@ { for ( OrganisationUnit unit : units ) { - outlierCollection.addAll( dataAnalysisStore.getNonExistingDeflatedDataValues( - dataElement, categoryOptionCombo, periods, unit ) ); + gapCollection.addAll( dataAnalysisStore.getDeflatedDataValueGaps( dataElement, categoryOptionCombo, periods, unit ) ); } } } } - return outlierCollection; + return gapCollection; } } === modified file 'dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/dataanalysis/StdDevOutlierAnalysisService.java' --- dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/dataanalysis/StdDevOutlierAnalysisService.java 2009-12-23 18:43:20 +0000 +++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/dataanalysis/StdDevOutlierAnalysisService.java 2009-12-24 08:55:53 +0000 @@ -74,7 +74,7 @@ Collection units = organisationUnitService.getOrganisationUnitWithChildren( organisationUnit.getId() ); Collection outlierCollection = new ArrayList(); - + for ( DataElement dataElement : dataElements ) { if ( dataElement.getType().equals( DataElement.VALUE_TYPE_INT ) ) === modified file 'dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/dataanalysis/jdbc/JdbcDataAnalysisStore.java' --- dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/dataanalysis/jdbc/JdbcDataAnalysisStore.java 2009-12-24 07:36:44 +0000 +++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/dataanalysis/jdbc/JdbcDataAnalysisStore.java 2009-12-24 08:55:53 +0000 @@ -109,7 +109,7 @@ final String sql = "SELECT dv.dataelementid, dv.periodid, dv.sourceid, dv.categoryoptioncomboid, dv.value, dv.storedby, dv.lastupdated, " + "dv.comment, dv.followup, '" + lowerBound + "' AS minvalue, '" + upperBound + "' AS maxvalue, " + - "'" + dataElement.getName() + "' AS dataelementname, pe.startdate, pe.enddate, pt.name AS periodtypename, " + + "'" + dataElement.getName() + "' AS dataelementname, pt.name AS periodtypename, pe.startdate, pe.enddate, " + "'" + organisationUnit.getName() + "' AS sourcename, cc.categoryoptioncomboname " + "FROM datavalue AS dv " + "JOIN period AS pe USING (periodid) " + @@ -136,36 +136,35 @@ holder.close(); } } - - public Collection getNonExistingDeflatedDataValues( DataElement dataElement, DataElementCategoryOptionCombo categoryOptionCombo, + + public Collection getDeflatedDataValueGaps( DataElement dataElement, DataElementCategoryOptionCombo categoryOptionCombo, Collection periods, OrganisationUnit organisationUnit ) { final StatementHolder holder = statementManager.getHolder(); - + final ObjectMapper mapper = new ObjectMapper(); final String periodIds = TextUtils.getCommaDelimitedString( ConversionUtils.getIdentifiers( Period.class, periods ) ); + // TODO minmax + try { - //TODO minmax - final String sql = - "SELECT dv.dataelementid, dv.periodid, dv.sourceid, dv.categoryoptioncomboid, dv.value, dv.storedby, dv.lastupdated, " + - "dv.comment, dv.followup, '1' AS minvalue, '2' AS maxvalue, de.name AS dataelementname, " + - "pe.startdate, pe.enddate, pt.name as periodtypename, ou.name AS sourcename, cc.categoryoptioncomboname " + - "FROM datavalue AS dv " + - "JOIN dataelement AS de USING (dataelementid) " + - "RIGHT JOIN period AS pe USING (periodid) " + - "JOIN periodtype AS pt USING (periodtypeid) " + - "JOIN source AS sr USING (sourceid) " + - "JOIN organisationunit AS ou ON ou.organisationunitid=sr.sourceid " + - "LEFT JOIN categoryoptioncomboname AS cc USING (categoryoptioncomboid) " + - "WHERE dv.dataelementid='" + dataElement.getId() + "' " + - "AND dv.categoryoptioncomboid='" + categoryOptionCombo.getId() + "' " + - "AND dv.periodid IN (" + periodIds + ") " + - "AND pt.periodtypeid='" + dataElement.getPeriodType().getId() + "' " + - "AND dv.sourceid='" + organisationUnit.getId() + "' )"; + "SELECT '" + dataElement.getId() + "' AS dataelementid, pe.periodid " + + "'" + organisationUnit.getId() + "' AS sourceid, '" + categoryOptionCombo.getId() + "' AS categoryoptioncomboid, " + + "'' AS value, '' AS storedby, '1900-01-01' AS lastupdated, '' AS comment, false AS followup, 0 as minvalue, 0 as maxvalue, " + + "'" + dataElement.getName() + "' AS dataelementname, pt.name AS periodtypename, pe.startdate, pe.enddate, " + + "'" + organisationUnit.getName() + "' AS sourcename, '" + categoryOptionCombo.getName() + "' as categoryoptioncomboname " + + "FROM period as pe " + + "JOIN periodtype as pt USING (periodtypeid) " + + "WHERE periodid IN (" + periodIds + ") " + + "AND periodtypeid='" + dataElement.getPeriodType().getId() + "' " + + "AND periodid NOT IN ( " + + "SELECT periodid FROM datavalue " + + "WHERE dataelementid='" + dataElement.getId() + "' " + + "AND categoryoptioncomboid='" + categoryOptionCombo.getId() + "' " + + "AND sourceid='" + organisationUnit + "' )"; final ResultSet resultSet = holder.getStatement().executeQuery( sql ); @@ -179,5 +178,5 @@ { holder.close(); } - } + } } === modified file 'dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/objectmapper/DeflatedDataValueNameMinMaxRowMapper.java' --- dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/objectmapper/DeflatedDataValueNameMinMaxRowMapper.java 2009-12-23 12:09:02 +0000 +++ dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/objectmapper/DeflatedDataValueNameMinMaxRowMapper.java 2009-12-24 08:55:53 +0000 @@ -37,23 +37,23 @@ * RowMapper which expects a result set with the following columns: * *
    - *
  • 1: dataelementid
  • - *
  • 2: periodid
  • - *
  • 3: sourceid
  • - *
  • 4: categoryoptioncomboid
  • - *
  • 5: value
  • - *
  • 6: storedby
  • - *
  • 7: lastupdated
  • - *
  • 8: comment
  • - *
  • 9: followup
  • - *
  • 10: minvalue
  • - *
  • 11: maxvalue
  • - *
  • 12: dataelementname
  • - *
  • 13: periodtypename
  • - *
  • 14: startdate
  • - *
  • 15: enddate
  • - *
  • 16: sourcename
  • - *
  • 17: categoryoptioncomboname
  • + *
  • 1: dataelementid - int
  • + *
  • 2: periodid - int
  • + *
  • 3: sourceid - int
  • + *
  • 4: categoryoptioncomboid - int
  • + *
  • 5: value - String
  • + *
  • 6: storedby - String
  • + *
  • 7: lastupdated - date
  • + *
  • 8: comment - String
  • + *
  • 9: followup - Boolean
  • + *
  • 10: minvalue - int
  • + *
  • 11: maxvalue - int
  • + *
  • 12: dataelementname - String
  • + *
  • 13: periodtypename - String
  • + *
  • 14: startdate - String
  • + *
  • 15: enddate - String
  • + *
  • 16: sourcename - String
  • + *
  • 17: categoryoptioncomboname - String
  • *
* * @author Lars Helge Overland