/* * Copyright 2009 Mike Cumings * * 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 com.kenai.jbosh; /** * Qualified name of an attribute of the wrapper element. This class is * analagous to the {@code javax.xml.namespace.QName} class. * Each qualified name consists of a namespace URI and a local name. *

* Instances of this class are immutable and thread-safe. */ public final class BodyQName { /** * BOSH namespace URI. */ static final String BOSH_NS_URI = "http://jabber.org/protocol/httpbind"; /** * Namespace URI. */ private final QName qname; /** * Private constructor to prevent direct construction. * * @param wrapped QName instance to wrap */ private BodyQName( final QName wrapped) { qname = wrapped; } /** * Creates a new qualified name using a namespace URI and local name. * * @param uri namespace URI * @param local local name * @return BodyQName instance */ public static BodyQName create( final String uri, final String local) { return createWithPrefix(uri, local, null); } /** * Creates a new qualified name using a namespace URI and local name * along with an optional prefix. * * @param uri namespace URI * @param local local name * @param prefix optional prefix or @{code null} for no prefix * @return BodyQName instance */ public static BodyQName createWithPrefix( final String uri, final String local, final String prefix) { if (uri == null || uri.length() == 0) { throw(new IllegalArgumentException( "URI is required and may not be null/empty")); } if (local == null || local.length() == 0) { throw(new IllegalArgumentException( "Local arg is required and may not be null/empty")); } if (prefix == null || prefix.length() == 0) { return new BodyQName(new QName(uri, local)); } else { return new BodyQName(new QName(uri, local, prefix)); } } /** * Get the namespace URI of this qualified name. * * @return namespace uri */ public String getNamespaceURI() { return qname.getNamespaceURI(); } /** * Get the local part of this qualified name. * * @return local name */ public String getLocalPart() { return qname.getLocalPart(); } /** * Get the optional prefix used with this qualified name, or {@code null} * if no prefix has been assiciated. * * @return prefix, or {@code null} if no prefix was supplied */ public String getPrefix() { return qname.getPrefix(); } /** * {@inheritDoc} */ @Override public boolean equals(final Object obj) { if (obj instanceof BodyQName) { BodyQName other = (BodyQName) obj; return qname.equals(other.qname); } else { return false; } } /** * {@inheritDoc} */ @Override public int hashCode() { return qname.hashCode(); } /////////////////////////////////////////////////////////////////////////// // Package-private methods: /** * Creates a new qualified name using the BOSH namespace URI and local name. * * @param local local name * @return BodyQName instance */ static BodyQName createBOSH( final String local) { return createWithPrefix(BOSH_NS_URI, local, null); } /** * Convenience method to compare this qualified name with a * {@code javax.xml.namespace.QName}. * * @param otherName QName to compare to * @return @{code true} if the qualified name is the same, {@code false} * otherwise */ boolean equalsQName(final QName otherName) { return qname.equals(otherName); } }