elena       2003/11/14 11:35:53

  Modified:    java/src/org/apache/xerces/dom
                        DOMImplementationSourceImpl.java
                        PSVIDOMImplementationImpl.java
               java/src/org/apache/xerces/impl/xs XMLSchemaLoader.java
  Added:       java/src/org/apache/xerces/impl/xs XSImplementationImpl.java
  Log:
  Add implemenation of xs.XSLoader and xs.XSImplementation.
  
  Revision  Changes    Path
  1.12      +28 -16    
xml-xerces/java/src/org/apache/xerces/dom/DOMImplementationSourceImpl.java
  
  Index: DOMImplementationSourceImpl.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xerces/java/src/org/apache/xerces/dom/DOMImplementationSourceImpl.java,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- DOMImplementationSourceImpl.java  13 Nov 2003 22:47:15 -0000      1.11
  +++ DOMImplementationSourceImpl.java  14 Nov 2003 19:35:53 -0000      1.12
  @@ -62,6 +62,7 @@
   import org.apache.xerces.dom3.DOMImplementationList;
   import org.apache.xerces.dom3.DOMImplementationSource;
   import org.apache.xerces.dom3.bootstrap.DOMImplementationListImpl;
  +import org.apache.xerces.impl.xs.XSImplementationImpl;
   import org.w3c.dom.DOMImplementation;
   
   /**
  @@ -102,6 +103,12 @@
           if (testImpl(impl, features)) {
               return impl;
           }
  +             // if not try the XSImplementation
  +             impl = XSImplementationImpl.getDOMImplementation();
  +             if (testImpl(impl, features)) {
  +                     return impl;
  +             }
  +        
           return null;
       }
       
  @@ -119,22 +126,27 @@
        *   features.
        */
       public DOMImplementationList getDOMImplementationList(String features) {
  -             // first check whether the CoreDOMImplementation would do
  -             DOMImplementation impl = 
CoreDOMImplementationImpl.getDOMImplementation();
  +        // first check whether the CoreDOMImplementation would do
  +        DOMImplementation impl = CoreDOMImplementationImpl.getDOMImplementation();
           DOMImplementationListImpl list = new DOMImplementationListImpl();
  -             if (testImpl(impl, features)) {
  -            list.add(impl);                  
  -             }
  -             impl = DOMImplementationImpl.getDOMImplementation();
  -             if (testImpl(impl, features)) {
  -                     list.add(impl);
  -             }
  -             impl = PSVIDOMImplementationImpl.getDOMImplementation();
  -             if (testImpl(impl, features)) {
  -                     list.add(impl);
  -             }
  -             return list;
  -     }
  +        if (testImpl(impl, features)) {
  +            list.add(impl);
  +        }
  +        impl = DOMImplementationImpl.getDOMImplementation();
  +        if (testImpl(impl, features)) {
  +            list.add(impl);
  +        }
  +        impl = PSVIDOMImplementationImpl.getDOMImplementation();
  +        if (testImpl(impl, features)) {
  +            list.add(impl);
  +        }
  +
  +        impl = XSImplementationImpl.getDOMImplementation();
  +        if (testImpl(impl, features)) {
  +            list.add(impl);
  +        }
  +        return list;
  +    }
   
       boolean testImpl(DOMImplementation impl, String features) {
          
  
  
  
  1.3       +2 -2      
xml-xerces/java/src/org/apache/xerces/dom/PSVIDOMImplementationImpl.java
  
  Index: PSVIDOMImplementationImpl.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xerces/java/src/org/apache/xerces/dom/PSVIDOMImplementationImpl.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- PSVIDOMImplementationImpl.java    19 Nov 2002 01:41:36 -0000      1.2
  +++ PSVIDOMImplementationImpl.java    14 Nov 2003 19:35:53 -0000      1.3
  @@ -116,7 +116,7 @@
        */
       public boolean hasFeature(String feature, String version) {
           return super.hasFeature(feature, version) ||
  -               feature.equalsIgnoreCase("PSVI");
  +               feature.equalsIgnoreCase("psvi");
       } // hasFeature(String,String):boolean
       
       /**
  
  
  
  1.20      +327 -36   
xml-xerces/java/src/org/apache/xerces/impl/xs/XMLSchemaLoader.java
  
  Index: XMLSchemaLoader.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xerces/java/src/org/apache/xerces/impl/xs/XMLSchemaLoader.java,v
  retrieving revision 1.19
  retrieving revision 1.20
  diff -u -r1.19 -r1.20
  --- XMLSchemaLoader.java      7 Nov 2003 00:26:18 -0000       1.19
  +++ XMLSchemaLoader.java      14 Nov 2003 19:35:53 -0000      1.20
  @@ -57,47 +57,64 @@
   
   package org.apache.xerces.impl.xs;
   
  -import org.apache.xerces.xni.parser.XMLComponent;
  -import org.apache.xerces.xni.parser.XMLComponentManager;
  -import org.apache.xerces.xni.parser.XMLConfigurationException;
  -import org.apache.xerces.xni.parser.XMLErrorHandler;
  -import org.apache.xerces.xni.parser.XMLEntityResolver;
  -import org.apache.xerces.xni.parser.XMLInputSource;
  -import org.apache.xerces.xni.XNIException;
  -import org.apache.xerces.xni.grammars.XMLGrammarLoader;
  -import org.apache.xerces.xni.grammars.XMLGrammarDescription;
  -import org.apache.xerces.xni.grammars.XMLGrammarPool;
  -import org.apache.xerces.xni.grammars.Grammar;
  -import org.xml.sax.InputSource;
  +import java.io.BufferedInputStream;
  +import java.io.File;
  +import java.io.FileInputStream;
  +import java.io.FileNotFoundException;
  +import java.io.IOException;
  +import java.io.InputStream;
  +import java.io.Reader;
  +import java.io.StringReader;
  +import java.util.Hashtable;
  +import java.util.Locale;
  +import java.util.StringTokenizer;
  +import java.util.Vector;
   
  +import org.apache.xerces.dom.DOMErrorImpl;
  +import org.apache.xerces.dom.DOMMessageFormatter;
  +import org.apache.xerces.dom.DOMStringListImpl;
  +import org.apache.xerces.dom3.DOMConfiguration;
  +import org.apache.xerces.dom3.DOMError;
  +import org.apache.xerces.dom3.DOMErrorHandler;
  +import org.apache.xerces.dom3.DOMStringList;
  +import org.apache.xerces.impl.Constants;
  +import org.apache.xerces.impl.XMLEntityManager;
   import org.apache.xerces.impl.XMLErrorReporter;
   import org.apache.xerces.impl.dv.InvalidDatatypeValueException;
   import org.apache.xerces.impl.xs.models.CMBuilder;
  +import org.apache.xerces.impl.xs.models.CMNodeFactory;
   import org.apache.xerces.impl.xs.traversers.XSDHandler;
  -import org.apache.xerces.impl.Constants;
  -import org.apache.xerces.impl.XMLEntityManager;
  +import org.apache.xerces.util.DOMErrorHandlerWrapper;
  +import org.apache.xerces.util.DefaultErrorHandler;
   import org.apache.xerces.util.SymbolTable;
   import org.apache.xerces.util.XMLSymbols;
  -import org.apache.xerces.util.DefaultErrorHandler;
  -
  -import java.util.Locale;
  -import java.util.Hashtable;
  -import java.util.StringTokenizer;
  -import java.io.IOException;
  -import java.io.Reader;
  -import java.io.InputStream;
  -import java.io.BufferedInputStream;
  -import java.io.File;
  -import java.io.FileInputStream;
  -import java.io.FileNotFoundException;
  -import java.util.Vector;
  -import org.apache.xerces.impl.xs.models.CMNodeFactory;
  +import org.apache.xerces.xni.XNIException;
  +import org.apache.xerces.xni.grammars.Grammar;
  +import org.apache.xerces.xni.grammars.XMLGrammarDescription;
  +import org.apache.xerces.xni.grammars.XMLGrammarLoader;
  +import org.apache.xerces.xni.grammars.XMLGrammarPool;
  +import org.apache.xerces.xni.grammars.XSGrammar;
  +import org.apache.xerces.xni.parser.XMLComponent;
  +import org.apache.xerces.xni.parser.XMLComponentManager;
  +import org.apache.xerces.xni.parser.XMLConfigurationException;
  +import org.apache.xerces.xni.parser.XMLEntityResolver;
  +import org.apache.xerces.xni.parser.XMLErrorHandler;
  +import org.apache.xerces.xni.parser.XMLInputSource;
  +import org.apache.xerces.xs.DOMInputList;
  +import org.apache.xerces.xs.StringList;
  +import org.apache.xerces.xs.XSLoader;
  +import org.apache.xerces.xs.XSModel;
  +import org.w3c.dom.DOMException;
  +import org.w3c.dom.ls.DOMInput;
  +import org.xml.sax.InputSource;
   
   /**
  - * This class implements XMLGrammarLoader.  It is designed to interact
  - * either with a proxy for a user application which wants to preparse schemas,
  - * or with our own Schema validator.  It is hoped that none of these "external"
  - * classes will therefore need to communicate directly
  + * This class implements xni.grammars.XMLGrammarLoader.
  + * It also serves as implementation of xs.XSLoader interface and DOMConfiguration 
interface.
  + * 
  + * This class is designed to interact either with a proxy for a user application 
  + * which wants to preparse schemas, or with our own Schema validator.  
  + * It is hoped that none of these "external" classes will therefore need to 
communicate directly
    * with XSDHandler in future.
    * <p>This class only knows how to make XSDHandler do its thing.
    * The caller must ensure that all its properties (schemaLocation, JAXPSchemaSource
  @@ -107,7 +124,9 @@
    * @version $Id$
    */
   
  -public class XMLSchemaLoader implements XMLGrammarLoader, XMLComponent {
  +public class XMLSchemaLoader implements XMLGrammarLoader, XMLComponent,
  +                                        // XML Component API 
  +                                        XSLoader, DOMConfiguration {
   
       // Feature identifiers:
   
  @@ -210,6 +229,10 @@
       private CMBuilder fCMBuilder;
       // boolean that tells whether we've tested the JAXP property.
       private boolean fJAXPProcessed = false;
  +    
  +    private DOMStringList fRecognizedParameters = null;
  +     /** DOM L3 error handler */
  +     private DOMErrorHandlerWrapper fErrorHandler = null;
   
   
       // containers
  @@ -978,8 +1001,276 @@
                        }
                }
        }
  -     
  -     
  +             
  +
  +    /* (non-Javadoc)
  +     * @see org.apache.xerces.xs.XSLoader#getConfig()
  +     */
  +    public DOMConfiguration getConfig() {
  +        return this;
  +    }
  +
  +    /* (non-Javadoc)
  +     * @see org.apache.xerces.xs.XSLoader#load(org.w3c.dom.ls.DOMInput)
  +     */
  +    public XSModel load(DOMInput is) {
  +        try {
  +            Grammar g = loadGrammar(dom2xmlInputSource(is));
  +            return ((XSGrammar) g).toXSModel();
  +        } catch (Exception e) {
  +            if (fErrorHandler != null) {
  +                DOMErrorImpl error = new DOMErrorImpl();
  +                error.fException = e;
  +                error.fMessage = e.getMessage();
  +                error.fSeverity = DOMError.SEVERITY_FATAL_ERROR;
  +                fErrorHandler.getErrorHandler().handleError(error);
  +            }
  +            return null;
  +        }
  +    }
  +
  +    /* (non-Javadoc)
  +     * @see 
org.apache.xerces.xs.XSLoader#loadInputList(org.apache.xerces.xs.DOMInputList)
  +     */
  +    public XSModel loadInputList(DOMInputList is) {
  +        int length = is.getLength();
  +        if (length == 0) {
  +            return null;
  +        }
  +        SchemaGrammar[] gs = new SchemaGrammar[length];
  +        for (int i = 0; i < length; i++) {
  +            try {
  +                gs[i] = (SchemaGrammar) loadGrammar(dom2xmlInputSource(is.item(i)));
  +            } catch (Exception e) {
  +                if (fErrorHandler != null) {
  +                    DOMErrorImpl error = new DOMErrorImpl();
  +                    error.fException = e;
  +                    error.fMessage = e.getMessage();
  +                    error.fSeverity = DOMError.SEVERITY_FATAL_ERROR;
  +                    fErrorHandler.getErrorHandler().handleError(error);
  +                }
  +                return null;
  +            }
  +        }
  +        return new XSModelImpl(gs);
  +    }
  +
  +    /* (non-Javadoc)
  +     * @see org.apache.xerces.xs.XSLoader#loadURI(java.lang.String)
  +     */
  +    public XSModel loadURI(String uri) {
  +     try {
  +                     Grammar g = loadGrammar(new XMLInputSource(null, uri, null));
  +                     return ((XSGrammar)g).toXSModel();
  +     }
  +     catch (Exception e){
  +                     if (fErrorHandler != null) {
  +                             DOMErrorImpl error = new DOMErrorImpl();
  +                             error.fException = e;
  +                             error.fMessage = e.getMessage();
  +                             error.fSeverity = DOMError.SEVERITY_FATAL_ERROR;
  +                             fErrorHandler.getErrorHandler().handleError(error);
  +                     }
  +             return null;
  +     }
  +    }
  +
  +    /* (non-Javadoc)
  +     * @see 
org.apache.xerces.xs.XSLoader#loadURIList(org.apache.xerces.xs.StringList)
  +     */
  +    public XSModel loadURIList(StringList uriList) {
  +        int length = uriList.getLength();
  +        if (length == 0) {
  +            return null;
  +        }
  +        SchemaGrammar[] gs = new SchemaGrammar[length];
  +        for (int i = 0; i < length; i++) {
  +            try {
  +                gs[i] =
  +                    (SchemaGrammar) loadGrammar(new XMLInputSource(null, 
uriList.item(i), null));
  +            } catch (Exception e) {
  +                if (fErrorHandler != null) {
  +                    DOMErrorImpl error = new DOMErrorImpl();
  +                    error.fException = e;
  +                    error.fMessage = e.getMessage();
  +                    error.fSeverity = DOMError.SEVERITY_FATAL_ERROR;
  +                    fErrorHandler.getErrorHandler().handleError(error);
  +                }
  +                return null;
  +            }
  +        }
  +        return new XSModelImpl(gs);
  +    }
  +
  +    /* (non-Javadoc)
  +     * @see 
org.apache.xerces.dom3.DOMConfiguration#canSetParameter(java.lang.String, 
java.lang.Object)
  +     */
  +    public boolean canSetParameter(String name, Object value) {
  +             if(value instanceof Boolean){
  +                     boolean state = ((Boolean)value).booleanValue();
  +                     if (name.equals(Constants.DOM_VALIDATE) ||
  +                         name.equals(SCHEMA_FULL_CHECKING) ||
  +                         name.equals(CONTINUE_AFTER_FATAL_ERROR) ||
  +                         name.equals(ALLOW_JAVA_ENCODINGS) ||
  +                         name.equals(STANDARD_URI_CONFORMANT_FEATURE)){
  +                             return true;
  +
  +                     }
  +                     return false;                   
  +             }
  +             if (name.equals(Constants.DOM_ERROR_HANDLER)||
  +                 name.equals(SYMBOL_TABLE) ||
  +                     name.equals(ERROR_REPORTER) ||
  +                     name.equals(ERROR_HANDLER) ||
  +                     name.equals(ENTITY_RESOLVER) ||
  +                     name.equals(XMLGRAMMAR_POOL) ||
  +                     name.equals(SCHEMA_LOCATION) ||
  +                     name.equals(SCHEMA_NONS_LOCATION) ||
  +                     name.equals(JAXP_SCHEMA_SOURCE)){
  +                             return true;
  +             }
  +        return false;
  +    }
  +
  +    /* (non-Javadoc)
  +     * @see org.apache.xerces.dom3.DOMConfiguration#getParameter(java.lang.String)
  +     */
  +    public Object getParameter(String name) throws DOMException {
  +             if (name.equals(Constants.DOM_ERROR_HANDLER)){
  +                     if (fErrorHandler != null){
  +                             return fErrorHandler.getErrorHandler();
  +                     }
  +             }
  +        try {
  +            boolean feature = getFeature(name);
  +            return (feature) ? Boolean.TRUE : Boolean.FALSE;
  +        } catch (Exception e) {
  +            Object property;
  +            try {
  +                property = getProperty(name);
  +                return property;
  +            } catch (Exception ex) {
  +                String msg =
  +                    DOMMessageFormatter.formatMessage(
  +                        DOMMessageFormatter.DOM_DOMAIN,
  +                        "FEATURE_NOT_SUPPORTED",
  +                        new Object[] { name });
  +                throw new DOMException(DOMException.NOT_SUPPORTED_ERR, msg);
  +            }
  +        }
  +    }
  +
  +    /* (non-Javadoc)
  +     * @see org.apache.xerces.dom3.DOMConfiguration#getParameterNames()
  +     */
  +    public DOMStringList getParameterNames() {
  +        if (fRecognizedParameters == null){
  +             Vector v = new Vector();
  +                     v.add("validate");
  +                     v.add(SYMBOL_TABLE);
  +                     v.add(ERROR_REPORTER);
  +                     v.add(ERROR_HANDLER);
  +                     v.add(ENTITY_RESOLVER);
  +                     v.add(XMLGRAMMAR_POOL);
  +                     v.add(SCHEMA_LOCATION);
  +                     v.add(SCHEMA_NONS_LOCATION);
  +                     v.add(JAXP_SCHEMA_SOURCE);
  +                     v.add(SCHEMA_FULL_CHECKING);
  +                     v.add(CONTINUE_AFTER_FATAL_ERROR);
  +                     v.add(ALLOW_JAVA_ENCODINGS);
  +                     v.add(STANDARD_URI_CONFORMANT_FEATURE);
  +             fRecognizedParameters = new DOMStringListImpl(v);       
  +        }
  +        return fRecognizedParameters;
  +    }
  +
  +    /* (non-Javadoc)
  +     * @see org.apache.xerces.dom3.DOMConfiguration#setParameter(java.lang.String, 
java.lang.Object)
  +     */
  +    public void setParameter(String name, Object value) throws DOMException {
  +        if (value instanceof Boolean) {
  +            boolean state = ((Boolean) value).booleanValue();
  +            if (name.equals("validate") && state) {
  +                return;
  +            }
  +            try {
  +                setFeature(name, state);
  +            } catch (Exception e) {
  +                String msg =
  +                    DOMMessageFormatter.formatMessage(
  +                        DOMMessageFormatter.DOM_DOMAIN,
  +                        "FEATURE_NOT_SUPPORTED",
  +                        new Object[] { name });
  +                throw new DOMException(DOMException.NOT_SUPPORTED_ERR, msg);
  +            }
  +            return;
  +        }
  +        if (name.equals(Constants.DOM_ERROR_HANDLER)) {
  +            if (value instanceof DOMErrorHandler) {
  +                try {
  +                    fErrorHandler = new DOMErrorHandlerWrapper((DOMErrorHandler) 
value);
  +                    setErrorHandler(fErrorHandler);
  +                } catch (XMLConfigurationException e) {
  +                }
  +            } else {
  +                // REVISIT: type mismatch
  +                String msg =
  +                    DOMMessageFormatter.formatMessage(
  +                        DOMMessageFormatter.DOM_DOMAIN,
  +                        "FEATURE_NOT_SUPPORTED",
  +                        new Object[] { name });
  +                throw new DOMException(DOMException.NOT_SUPPORTED_ERR, msg);
  +            }
  +            return;
  +
  +        }
  +
  +        try {
  +            setProperty(name, value);
  +        } catch (Exception ex) {
  +
  +            String msg =
  +                DOMMessageFormatter.formatMessage(
  +                    DOMMessageFormatter.DOM_DOMAIN,
  +                    "FEATURE_NOT_SUPPORTED",
  +                    new Object[] { name });
  +            throw new DOMException(DOMException.NOT_SUPPORTED_ERR, msg);
  +
  +        }
  +
  +    }
  +    
  +     private XMLInputSource dom2xmlInputSource(DOMInput is) {
  +             // need to wrap the DOMInput with an XMLInputSource
  +             XMLInputSource xis = null;
  +             // if there is a string data, use a StringReader
  +             // according to DOM, we need to treat such data as "UTF-16".
  +             if (is.getStringData() != null) {
  +                     xis = new XMLInputSource(is.getPublicId(), is.getSystemId(),
  +                                                                      
is.getBaseURI(), new StringReader(is.getStringData()),
  +                                                                      "UTF-16");
  +             }
  +             // check whether there is a Reader
  +             // according to DOM, we need to treat such reader as "UTF-16".
  +             else if (is.getCharacterStream() != null) {
  +                     xis = new XMLInputSource(is.getPublicId(), is.getSystemId(),
  +                                                                      
is.getBaseURI(), is.getCharacterStream(),
  +                                                                      "UTF-16");
  +             }
  +             // check whether there is an InputStream
  +             else if (is.getByteStream() != null) {
  +                     xis = new XMLInputSource(is.getPublicId(), is.getSystemId(),
  +                                                                      
is.getBaseURI(), is.getByteStream(),
  +                                                                      
is.getEncoding());
  +             }
  +             // otherwise, just use the public/system/base Ids
  +             else {
  +                     xis = new XMLInputSource(is.getPublicId(), is.getSystemId(),
  +                                                                      
is.getBaseURI());
  +             }
  +
  +             return xis;
  +     }
   
   } // XMLGrammarLoader
   
  
  
  
  1.1                  
xml-xerces/java/src/org/apache/xerces/impl/xs/XSImplementationImpl.java
  
  Index: XSImplementationImpl.java
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   *
   * Copyright (c) 2003 The Apache Software Foundation.  All rights 
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer. 
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:  
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Xerces" and "Apache Software Foundation" must
   *    not be used to endorse or promote products derived from this
   *    software without prior written permission. For written 
   *    permission, please contact [EMAIL PROTECTED]
   *
   * 5. Products derived from this software may not be called "Apache",
   *    nor may "Apache" appear in their name, without prior written
   *    permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation and was
   * originally based on software copyright (c) 2003, International
   * Business Machines, Inc., http://www.apache.org.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  
  package org.apache.xerces.impl.xs;
  
  import org.apache.xerces.dom.CoreDOMImplementationImpl;
  import org.apache.xerces.dom.DOMMessageFormatter;
  import org.apache.xerces.impl.xs.util.StringListImpl;
  import org.apache.xerces.xs.StringList;
  import org.apache.xerces.xs.XSException;
  import org.apache.xerces.xs.XSImplementation;
  import org.apache.xerces.xs.XSLoader;
  import org.w3c.dom.DOMImplementation;
  
  
  /**
   * Implements XSImplementation interface that allows one to retrieve an instance of 
<code>XSLoader</code>. 
   * This interface should be implemented on the same object that implements 
   * DOMImplementation.
   */
  public class XSImplementationImpl extends CoreDOMImplementationImpl 
                                                                  implements 
XSImplementation {
  
      //
      // Data
      //
  
      // static
  
      /** Dom implementation singleton. */
      static XSImplementationImpl singleton = new XSImplementationImpl();
  
      //
      // Public methods
      //
  
      /** NON-DOM: Obtain and return the single shared object */
      public static DOMImplementation getDOMImplementation() {
          return singleton;
      }  
  
      //
      // DOMImplementation methods
      //
  
      /** 
       * Test if the DOM implementation supports a specific "feature" --
       * currently meaning language and level thereof.
       * 
       * @param feature      The package name of the feature to test.
       * In Level 1, supported values are "HTML" and "XML" (case-insensitive).
       * At this writing, org.apache.xerces.dom supports only XML.
       *
       * @param version      The version number of the feature being tested.
       * This is interpreted as "Version of the DOM API supported for the
       * specified Feature", and in Level 1 should be "1.0"
       *
       * @return    true iff this implementation is compatable with the specified
       * feature and version.
       */
      public boolean hasFeature(String feature, String version) {
        
          return (feature.equalsIgnoreCase("XS-Loader") && (version == null || 
version.equals("1.0")) ||
                super.hasFeature(feature, version));
      } // hasFeature(String,String):boolean
      
  
  
      /* (non-Javadoc)
       * @see 
org.apache.xerces.xs.XSImplementation#createXSLoader(org.apache.xerces.xs.StringList)
       */
      public XSLoader createXSLoader(StringList versions) throws XSException {
        XSLoader loader = new XMLSchemaLoader();
        if (versions == null){
                        return loader;
        }
        for (int i=0; i<versions.getLength();i++){
                if (!versions.item(i).equals("1.0")){
                                String msg =
                                        DOMMessageFormatter.formatMessage(
                                                DOMMessageFormatter.DOM_DOMAIN,
                                                "FEATURE_NOT_SUPPORTED",
                                                new Object[] { versions.item(i) });
                                throw new XSException(XSException.NOT_SUPPORTED_ERR, 
msg);
                }
        }
        return loader;
      }
  
      /* (non-Javadoc)
       * @see org.apache.xerces.xs.XSImplementation#getRecognizedVersions()
       */
      public StringList getRecognizedVersions() {
          StringListImpl list = new StringListImpl(new String[]{"1.0"}, 1);
          return null;
      }
  
  } // class XSImplementationImpl
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to