+++ /dev/null
-/* ====================================================================
- 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<PackagePart> 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 <filename>");
- 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();
- }
- }
-}
+++ /dev/null
-/* ====================================================================
- 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 [<filename> <outfilename>] ...");
- 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<? extends ZipArchiveEntry> 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);
- }
-}
+++ /dev/null
-/* ====================================================================
- 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<? extends ZipArchiveEntry> 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);
- }
- }
- }
- }
-}
+++ /dev/null
-/* ====================================================================
- 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();
- }
- }
-
-}
+++ /dev/null
-/* ====================================================================
- 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();
- }
-}
+++ /dev/null
-/* ====================================================================
- 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
+++ /dev/null
-/* ====================================================================
- 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
+++ /dev/null
-
-/* ====================================================================
- 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);
- }
- }
- }
- }
-
-
-
- /**
- * <p>Executes an XSL transformation. This process transforms an XML input
- * file into a text output file controlled by an XSLT specification.</p>
- *
- * @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);
- }
-
-}