package org.jboss.windup.rules.apps.java.xml; import static org.joox.JOOX.$; import java.nio.file.Path; import java.util.List; import org.apache.commons.io.FilenameUtils; import org.jboss.windup.config.exception.ConfigurationException; import org.jboss.windup.config.metadata.TechnologyMetadata; import org.jboss.windup.config.metadata.TechnologyReference; import org.jboss.windup.config.parser.ElementHandler; import org.jboss.windup.config.parser.NamespaceElementHandler; import org.jboss.windup.config.parser.ParserContext; import org.jboss.windup.config.parser.metadata.MetadataTechnologyHandler; import org.jboss.windup.config.parser.xml.RuleProviderHandler; import org.jboss.windup.rules.apps.java.JavaTechnologyMetadata; import org.w3c.dom.Element; /** * Handler for the <java-technology-metadata> element. * * @author <a href="mailto:jesse.sightler@gmail.com">Jesse Sightler</a> */ @NamespaceElementHandler(elementName = JavaTechnologyMetadataHandler.ELEM_NAME, namespace = RuleProviderHandler.WINDUP_RULE_NAMESPACE) public class JavaTechnologyMetadataHandler implements ElementHandler<TechnologyMetadata> { public static final String ELEM_NAME = "java-technology-metadata"; private static final String ADDITIONAL_CLASSPATH = "additional-classpath"; @Override public TechnologyMetadata processElement(ParserContext handlerManager, Element element) throws ConfigurationException { // create an anonymous class, because the technology handler is abstract. TechnologyReference technologyReference = new MetadataTechnologyHandler() { }.processElement(handlerManager, $(element).child("technology").get(0)); JavaTechnologyMetadata javaTechnologyMetadata = new JavaTechnologyMetadata(technologyReference); List<Element> children = $(element).children(ADDITIONAL_CLASSPATH).get(); for (Element child : children) { String additionalClasspath = child.getTextContent(); additionalClasspath = FilenameUtils.separatorsToSystem(additionalClasspath); Path path = handlerManager.getXmlInputPath().getParent().resolve(additionalClasspath); javaTechnologyMetadata.addAdditionalClasspath(path); } return javaTechnologyMetadata; } }