dhis2-devs team mailing list archive
-
dhis2-devs team
-
Mailing list archive
-
Message #15351
[Branch ~dhis2-devs-core/dhis2/trunk] Rev 5529: Refactor of ChartService in order to harmonize the existing PNG charts with the saved views in da...
Merge authors:
Lars Helge Øverland (larshelge)
------------------------------------------------------------
revno: 5529 [merge]
committer: Lars Helge Overland <larshelge@xxxxxxxxx>
branch nick: dhis2
timestamp: Wed 2011-12-21 23:13:10 +0100
message:
Refactor of ChartService in order to harmonize the existing PNG charts with the saved views in data visualizer module.
modified:
dhis-2/dhis-api/src/main/java/org/hisp/dhis/chart/Chart.java
dhis-2/dhis-api/src/main/java/org/hisp/dhis/chart/ChartService.java
dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/BaseIdentifiableObject.java
dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/IdentifiableObject.java
dhis-2/dhis-api/src/main/java/org/hisp/dhis/reporttable/ReportTable.java
dhis-2/dhis-api/src/test/java/org/hisp/dhis/sms/config/GenericHttpGatewayConfigTest.java
dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/startup/TableAlteror.java
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dxf/converter/ChartConverter.java
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/importer/ChartImporter.java
dhis-2/dhis-services/dhis-service-patient/src/main/java/org/hisp/dhis/patientchart/DefaultPatientChartService.java
dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/chart/impl/DefaultChartService.java
dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/reporttable/jdbc/JDBCReportTableManager.java
dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/reporttable/jdbc/ReportTableManager.java
dhis-2/dhis-services/dhis-service-reporting/src/main/resources/META-INF/dhis/beans.xml
dhis-2/dhis-services/dhis-service-reporting/src/main/resources/org/hisp/dhis/chart/hibernate/Chart.hbm.xml
dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/MathUtils.java
dhis-2/dhis-support/dhis-support-test/src/main/java/org/hisp/dhis/DhisConvenienceTest.java
dhis-2/dhis-web/dhis-web-reporting/src/main/java/org/hisp/dhis/reporting/chart/action/GenerateChartAction.java
dhis-2/dhis-web/dhis-web-reporting/src/main/java/org/hisp/dhis/reporting/chart/action/SaveChartAction.java
dhis-2/dhis-web/dhis-web-reporting/src/main/webapp/dhis-web-reporting/addChartForm.vm
dhis-2/dhis-web/dhis-web-reporting/src/main/webapp/dhis-web-reporting/viewChartForm.vm
--
lp:dhis2
https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk
Your team DHIS 2 developers is subscribed to branch lp:dhis2.
To unsubscribe from this branch go to https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk/+edit-subscription
=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/chart/Chart.java'
--- dhis-2/dhis-api/src/main/java/org/hisp/dhis/chart/Chart.java 2011-12-21 13:57:22 +0000
+++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/chart/Chart.java 2011-12-21 22:11:29 +0000
@@ -32,6 +32,7 @@
import org.hisp.dhis.common.BaseIdentifiableObject;
import org.hisp.dhis.common.BaseNameableObject;
import org.hisp.dhis.common.Dxf2Namespace;
+import org.hisp.dhis.common.NameableObject;
import org.hisp.dhis.common.adapter.DataElementXmlAdapter;
import org.hisp.dhis.common.adapter.DataSetXmlAdapter;
import org.hisp.dhis.common.adapter.IndicatorXmlAdapter;
@@ -67,14 +68,6 @@
public static final String DIMENSION_PERIOD_DATAELEMENT = "period_dataElement";
public static final String DIMENSION_ORGANISATIONUNIT_DATAELEMENT = "organisationUnit_dataElement";
public static final String DIMENSION_DATAELEMENT_PERIOD = "dataElement_period";
- public static final String DIMENSION_PERIOD_COMPLETENESS = "period_completeness";
- public static final String DIMENSION_ORGANISATIONUNIT_COMPLETENESS = "organisationUnit_completeness";
- public static final String DIMENSION_COMPLETENESS_PERIOD = "completeness_period";
-
- public static final String TYPE_BAR3D = "bar3d";
- public static final String TYPE_STACKED_BAR3D = "stackedBar3d";
- public static final String TYPE_LINE3D = "line3d";
- public static final String TYPE_PIE3D = "pie3d";
public static final String SIZE_NORMAL = "normal";
public static final String SIZE_WIDE = "wide";
@@ -98,10 +91,6 @@
private String type;
- private String size;
-
- private String dimension;
-
private String series;
private String category;
@@ -110,10 +99,6 @@
private boolean hideLegend;
- private boolean verticalLabels;
-
- private boolean horizontalPlotOrientation;
-
private boolean regression;
private boolean targetLine;
@@ -210,7 +195,98 @@
addChartGroup( group );
}
}
+
+ public List<NameableObject> series()
+ {
+ return dimensionToList( series );
+ }
+
+ public List<NameableObject> category()
+ {
+ return dimensionToList( category );
+ }
+
+ public NameableObject filter()
+ {
+ List<NameableObject> list = dimensionToList( filter );
+
+ return list != null && !list.isEmpty() ? list.iterator().next() : null;
+ }
+ public String getTitle()
+ {
+ if ( DIMENSION_PERIOD.equals( filter ) )
+ {
+ return format.formatPeriod( getAllPeriods().get( 0 ) );
+ }
+
+ return filter().getName();
+ }
+
+ private List<NameableObject> dimensionToList( String dimension )
+ {
+ List<NameableObject> list = new ArrayList<NameableObject>();
+
+ if ( DIMENSION_DATA.equals( dimension ) )
+ {
+ list.addAll( getDataElements() );
+ list.addAll( getIndicators() );
+ }
+ else if ( DIMENSION_PERIOD.equals( dimension ) )
+ {
+ namePeriods( getAllPeriods(), format );
+
+ list.addAll( getAllPeriods() );
+ }
+ else if ( DIMENSION_ORGANISATIONUNIT.equals( dimension ) )
+ {
+ list.addAll( getAllOrganisationUnits() );
+ }
+
+ return list;
+ }
+
+ private void namePeriods( List<Period> periods, I18nFormat format )
+ {
+ for ( Period period : periods )
+ {
+ period.setName( format.formatPeriod( period ) );
+ }
+ }
+
+ /**
+ * TODO This method is a temporary hack while we phase out the old chart UI.
+ */
+ public String getDimension()
+ {
+ if ( DIMENSION_DATA.equals( series ) && DIMENSION_PERIOD.equals( category ) && !indicators.isEmpty() )
+ {
+ return DIMENSION_PERIOD_INDICATOR;
+ }
+ else if ( DIMENSION_DATA.equals( series ) && DIMENSION_ORGANISATIONUNIT.equals( category ) && !indicators.isEmpty() )
+ {
+ return DIMENSION_ORGANISATIONUNIT_INDICATOR;
+ }
+ else if ( DIMENSION_PERIOD.equals( series ) && DIMENSION_DATA.equals( category ) && !indicators.isEmpty() )
+ {
+ return DIMENSION_INDICATOR_PERIOD;
+ }
+ else if ( DIMENSION_DATA.equals( series ) && DIMENSION_PERIOD.equals( category ) )
+ {
+ return DIMENSION_PERIOD_DATAELEMENT;
+ }
+ else if ( DIMENSION_DATA.equals( series ) && DIMENSION_ORGANISATIONUNIT.equals( category ) )
+ {
+ return DIMENSION_ORGANISATIONUNIT_DATAELEMENT;
+ }
+ else if ( DIMENSION_PERIOD.equals( series ) && DIMENSION_DATA.equals( category ) )
+ {
+ return DIMENSION_DATAELEMENT_PERIOD;
+ }
+
+ return null;
+ }
+
// -------------------------------------------------------------------------
// hashCode, equals, toString
// -------------------------------------------------------------------------
@@ -254,21 +330,35 @@
// Logic
// -------------------------------------------------------------------------
+ /**
+ * Sets all dimensions for this chart.
+ *
+ * @param series the series dimension.
+ * @param category the category dimension.
+ * @param filter the filter dimension.
+ */
+ public void setDimensions( String series, String category, String filter )
+ {
+ this.series = series;
+ this.category = category;
+ this.filter = filter;
+ }
+
+ public boolean hasIndicators()
+ {
+ return indicators != null && indicators.size() > 0;
+ }
+
+ public boolean hasDataElements()
+ {
+ return dataElements != null && dataElements.size() > 0;
+ }
+
public boolean isType( String type )
{
return this.type != null && this.type.equals( type );
}
- public boolean isSize( String size )
- {
- return this.size != null && this.size.equals( size );
- }
-
- public boolean isDimension( String dimension )
- {
- return this.dimension != null && this.dimension.equals( dimension );
- }
-
public int getWidth()
{
return 700;
@@ -321,30 +411,6 @@
@XmlElement
@JsonProperty
- public String getSize()
- {
- return size;
- }
-
- public void setSize( String size )
- {
- this.size = size;
- }
-
- @XmlElement
- @JsonProperty
- public String getDimension()
- {
- return dimension;
- }
-
- public void setDimension( String dimension )
- {
- this.dimension = dimension;
- }
-
- @XmlElement
- @JsonProperty
public String getSeries()
{
return series;
@@ -393,30 +459,6 @@
@XmlElement
@JsonProperty
- public boolean isVerticalLabels()
- {
- return verticalLabels;
- }
-
- public void setVerticalLabels( boolean verticalLabels )
- {
- this.verticalLabels = verticalLabels;
- }
-
- @XmlElement
- @JsonProperty
- public boolean isHorizontalPlotOrientation()
- {
- return horizontalPlotOrientation;
- }
-
- public void setHorizontalPlotOrientation( boolean horizontalPlotOrientation )
- {
- this.horizontalPlotOrientation = horizontalPlotOrientation;
- }
-
- @XmlElement
- @JsonProperty
public boolean isRegression()
{
return regression;
=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/chart/ChartService.java'
--- dhis-2/dhis-api/src/main/java/org/hisp/dhis/chart/ChartService.java 2011-12-15 10:32:22 +0000
+++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/chart/ChartService.java 2011-12-21 11:59:13 +0000
@@ -60,7 +60,7 @@
JFreeChart getJFreeOrganisationUnitChart( Indicator indicator, OrganisationUnit parent, boolean title, I18nFormat format );
JFreeChart getJFreeChart( List<Indicator> indicators, List<DataElement> dataElements, List<DataSet> dataSets, List<Period> periods,
- List<OrganisationUnit> organisationUnits, String dimension, boolean regression, I18nFormat format );
+ List<OrganisationUnit> organisationUnits, String series, String category, String filter, boolean regression, I18nFormat format );
JFreeChart getJFreeChart( String name, PlotOrientation orientation, CategoryLabelPositions labelPositions,
Map<String, Double> categoryValues );
=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/BaseIdentifiableObject.java'
--- dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/BaseIdentifiableObject.java 2011-12-19 09:36:33 +0000
+++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/BaseIdentifiableObject.java 2011-12-21 20:06:49 +0000
@@ -93,6 +93,16 @@
}
// -------------------------------------------------------------------------
+ // Comparable implementation
+ // -------------------------------------------------------------------------
+
+ @Override
+ public int compareTo( IdentifiableObject object )
+ {
+ return name == null ? ( object.getName() == null ? 0 : -1 ) : name.compareTo( object.getName() );
+ }
+
+ // -------------------------------------------------------------------------
// Setters and getters
// -------------------------------------------------------------------------
=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/IdentifiableObject.java'
--- dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/IdentifiableObject.java 2011-12-03 12:53:47 +0000
+++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/IdentifiableObject.java 2011-12-21 20:06:49 +0000
@@ -31,7 +31,7 @@
*/
public interface IdentifiableObject
- extends ImportableObject, LinkableObject
+ extends ImportableObject, LinkableObject, Comparable<IdentifiableObject>
{
public abstract int getId();
=== 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-12-19 19:01:47 +0000
+++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/reporttable/ReportTable.java 2011-12-21 20:06:49 +0000
@@ -539,7 +539,7 @@
return column.length() > 0 ? column.substring( 0, column.lastIndexOf( SEPARATOR ) ) : TOTAL_COLUMN_NAME;
}
-
+
/**
* Generates a grid identifier based on the internal identifiers of the
* argument objects.
=== modified file 'dhis-2/dhis-api/src/test/java/org/hisp/dhis/sms/config/GenericHttpGatewayConfigTest.java'
--- dhis-2/dhis-api/src/test/java/org/hisp/dhis/sms/config/GenericHttpGatewayConfigTest.java 2011-12-20 12:46:37 +0000
+++ dhis-2/dhis-api/src/test/java/org/hisp/dhis/sms/config/GenericHttpGatewayConfigTest.java 2011-12-21 20:06:49 +0000
@@ -1,8 +1,8 @@
package org.hisp.dhis.sms.config;
-import static org.junit.Assert.*;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
import java.io.IOException;
import java.io.StringReader;
@@ -19,6 +19,7 @@
import javax.xml.bind.Unmarshaller;
import org.junit.Before;
+import org.junit.Ignore;
import org.junit.Test;
/*
@@ -73,6 +74,7 @@
}
@Test
+ @Ignore
public void testMarshalling()
throws IOException, JAXBException
{
=== modified file 'dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/startup/TableAlteror.java'
--- dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/startup/TableAlteror.java 2011-12-21 11:19:47 +0000
+++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/startup/TableAlteror.java 2011-12-21 22:11:29 +0000
@@ -224,7 +224,7 @@
executeSql( "ALTER TABLE section DROP CONSTRAINT section_name_key" );
executeSql( "UPDATE patientattribute set inheritable=false where inheritable is null" );
- executeSql( "UPDATE dataelement set numbertype='number' where numbertype is null and valuetype='int'" );
+ executeSql( "UPDATE dataelement SET numbertype='number' where numbertype is null and valuetype='int'" );
// revert prepare aggregate*Value tables for offline diffs
@@ -235,6 +235,30 @@
// program
executeSql( "ALTER TABLE programinstance ALTER COLUMN patientid DROP NOT NULL" );
+
+ // migrate charts from dimension to category, series, filter
+
+ executeSql( "UPDATE chart SET series='PERIOD', category='DATA', filter='ORGANISATIONUNIT' WHERE dimension='indicator'" );
+ executeSql( "UPDATE chart SET series='DATA', category='ORGANISATIONUNIT', filter='PERIOD' WHERE dimension='organisationUnit'" );
+ executeSql( "UPDATE chart SET series='PERIOD', category='DATA', filter='ORGANISATIONUNIT' WHERE dimension='dataElement_period'" );
+ executeSql( "UPDATE chart SET series='DATA', category='ORGANISATIONUNIT', filter='PERIOD' WHERE dimension='organisationUnit_dataElement'" );
+ executeSql( "UPDATE chart SET series='DATA', category='PERIOD', filter='ORGANISATIONUNIT' WHERE dimension='period'" );
+ executeSql( "UPDATE chart SET series='DATA', category='PERIOD', filter='ORGANISATIONUNIT' WHERE dimension='period_dataElement'" );
+
+ executeSql( "UPDATE chart SET type='BAR' where type='bar'" );
+ executeSql( "UPDATE chart SET type='BAR' where type='bar3d'" );
+ executeSql( "UPDATE chart SET type='STACKEDBAR' where type='stackedBar'" );
+ executeSql( "UPDATE chart SET type='STACKEDBAR' where type='stackedBar3d'" );
+ executeSql( "UPDATE chart SET type='LINE' where type='line'" );
+ executeSql( "UPDATE chart SET type='LINE' where type='line3d'" );
+ executeSql( "UPDATE chart SET type='PIE' where type='pie'" );
+ executeSql( "UPDATE chart SET type='PIE' where type='pie3d'" );
+
+ executeSql( "ALTER TABLE chart RENAME COLUMN title TO name" );
+ executeSql( "ALTER TABLE chart ALTER COLUMN dimension DROP NOT NULL" );
+ executeSql( "ALTER TABLE chart DROP COLUMN size" );
+ executeSql( "ALTER TABLE chart DROP COLUMN verticallabels" );
+ executeSql( "ALTER TABLE chart DROP COLUMN horizontalplotorientation" );
// remove outdated relative periods
@@ -261,9 +285,6 @@
executeSql( "ALTER TABLE chart DROP COLUMN last12individualmonths" );
executeSql( "ALTER TABLE chart DROP COLUMN individualmonthsthisyear" );
executeSql( "ALTER TABLE chart DROP COLUMN individualquartersthisyear" );
- executeSql( "ALTER TABLE chart RENAME COLUMN title TO name" );
- executeSql( "ALTER TABLE chart ALTER COLUMN dimension DROP NOT NULL" );
- executeSql( "ALTER TABLE chart DROP COLUMN size" );
executeSql( "ALTER TABLE datamartexport DROP COLUMN last3months" );
executeSql( "ALTER TABLE datamartexport DROP COLUMN last6months" );
=== modified file 'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dxf/converter/ChartConverter.java'
--- dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dxf/converter/ChartConverter.java 2011-12-19 14:32:26 +0000
+++ dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dxf/converter/ChartConverter.java 2011-12-21 20:41:22 +0000
@@ -58,11 +58,7 @@
private static final String FIELD_CODE = "code";
private static final String FIELD_TITLE = "title";
private static final String FIELD_TYPE = "type";
- private static final String FIELD_SIZE = "size";
- private static final String FIELD_DIMENSION = "dimension";
private static final String FIELD_HIDE_LEGEND = "hideLegend";
- private static final String FIELD_VERTICAL_LABELS = "verticalLabels";
- private static final String FIELD_HORIZONTAL_PLOT_ORIENTATION = "horizontalPlotOrientation";
private static final String FIELD_REGRESSION = "regression";
private static final String FIELD_INDICATORS = "indicators";
@@ -137,11 +133,7 @@
writer.writeElement( FIELD_CODE, chart.getCode() ); // v1.2.1
writer.writeElement( FIELD_TITLE, chart.getName() );
writer.writeElement( FIELD_TYPE, chart.getType() );
- writer.writeElement( FIELD_SIZE, String.valueOf( chart.getSize() ) );
- writer.writeElement( FIELD_DIMENSION, String.valueOf( chart.getDimension() ) );
writer.writeElement( FIELD_HIDE_LEGEND, String.valueOf( chart.isHideLegend() ) );
- writer.writeElement( FIELD_VERTICAL_LABELS, String.valueOf( chart.isVerticalLabels() ) );
- writer.writeElement( FIELD_HORIZONTAL_PLOT_ORIENTATION, String.valueOf( chart.isHorizontalPlotOrientation() ) );
writer.writeElement( FIELD_REGRESSION, String.valueOf( chart.isRegression() ) );
writer.openElement( FIELD_INDICATORS );
@@ -206,21 +198,9 @@
reader.moveToStartElement( FIELD_TYPE );
chart.setType( reader.getElementValue() );
- reader.moveToStartElement( FIELD_SIZE );
- chart.setSize( reader.getElementValue() );
-
- reader.moveToStartElement( FIELD_DIMENSION );
- chart.setDimension( reader.getElementValue() );
-
reader.moveToStartElement( FIELD_HIDE_LEGEND );
chart.setHideLegend( Boolean.parseBoolean( reader.getElementValue() ) );
- reader.moveToStartElement( FIELD_VERTICAL_LABELS );
- chart.setVerticalLabels( Boolean.parseBoolean( reader.getElementValue() ) );
-
- reader.moveToStartElement( FIELD_HORIZONTAL_PLOT_ORIENTATION );
- chart.setHorizontalPlotOrientation( Boolean.parseBoolean( reader.getElementValue() ) );
-
reader.moveToStartElement( FIELD_REGRESSION );
chart.setRegression( Boolean.parseBoolean( reader.getElementValue() ) );
=== modified file 'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/importer/ChartImporter.java'
--- dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/importer/ChartImporter.java 2011-11-12 18:43:35 +0000
+++ dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/importer/ChartImporter.java 2011-12-21 20:41:22 +0000
@@ -67,11 +67,7 @@
{
match.setName( object.getName() );
match.setType( object.getType() );
- match.setSize( object.getSize() );
- match.setDimension( object.getDimension() );
match.setHideLegend( object.isHideLegend() );
- match.setVerticalLabels( object.isVerticalLabels() );
- match.setHorizontalPlotOrientation( object.isHorizontalPlotOrientation() );
match.setRegression( object.isRegression() );
match.getRelatives().setReportingMonth( object.getRelatives().isReportingMonth() );
@@ -102,26 +98,10 @@
{
return false;
}
- if ( !isSimiliar( object.getSize(), existing.getSize() ) || ( isNotNull( object.getSize(), existing.getSize() ) && !object.getSize().equals( existing.getSize() ) ) )
- {
- return false;
- }
- if ( !isSimiliar( object.getDimension(), existing.getDimension() ) || ( isNotNull( object.getDimension(), existing.getDimension() ) && !object.getDimension().equals( existing.getDimension() ) ) )
- {
- return false;
- }
if ( object.isHideLegend() != existing.isHideLegend() )
{
return false;
}
- if ( object.isVerticalLabels() != existing.isVerticalLabels() )
- {
- return false;
- }
- if ( object.isHorizontalPlotOrientation() != existing.isHorizontalPlotOrientation() )
- {
- return false;
- }
if ( object.isRegression() != existing.isRegression() )
{
return false;
=== modified file 'dhis-2/dhis-services/dhis-service-patient/src/main/java/org/hisp/dhis/patientchart/DefaultPatientChartService.java'
--- dhis-2/dhis-services/dhis-service-patient/src/main/java/org/hisp/dhis/patientchart/DefaultPatientChartService.java 2011-10-03 09:40:38 +0000
+++ dhis-2/dhis-services/dhis-service-patient/src/main/java/org/hisp/dhis/patientchart/DefaultPatientChartService.java 2011-12-21 20:06:49 +0000
@@ -28,9 +28,7 @@
package org.hisp.dhis.patientchart;
import static org.hisp.dhis.chart.Chart.TYPE_BAR;
-import static org.hisp.dhis.chart.Chart.TYPE_BAR3D;
import static org.hisp.dhis.chart.Chart.TYPE_LINE;
-import static org.hisp.dhis.chart.Chart.TYPE_LINE3D;
import java.awt.Color;
import java.awt.Font;
@@ -50,9 +48,7 @@
import org.jfree.chart.plot.DatasetRenderingOrder;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.BarRenderer;
-import org.jfree.chart.renderer.category.BarRenderer3D;
import org.jfree.chart.renderer.category.LineAndShapeRenderer;
-import org.jfree.chart.renderer.category.LineRenderer3D;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.springframework.transaction.annotation.Transactional;
@@ -154,9 +150,7 @@
private JFreeChart getJFreeChart( PatientChart patientChart )
{
final BarRenderer barRenderer = getBarRenderer();
- final BarRenderer bar3dRenderer = getBar3DRenderer();
final LineAndShapeRenderer lineRenderer = getLineRenderer();
- final LineRenderer3D line3dRenderer = getLineRenderer3D();
// ---------------------------------------------------------------------
// Plot
@@ -170,14 +164,6 @@
{
plot = new CategoryPlot( dataSets[0], new CategoryAxis(), new NumberAxis(), lineRenderer );
}
- if ( patientChart.isType( TYPE_LINE3D ) )
- {
- plot = new CategoryPlot( dataSets[0], new CategoryAxis(), new NumberAxis(), line3dRenderer );
- }
- else if ( patientChart.isType( TYPE_BAR3D ) )
- {
- plot = new CategoryPlot( dataSets[0], new CategoryAxis(), new NumberAxis(), bar3dRenderer );
- }
else if ( patientChart.isType( TYPE_BAR ) )
{
plot = new CategoryPlot( dataSets[0], new CategoryAxis(), new NumberAxis(), barRenderer );
@@ -234,24 +220,6 @@
}
/**
- * Returns a bar3d renderer.
- */
- private BarRenderer getBar3DRenderer()
- {
- BarRenderer3D renderer = new BarRenderer3D();
-
- renderer.setMaximumBarWidth( 0.07 );
-
- for ( int i = 0; i < colors.length; i++ )
- {
- renderer.setSeriesPaint( i, colors[i] );
- renderer.setShadowVisible( false );
- }
-
- return renderer;
- }
-
- /**
* Returns a line and shape renderer.
*/
private LineAndShapeRenderer getLineRenderer()
@@ -267,21 +235,6 @@
}
/**
- * Returns a line3d renderer.
- */
- private LineRenderer3D getLineRenderer3D()
- {
- LineRenderer3D renderer = new LineRenderer3D();
-
- for ( int i = 0; i < colors.length; i++ )
- {
- renderer.setSeriesPaint( i, colors[i] );
- }
-
- return renderer;
- }
-
- /**
* Returns a DefaultCategoryDataSet based on patient-data-values for the
* patient-chart.
*/
=== modified file 'dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/chart/impl/DefaultChartService.java'
--- dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/chart/impl/DefaultChartService.java 2011-12-21 11:19:47 +0000
+++ dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/chart/impl/DefaultChartService.java 2011-12-21 20:41:22 +0000
@@ -27,20 +27,35 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
+import static org.hisp.dhis.chart.Chart.TYPE_BAR;
+import static org.hisp.dhis.chart.Chart.TYPE_LINE;
+import static org.hisp.dhis.chart.Chart.TYPE_PIE;
+import static org.hisp.dhis.chart.Chart.TYPE_STACKED_BAR;
+import static org.hisp.dhis.reporttable.ReportTable.getIdentifier;
+import static org.hisp.dhis.system.util.ConversionUtils.getArray;
+
+import java.awt.BasicStroke;
+import java.awt.Color;
+import java.awt.Font;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+
import org.apache.commons.math.MathException;
import org.apache.commons.math.analysis.SplineInterpolator;
import org.apache.commons.math.analysis.UnivariateRealFunction;
import org.apache.commons.math.analysis.UnivariateRealInterpolator;
import org.apache.commons.math.stat.regression.SimpleRegression;
-import org.hisp.dhis.aggregation.AggregatedDataValueService;
import org.hisp.dhis.aggregation.AggregationService;
import org.hisp.dhis.chart.Chart;
import org.hisp.dhis.chart.ChartGroup;
import org.hisp.dhis.chart.ChartService;
import org.hisp.dhis.common.GenericIdentifiableObjectStore;
import org.hisp.dhis.common.NameableObject;
-import org.hisp.dhis.completeness.DataSetCompletenessResult;
-import org.hisp.dhis.completeness.DataSetCompletenessService;
import org.hisp.dhis.dataelement.DataElement;
import org.hisp.dhis.dataelement.DataElementCategoryOptionCombo;
import org.hisp.dhis.dataset.DataSet;
@@ -55,6 +70,7 @@
import org.hisp.dhis.period.Period;
import org.hisp.dhis.period.PeriodService;
import org.hisp.dhis.period.RelativePeriods;
+import org.hisp.dhis.reporttable.jdbc.ReportTableManager;
import org.hisp.dhis.system.util.Filter;
import org.hisp.dhis.system.util.FilterUtils;
import org.hisp.dhis.system.util.MathUtils;
@@ -67,8 +83,16 @@
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.labels.StandardPieSectionLabelGenerator;
-import org.jfree.chart.plot.*;
-import org.jfree.chart.renderer.category.*;
+import org.jfree.chart.plot.CategoryPlot;
+import org.jfree.chart.plot.DatasetRenderingOrder;
+import org.jfree.chart.plot.Marker;
+import org.jfree.chart.plot.MultiplePiePlot;
+import org.jfree.chart.plot.PiePlot;
+import org.jfree.chart.plot.PlotOrientation;
+import org.jfree.chart.plot.ValueMarker;
+import org.jfree.chart.renderer.category.BarRenderer;
+import org.jfree.chart.renderer.category.CategoryItemRenderer;
+import org.jfree.chart.renderer.category.LineAndShapeRenderer;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
@@ -76,15 +100,6 @@
import org.jfree.util.TableOrder;
import org.springframework.transaction.annotation.Transactional;
-import java.awt.*;
-import java.util.*;
-import java.util.List;
-import java.util.Map.Entry;
-
-import static org.hisp.dhis.chart.Chart.*;
-import static org.hisp.dhis.options.SystemSettingManager.*;
-import static org.hisp.dhis.system.util.ConversionUtils.getArray;
-
/**
* @author Lars Helge Overland
* @version $Id$
@@ -100,9 +115,7 @@
private static final Font labelFont = new Font( "Tahoma", Font.PLAIN, 10 );
private static final String TREND_PREFIX = "Trend - ";
-
private static final String TITLE_SEPARATOR = " - ";
-
private static final String DEFAULT_TITLE_PIVOT_CHART = "Pivot Chart";
private static final Color[] colors = {Color.decode( "#d54a4a" ), Color.decode( "#2e4e83" ),
@@ -149,13 +162,6 @@
this.aggregationService = aggregationService;
}
- private AggregatedDataValueService aggregatedDataValueService;
-
- public void setAggregatedDataValueService( AggregatedDataValueService aggregatedDataValueService )
- {
- this.aggregatedDataValueService = aggregatedDataValueService;
- }
-
private SystemSettingManager systemSettingManager;
public void setSystemSettingManager( SystemSettingManager systemSettingManager )
@@ -170,19 +176,19 @@
this.currentUserService = currentUserService;
}
- private DataSetCompletenessService dataSetCompletenessService;
-
- public void setDataSetCompletenessService( DataSetCompletenessService dataSetCompletenessService )
- {
- this.dataSetCompletenessService = dataSetCompletenessService;
- }
-
private GenericIdentifiableObjectStore<ChartGroup> chartGroupStore;
public void setChartGroupStore( GenericIdentifiableObjectStore<ChartGroup> chartGroupStore )
{
this.chartGroupStore = chartGroupStore;
}
+
+ private ReportTableManager reportTableManager;
+
+ public void setReportTableManager( ReportTableManager reportTableManager )
+ {
+ this.reportTableManager = reportTableManager;
+ }
// -------------------------------------------------------------------------
// ChartService implementation
@@ -240,9 +246,8 @@
}
chart.setType( TYPE_LINE );
- chart.setDimension( DIMENSION_PERIOD_INDICATOR );
+ chart.setDimensions( Chart.DIMENSION_DATA, Chart.DIMENSION_PERIOD, Chart.DIMENSION_ORGANISATIONUNIT );
chart.setHideLegend( true );
- chart.setVerticalLabels( true );
chart.getIndicators().add( indicator );
chart.setPeriods( periods );
chart.setOrganisationUnit( unit );
@@ -267,9 +272,8 @@
}
chart.setType( TYPE_BAR );
- chart.setDimension( DIMENSION_ORGANISATIONUNIT_INDICATOR );
+ chart.setDimensions( Chart.DIMENSION_DATA, Chart.DIMENSION_ORGANISATIONUNIT, Chart.DIMENSION_PERIOD );
chart.setHideLegend( true );
- chart.setVerticalLabels( true );
chart.getIndicators().add( indicator );
chart.setPeriods( periods );
chart.setOrganisationUnits( parent.getSortedChildren() );
@@ -281,29 +285,15 @@
}
public JFreeChart getJFreeChart( List<Indicator> indicators, List<DataElement> dataElements,
- List<DataSet> dataSets, List<Period> periods, List<OrganisationUnit> organisationUnits, String dimension,
+ List<DataSet> dataSets, List<Period> periods, List<OrganisationUnit> organisationUnits,
+ String series, String category, String filter,
boolean regression, I18nFormat format )
{
Chart chart = new Chart();
- if ( indicators != null && !indicators.isEmpty() )
- {
- chart.setName( getTitle( indicators.get( 0 ), periods, organisationUnits, format ) );
- }
- else if ( dataElements != null && !dataElements.isEmpty() )
- {
- chart.setName( getTitle( dataElements.get( 0 ), periods, organisationUnits, format ) );
- }
- else if ( dataSets != null && !dataSets.isEmpty() )
- {
- chart.setName( getTitle( dataSets.get( 0 ), periods, organisationUnits, format ) );
- }
-
chart.setType( TYPE_BAR );
- chart.setDimension( dimension );
+ chart.setDimensions( series, category, filter );
chart.setHideLegend( false );
- chart.setVerticalLabels( true );
- chart.setHorizontalPlotOrientation( false );
chart.setRegression( regression );
chart.setIndicators( indicators );
chart.setDataElements( dataElements );
@@ -311,6 +301,7 @@
chart.setPeriods( periods );
chart.setOrganisationUnits( organisationUnits );
chart.setFormat( format );
+ chart.setName( chart.getTitle() );
chart.init();
@@ -571,24 +562,6 @@
}
/**
- * Returns a bar3d renderer.
- */
- private BarRenderer getBar3DRenderer()
- {
- BarRenderer3D renderer = new BarRenderer3D();
-
- renderer.setMaximumBarWidth( 0.07 );
-
- for ( int i = 0; i < colors.length; i++ )
- {
- renderer.setSeriesPaint( i, colors[i] );
- renderer.setShadowVisible( false );
- }
-
- return renderer;
- }
-
- /**
* Returns a line and shape renderer.
*/
private LineAndShapeRenderer getLineRenderer()
@@ -604,29 +577,12 @@
}
/**
- * Returns a line3d renderer.
- */
- private LineRenderer3D getLineRenderer3D()
- {
- LineRenderer3D renderer = new LineRenderer3D();
-
- for ( int i = 0; i < colors.length; i++ )
- {
- renderer.setSeriesPaint( i, colors[i] );
- }
-
- return renderer;
- }
-
- /**
* Returns a JFreeChart of type defined in the chart argument.
*/
private JFreeChart getJFreeChart( Chart chart, boolean subTitle )
{
final BarRenderer barRenderer = getBarRenderer();
- final BarRenderer bar3dRenderer = getBar3DRenderer();
final LineAndShapeRenderer lineRenderer = getLineRenderer();
- final LineRenderer3D line3dRenderer = getLineRenderer3D();
// ---------------------------------------------------------------------
// Plot
@@ -640,23 +596,15 @@
{
plot = new CategoryPlot( dataSets[0], new CategoryAxis(), new NumberAxis(), lineRenderer );
}
- if ( chart.isType( TYPE_LINE3D ) )
- {
- plot = new CategoryPlot( dataSets[0], new CategoryAxis(), new NumberAxis(), line3dRenderer );
- }
- else if ( chart.isType( TYPE_BAR3D ) )
- {
- plot = new CategoryPlot( dataSets[0], new CategoryAxis(), new NumberAxis(), bar3dRenderer );
- }
else if ( chart.isType( TYPE_BAR ) )
{
plot = new CategoryPlot( dataSets[0], new CategoryAxis(), new NumberAxis(), barRenderer );
}
- else if ( chart.isType( TYPE_PIE ) || chart.isType( TYPE_PIE3D ) )
+ else if ( chart.isType( TYPE_PIE ) )
{
return getMultiplePieChart( chart, dataSets );
}
- else if ( chart.isType( TYPE_STACKED_BAR ) || chart.isType( TYPE_STACKED_BAR3D ) )
+ else if ( chart.isType( TYPE_STACKED_BAR ) )
{
return getStackedBarChart( chart, dataSets[0] );
}
@@ -683,15 +631,14 @@
if ( subTitle )
{
- jFreeChart.addSubtitle( getSubTitle( chart, chart.getFormat() ) );
+ jFreeChart.addSubtitle( getSubTitle( chart ) );
}
// ---------------------------------------------------------------------
// Plot orientation
// ---------------------------------------------------------------------
- plot.setOrientation( chart.isHorizontalPlotOrientation() ? PlotOrientation.HORIZONTAL
- : PlotOrientation.VERTICAL );
+ plot.setOrientation( PlotOrientation.VERTICAL );
plot.setDatasetRenderingOrder( DatasetRenderingOrder.FORWARD );
// ---------------------------------------------------------------------
@@ -699,8 +646,7 @@
// ---------------------------------------------------------------------
CategoryAxis xAxis = plot.getDomainAxis();
- xAxis.setCategoryLabelPositions( chart.isVerticalLabels() ? CategoryLabelPositions.UP_45
- : CategoryLabelPositions.STANDARD );
+ xAxis.setCategoryLabelPositions( CategoryLabelPositions.UP_45 );
xAxis.setLabel( chart.getDomainAxixLabel() );
ValueAxis yAxis = plot.getRangeAxis();
@@ -718,20 +664,17 @@
private JFreeChart getStackedBarChart( Chart chart, CategoryDataset dataSet )
{
- PlotOrientation orientation = chart.isHorizontalPlotOrientation() ? PlotOrientation.HORIZONTAL
- : PlotOrientation.VERTICAL;
-
JFreeChart stackedBarChart = null;
if ( chart.isType( TYPE_STACKED_BAR ) )
{
stackedBarChart = ChartFactory.createStackedBarChart( chart.getName(), chart.getDomainAxixLabel(),
- chart.getRangeAxisLabel(), dataSet, orientation, true, false, false );
+ chart.getRangeAxisLabel(), dataSet, PlotOrientation.VERTICAL, true, false, false );
}
else
{
stackedBarChart = ChartFactory.createStackedBarChart3D( chart.getName(), chart.getDomainAxixLabel(),
- chart.getRangeAxisLabel(), dataSet, orientation, true, false, false );
+ chart.getRangeAxisLabel(), dataSet, PlotOrientation.VERTICAL, true, false, false );
}
CategoryPlot plot = (CategoryPlot) stackedBarChart.getPlot();
@@ -739,11 +682,10 @@
plot.setOutlinePaint( Color.WHITE );
CategoryAxis xAxis = plot.getDomainAxis();
- xAxis.setCategoryLabelPositions( chart.isVerticalLabels() ? CategoryLabelPositions.UP_45
- : CategoryLabelPositions.STANDARD );
+ xAxis.setCategoryLabelPositions( CategoryLabelPositions.UP_45 );
stackedBarChart.getTitle().setFont( titleFont );
- stackedBarChart.addSubtitle( getSubTitle( chart, chart.getFormat() ) );
+ stackedBarChart.addSubtitle( getSubTitle( chart ) );
stackedBarChart.setAntiAlias( true );
return stackedBarChart;
@@ -765,7 +707,7 @@
}
multiplePieChart.getTitle().setFont( titleFont );
- multiplePieChart.addSubtitle( getSubTitle( chart, chart.getFormat() ) );
+ multiplePieChart.addSubtitle( getSubTitle( chart ) );
multiplePieChart.getLegend().setItemFont( subTitleFont );
multiplePieChart.setBackgroundPaint( Color.WHITE );
multiplePieChart.setAntiAlias( true );
@@ -790,40 +732,64 @@
return multiplePieChart;
}
- private boolean isIndicatorChart( Chart chart )
- {
- return chart.isDimension( DIMENSION_INDICATOR_PERIOD )
- || chart.isDimension( DIMENSION_ORGANISATIONUNIT_INDICATOR )
- || chart.isDimension( DIMENSION_PERIOD_INDICATOR );
- }
-
- private boolean isDataElementChart( Chart chart )
- {
- return chart.isDimension( DIMENSION_DATAELEMENT_PERIOD )
- || chart.isDimension( DIMENSION_ORGANISATIONUNIT_DATAELEMENT )
- || chart.isDimension( DIMENSION_PERIOD_DATAELEMENT );
- }
-
- private boolean isCompletenessChart( Chart chart )
- {
- return chart.isDimension( DIMENSION_COMPLETENESS_PERIOD )
- || chart.isDimension( DIMENSION_ORGANISATIONUNIT_COMPLETENESS )
- || chart.isDimension( DIMENSION_PERIOD_COMPLETENESS );
- }
-
- private boolean hasPeriodDimension( Chart chart )
- {
- return chart.isDimension( DIMENSION_PERIOD_INDICATOR )
- || chart.isDimension( DIMENSION_INDICATOR_PERIOD )
- || chart.isDimension( DIMENSION_PERIOD_DATAELEMENT )
- || chart.isDimension( DIMENSION_DATAELEMENT_PERIOD )
- || chart.isDimension( DIMENSION_PERIOD_COMPLETENESS )
- || chart.isDimension( DIMENSION_COMPLETENESS_PERIOD );
- }
-
+ private CategoryDataset[] getCategoryDataSet( Chart chart )
+ {
+ Map<String, Double> valueMap = reportTableManager.getAggregatedValueMap( chart );
+
+ DefaultCategoryDataset regularDataSet = new DefaultCategoryDataset();
+ DefaultCategoryDataset regressionDataSet = new DefaultCategoryDataset();
+
+ SimpleRegression regression = new SimpleRegression();
+
+ double count = 0;
+
+ for ( NameableObject series : chart.series() )
+ {
+ for ( NameableObject category : chart.category() )
+ {
+ count++;
+
+ String key = getIdentifier( Arrays.asList( series, category, chart.filter() ) );
+
+ Double value = valueMap.get( key );
+
+ regularDataSet.addValue( value, series.getName(), category.getName() );
+
+ if ( chart.isRegression() && MathUtils.isEqual( value, MathUtils.ZERO ) )
+ {
+ regression.addData( ++count, value );
+ }
+ }
+ }
+
+ if ( chart.isRegression() ) // Period must be category
+ {
+ count = 0;
+
+ for ( NameableObject series : chart.series() )
+ {
+ for ( NameableObject category : chart.category() )
+ {
+ final double value = regression.predict( count++ );
+
+ // Enough values must exist for regression
+
+ if ( !Double.isNaN( value ) )
+ {
+ regressionDataSet.addValue( value, TREND_PREFIX + series.getName(), category.getName() );
+
+ }
+ }
+ }
+ }
+
+ return new CategoryDataset[] { regularDataSet, regressionDataSet };
+ }
+
/**
* Returns a DefaultCategoryDataSet based on aggregated data for the chart.
*/
+ /*
private CategoryDataset[] getCategoryDataSet( Chart chart )
{
boolean realTimeAggregation = systemSettingManager.getSystemSetting( KEY_AGGREGATION_STRATEGY,
@@ -872,10 +838,6 @@
{
shortName = dataElements.get( i ).getShortName();
}
- else if ( completenessChart )
- {
- shortName = dataSets.get( i ).getShortName();
- }
if ( hasPeriodDimension( chart ) )
{
@@ -899,31 +861,16 @@
aggregationService.getAggregatedDataValue( dataElements.get( i ), null, period.getStartDate(), period.getEndDate(), selectedOrganisationUnit ) :
aggregatedDataValueService.getAggregatedValue( dataElements.get( i ), period, selectedOrganisationUnit );
}
- else if ( completenessChart )
- {
- List<DataSetCompletenessResult> dataSetCompleteness = new ArrayList<DataSetCompletenessResult>(
- dataSetCompletenessService.getDataSetCompleteness( period.getId(),
- Arrays.asList( selectedOrganisationUnit.getId() ), dataSets.get( i ).getId() ) );
-
- if ( !dataSetCompleteness.isEmpty() )
- {
- DataSetCompletenessResult dataSetCompletenessResult = dataSetCompleteness.get( 0 );
- value = dataSetCompletenessResult.getPercentage();
- }
- else
- {
- value = 0d;
- }
- }
-
- if ( chart.isDimension( DIMENSION_PERIOD_INDICATOR )
- || chart.isDimension( DIMENSION_PERIOD_DATAELEMENT )
- || chart.isDimension( DIMENSION_PERIOD_COMPLETENESS ) )
+
+ // categorydataset: value - series - category
+
+ if ( chart.isDimension( DIMENSION_PERIOD_INDICATOR ) // if category is PERIOD
+ || chart.isDimension( DIMENSION_PERIOD_DATAELEMENT ) )
{
regularDataSet.addValue( value != null ? value : 0, shortName, chart.getFormat()
.formatPeriod( period ) );
}
- else
+ else // if category is DATA
{
regularDataSet.addValue( value != null ? value : 0,
chart.getFormat().formatPeriod( period ), shortName );
@@ -945,7 +892,7 @@
columnIndex = 0;
- if ( chart.isRegression() )
+ if ( chart.isRegression() ) // Regression only when category is PERIOD
{
for ( Period period : chart.getAllPeriods() )
{
@@ -962,9 +909,8 @@
}
}
}
- else if ( chart.isDimension( DIMENSION_ORGANISATIONUNIT_INDICATOR )
- || chart.isDimension( DIMENSION_ORGANISATIONUNIT_DATAELEMENT )
- || chart.isDimension( DIMENSION_ORGANISATIONUNIT_COMPLETENESS ) )
+ else if ( chart.isDimension( DIMENSION_ORGANISATIONUNIT_INDICATOR ) // if category is ORG UNIT
+ || chart.isDimension( DIMENSION_ORGANISATIONUNIT_DATAELEMENT ) )
{
// ---------------------------------------------------------
// Regular dataset
@@ -986,22 +932,6 @@
aggregationService.getAggregatedDataValue( dataElements.get( i ), null, selectedPeriod.getStartDate(), selectedPeriod.getEndDate(), unit ) :
aggregatedDataValueService.getAggregatedValue( dataElements.get( i ), selectedPeriod, unit );
}
- else if ( completenessChart )
- {
- List<DataSetCompletenessResult> dataSetCompleteness = new ArrayList<DataSetCompletenessResult>(
- dataSetCompletenessService.getDataSetCompleteness( selectedPeriod.getId(),
- Arrays.asList( unit.getId() ), dataSets.get( i ).getId() ) );
-
- if ( !dataSetCompleteness.isEmpty() )
- {
- DataSetCompletenessResult dataSetCompletenessResult = dataSetCompleteness.get( 0 );
- value = dataSetCompletenessResult.getPercentage();
- }
- else
- {
- value = 0d;
- }
- }
regularDataSet.addValue( value != null ? value : 0, shortName, unit.getShortName() );
@@ -1015,92 +945,18 @@
}
return new CategoryDataset[]{regularDataSet, regressionDataSet};
- }
+ }*/
- /**
- * Returns a title based on the chart meta data.
- */
- private String getTitle( NameableObject nameableObject, List<Period> periods,
- List<OrganisationUnit> organisationUnits, I18nFormat format )
+ private TextTitle getSubTitle( Chart chart )
{
- String title = "";
-
- if ( nameableObject != null )
- {
- title += nameableObject.getShortName() + TITLE_SEPARATOR;
- }
-
- if ( periods != null && periods.size() > 0 )
- {
- title += format.formatPeriod( periods.get( 0 ) ) + TITLE_SEPARATOR;
- }
-
- if ( organisationUnits != null && organisationUnits.size() > 0 )
- {
- title += organisationUnits.get( 0 ).getShortName() + TITLE_SEPARATOR;
- }
-
- if ( title.length() == 0 )
- {
- title = DEFAULT_TITLE_PIVOT_CHART;
- }
- else
- {
- title = title.substring( 0, (title.length() - TITLE_SEPARATOR.length()) );
- }
-
+ TextTitle title = new TextTitle();
+
+ title.setFont( subTitleFont );
+ title.setText( chart.getTitle() );
+
return title;
}
-
- /**
- * Returns a subtitle based on the chart dimension.
- */
- private TextTitle getSubTitle( Chart chart, I18nFormat format )
- {
- TextTitle subTitle = new TextTitle();
-
- subTitle.setFont( subTitleFont );
-
- if ( chart.isDimension( DIMENSION_PERIOD_INDICATOR ) && chart.getAllOrganisationUnits().size() > 0 )
- {
- subTitle.setText( chart.getAllOrganisationUnits().get( 0 ).getName() );
- }
- else if ( chart.isDimension( DIMENSION_ORGANISATIONUNIT_INDICATOR ) && chart.getAllPeriods().size() > 0 )
- {
- subTitle.setText( format.formatPeriod( chart.getAllPeriods().get( 0 ) ) );
- }
- else if ( chart.isDimension( DIMENSION_INDICATOR_PERIOD ) && chart.getIndicators().size() > 0 )
- {
- subTitle.setText( chart.getAllOrganisationUnits().get( 0 ).getName() );
- }
- else if ( chart.isDimension( DIMENSION_PERIOD_DATAELEMENT ) && chart.getAllOrganisationUnits().size() > 0 )
- {
- subTitle.setText( chart.getAllOrganisationUnits().get( 0 ).getName() );
- }
- else if ( chart.isDimension( DIMENSION_ORGANISATIONUNIT_DATAELEMENT ) && chart.getAllPeriods().size() > 0 )
- {
- subTitle.setText( format.formatPeriod( chart.getAllPeriods().get( 0 ) ) );
- }
- else if ( chart.isDimension( DIMENSION_DATAELEMENT_PERIOD ) && chart.getDataElements().size() > 0 )
- {
- subTitle.setText( chart.getAllOrganisationUnits().get( 0 ).getName() );
- }
- else if ( chart.isDimension( DIMENSION_PERIOD_COMPLETENESS ) && chart.getAllOrganisationUnits().size() > 0 )
- {
- subTitle.setText( chart.getAllOrganisationUnits().get( 0 ).getName() );
- }
- else if ( chart.isDimension( DIMENSION_ORGANISATIONUNIT_COMPLETENESS ) && chart.getAllPeriods().size() > 0 )
- {
- subTitle.setText( format.formatPeriod( chart.getAllPeriods().get( 0 ) ) );
- }
- else if ( chart.isDimension( DIMENSION_COMPLETENESS_PERIOD ) && chart.getDataSets().size() > 0 )
- {
- subTitle.setText( chart.getAllOrganisationUnits().get( 0 ).getName() );
- }
-
- return subTitle;
- }
-
+
// -------------------------------------------------------------------------
// CRUD operations
// -------------------------------------------------------------------------
=== modified file 'dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/reporttable/jdbc/JDBCReportTableManager.java'
--- dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/reporttable/jdbc/JDBCReportTableManager.java 2011-02-23 21:08:31 +0000
+++ dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/reporttable/jdbc/JDBCReportTableManager.java 2011-12-21 20:06:49 +0000
@@ -35,6 +35,7 @@
import org.amplecode.quick.StatementHolder;
import org.amplecode.quick.StatementManager;
+import org.hisp.dhis.chart.Chart;
import org.hisp.dhis.dataelement.DataElement;
import org.hisp.dhis.dataelement.DataElementCategoryOption;
import org.hisp.dhis.dataelement.DataElementCategoryOptionCombo;
@@ -45,6 +46,8 @@
import org.hisp.dhis.reporttable.ReportTable;
import org.hisp.dhis.system.util.ConversionUtils;
import org.hisp.dhis.system.util.TextUtils;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.jdbc.support.rowset.SqlRowSet;
/**
* @author Lars Helge Overland
@@ -63,6 +66,13 @@
{
this.statementManager = statementManager;
}
+
+ private JdbcTemplate jdbcTemplate;
+
+ public void setJdbcTemplate( JdbcTemplate jdbcTemplate )
+ {
+ this.jdbcTemplate = jdbcTemplate;
+ }
// -------------------------------------------------------------------------
// ReportTableManager implementation
@@ -70,7 +80,7 @@
public Map<String, Double> getAggregatedValueMap( ReportTable reportTable )
{
- // TODO move agg value methods to agg datavalueservice and move this method to service layer?
+ // TODO use jdbc template
StatementHolder holder = statementManager.getHolder();
@@ -196,4 +206,57 @@
holder.close();
}
}
+
+ public Map<String, Double> getAggregatedValueMap( Chart chart )
+ {
+ // A bit misplaced but we will merge chart and report table soon
+
+ Map<String, Double> map = new HashMap<String, Double>();
+
+ String dataElementIds = TextUtils.getCommaDelimitedString(
+ ConversionUtils.getIdentifiers( DataElement.class, chart.getDataElements() ) );
+ String indicatorIds = TextUtils.getCommaDelimitedString(
+ ConversionUtils.getIdentifiers( Indicator.class, chart.getIndicators() ) );
+ String periodIds = TextUtils.getCommaDelimitedString(
+ ConversionUtils.getIdentifiers( Period.class, chart.getAllPeriods() ) );
+ String unitIds = TextUtils.getCommaDelimitedString(
+ ConversionUtils.getIdentifiers( OrganisationUnit.class, chart.getAllOrganisationUnits() ) );
+
+ if ( chart.hasDataElements() )
+ {
+ final String sql = "SELECT dataelementid, periodid, organisationunitid, SUM(value) FROM aggregateddatavalue " +
+ "WHERE dataelementid IN (" + dataElementIds + ") AND periodid IN (" + periodIds + ") AND organisationunitid IN (" + unitIds + ") " +
+ "GROUP BY dataelementid, periodid, organisationunitid"; // Sum of category option combos
+
+ SqlRowSet rowSet = jdbcTemplate.queryForRowSet( sql );
+
+ while ( rowSet.next() )
+ {
+ String id = getIdentifier( getIdentifier( DataElement.class, rowSet.getInt( 1 ) ),
+ getIdentifier( Period.class, rowSet.getInt( 2 ) ),
+ getIdentifier( OrganisationUnit.class, rowSet.getInt( 3 ) ) );
+
+ map.put( id, rowSet.getDouble( 4 ) );
+ }
+ }
+
+ if ( chart.hasIndicators() )
+ {
+ final String sql = "SELECT indicatorid, periodid, organisationunitid, value FROM aggregatedindicatorvalue " +
+ "WHERE indicatorid IN (" + indicatorIds + ") AND periodid IN (" + periodIds + ") AND organisationunitid IN (" + unitIds + ")";
+
+ SqlRowSet rowSet = jdbcTemplate.queryForRowSet( sql );
+
+ while ( rowSet.next() )
+ {
+ String id = getIdentifier( getIdentifier( Indicator.class, rowSet.getInt( 1 ) ),
+ getIdentifier( Period.class, rowSet.getInt( 2 ) ),
+ getIdentifier( OrganisationUnit.class, rowSet.getInt( 3 ) ) );
+
+ map.put( id, rowSet.getDouble( 4 ) );
+ }
+ }
+
+ return map;
+ }
}
=== modified file 'dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/reporttable/jdbc/ReportTableManager.java'
--- dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/reporttable/jdbc/ReportTableManager.java 2011-02-23 21:08:31 +0000
+++ dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/reporttable/jdbc/ReportTableManager.java 2011-12-21 20:06:49 +0000
@@ -29,6 +29,7 @@
import java.util.Map;
+import org.hisp.dhis.chart.Chart;
import org.hisp.dhis.reporttable.ReportTable;
/**
@@ -40,9 +41,16 @@
String ID = ReportTableManager.class.getName();
/**
- * Generates a map with a key identifiying the dimensions of each value.
+ * Generates a map with a key identifying the dimensions of each value.
*
* @param reportTable the ReportTable for which to create the value map.
*/
Map<String, Double> getAggregatedValueMap( ReportTable reportTable );
+
+ /**
+ * Generates a map with a key identifying the dimensions of each value.
+ *
+ * @param chart the Chart for which to create the value map.
+ */
+ Map<String, Double> getAggregatedValueMap( Chart chart );
}
=== modified file 'dhis-2/dhis-services/dhis-service-reporting/src/main/resources/META-INF/dhis/beans.xml'
--- dhis-2/dhis-services/dhis-service-reporting/src/main/resources/META-INF/dhis/beans.xml 2011-12-14 16:53:56 +0000
+++ dhis-2/dhis-services/dhis-service-reporting/src/main/resources/META-INF/dhis/beans.xml 2011-12-21 20:06:49 +0000
@@ -15,6 +15,7 @@
<bean id="org.hisp.dhis.reporttable.jdbc.ReportTableManager" class="org.hisp.dhis.reporttable.jdbc.JDBCReportTableManager">
<property name="statementManager" ref="statementManager" />
+ <property name="jdbcTemplate" ref="jdbcTemplate" />
</bean>
<bean id="org.hisp.dhis.reporttable.ReportTableStore" class="org.hisp.dhis.common.hibernate.HibernateIdentifiableObjectStore">
@@ -86,9 +87,8 @@
<property name="minMaxDataElementService" ref="org.hisp.dhis.minmax.MinMaxDataElementService" />
<property name="aggregationService" ref="org.hisp.dhis.aggregation.AggregationService" />
<property name="systemSettingManager" ref="org.hisp.dhis.options.SystemSettingManager" />
- <property name="aggregatedDataValueService" ref="org.hisp.dhis.aggregation.AggregatedDataValueService" />
<property name="currentUserService" ref="org.hisp.dhis.user.CurrentUserService" />
- <property name="dataSetCompletenessService" ref="registrationDataCompletenessService" />
+ <property name="reportTableManager" ref="org.hisp.dhis.reporttable.jdbc.ReportTableManager" />
</bean>
<!-- Document -->
@@ -354,7 +354,6 @@
method="intercept" />
<aop:around pointcut="execution( * org.hisp.dhis.completeness.DataSetCompletenessService.getDataSetCompleteness(..) )"
method="intercept" />
- <aop:around pointcut="execution( * org.hisp.dhis.chart.ChartService.getJFree*(..) )" method="intercept" />
<aop:around pointcut="execution( * org.hisp.dhis.datasetreport.DataSetReportService.getCustomDataSetReport(..) )"
method="intercept" />
<aop:around pointcut="execution( * org.hisp.dhis.datasetreport.DataSetReportService.getSectionDataSetReport(..) )"
=== 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 2011-12-21 11:19:47 +0000
+++ dhis-2/dhis-services/dhis-service-reporting/src/main/resources/org/hisp/dhis/chart/hibernate/Chart.hbm.xml 2011-12-21 20:41:22 +0000
@@ -21,8 +21,6 @@
<property name="type" />
- <property name="dimension" />
-
<property name="series" />
<property name="category" />
@@ -31,10 +29,6 @@
<property name="hideLegend" not-null="true" />
- <property name="verticalLabels" not-null="true" />
-
- <property name="horizontalPlotOrientation" not-null="true" />
-
<property name="regression" not-null="true" />
<property name="targetLine" not-null="true" />
=== modified file 'dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/MathUtils.java'
--- dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/MathUtils.java 2011-06-12 08:23:05 +0000
+++ dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/MathUtils.java 2011-12-21 20:31:10 +0000
@@ -43,6 +43,7 @@
public class MathUtils
{
public static final double INVALID = -1.0;
+ public static final Double ZERO = new Double( 0 );
private static final double TOLERANCE = 0.01;
=== modified file 'dhis-2/dhis-support/dhis-support-test/src/main/java/org/hisp/dhis/DhisConvenienceTest.java'
--- dhis-2/dhis-support/dhis-support-test/src/main/java/org/hisp/dhis/DhisConvenienceTest.java 2011-12-19 16:44:56 +0000
+++ dhis-2/dhis-support/dhis-support-test/src/main/java/org/hisp/dhis/DhisConvenienceTest.java 2011-12-21 20:06:49 +0000
@@ -821,10 +821,10 @@
Chart chart = new Chart();
chart.setName( "Chart" + uniqueCharacter );
- chart.setDimension( Chart.DIMENSION_PERIOD_INDICATOR );
chart.setIndicators( indicators );
chart.setPeriods( periods );
chart.setOrganisationUnits( units );
+ chart.setDimensions( Chart.DIMENSION_DATA, Chart.DIMENSION_PERIOD, Chart.DIMENSION_ORGANISATIONUNIT );
return chart;
}
=== modified file 'dhis-2/dhis-web/dhis-web-reporting/src/main/java/org/hisp/dhis/reporting/chart/action/GenerateChartAction.java'
--- dhis-2/dhis-web/dhis-web-reporting/src/main/java/org/hisp/dhis/reporting/chart/action/GenerateChartAction.java 2011-10-29 14:16:54 +0000
+++ dhis-2/dhis-web/dhis-web-reporting/src/main/java/org/hisp/dhis/reporting/chart/action/GenerateChartAction.java 2011-12-21 20:06:49 +0000
@@ -148,11 +148,25 @@
this.organisationUnitId = organisationUnitId;
}
- private String dimension;
-
- public void setDimension( String dimension )
- {
- this.dimension = dimension;
+ private String series;
+
+ public void setSeries( String series )
+ {
+ this.series = series;
+ }
+
+ private String category;
+
+ public void setCategory( String category )
+ {
+ this.category = category;
+ }
+
+ private String filter;
+
+ public void setFilter( String filter )
+ {
+ this.filter = filter;
}
private boolean regression;
@@ -240,8 +254,8 @@
height = 500;
- chart = chartService.getJFreeChart( indicators, dataElements, dataSets, periods, organisationUnits, dimension,
- regression, format );
+ chart = chartService.getJFreeChart( indicators, dataElements, dataSets, periods, organisationUnits,
+ series, category, filter, regression, format );
return SUCCESS;
}
=== modified file 'dhis-2/dhis-web/dhis-web-reporting/src/main/java/org/hisp/dhis/reporting/chart/action/SaveChartAction.java'
--- dhis-2/dhis-web/dhis-web-reporting/src/main/java/org/hisp/dhis/reporting/chart/action/SaveChartAction.java 2011-12-21 11:19:47 +0000
+++ dhis-2/dhis-web/dhis-web-reporting/src/main/java/org/hisp/dhis/reporting/chart/action/SaveChartAction.java 2011-12-21 20:41:22 +0000
@@ -150,11 +150,25 @@
this.type = type;
}
- private String dimension;
-
- public void setDimension( String dimension )
- {
- this.dimension = dimension;
+ private String series;
+
+ public void setSeries( String series )
+ {
+ this.series = series;
+ }
+
+ private String category;
+
+ public void setCategory( String category )
+ {
+ this.category = category;
+ }
+
+ private String filter;
+
+ public void setFilter( String filter )
+ {
+ this.filter = filter;
}
private boolean hideLegend;
@@ -164,20 +178,6 @@
this.hideLegend = hideLegend;
}
- private boolean verticalLabels;
-
- public void setVerticalLabels( boolean verticalLabels )
- {
- this.verticalLabels = verticalLabels;
- }
-
- private boolean horizontalPlotOrientation;
-
- public void setHorizontalPlotOrientation( boolean horizontalPlotOrientation )
- {
- this.horizontalPlotOrientation = horizontalPlotOrientation;
- }
-
private boolean regression;
public void setRegression( boolean regression )
@@ -359,10 +359,10 @@
chart.setRangeAxisLabel( StringUtils.trimToNull( rangeAxisLabel ) );
chart.setHideSubtitle( hideSubtitle );
chart.setType( type );
- chart.setDimension( dimension );
+ chart.setSeries( series );
+ chart.setCategory( category );
+ chart.setFilter( filter );
chart.setHideLegend( hideLegend );
- chart.setVerticalLabels( verticalLabels );
- chart.setHorizontalPlotOrientation( horizontalPlotOrientation );
chart.setRegression( regression );
chart.setTargetLine( targetLine );
chart.setTargetLineValue( targetLineValue );
=== modified file 'dhis-2/dhis-web/dhis-web-reporting/src/main/webapp/dhis-web-reporting/addChartForm.vm'
--- dhis-2/dhis-web/dhis-web-reporting/src/main/webapp/dhis-web-reporting/addChartForm.vm 2011-12-21 11:19:47 +0000
+++ dhis-2/dhis-web/dhis-web-reporting/src/main/webapp/dhis-web-reporting/addChartForm.vm 2011-12-21 22:11:29 +0000
@@ -32,20 +32,14 @@
$i18n.getString( "create_period_by_indicator_chart" )
#elseif( $dimension == "period_dataElement" )
$i18n.getString( "create_period_by_dataelement_chart" )
- #elseif( $dimension == "period_completeness" )
- $i18n.getString( "create_period_by_completeness_chart" )
#elseif ( $dimension == "organisationUnit" )
$i18n.getString( "create_indicator_by_organisation_unit_chart" )
#elseif ( $dimension == "organisationUnit_dataElement" )
$i18n.getString( "create_dataelement_by_organisation_unit_chart" )
- #elseif ( $dimension == "organisationUnit_completeness" )
- $i18n.getString( "create_completeness_by_organisation_unit_chart" )
#elseif ( $dimension == "indicator" )
$i18n.getString( "create_indicator_by_period_chart" )
#elseif ( $dimension == "dataElement_period" )
$i18n.getString( "create_dataelement_by_period_chart" )
- #elseif ( $dimension == "completeness_period" )
- $i18n.getString( "create_completeness_by_period_chart" )
#end
#end
@@ -56,6 +50,20 @@
<input type="hidden" id="id" name="id" value="$!chart.id" />
<input type="hidden" id="dimension" name="dimension" value="$!dimension" />
+#if ( $dimension == "period" || $dimension == "period_dataElement" )
+ <input type="hidden" name="series" value="PERIOD" />
+ <input type="hidden" name="category" value="DATA" />
+ <input type="hidden" name="filter" value="ORGANISATIONUNIT" />
+#elseif ( $dimension == "indicator" || $dimension == "dataElement_period" )
+ <input type="hidden" name="series" value="DATA" />
+ <input type="hidden" name="category" value="PERIOD" />
+ <input type="hidden" name="filter" value="ORGANISATIONUNIT" />
+#elseif ( $dimension == "organisationUnit" || $dimension == "organisationUnit_dataElement" )
+ <input type="hidden" name="series" value="DATA" />
+ <input type="hidden" name="category" value="ORGANISATIONUNIT" />
+ <input type="hidden" name="filter" value="PERIOD" />
+#end
+
<table>
<tr>
<th colspan="2">$i18n.getString( "chart" )</th>
@@ -80,14 +88,10 @@
<td><label for="type">$i18n.getString( "chart_type" )</label></td>
<td>
<select id="type" name="type" style="width:300px">
- <option value="bar"#if ( $!chart.type == "bar" ) selected#end>$i18n.getString( "bar_chart" )</option>
- <option value="bar3d"#if ( $!chart.type == "bar3d" ) selected#end>$i18n.getString( "bar3d_chart" )</option>
- <option value="line"#if ( $!chart.type == "line" ) selected#end>$i18n.getString( "line_chart" )</option>
- <option value="line3d"#if ( $!chart.type == "line3d" ) selected#end>$i18n.getString( "line3d_chart" )</option>
- <option value="pie"#if ( $!chart.type == "pie" ) selected#end>$i18n.getString( "pie_chart" )</option>
- <option value="pie3d"#if ( $!chart.type == "pie3d" ) selected#end>$i18n.getString( "pie3d_chart" )</option>
- <option value="stackedBar"#if ( $!chart.type == "stackedBar" ) selected#end>$i18n.getString( "stacked_bar_chart" )</option>
- <option value="stackedBar3d"#if ( $!chart.type == "stackedBar3d" ) selected#end>$i18n.getString( "stacked_bar3d_chart" )</option>
+ <option value="BAR"#if ( $!chart.type == "bar" ) selected#end>$i18n.getString( "bar_chart" )</option>
+ <option value="LINE"#if ( $!chart.type == "line" ) selected#end>$i18n.getString( "line_chart" )</option>
+ <option value="PIE"#if ( $!chart.type == "pie" ) selected#end>$i18n.getString( "pie_chart" )</option>
+ <option value="STACKEDBAR"#if ( $!chart.type == "stackedBar" ) selected#end>$i18n.getString( "stacked_bar_chart" )</option>
</select>
</td>
</tr>
@@ -96,14 +100,6 @@
<td><input type="checkbox" id="hideLegend" name="hideLegend" value="true"#if( $!chart.hideLegend ) checked#end></td>
</tr>
<tr>
- <td><label for="verticalLabels">$i18n.getString( "vertical_category_labels" )</label></td>
- <td><input type="checkbox" id="verticalLabels" name="verticalLabels" value="true"#if( $!chart.verticalLabels ) checked#end></td>
- </tr>
- <tr>
- <td><label for="horizontalPlotOrientation">$i18n.getString( "horizontal_plot_orientation" )</label></td>
- <td><input type="checkbox" id="horizontalPlotOrientation" name="horizontalPlotOrientation" value="true"#if( $!chart.horizontalPlotOrientation ) checked#end></td>
- </tr>
- <tr>
<td><label for="regression">$i18n.getString( "include_regression_line" )</label></td>
<td><input type="checkbox" id="regression" name="regression" value="true"#if( $!chart.regression ) checked#end></td>
</tr>
=== modified file 'dhis-2/dhis-web/dhis-web-reporting/src/main/webapp/dhis-web-reporting/viewChartForm.vm'
--- dhis-2/dhis-web/dhis-web-reporting/src/main/webapp/dhis-web-reporting/viewChartForm.vm 2011-12-21 11:19:47 +0000
+++ dhis-2/dhis-web/dhis-web-reporting/src/main/webapp/dhis-web-reporting/viewChartForm.vm 2011-12-21 22:11:29 +0000
@@ -28,11 +28,8 @@
<option value='organisationUnit'>$i18n.getString( 'indicator_by_organisation_unit_chart' )</option>
<option value='dataElement_period'>$i18n.getString( 'dataelement_by_period_chart' )</option>
<option value='organisationUnit_dataElement'>$i18n.getString( 'dataelement_by_organisation_unit_chart' )</option>
- <option value='completeness_period'>$i18n.getString( 'completeness_by_period_chart' )</option>
- ##<option value='organisationUnit_completeness'>$i18n.getString( 'completeness_by_organisation_unit_chart' )</option>
<option value='period'>$i18n.getString( 'period_by_indicator_chart' )</option>
<option value='period_dataElement'>$i18n.getString( 'period_by_dataelement_chart' )</option>
- ##<option value='period_completeness'>$i18n.getString( 'period_by_completeness_chart' )</option>
</select>
<button type="button" id="add_chart">$i18n.getString( 'add' )</button>
</td>