Beispiel #1
0
  /** @since 3.1 */
  @Override
  public <T extends Persistent> T localObject(T objectFromAnotherContext) {

    if (objectFromAnotherContext == null) {
      throw new NullPointerException("Null object argument");
    }

    ObjectId id = objectFromAnotherContext.getObjectId();

    // first look for the ID in the local GraphManager
    synchronized (getGraphManager()) {
      T localObject = (T) getGraphManager().getNode(id);
      if (localObject != null) {
        return localObject;
      }

      // create a hollow object, optimistically assuming that the ID we
      // got from
      // 'objectFromAnotherContext' is a valid ID either in the parent
      // context or in
      // the DB. This essentially defers possible FaultFailureExceptions.

      ClassDescriptor descriptor = getEntityResolver().getClassDescriptor(id.getEntityName());
      Persistent persistent = (Persistent) descriptor.createObject();

      persistent.setObjectContext(this);
      persistent.setObjectId(id);
      persistent.setPersistenceState(PersistenceState.HOLLOW);

      getGraphManager().registerNode(id, persistent);

      return (T) persistent;
    }
  }
  /**
   * Returns a map key for a given to-many map relationship and a target object.
   *
   * @since 3.0
   */
  protected Object getMapKey(String relationshipName, Object value) {

    EntityResolver resolver = objectContext.getEntityResolver();
    ClassDescriptor descriptor = resolver.getClassDescriptor(objectId.getEntityName());

    if (descriptor == null) {
      throw new IllegalStateException("DataObject's entity is unmapped, objectId: " + objectId);
    }

    PropertyDescriptor property = descriptor.getProperty(relationshipName);
    if (property instanceof ToManyMapProperty) {
      return ((ToManyMapProperty) property).getMapKey(value);
    }

    throw new IllegalArgumentException(
        "Relationship '" + relationshipName + "' is not a to-many Map");
  }