Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo')
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOSessionImpl.java49
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/protocol/CDOClientProtocol.java16
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/protocol/CDOClientRequest.java3
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/protocol/InvalidationIndication.java10
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/util/FSMUtil.java7
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/util/ModelUtil.java4
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();

Back to the top