content: /*
   *  This file is part of AndroidIDE.
   *
   *  AndroidIDE is free software: you can redistribute it and/or modify
   *  it under the terms of the GNU General Public License as published by
   *  the Free Software Foundation, either version 3 of the License, or
   *  (at your option) any later version.
   *
   *  AndroidIDE is distributed in the hope that it will be useful,
   *  but WITHOUT ANY WARRANTY; without even the implied warranty of
   *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   *  GNU General Public License for more details.
   *
   *  You should have received a copy of the GNU General Public License
   *   along with AndroidIDE.  If not, see <https://www.gnu.org/licenses/>.
   */
  
  /*
   * reserved comment block
   * DO NOT REMOVE OR ALTER!
   */
  /*
   * Copyright 1999-2004 The Apache Software Foundation.
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *      http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  
  package jaxp.sun.org.apache.xerces.internal.parsers;
  
  import java.io.IOException;
  
  import jaxp.sun.org.apache.xerces.internal.impl.Constants;
  import jaxp.sun.org.apache.xerces.internal.utils.XMLSecurityManager;
  import jaxp.sun.org.apache.xerces.internal.utils.XMLSecurityPropertyManager;
  import jaxp.sun.org.apache.xerces.internal.xni.XNIException;
  import jaxp.sun.org.apache.xerces.internal.xni.parser.XMLInputSource;
  import jaxp.sun.org.apache.xerces.internal.xni.parser.XMLParserConfiguration;
  
  import org.xml.sax.SAXNotSupportedException;
  import org.xml.sax.SAXNotRecognizedException;
  
  /**
   * Base class of all XML-related parsers.
   * <p>
   * In addition to the features and properties recognized by the parser
   * configuration, this parser recognizes these additional features and
   * properties:
   * <ul>
   * <li>Properties
   *  <ul>
   *   <li>http://apache.org/xml/properties/internal/error-handler</li>
   *   <li>http://apache.org/xml/properties/internal/entity-resolver</li>
   *  </ul>
   * </ul>
   *
   * @author Arnaud  Le Hors, IBM
   * @author Andy Clark, IBM
   *
   * @version $Id: XMLParser.java,v 1.5 2007/07/20 14:11:21 spericas Exp $
   */
  public abstract class XMLParser {
  
      //
      // Constants
      //
  
      // properties
  
      /** Property identifier: entity resolver. */
      protected static final String ENTITY_RESOLVER =
          Constants.XERCES_PROPERTY_PREFIX + Constants.ENTITY_RESOLVER_PROPERTY;
  
      /** Property identifier: error handler. */
      protected static final String ERROR_HANDLER =
          Constants.XERCES_PROPERTY_PREFIX + Constants.ERROR_HANDLER_PROPERTY;
  
      /** Recognized properties. */
      private static final String[] RECOGNIZED_PROPERTIES = {
          ENTITY_RESOLVER,
          ERROR_HANDLER,
      };
  
      //
      // Data
      //
  
      /** The parser configuration. */
      protected XMLParserConfiguration fConfiguration;
  
      /** The XML Security Manager. */
      XMLSecurityManager securityManager;
  
      /** The XML Security Property Manager. */
      XMLSecurityPropertyManager securityPropertyManager;
  
  
      //
      // Constructors
      //
  
      /**
       * Query the state of a feature.
       */
      public boolean getFeature(String featureId)
              throws SAXNotSupportedException, SAXNotRecognizedException {
          return fConfiguration.getFeature(featureId);
  
      }
  
      /**
       * Default Constructor.
       */
      protected XMLParser(XMLParserConfiguration config) {
  
          // save configuration
          fConfiguration = config;
  
          // add default recognized properties
          fConfiguration.addRecognizedProperties(RECOGNIZED_PROPERTIES);
  
      } // <init>(XMLParserConfiguration)
  
      //
      // Public methods
      //
  
      /**
       * parse
       *
       * @param inputSource
       *
       * @exception XNIException
       * @exception java.io.IOException
       */
      public void parse(XMLInputSource inputSource)
          throws XNIException, IOException {
          // null indicates that the parser is called directly, initialize them
          if (securityManager == null) {
              securityManager = new XMLSecurityManager(true);
              fConfiguration.setProperty(Constants.SECURITY_MANAGER, securityManager);
          }
          if (securityPropertyManager == null) {
              securityPropertyManager = new XMLSecurityPropertyManager();
              fConfiguration.setProperty(Constants.XML_SECURITY_PROPERTY_MANAGER, securityPropertyManager);
          }
  
          reset();
          fConfiguration.parse(inputSource);
  
      } // parse(XMLInputSource)
  
      //
      // Protected methods
      //
  
      /**
       * reset all components before parsing
       */
      protected void reset() throws XNIException {
      } // reset()
  
  } // class XMLParser
  