blob: 005f3d63fd5883649fab5aa1c630a37549f372e0 [file] [log] [blame]
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;
}
}