Package er.memoryadaptor

Source Code of er.memoryadaptor.ERMemoryAdaptorContext

/* FSAdaptorContext - Decompiled by JODE
* Visit http://jode.sourceforge.net/
*/
package er.memoryadaptor;

import com.webobjects.eoaccess.EOAdaptor;
import com.webobjects.eoaccess.EOAdaptorChannel;
import com.webobjects.eoaccess.EOAdaptorContext;
import com.webobjects.eoaccess.EOAttribute;
import com.webobjects.eoaccess.EOEntity;
import com.webobjects.eoaccess.EOGeneralAdaptorException;
import com.webobjects.eocontrol.EOEnterpriseObject;
import com.webobjects.foundation.NSArray;
import com.webobjects.foundation.NSData;
import com.webobjects.foundation.NSDictionary;

/**
* ERMemoryAdaptorContext provides the adaptor context implementation for ERMemoryAdaptor.
* For the most part, you don't need to interact with ERMemoryAdaptor at this level. However,
* the context does expose resetEntity(EOEntity) and resetAllEntities() methods which allow
* control over resetting the memory datastore.  This can be helpful when you need to reset
* the "database" between test cases.
*
* @author mschrag
*/
public class ERMemoryAdaptorContext extends EOAdaptorContext {
  private static final EREntityStoreFactory _storeFactory = new EREntityStoreFactory(ERMemoryEntityStore.class);

  public ERMemoryAdaptorContext(EOAdaptor adaptor) {
    super(adaptor);
  }

  /**
   * Resets all the entities in this context, removing any known rows and
   * clearing out any transactions.
   */
  public void resetAllEntities() {
    _storeFactory.resetAllEntities();
  }

  /**
   * Resets the given entity, removing any known rows and
   * clearing out any transactions.
   *
   * @param entity the entity to reset
   */
  public void resetEntity(EOEntity entity) {
    _storeFactory.resetEntity(entity);
  }

  /**
   * Returns an EREntityStore for the given entity.
   *
   * @param entity the entity to lookup
   * @return the datastore for the entity
   */
  public EREntityStore _entityStoreForEntity(EOEntity entity) {
    return _storeFactory._entityStoreForEntity(entity);
  }

  /**
   * Returns an EREntityStore for the given entity.
   *
   * @param entity the entity to lookup
   * @param transactional if true, this will return a transactional view of the store
   * @return the datastore for the entity
   */
  public EREntityStore _entityStoreForEntity(EOEntity entity, boolean transactional) {
    return _storeFactory._entityStoreForEntity(entity, transactional);
  }
 
  @Override
  public NSDictionary _newPrimaryKey(EOEnterpriseObject object, EOEntity entity) {
    EREntityStore store = _entityStoreForEntity(entity, false);
    NSArray pkAttributes = entity.primaryKeyAttributes();
    if (pkAttributes.count() > 1) {
      throw new EOGeneralAdaptorException("Failed to generate primary key because " + entity.name() + " has a composite primary key.");
    }
    EOAttribute pkAttribute = (EOAttribute) pkAttributes.objectAtIndex(0);
    int nextSequence = store.nextSequence();
    Object pkValue;
    String className = pkAttribute.className();
    String valueType = pkAttribute.valueType();
    if ("NSData".equals(className)) {
      pkValue = new NSData(String.valueOf(nextSequence).getBytes());
    }
    else {
      if (valueType == null || "i".equals(valueType)) {
        pkValue = Integer.valueOf(nextSequence);
      }
      else if ("l".equals(valueType)) {
        pkValue = Long.valueOf(nextSequence);
      }
      else if ("f".equals(valueType)) {
        pkValue = Float.valueOf(nextSequence);
      }
      else if ("d".equals(valueType)) {
        pkValue = Double.valueOf(nextSequence);
      }
      else if ("s".equals(valueType)) {
        pkValue = Short.valueOf((short) nextSequence);
      }
      else if ("c".equals(valueType) && "NSString".equals(pkAttribute.valueClassName())) { // hack for bugtracker test cases
        pkValue = String.valueOf(nextSequence);
      }
      else {
        throw new IllegalArgumentException("Unknown value type '" + valueType + "' for '" + object + "' of entity '" + entity.name() + "'.");
      }
    }
    NSDictionary pk = new NSDictionary<String, Object>(pkValue, pkAttribute.name());
    return pk;
  }

  @Override
  public void beginTransaction() {
    _storeFactory.beginTransaction();
    transactionDidBegin();
  }

  @Override
  public void commitTransaction() {
    _storeFactory.commitTransaction();
    transactionDidCommit();
  }

  @Override
  public EOAdaptorChannel createAdaptorChannel() {
    return new ERMemoryAdaptorChannel(this);
  }

  @Override
  public void handleDroppedConnection() {
    /* empty */
  }

  @Override
  public void rollbackTransaction() {
    _storeFactory.rollbackTransaction();
    transactionDidRollback();
  }
}
TOP

Related Classes of er.memoryadaptor.ERMemoryAdaptorContext

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.