dhis2-devs team mailing list archive
-
dhis2-devs team
-
Mailing list archive
-
Message #05115
[Branch ~dhis2-devs-core/dhis2/trunk] Rev 1694: GIS - export map to excel function
------------------------------------------------------------
revno: 1694
committer: Tran Thanh Tri <Tran Thanh Tri@compaq>
branch nick: trunk
timestamp: Thu 2010-03-25 12:32:49 +0100
message:
GIS - export map to excel function
added:
dhis-2/dhis-web/dhis-web-mapping/src/main/java/org/hisp/dhis/mapping/action/ExportExcelAction.java
dhis-2/dhis-web/dhis-web-mapping/src/main/java/org/hisp/dhis/mapping/action/ExportImageAction.java
modified:
dhis-2/dhis-web/dhis-web-mapping/pom.xml
dhis-2/dhis-web/dhis-web-mapping/src/main/java/org/hisp/dhis/mapping/export/SVGDocument.java
dhis-2/dhis-web/dhis-web-mapping/src/main/resources/META-INF/dhis/beans.xml
dhis-2/dhis-web/dhis-web-mapping/src/main/resources/struts.xml
dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/mapping/script/index.js
--
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-web/dhis-web-mapping/pom.xml'
--- dhis-2/dhis-web/dhis-web-mapping/pom.xml 2010-03-25 08:25:46 +0000
+++ dhis-2/dhis-web/dhis-web-mapping/pom.xml 2010-03-25 11:32:49 +0000
@@ -77,6 +77,15 @@
</exclusions>
</dependency>
+ <!-- JSON -->
+
+ <dependency>
+ <groupId>net.sf.json-lib</groupId>
+ <artifactId>json-lib</artifactId>
+ <version>2.2.3</version>
+ <classifier>jdk15</classifier>
+ </dependency>
+
<!-- Batik -->
=== added file 'dhis-2/dhis-web/dhis-web-mapping/src/main/java/org/hisp/dhis/mapping/action/ExportExcelAction.java'
--- dhis-2/dhis-web/dhis-web-mapping/src/main/java/org/hisp/dhis/mapping/action/ExportExcelAction.java 1970-01-01 00:00:00 +0000
+++ dhis-2/dhis-web/dhis-web-mapping/src/main/java/org/hisp/dhis/mapping/action/ExportExcelAction.java 2010-03-25 11:32:49 +0000
@@ -0,0 +1,359 @@
+package org.hisp.dhis.mapping.action;
+
+/*
+ * Copyright (c) 2004-2007, University of Oslo
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * * Neither the name of the HISP project nor the names of its contributors may
+ * be used to endorse or promote products derived from this software without
+ * specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import java.io.File;
+
+import jxl.Workbook;
+import jxl.format.Alignment;
+import jxl.format.Border;
+import jxl.format.BorderLineStyle;
+import jxl.format.Colour;
+import jxl.write.Label;
+import jxl.write.Number;
+import jxl.write.WritableCellFormat;
+import jxl.write.WritableImage;
+import jxl.write.WritableSheet;
+import jxl.write.WritableWorkbook;
+
+import net.sf.json.JSONArray;
+import net.sf.json.JSONObject;
+import net.sf.json.JSONSerializer;
+
+import org.hisp.dhis.external.location.LocationManager;
+import org.hisp.dhis.i18n.I18n;
+import org.hisp.dhis.i18n.I18nFormat;
+import org.hisp.dhis.indicator.Indicator;
+import org.hisp.dhis.indicator.IndicatorService;
+import org.hisp.dhis.mapping.MappingService;
+import org.hisp.dhis.mapping.export.SVGDocument;
+import org.hisp.dhis.mapping.export.SVGUtils;
+import org.hisp.dhis.organisationunit.OrganisationUnit;
+import org.hisp.dhis.organisationunit.OrganisationUnitService;
+import org.hisp.dhis.period.Period;
+import org.hisp.dhis.period.PeriodService;
+import org.hisp.dhis.system.util.StreamUtils;
+
+import com.opensymphony.xwork2.Action;
+
+/**
+ * @author Tran Thanh Tri
+ * @version $Id$
+ */
+
+public class ExportExcelAction
+ implements Action
+{
+ // -------------------------------------------------------------------------
+ // Map position in excel
+ // -------------------------------------------------------------------------
+
+ int titlePositionCol = 1;
+
+ int titlePositionRow = 1;
+
+ int mapPositionCol = 1;
+
+ int mapPositionCRow = 5;
+
+ int legendPositionCol = 9;
+
+ int legendPositionRow = 5;
+
+ int orgunitPositionCol = 13;
+
+ int orgunitPositionRow = 5;
+
+ // -------------------------------------------------------------------------
+ // Dependencies
+ // -------------------------------------------------------------------------
+
+ private LocationManager locationManager;
+
+ public void setLocationManager( LocationManager locationManager )
+ {
+ this.locationManager = locationManager;
+ }
+
+ private OrganisationUnitService organisationUnitService;
+
+ public void setOrganisationUnitService( OrganisationUnitService organisationUnitService )
+ {
+ this.organisationUnitService = organisationUnitService;
+ }
+
+ private PeriodService periodService;
+
+ public void setPeriodService( PeriodService periodService )
+ {
+ this.periodService = periodService;
+ }
+
+ private IndicatorService indicatorService;
+
+ public void setIndicatorService( IndicatorService indicatorService )
+ {
+ this.indicatorService = indicatorService;
+ }
+
+ protected I18nFormat format;
+
+ public void setFormat( I18nFormat format )
+ {
+ this.format = format;
+ }
+
+ private I18n i18n;
+
+ public void setI18n( I18n i18n )
+ {
+ this.i18n = i18n;
+ }
+
+ // -------------------------------------------
+ // Output & Input
+ // -------------------------------------------
+
+ private String svg;
+
+ public void setSvg( String svg )
+ {
+ this.svg = svg;
+ }
+
+ private String title;
+
+ public void setTitle( String title )
+ {
+ this.title = title;
+ }
+
+ private Integer indicator;
+
+ public void setIndicator( Integer indicator )
+ {
+ this.indicator = indicator;
+ }
+
+ private Integer period;
+
+ public void setPeriod( Integer period )
+ {
+ this.period = period;
+ }
+
+ private String outputFile;
+
+ public String getOutputFile()
+ {
+ return outputFile;
+ }
+
+ private Integer width;
+
+ public void setWidth( Integer width )
+ {
+ this.width = width;
+ }
+
+ private Integer height;
+
+ public void setHeight( Integer height )
+ {
+ this.height = height;
+ }
+
+ private String datavalues;
+
+ public void setDatavalues( String datavalues )
+ {
+ this.datavalues = datavalues;
+ }
+
+ private boolean includeValues;
+
+ public void setIncludeValues( boolean includeValues )
+ {
+ this.includeValues = includeValues;
+ }
+
+ private boolean includeLegend;
+
+ public void setIncludeLegend( boolean includeLegend )
+ {
+ this.includeLegend = includeLegend;
+ }
+
+ @Override
+ public String execute()
+ throws Exception
+ {
+
+ Period p = periodService.getPeriod( period );
+
+ p.setName( format.formatPeriod( p ) );
+
+ Indicator i = indicatorService.getIndicator( indicator );
+
+ /* TODO write map to file */
+
+ SVGDocument svgDocument = new SVGDocument();
+
+ svgDocument.setTitle( this.title );
+
+ svgDocument.setSvg( this.svg );
+
+ svgDocument.setPeriod( p );
+
+ svgDocument.setIndicator( i );
+
+ int random = (int) (Math.random() * 1000);
+
+ File temporaryDir = locationManager.getFileForWriting( MappingService.MAP_TEMPL_DIR );
+
+ File svgTemporary = new File( temporaryDir, "svg_" + random + ".svg" );
+
+ StreamUtils.writeContent( svgTemporary, svgDocument.getSVGForExcel() );
+
+ File image = new File( temporaryDir, "svg_" + random + ".png" );
+
+ SVGUtils.convertSVG2PNG( svgTemporary, image, width, height );
+
+ /* TODO write excel to file */
+
+ File output = new File( temporaryDir, "excel_" + random + ".xls" );
+
+ WritableWorkbook outputReportWorkbook = Workbook.createWorkbook( output );
+
+ WritableSheet sheet = outputReportWorkbook.createSheet( i.getName(), 1 );
+
+ /* TODO add map to excel */
+
+ sheet.mergeCells( mapPositionCol, mapPositionCRow, mapPositionCol + 6, mapPositionCRow + 25 );
+
+ WritableImage map = new WritableImage( mapPositionCol, mapPositionCRow, 7, 26, image );
+
+ sheet.addImage( map );
+
+ WritableCellFormat map_format = new WritableCellFormat();
+ map_format.setBorder( Border.ALL, BorderLineStyle.THIN );
+ map_format.setAlignment( Alignment.CENTRE );
+
+ sheet.addCell( new Label( mapPositionCol, mapPositionCRow, "", map_format ) );
+
+ /* TODO add title */
+
+ WritableCellFormat header = new WritableCellFormat();
+ header.setBackground( Colour.ICE_BLUE );
+ header.setBorder( Border.ALL, BorderLineStyle.THIN );
+
+ sheet.mergeCells( titlePositionCol, titlePositionRow, titlePositionCol + 1, titlePositionRow );
+ sheet.mergeCells( titlePositionCol + 2, titlePositionRow, titlePositionCol + 6, titlePositionRow );
+ sheet.mergeCells( titlePositionCol, titlePositionRow + 1, titlePositionCol + 1, titlePositionRow + 1 );
+ sheet.mergeCells( titlePositionCol + 2, titlePositionRow + 1, titlePositionCol + 6, titlePositionRow + 1 );
+ sheet.mergeCells( titlePositionCol, titlePositionRow + 2, titlePositionCol + 1, titlePositionRow + 2 );
+ sheet.mergeCells( titlePositionCol + 2, titlePositionRow + 2, titlePositionCol + 6, titlePositionRow + 2 );
+
+ sheet.addCell( new Label( titlePositionCol, titlePositionRow, i18n.getString( "title" ), header ) );
+ sheet.addCell( new Label( titlePositionCol + 2, titlePositionRow, this.title, header ) );
+ sheet.addCell( new Label( titlePositionCol, titlePositionRow + 1, i18n.getString( "indicator" ), header ) );
+ sheet.addCell( new Label( titlePositionCol + 2, titlePositionRow + 1, i.getName(), header ) );
+ sheet.addCell( new Label( titlePositionCol, titlePositionRow + 2, i18n.getString( "period" ), header ) );
+ sheet.addCell( new Label( titlePositionCol + 2, titlePositionRow + 2, p.getName(), header ) );
+
+ if ( includeLegend )
+ {
+
+ WritableCellFormat legendHeader = new WritableCellFormat();
+ legendHeader.setBorder( Border.ALL, BorderLineStyle.THIN );
+ legendHeader.setAlignment( Alignment.CENTRE );
+ legendHeader.setBackground( Colour.ICE_BLUE );
+
+ sheet.mergeCells( legendPositionCol, legendPositionRow, legendPositionCol + 2, legendPositionRow );
+ sheet.addCell( new Label( legendPositionCol, legendPositionRow, i18n.getString( "legend" ), legendHeader ) );
+ sheet.addCell( new Label( legendPositionCol, legendPositionRow + 1, i18n.getString( "color" ), legendHeader ) );
+ sheet.addCell( new Label( legendPositionCol + 1, legendPositionRow + 1, i18n.getString( "min" ), legendHeader ) );
+ sheet.addCell( new Label( legendPositionCol + 2, legendPositionRow + 1, i18n.getString( "max" ), legendHeader ) );
+
+ }
+
+ if ( includeValues )
+ {
+ WritableCellFormat datavalueHeader = new WritableCellFormat();
+ datavalueHeader.setBorder( Border.ALL, BorderLineStyle.THIN );
+ datavalueHeader.setAlignment( Alignment.CENTRE );
+ datavalueHeader.setBackground( Colour.ICE_BLUE );
+
+ sheet.addCell( new Label( orgunitPositionCol, orgunitPositionRow, i18n.getString( "name" ), datavalueHeader ) );
+
+ sheet.addCell( new Label( orgunitPositionCol + 1, orgunitPositionRow, i18n.getString( "value" ), datavalueHeader ) );
+
+
+ WritableCellFormat valCellFormat = new WritableCellFormat();
+ valCellFormat.setAlignment( Alignment.LEFT );
+ valCellFormat.setBorder( Border.ALL, BorderLineStyle.THIN );
+
+ int rowValue = orgunitPositionRow + 1;
+
+ JSONObject datavalue;
+
+ OrganisationUnit organisationUnit;
+
+
+ JSONObject json = (JSONObject) JSONSerializer.toJSON( datavalues );
+
+ JSONArray jsonDataValues = json.getJSONArray( "datavalues" );
+
+ for ( int index = 0; index < jsonDataValues.size(); index++ )
+ {
+
+ datavalue = jsonDataValues.getJSONObject( index );
+
+ organisationUnit = organisationUnitService.getOrganisationUnit( datavalue.getInt( "organisation" ) );
+
+ double value = datavalue.getDouble( "value" );
+
+ sheet.addCell( new Label( orgunitPositionCol, rowValue, organisationUnit.getName(), valCellFormat ) );
+
+ sheet.addCell( new Number( orgunitPositionCol + 1, rowValue, value , valCellFormat ) );
+
+ rowValue++;
+
+ }
+
+ }
+
+ outputReportWorkbook.write();
+
+ outputReportWorkbook.close();
+
+ outputFile = output.getAbsolutePath();
+
+ return SUCCESS;
+ }
+}
=== added file 'dhis-2/dhis-web/dhis-web-mapping/src/main/java/org/hisp/dhis/mapping/action/ExportImageAction.java'
--- dhis-2/dhis-web/dhis-web-mapping/src/main/java/org/hisp/dhis/mapping/action/ExportImageAction.java 1970-01-01 00:00:00 +0000
+++ dhis-2/dhis-web/dhis-web-mapping/src/main/java/org/hisp/dhis/mapping/action/ExportImageAction.java 2010-03-25 11:32:49 +0000
@@ -0,0 +1,174 @@
+package org.hisp.dhis.mapping.action;
+/*
+ * Copyright (c) 2004-2007, University of Oslo
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * * Neither the name of the HISP project nor the names of its contributors may
+ * be used to endorse or promote products derived from this software without
+ * specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+import java.io.File;
+
+import org.hisp.dhis.external.location.LocationManager;
+import org.hisp.dhis.i18n.I18nFormat;
+import org.hisp.dhis.indicator.Indicator;
+import org.hisp.dhis.indicator.IndicatorService;
+import org.hisp.dhis.mapping.MappingService;
+import org.hisp.dhis.mapping.export.SVGDocument;
+import org.hisp.dhis.mapping.export.SVGUtils;
+import org.hisp.dhis.period.Period;
+import org.hisp.dhis.period.PeriodService;
+import org.hisp.dhis.system.util.StreamUtils;
+
+import com.opensymphony.xwork2.Action;
+
+/**
+ * @author Tran Thanh Tri
+ * @version $Id$
+ */
+public class ExportImageAction
+ implements Action
+{
+
+ // -------------------------------------------------------------------------
+ // Dependencies
+ // -------------------------------------------------------------------------
+
+ private LocationManager locationManager;
+
+ public void setLocationManager( LocationManager locationManager )
+ {
+ this.locationManager = locationManager;
+ }
+
+ private PeriodService periodService;
+
+ public void setPeriodService( PeriodService periodService )
+ {
+ this.periodService = periodService;
+ }
+
+ private IndicatorService indicatorService;
+
+ public void setIndicatorService( IndicatorService indicatorService )
+ {
+ this.indicatorService = indicatorService;
+ }
+
+ protected I18nFormat format;
+
+ public void setFormat( I18nFormat format )
+ {
+ this.format = format;
+ }
+
+ // -------------------------------------------
+ // Output & Input
+ // -------------------------------------------
+
+ private String svg;
+
+ public void setSvg( String svg )
+ {
+ this.svg = svg;
+ }
+
+ private String title;
+
+ public void setTitle( String title )
+ {
+ this.title = title;
+ }
+
+ private Integer indicator;
+
+ public void setIndicator( Integer indicator )
+ {
+ this.indicator = indicator;
+ }
+
+ private Integer period;
+
+ public void setPeriod( Integer period )
+ {
+ this.period = period;
+ }
+
+ private String outputFile;
+
+ public String getOutputFile()
+ {
+ return outputFile;
+ }
+
+ private Integer width;
+
+ public void setWidth( Integer width )
+ {
+ this.width = width;
+ }
+
+ private Integer height;
+
+ public void setHeight( Integer height )
+ {
+ this.height = height;
+ }
+
+ @Override
+ public String execute()
+ throws Exception
+ {
+
+ Period p = periodService.getPeriod( period );
+
+ p.setName( format.formatPeriod( p ) );
+
+ Indicator i = indicatorService.getIndicator( indicator );
+
+ int random = (int) (Math.random() * 100);
+
+ File temporaryDir = locationManager.getFileForWriting( MappingService.MAP_TEMPL_DIR );
+
+ File svgTemporary = new File( temporaryDir, "svg_" + random + ".svg" );
+
+ SVGDocument svgDocument = new SVGDocument();
+
+ svgDocument.setTitle( this.title );
+
+ svgDocument.setSvg( this.svg );
+
+ svgDocument.setPeriod( p );
+
+ svgDocument.setIndicator( i );
+
+ StreamUtils.writeContent( svgTemporary, svgDocument.getSVGForImage() );
+
+ File output = new File( temporaryDir, "svg_" + random + ".png" );
+
+ SVGUtils.convertSVG2PNG( svgTemporary, output, width, height );
+
+ outputFile = output.getAbsolutePath();
+
+ return SUCCESS;
+ }
+
+}
=== modified file 'dhis-2/dhis-web/dhis-web-mapping/src/main/java/org/hisp/dhis/mapping/export/SVGDocument.java'
--- dhis-2/dhis-web/dhis-web-mapping/src/main/java/org/hisp/dhis/mapping/export/SVGDocument.java 2010-03-24 10:56:30 +0000
+++ dhis-2/dhis-web/dhis-web-mapping/src/main/java/org/hisp/dhis/mapping/export/SVGDocument.java 2010-03-25 11:32:49 +0000
@@ -1,5 +1,8 @@
package org.hisp.dhis.mapping.export;
+import org.hisp.dhis.indicator.Indicator;
+import org.hisp.dhis.period.Period;
+
public class SVGDocument
{
@@ -8,8 +11,6 @@
+ "<!ATTLIST svg xmlns:attrib CDATA #IMPLIED> <!ATTLIST path attrib:divname CDATA #IMPLIED>]>";
static final String namespace = "xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xmlns:attrib=\"http://www.carto.net/attrib/\" ";
-
-
private String title;
@@ -17,27 +18,42 @@
private String legend;
+ private Period period;
+
+ private Indicator indicator;
+
public SVGDocument()
{
-
-
- }
-
-
- public void repairForImage(){
-
- this.title = "<g id=\"title\" style=\"display: block; visibility: visible;\"><text id=\"title\" x=\"30\" y=\"15\" font-size=\"14\" font-weight=\"bold\"><tspan>" + title + "</tspan></text></g>";
-
- this.svg = doctype + this.svg;
-
- this.svg = this.svg.replaceFirst( "<svg", "<svg " + namespace );
-
- this.svg = this.svg.replaceFirst( "</svg>", this.title + "</svg>" );
- }
-
- public StringBuffer getSVGscript()
- {
- return new StringBuffer( this.svg );
+
+ }
+
+ public StringBuffer getSVGForImage()
+ {
+ String title_ = "<g id=\"title\" style=\"display: block; visibility: visible;\"><text id=\"title\" x=\"30\" y=\"15\" font-size=\"14\" font-weight=\"bold\"><tspan>"
+ + this.title + "</tspan></text></g>";
+
+ String period_ = "<g id=\"period\" style=\"display: block; visibility: visible;\"><text id=\"period\" x=\"30\" y=\"30\" font-size=\"12\"><tspan>"
+ + this.period.getName() + "</tspan></text></g>";
+
+ String indicator_ = "<g id=\"indicator\" style=\"display: block; visibility: visible;\"><text id=\"indicator\" x=\"30\" y=\"45\" font-size=\"12\"><tspan>"
+ + this.indicator.getName() + "</tspan></text></g>";
+
+ String svg_ = doctype + this.svg;
+
+ svg_ = svg_.replaceFirst( "<svg", "<svg " + namespace );
+
+ svg_ = svg_.replaceFirst( "</svg>", title_ + period_ + indicator_ + "</svg>" );
+
+ return new StringBuffer( svg_ );
+ }
+
+ public StringBuffer getSVGForExcel()
+ {
+ String svg_ = doctype + this.svg;
+
+ svg_ = svg_.replaceFirst( "<svg", "<svg " + namespace );
+
+ return new StringBuffer( svg_ );
}
public String getTitle()
@@ -46,11 +62,9 @@
}
public void setTitle( String title )
- {
+ {
this.title = title;
}
-
-
public String getSvg()
{
@@ -59,8 +73,8 @@
public void setSvg( String svg )
{
- this.svg = svg;
-
+ this.svg = svg;
+
}
public String getLegend()
@@ -73,6 +87,26 @@
this.legend = legend;
}
+ public Period getPeriod()
+ {
+ return period;
+ }
+
+ public void setPeriod( Period period )
+ {
+ this.period = period;
+ }
+
+ public Indicator getIndicator()
+ {
+ return indicator;
+ }
+
+ public void setIndicator( Indicator indicator )
+ {
+ this.indicator = indicator;
+ }
+
@Override
public String toString()
{
=== modified file 'dhis-2/dhis-web/dhis-web-mapping/src/main/resources/META-INF/dhis/beans.xml'
--- dhis-2/dhis-web/dhis-web-mapping/src/main/resources/META-INF/dhis/beans.xml 2010-03-24 10:56:30 +0000
+++ dhis-2/dhis-web/dhis-web-mapping/src/main/resources/META-INF/dhis/beans.xml 2010-03-25 11:32:49 +0000
@@ -287,11 +287,23 @@
</bean>
<!-- Export Map -->
-
- <bean id="org.hisp.dhis.mapping.action.ConvertSVGToImageAction"
- class="org.hisp.dhis.mapping.action.ConvertSVGToImageAction" scope="prototype">
- <property name="locationManager"
- ref="org.hisp.dhis.external.location.LocationManager" />
+
+ <bean id="org.hisp.dhis.mapping.action.ExportImageAction" class="org.hisp.dhis.mapping.action.ExportImageAction"
+ scope="prototype">
+ <property name="locationManager"
+ ref="org.hisp.dhis.external.location.LocationManager" />
+ <property name="periodService" ref="org.hisp.dhis.period.PeriodService" />
+ <property name="indicatorService" ref="org.hisp.dhis.indicator.IndicatorService" />
+ </bean>
+
+ <bean id="org.hisp.dhis.mapping.action.ExportExcelAction" class="org.hisp.dhis.mapping.action.ExportExcelAction"
+ scope="prototype">
+ <property name="locationManager"
+ ref="org.hisp.dhis.external.location.LocationManager" />
+ <property name="periodService" ref="org.hisp.dhis.period.PeriodService" />
+ <property name="indicatorService" ref="org.hisp.dhis.indicator.IndicatorService" />
+ <property name="organisationUnitService"
+ ref="org.hisp.dhis.organisationunit.OrganisationUnitService" />
</bean>
=== modified file 'dhis-2/dhis-web/dhis-web-mapping/src/main/resources/struts.xml'
--- dhis-2/dhis-web/dhis-web-mapping/src/main/resources/struts.xml 2010-03-24 10:56:30 +0000
+++ dhis-2/dhis-web/dhis-web-mapping/src/main/resources/struts.xml 2010-03-25 11:32:49 +0000
@@ -313,9 +313,14 @@
<!-- Export Map -->
- <action name="convertSVGToImage"
- class="org.hisp.dhis.mapping.action.ConvertSVGToImageAction">
- <result name="success" type="velocity-json">/dhis-web-mapping/jsonOutputFile.vm</result>
+ <action name="exportImage" class="org.hisp.dhis.mapping.action.ExportImageAction">
+ <result name="success" type="velocity-json">
+ /dhis-web-mapping/jsonOutputFile.vm</result>
+ </action>
+
+ <action name="exportExcel" class="org.hisp.dhis.mapping.action.ExportExcelAction">
+ <result name="success" type="velocity-json">
+ /dhis-web-mapping/jsonOutputFile.vm</result>
</action>
<action name="download" class="org.hisp.dhis.mapping.action.DownloadFileAction">
=== modified file 'dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/mapping/script/index.js'
--- dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/mapping/script/index.js 2010-03-24 10:56:30 +0000
+++ dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/mapping/script/index.js 2010-03-25 11:32:49 +0000
@@ -11,6 +11,7 @@
var ACTIVEPANEL;
var MASK;
var LABELS;
+var EXPORTVALUES;
function getUrlParam(strParamName) {
var output = '';
@@ -647,13 +648,14 @@
xtype: 'checkbox',
id: 'export_image_include_legend',
fieldLabel: 'Include legend',
- labelSeparator: labelseparator,
+ labelSeparator: '',
isFormField: true
},
{
xtype: 'button',
id: 'export_image_button',
isFormField: true,
+ labelSeparator: labelseparator,
hideLabel: false,
cls: 'window-button',
text: 'Export Image',
@@ -665,15 +667,19 @@
var w = Ext.getCmp('export_image_width').getValue();
var h = Ext.getCmp('export_image_height').getValue();
var includeLegend = Ext.getCmp('export_image_include_legend').getValue();
+ var period = Ext.getCmp('period_cb').getValue();
+ var indicator = Ext.getCmp('indicator_cb').getValue();
Ext.Ajax.request({
- url: path + 'convertSVGToImage' + type,
+ url: path + 'exportImage' + type,
method: 'POST',
params: {
title: title,
svg: svg,
- width:w,
- height:h,
- includeLegend: includeLegend
+ width: w,
+ height: h,
+ includeLegend: includeLegend,
+ period: period,
+ indicator: indicator
},
success: function( responseObject ) {
MASK.hide();
@@ -716,46 +722,44 @@
xtype: 'checkbox',
id: 'export_excel_include_value',
fieldLabel: 'Include values',
- labelSeparator: labelseparator,
- editable: true,
- valueField: 'id',
- displayField: 'text',
- isFormField: true,
- width: combo_width_fieldset,
- minListWidth: combo_list_width_fieldset,
- mode: 'local',
- triggerAction: 'all',
- value: true
+ labelSeparator: '',
+ isFormField: true
},
{
xtype: 'button',
id: 'export_excel_button',
isFormField: true,
+ labelSeparator: labelseparator,
hideLabel: false,
cls: 'window-button',
text: 'Export Excel',
handler: function() {
MASK.msg = 'Exporting excel...';
MASK.show();
- var svg = document.getElementById('OpenLayers.Layer.Vector_17').innerHTML;
- var title = Ext.getCmp('export_image_title').getValue();
- var w = Ext.getCmp('export_image_width').getValue();
- var h = Ext.getCmp('export_image_height').getValue();
+ var title = Ext.getCmp('export_excel_title').getValue();
+ var svg = document.getElementById('OpenLayers.Layer.Vector_17').innerHTML;
var includeLegend = Ext.getCmp('export_image_include_legend').getValue();
+ var includeValues = Ext.getCmp('export_excel_include_value').getValue();
+ var period = Ext.getCmp('period_cb').getValue();
+ var indicator = Ext.getCmp('indicator_cb').getValue();
Ext.Ajax.request({
- url: path + 'convertSVGToImage' + type,
+ url: path + 'exportExcel' + type,
method: 'POST',
- params: {
+ params: {
title: title,
- svg: svg,
- width:w,
- height:h,
- includeLegend: includeLegend
+ width:500,
+ height:500,
+ svg: svg,
+ includeLegend: includeLegend,
+ includeValues: includeValues,
+ period: period,
+ indicator: indicator,
+ datavalues: EXPORTVALUES
},
success: function( responseObject ) {
MASK.hide();
var file = Ext.util.JSON.decode(responseObject.responseText).file;
- window.open(path + "download" + type + "?path=" + file + "&outputFormat=application/image" );
+ window.open(path + "download" + type + "?path=" + file + "&outputFormat=application/ms-excel" );
}
});
@@ -3094,18 +3098,26 @@
}
});
- function showExportMap(){
-
- var x = Ext.getCmp('center').x + 15;
- var y = Ext.getCmp('center').y + 41;
-
- exportMapWindow.setPosition(x,y);
+ function showExportMap(){
+
+ if(ACTIVEPANEL == thematicMap
+ && Ext.getCmp('period_cb').getValue()!=''
+ && Ext.getCmp('indicator_cb').getValue()!=''
+ && Ext.getCmp('map_cb').getValue()!=''){
+
+ var x = Ext.getCmp('center').x + 15;
+ var y = Ext.getCmp('center').y + 41;
+
+ exportMapWindow.setPosition(x,y);
- if (exportMapWindow.visible) {
- exportMapWindow.hide();
- }
- else {
- exportMapWindow.show();
+ if (exportMapWindow.visible) {
+ exportMapWindow.hide();
+ }
+ else {
+ exportMapWindow.show();
+ }
+ }else{
+ Ext.messageRed.msg('Please render the map fist!','Form does not completed');
}
}
@@ -3522,6 +3534,27 @@
});
}
+function getExportDataValueJSON( mapvalues ){
+ var json = '{';
+ json += '"datavalues":';
+ json += '[';
+ for (var i = 0; i < mapvalues.length; i++) {
+ json += '{';
+ json += '"organisation": "' + mapvalues[i].orgUnitId + '",';
+ json += '"value": "' + mapvalues[i].value + '" ';
+ if(i < mapvalues.length-1){
+ json += '},';
+ }else{
+ json += '}';
+ }
+ }
+ json += ']';
+ json += '}';
+
+ return json;
+
+}
+
/*CHOROPLETH*/
function getChoroplethData() {
MASK.msg = 'Creating choropleth...';
@@ -3542,6 +3575,9 @@
var layers = MAP.getLayersByName('Thematic map');
var features = layers[0].features;
var mapvalues = Ext.util.JSON.decode(r.responseText).mapvalues;
+
+ EXPORTVALUES = getExportDataValueJSON( mapvalues );
+
var mv = new Array();
var nameColumn = MAPDATA.nameColumn;
var options = {};