All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.sakaiproject.metaobj.shared.model.IdentifiableObject Maven / Gradle / Ivy

The newest version!
/**********************************************************************************
 * $URL: https://source.sakaiproject.org/svn/metaobj/tags/sakai-10.7/metaobj-api/api/src/java/org/sakaiproject/metaobj/shared/model/IdentifiableObject.java $
 * $Id: IdentifiableObject.java 105079 2012-02-24 23:08:11Z [email protected] $
 ***********************************************************************************
 *
 * Copyright (c) 2004, 2005, 2006, 2008 The Sakai Foundation
 *
 * Licensed under the Educational Community License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *       http://www.opensource.org/licenses/ECL-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 **********************************************************************************/

package org.sakaiproject.metaobj.shared.model;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
 * any derived class should use the generator in the hibernate xml definitian:
 *     org.sakaiproject.metaobj.shared.IdentifiableIdGenerator
 * This way the newId field will be supported when creating 
 * new objects with predetermined ids.
 * 
 * User: jbush
 * Date: May 15, 2004
 * Time: 1:55:47 PM
 * To change this template use File | Settings | File Templates.
 */
abstract public class IdentifiableObject {
   private Id id;
   private Id newId;
   protected final Log logger = LogFactory.getLog(this.getClass());

   public boolean equals(Object in) {
      if (this == in) {
         return true;
      }
      if (in == null && this == null) {
         return true;
      }
      if (in == null && this != null) {
         return false;
      }
      if (this == null && in != null) {
         return false;
      }
      if (!this.getClass().isAssignableFrom(in.getClass())) {
         return false;
      }
      if (this.getId() == null && ((IdentifiableObject) in).getId() == null) {
         return true;
      }
      if (this.getId() == null || ((IdentifiableObject) in).getId() == null) {
         return false;
      }
      return this.getId().equals(((IdentifiableObject) in).getId());
   }

   public int hashCode() {
      return (id != null ? id.hashCode() : 0);
   }

   /**
    * returns the id of the object stored in the database.  if the object is new and hasn't
    * been saved to the database then it may have an id...  check getNewId.
    * @return Id
    */
   public Id getId() {
      return id;
   }

   /**
    * sets the id of the object.  If the object is new then this parameter will be ignored
    * and a new id will be generated.  Use setNewId to set the id of a new object.
    * 
    * @param id
    */
   public void setId(Id id) {
      this.id = id;
   }

   /**
    * If this object is new and we want it to have a specific id then this is set before
    * the object is saved.
    * @return Id
    */
   public Id getNewId() {
      return newId;
   }

   /**
    * if create an identifiable object with a specific id, then this is what you set.
    * The id generator won't create a new id but will use this field as the id
    * @param newId
    */
   public void setNewId(Id newId) {
      this.newId = newId;
   }

   /**
    * this returns the effective id.  First it checks for the real id,
    * then if it's not good then it returns the newId.
    * @return Id
    */
   public Id getVirtualId() {
      if(id != null && id.getValue() != null && id.getValue().length() > 0)
         return id;
      return newId;
   }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy