325N/A/*
325N/A * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
325N/A * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
325N/A *
325N/A * This code is free software; you can redistribute it and/or modify it
325N/A * under the terms of the GNU General Public License version 2 only, as
325N/A * published by the Free Software Foundation. Oracle designates this
325N/A * particular file as subject to the "Classpath" exception as provided
325N/A * by Oracle in the LICENSE file that accompanied this code.
325N/A *
325N/A * This code is distributed in the hope that it will be useful, but WITHOUT
325N/A * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
325N/A * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
325N/A * version 2 for more details (a copy is included in the LICENSE file that
325N/A * accompanied this code).
325N/A *
325N/A * You should have received a copy of the GNU General Public License version
325N/A * 2 along with this work; if not, write to the Free Software Foundation,
325N/A * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
325N/A *
325N/A * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
325N/A * or visit www.oracle.com if you need additional information or have any
325N/A * questions.
325N/A */
325N/A
325N/Apackage com.sun.xml.internal.ws.policy.sourcemodel.wspolicy;
325N/A
325N/Aimport java.util.Collections;
325N/Aimport java.util.HashMap;
325N/Aimport java.util.Map;
325N/Aimport javax.xml.namespace.QName;
325N/A
325N/A/**
325N/A *
325N/A * @author Marek Potociar (marek.potociar at sun.com)
325N/A */
325N/Apublic enum NamespaceVersion {
325N/A v1_2("http://schemas.xmlsoap.org/ws/2004/09/policy", "wsp1_2", new XmlToken[] {
325N/A XmlToken.Policy,
325N/A XmlToken.ExactlyOne,
325N/A XmlToken.All,
325N/A XmlToken.PolicyReference,
325N/A XmlToken.UsingPolicy,
325N/A XmlToken.Name,
325N/A XmlToken.Optional,
325N/A XmlToken.Ignorable,
325N/A XmlToken.PolicyUris,
325N/A XmlToken.Uri,
325N/A XmlToken.Digest,
325N/A XmlToken.DigestAlgorithm
325N/A }),
325N/A v1_5("http://www.w3.org/ns/ws-policy", "wsp", new XmlToken[] {
325N/A XmlToken.Policy,
325N/A XmlToken.ExactlyOne,
325N/A XmlToken.All,
325N/A XmlToken.PolicyReference,
325N/A XmlToken.UsingPolicy,
325N/A XmlToken.Name,
325N/A XmlToken.Optional,
325N/A XmlToken.Ignorable,
325N/A XmlToken.PolicyUris,
325N/A XmlToken.Uri,
325N/A XmlToken.Digest,
325N/A XmlToken.DigestAlgorithm
325N/A });
325N/A
325N/A /**
325N/A * Resolves URI represented as a String into an enumeration value. If the URI
325N/A * doesn't represent any existing enumeration value, method returns
325N/A * {@code null}.
325N/A *
325N/A * @param uri WS-Policy namespace URI
325N/A * @return Enumeration value that represents given URI or {@code null} if
325N/A * no enumeration value exists for given URI.
325N/A */
325N/A public static NamespaceVersion resolveVersion(String uri) {
325N/A for (NamespaceVersion namespaceVersion : NamespaceVersion.values()) {
325N/A if (namespaceVersion.toString().equalsIgnoreCase(uri)) {
325N/A return namespaceVersion;
325N/A }
325N/A }
325N/A
325N/A return null;
325N/A }
325N/A
325N/A /**
325N/A * Resolves fully qualified name defined in the WS-Policy namespace into an
325N/A * enumeration value. If the URI in the name doesn't represent any existing
325N/A * enumeration value, method returns {@code null}
325N/A *
325N/A * @param name fully qualified name defined in the WS-Policy namespace
325N/A * @return Enumeration value that represents given namespace or {@code null} if
325N/A * no enumeration value exists for given namespace.
325N/A */
325N/A public static NamespaceVersion resolveVersion(QName name) {
325N/A return resolveVersion(name.getNamespaceURI());
325N/A }
325N/A
325N/A /**
325N/A * Returns latest supported version of the policy namespace
325N/A *
325N/A * @return latest supported policy namespace version.
325N/A */
325N/A public static NamespaceVersion getLatestVersion() {
325N/A return v1_5;
325N/A }
325N/A
325N/A /**
325N/A * Resolves FQN into a policy XML token. The version of the token can be determined
325N/A * by invoking {@link #resolveVersion(QName)}.
325N/A *
325N/A * @param name fully qualified name defined in the WS-Policy namespace
325N/A * @return XML token enumeration that represents this fully qualified name.
325N/A * If the token or the namespace is not resolved {@link XmlToken#UNKNOWN} value
325N/A * is returned.
325N/A */
325N/A public static XmlToken resolveAsToken(QName name) {
325N/A NamespaceVersion nsVersion = resolveVersion(name);
325N/A if (nsVersion != null) {
325N/A XmlToken token = XmlToken.resolveToken(name.getLocalPart());
325N/A if (nsVersion.tokenToQNameCache.containsKey(token)) {
325N/A return token;
325N/A }
325N/A }
325N/A return XmlToken.UNKNOWN;
325N/A }
325N/A
325N/A private final String nsUri;
325N/A private final String defaultNsPrefix;
325N/A private final Map<XmlToken, QName> tokenToQNameCache;
325N/A
325N/A private NamespaceVersion(String uri, String prefix, XmlToken... supportedTokens) {
325N/A nsUri = uri;
325N/A defaultNsPrefix = prefix;
325N/A
325N/A Map<XmlToken, QName> temp = new HashMap<XmlToken, QName>();
325N/A for (XmlToken token : supportedTokens) {
325N/A temp.put(token, new QName(nsUri, token.toString()));
325N/A }
325N/A tokenToQNameCache = Collections.unmodifiableMap(temp);
325N/A }
325N/A
325N/A /**
325N/A * Method returns default namespace prefix for given namespace version.
325N/A *
325N/A * @return default namespace prefix for given namespace version
325N/A */
325N/A public String getDefaultNamespacePrefix() {
325N/A return defaultNsPrefix;
325N/A }
325N/A
325N/A /**
325N/A * Resolves XML token into a fully qualified name within given namespace version.
325N/A *
325N/A * @param token XML token enumeration value.
325N/A * @return fully qualified name of the {@code token} within given namespace
325N/A * version. Method returns {@code null} in case the token is not supported in
325N/A * given namespace version or in case {@link XmlToken#UNKNOWN} was used as
325N/A * an input parameter.
325N/A */
325N/A public QName asQName(XmlToken token) throws IllegalArgumentException {
325N/A return tokenToQNameCache.get(token);
325N/A }
325N/A
325N/A @Override
325N/A public String toString() {
325N/A return nsUri;
325N/A }
325N/A}