/*
* Copyright (C) 2000 - 2009 TagServlet Ltd
*
* This file is part of Open BlueDragon (OpenBD) CFML Server Engine.
*
* OpenBD is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* Free Software Foundation,version 3.
*
* OpenBD is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with OpenBD. If not, see http://www.gnu.org/licenses/
*
* Additional permission under GNU GPL version 3 section 7
*
* If you modify this Program, or any covered work, by linking or combining
* it with any of the JARS listed in the README.txt (or a modified version of
* (that library), containing parts covered by the terms of that JAR, the
* licensors of this Program grant you additional permission to convey the
* resulting work.
* README.txt @ http://www.openbluedragon.org/license/README.txt
*
* http://www.openbluedragon.org/
*/
package org.alanwilliamson.openbd.plugin.spreadsheet;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import com.naryx.tagfusion.cfm.engine.cfData;
import com.naryx.tagfusion.cfm.engine.dataNotSupportedException;
public class cfSpreadSheetData extends cfData implements java.io.Serializable {
private static final long serialVersionUID = 1L;
private Workbook workbook;
private String activeSheetName = null;
private Sheet activeSheetObj = null;
public cfSpreadSheetData( File inputFile ) throws IOException {
FileInputStream in = new FileInputStream( inputFile );
try{
if ( inputFile.getName().toLowerCase().endsWith(".xls") ){
workbook = new HSSFWorkbook( in );
}else if ( inputFile.getName().toLowerCase().endsWith(".xlsx") ){
workbook = new XSSFWorkbook( in );
}else
throw new IOException( "file format not supported (.xls/.xlsx only)" );
}finally{
if ( in != null ){
try{
in.close();
}catch(Exception e){}
}
}
activeSheetObj = workbook.getSheetAt( 0 );
activeSheetName = activeSheetObj.getSheetName();
}
public cfSpreadSheetData( boolean bXLSX, String _activeSheet ){
workbook = bXLSX ? new XSSFWorkbook() : new HSSFWorkbook();
activeSheetName = _activeSheet;
activeSheetObj = workbook.createSheet(activeSheetName);
activeSheetObj.setPrintGridlines( true );
activeSheetObj.setDisplayGridlines( true );
workbook.setActiveSheet( 0 );
workbook.setSelectedTab( 0 );
}
public Workbook getWorkBook(){
return workbook;
}
public Sheet getActiveSheet(){
return activeSheetObj;
}
public String getActiveSheetName(){
return activeSheetName;
}
public void deleteSheet( String sheetName ){
if ( workbook.getNumberOfSheets() == 1 )
return;
Sheet sheet = workbook.getSheet( sheetName );
if ( sheet != null ){
workbook.removeSheetAt( workbook.getSheetIndex(sheet) );
activeSheetObj = workbook.getSheetAt(0);
if ( activeSheetObj != null ){
activeSheetName = activeSheetObj.getSheetName();
}
}
}
public void setActiveSheet( int sheetNo ){
Sheet sheet = workbook.getSheetAt( sheetNo );
if ( sheet != null ){
workbook.setActiveSheet( sheetNo );
workbook.setSelectedTab( sheetNo );
activeSheetName = sheet.getSheetName();
activeSheetObj = sheet;
}
}
public void setActiveSheet( String sheetName ){
Sheet sheet = workbook.getSheet( sheetName );
if ( sheet != null ){
workbook.setActiveSheet( workbook.getSheetIndex(sheet) );
workbook.setSelectedTab( workbook.getSheetIndex(sheet) );
activeSheetName = sheetName;
activeSheetObj = sheet;
}
}
/*
* Writes the current workbook out to the file system
*/
public void write( File destinationFile, String password ) throws IOException {
if ( password != null && password.length() > 0 && workbook instanceof HSSFWorkbook ){
((HSSFWorkbook)workbook).writeProtectWorkbook(password, "");
}
FileOutputStream out = null;
try{
out = new FileOutputStream(destinationFile);
workbook.write(out);
}finally{
if ( out != null ){
try{out.close();}catch(IOException ioe){}
}
}
}
/*
* Writes the spreadsheet object to a byte array
*/
public byte[] write() throws IOException {
ByteArrayOutputStream out = new ByteArrayOutputStream( 32000 );
workbook.write(out);
return out.toByteArray();
}
/* --------------------------------------------
* Methods from the cfData class
*/
public byte getDataType(){ return CFJAVAOBJECTDATA; }
public String getDataTypeName() { return "spreadsheet"; }
public String getString() throws dataNotSupportedException {
throw new dataNotSupportedException( "Cannot convert spreadsheet data to string" );
}
public void dump( java.io.PrintWriter out ){
dump( out, "", -1 );
}
public void dump( java.io.PrintWriter out, String _label, int _top ){
out.write( "<table class='cfdump_table_struct'><tr><th class='cfdump_th_struct' colspan='2'>" );
if ( _label.length() > 0 ) out.write( _label + " - " );
out.write( "spreadsheet</th></tr>" );
out.write( "<tr><td class='cfdump_td_struct'>XLSX</td><td class='cfdump_td_value'>" );
out.write( String.valueOf( workbook instanceof XSSFWorkbook ) );
out.write( "</td></tr>" );
out.write( "<tr><td class='cfdump_td_struct'>Active Sheet</td><td class='cfdump_td_value'>" );
out.write( activeSheetName );
out.write( "</td></tr>" );
out.write( "</table>" );
}
public boolean equals( Object o ){
if ( o instanceof cfSpreadSheetData ){
return true;
}else
return false;
}
}