/* * ViewerPlugin.java * Created on 26 April 2005 * Author: Mashooq Badar */ package com.valtech.wiki.excel; import java.util.Map; import javax.xml.transform.TransformerFactory; import javax.xml.transform.Transformer; import javax.xml.transform.stream.StreamResult; import javax.xml.transform.stream.StreamSource; import javax.xml.transform.dom.DOMSource; import org.apache.xml.serialize.OutputFormat; import org.apache.xml.serialize.XMLSerializer; import javax.xml.parsers.*; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import com.ecyrd.jspwiki.WikiContext; import com.ecyrd.jspwiki.plugin.WikiPlugin; import com.ecyrd.jspwiki.plugin.PluginException; import java.io.*; import org.apache.log4j.Logger; import jxl.*; import org.w3c.dom.*; /** * Given an excel file * @author Mashooq Badar * excel= absolute path to the excel file to view */ public class ViewerPlugin implements WikiPlugin { private static final Logger log = Logger.getLogger(ViewerPlugin.class); private final String XSL = "ToHTML.xsl"; public String execute(WikiContext context, Map params) throws PluginException { // Get the names of the XML and XSL files to use String excel = (String)params.get("excel"); String root = context.getEngine().getRootPath() == null? "" : context.getEngine().getRootPath(); File excelFile = new File(excel); if (!excelFile.exists()) { return "Excel file (" + excelFile.getPath() + ") does not exist!"; } File excelXMLFile = new File(excel + ".xml"); File xslFile = new File(root, XSL); if (!xslFile.exists()) { return "XSL file (" + xslFile.getPath() + ") does not exist!"; } String result = ""; try { // Create a Transformer TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(new StreamSource(xslFile)); String sheet = context.getHttpParameter("sheet") == null ? "" : context.getHttpParameter("sheet"); String page = context.getPage().getName() == null ? "" : context.getPage().getName(); transformer.setParameter("sheet", sheet); transformer.setParameter("page", page); transformer.setParameter("excel", excelFile.getName()); transformer.setParameter("uri", context.getHttpRequest().getRequestURI()); // Transform the given XML file using the given XSL file, placing it in a String. if (!excelXMLFile.exists() || excelXMLFile.lastModified() < excelFile.lastModified()) { Document dom = exportToXML(excelFile); OutputFormat format = new OutputFormat(dom); FileWriter writer = new FileWriter(excelXMLFile); XMLSerializer toFile = new XMLSerializer(writer, format); toFile.serialize(dom); writer.close(); } StringWriter resultWriter = new StringWriter(); transformer.transform(new StreamSource(excelXMLFile), new StreamResult(resultWriter)); result = resultWriter.toString(); } catch( Exception e ) { System.out.println( e.toString() ); throw new PluginException("Exception performing export spreadsheet.", e); } return result; } public Document exportToXML(File excelFile) throws Exception { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); factory.setNamespaceAware(true); Document dom = builder.newDocument(); Workbook workbook = Workbook.getWorkbook(excelFile); Element workbookElm = dom.createElement("workbook"); dom.appendChild(workbookElm); for (int i=0; i