package org.jboss.windup.config.parser; import java.util.ArrayList; import java.util.List; import org.apache.commons.lang3.StringUtils; import org.jboss.windup.config.exception.ConfigurationException; import org.jboss.windup.config.metadata.TechnologyReference; import org.jboss.windup.config.metadata.TechnologyReferenceTransformer; import org.jboss.windup.config.parser.metadata.MetadataSourceTechnologyHandler; import org.jboss.windup.config.parser.metadata.MetadataTargetTechnologyHandler; import org.jboss.windup.config.parser.xml.RuleProviderHandler; import org.w3c.dom.Element; import static org.joox.JOOX.$; /** * This produces a list of {@link TechnologyReferenceTransformer} objects. * * The format of the file is: * * <pre> * <technology-reference-transfomers> * <transform> * <sourceTechnology id="..." versionRange="..."/> * <targetTechnology id="..." versionRange="..."/> * </transform> * </technology-reference-transfomers> * </pre> * * @author <a href="mailto:jesse.sightler@gmail.com">Jesse Sightler</a> */ @NamespaceElementHandler(elementName = "technology-reference-transfomers", namespace = RuleProviderHandler.WINDUP_RULE_NAMESPACE) public class TechnologyReferenceTransformerHandler implements ElementHandler<List<TechnologyReferenceTransformer>> { public static final String TRANSFORM = "transform"; @Override public List<TechnologyReferenceTransformer> processElement(ParserContext handlerManager, Element element) throws ConfigurationException { List<TechnologyReferenceTransformer> transformers = new ArrayList<>(); List<Element> children = $(element).children().get(); for (Element child : children) { if (StringUtils.equals(TRANSFORM, child.getTagName())) { Element sourceElement = (Element)child.getElementsByTagName(MetadataSourceTechnologyHandler.METADATA_SOURCE_TECHNOLOGY_ELEMENT).item(0); TechnologyReference source = handlerManager.processElement(sourceElement); Element targetElement = (Element)child.getElementsByTagName(MetadataTargetTechnologyHandler.METADATA_TARGET_TECHNOLOGY_ELEMENT).item(0); TechnologyReference target = handlerManager.processElement(targetElement); TechnologyReferenceTransformer transformer = new TechnologyReferenceTransformer(source, target); transformers.add(transformer); } } return transformers; } }