blob: 83acdf10465238cfc910570d5c701884fc941102 [file] [log] [blame]
/*
* 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.
* <p/>
* 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);
}
}