001: /**********************************************************************************
002: * $URL: https://source.sakaiproject.org/svn/metaobj/tags/sakai_2-4-1/metaobj-api/api/src/java/org/sakaiproject/metaobj/shared/model/IdentifiableObject.java $
003: * $Id: IdentifiableObject.java 17619 2006-10-31 00:55:55Z john.ellis@rsmart.com $
004: ***********************************************************************************
005: *
006: * Copyright (c) 2004, 2005, 2006 The Sakai Foundation.
007: *
008: * Licensed under the Educational Community License, Version 1.0 (the "License");
009: * you may not use this file except in compliance with the License.
010: * You may obtain a copy of the License at
011: *
012: * http://www.opensource.org/licenses/ecl1.php
013: *
014: * Unless required by applicable law or agreed to in writing, software
015: * distributed under the License is distributed on an "AS IS" BASIS,
016: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
017: * See the License for the specific language governing permissions and
018: * limitations under the License.
019: *
020: **********************************************************************************/package org.sakaiproject.metaobj.shared.model;
021:
022: import org.apache.commons.logging.Log;
023: import org.apache.commons.logging.LogFactory;
024:
025: /**
026: * any derived class should use the generator in the hibernate xml definitian:
027: * org.sakaiproject.metaobj.shared.IdentifiableIdGenerator
028: * This way the newId field will be supported when creating
029: * new objects with predetermined ids.
030: *
031: * User: jbush
032: * Date: May 15, 2004
033: * Time: 1:55:47 PM
034: * To change this template use File | Settings | File Templates.
035: */
036: abstract public class IdentifiableObject {
037: private Id id;
038: private Id newId;
039: protected final Log logger = LogFactory.getLog(this .getClass());
040:
041: public boolean equals(Object in) {
042: if (this == in) {
043: return true;
044: }
045: if (in == null && this == null) {
046: return true;
047: }
048: if (in == null && this != null) {
049: return false;
050: }
051: if (this == null && in != null) {
052: return false;
053: }
054: if (!this .getClass().isAssignableFrom(in.getClass())) {
055: return false;
056: }
057: if (this .getId() == null
058: && ((IdentifiableObject) in).getId() == null) {
059: return true;
060: }
061: if (this .getId() == null
062: || ((IdentifiableObject) in).getId() == null) {
063: return false;
064: }
065: return this .getId().equals(((IdentifiableObject) in).getId());
066: }
067:
068: public int hashCode() {
069: return (id != null ? id.hashCode() : 0);
070: }
071:
072: /**
073: * returns the id of the object stored in the database. if the object is new and hasn't
074: * been saved to the database then it may have an id... check getNewId.
075: * @return Id
076: */
077: public Id getId() {
078: return id;
079: }
080:
081: /**
082: * sets the id of the object. If the object is new then this parameter will be ignored
083: * and a new id will be generated. Use setNewId to set the id of a new object.
084: *
085: * @param id
086: */
087: public void setId(Id id) {
088: this .id = id;
089: }
090:
091: /**
092: * If this object is new and we want it to have a specific id then this is set before
093: * the object is saved.
094: * @return Id
095: */
096: public Id getNewId() {
097: return newId;
098: }
099:
100: /**
101: * if create an identifiable object with a specific id, then this is what you set.
102: * The id generator won't create a new id but will use this field as the id
103: * @param newId
104: */
105: public void setNewId(Id newId) {
106: this .newId = newId;
107: }
108:
109: /**
110: * this returns the effective id. First it checks for the real id,
111: * then if it's not good then it returns the newId.
112: * @return Id
113: */
114: public Id getVirtualId() {
115: if (id != null && id.getValue() != null
116: && id.getValue().length() > 0)
117: return id;
118: return newId;
119: }
120: }
|