diff options
author | Eike Stepper | 2009-07-20 05:06:21 +0000 |
---|---|---|
committer | Eike Stepper | 2009-07-20 05:06:21 +0000 |
commit | 8f84dfafb71b6634d1774f45773f994d7b81b8ea (patch) | |
tree | 4eba2b216bf9d1edb665021ef97935b7053fba0b | |
parent | 6e9da438713b73fae130737624b01cead345bb4c (diff) | |
download | cdo-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
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><ID TYPE>/<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(); } |