167 lines
6.1 KiB
Java
Executable File
167 lines
6.1 KiB
Java
Executable File
/*
|
|
* Copyright (C) 2003-2004 Red Hat Inc. All Rights Reserved.
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser General Public License
|
|
* as published by the Free Software Foundation; either version 2.1 of
|
|
* the License, or (at your option) any later version.
|
|
*
|
|
* This library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with this library; if not, write to the Free Software
|
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
*
|
|
*/
|
|
package com.arsdigita.templating;
|
|
|
|
import com.arsdigita.util.cmd.CommandLine;
|
|
import com.arsdigita.util.cmd.StringSwitch;
|
|
import com.arsdigita.util.cmd.BooleanSwitch;
|
|
import com.arsdigita.util.UncheckedWrapperException;
|
|
|
|
import javax.xml.transform.Templates;
|
|
import javax.xml.transform.Transformer;
|
|
import javax.xml.transform.TransformerFactory;
|
|
import javax.xml.transform.TransformerConfigurationException;
|
|
import javax.xml.transform.TransformerException;
|
|
|
|
import javax.xml.transform.stream.StreamSource;
|
|
import javax.xml.transform.stream.StreamResult;
|
|
|
|
import java.util.Date;
|
|
import java.util.Map;
|
|
import java.util.HashMap;
|
|
|
|
import org.apache.log4j.ConsoleAppender;
|
|
import org.apache.log4j.Level;
|
|
import org.apache.log4j.Logger;
|
|
import org.apache.log4j.BasicConfigurator;
|
|
import org.apache.log4j.PatternLayout;
|
|
|
|
public class ApplyTemplates {
|
|
|
|
private static final String OPT_LOOP = "-loop";
|
|
private static final String OPT_LOG = "-log";
|
|
private static final String OPT_WARMUP = "-warmup";
|
|
private static final String OPT_VERBOSE = "-verbose";
|
|
|
|
private static final Logger s_log = Logger.getLogger(ApplyTemplates.class);
|
|
|
|
private static CommandLine s_cmd = new CommandLine(
|
|
"apply-templates",
|
|
"java com.arsdigita.templating.ApplyTemplates " +
|
|
"-loop [count] -log [loglevel] -verbose -warmup [count] Stylesheet Input Output "
|
|
);
|
|
static {
|
|
s_log.debug("Static initalizer starting...");
|
|
s_cmd.addSwitch(new StringSwitch(OPT_LOG,
|
|
"Log4j debug level",
|
|
"warn"));
|
|
s_cmd.addSwitch(new StringSwitch(OPT_LOOP,
|
|
"Number of iterations to apply xsl",
|
|
"1"));
|
|
s_cmd.addSwitch(new StringSwitch(OPT_WARMUP,
|
|
"Number of iterations to warm up on",
|
|
"0"));
|
|
s_cmd.addSwitch(new BooleanSwitch(OPT_VERBOSE,
|
|
"Display progress",
|
|
Boolean.FALSE));
|
|
s_log.debug("Static initalizer finished.");
|
|
}
|
|
|
|
public final static void main(String[] args) {
|
|
ConsoleAppender log =
|
|
new ConsoleAppender(new PatternLayout("%d{ISO8601} [%5.5t] %-5p %c{2} - %m%n"));
|
|
|
|
log.setThreshold(Level.toLevel("warn"));
|
|
BasicConfigurator.configure(log);
|
|
|
|
|
|
Map options = new HashMap();
|
|
args = s_cmd.parse(options, args);
|
|
|
|
String stylesheet = args[0];
|
|
String input = args[1];
|
|
String output = args[2];
|
|
|
|
log.setThreshold(Level.toLevel((String)options.get(OPT_LOG)));
|
|
|
|
s_log.debug("Build xml source " + new Date());
|
|
StreamSource xml = new StreamSource(input);
|
|
|
|
s_log.debug("Build xsl source " + new Date());
|
|
StreamSource xsl = new StreamSource(stylesheet);
|
|
|
|
s_log.debug("Build html dest " + new Date());
|
|
StreamResult html = new StreamResult(output);
|
|
|
|
s_log.debug("Build transformer factory " + new Date());
|
|
TransformerFactory fact = TransformerFactory.newInstance();
|
|
|
|
s_log.debug("Build templates " + new Date());
|
|
Templates templates = null;
|
|
try {
|
|
templates = fact.newTemplates(xsl);
|
|
} catch (TransformerConfigurationException tce) {
|
|
throw new UncheckedWrapperException(tce);
|
|
}
|
|
|
|
|
|
Transformer xf = null;
|
|
try {
|
|
xf = templates.newTransformer();
|
|
} catch (TransformerConfigurationException tce) {
|
|
throw new UncheckedWrapperException(tce);
|
|
}
|
|
|
|
boolean verbose = Boolean.TRUE.equals(options.get(OPT_VERBOSE));
|
|
|
|
try {
|
|
int warmup = (new Integer((String)options.get(OPT_WARMUP))).intValue();
|
|
Date start = new Date();
|
|
s_log.debug("Warming up " + start);
|
|
for (int i = 0 ; i < warmup ; i++) {
|
|
xf.setOutputProperty("encoding", "UTF-8");
|
|
xf.transform(xml,
|
|
html);
|
|
if (verbose) {
|
|
System.out.print(".");
|
|
System.out.flush();
|
|
}
|
|
}
|
|
if (warmup > 0 && verbose) {
|
|
System.out.println();
|
|
}
|
|
|
|
int loop = (new Integer((String)options.get(OPT_LOOP))).intValue();
|
|
start = new Date();
|
|
s_log.debug("Start " + start);
|
|
for (int i = 0 ; i < loop ; i++) {
|
|
xf.setOutputProperty("encoding", "UTF-8");
|
|
xf.transform(xml,
|
|
html);
|
|
if (verbose) {
|
|
System.out.print(".");
|
|
System.out.flush();
|
|
}
|
|
}
|
|
if (verbose) {
|
|
System.out.println();
|
|
}
|
|
Date end = new Date();
|
|
s_log.debug("End " + end);
|
|
|
|
long duration = end.getTime() - start.getTime();
|
|
s_log.info("Duration for " + loop + " iterations with " +
|
|
" is " + duration + " milliseconds");
|
|
} catch (TransformerException ex) {
|
|
throw new UncheckedWrapperException("cannot transform document", ex);
|
|
}
|
|
|
|
}
|
|
}
|