Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Stepper2009-07-20 05:06:21 +0000
committerEike Stepper2009-07-20 05:06:21 +0000
commit8f84dfafb71b6634d1774f45773f994d7b81b8ea (patch)
tree4eba2b216bf9d1edb665021ef97935b7053fba0b
parent6e9da438713b73fae130737624b01cead345bb4c (diff)
downloadcdo-8f84dfafb71b6634d1774f45773f994d7b81b8ea.tar.gz
cdo-8f84dfafb71b6634d1774f45773f994d7b81b8ea.tar.xz
cdo-8f84dfafb71b6634d1774f45773f994d7b81b8ea.zip
[283945] Prevent EObjects from being passed to a repository
https://bugs.eclipse.org/bugs/show_bug.cgi?id=283945
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/id/CDOID.java12
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/id/CDOIDUtil.java40
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDExternalImpl.java43
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDMetaImpl.java32
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDNullImpl.java36
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDObjectLongImpl.java146
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDObjectStringImpl.java142
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDTempMetaImpl.java32
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDTempObjectExternalImpl.java (renamed from plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDExternalTempImpl.java)4
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDTempObjectImpl.java32
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/io/CDODataInputImpl.java4
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/id/AbstractCDOID.java136
-rw-r--r--plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CommitTransactionPhase2Request.java8
-rw-r--r--plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/CDOIDTest.java8
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/CDOIDDangling.java38
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/util/CDOURIUtil.java3
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOIDDanglingImpl.java195
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOLegacyWrapper.java2
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOObjectImpl.java11
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOStore.java17
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/transaction/CDOTransactionImpl.java58
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/transaction/CDOXACommitContextImpl.java14
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/CDOViewImpl.java10
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/InternalCDOView.java7
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/InternalCDOXATransaction.java4
25 files changed, 786 insertions, 248 deletions
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/id/CDOID.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/id/CDOID.java
index 4da0608cf0..2f77cd044e 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/id/CDOID.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/id/CDOID.java
@@ -4,7 +4,7 @@
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
- *
+ *
* Contributors:
* Eike Stepper - initial API and implementation
* Simon McDuff - http://bugs.eclipse.org/226778
@@ -33,6 +33,11 @@ public interface CDOID extends Serializable, Comparable<CDOID>
public boolean isTemporary();
/**
+ * @since 3.0
+ */
+ public boolean isDangling();
+
+ /**
* @since 2.0
*/
public boolean isExternal();
@@ -56,6 +61,11 @@ public interface CDOID extends Serializable, Comparable<CDOID>
EXTERNAL_OBJECT,
/**
+ * @since 3.0
+ */
+ DANGLING_OBJECT,
+
+ /**
* @since 2.0
*/
EXTERNAL_TEMP_OBJECT, //
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/id/CDOIDUtil.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/id/CDOIDUtil.java
index 483959b389..9a1a6850f3 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/id/CDOIDUtil.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/id/CDOIDUtil.java
@@ -18,7 +18,6 @@ import org.eclipse.emf.cdo.common.model.CDOClassifierRef;
import org.eclipse.emf.cdo.internal.common.bundle.OM;
import org.eclipse.emf.cdo.internal.common.id.CDOIDAndVersionImpl;
import org.eclipse.emf.cdo.internal.common.id.CDOIDExternalImpl;
-import org.eclipse.emf.cdo.internal.common.id.CDOIDExternalTempImpl;
import org.eclipse.emf.cdo.internal.common.id.CDOIDMetaImpl;
import org.eclipse.emf.cdo.internal.common.id.CDOIDMetaRangeImpl;
import org.eclipse.emf.cdo.internal.common.id.CDOIDObjectLongImpl;
@@ -26,6 +25,7 @@ import org.eclipse.emf.cdo.internal.common.id.CDOIDObjectLongWithClassifierImpl;
import org.eclipse.emf.cdo.internal.common.id.CDOIDObjectStringImpl;
import org.eclipse.emf.cdo.internal.common.id.CDOIDObjectStringWithClassifierImpl;
import org.eclipse.emf.cdo.internal.common.id.CDOIDTempMetaImpl;
+import org.eclipse.emf.cdo.internal.common.id.CDOIDTempObjectExternalImpl;
import org.eclipse.emf.cdo.internal.common.id.CDOIDTempObjectImpl;
import org.eclipse.emf.cdo.internal.common.messages.Messages;
import org.eclipse.emf.cdo.spi.common.id.AbstractCDOID;
@@ -109,6 +109,24 @@ public final class CDOIDUtil
/**
* @since 3.0
*/
+ public static CDOIDExternal createTempObjectExternal(String uri)
+ {
+ return new CDOIDTempObjectExternalImpl(uri);
+ }
+
+ public static CDOID createLong(long value)
+ {
+ if (value == AbstractCDOIDLong.NULL_VALUE)
+ {
+ return CDOID.NULL;
+ }
+
+ return new CDOIDObjectLongImpl(value);
+ }
+
+ /**
+ * @since 3.0
+ */
public static CDOID createStringWithClassifier(CDOClassifierRef classifierRef, String value)
{
return new CDOIDObjectStringWithClassifierImpl(classifierRef, value);
@@ -131,24 +149,6 @@ public final class CDOIDUtil
}
/**
- * @since 2.0
- */
- public static CDOIDExternal createExternalTemp(String uri)
- {
- return new CDOIDExternalTempImpl(uri);
- }
-
- public static CDOID createLong(long value)
- {
- if (value == AbstractCDOIDLong.NULL_VALUE)
- {
- return CDOID.NULL;
- }
-
- return new CDOIDObjectLongImpl(value);
- }
-
- /**
* Format of the URI fragment.
* <p>
* Non-legacy: <code>&lt;ID TYPE>/&lt;CUSTOM STRING FROM OBJECT FACTORY></code>
@@ -199,7 +199,7 @@ public final class CDOIDUtil
return new CDOIDExternalImpl(fragment);
case EXTERNAL_TEMP_OBJECT:
- return new CDOIDExternalTempImpl(fragment);
+ return new CDOIDTempObjectExternalImpl(fragment);
case OBJECT:
{
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDExternalImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDExternalImpl.java
index 90c6e678f2..3fede2c13b 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDExternalImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDExternalImpl.java
@@ -35,14 +35,44 @@ public class CDOIDExternalImpl extends AbstractCDOID implements CDOIDExternal
this.uri = uri;
}
- public String getURI()
+ public Type getType()
{
- return uri;
+ return Type.EXTERNAL_OBJECT;
}
- public Type getType()
+ public boolean isDangling()
{
- return Type.EXTERNAL_OBJECT;
+ return false;
+ }
+
+ public boolean isExternal()
+ {
+ return true;
+ }
+
+ public boolean isMeta()
+ {
+ return false;
+ }
+
+ public boolean isNull()
+ {
+ return false;
+ }
+
+ public boolean isObject()
+ {
+ return true;
+ }
+
+ public boolean isTemporary()
+ {
+ return false;
+ }
+
+ public String getURI()
+ {
+ return uri;
}
@Override
@@ -51,16 +81,19 @@ public class CDOIDExternalImpl extends AbstractCDOID implements CDOIDExternal
return "oid:" + toURIFragment(); //$NON-NLS-1$
}
+ @Override
public void read(String fragmentPart)
{
uri = fragmentPart;
}
+ @Override
public void read(ExtendedDataInput in) throws IOException
{
uri = in.readString();
}
+ @Override
public void write(ExtendedDataOutput out) throws IOException
{
out.writeString(uri);
@@ -79,7 +112,7 @@ public class CDOIDExternalImpl extends AbstractCDOID implements CDOIDExternal
return true;
}
- // Could CDOIDExternalTempImpl and CDOIDExternalImpl have the same uri. We don't want to mixed them.
+ // Could CDOIDTempObjectExternalImpl and CDOIDExternalImpl have the same uri. We don't want to mixed them.
if (obj != null && obj.getClass() == getClass())
{
CDOIDExternal that = (CDOIDExternal)obj;
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDMetaImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDMetaImpl.java
index 10da7bb1bb..886769d952 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDMetaImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDMetaImpl.java
@@ -4,7 +4,7 @@
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
- *
+ *
* Contributors:
* Eike Stepper - initial API and implementation
*/
@@ -31,6 +31,36 @@ public class CDOIDMetaImpl extends AbstractCDOIDLong implements CDOIDMeta
return Type.META;
}
+ public boolean isDangling()
+ {
+ return false;
+ }
+
+ public boolean isExternal()
+ {
+ return false;
+ }
+
+ public boolean isMeta()
+ {
+ return true;
+ }
+
+ public boolean isNull()
+ {
+ return false;
+ }
+
+ public boolean isObject()
+ {
+ return false;
+ }
+
+ public boolean isTemporary()
+ {
+ return false;
+ }
+
@Override
public String toString()
{
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDNullImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDNullImpl.java
index 3326893c86..41d74789ae 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDNullImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDNullImpl.java
@@ -4,11 +4,11 @@
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
- *
+ *
* Contributors:
* Eike Stepper - initial API and implementation
- * Simon McDuff - http://bugs.eclipse.org/226778
- *
+ * Simon McDuff - http://bugs.eclipse.org/226778
+ *
*/
package org.eclipse.emf.cdo.internal.common.id;
@@ -41,6 +41,36 @@ public final class CDOIDNullImpl extends AbstractCDOID implements CDOIDMeta, CDO
return Type.NULL;
}
+ public boolean isDangling()
+ {
+ return false;
+ }
+
+ public boolean isExternal()
+ {
+ return false;
+ }
+
+ public boolean isMeta()
+ {
+ return false;
+ }
+
+ public boolean isNull()
+ {
+ return true;
+ }
+
+ public boolean isObject()
+ {
+ return false;
+ }
+
+ public boolean isTemporary()
+ {
+ return false;
+ }
+
public int getIntValue()
{
return 0;
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDObjectLongImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDObjectLongImpl.java
index db9c9f9b21..c0722e6825 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDObjectLongImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDObjectLongImpl.java
@@ -1,58 +1,88 @@
-/**
- * Copyright (c) 2004 - 2009 Eike Stepper (Berlin, Germany) and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Eike Stepper - initial API and implementation
- */
-package org.eclipse.emf.cdo.internal.common.id;
-
-import org.eclipse.emf.cdo.common.id.CDOID;
-import org.eclipse.emf.cdo.spi.common.id.AbstractCDOIDLong;
-import org.eclipse.emf.cdo.spi.common.id.InternalCDOIDObject;
-
-/**
- * @author Eike Stepper
- * @since 2.0
- */
-public class CDOIDObjectLongImpl extends AbstractCDOIDLong implements InternalCDOIDObject
-{
- private static final long serialVersionUID = 1L;
-
- public CDOIDObjectLongImpl()
- {
- }
-
- /**
- * @since 3.0
- */
- public SubType getSubType()
- {
- return SubType.LONG;
- }
-
- public CDOIDObjectLongImpl(long value)
- {
- super(value);
- }
-
- public Type getType()
- {
- return Type.OBJECT;
- }
-
- @Override
- public String toString()
- {
- return "OID" + getLongValue(); //$NON-NLS-1$
- }
-
- @Override
- protected int doCompareTo(CDOID o) throws ClassCastException
- {
- return new Long(getLongValue()).compareTo(((CDOIDObjectLongImpl)o).getLongValue());
- }
-}
+/**
+ * Copyright (c) 2004 - 2009 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.internal.common.id;
+
+import org.eclipse.emf.cdo.common.id.CDOID;
+import org.eclipse.emf.cdo.spi.common.id.AbstractCDOIDLong;
+import org.eclipse.emf.cdo.spi.common.id.InternalCDOIDObject;
+
+/**
+ * @author Eike Stepper
+ * @since 2.0
+ */
+public class CDOIDObjectLongImpl extends AbstractCDOIDLong implements InternalCDOIDObject
+{
+ private static final long serialVersionUID = 1L;
+
+ public CDOIDObjectLongImpl()
+ {
+ }
+
+ public CDOIDObjectLongImpl(long value)
+ {
+ super(value);
+ }
+
+ public Type getType()
+ {
+ return Type.OBJECT;
+ }
+
+ public boolean isDangling()
+ {
+ return false;
+ }
+
+ public boolean isExternal()
+ {
+ return false;
+ }
+
+ public boolean isMeta()
+ {
+ return false;
+ }
+
+ public boolean isNull()
+ {
+ return false;
+ }
+
+ public boolean isObject()
+ {
+ return true;
+ }
+
+ public boolean isTemporary()
+ {
+ return false;
+ }
+
+ /**
+ * @since 3.0
+ */
+ public SubType getSubType()
+ {
+ return SubType.LONG;
+ }
+
+ @Override
+ public String toString()
+ {
+ return "OID" + getLongValue(); //$NON-NLS-1$
+ }
+
+ @Override
+ protected int doCompareTo(CDOID o) throws ClassCastException
+ {
+ return new Long(getLongValue()).compareTo(((CDOIDObjectLongImpl)o).getLongValue());
+ }
+}
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDObjectStringImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDObjectStringImpl.java
index 5b88da0f7d..b03ec21992 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDObjectStringImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDObjectStringImpl.java
@@ -1,56 +1,86 @@
-/**
- * Copyright (c) 2004 - 2009 Eike Stepper (Berlin, Germany) and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Martin Taal - initial API and implementation
- * Eike Stepper - maintenance
- */
-package org.eclipse.emf.cdo.internal.common.id;
-
-import org.eclipse.emf.cdo.common.id.CDOID;
-import org.eclipse.emf.cdo.spi.common.id.AbstractCDOIDString;
-import org.eclipse.emf.cdo.spi.common.id.InternalCDOIDObject;
-
-/**
- * @author Martin Taal
- * @since 3.0
- */
-public class CDOIDObjectStringImpl extends AbstractCDOIDString implements InternalCDOIDObject
-{
- private static final long serialVersionUID = 1L;
-
- public CDOIDObjectStringImpl()
- {
- }
-
- public CDOIDObjectStringImpl(String value)
- {
- super(value);
- }
-
- public Type getType()
- {
- return Type.OBJECT;
- }
-
- public SubType getSubType()
- {
- return SubType.STRING;
- }
-
- @Override
- public String toString()
- {
- return "OID" + getStringValue(); //$NON-NLS-1$
- }
-
- @Override
- protected int doCompareTo(CDOID o) throws ClassCastException
- {
- return getStringValue().compareTo(((CDOIDObjectStringImpl)o).getStringValue());
- }
-}
+/**
+ * Copyright (c) 2004 - 2009 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Martin Taal - initial API and implementation
+ * Eike Stepper - maintenance
+ */
+package org.eclipse.emf.cdo.internal.common.id;
+
+import org.eclipse.emf.cdo.common.id.CDOID;
+import org.eclipse.emf.cdo.spi.common.id.AbstractCDOIDString;
+import org.eclipse.emf.cdo.spi.common.id.InternalCDOIDObject;
+
+/**
+ * @author Martin Taal
+ * @since 3.0
+ */
+public class CDOIDObjectStringImpl extends AbstractCDOIDString implements InternalCDOIDObject
+{
+ private static final long serialVersionUID = 1L;
+
+ public CDOIDObjectStringImpl()
+ {
+ }
+
+ public CDOIDObjectStringImpl(String value)
+ {
+ super(value);
+ }
+
+ public Type getType()
+ {
+ return Type.OBJECT;
+ }
+
+ public boolean isDangling()
+ {
+ return false;
+ }
+
+ public boolean isExternal()
+ {
+ return false;
+ }
+
+ public boolean isMeta()
+ {
+ return false;
+ }
+
+ public boolean isNull()
+ {
+ return false;
+ }
+
+ public boolean isObject()
+ {
+ return true;
+ }
+
+ public boolean isTemporary()
+ {
+ return false;
+ }
+
+ public SubType getSubType()
+ {
+ return SubType.STRING;
+ }
+
+ @Override
+ public String toString()
+ {
+ return "OID" + getStringValue(); //$NON-NLS-1$
+ }
+
+ @Override
+ protected int doCompareTo(CDOID o) throws ClassCastException
+ {
+ return getStringValue().compareTo(((CDOIDObjectStringImpl)o).getStringValue());
+ }
+}
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDTempMetaImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDTempMetaImpl.java
index c0aafd3537..1519dd31a6 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDTempMetaImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDTempMetaImpl.java
@@ -4,7 +4,7 @@
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
- *
+ *
* Contributors:
* Eike Stepper - initial API and implementation
* Simon McDuff - http://bugs.eclipse.org/213402
@@ -32,6 +32,36 @@ public class CDOIDTempMetaImpl extends AbstractCDOIDInteger implements CDOIDTemp
return Type.TEMP_META;
}
+ public boolean isDangling()
+ {
+ return false;
+ }
+
+ public boolean isExternal()
+ {
+ return false;
+ }
+
+ public boolean isMeta()
+ {
+ return true;
+ }
+
+ public boolean isNull()
+ {
+ return false;
+ }
+
+ public boolean isObject()
+ {
+ return false;
+ }
+
+ public boolean isTemporary()
+ {
+ return true;
+ }
+
@Override
public String toString()
{
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDExternalTempImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDTempObjectExternalImpl.java
index cfc71b0a53..ddb691719d 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDExternalTempImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDTempObjectExternalImpl.java
@@ -16,11 +16,11 @@ import org.eclipse.emf.cdo.common.id.CDOIDTemp;
/**
* @author Simon McDuff
*/
-public class CDOIDExternalTempImpl extends CDOIDExternalImpl implements CDOIDTemp
+public class CDOIDTempObjectExternalImpl extends CDOIDExternalImpl implements CDOIDTemp
{
private static final long serialVersionUID = 1L;
- public CDOIDExternalTempImpl(String uri)
+ public CDOIDTempObjectExternalImpl(String uri)
{
super(uri);
}
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDTempObjectImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDTempObjectImpl.java
index e619d1330a..a0bf247da6 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDTempObjectImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDTempObjectImpl.java
@@ -4,7 +4,7 @@
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
- *
+ *
* Contributors:
* Eike Stepper - initial API and implementation
*/
@@ -31,6 +31,36 @@ public class CDOIDTempObjectImpl extends AbstractCDOIDInteger implements CDOIDTe
return Type.TEMP_OBJECT;
}
+ public boolean isDangling()
+ {
+ return false;
+ }
+
+ public boolean isExternal()
+ {
+ return false;
+ }
+
+ public boolean isMeta()
+ {
+ return false;
+ }
+
+ public boolean isNull()
+ {
+ return false;
+ }
+
+ public boolean isObject()
+ {
+ return true;
+ }
+
+ public boolean isTemporary()
+ {
+ return true;
+ }
+
@Override
public String toString()
{
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/io/CDODataInputImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/io/CDODataInputImpl.java
index 54dc117082..5517c5cd76 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/io/CDODataInputImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/io/CDODataInputImpl.java
@@ -34,7 +34,7 @@ import org.eclipse.emf.cdo.common.revision.delta.CDORevisionDelta;
import org.eclipse.emf.cdo.internal.common.bundle.OM;
import org.eclipse.emf.cdo.internal.common.id.CDOIDAndVersionImpl;
import org.eclipse.emf.cdo.internal.common.id.CDOIDExternalImpl;
-import org.eclipse.emf.cdo.internal.common.id.CDOIDExternalTempImpl;
+import org.eclipse.emf.cdo.internal.common.id.CDOIDTempObjectExternalImpl;
import org.eclipse.emf.cdo.internal.common.id.CDOIDMetaImpl;
import org.eclipse.emf.cdo.internal.common.id.CDOIDMetaRangeImpl;
import org.eclipse.emf.cdo.internal.common.id.CDOIDObjectLongImpl;
@@ -195,7 +195,7 @@ public abstract class CDODataInputImpl extends ExtendedDataInput.Delegating impl
return new CDOIDExternalImpl(readString());
case EXTERNAL_TEMP_OBJECT:
- return new CDOIDExternalTempImpl(readString());
+ return new CDOIDTempObjectExternalImpl(readString());
case OBJECT:
{
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/id/AbstractCDOID.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/id/AbstractCDOID.java
index b2c3cb334a..e1431d139d 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/id/AbstractCDOID.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/id/AbstractCDOID.java
@@ -30,70 +30,78 @@ public abstract class AbstractCDOID implements CDOID
{
}
- public boolean isNull()
- {
- switch (getType())
- {
- case NULL:
- return true;
-
- default:
- return false;
- }
- }
-
- public boolean isObject()
- {
- switch (getType())
- {
- case OBJECT:
- case TEMP_OBJECT:
- return true;
-
- default:
- return false;
- }
- }
-
- public boolean isMeta()
- {
- switch (getType())
- {
- case META:
- case TEMP_META:
- return true;
-
- default:
- return false;
- }
- }
-
- public boolean isTemporary()
- {
- switch (getType())
- {
- case TEMP_OBJECT:
- case TEMP_META:
- case EXTERNAL_TEMP_OBJECT:
- return true;
-
- default:
- return false;
- }
- }
-
- public boolean isExternal()
- {
- switch (getType())
- {
- case EXTERNAL_TEMP_OBJECT:
- case EXTERNAL_OBJECT:
- return true;
-
- default:
- return false;
- }
- }
+ // public boolean isNull()
+ // {
+ // switch (getType())
+ // {
+ // case NULL:
+ // return true;
+ //
+ // default:
+ // return false;
+ // }
+ // }
+ //
+ // public boolean isObject()
+ // {
+ // switch (getType())
+ // {
+ // case OBJECT:
+ // case TEMP_OBJECT:
+ // return true;
+ //
+ // default:
+ // return false;
+ // }
+ // }
+ //
+ // public boolean isMeta()
+ // {
+ // switch (getType())
+ // {
+ // case META:
+ // case TEMP_META:
+ // return true;
+ //
+ // default:
+ // return false;
+ // }
+ // }
+ //
+ // public boolean isTemporary()
+ // {
+ // switch (getType())
+ // {
+ // case TEMP_OBJECT:
+ // case TEMP_META:
+ // case EXTERNAL_TEMP_OBJECT:
+ // return true;
+ //
+ // default:
+ // return false;
+ // }
+ // }
+ //
+ // /**
+ // * @since 3.0
+ // */
+ // public boolean isDangling()
+ // {
+ // return false;
+ // }
+ //
+ // public boolean isExternal()
+ // {
+ // switch (getType())
+ // {
+ // case EXTERNAL_TEMP_OBJECT:
+ // case EXTERNAL_OBJECT:
+ // return true;
+ //
+ // default:
+ // return false;
+ // }
+ // }
public final int compareTo(CDOID o)
{
diff --git a/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CommitTransactionPhase2Request.java b/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CommitTransactionPhase2Request.java
index a42bc5f366..3a99b45406 100644
--- a/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CommitTransactionPhase2Request.java
+++ b/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CommitTransactionPhase2Request.java
@@ -15,7 +15,7 @@ import org.eclipse.emf.cdo.common.id.CDOIDUtil;
import org.eclipse.emf.cdo.common.io.CDODataInput;
import org.eclipse.emf.cdo.common.io.CDODataOutput;
import org.eclipse.emf.cdo.common.protocol.CDOProtocolConstants;
-import org.eclipse.emf.cdo.internal.common.id.CDOIDExternalTempImpl;
+import org.eclipse.emf.cdo.internal.common.id.CDOIDTempObjectExternalImpl;
import org.eclipse.emf.cdo.internal.net4j.bundle.OM;
import org.eclipse.emf.cdo.internal.net4j.messages.Messages;
import org.eclipse.emf.cdo.util.CDOURIUtil;
@@ -76,7 +76,7 @@ public class CommitTransactionPhase2Request extends CommitTransactionRequest
protected void requestingIdMapping(CDODataOutput out) throws IOException
{
InternalCDOXACommitContext context = getCommitContext();
- Map<CDOIDExternalTempImpl, InternalCDOTransaction> requestedIDs = context.getRequestedIDs();
+ Map<CDOIDTempObjectExternalImpl, InternalCDOTransaction> requestedIDs = context.getRequestedIDs();
int size = requestedIDs.size();
out.writeInt(size);
if (PROTOCOL.isEnabled())
@@ -84,9 +84,9 @@ public class CommitTransactionPhase2Request extends CommitTransactionRequest
PROTOCOL.format("Number of ids requested: {0}", size); //$NON-NLS-1$
}
- for (Entry<CDOIDExternalTempImpl, InternalCDOTransaction> entry : requestedIDs.entrySet())
+ for (Entry<CDOIDTempObjectExternalImpl, InternalCDOTransaction> entry : requestedIDs.entrySet())
{
- CDOIDExternalTempImpl tempID = entry.getKey();
+ CDOIDTempObjectExternalImpl tempID = entry.getKey();
URI oldURIExternal = URI.createURI(tempID.toURIFragment());
CDOID oldCDOID = CDOIDUtil.read(oldURIExternal.fragment());
diff --git a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/CDOIDTest.java b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/CDOIDTest.java
index f35b59bfc8..d73a597e22 100644
--- a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/CDOIDTest.java
+++ b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/CDOIDTest.java
@@ -11,13 +11,13 @@
package org.eclipse.emf.cdo.tests;
import org.eclipse.emf.cdo.common.id.CDOID;
+import org.eclipse.emf.cdo.common.id.CDOIDExternal;
import org.eclipse.emf.cdo.common.id.CDOIDUtil;
-import org.eclipse.emf.cdo.internal.common.id.CDOIDExternalImpl;
-import org.eclipse.emf.cdo.internal.common.id.CDOIDExternalTempImpl;
import org.eclipse.emf.cdo.internal.common.id.CDOIDMetaImpl;
import org.eclipse.emf.cdo.internal.common.id.CDOIDNullImpl;
import org.eclipse.emf.cdo.internal.common.id.CDOIDObjectLongImpl;
import org.eclipse.emf.cdo.internal.common.id.CDOIDTempMetaImpl;
+import org.eclipse.emf.cdo.internal.common.id.CDOIDTempObjectExternalImpl;
import org.eclipse.emf.cdo.internal.common.id.CDOIDTempObjectImpl;
import org.eclipse.emf.cdo.spi.common.id.AbstractCDOIDLong;
@@ -63,13 +63,13 @@ public class CDOIDTest extends AbstractCDOTest
public void testGetLong_ExtTempId()
{
- CDOIDExternalTempImpl id = new CDOIDExternalTempImpl("cdo://repo123/resource456");
+ CDOIDTempObjectExternalImpl id = new CDOIDTempObjectExternalImpl("cdo://repo123/resource456");
assertIllegalArgument(id);
}
public void testGetLong_ExtId()
{
- CDOIDExternalImpl id = new CDOIDExternalImpl("cdo://repo123/resource456");
+ CDOIDExternal id = CDOIDUtil.createExternal("cdo://repo123/resource456");
assertIllegalArgument(id);
}
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/CDOIDDangling.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/CDOIDDangling.java
new file mode 100644
index 0000000000..44fcb27ec9
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/CDOIDDangling.java
@@ -0,0 +1,38 @@
+/**
+ * Copyright (c) 2004 - 2009 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo;
+
+import org.eclipse.emf.cdo.common.id.CDOID;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * @author Eike Stepper
+ * @since 3.0
+ */
+public interface CDOIDDangling extends CDOID
+{
+ public EObject getTarget();
+
+ // public List<Reference> getReferences();
+ //
+ // /**
+ // * @author Eike Stepper
+ // */
+ // public interface Reference
+ // {
+ // public CDOObject getSourceObject();
+ //
+ // public EStructuralFeature getSourceFeature();
+ //
+ // public CDOIDDangling getTargetID();
+ // }
+}
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/util/CDOURIUtil.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/util/CDOURIUtil.java
index 0f3f913166..c0c9f77b26 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/util/CDOURIUtil.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/util/CDOURIUtil.java
@@ -14,7 +14,6 @@ package org.eclipse.emf.cdo.util;
import org.eclipse.emf.cdo.common.id.CDOID;
import org.eclipse.emf.cdo.common.id.CDOIDUtil;
import org.eclipse.emf.cdo.common.protocol.CDOProtocolConstants;
-import org.eclipse.emf.cdo.internal.common.id.CDOIDExternalImpl;
import org.eclipse.emf.cdo.session.CDOSession;
import org.eclipse.emf.cdo.view.CDOView;
@@ -149,7 +148,7 @@ public class CDOURIUtil
CDOIDUtil.write(builder, newCDOID);
baseURI = baseURI.trimFragment().appendFragment(builder.toString());
- return new CDOIDExternalImpl(baseURI.toString());
+ return CDOIDUtil.createExternal(baseURI.toString());
}
public static List<String> analyzePath(URI uri)
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOIDDanglingImpl.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOIDDanglingImpl.java
new file mode 100644
index 0000000000..2447a7d473
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOIDDanglingImpl.java
@@ -0,0 +1,195 @@
+/**
+ * Copyright (c) 2004 - 2009 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.internal.cdo;
+
+import org.eclipse.emf.cdo.CDOIDDangling;
+import org.eclipse.emf.cdo.common.id.CDOID;
+import org.eclipse.emf.cdo.spi.common.id.AbstractCDOID;
+
+import org.eclipse.net4j.util.CheckUtil;
+import org.eclipse.net4j.util.io.ExtendedDataInput;
+import org.eclipse.net4j.util.io.ExtendedDataOutput;
+
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+
+import java.io.IOException;
+
+/**
+ * @author Eike Stepper
+ * @since 3.0
+ */
+public class CDOIDDanglingImpl extends AbstractCDOID implements CDOIDDangling
+{
+ private static final String NOT_SUPPORTED_MSG = "Not supported for CDOIDDangling"; //$NON-NLS-1$
+
+ private static final long serialVersionUID = 1L;
+
+ private InternalEObject target;
+
+ // private List<Reference> references = new ArrayList<Reference>();
+
+ public CDOIDDanglingImpl(InternalEObject target)
+ {
+ CheckUtil.checkArg(target, "target");
+ this.target = target;
+ }
+
+ public InternalEObject getTarget()
+ {
+ return target;
+ }
+
+ // public List<Reference> getReferences()
+ // {
+ // return references;
+ // }
+ //
+ // public void addReference(InternalCDOObject sourceObject, EStructuralFeature sourceFeature)
+ // {
+ // synchronized (references)
+ // {
+ // for (Reference reference : references)
+ // {
+ // if (reference.getSourceObject() == sourceObject && reference.getSourceFeature() == sourceFeature)
+ // {
+ // return;
+ // }
+ // }
+ //
+ // references.add(new ReferenceImpl(sourceObject, sourceFeature));
+ // }
+ // }
+ //
+ // public void dispose()
+ // {
+ // target = null;
+ // references.clear();
+ // }
+
+ public Type getType()
+ {
+ return Type.DANGLING_OBJECT;
+ }
+
+ public boolean isDangling()
+ {
+ return true;
+ }
+
+ public boolean isExternal()
+ {
+ return false;
+ }
+
+ public boolean isMeta()
+ {
+ return false;
+ }
+
+ public boolean isNull()
+ {
+ return false;
+ }
+
+ public boolean isObject()
+ {
+ return true;
+ }
+
+ public boolean isTemporary()
+ {
+ return false;
+ }
+
+ public String toURIFragment()
+ {
+ return EcoreUtil.getURI(target).fragment();
+ }
+
+ @Override
+ public void read(String fragmentPart)
+ {
+ throw new UnsupportedOperationException(NOT_SUPPORTED_MSG);
+ }
+
+ @Override
+ public void read(ExtendedDataInput in) throws IOException
+ {
+ throw new UnsupportedOperationException(NOT_SUPPORTED_MSG);
+ }
+
+ @Override
+ public void write(ExtendedDataOutput out) throws IOException
+ {
+ throw new UnsupportedOperationException(NOT_SUPPORTED_MSG);
+ }
+
+ @Override
+ public boolean equals(Object obj)
+ {
+ if (obj == this)
+ {
+ return true;
+ }
+
+ if (obj instanceof CDOIDDangling)
+ {
+ CDOIDDangling that = (CDOIDDangling)obj;
+ return target == that.getTarget();
+ }
+
+ return false;
+ }
+
+ @Override
+ public int hashCode()
+ {
+ return target.hashCode();
+ }
+
+ @Override
+ protected int doCompareTo(CDOID o) throws ClassCastException
+ {
+ return toURIFragment().compareTo(((CDOIDDanglingImpl)o).toURIFragment());
+ }
+
+ // /**
+ // * @author Eike Stepper
+ // */
+ // public final class ReferenceImpl implements Reference
+ // {
+ // private InternalCDOObject sourceObject;
+ //
+ // private EStructuralFeature sourceFeature;
+ //
+ // public ReferenceImpl(InternalCDOObject sourceObject, EStructuralFeature sourceFeature)
+ // {
+ // this.sourceObject = sourceObject;
+ // this.sourceFeature = sourceFeature;
+ // }
+ //
+ // public InternalCDOObject getSourceObject()
+ // {
+ // return sourceObject;
+ // }
+ //
+ // public EStructuralFeature getSourceFeature()
+ // {
+ // return sourceFeature;
+ // }
+ //
+ // public CDOIDDangling getTargetID()
+ // {
+ // return CDOIDDanglingImpl.this;
+ // }
+ // }
+}
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOLegacyWrapper.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOLegacyWrapper.java
index 0ef7829b6b..b6b999d0a7 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOLegacyWrapper.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOLegacyWrapper.java
@@ -223,7 +223,7 @@ public abstract class CDOLegacyWrapper extends CDOObjectWrapper
protected void instanceToRevisionFeature(EStructuralFeature feature, CDOPackageRegistry packageRegistry)
{
Object instanceValue = getInstanceValue(instance, feature, packageRegistry);
- CDOObjectImpl.instanceToRevisionFeature(view, revision, feature, instanceValue);
+ CDOObjectImpl.instanceToRevisionFeature(view, this, feature, instanceValue);
}
/**
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 619f4e39eb..14dc08dfe5 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
@@ -323,7 +323,7 @@ public class CDOObjectImpl extends EStoreEObjectImpl implements InternalCDOObjec
if (!eFeature.isTransient())
{
Object setting = cdoBasicSettings() != null ? cdoSettings()[i] : null;
- instanceToRevisionFeature(view, revision, eFeature, setting);
+ instanceToRevisionFeature(view, this, eFeature, setting);
}
}
@@ -1037,9 +1037,9 @@ public class CDOObjectImpl extends EStoreEObjectImpl implements InternalCDOObjec
}
/**
- * @since 2.0
+ * @since 3.0
*/
- public static void instanceToRevisionFeature(InternalCDOView view, InternalCDORevision revision,
+ public static void instanceToRevisionFeature(InternalCDOView view, InternalCDOObject object,
EStructuralFeature feature, Object setting)
{
if (TRACER.isEnabled())
@@ -1048,6 +1048,7 @@ public class CDOObjectImpl extends EStoreEObjectImpl implements InternalCDOObjec
}
CDOStore cdoStore = view.getStore();
+ InternalCDORevision revision = object.cdoRevision();
if (feature.isMany())
{
@@ -1058,14 +1059,14 @@ public class CDOObjectImpl extends EStoreEObjectImpl implements InternalCDOObjec
EList<Object> list = (EList<Object>)setting;
for (Object value : list)
{
- value = cdoStore.convertToCDO(feature, value);
+ value = cdoStore.convertToCDO(object, feature, value);
revision.add(feature, index++, value);
}
}
}
else
{
- setting = cdoStore.convertToCDO(feature, setting);
+ setting = cdoStore.convertToCDO(object, feature, setting);
revision.set(feature, 0, setting);
}
}
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOStore.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOStore.java
index 7538350f9e..7d93c435b4 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOStore.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOStore.java
@@ -328,7 +328,7 @@ public final class CDOStore implements EStore
TRACER.format("set({0}, {1}, {2}, {3})", cdoObject, feature, index, value); //$NON-NLS-1$
}
- value = convertToCDO(feature, value);
+ value = convertToCDO(cdoObject, feature, value);
CDOFeatureDelta delta = new CDOSetFeatureDeltaImpl(feature, index, value);
InternalCDORevision revision = getRevisionForWriting(cdoObject, delta);
@@ -408,9 +408,9 @@ public final class CDOStore implements EStore
}
/**
- * @since 2.0
+ * @since 3.0
*/
- public Object convertToCDO(EStructuralFeature feature, Object value)
+ public Object convertToCDO(InternalCDOObject object, EStructuralFeature feature, Object value)
{
if (value != null)
{
@@ -423,6 +423,15 @@ public final class CDOStore implements EStore
// The EReference condition should be in the CDOType.convertToCDO. Since common package do not have access to
// InternalCDOView I kept it here.
value = view.convertObjectToID(value, true);
+ // TTT if (value instanceof InternalEObject)
+ // {
+ // CDOIDDangling id = view.convertDanglingObjectToID(object, feature, (InternalEObject)value);
+ // if (id != null)
+ // {
+ // // TODO assign at once from convertDanglingObjectToID() if dangling IDs are fully implemented
+ // value = id;
+ // }
+ // }
}
else if (FeatureMapUtil.isFeatureMap(feature))
{
@@ -471,7 +480,7 @@ public final class CDOStore implements EStore
TRACER.format("add({0}, {1}, {2}, {3})", cdoObject, feature, index, value); //$NON-NLS-1$
}
- value = convertToCDO(feature, value);
+ value = convertToCDO(cdoObject, feature, value);
CDOFeatureDelta delta = new CDOAddFeatureDeltaImpl(feature, index, value);
InternalCDORevision revision = getRevisionForWriting(cdoObject, delta);
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 538e32fe0f..b27eb24f2a 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
@@ -83,6 +83,7 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.Map.Entry;
+import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.locks.ReentrantLock;
/**
@@ -107,7 +108,7 @@ public class CDOTransactionImpl extends CDOViewImpl implements InternalCDOTransa
private long lastCommitTime = CDORevision.UNSPECIFIED_DATE;
- private int lastTemporaryID;
+ private AtomicInteger lastTemporaryID = new AtomicInteger();
private CDOTransactionStrategy transactionStrategy;
@@ -320,7 +321,7 @@ public class CDOTransactionImpl extends CDOViewImpl implements InternalCDOTransa
public CDOIDTemp getNextTemporaryID()
{
- return CDOIDUtil.createTempObject(++lastTemporaryID);
+ return CDOIDUtil.createTempObject(lastTemporaryID.incrementAndGet());
}
/**
@@ -544,6 +545,27 @@ public class CDOTransactionImpl extends CDOViewImpl implements InternalCDOTransa
return null;
}
+ // TTT Map<InternalEObject, CDOIDDanglingImpl> danglingObjects = new HashMap<InternalEObject, CDOIDDanglingImpl>();
+ //
+ // @Override
+ // public CDOIDDangling convertDanglingObjectToID(InternalCDOObject source, EStructuralFeature feature,
+ // InternalEObject target)
+ // {
+ // CDOIDDanglingImpl id;
+ // synchronized (danglingObjects)
+ // {
+ // id = danglingObjects.get(target);
+ // if (id == null)
+ // {
+ // id = new CDOIDDanglingImpl(lastTemporaryID.incrementAndGet(), target);
+ // danglingObjects.put(target, id);
+ // }
+ // }
+ //
+ // id.addReference(source, feature);
+ // return id;
+ // }
+
/**
* @since 2.0
*/
@@ -595,6 +617,7 @@ public class CDOTransactionImpl extends CDOViewImpl implements InternalCDOTransa
try
{
+ // TTT convertDanglingObjects();
getTransactionStrategy().commit(this, progressMonitor);
}
catch (TransactionException ex)
@@ -612,6 +635,35 @@ public class CDOTransactionImpl extends CDOViewImpl implements InternalCDOTransa
commit(null);
}
+ // TTT private void convertDanglingObjects()
+ // {
+ // for (CDOIDDanglingImpl id : danglingObjects.values())
+ // {
+ //
+ // for (Reference reference : id.getReferences())
+ // {
+ // convertDanglingObject(reference.getSourceObject(), reference.getSourceFeature(), id);
+ // }
+ // }
+ // }
+ //
+ // private void convertDanglingObject(CDOObject object, EStructuralFeature feature, CDOIDDangling id)
+ // {
+ // InternalCDORevision revision = (InternalCDORevision)object.cdoRevision();
+ // Object value = revision.getValue(feature);
+ // if (value instanceof List<?>)
+ // {
+ // List<?> list = (List<?>)value;
+ // for (int i = 0; i < list.size(); i++)
+ // {
+ // if (list.get(i) == id)
+ // {
+ //
+ // }
+ // }
+ // }
+ // }
+
/**
* @since 2.0
*/
@@ -1148,7 +1200,7 @@ public class CDOTransactionImpl extends CDOViewImpl implements InternalCDOTransa
firstSavepoint.getSharedDetachedObjects().clear();
dirty = false;
conflict = 0;
- lastTemporaryID = 0;
+ lastTemporaryID.set(0);
}
public Map<CDOID, CDOObject> getDirtyObjects()
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/transaction/CDOXACommitContextImpl.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/transaction/CDOXACommitContextImpl.java
index d55c2dd1ac..29221b5e63 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/transaction/CDOXACommitContextImpl.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/transaction/CDOXACommitContextImpl.java
@@ -16,7 +16,7 @@ import org.eclipse.emf.cdo.common.model.CDOPackageUnit;
import org.eclipse.emf.cdo.common.revision.CDOReferenceAdjuster;
import org.eclipse.emf.cdo.common.revision.delta.CDORevisionDelta;
import org.eclipse.emf.cdo.eresource.CDOResource;
-import org.eclipse.emf.cdo.internal.common.id.CDOIDExternalTempImpl;
+import org.eclipse.emf.cdo.internal.common.id.CDOIDTempObjectExternalImpl;
import org.eclipse.emf.cdo.util.CDOUtil;
import org.eclipse.emf.internal.cdo.messages.Messages;
@@ -54,9 +54,9 @@ public class CDOXACommitContextImpl implements InternalCDOXACommitContext
private InternalCDOCommitContext delegateCommitContext;
- private Map<CDOIDExternalTempImpl, InternalCDOTransaction> requestedIDs = new HashMap<CDOIDExternalTempImpl, InternalCDOTransaction>();
+ private Map<CDOIDTempObjectExternalImpl, InternalCDOTransaction> requestedIDs = new HashMap<CDOIDTempObjectExternalImpl, InternalCDOTransaction>();
- private Map<InternalCDOObject, CDOIDExternalTempImpl> objectToID = new HashMap<InternalCDOObject, CDOIDExternalTempImpl>();
+ private Map<InternalCDOObject, CDOIDTempObjectExternalImpl> objectToID = new HashMap<InternalCDOObject, CDOIDTempObjectExternalImpl>();
public CDOXACommitContextImpl(CDOXATransactionImpl manager, InternalCDOCommitContext commitContext)
{
@@ -99,7 +99,7 @@ public class CDOXACommitContextImpl implements InternalCDOXACommitContext
return delegateCommitContext.getTransaction();
}
- public Map<CDOIDExternalTempImpl, InternalCDOTransaction> getRequestedIDs()
+ public Map<CDOIDTempObjectExternalImpl, InternalCDOTransaction> getRequestedIDs()
{
return requestedIDs;
}
@@ -144,11 +144,11 @@ public class CDOXACommitContextImpl implements InternalCDOXACommitContext
{
CDOID id = getTransaction().provideCDOID(idOrObject);
- if (id instanceof CDOIDExternalTempImpl)
+ if (id instanceof CDOIDTempObjectExternalImpl)
{
if (idOrObject instanceof InternalEObject)
{
- CDOIDExternalTempImpl proxyTemp = (CDOIDExternalTempImpl)id;
+ CDOIDTempObjectExternalImpl proxyTemp = (CDOIDTempObjectExternalImpl)id;
if (!requestedIDs.containsKey(proxyTemp))
{
InternalCDOObject cdoObject = (InternalCDOObject)CDOUtil.getCDOObject((InternalEObject)idOrObject);
@@ -181,7 +181,7 @@ public class CDOXACommitContextImpl implements InternalCDOXACommitContext
{
public Object adjustReference(Object id)
{
- CDOIDExternalTempImpl externalID = objectToID.get(id);
+ CDOIDTempObjectExternalImpl externalID = objectToID.get(id);
if (externalID != null)
{
id = externalID;
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/CDOViewImpl.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/CDOViewImpl.java
index 960954773c..dc92af65b2 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/CDOViewImpl.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/CDOViewImpl.java
@@ -910,7 +910,7 @@ public class CDOViewImpl extends Lifecycle implements InternalCDOView
InternalCDOObject object = (InternalCDOObject)idOrObject;
if (object.cdoView() != null && FSMUtil.isNew(object))
{
- return CDOIDUtil.createExternalTemp(uri);
+ return CDOIDUtil.createTempObjectExternal(uri);
}
}
@@ -978,7 +978,13 @@ public class CDOViewImpl extends Lifecycle implements InternalCDOView
return potentialObject;
}
- protected CDOID getID(InternalCDOObject object, boolean onlyPersistedID)
+ // TTT public CDOIDDangling convertDanglingObjectToID(InternalCDOObject source, EStructuralFeature feature,
+ // InternalEObject target)
+ // {
+ // throw new IllegalStateException("Dangling objects not possible outside of a transaction");
+ // }
+
+ private CDOID getID(InternalCDOObject object, boolean onlyPersistedID)
{
if (onlyPersistedID)
{
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/InternalCDOView.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/InternalCDOView.java
index 1b491ffc84..23810ae61e 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/InternalCDOView.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/InternalCDOView.java
@@ -92,6 +92,13 @@ public interface InternalCDOView extends CDOView, CDOIDProvider, ILifecycle
public Object convertObjectToID(Object potentialObject, boolean onlyPersistedID);
+ // TTT /**
+ // * @param target
+ // * @since 3.0
+ // */
+ // public CDOIDDangling convertDanglingObjectToID(InternalCDOObject source, EStructuralFeature feature,
+ // InternalEObject target);
+
public Object convertIDToObject(Object potentialID);
/**
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/InternalCDOXATransaction.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/InternalCDOXATransaction.java
index d02d8983ce..225ef1bf16 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/InternalCDOXATransaction.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/InternalCDOXATransaction.java
@@ -11,7 +11,7 @@
package org.eclipse.emf.spi.cdo;
import org.eclipse.emf.cdo.common.id.CDOIDProvider;
-import org.eclipse.emf.cdo.internal.common.id.CDOIDExternalTempImpl;
+import org.eclipse.emf.cdo.internal.common.id.CDOIDTempObjectExternalImpl;
import org.eclipse.emf.cdo.transaction.CDOTransaction;
import org.eclipse.emf.cdo.transaction.CDOXATransaction;
@@ -37,7 +37,7 @@ public interface InternalCDOXATransaction extends CDOXATransaction
{
public InternalCDOXATransaction getTransactionManager();
- public Map<CDOIDExternalTempImpl, InternalCDOTransaction> getRequestedIDs();
+ public Map<CDOIDTempObjectExternalImpl, InternalCDOTransaction> getRequestedIDs();
public CommitTransactionResult getResult();
}

Back to the top