/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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 javax.naming;
import java.io.Serializable;
/**
* This is an abstract class describing the address of an object which is
* outside of a naming system. It contains an address type and the address
* itself is dealt with by its subclasses, for example,
* <code>BinaryRefAddr</code> and <code>StringRefAddr
* </code>.
*
* @see BinaryRefAddr
* @see StringRefAddr
*/
public abstract class RefAddr implements Serializable {
/*
* This constant is used during deserialization to check the version which
* created the serialized object.
*/
private static final long serialVersionUID = -1468165120479154358L;
/**
* The type of the address.
*
* @serial
*/
protected String addrType;
/**
* Constructs a <code>RefAddr</code> instance using the supplied address
* type.
*
* @param type
* the address type which may be null
*/
protected RefAddr(String type) {
this.addrType = type;
}
/**
* Returns true if this address is equal to the supplied object
* <code>o</code>. They are considered equal if the address types are
* equal and the address contents are equivalent. *
*
* @param o
* the object to compare with
* @return true if this address is equal to <code>o</code>, otherwise
* false
*/
@Override
public boolean equals(Object o) {
if (o instanceof RefAddr) {
RefAddr a = (RefAddr) o;
return this.addrType.equals(a.addrType)
&& (null == this.getContent() ? null == a.getContent()
: this.getContent().equals(a.getContent()));
}
return false;
}
/**
* Gets the address itself which may be null. Each subclass of
* <code>RefAddr</code> describes the format of the returned address.
*
* @return the address itself
*/
public abstract Object getContent();
/**
* Gets the type of this address.
*
* @return the type of this address which cannot be null
*/
public String getType() {
return addrType;
}
/**
* Returns the hashcode for this address. The result is the sum of the
* hashcode of its address type and address.
*
* @return the hashcode of this address
*/
@Override
public int hashCode() {
return this.addrType.hashCode()
+ (null == this.getContent() ? 0 : this.getContent().hashCode());
}
/**
* Returns the string representation of this address. This contains the
* string representations of the address type and the address.
*
* @return the string representation of this address
*/
@SuppressWarnings("nls")
@Override
public String toString() {
return "Type: " + addrType + "\nContent: " + getContent() + "\n";
}
}