Package er.extensions.eof

Source Code of er.extensions.eof.ERXForwardingAdaptorContext

//
//  ERXForwardingAdaptorContext.java
//
//  Created by Thomas Burkholder on Thu May 10, 2005.
//
package er.extensions.eof;

import com.webobjects.eoaccess.EOAdaptor;
import com.webobjects.eoaccess.EOAdaptorChannel;
import com.webobjects.eoaccess.EOAdaptorContext;
import com.webobjects.eoaccess.EOEntity;
import com.webobjects.eocontrol.EOEnterpriseObject;
import com.webobjects.foundation.NSArray;
import com.webobjects.foundation.NSDictionary;
import com.webobjects.foundation.NSNotification;
import com.webobjects.foundation.NSNotificationCenter;
import com.webobjects.foundation.NSSelector;
import com.webobjects.foundation._NSUtilities;

public class ERXForwardingAdaptorContext extends EOAdaptorContext {

  private EOAdaptorContext _forwardedContext;

  public static Object defaultDelegate() {
    return null;
  }

  public EOAdaptorContext forwardedContext() {
    return _forwardedContext;
  }

  public ERXForwardingAdaptorContext(EOAdaptor adaptor, EOAdaptorContext forwardedContext) {
    super(adaptor);
    Object delegate = delegate();
    _forwardedContext = forwardedContext;
    if (delegate != null) {
      _forwardedContext.setDelegate(delegate);
    }
    _registerForAdaptorContextNotifications();
  }

  public void _registerForAdaptorContextNotifications() {
    NSNotificationCenter notificationCenter = NSNotificationCenter.defaultCenter();
    notificationCenter.addObserver(this, ERXForwardingAdaptorContext._beginTransactionSelector, EOAdaptorContext.AdaptorContextBeginTransactionNotification, _forwardedContext);
    notificationCenter.addObserver(this, ERXForwardingAdaptorContext._commitTransactionSelector, EOAdaptorContext.AdaptorContextCommitTransactionNotification, _forwardedContext);
    notificationCenter.addObserver(this, ERXForwardingAdaptorContext._rollbackTransactionSelector, EOAdaptorContext.AdaptorContextRollbackTransactionNotification, _forwardedContext);
  }

  public void _unregisterForAdaptorContextNotifications() {
    NSNotificationCenter notificationCenter = NSNotificationCenter.defaultCenter();
    notificationCenter.removeObserver(this, EOAdaptorContext.AdaptorContextBeginTransactionNotification, _forwardedContext);
    notificationCenter.removeObserver(this, EOAdaptorContext.AdaptorContextCommitTransactionNotification, _forwardedContext);
    notificationCenter.removeObserver(this, EOAdaptorContext.AdaptorContextRollbackTransactionNotification, _forwardedContext);
  }

  @Override
  public void handleDroppedConnection() {
    _forwardedContext.handleDroppedConnection();
    _unregisterForAdaptorContextNotifications();
  }

  private static final NSSelector _beginTransactionSelector = new NSSelector("_beginTransaction", _NSUtilities._NotificationClassArray);
  private static final NSSelector _commitTransactionSelector = new NSSelector("_commitTransaction", _NSUtilities._NotificationClassArray);
  private static final NSSelector _rollbackTransactionSelector = new NSSelector("_rollbackTransaction", _NSUtilities._NotificationClassArray);

  public void _beginTransaction(NSNotification notification) {
    NSNotificationCenter.defaultCenter().postNotification(EOAdaptorContext.AdaptorContextBeginTransactionNotification, this);
  }

  public void _commitTransaction(NSNotification notification) {
    NSNotificationCenter.defaultCenter().postNotification(EOAdaptorContext.AdaptorContextCommitTransactionNotification, this);
  }

  public void _rollbackTransaction(NSNotification notification) {
    NSNotificationCenter.defaultCenter().postNotification(EOAdaptorContext.AdaptorContextRollbackTransactionNotification, this);
  }

  @Override
  public void beginTransaction() {
    _forwardedContext.beginTransaction();
  }

  @Override
  public void commitTransaction() {
    _forwardedContext.commitTransaction();
  }

  @Override
  public void rollbackTransaction() {
    _forwardedContext.rollbackTransaction();
  }

  /**
   * @deprecated use {@link #hasOpenTransaction()} instead
   */
  @Override
  @Deprecated
  public int transactionNestingLevel() {
    return _forwardedContext.transactionNestingLevel();
  }

  @Override
  public boolean hasOpenTransaction() {
    return _forwardedContext.hasOpenTransaction();
  }

  @Override
  public void transactionDidBegin() {
    _forwardedContext.transactionDidBegin();
  }

  @Override
  public void transactionDidCommit() {
    _forwardedContext.transactionDidCommit();
  }

  @Override
  public void transactionDidRollback() {
    _forwardedContext.transactionDidRollback();
  }

  @Override
  public boolean hasBusyChannels() {
    return _forwardedContext.hasBusyChannels();
  }

  @Override
  public boolean hasOpenChannels() {
    return _forwardedContext.hasOpenChannels();
  }

  @Override
  public NSArray channels() {
    return _forwardedContext.channels();
  }

  public EOAdaptor originalAdaptor() {
    return super.adaptor();
  }

  @Override
  public EOAdaptor adaptor() {
    return _forwardedContext.adaptor();
  }

  @Override
  public EOAdaptorChannel createAdaptorChannel() {
    return _forwardedContext.createAdaptorChannel();
  }

  @Override
  public Object delegate() {
    return _forwardedContext == null ? super.delegate() : _forwardedContext.delegate();
  }

  @Override
  public void setDelegate(Object delegate) {
    if (_forwardedContext != null) {
      _forwardedContext.setDelegate(delegate);
    }
    else {
      super.setDelegate(delegate);
    }
  }

  @Override
  public void _registerAdaptorChannel(EOAdaptorChannel channel) {
    _forwardedContext._registerAdaptorChannel(channel);
  }

  @Override
  public void _unregisterAdaptorChannel(EOAdaptorChannel channel) {
    _forwardedContext._unregisterAdaptorChannel(channel);
  }

  @Override
  @Deprecated
  public boolean canNestTransactions() {
    return _forwardedContext.canNestTransactions();
  }

  @Override
  public NSDictionary _newPrimaryKey(EOEnterpriseObject object, EOEntity entity) {
    return _forwardedContext._newPrimaryKey(object, entity);
  }

}
TOP

Related Classes of er.extensions.eof.ERXForwardingAdaptorContext

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.