package hudson.plugins.testabilityexplorer.parser.selectors; import hudson.plugins.testabilityexplorer.parser.converters.*; import java.util.ArrayList; import java.util.Arrays; import java.util.List; /** * Returns {@link ElementConverter}'s based on the given XML element tag names. * * @author reik.schatz */ public class DefaultConverterSelector implements ConverterSelector { static final String TAG_TESTABILITY = "testability"; static final String TAG_CLASS = "class"; static final String TAG_METHOD = "method"; static final String TAG_COST = "cost"; private List<NamedConverter> m_converters; /** * Initializes the {@link DefaultConverterSelector} with four {@link ElementConverter}s. The * converters to be added are of type * <ul> * <li>{@code TestabilityElementConverter} * <li>{@code ClassElementConverter} * <li>{@code MethodElementConverter} * <li>{@code CostElementConverter} * </ul> * and will be returned if you call {@link DefaultConverterSelector#getConverter(String)} with * one of these String's * <ul> * <li>{@code testability} * <li>{@code class} * <li>{@code method} * <li>{@code cost} * </ul> */ public DefaultConverterSelector() { initializeConverters( new NamedConverter(TAG_TESTABILITY, new TestabilityElementConverter()), new NamedConverter(TAG_CLASS, new ClassElementConverter()), new NamedConverter(TAG_METHOD, new MethodElementConverter()), new NamedConverter(TAG_COST, new CostElementConverter()) ); } private void initializeConverters(NamedConverter... converters) { m_converters = new ArrayList<NamedConverter>(); m_converters.addAll(Arrays.asList(converters)); } /** * Returns a {@link ElementConverter} that is mapped to the * given {@code elementName}. This {@link ConverterSelector} will * return a {@link ElementConverter} for the following {@code elementName}'s: * <ul> * <li>{@code testability} * <li>{@code class} * <li>{@code method} * <li>{@code cost} * </ul> * * If called with {@code null} or any other String, this method returns {@code nuĺl}. * * @param elementName String * @return {@link ElementConverter} or {@code null} */ public ElementConverter getConverter(String elementName) { ElementConverter converter = null; if (elementName != null && elementName.length() > 0) { for (NamedConverter namedConverter : m_converters) { String name = namedConverter.getName(); if (elementName.equals(name)) { converter = namedConverter.getConverter(); break; } } } return converter; } }