diff --git a/src/ooxml/java/org/apache/poi/ooxml/dev/OOXMLLister.java b/src/ooxml/java/org/apache/poi/ooxml/dev/OOXMLLister.java deleted file mode 100644 index 177f9f933..000000000 --- a/src/ooxml/java/org/apache/poi/ooxml/dev/OOXMLLister.java +++ /dev/null @@ -1,152 +0,0 @@ -/* ==================================================================== - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -==================================================================== */ -package org.apache.poi.ooxml.dev; - -import java.io.*; -import java.util.ArrayList; - -import org.apache.poi.openxml4j.exceptions.InvalidFormatException; -import org.apache.poi.openxml4j.opc.OPCPackage; -import org.apache.poi.openxml4j.opc.PackageAccess; -import org.apache.poi.openxml4j.opc.PackagePart; -import org.apache.poi.openxml4j.opc.PackageRelationship; -import org.apache.poi.openxml4j.opc.PackageRelationshipCollection; - -/** - * Prints out the contents of a OOXML container. - * Useful for seeing what parts are defined, and how - * they're all related to each other. - */ -public class OOXMLLister implements Closeable { - private final OPCPackage container; - private final PrintStream disp; - - public OOXMLLister(OPCPackage container) { - this(container, System.out); - } - public OOXMLLister(OPCPackage container, PrintStream disp) { - this.container = container; - this.disp = disp; - } - - /** - * Figures out how big a given PackagePart is. - * - * @param part the PackagePart - * @return the size of the PackagePart - * - * @throws IOException if the part can't be read - */ - public static long getSize(PackagePart part) throws IOException { - InputStream in = part.getInputStream(); - try { - byte[] b = new byte[8192]; - long size = 0; - int read = 0; - - while(read > -1) { - read = in.read(b); - if(read > 0) { - size += read; - } - } - - return size; - } finally { - in.close(); - } - } - - /** - * Displays information on all the different - * parts of the OOXML file container. - * @throws InvalidFormatException if the package relations are invalid - * @throws IOException if the package can't be read - */ - public void displayParts() throws InvalidFormatException, IOException { - ArrayList parts = container.getParts(); - for (PackagePart part : parts) { - disp.println(part.getPartName()); - disp.println("\t" + part.getContentType()); - - if(! part.getPartName().toString().equals("/docProps/core.xml")) { - disp.println("\t" + getSize(part) + " bytes"); - } - - if(! part.isRelationshipPart()) { - disp.println("\t" + part.getRelationships().size() + " relations"); - for(PackageRelationship rel : part.getRelationships()) { - displayRelation(rel, "\t "); - } - } - } - } - /** - * Displays information on all the different - * relationships between different parts - * of the OOXML file container. - */ - public void displayRelations() { - PackageRelationshipCollection rels = - container.getRelationships(); - for (PackageRelationship rel : rels) { - displayRelation(rel, ""); - } - } - - private void displayRelation(PackageRelationship rel, String indent) { - disp.println(indent+"Relationship:"); - disp.println(indent+"\tFrom: "+ rel.getSourceURI()); - disp.println(indent+"\tTo: " + rel.getTargetURI()); - disp.println(indent+"\tID: " + rel.getId()); - disp.println(indent+"\tMode: " + rel.getTargetMode()); - disp.println(indent+"\tType: " + rel.getRelationshipType()); - } - - @Override - public void close() throws IOException { - container.close(); - } - - public static void main(String[] args) throws IOException, InvalidFormatException { - if(args.length == 0) { - System.err.println("Use:"); - System.err.println("\tjava OOXMLLister "); - System.exit(1); - } - - File f = new File(args[0]); - if(! f.exists()) { - System.err.println("Error, file not found!"); - System.err.println("\t" + f); - System.exit(2); - } - - OOXMLLister lister = new OOXMLLister( - OPCPackage.open(f.toString(), PackageAccess.READ) - ); - - try { - lister.disp.println(f + "\n"); - lister.displayParts(); - lister.disp.println(); - lister.displayRelations(); - } finally { - lister.close(); - } - } -} diff --git a/src/ooxml/java/org/apache/poi/ooxml/dev/OOXMLPrettyPrint.java b/src/ooxml/java/org/apache/poi/ooxml/dev/OOXMLPrettyPrint.java deleted file mode 100644 index 247d37c24..000000000 --- a/src/ooxml/java/org/apache/poi/ooxml/dev/OOXMLPrettyPrint.java +++ /dev/null @@ -1,136 +0,0 @@ -/* ==================================================================== - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -==================================================================== */ -package org.apache.poi.ooxml.dev; - -import java.io.BufferedOutputStream; -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.OutputStream; -import java.util.Enumeration; - -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; -import javax.xml.transform.OutputKeys; -import javax.xml.transform.Result; -import javax.xml.transform.Source; -import javax.xml.transform.Transformer; -import javax.xml.transform.TransformerException; -import javax.xml.transform.TransformerFactory; -import javax.xml.transform.dom.DOMSource; -import javax.xml.transform.stream.StreamResult; - -import org.apache.commons.compress.archivers.zip.ZipArchiveEntry; -import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream; -import org.apache.commons.compress.archivers.zip.ZipFile; -import org.apache.poi.openxml4j.opc.internal.ZipHelper; -import org.apache.poi.openxml4j.util.ZipSecureFile; -import org.apache.poi.util.IOUtils; -import org.w3c.dom.Document; -import org.xml.sax.InputSource; - -/** - * Reads a zipped OOXML file and produces a copy with the included - * pretty-printed XML files. - * - * This is useful for comparing OOXML files produced by different tools as the often - * use different formatting of the XML. - */ -public class OOXMLPrettyPrint { - private final DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); - private final DocumentBuilder documentBuilder; - - public OOXMLPrettyPrint() throws ParserConfigurationException { - // allow files with much lower inflation rate here as there is no risk of Zip Bomb attacks in this developer tool - ZipSecureFile.setMinInflateRatio(0.00001); - - documentBuilder = documentBuilderFactory.newDocumentBuilder(); - } - - public static void main(String[] args) throws Exception { - if(args.length <= 1 || args.length % 2 != 0) { - System.err.println("Use:"); - System.err.println("\tjava OOXMLPrettyPrint [ ] ..."); - System.exit(1); - } - - for(int i = 0;i < args.length;i+=2) { - File f = new File(args[i]); - if(! f.exists()) { - System.err.println("Error, file not found!"); - System.err.println("\t" + f); - System.exit(2); - } - - handleFile(f, new File(args[i+1])); - } - System.out.println("Done."); - } - - private static void handleFile(File file, File outFile) throws - IOException, TransformerException, ParserConfigurationException { - System.out.println("Reading zip-file " + file + " and writing pretty-printed XML to " + outFile); - - try (ZipSecureFile zipFile = ZipHelper.openZipFile(file)) { - try (ZipArchiveOutputStream out = new ZipArchiveOutputStream(new BufferedOutputStream(new FileOutputStream(outFile)))) { - new OOXMLPrettyPrint().handle(zipFile, out); - } - } finally { - System.out.println(); - } - } - - private void handle(ZipFile file, ZipArchiveOutputStream out) throws IOException, TransformerException { - Enumeration entries = file.getEntries(); - while(entries.hasMoreElements()) { - ZipArchiveEntry entry = entries.nextElement(); - - String name = entry.getName(); - out.putArchiveEntry(new ZipArchiveEntry(name)); - try { - if(name.endsWith(".xml") || name.endsWith(".rels")) { - Document document = documentBuilder.parse(new InputSource(file.getInputStream(entry))); - document.setXmlStandalone(true); - pretty(document, out, 2); - } else { - System.out.println("Not pretty-printing non-XML file " + name); - IOUtils.copy(file.getInputStream(entry), out); - } - } catch (Exception e) { - throw new IOException("While handling entry " + name, e); - } finally { - out.closeArchiveEntry(); - } - System.out.print("."); - } - } - - private static void pretty(Document document, OutputStream outputStream, int indent) throws TransformerException { - TransformerFactory transformerFactory = TransformerFactory.newInstance(); - Transformer transformer = transformerFactory.newTransformer(); - transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); - if (indent > 0) { - // set properties to indent the resulting XML nicely - transformer.setOutputProperty(OutputKeys.INDENT, "yes"); - transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", Integer.toString(indent)); - } - Result result = new StreamResult(outputStream); - Source source = new DOMSource(document); - transformer.transform(source, result); - } -} diff --git a/src/ooxml/java/org/apache/poi/xssf/dev/XSSFDump.java b/src/ooxml/java/org/apache/poi/xssf/dev/XSSFDump.java deleted file mode 100644 index 54e1cddba..000000000 --- a/src/ooxml/java/org/apache/poi/xssf/dev/XSSFDump.java +++ /dev/null @@ -1,110 +0,0 @@ -/* ==================================================================== - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -==================================================================== */ - -package org.apache.poi.xssf.dev; - -import static org.apache.poi.ooxml.POIXMLTypeLoader.DEFAULT_XML_OPTIONS; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.OutputStream; -import java.util.Enumeration; - -import org.apache.commons.compress.archivers.zip.ZipArchiveEntry; -import org.apache.poi.openxml4j.opc.internal.ZipHelper; -import org.apache.poi.openxml4j.util.ZipSecureFile; -import org.apache.poi.ooxml.util.DocumentHelper; -import org.apache.poi.util.IOUtils; -import org.apache.xmlbeans.XmlException; -import org.apache.xmlbeans.XmlObject; -import org.apache.xmlbeans.XmlOptions; -import org.w3c.dom.Document; - -/** - * Utility class which dumps the contents of a *.xlsx file into file system. - * - * @author Yegor Kozlov - */ -public final class XSSFDump { - - private XSSFDump() {} - - public static void main(String[] args) throws Exception { - for (String arg : args) { - System.out.println("Dumping " + arg); - try (ZipSecureFile zip = ZipHelper.openZipFile(arg)) { - dump(zip); - } - } - } - - private static void createDirIfMissing(File directory) throws RuntimeException { - if (!directory.exists()) { - boolean dirWasCreated = directory.mkdir(); - if (!dirWasCreated) { - throw new RuntimeException("Unable to create directory: " + directory); - } - } - } - - private static void recursivelyCreateDirIfMissing(File directory) throws RuntimeException { - if (!directory.exists()) { - boolean dirsWereCreated = directory.mkdirs(); - if (!dirsWereCreated) { - throw new RuntimeException("Unable to recursively create directory: " + directory); - } - } - } - - - public static void dump(ZipSecureFile zip) throws Exception { - String zipname = zip.getName(); - int sep = zipname.lastIndexOf('.'); - File root = new File(zipname.substring(0, sep)); - createDirIfMissing(root); - System.out.println("Dumping to directory " + root); - - Enumeration en = zip.getEntries(); - while (en.hasMoreElements()) { - ZipArchiveEntry entry = en.nextElement(); - String name = entry.getName(); - int idx = name.lastIndexOf('/'); - if (idx != -1) { - File bs = new File(root, name.substring(0, idx)); - recursivelyCreateDirIfMissing(bs); - } - - File f = new File(root, entry.getName()); - try (final OutputStream out = new FileOutputStream(f)) { - if (entry.getName().endsWith(".xml") || entry.getName().endsWith(".vml") || entry.getName().endsWith(".rels")) { - try { - Document doc = DocumentHelper.readDocument(zip.getInputStream(entry)); - XmlObject xml = XmlObject.Factory.parse(doc, DEFAULT_XML_OPTIONS); - XmlOptions options = new XmlOptions(); - options.setSavePrettyPrint(); - xml.save(out, options); - } catch (XmlException e) { - System.err.println("Failed to parse " + entry.getName() + ", dumping raw content"); - IOUtils.copy(zip.getInputStream(entry), out); - } - } else { - IOUtils.copy(zip.getInputStream(entry), out); - } - } - } - } -} diff --git a/src/ooxml/java/org/apache/poi/xssf/dev/XSSFSave.java b/src/ooxml/java/org/apache/poi/xssf/dev/XSSFSave.java deleted file mode 100644 index 1660f452a..000000000 --- a/src/ooxml/java/org/apache/poi/xssf/dev/XSSFSave.java +++ /dev/null @@ -1,47 +0,0 @@ -/* ==================================================================== - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -==================================================================== */ - -package org.apache.poi.xssf.dev; - -import org.apache.poi.openxml4j.opc.OPCPackage; -import org.apache.poi.xssf.usermodel.XSSFWorkbook; - -import java.io.FileOutputStream; - -/** - * Utility which loads a SpreadsheetML file and saves it back. - * This is a handy tool to investigate read-write round trip safety. - * - * @author Yegor Kozlov - */ -public final class XSSFSave { - public static void main(String[] args) throws Exception { - for (int i = 0; i < args.length; i++) { - OPCPackage pkg = OPCPackage.open(args[i]); - XSSFWorkbook wb = new XSSFWorkbook(pkg); - - int sep = args[i].lastIndexOf('.'); - String outfile = args[i].substring(0, sep) + "-save.xls" + (wb.isMacroEnabled() ? "m" : "x"); - FileOutputStream out = new FileOutputStream(outfile); - wb.write(out); - out.close(); - - pkg.close(); - } - } - -} diff --git a/src/ooxml/testcases/org/apache/poi/dev/TestOOXMLLister.java b/src/ooxml/testcases/org/apache/poi/dev/TestOOXMLLister.java deleted file mode 100644 index b04548326..000000000 --- a/src/ooxml/testcases/org/apache/poi/dev/TestOOXMLLister.java +++ /dev/null @@ -1,72 +0,0 @@ -/* ==================================================================== - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - 2012 - Alfresco Software, Ltd. - Alfresco Software has modified source of this file - The details of changes as svn diff can be found in svn at location root/projects/3rd-party/src -==================================================================== */ -package org.apache.poi.dev; - -import java.io.*; - -import org.apache.poi.ooxml.dev.OOXMLLister; -import org.apache.poi.openxml4j.exceptions.InvalidFormatException; -import org.apache.poi.openxml4j.opc.OPCPackage; -import org.apache.poi.openxml4j.opc.PackageAccess; -import org.apache.poi.util.NullOutputStream; -import org.apache.poi.xssf.XSSFTestDataSamples; -import org.junit.AfterClass; -import org.junit.BeforeClass; -import org.junit.Test; - -public class TestOOXMLLister { - private static PrintStream SYSTEM_OUT; - - @BeforeClass - public static void setUp() throws UnsupportedEncodingException { - SYSTEM_OUT = System.out; - System.setOut(new PrintStream(new OutputStream() { - @Override - public void write(int b) throws IOException { - - } - }, false, "UTF-8")); - } - - @AfterClass - public static void tearDown() { - System.setOut(SYSTEM_OUT); - } - - @Test - public void testMain() throws IOException, InvalidFormatException { - File file = XSSFTestDataSamples.getSampleFile("Formatting.xlsx"); - OOXMLLister.main(new String[] {file.getAbsolutePath()}); - } - - @Test - public void testWithPrintStream() throws IOException, InvalidFormatException { - File file = XSSFTestDataSamples.getSampleFile("Formatting.xlsx"); - PrintStream nullStream = new PrintStream(new NullOutputStream(), true, "UTF-8"); - OPCPackage opc = OPCPackage.open(file.getAbsolutePath(), PackageAccess.READ); - OOXMLLister lister = new OOXMLLister(opc, nullStream); - lister.displayParts(); - lister.displayRelations(); - lister.close(); - opc.close(); - nullStream.close(); - } -} diff --git a/src/ooxml/testcases/org/apache/poi/dev/TestOOXMLPrettyPrint.java b/src/ooxml/testcases/org/apache/poi/dev/TestOOXMLPrettyPrint.java deleted file mode 100644 index 751e372a7..000000000 --- a/src/ooxml/testcases/org/apache/poi/dev/TestOOXMLPrettyPrint.java +++ /dev/null @@ -1,70 +0,0 @@ -/* ==================================================================== - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - 2012 - Alfresco Software, Ltd. - Alfresco Software has modified source of this file - The details of changes as svn diff can be found in svn at location root/projects/3rd-party/src -==================================================================== */ -package org.apache.poi.dev; - -import org.apache.poi.ooxml.dev.OOXMLPrettyPrint; -import org.apache.poi.util.TempFile; -import org.apache.poi.xssf.XSSFTestDataSamples; -import org.junit.AfterClass; -import org.junit.BeforeClass; -import org.junit.Test; - -import java.io.*; - -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; - -public class TestOOXMLPrettyPrint { - - private static PrintStream SYSTEM_OUT; - - @BeforeClass - public static void setUp() throws UnsupportedEncodingException { - SYSTEM_OUT = System.out; - System.setOut(new PrintStream(new OutputStream() { - @Override - public void write(int b) throws IOException { - - } - }, false, "UTF-8")); - } - - @AfterClass - public static void tearDown() { - System.setOut(SYSTEM_OUT); - } - - @Test - public void testMain() throws Exception { - File file = XSSFTestDataSamples.getSampleFile("Formatting.xlsx"); - File outFile = TempFile.createTempFile("Formatting", "-pretty.xlsx"); - - assertTrue(outFile.delete()); - assertFalse(outFile.exists()); - - OOXMLPrettyPrint.main(new String[] { - file.getAbsolutePath(), outFile.getAbsolutePath() - }); - - assertTrue(outFile.exists()); - assertTrue(outFile.delete()); - } -} \ No newline at end of file diff --git a/src/ooxml/testcases/org/apache/poi/dev/TestRecordGenerator.java b/src/ooxml/testcases/org/apache/poi/dev/TestRecordGenerator.java deleted file mode 100644 index 84de1f844..000000000 --- a/src/ooxml/testcases/org/apache/poi/dev/TestRecordGenerator.java +++ /dev/null @@ -1,61 +0,0 @@ -/* ==================================================================== - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - 2012 - Alfresco Software, Ltd. - Alfresco Software has modified source of this file - The details of changes as svn diff can be found in svn at location root/projects/3rd-party/src -==================================================================== */ -package org.apache.poi.dev; - -import org.apache.poi.util.TempFile; -import org.junit.Ignore; -import org.junit.Test; - -import java.io.File; - -public class TestRecordGenerator { - @Ignore("Could not get this to run, probably the dev-application does not work any more at all") - @Test - public void testNotEnoughArgs() throws Exception { - RecordGenerator.main(new String[] {}); - } - - @Ignore("Could not get this to run, probably the dev-application does not work any more at all") - @Test - public void testMainRecords() throws Exception { - File dir = TempFile.createTempDirectory("TestRecordGenerator"); - - RecordGenerator.main(new String[] { - "src/records/definitions/", - "src/records/styles/", - dir.getAbsolutePath(), - dir.getAbsolutePath(), - }); - } - - @Ignore("Could not get this to run, probably the dev-application does not work any more at all") - @Test - public void testMainTypes() throws Exception { - File dir = TempFile.createTempDirectory("TestRecordGenerator"); - - RecordGenerator.main(new String[] { - "src/types/definitions/", - "src/types/styles/", - dir.getAbsolutePath(), - dir.getAbsolutePath(), - }); - } -} \ No newline at end of file diff --git a/src/testcases/org/apache/poi/dev/RecordGenerator.java b/src/testcases/org/apache/poi/dev/RecordGenerator.java deleted file mode 100644 index 585003c52..000000000 --- a/src/testcases/org/apache/poi/dev/RecordGenerator.java +++ /dev/null @@ -1,160 +0,0 @@ - -/* ==================================================================== - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -==================================================================== */ - -package org.apache.poi.dev; - -import java.io.File; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.util.Locale; -import java.util.Properties; - -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.transform.OutputKeys; -import javax.xml.transform.Result; -import javax.xml.transform.Transformer; -import javax.xml.transform.TransformerException; -import javax.xml.transform.TransformerFactory; -import javax.xml.transform.stream.StreamResult; -import javax.xml.transform.stream.StreamSource; - -import org.apache.poi.util.XMLHelper; -import org.w3c.dom.Document; -import org.w3c.dom.Element; - -/** - * Description of the Class - * - *@author andy - *@since May 10, 2002 - */ -public class RecordGenerator { - /** - * The main program for the RecordGenerator class - * - *@param args The command line arguments - *@exception Exception Description of the Exception - */ - public static void main(String[] args) - throws Exception { - // Force load so that we don't start generating records and realise this hasn't compiled yet. - Class.forName("org.apache.poi.generator.FieldIterator"); - - if (args.length != 4) { - System.out.println("Usage:"); - System.out.println(" java org.apache.poi.hssf.util.RecordGenerator RECORD_DEFINTIONS RECORD_STYLES DEST_SRC_PATH TEST_SRC_PATH"); - } else { - generateRecords(args[0], args[1], args[2], args[3]); - } - } - - - private static void generateRecords(String defintionsDir, String recordStyleDir, String destSrcPathDir, String testSrcPathDir) - throws Exception { - File definitionsFiles[] = new File(defintionsDir).listFiles(); - if (definitionsFiles == null) { - System.err.println(defintionsDir+" is not a directory."); - return; - } - - for (File file : definitionsFiles) { - if (file.isFile() && - (file.getName().endsWith("_record.xml") || - file.getName().endsWith("_type.xml") - ) - ) { - // Get record name and package - DocumentBuilderFactory factory = XMLHelper.getDocumentBuilderFactory(); - DocumentBuilder builder = factory.newDocumentBuilder(); - Document document = builder.parse(file); - Element record = document.getDocumentElement(); - String extendstg = record.getElementsByTagName("extends").item(0).getFirstChild().getNodeValue(); - String suffix = record.getElementsByTagName("suffix").item(0).getFirstChild().getNodeValue(); - String recordName = record.getAttributes().getNamedItem("name").getNodeValue(); - String packageName = record.getAttributes().getNamedItem("package").getNodeValue(); - packageName = packageName.replace('.', '/'); - - // Generate record - String destinationPath = destSrcPathDir + "/" + packageName; - File destinationPathFile = new File(destinationPath); - if(!destinationPathFile.mkdirs()) { - throw new IOException("Could not create directory " + destinationPathFile); - } else { - System.out.println("Created destination directory: " + destinationPath); - } - String destinationFilepath = destinationPath + "/" + recordName + suffix + ".java"; - transform(file, new File(destinationFilepath), - new File(recordStyleDir + "/" + extendstg.toLowerCase(Locale.ROOT) + ".xsl")); - System.out.println("Generated " + suffix + ": " + destinationFilepath); - - // Generate test (if not already generated) - destinationPath = testSrcPathDir + "/" + packageName; - destinationPathFile = new File(destinationPath); - if(!destinationPathFile.mkdirs()) { - throw new IOException("Could not create directory " + destinationPathFile); - } else { - System.out.println("Created destination directory: " + destinationPath); - } - destinationFilepath = destinationPath + "/Test" + recordName + suffix + ".java"; - if (!new File(destinationFilepath).exists()) { - String temp = (recordStyleDir + "/" + extendstg.toLowerCase(Locale.ROOT) + "_test.xsl"); - transform(file, new File(destinationFilepath), new File(temp)); - System.out.println("Generated test: " + destinationFilepath); - } else { - System.out.println("Skipped test generation: " + destinationFilepath); - } - } - } - } - - - - /** - *

Executes an XSL transformation. This process transforms an XML input - * file into a text output file controlled by an XSLT specification.

- * - * @param in the XML input file - * @param out the text output file - * @param xslt the XSLT specification, i.e. an XSL style sheet - * @throws FileNotFoundException - * @throws TransformerException - */ - private static void transform(final File in, final File out, final File xslt) - throws FileNotFoundException, TransformerException - { - final StreamSource ss = new StreamSource(xslt); - final TransformerFactory tf = TransformerFactory.newInstance(); - final Transformer t; - try - { - t = tf.newTransformer(ss); - } - catch (TransformerException ex) - { - System.err.println("Error compiling XSL style sheet " + xslt); - throw ex; - } - final Properties p = new Properties(); - p.setProperty(OutputKeys.METHOD, "text"); - t.setOutputProperties(p); - final Result result = new StreamResult(out); - t.transform(new StreamSource(in), result); - } - -}