Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOlivier Constant2016-12-09 13:12:45 +0000
committerOlivier Constant2017-09-05 13:43:59 +0000
commit156da1e71262de58daebb955683f3894bda7e031 (patch)
tree9f6036da454aa11244b3cce7d08d3ba9d8768380 /tests/org.eclipse.emf.diffmerge.structures.model
parent74a827c535c7a18b8eabb1ff3b412b0eefab0964 (diff)
downloadorg.eclipse.emf.diffmerge.core-156da1e71262de58daebb955683f3894bda7e031.tar.gz
org.eclipse.emf.diffmerge.core-156da1e71262de58daebb955683f3894bda7e031.tar.xz
org.eclipse.emf.diffmerge.core-156da1e71262de58daebb955683f3894bda7e031.zip
Bug 521872 - Extend relation data structures with memoization and recursive definitions
Change-Id: I2a340d34e56479506ce8e69b103f74bd094516e5 Signed-off-by: Olivier Constant <olivier.constant@thalesgroup.com>
Diffstat (limited to 'tests/org.eclipse.emf.diffmerge.structures.model')
-rw-r--r--tests/org.eclipse.emf.diffmerge.structures.model/.classpath7
-rw-r--r--tests/org.eclipse.emf.diffmerge.structures.model/.project28
-rw-r--r--tests/org.eclipse.emf.diffmerge.structures.model/.settings/org.eclipse.jdt.core.prefs104
-rw-r--r--tests/org.eclipse.emf.diffmerge.structures.model/META-INF/MANIFEST.MF18
-rw-r--r--tests/org.eclipse.emf.diffmerge.structures.model/build.properties10
-rw-r--r--tests/org.eclipse.emf.diffmerge.structures.model/model/EGraphs.ecore24
-rw-r--r--tests/org.eclipse.emf.diffmerge.structures.model/model/EGraphs.genmodel26
-rw-r--r--tests/org.eclipse.emf.diffmerge.structures.model/plugin.properties9
-rw-r--r--tests/org.eclipse.emf.diffmerge.structures.model/plugin.xml25
-rw-r--r--tests/org.eclipse.emf.diffmerge.structures.model/src/org/eclipse/emf/diffmerge/structures/model/egraphs/EGraph.java54
-rw-r--r--tests/org.eclipse.emf.diffmerge.structures.model/src/org/eclipse/emf/diffmerge/structures/model/egraphs/EGraphsFactory.java72
-rw-r--r--tests/org.eclipse.emf.diffmerge.structures.model/src/org/eclipse/emf/diffmerge/structures/model/egraphs/EGraphsPackage.java437
-rw-r--r--tests/org.eclipse.emf.diffmerge.structures.model/src/org/eclipse/emf/diffmerge/structures/model/egraphs/EHyperEdge.java112
-rw-r--r--tests/org.eclipse.emf.diffmerge.structures.model/src/org/eclipse/emf/diffmerge/structures/model/egraphs/ENode.java102
-rw-r--r--tests/org.eclipse.emf.diffmerge.structures.model/src/org/eclipse/emf/diffmerge/structures/model/egraphs/impl/EGraphImpl.java163
-rw-r--r--tests/org.eclipse.emf.diffmerge.structures.model/src/org/eclipse/emf/diffmerge/structures/model/egraphs/impl/EGraphsFactoryImpl.java129
-rw-r--r--tests/org.eclipse.emf.diffmerge.structures.model/src/org/eclipse/emf/diffmerge/structures/model/egraphs/impl/EGraphsPackageImpl.java298
-rw-r--r--tests/org.eclipse.emf.diffmerge.structures.model/src/org/eclipse/emf/diffmerge/structures/model/egraphs/impl/EHyperEdgeImpl.java320
-rw-r--r--tests/org.eclipse.emf.diffmerge.structures.model/src/org/eclipse/emf/diffmerge/structures/model/egraphs/impl/ENodeImpl.java286
-rw-r--r--tests/org.eclipse.emf.diffmerge.structures.model/src/org/eclipse/emf/diffmerge/structures/model/egraphs/util/EGraphsAdapterFactory.java168
-rw-r--r--tests/org.eclipse.emf.diffmerge.structures.model/src/org/eclipse/emf/diffmerge/structures/model/egraphs/util/EGraphsResourceFactoryImpl.java53
-rw-r--r--tests/org.eclipse.emf.diffmerge.structures.model/src/org/eclipse/emf/diffmerge/structures/model/egraphs/util/EGraphsResourceImpl.java40
-rw-r--r--tests/org.eclipse.emf.diffmerge.structures.model/src/org/eclipse/emf/diffmerge/structures/model/egraphs/util/EGraphsSwitch.java180
-rw-r--r--tests/org.eclipse.emf.diffmerge.structures.model/src/org/eclipse/emf/diffmerge/structures/model/integration/EImpact.java60
-rw-r--r--tests/org.eclipse.emf.diffmerge.structures.model/src/org/eclipse/emf/diffmerge/structures/model/integration/EImpactExploredSubset.java69
-rw-r--r--tests/org.eclipse.emf.diffmerge.structures.model/src/org/eclipse/emf/diffmerge/structures/model/integration/GraphQBinaryRelation.java472
26 files changed, 3266 insertions, 0 deletions
diff --git a/tests/org.eclipse.emf.diffmerge.structures.model/.classpath b/tests/org.eclipse.emf.diffmerge.structures.model/.classpath
new file mode 100644
index 00000000..304e8618
--- /dev/null
+++ b/tests/org.eclipse.emf.diffmerge.structures.model/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/tests/org.eclipse.emf.diffmerge.structures.model/.project b/tests/org.eclipse.emf.diffmerge.structures.model/.project
new file mode 100644
index 00000000..8fc4e4c8
--- /dev/null
+++ b/tests/org.eclipse.emf.diffmerge.structures.model/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.emf.diffmerge.structures.model</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ </natures>
+</projectDescription>
diff --git a/tests/org.eclipse.emf.diffmerge.structures.model/.settings/org.eclipse.jdt.core.prefs b/tests/org.eclipse.emf.diffmerge.structures.model/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 00000000..8d8f0632
--- /dev/null
+++ b/tests/org.eclipse.emf.diffmerge.structures.model/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,104 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled
+org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
+org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
+org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
+org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
+org.eclipse.jdt.core.compiler.doc.comment.support=enabled
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.autoboxing=warning
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
+org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=ignore
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=ignore
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=ignore
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=protected
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=private
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=return_tag
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsMethodTypeParameters=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=protected
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=disabled
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning
+org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
+org.eclipse.jdt.core.compiler.problem.nullReference=error
+org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
+org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning
+org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=warning
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
+org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning
+org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=ignore
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=enabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=ignore
+org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedExceptionParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
diff --git a/tests/org.eclipse.emf.diffmerge.structures.model/META-INF/MANIFEST.MF b/tests/org.eclipse.emf.diffmerge.structures.model/META-INF/MANIFEST.MF
new file mode 100644
index 00000000..8019d883
--- /dev/null
+++ b/tests/org.eclipse.emf.diffmerge.structures.model/META-INF/MANIFEST.MF
@@ -0,0 +1,18 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.emf.diffmerge.structures.model;singleton:=true
+Bundle-Version: 0.9.0.qualifier
+Bundle-ClassPath: .
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.emf.ecore;visibility:=reexport,
+ org.eclipse.emf.ecore.xmi;visibility:=reexport,
+ org.eclipse.emf.diffmerge.ui;visibility:=reexport
+Bundle-ActivationPolicy: lazy
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Export-Package: org.eclipse.emf.diffmerge.structures.model.integration,
+ org.eclipse.emf.diffmerge.structures.model.egraphs,
+ org.eclipse.emf.diffmerge.structures.model.egraphs.impl,
+ org.eclipse.emf.diffmerge.structures.model.egraphs.util
diff --git a/tests/org.eclipse.emf.diffmerge.structures.model/build.properties b/tests/org.eclipse.emf.diffmerge.structures.model/build.properties
new file mode 100644
index 00000000..4465407f
--- /dev/null
+++ b/tests/org.eclipse.emf.diffmerge.structures.model/build.properties
@@ -0,0 +1,10 @@
+#
+
+bin.includes = .,\
+ model/,\
+ META-INF/,\
+ plugin.xml,\
+ plugin.properties
+jars.compile.order = .
+source.. = src/
+output.. = bin/
diff --git a/tests/org.eclipse.emf.diffmerge.structures.model/model/EGraphs.ecore b/tests/org.eclipse.emf.diffmerge.structures.model/model/EGraphs.ecore
new file mode 100644
index 00000000..ae5a981e
--- /dev/null
+++ b/tests/org.eclipse.emf.diffmerge.structures.model/model/EGraphs.ecore
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ecore:EPackage xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="egraphs" nsURI="http://www.eclipse.org/emf/diffmerge/structures/egraphs/1.0.0"
+ nsPrefix="org.eclipse.emf.diffmerge.structures.model">
+ <eClassifiers xsi:type="ecore:EClass" name="EGraph">
+ <eStructuralFeatures xsi:type="ecore:EReference" name="contents" upperBound="-1"
+ eType="#//ENode" containment="true"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="ENode">
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="element" lowerBound="1"
+ eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="outgoing" upperBound="-1"
+ eType="#//EHyperEdge" containment="true" eOpposite="#//EHyperEdge/source"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="incoming" upperBound="-1"
+ eType="#//EHyperEdge" eOpposite="#//EHyperEdge/targets"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="EHyperEdge">
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="label" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="source" lowerBound="1"
+ eType="#//ENode" eOpposite="#//ENode/outgoing"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="targets" upperBound="-1"
+ eType="#//ENode" eOpposite="#//ENode/incoming"/>
+ </eClassifiers>
+</ecore:EPackage>
diff --git a/tests/org.eclipse.emf.diffmerge.structures.model/model/EGraphs.genmodel b/tests/org.eclipse.emf.diffmerge.structures.model/model/EGraphs.genmodel
new file mode 100644
index 00000000..bd3991b7
--- /dev/null
+++ b/tests/org.eclipse.emf.diffmerge.structures.model/model/EGraphs.genmodel
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<genmodel:GenModel xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore"
+ xmlns:genmodel="http://www.eclipse.org/emf/2002/GenModel" modelDirectory="/org.eclipse.emf.diffmerge.structures.model/src"
+ modelPluginID="org.eclipse.emf.diffmerge.structures.model" modelName="EGraphs"
+ rootExtendsClass="org.eclipse.emf.ecore.impl.MinimalEObjectImpl$Container" rootImplementsInterface=""
+ importerID="org.eclipse.emf.importer.ecore" complianceLevel="5.0" copyrightFields="false"
+ runtimeVersion="2.6" operationReflection="true" importOrganizing="true">
+ <foreignModel>EGraphs.ecore</foreignModel>
+ <genPackages prefix="EGraphs" basePackage="org.eclipse.emf.diffmerge.structures.model"
+ resource="XMI" disposableProviderFactory="true" contentTypeIdentifier="" fileExtensions="egraphs"
+ ecorePackage="EGraphs.ecore#/">
+ <genClasses ecoreClass="EGraphs.ecore#//EGraph">
+ <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference EGraphs.ecore#//EGraph/contents"/>
+ </genClasses>
+ <genClasses ecoreClass="EGraphs.ecore#//ENode">
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute EGraphs.ecore#//ENode/element"/>
+ <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference EGraphs.ecore#//ENode/outgoing"/>
+ <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference EGraphs.ecore#//ENode/incoming"/>
+ </genClasses>
+ <genClasses ecoreClass="EGraphs.ecore#//EHyperEdge">
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute EGraphs.ecore#//EHyperEdge/label"/>
+ <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference EGraphs.ecore#//EHyperEdge/source"/>
+ <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference EGraphs.ecore#//EHyperEdge/targets"/>
+ </genClasses>
+ </genPackages>
+</genmodel:GenModel>
diff --git a/tests/org.eclipse.emf.diffmerge.structures.model/plugin.properties b/tests/org.eclipse.emf.diffmerge.structures.model/plugin.properties
new file mode 100644
index 00000000..50dba550
--- /dev/null
+++ b/tests/org.eclipse.emf.diffmerge.structures.model/plugin.properties
@@ -0,0 +1,9 @@
+###############################################################################
+# Copyright (c) 2017 Thales Global Services S.A.S.
+# 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
+###############################################################################
+pluginName = EMF Diff/Merge Structures Model Plug-In (Incubation)
+providerName = Eclipse Modeling Project
diff --git a/tests/org.eclipse.emf.diffmerge.structures.model/plugin.xml b/tests/org.eclipse.emf.diffmerge.structures.model/plugin.xml
new file mode 100644
index 00000000..80ca9e6c
--- /dev/null
+++ b/tests/org.eclipse.emf.diffmerge.structures.model/plugin.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+
+<!--
+-->
+
+<plugin>
+
+
+
+ <extension point="org.eclipse.emf.ecore.generated_package">
+ <!-- @generated EGraphs -->
+ <package
+ uri="http://www.eclipse.org/emf/diffmerge/structures/egraphs/1.0.0"
+ class="org.eclipse.emf.diffmerge.structures.model.egraphs.EGraphsPackage"
+ genModel="model/EGraphs.genmodel"/>
+ </extension>
+
+ <extension point="org.eclipse.emf.ecore.extension_parser">
+ <!-- @generated EGraphs -->
+ <parser
+ type="egraphs"
+ class="org.eclipse.emf.diffmerge.structures.model.egraphs.util.EGraphsResourceFactoryImpl"/>
+ </extension>
+</plugin>
diff --git a/tests/org.eclipse.emf.diffmerge.structures.model/src/org/eclipse/emf/diffmerge/structures/model/egraphs/EGraph.java b/tests/org.eclipse.emf.diffmerge.structures.model/src/org/eclipse/emf/diffmerge/structures/model/egraphs/EGraph.java
new file mode 100644
index 00000000..20081779
--- /dev/null
+++ b/tests/org.eclipse.emf.diffmerge.structures.model/src/org/eclipse/emf/diffmerge/structures/model/egraphs/EGraph.java
@@ -0,0 +1,54 @@
+/**
+ * <copyright>
+ *
+ * Copyright (c) 2017 Thales Global Services S.A.S.
+ * 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:
+ * Thales Global Services S.A.S. - initial API and implementation
+ *
+ * </copyright>
+ */
+package org.eclipse.emf.diffmerge.structures.model.egraphs;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>EGraph</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.emf.diffmerge.structures.model.egraphs.EGraph#getContents <em>Contents</em>}</li>
+ * </ul>
+ *
+ * @see org.eclipse.emf.diffmerge.structures.model.egraphs.EGraphsPackage#getEGraph()
+ * @model
+ * @generated
+ */
+public interface EGraph extends EObject {
+ /**
+ * Returns the value of the '<em><b>Contents</b></em>' containment reference list.
+ * The list contents are of type {@link org.eclipse.emf.diffmerge.structures.model.egraphs.ENode}.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Contents</em>' containment reference list isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Contents</em>' containment reference list.
+ * @see org.eclipse.emf.diffmerge.structures.model.egraphs.EGraphsPackage#getEGraph_Contents()
+ * @model containment="true"
+ * @generated
+ */
+ EList<ENode> getContents();
+
+} // EGraph
diff --git a/tests/org.eclipse.emf.diffmerge.structures.model/src/org/eclipse/emf/diffmerge/structures/model/egraphs/EGraphsFactory.java b/tests/org.eclipse.emf.diffmerge.structures.model/src/org/eclipse/emf/diffmerge/structures/model/egraphs/EGraphsFactory.java
new file mode 100644
index 00000000..d4d13225
--- /dev/null
+++ b/tests/org.eclipse.emf.diffmerge.structures.model/src/org/eclipse/emf/diffmerge/structures/model/egraphs/EGraphsFactory.java
@@ -0,0 +1,72 @@
+/**
+ * <copyright>
+ *
+ * Copyright (c) 2017 Thales Global Services S.A.S.
+ * 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:
+ * Thales Global Services S.A.S. - initial API and implementation
+ *
+ * </copyright>
+ */
+package org.eclipse.emf.diffmerge.structures.model.egraphs;
+
+import org.eclipse.emf.ecore.EFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Factory</b> for the model.
+ * It provides a create method for each non-abstract class of the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.diffmerge.structures.model.egraphs.EGraphsPackage
+ * @generated
+ */
+public interface EGraphsFactory extends EFactory {
+ /**
+ * The singleton instance of the factory.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EGraphsFactory eINSTANCE = org.eclipse.emf.diffmerge.structures.model.egraphs.impl.EGraphsFactoryImpl.init();
+
+ /**
+ * Returns a new object of class '<em>EGraph</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return a new object of class '<em>EGraph</em>'.
+ * @generated
+ */
+ EGraph createEGraph();
+
+ /**
+ * Returns a new object of class '<em>ENode</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return a new object of class '<em>ENode</em>'.
+ * @generated
+ */
+ ENode createENode();
+
+ /**
+ * Returns a new object of class '<em>EHyper Edge</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return a new object of class '<em>EHyper Edge</em>'.
+ * @generated
+ */
+ EHyperEdge createEHyperEdge();
+
+ /**
+ * Returns the package supported by this factory.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the package supported by this factory.
+ * @generated
+ */
+ EGraphsPackage getEGraphsPackage();
+
+} //EGraphsFactory
diff --git a/tests/org.eclipse.emf.diffmerge.structures.model/src/org/eclipse/emf/diffmerge/structures/model/egraphs/EGraphsPackage.java b/tests/org.eclipse.emf.diffmerge.structures.model/src/org/eclipse/emf/diffmerge/structures/model/egraphs/EGraphsPackage.java
new file mode 100644
index 00000000..c8883b7b
--- /dev/null
+++ b/tests/org.eclipse.emf.diffmerge.structures.model/src/org/eclipse/emf/diffmerge/structures/model/egraphs/EGraphsPackage.java
@@ -0,0 +1,437 @@
+/**
+ * <copyright>
+ *
+ * Copyright (c) 2017 Thales Global Services S.A.S.
+ * 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:
+ * Thales Global Services S.A.S. - initial API and implementation
+ *
+ * </copyright>
+ */
+package org.eclipse.emf.diffmerge.structures.model.egraphs;
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Package</b> for the model.
+ * It contains accessors for the meta objects to represent
+ * <ul>
+ * <li>each class,</li>
+ * <li>each feature of each class,</li>
+ * <li>each operation of each class,</li>
+ * <li>each enum,</li>
+ * <li>and each data type</li>
+ * </ul>
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.diffmerge.structures.model.egraphs.EGraphsFactory
+ * @model kind="package"
+ * @generated
+ */
+public interface EGraphsPackage extends EPackage {
+ /**
+ * The package name.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ String eNAME = "egraphs";
+
+ /**
+ * The package namespace URI.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ String eNS_URI = "http://www.eclipse.org/emf/diffmerge/structures/egraphs/1.0.0";
+
+ /**
+ * The package namespace name.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ String eNS_PREFIX = "org.eclipse.emf.diffmerge.structures.model";
+
+ /**
+ * The singleton instance of the package.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EGraphsPackage eINSTANCE = org.eclipse.emf.diffmerge.structures.model.egraphs.impl.EGraphsPackageImpl.init();
+
+ /**
+ * The meta object id for the '{@link org.eclipse.emf.diffmerge.structures.model.egraphs.impl.EGraphImpl <em>EGraph</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.diffmerge.structures.model.egraphs.impl.EGraphImpl
+ * @see org.eclipse.emf.diffmerge.structures.model.egraphs.impl.EGraphsPackageImpl#getEGraph()
+ * @generated
+ */
+ int EGRAPH = 0;
+
+ /**
+ * The feature id for the '<em><b>Contents</b></em>' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EGRAPH__CONTENTS = 0;
+
+ /**
+ * The number of structural features of the '<em>EGraph</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EGRAPH_FEATURE_COUNT = 1;
+
+ /**
+ * The number of operations of the '<em>EGraph</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EGRAPH_OPERATION_COUNT = 0;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.emf.diffmerge.structures.model.egraphs.impl.ENodeImpl <em>ENode</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.diffmerge.structures.model.egraphs.impl.ENodeImpl
+ * @see org.eclipse.emf.diffmerge.structures.model.egraphs.impl.EGraphsPackageImpl#getENode()
+ * @generated
+ */
+ int ENODE = 1;
+
+ /**
+ * The feature id for the '<em><b>Element</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int ENODE__ELEMENT = 0;
+
+ /**
+ * The feature id for the '<em><b>Outgoing</b></em>' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int ENODE__OUTGOING = 1;
+
+ /**
+ * The feature id for the '<em><b>Incoming</b></em>' reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int ENODE__INCOMING = 2;
+
+ /**
+ * The number of structural features of the '<em>ENode</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int ENODE_FEATURE_COUNT = 3;
+
+ /**
+ * The number of operations of the '<em>ENode</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int ENODE_OPERATION_COUNT = 0;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.emf.diffmerge.structures.model.egraphs.impl.EHyperEdgeImpl <em>EHyper Edge</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.diffmerge.structures.model.egraphs.impl.EHyperEdgeImpl
+ * @see org.eclipse.emf.diffmerge.structures.model.egraphs.impl.EGraphsPackageImpl#getEHyperEdge()
+ * @generated
+ */
+ int EHYPER_EDGE = 2;
+
+ /**
+ * The feature id for the '<em><b>Label</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EHYPER_EDGE__LABEL = 0;
+
+ /**
+ * The feature id for the '<em><b>Source</b></em>' container reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EHYPER_EDGE__SOURCE = 1;
+
+ /**
+ * The feature id for the '<em><b>Targets</b></em>' reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EHYPER_EDGE__TARGETS = 2;
+
+ /**
+ * The number of structural features of the '<em>EHyper Edge</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EHYPER_EDGE_FEATURE_COUNT = 3;
+
+ /**
+ * The number of operations of the '<em>EHyper Edge</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EHYPER_EDGE_OPERATION_COUNT = 0;
+
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.emf.diffmerge.structures.model.egraphs.EGraph <em>EGraph</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>EGraph</em>'.
+ * @see org.eclipse.emf.diffmerge.structures.model.egraphs.EGraph
+ * @generated
+ */
+ EClass getEGraph();
+
+ /**
+ * Returns the meta object for the containment reference list '{@link org.eclipse.emf.diffmerge.structures.model.egraphs.EGraph#getContents <em>Contents</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the containment reference list '<em>Contents</em>'.
+ * @see org.eclipse.emf.diffmerge.structures.model.egraphs.EGraph#getContents()
+ * @see #getEGraph()
+ * @generated
+ */
+ EReference getEGraph_Contents();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.emf.diffmerge.structures.model.egraphs.ENode <em>ENode</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>ENode</em>'.
+ * @see org.eclipse.emf.diffmerge.structures.model.egraphs.ENode
+ * @generated
+ */
+ EClass getENode();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.emf.diffmerge.structures.model.egraphs.ENode#getElement <em>Element</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Element</em>'.
+ * @see org.eclipse.emf.diffmerge.structures.model.egraphs.ENode#getElement()
+ * @see #getENode()
+ * @generated
+ */
+ EAttribute getENode_Element();
+
+ /**
+ * Returns the meta object for the containment reference list '{@link org.eclipse.emf.diffmerge.structures.model.egraphs.ENode#getOutgoing <em>Outgoing</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the containment reference list '<em>Outgoing</em>'.
+ * @see org.eclipse.emf.diffmerge.structures.model.egraphs.ENode#getOutgoing()
+ * @see #getENode()
+ * @generated
+ */
+ EReference getENode_Outgoing();
+
+ /**
+ * Returns the meta object for the reference list '{@link org.eclipse.emf.diffmerge.structures.model.egraphs.ENode#getIncoming <em>Incoming</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the reference list '<em>Incoming</em>'.
+ * @see org.eclipse.emf.diffmerge.structures.model.egraphs.ENode#getIncoming()
+ * @see #getENode()
+ * @generated
+ */
+ EReference getENode_Incoming();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.emf.diffmerge.structures.model.egraphs.EHyperEdge <em>EHyper Edge</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>EHyper Edge</em>'.
+ * @see org.eclipse.emf.diffmerge.structures.model.egraphs.EHyperEdge
+ * @generated
+ */
+ EClass getEHyperEdge();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.emf.diffmerge.structures.model.egraphs.EHyperEdge#getLabel <em>Label</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Label</em>'.
+ * @see org.eclipse.emf.diffmerge.structures.model.egraphs.EHyperEdge#getLabel()
+ * @see #getEHyperEdge()
+ * @generated
+ */
+ EAttribute getEHyperEdge_Label();
+
+ /**
+ * Returns the meta object for the container reference '{@link org.eclipse.emf.diffmerge.structures.model.egraphs.EHyperEdge#getSource <em>Source</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the container reference '<em>Source</em>'.
+ * @see org.eclipse.emf.diffmerge.structures.model.egraphs.EHyperEdge#getSource()
+ * @see #getEHyperEdge()
+ * @generated
+ */
+ EReference getEHyperEdge_Source();
+
+ /**
+ * Returns the meta object for the reference list '{@link org.eclipse.emf.diffmerge.structures.model.egraphs.EHyperEdge#getTargets <em>Targets</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the reference list '<em>Targets</em>'.
+ * @see org.eclipse.emf.diffmerge.structures.model.egraphs.EHyperEdge#getTargets()
+ * @see #getEHyperEdge()
+ * @generated
+ */
+ EReference getEHyperEdge_Targets();
+
+ /**
+ * Returns the factory that creates the instances of the model.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the factory that creates the instances of the model.
+ * @generated
+ */
+ EGraphsFactory getEGraphsFactory();
+
+ /**
+ * <!-- begin-user-doc -->
+ * Defines literals for the meta objects that represent
+ * <ul>
+ * <li>each class,</li>
+ * <li>each feature of each class,</li>
+ * <li>each operation of each class,</li>
+ * <li>each enum,</li>
+ * <li>and each data type</li>
+ * </ul>
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ interface Literals {
+ /**
+ * The meta object literal for the '{@link org.eclipse.emf.diffmerge.structures.model.egraphs.impl.EGraphImpl <em>EGraph</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.diffmerge.structures.model.egraphs.impl.EGraphImpl
+ * @see org.eclipse.emf.diffmerge.structures.model.egraphs.impl.EGraphsPackageImpl#getEGraph()
+ * @generated
+ */
+ EClass EGRAPH = eINSTANCE.getEGraph();
+
+ /**
+ * The meta object literal for the '<em><b>Contents</b></em>' containment reference list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference EGRAPH__CONTENTS = eINSTANCE.getEGraph_Contents();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.emf.diffmerge.structures.model.egraphs.impl.ENodeImpl <em>ENode</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.diffmerge.structures.model.egraphs.impl.ENodeImpl
+ * @see org.eclipse.emf.diffmerge.structures.model.egraphs.impl.EGraphsPackageImpl#getENode()
+ * @generated
+ */
+ EClass ENODE = eINSTANCE.getENode();
+
+ /**
+ * The meta object literal for the '<em><b>Element</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute ENODE__ELEMENT = eINSTANCE.getENode_Element();
+
+ /**
+ * The meta object literal for the '<em><b>Outgoing</b></em>' containment reference list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference ENODE__OUTGOING = eINSTANCE.getENode_Outgoing();
+
+ /**
+ * The meta object literal for the '<em><b>Incoming</b></em>' reference list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference ENODE__INCOMING = eINSTANCE.getENode_Incoming();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.emf.diffmerge.structures.model.egraphs.impl.EHyperEdgeImpl <em>EHyper Edge</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.diffmerge.structures.model.egraphs.impl.EHyperEdgeImpl
+ * @see org.eclipse.emf.diffmerge.structures.model.egraphs.impl.EGraphsPackageImpl#getEHyperEdge()
+ * @generated
+ */
+ EClass EHYPER_EDGE = eINSTANCE.getEHyperEdge();
+
+ /**
+ * The meta object literal for the '<em><b>Label</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute EHYPER_EDGE__LABEL = eINSTANCE.getEHyperEdge_Label();
+
+ /**
+ * The meta object literal for the '<em><b>Source</b></em>' container reference feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference EHYPER_EDGE__SOURCE = eINSTANCE.getEHyperEdge_Source();
+
+ /**
+ * The meta object literal for the '<em><b>Targets</b></em>' reference list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference EHYPER_EDGE__TARGETS = eINSTANCE.getEHyperEdge_Targets();
+
+ }
+
+} //EGraphsPackage
diff --git a/tests/org.eclipse.emf.diffmerge.structures.model/src/org/eclipse/emf/diffmerge/structures/model/egraphs/EHyperEdge.java b/tests/org.eclipse.emf.diffmerge.structures.model/src/org/eclipse/emf/diffmerge/structures/model/egraphs/EHyperEdge.java
new file mode 100644
index 00000000..3ce965d5
--- /dev/null
+++ b/tests/org.eclipse.emf.diffmerge.structures.model/src/org/eclipse/emf/diffmerge/structures/model/egraphs/EHyperEdge.java
@@ -0,0 +1,112 @@
+/**
+ * <copyright>
+ *
+ * Copyright (c) 2017 Thales Global Services S.A.S.
+ * 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:
+ * Thales Global Services S.A.S. - initial API and implementation
+ *
+ * </copyright>
+ */
+package org.eclipse.emf.diffmerge.structures.model.egraphs;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>EHyper Edge</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.emf.diffmerge.structures.model.egraphs.EHyperEdge#getLabel <em>Label</em>}</li>
+ * <li>{@link org.eclipse.emf.diffmerge.structures.model.egraphs.EHyperEdge#getSource <em>Source</em>}</li>
+ * <li>{@link org.eclipse.emf.diffmerge.structures.model.egraphs.EHyperEdge#getTargets <em>Targets</em>}</li>
+ * </ul>
+ *
+ * @see org.eclipse.emf.diffmerge.structures.model.egraphs.EGraphsPackage#getEHyperEdge()
+ * @model
+ * @generated
+ */
+public interface EHyperEdge extends EObject {
+ /**
+ * Returns the value of the '<em><b>Label</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Label</em>' attribute isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Label</em>' attribute.
+ * @see #setLabel(String)
+ * @see org.eclipse.emf.diffmerge.structures.model.egraphs.EGraphsPackage#getEHyperEdge_Label()
+ * @model
+ * @generated
+ */
+ String getLabel();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.emf.diffmerge.structures.model.egraphs.EHyperEdge#getLabel <em>Label</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Label</em>' attribute.
+ * @see #getLabel()
+ * @generated
+ */
+ void setLabel(String value);
+
+ /**
+ * Returns the value of the '<em><b>Source</b></em>' container reference.
+ * It is bidirectional and its opposite is '{@link org.eclipse.emf.diffmerge.structures.model.egraphs.ENode#getOutgoing <em>Outgoing</em>}'.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Source</em>' container reference isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Source</em>' container reference.
+ * @see #setSource(ENode)
+ * @see org.eclipse.emf.diffmerge.structures.model.egraphs.EGraphsPackage#getEHyperEdge_Source()
+ * @see org.eclipse.emf.diffmerge.structures.model.egraphs.ENode#getOutgoing
+ * @model opposite="outgoing" required="true" transient="false"
+ * @generated
+ */
+ ENode getSource();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.emf.diffmerge.structures.model.egraphs.EHyperEdge#getSource <em>Source</em>}' container reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Source</em>' container reference.
+ * @see #getSource()
+ * @generated
+ */
+ void setSource(ENode value);
+
+ /**
+ * Returns the value of the '<em><b>Targets</b></em>' reference list.
+ * The list contents are of type {@link org.eclipse.emf.diffmerge.structures.model.egraphs.ENode}.
+ * It is bidirectional and its opposite is '{@link org.eclipse.emf.diffmerge.structures.model.egraphs.ENode#getIncoming <em>Incoming</em>}'.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Targets</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>Targets</em>' reference list.
+ * @see org.eclipse.emf.diffmerge.structures.model.egraphs.EGraphsPackage#getEHyperEdge_Targets()
+ * @see org.eclipse.emf.diffmerge.structures.model.egraphs.ENode#getIncoming
+ * @model opposite="incoming"
+ * @generated
+ */
+ EList<ENode> getTargets();
+
+} // EHyperEdge
diff --git a/tests/org.eclipse.emf.diffmerge.structures.model/src/org/eclipse/emf/diffmerge/structures/model/egraphs/ENode.java b/tests/org.eclipse.emf.diffmerge.structures.model/src/org/eclipse/emf/diffmerge/structures/model/egraphs/ENode.java
new file mode 100644
index 00000000..4a5863a0
--- /dev/null
+++ b/tests/org.eclipse.emf.diffmerge.structures.model/src/org/eclipse/emf/diffmerge/structures/model/egraphs/ENode.java
@@ -0,0 +1,102 @@
+/**
+ * <copyright>
+ *
+ * Copyright (c) 2017 Thales Global Services S.A.S.
+ * 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:
+ * Thales Global Services S.A.S. - initial API and implementation
+ *
+ * </copyright>
+ */
+package org.eclipse.emf.diffmerge.structures.model.egraphs;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>ENode</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.emf.diffmerge.structures.model.egraphs.ENode#getElement <em>Element</em>}</li>
+ * <li>{@link org.eclipse.emf.diffmerge.structures.model.egraphs.ENode#getOutgoing <em>Outgoing</em>}</li>
+ * <li>{@link org.eclipse.emf.diffmerge.structures.model.egraphs.ENode#getIncoming <em>Incoming</em>}</li>
+ * </ul>
+ *
+ * @see org.eclipse.emf.diffmerge.structures.model.egraphs.EGraphsPackage#getENode()
+ * @model
+ * @generated
+ */
+public interface ENode extends EObject {
+ /**
+ * Returns the value of the '<em><b>Element</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Element</em>' attribute isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Element</em>' attribute.
+ * @see #setElement(String)
+ * @see org.eclipse.emf.diffmerge.structures.model.egraphs.EGraphsPackage#getENode_Element()
+ * @model required="true"
+ * @generated
+ */
+ String getElement();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.emf.diffmerge.structures.model.egraphs.ENode#getElement <em>Element</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Element</em>' attribute.
+ * @see #getElement()
+ * @generated
+ */
+ void setElement(String value);
+
+ /**
+ * Returns the value of the '<em><b>Outgoing</b></em>' containment reference list.
+ * The list contents are of type {@link org.eclipse.emf.diffmerge.structures.model.egraphs.EHyperEdge}.
+ * It is bidirectional and its opposite is '{@link org.eclipse.emf.diffmerge.structures.model.egraphs.EHyperEdge#getSource <em>Source</em>}'.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Outgoing</em>' containment reference list isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Outgoing</em>' containment reference list.
+ * @see org.eclipse.emf.diffmerge.structures.model.egraphs.EGraphsPackage#getENode_Outgoing()
+ * @see org.eclipse.emf.diffmerge.structures.model.egraphs.EHyperEdge#getSource
+ * @model opposite="source" containment="true"
+ * @generated
+ */
+ EList<EHyperEdge> getOutgoing();
+
+ /**
+ * Returns the value of the '<em><b>Incoming</b></em>' reference list.
+ * The list contents are of type {@link org.eclipse.emf.diffmerge.structures.model.egraphs.EHyperEdge}.
+ * It is bidirectional and its opposite is '{@link org.eclipse.emf.diffmerge.structures.model.egraphs.EHyperEdge#getTargets <em>Targets</em>}'.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Incoming</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>Incoming</em>' reference list.
+ * @see org.eclipse.emf.diffmerge.structures.model.egraphs.EGraphsPackage#getENode_Incoming()
+ * @see org.eclipse.emf.diffmerge.structures.model.egraphs.EHyperEdge#getTargets
+ * @model opposite="targets"
+ * @generated
+ */
+ EList<EHyperEdge> getIncoming();
+
+} // ENode
diff --git a/tests/org.eclipse.emf.diffmerge.structures.model/src/org/eclipse/emf/diffmerge/structures/model/egraphs/impl/EGraphImpl.java b/tests/org.eclipse.emf.diffmerge.structures.model/src/org/eclipse/emf/diffmerge/structures/model/egraphs/impl/EGraphImpl.java
new file mode 100644
index 00000000..f8a9cb0d
--- /dev/null
+++ b/tests/org.eclipse.emf.diffmerge.structures.model/src/org/eclipse/emf/diffmerge/structures/model/egraphs/impl/EGraphImpl.java
@@ -0,0 +1,163 @@
+/**
+ * <copyright>
+ *
+ * Copyright (c) 2017 Thales Global Services S.A.S.
+ * 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:
+ * Thales Global Services S.A.S. - initial API and implementation
+ *
+ * </copyright>
+ */
+package org.eclipse.emf.diffmerge.structures.model.egraphs.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.diffmerge.structures.model.egraphs.EGraph;
+import org.eclipse.emf.diffmerge.structures.model.egraphs.EGraphsPackage;
+import org.eclipse.emf.diffmerge.structures.model.egraphs.ENode;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>EGraph</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.emf.diffmerge.structures.model.egraphs.impl.EGraphImpl#getContents <em>Contents</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class EGraphImpl extends MinimalEObjectImpl.Container implements EGraph {
+ /**
+ * The cached value of the '{@link #getContents() <em>Contents</em>}' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getContents()
+ * @generated
+ * @ordered
+ */
+ protected EList<ENode> contents;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected EGraphImpl() {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return EGraphsPackage.Literals.EGRAPH;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EList<ENode> getContents() {
+ if (contents == null) {
+ contents = new EObjectContainmentEList<ENode>(ENode.class, this, EGraphsPackage.EGRAPH__CONTENTS);
+ }
+ return contents;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case EGraphsPackage.EGRAPH__CONTENTS:
+ return ((InternalEList<?>)getContents()).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 EGraphsPackage.EGRAPH__CONTENTS:
+ return getContents();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case EGraphsPackage.EGRAPH__CONTENTS:
+ getContents().clear();
+ getContents().addAll((Collection<? extends ENode>)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case EGraphsPackage.EGRAPH__CONTENTS:
+ getContents().clear();
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case EGraphsPackage.EGRAPH__CONTENTS:
+ return contents != null && !contents.isEmpty();
+ }
+ return super.eIsSet(featureID);
+ }
+
+} //EGraphImpl
diff --git a/tests/org.eclipse.emf.diffmerge.structures.model/src/org/eclipse/emf/diffmerge/structures/model/egraphs/impl/EGraphsFactoryImpl.java b/tests/org.eclipse.emf.diffmerge.structures.model/src/org/eclipse/emf/diffmerge/structures/model/egraphs/impl/EGraphsFactoryImpl.java
new file mode 100644
index 00000000..663c3ff4
--- /dev/null
+++ b/tests/org.eclipse.emf.diffmerge.structures.model/src/org/eclipse/emf/diffmerge/structures/model/egraphs/impl/EGraphsFactoryImpl.java
@@ -0,0 +1,129 @@
+/**
+ * <copyright>
+ *
+ * Copyright (c) 2017 Thales Global Services S.A.S.
+ * 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:
+ * Thales Global Services S.A.S. - initial API and implementation
+ *
+ * </copyright>
+ */
+package org.eclipse.emf.diffmerge.structures.model.egraphs.impl;
+
+import org.eclipse.emf.diffmerge.structures.model.egraphs.*;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.emf.ecore.impl.EFactoryImpl;
+
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Factory</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class EGraphsFactoryImpl extends EFactoryImpl implements EGraphsFactory {
+ /**
+ * Creates the default factory implementation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static EGraphsFactory init() {
+ try {
+ EGraphsFactory theEGraphsFactory = (EGraphsFactory)EPackage.Registry.INSTANCE.getEFactory(EGraphsPackage.eNS_URI);
+ if (theEGraphsFactory != null) {
+ return theEGraphsFactory;
+ }
+ }
+ catch (Exception exception) {
+ EcorePlugin.INSTANCE.log(exception);
+ }
+ return new EGraphsFactoryImpl();
+ }
+
+ /**
+ * Creates an instance of the factory.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EGraphsFactoryImpl() {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public EObject create(EClass eClass) {
+ switch (eClass.getClassifierID()) {
+ case EGraphsPackage.EGRAPH: return createEGraph();
+ case EGraphsPackage.ENODE: return createENode();
+ case EGraphsPackage.EHYPER_EDGE: return createEHyperEdge();
+ default:
+ throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier");
+ }
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EGraph createEGraph() {
+ EGraphImpl eGraph = new EGraphImpl();
+ return eGraph;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public ENode createENode() {
+ ENodeImpl eNode = new ENodeImpl();
+ return eNode;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EHyperEdge createEHyperEdge() {
+ EHyperEdgeImpl eHyperEdge = new EHyperEdgeImpl();
+ return eHyperEdge;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EGraphsPackage getEGraphsPackage() {
+ return (EGraphsPackage)getEPackage();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @deprecated
+ * @generated
+ */
+ @Deprecated
+ public static EGraphsPackage getPackage() {
+ return EGraphsPackage.eINSTANCE;
+ }
+
+} //EGraphsFactoryImpl
diff --git a/tests/org.eclipse.emf.diffmerge.structures.model/src/org/eclipse/emf/diffmerge/structures/model/egraphs/impl/EGraphsPackageImpl.java b/tests/org.eclipse.emf.diffmerge.structures.model/src/org/eclipse/emf/diffmerge/structures/model/egraphs/impl/EGraphsPackageImpl.java
new file mode 100644
index 00000000..711c9fbb
--- /dev/null
+++ b/tests/org.eclipse.emf.diffmerge.structures.model/src/org/eclipse/emf/diffmerge/structures/model/egraphs/impl/EGraphsPackageImpl.java
@@ -0,0 +1,298 @@
+/**
+ * <copyright>
+ *
+ * Copyright (c) 2017 Thales Global Services S.A.S.
+ * 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:
+ * Thales Global Services S.A.S. - initial API and implementation
+ *
+ * </copyright>
+ */
+package org.eclipse.emf.diffmerge.structures.model.egraphs.impl;
+
+import org.eclipse.emf.diffmerge.structures.model.egraphs.EGraph;
+import org.eclipse.emf.diffmerge.structures.model.egraphs.EGraphsFactory;
+import org.eclipse.emf.diffmerge.structures.model.egraphs.EGraphsPackage;
+import org.eclipse.emf.diffmerge.structures.model.egraphs.EHyperEdge;
+import org.eclipse.emf.diffmerge.structures.model.egraphs.ENode;
+
+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 -->
+ * @generated
+ */
+public class EGraphsPackageImpl extends EPackageImpl implements EGraphsPackage {
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass eGraphEClass = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass eNodeEClass = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass eHyperEdgeEClass = 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 -->
+ * @see org.eclipse.emf.ecore.EPackage.Registry
+ * @see org.eclipse.emf.diffmerge.structures.model.egraphs.EGraphsPackage#eNS_URI
+ * @see #init()
+ * @generated
+ */
+ private EGraphsPackageImpl() {
+ super(eNS_URI, EGraphsFactory.eINSTANCE);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private static boolean isInited = false;
+
+ /**
+ * Creates, registers, and initializes the <b>Package</b> for this model, and for any others upon which it depends.
+ *
+ * <p>This method is used to initialize {@link EGraphsPackage#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 EGraphsPackage init() {
+ if (isInited) return (EGraphsPackage)EPackage.Registry.INSTANCE.getEPackage(EGraphsPackage.eNS_URI);
+
+ // Obtain or create and register package
+ EGraphsPackageImpl theEGraphsPackage = (EGraphsPackageImpl)(EPackage.Registry.INSTANCE.get(eNS_URI) instanceof EGraphsPackageImpl ? EPackage.Registry.INSTANCE.get(eNS_URI) : new EGraphsPackageImpl());
+
+ isInited = true;
+
+ // Create package meta-data objects
+ theEGraphsPackage.createPackageContents();
+
+ // Initialize created meta-data
+ theEGraphsPackage.initializePackageContents();
+
+ // Mark meta-data to indicate it can't be changed
+ theEGraphsPackage.freeze();
+
+
+ // Update the registry and return the package
+ EPackage.Registry.INSTANCE.put(EGraphsPackage.eNS_URI, theEGraphsPackage);
+ return theEGraphsPackage;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EClass getEGraph() {
+ return eGraphEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EReference getEGraph_Contents() {
+ return (EReference)eGraphEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EClass getENode() {
+ return eNodeEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EAttribute getENode_Element() {
+ return (EAttribute)eNodeEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EReference getENode_Outgoing() {
+ return (EReference)eNodeEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EReference getENode_Incoming() {
+ return (EReference)eNodeEClass.getEStructuralFeatures().get(2);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EClass getEHyperEdge() {
+ return eHyperEdgeEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EAttribute getEHyperEdge_Label() {
+ return (EAttribute)eHyperEdgeEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EReference getEHyperEdge_Source() {
+ return (EReference)eHyperEdgeEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EReference getEHyperEdge_Targets() {
+ return (EReference)eHyperEdgeEClass.getEStructuralFeatures().get(2);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EGraphsFactory getEGraphsFactory() {
+ return (EGraphsFactory)getEFactoryInstance();
+ }
+
+ /**
+ * <!-- 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 -->
+ * @generated
+ */
+ public void createPackageContents() {
+ if (isCreated) return;
+ isCreated = true;
+
+ // Create classes and their features
+ eGraphEClass = createEClass(EGRAPH);
+ createEReference(eGraphEClass, EGRAPH__CONTENTS);
+
+ eNodeEClass = createEClass(ENODE);
+ createEAttribute(eNodeEClass, ENODE__ELEMENT);
+ createEReference(eNodeEClass, ENODE__OUTGOING);
+ createEReference(eNodeEClass, ENODE__INCOMING);
+
+ eHyperEdgeEClass = createEClass(EHYPER_EDGE);
+ createEAttribute(eHyperEdgeEClass, EHYPER_EDGE__LABEL);
+ createEReference(eHyperEdgeEClass, EHYPER_EDGE__SOURCE);
+ createEReference(eHyperEdgeEClass, EHYPER_EDGE__TARGETS);
+ }
+
+ /**
+ * <!-- 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 -->
+ * @generated
+ */
+ public void initializePackageContents() {
+ if (isInitialized) return;
+ isInitialized = true;
+
+ // Initialize package
+ setName(eNAME);
+ setNsPrefix(eNS_PREFIX);
+ setNsURI(eNS_URI);
+
+ // Create type parameters
+
+ // Set bounds for type parameters
+
+ // Add supertypes to classes
+
+ // Initialize classes, features, and operations; add parameters
+ initEClass(eGraphEClass, EGraph.class, "EGraph", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEReference(getEGraph_Contents(), this.getENode(), null, "contents", null, 0, -1, EGraph.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ initEClass(eNodeEClass, ENode.class, "ENode", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEAttribute(getENode_Element(), ecorePackage.getEString(), "element", null, 1, 1, ENode.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEReference(getENode_Outgoing(), this.getEHyperEdge(), this.getEHyperEdge_Source(), "outgoing", null, 0, -1, ENode.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEReference(getENode_Incoming(), this.getEHyperEdge(), this.getEHyperEdge_Targets(), "incoming", null, 0, -1, ENode.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ initEClass(eHyperEdgeEClass, EHyperEdge.class, "EHyperEdge", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEAttribute(getEHyperEdge_Label(), ecorePackage.getEString(), "label", null, 0, 1, EHyperEdge.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEReference(getEHyperEdge_Source(), this.getENode(), this.getENode_Outgoing(), "source", null, 1, 1, EHyperEdge.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEReference(getEHyperEdge_Targets(), this.getENode(), this.getENode_Incoming(), "targets", null, 0, -1, EHyperEdge.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ // Create resource
+ createResource(eNS_URI);
+ }
+
+} //EGraphsPackageImpl
diff --git a/tests/org.eclipse.emf.diffmerge.structures.model/src/org/eclipse/emf/diffmerge/structures/model/egraphs/impl/EHyperEdgeImpl.java b/tests/org.eclipse.emf.diffmerge.structures.model/src/org/eclipse/emf/diffmerge/structures/model/egraphs/impl/EHyperEdgeImpl.java
new file mode 100644
index 00000000..25ceea21
--- /dev/null
+++ b/tests/org.eclipse.emf.diffmerge.structures.model/src/org/eclipse/emf/diffmerge/structures/model/egraphs/impl/EHyperEdgeImpl.java
@@ -0,0 +1,320 @@
+/**
+ * <copyright>
+ *
+ * Copyright (c) 2017 Thales Global Services S.A.S.
+ * 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:
+ * Thales Global Services S.A.S. - initial API and implementation
+ *
+ * </copyright>
+ */
+package org.eclipse.emf.diffmerge.structures.model.egraphs.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.diffmerge.structures.model.egraphs.EGraphsPackage;
+import org.eclipse.emf.diffmerge.structures.model.egraphs.EHyperEdge;
+import org.eclipse.emf.diffmerge.structures.model.egraphs.ENode;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+import org.eclipse.emf.ecore.util.EObjectWithInverseResolvingEList;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>EHyper Edge</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.emf.diffmerge.structures.model.egraphs.impl.EHyperEdgeImpl#getLabel <em>Label</em>}</li>
+ * <li>{@link org.eclipse.emf.diffmerge.structures.model.egraphs.impl.EHyperEdgeImpl#getSource <em>Source</em>}</li>
+ * <li>{@link org.eclipse.emf.diffmerge.structures.model.egraphs.impl.EHyperEdgeImpl#getTargets <em>Targets</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class EHyperEdgeImpl extends MinimalEObjectImpl.Container implements EHyperEdge {
+ /**
+ * The default value of the '{@link #getLabel() <em>Label</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getLabel()
+ * @generated
+ * @ordered
+ */
+ protected static final String LABEL_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getLabel() <em>Label</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getLabel()
+ * @generated
+ * @ordered
+ */
+ protected String label = LABEL_EDEFAULT;
+
+ /**
+ * The cached value of the '{@link #getTargets() <em>Targets</em>}' reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getTargets()
+ * @generated
+ * @ordered
+ */
+ protected EList<ENode> targets;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected EHyperEdgeImpl() {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return EGraphsPackage.Literals.EHYPER_EDGE;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public String getLabel() {
+ return label;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setLabel(String newLabel) {
+ String oldLabel = label;
+ label = newLabel;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, EGraphsPackage.EHYPER_EDGE__LABEL, oldLabel, label));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public ENode getSource() {
+ if (eContainerFeatureID() != EGraphsPackage.EHYPER_EDGE__SOURCE) return null;
+ return (ENode)eInternalContainer();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public NotificationChain basicSetSource(ENode newSource, NotificationChain msgs) {
+ msgs = eBasicSetContainer((InternalEObject)newSource, EGraphsPackage.EHYPER_EDGE__SOURCE, msgs);
+ return msgs;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setSource(ENode newSource) {
+ if (newSource != eInternalContainer() || (eContainerFeatureID() != EGraphsPackage.EHYPER_EDGE__SOURCE && newSource != null)) {
+ if (EcoreUtil.isAncestor(this, newSource))
+ throw new IllegalArgumentException("Recursive containment not allowed for " + toString());
+ NotificationChain msgs = null;
+ if (eInternalContainer() != null)
+ msgs = eBasicRemoveFromContainer(msgs);
+ if (newSource != null)
+ msgs = ((InternalEObject)newSource).eInverseAdd(this, EGraphsPackage.ENODE__OUTGOING, ENode.class, msgs);
+ msgs = basicSetSource(newSource, msgs);
+ if (msgs != null) msgs.dispatch();
+ }
+ else if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, EGraphsPackage.EHYPER_EDGE__SOURCE, newSource, newSource));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EList<ENode> getTargets() {
+ if (targets == null) {
+ targets = new EObjectWithInverseResolvingEList.ManyInverse<ENode>(ENode.class, this, EGraphsPackage.EHYPER_EDGE__TARGETS, EGraphsPackage.ENODE__INCOMING);
+ }
+ return targets;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case EGraphsPackage.EHYPER_EDGE__SOURCE:
+ if (eInternalContainer() != null)
+ msgs = eBasicRemoveFromContainer(msgs);
+ return basicSetSource((ENode)otherEnd, msgs);
+ case EGraphsPackage.EHYPER_EDGE__TARGETS:
+ return ((InternalEList<InternalEObject>)(InternalEList<?>)getTargets()).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 EGraphsPackage.EHYPER_EDGE__SOURCE:
+ return basicSetSource(null, msgs);
+ case EGraphsPackage.EHYPER_EDGE__TARGETS:
+ return ((InternalEList<?>)getTargets()).basicRemove(otherEnd, msgs);
+ }
+ return super.eInverseRemove(otherEnd, featureID, msgs);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public NotificationChain eBasicRemoveFromContainerFeature(NotificationChain msgs) {
+ switch (eContainerFeatureID()) {
+ case EGraphsPackage.EHYPER_EDGE__SOURCE:
+ return eInternalContainer().eInverseRemove(this, EGraphsPackage.ENODE__OUTGOING, ENode.class, msgs);
+ }
+ return super.eBasicRemoveFromContainerFeature(msgs);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case EGraphsPackage.EHYPER_EDGE__LABEL:
+ return getLabel();
+ case EGraphsPackage.EHYPER_EDGE__SOURCE:
+ return getSource();
+ case EGraphsPackage.EHYPER_EDGE__TARGETS:
+ return getTargets();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case EGraphsPackage.EHYPER_EDGE__LABEL:
+ setLabel((String)newValue);
+ return;
+ case EGraphsPackage.EHYPER_EDGE__SOURCE:
+ setSource((ENode)newValue);
+ return;
+ case EGraphsPackage.EHYPER_EDGE__TARGETS:
+ getTargets().clear();
+ getTargets().addAll((Collection<? extends ENode>)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case EGraphsPackage.EHYPER_EDGE__LABEL:
+ setLabel(LABEL_EDEFAULT);
+ return;
+ case EGraphsPackage.EHYPER_EDGE__SOURCE:
+ setSource((ENode)null);
+ return;
+ case EGraphsPackage.EHYPER_EDGE__TARGETS:
+ getTargets().clear();
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case EGraphsPackage.EHYPER_EDGE__LABEL:
+ return LABEL_EDEFAULT == null ? label != null : !LABEL_EDEFAULT.equals(label);
+ case EGraphsPackage.EHYPER_EDGE__SOURCE:
+ return getSource() != null;
+ case EGraphsPackage.EHYPER_EDGE__TARGETS:
+ return targets != null && !targets.isEmpty();
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String toString() {
+ if (eIsProxy()) return super.toString();
+
+ StringBuffer result = new StringBuffer(super.toString());
+ result.append(" (label: ");
+ result.append(label);
+ result.append(')');
+ return result.toString();
+ }
+
+} //EHyperEdgeImpl
diff --git a/tests/org.eclipse.emf.diffmerge.structures.model/src/org/eclipse/emf/diffmerge/structures/model/egraphs/impl/ENodeImpl.java b/tests/org.eclipse.emf.diffmerge.structures.model/src/org/eclipse/emf/diffmerge/structures/model/egraphs/impl/ENodeImpl.java
new file mode 100644
index 00000000..41969992
--- /dev/null
+++ b/tests/org.eclipse.emf.diffmerge.structures.model/src/org/eclipse/emf/diffmerge/structures/model/egraphs/impl/ENodeImpl.java
@@ -0,0 +1,286 @@
+/**
+ * <copyright>
+ *
+ * Copyright (c) 2017 Thales Global Services S.A.S.
+ * 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:
+ * Thales Global Services S.A.S. - initial API and implementation
+ *
+ * </copyright>
+ */
+package org.eclipse.emf.diffmerge.structures.model.egraphs.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.diffmerge.structures.model.egraphs.EGraphsPackage;
+import org.eclipse.emf.diffmerge.structures.model.egraphs.EHyperEdge;
+import org.eclipse.emf.diffmerge.structures.model.egraphs.ENode;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+import org.eclipse.emf.ecore.util.EObjectContainmentWithInverseEList;
+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>ENode</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.emf.diffmerge.structures.model.egraphs.impl.ENodeImpl#getElement <em>Element</em>}</li>
+ * <li>{@link org.eclipse.emf.diffmerge.structures.model.egraphs.impl.ENodeImpl#getOutgoing <em>Outgoing</em>}</li>
+ * <li>{@link org.eclipse.emf.diffmerge.structures.model.egraphs.impl.ENodeImpl#getIncoming <em>Incoming</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class ENodeImpl extends MinimalEObjectImpl.Container implements ENode {
+ /**
+ * The default value of the '{@link #getElement() <em>Element</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getElement()
+ * @generated
+ * @ordered
+ */
+ protected static final String ELEMENT_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getElement() <em>Element</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getElement()
+ * @generated
+ * @ordered
+ */
+ protected String element = ELEMENT_EDEFAULT;
+
+ /**
+ * The cached value of the '{@link #getOutgoing() <em>Outgoing</em>}' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getOutgoing()
+ * @generated
+ * @ordered
+ */
+ protected EList<EHyperEdge> outgoing;
+
+ /**
+ * The cached value of the '{@link #getIncoming() <em>Incoming</em>}' reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getIncoming()
+ * @generated
+ * @ordered
+ */
+ protected EList<EHyperEdge> incoming;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected ENodeImpl() {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return EGraphsPackage.Literals.ENODE;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public String getElement() {
+ return element;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setElement(String newElement) {
+ String oldElement = element;
+ element = newElement;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, EGraphsPackage.ENODE__ELEMENT, oldElement, element));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EList<EHyperEdge> getOutgoing() {
+ if (outgoing == null) {
+ outgoing = new EObjectContainmentWithInverseEList<EHyperEdge>(EHyperEdge.class, this, EGraphsPackage.ENODE__OUTGOING, EGraphsPackage.EHYPER_EDGE__SOURCE);
+ }
+ return outgoing;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EList<EHyperEdge> getIncoming() {
+ if (incoming == null) {
+ incoming = new EObjectWithInverseResolvingEList.ManyInverse<EHyperEdge>(EHyperEdge.class, this, EGraphsPackage.ENODE__INCOMING, EGraphsPackage.EHYPER_EDGE__TARGETS);
+ }
+ return incoming;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case EGraphsPackage.ENODE__OUTGOING:
+ return ((InternalEList<InternalEObject>)(InternalEList<?>)getOutgoing()).basicAdd(otherEnd, msgs);
+ case EGraphsPackage.ENODE__INCOMING:
+ return ((InternalEList<InternalEObject>)(InternalEList<?>)getIncoming()).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 EGraphsPackage.ENODE__OUTGOING:
+ return ((InternalEList<?>)getOutgoing()).basicRemove(otherEnd, msgs);
+ case EGraphsPackage.ENODE__INCOMING:
+ return ((InternalEList<?>)getIncoming()).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 EGraphsPackage.ENODE__ELEMENT:
+ return getElement();
+ case EGraphsPackage.ENODE__OUTGOING:
+ return getOutgoing();
+ case EGraphsPackage.ENODE__INCOMING:
+ return getIncoming();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case EGraphsPackage.ENODE__ELEMENT:
+ setElement((String)newValue);
+ return;
+ case EGraphsPackage.ENODE__OUTGOING:
+ getOutgoing().clear();
+ getOutgoing().addAll((Collection<? extends EHyperEdge>)newValue);
+ return;
+ case EGraphsPackage.ENODE__INCOMING:
+ getIncoming().clear();
+ getIncoming().addAll((Collection<? extends EHyperEdge>)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case EGraphsPackage.ENODE__ELEMENT:
+ setElement(ELEMENT_EDEFAULT);
+ return;
+ case EGraphsPackage.ENODE__OUTGOING:
+ getOutgoing().clear();
+ return;
+ case EGraphsPackage.ENODE__INCOMING:
+ getIncoming().clear();
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case EGraphsPackage.ENODE__ELEMENT:
+ return ELEMENT_EDEFAULT == null ? element != null : !ELEMENT_EDEFAULT.equals(element);
+ case EGraphsPackage.ENODE__OUTGOING:
+ return outgoing != null && !outgoing.isEmpty();
+ case EGraphsPackage.ENODE__INCOMING:
+ return incoming != null && !incoming.isEmpty();
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String toString() {
+ if (eIsProxy()) return super.toString();
+
+ StringBuffer result = new StringBuffer(super.toString());
+ result.append(" (element: ");
+ result.append(element);
+ result.append(')');
+ return result.toString();
+ }
+
+} //ENodeImpl
diff --git a/tests/org.eclipse.emf.diffmerge.structures.model/src/org/eclipse/emf/diffmerge/structures/model/egraphs/util/EGraphsAdapterFactory.java b/tests/org.eclipse.emf.diffmerge.structures.model/src/org/eclipse/emf/diffmerge/structures/model/egraphs/util/EGraphsAdapterFactory.java
new file mode 100644
index 00000000..f842e0b9
--- /dev/null
+++ b/tests/org.eclipse.emf.diffmerge.structures.model/src/org/eclipse/emf/diffmerge/structures/model/egraphs/util/EGraphsAdapterFactory.java
@@ -0,0 +1,168 @@
+/**
+ * <copyright>
+ *
+ * Copyright (c) 2017 Thales Global Services S.A.S.
+ * 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:
+ * Thales Global Services S.A.S. - initial API and implementation
+ *
+ * </copyright>
+ */
+package org.eclipse.emf.diffmerge.structures.model.egraphs.util;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notifier;
+
+import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
+
+import org.eclipse.emf.diffmerge.structures.model.egraphs.*;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Adapter Factory</b> for the model.
+ * It provides an adapter <code>createXXX</code> method for each class of the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.diffmerge.structures.model.egraphs.EGraphsPackage
+ * @generated
+ */
+public class EGraphsAdapterFactory extends AdapterFactoryImpl {
+ /**
+ * The cached model package.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected static EGraphsPackage modelPackage;
+
+ /**
+ * Creates an instance of the adapter factory.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EGraphsAdapterFactory() {
+ if (modelPackage == null) {
+ modelPackage = EGraphsPackage.eINSTANCE;
+ }
+ }
+
+ /**
+ * Returns whether this factory is applicable for the type of the object.
+ * <!-- begin-user-doc -->
+ * This implementation returns <code>true</code> if the object is either the model's package or is an instance object of the model.
+ * <!-- end-user-doc -->
+ * @return whether this factory is applicable for the type of the object.
+ * @generated
+ */
+ @Override
+ public boolean isFactoryForType(Object object) {
+ if (object == modelPackage) {
+ return true;
+ }
+ if (object instanceof EObject) {
+ return ((EObject)object).eClass().getEPackage() == modelPackage;
+ }
+ return false;
+ }
+
+ /**
+ * The switch that delegates to the <code>createXXX</code> methods.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected EGraphsSwitch<Adapter> modelSwitch =
+ new EGraphsSwitch<Adapter>() {
+ @Override
+ public Adapter caseEGraph(EGraph object) {
+ return createEGraphAdapter();
+ }
+ @Override
+ public Adapter caseENode(ENode object) {
+ return createENodeAdapter();
+ }
+ @Override
+ public Adapter caseEHyperEdge(EHyperEdge object) {
+ return createEHyperEdgeAdapter();
+ }
+ @Override
+ public Adapter defaultCase(EObject object) {
+ return createEObjectAdapter();
+ }
+ };
+
+ /**
+ * Creates an adapter for the <code>target</code>.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param target the object to adapt.
+ * @return the adapter for the <code>target</code>.
+ * @generated
+ */
+ @Override
+ public Adapter createAdapter(Notifier target) {
+ return modelSwitch.doSwitch((EObject)target);
+ }
+
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.emf.diffmerge.structures.model.egraphs.EGraph <em>EGraph</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.diffmerge.structures.model.egraphs.EGraph
+ * @generated
+ */
+ public Adapter createEGraphAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.emf.diffmerge.structures.model.egraphs.ENode <em>ENode</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.diffmerge.structures.model.egraphs.ENode
+ * @generated
+ */
+ public Adapter createENodeAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.emf.diffmerge.structures.model.egraphs.EHyperEdge <em>EHyper Edge</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.diffmerge.structures.model.egraphs.EHyperEdge
+ * @generated
+ */
+ public Adapter createEHyperEdgeAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for the default case.
+ * <!-- begin-user-doc -->
+ * This default implementation returns null.
+ * <!-- end-user-doc -->
+ * @return the new adapter.
+ * @generated
+ */
+ public Adapter createEObjectAdapter() {
+ return null;
+ }
+
+} //EGraphsAdapterFactory
diff --git a/tests/org.eclipse.emf.diffmerge.structures.model/src/org/eclipse/emf/diffmerge/structures/model/egraphs/util/EGraphsResourceFactoryImpl.java b/tests/org.eclipse.emf.diffmerge.structures.model/src/org/eclipse/emf/diffmerge/structures/model/egraphs/util/EGraphsResourceFactoryImpl.java
new file mode 100644
index 00000000..df421760
--- /dev/null
+++ b/tests/org.eclipse.emf.diffmerge.structures.model/src/org/eclipse/emf/diffmerge/structures/model/egraphs/util/EGraphsResourceFactoryImpl.java
@@ -0,0 +1,53 @@
+/**
+ * <copyright>
+ *
+ * Copyright (c) 2017 Thales Global Services S.A.S.
+ * 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:
+ * Thales Global Services S.A.S. - initial API and implementation
+ *
+ * </copyright>
+ */
+package org.eclipse.emf.diffmerge.structures.model.egraphs.util;
+
+import org.eclipse.emf.common.util.URI;
+
+import org.eclipse.emf.ecore.resource.Resource;
+
+import org.eclipse.emf.ecore.resource.impl.ResourceFactoryImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Resource Factory</b> associated with the package.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.diffmerge.structures.model.egraphs.util.EGraphsResourceImpl
+ * @generated
+ */
+public class EGraphsResourceFactoryImpl extends ResourceFactoryImpl {
+ /**
+ * Creates an instance of the resource factory.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EGraphsResourceFactoryImpl() {
+ super();
+ }
+
+ /**
+ * Creates an instance of the resource.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Resource createResource(URI uri) {
+ Resource result = new EGraphsResourceImpl(uri);
+ return result;
+ }
+
+} //EGraphsResourceFactoryImpl
diff --git a/tests/org.eclipse.emf.diffmerge.structures.model/src/org/eclipse/emf/diffmerge/structures/model/egraphs/util/EGraphsResourceImpl.java b/tests/org.eclipse.emf.diffmerge.structures.model/src/org/eclipse/emf/diffmerge/structures/model/egraphs/util/EGraphsResourceImpl.java
new file mode 100644
index 00000000..30096719
--- /dev/null
+++ b/tests/org.eclipse.emf.diffmerge.structures.model/src/org/eclipse/emf/diffmerge/structures/model/egraphs/util/EGraphsResourceImpl.java
@@ -0,0 +1,40 @@
+/**
+ * <copyright>
+ *
+ * Copyright (c) 2017 Thales Global Services S.A.S.
+ * 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:
+ * Thales Global Services S.A.S. - initial API and implementation
+ *
+ * </copyright>
+ */
+package org.eclipse.emf.diffmerge.structures.model.egraphs.util;
+
+import org.eclipse.emf.common.util.URI;
+
+import org.eclipse.emf.ecore.xmi.impl.XMIResourceImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Resource </b> associated with the package.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.diffmerge.structures.model.egraphs.util.EGraphsResourceFactoryImpl
+ * @generated
+ */
+public class EGraphsResourceImpl extends XMIResourceImpl {
+ /**
+ * Creates an instance of the resource.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param uri the URI of the new resource.
+ * @generated
+ */
+ public EGraphsResourceImpl(URI uri) {
+ super(uri);
+ }
+
+} //EGraphsResourceImpl
diff --git a/tests/org.eclipse.emf.diffmerge.structures.model/src/org/eclipse/emf/diffmerge/structures/model/egraphs/util/EGraphsSwitch.java b/tests/org.eclipse.emf.diffmerge.structures.model/src/org/eclipse/emf/diffmerge/structures/model/egraphs/util/EGraphsSwitch.java
new file mode 100644
index 00000000..edbb7afd
--- /dev/null
+++ b/tests/org.eclipse.emf.diffmerge.structures.model/src/org/eclipse/emf/diffmerge/structures/model/egraphs/util/EGraphsSwitch.java
@@ -0,0 +1,180 @@
+/**
+ * <copyright>
+ *
+ * Copyright (c) 2017 Thales Global Services S.A.S.
+ * 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:
+ * Thales Global Services S.A.S. - initial API and implementation
+ *
+ * </copyright>
+ */
+package org.eclipse.emf.diffmerge.structures.model.egraphs.util;
+
+import java.util.List;
+
+import org.eclipse.emf.diffmerge.structures.model.egraphs.*;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Switch</b> for the model's inheritance hierarchy.
+ * It supports the call {@link #doSwitch(EObject) doSwitch(object)}
+ * to invoke the <code>caseXXX</code> method for each class of the model,
+ * starting with the actual class of the object
+ * and proceeding up the inheritance hierarchy
+ * until a non-null result is returned,
+ * which is the result of the switch.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.diffmerge.structures.model.egraphs.EGraphsPackage
+ * @generated
+ */
+public class EGraphsSwitch<T> {
+ /**
+ * The cached model package
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected static EGraphsPackage modelPackage;
+
+ /**
+ * Creates an instance of the switch.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EGraphsSwitch() {
+ if (modelPackage == null) {
+ modelPackage = EGraphsPackage.eINSTANCE;
+ }
+ }
+
+ /**
+ * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the first non-null result returned by a <code>caseXXX</code> call.
+ * @generated
+ */
+ public T doSwitch(EObject theEObject) {
+ return doSwitch(theEObject.eClass(), theEObject);
+ }
+
+ /**
+ * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the first non-null result returned by a <code>caseXXX</code> call.
+ * @generated
+ */
+ protected T doSwitch(EClass theEClass, EObject theEObject) {
+ if (theEClass.eContainer() == modelPackage) {
+ return doSwitch(theEClass.getClassifierID(), theEObject);
+ }
+ else {
+ List<EClass> eSuperTypes = theEClass.getESuperTypes();
+ return
+ eSuperTypes.isEmpty() ?
+ defaultCase(theEObject) :
+ doSwitch(eSuperTypes.get(0), theEObject);
+ }
+ }
+
+ /**
+ * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the first non-null result returned by a <code>caseXXX</code> call.
+ * @generated
+ */
+ protected T doSwitch(int classifierID, EObject theEObject) {
+ switch (classifierID) {
+ case EGraphsPackage.EGRAPH: {
+ EGraph eGraph = (EGraph)theEObject;
+ T result = caseEGraph(eGraph);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case EGraphsPackage.ENODE: {
+ ENode eNode = (ENode)theEObject;
+ T result = caseENode(eNode);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case EGraphsPackage.EHYPER_EDGE: {
+ EHyperEdge eHyperEdge = (EHyperEdge)theEObject;
+ T result = caseEHyperEdge(eHyperEdge);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ default: return defaultCase(theEObject);
+ }
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>EGraph</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>EGraph</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseEGraph(EGraph object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>ENode</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>ENode</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseENode(ENode object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>EHyper Edge</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>EHyper Edge</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseEHyperEdge(EHyperEdge object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.
+ * <!-- begin-user-doc -->
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch, but this is the last case anyway.
+ * <!-- end-user-doc -->
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of '<em>EObject</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject)
+ * @generated
+ */
+ public T defaultCase(EObject object) {
+ return null;
+ }
+
+} //EGraphsSwitch
diff --git a/tests/org.eclipse.emf.diffmerge.structures.model/src/org/eclipse/emf/diffmerge/structures/model/integration/EImpact.java b/tests/org.eclipse.emf.diffmerge.structures.model/src/org/eclipse/emf/diffmerge/structures/model/integration/EImpact.java
new file mode 100644
index 00000000..05f4eab4
--- /dev/null
+++ b/tests/org.eclipse.emf.diffmerge.structures.model/src/org/eclipse/emf/diffmerge/structures/model/integration/EImpact.java
@@ -0,0 +1,60 @@
+/**
+ * <copyright>
+ *
+ * Copyright (c) 2017 Thales Global Services S.A.S.
+ * 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:
+ * Thales Global Services S.A.S. - initial API and implementation
+ *
+ * </copyright>
+ */
+package org.eclipse.emf.diffmerge.structures.model.integration;
+
+import java.util.Collection;
+
+import org.eclipse.emf.diffmerge.structures.IEqualityTester;
+import org.eclipse.emf.diffmerge.structures.endo.qualified.IRangedQEndorelation;
+import org.eclipse.emf.diffmerge.structures.impacts.CachingImpact;
+import org.eclipse.emf.diffmerge.structures.impacts.IImpactRule;
+
+
+/**
+ * An EMF-based implementation of an impact.
+ *
+ * @author Olivier Constant
+ */
+public class EImpact extends CachingImpact {
+
+ /**
+ * Constructor
+ * @param origins_p the non-null set of sources of the impact
+ * @param rules_p the non-null set of impact rules
+ */
+ public EImpact(Collection<?> origins_p, Collection<IImpactRule> rules_p) {
+ this(origins_p, rules_p, null);
+ }
+
+ /**
+ * Constructor
+ * @param origins_p the non-null set of sources of the impact
+ * @param rules_p the non-null set of impact rules
+ * @param tester_p a potentially null equality tester
+ */
+ public EImpact(Collection<?> origins_p, Collection<IImpactRule> rules_p,
+ IEqualityTester tester_p) {
+ super(origins_p, rules_p, tester_p);
+ }
+
+ /**
+ * @see org.eclipse.emf.diffmerge.util.relations.endo.qualified.IncQEndorelation#newExploredSubset()
+ */
+ @Override
+ protected IRangedQEndorelation.Editable<Object, IImpactRule> newExploredSubset() {
+ return new EImpactExploredSubset(defaultQualifier(), getEqualityTester());
+ }
+
+}
diff --git a/tests/org.eclipse.emf.diffmerge.structures.model/src/org/eclipse/emf/diffmerge/structures/model/integration/EImpactExploredSubset.java b/tests/org.eclipse.emf.diffmerge.structures.model/src/org/eclipse/emf/diffmerge/structures/model/integration/EImpactExploredSubset.java
new file mode 100644
index 00000000..941d573b
--- /dev/null
+++ b/tests/org.eclipse.emf.diffmerge.structures.model/src/org/eclipse/emf/diffmerge/structures/model/integration/EImpactExploredSubset.java
@@ -0,0 +1,69 @@
+/**
+ * <copyright>
+ *
+ * Copyright (c) 2017 Thales Global Services S.A.S.
+ * 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:
+ * Thales Global Services S.A.S. - initial API and implementation
+ *
+ * </copyright>
+ */
+package org.eclipse.emf.diffmerge.structures.model.integration;
+
+import org.eclipse.emf.diffmerge.structures.IEqualityTester;
+import org.eclipse.emf.diffmerge.structures.binary.qualified.IRangedQBinaryRelation;
+import org.eclipse.emf.diffmerge.structures.endo.qualified.EditableQEndorelation;
+import org.eclipse.emf.diffmerge.structures.impacts.IImpactRule;
+
+
+/**
+ * An EMF-based implementation of a qualified endorelation.
+ *
+ * @author Olivier Constant
+ */
+public class EImpactExploredSubset extends EditableQEndorelation<Object, IImpactRule> {
+
+ /** The potentially null default qualifier */
+ private final IImpactRule _defaultQualifier;
+
+
+ /**
+ * Constructor for the default equality tester (by reference)
+ * @param defaultQualifier_p the potentially null default qualifier
+ */
+ public EImpactExploredSubset(IImpactRule defaultQualifier_p) {
+ this(defaultQualifier_p, null);
+ }
+
+ /**
+ * Constructor
+ * @param defaultQualifier_p the potentially null default qualifier
+ * @param tester_p a potentially null equality tester for comparing elements
+ */
+ public EImpactExploredSubset(IImpactRule defaultQualifier_p, IEqualityTester tester_p) {
+ super(tester_p);
+ _defaultQualifier = defaultQualifier_p;
+ }
+
+ /**
+ * @see org.eclipse.emf.diffmerge.util.relations.binary.qualified.AbstractQBinaryRelation#defaultQualifier()
+ */
+ @Override
+ public IImpactRule defaultQualifier() {
+ return _defaultQualifier;
+ }
+
+ /**
+ * @see org.eclipse.emf.diffmerge.util.relations.endo.qualified.EditableQEndorelation#newContents(org.eclipse.emf.diffmerge.util.structures.IEqualityTester)
+ */
+ @Override
+ protected IRangedQBinaryRelation.Editable<Object, Object, IImpactRule> newContents(
+ IEqualityTester tester_p) {
+ return new GraphQBinaryRelation(tester_p);
+ }
+
+}
diff --git a/tests/org.eclipse.emf.diffmerge.structures.model/src/org/eclipse/emf/diffmerge/structures/model/integration/GraphQBinaryRelation.java b/tests/org.eclipse.emf.diffmerge.structures.model/src/org/eclipse/emf/diffmerge/structures/model/integration/GraphQBinaryRelation.java
new file mode 100644
index 00000000..6d4be162
--- /dev/null
+++ b/tests/org.eclipse.emf.diffmerge.structures.model/src/org/eclipse/emf/diffmerge/structures/model/integration/GraphQBinaryRelation.java
@@ -0,0 +1,472 @@
+/**
+ * <copyright>
+ *
+ * Copyright (c) 2017 Thales Global Services S.A.S.
+ * 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:
+ * Thales Global Services S.A.S. - initial API and implementation
+ *
+ * </copyright>
+ */
+package org.eclipse.emf.diffmerge.structures.model.integration;
+
+import static org.eclipse.emf.diffmerge.structures.Relations.qualifiedCopyInto;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.emf.common.util.EMap;
+import org.eclipse.emf.diffmerge.structures.IEqualityTester;
+import org.eclipse.emf.diffmerge.structures.binary.qualified.AbstractQBinaryRelation;
+import org.eclipse.emf.diffmerge.structures.binary.qualified.IQBinaryRelation;
+import org.eclipse.emf.diffmerge.structures.binary.qualified.IRangedQBinaryRelation;
+import org.eclipse.emf.diffmerge.structures.common.FArrayList;
+import org.eclipse.emf.diffmerge.structures.common.FHashMap;
+import org.eclipse.emf.diffmerge.structures.common.FHashSet;
+import org.eclipse.emf.diffmerge.structures.common.FLinkedList;
+import org.eclipse.emf.diffmerge.structures.common.FOrderedSet;
+import org.eclipse.emf.diffmerge.structures.model.egraphs.EGraph;
+import org.eclipse.emf.diffmerge.structures.model.egraphs.EGraphsFactory;
+import org.eclipse.emf.diffmerge.structures.model.egraphs.EHyperEdge;
+import org.eclipse.emf.diffmerge.structures.model.egraphs.ENode;
+
+
+/**
+ * An implementation of modifiable finite, qualified binary relations whose
+ * internal state is defined as a graph.
+ * @see org.eclipse.emf.diffmerge.util.relations.binary.qualified.IQBinaryRelation
+ *
+ * @param <T> the type of the domain elements
+ * @param <U> the type of the codomain elements
+ * @param <Q> the type of the qualifiers
+ * @author Olivier Constant
+ */
+public class GraphQBinaryRelation<T, U, Q> extends AbstractQBinaryRelation<T, U, Q>
+implements IQBinaryRelation.Invertible<T, U, Q> {
+
+ /** The non-null internal state */
+ protected final EGraph _state;
+
+ /** The non-null (element -> node) cache. */
+ protected final EMap<Object, ENode> _cache;
+
+
+ /**
+ * Constructor for the default equality tester (by reference)
+ */
+ public GraphQBinaryRelation() {
+ this((IEqualityTester)null);
+ }
+
+ /**
+ * Constructor
+ * @param tester_p a potentially null equality tester for comparing elements
+ * (null means default)
+ */
+ public GraphQBinaryRelation(IEqualityTester tester_p) {
+ this(null, tester_p);
+ }
+
+ /**
+ * Constructor
+ * @param tester_p a potentially null equality tester for comparing elements
+ * (null means default)
+ * @param initialContents_p a potentially null initial state
+ */
+ public GraphQBinaryRelation(EGraph initialContents_p, IEqualityTester tester_p) {
+ super(tester_p);
+ _state = initialContents_p != null? initialContents_p:
+ EGraphsFactory.eINSTANCE.createEGraph();
+ _cache = new FHashMap<Object, ENode>(getEqualityTester());
+ if (initialContents_p != null) {
+ for (ENode node : initialContents_p.getContents()) {
+ _cache.put(node.getElement(), node);
+ }
+ }
+ }
+
+ /**
+ * Constructor
+ * @param initialContents_p a non-null ranged qualified binary relation defining the
+ * initial contents of this relation
+ */
+ public GraphQBinaryRelation(
+ IRangedQBinaryRelation<T, U, Q> initialContents_p) {
+ this(initialContents_p.getEqualityTester());
+ qualifiedCopyInto(initialContents_p, this);
+ }
+
+ /**
+ * @see org.eclipse.emf.diffmerge.util.relations.binary.qualified.IQBinaryRelation.Editable#add(java.lang.Object, java.lang.Object, java.lang.Object)
+ */
+ public boolean add(T source_p, U target_p, Q qualifier_p) {
+ EHyperEdge edge = getCreateEdge(source_p, qualifier_p);
+ ENode targetNode = getCreateNode(target_p);
+ boolean result = edge.getTargets().add(targetNode);
+ return result;
+ }
+
+ /**
+ * @see org.eclipse.emf.diffmerge.util.relations.binary.qualified.IQBinaryRelation.Editable#addAll(java.lang.Object, java.util.Collection, java.lang.Object)
+ */
+ public boolean addAll(T source_p, Collection<? extends U> targets_p, Q qualifier_p) {
+ EHyperEdge edge = getCreateEdge(source_p, qualifier_p);
+ boolean result = false;
+ for (U target : targets_p) {
+ ENode targetNode = getCreateNode(target);
+ boolean actuallyAdded = edge.getTargets().add(targetNode);
+ result = result || actuallyAdded;
+ }
+ return result;
+ }
+
+ /**
+ * Check whether the given edge must be removed after the removal
+ * of at least one of its targets
+ * @param node_p a non-null node
+ * @return whether it was removed
+ */
+ protected boolean checkGarbage(EHyperEdge edge_p) {
+ boolean result = false;
+ if (edge_p.getTargets().isEmpty()) {
+ result = true;
+ ENode sourceNode = edge_p.getSource();
+ edge_p.setSource(null);
+ if (sourceNode != null)
+ checkGarbage(sourceNode);
+ }
+ return result;
+ }
+
+ /**
+ * Check whether the given node must be removed
+ * @param node_p a non-null node
+ * @return whether it was removed
+ */
+ protected boolean checkGarbage(ENode node_p) {
+ boolean result = false;
+ if (node_p.getIncoming().isEmpty() && node_p.getOutgoing().isEmpty()) {
+ result = _state.getContents().remove(node_p);
+ _cache.removeKey(node_p.getElement());
+ }
+ return result;
+ }
+
+ /**
+ * @see org.eclipse.emf.diffmerge.util.relations.binary.IBinaryRelation.Editable#clear()
+ */
+ public void clear() {
+ _state.getContents().clear();
+ _cache.clear();
+ }
+
+ /**
+ * Return, and create if needed, the outgoing edge for the given element through
+ * the given qualifier
+ * @param source_p a non-null element
+ * @param qualifier_p a non-null qualifier
+ * @return a non-null, potentially empty, modifiable collection for storing targets
+ */
+ protected EHyperEdge getCreateEdge(T source_p, Q qualifier_p) {
+ ENode node = getCreateNode(source_p);
+ EHyperEdge edge = getOutgoingEdge(node, qualifier_p);
+ if (edge == null) {
+ edge = EGraphsFactory.eINSTANCE.createEHyperEdge();
+ edge.setLabel(qualifier_p.toString());
+ edge.setSource(node);
+ }
+ return edge;
+ }
+
+ /**
+ * Return, and create if needed, the node for the given element
+ * @param element_p a non-null element
+ * @return a non-null, potentially empty, modifiable collection for storing targets
+ */
+ protected ENode getCreateNode(Object element_p) {
+ ENode result = _cache.get(element_p);
+ if (result == null) {
+ result = EGraphsFactory.eINSTANCE.createENode();
+ result.setElement(element_p.toString());
+ _state.getContents().add(result);
+ _cache.put(element_p, result);
+ }
+ return result;
+ }
+
+ /**
+ * Return the edge for the given qualifier on the given node, if any
+ * @param node_p a non-null node
+ * @param qualifier_p a potentially null qualifier
+ * @return a potentially null edge
+ */
+ protected EHyperEdge getOutgoingEdge(ENode node_p, Q qualifier_p) {
+ IEqualityTester tester = getEqualityTester();
+ for (EHyperEdge edge : node_p.getOutgoing()) {
+ if (tester.areEqual(qualifier_p, edge.getLabel()))
+ return edge;
+ }
+ return null;
+ }
+
+ /**
+ * @see org.eclipse.emf.diffmerge.util.relations.binary.qualified.IQBinaryRelation.Invertible#getInverse(java.lang.Object)
+ */
+ public Collection<T> getInverse(U element_p) {
+ Collection<T> result;
+ ENode node = _cache.get(element_p);
+ if (node != null) {
+ result = new FOrderedSet<T>(getEqualityTester());
+ for (EHyperEdge edge : node.getIncoming()) {
+ result.add((T)edge.getSource().getElement());
+ }
+ result = Collections.unmodifiableCollection(result);
+ } else {
+ result = Collections.emptySet();
+ }
+ return result;
+ }
+
+ /**
+ * @see org.eclipse.emf.diffmerge.util.relations.binary.qualified.IQBinaryRelation.Invertible#getInverse(java.lang.Object, java.lang.Object)
+ */
+ public Collection<T> getInverse(U element_p, Q qualifier_p) {
+ Collection<T> result;
+ IEqualityTester tester = getEqualityTester();
+ ENode node = _cache.get(element_p);
+ if (node != null) {
+ result = new FOrderedSet<T>(tester);
+ for (EHyperEdge edge : node.getIncoming()) {
+ if (tester.areEqual(qualifier_p, edge.getLabel()))
+ result.add((T)edge.getSource().getElement());
+ }
+ result = Collections.unmodifiableCollection(result);
+ } else {
+ result = Collections.emptySet();
+ }
+ return result;
+ }
+
+ /**
+ * @see org.eclipse.emf.diffmerge.util.relations.binary.qualified.IQBinaryRelation.Invertible#getInverseQualifiers(java.lang.Object)
+ */
+ public Collection<Q> getInverseQualifiers(U element_p) {
+ Collection<Q> result;
+ ENode node = _cache.get(element_p);
+ if (node != null) {
+ result = new FOrderedSet<Q>(getEqualityTester());
+ for (EHyperEdge edge : node.getIncoming()) {
+ result.add((Q)edge.getLabel());
+ }
+ result = Collections.unmodifiableCollection(result);
+ } else {
+ result = Collections.emptySet();
+ }
+ return result;
+ }
+
+ /**
+ * @see org.eclipse.emf.diffmerge.util.relations.binary.qualified.IQBinaryRelation.Invertible#getInverseWithDetails(java.lang.Object)
+ */
+ public Map<Q, Collection<T>> getInverseWithDetails(U element_p) {
+ IEqualityTester tester = getEqualityTester();
+ EMap<Q, Collection<T>> result = new FHashMap<Q, Collection<T>>(tester);
+ ENode node = _cache.get(element_p);
+ if (node != null) {
+ for (EHyperEdge edge : node.getIncoming()) {
+ Q qualifier = (Q)edge.getLabel();
+ Collection<T> sources = result.get(qualifier);
+ if (sources == null) {
+ sources = new FArrayList<T>(tester);
+ result.put(qualifier, sources);
+ }
+ T source = (T)edge.getSource().getElement();
+ sources.add(source);
+ }
+ }
+ return Collections.unmodifiableMap(result.map());
+ }
+
+ /**
+ * @see org.eclipse.emf.diffmerge.util.relations.binary.qualified.IRangedQBinaryRelation#getQualifiers()
+ */
+ public Collection<Q> getQualifiers() {
+ Set<Q> result = new FHashSet<Q>(getEqualityTester());
+ for (ENode node : _state.getContents()) {
+ result.addAll(getQualifiers((T)node.getElement()));
+ }
+ return Collections.unmodifiableSet(result);
+ }
+
+ /**
+ * @see org.eclipse.emf.diffmerge.util.relations.binary.IRangedBinaryRelation#getSources()
+ */
+ public Collection<T> getSources() {
+ Collection<T> result = new FLinkedList<T>(getEqualityTester());
+ for (ENode node : _state.getContents()) {
+ if (!node.getOutgoing().isEmpty())
+ result.add((T)node.getElement());
+ }
+ return Collections.unmodifiableCollection(result);
+ }
+
+ /**
+ * @see org.eclipse.emf.diffmerge.util.relations.binary.IRangedBinaryRelation#getTargets()
+ */
+ public Collection<U> getTargets() {
+ Collection<U> result = new FLinkedList<U>(getEqualityTester());
+ for (ENode node : _state.getContents()) {
+ if (!node.getIncoming().isEmpty())
+ result.add((U)node.getElement());
+ }
+ return Collections.unmodifiableCollection(result);
+ }
+
+ /**
+ * @see org.eclipse.emf.diffmerge.util.relations.binary.qualified.IQBinaryRelation#getWithDetails(java.lang.Object)
+ */
+ public Map<Q, Collection<U>> getWithDetails(T element_p) {
+ EMap<Q, Collection<U>> result = new FHashMap<Q, Collection<U>>(getEqualityTester());
+ ENode node = _cache.get(element_p);
+ if (node != null) {
+ for (EHyperEdge edge : node.getOutgoing()) {
+ Collection<U> targets = (Collection)Collections.unmodifiableCollection(
+ edge.getTargets());
+ result.put((Q)edge.getLabel(), targets);
+ }
+ }
+ return Collections.unmodifiableMap(result.map());
+ }
+
+ /**
+ * @see org.eclipse.emf.diffmerge.util.relations.binary.IBinaryRelation.Editable#remove(java.lang.Object, java.lang.Object)
+ */
+ public boolean remove(T source_p, U target_p) {
+ boolean result = false;
+ ENode sourceNode = _cache.get(source_p);
+ ENode targetNode = _cache.get(target_p);
+ if (sourceNode != null && targetNode != null) {
+ for (EHyperEdge edge : sourceNode.getOutgoing()) {
+ boolean actuallyRemoved = edge.getTargets().remove(targetNode);
+ result = result || actuallyRemoved;
+ if (actuallyRemoved)
+ checkGarbage(edge);
+ }
+ if (result) {
+ checkGarbage(sourceNode);
+ checkGarbage(targetNode);
+ }
+ }
+ return result;
+ }
+
+ /**
+ * @see org.eclipse.emf.diffmerge.util.relations.binary.qualified.IQBinaryRelation.Editable#remove(java.lang.Object, java.lang.Object, java.lang.Object)
+ */
+ public boolean remove(T source_p, U target_p, Q qualifier_p) {
+ boolean result = false;
+ ENode sourceNode = _cache.get(source_p);
+ ENode targetNode = _cache.get(target_p);
+ if (sourceNode != null && targetNode != null) {
+ EHyperEdge edge = getOutgoingEdge(sourceNode, qualifier_p);
+ if (edge != null) {
+ result = edge.getTargets().remove(targetNode);
+ if (result) {
+ checkGarbage(edge);
+ checkGarbage(sourceNode);
+ checkGarbage(targetNode);
+ }
+ }
+ }
+ return result;
+ }
+
+ /**
+ * @see org.eclipse.emf.diffmerge.util.relations.binary.qualified.IRangedQBinaryRelation.Editable#removeQualifier(java.lang.Object)
+ */
+ public boolean removeQualifier(Q qualifier_p) {
+ boolean result = false;
+ for (ENode node : new FLinkedList<ENode>(_state.getContents(), null)) {
+ boolean actuallyRemoved = removeQualifier(node, qualifier_p);
+ result = result || actuallyRemoved;
+ }
+ return result;
+ }
+
+ /**
+ * Remove the edge corresponding to the given qualifier on the given node
+ * @param source_p a non-null node
+ * @param qualifier_p a non-null qualifier
+ * @return whether the operation had an actual effect
+ */
+ protected boolean removeQualifier(ENode sourceNode_p, Q qualifier_p) {
+ boolean result = false;
+ EHyperEdge edge = getOutgoingEdge(sourceNode_p, qualifier_p);
+ if (edge != null) {
+ result = true;
+ Collection<ENode> targetNodes = new FLinkedList<ENode>(edge.getTargets(), null);
+ edge.getTargets().clear();
+ for (ENode targetNode : targetNodes) {
+ checkGarbage(targetNode);
+ }
+ }
+ return result;
+ }
+
+ /**
+ * @see org.eclipse.emf.diffmerge.util.relations.binary.qualified.IQBinaryRelation.Editable#removeQualifier(java.lang.Object, java.lang.Object)
+ */
+ public boolean removeQualifier(T source_p, Q qualifier_p) {
+ boolean result = false;
+ ENode sourceNode = _cache.get(source_p);
+ if (sourceNode != null)
+ result = removeQualifier(sourceNode, qualifier_p);
+ return result;
+ }
+
+ /**
+ * @see org.eclipse.emf.diffmerge.util.relations.binary.IRangedBinaryRelation.Editable#removeSource(java.lang.Object)
+ */
+ public boolean removeSource(T source_p) {
+ boolean result = false;
+ ENode node = _cache.get(source_p);
+ if (node != null) {
+ result = !node.getOutgoing().isEmpty();
+ for (EHyperEdge edge : node.getOutgoing()) {
+ Collection<ENode> targetNodes = new FLinkedList<ENode>(edge.getTargets(), null);
+ edge.getTargets().clear();
+ for (ENode targetNode : targetNodes) {
+ checkGarbage(targetNode);
+ }
+ }
+ node.getOutgoing().clear();
+ checkGarbage(node);
+ }
+ return result;
+ }
+
+ /**
+ * @see org.eclipse.emf.diffmerge.util.relations.binary.IRangedBinaryRelation.Editable#removeTarget(java.lang.Object)
+ */
+ public boolean removeTarget(U target_p) {
+ boolean result = false;
+ ENode node = _cache.get(target_p);
+ if (node != null) {
+ for (EHyperEdge edge : new FLinkedList<EHyperEdge>(node.getIncoming(), null)) {
+ boolean actuallyRemoved = edge.getTargets().remove(node);
+ result = result || actuallyRemoved;
+ checkGarbage(edge);
+ }
+ if (result)
+ checkGarbage(node);
+ }
+ return result;
+ }
+
+}

Back to the top