1 package org.apache.torque.om;
2
3 /*
4 * Licensed to the Apache Software Foundation (ASF) under one
5 * or more contributor license agreements. See the NOTICE file
6 * distributed with this work for additional information
7 * regarding copyright ownership. The ASF licenses this file
8 * to you under the Apache License, Version 2.0 (the
9 * "License"); you may not use this file except in compliance
10 * with the License. You may obtain a copy of the License at
11 *
12 * http://www.apache.org/licenses/LICENSE-2.0
13 *
14 * Unless required by applicable law or agreed to in writing,
15 * software distributed under the License is distributed on an
16 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17 * KIND, either express or implied. See the License for the
18 * specific language governing permissions and limitations
19 * under the License.
20 */
21
22 import java.io.Serializable;
23
24 import org.apache.torque.TorqueException;
25
26 /**
27 * This class can be used to uniquely identify an object within
28 * an application. There are four subclasses: StringKey, NumberKey,
29 * and DateKey, and ComboKey which is a Key made up of a combination
30 * ofthe first three.
31 *
32 * @author <a href="mailto:jmcnally@apache.org">John McNally</a>
33 * @version $Id: ObjectKey.java 1206841 2011-11-27 20:46:17Z tfischer $
34 */
35 public abstract class ObjectKey implements Serializable, Comparable<Object>
36 {
37 /** Version id for serializing. */
38 private static final long serialVersionUID = 1L;
39
40 /**
41 * The underlying key value.
42 */
43 protected Object key;
44
45 /**
46 * Initializes the internal key value to <code>null</code>.
47 */
48 protected ObjectKey()
49 {
50 key = null;
51 }
52
53 /**
54 * Returns the hashcode of the underlying value (key), if key is
55 * not null. Otherwise calls Object.hashCode()
56 *
57 * @return an <code>int</code> value
58 */
59 public int hashCode()
60 {
61 if (key == null)
62 {
63 return super.hashCode();
64 }
65 return key.hashCode();
66 }
67
68 /**
69 * Returns whether this ObjekctKey is equal to another Object.
70 * obj is equal to this ObjectKey if obj has the same class
71 * as this ObjectKey and contains the same information
72 * this key contains.
73 * Two ObjectKeys that both contain null values are not considered equal.
74 *
75 * @param obj the comparison value.
76 *
77 * @return whether the two objects are equal.
78 */
79 @Override
80 public boolean equals(Object obj)
81 {
82 if (this == obj)
83 {
84 return true;
85 }
86 if (obj == null)
87 {
88 return false;
89 }
90 if (obj.getClass() != this.getClass())
91 {
92 return false;
93 }
94
95 ObjectKey objectKey = (ObjectKey) obj;
96 if (key == null)
97 {
98 return false;
99 }
100 return key.equals(objectKey.getValue());
101 }
102
103 /**
104 * Get the underlying object.
105 *
106 * @return the underlying object
107 */
108 public Object getValue()
109 {
110 return key;
111 }
112
113 /**
114 * Returns the JDBC type of the key
115 * as defined in <code>java.sql.Types</code>.
116 *
117 * @return the JDBC type of the key.
118 */
119 public abstract int getJdbcType();
120
121 /**
122 * Appends a String representation of the key to a buffer.
123 *
124 * @param sb a <code>StringBuffer</code>
125 */
126 public void appendTo(StringBuffer sb)
127 {
128 sb.append(this.toString());
129 }
130
131 /**
132 * Implements the compareTo method.
133 *
134 * @param obj the object to compare to this object
135 * @return a numeric comparison of the two values
136 */
137 public int compareTo(Object obj)
138 {
139 return toString().compareTo(obj.toString());
140 }
141
142 /**
143 * Reset the underlying object using a String.
144 *
145 * @param s a <code>String</code> value
146 * @exception TorqueException if an error occurs
147 */
148 public abstract void setValue(String s) throws TorqueException;
149 }