libreccm-legacy/ccm-core/src/com/arsdigita/templating/ApplyTemplates.java

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);
}
}
}