Frames | No Frames |
1: /* RefAddr.java -- Abstract superclass of addresses used in References 2: Copyright (C) 2000, 2001 Free Software Foundation, Inc. 3: 4: This file is part of GNU Classpath. 5: 6: GNU Classpath is free software; you can redistribute it and/or modify 7: it under the terms of the GNU General Public License as published by 8: the Free Software Foundation; either version 2, or (at your option) 9: any later version. 10: 11: GNU Classpath is distributed in the hope that it will be useful, but 12: WITHOUT ANY WARRANTY; without even the implied warranty of 13: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14: General Public License for more details. 15: 16: You should have received a copy of the GNU General Public License 17: along with GNU Classpath; see the file COPYING. If not, write to the 18: Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 19: 02110-1301 USA. 20: 21: Linking this library statically or dynamically with other modules is 22: making a combined work based on this library. Thus, the terms and 23: conditions of the GNU General Public License cover the whole 24: combination. 25: 26: As a special exception, the copyright holders of this library give you 27: permission to link this library with independent modules to produce an 28: executable, regardless of the license terms of these independent 29: modules, and to copy and distribute the resulting executable under 30: terms of your choice, provided that you also meet, for each linked 31: independent module, the terms and conditions of the license of that 32: module. An independent module is a module which is not derived from 33: or based on this library. If you modify this library, you may extend 34: this exception to your version of the library, but you are not 35: obligated to do so. If you do not wish to do so, delete this 36: exception statement from your version. */ 37: 38: package javax.naming; 39: 40: import java.io.Serializable; 41: 42: /** 43: * Abstract superclass of addresses used in References. 44: * A <code>Reference</code> object contains a <code>Vector</code> of 45: * <code>RefAddr</code>s which are used to reference/address the object. 46: * This abstract superclass keeps track of the type of address, which will be 47: * returned by <code>getType()</code>. And defines a abstract method 48: * <code>getContent()</code> which must be implemented in concrete subclasses 49: * such as <code>BinaryRefAddr</code> and <code>StringRefAddr</code>. 50: * 51: * @see Reference 52: * @see BinaryRefAddr 53: * @see StringRefAddr 54: * @since 1.3 55: * @author Anthony Green (green@redhat.com) 56: * @author Mark Wielaard (mark@klomp.org) 57: */ 58: public abstract class RefAddr implements Serializable 59: { 60: /** 61: * The string resprenstation of the type of address. 62: * Set by the constructor and returned by the getType() method. 63: */ 64: protected String addrType; 65: 66: /** 67: * Protected constructor for use by subclasses. 68: * Sets the addrType field of this object to the supplied String. 69: * 70: * @exception NullPointerException if the supplied String is null. 71: */ 72: protected RefAddr(String addrType) 73: { 74: if (addrType == null) 75: throw new NullPointerException("addrType cannot be null"); 76: 77: this.addrType = addrType; 78: } 79: 80: /** 81: * Returns the non-null address type given to the constructor. 82: */ 83: public String getType() 84: { 85: return addrType; 86: } 87: 88: /** 89: * Returns the possibly null content of this RefAddr. 90: * The actual value is defined by the non-abstract subclass. 91: */ 92: public abstract Object getContent(); 93: 94: /** 95: * Checks if the object is a RefAddr with the same type and content. 96: * 97: * @return true if the given object is an instance of RefAddr, the addrType 98: * is the same as this addrType and the content is equals to the 99: * content of this object. 100: */ 101: public boolean equals(Object o) 102: { 103: if (o instanceof RefAddr) 104: { 105: RefAddr refAddr = (RefAddr) o; 106: if (this.getType().equals(refAddr.getType())) 107: { 108: Object c1 = this.getContent(); 109: Object c2 = refAddr.getContent(); 110: if (c1 == null) 111: return c2 == null; 112: else 113: return c1.equals(c2); 114: } 115: } 116: return false; 117: } 118: 119: /** 120: * Returns the hashCode which is the hasCode of the String returned by 121: * <code>getType()</code> plus the hashCode of the Object returned by 122: * <code>getContent</code> (when not null). 123: */ 124: public int hashCode() 125: { 126: int result = getType().hashCode(); 127: Object o = getContent(); 128: if (o != null) 129: result += o.hashCode(); 130: 131: return result; 132: } 133: 134: /** 135: * Returns a String representation of the RefAddr. 136: * Should only be used for debugging purposes. 137: */ 138: public String toString() 139: { 140: return "[RefAddr type: " + getType() + " content: " + getContent() + ']'; 141: } 142: }