Package org.kohsuke.args4j

Source Code of org.kohsuke.args4j.Config

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;
  }

}
TOP

Related Classes of org.kohsuke.args4j.Config

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.