package betsy.common.tasks;
import java.nio.file.Path;
import betsy.common.util.FileTypes;
import org.apache.tools.ant.taskdefs.XSLTProcess;
public class XSLTTasks {
public static void transform(Path xslt, Path input, Path output) {
createXSLTProcess(xslt, input, output).execute();
}
public static void transform(Path xslt, Path input, Path output, String key, String value) {
XSLTProcess transform = createXSLTProcess(xslt, input, output);
// key/value are passed to XSL script
XSLTProcess.Param param = transform.createParam();
param.setName(key);
param.setExpression(value);
transform.execute();
}
private static XSLTProcess createXSLTProcess(Path xslt, Path input, Path output) {
FileTasks.assertFile(xslt);
FileTasks.assertFile(input);
if (output.toAbsolutePath().toString().equals(input.toAbsolutePath().toString())) {
throw new IllegalStateException("Cannot have the same input as output");
}
FileTasks.assertFileExtension(xslt, FileTypes.XSL);
XSLTProcess transform = new XSLTProcess();
transform.setStyle(xslt.toString());
transform.setIn(input.toFile());
transform.setOut(output.toFile());
transform.setTaskName("xslt");
transform.setProject(AntUtil.builder().getProject());
transform.setProcessor("trax");
transform.createFactory().setName("net.sf.saxon.TransformerFactoryImpl");
return transform;
}
}