01: // Copyright © 2006-2007 ASERT. Released under the Canoo Webtest license.
02: package com.canoo.webtest.plugins.exceltest;
03:
04: import java.io.IOException;
05: import java.io.StringWriter;
06: import java.io.Writer;
07:
08: import javax.xml.parsers.DocumentBuilder;
09: import javax.xml.parsers.DocumentBuilderFactory;
10:
11: import org.apache.poi.hssf.usermodel.HSSFSheet;
12: import org.apache.poi.hssf.usermodel.HSSFWorkbook;
13: import org.apache.xml.serialize.OutputFormat;
14: import org.apache.xml.serialize.XMLSerializer;
15: import org.w3c.dom.Document;
16: import org.w3c.dom.Element;
17:
18: import com.canoo.webtest.engine.ContextHelper;
19: import com.canoo.webtest.interfaces.IContentFilter;
20:
21: /**
22: * @author Rob Nielsen
23: * @webtest.step category="Excel"
24: * name="excelStructureFilter"
25: * alias="structureFilter"
26: * description="Extracts the structure of the current <key>xls</key> document, as a xml file."
27: */
28: public class ExcelStructureFilter extends AbstractExcelStep implements
29: IContentFilter {
30:
31: public void doExecute() throws Exception {
32: final HSSFWorkbook excelWorkbook = getExcelWorkbook();
33: final DocumentBuilder builder = DocumentBuilderFactory
34: .newInstance().newDocumentBuilder();
35: final Document doc = builder.newDocument();
36: final Element root = doc.createElement("excelWorkbook");
37: doc.appendChild(root);
38: root.setAttribute("backup", String.valueOf(excelWorkbook
39: .getBackupFlag()));
40: root.setAttribute("numberOfFonts", String.valueOf(excelWorkbook
41: .getNumberOfFonts()));
42: root.setAttribute("numberOfCellStyles", String
43: .valueOf(excelWorkbook.getNumCellStyles()));
44: root.setAttribute("numberOfNames", String.valueOf(excelWorkbook
45: .getNumberOfNames()));
46: final Element sheets = doc.createElement("sheets");
47: for (int i = 0; i < excelWorkbook.getNumberOfSheets(); i++) {
48: final HSSFSheet sheetAt = excelWorkbook.getSheetAt(i);
49: final Element sheetElement = doc.createElement("sheet");
50: sheetElement.setAttribute("index", String.valueOf(i));
51: sheetElement.setAttribute("name", excelWorkbook
52: .getSheetName(i));
53: sheetElement.setAttribute("firstRow", String
54: .valueOf(sheetAt.getFirstRowNum()));
55: sheetElement.setAttribute("lastRow", String.valueOf(sheetAt
56: .getLastRowNum()));
57: sheetElement.setAttribute("physicalRows", String
58: .valueOf(sheetAt.getPhysicalNumberOfRows()));
59: sheetElement.setAttribute("defaultRowHeight", String
60: .valueOf(sheetAt.getDefaultRowHeight()));
61: sheetElement.setAttribute("defaultColumnWidth", String
62: .valueOf(sheetAt.getDefaultColumnWidth()));
63: sheetElement.setAttribute("fitToPage", String
64: .valueOf(sheetAt.getFitToPage()));
65: sheets.appendChild(sheetElement);
66: }
67: root.appendChild(sheets);
68: final StringWriter sw = new StringWriter();
69: writeXmlFile(doc, sw);
70: ContextHelper
71: .defineAsCurrentResponse(getContext(), sw.toString(),
72: "text/xml", "http:" + getClass().getName());
73: }
74:
75: protected void writeXmlFile(final Document doc, final Writer writer)
76: throws IOException {
77: final OutputFormat format = new OutputFormat(doc);
78: format.setIndenting(true);
79: format.setEncoding("ISO-8859-1");
80: format.setLineWidth(50);
81:
82: final XMLSerializer serializer = new XMLSerializer(writer,
83: format);
84: serializer.asDOMSerializer();
85: serializer.serialize(doc.getDocumentElement());
86: writer.close();
87: }
88:
89: }
|