001 /*
002 * Licensed to the Apache Software Foundation (ASF) under one
003 * or more contributor license agreements. See the NOTICE file
004 * distributed with this work for additional information
005 * regarding copyright ownership. The ASF licenses this file
006 * to you under the Apache License, Version 2.0 (the "License");
007 * you may not use this file except in compliance with the License.
008 * You may obtain a copy of the License at
009 *
010 * http://www.apache.org/licenses/LICENSE-2.0
011 *
012 * Unless required by applicable law or agreed to in writing, software
013 * distributed under the License is distributed on an "AS IS" BASIS,
014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
015 * See the License for the specific language governing permissions and
016 * limitations under the License.
017 */
018
019 package org.apache.xalan.extensions;
020
021 import java.util.Iterator;
022 import javax.xml.XMLConstants;
023 import javax.xml.namespace.NamespaceContext;
024 import org.apache.xalan.res.XSLMessages;
025 import org.apache.xalan.res.XSLTErrorResources;
026
027 /**
028 * A sample implementation of NamespaceContext, with support for
029 * EXSLT extension functions and Java extension functions.
030 */
031 public class ExtensionNamespaceContext implements NamespaceContext
032 {
033 public static final String EXSLT_PREFIX = "exslt";
034 public static final String EXSLT_URI = "http://exslt.org/common";
035 public static final String EXSLT_MATH_PREFIX = "math";
036 public static final String EXSLT_MATH_URI = "http://exslt.org/math";
037 public static final String EXSLT_SET_PREFIX = "set";
038 public static final String EXSLT_SET_URI = "http://exslt.org/sets";
039 public static final String EXSLT_STRING_PREFIX = "str";
040 public static final String EXSLT_STRING_URI = "http://exslt.org/strings";
041 public static final String EXSLT_DATETIME_PREFIX = "datetime";
042 public static final String EXSLT_DATETIME_URI = "http://exslt.org/dates-and-times";
043 public static final String EXSLT_DYNAMIC_PREFIX = "dyn";
044 public static final String EXSLT_DYNAMIC_URI = "http://exslt.org/dynamic";
045 public static final String JAVA_EXT_PREFIX = "java";
046 public static final String JAVA_EXT_URI = "http://xml.apache.org/xalan/java";
047
048 /**
049 * Return the namespace uri for a given prefix
050 */
051 public String getNamespaceURI(String prefix)
052 {
053 if (prefix == null)
054 throw new IllegalArgumentException(
055 XSLMessages.createMessage(
056 XSLTErrorResources.ER_NAMESPACE_CONTEXT_NULL_PREFIX, null));
057
058 if (prefix.equals(XMLConstants.DEFAULT_NS_PREFIX))
059 return XMLConstants.NULL_NS_URI;
060 else if (prefix.equals(XMLConstants.XML_NS_PREFIX))
061 return XMLConstants.XML_NS_URI;
062 else if (prefix.equals(XMLConstants.XMLNS_ATTRIBUTE))
063 return XMLConstants.XMLNS_ATTRIBUTE_NS_URI;
064 else if (prefix.equals(EXSLT_PREFIX))
065 return EXSLT_URI;
066 else if (prefix.equals(EXSLT_MATH_PREFIX))
067 return EXSLT_MATH_URI;
068 else if (prefix.equals(EXSLT_SET_PREFIX))
069 return EXSLT_SET_URI;
070 else if (prefix.equals(EXSLT_STRING_PREFIX))
071 return EXSLT_STRING_URI;
072 else if (prefix.equals(EXSLT_DATETIME_PREFIX))
073 return EXSLT_DATETIME_URI;
074 else if (prefix.equals(EXSLT_DYNAMIC_PREFIX))
075 return EXSLT_DYNAMIC_URI;
076 else if (prefix.equals(JAVA_EXT_PREFIX))
077 return JAVA_EXT_URI;
078 else
079 return XMLConstants.NULL_NS_URI;
080 }
081
082 /**
083 * Return the prefix for a given namespace uri.
084 */
085 public String getPrefix(String namespace)
086 {
087 if (namespace == null)
088 throw new IllegalArgumentException(
089 XSLMessages.createMessage(
090 XSLTErrorResources.ER_NAMESPACE_CONTEXT_NULL_NAMESPACE, null));
091
092 if (namespace.equals(XMLConstants.XML_NS_URI))
093 return XMLConstants.XML_NS_PREFIX;
094 else if (namespace.equals(XMLConstants.XMLNS_ATTRIBUTE_NS_URI))
095 return XMLConstants.XMLNS_ATTRIBUTE;
096 else if (namespace.equals(EXSLT_URI))
097 return EXSLT_PREFIX;
098 else if (namespace.equals(EXSLT_MATH_URI))
099 return EXSLT_MATH_PREFIX;
100 else if (namespace.equals(EXSLT_SET_URI))
101 return EXSLT_SET_PREFIX;
102 else if (namespace.equals(EXSLT_STRING_URI))
103 return EXSLT_STRING_PREFIX;
104 else if (namespace.equals(EXSLT_DATETIME_URI))
105 return EXSLT_DATETIME_PREFIX;
106 else if (namespace.equals(EXSLT_DYNAMIC_URI))
107 return EXSLT_DYNAMIC_PREFIX;
108 else if (namespace.equals(JAVA_EXT_URI))
109 return JAVA_EXT_PREFIX;
110 else
111 return null;
112 }
113
114 public Iterator getPrefixes(String namespace)
115 {
116 final String result = getPrefix(namespace);
117
118 return new Iterator () {
119
120 private boolean isFirstIteration = (result != null);
121
122 public boolean hasNext() {
123 return isFirstIteration;
124 }
125
126 public Object next() {
127 if (isFirstIteration) {
128 isFirstIteration = false;
129 return result;
130 }
131 else
132 return null;
133 }
134
135 public void remove() {
136 throw new UnsupportedOperationException();
137 }
138 };
139 }
140 }