=== modified file 'local/vn/dhis-web-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/importing/action/ViewDataCategoryAction.java' --- local/vn/dhis-web-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/importing/action/ViewDataCategoryAction.java 2011-10-25 08:52:49 +0000 +++ local/vn/dhis-web-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/importing/action/ViewDataCategoryAction.java 2012-12-15 09:52:30 +0000 @@ -28,6 +28,7 @@ */ import java.util.ArrayList; +import java.util.HashSet; import java.util.List; import org.hisp.dhis.dataelement.DataElement; @@ -59,7 +60,7 @@ setUpImportItems( importReport, importItems, categoryImportItems ); xmlStructureResponse = new XMLStructureResponseImport( selectionManager.getUploadFilePath(), - importReportService.getAllSheet(), categoryImportItems, true ).getXml(); + new HashSet( importReportService.getAllSheet() ), categoryImportItems ).getXml(); } catch ( Exception ex ) { @@ -80,17 +81,17 @@ for ( DataElementGroupOrder dataElementGroup : importReport.getDataElementOrders() ) { - rowBegin ++; - + rowBegin++; + for ( DataElement dataElement : dataElementGroup.getDataElements() ) { ImportItem item = new ImportItem(); - + item.setSheetNo( importItem.getSheetNo() ); - item.setRow( rowBegin ++ ); + item.setRow( rowBegin++ ); item.setColumn( importItem.getColumn() ); item.setExpression( importItem.getExpression().replace( "*", dataElement.getId() + "" ) ); - + importItemsDest.add( item ); } } === modified file 'local/vn/dhis-web-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/importing/action/ViewDataNormalAction.java' --- local/vn/dhis-web-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/importing/action/ViewDataNormalAction.java 2011-10-24 05:42:25 +0000 +++ local/vn/dhis-web-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/importing/action/ViewDataNormalAction.java 2012-12-15 09:52:30 +0000 @@ -27,6 +27,7 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +import java.util.HashSet; import java.util.List; import org.hisp.dhis.reportsheet.importitem.ImportItem; @@ -52,7 +53,7 @@ try { xmlStructureResponse = new XMLStructureResponseImport( selectionManager.getUploadFilePath(), - importReportService.getAllSheet(), importItems, true ).getXml(); + new HashSet( importReportService.getAllSheet() ), importItems ).getXml(); } catch ( Exception ex ) { === modified file 'local/vn/dhis-web-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/importing/action/ViewDataOrganizationGroupAction.java' --- local/vn/dhis-web-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/importing/action/ViewDataOrganizationGroupAction.java 2012-11-27 04:26:35 +0000 +++ local/vn/dhis-web-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/importing/action/ViewDataOrganizationGroupAction.java 2012-12-15 09:52:30 +0000 @@ -30,6 +30,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.Collections; +import java.util.HashSet; import java.util.List; import org.hisp.dhis.common.comparator.IdentifiableObjectNameComparator; @@ -75,7 +76,7 @@ try { xmlStructureResponse = new XMLStructureResponseImport( selectionManager.getUploadFilePath(), - importReportService.getAllSheet(), orgUnitListingImportItems, true ).getXml(); + new HashSet( importReportService.getAllSheet() ), orgUnitListingImportItems ).getXml(); } catch ( Exception e ) { === added file 'local/vn/dhis-web-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/preview/action/AbstractXMLStructure.java' --- local/vn/dhis-web-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/preview/action/AbstractXMLStructure.java 1970-01-01 00:00:00 +0000 +++ local/vn/dhis-web-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/preview/action/AbstractXMLStructure.java 2012-12-15 09:52:30 +0000 @@ -0,0 +1,229 @@ +package org.hisp.dhis.reportsheet.preview.action; + +/* + * Copyright (c) 2004-2012, 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 static org.apache.commons.io.FilenameUtils.getExtension; +import static org.hisp.dhis.reportsheet.preview.action.HtmlHelper.FOREGROUND_COLOR; +import static org.hisp.dhis.reportsheet.preview.action.HtmlHelper.TEXT_COLOR; +import static org.hisp.dhis.reportsheet.utils.ExcelUtils.convertAlignmentString; + +import java.io.FileInputStream; +import java.io.IOException; +import java.util.Collection; +import java.util.List; +import java.util.Set; + +import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import org.apache.poi.ss.usermodel.Cell; +import org.apache.poi.ss.usermodel.CellStyle; +import org.apache.poi.ss.usermodel.Font; +import org.apache.poi.ss.usermodel.FormulaEvaluator; +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.ss.usermodel.Workbook; +import org.apache.poi.ss.util.CellRangeAddress; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.hisp.dhis.reportsheet.importitem.ImportItem; + +/** + * Simple demo class which uses the api to present the contents of an excel 97 + * spreadsheet as an XML document, using a workbook and output stream of your + * choice + * + * @author Dang Duy Hieu + * @version $Id$ + */ + +public abstract class AbstractXMLStructure +{ + private static final String WORKBOOK_OPENTAG = ""; + + private static final String WORKBOOK_CLOSETAG = ""; + + private static final String MERGEDCELL_OPENTAG = ""; + + private static final String MERGEDCELL_CLOSETAG = ""; + + /** + * The workbook we are reading from a given file + */ + protected Workbook WORKBOOK; + + protected FormulaEvaluator evaluatorFormula; + + protected HtmlHelper htmlHelper; + + /** + * The encoding to write + */ + protected StringBuffer xml = new StringBuffer(); + + /** + * Constructor + * + * @param w The workbook to interrogate + * @param enc The encoding used by the output stream. Null or unrecognized + * values cause the encoding to default to UTF8 + * @param f Indicates whether the generated XML document should contain the + * cell format information + * @exception java.io.IOException + */ + + protected AbstractXMLStructure( String pathFileName, Set collectSheets, List importItems ) + throws Exception + { + cleanUp(); + + if ( getExtension( pathFileName ).equals( "xls" ) ) + { + WORKBOOK = new HSSFWorkbook( new FileInputStream( pathFileName ) ); + htmlHelper = new HSSFHtmlHelper( (HSSFWorkbook) WORKBOOK ); + } + else + { + WORKBOOK = new XSSFWorkbook( new FileInputStream( pathFileName ) ); + htmlHelper = new XSSFHtmlHelper(); + } + + evaluatorFormula = WORKBOOK.getCreationHelper().createFormulaEvaluator(); + + setUpDecimalFormat(); + + printXML( collectSheets, importItems ); + } + + /** + * Writes out the WORKBOOK data as XML, with formatting information + * + * @param bDetailed + * + * @throws Exception + */ + + protected void printXML( Collection collectSheets, List importItems ) + throws Exception + { + printMergedInfo( collectSheets ); + + xml.append( WORKBOOK_OPENTAG ); + + for ( Integer sheet : collectSheets ) + { + printData( sheet, importItems ); + } + + xml.append( WORKBOOK_CLOSETAG ); + } + + protected void printFormatInfo( Sheet sheet, Cell objCell ) + { + // The format information + CellStyle format = objCell.getCellStyle(); + + if ( format != null ) + { + xml.append( "" ); + + // The cell background information + xml.append( "" ); + xml.append( "" ); + } + else + { + xml.append( "/>" ); + } + } + } + + public String getXml() + { + return xml.toString(); + } + + // ------------------------------------------------------------------------- + // Abstract methods + // ------------------------------------------------------------------------- + + protected abstract void setUpDecimalFormat(); + + protected abstract void printData( int sheetNo, List importItems ); + + // ------------------------------------------------------------------------- + // Get the merged cell's information + // ------------------------------------------------------------------------- + + protected void cleanUp() + { + System.gc(); + } + + private void printMergedInfo( Collection collectSheets ) + throws IOException + { + // Open the main Tag // + xml.append( MERGEDCELL_OPENTAG ); + + for ( Integer sheet : collectSheets ) + { + printMergedInfoBySheetNo( sheet ); + } + + // Close the main Tag // + xml.append( MERGEDCELL_CLOSETAG ); + } + + private void printMergedInfoBySheetNo( int sheetNo ) + { + Sheet sheet = WORKBOOK.getSheetAt( sheetNo - 1 ); + CellRangeAddress cellRangeAddress = null; + + for ( int i = 0; i < sheet.getNumMergedRegions(); i++ ) + { + cellRangeAddress = sheet.getMergedRegion( i ); + + if ( cellRangeAddress.getFirstColumn() != cellRangeAddress.getLastColumn() ) + { + xml.append( "" + + (cellRangeAddress.getLastColumn() - cellRangeAddress.getFirstColumn() + 1) + "" ); + } + } + } +} \ No newline at end of file === modified file 'local/vn/dhis-web-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/preview/action/AutoGenerateFormByTemplate.java' --- local/vn/dhis-web-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/preview/action/AutoGenerateFormByTemplate.java 2012-12-12 09:34:51 +0000 +++ local/vn/dhis-web-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/preview/action/AutoGenerateFormByTemplate.java 2012-12-15 09:52:30 +0000 @@ -35,15 +35,17 @@ import static org.hisp.dhis.dataelement.DataElement.VALUE_TYPE_INT; import static org.hisp.dhis.reportsheet.ExportItem.PERIODTYPE.SELECTED_MONTH; import static org.hisp.dhis.reportsheet.ExportItem.TYPE.DATAELEMENT; +import static org.hisp.dhis.reportsheet.preview.action.HtmlHelper.FOREGROUND_COLOR; +import static org.hisp.dhis.reportsheet.preview.action.HtmlHelper.TEXT_COLOR; import static org.hisp.dhis.reportsheet.utils.ExcelUtils.convertAlignmentString; import static org.hisp.dhis.reportsheet.utils.ExcelUtils.readValueByPOI; import java.io.FileInputStream; import java.io.IOException; -import java.io.InputStream; import java.util.Collection; import java.util.HashMap; import java.util.HashSet; +import java.util.List; import java.util.Map; import java.util.Set; @@ -53,7 +55,6 @@ import org.apache.poi.ss.usermodel.Comment; import org.apache.poi.ss.usermodel.Font; import org.apache.poi.ss.usermodel.FormulaEvaluator; -import org.apache.poi.ss.usermodel.IndexedColors; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; @@ -73,6 +74,7 @@ import org.hisp.dhis.reportsheet.ExportReport; import org.hisp.dhis.reportsheet.ExportReportNormal; import org.hisp.dhis.reportsheet.ExportReportService; +import org.hisp.dhis.reportsheet.importitem.ImportItem; import org.hisp.dhis.reportsheet.state.SelectionManager; import org.springframework.beans.factory.annotation.Autowired; @@ -93,6 +95,12 @@ { private static final String REPORT_EXCEL_GROUP = "BAO CAO THONG KE"; + private static DataElementCategoryOptionCombo optionCombo = null; + + private String excelFileName = ""; + + private String commonName = ""; + private static final String WORKBOOK_OPENTAG = ""; private static final String WORKBOOK_CLOSETAG = ""; @@ -101,21 +109,19 @@ private static final String MERGEDCELL_CLOSETAG = ""; - private String excelFileName = ""; - - private String commonName = ""; - /** * The workbook we are reading from a given file */ - private Workbook WORKBOOK; - - private FormulaEvaluator evaluatorFormula; + protected Workbook WORKBOOK; + + protected FormulaEvaluator evaluatorFormula; + + protected HtmlHelper htmlHelper; /** * The encoding to write */ - private StringBuffer xml = new StringBuffer( 200000 ); + protected StringBuffer xml = new StringBuffer(); // ------------------------------------------------------------------------- // Dependencies @@ -156,31 +162,33 @@ public String execute() { + cleanUp(); + Set collectSheets = new HashSet(); collectSheets.add( 1 ); try { - this.cleanUp(); - String pathFileName = selectionManager.getUploadFilePath(); - InputStream inputSteam = new FileInputStream( pathFileName ); excelFileName = getName( pathFileName ); commonName = getBaseName( pathFileName ); if ( getExtension( pathFileName ).equals( "xls" ) ) { - this.WORKBOOK = new HSSFWorkbook( inputSteam ); + WORKBOOK = new HSSFWorkbook( new FileInputStream( pathFileName ) ); + htmlHelper = new HSSFHtmlHelper( (HSSFWorkbook) WORKBOOK ); } else { - this.WORKBOOK = new XSSFWorkbook( inputSteam ); + WORKBOOK = new XSSFWorkbook( new FileInputStream( pathFileName ) ); + htmlHelper = new XSSFHtmlHelper(); } - this.evaluatorFormula = WORKBOOK.getCreationHelper().createFormulaEvaluator(); + optionCombo = categoryService.getDefaultDataElementCategoryOptionCombo(); + evaluatorFormula = WORKBOOK.getCreationHelper().createFormulaEvaluator(); - writeFormattedXML( collectSheets ); + printXML( collectSheets, null ); xmlStructureResponse = xml.toString(); @@ -188,42 +196,30 @@ } catch ( Exception e ) { - System.out.println( e.getMessage() ); + e.printStackTrace(); + + cleanUp(); } return SUCCESS; } - // ------------------------------------------------------------------------- - // Sub-methods - // ------------------------------------------------------------------------- - - private void cleanUp() - { - System.gc(); - } - - /** - * Writes out the WORKBOOK data as XML, with formatting information - * - * @param bDetailed - * - * @throws Exception - */ - - private void writeFormattedXML( Collection collectSheets ) + private void printXML( Collection collectSheets, List importItems ) throws Exception { - this.writeXMLMergedDescription( collectSheets ); + printMergedInfo( collectSheets ); xml.append( WORKBOOK_OPENTAG ); - createFormByComment( 1, categoryService.getDefaultDataElementCategoryOptionCombo() ); + for ( Integer sheet : collectSheets ) + { + printData( sheet, importItems ); + } xml.append( WORKBOOK_CLOSETAG ); } - private void createFormByComment( int sheetNo, DataElementCategoryOptionCombo optionCombo ) + private void printData( int sheetNo, List importItems ) { PeriodType periodType = PeriodType.getPeriodTypeByName( MonthlyPeriodType.NAME ); @@ -268,7 +264,7 @@ // Generate DataElement DataElement dataElement = new DataElement( name ); /** TAKE CARE OF SHORT_NAME IS TOO LONG */ - dataElement.setShortName( System.currentTimeMillis() + "" ); + dataElement.setShortName( name ); dataElement.setActive( true ); dataElement.setZeroIsSignificant( false ); dataElement.setDomainType( DOMAIN_TYPE_AGGREGATE ); @@ -303,8 +299,10 @@ { xml.append( "" ); - xml.append( "" ); + xml.append( "]]>" ); + + printFormatInfo( s, cell ); xml.append( "" ); } @@ -316,7 +314,7 @@ xml.append( "" ); - this.readingDetailsFormattedCell( s, cell ); + printFormatInfo( s, cell ); xml.append( "" ); } @@ -346,16 +344,22 @@ { cleanUp(); - // Catch exception if any e.printStackTrace(); } } - // ------------------------------------------------------------------------- - // Get the merged cell's information - // ------------------------------------------------------------------------- - - private void readingDetailsFormattedCell( Sheet sheet, Cell objCell ) + /** + * Writes out the WORKBOOK data as XML, with formatting information + * + * @throws Exception + */ + + private void cleanUp() + { + System.gc(); + } + + private void printFormatInfo( Sheet sheet, Cell objCell ) { // The format information CellStyle format = objCell.getCellStyle(); @@ -363,6 +367,7 @@ if ( format != null ) { xml.append( "" ); + xml.append( " c='" + htmlHelper.colorStyle( TEXT_COLOR, format ) + "'/>" ); + // The cell background information + xml.append( "" ); xml.append( "" ); } else @@ -386,7 +392,11 @@ } } - private void writeXMLMergedDescription( Collection collectSheets ) + // ------------------------------------------------------------------------- + // Get the merged cell's information + // ------------------------------------------------------------------------- + + private void printMergedInfo( Collection collectSheets ) throws IOException { // Open the main Tag // @@ -394,14 +404,14 @@ for ( Integer sheet : collectSheets ) { - writeMergedInfoBySheetNo( sheet ); + printMergedInfoBySheetNo( sheet ); } // Close the main Tag // xml.append( MERGEDCELL_CLOSETAG ); } - private void writeMergedInfoBySheetNo( int sheetNo ) + private void printMergedInfoBySheetNo( int sheetNo ) { Sheet sheet = WORKBOOK.getSheetAt( sheetNo - 1 ); CellRangeAddress cellRangeAddress = null; @@ -418,24 +428,4 @@ } } } - - private String getSimilarColor( short index ) - { - if ( IndexedColors.BLUE.getIndex() == index ) - { - return "blue"; - } - - if ( IndexedColors.DARK_BLUE.getIndex() == index ) - { - return "darkblue"; - } - - if ( IndexedColors.BROWN.getIndex() == index ) - { - return "brown"; - } - - return ""; - } } \ No newline at end of file === modified file 'local/vn/dhis-web-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/preview/action/ExportXMLAction.java' --- local/vn/dhis-web-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/preview/action/ExportXMLAction.java 2012-11-02 04:42:01 +0000 +++ local/vn/dhis-web-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/preview/action/ExportXMLAction.java 2012-12-15 09:52:30 +0000 @@ -69,15 +69,11 @@ // Input && Output // ------------------------------------------------------------------------- - private String xmlStructureResponse; - - // ------------------------------------------------------------------------- - // Getter & Setter - // ------------------------------------------- + private String xml; public String getXmlStructureResponse() { - return xmlStructureResponse; + return xml; } // ------------------------------------------------------------------------- @@ -104,7 +100,7 @@ } } - xmlStructureResponse = new XMLStructureResponse( selectionManager.getDownloadFilePath(), sheets ).getXml(); + xml = new XMLStructureResponse( selectionManager.getDownloadFilePath(), sheets, null ).getXml(); return SUCCESS; } === added file 'local/vn/dhis-web-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/preview/action/HSSFHtmlHelper.java' --- local/vn/dhis-web-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/preview/action/HSSFHtmlHelper.java 1970-01-01 00:00:00 +0000 +++ local/vn/dhis-web-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/preview/action/HSSFHtmlHelper.java 2012-12-15 09:52:30 +0000 @@ -0,0 +1,88 @@ +package org.hisp.dhis.reportsheet.preview.action; + +/* + * Copyright (c) 2004-2012, 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 org.apache.poi.hssf.usermodel.HSSFCellStyle; +import org.apache.poi.hssf.usermodel.HSSFPalette; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import org.apache.poi.hssf.util.HSSFColor; +import org.apache.poi.ss.usermodel.CellStyle; + +/** + * @author Dang Duy Hieu + * @version $Id$ + */ + +public class HSSFHtmlHelper + implements HtmlHelper +{ + private final HSSFWorkbook wb; + + private final HSSFPalette colors; + + private static final HSSFColor HSSF_AUTO_COLOR = new HSSFColor.AUTOMATIC(); + + public HSSFHtmlHelper( HSSFWorkbook wb ) + { + this.wb = wb; + + colors = wb.getCustomPalette(); + } + + public String colorStyle( String type, CellStyle style ) + { + if ( type == null || type.trim().isEmpty() ) + { + return EMPTY; + } + + HSSFCellStyle cellStyle = (HSSFCellStyle) style; + + short index = 0; + + if ( type.equals( FOREGROUND_COLOR ) ) + { + index = cellStyle.getFillForegroundColor(); + } + else + { + index = cellStyle.getFont( wb ).getColor(); + } + + HSSFColor color = colors.getColor( index ); + + if ( index == HSSF_AUTO_COLOR.getIndex() || color == null ) + { + return EMPTY; + } + + short[] rgb = color.getTriplet(); + + return "rgb(" + rgb[0] + "," + rgb[1] + "," + rgb[2] + ")"; + } +} === added file 'local/vn/dhis-web-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/preview/action/HtmlHelper.java' --- local/vn/dhis-web-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/preview/action/HtmlHelper.java 1970-01-01 00:00:00 +0000 +++ local/vn/dhis-web-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/preview/action/HtmlHelper.java 2012-12-15 09:52:30 +0000 @@ -0,0 +1,46 @@ +package org.hisp.dhis.reportsheet.preview.action; + +/* + * Copyright (c) 2004-2012, 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 org.apache.poi.ss.usermodel.CellStyle; + +/** + * @author Dang Duy Hieu + * @version $Id$ + * */ + +public interface HtmlHelper +{ + final String EMPTY = ""; + + final String TEXT_COLOR = "tc"; + + final String FOREGROUND_COLOR = "fgc"; + + String colorStyle( String type, CellStyle style ); +} === modified file 'local/vn/dhis-web-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/preview/action/XMLStructureResponse.java' --- local/vn/dhis-web-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/preview/action/XMLStructureResponse.java 2012-12-11 20:24:41 +0000 +++ local/vn/dhis-web-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/preview/action/XMLStructureResponse.java 2012-12-15 09:52:30 +0000 @@ -27,30 +27,24 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -import static org.apache.commons.io.FilenameUtils.getExtension; +import static org.hisp.dhis.reportsheet.preview.action.HtmlHelper.FOREGROUND_COLOR; +import static org.hisp.dhis.reportsheet.preview.action.HtmlHelper.TEXT_COLOR; import static org.hisp.dhis.reportsheet.utils.ExcelUtils.convertAlignmentString; import static org.hisp.dhis.reportsheet.utils.ExcelUtils.readValueByPOI; import static org.hisp.dhis.reportsheet.utils.NumberUtils.PATTERN_DECIMAL_FORMAT1; import static org.hisp.dhis.reportsheet.utils.NumberUtils.applyPatternDecimalFormat; import static org.hisp.dhis.reportsheet.utils.NumberUtils.resetDecimalFormatByLocale; -import java.io.FileInputStream; -import java.io.IOException; -import java.util.Collection; +import java.util.List; import java.util.Locale; import java.util.Set; -import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.Font; -import org.apache.poi.ss.usermodel.FormulaEvaluator; -import org.apache.poi.ss.usermodel.IndexedColors; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; -import org.apache.poi.ss.usermodel.Workbook; -import org.apache.poi.ss.util.CellRangeAddress; -import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.hisp.dhis.reportsheet.importitem.ImportItem; /** * Simple demo class which uses the api to present the contents of an excel 97 @@ -62,104 +56,27 @@ */ public class XMLStructureResponse + extends AbstractXMLStructure { - /** - * The encoding to write - */ - private StringBuffer xml = new StringBuffer( 200000 ); - - /** - * The workbook we are reading from a given file - */ - private Workbook WORKBOOK; - - private FormulaEvaluator evaluatorFormula; - - private static final String WORKBOOK_OPENTAG = ""; - - private static final String WORKBOOK_CLOSETAG = ""; - - private static final String MERGEDCELL_OPENTAG = ""; - - private static final String MERGEDCELL_CLOSETAG = ""; - - // ------------------------------------------------------------------------- - // Get & Set methods - // ------------------------------------------------------------------------- - - protected String getXml() - { - return xml.toString(); - } - - private void cleanUpForResponse() - { - System.gc(); - } - - /** - * Constructor - * - * @param w The workbook to interrogate - * @param enc The encoding used by the output stream. Null or unrecognized - * values cause the encoding to default to UTF8 - * @param f Indicates whether the generated XML document should contain the - * cell format information - * @exception java.io.IOException - */ - - public XMLStructureResponse( String pathFileName, Set collectSheets ) + // ------------------------------------------------------------------------- + // Sub-methods + // ------------------------------------------------------------------------- + + protected XMLStructureResponse( String pathFileName, Set collectSheets, List importItems ) throws Exception { - this.cleanUpForResponse(); - - if ( getExtension( pathFileName ).equals( "xls" ) ) - { - this.WORKBOOK = new HSSFWorkbook( new FileInputStream( pathFileName ) ); - } - else - { - this.WORKBOOK = new XSSFWorkbook( new FileInputStream( pathFileName ) ); - } - + super( pathFileName, collectSheets, importItems ); + } + + @Override + protected void setUpDecimalFormat() + { resetDecimalFormatByLocale( Locale.GERMAN ); applyPatternDecimalFormat( PATTERN_DECIMAL_FORMAT1 ); - - this.evaluatorFormula = WORKBOOK.getCreationHelper().createFormulaEvaluator(); - - writeFormattedXML( collectSheets ); - - } - - /** - * Writes out the WORKBOOK data as XML, with formatting information - * - * @param bDetailed - * - * @throws Exception - */ - - private void writeFormattedXML( Collection collectSheets ) - throws Exception - { - - this.writeXMLMergedDescription( collectSheets ); - - xml.append( WORKBOOK_OPENTAG ); - - for ( Integer sheet : collectSheets ) - { - writeBySheetNo( sheet ); - } - - xml.append( WORKBOOK_CLOSETAG ); - } - - // ------------------------------------------------------------------------- - // Sub-methods - // ------------------------------------------------------------------------- - - private void writeBySheetNo( int sheetNo ) + } + + @Override + protected void printData( int sheetNo, List importItems ) { Sheet s = WORKBOOK.getSheetAt( sheetNo - 1 ); @@ -181,7 +98,7 @@ + readValueByPOI( row.getRowNum() + 1, cell.getColumnIndex() + 1, s, evaluatorFormula ) + "]]>" ); - this.readingDetailsFormattedCell( s, cell ); + readingDetailsFormattedCell( s, cell ); xml.append( "" ); } @@ -210,9 +127,10 @@ xml.append( ">" ); + xml.append( " c='" + htmlHelper.colorStyle( TEXT_COLOR, format ) + "'/>" ); + // The cell background information + xml.append( "" ); xml.append( "" ); } else @@ -221,61 +139,4 @@ } } } - - // ------------------------------------------------------------------------- - // Get the merged cell's information - // ------------------------------------------------------------------------- - - private void writeXMLMergedDescription( Collection collectSheets ) - throws IOException - { - // Open the main Tag // - xml.append( MERGEDCELL_OPENTAG ); - - for ( Integer sheet : collectSheets ) - { - writeMergedInfoBySheetNo( sheet ); - } - - // Close the main Tag // - xml.append( MERGEDCELL_CLOSETAG ); - } - - private void writeMergedInfoBySheetNo( int sheetNo ) - { - Sheet sheet = WORKBOOK.getSheetAt( sheetNo - 1 ); - CellRangeAddress cellRangeAddress = null; - - for ( int i = 0; i < sheet.getNumMergedRegions(); i++ ) - { - cellRangeAddress = sheet.getMergedRegion( i ); - - if ( cellRangeAddress.getFirstColumn() != cellRangeAddress.getLastColumn() ) - { - xml.append( "" - + (cellRangeAddress.getLastColumn() - cellRangeAddress.getFirstColumn() + 1) + "" ); - } - } - } - - private String getSimilarColor( short index ) - { - if ( IndexedColors.BLUE.getIndex() == index ) - { - return "blue"; - } - - if ( IndexedColors.DARK_BLUE.getIndex() == index ) - { - return "darkblue"; - } - - if ( IndexedColors.BROWN.getIndex() == index ) - { - return "brown"; - } - - return ""; - } } \ No newline at end of file === modified file 'local/vn/dhis-web-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/preview/action/XMLStructureResponseImport.java' --- local/vn/dhis-web-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/preview/action/XMLStructureResponseImport.java 2012-11-27 04:26:35 +0000 +++ local/vn/dhis-web-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/preview/action/XMLStructureResponseImport.java 2012-12-15 09:52:30 +0000 @@ -1,7 +1,7 @@ package org.hisp.dhis.reportsheet.preview.action; /* - * Copyright (c) 2004-2011, University of Oslo + * Copyright (c) 2004-2012, University of Oslo * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -27,149 +27,39 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -import static org.apache.commons.io.FilenameUtils.getExtension; -import static org.hisp.dhis.reportsheet.utils.ExcelUtils.convertAlignmentString; import static org.hisp.dhis.reportsheet.utils.ExcelUtils.readValueByPOI; -import static org.hisp.dhis.reportsheet.utils.NumberUtils.PATTERN_DECIMAL_FORMAT1; -import static org.hisp.dhis.reportsheet.utils.NumberUtils.applyPatternDecimalFormat; -import static org.hisp.dhis.reportsheet.utils.NumberUtils.resetDecimalFormatByLocale; -import java.io.FileInputStream; -import java.io.IOException; -import java.util.Collection; import java.util.List; -import java.util.Locale; +import java.util.Set; -import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Cell; -import org.apache.poi.ss.usermodel.CellStyle; -import org.apache.poi.ss.usermodel.Font; -import org.apache.poi.ss.usermodel.FormulaEvaluator; -import org.apache.poi.ss.usermodel.IndexedColors; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; -import org.apache.poi.ss.usermodel.Workbook; -import org.apache.poi.ss.util.CellRangeAddress; -import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.hisp.dhis.reportsheet.importitem.ImportItem; /** * * @author Dang Duy Hieu - * @version $Id XMLStructureResponse.java 2011-06-28 16:08:00$ + * @version $Id XMLStructureResponseImport.java 2011-06-28 16:08:00$ */ public class XMLStructureResponseImport + extends AbstractXMLStructure { - /** - * The encoding to write - */ - private StringBuffer xml = new StringBuffer( 200000 ); - - /** - * The workbook we are reading from a given file - */ - private Workbook WORKBOOK; - - private FormulaEvaluator evaluatorFormula; - - private static final String WORKBOOK_OPENTAG = ""; - - private static final String WORKBOOK_CLOSETAG = ""; - - private static final String MERGEDCELL_OPENTAG = ""; - - private static final String MERGEDCELL_CLOSETAG = ""; - - // ------------------------------------------------------------------------- - // Get & Set methods - // ------------------------------------------------------------------------- - - public String getXml() - { - return xml.toString(); - } - - /** - * Constructor - * - * @param importItems - * - * @param w The workbook to interrogate - * @param enc The encoding used by the output stream. Null or unrecognized - * values cause the encoding to default to UTF8 - * @param f Indicates whether the generated XML document should contain the - * cell format information - * @exception java.io.IOException - */ - - public XMLStructureResponseImport( String pathFileName, Collection collectSheets, - List importItems, boolean bWriteDescription ) - throws Exception - { - this.cleanUpForResponse(); - - FileInputStream inputStream = new FileInputStream( pathFileName ); - - if ( getExtension( pathFileName ).equals( "xls" ) ) - { - this.WORKBOOK = new HSSFWorkbook( inputStream ); - } - else - { - this.WORKBOOK = new XSSFWorkbook( inputStream ); - } - - resetDecimalFormatByLocale( Locale.GERMAN ); - applyPatternDecimalFormat( PATTERN_DECIMAL_FORMAT1 ); - - this.evaluatorFormula = WORKBOOK.getCreationHelper().createFormulaEvaluator(); - - this.writeFormattedXML( collectSheets, importItems, bWriteDescription ); - } - - // ------------------------------------------------------------------------- - // Private methods - // ------------------------------------------------------------------------- - - private void cleanUpForResponse() - { - System.gc(); - } - - private void writeFormattedXML( Collection collectSheets, List importItems, - boolean bWriteDescription ) - throws Exception - { - if ( bWriteDescription ) - { - this.writeXMLMergedDescription( collectSheets ); - } - - xml.append( WORKBOOK_OPENTAG ); - - for ( Integer sheet : collectSheets ) - { - this.writeData( sheet, importItems ); - } - - xml.append( WORKBOOK_CLOSETAG ); - } - - private void writeXMLMergedDescription( Collection collectSheets ) - throws IOException - { - xml.append( MERGEDCELL_OPENTAG ); - - for ( Integer sheet : collectSheets ) - { - writeBySheetNo( sheet ); - } - - xml.append( MERGEDCELL_CLOSETAG ); - } - - private void writeData( int sheetNo, List importItems ) + public XMLStructureResponseImport( String pathFileName, Set collectSheets, List importItems ) + throws Exception + { + super( pathFileName, collectSheets, importItems ); + } + + @Override + protected void setUpDecimalFormat() + { + // TODO: Nothing + } + + @Override + protected void printData( int sheetNo, List importItems ) { Sheet s = WORKBOOK.getSheetAt( sheetNo - 1 ); @@ -216,7 +106,7 @@ xml.append( "" ); - this.readingDetailsFormattedCell( s, cell ); + this.printFormatInfo( s, cell ); xml.append( "" ); } @@ -230,73 +120,4 @@ } xml.append( "" ); } - - private void writeBySheetNo( int sheetNo ) - { - Sheet sheet = WORKBOOK.getSheetAt( sheetNo - 1 ); - CellRangeAddress cellRangeAddress = null; - - for ( int i = 0; i < sheet.getNumMergedRegions(); i++ ) - { - cellRangeAddress = sheet.getMergedRegion( i ); - - if ( cellRangeAddress.getFirstColumn() != cellRangeAddress.getLastColumn() ) - { - xml.append( "" - + (cellRangeAddress.getLastColumn() - cellRangeAddress.getFirstColumn() + 1) + "" ); - } - } - } - - private void readingDetailsFormattedCell( Sheet sheet, Cell objCell ) - { - // The format information - CellStyle format = objCell.getCellStyle(); - - if ( format != null ) - { - xml.append( "" ); - - xml.append( "" ); - } - else - { - xml.append( "/>" ); - } - } - } - - private String getSimilarColor( short index ) - { - if ( IndexedColors.BLUE.getIndex() == index ) - { - return "blue"; - } - - if ( IndexedColors.DARK_BLUE.getIndex() == index ) - { - return "darkblue"; - } - - if ( IndexedColors.BROWN.getIndex() == index ) - { - return "brown"; - } - - return ""; - } } \ No newline at end of file === added file 'local/vn/dhis-web-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/preview/action/XSSFHtmlHelper.java' --- local/vn/dhis-web-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/preview/action/XSSFHtmlHelper.java 1970-01-01 00:00:00 +0000 +++ local/vn/dhis-web-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/preview/action/XSSFHtmlHelper.java 2012-12-15 09:52:30 +0000 @@ -0,0 +1,87 @@ +package org.hisp.dhis.reportsheet.preview.action; + +/* + * Copyright (c) 2004-2012, 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 org.apache.poi.ss.usermodel.CellStyle; +import org.apache.poi.xssf.usermodel.XSSFCellStyle; +import org.apache.poi.xssf.usermodel.XSSFColor; + +/** + * @author Dang Duy Hieu + * @version $Id$ + */ + +public class XSSFHtmlHelper + implements HtmlHelper +{ + public String colorStyle( String type, CellStyle style ) + { + if ( type == null || type.trim().isEmpty() ) + { + return EMPTY; + } + + XSSFCellStyle cellStyle = (XSSFCellStyle) style; + + XSSFColor color = null; + + if ( type.equals( FOREGROUND_COLOR ) ) + { + color = cellStyle.getFillForegroundXSSFColor(); + } + else + { + color = cellStyle.getFont().getXSSFColor(); + } + + if ( color == null || color.isAuto() ) + { + return EMPTY; + } + + byte[] rgb = color.getRgb(); + + if ( rgb == null ) + { + return EMPTY; + } + + // This is done twice -- rgba is new with CSS 3, and browser that don't + // support it will ignore the rgba specification and stick with the + // solid color, which is declared first + + byte[] argb = color.getARgb(); + + if ( argb == null ) + { + return EMPTY; + } + + return "rgb(" + argb[3] + "," + argb[0] + "," + argb[1] + "," + argb[2] + ")"; + } +} === modified file 'local/vn/dhis-web-spreadsheet-reporting/src/main/webapp/dhis-web-spreadsheet-reporting/javascript/autoGenerateForm.js' --- local/vn/dhis-web-spreadsheet-reporting/src/main/webapp/dhis-web-spreadsheet-reporting/javascript/autoGenerateForm.js 2012-12-12 09:34:51 +0000 +++ local/vn/dhis-web-spreadsheet-reporting/src/main/webapp/dhis-web-spreadsheet-reporting/javascript/autoGenerateForm.js 2012-12-15 09:52:30 +0000 @@ -92,7 +92,7 @@ _rows = _sheets[s].getElementsByTagName( 'row' ); _orderSheet = getRootElementAttribute( _sheets[s], "id" ); - _sHTML.push( "" ); + _sHTML.push( "
" ); for (var i = 0 ; i < _rows.length ; i ++) { @@ -109,7 +109,7 @@ // Printing out the unformatted cells for (; _index < _number ; _index ++) { - _sHTML.push( "" ); } if ( _index == _number ) @@ -117,10 +117,12 @@ var _sData = getElementValue( _cols[j], 'data' ); var _align = getElementAttribute( _cols[j], 'format', 'a' ); var _border = getElementAttribute( _cols[j], 'format', 'b' ); + var _width = getElementAttribute( _cols[j], 'format', 'w' ); var _size = getElementAttribute( _cols[j], 'font', 's' ); var _bold = getElementAttribute( _cols[j], 'font', 'b' ); var _italic = getElementAttribute( _cols[j], 'font', 'i' ); - var _color = getElementAttribute( _cols[j], 'font', 'c' ); + var _fcolor = getElementAttribute( _cols[j], 'font', 'c' ); + var _bgcolor = getElementAttribute( _cols[j], 'bg', 'c' ); // If this cell is merged - Key's form: Sheet#Row#Col _sPattern = _orderSheet + "#" + i + "#" + _number; @@ -131,26 +133,36 @@ _index = Number(_index) + Number(_colspan); _size = Number(_size) + 2; - _sHTML.push( "" ); + _sHTML.push( _sData, "" ); } } _sHTML.push( "" ); } - _sHTML.push( "
" ); + _sHTML.push( "  0 ? " ui-widget-content" : "" ); - + // style for + _sHTML.push( "" ); + if ( _bold == "1" ) { - _sData = "" + _sData + ""; + _sData = "" + _sData + ""; } if ( _italic == "true" ) { _sData = "" + _sData + ""; } + if ( _size > 0 ) + { + _sData = "" + _sData + ""; + } + if ( _fcolor != "" ) + { + _sData = "" + _sData + ""; + } - _sHTML.push( "'>", _sData, "
" ); + _sHTML.push( "" ); } //jQuery( '#previewDiv' ).html( _sHTML.join('') );