=== 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 2014-04-15 13:53:17 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/chart/Chart.java 2014-04-21 16:49:18 +0000 @@ -55,23 +55,32 @@ /** * @author Lars Helge Overland */ -@JacksonXmlRootElement(localName = "chart", namespace = DxfNamespaces.DXF_2_0) +@JacksonXmlRootElement( localName = "chart", namespace = DxfNamespaces.DXF_2_0 ) public class Chart extends BaseAnalyticalObject { private static final long serialVersionUID = 2570074075484545534L; public static final String SIZE_NORMAL = "normal"; + public static final String SIZE_WIDE = "wide"; + public static final String SIZE_TALL = "tall"; public static final String TYPE_COLUMN = "column"; + public static final String TYPE_STACKED_COLUMN = "stackedcolumn"; + public static final String TYPE_BAR = "bar"; + public static final String TYPE_STACKED_BAR = "stackedbar"; + public static final String TYPE_LINE = "line"; + public static final String TYPE_AREA = "area"; + public static final String TYPE_PIE = "pie"; + public static final String TYPE_RADAR = "radar"; // Spider web private String domainAxisLabel; @@ -105,13 +114,15 @@ private String baseLineLabel; private boolean showData; - + private boolean hideEmptyRows; - + private Double rangeAxisMaxValue; - - private Integer rangeAxisSteps; //min 1 - + + private Double rangeAxisMinValue; + + private Integer rangeAxisSteps; // min 1 + private Integer rangeAxisDecimals; // ------------------------------------------------------------------------- @@ -147,7 +158,8 @@ @Override public void init( User user, Date date, OrganisationUnit organisationUnit, - List organisationUnitsAtLevel, List organisationUnitsInGroups, I18nFormat format ) + List organisationUnitsAtLevel, List organisationUnitsInGroups, + I18nFormat format ) { this.user = user; this.relativePeriodDate = date; @@ -163,14 +175,16 @@ public List series() { - DimensionalObject object = getDimensionalObject( series, relativePeriodDate, user, true, organisationUnitsAtLevel, organisationUnitsInGroups, format ); + DimensionalObject object = getDimensionalObject( series, relativePeriodDate, user, true, + organisationUnitsAtLevel, organisationUnitsInGroups, format ); return object != null ? object.getItems() : null; } public List category() { - DimensionalObject object = getDimensionalObject( category, relativePeriodDate, user, true, organisationUnitsAtLevel, organisationUnitsInGroups, format ); + DimensionalObject object = getDimensionalObject( category, relativePeriodDate, user, true, + organisationUnitsAtLevel, organisationUnitsInGroups, format ); return object != null ? object.getItems() : null; } @@ -181,7 +195,8 @@ for ( String filter : filterDimensions ) { - DimensionalObject object = getDimensionalObject( filter, relativePeriodDate, user, true, organisationUnitsAtLevel, organisationUnitsInGroups, format ); + DimensionalObject object = getDimensionalObject( filter, relativePeriodDate, user, true, + organisationUnitsAtLevel, organisationUnitsInGroups, format ); if ( object != null ) { @@ -246,10 +261,10 @@ /** * Sets all dimensions for this chart. - * - * @param series the series dimension. + * + * @param series the series dimension. * @param category the category dimension. - * @param filter the filter dimension. + * @param filter the filter dimension. */ public void setDimensions( String series, String category, String filter ) { @@ -289,8 +304,8 @@ // ------------------------------------------------------------------------- @JsonProperty - @JsonView({ DetailedView.class, ExportView.class, DimensionalView.class }) - @JacksonXmlProperty(namespace = DxfNamespaces.DXF_2_0) + @JsonView( { DetailedView.class, ExportView.class, DimensionalView.class } ) + @JacksonXmlProperty( namespace = DxfNamespaces.DXF_2_0 ) public String getDomainAxisLabel() { return domainAxisLabel; @@ -302,8 +317,8 @@ } @JsonProperty - @JsonView({ DetailedView.class, ExportView.class, DimensionalView.class }) - @JacksonXmlProperty(namespace = DxfNamespaces.DXF_2_0) + @JsonView( { DetailedView.class, ExportView.class, DimensionalView.class } ) + @JacksonXmlProperty( namespace = DxfNamespaces.DXF_2_0 ) public String getRangeAxisLabel() { return rangeAxisLabel; @@ -315,8 +330,8 @@ } @JsonProperty - @JsonView({ DetailedView.class, ExportView.class, DimensionalView.class }) - @JacksonXmlProperty(namespace = DxfNamespaces.DXF_2_0) + @JsonView( { DetailedView.class, ExportView.class, DimensionalView.class } ) + @JacksonXmlProperty( namespace = DxfNamespaces.DXF_2_0 ) public String getType() { return type; @@ -328,8 +343,8 @@ } @JsonProperty - @JsonView({ DetailedView.class, ExportView.class }) - @JacksonXmlProperty(namespace = DxfNamespaces.DXF_2_0) + @JsonView( { DetailedView.class, ExportView.class } ) + @JacksonXmlProperty( namespace = DxfNamespaces.DXF_2_0 ) public String getSeries() { return series; @@ -341,8 +356,8 @@ } @JsonProperty - @JsonView({ DetailedView.class, ExportView.class }) - @JacksonXmlProperty(namespace = DxfNamespaces.DXF_2_0) + @JsonView( { DetailedView.class, ExportView.class } ) + @JacksonXmlProperty( namespace = DxfNamespaces.DXF_2_0 ) public String getCategory() { return category; @@ -354,9 +369,9 @@ } @JsonProperty - @JsonView({ DetailedView.class, ExportView.class }) - @JacksonXmlElementWrapper(localName = "filterDimensions", namespace = DxfNamespaces.DXF_2_0) - @JacksonXmlProperty(localName = "filterDimension", namespace = DxfNamespaces.DXF_2_0) + @JsonView( { DetailedView.class, ExportView.class } ) + @JacksonXmlElementWrapper( localName = "filterDimensions", namespace = DxfNamespaces.DXF_2_0 ) + @JacksonXmlProperty( localName = "filterDimension", namespace = DxfNamespaces.DXF_2_0 ) public List getFilterDimensions() { return filterDimensions; @@ -368,8 +383,8 @@ } @JsonProperty - @JsonView({ DetailedView.class, ExportView.class, DimensionalView.class }) - @JacksonXmlProperty(namespace = DxfNamespaces.DXF_2_0) + @JsonView( { DetailedView.class, ExportView.class, DimensionalView.class } ) + @JacksonXmlProperty( namespace = DxfNamespaces.DXF_2_0 ) public boolean isHideLegend() { return hideLegend; @@ -381,8 +396,8 @@ } @JsonProperty - @JsonView({ DetailedView.class, ExportView.class, DimensionalView.class }) - @JacksonXmlProperty(namespace = DxfNamespaces.DXF_2_0) + @JsonView( { DetailedView.class, ExportView.class, DimensionalView.class } ) + @JacksonXmlProperty( namespace = DxfNamespaces.DXF_2_0 ) public boolean isRegression() { return regression; @@ -394,8 +409,8 @@ } @JsonProperty - @JsonView({ DetailedView.class, ExportView.class, DimensionalView.class }) - @JacksonXmlProperty(namespace = DxfNamespaces.DXF_2_0) + @JsonView( { DetailedView.class, ExportView.class, DimensionalView.class } ) + @JacksonXmlProperty( namespace = DxfNamespaces.DXF_2_0 ) public Double getTargetLineValue() { return targetLineValue; @@ -407,8 +422,8 @@ } @JsonProperty - @JsonView({ DetailedView.class, ExportView.class, DimensionalView.class }) - @JacksonXmlProperty(namespace = DxfNamespaces.DXF_2_0) + @JsonView( { DetailedView.class, ExportView.class, DimensionalView.class } ) + @JacksonXmlProperty( namespace = DxfNamespaces.DXF_2_0 ) public String getTargetLineLabel() { return targetLineLabel; @@ -420,8 +435,8 @@ } @JsonProperty - @JsonView({ DetailedView.class, ExportView.class, DimensionalView.class }) - @JacksonXmlProperty(namespace = DxfNamespaces.DXF_2_0) + @JsonView( { DetailedView.class, ExportView.class, DimensionalView.class } ) + @JacksonXmlProperty( namespace = DxfNamespaces.DXF_2_0 ) public Double getBaseLineValue() { return baseLineValue; @@ -433,8 +448,8 @@ } @JsonProperty - @JsonView({ DetailedView.class, ExportView.class, DimensionalView.class }) - @JacksonXmlProperty(namespace = DxfNamespaces.DXF_2_0) + @JsonView( { DetailedView.class, ExportView.class, DimensionalView.class } ) + @JacksonXmlProperty( namespace = DxfNamespaces.DXF_2_0 ) public String getBaseLineLabel() { return baseLineLabel; @@ -446,8 +461,8 @@ } @JsonProperty - @JsonView({ DetailedView.class, ExportView.class, DimensionalView.class }) - @JacksonXmlProperty(namespace = DxfNamespaces.DXF_2_0) + @JsonView( { DetailedView.class, ExportView.class, DimensionalView.class } ) + @JacksonXmlProperty( namespace = DxfNamespaces.DXF_2_0 ) public boolean isHideTitle() { return hideTitle; @@ -459,8 +474,8 @@ } @JsonProperty - @JsonView({ DetailedView.class, ExportView.class, DimensionalView.class }) - @JacksonXmlProperty(namespace = DxfNamespaces.DXF_2_0) + @JsonView( { DetailedView.class, ExportView.class, DimensionalView.class } ) + @JacksonXmlProperty( namespace = DxfNamespaces.DXF_2_0 ) public boolean isHideSubtitle() { return hideSubtitle; @@ -472,8 +487,8 @@ } @JsonProperty - @JsonView({ DetailedView.class, ExportView.class, DimensionalView.class }) - @JacksonXmlProperty(namespace = DxfNamespaces.DXF_2_0) + @JsonView( { DetailedView.class, ExportView.class, DimensionalView.class } ) + @JacksonXmlProperty( namespace = DxfNamespaces.DXF_2_0 ) public String getTitle() { return this.title; @@ -485,8 +500,8 @@ } @JsonProperty - @JsonView({ DetailedView.class, ExportView.class, DimensionalView.class }) - @JacksonXmlProperty(namespace = DxfNamespaces.DXF_2_0) + @JsonView( { DetailedView.class, ExportView.class, DimensionalView.class } ) + @JacksonXmlProperty( namespace = DxfNamespaces.DXF_2_0 ) public boolean isShowData() { return showData; @@ -498,8 +513,8 @@ } @JsonProperty - @JsonView({ DetailedView.class, ExportView.class, DimensionalView.class }) - @JacksonXmlProperty(namespace = DxfNamespaces.DXF_2_0) + @JsonView( { DetailedView.class, ExportView.class, DimensionalView.class } ) + @JacksonXmlProperty( namespace = DxfNamespaces.DXF_2_0 ) public boolean isHideEmptyRows() { return hideEmptyRows; @@ -511,8 +526,8 @@ } @JsonProperty - @JsonView({ DetailedView.class, ExportView.class, DimensionalView.class }) - @JacksonXmlProperty(namespace = DxfNamespaces.DXF_2_0) + @JsonView( { DetailedView.class, ExportView.class, DimensionalView.class } ) + @JacksonXmlProperty( namespace = DxfNamespaces.DXF_2_0 ) public boolean isRewindRelativePeriods() { return rewindRelativePeriods; @@ -524,43 +539,62 @@ } @JsonProperty - @JsonView({ DetailedView.class, ExportView.class, DimensionalView.class }) - @JacksonXmlProperty(namespace = DxfNamespaces.DXF_2_0) - public Double getRangeAxisMaxValue() { - return rangeAxisMaxValue; - } - - public void setRangeAxisMaxValue(Double rangeAxisMaxValue) { - this.rangeAxisMaxValue = rangeAxisMaxValue; - } - - @JsonProperty - @JsonView({ DetailedView.class, ExportView.class, DimensionalView.class }) - @JacksonXmlProperty(namespace = DxfNamespaces.DXF_2_0) - public Integer getRangeAxisSteps() { - return rangeAxisSteps; - } - - public void setRangeAxisSteps(Integer rangeAxisSteps) { - this.rangeAxisSteps = rangeAxisSteps; - } - - @JsonProperty - @JsonView({ DetailedView.class, ExportView.class, DimensionalView.class }) - @JacksonXmlProperty(namespace = DxfNamespaces.DXF_2_0) - public Integer getRangeAxisDecimals() { - return rangeAxisDecimals; - } - - public void setRangeAxisDecimals(Integer rangeAxisDecimals) { - this.rangeAxisDecimals = rangeAxisDecimals; - } + @JsonView( { DetailedView.class, ExportView.class, DimensionalView.class } ) + @JacksonXmlProperty( namespace = DxfNamespaces.DXF_2_0 ) + public Double getRangeAxisMaxValue() + { + return rangeAxisMaxValue; + } + + public void setRangeAxisMaxValue( Double rangeAxisMaxValue ) + { + this.rangeAxisMaxValue = rangeAxisMaxValue; + } + + @JsonProperty + @JsonView( { DetailedView.class, ExportView.class, DimensionalView.class } ) + @JacksonXmlProperty( namespace = DxfNamespaces.DXF_2_0 ) + public Double getRangeAxisMinValue() + { + return rangeAxisMinValue; + } + + public void setRangeAxisMinValue( Double rangeAxisMinValue ) + { + this.rangeAxisMinValue = rangeAxisMinValue; + } + + @JsonProperty + @JsonView( { DetailedView.class, ExportView.class, DimensionalView.class } ) + @JacksonXmlProperty( namespace = DxfNamespaces.DXF_2_0 ) + public Integer getRangeAxisSteps() + { + return rangeAxisSteps; + } + + public void setRangeAxisSteps( Integer rangeAxisSteps ) + { + this.rangeAxisSteps = rangeAxisSteps; + } + + @JsonProperty + @JsonView( { DetailedView.class, ExportView.class, DimensionalView.class } ) + @JacksonXmlProperty( namespace = DxfNamespaces.DXF_2_0 ) + public Integer getRangeAxisDecimals() + { + return rangeAxisDecimals; + } + + public void setRangeAxisDecimals( Integer rangeAxisDecimals ) + { + this.rangeAxisDecimals = rangeAxisDecimals; + } // ------------------------------------------------------------------------- // Getters and setters for transient properties // ------------------------------------------------------------------------- - @JsonIgnore + @JsonIgnore public I18nFormat getFormat() { return format; @@ -615,6 +649,7 @@ hideEmptyRows = chart.isHideEmptyRows(); rewindRelativePeriods = chart.isRewindRelativePeriods(); rangeAxisMaxValue = chart.getRangeAxisMaxValue(); + rangeAxisMinValue = chart.getRangeAxisMinValue(); rangeAxisSteps = chart.getRangeAxisSteps(); rangeAxisDecimals = chart.getRangeAxisDecimals(); === 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 2014-04-15 12:43:39 +0000 +++ dhis-2/dhis-services/dhis-service-reporting/src/main/resources/org/hisp/dhis/chart/hibernate/Chart.hbm.xml 2014-04-21 16:49:18 +0000 @@ -164,6 +164,8 @@ + + === modified file 'dhis-2/dhis-web/dhis-web-visualizer/src/main/webapp/dhis-web-visualizer/app/scripts/app.js' --- dhis-2/dhis-web/dhis-web-visualizer/src/main/webapp/dhis-web-visualizer/app/scripts/app.js 2014-04-15 13:39:35 +0000 +++ dhis-2/dhis-web/dhis-web-visualizer/src/main/webapp/dhis-web-visualizer/app/scripts/app.js 2014-04-21 16:49:18 +0000 @@ -35,28 +35,33 @@ // constructors OptionsWindow = function() { - var showTrendLine, + var showValues, + hideEmptyRows, + showTrendLine, targetLineValue, targetLineTitle, baseLineValue, baseLineTitle, - showValues, - hideEmptyRows, + rangeAxisMaxValue, + rangeAxisMinValue, + rangeAxisSteps, + rangeAxisDecimals, + rangeAxisTitle, + domainAxisTitle, + hideLegend, hideTitle, title, - domainAxisTitle, - rangeAxisTitle, data, axes, general, window, - cmpWidth = 310, + cmpWidth = 340, labelWidth = 125, - numberWidth = 60; + numberWidth = 80; showTrendLine = Ext.create('Ext.form.field.Checkbox', { boxLabel: NS.i18n.trend_line, @@ -117,14 +122,20 @@ }); rangeAxisMaxValue = Ext.create('Ext.form.field.Number', { - width: 190, + width: numberWidth, height: 18, - fieldLabel: 'Range axis max value', labelWidth: 125 }); + rangeAxisMinValue = Ext.create('Ext.form.field.Number', { + width: numberWidth, + height: 18, + labelWidth: 125, + style: 'margin-left:1px' + }); + rangeAxisSteps = Ext.create('Ext.form.field.Number', { - width: 190, + width: labelWidth + 5 + numberWidth, height: 18, fieldLabel: 'Range axis tick steps', labelWidth: 125, @@ -132,7 +143,7 @@ }); rangeAxisDecimals = Ext.create('Ext.form.field.Number', { - width: 190, + width: labelWidth + 5 + numberWidth, height: 18, fieldLabel: 'Range axis decimals', labelWidth: 125, @@ -164,7 +175,7 @@ style: 'margin-bottom:2px', width: cmpWidth, fieldLabel: NS.i18n.chart_title, - labelStyle: 'color:#333; padding-left:2px', + labelStyle: 'color:#333', labelWidth: 125, maxLength: 100, enforceMaxLength: true, @@ -184,7 +195,7 @@ }); domainAxisTitle = Ext.create('Ext.form.field.Text', { - width: 310, + width: cmpWidth, fieldLabel: NS.i18n.domain_axis_label, labelStyle: 'color:#333', labelWidth: 125, @@ -207,7 +218,7 @@ bodyStyle: 'border:0 none', items: [ { - bodyStyle: 'border:0 none; padding-top:3px; padding-left:2px; margin-right:5px; color:#333', + bodyStyle: 'border:0 none; padding-top:3px; margin-right:5px; color:#333', width: 130, html: 'Target value / title:' }, @@ -221,7 +232,7 @@ bodyStyle: 'border:0 none', items: [ { - bodyStyle: 'border:0 none; padding-top:3px; padding-left:2px; margin-right:5px; color:#333', + bodyStyle: 'border:0 none; padding-top:3px; margin-right:5px; color:#333', width: 130, html: 'Base value / title:' }, @@ -236,7 +247,19 @@ bodyStyle: 'border:0 none', style: 'margin-left:14px', items: [ - rangeAxisMaxValue, + { + layout: 'column', + bodyStyle: 'border:0 none', + items: [ + { + bodyStyle: 'border:0 none; padding-top:3px; margin-right:5px; color:#333', + width: 130, + html: 'Range axis max/min:' + }, + rangeAxisMaxValue, + rangeAxisMinValue + ] + }, rangeAxisSteps, rangeAxisDecimals, rangeAxisTitle, @@ -272,6 +295,7 @@ baseLineValue: baseLineValue.getValue(), baseLineTitle: baseLineTitle.getValue(), rangeAxisMaxValue: rangeAxisMaxValue.getValue(), + rangeAxisMinValue: rangeAxisMinValue.getValue(), rangeAxisSteps: rangeAxisSteps.getValue(), rangeAxisDecimals: rangeAxisDecimals.getValue(), rangeAxisTitle: rangeAxisTitle.getValue(), @@ -324,6 +348,14 @@ rangeAxisMaxValue.reset(); } + // rangeAxisMinValue + if (Ext.isNumber(layout.rangeAxisMinValue)) { + rangeAxisMinValue.setValue(layout.rangeAxisMinValue); + } + else { + rangeAxisMinValue.reset(); + } + // rangeAxisSteps if (Ext.isNumber(layout.rangeAxisSteps)) { rangeAxisSteps.setValue(layout.rangeAxisSteps); @@ -437,6 +469,7 @@ w.baseLineTitle = baseLineTitle; w.rangeAxisMaxValue = rangeAxisMaxValue; + w.rangeAxisMinValue = rangeAxisMinValue; w.rangeAxisSteps = rangeAxisSteps; w.rangeAxisDecimals = rangeAxisDecimals; w.rangeAxisTitle = rangeAxisTitle; === modified file 'dhis-2/dhis-web/dhis-web-visualizer/src/main/webapp/dhis-web-visualizer/app/scripts/core.js' --- dhis-2/dhis-web/dhis-web-visualizer/src/main/webapp/dhis-web-visualizer/app/scripts/core.js 2014-04-15 12:43:39 +0000 +++ dhis-2/dhis-web/dhis-web-visualizer/src/main/webapp/dhis-web-visualizer/app/scripts/core.js 2014-04-21 16:49:18 +0000 @@ -315,6 +315,8 @@ // rangeAxisMaxValue: number + // rangeAxisMinValue: number + // rangeAxisSteps: number // rangeAxisDecimals: number @@ -558,6 +560,7 @@ (Ext.isString(config.baseLineTitle) && !Ext.isEmpty(config.baseLineTitle) ? config.baseLineTitle : null); layout.rangeAxisMaxValue = Ext.isNumber(config.rangeAxisMaxValue) ? config.rangeAxisMaxValue : null; + layout.rangeAxisMinValue = Ext.isNumber(config.rangeAxisMinValue) ? config.rangeAxisMinValue : null; layout.rangeAxisSteps = Ext.isNumber(config.rangeAxisSteps) ? config.rangeAxisSteps : null; layout.rangeAxisDecimals = Ext.isNumber(config.rangeAxisDecimals) ? config.rangeAxisDecimals : null; layout.rangeAxisTitle = Ext.isString(config.rangeAxisLabel) && !Ext.isEmpty(config.rangeAxisLabel) ? config.rangeAxisLabel : @@ -1931,6 +1934,10 @@ axis.maximum = xLayout.rangeAxisMaxValue; } + if (xLayout.rangeAxisMinValue) { + axis.minimum = xLayout.rangeAxisMinValue; + } + if (xLayout.rangeAxisSteps) { axis.majorTickSteps = xLayout.rangeAxisSteps - 1; }