Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Stepper2016-04-19 07:38:36 +0000
committerEike Stepper2016-04-19 07:38:36 +0000
commitbebf66c61e82d4f9af3e62af8a1ff05b17d3c707 (patch)
treeacbdc680ec347beb00db1ac5fd60add51250244c
parent5890a16b29787b4f04988fc1a30587eefc29e3c8 (diff)
downloadcdo-bebf66c61e82d4f9af3e62af8a1ff05b17d3c707.tar.gz
cdo-bebf66c61e82d4f9af3e62af8a1ff05b17d3c707.tar.xz
cdo-bebf66c61e82d4f9af3e62af8a1ff05b17d3c707.zip
[491859] Referential integrity check fails when container is changed and previous container is deleted
https://bugs.eclipse.org/bugs/show_bug.cgi?id=491859
-rw-r--r--plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/TransactionCommitContext.java2
-rw-r--r--plugins/org.eclipse.emf.cdo.tests/model/base.ecore17
-rw-r--r--plugins/org.eclipse.emf.cdo.tests/model/base/BaseClass.java17
-rw-r--r--plugins/org.eclipse.emf.cdo.tests/model/base/BaseFactory.java33
-rw-r--r--plugins/org.eclipse.emf.cdo.tests/model/base/BasePackage.java221
-rw-r--r--plugins/org.eclipse.emf.cdo.tests/model/base/Document.java52
-rw-r--r--plugins/org.eclipse.emf.cdo.tests/model/base/Element.java75
-rw-r--r--plugins/org.eclipse.emf.cdo.tests/model/base/impl/BaseClassImpl.java12
-rw-r--r--plugins/org.eclipse.emf.cdo.tests/model/base/impl/BaseFactoryImpl.java40
-rw-r--r--plugins/org.eclipse.emf.cdo.tests/model/base/impl/BasePackageImpl.java127
-rw-r--r--plugins/org.eclipse.emf.cdo.tests/model/base/impl/DocumentImpl.java80
-rw-r--r--plugins/org.eclipse.emf.cdo.tests/model/base/impl/ElementImpl.java93
-rw-r--r--plugins/org.eclipse.emf.cdo.tests/model/base/util/BaseAdapterFactory.java77
-rw-r--r--plugins/org.eclipse.emf.cdo.tests/model/base/util/BaseSwitch.java139
-rw-r--r--plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/bugzilla/Bugzilla_491859_Test.java117
15 files changed, 932 insertions, 170 deletions
diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/TransactionCommitContext.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/TransactionCommitContext.java
index 90b22f647e..5163a45593 100644
--- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/TransactionCommitContext.java
+++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/TransactionCommitContext.java
@@ -1674,7 +1674,7 @@ public class TransactionCommitContext implements InternalCommitContext
{
public Object adjustReference(Object targetID, EStructuralFeature feature, int index)
{
- if (feature != CDOContainerFeatureDelta.CONTAINER_FEATURE)
+ if (!(feature instanceof EReference && ((EReference)feature).isContainer()))
{
if (detachedIDs.contains(targetID))
{
diff --git a/plugins/org.eclipse.emf.cdo.tests/model/base.ecore b/plugins/org.eclipse.emf.cdo.tests/model/base.ecore
index 577da4fad5..f60fa30b55 100644
--- a/plugins/org.eclipse.emf.cdo.tests/model/base.ecore
+++ b/plugins/org.eclipse.emf.cdo.tests/model/base.ecore
@@ -1,10 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
-<ecore:EPackage xmi:version="2.0"
- xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="base"
- nsURI="http://www.fernuni-hagen.de/ST/dummy/base.ecore" nsPrefix="base">
+<ecore:EPackage xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="base" nsURI="http://www.fernuni-hagen.de/ST/dummy/base.ecore"
+ nsPrefix="base">
<eClassifiers xsi:type="ecore:EClass" name="BaseClass">
<eOperations name="increment"/>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="couter" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
</eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="Document">
+ <eStructuralFeatures xsi:type="ecore:EReference" name="root" eType="#//Element"
+ containment="true"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="Element">
+ <eStructuralFeatures xsi:type="ecore:EReference" name="subelements" upperBound="-1"
+ eType="#//Element" containment="true" eOpposite="#//Element/parent"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="parent" eType="#//Element"
+ eOpposite="#//Element/subelements"/>
+ </eClassifiers>
</ecore:EPackage>
diff --git a/plugins/org.eclipse.emf.cdo.tests/model/base/BaseClass.java b/plugins/org.eclipse.emf.cdo.tests/model/base/BaseClass.java
index c23cf015ca..064ac64470 100644
--- a/plugins/org.eclipse.emf.cdo.tests/model/base/BaseClass.java
+++ b/plugins/org.eclipse.emf.cdo.tests/model/base/BaseClass.java
@@ -14,12 +14,13 @@ import org.eclipse.emf.cdo.CDOObject;
/**
* <!-- begin-user-doc --> A representation of the model object '<em><b>Class</b></em>'. <!-- end-user-doc -->
+ *
* <p>
* The following features are supported:
+ * </p>
* <ul>
- * <li>{@link base.BaseClass#getCouter <em>Couter</em>}</li>
+ * <li>{@link base.BaseClass#getCouter <em>Couter</em>}</li>
* </ul>
- * </p>
*
* @see base.BasePackage#getBaseClass()
* @model
@@ -29,12 +30,12 @@ import org.eclipse.emf.cdo.CDOObject;
public interface BaseClass extends CDOObject
{
/**
- * Returns the value of the '<em><b>Couter</b></em>' attribute. <!-- begin-user-doc -->
+ * Returns the value of the '<em><b>Couter</b></em>' attribute.
+ * <!-- begin-user-doc -->
* <p>
* If the meaning of the '<em>Couter</em>' attribute isn't clear, there really should be more of a description here...
* </p>
* <!-- end-user-doc -->
- *
* @return the value of the '<em>Couter</em>' attribute.
* @see #setCouter(int)
* @see base.BasePackage#getBaseClass_Couter()
@@ -44,11 +45,10 @@ public interface BaseClass extends CDOObject
int getCouter();
/**
- * Sets the value of the '{@link base.BaseClass#getCouter <em>Couter</em>}' attribute. <!-- begin-user-doc --> <!--
+ * Sets the value of the '{@link base.BaseClass#getCouter <em>Couter</em>}' attribute.
+ * <!-- begin-user-doc --> <!--
* end-user-doc -->
- *
- * @param value
- * the new value of the '<em>Couter</em>' attribute.
+ * @param value the new value of the '<em>Couter</em>' attribute.
* @see #getCouter()
* @generated
*/
@@ -56,7 +56,6 @@ public interface BaseClass extends CDOObject
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
- *
* @model
* @generated
*/
diff --git a/plugins/org.eclipse.emf.cdo.tests/model/base/BaseFactory.java b/plugins/org.eclipse.emf.cdo.tests/model/base/BaseFactory.java
index 154f26ae10..2c5ecb9676 100644
--- a/plugins/org.eclipse.emf.cdo.tests/model/base/BaseFactory.java
+++ b/plugins/org.eclipse.emf.cdo.tests/model/base/BaseFactory.java
@@ -15,33 +15,50 @@ import org.eclipse.emf.ecore.EFactory;
/**
* <!-- begin-user-doc --> The <b>Factory</b> for the model. It provides a create method for each non-abstract class of
* the model. <!-- end-user-doc -->
- *
* @see base.BasePackage
* @generated
*/
public interface BaseFactory extends EFactory
{
/**
- * The singleton instance of the factory. <!-- begin-user-doc --> <!-- end-user-doc -->
- *
+ * The singleton instance of the factory.
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
* @generated
*/
BaseFactory eINSTANCE = base.impl.BaseFactoryImpl.init();
/**
- * Returns a new object of class '<em>Class</em>'. <!-- begin-user-doc --> <!-- end-user-doc -->
- *
+ * Returns a new object of class '<em>Class</em>'.
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
* @return a new object of class '<em>Class</em>'.
* @generated
*/
BaseClass createBaseClass();
/**
- * Returns the package supported by this factory. <!-- begin-user-doc --> <!-- end-user-doc -->
- *
- * @return the package supported by this factory.
+ * Returns a new object of class '<em>Document</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return a new object of class '<em>Document</em>'.
* @generated
*/
+ Document createDocument();
+
+ /**
+ * Returns a new object of class '<em>Element</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return a new object of class '<em>Element</em>'.
+ * @generated
+ */
+ Element createElement();
+
+ /**
+ * Returns the package supported by this factory.
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
+ * @return the package supported by this factory.
+ * @generated
+ */
BasePackage getBasePackage();
} // BaseFactory
diff --git a/plugins/org.eclipse.emf.cdo.tests/model/base/BasePackage.java b/plugins/org.eclipse.emf.cdo.tests/model/base/BasePackage.java
index a86330f75f..9cc106cc9f 100644
--- a/plugins/org.eclipse.emf.cdo.tests/model/base/BasePackage.java
+++ b/plugins/org.eclipse.emf.cdo.tests/model/base/BasePackage.java
@@ -13,6 +13,7 @@ package base;
import org.eclipse.emf.ecore.EAttribute;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
/**
* <!-- begin-user-doc --> The <b>Package</b> for the model. It contains accessors for the meta objects to represent
@@ -23,7 +24,6 @@ import org.eclipse.emf.ecore.EPackage;
* <li>and each data type</li>
* </ul>
* <!-- end-user-doc -->
- *
* @see base.BaseFactory
* @model kind="package"
* @generated
@@ -31,37 +31,37 @@ import org.eclipse.emf.ecore.EPackage;
public interface BasePackage extends EPackage
{
/**
- * The package name. <!-- begin-user-doc --> <!-- end-user-doc -->
- *
+ * The package name.
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
* @generated
*/
String eNAME = "base";
/**
- * The package namespace URI. <!-- begin-user-doc --> <!-- end-user-doc -->
- *
+ * The package namespace URI.
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
* @generated
*/
String eNS_URI = "http://www.fernuni-hagen.de/ST/dummy/base.ecore";
/**
- * The package namespace name. <!-- begin-user-doc --> <!-- end-user-doc -->
- *
+ * The package namespace name.
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
* @generated
*/
String eNS_PREFIX = "base";
/**
- * The singleton instance of the package. <!-- begin-user-doc --> <!-- end-user-doc -->
- *
+ * The singleton instance of the package.
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
* @generated
*/
BasePackage eINSTANCE = base.impl.BasePackageImpl.init();
/**
- * The meta object id for the '{@link base.impl.BaseClassImpl <em>Class</em>}' class. <!-- begin-user-doc --> <!--
+ * The meta object id for the '{@link base.impl.BaseClassImpl <em>Class</em>}' class.
+ * <!-- begin-user-doc --> <!--
* end-user-doc -->
- *
* @see base.impl.BaseClassImpl
* @see base.impl.BasePackageImpl#getBaseClass()
* @generated
@@ -69,35 +69,100 @@ public interface BasePackage extends EPackage
int BASE_CLASS = 0;
/**
- * The feature id for the '<em><b>Couter</b></em>' attribute. <!-- begin-user-doc --> <!-- end-user-doc -->
- *
+ * The feature id for the '<em><b>Couter</b></em>' attribute.
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
* @generated
* @ordered
*/
int BASE_CLASS__COUTER = 0;
/**
- * The number of structural features of the '<em>Class</em>' class. <!-- begin-user-doc --> <!-- end-user-doc -->
- *
+ * The number of structural features of the '<em>Class</em>' class.
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
* @generated
* @ordered
*/
int BASE_CLASS_FEATURE_COUNT = 1;
/**
- * Returns the meta object for class '{@link base.BaseClass <em>Class</em>}'. <!-- begin-user-doc --> <!--
- * end-user-doc -->
- *
- * @return the meta object for class '<em>Class</em>'.
- * @see base.BaseClass
+ * The meta object id for the '{@link base.impl.DocumentImpl <em>Document</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see base.impl.DocumentImpl
+ * @see base.impl.BasePackageImpl#getDocument()
* @generated
*/
+ int DOCUMENT = 1;
+
+ /**
+ * The feature id for the '<em><b>Root</b></em>' containment reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int DOCUMENT__ROOT = 0;
+
+ /**
+ * The number of structural features of the '<em>Document</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int DOCUMENT_FEATURE_COUNT = 1;
+
+ /**
+ * The meta object id for the '{@link base.impl.ElementImpl <em>Element</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see base.impl.ElementImpl
+ * @see base.impl.BasePackageImpl#getElement()
+ * @generated
+ */
+ int ELEMENT = 2;
+
+ /**
+ * The feature id for the '<em><b>Subelements</b></em>' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int ELEMENT__SUBELEMENTS = 0;
+
+ /**
+ * The feature id for the '<em><b>Parent</b></em>' container reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int ELEMENT__PARENT = 1;
+
+ /**
+ * The number of structural features of the '<em>Element</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int ELEMENT_FEATURE_COUNT = 2;
+
+ /**
+ * Returns the meta object for class '{@link base.BaseClass <em>Class</em>}'.
+ * <!-- begin-user-doc --> <!--
+ * end-user-doc -->
+ * @return the meta object for class '<em>Class</em>'.
+ * @see base.BaseClass
+ * @generated
+ */
EClass getBaseClass();
/**
- * Returns the meta object for the attribute '{@link base.BaseClass#getCouter <em>Couter</em>}'. <!-- begin-user-doc
+ * Returns the meta object for the attribute '{@link base.BaseClass#getCouter <em>Couter</em>}'.
+ * <!-- begin-user-doc
* --> <!-- end-user-doc -->
- *
* @return the meta object for the attribute '<em>Couter</em>'.
* @see base.BaseClass#getCouter()
* @see #getBaseClass()
@@ -106,11 +171,64 @@ public interface BasePackage extends EPackage
EAttribute getBaseClass_Couter();
/**
- * Returns the factory that creates the instances of the model. <!-- begin-user-doc --> <!-- end-user-doc -->
- *
- * @return the factory that creates the instances of the model.
+ * Returns the meta object for class '{@link base.Document <em>Document</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>Document</em>'.
+ * @see base.Document
* @generated
*/
+ EClass getDocument();
+
+ /**
+ * Returns the meta object for the containment reference '{@link base.Document#getRoot <em>Root</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the containment reference '<em>Root</em>'.
+ * @see base.Document#getRoot()
+ * @see #getDocument()
+ * @generated
+ */
+ EReference getDocument_Root();
+
+ /**
+ * Returns the meta object for class '{@link base.Element <em>Element</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>Element</em>'.
+ * @see base.Element
+ * @generated
+ */
+ EClass getElement();
+
+ /**
+ * Returns the meta object for the containment reference list '{@link base.Element#getSubelements <em>Subelements</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the containment reference list '<em>Subelements</em>'.
+ * @see base.Element#getSubelements()
+ * @see #getElement()
+ * @generated
+ */
+ EReference getElement_Subelements();
+
+ /**
+ * Returns the meta object for the container reference '{@link base.Element#getParent <em>Parent</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the container reference '<em>Parent</em>'.
+ * @see base.Element#getParent()
+ * @see #getElement()
+ * @generated
+ */
+ EReference getElement_Parent();
+
+ /**
+ * Returns the factory that creates the instances of the model.
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
+ * @return the factory that creates the instances of the model.
+ * @generated
+ */
BaseFactory getBaseFactory();
/**
@@ -122,15 +240,14 @@ public interface BasePackage extends EPackage
* <li>and each data type</li>
* </ul>
* <!-- end-user-doc -->
- *
* @generated
*/
interface Literals
{
/**
- * The meta object literal for the '{@link base.impl.BaseClassImpl <em>Class</em>}' class. <!-- begin-user-doc -->
+ * The meta object literal for the '{@link base.impl.BaseClassImpl <em>Class</em>}' class.
+ * <!-- begin-user-doc -->
* <!-- end-user-doc -->
- *
* @see base.impl.BaseClassImpl
* @see base.impl.BasePackageImpl#getBaseClass()
* @generated
@@ -138,13 +255,57 @@ public interface BasePackage extends EPackage
EClass BASE_CLASS = eINSTANCE.getBaseClass();
/**
- * The meta object literal for the '<em><b>Couter</b></em>' attribute feature. <!-- begin-user-doc --> <!--
+ * The meta object literal for the '<em><b>Couter</b></em>' attribute feature.
+ * <!-- begin-user-doc --> <!--
* end-user-doc -->
- *
* @generated
*/
EAttribute BASE_CLASS__COUTER = eINSTANCE.getBaseClass_Couter();
+ /**
+ * The meta object literal for the '{@link base.impl.DocumentImpl <em>Document</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see base.impl.DocumentImpl
+ * @see base.impl.BasePackageImpl#getDocument()
+ * @generated
+ */
+ EClass DOCUMENT = eINSTANCE.getDocument();
+
+ /**
+ * The meta object literal for the '<em><b>Root</b></em>' containment reference feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference DOCUMENT__ROOT = eINSTANCE.getDocument_Root();
+
+ /**
+ * The meta object literal for the '{@link base.impl.ElementImpl <em>Element</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see base.impl.ElementImpl
+ * @see base.impl.BasePackageImpl#getElement()
+ * @generated
+ */
+ EClass ELEMENT = eINSTANCE.getElement();
+
+ /**
+ * The meta object literal for the '<em><b>Subelements</b></em>' containment reference list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference ELEMENT__SUBELEMENTS = eINSTANCE.getElement_Subelements();
+
+ /**
+ * The meta object literal for the '<em><b>Parent</b></em>' container reference feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference ELEMENT__PARENT = eINSTANCE.getElement_Parent();
+
}
} // BasePackage
diff --git a/plugins/org.eclipse.emf.cdo.tests/model/base/Document.java b/plugins/org.eclipse.emf.cdo.tests/model/base/Document.java
new file mode 100644
index 0000000000..2ecab05ac7
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.tests/model/base/Document.java
@@ -0,0 +1,52 @@
+/**
+ */
+package base;
+
+import org.eclipse.emf.cdo.CDOObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Document</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ * <li>{@link base.Document#getRoot <em>Root</em>}</li>
+ * </ul>
+ *
+ * @see base.BasePackage#getDocument()
+ * @model
+ * @extends CDOObject
+ * @generated
+ */
+public interface Document extends CDOObject
+{
+ /**
+ * Returns the value of the '<em><b>Root</b></em>' containment reference.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Root</em>' containment reference isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Root</em>' containment reference.
+ * @see #setRoot(Element)
+ * @see base.BasePackage#getDocument_Root()
+ * @model containment="true"
+ * @generated
+ */
+ Element getRoot();
+
+ /**
+ * Sets the value of the '{@link base.Document#getRoot <em>Root</em>}' containment reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Root</em>' containment reference.
+ * @see #getRoot()
+ * @generated
+ */
+ void setRoot(Element value);
+
+} // Document
diff --git a/plugins/org.eclipse.emf.cdo.tests/model/base/Element.java b/plugins/org.eclipse.emf.cdo.tests/model/base/Element.java
new file mode 100644
index 0000000000..aeb160e9ee
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.tests/model/base/Element.java
@@ -0,0 +1,75 @@
+/**
+ */
+package base;
+
+import org.eclipse.emf.cdo.CDOObject;
+
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Element</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ * <li>{@link base.Element#getSubelements <em>Subelements</em>}</li>
+ * <li>{@link base.Element#getParent <em>Parent</em>}</li>
+ * </ul>
+ *
+ * @see base.BasePackage#getElement()
+ * @model
+ * @extends CDOObject
+ * @generated
+ */
+public interface Element extends CDOObject
+{
+ /**
+ * Returns the value of the '<em><b>Subelements</b></em>' containment reference list.
+ * The list contents are of type {@link base.Element}.
+ * It is bidirectional and its opposite is '{@link base.Element#getParent <em>Parent</em>}'.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Subelements</em>' containment reference list isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Subelements</em>' containment reference list.
+ * @see base.BasePackage#getElement_Subelements()
+ * @see base.Element#getParent
+ * @model opposite="parent" containment="true"
+ * @generated
+ */
+ EList<Element> getSubelements();
+
+ /**
+ * Returns the value of the '<em><b>Parent</b></em>' container reference.
+ * It is bidirectional and its opposite is '{@link base.Element#getSubelements <em>Subelements</em>}'.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Parent</em>' container reference isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Parent</em>' container reference.
+ * @see #setParent(Element)
+ * @see base.BasePackage#getElement_Parent()
+ * @see base.Element#getSubelements
+ * @model opposite="subelements" transient="false"
+ * @generated
+ */
+ Element getParent();
+
+ /**
+ * Sets the value of the '{@link base.Element#getParent <em>Parent</em>}' container reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Parent</em>' container reference.
+ * @see #getParent()
+ * @generated
+ */
+ void setParent(Element value);
+
+} // Element
diff --git a/plugins/org.eclipse.emf.cdo.tests/model/base/impl/BaseClassImpl.java b/plugins/org.eclipse.emf.cdo.tests/model/base/impl/BaseClassImpl.java
index 8bae0782fb..093743d1a0 100644
--- a/plugins/org.eclipse.emf.cdo.tests/model/base/impl/BaseClassImpl.java
+++ b/plugins/org.eclipse.emf.cdo.tests/model/base/impl/BaseClassImpl.java
@@ -21,18 +21,17 @@ import base.BasePackage;
* <!-- begin-user-doc --> An implementation of the model object '<em><b>Class</b></em>'. <!-- end-user-doc -->
* <p>
* The following features are implemented:
+ * </p>
* <ul>
- * <li>{@link base.impl.BaseClassImpl#getCouter <em>Couter</em>}</li>
+ * <li>{@link base.impl.BaseClassImpl#getCouter <em>Couter</em>}</li>
* </ul>
- * </p>
- *
+ *
* @generated
*/
public class BaseClassImpl extends CDOObjectImpl implements BaseClass
{
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
- *
* @generated
*/
protected BaseClassImpl()
@@ -42,7 +41,6 @@ public class BaseClassImpl extends CDOObjectImpl implements BaseClass
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
- *
* @generated
*/
@Override
@@ -53,7 +51,6 @@ public class BaseClassImpl extends CDOObjectImpl implements BaseClass
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
- *
* @generated
*/
@Override
@@ -64,7 +61,6 @@ public class BaseClassImpl extends CDOObjectImpl implements BaseClass
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
- *
* @generated
*/
public int getCouter()
@@ -74,7 +70,6 @@ public class BaseClassImpl extends CDOObjectImpl implements BaseClass
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
- *
* @generated
*/
public void setCouter(int newCouter)
@@ -84,7 +79,6 @@ public class BaseClassImpl extends CDOObjectImpl implements BaseClass
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
- *
* @generated
*/
public void increment()
diff --git a/plugins/org.eclipse.emf.cdo.tests/model/base/impl/BaseFactoryImpl.java b/plugins/org.eclipse.emf.cdo.tests/model/base/impl/BaseFactoryImpl.java
index e4a5ef541f..3d38b4d00b 100644
--- a/plugins/org.eclipse.emf.cdo.tests/model/base/impl/BaseFactoryImpl.java
+++ b/plugins/org.eclipse.emf.cdo.tests/model/base/impl/BaseFactoryImpl.java
@@ -10,6 +10,7 @@
*/
package base.impl;
+import base.*;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EPackage;
@@ -22,22 +23,20 @@ import base.BasePackage;
/**
* <!-- begin-user-doc --> An implementation of the model <b>Factory</b>. <!-- end-user-doc -->
- *
* @generated
*/
public class BaseFactoryImpl extends EFactoryImpl implements BaseFactory
{
/**
- * Creates the default factory implementation. <!-- begin-user-doc --> <!-- end-user-doc -->
- *
+ * Creates the default factory implementation.
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
* @generated
*/
public static BaseFactory init()
{
try
{
- BaseFactory theBaseFactory = (BaseFactory)EPackage.Registry.INSTANCE
- .getEFactory("http://www.fernuni-hagen.de/ST/dummy/base.ecore");
+ BaseFactory theBaseFactory = (BaseFactory)EPackage.Registry.INSTANCE.getEFactory(BasePackage.eNS_URI);
if (theBaseFactory != null)
{
return theBaseFactory;
@@ -51,8 +50,8 @@ public class BaseFactoryImpl extends EFactoryImpl implements BaseFactory
}
/**
- * Creates an instance of the factory. <!-- begin-user-doc --> <!-- end-user-doc -->
- *
+ * Creates an instance of the factory.
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
* @generated
*/
public BaseFactoryImpl()
@@ -80,7 +79,6 @@ public class BaseFactoryImpl extends EFactoryImpl implements BaseFactory
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
- *
* @generated
*/
public BaseClass createBaseClass()
@@ -90,10 +88,31 @@ public class BaseFactoryImpl extends EFactoryImpl implements BaseFactory
}
/**
- * <!-- begin-user-doc --> <!-- end-user-doc -->
- *
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
* @generated
*/
+ public Document createDocument()
+ {
+ DocumentImpl document = new DocumentImpl();
+ return document;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public Element createElement()
+ {
+ ElementImpl element = new ElementImpl();
+ return element;
+ }
+
+ /**
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
+ * @generated
+ */
public BasePackage getBasePackage()
{
return (BasePackage)getEPackage();
@@ -101,7 +120,6 @@ public class BaseFactoryImpl extends EFactoryImpl implements BaseFactory
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
- *
* @deprecated
* @generated
*/
diff --git a/plugins/org.eclipse.emf.cdo.tests/model/base/impl/BasePackageImpl.java b/plugins/org.eclipse.emf.cdo.tests/model/base/impl/BasePackageImpl.java
index b312ac9517..887a49b511 100644
--- a/plugins/org.eclipse.emf.cdo.tests/model/base/impl/BasePackageImpl.java
+++ b/plugins/org.eclipse.emf.cdo.tests/model/base/impl/BasePackageImpl.java
@@ -13,27 +13,42 @@ package base.impl;
import org.eclipse.emf.ecore.EAttribute;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
import org.eclipse.emf.ecore.impl.EPackageImpl;
import base.BaseClass;
import base.BaseFactory;
import base.BasePackage;
+import base.Document;
+import base.Element;
/**
* <!-- begin-user-doc --> An implementation of the model <b>Package</b>. <!-- end-user-doc -->
- *
* @generated
*/
public class BasePackageImpl extends EPackageImpl implements BasePackage
{
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
- *
* @generated
*/
private EClass baseClassEClass = null;
/**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass documentEClass = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass elementEClass = null;
+
+ /**
* Creates an instance of the model <b>Package</b>, registered with {@link org.eclipse.emf.ecore.EPackage.Registry
* EPackage.Registry} by the package package URI value.
* <p>
@@ -53,18 +68,17 @@ public class BasePackageImpl extends EPackageImpl implements BasePackage
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
- *
* @generated
*/
private static boolean isInited = false;
/**
* Creates, registers, and initializes the <b>Package</b> for this model, and for any others upon which it depends.
- * <p>
- * This method is used to initialize {@link BasePackage#eINSTANCE} when that field is accessed. Clients should not
- * invoke it directly. Instead, they should simply access that field to obtain the package. <!-- begin-user-doc -->
- * <!-- end-user-doc -->
*
+ * <p>This method is used to initialize {@link BasePackage#eINSTANCE} when that field is accessed.
+ * Clients should not invoke it directly. Instead, they should simply access that field to obtain the package.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
* @see #eNS_URI
* @see #createPackageContents()
* @see #initializePackageContents()
@@ -73,13 +87,11 @@ public class BasePackageImpl extends EPackageImpl implements BasePackage
public static BasePackage init()
{
if (isInited)
- {
return (BasePackage)EPackage.Registry.INSTANCE.getEPackage(BasePackage.eNS_URI);
- }
// Obtain or create and register package
- BasePackageImpl theBasePackage = (BasePackageImpl)(EPackage.Registry.INSTANCE.get(eNS_URI) instanceof BasePackageImpl ? EPackage.Registry.INSTANCE
- .get(eNS_URI) : new BasePackageImpl());
+ BasePackageImpl theBasePackage = (BasePackageImpl)(EPackage.Registry.INSTANCE
+ .get(eNS_URI) instanceof BasePackageImpl ? EPackage.Registry.INSTANCE.get(eNS_URI) : new BasePackageImpl());
isInited = true;
@@ -99,7 +111,6 @@ public class BasePackageImpl extends EPackageImpl implements BasePackage
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
- *
* @generated
*/
public EClass getBaseClass()
@@ -109,7 +120,6 @@ public class BasePackageImpl extends EPackageImpl implements BasePackage
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
- *
* @generated
*/
public EAttribute getBaseClass_Couter()
@@ -118,10 +128,59 @@ public class BasePackageImpl extends EPackageImpl implements BasePackage
}
/**
- * <!-- begin-user-doc --> <!-- end-user-doc -->
- *
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
* @generated
*/
+ public EClass getDocument()
+ {
+ return documentEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EReference getDocument_Root()
+ {
+ return (EReference)documentEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EClass getElement()
+ {
+ return elementEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EReference getElement_Subelements()
+ {
+ return (EReference)elementEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EReference getElement_Parent()
+ {
+ return (EReference)elementEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
+ * @generated
+ */
public BaseFactory getBaseFactory()
{
return (BaseFactory)getEFactoryInstance();
@@ -129,49 +188,50 @@ public class BasePackageImpl extends EPackageImpl implements BasePackage
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
- *
* @generated
*/
private boolean isCreated = false;
/**
- * Creates the meta-model objects for the package. This method is guarded to have no affect on any invocation but its
- * first. <!-- begin-user-doc --> <!-- end-user-doc -->
- *
+ * Creates the meta-model objects for the package. This method is
+ * guarded to have no affect on any invocation but its first.
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
* @generated
*/
public void createPackageContents()
{
if (isCreated)
- {
return;
- }
isCreated = true;
// Create classes and their features
baseClassEClass = createEClass(BASE_CLASS);
createEAttribute(baseClassEClass, BASE_CLASS__COUTER);
+
+ documentEClass = createEClass(DOCUMENT);
+ createEReference(documentEClass, DOCUMENT__ROOT);
+
+ elementEClass = createEClass(ELEMENT);
+ createEReference(elementEClass, ELEMENT__SUBELEMENTS);
+ createEReference(elementEClass, ELEMENT__PARENT);
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
- *
* @generated
*/
private boolean isInitialized = false;
/**
- * Complete the initialization of the package and its meta-model. This method is guarded to have no affect on any
- * invocation but its first. <!-- begin-user-doc --> <!-- end-user-doc -->
- *
+ * Complete the initialization of the package and its meta-model. This
+ * method is guarded to have no affect on any invocation but its first.
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
* @generated
*/
public void initializePackageContents()
{
if (isInitialized)
- {
return;
- }
isInitialized = true;
// Initialize package
@@ -192,6 +252,19 @@ public class BasePackageImpl extends EPackageImpl implements BasePackage
addEOperation(baseClassEClass, null, "increment", 0, 1, IS_UNIQUE, IS_ORDERED);
+ initEClass(documentEClass, Document.class, "Document", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEReference(getDocument_Root(), this.getElement(), null, "root", null, 0, 1, Document.class, !IS_TRANSIENT,
+ !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED,
+ IS_ORDERED);
+
+ initEClass(elementEClass, Element.class, "Element", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEReference(getElement_Subelements(), this.getElement(), this.getElement_Parent(), "subelements", null, 0, -1,
+ Element.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE,
+ IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEReference(getElement_Parent(), this.getElement(), this.getElement_Subelements(), "parent", null, 0, 1,
+ Element.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE,
+ IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
// Create resource
createResource(eNS_URI);
}
diff --git a/plugins/org.eclipse.emf.cdo.tests/model/base/impl/DocumentImpl.java b/plugins/org.eclipse.emf.cdo.tests/model/base/impl/DocumentImpl.java
new file mode 100644
index 0000000000..439db42055
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.tests/model/base/impl/DocumentImpl.java
@@ -0,0 +1,80 @@
+/**
+ */
+package base.impl;
+
+import base.BasePackage;
+import base.Document;
+import base.Element;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.internal.cdo.CDOObjectImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Document</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ * <li>{@link base.impl.DocumentImpl#getRoot <em>Root</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class DocumentImpl extends CDOObjectImpl implements Document
+{
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected DocumentImpl()
+ {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass()
+ {
+ return BasePackage.Literals.DOCUMENT;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected int eStaticFeatureCount()
+ {
+ return 0;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public Element getRoot()
+ {
+ return (Element)eGet(BasePackage.Literals.DOCUMENT__ROOT, true);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setRoot(Element newRoot)
+ {
+ eSet(BasePackage.Literals.DOCUMENT__ROOT, newRoot);
+ }
+
+} //DocumentImpl
diff --git a/plugins/org.eclipse.emf.cdo.tests/model/base/impl/ElementImpl.java b/plugins/org.eclipse.emf.cdo.tests/model/base/impl/ElementImpl.java
new file mode 100644
index 0000000000..cc09d48691
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.tests/model/base/impl/ElementImpl.java
@@ -0,0 +1,93 @@
+/**
+ */
+package base.impl;
+
+import base.BasePackage;
+import base.Element;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.internal.cdo.CDOObjectImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Element</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ * <li>{@link base.impl.ElementImpl#getSubelements <em>Subelements</em>}</li>
+ * <li>{@link base.impl.ElementImpl#getParent <em>Parent</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class ElementImpl extends CDOObjectImpl implements Element
+{
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected ElementImpl()
+ {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass()
+ {
+ return BasePackage.Literals.ELEMENT;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected int eStaticFeatureCount()
+ {
+ return 0;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ public EList<Element> getSubelements()
+ {
+ return (EList<Element>)eGet(BasePackage.Literals.ELEMENT__SUBELEMENTS, true);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public Element getParent()
+ {
+ return (Element)eGet(BasePackage.Literals.ELEMENT__PARENT, true);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setParent(Element newParent)
+ {
+ eSet(BasePackage.Literals.ELEMENT__PARENT, newParent);
+ }
+
+} //ElementImpl
diff --git a/plugins/org.eclipse.emf.cdo.tests/model/base/util/BaseAdapterFactory.java b/plugins/org.eclipse.emf.cdo.tests/model/base/util/BaseAdapterFactory.java
index 850011e3a8..afd3854ea5 100644
--- a/plugins/org.eclipse.emf.cdo.tests/model/base/util/BaseAdapterFactory.java
+++ b/plugins/org.eclipse.emf.cdo.tests/model/base/util/BaseAdapterFactory.java
@@ -10,6 +10,7 @@
*/
package base.util;
+import base.*;
import org.eclipse.emf.common.notify.Adapter;
import org.eclipse.emf.common.notify.Notifier;
import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
@@ -21,22 +22,21 @@ import base.BasePackage;
/**
* <!-- begin-user-doc --> The <b>Adapter Factory</b> for the model. It provides an adapter <code>createXXX</code>
* method for each class of the model. <!-- end-user-doc -->
- *
* @see base.BasePackage
* @generated
*/
public class BaseAdapterFactory extends AdapterFactoryImpl
{
/**
- * The cached model package. <!-- begin-user-doc --> <!-- end-user-doc -->
- *
+ * The cached model package.
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
* @generated
*/
protected static BasePackage modelPackage;
/**
- * Creates an instance of the adapter factory. <!-- begin-user-doc --> <!-- end-user-doc -->
- *
+ * Creates an instance of the adapter factory.
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
* @generated
*/
public BaseAdapterFactory()
@@ -48,10 +48,10 @@ public class BaseAdapterFactory extends AdapterFactoryImpl
}
/**
- * Returns whether this factory is applicable for the type of the object. <!-- begin-user-doc --> This implementation
+ * Returns whether this factory is applicable for the type of the object.
+ * <!-- begin-user-doc --> This implementation
* returns <code>true</code> if the object is either the model's package or is an instance object of the model. <!--
* end-user-doc -->
- *
* @return whether this factory is applicable for the type of the object.
* @generated
*/
@@ -70,8 +70,8 @@ public class BaseAdapterFactory extends AdapterFactoryImpl
}
/**
- * The switch that delegates to the <code>createXXX</code> methods. <!-- begin-user-doc --> <!-- end-user-doc -->
- *
+ * The switch that delegates to the <code>createXXX</code> methods.
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
* @generated
*/
protected BaseSwitch<Adapter> modelSwitch = new BaseSwitch<Adapter>()
@@ -83,6 +83,18 @@ public class BaseAdapterFactory extends AdapterFactoryImpl
}
@Override
+ public Adapter caseDocument(Document object)
+ {
+ return createDocumentAdapter();
+ }
+
+ @Override
+ public Adapter caseElement(Element object)
+ {
+ return createElementAdapter();
+ }
+
+ @Override
public Adapter defaultCase(EObject object)
{
return createEObjectAdapter();
@@ -90,10 +102,9 @@ public class BaseAdapterFactory extends AdapterFactoryImpl
};
/**
- * Creates an adapter for the <code>target</code>. <!-- begin-user-doc --> <!-- end-user-doc -->
- *
- * @param target
- * the object to adapt.
+ * Creates an adapter for the <code>target</code>.
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
+ * @param target the object to adapt.
* @return the adapter for the <code>target</code>.
* @generated
*/
@@ -104,10 +115,10 @@ public class BaseAdapterFactory extends AdapterFactoryImpl
}
/**
- * Creates a new adapter for an object of class '{@link base.BaseClass <em>Class</em>}'. <!-- begin-user-doc --> This
+ * Creates a new adapter for an object of class '{@link base.BaseClass <em>Class</em>}'.
+ * <!-- begin-user-doc --> This
* default implementation returns null so that we can easily ignore cases; it's useful to ignore a case when
* inheritance will catch all the cases anyway. <!-- end-user-doc -->
- *
* @return the new adapter.
* @see base.BaseClass
* @generated
@@ -118,12 +129,42 @@ public class BaseAdapterFactory extends AdapterFactoryImpl
}
/**
- * Creates a new adapter for the default case. <!-- begin-user-doc --> This default implementation returns null. <!--
- * end-user-doc -->
- *
+ * Creates a new adapter for an object of class '{@link base.Document <em>Document</em>}'.
+ * <!-- begin-user-doc -->
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ * <!-- end-user-doc -->
* @return the new adapter.
+ * @see base.Document
* @generated
*/
+ public Adapter createDocumentAdapter()
+ {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link base.Element <em>Element</em>}'.
+ * <!-- begin-user-doc -->
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ * <!-- end-user-doc -->
+ * @return the new adapter.
+ * @see base.Element
+ * @generated
+ */
+ public Adapter createElementAdapter()
+ {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for the default case.
+ * <!-- begin-user-doc --> This default implementation returns null. <!--
+ * end-user-doc -->
+ * @return the new adapter.
+ * @generated
+ */
public Adapter createEObjectAdapter()
{
return null;
diff --git a/plugins/org.eclipse.emf.cdo.tests/model/base/util/BaseSwitch.java b/plugins/org.eclipse.emf.cdo.tests/model/base/util/BaseSwitch.java
index fa3fc3d771..e098759d5c 100644
--- a/plugins/org.eclipse.emf.cdo.tests/model/base/util/BaseSwitch.java
+++ b/plugins/org.eclipse.emf.cdo.tests/model/base/util/BaseSwitch.java
@@ -10,35 +10,35 @@
*/
package base.util;
-import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EObject;
-
-import java.util.List;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.util.Switch;
import base.BaseClass;
import base.BasePackage;
+import base.Document;
+import base.Element;
/**
* <!-- begin-user-doc --> The <b>Switch</b> for the model's inheritance hierarchy. It supports the call
* {@link #doSwitch(EObject) doSwitch(object)} to invoke the <code>caseXXX</code> method for each class of the model,
* starting with the actual class of the object and proceeding up the inheritance hierarchy until a non-null result is
* returned, which is the result of the switch. <!-- end-user-doc -->
- *
* @see base.BasePackage
* @generated
*/
-public class BaseSwitch<T>
+public class BaseSwitch<T> extends Switch<T>
{
/**
- * The cached model package <!-- begin-user-doc --> <!-- end-user-doc -->
- *
+ * The cached model package
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
* @generated
*/
protected static BasePackage modelPackage;
/**
- * Creates an instance of the switch. <!-- begin-user-doc --> <!-- end-user-doc -->
- *
+ * Creates an instance of the switch.
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
* @generated
*/
public BaseSwitch()
@@ -50,44 +50,26 @@ public class BaseSwitch<T>
}
/**
- * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
- * <!-- begin-user-doc --> <!-- end-user-doc -->
- *
- * @return the first non-null result returned by a <code>caseXXX</code> call.
- * @generated
- */
- public T doSwitch(EObject theEObject)
- {
- return doSwitch(theEObject.eClass(), theEObject);
- }
-
- /**
- * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
- * <!-- begin-user-doc --> <!-- end-user-doc -->
- *
- * @return the first non-null result returned by a <code>caseXXX</code> call.
+ * Checks whether this is a switch for the given package.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param ePackage the package in question.
+ * @return whether this is a switch for the given package.
* @generated
*/
- protected T doSwitch(EClass theEClass, EObject theEObject)
+ @Override
+ protected boolean isSwitchFor(EPackage ePackage)
{
- if (theEClass.eContainer() == modelPackage)
- {
- return doSwitch(theEClass.getClassifierID(), theEObject);
- }
- else
- {
- List<EClass> eSuperTypes = theEClass.getESuperTypes();
- return eSuperTypes.isEmpty() ? defaultCase(theEObject) : doSwitch(eSuperTypes.get(0), theEObject);
- }
+ return ePackage == modelPackage;
}
/**
- * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
- * <!-- begin-user-doc --> <!-- end-user-doc -->
- *
- * @return the first non-null result returned by a <code>caseXXX</code> call.
- * @generated
- */
+ * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
+ * @return the first non-null result returned by a <code>caseXXX</code> call.
+ * @generated
+ */
+ @Override
protected T doSwitch(int classifierID, EObject theEObject)
{
switch (classifierID)
@@ -102,17 +84,36 @@ public class BaseSwitch<T>
}
return result;
}
+ case BasePackage.DOCUMENT:
+ {
+ Document document = (Document)theEObject;
+ T result = caseDocument(document);
+ if (result == null)
+ {
+ result = defaultCase(theEObject);
+ }
+ return result;
+ }
+ case BasePackage.ELEMENT:
+ {
+ Element element = (Element)theEObject;
+ T result = caseElement(element);
+ if (result == null)
+ {
+ result = defaultCase(theEObject);
+ }
+ return result;
+ }
default:
return defaultCase(theEObject);
}
}
/**
- * Returns the result of interpreting the object as an instance of '<em>Class</em>'. <!-- begin-user-doc --> This
+ * Returns the result of interpreting the object as an instance of '<em>Class</em>'.
+ * <!-- begin-user-doc --> This
* implementation returns null; returning a non-null result will terminate the switch. <!-- end-user-doc -->
- *
- * @param object
- * the target of the switch.
+ * @param object the target of the switch.
* @return the result of interpreting the object as an instance of '<em>Class</em>'.
* @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
* @generated
@@ -123,16 +124,48 @@ public class BaseSwitch<T>
}
/**
- * Returns the result of interpreting the object as an instance of '<em>EObject</em>'. <!-- begin-user-doc --> This
- * implementation returns null; returning a non-null result will terminate the switch, but this is the last case
- * anyway. <!-- end-user-doc -->
- *
- * @param object
- * the target of the switch.
- * @return the result of interpreting the object as an instance of '<em>EObject</em>'.
- * @see #doSwitch(org.eclipse.emf.ecore.EObject)
+ * Returns the result of interpreting the object as an instance of '<em>Document</em>'.
+ * <!-- begin-user-doc -->
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ * <!-- end-user-doc -->
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of '<em>Document</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
* @generated
*/
+ public T caseDocument(Document object)
+ {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>Element</em>'.
+ * <!-- begin-user-doc -->
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ * <!-- end-user-doc -->
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of '<em>Element</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseElement(Element object)
+ {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.
+ * <!-- begin-user-doc --> This
+ * implementation returns null; returning a non-null result will terminate the switch, but this is the last case
+ * anyway. <!-- end-user-doc -->
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of '<em>EObject</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject)
+ * @generated
+ */
+ @Override
public T defaultCase(EObject object)
{
return null;
diff --git a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/bugzilla/Bugzilla_491859_Test.java b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/bugzilla/Bugzilla_491859_Test.java
new file mode 100644
index 0000000000..b2bbc85e40
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/bugzilla/Bugzilla_491859_Test.java
@@ -0,0 +1,117 @@
+/*
+ * Copyright (c) 2016 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.tests.bugzilla;
+
+import org.eclipse.emf.cdo.eresource.CDOResource;
+import org.eclipse.emf.cdo.server.IRepository;
+import org.eclipse.emf.cdo.session.CDOSession;
+import org.eclipse.emf.cdo.tests.AbstractCDOTest;
+import org.eclipse.emf.cdo.tests.config.IModelConfig;
+import org.eclipse.emf.cdo.transaction.CDOTransaction;
+
+import org.eclipse.emf.ecore.EObject;
+
+import java.util.Map;
+
+import base.BaseFactory;
+import base.Document;
+import base.Element;
+
+/**
+ * Bug 491859 - Referential integrity check fails when container is changed and previsous container is deleted
+ *
+ * @author Eike Stepper
+ */
+public class Bugzilla_491859_Test extends AbstractCDOTest
+{
+ @Override
+ public synchronized Map<String, Object> getTestProperties()
+ {
+ Map<String, Object> map = super.getTestProperties();
+ map.put(IRepository.Props.ENSURE_REFERENTIAL_INTEGRITY, "true");
+ return map;
+ }
+
+ @Skips(IModelConfig.CAPABILITY_LEGACY)
+ public void testExchangeContainerObject() throws Exception
+ {
+ skipStoreWithoutQueryXRefs();
+
+ //////////
+ // Init //
+ //////////
+
+ CDOSession session = openSession();
+ CDOTransaction transaction = session.openTransaction();
+ CDOResource resource = transaction.createResource(getResourcePath("res"));
+
+ // document
+ // document/root
+ // document/root/element
+ // document/root/element/child1
+ // document/root/element/child2
+
+ Document document = BaseFactory.eINSTANCE.createDocument();
+ resource.getContents().add(document);
+
+ Element root = BaseFactory.eINSTANCE.createElement();
+ document.setRoot(root);
+
+ Element element = BaseFactory.eINSTANCE.createElement();
+ root.getSubelements().add(element);
+
+ Element child1 = BaseFactory.eINSTANCE.createElement();
+ element.getSubelements().add(child1);
+
+ Element child2 = BaseFactory.eINSTANCE.createElement();
+ element.getSubelements().add(child2);
+
+ transaction.commit();
+
+ //////////
+ // Test //
+ //////////
+
+ // Now replace root by root_new
+ replace(root);
+ transaction.commit();
+
+ // Now replace element by element_new
+ replace(element);
+ transaction.commit();
+ }
+
+ /**
+ * Replace the <code>element</code> at its parent.
+ *
+ * @return the replacement
+ */
+ private Element replace(Element element)
+ {
+ Element replacement = BaseFactory.eINSTANCE.createElement();
+ replacement.getSubelements().addAll(element.getSubelements());
+
+ EObject parent = element.eContainer();
+ if (parent instanceof Element)
+ {
+ Element parentElement = (Element)parent;
+ int index = parentElement.getSubelements().indexOf(element);
+ parentElement.getSubelements().set(index, replacement);
+ }
+ else
+ {
+ Document parentDocument = (Document)parent;
+ parentDocument.setRoot(replacement);
+ }
+
+ return replacement;
+ }
+}

Back to the top