=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/BaseAnalyticalObject.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/BaseAnalyticalObject.java 2014-07-14 22:09:24 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/BaseAnalyticalObject.java 2014-07-14 23:08:26 +0000 @@ -785,6 +785,8 @@ dataElementGroups.clear(); organisationUnitGroups.clear(); categoryOptionGroups.clear(); + attributeDimensions.clear(); + dataElementDimensions.clear(); userOrganisationUnit = false; userOrganisationUnitChildren = false; userOrganisationUnitGrandChildren = false; @@ -1004,8 +1006,8 @@ @JsonProperty @JsonView( { DetailedView.class, ExportView.class } ) - @JacksonXmlElementWrapper( localName = "attributeDimensions", namespace = DxfNamespaces.DXF_2_0 ) - @JacksonXmlProperty( localName = "attributeDimension", namespace = DxfNamespaces.DXF_2_0 ) + @JacksonXmlElementWrapper( localName = "dataElementDimensions", namespace = DxfNamespaces.DXF_2_0 ) + @JacksonXmlProperty( localName = "dataElementDimension", namespace = DxfNamespaces.DXF_2_0 ) public List getDataElementDimensions() { return dataElementDimensions; === modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/trackedentity/TrackedEntityAttributeDimension.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/trackedentity/TrackedEntityAttributeDimension.java 2014-07-14 22:09:24 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/trackedentity/TrackedEntityAttributeDimension.java 2014-07-14 23:08:26 +0000 @@ -86,7 +86,56 @@ { return attribute != null ? attribute.getDisplayName() : null; } - + + @Override + public String toString() + { + return "[Id: " + id + ", attribute: " + attribute + ", filter: " + filter + "]"; + } + + @Override + public int hashCode() + { + int result = id; + result = 31 * result + (attribute != null ? attribute.hashCode() : 0); + result = 31 * result + (filter != null ? filter.hashCode() : 0); + + return result; + } + + @Override + public boolean equals( Object o ) + { + if ( this == o ) + { + return true; + } + + if ( o == null ) + { + return false; + } + + if ( !getClass().isAssignableFrom( o.getClass() ) ) + { + return false; + } + + final TrackedEntityAttributeDimension other = (TrackedEntityAttributeDimension) o; + + if ( attribute != null ? !attribute.equals( other.attribute ) : other.attribute != null ) + { + return false; + } + + if ( filter != null ? !filter.equals( other.filter ) : other.filter != null ) + { + return false; + } + + return true; + } + // ------------------------------------------------------------------------- // Getters and setters // ------------------------------------------------------------------------- === modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/trackedentity/TrackedEntityDataElementDimension.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/trackedentity/TrackedEntityDataElementDimension.java 2014-07-14 22:09:24 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/trackedentity/TrackedEntityDataElementDimension.java 2014-07-14 23:08:26 +0000 @@ -32,7 +32,6 @@ import org.hisp.dhis.common.DxfNamespaces; import org.hisp.dhis.common.view.DetailedView; import org.hisp.dhis.common.view.ExportView; - import org.hisp.dhis.dataelement.DataElement; import com.fasterxml.jackson.annotation.JsonProperty; @@ -89,6 +88,55 @@ return dataElement != null ? dataElement.getDisplayName() : null; } + @Override + public String toString() + { + return "[Id: " + id + ", data element: " + dataElement + ", filter: " + filter + "]"; + } + + @Override + public int hashCode() + { + int result = id; + result = 31 * result + (dataElement != null ? dataElement.hashCode() : 0); + result = 31 * result + (filter != null ? filter.hashCode() : 0); + + return result; + } + + @Override + public boolean equals( Object o ) + { + if ( this == o ) + { + return true; + } + + if ( o == null ) + { + return false; + } + + if ( !getClass().isAssignableFrom( o.getClass() ) ) + { + return false; + } + + final TrackedEntityDataElementDimension other = (TrackedEntityDataElementDimension) o; + + if ( dataElement != null ? !dataElement.equals( other.dataElement ) : other.dataElement != null ) + { + return false; + } + + if ( filter != null ? !filter.equals( other.filter ) : other.filter != null ) + { + return false; + } + + return true; + } + // ------------------------------------------------------------------------- // Getters and setters // ------------------------------------------------------------------------- === modified file 'dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/event/EventQueryParams.java' --- dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/event/EventQueryParams.java 2014-05-10 11:18:29 +0000 +++ dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/event/EventQueryParams.java 2014-07-14 23:08:26 +0000 @@ -270,7 +270,8 @@ "End date: " + endDate + ", " + "Items " + items + ", " + "Item filters: " + itemFilters + ", " + - "Dimensions " + dimensions + "]"; + "Dimensions: " + dimensions + ", " + + "Filters: " + filters + "]"; } // ------------------------------------------------------------------------- === modified file 'dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/event/data/DefaultEventAnalyticsService.java' --- dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/event/data/DefaultEventAnalyticsService.java 2014-07-13 09:53:10 +0000 +++ dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/event/data/DefaultEventAnalyticsService.java 2014-07-14 23:08:26 +0000 @@ -32,6 +32,7 @@ import static org.hisp.dhis.analytics.AnalyticsService.OU_HIERARCHY_KEY; import static org.hisp.dhis.common.DimensionalObject.ORGUNIT_DIM_ID; import static org.hisp.dhis.common.DimensionalObject.PERIOD_DIM_ID; +import static org.hisp.dhis.common.DimensionalObjectUtils.DIMENSION_NAME_SEP; import static org.hisp.dhis.common.DimensionalObjectUtils.getDimensionFromParam; import static org.hisp.dhis.common.DimensionalObjectUtils.getDimensionItemsFromParam; import static org.hisp.dhis.common.DimensionalObjectUtils.toDimension; @@ -56,7 +57,6 @@ import org.hisp.dhis.common.BaseAnalyticalObject; import org.hisp.dhis.common.DimensionType; import org.hisp.dhis.common.DimensionalObject; -import org.hisp.dhis.common.DimensionalObjectUtils; import org.hisp.dhis.common.Grid; import org.hisp.dhis.common.GridHeader; import org.hisp.dhis.common.IdentifiableObject; @@ -464,7 +464,7 @@ } else { - params.getItems().add( getQueryItem( dimension.getDimension() ) ); + params.getItems().add( getQueryItem( dimension.getDimension(), dimension.getFilter() ) ); } } @@ -479,7 +479,7 @@ } else { - params.getItemFilters().add( getQueryItem( filter.getDimension() ) ); + params.getItemFilters().add( getQueryItem( filter.getDimension(), filter.getFilter() ) ); } } } @@ -496,13 +496,23 @@ // Supportive methods // ------------------------------------------------------------------------- - private QueryItem getQueryItem( String dimension ) - { - String[] split = dimension.split( DimensionalObjectUtils.DIMENSION_NAME_SEP ); - + private QueryItem getQueryItem( String dimension, String filter ) + { + if ( filter != null ) + { + dimension += DIMENSION_NAME_SEP + filter; + } + + return getQueryItem( dimension ); + } + + private QueryItem getQueryItem( String dimensionString ) + { + String[] split = dimensionString.split( DIMENSION_NAME_SEP ); + if ( split == null || ( split.length % 2 != 1 ) ) { - throw new IllegalQueryException( "Query item or filter is invalid: " + dimension ); + throw new IllegalQueryException( "Query item or filter is invalid: " + dimensionString ); } QueryItem queryItem = getQuryItemFromUid( split[0] ); @@ -512,10 +522,11 @@ for ( int i = 1; i < split.length; i += 2 ) { QueryOperator operator = QueryOperator.fromString( split[i] ); - queryItem.getFilters().add( new QueryFilter( operator, split[i+1] ) ); + QueryFilter filter = new QueryFilter( operator, split[i+1] ); + queryItem.getFilters().add( filter ); } } - + return queryItem; } === 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 2014-07-13 14:34:10 +0000 +++ dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/chart/impl/DefaultChartService.java 2014-07-14 23:08:26 +0000 @@ -527,6 +527,8 @@ */ private JFreeChart getJFreeChart( BaseChart chart ) { + final CategoryDataset[] dataSets = getCategoryDataSet( chart ); + final BarRenderer barRenderer = getBarRenderer(); final LineAndShapeRenderer lineRenderer = getLineRenderer(); @@ -536,8 +538,6 @@ CategoryPlot plot = null; - CategoryDataset[] dataSets = getCategoryDataSet( chart ); - if ( chart.isType( TYPE_LINE ) ) { plot = new CategoryPlot( dataSets[0], new CategoryAxis(), new NumberAxis(), lineRenderer ); @@ -736,7 +736,7 @@ else if ( chart.isAnalyticsType( AnalyticsType.EVENT ) ) { Grid grid = eventAnalyticsService.getAggregatedEventData( chart, chart.getFormat() ); - + chart.setDataItemGrid( grid ); valueMap = GridUtils.getMetaValueMapping( grid, ( grid.getWidth() - 1 ) ); @@ -748,7 +748,7 @@ SimpleRegression regression = new SimpleRegression(); BaseAnalyticalObject.sortKeys( valueMap ); - + for ( NameableObject series : chart.series() ) { double categoryIndex = 0; @@ -758,10 +758,10 @@ categoryIndex++; String key = series.getUid() + DIMENSION_SEP + category.getUid(); - + // Replace potential operand separator with dimension separator - key = key.replace( DataElementOperand.SEPARATOR, DIMENSION_SEP ); + key = key.replace( DataElementOperand.SEPARATOR, DIMENSION_SEP ); //TODO fix issue with keys including . and - // Sort key on components to remove significance of column order