diff options
author | Francesco Guidieri | 2013-07-23 14:51:42 +0000 |
---|---|---|
committer | Francesco Guidieri | 2013-08-26 15:09:07 +0000 |
commit | c6ba1d1bc0ffee6bfec68c79b73e3d364a673fe4 (patch) | |
tree | f7cf3f94bce1688070039e650954869d300152c0 /plugins/org.eclipse.emf.parsley.cdo | |
parent | 96c5a4011da7e3002d3399edf74a7dca4c55c2b6 (diff) | |
download | org.eclipse.emf-parsley-c6ba1d1bc0ffee6bfec68c79b73e3d364a673fe4.tar.gz org.eclipse.emf-parsley-c6ba1d1bc0ffee6bfec68c79b73e3d364a673fe4.tar.xz org.eclipse.emf-parsley-c6ba1d1bc0ffee6bfec68c79b73e3d364a673fe4.zip |
CDO Resource Loader revisited
Change-Id: I079025d2d625bfc6026dcbd34314e5487eceb5ed
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.java | 109 |
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; + } } |