1 package org.apache.torque.om;
2
3 /* ====================================================================
4 * The Apache Software License, Version 1.1
5 *
6 * Copyright (c) 2001-2003 The Apache Software Foundation. All rights
7 * reserved.
8 *
9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted provided that the following conditions
11 * are met:
12 *
13 * 1. Redistributions of source code must retain the above copyright
14 * notice, this list of conditions and the following disclaimer.
15 *
16 * 2. Redistributions in binary form must reproduce the above copyright
17 * notice, this list of conditions and the following disclaimer in
18 * the documentation and/or other materials provided with the
19 * distribution.
20 *
21 * 3. The end-user documentation included with the redistribution,
22 * if any, must include the following acknowledgment:
23 * "This product includes software developed by the
24 * Apache Software Foundation (http://www.apache.org/)."
25 * Alternately, this acknowledgment may appear in the software itself,
26 * if and wherever such third-party acknowledgments normally appear.
27 *
28 * 4. The names "Apache" and "Apache Software Foundation" and
29 * "Apache Turbine" must not be used to endorse or promote products
30 * derived from this software without prior written permission. For
31 * written permission, please contact apache@apache.org.
32 *
33 * 5. Products derived from this software may not be called "Apache",
34 * "Apache Turbine", nor may "Apache" appear in their name, without
35 * prior written permission of the Apache Software Foundation.
36 *
37 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
38 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
39 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
40 * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
41 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
42 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
43 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
44 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
45 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
46 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
47 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
48 * SUCH DAMAGE.
49 * ====================================================================
50 *
51 * This software consists of voluntary contributions made by many
52 * individuals on behalf of the Apache Software Foundation. For more
53 * information on the Apache Software Foundation, please see
54 * <http://www.apache.org/>.
55 */
56
57 import java.io.Serializable;
58 import java.sql.Connection;
59
60 import org.apache.commons.logging.Log;
61 import org.apache.commons.logging.LogFactory;
62
63 import org.apache.torque.TorqueException;
64
65 /***
66 * This class contains attributes and methods that are used by all
67 * business objects within the system.
68 *
69 * @author <a href="mailto:frank.kim@clearink.com">Frank Y. Kim</a>
70 * @author <a href="mailto:jmcnally@collab.net">John D. McNally</a>
71 * @version $Id: BaseObject.java,v 1.18 2003/05/14 19:38:04 mpoeschl Exp $
72 */
73 public abstract class BaseObject implements Persistent, Serializable
74 {
75 /*** The constant denoting an unset numeric database identifier. */
76 public static final int NEW_ID = -1;
77
78 /***
79 * Shared portion of the error message thrown for methods which
80 * are not implemented.
81 */
82 private static final String NOT_IMPLEMENTED
83 = "Not implemented: Method must be overridden if called";
84
85 /*** attribute to determine if this object has previously been saved. */
86 private boolean isNew = true;
87
88 /*** The unique id for the object which can be used for persistence. */
89 private ObjectKey primaryKey = null;
90
91 /***
92 * A flag that indicates an object has been modified since it was
93 * last retrieved from the persistence mechanism. This flag is
94 * used to determine if this object should be saved to the
95 * database. We initialize it to true to force new objects to be
96 * saved.
97 */
98 private boolean modified = true;
99
100 /*** Cache the log to avoid looking it up every time its needed. */
101 private transient Log log = null;
102
103 /***
104 * getter for the object primaryKey.
105 *
106 * @return the object primaryKey as an Object
107 */
108 public ObjectKey getPrimaryKey()
109 {
110 return primaryKey;
111 }
112
113 /***
114 * Returns whether the object has been modified.
115 *
116 * @return True if the object has been modified.
117 */
118 public boolean isModified()
119 {
120 return modified;
121 }
122
123 /***
124 * Returns whether the object has ever been saved. This will
125 * be false, if the object was retrieved from storage or was created
126 * and then saved.
127 *
128 * @return true, if the object has never been persisted.
129 */
130 public boolean isNew()
131 {
132 return isNew;
133 }
134
135 /***
136 * Setter for the isNew attribute. This method will be called
137 * by Torque-generated children and Peers.
138 *
139 * @param b the state of the object.
140 */
141 public void setNew(boolean b)
142 {
143 this.isNew = b;
144 }
145
146 /***
147 * Sets the PrimaryKey for the object.
148 *
149 * @param primaryKey The new PrimaryKey for the object.
150 * @exception TorqueException This method will not throw any exceptions
151 * but this allows for children to override the method more easily
152 */
153 public void setPrimaryKey(String primaryKey) throws TorqueException
154 {
155 this.primaryKey = new StringKey(primaryKey);
156 }
157
158 /***
159 * Sets the PrimaryKey for the object as an Object.
160 *
161 * @param primaryKey The new PrimaryKey for the object.
162 * @exception TorqueException This method will not throw any exceptions
163 * but this allows for children to override the method more easily
164 */
165 public void setPrimaryKey(SimpleKey[] primaryKey) throws TorqueException
166 {
167 this.primaryKey = new ComboKey(primaryKey);
168 }
169
170 /***
171 * Sets the PrimaryKey for the object as an Object.
172 *
173 * @param primaryKey The new PrimaryKey for the object.
174 * @exception TorqueException This method will not throw any exceptions
175 * but this allows for children to override the method more easily
176 */
177 public void setPrimaryKey(ObjectKey primaryKey) throws TorqueException
178 {
179 this.primaryKey = primaryKey;
180 }
181
182 /***
183 * Sets the modified state for the object.
184 *
185 * @param m The new modified state for the object.
186 */
187 public void setModified(boolean m)
188 {
189 modified = m;
190 }
191
192 /***
193 * Sets the modified state for the object to be false.
194 */
195 public void resetModified()
196 {
197 modified = false;
198 }
199
200 /***
201 * Retrieves a field from the object by name. Must be overridden if called.
202 * BaseObject's implementation will throw an Error.
203 *
204 * @param field The name of the field to retrieve.
205 * @return The retrieved field value
206 *
207 */
208 public Object getByName(String field)
209 {
210 throw new Error("BaseObject.getByName: " + NOT_IMPLEMENTED);
211 }
212
213 /***
214 * Retrieves a field from the object by name passed in
215 * as a String. Must be overridden if called.
216 * BaseObject's implementation will throw an Error.
217 *
218 * @param name field name
219 * @return value of the field
220 */
221 public Object getByPeerName(String name)
222 {
223 throw new Error("BaseObject.getByPeerName: " + NOT_IMPLEMENTED);
224 }
225
226 /***
227 * Retrieves a field from the object by position as specified
228 * in a database schema for example. Must be overridden if called.
229 * BaseObject's implementation will throw an Error.
230 *
231 * @param pos field position
232 * @return value of the field
233 */
234 public Object getByPosition(int pos)
235 {
236 throw new Error("BaseObject.getByPosition: " + NOT_IMPLEMENTED);
237 }
238
239 /***
240 * Compares this with another <code>BaseObject</code> instance. If
241 * <code>obj</code> is an instance of <code>BaseObject</code>, delegates to
242 * <code>equals(BaseObject)</code>. Otherwise, returns <code>false</code>.
243 *
244 * @param obj The object to compare to.
245 * @return Whether equal to the object specified.
246 */
247 public boolean equals(Object obj)
248 {
249 if (obj != null && obj instanceof BaseObject)
250 {
251 return equals((BaseObject) obj);
252 }
253 else
254 {
255 return false;
256 }
257 }
258
259 /***
260 * Compares the primary key of this instance with the key of another.
261 *
262 * @param bo The object to compare to.
263 * @return Whether the primary keys are equal.
264 */
265 public boolean equals(BaseObject bo)
266 {
267 if (bo == null)
268 {
269 return false;
270 }
271 if (this == bo)
272 {
273 return true;
274 }
275 else if (getPrimaryKey() == null || bo.getPrimaryKey() == null)
276 {
277 return false;
278 }
279 else
280 {
281 return getPrimaryKey().equals(bo.getPrimaryKey());
282 }
283 }
284
285 /***
286 * If the primary key is not <code>null</code>, return the hashcode of the
287 * primary key. Otherwise calls <code>Object.hashCode()</code>.
288 *
289 * @return an <code>int</code> value
290 */
291 public int hashCode()
292 {
293 ObjectKey ok = getPrimaryKey();
294 if (ok == null)
295 {
296 return super.hashCode();
297 }
298
299 return ok.hashCode();
300 }
301
302 /***
303 * gets a commons-logging Log based on class name.
304 *
305 * @return a <code>Log</code> to write log to.
306 * @deprecated Use getLog()
307 */
308 protected Log log()
309 {
310 return getLog();
311 }
312
313 /***
314 * gets a commons-logging Log based on class name.
315 *
316 * @return a <code>Log</code> to write log to.
317 */
318 protected Log getLog()
319 {
320 if (log == null)
321 {
322 log = LogFactory.getLog(getClass().getName());
323 }
324 return log;
325 }
326
327 /***
328 * @see org.apache.torque.om.Persistent#save()
329 */
330 public abstract void save() throws Exception;
331
332 /***
333 * @see org.apache.torque.om.Persistent#save(String)
334 */
335 public abstract void save(String dbName) throws Exception;
336
337 /***
338 * @see org.apache.torque.om.Persistent#save(Connection)
339 */
340 public abstract void save(Connection con) throws Exception;
341 }
This page was automatically generated by Maven