001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: */
017:
018: package org.apache.xerces.impl.xs;
019:
020: import org.apache.xerces.dom.CoreDOMImplementationImpl;
021: import org.apache.xerces.dom.DOMMessageFormatter;
022: import org.apache.xerces.impl.xs.util.StringListImpl;
023: import org.apache.xerces.xs.StringList;
024: import org.apache.xerces.xs.XSException;
025: import org.apache.xerces.xs.XSImplementation;
026: import org.apache.xerces.xs.XSLoader;
027: import org.w3c.dom.DOMImplementation;
028:
029: /**
030: * Implements XSImplementation interface that allows one to retrieve an instance of <code>XSLoader</code>.
031: * This interface should be implemented on the same object that implements
032: * DOMImplementation.
033: *
034: * @xerces.internal
035: *
036: * @author Elena Litani, IBM
037: * @version $Id: XSImplementationImpl.java 446734 2006-09-15 20:51:23Z mrglavas $
038: */
039: public class XSImplementationImpl extends CoreDOMImplementationImpl
040: implements XSImplementation {
041:
042: //
043: // Data
044: //
045:
046: // static
047:
048: /** Dom implementation singleton. */
049: static XSImplementationImpl singleton = new XSImplementationImpl();
050:
051: //
052: // Public methods
053: //
054:
055: /** NON-DOM: Obtain and return the single shared object */
056: public static DOMImplementation getDOMImplementation() {
057: return singleton;
058: }
059:
060: //
061: // DOMImplementation methods
062: //
063:
064: /**
065: * Test if the DOM implementation supports a specific "feature" --
066: * currently meaning language and level thereof.
067: *
068: * @param feature The package name of the feature to test.
069: * In Level 1, supported values are "HTML" and "XML" (case-insensitive).
070: * At this writing, org.apache.xerces.dom supports only XML.
071: *
072: * @param version The version number of the feature being tested.
073: * This is interpreted as "Version of the DOM API supported for the
074: * specified Feature", and in Level 1 should be "1.0"
075: *
076: * @return true iff this implementation is compatable with the specified
077: * feature and version.
078: */
079: public boolean hasFeature(String feature, String version) {
080:
081: return (feature.equalsIgnoreCase("XS-Loader")
082: && (version == null || version.equals("1.0")) || super
083: .hasFeature(feature, version));
084: } // hasFeature(String,String):boolean
085:
086: /* (non-Javadoc)
087: * @see org.apache.xerces.xs.XSImplementation#createXSLoader(org.apache.xerces.xs.StringList)
088: */
089: public XSLoader createXSLoader(StringList versions)
090: throws XSException {
091: XSLoader loader = new XSLoaderImpl();
092: if (versions == null) {
093: return loader;
094: }
095: for (int i = 0; i < versions.getLength(); i++) {
096: if (!versions.item(i).equals("1.0")) {
097: String msg = DOMMessageFormatter.formatMessage(
098: DOMMessageFormatter.DOM_DOMAIN,
099: "FEATURE_NOT_SUPPORTED",
100: new Object[] { versions.item(i) });
101: throw new XSException(XSException.NOT_SUPPORTED_ERR,
102: msg);
103: }
104: }
105: return loader;
106: }
107:
108: /* (non-Javadoc)
109: * @see org.apache.xerces.xs.XSImplementation#getRecognizedVersions()
110: */
111: public StringList getRecognizedVersions() {
112: StringListImpl list = new StringListImpl(
113: new String[] { "1.0" }, 1);
114: return list;
115: }
116:
117: } // class XSImplementationImpl
|