Package org.mmisw.ont.client.util

Source Code of org.mmisw.ont.client.util.XmlBaseExtractor$MyHandler

package org.mmisw.ont.client.util;

import java.net.URI;
import java.net.URISyntaxException;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.xerces.parsers.SAXParser;
import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;


/**
* Extracts the xml:base URI from an input stream.
*
* <p>
* Code adapted from
* <a href="http://smi-protege.stanford.edu/svn/owl/trunk/src/edu/stanford/smi/protegex/owl/repository/util/XMLBaseExtractor.java?rev=10126&sortby=rev&view=log"
* >here</a>.
*
* <p>
* User: matthewhorridge<br>
* The University Of Manchester<br>
* Medical Informatics Group<br>
* Date: Sep 21, 2005<br>
* <br>
* <p/> matthew.horridge@cs.man.ac.uk<br>
* www.cs.man.ac.uk/~horridgm<br>
* <br>
*/
public class XmlBaseExtractor {

  private final Log log = LogFactory.getLog(XmlBaseExtractor.class);
 
  private InputSource is;

  private URI xmlBase;

  private String rootElementName;

  private String defaultNamespace;

  public XmlBaseExtractor(InputSource is) {
    this.is = is;
    this.xmlBase = null;
  }

  public static URI getXMLBase(InputSource is) throws Exception {
    XmlBaseExtractor xmlBaseExtractor = new XmlBaseExtractor(is);
    return xmlBaseExtractor.getXMLBase();
  }

  public URI getXMLBase() throws Exception {
    SAXParser parser = new SAXParser();
    parser.setContentHandler(new MyHandler());
    parser.parse(is);
    return xmlBase;
  }

  public String getRootElementName() {
    return rootElementName;
  }

  public String getDefaultNamespace() {
    return defaultNamespace;
  }

  private class MyHandler extends DefaultHandler {

    private boolean startElement;

    public void startPrefixMapping(String prefix, String uri)
        throws SAXException {

      if (prefix == null || prefix.equals("")) {
        defaultNamespace = uri;
      }

    }

    public void startElement(String namespaceURI, String localName,
        String qName, Attributes atts) throws SAXException {
      if (startElement == false) {
        rootElementName = qName;
        for (int i = 0; i < atts.getLength(); i++) {
          if (atts.getQName(i).equals("xml:base")) {
            URI attURL = null;
            try {
              attURL = new URI(atts.getValue(i));
            }
            catch (URISyntaxException e) {
              log.error("Exception caught", e);
            }
            xmlBase = attURL;
          }
        }
        startElement = true;
      }
     
// why this in the orginal code? (carueda)
//      else {
//        throw new SAXException("No xml:base");
//      }
    }

  }
}
TOP

Related Classes of org.mmisw.ont.client.util.XmlBaseExtractor$MyHandler

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.