Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Stepper2015-04-27 16:53:25 +0000
committerEike Stepper2015-04-28 06:49:03 +0000
commit78e1c324c06816ca50cb2947c7e582103757bd4d (patch)
treed9da1edc0cdd63d0e9b486a113b53f800dd76b25 /plugins/org.eclipse.emf.cdo
parentd2c5b0ee9d0634fb6c79d99e6952ee0d7c752dd7 (diff)
downloadcdo-78e1c324c06816ca50cb2947c7e582103757bd4d.tar.gz
cdo-78e1c324c06816ca50cb2947c7e582103757bd4d.tar.xz
cdo-78e1c324c06816ca50cb2947c7e582103757bd4d.zip
[458349] Consolidate UI
Change-Id: Iea0e1cf37bfc35a67f589c265fcb2e9d92e67581 Task-Url: https://bugs.eclipse.org/bugs/show_bug.cgi?id=458349 Signed-off-by: Eike Stepper <stepper@esc-net.de>
Diffstat (limited to 'plugins/org.eclipse.emf.cdo')
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/eresource/impl/CDOResourceFactoryImpl.java4
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/eresource/impl/CDOResourceImpl.java273
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/eresource/impl/CDOResourceNodeImpl.java8
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/util/CDOUtil.java50
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/view/AbstractCDOViewProvider.java14
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/view/CDOStaleReferencePolicy.java29
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/view/CDOViewProvider.java9
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOObjectImpl.java14
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/messages/messages.properties4
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/object/CDOLegacyWrapper.java11
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/transaction/CDOTransactionImpl.java12
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/AbstractCDOView.java7
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/CDOURIHandler.java22
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/CDOViewProviderRegistryImpl.java55
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/CDOViewSetImpl.java17
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/InternalCDOResource.java3
16 files changed, 457 insertions, 75 deletions
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/eresource/impl/CDOResourceFactoryImpl.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/eresource/impl/CDOResourceFactoryImpl.java
index a73b9cba72..7315972e7e 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/eresource/impl/CDOResourceFactoryImpl.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/eresource/impl/CDOResourceFactoryImpl.java
@@ -55,8 +55,10 @@ public class CDOResourceFactoryImpl implements CDOResourceFactory
public Resource createResource(URI uri)
{
+ boolean existing = isGetResource();
+
CDOResourceImpl resource = createCDOResource(uri);
- resource.setExisting(isGetResource());
+ resource.setExisting(existing);
return resource;
}
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/eresource/impl/CDOResourceImpl.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/eresource/impl/CDOResourceImpl.java
index 187db1f85f..e1e98752bc 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/eresource/impl/CDOResourceImpl.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/eresource/impl/CDOResourceImpl.java
@@ -25,7 +25,6 @@ import org.eclipse.emf.cdo.util.CDOModificationTrackingAdapter;
import org.eclipse.emf.cdo.util.CDOURIUtil;
import org.eclipse.emf.cdo.util.CDOUtil;
import org.eclipse.emf.cdo.util.CommitException;
-import org.eclipse.emf.cdo.util.ReadOnlyException;
import org.eclipse.emf.cdo.view.CDOView;
import org.eclipse.emf.cdo.view.CDOViewProvider;
import org.eclipse.emf.cdo.view.CDOViewProviderRegistry;
@@ -61,10 +60,13 @@ import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.emf.ecore.util.EcoreUtil.ContentTreeIterator;
import org.eclipse.emf.ecore.util.EcoreUtil.ProperContentIterator;
import org.eclipse.emf.ecore.util.InternalEList;
+import org.eclipse.emf.ecore.xmi.DOMHandler;
+import org.eclipse.emf.ecore.xmi.DOMHelper;
import org.eclipse.emf.ecore.xmi.XMIResource;
import org.eclipse.emf.ecore.xmi.XMLHelper;
import org.eclipse.emf.ecore.xmi.impl.XMIHelperImpl;
import org.eclipse.emf.ecore.xmi.impl.XMIResourceImpl;
+import org.eclipse.emf.ecore.xml.type.AnyType;
import org.eclipse.emf.spi.cdo.FSMUtil;
import org.eclipse.emf.spi.cdo.InternalCDOObject;
import org.eclipse.emf.spi.cdo.InternalCDOResource;
@@ -74,9 +76,14 @@ import org.eclipse.emf.spi.cdo.InternalCDOViewSet;
import org.eclipse.core.runtime.IProgressMonitor;
+import org.w3c.dom.Document;
+import org.w3c.dom.Node;
+import org.xml.sax.InputSource;
+
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
+import java.io.Writer;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
@@ -130,6 +137,11 @@ public class CDOResourceImpl extends CDOResourceLeafImpl implements CDOResource,
private URI initialURI;
/**
+ * @ADDED
+ */
+ private URI uri;
+
+ /**
* TODO Set to true in commit()?
*
* @ADDED
@@ -308,6 +320,11 @@ public class CDOResourceImpl extends CDOResourceLeafImpl implements CDOResource,
@Override
public URI getURI()
{
+ if (uri != null)
+ {
+ return uri;
+ }
+
if ((cdoID() == null || cdoView() == null || cdoView().isClosed()) && initialURI != null)
{
return initialURI;
@@ -343,12 +360,15 @@ public class CDOResourceImpl extends CDOResourceLeafImpl implements CDOResource,
*/
public void setURI(URI newURI)
{
- URI uri = getURI();
+ boolean notificationRequired = eNotificationRequired();
+ URI oldURI = notificationRequired ? getURI() : null;
+
String newPath = CDOURIUtil.extractResourcePath(newURI);
setPath(newPath);
- if (eNotificationRequired())
+
+ if (notificationRequired)
{
- Notification notification = new NotificationImpl(Notification.SET, uri, newURI)
+ Notification notification = new NotificationImpl(Notification.SET, oldURI, newURI)
{
@Override
public Object getNotifier()
@@ -362,10 +382,21 @@ public class CDOResourceImpl extends CDOResourceLeafImpl implements CDOResource,
return RESOURCE__URI;
}
};
+
eNotify(notification);
}
}
+ /**
+ * @ADDED
+ */
+ @Override
+ public void setPath(String newPath)
+ {
+ super.setPath(newPath);
+ uri = CDOURIUtil.createResourceURI(cdoView(), newPath);
+ }
+
@Override
public Object eGet(int featureID, boolean resolve, boolean coreType)
{
@@ -531,7 +562,7 @@ public class CDOResourceImpl extends CDOResourceLeafImpl implements CDOResource,
{
if (cdoView().isReadOnly())
{
- throw new ReadOnlyException("Underlying view is read-only");
+ return;
}
if (newTrackingModification == isTrackingModification())
@@ -1210,16 +1241,16 @@ public class CDOResourceImpl extends CDOResourceLeafImpl implements CDOResource,
IProgressMonitor progressMonitor = options != null
? (IProgressMonitor)options.get(CDOResource.OPTION_SAVE_PROGRESS_MONITOR) : null;
- try
- {
- transaction.commit(progressMonitor);
- }
- catch (CommitException ex)
- {
- throw new TransactionException(ex);
- }
+ try
+ {
+ transaction.commit(progressMonitor);
+ }
+ catch (CommitException ex)
+ {
+ throw new TransactionException(ex);
+ }
- setModified(false);
+ setModified(false);
}
/**
@@ -1230,20 +1261,20 @@ public class CDOResourceImpl extends CDOResourceLeafImpl implements CDOResource,
CDOTransaction transaction = options != null
? (CDOTransaction)options.get(CDOResource.OPTION_SAVE_OVERRIDE_TRANSACTION) : null;
- if (transaction == null)
- {
- CDOView view = cdoView();
- if (view instanceof CDOTransaction)
- {
- transaction = (CDOTransaction)view;
- }
- else
- {
- throw new IllegalStateException("No transaction available");
- }
- }
+ if (transaction == null)
+ {
+ CDOView view = cdoView();
+ if (view instanceof CDOTransaction)
+ {
+ transaction = (CDOTransaction)view;
+ }
+ else
+ {
+ throw new IllegalStateException("No transaction available");
+ }
+ }
- return transaction;
+ return transaction;
}
/**
@@ -1478,10 +1509,20 @@ public class CDOResourceImpl extends CDOResourceLeafImpl implements CDOResource,
InternalCDOTransaction transaction = (InternalCDOTransaction)view;
InternalCDOObject cdoObject = FSMUtil.adapt(object, transaction);
- if (CDOUtil.isLegacyObject(cdoObject) && FSMUtil.isClean(cdoObject))
+ if (CDOUtil.isLegacyObject(cdoObject))
{
- // Bug 352204
- return;
+ if (FSMUtil.isClean(cdoObject))
+ {
+ // Bug 352204
+ return;
+ }
+
+ int xxx;
+ // EReference containmentFeature = object.eContainmentFeature();
+ // if (!EMFUtil.isPersistent(containmentFeature))
+ // {
+ // return;
+ // }
}
attached(cdoObject, transaction);
@@ -1698,6 +1739,178 @@ public class CDOResourceImpl extends CDOResourceLeafImpl implements CDOResource,
// }
// }
+ /* XML STUFF BEGIN */
+
+ /**
+ * @since 4.4
+ */
+ public String getID(EObject eObject)
+ {
+ return getURIFragment(eObject);
+ }
+
+ /**
+ * @since 4.4
+ */
+ public void setID(EObject eObject, String id)
+ {
+ // Do nothing.
+ }
+
+ /**
+ * @since 4.4
+ */
+ public boolean useZip()
+ {
+ return false;
+ }
+
+ /**
+ * @since 4.4
+ */
+ public void setUseZip(boolean useZip)
+ {
+ // Do nothing.
+ }
+
+ /**
+ * @since 4.4
+ */
+ public String getPublicId()
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * @since 4.4
+ */
+ public String getSystemId()
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * @since 4.4
+ */
+ public DOMHelper getDOMHelper()
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * @since 4.4
+ */
+ public Map<Object, Object> getDefaultLoadOptions()
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * @since 4.4
+ */
+ public Map<Object, Object> getDefaultSaveOptions()
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * @since 4.4
+ */
+ public Map<EObject, AnyType> getEObjectToExtensionMap()
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * @since 4.4
+ */
+ public String getEncoding()
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * @since 4.4
+ */
+ public void setEncoding(String encoding)
+ {
+ // Do nothing.
+ }
+
+ /**
+ * @since 4.4
+ */
+ public String getXMLVersion()
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * @since 4.4
+ */
+ public void setXMLVersion(String version)
+ {
+ // Do nothing.
+ }
+
+ /**
+ * @since 4.4
+ */
+ public void setDoctypeInfo(String publicId, String systemId)
+ {
+ // Do nothing.
+ }
+
+ /**
+ * @since 4.4
+ */
+ public void load(Node node, Map<?, ?> options) throws IOException
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * @since 4.4
+ */
+ public void load(InputSource inputSource, Map<?, ?> options) throws IOException
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * @since 4.4
+ */
+ public void save(Writer writer, Map<?, ?> options) throws IOException
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * @since 4.4
+ */
+ public Document save(Document document, Map<?, ?> options, DOMHandler handler)
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * @since 4.4
+ */
+ @Deprecated
+ public Map<String, EObject> getIDToEObjectMap()
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * @since 4.4
+ */
+ @Deprecated
+ public Map<EObject, String> getEObjectToIDMap()
+ {
+ throw new UnsupportedOperationException();
+ }
+
/**
* An implementation of a CDO specific '<em><b>contents</b></em>' list.
*
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/eresource/impl/CDOResourceNodeImpl.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/eresource/impl/CDOResourceNodeImpl.java
index 81693a5237..0bade87d33 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/eresource/impl/CDOResourceNodeImpl.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/eresource/impl/CDOResourceNodeImpl.java
@@ -325,7 +325,13 @@ public abstract class CDOResourceNodeImpl extends CDOObjectImpl implements CDORe
InternalCDORevision revision = cdoRevision();
if (revision != null)
{
- string += "(\"" + revision.getResourceNodeName() + "\")";
+ String name = revision.getResourceNodeName();
+ if (name == null)
+ {
+ name = "/";
+ }
+
+ string += "(\"" + name + "\")";
}
return string;
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/util/CDOUtil.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/util/CDOUtil.java
index 7d832015d4..641f3a8a6d 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/util/CDOUtil.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/util/CDOUtil.java
@@ -68,6 +68,7 @@ import org.eclipse.emf.common.notify.Adapter;
import org.eclipse.emf.common.notify.Notifier;
import org.eclipse.emf.common.util.BasicEList;
import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.common.util.Logger;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EPackage;
@@ -368,15 +369,6 @@ public final class CDOUtil
return (CDOViewSet)notifier;
}
- EList<Adapter> adapters = notifier.eAdapters();
- for (Adapter adapter : adapters)
- {
- if (adapter instanceof CDOViewSet)
- {
- return (CDOViewSet)adapter;
- }
- }
-
if (notifier instanceof Resource)
{
Resource resource = (Resource)notifier;
@@ -391,6 +383,15 @@ public final class CDOUtil
}
}
+ EList<Adapter> adapters = notifier.eAdapters();
+ for (Adapter adapter : adapters)
+ {
+ if (adapter instanceof CDOViewSet)
+ {
+ return (CDOViewSet)adapter;
+ }
+ }
+
if (notifier instanceof InternalEObject)
{
InternalEObject object = (InternalEObject)notifier;
@@ -419,11 +420,40 @@ public final class CDOUtil
}
/**
+ * @since 4.4
+ */
+ public static CDOView getView(Notifier notifier)
+ {
+ CDOViewSet viewSet = getViewSet(notifier);
+ if (viewSet != null)
+ {
+ CDOView[] views = viewSet.getViews();
+ if (views != null && views.length != 0)
+ {
+ return views[0];
+ }
+ }
+
+ return null;
+ }
+
+ /**
* @since 3.0
*/
public static boolean isStaleObject(Object object)
{
- return object instanceof CDOStaleObject;
+ if (object instanceof CDOStaleObject)
+ {
+ return true;
+ }
+
+ if (object instanceof Logger)
+ {
+ // See org.eclipse.emf.cdo.view.CDOStaleReferencePolicy.DynamicProxy
+ return true;
+ }
+
+ return false;
}
/**
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 bbd7f29ca4..d38c45f6fd 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
@@ -11,6 +11,8 @@
*/
package org.eclipse.emf.cdo.view;
+import org.eclipse.emf.cdo.view.CDOViewProvider.CDOViewProvider2;
+
import org.eclipse.net4j.util.ReflectUtil.ExcludeFromDump;
import org.eclipse.emf.common.util.URI;
@@ -25,7 +27,7 @@ import java.util.regex.Pattern;
* @since 2.0
* @apiviz.exclude
*/
-public abstract class AbstractCDOViewProvider implements CDOViewProvider
+public abstract class AbstractCDOViewProvider implements CDOViewProvider2
{
private String regex;
@@ -96,4 +98,14 @@ public abstract class AbstractCDOViewProvider implements CDOViewProvider
{
return null;
}
+
+ /**
+ * Must be overwritten for non-canonical URI formats!
+ *
+ * @since 4.4
+ */
+ public String getPath(URI uri)
+ {
+ return null;
+ }
}
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/view/CDOStaleReferencePolicy.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/view/CDOStaleReferencePolicy.java
index fb1a807c89..2a8b28ba06 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/view/CDOStaleReferencePolicy.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/view/CDOStaleReferencePolicy.java
@@ -26,6 +26,8 @@ import org.eclipse.emf.common.notify.Adapter;
import org.eclipse.emf.common.notify.Notifier;
import org.eclipse.emf.common.notify.impl.BasicNotifierImpl.EAdapterList;
import org.eclipse.emf.common.util.BasicEList;
+import org.eclipse.emf.common.util.Logger;
+import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EClassifier;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EStructuralFeature;
@@ -238,14 +240,30 @@ public interface CDOStaleReferencePolicy
// Be sure to have only interface
if (instanceClass.isInterface())
{
- interfaces = new Class<?>[] { instanceClass, InternalEObject.class, CDOStaleObject.class };
+ interfaces = new Class<?>[] { InternalEObject.class, CDOStaleObject.class, instanceClass };
}
else
{
interfaces = new Class<?>[] { InternalEObject.class, CDOStaleObject.class };
}
- return Proxy.newProxyInstance(instanceClass.getClassLoader(), interfaces, handler);
+ try
+ {
+ return Proxy.newProxyInstance(instanceClass.getClassLoader(), interfaces, handler);
+ }
+ catch (IllegalArgumentException ex)
+ {
+ String message = ex.getMessage();
+ if (message != null && message.contains("CDOStaleObject"))
+ {
+ // Interface org.eclipse.emf.cdo.view.CDOStaleObject is not visible from class loader.
+ // Use org.eclipse.emf.common.util.Logger instead.
+ interfaces[1] = Logger.class;
+ return Proxy.newProxyInstance(instanceClass.getClassLoader(), interfaces, handler);
+ }
+
+ throw ex;
+ }
}
protected EClassifier getType(EObject source, EStructuralFeature feature, int index, CDOID target)
@@ -314,7 +332,12 @@ public interface CDOStaleReferencePolicy
private void addType(CDOObject object)
{
- types.putIfAbsent(object.cdoID(), object.eClass());
+ CDOID id = object.cdoID();
+ EClass type = object.eClass();
+ if (id != null && type != null)
+ {
+ types.putIfAbsent(id, type);
+ }
}
}
}
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/view/CDOViewProvider.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/view/CDOViewProvider.java
index 20bd6adb7e..9ec86d0809 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/view/CDOViewProvider.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/view/CDOViewProvider.java
@@ -53,4 +53,13 @@ public interface CDOViewProvider
* @since 4.0
*/
public URI getResourceURI(CDOView view, String path);
+
+ /**
+ * @author Eike Stepper
+ * @since 4.4
+ */
+ public interface CDOViewProvider2 extends CDOViewProvider
+ {
+ public String getPath(URI uri);
+ }
}
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOObjectImpl.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOObjectImpl.java
index bb63b4b1a8..d02b7bb163 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOObjectImpl.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOObjectImpl.java
@@ -358,6 +358,15 @@ public class CDOObjectImpl extends MinimalEStoreEObjectImpl implements InternalC
}
else
{
+ if (this.revision != null)
+ {
+ CDOID objectID = this.revision.getID();
+ if (objectID != null && objectID != revision.getID())
+ {
+ throw new IllegalArgumentException("The revision " + revision + " does not match the object " + objectID);
+ }
+ }
+
this.revision = (InternalCDORevision)revision;
}
}
@@ -760,7 +769,8 @@ public class CDOObjectImpl extends MinimalEStoreEObjectImpl implements InternalC
public final NotificationChain eBasicSetContainer(InternalEObject newContainer, int newContainerFeatureID,
NotificationChain msgs)
{
- boolean isResourceRoot = this instanceof CDOResource && ((CDOResource)this).isRoot();
+ boolean isResource = this instanceof CDOResource;
+ boolean isRootResource = isResource && ((CDOResource)this).isRoot();
InternalEObject oldContainer = eInternalContainer();
Resource.Internal oldResource = eDirectResource();
@@ -796,7 +806,7 @@ public class CDOObjectImpl extends MinimalEStoreEObjectImpl implements InternalC
: null;
boolean moved = oldView != null && oldView == newView;
- if (!moved && oldResource != null && oldResource != newResource && !isResourceRoot)
+ if (!moved && oldResource != null && oldResource != newResource && !isRootResource)
{
oldResource.detached(this);
}
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/messages/messages.properties b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/messages/messages.properties
index 62439301db..82bcf62fe5 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/messages/messages.properties
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/messages/messages.properties
@@ -57,8 +57,8 @@ CDOViewImpl.5=Node {0} not found
CDOViewImpl.7=No top level ResourceNode with the name {0}
CDOViewImpl.8=Duplicate top-level ResourceNodes
CDOViewImpl.9=Cannot find revision with ID {0}
-CDOViewProviderRegistryImpl.4=class not defined for extension {0}
-CDOViewProviderRegistryImpl.6=regex not defined for extension {0}
+CDOViewProviderRegistryImpl.4=Class not defined for extension {0}
+CDOViewProviderRegistryImpl.6=Regex not defined for extension {0}
CDOViewSetImpl.0=Cannot find associated CDOView for repository {0}
CDOViewSetImpl.1=Do not know which CDOView to take since no authority has been specified
CDOViewSetImpl.2=Only one view per repository can be open for the same resource set
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/object/CDOLegacyWrapper.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/object/CDOLegacyWrapper.java
index c2ad3d0bd5..b6a09cfe65 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/object/CDOLegacyWrapper.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/object/CDOLegacyWrapper.java
@@ -574,11 +574,14 @@ public abstract class CDOLegacyWrapper extends CDOObjectWrapper
if (revision != null)
{
CDOID resourceID = revision.getResourceID();
- InternalEObject resource = getEObjectFromPotentialID(viewAndState.view, null, resourceID);
- setInstanceResource((Resource.Internal)resource);
- if (resource != null)
+ if (!CDOIDUtil.isNull(resourceID))
{
- viewAndState.view.registerObject((InternalCDOObject)resource);
+ InternalEObject resource = getEObjectFromPotentialID(viewAndState.view, null, resourceID);
+ setInstanceResource((Resource.Internal)resource);
+ if (resource != null)
+ {
+ viewAndState.view.registerObject((InternalCDOObject)resource);
+ }
}
}
}
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/transaction/CDOTransactionImpl.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/transaction/CDOTransactionImpl.java
index 6d21152b63..5eea5e796e 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/transaction/CDOTransactionImpl.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/transaction/CDOTransactionImpl.java
@@ -1292,6 +1292,7 @@ public class CDOTransactionImpl extends CDOViewImpl implements InternalCDOTransa
{
throw new OperationCanceledException("CDOTransactionImpl.7");//$NON-NLS-1$
}
+
throw new CommitException(t);
}
finally
@@ -3193,8 +3194,11 @@ public class CDOTransactionImpl extends CDOViewImpl implements InternalCDOTransa
((InternalCDOPackageUnit)newPackageUnit).setState(CDOPackageUnit.State.LOADED);
}
- postCommit(getNewObjects(), result);
- postCommit(getDirtyObjects(), result);
+ Map<CDOID, CDOObject> newObjects = getNewObjects();
+ postCommit(newObjects, result);
+
+ Map<CDOID, CDOObject> dirtyObjects = getDirtyObjects();
+ postCommit(dirtyObjects, result);
for (CDORevisionDelta delta : getRevisionDeltas().values())
{
@@ -3220,12 +3224,12 @@ public class CDOTransactionImpl extends CDOViewImpl implements InternalCDOTransa
CDOBranchPoint commitBranchPoint = CDOBranchUtil.copyBranchPoint(result);
// Note: keyset() does not work because ID mappings are not applied there!
- for (CDOObject object : getNewObjects().values())
+ for (CDOObject object : newObjects.values())
{
session.setCommittedSinceLastRefresh(object.cdoID(), commitBranchPoint);
}
- for (CDOID id : getDirtyObjects().keySet())
+ for (CDOID id : dirtyObjects.keySet())
{
session.setCommittedSinceLastRefresh(id, commitBranchPoint);
}
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/AbstractCDOView.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/AbstractCDOView.java
index 92877852f3..3291bcc6f4 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/AbstractCDOView.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/AbstractCDOView.java
@@ -1172,6 +1172,13 @@ public abstract class AbstractCDOView extends CDOCommitHistoryProviderImpl<CDOOb
CDOID id = object.cdoID();
InternalCDOObject contextified = getObject(id, true);
+ if (objectFromDifferentView instanceof CDOLegacyAdapter)
+ {
+ @SuppressWarnings("unchecked")
+ T cast = (T)contextified;
+ return cast;
+ }
+
@SuppressWarnings("unchecked")
T cast = (T)CDOUtil.getEObject(contextified);
return cast;
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 3d2e33cced..062654b853 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
@@ -17,6 +17,7 @@ import org.eclipse.emf.cdo.eresource.CDOResourceNode;
import org.eclipse.emf.cdo.transaction.CDOTransaction;
import org.eclipse.emf.cdo.util.CDOURIUtil;
import org.eclipse.emf.cdo.view.CDOViewProvider;
+import org.eclipse.emf.cdo.view.CDOViewProvider.CDOViewProvider2;
import org.eclipse.emf.cdo.view.CDOViewProviderRegistry;
import org.eclipse.net4j.util.io.IOUtil;
@@ -68,7 +69,8 @@ public class CDOURIHandler implements URIHandler
public boolean exists(URI uri, Map<?, ?> options)
{
- return view.hasResource(CDOURIUtil.extractResourcePath(uri));
+ String path = getPath(uri);
+ return view.hasResource(path);
}
public void delete(URI uri, Map<?, ?> options) throws IOException
@@ -146,4 +148,22 @@ public class CDOURIHandler implements URIHandler
// ViK: We can't change any of the proposed attributes. Only TIME_STAMP, and I believe we are not
// storing that attribute in the server. Due to CDOResouce distributed nature, changing it wouldn't make much sense.
}
+
+ private String getPath(URI uri)
+ {
+ if (CDO_URI_SCHEME.equals(uri.scheme()))
+ {
+ return CDOURIUtil.extractResourcePath(uri);
+ }
+
+ for (CDOViewProvider viewProvider : CDOViewProviderRegistry.INSTANCE.getViewProviders(uri))
+ {
+ if (viewProvider instanceof CDOViewProvider2)
+ {
+ return ((CDOViewProvider2)viewProvider).getPath(uri);
+ }
+ }
+
+ return null;
+ }
}
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 14f5847eb4..c8f32369f6 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
@@ -114,11 +114,15 @@ public class CDOViewProviderRegistryImpl extends Container<CDOViewProvider>imple
public CDOViewProvider[] getViewProviders(URI uri)
{
List<CDOViewProvider> result = new ArrayList<CDOViewProvider>();
- for (CDOViewProvider viewProvider : viewProviders)
+
+ synchronized (viewProviders)
{
- if (viewProvider.matchesRegex(uri))
+ for (CDOViewProvider viewProvider : viewProviders)
{
- result.add(viewProvider);
+ if (viewProvider.matchesRegex(uri))
+ {
+ result.add(viewProvider);
+ }
}
}
@@ -235,7 +239,7 @@ public class CDOViewProviderRegistryImpl extends Container<CDOViewProvider>imple
public CDOViewProviderDescriptor(IConfigurationElement element)
{
- super(element.getAttribute("regex"), Integer.parseInt(element.getAttribute("priority"))); //$NON-NLS-1$ //$NON-NLS-2$
+ super(getRegex(element), getPriority(element));
this.element = element;
if (StringUtil.isEmpty(element.getAttribute("class"))) //$NON-NLS-1$
@@ -243,12 +247,6 @@ public class CDOViewProviderRegistryImpl extends Container<CDOViewProvider>imple
throw new IllegalArgumentException(
MessageFormat.format(Messages.getString("CDOViewProviderRegistryImpl.4"), element)); //$NON-NLS-1$
}
-
- if (StringUtil.isEmpty(element.getAttribute("regex"))) //$NON-NLS-1$
- {
- throw new IllegalArgumentException(
- MessageFormat.format(Messages.getString("CDOViewProviderRegistryImpl.6"), element)); //$NON-NLS-1$
- }
}
public CDOView getView(URI uri, ResourceSet resourceSet)
@@ -262,6 +260,18 @@ public class CDOViewProviderRegistryImpl extends Container<CDOViewProvider>imple
return getViewProvider().getResourceURI(view, path);
}
+ @Override
+ public String getPath(URI uri)
+ {
+ CDOViewProvider viewProvider = getViewProvider();
+ if (viewProvider instanceof CDOViewProvider2)
+ {
+ return ((CDOViewProvider2)viewProvider).getPath(uri);
+ }
+
+ return super.getPath(uri);
+ }
+
private CDOViewProvider getViewProvider()
{
try
@@ -273,5 +283,30 @@ public class CDOViewProviderRegistryImpl extends Container<CDOViewProvider>imple
throw WrappedException.wrap(ex);
}
}
+
+ private static String getRegex(IConfigurationElement element)
+ {
+ String value = element.getAttribute("regex");
+ if (StringUtil.isEmpty(value))
+ {
+ throw new IllegalArgumentException(
+ MessageFormat.format(Messages.getString("CDOViewProviderRegistryImpl.6"), element)); //$NON-NLS-1$
+ }
+
+ return value;
+ }
+
+ private static int getPriority(IConfigurationElement element)
+ {
+ try
+ {
+ String value = element.getAttribute("priority");
+ return Integer.parseInt(value);
+ }
+ catch (Exception ex)
+ {
+ return DEFAULT_PRIORITY;
+ }
+ }
}
}
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/CDOViewSetImpl.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/CDOViewSetImpl.java
index 565afc67a2..d38c8af8c7 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/CDOViewSetImpl.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/CDOViewSetImpl.java
@@ -30,7 +30,6 @@ import org.eclipse.emf.common.notify.impl.NotificationImpl;
import org.eclipse.emf.common.notify.impl.NotifierImpl;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.resource.Resource;
-import org.eclipse.emf.ecore.resource.Resource.Factory.Registry;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.spi.cdo.InternalCDOObject;
import org.eclipse.emf.spi.cdo.InternalCDOView;
@@ -58,7 +57,7 @@ public class CDOViewSetImpl extends NotifierImpl implements InternalCDOViewSet
private Map<String, InternalCDOView> mapOfViews = new HashMap<String, InternalCDOView>();
- private CDOResourceFactory resourceFactory = CDOResourceFactory.INSTANCE;
+ private CDOResourceFactory resourceFactory;
private CDOViewSetPackageRegistryImpl packageRegistry;
@@ -244,9 +243,17 @@ public class CDOViewSetImpl extends NotifierImpl implements InternalCDOViewSet
packageRegistry = new CDOViewSetPackageRegistryImpl(this, oldPackageRegistry);
resourceSet.setPackageRegistry(packageRegistry);
- Registry registry = resourceSet.getResourceFactoryRegistry();
- Map<String, Object> map = registry.getProtocolToFactoryMap();
- map.put(CDOProtocolConstants.PROTOCOL_NAME, getResourceFactory());
+ Map<String, Object> map = resourceSet.getResourceFactoryRegistry().getProtocolToFactoryMap();
+ Resource.Factory resourceFactory = (Resource.Factory)map.get(CDOProtocolConstants.PROTOCOL_NAME);
+ if (resourceFactory instanceof CDOResourceFactory)
+ {
+ this.resourceFactory = (CDOResourceFactory)resourceFactory;
+ }
+ else if (resourceFactory == null)
+ {
+ this.resourceFactory = CDOResourceFactory.INSTANCE;
+ map.put(CDOProtocolConstants.PROTOCOL_NAME, this.resourceFactory);
+ }
}
}
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/InternalCDOResource.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/InternalCDOResource.java
index 18f0ab1ce3..834401410d 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/InternalCDOResource.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/InternalCDOResource.java
@@ -14,6 +14,7 @@ import org.eclipse.emf.cdo.eresource.CDOResource;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.xmi.XMLResource;
/**
* Internal protocol for the {@link CDOResource}.
@@ -22,7 +23,7 @@ import org.eclipse.emf.ecore.resource.Resource;
* @noextend This interface is not intended to be extended by clients.
* @noimplement This interface is not intended to be implemented by clients.
*/
-public interface InternalCDOResource extends CDOResource, Resource.Internal
+public interface InternalCDOResource extends CDOResource, Resource.Internal, XMLResource
{
/**
* Informs the resource that an {@code object} contained within it is being loaded.

Back to the top