package org.jboss.windup.rules.apps.xml.operation.xslt; import static org.joox.JOOX.$; import java.io.File; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.Collections; import java.util.List; import java.util.UUID; import javax.inject.Inject; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.apache.commons.io.FileUtils; import org.jboss.arquillian.container.test.api.Deployment; import org.jboss.arquillian.junit.Arquillian; import org.jboss.forge.arquillian.AddonDependencies; import org.jboss.forge.arquillian.AddonDependency; import org.jboss.forge.arquillian.archive.AddonArchive; import org.jboss.forge.furnace.Furnace; import org.jboss.forge.furnace.addons.Addon; import org.jboss.forge.furnace.util.Iterators; import org.jboss.shrinkwrap.api.ShrinkWrap; import org.jboss.windup.config.loader.RuleLoaderContext; import org.jboss.windup.config.parser.ParserContext; import org.jboss.windup.config.phase.ReportGenerationPhase; import org.jboss.windup.exec.WindupProcessor; import org.jboss.windup.exec.configuration.WindupConfiguration; import org.jboss.windup.exec.rulefilters.NotPredicate; import org.jboss.windup.exec.rulefilters.RuleProviderPhasePredicate; import org.jboss.windup.graph.GraphContext; import org.jboss.windup.graph.GraphContextFactory; import org.jboss.windup.graph.service.GraphService; import org.jboss.windup.reporting.model.ClassificationModel; import org.jboss.windup.util.exception.WindupException; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import org.w3c.dom.Document; import org.w3c.dom.Element; @RunWith(Arquillian.class) public class XSLTTransformationHandlerTest { private static final String XSLT_FILE = "src/test/resources/unit/xslt.windup.xml"; @Deployment @AddonDependencies({ @AddonDependency(name = "org.jboss.windup.config:windup-config"), @AddonDependency(name = "org.jboss.windup.exec:windup-exec"), @AddonDependency(name = "org.jboss.windup.rules.apps:windup-rules-java"), @AddonDependency(name = "org.jboss.windup.rules.apps:windup-rules-xml"), @AddonDependency(name = "org.jboss.windup.config:windup-config-xml"), @AddonDependency(name = "org.jboss.windup.reporting:windup-reporting"), @AddonDependency(name = "org.jboss.forge.furnace.container:cdi") }) public static AddonArchive getDeployment() { return ShrinkWrap.create(AddonArchive.class).addBeansXML(); } @Inject private GraphContextFactory factory; @Inject private WindupProcessor processor; @Inject private Furnace furnace; @Inject private Addon addon; @Test public void testXSLTOperation() throws Exception { File fXmlFile = new File(XSLT_FILE); RuleLoaderContext loaderContext = new RuleLoaderContext(Collections.singleton(fXmlFile.toPath()), null); ParserContext parser = new ParserContext(furnace, loaderContext); parser.setAddonContainingInputXML(addon); DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); dbFactory.setNamespaceAware(true); DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); Document doc = dBuilder.parse(fXmlFile); List<Element> xsltList = $(doc).children("xslt").get(); Element firstXslt = xsltList.get(0); XSLTTransformation xsltOperation = parser.<XSLTTransformation> processElement(firstXslt); // verify xsltOperation Assert.assertEquals("XSLT Tranformed Output", xsltOperation.getDescription()); Assert.assertEquals("-test-result.html", xsltOperation.getExtension()); Assert.assertEquals("testVariable_instance", xsltOperation.getVariableName()); Assert.assertEquals("simpleXSLT.xsl", xsltOperation.getTemplate()); Element secondXslt = xsltList.get(1); xsltOperation = parser.<XSLTTransformation> processElement(secondXslt); // verify xmlfile Assert.assertEquals("XSLT Tranformed Output", xsltOperation.getDescription()); Assert.assertEquals("-test-result.html", xsltOperation.getExtension()); Assert.assertEquals(null, xsltOperation.getVariableName()); Assert.assertEquals("simpleXSLT.xsl", xsltOperation.getTemplate()); } @Test public void testWithIncludedStylesheet() throws IOException { String inputPath = "src/test/resources/xslttransform"; Path outputPath = Paths.get(FileUtils.getTempDirectory().toString(), "Windup", "windup_" + UUID.randomUUID().toString()); try (GraphContext context = factory.create()) { FileUtils.deleteDirectory(outputPath.toFile()); Files.createDirectories(outputPath); WindupConfiguration windupConfiguration = new WindupConfiguration() .setRuleProviderFilter(new NotPredicate( new RuleProviderPhasePredicate(ReportGenerationPhase.class) )) .setGraphContext(context); windupConfiguration.addInputPath(Paths.get(inputPath)); windupConfiguration.setOutputDirectory(outputPath); windupConfiguration.addDefaultUserRulesDirectory(Paths.get(inputPath)); processor.execute(windupConfiguration); GraphService<ClassificationModel> classificationService = new GraphService<>(context, ClassificationModel.class); List<ClassificationModel> classificationModels = Iterators.asList(classificationService.findAll()); Assert.assertEquals(1, classificationModels.size()); Assert.assertTrue(classificationModels.get(0).getClassification().contains("XSLT Transformed Output")); Path transformedFile = outputPath.resolve("reports").resolve("transformedxml").resolve("sample-xml-test-result.html"); Assert.assertTrue(Files.isRegularFile(transformedFile)); Assert.assertTrue(Files.size(transformedFile) > 0); } } @Test(expected = WindupException.class) public void testXSLTWithoutExtension() throws Exception { File fXmlFile = new File(XSLT_FILE); RuleLoaderContext loaderContext = new RuleLoaderContext(Collections.singleton(fXmlFile.toPath()), null); ParserContext parser = new ParserContext(furnace, loaderContext); parser.setAddonContainingInputXML(addon); DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); dbFactory.setNamespaceAware(true); DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); Document doc = dBuilder.parse(fXmlFile); List<Element> xsltList = $(doc).children("xslt").get(); Element firstXslt = xsltList.get(2); XSLTTransformation xsltOperation = parser.<XSLTTransformation> processElement(firstXslt); } @Test(expected = WindupException.class) public void testXSLTWithoutTemplate() throws Exception { File fXmlFile = new File(XSLT_FILE); RuleLoaderContext loaderContext = new RuleLoaderContext(Collections.singleton(fXmlFile.toPath()), null); ParserContext parser = new ParserContext(furnace, loaderContext); parser.setAddonContainingInputXML(addon); DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); dbFactory.setNamespaceAware(true); DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); Document doc = dBuilder.parse(fXmlFile); List<Element> xsltList = $(doc).children("xslt").get(); Element firstXslt = xsltList.get(3); XSLTTransformation xsltOperation = parser.<XSLTTransformation> processElement(firstXslt); } }