diff options
author | Eike Stepper | 2016-04-19 07:38:36 +0000 |
---|---|---|
committer | Eike Stepper | 2016-04-19 07:38:36 +0000 |
commit | bebf66c61e82d4f9af3e62af8a1ff05b17d3c707 (patch) | |
tree | acbdc680ec347beb00db1ac5fd60add51250244c | |
parent | 5890a16b29787b4f04988fc1a30587eefc29e3c8 (diff) | |
download | cdo-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
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; + } +} |