Package er.neo4jadaptor

Source Code of er.neo4jadaptor.Neo4JContext

package er.neo4jadaptor;

import org.apache.log4j.Logger;
import org.neo4j.graphdb.GraphDatabaseService;
import org.neo4j.graphdb.Transaction;

import com.webobjects.eoaccess.EOAdaptorChannel;
import com.webobjects.eoaccess.EOAdaptorContext;
import com.webobjects.eoaccess.EOEntity;
import com.webobjects.eocontrol.EOEnterpriseObject;
import com.webobjects.foundation.NSDictionary;

import er.neo4jadaptor.ersatz.Ersatz;
import er.neo4jadaptor.ersatz.webobjects.NSDictionaryErsatz;
import er.neo4jadaptor.storage.Store;
import er.neo4jadaptor.storage.StoreFactory;

public class Neo4JContext <T extends Ersatz> extends EOAdaptorContext {
  private static final Logger log = Logger.getLogger(Neo4JContext.class);

  private Transaction tx;
  private final StoreFactory storeFactory;
 
  public Neo4JContext(Neo4JAdaptor adaptor) {
    super(adaptor);
   
    storeFactory = StoreFactory.create(adaptor.getDatabase());
  }
 
  @Override
  public Neo4JAdaptor adaptor() {
    return (Neo4JAdaptor) super.adaptor();
  }
 
  public Store<Ersatz, T> entityStoreForEntity(EOEntity entity) {
    return (Store<Ersatz, T>) storeFactory.storeForEntity(entity);
  }
 
  @Override
  public NSDictionary<String, Object> _newPrimaryKey(EOEnterpriseObject object, EOEntity entity) {
    Store<?, ?> store = entityStoreForEntity(entity);
    Ersatz pk = store.newPrimaryKey();
   
    return NSDictionaryErsatz.toSnapshot(pk);
  }
 
  private GraphDatabaseService getDatabase() {
    return adaptor().getDatabase();
  }
 
  @Override
  public void beginTransaction() {
    if (! hasOpenTransaction()) {
      tx = getDatabase().beginTx();
      transactionDidBegin();
    }
  }

  @Override
  public void commitTransaction() {
    try {
      storeFactory.getTemporaryNodePool().cleanup();

      tx.success();
    } finally {
      try {
        tx.finish();
        transactionDidCommit();
      } finally {
        tx = null;
      }
    }
  }
 
  @Override
  public EOAdaptorChannel createAdaptorChannel() {
    return new Neo4JChannel<T>(this);
  }

  @Override
  public void handleDroppedConnection() {
    log.warn("Dropped connection");
  }

  @Override
  public void rollbackTransaction() {
    if (tx != null) {
      try {
        tx.failure();
      } finally {
        tx.finish();
      }
    }
    transactionDidRollback();
  }
}
TOP

Related Classes of er.neo4jadaptor.Neo4JContext

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.