Open Source Repository

Home /hibernate/hibernate-3.2.4.ga | Repository Home


org/hibernate/property/BackrefPropertyAccessor.java
//$Id: BackrefPropertyAccessor.java 7516 2005-07-16 22:20:48Z oneovthafew $
package org.hibernate.property;

import java.lang.reflect.Method;
import java.util.Map;
import java.io.Serializable;

import org.hibernate.HibernateException;
import org.hibernate.engine.SessionImplementor;
import org.hibernate.engine.SessionFactoryImplementor;

/**
 * Represents a "back-reference" to the id of a collection owner.
 *
 @author Gavin King
 */
public class BackrefPropertyAccessor implements PropertyAccessor {

  private final String propertyName;
  private final String entityName;

  /**
   * A placeholder for a property value, indicating that
   * we don't know the value of the back reference
   */
  public static final Serializable UNKNOWN = new Serializable() {
    public String toString() { return "<unknown>"}
    public Object readResolve() {
      return UNKNOWN;
    }
  };
  
  /**
   * Constructs a new instance of BackrefPropertyAccessor.
   *
   @param collectionRole The collection role which this back ref references.
   */
  public BackrefPropertyAccessor(String collectionRole, String entityName) {
    this.propertyName = collectionRole.substringentityName.length() );
    this.entityName = entityName;
  }

  public Setter getSetter(Class theClass, String propertyName) {
    return new BackrefSetter();
  }

  public Getter getGetter(Class theClass, String propertyName) {
    return new BackrefGetter();
  }


  /**
   * The Setter implementation for id backrefs.
   */
  public static final class BackrefSetter implements Setter {

    public Method getMethod() {
      return null;
    }

    public String getMethodName() {
      return null;
    }

    public void set(Object target, Object value, SessionFactoryImplementor factory) {
      // this page intentionally left blank :)
    }

  }


  /**
   * The Getter implementation for id backrefs.
   */
  public class BackrefGetter implements Getter {
    
    public Object getForInsert(Object target, Map mergeMap, SessionImplementor session)
    throws HibernateException {
      if (session==null) {
        return UNKNOWN;
      }
      else {
        return session.getPersistenceContext()
            .getOwnerIdentityName, propertyName, target, mergeMap );
      }
    }

    public Object get(Object target)  {
      return UNKNOWN;
    }

    public Method getMethod() {
      return null;
    }

    public String getMethodName() {
      return null;
    }

    public Class getReturnType() {
      return Object.class;
    }
  }
}