diff options
Diffstat (limited to 'plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo')
6 files changed, 56 insertions, 33 deletions
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOSessionImpl.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOSessionImpl.java index 5438bfe0b4..a51029b524 100644 --- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOSessionImpl.java +++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOSessionImpl.java @@ -23,7 +23,6 @@ import org.eclipse.emf.cdo.protocol.CDOIDRange; import org.eclipse.emf.cdo.protocol.CDOProtocolConstants; import org.eclipse.emf.cdo.util.CDOUtil; -import org.eclipse.net4j.ConnectorException; import org.eclipse.net4j.IChannel; import org.eclipse.net4j.IConnector; import org.eclipse.net4j.internal.util.container.Container; @@ -45,7 +44,6 @@ import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.emf.ecore.resource.ResourceSet; import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl; import org.eclipse.emf.internal.cdo.bundle.OM; -import org.eclipse.emf.internal.cdo.protocol.CDOClientProtocol; import org.eclipse.emf.internal.cdo.protocol.OpenSessionRequest; import org.eclipse.emf.internal.cdo.protocol.OpenSessionResult; import org.eclipse.emf.internal.cdo.protocol.ViewsChangedNotification; @@ -74,6 +72,8 @@ public class CDOSessionImpl extends Container<CDOView> implements CDOSession private int sessionID; + private IConnector connector; + private IChannel channel; private String repositoryName; @@ -119,20 +119,12 @@ public class CDOSessionImpl extends Container<CDOView> implements CDOSession public IConnector getConnector() { - if (channel == null) - { - return null; - } - - return channel.getConnector(); + return connector; } - public void setConnector(IConnector connector) throws ConnectorException + public void setConnector(IConnector connector) { - CDOClientProtocol protocol = new CDOClientProtocol(); - protocol.setSession(this); - channel = connector.openChannel(protocol); - EventUtil.addListener(channel, channelListener); + this.connector = connector; } public IChannel getChannel() @@ -343,6 +335,26 @@ public class CDOSessionImpl extends Container<CDOView> implements CDOSession idToMetaInstanceMap.put(id, metaInstance); metaInstanceToIDMap.put(metaInstance, id); + // EClass eClass = metaInstance.eClass(); + // for (EStructuralFeature feature : eClass.getEAllStructuralFeatures()) + // { + // Object value = metaInstance.eGet(feature); + // if (value instanceof InternalEObject) + // { + // metaInstance.eResolveProxy((InternalEObject)value); + // } + // else if (value instanceof Collection) + // { + // for (Object element : (Collection)value) + // { + // if (element instanceof InternalEObject) + // { + // metaInstance.eResolveProxy((InternalEObject)element); + // } + // } + // } + // } + long step = id.isTemporary() ? -2L : 2L; long count = 1L; for (EObject content : metaInstance.eContents()) @@ -420,9 +432,9 @@ public class CDOSessionImpl extends Container<CDOView> implements CDOSession protected void doBeforeActivate() throws Exception { super.doBeforeActivate(); - if (channel == null) + if (channel == null && connector == null) { - throw new IllegalStateException("channel == null"); + throw new IllegalStateException("channel == null && connector == null"); } if (repositoryName == null) @@ -435,6 +447,13 @@ public class CDOSessionImpl extends Container<CDOView> implements CDOSession protected void doActivate() throws Exception { super.doActivate(); + if (channel == null) + { + channel = connector.openChannel(CDOProtocolConstants.PROTOCOL_NAME, this); + } + + EventUtil.addListener(channel, channelListener); + OpenSessionRequest request = new OpenSessionRequest(channel, repositoryName); OpenSessionResult result = request.send(); sessionID = result.getSessionID(); diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/protocol/CDOClientProtocol.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/protocol/CDOClientProtocol.java index e316d72003..9d63845c94 100644 --- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/protocol/CDOClientProtocol.java +++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/protocol/CDOClientProtocol.java @@ -20,10 +20,8 @@ import org.eclipse.emf.internal.cdo.CDOSessionImpl; /** * @author Eike Stepper */ -public class CDOClientProtocol extends SignalProtocol +public class CDOClientProtocol extends SignalProtocol<CDOSessionImpl> { - private CDOSessionImpl session; - public CDOClientProtocol() { } @@ -33,16 +31,6 @@ public class CDOClientProtocol extends SignalProtocol return CDOProtocolConstants.PROTOCOL_NAME; } - public CDOSessionImpl getSession() - { - return session; - } - - public void setSession(CDOSessionImpl session) - { - this.session = session; - } - @Override protected SignalReactor doCreateSignalReactor(short signalID) { @@ -59,7 +47,7 @@ public class CDOClientProtocol extends SignalProtocol protected void doBeforeActivate() throws Exception { super.doBeforeActivate(); - if (session == null) + if (getInfraStructure() == null) { throw new IllegalStateException("session == null"); } diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/protocol/CDOClientRequest.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/protocol/CDOClientRequest.java index 6859a8bcbd..db0bda178c 100644 --- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/protocol/CDOClientRequest.java +++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/protocol/CDOClientRequest.java @@ -43,9 +43,10 @@ public abstract class CDOClientRequest<RESULT> extends RequestWithConfirmation<R protected CDOSessionImpl getSession() { - return getProtocol().getSession(); + return getProtocol().getInfraStructure(); } + @Override protected CDOClientProtocol getProtocol() { return (CDOClientProtocol)super.getProtocol(); diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/protocol/InvalidationIndication.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/protocol/InvalidationIndication.java index 98ad34aee8..866dc12bfe 100644 --- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/protocol/InvalidationIndication.java +++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/protocol/InvalidationIndication.java @@ -67,8 +67,14 @@ public class InvalidationIndication extends Indication getSession().notifyInvalidation(timeStamp, dirtyOIDs, null); } - private CDOSessionImpl getSession() + protected CDOSessionImpl getSession() { - return ((CDOClientProtocol)getProtocol()).getSession(); + return getProtocol().getInfraStructure(); + } + + @Override + protected CDOClientProtocol getProtocol() + { + return (CDOClientProtocol)super.getProtocol(); } } diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/util/FSMUtil.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/util/FSMUtil.java index b79a2c4fec..92c2a4adfe 100644 --- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/util/FSMUtil.java +++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/util/FSMUtil.java @@ -75,7 +75,7 @@ public final class FSMUtil if (eObject.eIsProxy()) { - EcoreUtil.resolve(eObject, view.getResourceSet()); + eObject = (InternalEObject)EcoreUtil.resolve(eObject, view.getResourceSet()); } CDOID id = ((CDOViewImpl)view).getSession().lookupMetaInstanceID(eObject); @@ -94,6 +94,11 @@ public final class FSMUtil if (callback == null) { InternalEObject instance = (InternalEObject)aware; + if (instance.eIsProxy()) + { + instance = (InternalEObject)EcoreUtil.resolve(instance, view.getResourceSet()); + } + callback = new CDOCallbackImpl(instance); aware.setCDOCallback(callback); instance.eAdapters().add(callback); diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/util/ModelUtil.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/util/ModelUtil.java index b3953f710a..c8fef9b854 100644 --- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/util/ModelUtil.java +++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/util/ModelUtil.java @@ -125,6 +125,10 @@ public final class ModelUtil return cdoClass.lookupFeature(eFeature.getFeatureID()); } + /** + * @see EMFUtil#getPersistentFeatures(org.eclipse.emf.common.util.EList) + * @see http://www.eclipse.org/newsportal/article.php?id=26780&group=eclipse.tools.emf#26780 + */ private static CDOPackageImpl createCDOPackage(EPackage ePackage, CDOSessionPackageManager packageManager) { String packageURI = ePackage.getNsURI(); |