Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/org.eclipse.emf.cdo/src/org')
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/transaction/CDOPushTransaction.java6
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/view/AbstractCDOViewProvider.java8
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/view/CDOView.java2
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/CDOURIHandler.java7
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/CDOViewProviderRegistryImpl.java60
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/PluginContainerViewProvider.java17
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/InternalCDOViewSet.java3
7 files changed, 85 insertions, 18 deletions
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/transaction/CDOPushTransaction.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/transaction/CDOPushTransaction.java
index 3ee117aa10..8b0dfefb45 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/transaction/CDOPushTransaction.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/transaction/CDOPushTransaction.java
@@ -600,11 +600,17 @@ public class CDOPushTransaction extends Notifier implements CDOTransaction
return delegate.getSession();
}
+ /**
+ * @since 4.4
+ */
public CDOViewProvider getProvider()
{
return delegate.getProvider();
}
+ /**
+ * @since 4.4
+ */
public URI createResourceURI(String path)
{
return delegate.createResourceURI(path);
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/view/AbstractCDOViewProvider.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/view/AbstractCDOViewProvider.java
index 1e2b04e7d4..eede842478 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/view/AbstractCDOViewProvider.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/view/AbstractCDOViewProvider.java
@@ -108,22 +108,22 @@ public abstract class AbstractCDOViewProvider implements CDOViewProvider2
}
/**
- * Must be overwritten for non-canonical URI formats!
+ * Should be overwritten for non-canonical URI formats!
*
* @since 4.4
*/
public URI getViewURI(URI uri)
{
- return null;
+ return URI.createHierarchicalURI(uri.scheme(), uri.authority(), uri.device(), null, null);
}
/**
- * Must be overwritten for non-canonical URI formats!
+ * Should be overwritten for non-canonical URI formats!
*
* @since 4.4
*/
public String getPath(URI uri)
{
- return null;
+ return uri.path();
}
}
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/view/CDOView.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/view/CDOView.java
index 6a10b461be..6edeec568e 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/view/CDOView.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/view/CDOView.java
@@ -109,6 +109,8 @@ public interface CDOView extends CDOCommonView, CDOUpdatable, CDOCommitHistory.P
/**
* Returns the {@link CDOViewProvider provider} that has opened this view.
+ *
+ * @since 4.4
*/
public CDOViewProvider getProvider();
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/CDOURIHandler.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/CDOURIHandler.java
index 533e0550bc..2a71c70b04 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/CDOURIHandler.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/CDOURIHandler.java
@@ -57,13 +57,6 @@ public class CDOURIHandler implements URIHandler
public boolean canHandle(URI uri)
{
- int xxx;
- // if (CDO_URI_SCHEME.equals(uri.scheme()))
- // {
- // String uuid = view.getSession().getRepositoryInfo().getUUID();
- // return uuid.equals(CDOURIUtil.extractRepositoryUUID(uri));
- // }
-
CDOViewProvider[] viewProviders = CDOViewProviderRegistry.INSTANCE.getViewProviders(uri);
return viewProviders.length != 0;
}
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/CDOViewProviderRegistryImpl.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/CDOViewProviderRegistryImpl.java
index 9f84622be8..92e7d3759d 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/CDOViewProviderRegistryImpl.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/CDOViewProviderRegistryImpl.java
@@ -30,6 +30,7 @@ import org.eclipse.net4j.util.om.OMPlatform;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.spi.cdo.InternalCDOView;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IConfigurationElement;
@@ -90,24 +91,69 @@ public class CDOViewProviderRegistryImpl extends Container<CDOViewProvider>imple
for (CDOViewProvider viewProvider : getViewProviders(uri))
{
- if (viewSet != null && viewProvider instanceof CDOViewProvider2)
+ InternalCDOView view = provideView(uri, resourceSet, viewSet, viewProvider);
+ if (view != null)
{
- URI viewURI = ((CDOViewProvider2)viewProvider).getViewURI(uri);
+ CDOViewProvider provider = view.getProvider();
+ if (provider != null)
+ {
+ if (provider != viewProvider)
+ {
+ throw new IllegalStateException("View providers don't match");
+ }
+ }
+ else
+ {
+ view.setProvider(viewProvider);
+ }
+
+ return view;
+ }
+ }
- CDOView view = viewSet.resolveView(viewURI);
+ return null;
+ }
+
+ private InternalCDOView provideView(URI uri, ResourceSet resourceSet, CDOViewSet viewSet,
+ CDOViewProvider viewProvider)
+ {
+ if (viewSet != null && viewProvider instanceof CDOViewProvider2)
+ {
+ URI viewURI;
+
+ try
+ {
+ viewURI = ((CDOViewProvider2)viewProvider).getViewURI(uri);
+ }
+ catch (IllegalArgumentException ex)
+ {
+ throw new IllegalArgumentException(ex.getMessage() + ": " + uri, ex);
+ }
+ catch (Error ex)
+ {
+ throw ex;
+ }
+
+ try
+ {
+ InternalCDOView view = (InternalCDOView)viewSet.resolveView(viewURI);
if (view != null)
{
return view;
}
}
-
- CDOView view = viewProvider.getView(uri, resourceSet);
- if (view != null)
+ catch (Exception ex)
{
- return view;
+ //$FALL-THROUGH$
}
}
+ InternalCDOView view = (InternalCDOView)viewProvider.getView(uri, resourceSet);
+ if (view != null)
+ {
+ return view;
+ }
+
return null;
}
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/PluginContainerViewProvider.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/PluginContainerViewProvider.java
index 4e2103e3d0..7cb8465da7 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/PluginContainerViewProvider.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/PluginContainerViewProvider.java
@@ -12,6 +12,7 @@
package org.eclipse.emf.internal.cdo.view;
import org.eclipse.emf.cdo.session.CDOSession;
+import org.eclipse.emf.cdo.util.CDOURIUtil;
import org.eclipse.emf.cdo.util.InvalidURIException;
import org.eclipse.emf.cdo.view.CDOView;
import org.eclipse.emf.cdo.view.CDOViewProvider;
@@ -25,6 +26,8 @@ import org.eclipse.net4j.util.container.IPluginContainer;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.core.runtime.Path;
+
/**
* Provides <code>CDOView</code> from <code>CDOSession</code> registered in IPluginContainer
*
@@ -70,6 +73,20 @@ public class PluginContainerViewProvider extends ManagedContainerViewProvider
}
@Override
+ public URI getResourceURI(CDOView view, String path)
+ {
+ if (path == null)
+ {
+ path = "";
+ }
+
+ String authority = view.getSession().getRepositoryInfo().getUUID();
+ String[] segments = new Path(path).segments();
+
+ return URI.createHierarchicalURI(CDOURIUtil.PROTOCOL_NAME, authority, null, segments, null, null);
+ }
+
+ @Override
protected IManagedContainer getContainer()
{
return IPluginContainer.INSTANCE;
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/InternalCDOViewSet.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/InternalCDOViewSet.java
index 43a7b7942a..d52069af77 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/InternalCDOViewSet.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/InternalCDOViewSet.java
@@ -31,6 +31,9 @@ public interface InternalCDOViewSet extends CDOViewSet, Adapter
public void remove(InternalCDOView view);
+ /**
+ * @since 4.4
+ */
public InternalCDOView resolveView(URI viewURI);
@Deprecated

Back to the top