150 lines
6.3 KiB
Java
150 lines
6.3 KiB
Java
|
|
/* ====================================================================
|
|
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.FileReader;
|
|
import java.io.Reader;
|
|
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.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 definitionsFile = new File(defintionsDir);
|
|
|
|
for (int i = 0; i < definitionsFile.listFiles().length; i++) {
|
|
File file = definitionsFile.listFiles()[i];
|
|
if (file.isFile() &&
|
|
(file.getName().endsWith("_record.xml") ||
|
|
file.getName().endsWith("_type.xml")
|
|
)
|
|
) {
|
|
// Get record name and package
|
|
DocumentBuilderFactory factory =
|
|
DocumentBuilderFactory.newInstance();
|
|
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);
|
|
destinationPathFile.mkdirs();
|
|
String destinationFilepath = destinationPath + "/" + recordName + suffix + ".java";
|
|
transform(file, new File(destinationFilepath), new File(recordStyleDir + "/" + extendstg.toLowerCase() + ".xsl"));
|
|
System.out.println("Generated " + suffix + ": " + destinationFilepath);
|
|
|
|
// Generate test (if not already generated)
|
|
destinationPath = testSrcPathDir + "/" + packageName;
|
|
destinationPathFile = new File(destinationPath);
|
|
destinationPathFile.mkdirs();
|
|
destinationFilepath = destinationPath + "/Test" + recordName + suffix + ".java";
|
|
if (new File(destinationFilepath).exists() == false) {
|
|
String temp = (recordStyleDir + "/" + extendstg.toLowerCase() + "_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 Reader r = new FileReader(xslt);
|
|
final StreamSource ss = new StreamSource(r);
|
|
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);
|
|
}
|
|
|
|
}
|