Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFrancesco Guidieri2013-07-23 14:51:42 +0000
committerFrancesco Guidieri2013-08-26 15:09:07 +0000
commitc6ba1d1bc0ffee6bfec68c79b73e3d364a673fe4 (patch)
treef7cf3f94bce1688070039e650954869d300152c0 /plugins/org.eclipse.emf.parsley.cdo
parent96c5a4011da7e3002d3399edf74a7dca4c55c2b6 (diff)
downloadorg.eclipse.emf-parsley-c6ba1d1bc0ffee6bfec68c79b73e3d364a673fe4.tar.gz
org.eclipse.emf-parsley-c6ba1d1bc0ffee6bfec68c79b73e3d364a673fe4.tar.xz
org.eclipse.emf-parsley-c6ba1d1bc0ffee6bfec68c79b73e3d364a673fe4.zip
CDO Resource Loader revisited
Diffstat (limited to 'plugins/org.eclipse.emf.parsley.cdo')
-rw-r--r--plugins/org.eclipse.emf.parsley.cdo/src/org/eclipse/emf/parsley/cdo/CDOResourceLoader.java109
1 files changed, 81 insertions, 28 deletions
diff --git a/plugins/org.eclipse.emf.parsley.cdo/src/org/eclipse/emf/parsley/cdo/CDOResourceLoader.java b/plugins/org.eclipse.emf.parsley.cdo/src/org/eclipse/emf/parsley/cdo/CDOResourceLoader.java
index 077e0ef1d..cdaaf6bd8 100644
--- a/plugins/org.eclipse.emf.parsley.cdo/src/org/eclipse/emf/parsley/cdo/CDOResourceLoader.java
+++ b/plugins/org.eclipse.emf.parsley.cdo/src/org/eclipse/emf/parsley/cdo/CDOResourceLoader.java
@@ -5,73 +5,108 @@ package org.eclipse.emf.parsley.cdo;
import org.eclipse.emf.cdo.eresource.CDOResource;
+import org.eclipse.emf.cdo.net4j.CDONet4jSession;
+import org.eclipse.emf.cdo.net4j.CDONet4jSessionConfiguration;
import org.eclipse.emf.cdo.net4j.CDONet4jUtil;
-import org.eclipse.emf.cdo.net4j.CDOSession;
-import org.eclipse.emf.cdo.net4j.CDOSessionConfiguration;
+import org.eclipse.emf.cdo.session.CDOSession;
import org.eclipse.emf.cdo.transaction.CDOTransaction;
-import org.eclipse.emf.cdo.util.CDOURIUtil;
import org.eclipse.emf.cdo.view.CDOAdapterPolicy;
+import org.eclipse.emf.cdo.view.CDOViewInvalidationEvent;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
import org.eclipse.emf.parsley.cdo.util.CDOURIData;
+import org.eclipse.emf.parsley.resource.EmptyResourceInitializer;
+import org.eclipse.emf.parsley.resource.LoadResourceResponse;
import org.eclipse.emf.parsley.resource.ResourceLoader;
+import org.eclipse.emf.spi.cdo.CDOMergingConflictResolver;
import org.eclipse.net4j.Net4jUtil;
import org.eclipse.net4j.connector.IConnector;
import org.eclipse.net4j.tcp.TCPUtil;
import org.eclipse.net4j.util.container.IPluginContainer;
+import org.eclipse.net4j.util.event.IEvent;
+import org.eclipse.net4j.util.event.IListener;
import org.eclipse.net4j.util.lifecycle.ILifecycle;
import org.eclipse.net4j.util.lifecycle.LifecycleEventAdapter;
+import com.google.inject.Inject;
+
/**
* @author bettini
*
*/
public class CDOResourceLoader extends ResourceLoader {
+ @Inject private EmptyResourceInitializer emptyResourceInitializer;
+ @Inject private CDOSessionManager sessionManager;
+
@Override
public Resource getResource(ResourceSet resourceSet, URI resourceURI) {
- Net4jUtil.prepareContainer(IPluginContainer.INSTANCE);
- TCPUtil.prepareContainer(IPluginContainer.INSTANCE);
-
- CDOURIData data = CDOURIData.parse(resourceURI);
-
- String host = data.host;
- String repoName = data.sessionName;
- String resourceName = data.resourceName;
-
- CDOSession cdoSession = openSession(repoName, host);
- URI uri = CDOURIUtil.createResourceURI(cdoSession, "/" + resourceName);
-
- System.out.println("URI: " + uri);
-
- CDOTransaction t = cdoSession.openTransaction();
+ CDOTransaction t =openTransaction(resourceURI);
+ t.options().addConflictResolver(new CDOMergingConflictResolver());
t.options().addChangeSubscriptionPolicy(CDOAdapterPolicy.ALL);
- CDOResource resource = getResourceFromTransaction(resourceName, t);
-
+ t.addListener(new IListener() {
+
+ public void notifyEvent(IEvent event) {
+ if (event instanceof CDOViewInvalidationEvent) {
+ CDOViewInvalidationEvent cdoViewInvalidationEvent = (CDOViewInvalidationEvent) event;
+ System.out.println(cdoViewInvalidationEvent.getDirtyObjects());
+ System.out.println();
+ }
+ }
+ });
+ if (!t.hasResource(CDOURIData.parse(resourceURI).resourceName)) {
+ return null;
+ }
+ CDOResource resource = t.getResource(CDOURIData.parse(resourceURI).resourceName, true);
resourceSet.getResources().add(resource);
-
return resource;
}
- protected CDOResource getResourceFromTransaction(String resourceName,
- CDOTransaction t) {
- return t.getResource(resourceName);
+ public LoadResourceResponse getResource(AdapterFactoryEditingDomain editingDomain,
+ URI resourceURI) {
+ Resource resource = null;
+ Exception exception = null;
+
+ try {
+ // Load the resource through the editing domain.
+ resource = getResource(editingDomain.getResourceSet(), resourceURI);
+ if(resource==null){
+ resource = createResource(editingDomain.getResourceSet(), resourceURI);
+ emptyResourceInitializer.initialize(resource);
+ ((CDOTransaction)((CDOResource)resource).cdoView()).commit();
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ exception = e;
+ }
+
+ return new LoadResourceResponse(resource, exception);
}
+
+ public Resource createResource(ResourceSet resourceSet, URI resourceURI) {
+ CDOTransaction t =openTransaction(resourceURI);
+
+ CDOResource resource = t.getOrCreateResource(CDOURIData.parse(resourceURI).resourceName);
+
+ resourceSet.getResources().add(resource);
- private static CDOSession openSession(String repoName, String host) {
+ return resource;
+ }
+
+ private static CDONet4jSession openSession(String repoName, String host) {
final IConnector connector = (IConnector) IPluginContainer.INSTANCE
.getElement( //
"org.eclipse.net4j.connectors", // Product group
"tcp", // Type
host); // Description
- CDOSessionConfiguration config = CDONet4jUtil
- .createSessionConfiguration();
+ CDONet4jSessionConfiguration config = CDONet4jUtil.createNet4jSessionConfiguration();
config.setConnector(connector);
config.setRepositoryName(repoName);
- CDOSession session = config.openSession();
+ CDONet4jSession session = config.openNet4jSession();
session.addListener(new LifecycleEventAdapter() {
@Override
@@ -82,4 +117,22 @@ public class CDOResourceLoader extends ResourceLoader {
return session;
}
+
+ private CDOTransaction openTransaction(URI resourceURI){
+ Net4jUtil.prepareContainer(IPluginContainer.INSTANCE);
+ TCPUtil.prepareContainer(IPluginContainer.INSTANCE);
+
+ CDOURIData data = CDOURIData.parse(resourceURI);
+
+ String host = data.host;
+ String repoName = data.sessionName;
+// String resourceName = data.resourceName;
+
+// CDONet4jSession cdoSession = openSession(repoName, host);
+ CDOSession cdoSession =sessionManager.getSession(null);
+
+ CDOTransaction transaction = cdoSession.openTransaction();
+ transaction.options().addChangeSubscriptionPolicy(CDOAdapterPolicy.ALL);
+ return transaction;
+ }
}

Back to the top