package org.kohsuke.args4j; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import org.kohsuke.args4j.spi.ConfigElement; import org.xml.sax.Attributes; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.XMLReader; import org.xml.sax.helpers.DefaultHandler; import org.xml.sax.helpers.XMLReaderFactory; /** * Metadataconfiguration. * This class holds all metadata for a class, mainly a list of @Options and @Arguments. * * @author Jan Materne */ public class Config { /** All @Options. */ public List<ConfigElement> options = new ArrayList<ConfigElement>();; /** All @Arguments. */ public List<ConfigElement> arguments = new ArrayList<ConfigElement>(); /** * SAX-Handler for reading the configuration file. * @author Jan Materne */ public class ConfigHandler extends DefaultHandler { public ConfigHandler(Config config) { super(); this.config = config; } Config config; ConfigElement currentCE; @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { if (qName.equals("option") || qName.equals("argument")) { currentCE = new ConfigElement(); currentCE.field = attributes.getValue("field"); currentCE.handler = attributes.getValue("handler"); currentCE.metavar = attributes.getValue("metavar"); currentCE.method = attributes.getValue("method"); currentCE.name = attributes.getValue("name"); currentCE.usage = attributes.getValue("usage"); currentCE.multiValued = Boolean.getBoolean(attributes.getValue("multiValued")); currentCE.required = Boolean.getBoolean(attributes.getValue("required")); if (attributes.getValue("aliases") != null) { currentCE.aliases = attributes.getValue("aliases").split(","); } else { currentCE.aliases = new String[]{}; } (qName.equals("option") ? config.options : config.arguments).add(currentCE); } } } /** * Parses a XML file and returns a Config object holding the information. * @param xml source of the xml data * @return * @throws IOException * @throws SAXException */ public static Config parse(InputSource xml) throws IOException, SAXException { Config rv = new Config(); XMLReader reader = XMLReaderFactory.createXMLReader(); ConfigHandler handler = rv.new ConfigHandler(rv); reader.setContentHandler(handler); reader.parse(xml); return rv; } }