1 /*
2 * Copyright 1999-2000 Sun Microsystems, Inc. All Rights Reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. Sun designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Sun in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
22 * CA 95054 USA or visit www.sun.com if you need additional information or
23 * have any questions.
24 */
25
26 package javax.naming;
27
28 /**
29 * This class represents the address of a communications end-point.
30 * It consists of a type that describes the communication mechanism
31 * and an address contents determined by an RefAddr subclass.
32 *<p>
33 * For example, an address type could be "BSD Printer Address",
34 * which specifies that it is an address to be used with the BSD printing
35 * protocol. Its contents could be the machine name identifying the
36 * location of the printer server that understands this protocol.
37 *<p>
38 * A RefAddr is contained within a Reference.
39 *<p>
40 * RefAddr is an abstract class. Concrete implementations of it
41 * determine its synchronization properties.
42 *
43 * @author Rosanna Lee
44 * @author Scott Seligman
45 *
46 * @see Reference
47 * @see LinkRef
48 * @see StringRefAddr
49 * @see BinaryRefAddr
50 * @since 1.3
51 */
52
53 /*<p>
54 * The serialized form of a RefAddr object consists of only its type name
55 * String.
56 */
57
58 public abstract class RefAddr implements java.io.Serializable {
59 /**
60 * Contains the type of this address.
61 * @serial
62 */
63 protected String addrType;
64
65 /**
66 * Constructs a new instance of RefAddr using its address type.
67 *
68 * @param addrType A non-null string describing the type of the address.
69 */
70 protected RefAddr(String addrType) {
71 this.addrType = addrType;
72 }
73
74 /**
75 * Retrieves the address type of this address.
76 *
77 * @return The non-null address type of this address.
78 */
79 public String getType() {
80 return addrType;
81 }
82
83 /**
84 * Retrieves the contents of this address.
85 *
86 * @return The possibly null address contents.
87 */
88 public abstract Object getContent();
89
90 /**
91 * Determines whether obj is equal to this RefAddr.
92 *<p>
93 * obj is equal to this RefAddr all of these conditions are true
94 *<ul> non-null
95 *<li> instance of RefAddr
96 *<li> obj has the same address type as this RefAddr (using String.compareTo())
97 *<li> both obj and this RefAddr's contents are null or they are equal
98 * (using the equals() test).
99 *</ul>
100 * @param obj possibly null obj to check.
101 * @return true if obj is equal to this refaddr; false otherwise.
102 * @see #getContent
103 * @see #getType
104 */
105 public boolean equals(Object obj) {
106 if ((obj != null) && (obj instanceof RefAddr)) {
107 RefAddr target = (RefAddr)obj;
108 if (addrType.compareTo(target.addrType) == 0) {
109 Object thisobj = this.getContent();
110 Object thatobj = target.getContent();
111 if (thisobj == thatobj)
112 return true;
113 if (thisobj != null)
114 return thisobj.equals(thatobj);
115 }
116 }
117 return false;
118 }
119
120 /**
121 * Computes the hash code of this address using its address type and contents.
122 * The hash code is the sum of the hash code of the address type and
123 * the hash code of the address contents.
124 *
125 * @return The hash code of this address as an int.
126 * @see java.lang.Object#hashCode
127 */
128 public int hashCode() {
129 return (getContent() == null)
130 ? addrType.hashCode()
131 : addrType.hashCode() + getContent().hashCode();
132 }
133
134 /**
135 * Generates the string representation of this address.
136 * The string consists of the address's type and contents with labels.
137 * This representation is intended for display only and not to be parsed.
138 * @return The non-null string representation of this address.
139 */
140 public String toString(){
141 StringBuffer str = new StringBuffer("Type: " + addrType + "\n");
142
143 str.append("Content: " + getContent() + "\n");
144 return (str.toString());
145 }
146
147 /**
148 * Use serialVersionUID from JNDI 1.1.1 for interoperability
149 */
150 private static final long serialVersionUID = -1468165120479154358L;
151 }