Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCedric Notot2012-05-30 05:30:32 -0400
committerCedric Notot2012-05-30 05:31:37 -0400
commitacb1fe39c5151d742631bbf236192e2033ad07cd (patch)
treec4cfb1df66849a2a24c4fc5dcde9d16e2f19f7a2
parent75f51818620f9a47b5499ef732712d72f2864a0f (diff)
downloadorg.eclipse.emf.compare-acb1fe39c5151d742631bbf236192e2033ad07cd.tar.gz
org.eclipse.emf.compare-acb1fe39c5151d742631bbf236192e2033ad07cd.tar.xz
org.eclipse.emf.compare-acb1fe39c5151d742631bbf236192e2033ad07cd.zip
Implementation of the equivalence processing.
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src-gen/org/eclipse/emf/compare/tests/nodes/NodeOppositeRefManyToMany.java76
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src-gen/org/eclipse/emf/compare/tests/nodes/NodeOppositeRefOneToMany.java86
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src-gen/org/eclipse/emf/compare/tests/nodes/NodeOppositeRefOneToOne.java95
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src-gen/org/eclipse/emf/compare/tests/nodes/NodesFactory.java27
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src-gen/org/eclipse/emf/compare/tests/nodes/NodesPackage.java339
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src-gen/org/eclipse/emf/compare/tests/nodes/impl/NodeOppositeRefManyToManyImpl.java217
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src-gen/org/eclipse/emf/compare/tests/nodes/impl/NodeOppositeRefOneToManyImpl.java270
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src-gen/org/eclipse/emf/compare/tests/nodes/impl/NodeOppositeRefOneToOneImpl.java311
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src-gen/org/eclipse/emf/compare/tests/nodes/impl/NodesFactoryImpl.java33
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src-gen/org/eclipse/emf/compare/tests/nodes/impl/NodesPackageImpl.java420
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src-gen/org/eclipse/emf/compare/tests/nodes/util/NodesAdapterFactory.java54
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src-gen/org/eclipse/emf/compare/tests/nodes/util/NodesSwitch.java66
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/EquiComputingTest.java1034
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/EquiInputData.java312
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/a2/left.nodes9
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/a2/right.nodes9
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/a3/left.nodes7
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/a3/right.nodes7
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/a4/left.nodes5
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/a4/right.nodes5
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/a5/left.nodes9
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/a5/right.nodes2
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/c1/left.nodes6
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/c1/right.nodes6
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/c2/left.nodes6
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/c2/right.nodes5
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/c3/left.nodes5
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/c3/right.nodes6
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/c4/left.nodes5
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/c4/right.nodes5
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/d1/left.nodes8
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/d1/right.nodes8
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e1/ancestor.nodes9
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e1/left.nodes9
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e1/right.nodes9
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e10/ancestor.nodes8
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e10/left.nodes8
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e10/right.nodes8
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e2/ancestor.nodes9
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e2/left.nodes9
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e2/right.nodes9
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e3/ancestor.nodes7
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e3/left.nodes7
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e3/right.nodes7
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e4/ancestor.nodes5
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e4/left.nodes5
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e4/right.nodes5
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e5/ancestor.nodes2
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e5/left.nodes9
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e5/right.nodes2
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e6/ancestor.nodes6
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e6/left.nodes6
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e6/right.nodes6
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e7/ancestor.nodes5
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e7/left.nodes6
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e7/right.nodes5
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e8/ancestor.nodes6
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e8/left.nodes5
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e8/right.nodes6
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e9/ancestor.nodes5
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e9/left.nodes5
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e9/right.nodes5
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f1/ancestor.nodes9
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f1/left.nodes9
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f1/right.nodes9
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f10/ancestor.nodes8
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f10/left.nodes8
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f10/right.nodes8
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f2/ancestor.nodes9
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f2/left.nodes9
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f2/right.nodes9
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f3/ancestor.nodes7
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f3/left.nodes7
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f3/right.nodes7
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f4/ancestor.nodes5
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f4/left.nodes5
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f4/right.nodes5
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f5/ancestor.nodes9
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f5/left.nodes9
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f5/right.nodes2
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f6/ancestor.nodes6
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f6/left.nodes6
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f6/right.nodes6
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f7/ancestor.nodes6
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f7/left.nodes6
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f7/right.nodes5
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f8/ancestor.nodes5
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f8/left.nodes5
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f8/right.nodes6
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f9/ancestor.nodes5
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f9/left.nodes5
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f9/right.nodes5
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/useCases23
-rw-r--r--plugins/org.eclipse.emf.compare/src/org/eclipse/emf/compare/equi/DefaultEquiEngine.java152
94 files changed, 3879 insertions, 142 deletions
diff --git a/plugins/org.eclipse.emf.compare.tests/src-gen/org/eclipse/emf/compare/tests/nodes/NodeOppositeRefManyToMany.java b/plugins/org.eclipse.emf.compare.tests/src-gen/org/eclipse/emf/compare/tests/nodes/NodeOppositeRefManyToMany.java
new file mode 100644
index 000000000..6c50342ef
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.tests/src-gen/org/eclipse/emf/compare/tests/nodes/NodeOppositeRefManyToMany.java
@@ -0,0 +1,76 @@
+/**
+ * Copyright (c) 2011, 2012 Obeo.
+ * 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:
+ * Obeo - initial API and implementation
+ */
+package org.eclipse.emf.compare.tests.nodes;
+
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Node Opposite Ref Many To Many</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ * <li>{@link org.eclipse.emf.compare.tests.nodes.NodeOppositeRefManyToMany#getSource <em>Source</em>}</li>
+ * <li>{@link org.eclipse.emf.compare.tests.nodes.NodeOppositeRefManyToMany#getDestination <em>Destination</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.emf.compare.tests.nodes.NodesPackage#getNodeOppositeRefManyToMany()
+ * @model
+ * @generated
+ */
+public interface NodeOppositeRefManyToMany extends Node {
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ String copyright = "Copyright (c) 2011, 2012 Obeo.\r\nAll rights reserved. This program and the accompanying materials\r\nare made available under the terms of the Eclipse Public License v1.0\r\nwhich accompanies this distribution, and is available at\r\nhttp://www.eclipse.org/legal/epl-v10.html\r\n\r\nContributors:\r\n Obeo - initial API and implementation"; //$NON-NLS-1$
+
+ /**
+ * Returns the value of the '<em><b>Source</b></em>' reference list.
+ * The list contents are of type {@link org.eclipse.emf.compare.tests.nodes.NodeOppositeRefManyToMany}.
+ * It is bidirectional and its opposite is '{@link org.eclipse.emf.compare.tests.nodes.NodeOppositeRefManyToMany#getDestination <em>Destination</em>}'.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Source</em>' reference list isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Source</em>' reference list.
+ * @see org.eclipse.emf.compare.tests.nodes.NodesPackage#getNodeOppositeRefManyToMany_Source()
+ * @see org.eclipse.emf.compare.tests.nodes.NodeOppositeRefManyToMany#getDestination
+ * @model opposite="destination"
+ * @generated
+ */
+ EList<NodeOppositeRefManyToMany> getSource();
+
+ /**
+ * Returns the value of the '<em><b>Destination</b></em>' reference list.
+ * The list contents are of type {@link org.eclipse.emf.compare.tests.nodes.NodeOppositeRefManyToMany}.
+ * It is bidirectional and its opposite is '{@link org.eclipse.emf.compare.tests.nodes.NodeOppositeRefManyToMany#getSource <em>Source</em>}'.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Destination</em>' reference list isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Destination</em>' reference list.
+ * @see org.eclipse.emf.compare.tests.nodes.NodesPackage#getNodeOppositeRefManyToMany_Destination()
+ * @see org.eclipse.emf.compare.tests.nodes.NodeOppositeRefManyToMany#getSource
+ * @model opposite="source"
+ * @generated
+ */
+ EList<NodeOppositeRefManyToMany> getDestination();
+
+} // NodeOppositeRefManyToMany
diff --git a/plugins/org.eclipse.emf.compare.tests/src-gen/org/eclipse/emf/compare/tests/nodes/NodeOppositeRefOneToMany.java b/plugins/org.eclipse.emf.compare.tests/src-gen/org/eclipse/emf/compare/tests/nodes/NodeOppositeRefOneToMany.java
new file mode 100644
index 000000000..fb4c0e498
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.tests/src-gen/org/eclipse/emf/compare/tests/nodes/NodeOppositeRefOneToMany.java
@@ -0,0 +1,86 @@
+/**
+ * Copyright (c) 2011, 2012 Obeo.
+ * 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:
+ * Obeo - initial API and implementation
+ */
+package org.eclipse.emf.compare.tests.nodes;
+
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Node Opposite Ref One To Many</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ * <li>{@link org.eclipse.emf.compare.tests.nodes.NodeOppositeRefOneToMany#getSource <em>Source</em>}</li>
+ * <li>{@link org.eclipse.emf.compare.tests.nodes.NodeOppositeRefOneToMany#getDestination <em>Destination</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.emf.compare.tests.nodes.NodesPackage#getNodeOppositeRefOneToMany()
+ * @model
+ * @generated
+ */
+public interface NodeOppositeRefOneToMany extends Node {
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ String copyright = "Copyright (c) 2011, 2012 Obeo.\r\nAll rights reserved. This program and the accompanying materials\r\nare made available under the terms of the Eclipse Public License v1.0\r\nwhich accompanies this distribution, and is available at\r\nhttp://www.eclipse.org/legal/epl-v10.html\r\n\r\nContributors:\r\n Obeo - initial API and implementation"; //$NON-NLS-1$
+
+ /**
+ * Returns the value of the '<em><b>Source</b></em>' reference.
+ * It is bidirectional and its opposite is '{@link org.eclipse.emf.compare.tests.nodes.NodeOppositeRefOneToMany#getDestination <em>Destination</em>}'.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Source</em>' reference isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Source</em>' reference.
+ * @see #setSource(NodeOppositeRefOneToMany)
+ * @see org.eclipse.emf.compare.tests.nodes.NodesPackage#getNodeOppositeRefOneToMany_Source()
+ * @see org.eclipse.emf.compare.tests.nodes.NodeOppositeRefOneToMany#getDestination
+ * @model opposite="destination"
+ * @generated
+ */
+ NodeOppositeRefOneToMany getSource();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.emf.compare.tests.nodes.NodeOppositeRefOneToMany#getSource <em>Source</em>}' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Source</em>' reference.
+ * @see #getSource()
+ * @generated
+ */
+ void setSource(NodeOppositeRefOneToMany value);
+
+ /**
+ * Returns the value of the '<em><b>Destination</b></em>' reference list.
+ * The list contents are of type {@link org.eclipse.emf.compare.tests.nodes.NodeOppositeRefOneToMany}.
+ * It is bidirectional and its opposite is '{@link org.eclipse.emf.compare.tests.nodes.NodeOppositeRefOneToMany#getSource <em>Source</em>}'.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Destination</em>' reference list isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Destination</em>' reference list.
+ * @see org.eclipse.emf.compare.tests.nodes.NodesPackage#getNodeOppositeRefOneToMany_Destination()
+ * @see org.eclipse.emf.compare.tests.nodes.NodeOppositeRefOneToMany#getSource
+ * @model opposite="source"
+ * @generated
+ */
+ EList<NodeOppositeRefOneToMany> getDestination();
+
+} // NodeOppositeRefOneToMany
diff --git a/plugins/org.eclipse.emf.compare.tests/src-gen/org/eclipse/emf/compare/tests/nodes/NodeOppositeRefOneToOne.java b/plugins/org.eclipse.emf.compare.tests/src-gen/org/eclipse/emf/compare/tests/nodes/NodeOppositeRefOneToOne.java
new file mode 100644
index 000000000..faf5541f3
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.tests/src-gen/org/eclipse/emf/compare/tests/nodes/NodeOppositeRefOneToOne.java
@@ -0,0 +1,95 @@
+/**
+ * Copyright (c) 2011, 2012 Obeo.
+ * 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:
+ * Obeo - initial API and implementation
+ */
+package org.eclipse.emf.compare.tests.nodes;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Node Opposite Ref One To One</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ * <li>{@link org.eclipse.emf.compare.tests.nodes.NodeOppositeRefOneToOne#getSource <em>Source</em>}</li>
+ * <li>{@link org.eclipse.emf.compare.tests.nodes.NodeOppositeRefOneToOne#getDestination <em>Destination</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.emf.compare.tests.nodes.NodesPackage#getNodeOppositeRefOneToOne()
+ * @model
+ * @generated
+ */
+public interface NodeOppositeRefOneToOne extends Node {
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ String copyright = "Copyright (c) 2011, 2012 Obeo.\r\nAll rights reserved. This program and the accompanying materials\r\nare made available under the terms of the Eclipse Public License v1.0\r\nwhich accompanies this distribution, and is available at\r\nhttp://www.eclipse.org/legal/epl-v10.html\r\n\r\nContributors:\r\n Obeo - initial API and implementation"; //$NON-NLS-1$
+
+ /**
+ * Returns the value of the '<em><b>Source</b></em>' reference.
+ * It is bidirectional and its opposite is '{@link org.eclipse.emf.compare.tests.nodes.NodeOppositeRefOneToOne#getDestination <em>Destination</em>}'.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Source</em>' reference isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Source</em>' reference.
+ * @see #setSource(NodeOppositeRefOneToOne)
+ * @see org.eclipse.emf.compare.tests.nodes.NodesPackage#getNodeOppositeRefOneToOne_Source()
+ * @see org.eclipse.emf.compare.tests.nodes.NodeOppositeRefOneToOne#getDestination
+ * @model opposite="destination"
+ * @generated
+ */
+ NodeOppositeRefOneToOne getSource();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.emf.compare.tests.nodes.NodeOppositeRefOneToOne#getSource <em>Source</em>}' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Source</em>' reference.
+ * @see #getSource()
+ * @generated
+ */
+ void setSource(NodeOppositeRefOneToOne value);
+
+ /**
+ * Returns the value of the '<em><b>Destination</b></em>' reference.
+ * It is bidirectional and its opposite is '{@link org.eclipse.emf.compare.tests.nodes.NodeOppositeRefOneToOne#getSource <em>Source</em>}'.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Destination</em>' reference isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Destination</em>' reference.
+ * @see #setDestination(NodeOppositeRefOneToOne)
+ * @see org.eclipse.emf.compare.tests.nodes.NodesPackage#getNodeOppositeRefOneToOne_Destination()
+ * @see org.eclipse.emf.compare.tests.nodes.NodeOppositeRefOneToOne#getSource
+ * @model opposite="source"
+ * @generated
+ */
+ NodeOppositeRefOneToOne getDestination();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.emf.compare.tests.nodes.NodeOppositeRefOneToOne#getDestination <em>Destination</em>}' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Destination</em>' reference.
+ * @see #getDestination()
+ * @generated
+ */
+ void setDestination(NodeOppositeRefOneToOne value);
+
+} // NodeOppositeRefOneToOne
diff --git a/plugins/org.eclipse.emf.compare.tests/src-gen/org/eclipse/emf/compare/tests/nodes/NodesFactory.java b/plugins/org.eclipse.emf.compare.tests/src-gen/org/eclipse/emf/compare/tests/nodes/NodesFactory.java
index 109134462..ebb370ccf 100644
--- a/plugins/org.eclipse.emf.compare.tests/src-gen/org/eclipse/emf/compare/tests/nodes/NodesFactory.java
+++ b/plugins/org.eclipse.emf.compare.tests/src-gen/org/eclipse/emf/compare/tests/nodes/NodesFactory.java
@@ -100,6 +100,33 @@ public interface NodesFactory extends EFactory {
NodeMultiValueReference createNodeMultiValueReference();
/**
+ * Returns a new object of class '<em>Node Opposite Ref One To One</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return a new object of class '<em>Node Opposite Ref One To One</em>'.
+ * @generated
+ */
+ NodeOppositeRefOneToOne createNodeOppositeRefOneToOne();
+
+ /**
+ * Returns a new object of class '<em>Node Opposite Ref One To Many</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return a new object of class '<em>Node Opposite Ref One To Many</em>'.
+ * @generated
+ */
+ NodeOppositeRefOneToMany createNodeOppositeRefOneToMany();
+
+ /**
+ * Returns a new object of class '<em>Node Opposite Ref Many To Many</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return a new object of class '<em>Node Opposite Ref Many To Many</em>'.
+ * @generated
+ */
+ NodeOppositeRefManyToMany createNodeOppositeRefManyToMany();
+
+ /**
* Returns the package supported by this factory.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
diff --git a/plugins/org.eclipse.emf.compare.tests/src-gen/org/eclipse/emf/compare/tests/nodes/NodesPackage.java b/plugins/org.eclipse.emf.compare.tests/src-gen/org/eclipse/emf/compare/tests/nodes/NodesPackage.java
index f87943d18..31e34093f 100644
--- a/plugins/org.eclipse.emf.compare.tests/src-gen/org/eclipse/emf/compare/tests/nodes/NodesPackage.java
+++ b/plugins/org.eclipse.emf.compare.tests/src-gen/org/eclipse/emf/compare/tests/nodes/NodesPackage.java
@@ -404,6 +404,171 @@ public interface NodesPackage extends EPackage {
/**
+ * The meta object id for the '{@link org.eclipse.emf.compare.tests.nodes.impl.NodeOppositeRefOneToOneImpl <em>Node Opposite Ref One To One</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.compare.tests.nodes.impl.NodeOppositeRefOneToOneImpl
+ * @see org.eclipse.emf.compare.tests.nodes.impl.NodesPackageImpl#getNodeOppositeRefOneToOne()
+ * @generated
+ */
+ int NODE_OPPOSITE_REF_ONE_TO_ONE = 7;
+
+ /**
+ * The feature id for the '<em><b>Name</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int NODE_OPPOSITE_REF_ONE_TO_ONE__NAME = NODE__NAME;
+
+ /**
+ * The feature id for the '<em><b>Containment Ref1</b></em>' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int NODE_OPPOSITE_REF_ONE_TO_ONE__CONTAINMENT_REF1 = NODE__CONTAINMENT_REF1;
+
+ /**
+ * The feature id for the '<em><b>Source</b></em>' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int NODE_OPPOSITE_REF_ONE_TO_ONE__SOURCE = NODE_FEATURE_COUNT + 0;
+
+ /**
+ * The feature id for the '<em><b>Destination</b></em>' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int NODE_OPPOSITE_REF_ONE_TO_ONE__DESTINATION = NODE_FEATURE_COUNT + 1;
+
+ /**
+ * The number of structural features of the '<em>Node Opposite Ref One To One</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int NODE_OPPOSITE_REF_ONE_TO_ONE_FEATURE_COUNT = NODE_FEATURE_COUNT + 2;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.emf.compare.tests.nodes.impl.NodeOppositeRefOneToManyImpl <em>Node Opposite Ref One To Many</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.compare.tests.nodes.impl.NodeOppositeRefOneToManyImpl
+ * @see org.eclipse.emf.compare.tests.nodes.impl.NodesPackageImpl#getNodeOppositeRefOneToMany()
+ * @generated
+ */
+ int NODE_OPPOSITE_REF_ONE_TO_MANY = 8;
+
+ /**
+ * The feature id for the '<em><b>Name</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int NODE_OPPOSITE_REF_ONE_TO_MANY__NAME = NODE__NAME;
+
+ /**
+ * The feature id for the '<em><b>Containment Ref1</b></em>' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int NODE_OPPOSITE_REF_ONE_TO_MANY__CONTAINMENT_REF1 = NODE__CONTAINMENT_REF1;
+
+ /**
+ * The feature id for the '<em><b>Source</b></em>' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int NODE_OPPOSITE_REF_ONE_TO_MANY__SOURCE = NODE_FEATURE_COUNT + 0;
+
+ /**
+ * The feature id for the '<em><b>Destination</b></em>' reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int NODE_OPPOSITE_REF_ONE_TO_MANY__DESTINATION = NODE_FEATURE_COUNT + 1;
+
+ /**
+ * The number of structural features of the '<em>Node Opposite Ref One To Many</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int NODE_OPPOSITE_REF_ONE_TO_MANY_FEATURE_COUNT = NODE_FEATURE_COUNT + 2;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.emf.compare.tests.nodes.impl.NodeOppositeRefManyToManyImpl <em>Node Opposite Ref Many To Many</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.compare.tests.nodes.impl.NodeOppositeRefManyToManyImpl
+ * @see org.eclipse.emf.compare.tests.nodes.impl.NodesPackageImpl#getNodeOppositeRefManyToMany()
+ * @generated
+ */
+ int NODE_OPPOSITE_REF_MANY_TO_MANY = 9;
+
+ /**
+ * The feature id for the '<em><b>Name</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int NODE_OPPOSITE_REF_MANY_TO_MANY__NAME = NODE__NAME;
+
+ /**
+ * The feature id for the '<em><b>Containment Ref1</b></em>' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int NODE_OPPOSITE_REF_MANY_TO_MANY__CONTAINMENT_REF1 = NODE__CONTAINMENT_REF1;
+
+ /**
+ * The feature id for the '<em><b>Source</b></em>' reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int NODE_OPPOSITE_REF_MANY_TO_MANY__SOURCE = NODE_FEATURE_COUNT + 0;
+
+ /**
+ * The feature id for the '<em><b>Destination</b></em>' reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int NODE_OPPOSITE_REF_MANY_TO_MANY__DESTINATION = NODE_FEATURE_COUNT + 1;
+
+ /**
+ * The number of structural features of the '<em>Node Opposite Ref Many To Many</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int NODE_OPPOSITE_REF_MANY_TO_MANY_FEATURE_COUNT = NODE_FEATURE_COUNT + 2;
+
+ /**
* Returns the meta object for class '{@link org.eclipse.emf.compare.tests.nodes.Node <em>Node</em>}'.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
@@ -573,6 +738,102 @@ public interface NodesPackage extends EPackage {
EReference getNodeMultiValueReference_MultiValuedReference();
/**
+ * Returns the meta object for class '{@link org.eclipse.emf.compare.tests.nodes.NodeOppositeRefOneToOne <em>Node Opposite Ref One To One</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>Node Opposite Ref One To One</em>'.
+ * @see org.eclipse.emf.compare.tests.nodes.NodeOppositeRefOneToOne
+ * @generated
+ */
+ EClass getNodeOppositeRefOneToOne();
+
+ /**
+ * Returns the meta object for the reference '{@link org.eclipse.emf.compare.tests.nodes.NodeOppositeRefOneToOne#getSource <em>Source</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the reference '<em>Source</em>'.
+ * @see org.eclipse.emf.compare.tests.nodes.NodeOppositeRefOneToOne#getSource()
+ * @see #getNodeOppositeRefOneToOne()
+ * @generated
+ */
+ EReference getNodeOppositeRefOneToOne_Source();
+
+ /**
+ * Returns the meta object for the reference '{@link org.eclipse.emf.compare.tests.nodes.NodeOppositeRefOneToOne#getDestination <em>Destination</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the reference '<em>Destination</em>'.
+ * @see org.eclipse.emf.compare.tests.nodes.NodeOppositeRefOneToOne#getDestination()
+ * @see #getNodeOppositeRefOneToOne()
+ * @generated
+ */
+ EReference getNodeOppositeRefOneToOne_Destination();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.emf.compare.tests.nodes.NodeOppositeRefOneToMany <em>Node Opposite Ref One To Many</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>Node Opposite Ref One To Many</em>'.
+ * @see org.eclipse.emf.compare.tests.nodes.NodeOppositeRefOneToMany
+ * @generated
+ */
+ EClass getNodeOppositeRefOneToMany();
+
+ /**
+ * Returns the meta object for the reference '{@link org.eclipse.emf.compare.tests.nodes.NodeOppositeRefOneToMany#getSource <em>Source</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the reference '<em>Source</em>'.
+ * @see org.eclipse.emf.compare.tests.nodes.NodeOppositeRefOneToMany#getSource()
+ * @see #getNodeOppositeRefOneToMany()
+ * @generated
+ */
+ EReference getNodeOppositeRefOneToMany_Source();
+
+ /**
+ * Returns the meta object for the reference list '{@link org.eclipse.emf.compare.tests.nodes.NodeOppositeRefOneToMany#getDestination <em>Destination</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the reference list '<em>Destination</em>'.
+ * @see org.eclipse.emf.compare.tests.nodes.NodeOppositeRefOneToMany#getDestination()
+ * @see #getNodeOppositeRefOneToMany()
+ * @generated
+ */
+ EReference getNodeOppositeRefOneToMany_Destination();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.emf.compare.tests.nodes.NodeOppositeRefManyToMany <em>Node Opposite Ref Many To Many</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>Node Opposite Ref Many To Many</em>'.
+ * @see org.eclipse.emf.compare.tests.nodes.NodeOppositeRefManyToMany
+ * @generated
+ */
+ EClass getNodeOppositeRefManyToMany();
+
+ /**
+ * Returns the meta object for the reference list '{@link org.eclipse.emf.compare.tests.nodes.NodeOppositeRefManyToMany#getSource <em>Source</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the reference list '<em>Source</em>'.
+ * @see org.eclipse.emf.compare.tests.nodes.NodeOppositeRefManyToMany#getSource()
+ * @see #getNodeOppositeRefManyToMany()
+ * @generated
+ */
+ EReference getNodeOppositeRefManyToMany_Source();
+
+ /**
+ * Returns the meta object for the reference list '{@link org.eclipse.emf.compare.tests.nodes.NodeOppositeRefManyToMany#getDestination <em>Destination</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the reference list '<em>Destination</em>'.
+ * @see org.eclipse.emf.compare.tests.nodes.NodeOppositeRefManyToMany#getDestination()
+ * @see #getNodeOppositeRefManyToMany()
+ * @generated
+ */
+ EReference getNodeOppositeRefManyToMany_Destination();
+
+ /**
* Returns the factory that creates the instances of the model.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
@@ -736,6 +997,84 @@ public interface NodesPackage extends EPackage {
*/
EReference NODE_MULTI_VALUE_REFERENCE__MULTI_VALUED_REFERENCE = eINSTANCE.getNodeMultiValueReference_MultiValuedReference();
+ /**
+ * The meta object literal for the '{@link org.eclipse.emf.compare.tests.nodes.impl.NodeOppositeRefOneToOneImpl <em>Node Opposite Ref One To One</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.compare.tests.nodes.impl.NodeOppositeRefOneToOneImpl
+ * @see org.eclipse.emf.compare.tests.nodes.impl.NodesPackageImpl#getNodeOppositeRefOneToOne()
+ * @generated
+ */
+ EClass NODE_OPPOSITE_REF_ONE_TO_ONE = eINSTANCE.getNodeOppositeRefOneToOne();
+
+ /**
+ * The meta object literal for the '<em><b>Source</b></em>' reference feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference NODE_OPPOSITE_REF_ONE_TO_ONE__SOURCE = eINSTANCE.getNodeOppositeRefOneToOne_Source();
+
+ /**
+ * The meta object literal for the '<em><b>Destination</b></em>' reference feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference NODE_OPPOSITE_REF_ONE_TO_ONE__DESTINATION = eINSTANCE.getNodeOppositeRefOneToOne_Destination();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.emf.compare.tests.nodes.impl.NodeOppositeRefOneToManyImpl <em>Node Opposite Ref One To Many</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.compare.tests.nodes.impl.NodeOppositeRefOneToManyImpl
+ * @see org.eclipse.emf.compare.tests.nodes.impl.NodesPackageImpl#getNodeOppositeRefOneToMany()
+ * @generated
+ */
+ EClass NODE_OPPOSITE_REF_ONE_TO_MANY = eINSTANCE.getNodeOppositeRefOneToMany();
+
+ /**
+ * The meta object literal for the '<em><b>Source</b></em>' reference feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference NODE_OPPOSITE_REF_ONE_TO_MANY__SOURCE = eINSTANCE.getNodeOppositeRefOneToMany_Source();
+
+ /**
+ * The meta object literal for the '<em><b>Destination</b></em>' reference list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference NODE_OPPOSITE_REF_ONE_TO_MANY__DESTINATION = eINSTANCE.getNodeOppositeRefOneToMany_Destination();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.emf.compare.tests.nodes.impl.NodeOppositeRefManyToManyImpl <em>Node Opposite Ref Many To Many</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.compare.tests.nodes.impl.NodeOppositeRefManyToManyImpl
+ * @see org.eclipse.emf.compare.tests.nodes.impl.NodesPackageImpl#getNodeOppositeRefManyToMany()
+ * @generated
+ */
+ EClass NODE_OPPOSITE_REF_MANY_TO_MANY = eINSTANCE.getNodeOppositeRefManyToMany();
+
+ /**
+ * The meta object literal for the '<em><b>Source</b></em>' reference list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference NODE_OPPOSITE_REF_MANY_TO_MANY__SOURCE = eINSTANCE.getNodeOppositeRefManyToMany_Source();
+
+ /**
+ * The meta object literal for the '<em><b>Destination</b></em>' reference list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference NODE_OPPOSITE_REF_MANY_TO_MANY__DESTINATION = eINSTANCE.getNodeOppositeRefManyToMany_Destination();
+
}
} //NodesPackage
diff --git a/plugins/org.eclipse.emf.compare.tests/src-gen/org/eclipse/emf/compare/tests/nodes/impl/NodeOppositeRefManyToManyImpl.java b/plugins/org.eclipse.emf.compare.tests/src-gen/org/eclipse/emf/compare/tests/nodes/impl/NodeOppositeRefManyToManyImpl.java
new file mode 100644
index 000000000..b21a885bc
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.tests/src-gen/org/eclipse/emf/compare/tests/nodes/impl/NodeOppositeRefManyToManyImpl.java
@@ -0,0 +1,217 @@
+/**
+ * Copyright (c) 2011, 2012 Obeo.
+ * 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:
+ * Obeo - initial API and implementation
+ */
+package org.eclipse.emf.compare.tests.nodes.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.compare.tests.nodes.NodeOppositeRefManyToMany;
+import org.eclipse.emf.compare.tests.nodes.NodesPackage;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.util.EObjectWithInverseResolvingEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Node Opposite Ref Many To Many</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ * <li>{@link org.eclipse.emf.compare.tests.nodes.impl.NodeOppositeRefManyToManyImpl#getSource <em>Source</em>}</li>
+ * <li>{@link org.eclipse.emf.compare.tests.nodes.impl.NodeOppositeRefManyToManyImpl#getDestination <em>Destination</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class NodeOppositeRefManyToManyImpl extends NodeImpl implements NodeOppositeRefManyToMany {
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static final String copyright = "Copyright (c) 2011, 2012 Obeo.\r\nAll rights reserved. This program and the accompanying materials\r\nare made available under the terms of the Eclipse Public License v1.0\r\nwhich accompanies this distribution, and is available at\r\nhttp://www.eclipse.org/legal/epl-v10.html\r\n\r\nContributors:\r\n Obeo - initial API and implementation"; //$NON-NLS-1$
+
+ /**
+ * The cached value of the '{@link #getSource() <em>Source</em>}' reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getSource()
+ * @generated
+ * @ordered
+ */
+ protected EList<NodeOppositeRefManyToMany> source;
+
+ /**
+ * The cached value of the '{@link #getDestination() <em>Destination</em>}' reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getDestination()
+ * @generated
+ * @ordered
+ */
+ protected EList<NodeOppositeRefManyToMany> destination;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected NodeOppositeRefManyToManyImpl() {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return NodesPackage.Literals.NODE_OPPOSITE_REF_MANY_TO_MANY;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EList<NodeOppositeRefManyToMany> getSource() {
+ if (source == null) {
+ source = new EObjectWithInverseResolvingEList.ManyInverse<NodeOppositeRefManyToMany>(NodeOppositeRefManyToMany.class, this, NodesPackage.NODE_OPPOSITE_REF_MANY_TO_MANY__SOURCE, NodesPackage.NODE_OPPOSITE_REF_MANY_TO_MANY__DESTINATION);
+ }
+ return source;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EList<NodeOppositeRefManyToMany> getDestination() {
+ if (destination == null) {
+ destination = new EObjectWithInverseResolvingEList.ManyInverse<NodeOppositeRefManyToMany>(NodeOppositeRefManyToMany.class, this, NodesPackage.NODE_OPPOSITE_REF_MANY_TO_MANY__DESTINATION, NodesPackage.NODE_OPPOSITE_REF_MANY_TO_MANY__SOURCE);
+ }
+ return destination;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case NodesPackage.NODE_OPPOSITE_REF_MANY_TO_MANY__SOURCE:
+ return ((InternalEList<InternalEObject>)(InternalEList<?>)getSource()).basicAdd(otherEnd, msgs);
+ case NodesPackage.NODE_OPPOSITE_REF_MANY_TO_MANY__DESTINATION:
+ return ((InternalEList<InternalEObject>)(InternalEList<?>)getDestination()).basicAdd(otherEnd, msgs);
+ }
+ return super.eInverseAdd(otherEnd, featureID, msgs);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case NodesPackage.NODE_OPPOSITE_REF_MANY_TO_MANY__SOURCE:
+ return ((InternalEList<?>)getSource()).basicRemove(otherEnd, msgs);
+ case NodesPackage.NODE_OPPOSITE_REF_MANY_TO_MANY__DESTINATION:
+ return ((InternalEList<?>)getDestination()).basicRemove(otherEnd, msgs);
+ }
+ return super.eInverseRemove(otherEnd, featureID, msgs);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case NodesPackage.NODE_OPPOSITE_REF_MANY_TO_MANY__SOURCE:
+ return getSource();
+ case NodesPackage.NODE_OPPOSITE_REF_MANY_TO_MANY__DESTINATION:
+ return getDestination();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case NodesPackage.NODE_OPPOSITE_REF_MANY_TO_MANY__SOURCE:
+ getSource().clear();
+ getSource().addAll((Collection<? extends NodeOppositeRefManyToMany>)newValue);
+ return;
+ case NodesPackage.NODE_OPPOSITE_REF_MANY_TO_MANY__DESTINATION:
+ getDestination().clear();
+ getDestination().addAll((Collection<? extends NodeOppositeRefManyToMany>)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case NodesPackage.NODE_OPPOSITE_REF_MANY_TO_MANY__SOURCE:
+ getSource().clear();
+ return;
+ case NodesPackage.NODE_OPPOSITE_REF_MANY_TO_MANY__DESTINATION:
+ getDestination().clear();
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case NodesPackage.NODE_OPPOSITE_REF_MANY_TO_MANY__SOURCE:
+ return source != null && !source.isEmpty();
+ case NodesPackage.NODE_OPPOSITE_REF_MANY_TO_MANY__DESTINATION:
+ return destination != null && !destination.isEmpty();
+ }
+ return super.eIsSet(featureID);
+ }
+
+} //NodeOppositeRefManyToManyImpl
diff --git a/plugins/org.eclipse.emf.compare.tests/src-gen/org/eclipse/emf/compare/tests/nodes/impl/NodeOppositeRefOneToManyImpl.java b/plugins/org.eclipse.emf.compare.tests/src-gen/org/eclipse/emf/compare/tests/nodes/impl/NodeOppositeRefOneToManyImpl.java
new file mode 100644
index 000000000..60a3ad4fc
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.tests/src-gen/org/eclipse/emf/compare/tests/nodes/impl/NodeOppositeRefOneToManyImpl.java
@@ -0,0 +1,270 @@
+/**
+ * Copyright (c) 2011, 2012 Obeo.
+ * 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:
+ * Obeo - initial API and implementation
+ */
+package org.eclipse.emf.compare.tests.nodes.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.compare.tests.nodes.NodeOppositeRefOneToMany;
+import org.eclipse.emf.compare.tests.nodes.NodesPackage;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.emf.ecore.util.EObjectWithInverseResolvingEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Node Opposite Ref One To Many</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ * <li>{@link org.eclipse.emf.compare.tests.nodes.impl.NodeOppositeRefOneToManyImpl#getSource <em>Source</em>}</li>
+ * <li>{@link org.eclipse.emf.compare.tests.nodes.impl.NodeOppositeRefOneToManyImpl#getDestination <em>Destination</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class NodeOppositeRefOneToManyImpl extends NodeImpl implements NodeOppositeRefOneToMany {
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static final String copyright = "Copyright (c) 2011, 2012 Obeo.\r\nAll rights reserved. This program and the accompanying materials\r\nare made available under the terms of the Eclipse Public License v1.0\r\nwhich accompanies this distribution, and is available at\r\nhttp://www.eclipse.org/legal/epl-v10.html\r\n\r\nContributors:\r\n Obeo - initial API and implementation"; //$NON-NLS-1$
+
+ /**
+ * The cached value of the '{@link #getSource() <em>Source</em>}' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getSource()
+ * @generated
+ * @ordered
+ */
+ protected NodeOppositeRefOneToMany source;
+
+ /**
+ * The cached value of the '{@link #getDestination() <em>Destination</em>}' reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getDestination()
+ * @generated
+ * @ordered
+ */
+ protected EList<NodeOppositeRefOneToMany> destination;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected NodeOppositeRefOneToManyImpl() {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return NodesPackage.Literals.NODE_OPPOSITE_REF_ONE_TO_MANY;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public NodeOppositeRefOneToMany getSource() {
+ if (source != null && source.eIsProxy()) {
+ InternalEObject oldSource = (InternalEObject)source;
+ source = (NodeOppositeRefOneToMany)eResolveProxy(oldSource);
+ if (source != oldSource) {
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.RESOLVE, NodesPackage.NODE_OPPOSITE_REF_ONE_TO_MANY__SOURCE, oldSource, source));
+ }
+ }
+ return source;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public NodeOppositeRefOneToMany basicGetSource() {
+ return source;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public NotificationChain basicSetSource(NodeOppositeRefOneToMany newSource, NotificationChain msgs) {
+ NodeOppositeRefOneToMany oldSource = source;
+ source = newSource;
+ if (eNotificationRequired()) {
+ ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, NodesPackage.NODE_OPPOSITE_REF_ONE_TO_MANY__SOURCE, oldSource, newSource);
+ if (msgs == null) msgs = notification; else msgs.add(notification);
+ }
+ return msgs;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setSource(NodeOppositeRefOneToMany newSource) {
+ if (newSource != source) {
+ NotificationChain msgs = null;
+ if (source != null)
+ msgs = ((InternalEObject)source).eInverseRemove(this, NodesPackage.NODE_OPPOSITE_REF_ONE_TO_MANY__DESTINATION, NodeOppositeRefOneToMany.class, msgs);
+ if (newSource != null)
+ msgs = ((InternalEObject)newSource).eInverseAdd(this, NodesPackage.NODE_OPPOSITE_REF_ONE_TO_MANY__DESTINATION, NodeOppositeRefOneToMany.class, msgs);
+ msgs = basicSetSource(newSource, msgs);
+ if (msgs != null) msgs.dispatch();
+ }
+ else if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, NodesPackage.NODE_OPPOSITE_REF_ONE_TO_MANY__SOURCE, newSource, newSource));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EList<NodeOppositeRefOneToMany> getDestination() {
+ if (destination == null) {
+ destination = new EObjectWithInverseResolvingEList<NodeOppositeRefOneToMany>(NodeOppositeRefOneToMany.class, this, NodesPackage.NODE_OPPOSITE_REF_ONE_TO_MANY__DESTINATION, NodesPackage.NODE_OPPOSITE_REF_ONE_TO_MANY__SOURCE);
+ }
+ return destination;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case NodesPackage.NODE_OPPOSITE_REF_ONE_TO_MANY__SOURCE:
+ if (source != null)
+ msgs = ((InternalEObject)source).eInverseRemove(this, NodesPackage.NODE_OPPOSITE_REF_ONE_TO_MANY__DESTINATION, NodeOppositeRefOneToMany.class, msgs);
+ return basicSetSource((NodeOppositeRefOneToMany)otherEnd, msgs);
+ case NodesPackage.NODE_OPPOSITE_REF_ONE_TO_MANY__DESTINATION:
+ return ((InternalEList<InternalEObject>)(InternalEList<?>)getDestination()).basicAdd(otherEnd, msgs);
+ }
+ return super.eInverseAdd(otherEnd, featureID, msgs);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case NodesPackage.NODE_OPPOSITE_REF_ONE_TO_MANY__SOURCE:
+ return basicSetSource(null, msgs);
+ case NodesPackage.NODE_OPPOSITE_REF_ONE_TO_MANY__DESTINATION:
+ return ((InternalEList<?>)getDestination()).basicRemove(otherEnd, msgs);
+ }
+ return super.eInverseRemove(otherEnd, featureID, msgs);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case NodesPackage.NODE_OPPOSITE_REF_ONE_TO_MANY__SOURCE:
+ if (resolve) return getSource();
+ return basicGetSource();
+ case NodesPackage.NODE_OPPOSITE_REF_ONE_TO_MANY__DESTINATION:
+ return getDestination();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case NodesPackage.NODE_OPPOSITE_REF_ONE_TO_MANY__SOURCE:
+ setSource((NodeOppositeRefOneToMany)newValue);
+ return;
+ case NodesPackage.NODE_OPPOSITE_REF_ONE_TO_MANY__DESTINATION:
+ getDestination().clear();
+ getDestination().addAll((Collection<? extends NodeOppositeRefOneToMany>)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case NodesPackage.NODE_OPPOSITE_REF_ONE_TO_MANY__SOURCE:
+ setSource((NodeOppositeRefOneToMany)null);
+ return;
+ case NodesPackage.NODE_OPPOSITE_REF_ONE_TO_MANY__DESTINATION:
+ getDestination().clear();
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case NodesPackage.NODE_OPPOSITE_REF_ONE_TO_MANY__SOURCE:
+ return source != null;
+ case NodesPackage.NODE_OPPOSITE_REF_ONE_TO_MANY__DESTINATION:
+ return destination != null && !destination.isEmpty();
+ }
+ return super.eIsSet(featureID);
+ }
+
+} //NodeOppositeRefOneToManyImpl
diff --git a/plugins/org.eclipse.emf.compare.tests/src-gen/org/eclipse/emf/compare/tests/nodes/impl/NodeOppositeRefOneToOneImpl.java b/plugins/org.eclipse.emf.compare.tests/src-gen/org/eclipse/emf/compare/tests/nodes/impl/NodeOppositeRefOneToOneImpl.java
new file mode 100644
index 000000000..1ecfba6ed
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.tests/src-gen/org/eclipse/emf/compare/tests/nodes/impl/NodeOppositeRefOneToOneImpl.java
@@ -0,0 +1,311 @@
+/**
+ * Copyright (c) 2011, 2012 Obeo.
+ * 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:
+ * Obeo - initial API and implementation
+ */
+package org.eclipse.emf.compare.tests.nodes.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.compare.tests.nodes.NodeOppositeRefOneToOne;
+import org.eclipse.emf.compare.tests.nodes.NodesPackage;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Node Opposite Ref One To One</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ * <li>{@link org.eclipse.emf.compare.tests.nodes.impl.NodeOppositeRefOneToOneImpl#getSource <em>Source</em>}</li>
+ * <li>{@link org.eclipse.emf.compare.tests.nodes.impl.NodeOppositeRefOneToOneImpl#getDestination <em>Destination</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class NodeOppositeRefOneToOneImpl extends NodeImpl implements NodeOppositeRefOneToOne {
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static final String copyright = "Copyright (c) 2011, 2012 Obeo.\r\nAll rights reserved. This program and the accompanying materials\r\nare made available under the terms of the Eclipse Public License v1.0\r\nwhich accompanies this distribution, and is available at\r\nhttp://www.eclipse.org/legal/epl-v10.html\r\n\r\nContributors:\r\n Obeo - initial API and implementation"; //$NON-NLS-1$
+
+ /**
+ * The cached value of the '{@link #getSource() <em>Source</em>}' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getSource()
+ * @generated
+ * @ordered
+ */
+ protected NodeOppositeRefOneToOne source;
+
+ /**
+ * The cached value of the '{@link #getDestination() <em>Destination</em>}' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getDestination()
+ * @generated
+ * @ordered
+ */
+ protected NodeOppositeRefOneToOne destination;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected NodeOppositeRefOneToOneImpl() {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return NodesPackage.Literals.NODE_OPPOSITE_REF_ONE_TO_ONE;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public NodeOppositeRefOneToOne getSource() {
+ if (source != null && source.eIsProxy()) {
+ InternalEObject oldSource = (InternalEObject)source;
+ source = (NodeOppositeRefOneToOne)eResolveProxy(oldSource);
+ if (source != oldSource) {
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.RESOLVE, NodesPackage.NODE_OPPOSITE_REF_ONE_TO_ONE__SOURCE, oldSource, source));
+ }
+ }
+ return source;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public NodeOppositeRefOneToOne basicGetSource() {
+ return source;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public NotificationChain basicSetSource(NodeOppositeRefOneToOne newSource, NotificationChain msgs) {
+ NodeOppositeRefOneToOne oldSource = source;
+ source = newSource;
+ if (eNotificationRequired()) {
+ ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, NodesPackage.NODE_OPPOSITE_REF_ONE_TO_ONE__SOURCE, oldSource, newSource);
+ if (msgs == null) msgs = notification; else msgs.add(notification);
+ }
+ return msgs;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setSource(NodeOppositeRefOneToOne newSource) {
+ if (newSource != source) {
+ NotificationChain msgs = null;
+ if (source != null)
+ msgs = ((InternalEObject)source).eInverseRemove(this, NodesPackage.NODE_OPPOSITE_REF_ONE_TO_ONE__DESTINATION, NodeOppositeRefOneToOne.class, msgs);
+ if (newSource != null)
+ msgs = ((InternalEObject)newSource).eInverseAdd(this, NodesPackage.NODE_OPPOSITE_REF_ONE_TO_ONE__DESTINATION, NodeOppositeRefOneToOne.class, msgs);
+ msgs = basicSetSource(newSource, msgs);
+ if (msgs != null) msgs.dispatch();
+ }
+ else if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, NodesPackage.NODE_OPPOSITE_REF_ONE_TO_ONE__SOURCE, newSource, newSource));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public NodeOppositeRefOneToOne getDestination() {
+ if (destination != null && destination.eIsProxy()) {
+ InternalEObject oldDestination = (InternalEObject)destination;
+ destination = (NodeOppositeRefOneToOne)eResolveProxy(oldDestination);
+ if (destination != oldDestination) {
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.RESOLVE, NodesPackage.NODE_OPPOSITE_REF_ONE_TO_ONE__DESTINATION, oldDestination, destination));
+ }
+ }
+ return destination;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public NodeOppositeRefOneToOne basicGetDestination() {
+ return destination;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public NotificationChain basicSetDestination(NodeOppositeRefOneToOne newDestination, NotificationChain msgs) {
+ NodeOppositeRefOneToOne oldDestination = destination;
+ destination = newDestination;
+ if (eNotificationRequired()) {
+ ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, NodesPackage.NODE_OPPOSITE_REF_ONE_TO_ONE__DESTINATION, oldDestination, newDestination);
+ if (msgs == null) msgs = notification; else msgs.add(notification);
+ }
+ return msgs;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setDestination(NodeOppositeRefOneToOne newDestination) {
+ if (newDestination != destination) {
+ NotificationChain msgs = null;
+ if (destination != null)
+ msgs = ((InternalEObject)destination).eInverseRemove(this, NodesPackage.NODE_OPPOSITE_REF_ONE_TO_ONE__SOURCE, NodeOppositeRefOneToOne.class, msgs);
+ if (newDestination != null)
+ msgs = ((InternalEObject)newDestination).eInverseAdd(this, NodesPackage.NODE_OPPOSITE_REF_ONE_TO_ONE__SOURCE, NodeOppositeRefOneToOne.class, msgs);
+ msgs = basicSetDestination(newDestination, msgs);
+ if (msgs != null) msgs.dispatch();
+ }
+ else if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, NodesPackage.NODE_OPPOSITE_REF_ONE_TO_ONE__DESTINATION, newDestination, newDestination));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case NodesPackage.NODE_OPPOSITE_REF_ONE_TO_ONE__SOURCE:
+ if (source != null)
+ msgs = ((InternalEObject)source).eInverseRemove(this, NodesPackage.NODE_OPPOSITE_REF_ONE_TO_ONE__DESTINATION, NodeOppositeRefOneToOne.class, msgs);
+ return basicSetSource((NodeOppositeRefOneToOne)otherEnd, msgs);
+ case NodesPackage.NODE_OPPOSITE_REF_ONE_TO_ONE__DESTINATION:
+ if (destination != null)
+ msgs = ((InternalEObject)destination).eInverseRemove(this, NodesPackage.NODE_OPPOSITE_REF_ONE_TO_ONE__SOURCE, NodeOppositeRefOneToOne.class, msgs);
+ return basicSetDestination((NodeOppositeRefOneToOne)otherEnd, msgs);
+ }
+ return super.eInverseAdd(otherEnd, featureID, msgs);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case NodesPackage.NODE_OPPOSITE_REF_ONE_TO_ONE__SOURCE:
+ return basicSetSource(null, msgs);
+ case NodesPackage.NODE_OPPOSITE_REF_ONE_TO_ONE__DESTINATION:
+ return basicSetDestination(null, msgs);
+ }
+ return super.eInverseRemove(otherEnd, featureID, msgs);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case NodesPackage.NODE_OPPOSITE_REF_ONE_TO_ONE__SOURCE:
+ if (resolve) return getSource();
+ return basicGetSource();
+ case NodesPackage.NODE_OPPOSITE_REF_ONE_TO_ONE__DESTINATION:
+ if (resolve) return getDestination();
+ return basicGetDestination();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case NodesPackage.NODE_OPPOSITE_REF_ONE_TO_ONE__SOURCE:
+ setSource((NodeOppositeRefOneToOne)newValue);
+ return;
+ case NodesPackage.NODE_OPPOSITE_REF_ONE_TO_ONE__DESTINATION:
+ setDestination((NodeOppositeRefOneToOne)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case NodesPackage.NODE_OPPOSITE_REF_ONE_TO_ONE__SOURCE:
+ setSource((NodeOppositeRefOneToOne)null);
+ return;
+ case NodesPackage.NODE_OPPOSITE_REF_ONE_TO_ONE__DESTINATION:
+ setDestination((NodeOppositeRefOneToOne)null);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case NodesPackage.NODE_OPPOSITE_REF_ONE_TO_ONE__SOURCE:
+ return source != null;
+ case NodesPackage.NODE_OPPOSITE_REF_ONE_TO_ONE__DESTINATION:
+ return destination != null;
+ }
+ return super.eIsSet(featureID);
+ }
+
+} //NodeOppositeRefOneToOneImpl
diff --git a/plugins/org.eclipse.emf.compare.tests/src-gen/org/eclipse/emf/compare/tests/nodes/impl/NodesFactoryImpl.java b/plugins/org.eclipse.emf.compare.tests/src-gen/org/eclipse/emf/compare/tests/nodes/impl/NodesFactoryImpl.java
index 5797691bd..ca9e5db12 100644
--- a/plugins/org.eclipse.emf.compare.tests/src-gen/org/eclipse/emf/compare/tests/nodes/impl/NodesFactoryImpl.java
+++ b/plugins/org.eclipse.emf.compare.tests/src-gen/org/eclipse/emf/compare/tests/nodes/impl/NodesFactoryImpl.java
@@ -78,6 +78,9 @@ public class NodesFactoryImpl extends EFactoryImpl implements NodesFactory {
case NodesPackage.NODE_MULTI_VALUED_ATTRIBUTE: return createNodeMultiValuedAttribute();
case NodesPackage.NODE_SINGLE_VALUE_REFERENCE: return createNodeSingleValueReference();
case NodesPackage.NODE_MULTI_VALUE_REFERENCE: return createNodeMultiValueReference();
+ case NodesPackage.NODE_OPPOSITE_REF_ONE_TO_ONE: return createNodeOppositeRefOneToOne();
+ case NodesPackage.NODE_OPPOSITE_REF_ONE_TO_MANY: return createNodeOppositeRefOneToMany();
+ case NodesPackage.NODE_OPPOSITE_REF_MANY_TO_MANY: return createNodeOppositeRefManyToMany();
default:
throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier"); //$NON-NLS-1$ //$NON-NLS-2$
}
@@ -158,6 +161,36 @@ public class NodesFactoryImpl extends EFactoryImpl implements NodesFactory {
* <!-- end-user-doc -->
* @generated
*/
+ public NodeOppositeRefOneToOne createNodeOppositeRefOneToOne() {
+ NodeOppositeRefOneToOneImpl nodeOppositeRefOneToOne = new NodeOppositeRefOneToOneImpl();
+ return nodeOppositeRefOneToOne;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public NodeOppositeRefOneToMany createNodeOppositeRefOneToMany() {
+ NodeOppositeRefOneToManyImpl nodeOppositeRefOneToMany = new NodeOppositeRefOneToManyImpl();
+ return nodeOppositeRefOneToMany;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public NodeOppositeRefManyToMany createNodeOppositeRefManyToMany() {
+ NodeOppositeRefManyToManyImpl nodeOppositeRefManyToMany = new NodeOppositeRefManyToManyImpl();
+ return nodeOppositeRefManyToMany;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
public NodesPackage getNodesPackage() {
return (NodesPackage)getEPackage();
}
diff --git a/plugins/org.eclipse.emf.compare.tests/src-gen/org/eclipse/emf/compare/tests/nodes/impl/NodesPackageImpl.java b/plugins/org.eclipse.emf.compare.tests/src-gen/org/eclipse/emf/compare/tests/nodes/impl/NodesPackageImpl.java
index c7ccf74f7..96e15afc8 100644
--- a/plugins/org.eclipse.emf.compare.tests/src-gen/org/eclipse/emf/compare/tests/nodes/impl/NodesPackageImpl.java
+++ b/plugins/org.eclipse.emf.compare.tests/src-gen/org/eclipse/emf/compare/tests/nodes/impl/NodesPackageImpl.java
@@ -14,92 +14,111 @@ import org.eclipse.emf.compare.tests.nodes.Node;
import org.eclipse.emf.compare.tests.nodes.NodeMultiValueReference;
import org.eclipse.emf.compare.tests.nodes.NodeMultiValuedAttribute;
import org.eclipse.emf.compare.tests.nodes.NodeMultipleContainment;
+import org.eclipse.emf.compare.tests.nodes.NodeOppositeRefManyToMany;
+import org.eclipse.emf.compare.tests.nodes.NodeOppositeRefOneToMany;
+import org.eclipse.emf.compare.tests.nodes.NodeOppositeRefOneToOne;
import org.eclipse.emf.compare.tests.nodes.NodeSingleValueAttribute;
import org.eclipse.emf.compare.tests.nodes.NodeSingleValueContainment;
import org.eclipse.emf.compare.tests.nodes.NodeSingleValueReference;
import org.eclipse.emf.compare.tests.nodes.NodesFactory;
import org.eclipse.emf.compare.tests.nodes.NodesPackage;
-
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;
/**
- * <!-- begin-user-doc -->
- * An implementation of the model <b>Package</b>.
- * <!-- end-user-doc -->
+ * <!-- begin-user-doc --> An implementation of the model <b>Package</b>. <!-- end-user-doc -->
+ *
* @generated
*/
public class NodesPackageImpl extends EPackageImpl implements NodesPackage {
/**
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
* @generated
*/
public static final String copyright = "Copyright (c) 2011, 2012 Obeo.\r\nAll rights reserved. This program and the accompanying materials\r\nare made available under the terms of the Eclipse Public License v1.0\r\nwhich accompanies this distribution, and is available at\r\nhttp://www.eclipse.org/legal/epl-v10.html\r\n\r\nContributors:\r\n Obeo - initial API and implementation"; //$NON-NLS-1$
/**
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
* @generated
*/
private EClass nodeEClass = null;
/**
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
* @generated
*/
private EClass nodeMultipleContainmentEClass = null;
/**
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
* @generated
*/
private EClass nodeSingleValueContainmentEClass = null;
/**
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
* @generated
*/
private EClass nodeSingleValueAttributeEClass = null;
/**
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
* @generated
*/
private EClass nodeMultiValuedAttributeEClass = null;
/**
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
* @generated
*/
private EClass nodeSingleValueReferenceEClass = null;
/**
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
* @generated
*/
private EClass nodeMultiValueReferenceEClass = null;
/**
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ private EClass nodeOppositeRefOneToOneEClass = null;
+
+ /**
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ private EClass nodeOppositeRefOneToManyEClass = null;
+
+ /**
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ private EClass nodeOppositeRefManyToManyEClass = 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>Note: the correct way to create the package is via the static
- * factory method {@link #init init()}, which also performs
- * initialization of the package, or returns the registered package,
- * if one already exists.
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
+ * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package package URI value.
+ * <p>
+ * Note: the correct way to create the package is via the static factory method {@link #init init()},
+ * which also performs initialization of the package, or returns the registered package, if one already
+ * exists. <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
* @see org.eclipse.emf.ecore.EPackage.Registry
* @see org.eclipse.emf.compare.tests.nodes.NodesPackage#eNS_URI
* @see #init()
@@ -110,29 +129,34 @@ public class NodesPackageImpl extends EPackageImpl implements NodesPackage {
}
/**
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
+ * <!-- 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.
+ * 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 NodesPackage#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 NodesPackage#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()
* @generated
*/
public static NodesPackage init() {
- if (isInited) return (NodesPackage)EPackage.Registry.INSTANCE.getEPackage(NodesPackage.eNS_URI);
+ if (isInited) {
+ return (NodesPackage)EPackage.Registry.INSTANCE.getEPackage(NodesPackage.eNS_URI);
+ }
// Obtain or create and register package
- NodesPackageImpl theNodesPackage = (NodesPackageImpl)(EPackage.Registry.INSTANCE.get(eNS_URI) instanceof NodesPackageImpl ? EPackage.Registry.INSTANCE.get(eNS_URI) : new NodesPackageImpl());
+ NodesPackageImpl theNodesPackage = (NodesPackageImpl)(EPackage.Registry.INSTANCE.get(eNS_URI) instanceof NodesPackageImpl ? EPackage.Registry.INSTANCE
+ .get(eNS_URI)
+ : new NodesPackageImpl());
isInited = true;
@@ -145,15 +169,14 @@ public class NodesPackageImpl extends EPackageImpl implements NodesPackage {
// Mark meta-data to indicate it can't be changed
theNodesPackage.freeze();
-
// Update the registry and return the package
EPackage.Registry.INSTANCE.put(NodesPackage.eNS_URI, theNodesPackage);
return theNodesPackage;
}
/**
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
* @generated
*/
public EClass getNode() {
@@ -161,8 +184,8 @@ public class NodesPackageImpl extends EPackageImpl implements NodesPackage {
}
/**
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
* @generated
*/
public EAttribute getNode_Name() {
@@ -170,8 +193,8 @@ public class NodesPackageImpl extends EPackageImpl implements NodesPackage {
}
/**
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
* @generated
*/
public EReference getNode_ContainmentRef1() {
@@ -179,8 +202,8 @@ public class NodesPackageImpl extends EPackageImpl implements NodesPackage {
}
/**
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
* @generated
*/
public EClass getNodeMultipleContainment() {
@@ -188,8 +211,8 @@ public class NodesPackageImpl extends EPackageImpl implements NodesPackage {
}
/**
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
* @generated
*/
public EReference getNodeMultipleContainment_ContainmentRef2() {
@@ -197,8 +220,8 @@ public class NodesPackageImpl extends EPackageImpl implements NodesPackage {
}
/**
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
* @generated
*/
public EReference getNodeMultipleContainment_ContainmentRef3() {
@@ -206,8 +229,8 @@ public class NodesPackageImpl extends EPackageImpl implements NodesPackage {
}
/**
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
* @generated
*/
public EClass getNodeSingleValueContainment() {
@@ -215,8 +238,8 @@ public class NodesPackageImpl extends EPackageImpl implements NodesPackage {
}
/**
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
* @generated
*/
public EReference getNodeSingleValueContainment_SingleValueContainment() {
@@ -224,8 +247,8 @@ public class NodesPackageImpl extends EPackageImpl implements NodesPackage {
}
/**
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
* @generated
*/
public EClass getNodeSingleValueAttribute() {
@@ -233,8 +256,8 @@ public class NodesPackageImpl extends EPackageImpl implements NodesPackage {
}
/**
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
* @generated
*/
public EAttribute getNodeSingleValueAttribute_SingleValuedAttribute() {
@@ -242,8 +265,8 @@ public class NodesPackageImpl extends EPackageImpl implements NodesPackage {
}
/**
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
* @generated
*/
public EClass getNodeMultiValuedAttribute() {
@@ -251,8 +274,8 @@ public class NodesPackageImpl extends EPackageImpl implements NodesPackage {
}
/**
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
* @generated
*/
public EAttribute getNodeMultiValuedAttribute_MultiValuedAttribute() {
@@ -260,8 +283,8 @@ public class NodesPackageImpl extends EPackageImpl implements NodesPackage {
}
/**
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
* @generated
*/
public EClass getNodeSingleValueReference() {
@@ -269,8 +292,8 @@ public class NodesPackageImpl extends EPackageImpl implements NodesPackage {
}
/**
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
* @generated
*/
public EReference getNodeSingleValueReference_SingleValuedReference() {
@@ -278,8 +301,8 @@ public class NodesPackageImpl extends EPackageImpl implements NodesPackage {
}
/**
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
* @generated
*/
public EClass getNodeMultiValueReference() {
@@ -287,8 +310,8 @@ public class NodesPackageImpl extends EPackageImpl implements NodesPackage {
}
/**
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
* @generated
*/
public EReference getNodeMultiValueReference_MultiValuedReference() {
@@ -296,8 +319,89 @@ public class NodesPackageImpl extends EPackageImpl implements NodesPackage {
}
/**
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public EClass getNodeOppositeRefOneToOne() {
+ return nodeOppositeRefOneToOneEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public EReference getNodeOppositeRefOneToOne_Source() {
+ return (EReference)nodeOppositeRefOneToOneEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public EReference getNodeOppositeRefOneToOne_Destination() {
+ return (EReference)nodeOppositeRefOneToOneEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public EClass getNodeOppositeRefOneToMany() {
+ return nodeOppositeRefOneToManyEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public EReference getNodeOppositeRefOneToMany_Source() {
+ return (EReference)nodeOppositeRefOneToManyEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public EReference getNodeOppositeRefOneToMany_Destination() {
+ return (EReference)nodeOppositeRefOneToManyEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public EClass getNodeOppositeRefManyToMany() {
+ return nodeOppositeRefManyToManyEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public EReference getNodeOppositeRefManyToMany_Source() {
+ return (EReference)nodeOppositeRefManyToManyEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public EReference getNodeOppositeRefManyToMany_Destination() {
+ return (EReference)nodeOppositeRefManyToManyEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
* @generated
*/
public NodesFactory getNodesFactory() {
@@ -305,21 +409,22 @@ public class NodesPackageImpl extends EPackageImpl implements NodesPackage {
}
/**
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
+ * <!-- 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;
+ if (isCreated) {
+ return;
+ }
isCreated = true;
// Create classes and their features
@@ -332,7 +437,8 @@ public class NodesPackageImpl extends EPackageImpl implements NodesPackage {
createEReference(nodeMultipleContainmentEClass, NODE_MULTIPLE_CONTAINMENT__CONTAINMENT_REF3);
nodeSingleValueContainmentEClass = createEClass(NODE_SINGLE_VALUE_CONTAINMENT);
- createEReference(nodeSingleValueContainmentEClass, NODE_SINGLE_VALUE_CONTAINMENT__SINGLE_VALUE_CONTAINMENT);
+ createEReference(nodeSingleValueContainmentEClass,
+ NODE_SINGLE_VALUE_CONTAINMENT__SINGLE_VALUE_CONTAINMENT);
nodeSingleValueAttributeEClass = createEClass(NODE_SINGLE_VALUE_ATTRIBUTE);
createEAttribute(nodeSingleValueAttributeEClass, NODE_SINGLE_VALUE_ATTRIBUTE__SINGLE_VALUED_ATTRIBUTE);
@@ -345,24 +451,37 @@ public class NodesPackageImpl extends EPackageImpl implements NodesPackage {
nodeMultiValueReferenceEClass = createEClass(NODE_MULTI_VALUE_REFERENCE);
createEReference(nodeMultiValueReferenceEClass, NODE_MULTI_VALUE_REFERENCE__MULTI_VALUED_REFERENCE);
+
+ nodeOppositeRefOneToOneEClass = createEClass(NODE_OPPOSITE_REF_ONE_TO_ONE);
+ createEReference(nodeOppositeRefOneToOneEClass, NODE_OPPOSITE_REF_ONE_TO_ONE__SOURCE);
+ createEReference(nodeOppositeRefOneToOneEClass, NODE_OPPOSITE_REF_ONE_TO_ONE__DESTINATION);
+
+ nodeOppositeRefOneToManyEClass = createEClass(NODE_OPPOSITE_REF_ONE_TO_MANY);
+ createEReference(nodeOppositeRefOneToManyEClass, NODE_OPPOSITE_REF_ONE_TO_MANY__SOURCE);
+ createEReference(nodeOppositeRefOneToManyEClass, NODE_OPPOSITE_REF_ONE_TO_MANY__DESTINATION);
+
+ nodeOppositeRefManyToManyEClass = createEClass(NODE_OPPOSITE_REF_MANY_TO_MANY);
+ createEReference(nodeOppositeRefManyToManyEClass, NODE_OPPOSITE_REF_MANY_TO_MANY__SOURCE);
+ createEReference(nodeOppositeRefManyToManyEClass, NODE_OPPOSITE_REF_MANY_TO_MANY__DESTINATION);
}
/**
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
+ * <!-- 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;
+ if (isInitialized) {
+ return;
+ }
isInitialized = true;
// Initialize package
@@ -381,33 +500,114 @@ public class NodesPackageImpl extends EPackageImpl implements NodesPackage {
nodeMultiValuedAttributeEClass.getESuperTypes().add(this.getNode());
nodeSingleValueReferenceEClass.getESuperTypes().add(this.getNode());
nodeMultiValueReferenceEClass.getESuperTypes().add(this.getNode());
+ nodeOppositeRefOneToOneEClass.getESuperTypes().add(this.getNode());
+ nodeOppositeRefOneToManyEClass.getESuperTypes().add(this.getNode());
+ nodeOppositeRefManyToManyEClass.getESuperTypes().add(this.getNode());
// Initialize classes and features; add operations and parameters
initEClass(nodeEClass, Node.class, "Node", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
- initEAttribute(getNode_Name(), ecorePackage.getEString(), "name", null, 0, 1, Node.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
- initEReference(getNode_ContainmentRef1(), this.getNode(), null, "containmentRef1", null, 0, -1, Node.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
-
- initEClass(nodeMultipleContainmentEClass, NodeMultipleContainment.class, "NodeMultipleContainment", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
- initEReference(getNodeMultipleContainment_ContainmentRef2(), this.getNode(), null, "containmentRef2", null, 0, -1, NodeMultipleContainment.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
- initEReference(getNodeMultipleContainment_ContainmentRef3(), this.getNode(), null, "containmentRef3", null, 0, -1, NodeMultipleContainment.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
-
- initEClass(nodeSingleValueContainmentEClass, NodeSingleValueContainment.class, "NodeSingleValueContainment", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
- initEReference(getNodeSingleValueContainment_SingleValueContainment(), this.getNode(), null, "singleValueContainment", null, 0, 1, NodeSingleValueContainment.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
-
- initEClass(nodeSingleValueAttributeEClass, NodeSingleValueAttribute.class, "NodeSingleValueAttribute", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
- initEAttribute(getNodeSingleValueAttribute_SingleValuedAttribute(), ecorePackage.getEString(), "singleValuedAttribute", null, 0, 1, NodeSingleValueAttribute.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
-
- initEClass(nodeMultiValuedAttributeEClass, NodeMultiValuedAttribute.class, "NodeMultiValuedAttribute", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
- initEAttribute(getNodeMultiValuedAttribute_MultiValuedAttribute(), ecorePackage.getEString(), "multiValuedAttribute", null, 0, -1, NodeMultiValuedAttribute.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
-
- initEClass(nodeSingleValueReferenceEClass, NodeSingleValueReference.class, "NodeSingleValueReference", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
- initEReference(getNodeSingleValueReference_SingleValuedReference(), this.getNode(), null, "singleValuedReference", null, 0, 1, NodeSingleValueReference.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
-
- initEClass(nodeMultiValueReferenceEClass, NodeMultiValueReference.class, "NodeMultiValueReference", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
- initEReference(getNodeMultiValueReference_MultiValuedReference(), this.getNode(), null, "multiValuedReference", null, 0, -1, NodeMultiValueReference.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+ initEAttribute(
+ getNode_Name(),
+ ecorePackage.getEString(),
+ "name", null, 0, 1, Node.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+ initEReference(
+ getNode_ContainmentRef1(),
+ this.getNode(),
+ null,
+ "containmentRef1", null, 0, -1, Node.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+ initEClass(nodeMultipleContainmentEClass, NodeMultipleContainment.class,
+ "NodeMultipleContainment", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+ initEReference(
+ getNodeMultipleContainment_ContainmentRef2(),
+ this.getNode(),
+ null,
+ "containmentRef2", null, 0, -1, NodeMultipleContainment.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+ initEReference(
+ getNodeMultipleContainment_ContainmentRef3(),
+ this.getNode(),
+ null,
+ "containmentRef3", null, 0, -1, NodeMultipleContainment.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+ initEClass(nodeSingleValueContainmentEClass, NodeSingleValueContainment.class,
+ "NodeSingleValueContainment", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+ initEReference(
+ getNodeSingleValueContainment_SingleValueContainment(),
+ this.getNode(),
+ null,
+ "singleValueContainment", null, 0, 1, NodeSingleValueContainment.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+ initEClass(nodeSingleValueAttributeEClass, NodeSingleValueAttribute.class,
+ "NodeSingleValueAttribute", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+ initEAttribute(
+ getNodeSingleValueAttribute_SingleValuedAttribute(),
+ ecorePackage.getEString(),
+ "singleValuedAttribute", null, 0, 1, NodeSingleValueAttribute.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+ initEClass(nodeMultiValuedAttributeEClass, NodeMultiValuedAttribute.class,
+ "NodeMultiValuedAttribute", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+ initEAttribute(
+ getNodeMultiValuedAttribute_MultiValuedAttribute(),
+ ecorePackage.getEString(),
+ "multiValuedAttribute", null, 0, -1, NodeMultiValuedAttribute.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+ initEClass(nodeSingleValueReferenceEClass, NodeSingleValueReference.class,
+ "NodeSingleValueReference", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+ initEReference(
+ getNodeSingleValueReference_SingleValuedReference(),
+ this.getNode(),
+ null,
+ "singleValuedReference", null, 0, 1, NodeSingleValueReference.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+ initEClass(nodeMultiValueReferenceEClass, NodeMultiValueReference.class,
+ "NodeMultiValueReference", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+ initEReference(
+ getNodeMultiValueReference_MultiValuedReference(),
+ this.getNode(),
+ null,
+ "multiValuedReference", null, 0, -1, NodeMultiValueReference.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+ initEClass(nodeOppositeRefOneToOneEClass, NodeOppositeRefOneToOne.class,
+ "NodeOppositeRefOneToOne", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+ initEReference(
+ getNodeOppositeRefOneToOne_Source(),
+ this.getNodeOppositeRefOneToOne(),
+ this.getNodeOppositeRefOneToOne_Destination(),
+ "source", null, 0, 1, NodeOppositeRefOneToOne.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+ initEReference(
+ getNodeOppositeRefOneToOne_Destination(),
+ this.getNodeOppositeRefOneToOne(),
+ this.getNodeOppositeRefOneToOne_Source(),
+ "destination", null, 0, 1, NodeOppositeRefOneToOne.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+ initEClass(nodeOppositeRefOneToManyEClass, NodeOppositeRefOneToMany.class,
+ "NodeOppositeRefOneToMany", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+ initEReference(
+ getNodeOppositeRefOneToMany_Source(),
+ this.getNodeOppositeRefOneToMany(),
+ this.getNodeOppositeRefOneToMany_Destination(),
+ "source", null, 0, 1, NodeOppositeRefOneToMany.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+ initEReference(
+ getNodeOppositeRefOneToMany_Destination(),
+ this.getNodeOppositeRefOneToMany(),
+ this.getNodeOppositeRefOneToMany_Source(),
+ "destination", null, 0, -1, NodeOppositeRefOneToMany.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+ initEClass(nodeOppositeRefManyToManyEClass, NodeOppositeRefManyToMany.class,
+ "NodeOppositeRefManyToMany", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+ initEReference(
+ getNodeOppositeRefManyToMany_Source(),
+ this.getNodeOppositeRefManyToMany(),
+ this.getNodeOppositeRefManyToMany_Destination(),
+ "source", null, 0, -1, NodeOppositeRefManyToMany.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+ initEReference(
+ getNodeOppositeRefManyToMany_Destination(),
+ this.getNodeOppositeRefManyToMany(),
+ this.getNodeOppositeRefManyToMany_Source(),
+ "destination", null, 0, -1, NodeOppositeRefManyToMany.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
// Create resource
createResource(eNS_URI);
}
-} //NodesPackageImpl
+} // NodesPackageImpl
diff --git a/plugins/org.eclipse.emf.compare.tests/src-gen/org/eclipse/emf/compare/tests/nodes/util/NodesAdapterFactory.java b/plugins/org.eclipse.emf.compare.tests/src-gen/org/eclipse/emf/compare/tests/nodes/util/NodesAdapterFactory.java
index 95b7cbf41..f9f233092 100644
--- a/plugins/org.eclipse.emf.compare.tests/src-gen/org/eclipse/emf/compare/tests/nodes/util/NodesAdapterFactory.java
+++ b/plugins/org.eclipse.emf.compare.tests/src-gen/org/eclipse/emf/compare/tests/nodes/util/NodesAdapterFactory.java
@@ -111,6 +111,18 @@ public class NodesAdapterFactory extends AdapterFactoryImpl {
return createNodeMultiValueReferenceAdapter();
}
@Override
+ public Adapter caseNodeOppositeRefOneToOne(NodeOppositeRefOneToOne object) {
+ return createNodeOppositeRefOneToOneAdapter();
+ }
+ @Override
+ public Adapter caseNodeOppositeRefOneToMany(NodeOppositeRefOneToMany object) {
+ return createNodeOppositeRefOneToManyAdapter();
+ }
+ @Override
+ public Adapter caseNodeOppositeRefManyToMany(NodeOppositeRefManyToMany object) {
+ return createNodeOppositeRefManyToManyAdapter();
+ }
+ @Override
public Adapter defaultCase(EObject object) {
return createEObjectAdapter();
}
@@ -229,6 +241,48 @@ public class NodesAdapterFactory extends AdapterFactoryImpl {
}
/**
+ * Creates a new adapter for an object of class '{@link org.eclipse.emf.compare.tests.nodes.NodeOppositeRefOneToOne <em>Node Opposite Ref One To One</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 org.eclipse.emf.compare.tests.nodes.NodeOppositeRefOneToOne
+ * @generated
+ */
+ public Adapter createNodeOppositeRefOneToOneAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.emf.compare.tests.nodes.NodeOppositeRefOneToMany <em>Node Opposite Ref One To Many</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 org.eclipse.emf.compare.tests.nodes.NodeOppositeRefOneToMany
+ * @generated
+ */
+ public Adapter createNodeOppositeRefOneToManyAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.emf.compare.tests.nodes.NodeOppositeRefManyToMany <em>Node Opposite Ref Many To Many</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 org.eclipse.emf.compare.tests.nodes.NodeOppositeRefManyToMany
+ * @generated
+ */
+ public Adapter createNodeOppositeRefManyToManyAdapter() {
+ return null;
+ }
+
+ /**
* Creates a new adapter for the default case.
* <!-- begin-user-doc -->
* This default implementation returns null.
diff --git a/plugins/org.eclipse.emf.compare.tests/src-gen/org/eclipse/emf/compare/tests/nodes/util/NodesSwitch.java b/plugins/org.eclipse.emf.compare.tests/src-gen/org/eclipse/emf/compare/tests/nodes/util/NodesSwitch.java
index bdaeb35fb..88cae7b68 100644
--- a/plugins/org.eclipse.emf.compare.tests/src-gen/org/eclipse/emf/compare/tests/nodes/util/NodesSwitch.java
+++ b/plugins/org.eclipse.emf.compare.tests/src-gen/org/eclipse/emf/compare/tests/nodes/util/NodesSwitch.java
@@ -148,6 +148,27 @@ public class NodesSwitch<T> {
if (result == null) result = defaultCase(theEObject);
return result;
}
+ case NodesPackage.NODE_OPPOSITE_REF_ONE_TO_ONE: {
+ NodeOppositeRefOneToOne nodeOppositeRefOneToOne = (NodeOppositeRefOneToOne)theEObject;
+ T result = caseNodeOppositeRefOneToOne(nodeOppositeRefOneToOne);
+ if (result == null) result = caseNode(nodeOppositeRefOneToOne);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case NodesPackage.NODE_OPPOSITE_REF_ONE_TO_MANY: {
+ NodeOppositeRefOneToMany nodeOppositeRefOneToMany = (NodeOppositeRefOneToMany)theEObject;
+ T result = caseNodeOppositeRefOneToMany(nodeOppositeRefOneToMany);
+ if (result == null) result = caseNode(nodeOppositeRefOneToMany);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case NodesPackage.NODE_OPPOSITE_REF_MANY_TO_MANY: {
+ NodeOppositeRefManyToMany nodeOppositeRefManyToMany = (NodeOppositeRefManyToMany)theEObject;
+ T result = caseNodeOppositeRefManyToMany(nodeOppositeRefManyToMany);
+ if (result == null) result = caseNode(nodeOppositeRefManyToMany);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
default: return defaultCase(theEObject);
}
}
@@ -258,6 +279,51 @@ public class NodesSwitch<T> {
}
/**
+ * Returns the result of interpreting the object as an instance of '<em>Node Opposite Ref One To One</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>Node Opposite Ref One To One</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseNodeOppositeRefOneToOne(NodeOppositeRefOneToOne object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>Node Opposite Ref One To Many</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>Node Opposite Ref One To Many</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseNodeOppositeRefOneToMany(NodeOppositeRefOneToMany object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>Node Opposite Ref Many To Many</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>Node Opposite Ref Many To Many</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseNodeOppositeRefManyToMany(NodeOppositeRefManyToMany object) {
+ return null;
+ }
+
+ /**
* Returns the result of interpreting the object as an instance of '<em>EObject</em>'.
* <!-- begin-user-doc -->
* This implementation returns null;
diff --git a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/EquiComputingTest.java b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/EquiComputingTest.java
index a3dac6a28..6dd899279 100644
--- a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/EquiComputingTest.java
+++ b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/EquiComputingTest.java
@@ -4,6 +4,7 @@ import static junit.framework.Assert.assertNotNull;
import static junit.framework.Assert.assertSame;
import static org.eclipse.emf.compare.utils.EMFComparePredicates.addedToReference;
import static org.eclipse.emf.compare.utils.EMFComparePredicates.changedReference;
+import static org.eclipse.emf.compare.utils.EMFComparePredicates.removedFromReference;
import static org.junit.Assert.assertTrue;
import com.google.common.base.Predicate;
@@ -21,32 +22,392 @@ import org.junit.Test;
public class EquiComputingTest {
+ enum TestKind {
+ LEFT, RIGHT;
+ }
+
private EquiInputData input = new EquiInputData();
@Test
public void testA1UseCase() throws IOException {
final Resource left = input.getA1Left();
final Resource right = input.getA1Right();
-
final Comparison comparison = EMFCompare.compare(left, right);
+ testA1(TestKind.LEFT, comparison);
+ }
+ private static void testA1(final TestKind kind, final Comparison comparison) {
List<Diff> differences = comparison.getDifferences();
// We should have no less and no more than 6 differences
assertSame(Integer.valueOf(6), Integer.valueOf(differences.size()));
- Predicate<? super Diff> changeRefA2BDiffDescription = changedReference("Requirements.A",
- "destination", null, "Requirements.B");
- Predicate<? super Diff> changeRefB2ADiffDescription = changedReference("Requirements.B", "source",
- null, "Requirements.A");
- Predicate<? super Diff> changeRefC2DDiffDescription = addedToReference("Requirements.C",
- "destination", "Requirements.D");
- Predicate<? super Diff> changeRefD2CDiffDescription = changedReference("Requirements.D", "source",
- null, "Requirements.C");
- Predicate<? super Diff> changeRefE2FDiffDescription = addedToReference("Requirements.E",
- "destination", "Requirements.F");
- Predicate<? super Diff> changeRefF2EDiffDescription = addedToReference("Requirements.F", "source",
- "Requirements.E");
+ Predicate<? super Diff> changeRefA2BDiffDescription = null;
+ Predicate<? super Diff> changeRefB2ADiffDescription = null;
+ Predicate<? super Diff> changeRefC2DDiffDescription = null;
+ Predicate<? super Diff> changeRefD2CDiffDescription = null;
+ Predicate<? super Diff> changeRefE2FDiffDescription = null;
+ Predicate<? super Diff> changeRefF2EDiffDescription = null;
+ if (kind.equals(TestKind.LEFT)) {
+ changeRefA2BDiffDescription = changedReference("Requirements.A", "destination", null,
+ "Requirements.B");
+ changeRefB2ADiffDescription = changedReference("Requirements.B", "source", null, "Requirements.A");
+ changeRefC2DDiffDescription = addedToReference("Requirements.C", "destination", "Requirements.D");
+ changeRefD2CDiffDescription = changedReference("Requirements.D", "source", null, "Requirements.C");
+ changeRefE2FDiffDescription = addedToReference("Requirements.E", "destination", "Requirements.F");
+ changeRefF2EDiffDescription = addedToReference("Requirements.F", "source", "Requirements.E");
+ } else {
+ changeRefA2BDiffDescription = changedReference("Requirements.A", "destination", "Requirements.B",
+ null);
+ changeRefB2ADiffDescription = changedReference("Requirements.B", "source", "Requirements.A", null);
+ changeRefC2DDiffDescription = removedFromReference("Requirements.C", "destination",
+ "Requirements.D");
+ changeRefD2CDiffDescription = changedReference("Requirements.D", "source", "Requirements.C", null);
+ changeRefE2FDiffDescription = removedFromReference("Requirements.E", "destination",
+ "Requirements.F");
+ changeRefF2EDiffDescription = removedFromReference("Requirements.F", "source", "Requirements.E");
+ }
+
+ final Diff changeRefA2BDiff = Iterators.find(differences.iterator(), changeRefA2BDiffDescription);
+ final Diff changeRefB2ADiff = Iterators.find(differences.iterator(), changeRefB2ADiffDescription);
+ final Diff changeRefC2DDiff = Iterators.find(differences.iterator(), changeRefC2DDiffDescription);
+ final Diff changeRefD2CDiff = Iterators.find(differences.iterator(), changeRefD2CDiffDescription);
+ final Diff changeRefE2FDiff = Iterators.find(differences.iterator(), changeRefE2FDiffDescription);
+ final Diff changeRefF2EDiff = Iterators.find(differences.iterator(), changeRefF2EDiffDescription);
+
+ assertNotNull(changeRefA2BDiff);
+ assertNotNull(changeRefB2ADiff);
+ assertNotNull(changeRefC2DDiff);
+ assertNotNull(changeRefD2CDiff);
+ assertNotNull(changeRefE2FDiff);
+ assertNotNull(changeRefF2EDiff);
+
+ // CHECK EQUIVALENCE
+ assertSame(Integer.valueOf(3), comparison.getEquivalences().size());
+
+ assertNotNull(changeRefA2BDiff.getEquivalence());
+ assertSame(Integer.valueOf(2), changeRefA2BDiff.getEquivalence().getDifferences().size());
+ assertTrue(changeRefA2BDiff.getEquivalence().getDifferences().contains(changeRefA2BDiff));
+ assertTrue(changeRefA2BDiff.getEquivalence().getDifferences().contains(changeRefB2ADiff));
+
+ assertNotNull(changeRefC2DDiff.getEquivalence());
+ assertSame(Integer.valueOf(2), changeRefC2DDiff.getEquivalence().getDifferences().size());
+ assertTrue(changeRefC2DDiff.getEquivalence().getDifferences().contains(changeRefC2DDiff));
+ assertTrue(changeRefC2DDiff.getEquivalence().getDifferences().contains(changeRefD2CDiff));
+
+ assertNotNull(changeRefE2FDiff.getEquivalence());
+ assertSame(Integer.valueOf(2), changeRefE2FDiff.getEquivalence().getDifferences().size());
+ assertTrue(changeRefE2FDiff.getEquivalence().getDifferences().contains(changeRefE2FDiff));
+ assertTrue(changeRefE2FDiff.getEquivalence().getDifferences().contains(changeRefF2EDiff));
+ }
+
+ @Test
+ public void testA2UseCase() throws IOException {
+ final Resource left = input.getA2Left();
+ final Resource right = input.getA2Right();
+
+ final Comparison comparison = EMFCompare.compare(left, right);
+
+ testA2(TestKind.LEFT, comparison);
+
+ }
+
+ private static void testA2(final TestKind kind, final Comparison comparison) {
+ List<Diff> differences = comparison.getDifferences();
+
+ // We should have no less and no more than 8 differences
+ assertSame(Integer.valueOf(8), Integer.valueOf(differences.size()));
+
+ Predicate<? super Diff> changeRefC2D1DiffDescription = null;
+ Predicate<? super Diff> changeRefC2D2DiffDescription = null;
+ Predicate<? super Diff> changeRefD12CDiffDescription = null;
+ Predicate<? super Diff> changeRefD22CDiffDescription = null;
+ Predicate<? super Diff> changeRefE2F1DiffDescription = null;
+ Predicate<? super Diff> changeRefE2F2DiffDescription = null;
+ Predicate<? super Diff> changeRefF12EDiffDescription = null;
+ Predicate<? super Diff> changeRefF22EDiffDescription = null;
+
+ if (kind.equals(TestKind.LEFT)) {
+ changeRefC2D1DiffDescription = addedToReference("Requirements.C", "destination",
+ "Requirements.D1");
+ changeRefC2D2DiffDescription = addedToReference("Requirements.C", "destination",
+ "Requirements.D2");
+ changeRefD12CDiffDescription = changedReference("Requirements.D1", "source", null,
+ "Requirements.C");
+ changeRefD22CDiffDescription = changedReference("Requirements.D2", "source", null,
+ "Requirements.C");
+ changeRefE2F1DiffDescription = addedToReference("Requirements.E", "destination",
+ "Requirements.F1");
+ changeRefE2F2DiffDescription = addedToReference("Requirements.E", "destination",
+ "Requirements.F2");
+ changeRefF12EDiffDescription = addedToReference("Requirements.F1", "source", "Requirements.E");
+ changeRefF22EDiffDescription = addedToReference("Requirements.F2", "source", "Requirements.E");
+ } else {
+ changeRefC2D1DiffDescription = removedFromReference("Requirements.C", "destination",
+ "Requirements.D1");
+ changeRefC2D2DiffDescription = removedFromReference("Requirements.C", "destination",
+ "Requirements.D2");
+ changeRefD12CDiffDescription = changedReference("Requirements.D1", "source", "Requirements.C",
+ null);
+ changeRefD22CDiffDescription = changedReference("Requirements.D2", "source", "Requirements.C",
+ null);
+ changeRefE2F1DiffDescription = removedFromReference("Requirements.E", "destination",
+ "Requirements.F1");
+ changeRefE2F2DiffDescription = removedFromReference("Requirements.E", "destination",
+ "Requirements.F2");
+ changeRefF12EDiffDescription = removedFromReference("Requirements.F1", "source", "Requirements.E");
+ changeRefF22EDiffDescription = removedFromReference("Requirements.F2", "source", "Requirements.E");
+ }
+
+ final Diff changeRefC2D1Diff = Iterators.find(differences.iterator(), changeRefC2D1DiffDescription);
+ final Diff changeRefC2D2Diff = Iterators.find(differences.iterator(), changeRefC2D2DiffDescription);
+ final Diff changeRefD12CDiff = Iterators.find(differences.iterator(), changeRefD12CDiffDescription);
+ final Diff changeRefD22CDiff = Iterators.find(differences.iterator(), changeRefD22CDiffDescription);
+ final Diff changeRefE2F1Diff = Iterators.find(differences.iterator(), changeRefE2F1DiffDescription);
+ final Diff changeRefE2F2Diff = Iterators.find(differences.iterator(), changeRefE2F2DiffDescription);
+ final Diff changeRefF12EDiff = Iterators.find(differences.iterator(), changeRefF12EDiffDescription);
+ final Diff changeRefF22EDiff = Iterators.find(differences.iterator(), changeRefF22EDiffDescription);
+
+ assertNotNull(changeRefC2D1Diff);
+ assertNotNull(changeRefC2D2Diff);
+ assertNotNull(changeRefD12CDiff);
+ assertNotNull(changeRefD22CDiff);
+ assertNotNull(changeRefE2F1Diff);
+ assertNotNull(changeRefE2F2Diff);
+ assertNotNull(changeRefF12EDiff);
+ assertNotNull(changeRefF22EDiff);
+
+ // CHECK EQUIVALENCE
+ assertSame(Integer.valueOf(4), comparison.getEquivalences().size());
+
+ assertNotNull(changeRefC2D1Diff.getEquivalence());
+ assertSame(Integer.valueOf(2), changeRefC2D1Diff.getEquivalence().getDifferences().size());
+ assertTrue(changeRefC2D1Diff.getEquivalence().getDifferences().contains(changeRefC2D1Diff));
+ assertTrue(changeRefC2D1Diff.getEquivalence().getDifferences().contains(changeRefD12CDiff));
+
+ assertNotNull(changeRefC2D2Diff.getEquivalence());
+ assertSame(Integer.valueOf(2), changeRefC2D2Diff.getEquivalence().getDifferences().size());
+ assertTrue(changeRefC2D2Diff.getEquivalence().getDifferences().contains(changeRefC2D2Diff));
+ assertTrue(changeRefC2D2Diff.getEquivalence().getDifferences().contains(changeRefD22CDiff));
+
+ assertNotNull(changeRefE2F1Diff.getEquivalence());
+ assertSame(Integer.valueOf(2), changeRefE2F1Diff.getEquivalence().getDifferences().size());
+ assertTrue(changeRefE2F1Diff.getEquivalence().getDifferences().contains(changeRefE2F1Diff));
+ assertTrue(changeRefE2F1Diff.getEquivalence().getDifferences().contains(changeRefF12EDiff));
+
+ assertNotNull(changeRefE2F2Diff.getEquivalence());
+ assertSame(Integer.valueOf(2), changeRefE2F2Diff.getEquivalence().getDifferences().size());
+ assertTrue(changeRefE2F2Diff.getEquivalence().getDifferences().contains(changeRefE2F2Diff));
+ assertTrue(changeRefE2F2Diff.getEquivalence().getDifferences().contains(changeRefF22EDiff));
+ }
+
+ @Test
+ public void testA3UseCase() throws IOException {
+ final Resource left = input.getA3Left();
+ final Resource right = input.getA3Right();
+
+ final Comparison comparison = EMFCompare.compare(left, right);
+
+ testA3(TestKind.LEFT, comparison);
+
+ }
+
+ private static void testA3(final TestKind kind, final Comparison comparison) {
+ List<Diff> differences = comparison.getDifferences();
+
+ // We should have no less and no more than 8 differences
+ assertSame(Integer.valueOf(8), Integer.valueOf(differences.size()));
+
+ Predicate<? super Diff> C1toD1DiffDescription = null;
+ Predicate<? super Diff> C1toD2DiffDescription = null;
+ Predicate<? super Diff> C2toD1DiffDescription = null;
+ Predicate<? super Diff> C2toD2DiffDescription = null;
+ Predicate<? super Diff> D1toC1DiffDescription = null;
+ Predicate<? super Diff> D1toC2DiffDescription = null;
+ Predicate<? super Diff> D2toC2DiffDescription = null;
+ Predicate<? super Diff> D2toC1DiffDescription = null;
+
+ if (kind.equals(TestKind.LEFT)) {
+ C1toD1DiffDescription = addedToReference("Requirements.C1", "destination", "Requirements.D1");
+ C1toD2DiffDescription = addedToReference("Requirements.C1", "destination", "Requirements.D2");
+ C2toD1DiffDescription = addedToReference("Requirements.C2", "destination", "Requirements.D1");
+ C2toD2DiffDescription = addedToReference("Requirements.C2", "source", "Requirements.D2");
+ D1toC1DiffDescription = addedToReference("Requirements.D1", "source", "Requirements.C1");
+ D1toC2DiffDescription = addedToReference("Requirements.D1", "source", "Requirements.C2");
+ D2toC2DiffDescription = addedToReference("Requirements.D2", "destination", "Requirements.C2");
+ D2toC1DiffDescription = addedToReference("Requirements.D2", "source", "Requirements.C1");
+ } else {
+ C1toD1DiffDescription = removedFromReference("Requirements.C1", "destination", "Requirements.D1");
+ C1toD2DiffDescription = removedFromReference("Requirements.C1", "destination", "Requirements.D2");
+ C2toD1DiffDescription = removedFromReference("Requirements.C2", "destination", "Requirements.D1");
+ C2toD2DiffDescription = removedFromReference("Requirements.C2", "source", "Requirements.D2");
+ D1toC1DiffDescription = removedFromReference("Requirements.D1", "source", "Requirements.C1");
+ D1toC2DiffDescription = removedFromReference("Requirements.D1", "source", "Requirements.C2");
+ D2toC2DiffDescription = removedFromReference("Requirements.D2", "destination", "Requirements.C2");
+ D2toC1DiffDescription = removedFromReference("Requirements.D2", "source", "Requirements.C1");
+ }
+
+ final Diff C1toD1Diff = Iterators.find(differences.iterator(), C1toD1DiffDescription);
+ final Diff C1toD2Diff = Iterators.find(differences.iterator(), C1toD2DiffDescription);
+ final Diff C2toD1Diff = Iterators.find(differences.iterator(), C2toD1DiffDescription);
+ final Diff C2toD2Diff = Iterators.find(differences.iterator(), C2toD2DiffDescription);
+ final Diff D1toC1Diff = Iterators.find(differences.iterator(), D1toC1DiffDescription);
+ final Diff D1toC2Diff = Iterators.find(differences.iterator(), D1toC2DiffDescription);
+ final Diff D2toC2Diff = Iterators.find(differences.iterator(), D2toC2DiffDescription);
+ final Diff D2toC1Diff = Iterators.find(differences.iterator(), D2toC1DiffDescription);
+
+ assertNotNull(C1toD1Diff);
+ assertNotNull(C1toD2Diff);
+ assertNotNull(C2toD1Diff);
+ assertNotNull(C2toD2Diff);
+ assertNotNull(D1toC1Diff);
+ assertNotNull(D1toC2Diff);
+ assertNotNull(D2toC2Diff);
+ assertNotNull(D2toC1Diff);
+
+ // CHECK EQUIVALENCE
+ assertSame(Integer.valueOf(4), comparison.getEquivalences().size());
+
+ assertNotNull(C1toD1Diff.getEquivalence());
+ assertSame(Integer.valueOf(2), C1toD1Diff.getEquivalence().getDifferences().size());
+ assertTrue(C1toD1Diff.getEquivalence().getDifferences().contains(C1toD1Diff));
+ assertTrue(C1toD1Diff.getEquivalence().getDifferences().contains(D1toC1Diff));
+
+ assertNotNull(C1toD2Diff.getEquivalence());
+ assertSame(Integer.valueOf(2), C1toD2Diff.getEquivalence().getDifferences().size());
+ assertTrue(C1toD2Diff.getEquivalence().getDifferences().contains(C1toD2Diff));
+ assertTrue(C1toD2Diff.getEquivalence().getDifferences().contains(D2toC1Diff));
+
+ assertNotNull(C2toD1Diff.getEquivalence());
+ assertSame(Integer.valueOf(2), C2toD1Diff.getEquivalence().getDifferences().size());
+ assertTrue(C2toD1Diff.getEquivalence().getDifferences().contains(C2toD1Diff));
+ assertTrue(C2toD1Diff.getEquivalence().getDifferences().contains(D1toC2Diff));
+
+ assertNotNull(C2toD2Diff.getEquivalence());
+ assertSame(Integer.valueOf(2), C2toD2Diff.getEquivalence().getDifferences().size());
+ assertTrue(C2toD2Diff.getEquivalence().getDifferences().contains(C2toD2Diff));
+ assertTrue(C2toD2Diff.getEquivalence().getDifferences().contains(D2toC2Diff));
+ }
+
+ @Test
+ public void testA4UseCase() throws IOException {
+ final Resource left = input.getA4Left();
+ final Resource right = input.getA4Right();
+
+ final Comparison comparison = EMFCompare.compare(left, right);
+
+ testA4(TestKind.LEFT, comparison);
+ }
+
+ private static void testA4(final TestKind kind, final Comparison comparison) {
+ List<Diff> differences = comparison.getDifferences();
+
+ // We should have no less and no more than 8 differences
+ assertSame(Integer.valueOf(4), Integer.valueOf(differences.size()));
+
+ Predicate<? super Diff> AtoBdestDiffDescription = null;
+ Predicate<? super Diff> AtoBsourceDiffDescription = null;
+ Predicate<? super Diff> BtoAdestDiffDescription = null;
+ Predicate<? super Diff> BtoAsourceDiffDescription = null;
+
+ if (kind.equals(TestKind.LEFT)) {
+ AtoBdestDiffDescription = addedToReference("Requirements.A", "destination", "Requirements.B");
+ AtoBsourceDiffDescription = addedToReference("Requirements.A", "source", "Requirements.B");
+ BtoAdestDiffDescription = addedToReference("Requirements.B", "destination", "Requirements.A");
+ BtoAsourceDiffDescription = addedToReference("Requirements.B", "source", "Requirements.A");
+ } else {
+ AtoBdestDiffDescription = removedFromReference("Requirements.A", "destination", "Requirements.B");
+ AtoBsourceDiffDescription = removedFromReference("Requirements.A", "source", "Requirements.B");
+ BtoAdestDiffDescription = removedFromReference("Requirements.B", "destination", "Requirements.A");
+ BtoAsourceDiffDescription = removedFromReference("Requirements.B", "source", "Requirements.A");
+ }
+
+ final Diff AtoBdestDiff = Iterators.find(differences.iterator(), AtoBdestDiffDescription);
+ final Diff AtoBsourceDiff = Iterators.find(differences.iterator(), AtoBsourceDiffDescription);
+ final Diff BtoAdestDiff = Iterators.find(differences.iterator(), BtoAdestDiffDescription);
+ final Diff BtoAsourceDiff = Iterators.find(differences.iterator(), BtoAsourceDiffDescription);
+
+ assertNotNull(AtoBdestDiff);
+ assertNotNull(AtoBsourceDiff);
+ assertNotNull(BtoAdestDiff);
+ assertNotNull(BtoAsourceDiff);
+
+ // CHECK EQUIVALENCE
+ assertSame(Integer.valueOf(2), comparison.getEquivalences().size());
+
+ assertNotNull(AtoBdestDiff.getEquivalence());
+ assertSame(Integer.valueOf(2), AtoBdestDiff.getEquivalence().getDifferences().size());
+ assertTrue(AtoBdestDiff.getEquivalence().getDifferences().contains(AtoBdestDiff));
+ assertTrue(AtoBdestDiff.getEquivalence().getDifferences().contains(BtoAsourceDiff));
+
+ assertNotNull(AtoBsourceDiff.getEquivalence());
+ assertSame(Integer.valueOf(2), AtoBsourceDiff.getEquivalence().getDifferences().size());
+ assertTrue(AtoBsourceDiff.getEquivalence().getDifferences().contains(AtoBsourceDiff));
+ assertTrue(AtoBsourceDiff.getEquivalence().getDifferences().contains(BtoAdestDiff));
+ }
+
+ @Test
+ public void testA5UseCase() throws IOException {
+ final Resource left = input.getA5Left();
+ final Resource right = input.getA5Right();
+
+ final Comparison comparison = EMFCompare.compare(left, right);
+
+ testA5(TestKind.LEFT, comparison);
+ }
+
+ private void testA5(final TestKind kind, final Comparison comparison) {
+ List<Diff> differences = comparison.getDifferences();
+
+ // We should have no less and no more than 12 differences
+ assertSame(Integer.valueOf(12), Integer.valueOf(differences.size()));
+
+ Predicate<? super Diff> changeRefA2BDiffDescription = null;
+ Predicate<? super Diff> changeRefB2ADiffDescription = null;
+ Predicate<? super Diff> changeRefC2DDiffDescription = null;
+ Predicate<? super Diff> changeRefD2CDiffDescription = null;
+ Predicate<? super Diff> changeRefE2FDiffDescription = null;
+ Predicate<? super Diff> changeRefF2EDiffDescription = null;
+ Predicate<? super Diff> addADiffDescription = null;
+ Predicate<? super Diff> addBDiffDescription = null;
+ Predicate<? super Diff> addCDiffDescription = null;
+ Predicate<? super Diff> addDDiffDescription = null;
+ Predicate<? super Diff> addEDiffDescription = null;
+ Predicate<? super Diff> addFDiffDescription = null;
+
+ if (kind.equals(TestKind.LEFT)) {
+ changeRefA2BDiffDescription = changedReference("Requirements.A", "destination", null,
+ "Requirements.B");
+ changeRefB2ADiffDescription = changedReference("Requirements.B", "source", null, "Requirements.A");
+ changeRefC2DDiffDescription = addedToReference("Requirements.C", "destination", "Requirements.D");
+ changeRefD2CDiffDescription = changedReference("Requirements.D", "source", null, "Requirements.C");
+ changeRefE2FDiffDescription = addedToReference("Requirements.E", "destination", "Requirements.F");
+ changeRefF2EDiffDescription = addedToReference("Requirements.F", "source", "Requirements.E");
+
+ addADiffDescription = addedToReference("Requirements", "containmentRef1", "Requirements.A");
+ addBDiffDescription = addedToReference("Requirements", "containmentRef1", "Requirements.B");
+ addCDiffDescription = addedToReference("Requirements", "containmentRef1", "Requirements.C");
+ addDDiffDescription = addedToReference("Requirements", "containmentRef1", "Requirements.D");
+ addEDiffDescription = addedToReference("Requirements", "containmentRef1", "Requirements.E");
+ addFDiffDescription = addedToReference("Requirements", "containmentRef1", "Requirements.F");
+ } else {
+ changeRefA2BDiffDescription = changedReference("Requirements.A", "destination", "Requirements.B",
+ null);
+ changeRefB2ADiffDescription = changedReference("Requirements.B", "source", "Requirements.A", null);
+ changeRefC2DDiffDescription = removedFromReference("Requirements.C", "destination",
+ "Requirements.D");
+ changeRefD2CDiffDescription = changedReference("Requirements.D", "source", "Requirements.C", null);
+ changeRefE2FDiffDescription = removedFromReference("Requirements.E", "destination",
+ "Requirements.F");
+ changeRefF2EDiffDescription = removedFromReference("Requirements.F", "source", "Requirements.E");
+
+ addADiffDescription = removedFromReference("Requirements", "containmentRef1", "Requirements.A");
+ addBDiffDescription = removedFromReference("Requirements", "containmentRef1", "Requirements.B");
+ addCDiffDescription = removedFromReference("Requirements", "containmentRef1", "Requirements.C");
+ addDDiffDescription = removedFromReference("Requirements", "containmentRef1", "Requirements.D");
+ addEDiffDescription = removedFromReference("Requirements", "containmentRef1", "Requirements.E");
+ addFDiffDescription = removedFromReference("Requirements", "containmentRef1", "Requirements.F");
+ }
final Diff changeRefA2BDiff = Iterators.find(differences.iterator(), changeRefA2BDiffDescription);
final Diff changeRefB2ADiff = Iterators.find(differences.iterator(), changeRefB2ADiffDescription);
@@ -55,6 +416,13 @@ public class EquiComputingTest {
final Diff changeRefE2FDiff = Iterators.find(differences.iterator(), changeRefE2FDiffDescription);
final Diff changeRefF2EDiff = Iterators.find(differences.iterator(), changeRefF2EDiffDescription);
+ final Diff addADiff = Iterators.find(differences.iterator(), addADiffDescription);
+ final Diff addBDiff = Iterators.find(differences.iterator(), addBDiffDescription);
+ final Diff addCDiff = Iterators.find(differences.iterator(), addCDiffDescription);
+ final Diff addDDiff = Iterators.find(differences.iterator(), addDDiffDescription);
+ final Diff addEDiff = Iterators.find(differences.iterator(), addEDiffDescription);
+ final Diff addFDiff = Iterators.find(differences.iterator(), addFDiffDescription);
+
assertNotNull(changeRefA2BDiff);
assertNotNull(changeRefB2ADiff);
assertNotNull(changeRefC2DDiff);
@@ -62,7 +430,16 @@ public class EquiComputingTest {
assertNotNull(changeRefE2FDiff);
assertNotNull(changeRefF2EDiff);
+ assertNotNull(addADiff);
+ assertNotNull(addBDiff);
+ assertNotNull(addCDiff);
+ assertNotNull(addDDiff);
+ assertNotNull(addEDiff);
+ assertNotNull(addFDiff);
+
// CHECK EQUIVALENCE
+ assertSame(Integer.valueOf(3), comparison.getEquivalences().size());
+
assertNotNull(changeRefA2BDiff.getEquivalence());
assertSame(Integer.valueOf(2), changeRefA2BDiff.getEquivalence().getDifferences().size());
assertTrue(changeRefA2BDiff.getEquivalence().getDifferences().contains(changeRefA2BDiff));
@@ -77,7 +454,638 @@ public class EquiComputingTest {
assertSame(Integer.valueOf(2), changeRefE2FDiff.getEquivalence().getDifferences().size());
assertTrue(changeRefE2FDiff.getEquivalence().getDifferences().contains(changeRefE2FDiff));
assertTrue(changeRefE2FDiff.getEquivalence().getDifferences().contains(changeRefF2EDiff));
+ }
+
+ @Test
+ public void testB1UseCase() throws IOException {
+ final Resource left = input.getA1Left();
+ final Resource right = input.getA1Right();
+
+ final Comparison comparison = EMFCompare.compare(right, left);
+
+ testA1(TestKind.RIGHT, comparison);
+ }
+
+ @Test
+ public void testB2UseCase() throws IOException {
+ final Resource left = input.getA2Left();
+ final Resource right = input.getA2Right();
+
+ final Comparison comparison = EMFCompare.compare(right, left);
+
+ testA2(TestKind.RIGHT, comparison);
+ }
+
+ @Test
+ public void testB3UseCase() throws IOException {
+ final Resource left = input.getA3Left();
+ final Resource right = input.getA3Right();
+
+ final Comparison comparison = EMFCompare.compare(right, left);
+
+ testA3(TestKind.RIGHT, comparison);
+ }
+
+ @Test
+ public void testB4UseCase() throws IOException {
+ final Resource left = input.getA4Left();
+ final Resource right = input.getA4Right();
+
+ final Comparison comparison = EMFCompare.compare(right, left);
+
+ testA4(TestKind.RIGHT, comparison);
+ }
+
+ @Test
+ public void testB5UseCase() throws IOException {
+ final Resource left = input.getA5Left();
+ final Resource right = input.getA5Right();
+
+ final Comparison comparison = EMFCompare.compare(right, left);
+
+ testA5(TestKind.RIGHT, comparison);
+ }
+
+ @Test
+ public void testC1UseCase() throws IOException {
+ final Resource left = input.getC1Left();
+ final Resource right = input.getC1Right();
+
+ final Comparison comparison = EMFCompare.compare(left, right);
+
+ testC1(TestKind.LEFT, comparison);
+ }
+
+ private static void testC1(final TestKind kind, final Comparison comparison) {
+ List<Diff> differences = comparison.getDifferences();
+
+ // We should have no less and no more than 3 differences
+ assertSame(Integer.valueOf(3), Integer.valueOf(differences.size()));
+
+ Predicate<? super Diff> changeRefA2BDiffDescription = null;
+ Predicate<? super Diff> changeRefB2ADiffDescription = null;
+ Predicate<? super Diff> changeRefC2ADiffDescription = null;
+ if (kind.equals(TestKind.LEFT)) {
+ changeRefA2BDiffDescription = changedReference("Requirements.A", "destination", "Requirements.B",
+ "Requirements.C");
+ changeRefB2ADiffDescription = changedReference("Requirements.B", "source", "Requirements.A", null);
+ changeRefC2ADiffDescription = changedReference("Requirements.C", "source", null, "Requirements.A");
+ } else {
+ changeRefA2BDiffDescription = changedReference("Requirements.A", "destination", "Requirements.C",
+ "Requirements.B");
+ changeRefB2ADiffDescription = changedReference("Requirements.B", "source", null, "Requirements.A");
+ changeRefC2ADiffDescription = changedReference("Requirements.C", "source", "Requirements.A", null);
+ }
+
+ final Diff changeRefA2BDiff = Iterators.find(differences.iterator(), changeRefA2BDiffDescription);
+ final Diff changeRefB2ADiff = Iterators.find(differences.iterator(), changeRefB2ADiffDescription);
+ final Diff changeRefC2ADiff = Iterators.find(differences.iterator(), changeRefC2ADiffDescription);
+
+ assertNotNull(changeRefA2BDiff);
+ assertNotNull(changeRefB2ADiff);
+ assertNotNull(changeRefC2ADiff);
+
+ // CHECK EQUIVALENCE
+ assertSame(Integer.valueOf(1), comparison.getEquivalences().size());
+
+ assertNotNull(changeRefA2BDiff.getEquivalence());
+ assertSame(Integer.valueOf(3), changeRefA2BDiff.getEquivalence().getDifferences().size());
+ assertTrue(changeRefA2BDiff.getEquivalence().getDifferences().contains(changeRefA2BDiff));
+ assertTrue(changeRefA2BDiff.getEquivalence().getDifferences().contains(changeRefB2ADiff));
+ assertTrue(changeRefA2BDiff.getEquivalence().getDifferences().contains(changeRefC2ADiff));
+
+ }
+
+ @Test
+ public void testC2UseCase() throws IOException {
+ final Resource left = input.getC2Left();
+ final Resource right = input.getC2Right();
+
+ final Comparison comparison = EMFCompare.compare(left, right);
+
+ testC2(TestKind.LEFT, comparison);
+ }
+
+ private static void testC2(final TestKind kind, final Comparison comparison) {
+ List<Diff> differences = comparison.getDifferences();
+
+ // We should have no less and no more than 4 differences
+ assertSame(Integer.valueOf(4), Integer.valueOf(differences.size()));
+
+ Predicate<? super Diff> changeRefA2BDiffDescription = null;
+ Predicate<? super Diff> changeRefB2ADiffDescription = null;
+ Predicate<? super Diff> changeRefC2ADiffDescription = null;
+ Predicate<? super Diff> addCDiffDescription = null;
+ if (kind.equals(TestKind.LEFT)) {
+ changeRefA2BDiffDescription = changedReference("Requirements.A", "destination", "Requirements.B",
+ "Requirements.C");
+ changeRefB2ADiffDescription = changedReference("Requirements.B", "source", "Requirements.A", null);
+ changeRefC2ADiffDescription = changedReference("Requirements.C", "source", null, "Requirements.A");
+ addCDiffDescription = addedToReference("Requirements", "containmentRef1", "Requirements.C");
+ } else {
+ changeRefA2BDiffDescription = changedReference("Requirements.A", "destination", "Requirements.C",
+ "Requirements.B");
+ changeRefB2ADiffDescription = changedReference("Requirements.B", "source", null, "Requirements.A");
+ changeRefC2ADiffDescription = changedReference("Requirements.C", "source", "Requirements.A", null);
+ addCDiffDescription = removedFromReference("Requirements", "containmentRef1", "Requirements.C");
+ }
+
+ final Diff changeRefA2BDiff = Iterators.find(differences.iterator(), changeRefA2BDiffDescription);
+ final Diff changeRefB2ADiff = Iterators.find(differences.iterator(), changeRefB2ADiffDescription);
+ final Diff changeRefC2ADiff = Iterators.find(differences.iterator(), changeRefC2ADiffDescription);
+ final Diff addCDiff = Iterators.find(differences.iterator(), addCDiffDescription);
+
+ assertNotNull(changeRefA2BDiff);
+ assertNotNull(changeRefB2ADiff);
+ assertNotNull(changeRefC2ADiff);
+ assertNotNull(addCDiff);
+
+ // CHECK EQUIVALENCE
+ assertSame(Integer.valueOf(1), comparison.getEquivalences().size());
+
+ assertNotNull(changeRefA2BDiff.getEquivalence());
+ assertSame(Integer.valueOf(3), changeRefA2BDiff.getEquivalence().getDifferences().size());
+ assertTrue(changeRefA2BDiff.getEquivalence().getDifferences().contains(changeRefA2BDiff));
+ assertTrue(changeRefA2BDiff.getEquivalence().getDifferences().contains(changeRefB2ADiff));
+ assertTrue(changeRefA2BDiff.getEquivalence().getDifferences().contains(changeRefC2ADiff));
+
+ }
+
+ @Test
+ public void testC3UseCase() throws IOException {
+ final Resource left = input.getC3Left();
+ final Resource right = input.getC3Right();
+
+ final Comparison comparison = EMFCompare.compare(left, right);
+
+ testC3(TestKind.LEFT, comparison);
+ }
+
+ private static void testC3(final TestKind kind, final Comparison comparison) {
+ List<Diff> differences = comparison.getDifferences();
+
+ // We should have no less and no more than 4 differences
+ assertSame(Integer.valueOf(4), Integer.valueOf(differences.size()));
+
+ Predicate<? super Diff> changeRefA2CDiffDescription = null;
+ Predicate<? super Diff> deleteBDiffDescription = null;
+ Predicate<? super Diff> changeRefC2ADiffDescription = null;
+ Predicate<? super Diff> changeRefB2ADiffDescription = null;
+ if (kind.equals(TestKind.LEFT)) {
+ changeRefA2CDiffDescription = changedReference("Requirements.A", "destination", "Requirements.B",
+ "Requirements.C");
+ changeRefC2ADiffDescription = changedReference("Requirements.C", "source", null, "Requirements.A");
+ deleteBDiffDescription = removedFromReference("Requirements", "containmentRef1", "Requirements.B");
+ changeRefB2ADiffDescription = changedReference("Requirements.B", "source", "Requirements.A", null);
+ } else {
+ changeRefA2CDiffDescription = changedReference("Requirements.A", "destination", "Requirements.C",
+ "Requirements.B");
+ changeRefC2ADiffDescription = changedReference("Requirements.C", "source", "Requirements.A", null);
+ deleteBDiffDescription = addedToReference("Requirements", "containmentRef1", "Requirements.B");
+ changeRefB2ADiffDescription = changedReference("Requirements.B", "source", null, "Requirements.A");
+ }
+
+ final Diff changeRefA2CDiff = Iterators.find(differences.iterator(), changeRefA2CDiffDescription);
+ final Diff changeRefC2ADiff = Iterators.find(differences.iterator(), changeRefC2ADiffDescription);
+ final Diff deleteBDiff = Iterators.find(differences.iterator(), deleteBDiffDescription);
+ final Diff changeRefB2ADiff = Iterators.find(differences.iterator(), changeRefB2ADiffDescription);
+
+ assertNotNull(changeRefA2CDiff);
+ assertNotNull(changeRefC2ADiff);
+ assertNotNull(deleteBDiff);
+ assertNotNull(changeRefB2ADiff);
+
+ // CHECK EQUIVALENCE
+ assertSame(Integer.valueOf(1), comparison.getEquivalences().size());
+
+ assertNotNull(changeRefA2CDiff.getEquivalence());
+ assertSame(Integer.valueOf(3), changeRefA2CDiff.getEquivalence().getDifferences().size());
+ assertTrue(changeRefA2CDiff.getEquivalence().getDifferences().contains(changeRefA2CDiff));
+ assertTrue(changeRefA2CDiff.getEquivalence().getDifferences().contains(changeRefC2ADiff));
+ assertTrue(changeRefA2CDiff.getEquivalence().getDifferences().contains(changeRefB2ADiff));
+
+ }
+
+ @Test
+ public void testC4UseCase() throws IOException {
+ final Resource left = input.getC4Left();
+ final Resource right = input.getC4Right();
+
+ final Comparison comparison = EMFCompare.compare(left, right);
+
+ testC4(TestKind.LEFT, comparison);
+ }
+
+ private static void testC4(final TestKind kind, final Comparison comparison) {
+ List<Diff> differences = comparison.getDifferences();
+
+ // We should have no less and no more than 5 differences
+ assertSame(Integer.valueOf(5), Integer.valueOf(differences.size()));
+
+ Predicate<? super Diff> changeRefA2CDiffDescription = null;
+ Predicate<? super Diff> deleteBDiffDescription = null;
+ Predicate<? super Diff> changeRefC2ADiffDescription = null;
+ Predicate<? super Diff> changeRefB2ADiffDescription = null;
+ Predicate<? super Diff> addCDiffDescription = null;
+ if (kind.equals(TestKind.LEFT)) {
+ changeRefA2CDiffDescription = changedReference("Requirements.A", "destination", "Requirements.B",
+ "Requirements.C");
+ changeRefC2ADiffDescription = changedReference("Requirements.C", "source", null, "Requirements.A");
+ deleteBDiffDescription = removedFromReference("Requirements", "containmentRef1", "Requirements.B");
+ changeRefB2ADiffDescription = changedReference("Requirements.B", "source", "Requirements.A", null);
+ addCDiffDescription = addedToReference("Requirements", "containmentRef1", "Requirements.C");
+ } else {
+ changeRefA2CDiffDescription = changedReference("Requirements.A", "destination", "Requirements.C",
+ "Requirements.B");
+ changeRefC2ADiffDescription = changedReference("Requirements.C", "source", "Requirements.A", null);
+ deleteBDiffDescription = addedToReference("Requirements", "containmentRef1", "Requirements.B");
+ changeRefB2ADiffDescription = changedReference("Requirements.B", "source", null, "Requirements.A");
+ addCDiffDescription = removedFromReference("Requirements", "containmentRef1", "Requirements.C");
+ }
+
+ final Diff changeRefA2CDiff = Iterators.find(differences.iterator(), changeRefA2CDiffDescription);
+ final Diff changeRefC2ADiff = Iterators.find(differences.iterator(), changeRefC2ADiffDescription);
+ final Diff deleteBDiff = Iterators.find(differences.iterator(), deleteBDiffDescription);
+ final Diff changeRefB2ADiff = Iterators.find(differences.iterator(), changeRefB2ADiffDescription);
+ final Diff addCDiff = Iterators.find(differences.iterator(), addCDiffDescription);
+
+ assertNotNull(changeRefA2CDiff);
+ assertNotNull(changeRefC2ADiff);
+ assertNotNull(deleteBDiff);
+ assertNotNull(changeRefB2ADiff);
+ assertNotNull(addCDiff);
+
+ // CHECK EQUIVALENCE
+ assertSame(Integer.valueOf(1), comparison.getEquivalences().size());
+
+ assertNotNull(changeRefA2CDiff.getEquivalence());
+ assertSame(Integer.valueOf(3), changeRefA2CDiff.getEquivalence().getDifferences().size());
+ assertTrue(changeRefA2CDiff.getEquivalence().getDifferences().contains(changeRefA2CDiff));
+ assertTrue(changeRefA2CDiff.getEquivalence().getDifferences().contains(changeRefC2ADiff));
+ assertTrue(changeRefA2CDiff.getEquivalence().getDifferences().contains(changeRefB2ADiff));
+
+ }
+
+ @Test
+ public void testD1UseCase() throws IOException {
+ final Resource left = input.getD1Left();
+ final Resource right = input.getD1Right();
+
+ final Comparison comparison = EMFCompare.compare(left, right);
+
+ testD1(TestKind.LEFT, comparison);
+ }
+
+ private static void testD1(final TestKind kind, final Comparison comparison) {
+ List<Diff> differences = comparison.getDifferences();
+
+ // We should have no less and no more than 16 differences
+ assertSame(Integer.valueOf(16), Integer.valueOf(differences.size()));
+
+ Predicate<? super Diff> delBonADiffDescription = null;
+ Predicate<? super Diff> delAonBDiffDescription = null;
+ Predicate<? super Diff> addDonADiffDescription = null;
+ Predicate<? super Diff> addEonADiffDescription = null;
+ Predicate<? super Diff> delFonBDiffDescription = null;
+ Predicate<? super Diff> addFonCDiffDescription = null;
+ Predicate<? super Diff> addAonDDiffDescription = null;
+ Predicate<? super Diff> delFonDDiffDescription = null;
+ Predicate<? super Diff> addAonEDiffDescription = null;
+ Predicate<? super Diff> addFonEDiffDescription = null;
+ Predicate<? super Diff> delDonFDiffDescription = null;
+ Predicate<? super Diff> delBonFDiffDescription = null;
+ Predicate<? super Diff> addEonFDiffDescription = null;
+ Predicate<? super Diff> addConFDiffDescription = null;
+ Predicate<? super Diff> delBDiffDescription = null;
+ Predicate<? super Diff> addEDiffDescription = null;
+ if (kind.equals(TestKind.LEFT)) {
+ delBonADiffDescription = removedFromReference("Requirements.A", "destination", "Requirements.B");
+ delAonBDiffDescription = removedFromReference("Requirements.B", "source", "Requirements.A");
+ addDonADiffDescription = addedToReference("Requirements.A", "destination", "Requirements.D");
+ addEonADiffDescription = addedToReference("Requirements.A", "destination", "Requirements.E");
+ delFonBDiffDescription = removedFromReference("Requirements.B", "source", "Requirements.F");
+ addFonCDiffDescription = addedToReference("Requirements.C", "source", "Requirements.F");
+ addAonDDiffDescription = addedToReference("Requirements.D", "source", "Requirements.A");
+ delFonDDiffDescription = removedFromReference("Requirements.D", "source", "Requirements.F");
+ addAonEDiffDescription = addedToReference("Requirements.E", "source", "Requirements.A");
+ addFonEDiffDescription = addedToReference("Requirements.E", "source", "Requirements.F");
+ delDonFDiffDescription = removedFromReference("Requirements.F", "destination", "Requirements.D");
+ delBonFDiffDescription = removedFromReference("Requirements.F", "destination", "Requirements.B");
+ addEonFDiffDescription = addedToReference("Requirements.F", "destination", "Requirements.E");
+ addConFDiffDescription = addedToReference("Requirements.F", "destination", "Requirements.C");
+ delBDiffDescription = removedFromReference("Requirements", "containmentRef1", "Requirements.B");
+ addEDiffDescription = addedToReference("Requirements", "containmentRef1", "Requirements.E");
+ } else {
+ delBonADiffDescription = addedToReference("Requirements.A", "destination", "Requirements.B");
+ delAonBDiffDescription = addedToReference("Requirements.B", "source", "Requirements.A");
+ addDonADiffDescription = removedFromReference("Requirements.A", "destination", "Requirements.D");
+ addEonADiffDescription = removedFromReference("Requirements.A", "destination", "Requirements.E");
+ delFonBDiffDescription = addedToReference("Requirements.B", "source", "Requirements.F");
+ addFonCDiffDescription = removedFromReference("Requirements.C", "source", "Requirements.F");
+ addAonDDiffDescription = removedFromReference("Requirements.D", "source", "Requirements.A");
+ delFonDDiffDescription = addedToReference("Requirements.D", "source", "Requirements.F");
+ addAonEDiffDescription = removedFromReference("Requirements.E", "source", "Requirements.A");
+ addFonEDiffDescription = removedFromReference("Requirements.E", "source", "Requirements.F");
+ delDonFDiffDescription = addedToReference("Requirements.F", "destination", "Requirements.D");
+ delBonFDiffDescription = addedToReference("Requirements.F", "destination", "Requirements.B");
+ addEonFDiffDescription = removedFromReference("Requirements.F", "destination", "Requirements.E");
+ addConFDiffDescription = removedFromReference("Requirements.F", "destination", "Requirements.C");
+ delBDiffDescription = addedToReference("Requirements", "containmentRef1", "Requirements.B");
+ addEDiffDescription = removedFromReference("Requirements", "containmentRef1", "Requirements.E");
+ }
+
+ final Diff delBonADiff = Iterators.find(differences.iterator(), delBonADiffDescription);
+ final Diff delAonBDiff = Iterators.find(differences.iterator(), delAonBDiffDescription);
+ final Diff addDonADiff = Iterators.find(differences.iterator(), addDonADiffDescription);
+ final Diff addEonADiff = Iterators.find(differences.iterator(), addEonADiffDescription);
+ final Diff delFonBDiff = Iterators.find(differences.iterator(), delFonBDiffDescription);
+ final Diff addFonCDiff = Iterators.find(differences.iterator(), addFonCDiffDescription);
+ final Diff addAonDDiff = Iterators.find(differences.iterator(), addAonDDiffDescription);
+ final Diff delFonDDiff = Iterators.find(differences.iterator(), delFonDDiffDescription);
+ final Diff addAonEDiff = Iterators.find(differences.iterator(), addAonEDiffDescription);
+ final Diff addFonEDiff = Iterators.find(differences.iterator(), addFonEDiffDescription);
+ final Diff delDonFDiff = Iterators.find(differences.iterator(), delDonFDiffDescription);
+ final Diff delBonFDiff = Iterators.find(differences.iterator(), delBonFDiffDescription);
+ final Diff addEonFDiff = Iterators.find(differences.iterator(), addEonFDiffDescription);
+ final Diff addConFDiff = Iterators.find(differences.iterator(), addConFDiffDescription);
+ final Diff delBDiff = Iterators.find(differences.iterator(), delBDiffDescription);
+ final Diff addEDiff = Iterators.find(differences.iterator(), addEDiffDescription);
+
+ assertNotNull(delBonADiff);
+ assertNotNull(delAonBDiff);
+ assertNotNull(addDonADiff);
+ assertNotNull(addEonADiff);
+ assertNotNull(delFonBDiff);
+ assertNotNull(addFonCDiff);
+ assertNotNull(addAonDDiff);
+ assertNotNull(delFonDDiff);
+ assertNotNull(addAonEDiff);
+ assertNotNull(addFonEDiff);
+ assertNotNull(delDonFDiff);
+ assertNotNull(delBonFDiff);
+ assertNotNull(addEonFDiff);
+ assertNotNull(addConFDiff);
+ assertNotNull(delBDiff);
+ assertNotNull(addEDiff);
+
+ // CHECK EQUIVALENCE
+ assertSame(Integer.valueOf(7), comparison.getEquivalences().size());
+
+ assertNotNull(delBonADiff.getEquivalence());
+ assertSame(Integer.valueOf(2), delBonADiff.getEquivalence().getDifferences().size());
+ assertTrue(delBonADiff.getEquivalence().getDifferences().contains(delBonADiff));
+ assertTrue(delBonADiff.getEquivalence().getDifferences().contains(delAonBDiff));
+
+ assertNotNull(addDonADiff.getEquivalence());
+ assertSame(Integer.valueOf(2), addDonADiff.getEquivalence().getDifferences().size());
+ assertTrue(addDonADiff.getEquivalence().getDifferences().contains(addDonADiff));
+ assertTrue(addDonADiff.getEquivalence().getDifferences().contains(addAonDDiff));
+
+ assertNotNull(addEonADiff.getEquivalence());
+ assertSame(Integer.valueOf(2), addEonADiff.getEquivalence().getDifferences().size());
+ assertTrue(addEonADiff.getEquivalence().getDifferences().contains(addEonADiff));
+ assertTrue(addEonADiff.getEquivalence().getDifferences().contains(addAonEDiff));
+
+ assertNotNull(delFonBDiff.getEquivalence());
+ assertSame(Integer.valueOf(2), delFonBDiff.getEquivalence().getDifferences().size());
+ assertTrue(delFonBDiff.getEquivalence().getDifferences().contains(delFonBDiff));
+ assertTrue(delFonBDiff.getEquivalence().getDifferences().contains(delBonFDiff));
+
+ assertNotNull(addFonCDiff.getEquivalence());
+ assertSame(Integer.valueOf(2), addFonCDiff.getEquivalence().getDifferences().size());
+ assertTrue(addFonCDiff.getEquivalence().getDifferences().contains(addFonCDiff));
+ assertTrue(addFonCDiff.getEquivalence().getDifferences().contains(addConFDiff));
+
+ assertNotNull(delFonDDiff.getEquivalence());
+ assertSame(Integer.valueOf(2), delFonDDiff.getEquivalence().getDifferences().size());
+ assertTrue(delFonDDiff.getEquivalence().getDifferences().contains(delFonDDiff));
+ assertTrue(delFonDDiff.getEquivalence().getDifferences().contains(delDonFDiff));
+
+ assertNotNull(addFonEDiff.getEquivalence());
+ assertSame(Integer.valueOf(2), addFonEDiff.getEquivalence().getDifferences().size());
+ assertTrue(addFonEDiff.getEquivalence().getDifferences().contains(addFonEDiff));
+ assertTrue(addFonEDiff.getEquivalence().getDifferences().contains(addEonFDiff));
+
+ }
+
+ @Test
+ public void testE1UseCase() throws IOException {
+ final Resource left = input.getE1Left();
+ final Resource right = input.getE1Right();
+ final Resource ancestor = input.getE1Ancestor();
+
+ final Comparison comparison = EMFCompare.compare(left, right, ancestor);
+
+ testA1(TestKind.LEFT, comparison);
+ }
+
+ @Test
+ public void testE2UseCase() throws IOException {
+ final Resource left = input.getE2Left();
+ final Resource right = input.getE2Right();
+ final Resource ancestor = input.getE2Ancestor();
+
+ final Comparison comparison = EMFCompare.compare(left, right, ancestor);
+
+ testA2(TestKind.LEFT, comparison);
+ }
+
+ @Test
+ public void testE3UseCase() throws IOException {
+ final Resource left = input.getE3Left();
+ final Resource right = input.getE3Right();
+ final Resource ancestor = input.getE3Ancestor();
+
+ final Comparison comparison = EMFCompare.compare(left, right, ancestor);
+
+ testA3(TestKind.LEFT, comparison);
+ }
+
+ @Test
+ public void testE4UseCase() throws IOException {
+ final Resource left = input.getE4Left();
+ final Resource right = input.getE4Right();
+ final Resource ancestor = input.getE4Ancestor();
+
+ final Comparison comparison = EMFCompare.compare(left, right, ancestor);
+
+ testA4(TestKind.LEFT, comparison);
+ }
+
+ @Test
+ public void testE5UseCase() throws IOException {
+ final Resource left = input.getE5Left();
+ final Resource right = input.getE5Right();
+ final Resource ancestor = input.getE5Ancestor();
+
+ final Comparison comparison = EMFCompare.compare(left, right, ancestor);
+
+ testA5(TestKind.LEFT, comparison);
+ }
+
+ @Test
+ public void testE6UseCase() throws IOException {
+ final Resource left = input.getE6Left();
+ final Resource right = input.getE6Right();
+ final Resource ancestor = input.getE6Ancestor();
+
+ final Comparison comparison = EMFCompare.compare(left, right, ancestor);
+
+ testC1(TestKind.LEFT, comparison);
+ }
+
+ @Test
+ public void testE7UseCase() throws IOException {
+ final Resource left = input.getE7Left();
+ final Resource right = input.getE7Right();
+ final Resource ancestor = input.getE7Ancestor();
+
+ final Comparison comparison = EMFCompare.compare(left, right, ancestor);
+
+ testC2(TestKind.LEFT, comparison);
+ }
+
+ @Test
+ public void testE8UseCase() throws IOException {
+ final Resource left = input.getE8Left();
+ final Resource right = input.getE8Right();
+ final Resource ancestor = input.getE8Ancestor();
+
+ final Comparison comparison = EMFCompare.compare(left, right, ancestor);
+
+ testC3(TestKind.LEFT, comparison);
+ }
+
+ @Test
+ public void testE9UseCase() throws IOException {
+ final Resource left = input.getE9Left();
+ final Resource right = input.getE9Right();
+ final Resource ancestor = input.getE9Ancestor();
+
+ final Comparison comparison = EMFCompare.compare(left, right, ancestor);
+
+ testC4(TestKind.LEFT, comparison);
+ }
+
+ @Test
+ public void testE10UseCase() throws IOException {
+ final Resource left = input.getE10Left();
+ final Resource right = input.getE10Right();
+ final Resource ancestor = input.getE10Ancestor();
+
+ final Comparison comparison = EMFCompare.compare(left, right, ancestor);
+
+ testD1(TestKind.LEFT, comparison);
+ }
+
+ @Test
+ public void testF1UseCase() throws IOException {
+ final Resource left = input.getF1Left();
+ final Resource right = input.getF1Right();
+ final Resource ancestor = input.getF1Ancestor();
+
+ final Comparison comparison = EMFCompare.compare(left, right, ancestor);
+
+ testA1(TestKind.RIGHT, comparison);
+ }
+
+ @Test
+ public void testF2UseCase() throws IOException {
+ final Resource left = input.getF2Left();
+ final Resource right = input.getF2Right();
+ final Resource ancestor = input.getF2Ancestor();
+
+ final Comparison comparison = EMFCompare.compare(left, right, ancestor);
+
+ testA2(TestKind.RIGHT, comparison);
+ }
+
+ @Test
+ public void testF3UseCase() throws IOException {
+ final Resource left = input.getF3Left();
+ final Resource right = input.getF3Right();
+ final Resource ancestor = input.getF3Ancestor();
+
+ final Comparison comparison = EMFCompare.compare(left, right, ancestor);
+
+ testA3(TestKind.RIGHT, comparison);
+ }
+
+ @Test
+ public void testF4UseCase() throws IOException {
+ final Resource left = input.getF4Left();
+ final Resource right = input.getF4Right();
+ final Resource ancestor = input.getF4Ancestor();
+
+ final Comparison comparison = EMFCompare.compare(left, right, ancestor);
+
+ testA4(TestKind.RIGHT, comparison);
+ }
+
+ @Test
+ public void testF5UseCase() throws IOException {
+ final Resource left = input.getF5Left();
+ final Resource right = input.getF5Right();
+ final Resource ancestor = input.getF5Ancestor();
+
+ final Comparison comparison = EMFCompare.compare(left, right, ancestor);
+
+ testA5(TestKind.RIGHT, comparison);
+ }
+
+ @Test
+ public void testF6UseCase() throws IOException {
+ final Resource left = input.getF6Left();
+ final Resource right = input.getF6Right();
+ final Resource ancestor = input.getF6Ancestor();
+
+ final Comparison comparison = EMFCompare.compare(left, right, ancestor);
+
+ testC1(TestKind.RIGHT, comparison);
+ }
+
+ @Test
+ public void testF7UseCase() throws IOException {
+ final Resource left = input.getF7Left();
+ final Resource right = input.getF7Right();
+ final Resource ancestor = input.getF7Ancestor();
+
+ final Comparison comparison = EMFCompare.compare(left, right, ancestor);
+
+ testC2(TestKind.RIGHT, comparison);
+ }
+
+ @Test
+ public void testF8UseCase() throws IOException {
+ final Resource left = input.getF8Left();
+ final Resource right = input.getF8Right();
+ final Resource ancestor = input.getF8Ancestor();
+
+ final Comparison comparison = EMFCompare.compare(left, right, ancestor);
+
+ testC3(TestKind.RIGHT, comparison);
+ }
+
+ @Test
+ public void testF9UseCase() throws IOException {
+ final Resource left = input.getF9Left();
+ final Resource right = input.getF9Right();
+ final Resource ancestor = input.getF9Ancestor();
+
+ final Comparison comparison = EMFCompare.compare(left, right, ancestor);
+
+ testC4(TestKind.RIGHT, comparison);
+ }
+
+ @Test
+ public void testF10UseCase() throws IOException {
+ final Resource left = input.getF10Left();
+ final Resource right = input.getF10Right();
+ final Resource ancestor = input.getF10Ancestor();
+
+ final Comparison comparison = EMFCompare.compare(left, right, ancestor);
+ testD1(TestKind.RIGHT, comparison);
}
}
diff --git a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/EquiInputData.java b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/EquiInputData.java
index 9f1af3860..068eca9c3 100644
--- a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/EquiInputData.java
+++ b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/EquiInputData.java
@@ -13,4 +13,316 @@ public class EquiInputData extends AbstractInputData {
public Resource getA1Right() throws IOException {
return loadFromClassloader("a1/right.nodes"); //$NON-NLS-1$
}
+
+ public Resource getA2Left() throws IOException {
+ return loadFromClassloader("a2/left.nodes"); //$NON-NLS-1$
+ }
+
+ public Resource getA2Right() throws IOException {
+ return loadFromClassloader("a2/right.nodes"); //$NON-NLS-1$
+ }
+
+ public Resource getA3Left() throws IOException {
+ return loadFromClassloader("a3/left.nodes"); //$NON-NLS-1$
+ }
+
+ public Resource getA3Right() throws IOException {
+ return loadFromClassloader("a3/right.nodes"); //$NON-NLS-1$
+ }
+
+ public Resource getA4Left() throws IOException {
+ return loadFromClassloader("a4/left.nodes"); //$NON-NLS-1$
+ }
+
+ public Resource getA4Right() throws IOException {
+ return loadFromClassloader("a4/right.nodes"); //$NON-NLS-1$
+ }
+
+ public Resource getA5Left() throws IOException {
+ return loadFromClassloader("a5/left.nodes"); //$NON-NLS-1$
+ }
+
+ public Resource getA5Right() throws IOException {
+ return loadFromClassloader("a5/right.nodes"); //$NON-NLS-1$
+ }
+
+ public Resource getC1Left() throws IOException {
+ return loadFromClassloader("c1/left.nodes"); //$NON-NLS-1$
+ }
+
+ public Resource getC1Right() throws IOException {
+ return loadFromClassloader("c1/right.nodes"); //$NON-NLS-1$
+ }
+
+ public Resource getC2Left() throws IOException {
+ return loadFromClassloader("c2/left.nodes"); //$NON-NLS-1$
+ }
+
+ public Resource getC2Right() throws IOException {
+ return loadFromClassloader("c2/right.nodes"); //$NON-NLS-1$
+ }
+
+ public Resource getC3Left() throws IOException {
+ return loadFromClassloader("c3/left.nodes"); //$NON-NLS-1$
+ }
+
+ public Resource getC3Right() throws IOException {
+ return loadFromClassloader("c3/right.nodes"); //$NON-NLS-1$
+ }
+
+ public Resource getC4Left() throws IOException {
+ return loadFromClassloader("c4/left.nodes"); //$NON-NLS-1$
+ }
+
+ public Resource getC4Right() throws IOException {
+ return loadFromClassloader("c4/right.nodes"); //$NON-NLS-1$
+ }
+
+ public Resource getD1Left() throws IOException {
+ return loadFromClassloader("d1/left.nodes"); //$NON-NLS-1$
+ }
+
+ public Resource getD1Right() throws IOException {
+ return loadFromClassloader("d1/right.nodes"); //$NON-NLS-1$
+ }
+
+ public Resource getE1Left() throws IOException {
+ return loadFromClassloader("e1/left.nodes"); //$NON-NLS-1$
+ }
+
+ public Resource getE1Right() throws IOException {
+ return loadFromClassloader("e1/right.nodes"); //$NON-NLS-1$
+ }
+
+ public Resource getE1Ancestor() throws IOException {
+ return loadFromClassloader("e1/ancestor.nodes"); //$NON-NLS-1$
+ }
+
+ public Resource getE2Left() throws IOException {
+ return loadFromClassloader("e2/left.nodes"); //$NON-NLS-1$
+ }
+
+ public Resource getE2Right() throws IOException {
+ return loadFromClassloader("e2/right.nodes"); //$NON-NLS-1$
+ }
+
+ public Resource getE2Ancestor() throws IOException {
+ return loadFromClassloader("e2/ancestor.nodes"); //$NON-NLS-1$
+ }
+
+ public Resource getE3Left() throws IOException {
+ return loadFromClassloader("e3/left.nodes"); //$NON-NLS-1$
+ }
+
+ public Resource getE3Right() throws IOException {
+ return loadFromClassloader("e3/right.nodes"); //$NON-NLS-1$
+ }
+
+ public Resource getE3Ancestor() throws IOException {
+ return loadFromClassloader("e3/ancestor.nodes"); //$NON-NLS-1$
+ }
+
+ public Resource getE4Left() throws IOException {
+ return loadFromClassloader("e4/left.nodes"); //$NON-NLS-1$
+ }
+
+ public Resource getE4Right() throws IOException {
+ return loadFromClassloader("e4/right.nodes"); //$NON-NLS-1$
+ }
+
+ public Resource getE4Ancestor() throws IOException {
+ return loadFromClassloader("e4/ancestor.nodes"); //$NON-NLS-1$
+ }
+
+ public Resource getE5Left() throws IOException {
+ return loadFromClassloader("e5/left.nodes"); //$NON-NLS-1$
+ }
+
+ public Resource getE5Right() throws IOException {
+ return loadFromClassloader("e5/right.nodes"); //$NON-NLS-1$
+ }
+
+ public Resource getE5Ancestor() throws IOException {
+ return loadFromClassloader("e5/ancestor.nodes"); //$NON-NLS-1$
+ }
+
+ public Resource getE6Left() throws IOException {
+ return loadFromClassloader("e6/left.nodes"); //$NON-NLS-1$
+ }
+
+ public Resource getE6Right() throws IOException {
+ return loadFromClassloader("e6/right.nodes"); //$NON-NLS-1$
+ }
+
+ public Resource getE6Ancestor() throws IOException {
+ return loadFromClassloader("e6/ancestor.nodes"); //$NON-NLS-1$
+ }
+
+ public Resource getE7Left() throws IOException {
+ return loadFromClassloader("e7/left.nodes"); //$NON-NLS-1$
+ }
+
+ public Resource getE7Right() throws IOException {
+ return loadFromClassloader("e7/right.nodes"); //$NON-NLS-1$
+ }
+
+ public Resource getE7Ancestor() throws IOException {
+ return loadFromClassloader("e7/ancestor.nodes"); //$NON-NLS-1$
+ }
+
+ public Resource getE8Left() throws IOException {
+ return loadFromClassloader("e8/left.nodes"); //$NON-NLS-1$
+ }
+
+ public Resource getE8Right() throws IOException {
+ return loadFromClassloader("e8/right.nodes"); //$NON-NLS-1$
+ }
+
+ public Resource getE8Ancestor() throws IOException {
+ return loadFromClassloader("e8/ancestor.nodes"); //$NON-NLS-1$
+ }
+
+ public Resource getE9Left() throws IOException {
+ return loadFromClassloader("e9/left.nodes"); //$NON-NLS-1$
+ }
+
+ public Resource getE9Right() throws IOException {
+ return loadFromClassloader("e9/right.nodes"); //$NON-NLS-1$
+ }
+
+ public Resource getE9Ancestor() throws IOException {
+ return loadFromClassloader("e9/ancestor.nodes"); //$NON-NLS-1$
+ }
+
+ public Resource getE10Left() throws IOException {
+ return loadFromClassloader("e10/left.nodes"); //$NON-NLS-1$
+ }
+
+ public Resource getE10Right() throws IOException {
+ return loadFromClassloader("e10/right.nodes"); //$NON-NLS-1$
+ }
+
+ public Resource getE10Ancestor() throws IOException {
+ return loadFromClassloader("e10/ancestor.nodes"); //$NON-NLS-1$
+ }
+
+ public Resource getF1Left() throws IOException {
+ return loadFromClassloader("f1/left.nodes"); //$NON-NLS-1$
+ }
+
+ public Resource getF1Right() throws IOException {
+ return loadFromClassloader("f1/right.nodes"); //$NON-NLS-1$
+ }
+
+ public Resource getF1Ancestor() throws IOException {
+ return loadFromClassloader("f1/ancestor.nodes"); //$NON-NLS-1$
+ }
+
+ public Resource getF2Left() throws IOException {
+ return loadFromClassloader("f2/left.nodes"); //$NON-NLS-1$
+ }
+
+ public Resource getF2Right() throws IOException {
+ return loadFromClassloader("f2/right.nodes"); //$NON-NLS-1$
+ }
+
+ public Resource getF2Ancestor() throws IOException {
+ return loadFromClassloader("f2/ancestor.nodes"); //$NON-NLS-1$
+ }
+
+ public Resource getF3Left() throws IOException {
+ return loadFromClassloader("f3/left.nodes"); //$NON-NLS-1$
+ }
+
+ public Resource getF3Right() throws IOException {
+ return loadFromClassloader("f3/right.nodes"); //$NON-NLS-1$
+ }
+
+ public Resource getF3Ancestor() throws IOException {
+ return loadFromClassloader("f3/ancestor.nodes"); //$NON-NLS-1$
+ }
+
+ public Resource getF4Left() throws IOException {
+ return loadFromClassloader("f4/left.nodes"); //$NON-NLS-1$
+ }
+
+ public Resource getF4Right() throws IOException {
+ return loadFromClassloader("f4/right.nodes"); //$NON-NLS-1$
+ }
+
+ public Resource getF4Ancestor() throws IOException {
+ return loadFromClassloader("f4/ancestor.nodes"); //$NON-NLS-1$
+ }
+
+ public Resource getF5Left() throws IOException {
+ return loadFromClassloader("f5/left.nodes"); //$NON-NLS-1$
+ }
+
+ public Resource getF5Right() throws IOException {
+ return loadFromClassloader("f5/right.nodes"); //$NON-NLS-1$
+ }
+
+ public Resource getF5Ancestor() throws IOException {
+ return loadFromClassloader("f5/ancestor.nodes"); //$NON-NLS-1$
+ }
+
+ public Resource getF6Left() throws IOException {
+ return loadFromClassloader("f6/left.nodes"); //$NON-NLS-1$
+ }
+
+ public Resource getF6Right() throws IOException {
+ return loadFromClassloader("f6/right.nodes"); //$NON-NLS-1$
+ }
+
+ public Resource getF6Ancestor() throws IOException {
+ return loadFromClassloader("f6/ancestor.nodes"); //$NON-NLS-1$
+ }
+
+ public Resource getF7Left() throws IOException {
+ return loadFromClassloader("f7/left.nodes"); //$NON-NLS-1$
+ }
+
+ public Resource getF7Right() throws IOException {
+ return loadFromClassloader("f7/right.nodes"); //$NON-NLS-1$
+ }
+
+ public Resource getF7Ancestor() throws IOException {
+ return loadFromClassloader("f7/ancestor.nodes"); //$NON-NLS-1$
+ }
+
+ public Resource getF8Left() throws IOException {
+ return loadFromClassloader("f8/left.nodes"); //$NON-NLS-1$
+ }
+
+ public Resource getF8Right() throws IOException {
+ return loadFromClassloader("f8/right.nodes"); //$NON-NLS-1$
+ }
+
+ public Resource getF8Ancestor() throws IOException {
+ return loadFromClassloader("f8/ancestor.nodes"); //$NON-NLS-1$
+ }
+
+ public Resource getF9Left() throws IOException {
+ return loadFromClassloader("f9/left.nodes"); //$NON-NLS-1$
+ }
+
+ public Resource getF9Right() throws IOException {
+ return loadFromClassloader("f9/right.nodes"); //$NON-NLS-1$
+ }
+
+ public Resource getF9Ancestor() throws IOException {
+ return loadFromClassloader("f9/ancestor.nodes"); //$NON-NLS-1$
+ }
+
+ public Resource getF10Left() throws IOException {
+ return loadFromClassloader("f10/left.nodes"); //$NON-NLS-1$
+ }
+
+ public Resource getF10Right() throws IOException {
+ return loadFromClassloader("f10/right.nodes"); //$NON-NLS-1$
+ }
+
+ public Resource getF10Ancestor() throws IOException {
+ return loadFromClassloader("f10/ancestor.nodes"); //$NON-NLS-1$
+ }
}
diff --git a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/a2/left.nodes b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/a2/left.nodes
new file mode 100644
index 000000000..c6ba1201f
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/a2/left.nodes
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<nodes:Node xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:nodes="http://www.eclipse.org/emf/compare/tests/nodes" xmi:id="_yWc_0JUeEeGiestbncRZoQ" name="Requirements">
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToMany" xmi:id="_m5FOMJtsEeGMQeoeefOsHA" name="C" destination="_njLUEJtsEeGMQeoeefOsHA _W87ckKQJEeGIutN6w3CGhg"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToMany" xmi:id="_njLUEJtsEeGMQeoeefOsHA" name="D1" source="_m5FOMJtsEeGMQeoeefOsHA"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToMany" xmi:id="_W87ckKQJEeGIutN6w3CGhg" name="D2" source="_m5FOMJtsEeGMQeoeefOsHA"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_xjrvsJtsEeGMQeoeefOsHA" name="E" destination="_zbOgIJtsEeGMQeoeefOsHA _egvMQKQJEeGIutN6w3CGhg"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_zbOgIJtsEeGMQeoeefOsHA" name="F1" source="_xjrvsJtsEeGMQeoeefOsHA"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_egvMQKQJEeGIutN6w3CGhg" name="F2" source="_xjrvsJtsEeGMQeoeefOsHA"/>
+</nodes:Node>
diff --git a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/a2/right.nodes b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/a2/right.nodes
new file mode 100644
index 000000000..908a66331
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/a2/right.nodes
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<nodes:Node xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:nodes="http://www.eclipse.org/emf/compare/tests/nodes" xmi:id="_yWc_0JUeEeGiestbncRZoQ" name="Requirements">
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToMany" xmi:id="_m5FOMJtsEeGMQeoeefOsHA" name="C"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToMany" xmi:id="_njLUEJtsEeGMQeoeefOsHA" name="D1"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToMany" xmi:id="_W87ckKQJEeGIutN6w3CGhg" name="D2"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_xjrvsJtsEeGMQeoeefOsHA" name="E"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_zbOgIJtsEeGMQeoeefOsHA" name="F1"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_egvMQKQJEeGIutN6w3CGhg" name="F2"/>
+</nodes:Node>
diff --git a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/a3/left.nodes b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/a3/left.nodes
new file mode 100644
index 000000000..ba9085c99
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/a3/left.nodes
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<nodes:Node xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:nodes="http://www.eclipse.org/emf/compare/tests/nodes" xmi:id="_yWc_0JUeEeGiestbncRZoQ" name="Requirements">
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_xjrvsJtsEeGMQeoeefOsHA" name="C1" destination="_zbOgIJtsEeGMQeoeefOsHA _egvMQKQJEeGIutN6w3CGhg"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_KHyT4KS-EeGRGoXThdgijA" name="C2" source="_egvMQKQJEeGIutN6w3CGhg" destination="_zbOgIJtsEeGMQeoeefOsHA"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_zbOgIJtsEeGMQeoeefOsHA" name="D1" source="_xjrvsJtsEeGMQeoeefOsHA _KHyT4KS-EeGRGoXThdgijA"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_egvMQKQJEeGIutN6w3CGhg" name="D2" source="_xjrvsJtsEeGMQeoeefOsHA" destination="_KHyT4KS-EeGRGoXThdgijA"/>
+</nodes:Node>
diff --git a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/a3/right.nodes b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/a3/right.nodes
new file mode 100644
index 000000000..0ca7842aa
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/a3/right.nodes
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<nodes:Node xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:nodes="http://www.eclipse.org/emf/compare/tests/nodes" xmi:id="_yWc_0JUeEeGiestbncRZoQ" name="Requirements">
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_xjrvsJtsEeGMQeoeefOsHA" name="C1"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_KHyT4KS-EeGRGoXThdgijA" name="C2"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_zbOgIJtsEeGMQeoeefOsHA" name="D1"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_egvMQKQJEeGIutN6w3CGhg" name="D2"/>
+</nodes:Node>
diff --git a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/a4/left.nodes b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/a4/left.nodes
new file mode 100644
index 000000000..ce108ca28
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/a4/left.nodes
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<nodes:Node xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:nodes="http://www.eclipse.org/emf/compare/tests/nodes" xmi:id="_yWc_0JUeEeGiestbncRZoQ" name="Requirements">
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_xjrvsJtsEeGMQeoeefOsHA" name="A" source="_KHyT4KS-EeGRGoXThdgijA" destination="_KHyT4KS-EeGRGoXThdgijA"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_KHyT4KS-EeGRGoXThdgijA" name="B" source="_xjrvsJtsEeGMQeoeefOsHA" destination="_xjrvsJtsEeGMQeoeefOsHA"/>
+</nodes:Node>
diff --git a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/a4/right.nodes b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/a4/right.nodes
new file mode 100644
index 000000000..8ca1ad39b
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/a4/right.nodes
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<nodes:Node xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:nodes="http://www.eclipse.org/emf/compare/tests/nodes" xmi:id="_yWc_0JUeEeGiestbncRZoQ" name="Requirements">
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_xjrvsJtsEeGMQeoeefOsHA" name="A"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_KHyT4KS-EeGRGoXThdgijA" name="B"/>
+</nodes:Node>
diff --git a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/a5/left.nodes b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/a5/left.nodes
new file mode 100644
index 000000000..d3a7808e6
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/a5/left.nodes
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<nodes:Node xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:nodes="http://www.eclipse.org/emf/compare/tests/nodes" xmi:id="_yWc_0JUeEeGiestbncRZoQ" name="Requirements">
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_ZB0jcJtsEeGMQeoeefOsHA" name="A" destination="_dRiFIJtsEeGMQeoeefOsHA"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_dRiFIJtsEeGMQeoeefOsHA" name="B" source="_ZB0jcJtsEeGMQeoeefOsHA"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToMany" xmi:id="_m5FOMJtsEeGMQeoeefOsHA" name="C" destination="_njLUEJtsEeGMQeoeefOsHA"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToMany" xmi:id="_njLUEJtsEeGMQeoeefOsHA" name="D" source="_m5FOMJtsEeGMQeoeefOsHA"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_xjrvsJtsEeGMQeoeefOsHA" name="E" destination="_zbOgIJtsEeGMQeoeefOsHA"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_zbOgIJtsEeGMQeoeefOsHA" name="F" source="_xjrvsJtsEeGMQeoeefOsHA"/>
+</nodes:Node>
diff --git a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/a5/right.nodes b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/a5/right.nodes
new file mode 100644
index 000000000..1470bc07d
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/a5/right.nodes
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<nodes:Node xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:nodes="http://www.eclipse.org/emf/compare/tests/nodes" xmi:id="_yWc_0JUeEeGiestbncRZoQ" name="Requirements"/>
diff --git a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/c1/left.nodes b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/c1/left.nodes
new file mode 100644
index 000000000..da0875b4a
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/c1/left.nodes
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<nodes:Node xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:nodes="http://www.eclipse.org/emf/compare/tests/nodes" xmi:id="_yWc_0JUeEeGiestbncRZoQ" name="Requirements">
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_XWsagKZFEeG7yYXQbTfTXQ" name="A" destination="_YFIN0KZFEeG7yYXQbTfTXQ"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_XpvSUKZFEeG7yYXQbTfTXQ" name="B"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_YFIN0KZFEeG7yYXQbTfTXQ" name="C" source="_XWsagKZFEeG7yYXQbTfTXQ"/>
+</nodes:Node>
diff --git a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/c1/right.nodes b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/c1/right.nodes
new file mode 100644
index 000000000..3543ffadd
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/c1/right.nodes
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<nodes:Node xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:nodes="http://www.eclipse.org/emf/compare/tests/nodes" xmi:id="_yWc_0JUeEeGiestbncRZoQ" name="Requirements">
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_XWsagKZFEeG7yYXQbTfTXQ" name="A" destination="_XpvSUKZFEeG7yYXQbTfTXQ"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_XpvSUKZFEeG7yYXQbTfTXQ" name="B" source="_XWsagKZFEeG7yYXQbTfTXQ"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_YFIN0KZFEeG7yYXQbTfTXQ" name="C"/>
+</nodes:Node>
diff --git a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/c2/left.nodes b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/c2/left.nodes
new file mode 100644
index 000000000..da0875b4a
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/c2/left.nodes
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<nodes:Node xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:nodes="http://www.eclipse.org/emf/compare/tests/nodes" xmi:id="_yWc_0JUeEeGiestbncRZoQ" name="Requirements">
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_XWsagKZFEeG7yYXQbTfTXQ" name="A" destination="_YFIN0KZFEeG7yYXQbTfTXQ"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_XpvSUKZFEeG7yYXQbTfTXQ" name="B"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_YFIN0KZFEeG7yYXQbTfTXQ" name="C" source="_XWsagKZFEeG7yYXQbTfTXQ"/>
+</nodes:Node>
diff --git a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/c2/right.nodes b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/c2/right.nodes
new file mode 100644
index 000000000..8e39a4c1e
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/c2/right.nodes
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<nodes:Node xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:nodes="http://www.eclipse.org/emf/compare/tests/nodes" xmi:id="_yWc_0JUeEeGiestbncRZoQ" name="Requirements">
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_XWsagKZFEeG7yYXQbTfTXQ" name="A" destination="_XpvSUKZFEeG7yYXQbTfTXQ"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_XpvSUKZFEeG7yYXQbTfTXQ" name="B" source="_XWsagKZFEeG7yYXQbTfTXQ"/>
+</nodes:Node>
diff --git a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/c3/left.nodes b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/c3/left.nodes
new file mode 100644
index 000000000..18330b548
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/c3/left.nodes
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<nodes:Node xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:nodes="http://www.eclipse.org/emf/compare/tests/nodes" xmi:id="_yWc_0JUeEeGiestbncRZoQ" name="Requirements">
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_XWsagKZFEeG7yYXQbTfTXQ" name="A" destination="_YFIN0KZFEeG7yYXQbTfTXQ"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_YFIN0KZFEeG7yYXQbTfTXQ" name="C" source="_XWsagKZFEeG7yYXQbTfTXQ"/>
+</nodes:Node>
diff --git a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/c3/right.nodes b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/c3/right.nodes
new file mode 100644
index 000000000..3543ffadd
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/c3/right.nodes
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<nodes:Node xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:nodes="http://www.eclipse.org/emf/compare/tests/nodes" xmi:id="_yWc_0JUeEeGiestbncRZoQ" name="Requirements">
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_XWsagKZFEeG7yYXQbTfTXQ" name="A" destination="_XpvSUKZFEeG7yYXQbTfTXQ"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_XpvSUKZFEeG7yYXQbTfTXQ" name="B" source="_XWsagKZFEeG7yYXQbTfTXQ"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_YFIN0KZFEeG7yYXQbTfTXQ" name="C"/>
+</nodes:Node>
diff --git a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/c4/left.nodes b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/c4/left.nodes
new file mode 100644
index 000000000..18330b548
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/c4/left.nodes
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<nodes:Node xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:nodes="http://www.eclipse.org/emf/compare/tests/nodes" xmi:id="_yWc_0JUeEeGiestbncRZoQ" name="Requirements">
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_XWsagKZFEeG7yYXQbTfTXQ" name="A" destination="_YFIN0KZFEeG7yYXQbTfTXQ"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_YFIN0KZFEeG7yYXQbTfTXQ" name="C" source="_XWsagKZFEeG7yYXQbTfTXQ"/>
+</nodes:Node>
diff --git a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/c4/right.nodes b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/c4/right.nodes
new file mode 100644
index 000000000..8e39a4c1e
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/c4/right.nodes
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<nodes:Node xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:nodes="http://www.eclipse.org/emf/compare/tests/nodes" xmi:id="_yWc_0JUeEeGiestbncRZoQ" name="Requirements">
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_XWsagKZFEeG7yYXQbTfTXQ" name="A" destination="_XpvSUKZFEeG7yYXQbTfTXQ"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_XpvSUKZFEeG7yYXQbTfTXQ" name="B" source="_XWsagKZFEeG7yYXQbTfTXQ"/>
+</nodes:Node>
diff --git a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/d1/left.nodes b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/d1/left.nodes
new file mode 100644
index 000000000..5461b7619
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/d1/left.nodes
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<nodes:Node xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:nodes="http://www.eclipse.org/emf/compare/tests/nodes" xmi:id="_yWc_0JUeEeGiestbncRZoQ" name="Requirements">
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_cDHM4KZyEeG7yYXQbTfTXQ" name="A" destination="_eIx44KZyEeG7yYXQbTfTXQ _e9ZzwKZyEeG7yYXQbTfTXQ _o09uwKZyEeG7yYXQbTfTXQ"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_eIx44KZyEeG7yYXQbTfTXQ" name="C" source="_cDHM4KZyEeG7yYXQbTfTXQ _f0yHsKZyEeG7yYXQbTfTXQ"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_e9ZzwKZyEeG7yYXQbTfTXQ" name="D" source="_cDHM4KZyEeG7yYXQbTfTXQ"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_f0yHsKZyEeG7yYXQbTfTXQ" name="F" destination="_eIx44KZyEeG7yYXQbTfTXQ _o09uwKZyEeG7yYXQbTfTXQ"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_o09uwKZyEeG7yYXQbTfTXQ" name="E" source="_cDHM4KZyEeG7yYXQbTfTXQ _f0yHsKZyEeG7yYXQbTfTXQ"/>
+</nodes:Node>
diff --git a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/d1/right.nodes b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/d1/right.nodes
new file mode 100644
index 000000000..b5fa78353
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/d1/right.nodes
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<nodes:Node xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:nodes="http://www.eclipse.org/emf/compare/tests/nodes" xmi:id="_yWc_0JUeEeGiestbncRZoQ" name="Requirements">
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_cDHM4KZyEeG7yYXQbTfTXQ" name="A" destination="_dS-5UKZyEeG7yYXQbTfTXQ _eIx44KZyEeG7yYXQbTfTXQ"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_dS-5UKZyEeG7yYXQbTfTXQ" name="B" source="_cDHM4KZyEeG7yYXQbTfTXQ _f0yHsKZyEeG7yYXQbTfTXQ"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_eIx44KZyEeG7yYXQbTfTXQ" name="C" source="_cDHM4KZyEeG7yYXQbTfTXQ"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_e9ZzwKZyEeG7yYXQbTfTXQ" name="D" source="_f0yHsKZyEeG7yYXQbTfTXQ"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_f0yHsKZyEeG7yYXQbTfTXQ" name="F" destination="_dS-5UKZyEeG7yYXQbTfTXQ _e9ZzwKZyEeG7yYXQbTfTXQ"/>
+</nodes:Node>
diff --git a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e1/ancestor.nodes b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e1/ancestor.nodes
new file mode 100644
index 000000000..c2295d20e
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e1/ancestor.nodes
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<nodes:Node xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:nodes="http://www.eclipse.org/emf/compare/tests/nodes" xmi:id="_yWc_0JUeEeGiestbncRZoQ" name="Requirements">
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_ZB0jcJtsEeGMQeoeefOsHA" name="A"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_dRiFIJtsEeGMQeoeefOsHA" name="B"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToMany" xmi:id="_m5FOMJtsEeGMQeoeefOsHA" name="C"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToMany" xmi:id="_njLUEJtsEeGMQeoeefOsHA" name="D"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_xjrvsJtsEeGMQeoeefOsHA" name="E"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_zbOgIJtsEeGMQeoeefOsHA" name="F"/>
+</nodes:Node>
diff --git a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e1/left.nodes b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e1/left.nodes
new file mode 100644
index 000000000..d3a7808e6
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e1/left.nodes
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<nodes:Node xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:nodes="http://www.eclipse.org/emf/compare/tests/nodes" xmi:id="_yWc_0JUeEeGiestbncRZoQ" name="Requirements">
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_ZB0jcJtsEeGMQeoeefOsHA" name="A" destination="_dRiFIJtsEeGMQeoeefOsHA"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_dRiFIJtsEeGMQeoeefOsHA" name="B" source="_ZB0jcJtsEeGMQeoeefOsHA"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToMany" xmi:id="_m5FOMJtsEeGMQeoeefOsHA" name="C" destination="_njLUEJtsEeGMQeoeefOsHA"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToMany" xmi:id="_njLUEJtsEeGMQeoeefOsHA" name="D" source="_m5FOMJtsEeGMQeoeefOsHA"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_xjrvsJtsEeGMQeoeefOsHA" name="E" destination="_zbOgIJtsEeGMQeoeefOsHA"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_zbOgIJtsEeGMQeoeefOsHA" name="F" source="_xjrvsJtsEeGMQeoeefOsHA"/>
+</nodes:Node>
diff --git a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e1/right.nodes b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e1/right.nodes
new file mode 100644
index 000000000..c2295d20e
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e1/right.nodes
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<nodes:Node xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:nodes="http://www.eclipse.org/emf/compare/tests/nodes" xmi:id="_yWc_0JUeEeGiestbncRZoQ" name="Requirements">
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_ZB0jcJtsEeGMQeoeefOsHA" name="A"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_dRiFIJtsEeGMQeoeefOsHA" name="B"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToMany" xmi:id="_m5FOMJtsEeGMQeoeefOsHA" name="C"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToMany" xmi:id="_njLUEJtsEeGMQeoeefOsHA" name="D"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_xjrvsJtsEeGMQeoeefOsHA" name="E"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_zbOgIJtsEeGMQeoeefOsHA" name="F"/>
+</nodes:Node>
diff --git a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e10/ancestor.nodes b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e10/ancestor.nodes
new file mode 100644
index 000000000..b5fa78353
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e10/ancestor.nodes
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<nodes:Node xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:nodes="http://www.eclipse.org/emf/compare/tests/nodes" xmi:id="_yWc_0JUeEeGiestbncRZoQ" name="Requirements">
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_cDHM4KZyEeG7yYXQbTfTXQ" name="A" destination="_dS-5UKZyEeG7yYXQbTfTXQ _eIx44KZyEeG7yYXQbTfTXQ"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_dS-5UKZyEeG7yYXQbTfTXQ" name="B" source="_cDHM4KZyEeG7yYXQbTfTXQ _f0yHsKZyEeG7yYXQbTfTXQ"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_eIx44KZyEeG7yYXQbTfTXQ" name="C" source="_cDHM4KZyEeG7yYXQbTfTXQ"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_e9ZzwKZyEeG7yYXQbTfTXQ" name="D" source="_f0yHsKZyEeG7yYXQbTfTXQ"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_f0yHsKZyEeG7yYXQbTfTXQ" name="F" destination="_dS-5UKZyEeG7yYXQbTfTXQ _e9ZzwKZyEeG7yYXQbTfTXQ"/>
+</nodes:Node>
diff --git a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e10/left.nodes b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e10/left.nodes
new file mode 100644
index 000000000..5461b7619
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e10/left.nodes
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<nodes:Node xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:nodes="http://www.eclipse.org/emf/compare/tests/nodes" xmi:id="_yWc_0JUeEeGiestbncRZoQ" name="Requirements">
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_cDHM4KZyEeG7yYXQbTfTXQ" name="A" destination="_eIx44KZyEeG7yYXQbTfTXQ _e9ZzwKZyEeG7yYXQbTfTXQ _o09uwKZyEeG7yYXQbTfTXQ"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_eIx44KZyEeG7yYXQbTfTXQ" name="C" source="_cDHM4KZyEeG7yYXQbTfTXQ _f0yHsKZyEeG7yYXQbTfTXQ"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_e9ZzwKZyEeG7yYXQbTfTXQ" name="D" source="_cDHM4KZyEeG7yYXQbTfTXQ"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_f0yHsKZyEeG7yYXQbTfTXQ" name="F" destination="_eIx44KZyEeG7yYXQbTfTXQ _o09uwKZyEeG7yYXQbTfTXQ"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_o09uwKZyEeG7yYXQbTfTXQ" name="E" source="_cDHM4KZyEeG7yYXQbTfTXQ _f0yHsKZyEeG7yYXQbTfTXQ"/>
+</nodes:Node>
diff --git a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e10/right.nodes b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e10/right.nodes
new file mode 100644
index 000000000..b5fa78353
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e10/right.nodes
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<nodes:Node xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:nodes="http://www.eclipse.org/emf/compare/tests/nodes" xmi:id="_yWc_0JUeEeGiestbncRZoQ" name="Requirements">
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_cDHM4KZyEeG7yYXQbTfTXQ" name="A" destination="_dS-5UKZyEeG7yYXQbTfTXQ _eIx44KZyEeG7yYXQbTfTXQ"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_dS-5UKZyEeG7yYXQbTfTXQ" name="B" source="_cDHM4KZyEeG7yYXQbTfTXQ _f0yHsKZyEeG7yYXQbTfTXQ"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_eIx44KZyEeG7yYXQbTfTXQ" name="C" source="_cDHM4KZyEeG7yYXQbTfTXQ"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_e9ZzwKZyEeG7yYXQbTfTXQ" name="D" source="_f0yHsKZyEeG7yYXQbTfTXQ"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_f0yHsKZyEeG7yYXQbTfTXQ" name="F" destination="_dS-5UKZyEeG7yYXQbTfTXQ _e9ZzwKZyEeG7yYXQbTfTXQ"/>
+</nodes:Node>
diff --git a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e2/ancestor.nodes b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e2/ancestor.nodes
new file mode 100644
index 000000000..908a66331
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e2/ancestor.nodes
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<nodes:Node xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:nodes="http://www.eclipse.org/emf/compare/tests/nodes" xmi:id="_yWc_0JUeEeGiestbncRZoQ" name="Requirements">
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToMany" xmi:id="_m5FOMJtsEeGMQeoeefOsHA" name="C"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToMany" xmi:id="_njLUEJtsEeGMQeoeefOsHA" name="D1"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToMany" xmi:id="_W87ckKQJEeGIutN6w3CGhg" name="D2"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_xjrvsJtsEeGMQeoeefOsHA" name="E"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_zbOgIJtsEeGMQeoeefOsHA" name="F1"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_egvMQKQJEeGIutN6w3CGhg" name="F2"/>
+</nodes:Node>
diff --git a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e2/left.nodes b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e2/left.nodes
new file mode 100644
index 000000000..c6ba1201f
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e2/left.nodes
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<nodes:Node xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:nodes="http://www.eclipse.org/emf/compare/tests/nodes" xmi:id="_yWc_0JUeEeGiestbncRZoQ" name="Requirements">
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToMany" xmi:id="_m5FOMJtsEeGMQeoeefOsHA" name="C" destination="_njLUEJtsEeGMQeoeefOsHA _W87ckKQJEeGIutN6w3CGhg"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToMany" xmi:id="_njLUEJtsEeGMQeoeefOsHA" name="D1" source="_m5FOMJtsEeGMQeoeefOsHA"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToMany" xmi:id="_W87ckKQJEeGIutN6w3CGhg" name="D2" source="_m5FOMJtsEeGMQeoeefOsHA"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_xjrvsJtsEeGMQeoeefOsHA" name="E" destination="_zbOgIJtsEeGMQeoeefOsHA _egvMQKQJEeGIutN6w3CGhg"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_zbOgIJtsEeGMQeoeefOsHA" name="F1" source="_xjrvsJtsEeGMQeoeefOsHA"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_egvMQKQJEeGIutN6w3CGhg" name="F2" source="_xjrvsJtsEeGMQeoeefOsHA"/>
+</nodes:Node>
diff --git a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e2/right.nodes b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e2/right.nodes
new file mode 100644
index 000000000..908a66331
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e2/right.nodes
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<nodes:Node xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:nodes="http://www.eclipse.org/emf/compare/tests/nodes" xmi:id="_yWc_0JUeEeGiestbncRZoQ" name="Requirements">
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToMany" xmi:id="_m5FOMJtsEeGMQeoeefOsHA" name="C"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToMany" xmi:id="_njLUEJtsEeGMQeoeefOsHA" name="D1"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToMany" xmi:id="_W87ckKQJEeGIutN6w3CGhg" name="D2"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_xjrvsJtsEeGMQeoeefOsHA" name="E"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_zbOgIJtsEeGMQeoeefOsHA" name="F1"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_egvMQKQJEeGIutN6w3CGhg" name="F2"/>
+</nodes:Node>
diff --git a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e3/ancestor.nodes b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e3/ancestor.nodes
new file mode 100644
index 000000000..0ca7842aa
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e3/ancestor.nodes
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<nodes:Node xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:nodes="http://www.eclipse.org/emf/compare/tests/nodes" xmi:id="_yWc_0JUeEeGiestbncRZoQ" name="Requirements">
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_xjrvsJtsEeGMQeoeefOsHA" name="C1"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_KHyT4KS-EeGRGoXThdgijA" name="C2"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_zbOgIJtsEeGMQeoeefOsHA" name="D1"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_egvMQKQJEeGIutN6w3CGhg" name="D2"/>
+</nodes:Node>
diff --git a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e3/left.nodes b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e3/left.nodes
new file mode 100644
index 000000000..ba9085c99
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e3/left.nodes
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<nodes:Node xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:nodes="http://www.eclipse.org/emf/compare/tests/nodes" xmi:id="_yWc_0JUeEeGiestbncRZoQ" name="Requirements">
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_xjrvsJtsEeGMQeoeefOsHA" name="C1" destination="_zbOgIJtsEeGMQeoeefOsHA _egvMQKQJEeGIutN6w3CGhg"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_KHyT4KS-EeGRGoXThdgijA" name="C2" source="_egvMQKQJEeGIutN6w3CGhg" destination="_zbOgIJtsEeGMQeoeefOsHA"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_zbOgIJtsEeGMQeoeefOsHA" name="D1" source="_xjrvsJtsEeGMQeoeefOsHA _KHyT4KS-EeGRGoXThdgijA"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_egvMQKQJEeGIutN6w3CGhg" name="D2" source="_xjrvsJtsEeGMQeoeefOsHA" destination="_KHyT4KS-EeGRGoXThdgijA"/>
+</nodes:Node>
diff --git a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e3/right.nodes b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e3/right.nodes
new file mode 100644
index 000000000..0ca7842aa
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e3/right.nodes
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<nodes:Node xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:nodes="http://www.eclipse.org/emf/compare/tests/nodes" xmi:id="_yWc_0JUeEeGiestbncRZoQ" name="Requirements">
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_xjrvsJtsEeGMQeoeefOsHA" name="C1"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_KHyT4KS-EeGRGoXThdgijA" name="C2"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_zbOgIJtsEeGMQeoeefOsHA" name="D1"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_egvMQKQJEeGIutN6w3CGhg" name="D2"/>
+</nodes:Node>
diff --git a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e4/ancestor.nodes b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e4/ancestor.nodes
new file mode 100644
index 000000000..8ca1ad39b
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e4/ancestor.nodes
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<nodes:Node xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:nodes="http://www.eclipse.org/emf/compare/tests/nodes" xmi:id="_yWc_0JUeEeGiestbncRZoQ" name="Requirements">
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_xjrvsJtsEeGMQeoeefOsHA" name="A"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_KHyT4KS-EeGRGoXThdgijA" name="B"/>
+</nodes:Node>
diff --git a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e4/left.nodes b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e4/left.nodes
new file mode 100644
index 000000000..ce108ca28
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e4/left.nodes
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<nodes:Node xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:nodes="http://www.eclipse.org/emf/compare/tests/nodes" xmi:id="_yWc_0JUeEeGiestbncRZoQ" name="Requirements">
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_xjrvsJtsEeGMQeoeefOsHA" name="A" source="_KHyT4KS-EeGRGoXThdgijA" destination="_KHyT4KS-EeGRGoXThdgijA"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_KHyT4KS-EeGRGoXThdgijA" name="B" source="_xjrvsJtsEeGMQeoeefOsHA" destination="_xjrvsJtsEeGMQeoeefOsHA"/>
+</nodes:Node>
diff --git a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e4/right.nodes b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e4/right.nodes
new file mode 100644
index 000000000..8ca1ad39b
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e4/right.nodes
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<nodes:Node xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:nodes="http://www.eclipse.org/emf/compare/tests/nodes" xmi:id="_yWc_0JUeEeGiestbncRZoQ" name="Requirements">
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_xjrvsJtsEeGMQeoeefOsHA" name="A"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_KHyT4KS-EeGRGoXThdgijA" name="B"/>
+</nodes:Node>
diff --git a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e5/ancestor.nodes b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e5/ancestor.nodes
new file mode 100644
index 000000000..1470bc07d
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e5/ancestor.nodes
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<nodes:Node xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:nodes="http://www.eclipse.org/emf/compare/tests/nodes" xmi:id="_yWc_0JUeEeGiestbncRZoQ" name="Requirements"/>
diff --git a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e5/left.nodes b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e5/left.nodes
new file mode 100644
index 000000000..d3a7808e6
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e5/left.nodes
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<nodes:Node xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:nodes="http://www.eclipse.org/emf/compare/tests/nodes" xmi:id="_yWc_0JUeEeGiestbncRZoQ" name="Requirements">
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_ZB0jcJtsEeGMQeoeefOsHA" name="A" destination="_dRiFIJtsEeGMQeoeefOsHA"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_dRiFIJtsEeGMQeoeefOsHA" name="B" source="_ZB0jcJtsEeGMQeoeefOsHA"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToMany" xmi:id="_m5FOMJtsEeGMQeoeefOsHA" name="C" destination="_njLUEJtsEeGMQeoeefOsHA"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToMany" xmi:id="_njLUEJtsEeGMQeoeefOsHA" name="D" source="_m5FOMJtsEeGMQeoeefOsHA"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_xjrvsJtsEeGMQeoeefOsHA" name="E" destination="_zbOgIJtsEeGMQeoeefOsHA"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_zbOgIJtsEeGMQeoeefOsHA" name="F" source="_xjrvsJtsEeGMQeoeefOsHA"/>
+</nodes:Node>
diff --git a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e5/right.nodes b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e5/right.nodes
new file mode 100644
index 000000000..1470bc07d
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e5/right.nodes
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<nodes:Node xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:nodes="http://www.eclipse.org/emf/compare/tests/nodes" xmi:id="_yWc_0JUeEeGiestbncRZoQ" name="Requirements"/>
diff --git a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e6/ancestor.nodes b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e6/ancestor.nodes
new file mode 100644
index 000000000..3543ffadd
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e6/ancestor.nodes
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<nodes:Node xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:nodes="http://www.eclipse.org/emf/compare/tests/nodes" xmi:id="_yWc_0JUeEeGiestbncRZoQ" name="Requirements">
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_XWsagKZFEeG7yYXQbTfTXQ" name="A" destination="_XpvSUKZFEeG7yYXQbTfTXQ"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_XpvSUKZFEeG7yYXQbTfTXQ" name="B" source="_XWsagKZFEeG7yYXQbTfTXQ"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_YFIN0KZFEeG7yYXQbTfTXQ" name="C"/>
+</nodes:Node>
diff --git a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e6/left.nodes b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e6/left.nodes
new file mode 100644
index 000000000..da0875b4a
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e6/left.nodes
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<nodes:Node xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:nodes="http://www.eclipse.org/emf/compare/tests/nodes" xmi:id="_yWc_0JUeEeGiestbncRZoQ" name="Requirements">
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_XWsagKZFEeG7yYXQbTfTXQ" name="A" destination="_YFIN0KZFEeG7yYXQbTfTXQ"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_XpvSUKZFEeG7yYXQbTfTXQ" name="B"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_YFIN0KZFEeG7yYXQbTfTXQ" name="C" source="_XWsagKZFEeG7yYXQbTfTXQ"/>
+</nodes:Node>
diff --git a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e6/right.nodes b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e6/right.nodes
new file mode 100644
index 000000000..3543ffadd
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e6/right.nodes
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<nodes:Node xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:nodes="http://www.eclipse.org/emf/compare/tests/nodes" xmi:id="_yWc_0JUeEeGiestbncRZoQ" name="Requirements">
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_XWsagKZFEeG7yYXQbTfTXQ" name="A" destination="_XpvSUKZFEeG7yYXQbTfTXQ"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_XpvSUKZFEeG7yYXQbTfTXQ" name="B" source="_XWsagKZFEeG7yYXQbTfTXQ"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_YFIN0KZFEeG7yYXQbTfTXQ" name="C"/>
+</nodes:Node>
diff --git a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e7/ancestor.nodes b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e7/ancestor.nodes
new file mode 100644
index 000000000..8e39a4c1e
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e7/ancestor.nodes
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<nodes:Node xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:nodes="http://www.eclipse.org/emf/compare/tests/nodes" xmi:id="_yWc_0JUeEeGiestbncRZoQ" name="Requirements">
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_XWsagKZFEeG7yYXQbTfTXQ" name="A" destination="_XpvSUKZFEeG7yYXQbTfTXQ"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_XpvSUKZFEeG7yYXQbTfTXQ" name="B" source="_XWsagKZFEeG7yYXQbTfTXQ"/>
+</nodes:Node>
diff --git a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e7/left.nodes b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e7/left.nodes
new file mode 100644
index 000000000..da0875b4a
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e7/left.nodes
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<nodes:Node xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:nodes="http://www.eclipse.org/emf/compare/tests/nodes" xmi:id="_yWc_0JUeEeGiestbncRZoQ" name="Requirements">
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_XWsagKZFEeG7yYXQbTfTXQ" name="A" destination="_YFIN0KZFEeG7yYXQbTfTXQ"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_XpvSUKZFEeG7yYXQbTfTXQ" name="B"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_YFIN0KZFEeG7yYXQbTfTXQ" name="C" source="_XWsagKZFEeG7yYXQbTfTXQ"/>
+</nodes:Node>
diff --git a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e7/right.nodes b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e7/right.nodes
new file mode 100644
index 000000000..8e39a4c1e
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e7/right.nodes
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<nodes:Node xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:nodes="http://www.eclipse.org/emf/compare/tests/nodes" xmi:id="_yWc_0JUeEeGiestbncRZoQ" name="Requirements">
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_XWsagKZFEeG7yYXQbTfTXQ" name="A" destination="_XpvSUKZFEeG7yYXQbTfTXQ"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_XpvSUKZFEeG7yYXQbTfTXQ" name="B" source="_XWsagKZFEeG7yYXQbTfTXQ"/>
+</nodes:Node>
diff --git a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e8/ancestor.nodes b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e8/ancestor.nodes
new file mode 100644
index 000000000..3543ffadd
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e8/ancestor.nodes
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<nodes:Node xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:nodes="http://www.eclipse.org/emf/compare/tests/nodes" xmi:id="_yWc_0JUeEeGiestbncRZoQ" name="Requirements">
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_XWsagKZFEeG7yYXQbTfTXQ" name="A" destination="_XpvSUKZFEeG7yYXQbTfTXQ"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_XpvSUKZFEeG7yYXQbTfTXQ" name="B" source="_XWsagKZFEeG7yYXQbTfTXQ"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_YFIN0KZFEeG7yYXQbTfTXQ" name="C"/>
+</nodes:Node>
diff --git a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e8/left.nodes b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e8/left.nodes
new file mode 100644
index 000000000..18330b548
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e8/left.nodes
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<nodes:Node xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:nodes="http://www.eclipse.org/emf/compare/tests/nodes" xmi:id="_yWc_0JUeEeGiestbncRZoQ" name="Requirements">
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_XWsagKZFEeG7yYXQbTfTXQ" name="A" destination="_YFIN0KZFEeG7yYXQbTfTXQ"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_YFIN0KZFEeG7yYXQbTfTXQ" name="C" source="_XWsagKZFEeG7yYXQbTfTXQ"/>
+</nodes:Node>
diff --git a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e8/right.nodes b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e8/right.nodes
new file mode 100644
index 000000000..3543ffadd
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e8/right.nodes
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<nodes:Node xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:nodes="http://www.eclipse.org/emf/compare/tests/nodes" xmi:id="_yWc_0JUeEeGiestbncRZoQ" name="Requirements">
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_XWsagKZFEeG7yYXQbTfTXQ" name="A" destination="_XpvSUKZFEeG7yYXQbTfTXQ"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_XpvSUKZFEeG7yYXQbTfTXQ" name="B" source="_XWsagKZFEeG7yYXQbTfTXQ"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_YFIN0KZFEeG7yYXQbTfTXQ" name="C"/>
+</nodes:Node>
diff --git a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e9/ancestor.nodes b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e9/ancestor.nodes
new file mode 100644
index 000000000..8e39a4c1e
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e9/ancestor.nodes
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<nodes:Node xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:nodes="http://www.eclipse.org/emf/compare/tests/nodes" xmi:id="_yWc_0JUeEeGiestbncRZoQ" name="Requirements">
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_XWsagKZFEeG7yYXQbTfTXQ" name="A" destination="_XpvSUKZFEeG7yYXQbTfTXQ"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_XpvSUKZFEeG7yYXQbTfTXQ" name="B" source="_XWsagKZFEeG7yYXQbTfTXQ"/>
+</nodes:Node>
diff --git a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e9/left.nodes b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e9/left.nodes
new file mode 100644
index 000000000..18330b548
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e9/left.nodes
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<nodes:Node xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:nodes="http://www.eclipse.org/emf/compare/tests/nodes" xmi:id="_yWc_0JUeEeGiestbncRZoQ" name="Requirements">
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_XWsagKZFEeG7yYXQbTfTXQ" name="A" destination="_YFIN0KZFEeG7yYXQbTfTXQ"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_YFIN0KZFEeG7yYXQbTfTXQ" name="C" source="_XWsagKZFEeG7yYXQbTfTXQ"/>
+</nodes:Node>
diff --git a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e9/right.nodes b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e9/right.nodes
new file mode 100644
index 000000000..8e39a4c1e
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/e9/right.nodes
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<nodes:Node xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:nodes="http://www.eclipse.org/emf/compare/tests/nodes" xmi:id="_yWc_0JUeEeGiestbncRZoQ" name="Requirements">
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_XWsagKZFEeG7yYXQbTfTXQ" name="A" destination="_XpvSUKZFEeG7yYXQbTfTXQ"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_XpvSUKZFEeG7yYXQbTfTXQ" name="B" source="_XWsagKZFEeG7yYXQbTfTXQ"/>
+</nodes:Node>
diff --git a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f1/ancestor.nodes b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f1/ancestor.nodes
new file mode 100644
index 000000000..d3a7808e6
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f1/ancestor.nodes
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<nodes:Node xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:nodes="http://www.eclipse.org/emf/compare/tests/nodes" xmi:id="_yWc_0JUeEeGiestbncRZoQ" name="Requirements">
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_ZB0jcJtsEeGMQeoeefOsHA" name="A" destination="_dRiFIJtsEeGMQeoeefOsHA"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_dRiFIJtsEeGMQeoeefOsHA" name="B" source="_ZB0jcJtsEeGMQeoeefOsHA"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToMany" xmi:id="_m5FOMJtsEeGMQeoeefOsHA" name="C" destination="_njLUEJtsEeGMQeoeefOsHA"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToMany" xmi:id="_njLUEJtsEeGMQeoeefOsHA" name="D" source="_m5FOMJtsEeGMQeoeefOsHA"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_xjrvsJtsEeGMQeoeefOsHA" name="E" destination="_zbOgIJtsEeGMQeoeefOsHA"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_zbOgIJtsEeGMQeoeefOsHA" name="F" source="_xjrvsJtsEeGMQeoeefOsHA"/>
+</nodes:Node>
diff --git a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f1/left.nodes b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f1/left.nodes
new file mode 100644
index 000000000..d3a7808e6
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f1/left.nodes
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<nodes:Node xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:nodes="http://www.eclipse.org/emf/compare/tests/nodes" xmi:id="_yWc_0JUeEeGiestbncRZoQ" name="Requirements">
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_ZB0jcJtsEeGMQeoeefOsHA" name="A" destination="_dRiFIJtsEeGMQeoeefOsHA"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_dRiFIJtsEeGMQeoeefOsHA" name="B" source="_ZB0jcJtsEeGMQeoeefOsHA"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToMany" xmi:id="_m5FOMJtsEeGMQeoeefOsHA" name="C" destination="_njLUEJtsEeGMQeoeefOsHA"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToMany" xmi:id="_njLUEJtsEeGMQeoeefOsHA" name="D" source="_m5FOMJtsEeGMQeoeefOsHA"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_xjrvsJtsEeGMQeoeefOsHA" name="E" destination="_zbOgIJtsEeGMQeoeefOsHA"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_zbOgIJtsEeGMQeoeefOsHA" name="F" source="_xjrvsJtsEeGMQeoeefOsHA"/>
+</nodes:Node>
diff --git a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f1/right.nodes b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f1/right.nodes
new file mode 100644
index 000000000..c2295d20e
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f1/right.nodes
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<nodes:Node xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:nodes="http://www.eclipse.org/emf/compare/tests/nodes" xmi:id="_yWc_0JUeEeGiestbncRZoQ" name="Requirements">
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_ZB0jcJtsEeGMQeoeefOsHA" name="A"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_dRiFIJtsEeGMQeoeefOsHA" name="B"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToMany" xmi:id="_m5FOMJtsEeGMQeoeefOsHA" name="C"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToMany" xmi:id="_njLUEJtsEeGMQeoeefOsHA" name="D"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_xjrvsJtsEeGMQeoeefOsHA" name="E"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_zbOgIJtsEeGMQeoeefOsHA" name="F"/>
+</nodes:Node>
diff --git a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f10/ancestor.nodes b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f10/ancestor.nodes
new file mode 100644
index 000000000..5461b7619
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f10/ancestor.nodes
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<nodes:Node xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:nodes="http://www.eclipse.org/emf/compare/tests/nodes" xmi:id="_yWc_0JUeEeGiestbncRZoQ" name="Requirements">
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_cDHM4KZyEeG7yYXQbTfTXQ" name="A" destination="_eIx44KZyEeG7yYXQbTfTXQ _e9ZzwKZyEeG7yYXQbTfTXQ _o09uwKZyEeG7yYXQbTfTXQ"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_eIx44KZyEeG7yYXQbTfTXQ" name="C" source="_cDHM4KZyEeG7yYXQbTfTXQ _f0yHsKZyEeG7yYXQbTfTXQ"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_e9ZzwKZyEeG7yYXQbTfTXQ" name="D" source="_cDHM4KZyEeG7yYXQbTfTXQ"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_f0yHsKZyEeG7yYXQbTfTXQ" name="F" destination="_eIx44KZyEeG7yYXQbTfTXQ _o09uwKZyEeG7yYXQbTfTXQ"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_o09uwKZyEeG7yYXQbTfTXQ" name="E" source="_cDHM4KZyEeG7yYXQbTfTXQ _f0yHsKZyEeG7yYXQbTfTXQ"/>
+</nodes:Node>
diff --git a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f10/left.nodes b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f10/left.nodes
new file mode 100644
index 000000000..5461b7619
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f10/left.nodes
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<nodes:Node xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:nodes="http://www.eclipse.org/emf/compare/tests/nodes" xmi:id="_yWc_0JUeEeGiestbncRZoQ" name="Requirements">
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_cDHM4KZyEeG7yYXQbTfTXQ" name="A" destination="_eIx44KZyEeG7yYXQbTfTXQ _e9ZzwKZyEeG7yYXQbTfTXQ _o09uwKZyEeG7yYXQbTfTXQ"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_eIx44KZyEeG7yYXQbTfTXQ" name="C" source="_cDHM4KZyEeG7yYXQbTfTXQ _f0yHsKZyEeG7yYXQbTfTXQ"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_e9ZzwKZyEeG7yYXQbTfTXQ" name="D" source="_cDHM4KZyEeG7yYXQbTfTXQ"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_f0yHsKZyEeG7yYXQbTfTXQ" name="F" destination="_eIx44KZyEeG7yYXQbTfTXQ _o09uwKZyEeG7yYXQbTfTXQ"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_o09uwKZyEeG7yYXQbTfTXQ" name="E" source="_cDHM4KZyEeG7yYXQbTfTXQ _f0yHsKZyEeG7yYXQbTfTXQ"/>
+</nodes:Node>
diff --git a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f10/right.nodes b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f10/right.nodes
new file mode 100644
index 000000000..b5fa78353
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f10/right.nodes
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<nodes:Node xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:nodes="http://www.eclipse.org/emf/compare/tests/nodes" xmi:id="_yWc_0JUeEeGiestbncRZoQ" name="Requirements">
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_cDHM4KZyEeG7yYXQbTfTXQ" name="A" destination="_dS-5UKZyEeG7yYXQbTfTXQ _eIx44KZyEeG7yYXQbTfTXQ"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_dS-5UKZyEeG7yYXQbTfTXQ" name="B" source="_cDHM4KZyEeG7yYXQbTfTXQ _f0yHsKZyEeG7yYXQbTfTXQ"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_eIx44KZyEeG7yYXQbTfTXQ" name="C" source="_cDHM4KZyEeG7yYXQbTfTXQ"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_e9ZzwKZyEeG7yYXQbTfTXQ" name="D" source="_f0yHsKZyEeG7yYXQbTfTXQ"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_f0yHsKZyEeG7yYXQbTfTXQ" name="F" destination="_dS-5UKZyEeG7yYXQbTfTXQ _e9ZzwKZyEeG7yYXQbTfTXQ"/>
+</nodes:Node>
diff --git a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f2/ancestor.nodes b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f2/ancestor.nodes
new file mode 100644
index 000000000..c6ba1201f
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f2/ancestor.nodes
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<nodes:Node xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:nodes="http://www.eclipse.org/emf/compare/tests/nodes" xmi:id="_yWc_0JUeEeGiestbncRZoQ" name="Requirements">
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToMany" xmi:id="_m5FOMJtsEeGMQeoeefOsHA" name="C" destination="_njLUEJtsEeGMQeoeefOsHA _W87ckKQJEeGIutN6w3CGhg"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToMany" xmi:id="_njLUEJtsEeGMQeoeefOsHA" name="D1" source="_m5FOMJtsEeGMQeoeefOsHA"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToMany" xmi:id="_W87ckKQJEeGIutN6w3CGhg" name="D2" source="_m5FOMJtsEeGMQeoeefOsHA"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_xjrvsJtsEeGMQeoeefOsHA" name="E" destination="_zbOgIJtsEeGMQeoeefOsHA _egvMQKQJEeGIutN6w3CGhg"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_zbOgIJtsEeGMQeoeefOsHA" name="F1" source="_xjrvsJtsEeGMQeoeefOsHA"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_egvMQKQJEeGIutN6w3CGhg" name="F2" source="_xjrvsJtsEeGMQeoeefOsHA"/>
+</nodes:Node>
diff --git a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f2/left.nodes b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f2/left.nodes
new file mode 100644
index 000000000..c6ba1201f
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f2/left.nodes
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<nodes:Node xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:nodes="http://www.eclipse.org/emf/compare/tests/nodes" xmi:id="_yWc_0JUeEeGiestbncRZoQ" name="Requirements">
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToMany" xmi:id="_m5FOMJtsEeGMQeoeefOsHA" name="C" destination="_njLUEJtsEeGMQeoeefOsHA _W87ckKQJEeGIutN6w3CGhg"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToMany" xmi:id="_njLUEJtsEeGMQeoeefOsHA" name="D1" source="_m5FOMJtsEeGMQeoeefOsHA"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToMany" xmi:id="_W87ckKQJEeGIutN6w3CGhg" name="D2" source="_m5FOMJtsEeGMQeoeefOsHA"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_xjrvsJtsEeGMQeoeefOsHA" name="E" destination="_zbOgIJtsEeGMQeoeefOsHA _egvMQKQJEeGIutN6w3CGhg"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_zbOgIJtsEeGMQeoeefOsHA" name="F1" source="_xjrvsJtsEeGMQeoeefOsHA"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_egvMQKQJEeGIutN6w3CGhg" name="F2" source="_xjrvsJtsEeGMQeoeefOsHA"/>
+</nodes:Node>
diff --git a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f2/right.nodes b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f2/right.nodes
new file mode 100644
index 000000000..908a66331
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f2/right.nodes
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<nodes:Node xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:nodes="http://www.eclipse.org/emf/compare/tests/nodes" xmi:id="_yWc_0JUeEeGiestbncRZoQ" name="Requirements">
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToMany" xmi:id="_m5FOMJtsEeGMQeoeefOsHA" name="C"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToMany" xmi:id="_njLUEJtsEeGMQeoeefOsHA" name="D1"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToMany" xmi:id="_W87ckKQJEeGIutN6w3CGhg" name="D2"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_xjrvsJtsEeGMQeoeefOsHA" name="E"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_zbOgIJtsEeGMQeoeefOsHA" name="F1"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_egvMQKQJEeGIutN6w3CGhg" name="F2"/>
+</nodes:Node>
diff --git a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f3/ancestor.nodes b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f3/ancestor.nodes
new file mode 100644
index 000000000..ba9085c99
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f3/ancestor.nodes
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<nodes:Node xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:nodes="http://www.eclipse.org/emf/compare/tests/nodes" xmi:id="_yWc_0JUeEeGiestbncRZoQ" name="Requirements">
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_xjrvsJtsEeGMQeoeefOsHA" name="C1" destination="_zbOgIJtsEeGMQeoeefOsHA _egvMQKQJEeGIutN6w3CGhg"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_KHyT4KS-EeGRGoXThdgijA" name="C2" source="_egvMQKQJEeGIutN6w3CGhg" destination="_zbOgIJtsEeGMQeoeefOsHA"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_zbOgIJtsEeGMQeoeefOsHA" name="D1" source="_xjrvsJtsEeGMQeoeefOsHA _KHyT4KS-EeGRGoXThdgijA"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_egvMQKQJEeGIutN6w3CGhg" name="D2" source="_xjrvsJtsEeGMQeoeefOsHA" destination="_KHyT4KS-EeGRGoXThdgijA"/>
+</nodes:Node>
diff --git a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f3/left.nodes b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f3/left.nodes
new file mode 100644
index 000000000..ba9085c99
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f3/left.nodes
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<nodes:Node xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:nodes="http://www.eclipse.org/emf/compare/tests/nodes" xmi:id="_yWc_0JUeEeGiestbncRZoQ" name="Requirements">
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_xjrvsJtsEeGMQeoeefOsHA" name="C1" destination="_zbOgIJtsEeGMQeoeefOsHA _egvMQKQJEeGIutN6w3CGhg"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_KHyT4KS-EeGRGoXThdgijA" name="C2" source="_egvMQKQJEeGIutN6w3CGhg" destination="_zbOgIJtsEeGMQeoeefOsHA"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_zbOgIJtsEeGMQeoeefOsHA" name="D1" source="_xjrvsJtsEeGMQeoeefOsHA _KHyT4KS-EeGRGoXThdgijA"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_egvMQKQJEeGIutN6w3CGhg" name="D2" source="_xjrvsJtsEeGMQeoeefOsHA" destination="_KHyT4KS-EeGRGoXThdgijA"/>
+</nodes:Node>
diff --git a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f3/right.nodes b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f3/right.nodes
new file mode 100644
index 000000000..0ca7842aa
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f3/right.nodes
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<nodes:Node xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:nodes="http://www.eclipse.org/emf/compare/tests/nodes" xmi:id="_yWc_0JUeEeGiestbncRZoQ" name="Requirements">
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_xjrvsJtsEeGMQeoeefOsHA" name="C1"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_KHyT4KS-EeGRGoXThdgijA" name="C2"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_zbOgIJtsEeGMQeoeefOsHA" name="D1"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_egvMQKQJEeGIutN6w3CGhg" name="D2"/>
+</nodes:Node>
diff --git a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f4/ancestor.nodes b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f4/ancestor.nodes
new file mode 100644
index 000000000..ce108ca28
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f4/ancestor.nodes
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<nodes:Node xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:nodes="http://www.eclipse.org/emf/compare/tests/nodes" xmi:id="_yWc_0JUeEeGiestbncRZoQ" name="Requirements">
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_xjrvsJtsEeGMQeoeefOsHA" name="A" source="_KHyT4KS-EeGRGoXThdgijA" destination="_KHyT4KS-EeGRGoXThdgijA"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_KHyT4KS-EeGRGoXThdgijA" name="B" source="_xjrvsJtsEeGMQeoeefOsHA" destination="_xjrvsJtsEeGMQeoeefOsHA"/>
+</nodes:Node>
diff --git a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f4/left.nodes b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f4/left.nodes
new file mode 100644
index 000000000..ce108ca28
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f4/left.nodes
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<nodes:Node xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:nodes="http://www.eclipse.org/emf/compare/tests/nodes" xmi:id="_yWc_0JUeEeGiestbncRZoQ" name="Requirements">
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_xjrvsJtsEeGMQeoeefOsHA" name="A" source="_KHyT4KS-EeGRGoXThdgijA" destination="_KHyT4KS-EeGRGoXThdgijA"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_KHyT4KS-EeGRGoXThdgijA" name="B" source="_xjrvsJtsEeGMQeoeefOsHA" destination="_xjrvsJtsEeGMQeoeefOsHA"/>
+</nodes:Node>
diff --git a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f4/right.nodes b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f4/right.nodes
new file mode 100644
index 000000000..8ca1ad39b
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f4/right.nodes
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<nodes:Node xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:nodes="http://www.eclipse.org/emf/compare/tests/nodes" xmi:id="_yWc_0JUeEeGiestbncRZoQ" name="Requirements">
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_xjrvsJtsEeGMQeoeefOsHA" name="A"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_KHyT4KS-EeGRGoXThdgijA" name="B"/>
+</nodes:Node>
diff --git a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f5/ancestor.nodes b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f5/ancestor.nodes
new file mode 100644
index 000000000..d3a7808e6
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f5/ancestor.nodes
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<nodes:Node xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:nodes="http://www.eclipse.org/emf/compare/tests/nodes" xmi:id="_yWc_0JUeEeGiestbncRZoQ" name="Requirements">
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_ZB0jcJtsEeGMQeoeefOsHA" name="A" destination="_dRiFIJtsEeGMQeoeefOsHA"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_dRiFIJtsEeGMQeoeefOsHA" name="B" source="_ZB0jcJtsEeGMQeoeefOsHA"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToMany" xmi:id="_m5FOMJtsEeGMQeoeefOsHA" name="C" destination="_njLUEJtsEeGMQeoeefOsHA"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToMany" xmi:id="_njLUEJtsEeGMQeoeefOsHA" name="D" source="_m5FOMJtsEeGMQeoeefOsHA"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_xjrvsJtsEeGMQeoeefOsHA" name="E" destination="_zbOgIJtsEeGMQeoeefOsHA"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_zbOgIJtsEeGMQeoeefOsHA" name="F" source="_xjrvsJtsEeGMQeoeefOsHA"/>
+</nodes:Node>
diff --git a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f5/left.nodes b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f5/left.nodes
new file mode 100644
index 000000000..d3a7808e6
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f5/left.nodes
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<nodes:Node xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:nodes="http://www.eclipse.org/emf/compare/tests/nodes" xmi:id="_yWc_0JUeEeGiestbncRZoQ" name="Requirements">
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_ZB0jcJtsEeGMQeoeefOsHA" name="A" destination="_dRiFIJtsEeGMQeoeefOsHA"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_dRiFIJtsEeGMQeoeefOsHA" name="B" source="_ZB0jcJtsEeGMQeoeefOsHA"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToMany" xmi:id="_m5FOMJtsEeGMQeoeefOsHA" name="C" destination="_njLUEJtsEeGMQeoeefOsHA"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToMany" xmi:id="_njLUEJtsEeGMQeoeefOsHA" name="D" source="_m5FOMJtsEeGMQeoeefOsHA"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_xjrvsJtsEeGMQeoeefOsHA" name="E" destination="_zbOgIJtsEeGMQeoeefOsHA"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefManyToMany" xmi:id="_zbOgIJtsEeGMQeoeefOsHA" name="F" source="_xjrvsJtsEeGMQeoeefOsHA"/>
+</nodes:Node>
diff --git a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f5/right.nodes b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f5/right.nodes
new file mode 100644
index 000000000..1470bc07d
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f5/right.nodes
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<nodes:Node xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:nodes="http://www.eclipse.org/emf/compare/tests/nodes" xmi:id="_yWc_0JUeEeGiestbncRZoQ" name="Requirements"/>
diff --git a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f6/ancestor.nodes b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f6/ancestor.nodes
new file mode 100644
index 000000000..da0875b4a
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f6/ancestor.nodes
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<nodes:Node xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:nodes="http://www.eclipse.org/emf/compare/tests/nodes" xmi:id="_yWc_0JUeEeGiestbncRZoQ" name="Requirements">
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_XWsagKZFEeG7yYXQbTfTXQ" name="A" destination="_YFIN0KZFEeG7yYXQbTfTXQ"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_XpvSUKZFEeG7yYXQbTfTXQ" name="B"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_YFIN0KZFEeG7yYXQbTfTXQ" name="C" source="_XWsagKZFEeG7yYXQbTfTXQ"/>
+</nodes:Node>
diff --git a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f6/left.nodes b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f6/left.nodes
new file mode 100644
index 000000000..da0875b4a
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f6/left.nodes
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<nodes:Node xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:nodes="http://www.eclipse.org/emf/compare/tests/nodes" xmi:id="_yWc_0JUeEeGiestbncRZoQ" name="Requirements">
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_XWsagKZFEeG7yYXQbTfTXQ" name="A" destination="_YFIN0KZFEeG7yYXQbTfTXQ"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_XpvSUKZFEeG7yYXQbTfTXQ" name="B"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_YFIN0KZFEeG7yYXQbTfTXQ" name="C" source="_XWsagKZFEeG7yYXQbTfTXQ"/>
+</nodes:Node>
diff --git a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f6/right.nodes b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f6/right.nodes
new file mode 100644
index 000000000..3543ffadd
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f6/right.nodes
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<nodes:Node xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:nodes="http://www.eclipse.org/emf/compare/tests/nodes" xmi:id="_yWc_0JUeEeGiestbncRZoQ" name="Requirements">
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_XWsagKZFEeG7yYXQbTfTXQ" name="A" destination="_XpvSUKZFEeG7yYXQbTfTXQ"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_XpvSUKZFEeG7yYXQbTfTXQ" name="B" source="_XWsagKZFEeG7yYXQbTfTXQ"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_YFIN0KZFEeG7yYXQbTfTXQ" name="C"/>
+</nodes:Node>
diff --git a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f7/ancestor.nodes b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f7/ancestor.nodes
new file mode 100644
index 000000000..da0875b4a
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f7/ancestor.nodes
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<nodes:Node xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:nodes="http://www.eclipse.org/emf/compare/tests/nodes" xmi:id="_yWc_0JUeEeGiestbncRZoQ" name="Requirements">
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_XWsagKZFEeG7yYXQbTfTXQ" name="A" destination="_YFIN0KZFEeG7yYXQbTfTXQ"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_XpvSUKZFEeG7yYXQbTfTXQ" name="B"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_YFIN0KZFEeG7yYXQbTfTXQ" name="C" source="_XWsagKZFEeG7yYXQbTfTXQ"/>
+</nodes:Node>
diff --git a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f7/left.nodes b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f7/left.nodes
new file mode 100644
index 000000000..da0875b4a
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f7/left.nodes
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<nodes:Node xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:nodes="http://www.eclipse.org/emf/compare/tests/nodes" xmi:id="_yWc_0JUeEeGiestbncRZoQ" name="Requirements">
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_XWsagKZFEeG7yYXQbTfTXQ" name="A" destination="_YFIN0KZFEeG7yYXQbTfTXQ"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_XpvSUKZFEeG7yYXQbTfTXQ" name="B"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_YFIN0KZFEeG7yYXQbTfTXQ" name="C" source="_XWsagKZFEeG7yYXQbTfTXQ"/>
+</nodes:Node>
diff --git a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f7/right.nodes b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f7/right.nodes
new file mode 100644
index 000000000..8e39a4c1e
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f7/right.nodes
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<nodes:Node xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:nodes="http://www.eclipse.org/emf/compare/tests/nodes" xmi:id="_yWc_0JUeEeGiestbncRZoQ" name="Requirements">
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_XWsagKZFEeG7yYXQbTfTXQ" name="A" destination="_XpvSUKZFEeG7yYXQbTfTXQ"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_XpvSUKZFEeG7yYXQbTfTXQ" name="B" source="_XWsagKZFEeG7yYXQbTfTXQ"/>
+</nodes:Node>
diff --git a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f8/ancestor.nodes b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f8/ancestor.nodes
new file mode 100644
index 000000000..18330b548
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f8/ancestor.nodes
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<nodes:Node xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:nodes="http://www.eclipse.org/emf/compare/tests/nodes" xmi:id="_yWc_0JUeEeGiestbncRZoQ" name="Requirements">
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_XWsagKZFEeG7yYXQbTfTXQ" name="A" destination="_YFIN0KZFEeG7yYXQbTfTXQ"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_YFIN0KZFEeG7yYXQbTfTXQ" name="C" source="_XWsagKZFEeG7yYXQbTfTXQ"/>
+</nodes:Node>
diff --git a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f8/left.nodes b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f8/left.nodes
new file mode 100644
index 000000000..18330b548
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f8/left.nodes
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<nodes:Node xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:nodes="http://www.eclipse.org/emf/compare/tests/nodes" xmi:id="_yWc_0JUeEeGiestbncRZoQ" name="Requirements">
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_XWsagKZFEeG7yYXQbTfTXQ" name="A" destination="_YFIN0KZFEeG7yYXQbTfTXQ"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_YFIN0KZFEeG7yYXQbTfTXQ" name="C" source="_XWsagKZFEeG7yYXQbTfTXQ"/>
+</nodes:Node>
diff --git a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f8/right.nodes b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f8/right.nodes
new file mode 100644
index 000000000..3543ffadd
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f8/right.nodes
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<nodes:Node xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:nodes="http://www.eclipse.org/emf/compare/tests/nodes" xmi:id="_yWc_0JUeEeGiestbncRZoQ" name="Requirements">
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_XWsagKZFEeG7yYXQbTfTXQ" name="A" destination="_XpvSUKZFEeG7yYXQbTfTXQ"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_XpvSUKZFEeG7yYXQbTfTXQ" name="B" source="_XWsagKZFEeG7yYXQbTfTXQ"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_YFIN0KZFEeG7yYXQbTfTXQ" name="C"/>
+</nodes:Node>
diff --git a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f9/ancestor.nodes b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f9/ancestor.nodes
new file mode 100644
index 000000000..18330b548
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f9/ancestor.nodes
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<nodes:Node xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:nodes="http://www.eclipse.org/emf/compare/tests/nodes" xmi:id="_yWc_0JUeEeGiestbncRZoQ" name="Requirements">
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_XWsagKZFEeG7yYXQbTfTXQ" name="A" destination="_YFIN0KZFEeG7yYXQbTfTXQ"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_YFIN0KZFEeG7yYXQbTfTXQ" name="C" source="_XWsagKZFEeG7yYXQbTfTXQ"/>
+</nodes:Node>
diff --git a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f9/left.nodes b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f9/left.nodes
new file mode 100644
index 000000000..18330b548
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f9/left.nodes
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<nodes:Node xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:nodes="http://www.eclipse.org/emf/compare/tests/nodes" xmi:id="_yWc_0JUeEeGiestbncRZoQ" name="Requirements">
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_XWsagKZFEeG7yYXQbTfTXQ" name="A" destination="_YFIN0KZFEeG7yYXQbTfTXQ"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_YFIN0KZFEeG7yYXQbTfTXQ" name="C" source="_XWsagKZFEeG7yYXQbTfTXQ"/>
+</nodes:Node>
diff --git a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f9/right.nodes b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f9/right.nodes
new file mode 100644
index 000000000..8e39a4c1e
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/f9/right.nodes
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<nodes:Node xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:nodes="http://www.eclipse.org/emf/compare/tests/nodes" xmi:id="_yWc_0JUeEeGiestbncRZoQ" name="Requirements">
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_XWsagKZFEeG7yYXQbTfTXQ" name="A" destination="_XpvSUKZFEeG7yYXQbTfTXQ"/>
+ <containmentRef1 xsi:type="nodes:NodeOppositeRefOneToOne" xmi:id="_XpvSUKZFEeG7yYXQbTfTXQ" name="B" source="_XWsagKZFEeG7yYXQbTfTXQ"/>
+</nodes:Node>
diff --git a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/useCases b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/useCases
index e32370424..4664e0f04 100644
--- a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/useCases
+++ b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/equi/data/useCases
@@ -1,9 +1,24 @@
-This will try and list all possible "dependence" cases that can happen in a model comparison. For each use case, we will consider
+This will try and list all possible "equivalence" cases that can happen in a model comparison. For each use case, we will consider
two models, "left" and "right".
-a - 2-ways comparison
+a - 2-ways comparison - null to value
a1 - 1-1 relation
a2 - 1-n relation
- a3 - n-1 relation
- a4 - n-n relation
+ a3 - n-n relation
+ a4 - recursive relation
+ a5 - reference to new objects
+
+b - 2-ways comparison - value to null
+
+c - 2-ways comparison - change values
+ c1 - change from and to existing objects
+ c2 - change from existing object to an added one
+ c3 - change from a deleted object to an existing one
+ c4 - change from a deleted object to an added one
+
+d - 2-ways comparison - multiple changes
+
+e - 3 ways - left changes
+
+f - 3 ways - right changes
diff --git a/plugins/org.eclipse.emf.compare/src/org/eclipse/emf/compare/equi/DefaultEquiEngine.java b/plugins/org.eclipse.emf.compare/src/org/eclipse/emf/compare/equi/DefaultEquiEngine.java
index 05166fcee..ebeb3dda4 100644
--- a/plugins/org.eclipse.emf.compare/src/org/eclipse/emf/compare/equi/DefaultEquiEngine.java
+++ b/plugins/org.eclipse.emf.compare/src/org/eclipse/emf/compare/equi/DefaultEquiEngine.java
@@ -10,6 +10,7 @@
*******************************************************************************/
package org.eclipse.emf.compare.equi;
+import java.util.Iterator;
import java.util.Set;
import org.eclipse.emf.compare.CompareFactory;
@@ -17,9 +18,11 @@ import org.eclipse.emf.compare.ComparePackage;
import org.eclipse.emf.compare.Comparison;
import org.eclipse.emf.compare.Diff;
import org.eclipse.emf.compare.Equivalence;
+import org.eclipse.emf.compare.MatchResource;
import org.eclipse.emf.compare.ReferenceChange;
import org.eclipse.emf.compare.utils.ReferenceUtil;
-import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.util.EcoreUtil;
/**
@@ -79,25 +82,144 @@ public class DefaultEquiEngine implements IEquiEngine {
* The difference that is to be checked
*/
protected void checkForEquivalences(Comparison comparison, Diff difference) {
- if (difference instanceof ReferenceChange) {
+ // If reference change on an opposite reference
+ if (difference instanceof ReferenceChange
+ && ((ReferenceChange)difference).getReference().getEOpposite() != null) {
+
ReferenceChange diff = (ReferenceChange)difference;
- if (diff.getReference().getEOpposite() != null) {
- Equivalence equivalence = diff.getEquivalence();
- if (equivalence == null) {
- equivalence = CompareFactory.eINSTANCE.createEquivalence();
- comparison.getEquivalences().add(equivalence);
- equivalence.getDifferences().add(difference);
- // Find the opposite difference to reference it from the equivalence:
- EReference oppositeReference = diff.getReference().getEOpposite();
- Set<Diff> equivalentDifferences = ReferenceUtil.getCrossReferences(
- crossReferencerModelObjectsToDiffs, oppositeReference, ComparePackage.eINSTANCE
- .getReferenceChange_Reference(), Diff.class);
- for (Diff eqDiff : equivalentDifferences) {
- equivalence.getDifferences().add(eqDiff);
+
+ Equivalence equivalence = diff.getEquivalence();
+ if (equivalence == null) {
+ // If no equivalence, create one
+ equivalence = CompareFactory.eINSTANCE.createEquivalence();
+ comparison.getEquivalences().add(equivalence);
+
+ // Add the current difference to the equivalence
+ equivalence.getDifferences().add(diff);
+
+ /*
+ * Add the difference where the value is the object containing the current difference, which
+ * is contained by the value of the current difference, where the reference is linked to the
+ * opposite one
+ */
+ Set<ReferenceChange> equivalentDifferences = ReferenceUtil.getCrossReferences(
+ crossReferencerModelObjectsToDiffs, getObjectContainingDifference(diff, comparison),
+ ComparePackage.eINSTANCE.getReferenceChange_Value(), ReferenceChange.class);
+ for (ReferenceChange referenceChange : equivalentDifferences) {
+ if (referenceChange.getReference().getEOpposite() != null
+ && referenceChange.getReference().getEOpposite().equals(diff.getReference())
+ && diff.getValue().equals(
+ getObjectContainingDifference(referenceChange, comparison))) {
+ equivalence.getDifferences().add(referenceChange);
+ break;
}
}
+
+ // Add the change differences on the old references (origin)
+ addChangesFromOrigin(comparison, diff, equivalence);
+ }
+ }
+ }
+
+ /**
+ * Add to the given <code>equivalence</code> potential changes based on the same reference as the given
+ * <code>diff</code>.
+ *
+ * @param comparison
+ * The comparison which enable to know from which side come the business model objects owning
+ * the differences.
+ * @param diff
+ * The current difference.
+ * @param equivalence
+ * The current equivalence attached to the difference.
+ */
+ private void addChangesFromOrigin(Comparison comparison, ReferenceChange diff, Equivalence equivalence) {
+ if (!diff.getReference().isMany()) {
+ EObject diffContainer = getObjectContainingDifference(diff, comparison);
+ if (comparison.isThreeWay()) {
+ diffContainer = diff.getMatch().getOrigin();
+ } else {
+ if (diffContainer.equals(diff.getMatch().getLeft())) {
+ diffContainer = diff.getMatch().getRight();
+ } else {
+ diffContainer = diff.getMatch().getLeft();
+ }
+ }
+ Set<ReferenceChange> equivalentDifferences2 = ReferenceUtil.getCrossReferences(
+ crossReferencerModelObjectsToDiffs, diffContainer, ComparePackage.eINSTANCE
+ .getReferenceChange_Value(), ReferenceChange.class);
+
+ for (ReferenceChange referenceChange : equivalentDifferences2) {
+ if (getObjectContainingDifference(referenceChange, comparison).equals(
+ diffContainer.eGet(diff.getReference()))) {
+ equivalence.getDifferences().add(referenceChange);
+ }
+ }
+ }
+ }
+
+ /**
+ * Get the business model object containing the given <code>difference</code>.
+ *
+ * @param difference
+ * The difference.
+ * @param comparison
+ * The comparison.
+ * @return The object.
+ */
+ private static EObject getObjectContainingDifference(ReferenceChange difference, Comparison comparison) {
+ EObject result = null;
+ final EObject obj = difference.getValue();
+ if (getSide(comparison, obj).equals(Side.LEFT)) {
+ result = difference.getMatch().getLeft();
+ } else if (getSide(comparison, obj).equals(Side.RIGHT)) {
+ result = difference.getMatch().getRight();
+ } else if (getSide(comparison, obj).equals(Side.ORIGIN)) {
+ result = difference.getMatch().getOrigin();
+ }
+ return result;
+ }
+
+ /**
+ * Enumerated type enabling to know from which side come an object.
+ *
+ * @author cnotot
+ */
+ // CHECKSTYLE:OFF
+ private enum Side {
+ LEFT, RIGHT, ORIGIN, NOWHERE
+ }
+
+ // CHECKSTYLE:ON
+
+ /**
+ * Return the side where is located the given object <code>obj</code>.
+ *
+ * @param comparison
+ * The comparison which enable to know from which side come the business model objects owning
+ * the differences.
+ * @param obj
+ * The object to request.
+ * @return The side where is located the object.
+ */
+ private static Side getSide(Comparison comparison, EObject obj) {
+ Side result = Side.NOWHERE;
+ final Iterator<MatchResource> matchResources = comparison.getMatchedResources().iterator();
+ while (matchResources.hasNext()) {
+ MatchResource matchResource = matchResources.next();
+ Resource left = matchResource.getLeft();
+ Resource right = matchResource.getRight();
+ Resource origin = matchResource.getOrigin();
+ if (obj.eResource().equals(left)) {
+ result = Side.LEFT;
+ } else if (obj.eResource().equals(right)) {
+ result = Side.RIGHT;
+ } else if (obj.eResource().equals(origin)) {
+ result = Side.ORIGIN;
}
}
+ return result;
+
}
}

Back to the top