Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAbel Hegedus2017-02-07 11:26:43 -0500
committerAbel Hegedus2017-02-28 05:34:19 -0500
commitb2f7a58ca1e9ba161a179499cbc063988a6a8c8c (patch)
tree09b3ed9e553983cc8c9c077f0a1a42ab855d419b
parentb860bb766c0374ec1c38cf4ab93c712f05d42504 (diff)
downloadorg.eclipse.emf.diffmerge.patch-b2f7a58ca1e9ba161a179499cbc063988a6a8c8c.tar.gz
org.eclipse.emf.diffmerge.patch-b2f7a58ca1e9ba161a179499cbc063988a6a8c8c.tar.xz
org.eclipse.emf.diffmerge.patch-b2f7a58ca1e9ba161a179499cbc063988a6a8c8c.zip
[512797] EMF persistence and serialization option for model patches
Bug: 512797 Change-Id: I43ae42fd75314c36aa70753c21102bcda342c488 Signed-off-by: Abel Hegedus <abel.hegedus@incquerylabs.com>
-rw-r--r--examples/org.eclipse.emf.diffmerge.patch.examples/pom.xml28
-rw-r--r--examples/pom.xml36
-rw-r--r--features/org.eclipse.emf.diffmerge.patch.feature/feature.xml22
-rw-r--r--features/pom.xml26
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/.classpath8
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/.project35
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/.settings/org.eclipse.core.resources.prefs2
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/.settings/org.eclipse.core.runtime.prefs2
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/.settings/org.eclipse.jdt.core.prefs7
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/META-INF/MANIFEST.MF25
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/about.html21
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/build.properties9
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/model/modelpatch.aird855
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/model/modelpatch.ecore58
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/model/modelpatch.genmodel56
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/model/modelpatch.pngbin0 -> 57198 bytes
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/plugin.properties9
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/plugin.xml13
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/pom.xml49
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/EMFModelPatchPersister.xtend41
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/EMFModelPatchSerializer.xtend99
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/EAttributeEntry.java57
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/EChangeDirection.java222
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/EElementEntry.java57
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/EIdentifiable.java84
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/EModelPatch.java126
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/EModelPatchEMFMetadata.java65
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/EModelPatchElement.java58
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/EModelPatchEntry.java87
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/EModelPatchFactory.java104
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/EModelPatchMetadata.java138
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/EModelPatchPackage.java1371
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/EReferenceEntry.java57
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/EStructuralFeatureEntry.java57
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/impl/EAttributeEntryImpl.java170
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/impl/EElementEntryImpl.java164
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/impl/EIdentifiableImpl.java224
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/impl/EModelPatchEMFMetadataImpl.java191
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/impl/EModelPatchElementImpl.java174
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/impl/EModelPatchEntryImpl.java233
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/impl/EModelPatchFactoryImpl.java220
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/impl/EModelPatchImpl.java337
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/impl/EModelPatchMetadataImpl.java332
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/impl/EModelPatchPackageImpl.java619
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/impl/EReferenceEntryImpl.java164
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/impl/EStructuralFeatureEntryImpl.java164
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/util/EModelPatchAdapterFactory.java290
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/util/EModelPatchSwitch.java323
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/transform/EModelPatchToPOJO.xtend125
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/transform/ModelPatchToEMF.xtend181
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/xtend-gen/.gitignore2
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch.persistence.json/.classpath8
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch.persistence.json/pom.xml28
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch.persistence.json/src/org/eclipse/emf/diffmerge/patch/serializer/gson/GsonModelPatchSerializer.java33
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch.runtime/META-INF/MANIFEST.MF7
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch.runtime/src/org/eclipse/emf/diffmerge/patch/runtime/identifier/EMFIdentifierProvider.java5
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch.runtime/src/org/eclipse/emf/diffmerge/patch/runtime/identifier/IdentifiedEMFObjectLocator.java5
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch.runtime/src/org/eclipse/emf/diffmerge/patch/runtime/modelaccess/ModelAccessProvider.xtend6
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch.ui/META-INF/MANIFEST.MF5
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch.ui/plugin.xml2
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/Activator.java58
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/ModelPatchUIPlugin.java61
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/dialogs/ModelpatchEntryFilterCreationDialog.java422
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/dialogs/ModelpatchViewerDialog.java193
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/editors/ModelPatchEditorPart.java376
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/handlers/ComparisonSelectionUtil.xtend228
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/handlers/ModelpatchApplicationHandler.xtend5
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/handlers/ModelpatchGenerationHandler.xtend38
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/preferences/ModelPatchPreferencePage.java13
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/preferences/ModelPatchPreferenceProvider.java14
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/utils/DefaultEntryLabelProvider.xtend5
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/utils/DialogFactory.xtend6
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/utils/EntryPropertyWrapper.java30
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/utils/IEntryLabelProvider.java6
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/utils/IdentifiableWrapper.java4
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/utils/IdentifiableWrapperFactory.java21
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/utils/ModelPatchContentProvider.xtend6
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/utils/ModelPatchEntryFilterContentProvider.xtend3
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/utils/ModelPatchEntryFilterLabelProvider.xtend9
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/utils/ModelPatchEntryHelper.xtend3
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/utils/ModelPatchLabelProvider.xtend4
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/utils/ModelpatchApplicationDTO.xtend35
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/utils/PersistenceTypes.java (renamed from plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/utils/SerializationTypes.java)6
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/utils/SerializerProvider.xtend29
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/wizards/ModelpatchApplicationWizard.xtend10
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/wizards/pages/ModelpatchEDMWizardPage.java129
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/wizards/pages/ModelpatchFilteringWizardPage.java394
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/wizards/pages/ModelpatchLoadingPatchWizardPage.java179
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/wizards/pages/ModelpatchResultWizardPage.java363
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch/META-INF/MANIFEST.MF1
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch/src/org/eclipse/emf/diffmerge/patch/api/ModelPatchFilterApplier.xtend2
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch/src/org/eclipse/emf/diffmerge/patch/api/ModelPatchMetadata.java2
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch/src/org/eclipse/emf/diffmerge/patch/persistence/ModelPatchPersister.xtend25
-rw-r--r--plugins/org.eclipse.emf.diffmerge.patch/src/org/eclipse/emf/diffmerge/patch/serializer/IModelPatchSerializer.java39
-rw-r--r--plugins/pom.xml23
-rw-r--r--releng/org.eclipse.emf.diffmerge.patch.target/org.eclipse.emf.diffmerge.patch.target.target8
-rw-r--r--releng/org.eclipse.emf.diffmerge.patch.target/org.eclipse.emf.diffmerge.patch.target.tpd32
-rw-r--r--releng/org.eclipse.emf.diffmerge.patch.update/packaging-p2composite.ant14
-rw-r--r--releng/org.eclipse.emf.diffmerge.patch.update/pom.xml52
-rw-r--r--tests/org.eclipse.emf.diffmerge.patch.tests.all/META-INF/MANIFEST.MF5
-rw-r--r--tests/org.eclipse.emf.diffmerge.patch.tests.all/launch/RunAllTestSuite.launch12
-rw-r--r--tests/org.eclipse.emf.diffmerge.patch.tests.all/src/org/eclipse/emf/diffmerge/patch/tests/all/RunAllTestSuite.xtend4
-rw-r--r--tests/org.eclipse.emf.diffmerge.patch.tests.emf/META-INF/MANIFEST.MF3
-rw-r--r--tests/org.eclipse.emf.diffmerge.patch.tests.emf/model/demo-patch-generated.emodelpatch33
-rw-r--r--tests/org.eclipse.emf.diffmerge.patch.tests.emf/src/org/eclipse/emf/diffmerge/patch/tests/emf/CPSModelPatchApplierTest.xtend6
-rw-r--r--tests/org.eclipse.emf.diffmerge.patch.tests.emf/src/org/eclipse/emf/diffmerge/patch/tests/emf/EMFModelAccessTest.xtend14
-rw-r--r--tests/org.eclipse.emf.diffmerge.patch.tests.emf/src/org/eclipse/emf/diffmerge/patch/tests/emf/ModelPatchApplierSmokeTests.xtend2
-rw-r--r--tests/org.eclipse.emf.diffmerge.patch.tests.emf/src/org/eclipse/emf/diffmerge/patch/tests/emf/ModelPatchEmfTestSuite.xtend4
-rw-r--r--tests/org.eclipse.emf.diffmerge.patch.tests.emf/src/org/eclipse/emf/diffmerge/patch/tests/emf/identifier/EMFIdentifierProviderTest.java150
-rw-r--r--tests/org.eclipse.emf.diffmerge.patch.tests.emf/src/org/eclipse/emf/diffmerge/patch/tests/emf/identifier/IdentifiedEMFObjectLocatorTest.java86
-rw-r--r--tests/org.eclipse.emf.diffmerge.patch.tests.emf/src/org/eclipse/emf/diffmerge/patch/tests/emf/identifier/IdentifierTestSuite.java24
-rw-r--r--tests/org.eclipse.emf.diffmerge.patch.tests.performance/META-INF/MANIFEST.MF3
-rw-r--r--tests/org.eclipse.emf.diffmerge.patch.tests.performance/src/org/eclipse/emf/diffmerge/patch/tests/performance/ModelPatchPerformanceTests.xtend8
-rw-r--r--tests/org.eclipse.emf.diffmerge.patch.tests.persistence.emf/.classpath8
-rw-r--r--tests/org.eclipse.emf.diffmerge.patch.tests.persistence.emf/.project34
-rw-r--r--tests/org.eclipse.emf.diffmerge.patch.tests.persistence.emf/.settings/org.eclipse.core.resources.prefs2
-rw-r--r--tests/org.eclipse.emf.diffmerge.patch.tests.persistence.emf/.settings/org.eclipse.core.runtime.prefs2
-rw-r--r--tests/org.eclipse.emf.diffmerge.patch.tests.persistence.emf/.settings/org.eclipse.jdt.core.prefs7
-rw-r--r--tests/org.eclipse.emf.diffmerge.patch.tests.persistence.emf/META-INF/MANIFEST.MF14
-rw-r--r--tests/org.eclipse.emf.diffmerge.patch.tests.persistence.emf/about.html21
-rw-r--r--tests/org.eclipse.emf.diffmerge.patch.tests.persistence.emf/build.properties17
-rw-r--r--tests/org.eclipse.emf.diffmerge.patch.tests.persistence.emf/plugin.properties9
-rw-r--r--tests/org.eclipse.emf.diffmerge.patch.tests.persistence.emf/pom.xml50
-rw-r--r--tests/org.eclipse.emf.diffmerge.patch.tests.persistence.emf/src/org/eclipse/emf/diffmerge/patch/tests/persistence/emf/BaseModelPatchPersistenceEMFTest.java60
-rw-r--r--tests/org.eclipse.emf.diffmerge.patch.tests.persistence.emf/src/org/eclipse/emf/diffmerge/patch/tests/persistence/emf/ModelPatchPersistenceEMFTest.java103
-rw-r--r--tests/org.eclipse.emf.diffmerge.patch.tests.persistence.emf/src/org/eclipse/emf/diffmerge/patch/tests/persistence/emf/ModelPatchPersistenceEMFTestSuite.xtend22
-rw-r--r--tests/org.eclipse.emf.diffmerge.patch.tests.persistence.emf/src/org/eclipse/emf/diffmerge/patch/tests/persistence/emf/ModelPatchSerializerEMFTest.xtend73
-rw-r--r--tests/org.eclipse.emf.diffmerge.patch.tests.persistence.emf/xtend-gen/.gitignore2
-rw-r--r--tests/org.eclipse.emf.diffmerge.patch.tests.persistence.json/.classpath10
-rw-r--r--tests/org.eclipse.emf.diffmerge.patch.tests.persistence.json/src/org/eclipse/emf/diffmerge/patch/tests/persistence/json/ModelPatchPersistenceJsonTest.java39
-rw-r--r--tests/org.eclipse.emf.diffmerge.patch.tests.ui/pom.xml16
-rw-r--r--tests/org.eclipse.emf.diffmerge.patch.tests/src/org/eclipse/emf/diffmerge/patch/tests/ModelPatchFilterTest.xtend234
-rw-r--r--tests/org.eclipse.emf.diffmerge.patch.tests/src/org/eclipse/emf/diffmerge/patch/tests/ModelPatchTestSuite.xtend3
-rw-r--r--tests/pom.xml59
134 files changed, 10314 insertions, 1569 deletions
diff --git a/examples/org.eclipse.emf.diffmerge.patch.examples/pom.xml b/examples/org.eclipse.emf.diffmerge.patch.examples/pom.xml
index 94169dd..4b9970a 100644
--- a/examples/org.eclipse.emf.diffmerge.patch.examples/pom.xml
+++ b/examples/org.eclipse.emf.diffmerge.patch.examples/pom.xml
@@ -11,18 +11,18 @@
-->
<project
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
- xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
- <modelVersion>4.0.0</modelVersion>
- <parent>
- <artifactId>org.eclipse.emf.diffmerge.patch.examples.parent</artifactId>
- <groupId>org.eclipse.emf.diffmerge.patch</groupId>
- <version>0.1.0-SNAPSHOT</version>
- </parent>
- <artifactId>org.eclipse.emf.diffmerge.patch.examples</artifactId>
- <packaging>eclipse-plugin</packaging>
- <version>0.1.0-SNAPSHOT</version>
- <properties>
- <rootPath>${basedir}/../</rootPath>
- </properties>
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+ xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <artifactId>org.eclipse.emf.diffmerge.patch.examples.parent</artifactId>
+ <groupId>org.eclipse.emf.diffmerge.patch</groupId>
+ <version>0.1.0-SNAPSHOT</version>
+ </parent>
+ <artifactId>org.eclipse.emf.diffmerge.patch.examples</artifactId>
+ <packaging>eclipse-plugin</packaging>
+ <version>0.1.0-SNAPSHOT</version>
+ <properties>
+ <rootPath>${basedir}/../</rootPath>
+ </properties>
</project>
diff --git a/examples/pom.xml b/examples/pom.xml
index 97a94fe..0fe1fc1 100644
--- a/examples/pom.xml
+++ b/examples/pom.xml
@@ -1,22 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<project
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
- xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
- <modelVersion>4.0.0</modelVersion>
- <parent>
- <artifactId>org.eclipse.emf.diffmerge.patch.parent</artifactId>
- <groupId>org.eclipse.emf.diffmerge.patch</groupId>
- <version>0.1.0-SNAPSHOT</version>
- <relativePath>../releng/org.eclipse.emf.diffmerge.patch.parent</relativePath>
- </parent>
- <groupId>org.eclipse.emf.diffmerge.patch</groupId>
- <artifactId>org.eclipse.emf.diffmerge.patch.examples.parent</artifactId>
- <name>Model Patcher Examples</name>
- <version>0.1.0-SNAPSHOT</version>
- <packaging>pom</packaging>
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+ xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <artifactId>org.eclipse.emf.diffmerge.patch.parent</artifactId>
+ <groupId>org.eclipse.emf.diffmerge.patch</groupId>
+ <version>0.1.0-SNAPSHOT</version>
+ <relativePath>../releng/org.eclipse.emf.diffmerge.patch.parent</relativePath>
+ </parent>
+ <groupId>org.eclipse.emf.diffmerge.patch</groupId>
+ <artifactId>org.eclipse.emf.diffmerge.patch.examples.parent</artifactId>
+ <name>Model Patcher Examples</name>
+ <version>0.1.0-SNAPSHOT</version>
+ <packaging>pom</packaging>
- <modules>
- <module>org.eclipse.emf.diffmerge.patch.examples</module>
- </modules>
+ <modules>
+ <module>org.eclipse.emf.diffmerge.patch.examples</module>
+ </modules>
-</project> \ No newline at end of file
+</project>
diff --git a/features/org.eclipse.emf.diffmerge.patch.feature/feature.xml b/features/org.eclipse.emf.diffmerge.patch.feature/feature.xml
index 563b9d2..e015998 100644
--- a/features/org.eclipse.emf.diffmerge.patch.feature/feature.xml
+++ b/features/org.eclipse.emf.diffmerge.patch.feature/feature.xml
@@ -72,27 +72,41 @@ Contributors:
id="org.eclipse.emf.diffmerge.patch"
download-size="0"
install-size="0"
- version="0.1.0.qualifier"
+ version="0.0.0"
unpack="false"/>
<plugin
id="org.eclipse.emf.diffmerge.patch.runtime"
download-size="0"
install-size="0"
- version="0.1.0.qualifier"
+ version="0.0.0"
unpack="false"/>
<plugin
id="org.eclipse.emf.diffmerge.patch.examples"
download-size="0"
install-size="0"
- version="0.1.0.qualifier"/>
+ version="0.0.0"/>
<plugin
id="org.eclipse.emf.diffmerge.patch.ui"
download-size="0"
install-size="0"
- version="0.1.0.qualifier"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.emf.diffmerge.patch.persistence.emf"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.emf.diffmerge.patch.persistence.json"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
unpack="false"/>
</feature>
diff --git a/features/pom.xml b/features/pom.xml
index f740f74..8fb66db 100644
--- a/features/pom.xml
+++ b/features/pom.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
- xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
- <modelVersion>4.0.0</modelVersion>
+ xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>org.eclipse.emf.diffmerge.patch.parent</artifactId>
@@ -9,24 +9,24 @@
<version>0.1.0-SNAPSHOT</version>
<relativePath>../releng/org.eclipse.emf.diffmerge.patch.parent</relativePath>
</parent>
- <groupId>org.eclipse.emf.diffmerge.patch</groupId>
- <artifactId>org.eclipse.emf.diffmerge.patch.features</artifactId>
- <name>Model Patcher Features</name>
- <version>0.1.0-SNAPSHOT</version>
- <packaging>pom</packaging>
+ <groupId>org.eclipse.emf.diffmerge.patch</groupId>
+ <artifactId>org.eclipse.emf.diffmerge.patch.features</artifactId>
+ <name>Model Patcher Features</name>
+ <version>0.1.0-SNAPSHOT</version>
+ <packaging>pom</packaging>
- <modules>
- <module>org.eclipse.emf.diffmerge.patch.feature</module>
- </modules>
+ <modules>
+ <module>org.eclipse.emf.diffmerge.patch.feature</module>
+ </modules>
- <profiles>
+ <profiles>
<profile>
<id>gui.test</id>
<modules>
<!-- GUI tests -->
- <module>org.eclipse.emf.diffmerge.patch.feature.dependencies</module>
+ <module>org.eclipse.emf.diffmerge.patch.feature.dependencies</module>
</modules>
</profile>
</profiles>
-</project> \ No newline at end of file
+</project>
diff --git a/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/.classpath b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/.classpath
new file mode 100644
index 0000000..e850b35
--- /dev/null
+++ b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/.classpath
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="src" path="xtend-gen"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/.project b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/.project
new file mode 100644
index 0000000..f87e94d
--- /dev/null
+++ b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/.project
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.emf.diffmerge.patch.persistence.emf</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.xtext.ui.shared.xtextBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <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.sirius.nature.modelingproject</nature>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
+ </natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/.settings/org.eclipse.core.resources.prefs b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/.settings/org.eclipse.core.runtime.prefs b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/.settings/org.eclipse.core.runtime.prefs
new file mode 100644
index 0000000..5a0ad22
--- /dev/null
+++ b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/.settings/org.eclipse.core.runtime.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+line.separator=\n
diff --git a/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..f42de36
--- /dev/null
+++ b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
+org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.7
diff --git a/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/META-INF/MANIFEST.MF b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..001097c
--- /dev/null
+++ b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/META-INF/MANIFEST.MF
@@ -0,0 +1,25 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.emf.diffmerge.patch.persistence.emf;singleton:=true
+Bundle-Version: 0.1.0.qualifier
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: JavaSE-1.7
+Export-Package: org.eclipse.emf.diffmerge.patch.persistence.emf,
+ org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch,
+ org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl,
+ org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.util
+Require-Bundle: org.eclipse.emf.diffmerge.patch;bundle-version="[0.1.0,0.2.0)",
+ com.google.guava;bundle-version="15.0.0",
+ org.eclipse.core.runtime,
+ org.eclipse.emf.ecore;bundle-version="2.9.0";visibility:=reexport,
+ org.eclipse.xtext.xbase.lib,
+ org.eclipse.xtend.lib,
+ org.eclipse.xtend.lib.macro,
+ org.eclipse.emf.diffmerge.patch.runtime;bundle-version="[0.1.0,0.2.0)",
+ org.eclipse.viatra.query.runtime;bundle-version="[1.4.0,2.0.0)"
+Bundle-ActivationPolicy: lazy
+Bundle-ClassPath: .
+Import-Package: org.apache.log4j;version="1.2.15"
+
diff --git a/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/about.html b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/about.html
new file mode 100644
index 0000000..d8e1984
--- /dev/null
+++ b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/about.html
@@ -0,0 +1,21 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html>
+<head>
+<title>About</title>
+<meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1">
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>June 5, 2007</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;). Unless otherwise indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;). A copy of the EPL is available at <a href="http://www.eclipse.org/org/documents/epl-v10.php">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+</body>
+</html> \ No newline at end of file
diff --git a/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/build.properties b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/build.properties
new file mode 100644
index 0000000..4495139
--- /dev/null
+++ b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/build.properties
@@ -0,0 +1,9 @@
+bin.includes = .,\
+ model/,\
+ META-INF/,\
+ plugin.xml,\
+ plugin.properties
+jars.compile.order = .
+source.. = src/,\
+ xtend-gen/
+output.. = bin/
diff --git a/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/model/modelpatch.aird b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/model/modelpatch.aird
new file mode 100644
index 0000000..757759b
--- /dev/null
+++ b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/model/modelpatch.aird
@@ -0,0 +1,855 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:description="http://www.eclipse.org/sirius/description/1.1.0" xmlns:description_1="http://www.eclipse.org/sirius/diagram/description/1.1.0" xmlns:diagram="http://www.eclipse.org/sirius/diagram/1.1.0" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:style="http://www.eclipse.org/sirius/diagram/description/style/1.1.0" xmlns:viewpoint="http://www.eclipse.org/sirius/1.1.0" xsi:schemaLocation="http://www.eclipse.org/sirius/description/1.1.0 http://www.eclipse.org/sirius/1.1.0#//description http://www.eclipse.org/sirius/diagram/description/1.1.0 http://www.eclipse.org/sirius/diagram/1.1.0#//description http://www.eclipse.org/sirius/diagram/description/style/1.1.0 http://www.eclipse.org/sirius/diagram/1.1.0#//description/style">
+ <viewpoint:DAnalysis xmi:id="_S9pXwO08EeameoS4CYpxdQ" selectedViews="_TKbPgO08EeameoS4CYpxdQ _TKkZcO08EeameoS4CYpxdQ _TKlAgO08EeameoS4CYpxdQ _TKpR8O08EeameoS4CYpxdQ" version="11.1.0.201608251200">
+ <semanticResources>modelpatch.ecore</semanticResources>
+ <semanticResources>../resolve/modelpatch.ecore</semanticResources>
+ <semanticResources>http://www.eclipse.org/emf/2002/Ecore</semanticResources>
+ <semanticResources>../modelpatch.ecore</semanticResources>
+ <semanticResources>modelpatch.genmodel</semanticResources>
+ <semanticResources>../src/org/eclipse/emf/diffmerge/patch/persistence/emf/EMFModelPatchSerializer.xtend</semanticResources>
+ <semanticResources>../src/org/eclipse/emf/diffmerge/patch/persistence/emf/EMFModelPatchPersister.xtend</semanticResources>
+ <semanticResources>../src/org/eclipse/emf/diffmerge/patch/persistence/emf/transform/ModelPatchToEMF.xtend</semanticResources>
+ <semanticResources>../src/org/eclipse/emf/diffmerge/patch/persistence/emf/transform/EModelPatchToPOJO.xtend</semanticResources>
+ <ownedViews xmi:type="viewpoint:DView" xmi:id="_TKbPgO08EeameoS4CYpxdQ">
+ <viewpoint xmi:type="description:Viewpoint" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']"/>
+ <ownedRepresentationDescriptors xmi:type="viewpoint:DRepresentationDescriptor" xmi:id="_UnxXQO08EeameoS4CYpxdQ" name="modelpatch" representation="_UnxXQe08EeameoS4CYpxdQ">
+ <description xmi:type="description_1:DiagramDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']"/>
+ <target xmi:type="ecore:EPackage" href="modelpatch.ecore#/"/>
+ </ownedRepresentationDescriptors>
+ </ownedViews>
+ <ownedViews xmi:type="viewpoint:DView" xmi:id="_TKkZcO08EeameoS4CYpxdQ">
+ <viewpoint xmi:type="description:Viewpoint" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Review']"/>
+ </ownedViews>
+ <ownedViews xmi:type="viewpoint:DView" xmi:id="_TKlAgO08EeameoS4CYpxdQ">
+ <viewpoint xmi:type="description:Viewpoint" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Archetype']"/>
+ </ownedViews>
+ <ownedViews xmi:type="viewpoint:DView" xmi:id="_TKpR8O08EeameoS4CYpxdQ">
+ <viewpoint xmi:type="description:Viewpoint" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Generation']"/>
+ </ownedViews>
+ </viewpoint:DAnalysis>
+ <diagram:DSemanticDiagram xmi:id="_UnxXQe08EeameoS4CYpxdQ" name="modelpatch">
+ <ownedAnnotationEntries xmi:type="description:AnnotationEntry" xmi:id="_Unx-UO08EeameoS4CYpxdQ" source="DANNOTATION_CUSTOMIZATION_KEY">
+ <data xmi:type="diagram:ComputedStyleDescriptionRegistry" xmi:id="_Unx-Ue08EeameoS4CYpxdQ">
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_nZlwIO0_EeameoS4CYpxdQ" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_nZlwIe0_EeameoS4CYpxdQ" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_nZlwIu0_EeameoS4CYpxdQ" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ </data>
+ </ownedAnnotationEntries>
+ <ownedAnnotationEntries xmi:type="description:AnnotationEntry" xmi:id="_UoFgUO08EeameoS4CYpxdQ" source="GMF_DIAGRAMS">
+ <data xmi:type="notation:Diagram" xmi:id="_UoFgUe08EeameoS4CYpxdQ" type="Sirius" element="_UnxXQe08EeameoS4CYpxdQ" measurementUnit="Pixel">
+ <children xmi:type="notation:Node" xmi:id="_qIVVsO08EeameoS4CYpxdQ" type="2003" element="_qIBzsO08EeameoS4CYpxdQ">
+ <children xmi:type="notation:Node" xmi:id="_qIXx8O08EeameoS4CYpxdQ" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_qIZnIO08EeameoS4CYpxdQ" type="7004">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_qIZnIe08EeameoS4CYpxdQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_qIZnIu08EeameoS4CYpxdQ"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_qIVVse08EeameoS4CYpxdQ" fontName="Segoe UI" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_qIVVsu08EeameoS4CYpxdQ" x="280" y="80" width="120" height="48"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_wQ8SsO08EeameoS4CYpxdQ" type="2003" element="_wQ3aMO08EeameoS4CYpxdQ">
+ <children xmi:type="notation:Node" xmi:id="_wQ85wO08EeameoS4CYpxdQ" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_wQ85we08EeameoS4CYpxdQ" type="7004">
+ <children xmi:type="notation:Node" xmi:id="_rXkeEO0-EeameoS4CYpxdQ" type="3010" element="_rXY34O0-EeameoS4CYpxdQ">
+ <styles xmi:type="notation:FontStyle" xmi:id="_rXkeEe0-EeameoS4CYpxdQ" fontColor="2697711" fontName="Segoe UI" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_rXkeEu0-EeameoS4CYpxdQ"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_v9YLkO0-EeameoS4CYpxdQ" type="3010" element="_v9TTEO0-EeameoS4CYpxdQ">
+ <styles xmi:type="notation:FontStyle" xmi:id="_v9YLke0-EeameoS4CYpxdQ" fontColor="2697711" fontName="Segoe UI" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_v9YLku0-EeameoS4CYpxdQ"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_0TnzEO0-EeameoS4CYpxdQ" type="3010" element="_0ThscO0-EeameoS4CYpxdQ">
+ <styles xmi:type="notation:FontStyle" xmi:id="_0TnzEe0-EeameoS4CYpxdQ" fontColor="2697711" fontName="Segoe UI" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_0TnzEu0-EeameoS4CYpxdQ"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_2qSIcO0-EeameoS4CYpxdQ" type="3010" element="_2qMo4O0-EeameoS4CYpxdQ">
+ <styles xmi:type="notation:FontStyle" xmi:id="_2qSIce0-EeameoS4CYpxdQ" fontColor="2697711" fontName="Segoe UI" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_2qSIcu0-EeameoS4CYpxdQ"/>
+ </children>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_wQ85wu08EeameoS4CYpxdQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_wQ85w-08EeameoS4CYpxdQ"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_wQ8Sse08EeameoS4CYpxdQ" fontName="Segoe UI" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_wQ8Ssu08EeameoS4CYpxdQ" x="130" y="205" width="175" height="98"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_MhilEO0-EeameoS4CYpxdQ" type="2003" element="_MhdskO0-EeameoS4CYpxdQ">
+ <children xmi:type="notation:Node" xmi:id="_MhjMIO0-EeameoS4CYpxdQ" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_MhjMIe0-EeameoS4CYpxdQ" type="7004">
+ <children xmi:type="notation:Node" xmi:id="_ERZeYO0_EeameoS4CYpxdQ" type="3010" element="_ERTXwO0_EeameoS4CYpxdQ">
+ <styles xmi:type="notation:FontStyle" xmi:id="_ERZeYe0_EeameoS4CYpxdQ" fontColor="2697711" fontName="Segoe UI" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_ERZeYu0_EeameoS4CYpxdQ"/>
+ </children>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_MhjMIu0-EeameoS4CYpxdQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_MhjMI-0-EeameoS4CYpxdQ"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_MhilEe0-EeameoS4CYpxdQ" fontName="Segoe UI" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MhilEu0-EeameoS4CYpxdQ" x="410" y="205"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="__NeRgO0-EeameoS4CYpxdQ" type="2003" element="__NYK4O0-EeameoS4CYpxdQ">
+ <children xmi:type="notation:Node" xmi:id="__Ne4kO0-EeameoS4CYpxdQ" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="__Ne4ke0-EeameoS4CYpxdQ" type="7004">
+ <children xmi:type="notation:Node" xmi:id="_AsRKwO0_EeameoS4CYpxdQ" type="3010" element="_AsLEIO0_EeameoS4CYpxdQ">
+ <styles xmi:type="notation:FontStyle" xmi:id="_AsRKwe0_EeameoS4CYpxdQ" fontName="Segoe UI" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_AsRKwu0_EeameoS4CYpxdQ"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_CWf38O0_EeameoS4CYpxdQ" type="3010" element="_CWaYYO0_EeameoS4CYpxdQ">
+ <styles xmi:type="notation:FontStyle" xmi:id="_CWf38e0_EeameoS4CYpxdQ" fontName="Segoe UI" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_CWf38u0_EeameoS4CYpxdQ"/>
+ </children>
+ <styles xmi:type="notation:SortingStyle" xmi:id="__Ne4ku0-EeameoS4CYpxdQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="__Ne4k-0-EeameoS4CYpxdQ"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="__NeRge0-EeameoS4CYpxdQ" fontName="Segoe UI" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="__NeRgu0-EeameoS4CYpxdQ" x="633" y="165" height="73"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_fewAgO0_EeameoS4CYpxdQ" type="2003" element="_fepS0O0_EeameoS4CYpxdQ">
+ <children xmi:type="notation:Node" xmi:id="_fewAg-0_EeameoS4CYpxdQ" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_fewAhO0_EeameoS4CYpxdQ" type="7004">
+ <children xmi:type="notation:Node" xmi:id="_xKN_UPQnEeaMb47YEBOpBw" type="3010" element="_xJniYPQnEeaMb47YEBOpBw">
+ <styles xmi:type="notation:FontStyle" xmi:id="_xKN_UfQnEeaMb47YEBOpBw" fontName="Segoe UI" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_xKN_UvQnEeaMb47YEBOpBw"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_kWJ0UO0_EeameoS4CYpxdQ" type="3010" element="_kWCfkO0_EeameoS4CYpxdQ">
+ <styles xmi:type="notation:FontStyle" xmi:id="_kWJ0Ue0_EeameoS4CYpxdQ" fontColor="2697711" fontName="Segoe UI" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_kWJ0Uu0_EeameoS4CYpxdQ"/>
+ </children>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_fewAhe0_EeameoS4CYpxdQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_fewAhu0_EeameoS4CYpxdQ"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_fewAge0_EeameoS4CYpxdQ" fontName="Segoe UI" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_fewAgu0_EeameoS4CYpxdQ" x="750" y="351" height="72"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_tYafAO0_EeameoS4CYpxdQ" type="2003" element="_tYU_cO0_EeameoS4CYpxdQ">
+ <children xmi:type="notation:Node" xmi:id="_tYbGEO0_EeameoS4CYpxdQ" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_tYbGEe0_EeameoS4CYpxdQ" type="7004">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_tYbGEu0_EeameoS4CYpxdQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_tYbGE-0_EeameoS4CYpxdQ"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_tYafAe0_EeameoS4CYpxdQ" fontName="Segoe UI" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_tYafAu0_EeameoS4CYpxdQ" x="375" y="351" width="120" height="72"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_0BP-wO1AEeameoS4CYpxdQ" type="2003" element="_0BKfMO1AEeameoS4CYpxdQ">
+ <children xmi:type="notation:Node" xmi:id="_0BQl0O1AEeameoS4CYpxdQ" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_0BQl0e1AEeameoS4CYpxdQ" type="7004">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_0BQl0u1AEeameoS4CYpxdQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_0BQl0-1AEeameoS4CYpxdQ"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_0BP-we1AEeameoS4CYpxdQ" fontName="Segoe UI" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_0BP-wu1AEeameoS4CYpxdQ" x="540" y="351" width="143" height="72"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_CeQa4O1BEeameoS4CYpxdQ" type="2003" element="_CeLiYO1BEeameoS4CYpxdQ">
+ <children xmi:type="notation:Node" xmi:id="_CeRB8O1BEeameoS4CYpxdQ" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_CeRB8e1BEeameoS4CYpxdQ" type="7004">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_CeRB8u1BEeameoS4CYpxdQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_CeRB8-1BEeameoS4CYpxdQ"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_CeQa4e1BEeameoS4CYpxdQ" fontName="Segoe UI" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_CeQa4u1BEeameoS4CYpxdQ" x="660" y="465" width="120" height="53"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_kPIUYO1BEeameoS4CYpxdQ" type="2003" element="_kPC00O1BEeameoS4CYpxdQ">
+ <children xmi:type="notation:Node" xmi:id="_kPIUY-1BEeameoS4CYpxdQ" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_kPIUZO1BEeameoS4CYpxdQ" type="7004">
+ <children xmi:type="notation:Node" xmi:id="_0Oy2EO1BEeameoS4CYpxdQ" type="3010" element="_0OqTMO1BEeameoS4CYpxdQ">
+ <styles xmi:type="notation:FontStyle" xmi:id="_0Oy2Ee1BEeameoS4CYpxdQ" fontColor="2697711" fontName="Segoe UI" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_0Oy2Eu1BEeameoS4CYpxdQ"/>
+ </children>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_kPIUZe1BEeameoS4CYpxdQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_kPIUZu1BEeameoS4CYpxdQ"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_kPIUYe1BEeameoS4CYpxdQ" fontName="Segoe UI" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_kPIUYu1BEeameoS4CYpxdQ" x="492" y="465" width="120" height="53"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_0xGeYPLSEeaQ7K1Gtdrq5A" type="2003" element="_0w3N0PLSEeaQ7K1Gtdrq5A">
+ <children xmi:type="notation:Node" xmi:id="_0xGeY_LSEeaQ7K1Gtdrq5A" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_0xGeZPLSEeaQ7K1Gtdrq5A" type="7004">
+ <children xmi:type="notation:Node" xmi:id="_xKTe4PQnEeaMb47YEBOpBw" type="3010" element="_xJtpAPQnEeaMb47YEBOpBw">
+ <styles xmi:type="notation:FontStyle" xmi:id="_xKTe4fQnEeaMb47YEBOpBw" fontName="Segoe UI" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_xKTe4vQnEeaMb47YEBOpBw"/>
+ </children>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_0xGeZfLSEeaQ7K1Gtdrq5A"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_0xGeZvLSEeaQ7K1Gtdrq5A"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_0xGeYfLSEeaQ7K1Gtdrq5A" fontName="Segoe UI" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_0xGeYvLSEeaQ7K1Gtdrq5A" x="245" y="-30" width="193" height="53"/>
+ </children>
+ <styles xmi:type="notation:DiagramStyle" xmi:id="_UoFgUu08EeameoS4CYpxdQ"/>
+ <edges xmi:type="notation:Edge" xmi:id="_nZvhIO0_EeameoS4CYpxdQ" type="4001" element="_nZjT4O0_EeameoS4CYpxdQ" source="_MhilEO0-EeameoS4CYpxdQ" target="_fewAgO0_EeameoS4CYpxdQ">
+ <children xmi:type="notation:Node" xmi:id="_nZvhJO0_EeameoS4CYpxdQ" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_nZvhJe0_EeameoS4CYpxdQ" x="3" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_nZvhJu0_EeameoS4CYpxdQ" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_nZvhJ-0_EeameoS4CYpxdQ" x="1" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_nZvhKO0_EeameoS4CYpxdQ" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_nZvhKe0_EeameoS4CYpxdQ" x="-22" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_nZvhIe0_EeameoS4CYpxdQ" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_nZvhIu0_EeameoS4CYpxdQ" fontColor="7490599" fontName="Segoe UI" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_nZvhI-0_EeameoS4CYpxdQ" points="[0, 0, -199, -86]$[171, 0, -28, -86]$[171, 86, -28, 0]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_nZvhKu0_EeameoS4CYpxdQ" id="(1.0,0.6122448979591837)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_nZvhK-0_EeameoS4CYpxdQ" id="(0.5037593984962406,0.0)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_wpmGcO1AEeameoS4CYpxdQ" type="4001" element="_wph1AO1AEeameoS4CYpxdQ" source="_tYafAO0_EeameoS4CYpxdQ" target="_MhilEO0-EeameoS4CYpxdQ">
+ <children xmi:type="notation:Node" xmi:id="_wpmtgO1AEeameoS4CYpxdQ" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_wpmtge1AEeameoS4CYpxdQ" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_wpmtgu1AEeameoS4CYpxdQ" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_wpmtg-1AEeameoS4CYpxdQ" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_wpmthO1AEeameoS4CYpxdQ" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_wpmthe1AEeameoS4CYpxdQ" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_wpmGce1AEeameoS4CYpxdQ" routing="Tree"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_wpmGcu1AEeameoS4CYpxdQ" fontName="Segoe UI" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_wpmGc-1AEeameoS4CYpxdQ" points="[0, 0, -50, 48]$[50, -48, 0, 0]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_wpmthu1AEeameoS4CYpxdQ" id="(0.635593220338983,0.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_wpmth-1AEeameoS4CYpxdQ" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_Asb38O1BEeameoS4CYpxdQ" type="4001" element="_AsRf4O1BEeameoS4CYpxdQ" source="_0BP-wO1AEeameoS4CYpxdQ" target="_MhilEO0-EeameoS4CYpxdQ">
+ <children xmi:type="notation:Node" xmi:id="_Asb39O1BEeameoS4CYpxdQ" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Asb39e1BEeameoS4CYpxdQ" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_Asb39u1BEeameoS4CYpxdQ" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Asb39-1BEeameoS4CYpxdQ" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_Asb3-O1BEeameoS4CYpxdQ" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Asb3-e1BEeameoS4CYpxdQ" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_Asb38e1BEeameoS4CYpxdQ" routing="Tree"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_Asb38u1BEeameoS4CYpxdQ" fontName="Segoe UI" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Asb38-1BEeameoS4CYpxdQ" points="[0, 0, 20, 48]$[-20, -48, 0, 0]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_AscfAO1BEeameoS4CYpxdQ" id="(0.2127659574468085,0.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_AscfAe1BEeameoS4CYpxdQ" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_FmldwO1BEeameoS4CYpxdQ" type="4001" element="_Fmdh8O1BEeameoS4CYpxdQ" source="_CeQa4O1BEeameoS4CYpxdQ" target="_0BP-wO1AEeameoS4CYpxdQ">
+ <children xmi:type="notation:Node" xmi:id="_FmldxO1BEeameoS4CYpxdQ" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Fmldxe1BEeameoS4CYpxdQ" x="-28" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_Fmldxu1BEeameoS4CYpxdQ" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Fmldx-1BEeameoS4CYpxdQ" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_FmldyO1BEeameoS4CYpxdQ" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Fmldye1BEeameoS4CYpxdQ" x="-34" y="-4"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_Fmldwe1BEeameoS4CYpxdQ" routing="Tree"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_Fmldwu1BEeameoS4CYpxdQ" fontName="Segoe UI" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Fmldw-1BEeameoS4CYpxdQ" points="[0, 0, -70, 124]$[0, -29, -70, 95]$[71, -29, 1, 95]$[71, -75, 1, 49]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Fmldyu1BEeameoS4CYpxdQ" id="(0.3389830508474576,0.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Fmldy-1BEeameoS4CYpxdQ" id="(0.5,0.7)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_JACF0O1BEeameoS4CYpxdQ" type="4001" element="_I_5i8O1BEeameoS4CYpxdQ" source="_tYafAO0_EeameoS4CYpxdQ" target="_fewAgO0_EeameoS4CYpxdQ">
+ <children xmi:type="notation:Node" xmi:id="_JACs4O1BEeameoS4CYpxdQ" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_JACs4e1BEeameoS4CYpxdQ" x="-110" y="-14"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_JACs4u1BEeameoS4CYpxdQ" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_JACs4-1BEeameoS4CYpxdQ" x="41" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_JACs5O1BEeameoS4CYpxdQ" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_JACs5e1BEeameoS4CYpxdQ" x="-49" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_JACF0e1BEeameoS4CYpxdQ" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_JACF0u1BEeameoS4CYpxdQ" fontColor="7490599" fontName="Segoe UI" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_JACF0-1BEeameoS4CYpxdQ" points="[-58, 21, -315, 21]$[-58, 50, -315, 50]$[324, 50, 67, 50]$[324, 21, 67, 21]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_JACs5u1BEeameoS4CYpxdQ" id="(1.0,0.7)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_JACs5-1BEeameoS4CYpxdQ" id="(0.0,0.7)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_OBGL8O1BEeameoS4CYpxdQ" type="4001" element="_OA5-sO1BEeameoS4CYpxdQ" source="_0BP-wO1AEeameoS4CYpxdQ" target="_fewAgO0_EeameoS4CYpxdQ">
+ <children xmi:type="notation:Node" xmi:id="_OBGL9O1BEeameoS4CYpxdQ" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_OBGL9e1BEeameoS4CYpxdQ" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_OBGL9u1BEeameoS4CYpxdQ" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_OBGL9-1BEeameoS4CYpxdQ" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_OBGL-O1BEeameoS4CYpxdQ" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_OBGL-e1BEeameoS4CYpxdQ" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_OBGL8e1BEeameoS4CYpxdQ" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_OBGL8u1BEeameoS4CYpxdQ" fontColor="7490599" fontName="Segoe UI" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_OBGL8-1BEeameoS4CYpxdQ" points="[0, -28, -69, -28]$[69, -28, 0, -28]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_OBGL-u1BEeameoS4CYpxdQ" id="(1.0,1.1)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_OBGL--1BEeameoS4CYpxdQ" id="(0.0,1.1)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_fbYRgO1BEeameoS4CYpxdQ" type="4001" element="_fbTZAO1BEeameoS4CYpxdQ" source="_CeQa4O1BEeameoS4CYpxdQ" target="_fewAgO0_EeameoS4CYpxdQ">
+ <children xmi:type="notation:Node" xmi:id="_fbY4ke1BEeameoS4CYpxdQ" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_fbY4ku1BEeameoS4CYpxdQ" x="6" y="-31"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_fbY4k-1BEeameoS4CYpxdQ" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_fbY4lO1BEeameoS4CYpxdQ" x="-3" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_fbY4le1BEeameoS4CYpxdQ" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_fbY4lu1BEeameoS4CYpxdQ" x="-34" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_fbYRge1BEeameoS4CYpxdQ" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_fbYRgu1BEeameoS4CYpxdQ" fontColor="7490599" fontName="Segoe UI" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_fbY4kO1BEeameoS4CYpxdQ" points="[0, -31, -39, 56]$[67, -31, 28, 56]$[67, -115, 28, -28]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_fbY4l-1BEeameoS4CYpxdQ" id="(1.0,1.392156862745098)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_fbY4mO1BEeameoS4CYpxdQ" id="(0.5037593984962406,1.4)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_nE6OsO1BEeameoS4CYpxdQ" type="4001" element="_nEtaYO1BEeameoS4CYpxdQ" source="_kPIUYO1BEeameoS4CYpxdQ" target="_0BP-wO1AEeameoS4CYpxdQ">
+ <children xmi:type="notation:Node" xmi:id="_nE6OtO1BEeameoS4CYpxdQ" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_nE6Ote1BEeameoS4CYpxdQ" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_nE6Otu1BEeameoS4CYpxdQ" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_nE6Ot-1BEeameoS4CYpxdQ" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_nE61wO1BEeameoS4CYpxdQ" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_nE61we1BEeameoS4CYpxdQ" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_nE6Ose1BEeameoS4CYpxdQ" routing="Tree"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_nE6Osu1BEeameoS4CYpxdQ" fontName="Segoe UI" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_nE6Os-1BEeameoS4CYpxdQ" points="[0, 0, -57, 76]$[57, -76, 0, 0]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_nE61wu1BEeameoS4CYpxdQ" id="(0.576271186440678,0.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_nE61w-1BEeameoS4CYpxdQ" id="(0.5,0.7)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_-Hq_sO1BEeameoS4CYpxdQ" type="4001" element="_-HfZgO1BEeameoS4CYpxdQ" source="_qIVVsO08EeameoS4CYpxdQ" target="_MhilEO0-EeameoS4CYpxdQ">
+ <children xmi:type="notation:Node" xmi:id="_-Hq_tO1BEeameoS4CYpxdQ" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_-Hq_te1BEeameoS4CYpxdQ" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_-Hq_tu1BEeameoS4CYpxdQ" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_-Hq_t-1BEeameoS4CYpxdQ" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_-Hq_uO1BEeameoS4CYpxdQ" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_-Hq_ue1BEeameoS4CYpxdQ" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_-Hq_se1BEeameoS4CYpxdQ" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_-Hq_su1BEeameoS4CYpxdQ" fontColor="7490599" fontName="Segoe UI" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_-Hq_s-1BEeameoS4CYpxdQ" points="[0, 0, -90, -79]$[90, 79, 0, 0]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_-Hq_uu1BEeameoS4CYpxdQ" id="(0.5932203389830508,1.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_-Hq_u-1BEeameoS4CYpxdQ" id="(0.14423076923076922,0.0)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_AQSSAO1CEeameoS4CYpxdQ" type="4001" element="_AQJIEO1CEeameoS4CYpxdQ" source="_qIVVsO08EeameoS4CYpxdQ" target="_wQ8SsO08EeameoS4CYpxdQ">
+ <children xmi:type="notation:Node" xmi:id="_AQSSBO1CEeameoS4CYpxdQ" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_AQSSBe1CEeameoS4CYpxdQ" x="24" y="9"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_AQSSBu1CEeameoS4CYpxdQ" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_AQSSB-1CEeameoS4CYpxdQ" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_AQSSCO1CEeameoS4CYpxdQ" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_AQSSCe1CEeameoS4CYpxdQ" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_AQSSAe1CEeameoS4CYpxdQ" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_AQSSAu1CEeameoS4CYpxdQ" fontColor="7490599" fontName="Segoe UI" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_AQSSA-1CEeameoS4CYpxdQ" points="[0, 0, 60, -79]$[-60, 79, 0, 0]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_AQSSCu1CEeameoS4CYpxdQ" id="(0.2966101694915254,1.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_AQSSC-1CEeameoS4CYpxdQ" id="(0.7225433526011561,0.0)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_SiLzcPLREeaQ7K1Gtdrq5A" type="4001" element="_SiEes_LREeaQ7K1Gtdrq5A" source="_qIVVsO08EeameoS4CYpxdQ" target="_fewAgO0_EeameoS4CYpxdQ">
+ <children xmi:type="notation:Node" xmi:id="_SiMagPLREeaQ7K1Gtdrq5A" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_SiMagfLREeaQ7K1Gtdrq5A" x="-274" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_SiMagvLREeaQ7K1Gtdrq5A" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_SiMag_LREeaQ7K1Gtdrq5A" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_SiMahPLREeaQ7K1Gtdrq5A" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_SiMahfLREeaQ7K1Gtdrq5A" x="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_SiLzcfLREeaQ7K1Gtdrq5A" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_SiLzcvLREeaQ7K1Gtdrq5A" fontColor="7490599" fontName="Segoe UI" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_SiLzc_LREeaQ7K1Gtdrq5A" points="[59, 21, -418, -276]$[478, 21, 1, -276]$[478, 248, 1, -49]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_SiMahvLREeaQ7K1Gtdrq5A" id="(0.5,0.5)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_SiMah_LREeaQ7K1Gtdrq5A" id="(0.5,0.7)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_SiMaiPLREeaQ7K1Gtdrq5A" type="4001" element="_SiFFw_LREeaQ7K1Gtdrq5A" source="_qIVVsO08EeameoS4CYpxdQ" target="_fewAgO0_EeameoS4CYpxdQ">
+ <children xmi:type="notation:Node" xmi:id="_SiMajPLREeaQ7K1Gtdrq5A" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_SiMajfLREeaQ7K1Gtdrq5A" x="-294" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_SiMajvLREeaQ7K1Gtdrq5A" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_SiMaj_LREeaQ7K1Gtdrq5A" x="-4" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_SiMakPLREeaQ7K1Gtdrq5A" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_SiMakfLREeaQ7K1Gtdrq5A" x="14"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_SiMaifLREeaQ7K1Gtdrq5A" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_SiMaivLREeaQ7K1Gtdrq5A" fontColor="7490599" fontName="Segoe UI" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_SiMai_LREeaQ7K1Gtdrq5A" points="[59, 4, -418, -293]$[501, 4, 24, -293]$[501, 248, 24, -49]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_SiNBkPLREeaQ7K1Gtdrq5A" id="(0.5,0.5)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_SiNBkfLREeaQ7K1Gtdrq5A" id="(0.5,0.7)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_SiNBkvLREeaQ7K1Gtdrq5A" type="4001" element="_SiFs0_LREeaQ7K1Gtdrq5A" source="_qIVVsO08EeameoS4CYpxdQ" target="_fewAgO0_EeameoS4CYpxdQ">
+ <children xmi:type="notation:Node" xmi:id="_SiNBlvLREeaQ7K1Gtdrq5A" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_SiNBl_LREeaQ7K1Gtdrq5A" x="-315" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_SiNBmPLREeaQ7K1Gtdrq5A" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_SiNBmfLREeaQ7K1Gtdrq5A" x="-8" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_SiNBmvLREeaQ7K1Gtdrq5A" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_SiNBm_LREeaQ7K1Gtdrq5A" x="18"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_SiNBk_LREeaQ7K1Gtdrq5A" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_SiNBlPLREeaQ7K1Gtdrq5A" fontColor="7490599" fontName="Segoe UI" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_SiNBlfLREeaQ7K1Gtdrq5A" points="[59, -14, -418, -311]$[525, -14, 48, -311]$[525, 248, 48, -49]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_SiNooPLREeaQ7K1Gtdrq5A" id="(0.5,0.5)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_SiNoofLREeaQ7K1Gtdrq5A" id="(0.5,0.7)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_EpQC0PLTEeaQ7K1Gtdrq5A" type="4001" element="_EpFDsPLTEeaQ7K1Gtdrq5A" source="_qIVVsO08EeameoS4CYpxdQ" target="_0xGeYPLSEeaQ7K1Gtdrq5A">
+ <children xmi:type="notation:Node" xmi:id="_EpQp4PLTEeaQ7K1Gtdrq5A" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_EpQp4fLTEeaQ7K1Gtdrq5A" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_EpQp4vLTEeaQ7K1Gtdrq5A" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_EpQp4_LTEeaQ7K1Gtdrq5A" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_EpQp5PLTEeaQ7K1Gtdrq5A" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_EpQp5fLTEeaQ7K1Gtdrq5A" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_EpQC0fLTEeaQ7K1Gtdrq5A" routing="Tree"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_EpQC0vLTEeaQ7K1Gtdrq5A" fontName="Segoe UI" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_EpQC0_LTEeaQ7K1Gtdrq5A" points="[0, 0, 15, 59]$[-15, -59, 0, 0]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_EpRQ8PLTEeaQ7K1Gtdrq5A" id="(0.4661016949152542,0.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_EpRQ8fLTEeaQ7K1Gtdrq5A" id="(0.5261780104712042,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_Fzr1oPLTEeaQ7K1Gtdrq5A" type="4001" element="_FzeaQPLTEeaQ7K1Gtdrq5A" source="_wQ8SsO08EeameoS4CYpxdQ" target="_0xGeYPLSEeaQ7K1Gtdrq5A">
+ <children xmi:type="notation:Node" xmi:id="_FztDwPLTEeaQ7K1Gtdrq5A" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_FztDwfLTEeaQ7K1Gtdrq5A" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_Fztq0PLTEeaQ7K1Gtdrq5A" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Fztq0fLTEeaQ7K1Gtdrq5A" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_Fztq0vLTEeaQ7K1Gtdrq5A" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Fztq0_LTEeaQ7K1Gtdrq5A" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_Fzr1ofLTEeaQ7K1Gtdrq5A" routing="Tree"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_Fzr1ovLTEeaQ7K1Gtdrq5A" fontName="Segoe UI" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Fzr1o_LTEeaQ7K1Gtdrq5A" points="[0, 0, -145, 184]$[145, -184, 0, 0]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Fztq1PLTEeaQ7K1Gtdrq5A" id="(0.28901734104046245,0.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Fztq1fLTEeaQ7K1Gtdrq5A" id="(0.5261780104712042,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_Gq2uMPLTEeaQ7K1Gtdrq5A" type="4001" element="_GqsWIPLTEeaQ7K1Gtdrq5A" source="_MhilEO0-EeameoS4CYpxdQ" target="_0xGeYPLSEeaQ7K1Gtdrq5A">
+ <children xmi:type="notation:Node" xmi:id="_Gq2uNPLTEeaQ7K1Gtdrq5A" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Gq2uNfLTEeaQ7K1Gtdrq5A" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_Gq2uNvLTEeaQ7K1Gtdrq5A" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Gq2uN_LTEeaQ7K1Gtdrq5A" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_Gq2uOPLTEeaQ7K1Gtdrq5A" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Gq2uOfLTEeaQ7K1Gtdrq5A" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_Gq2uMfLTEeaQ7K1Gtdrq5A" routing="Tree"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_Gq2uMvLTEeaQ7K1Gtdrq5A" fontName="Segoe UI" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Gq2uM_LTEeaQ7K1Gtdrq5A" points="[0, 0, 164, 184]$[-164, -184, 0, 0]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Gq2uOvLTEeaQ7K1Gtdrq5A" id="(0.5,0.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Gq3VQPLTEeaQ7K1Gtdrq5A" id="(0.5261780104712042,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_I5B18PLTEeaQ7K1Gtdrq5A" type="4001" element="_I43d4PLTEeaQ7K1Gtdrq5A" source="_fewAgO0_EeameoS4CYpxdQ" target="_0xGeYPLSEeaQ7K1Gtdrq5A">
+ <children xmi:type="notation:Node" xmi:id="_I5CdAPLTEeaQ7K1Gtdrq5A" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_I5CdAfLTEeaQ7K1Gtdrq5A" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_I5CdAvLTEeaQ7K1Gtdrq5A" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_I5CdA_LTEeaQ7K1Gtdrq5A" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_I5CdBPLTEeaQ7K1Gtdrq5A" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_I5CdBfLTEeaQ7K1Gtdrq5A" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_I5B18fLTEeaQ7K1Gtdrq5A" routing="Tree"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_I5B18vLTEeaQ7K1Gtdrq5A" fontName="Segoe UI" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_I5B18_LTEeaQ7K1Gtdrq5A" points="[0, 0, 465, 356]$[0, -312, 465, 44]$[-464, -312, 1, 44]$[-464, -330, 1, 26]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_I5CdBvLTEeaQ7K1Gtdrq5A" id="(0.9185185185185185,0.028)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_I5CdB_LTEeaQ7K1Gtdrq5A" id="(0.5261780104712042,0.5)"/>
+ </edges>
+ </data>
+ </ownedAnnotationEntries>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_qIBzsO08EeameoS4CYpxdQ" name="EModelPatch" tooltipText="" outgoingEdges="_-HfZgO1BEeameoS4CYpxdQ _AQJIEO1CEeameoS4CYpxdQ _SiEes_LREeaQ7K1Gtdrq5A _SiFFw_LREeaQ7K1Gtdrq5A _SiFs0_LREeaQ7K1Gtdrq5A _EpFDsPLTEeaQ7K1Gtdrq5A" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="modelpatch.ecore#//EModelPatch"/>
+ <semanticElements xmi:type="ecore:EClass" href="modelpatch.ecore#//EModelPatch"/>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_qIIhYO08EeameoS4CYpxdQ" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" foregroundColor="255,252,216">
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_wQ3aMO08EeameoS4CYpxdQ" name="EModelPatchMetadata" tooltipText="" outgoingEdges="_FzeaQPLTEeaQ7K1Gtdrq5A" incomingEdges="_AQJIEO1CEeameoS4CYpxdQ" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="modelpatch.ecore#//EModelPatchMetadata"/>
+ <semanticElements xmi:type="ecore:EClass" href="modelpatch.ecore#//EModelPatchMetadata"/>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_NXQvUO1CEeameoS4CYpxdQ" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" foregroundColor="255,252,216">
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ <ownedElements xmi:type="diagram:DNodeListElement" xmi:id="_rXY34O0-EeameoS4CYpxdQ" name="author : EString" tooltipText="">
+ <target xmi:type="ecore:EAttribute" href="modelpatch.ecore#//EModelPatchMetadata/author"/>
+ <semanticElements xmi:type="ecore:EAttribute" href="modelpatch.ecore#//EModelPatchMetadata/author"/>
+ <ownedStyle xmi:type="diagram:BundledImage" xmi:id="_sjQ1IO0-EeameoS4CYpxdQ" labelAlignment="LEFT">
+ <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
+ </ownedElements>
+ <ownedElements xmi:type="diagram:DNodeListElement" xmi:id="_v9TTEO0-EeameoS4CYpxdQ" name="createdAt : EString" tooltipText="">
+ <target xmi:type="ecore:EAttribute" href="modelpatch.ecore#//EModelPatchMetadata/createdAt"/>
+ <semanticElements xmi:type="ecore:EAttribute" href="modelpatch.ecore#//EModelPatchMetadata/createdAt"/>
+ <ownedStyle xmi:type="diagram:BundledImage" xmi:id="_x9r2cO0-EeameoS4CYpxdQ" labelAlignment="LEFT">
+ <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
+ </ownedElements>
+ <ownedElements xmi:type="diagram:DNodeListElement" xmi:id="_0ThscO0-EeameoS4CYpxdQ" name="description : EString" tooltipText="">
+ <target xmi:type="ecore:EAttribute" href="modelpatch.ecore#//EModelPatchMetadata/description"/>
+ <semanticElements xmi:type="ecore:EAttribute" href="modelpatch.ecore#//EModelPatchMetadata/description"/>
+ <ownedStyle xmi:type="diagram:BundledImage" xmi:id="_1583sO0-EeameoS4CYpxdQ" labelAlignment="LEFT">
+ <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
+ </ownedElements>
+ <ownedElements xmi:type="diagram:DNodeListElement" xmi:id="_2qMo4O0-EeameoS4CYpxdQ" name="input : EString" tooltipText="">
+ <target xmi:type="ecore:EAttribute" href="modelpatch.ecore#//EModelPatchMetadata/input"/>
+ <semanticElements xmi:type="ecore:EAttribute" href="modelpatch.ecore#//EModelPatchMetadata/input"/>
+ <ownedStyle xmi:type="diagram:BundledImage" xmi:id="_4LKsYO0-EeameoS4CYpxdQ" labelAlignment="LEFT">
+ <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
+ </ownedElements>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_MhdskO0-EeameoS4CYpxdQ" name="EModelPatchEntry" tooltipText="" outgoingEdges="_nZjT4O0_EeameoS4CYpxdQ _GqsWIPLTEeaQ7K1Gtdrq5A" incomingEdges="_wph1AO1AEeameoS4CYpxdQ _AsRf4O1BEeameoS4CYpxdQ _-HfZgO1BEeameoS4CYpxdQ" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="modelpatch.ecore#//EModelPatchEntry"/>
+ <semanticElements xmi:type="ecore:EClass" href="modelpatch.ecore#//EModelPatchEntry"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_3zTMIPQnEeaMb47YEBOpBw" iconPath="/org.eclipse.emf.ecoretools.design/icons/full/obj16/EClass_abstract.gif" borderSize="1" borderSizeComputationExpression="1" borderColor="125,125,125" backgroundStyle="Liquid" foregroundColor="228,228,228">
+ <labelFormat>italic</labelFormat>
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@conditionnalStyles.1/@style"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ <ownedElements xmi:type="diagram:DNodeListElement" xmi:id="_ERTXwO0_EeameoS4CYpxdQ" name="direction : EChangeDirection = ADD" tooltipText="">
+ <target xmi:type="ecore:EAttribute" href="modelpatch.ecore#//EModelPatchEntry/direction"/>
+ <semanticElements xmi:type="ecore:EAttribute" href="modelpatch.ecore#//EModelPatchEntry/direction"/>
+ <ownedStyle xmi:type="diagram:BundledImage" xmi:id="_FxCFIO0_EeameoS4CYpxdQ" labelAlignment="LEFT">
+ <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
+ </ownedElements>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="__NYK4O0-EeameoS4CYpxdQ" name="EChangeDirection" tooltipText="" width="12" height="10">
+ <target xmi:type="ecore:EEnum" href="modelpatch.ecore#//EChangeDirection"/>
+ <semanticElements xmi:type="ecore:EEnum" href="modelpatch.ecore#//EChangeDirection"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="__NYK4e0-EeameoS4CYpxdQ" borderSize="1" borderSizeComputationExpression="1" borderColor="125,125,125" backgroundStyle="Liquid" foregroundColor="221,236,202">
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']/@style"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']"/>
+ <ownedElements xmi:type="diagram:DNodeListElement" xmi:id="_AsLEIO0_EeameoS4CYpxdQ" name="ADD" tooltipText="">
+ <target xmi:type="ecore:EEnumLiteral" href="modelpatch.ecore#//EChangeDirection/ADD"/>
+ <semanticElements xmi:type="ecore:EEnumLiteral" href="modelpatch.ecore#//EChangeDirection/ADD"/>
+ <ownedStyle xmi:type="diagram:BundledImage" xmi:id="_AsLrMO0_EeameoS4CYpxdQ" labelAlignment="LEFT">
+ <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']/@subNodeMappings[name='EC%20EEnumLiteral']/@style"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']/@subNodeMappings[name='EC%20EEnumLiteral']"/>
+ </ownedElements>
+ <ownedElements xmi:type="diagram:DNodeListElement" xmi:id="_CWaYYO0_EeameoS4CYpxdQ" name="REMOVE" tooltipText="">
+ <target xmi:type="ecore:EEnumLiteral" href="modelpatch.ecore#//EChangeDirection/REMOVE"/>
+ <semanticElements xmi:type="ecore:EEnumLiteral" href="modelpatch.ecore#//EChangeDirection/REMOVE"/>
+ <ownedStyle xmi:type="diagram:BundledImage" xmi:id="_CWaYYe0_EeameoS4CYpxdQ" labelAlignment="LEFT">
+ <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']/@subNodeMappings[name='EC%20EEnumLiteral']/@style"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']/@subNodeMappings[name='EC%20EEnumLiteral']"/>
+ </ownedElements>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_fepS0O0_EeameoS4CYpxdQ" name="EIdentifiable" tooltipText="" outgoingEdges="_I43d4PLTEeaQ7K1Gtdrq5A" incomingEdges="_nZjT4O0_EeameoS4CYpxdQ _I_5i8O1BEeameoS4CYpxdQ _OA5-sO1BEeameoS4CYpxdQ _fbTZAO1BEeameoS4CYpxdQ _SiEes_LREeaQ7K1Gtdrq5A _SiFFw_LREeaQ7K1Gtdrq5A _SiFs0_LREeaQ7K1Gtdrq5A" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="modelpatch.ecore#//EIdentifiable"/>
+ <semanticElements xmi:type="ecore:EClass" href="modelpatch.ecore#//EIdentifiable"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_lVcHEO0_EeameoS4CYpxdQ" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" foregroundColor="255,252,216">
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ <ownedElements xmi:type="diagram:DNodeListElement" xmi:id="_xJniYPQnEeaMb47YEBOpBw" name="targetIdentifier : EString" tooltipText="">
+ <target xmi:type="ecore:EAttribute" href="modelpatch.ecore#//EIdentifiable/targetIdentifier"/>
+ <semanticElements xmi:type="ecore:EAttribute" href="modelpatch.ecore#//EIdentifiable/targetIdentifier"/>
+ <ownedStyle xmi:type="diagram:BundledImage" xmi:id="_xJpXkPQnEeaMb47YEBOpBw" labelAlignment="LEFT">
+ <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
+ </ownedElements>
+ <ownedElements xmi:type="diagram:DNodeListElement" xmi:id="_kWCfkO0_EeameoS4CYpxdQ" name="description : EString" tooltipText="">
+ <target xmi:type="ecore:EAttribute" href="modelpatch.ecore#//EIdentifiable/description"/>
+ <semanticElements xmi:type="ecore:EAttribute" href="modelpatch.ecore#//EIdentifiable/description"/>
+ <ownedStyle xmi:type="diagram:BundledImage" xmi:id="_lVdVMO0_EeameoS4CYpxdQ" labelAlignment="LEFT">
+ <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
+ </ownedElements>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_nZjT4O0_EeameoS4CYpxdQ" name="[0..1] context" sourceNode="_MhdskO0-EeameoS4CYpxdQ" targetNode="_fepS0O0_EeameoS4CYpxdQ">
+ <target xmi:type="ecore:EReference" href="modelpatch.ecore#//EModelPatchEntry/context"/>
+ <semanticElements xmi:type="ecore:EReference" href="modelpatch.ecore#//EModelPatchEntry/context"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_SiDQkPLREeaQ7K1Gtdrq5A" routingStyle="manhattan" strokeColor="0,0,0">
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']/@style"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_SiDQkfLREeaQ7K1Gtdrq5A" showIcon="false"/>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_SiDQkvLREeaQ7K1Gtdrq5A" labelSize="6" showIcon="false" labelColor="39,76,114"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_tYU_cO0_EeameoS4CYpxdQ" name="EElementEntry" tooltipText="" outgoingEdges="_wph1AO1AEeameoS4CYpxdQ _I_5i8O1BEeameoS4CYpxdQ" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="modelpatch.ecore#//EElementEntry"/>
+ <semanticElements xmi:type="ecore:EClass" href="modelpatch.ecore#//EElementEntry"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_tYVmgO0_EeameoS4CYpxdQ" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" foregroundColor="255,252,216">
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_wph1AO1AEeameoS4CYpxdQ" sourceNode="_tYU_cO0_EeameoS4CYpxdQ" targetNode="_MhdskO0-EeameoS4CYpxdQ">
+ <target xmi:type="ecore:EClass" href="modelpatch.ecore#//EElementEntry"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="modelpatch.ecore#//EElementEntry/@eGenericSuperTypes.0"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_3zjDwPQnEeaMb47YEBOpBw" targetArrow="InputClosedArrow" routingStyle="tree">
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+ <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_3zjDwfQnEeaMb47YEBOpBw" showIcon="false">
+ <labelFormat>italic</labelFormat>
+ </beginLabelStyle>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_3zjDwvQnEeaMb47YEBOpBw" showIcon="false"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_0BKfMO1AEeameoS4CYpxdQ" name="EStructuralFeatureEntry" tooltipText="" outgoingEdges="_AsRf4O1BEeameoS4CYpxdQ _OA5-sO1BEeameoS4CYpxdQ" incomingEdges="_Fmdh8O1BEeameoS4CYpxdQ _nEtaYO1BEeameoS4CYpxdQ" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="modelpatch.ecore#//EStructuralFeatureEntry"/>
+ <semanticElements xmi:type="ecore:EClass" href="modelpatch.ecore#//EStructuralFeatureEntry"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_3-TqMO1AEeameoS4CYpxdQ" iconPath="/org.eclipse.emf.ecoretools.design/icons/full/obj16/EClass_abstract.gif" borderSize="1" borderSizeComputationExpression="1" borderColor="125,125,125" backgroundStyle="Liquid" foregroundColor="228,228,228">
+ <labelFormat>italic</labelFormat>
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@conditionnalStyles.1/@style"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_AsRf4O1BEeameoS4CYpxdQ" sourceNode="_0BKfMO1AEeameoS4CYpxdQ" targetNode="_MhdskO0-EeameoS4CYpxdQ">
+ <target xmi:type="ecore:EClass" href="modelpatch.ecore#//EStructuralFeatureEntry"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="modelpatch.ecore#//EStructuralFeatureEntry/@eGenericSuperTypes.0"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_3zjq0PQnEeaMb47YEBOpBw" targetArrow="InputClosedArrow" routingStyle="tree">
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+ <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_3zjq0fQnEeaMb47YEBOpBw" showIcon="false">
+ <labelFormat>italic</labelFormat>
+ </beginLabelStyle>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_3zjq0vQnEeaMb47YEBOpBw" showIcon="false"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_CeLiYO1BEeameoS4CYpxdQ" name="EReferenceEntry" tooltipText="" outgoingEdges="_Fmdh8O1BEeameoS4CYpxdQ _fbTZAO1BEeameoS4CYpxdQ" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="modelpatch.ecore#//EReferenceEntry"/>
+ <semanticElements xmi:type="ecore:EClass" href="modelpatch.ecore#//EReferenceEntry"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_CeMJcO1BEeameoS4CYpxdQ" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" foregroundColor="255,252,216">
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_Fmdh8O1BEeameoS4CYpxdQ" sourceNode="_CeLiYO1BEeameoS4CYpxdQ" targetNode="_0BKfMO1AEeameoS4CYpxdQ">
+ <target xmi:type="ecore:EClass" href="modelpatch.ecore#//EReferenceEntry"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="modelpatch.ecore#//EReferenceEntry/@eGenericSuperTypes.0"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_Fmdh8e1BEeameoS4CYpxdQ" targetArrow="InputClosedArrow" routingStyle="tree">
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+ <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_Fmdh8u1BEeameoS4CYpxdQ" showIcon="false">
+ <labelFormat>italic</labelFormat>
+ </beginLabelStyle>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_Fmdh8-1BEeameoS4CYpxdQ" showIcon="false"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_I_5i8O1BEeameoS4CYpxdQ" name="[0..1] type" sourceNode="_tYU_cO0_EeameoS4CYpxdQ" targetNode="_fepS0O0_EeameoS4CYpxdQ">
+ <target xmi:type="ecore:EReference" href="modelpatch.ecore#//EElementEntry/type"/>
+ <semanticElements xmi:type="ecore:EReference" href="modelpatch.ecore#//EElementEntry/type"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_SiDQk_LREeaQ7K1Gtdrq5A" routingStyle="manhattan" strokeColor="0,0,0">
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']/@style"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_SiDQlPLREeaQ7K1Gtdrq5A" showIcon="false"/>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_SiDQlfLREeaQ7K1Gtdrq5A" labelSize="6" showIcon="false" labelColor="39,76,114"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_OA5-sO1BEeameoS4CYpxdQ" name="[0..1] feature" sourceNode="_0BKfMO1AEeameoS4CYpxdQ" targetNode="_fepS0O0_EeameoS4CYpxdQ">
+ <target xmi:type="ecore:EReference" href="modelpatch.ecore#//EStructuralFeatureEntry/feature"/>
+ <semanticElements xmi:type="ecore:EReference" href="modelpatch.ecore#//EStructuralFeatureEntry/feature"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_SiD3oPLREeaQ7K1Gtdrq5A" routingStyle="manhattan" strokeColor="0,0,0">
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']/@style"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_SiD3ofLREeaQ7K1Gtdrq5A" showIcon="false"/>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_SiD3ovLREeaQ7K1Gtdrq5A" labelSize="6" showIcon="false" labelColor="39,76,114"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_fbTZAO1BEeameoS4CYpxdQ" name="[0..1] target" sourceNode="_CeLiYO1BEeameoS4CYpxdQ" targetNode="_fepS0O0_EeameoS4CYpxdQ">
+ <target xmi:type="ecore:EReference" href="modelpatch.ecore#//EReferenceEntry/target"/>
+ <semanticElements xmi:type="ecore:EReference" href="modelpatch.ecore#//EReferenceEntry/target"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_SiEesPLREeaQ7K1Gtdrq5A" routingStyle="manhattan" strokeColor="0,0,0">
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']/@style"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_SiEesfLREeaQ7K1Gtdrq5A" showIcon="false"/>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_SiEesvLREeaQ7K1Gtdrq5A" labelSize="6" showIcon="false" labelColor="39,76,114"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_kPC00O1BEeameoS4CYpxdQ" name="EAttributeEntry" tooltipText="" outgoingEdges="_nEtaYO1BEeameoS4CYpxdQ" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="modelpatch.ecore#//EAttributeEntry"/>
+ <semanticElements xmi:type="ecore:EClass" href="modelpatch.ecore#//EAttributeEntry"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_2Sa6sO1BEeameoS4CYpxdQ" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" foregroundColor="255,252,216">
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ <ownedElements xmi:type="diagram:DNodeListElement" xmi:id="_0OqTMO1BEeameoS4CYpxdQ" name="value : EString" tooltipText="">
+ <target xmi:type="ecore:EAttribute" href="modelpatch.ecore#//EAttributeEntry/value"/>
+ <semanticElements xmi:type="ecore:EAttribute" href="modelpatch.ecore#//EAttributeEntry/value"/>
+ <ownedStyle xmi:type="diagram:BundledImage" xmi:id="_2Scv4O1BEeameoS4CYpxdQ" labelAlignment="LEFT">
+ <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
+ </ownedElements>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_nEtaYO1BEeameoS4CYpxdQ" sourceNode="_kPC00O1BEeameoS4CYpxdQ" targetNode="_0BKfMO1AEeameoS4CYpxdQ">
+ <target xmi:type="ecore:EClass" href="modelpatch.ecore#//EAttributeEntry"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="modelpatch.ecore#//EAttributeEntry/@eGenericSuperTypes.0"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_2ShBUO1BEeameoS4CYpxdQ" targetArrow="InputClosedArrow" routingStyle="tree">
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+ <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_2ShBUe1BEeameoS4CYpxdQ" showIcon="false">
+ <labelFormat>italic</labelFormat>
+ </beginLabelStyle>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_2ShBUu1BEeameoS4CYpxdQ" showIcon="false"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_-HfZgO1BEeameoS4CYpxdQ" name="[0..*] entries" sourceNode="_qIBzsO08EeameoS4CYpxdQ" targetNode="_MhdskO0-EeameoS4CYpxdQ">
+ <target xmi:type="ecore:EReference" href="modelpatch.ecore#//EModelPatch/entries"/>
+ <semanticElements xmi:type="ecore:EReference" href="modelpatch.ecore#//EModelPatch/entries"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_-HgAkO1BEeameoS4CYpxdQ" description="_nZlwIO0_EeameoS4CYpxdQ" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_-HgAke1BEeameoS4CYpxdQ" showIcon="false">
+ <customFeatures>labelSize</customFeatures>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_-HgAku1BEeameoS4CYpxdQ" showIcon="false" labelColor="39,76,114">
+ <customFeatures>labelSize</customFeatures>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_AQJIEO1CEeameoS4CYpxdQ" name="[0..1] metadata" sourceNode="_qIBzsO08EeameoS4CYpxdQ" targetNode="_wQ3aMO08EeameoS4CYpxdQ">
+ <target xmi:type="ecore:EReference" href="modelpatch.ecore#//EModelPatch/metadata"/>
+ <semanticElements xmi:type="ecore:EReference" href="modelpatch.ecore#//EModelPatch/metadata"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_Byhg0O1CEeameoS4CYpxdQ" description="_nZlwIO0_EeameoS4CYpxdQ" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_Byhg0e1CEeameoS4CYpxdQ" showIcon="false"/>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_Byhg0u1CEeameoS4CYpxdQ" labelSize="6" showIcon="false" labelColor="39,76,114"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_SiEes_LREeaQ7K1Gtdrq5A" name="[0..*] elements" sourceNode="_qIBzsO08EeameoS4CYpxdQ" targetNode="_fepS0O0_EeameoS4CYpxdQ">
+ <target xmi:type="ecore:EReference" href="modelpatch.ecore#//EModelPatch/elements"/>
+ <semanticElements xmi:type="ecore:EReference" href="modelpatch.ecore#//EModelPatch/elements"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_SiFFwPLREeaQ7K1Gtdrq5A" description="_nZlwIO0_EeameoS4CYpxdQ" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_SiFFwfLREeaQ7K1Gtdrq5A" showIcon="false">
+ <customFeatures>labelSize</customFeatures>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_SiFFwvLREeaQ7K1Gtdrq5A" showIcon="false" labelColor="39,76,114">
+ <customFeatures>labelSize</customFeatures>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_SiFFw_LREeaQ7K1Gtdrq5A" name="[0..*] features" sourceNode="_qIBzsO08EeameoS4CYpxdQ" targetNode="_fepS0O0_EeameoS4CYpxdQ">
+ <target xmi:type="ecore:EReference" href="modelpatch.ecore#//EModelPatch/features"/>
+ <semanticElements xmi:type="ecore:EReference" href="modelpatch.ecore#//EModelPatch/features"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_SiFs0PLREeaQ7K1Gtdrq5A" description="_nZlwIO0_EeameoS4CYpxdQ" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_SiFs0fLREeaQ7K1Gtdrq5A" showIcon="false">
+ <customFeatures>labelSize</customFeatures>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_SiFs0vLREeaQ7K1Gtdrq5A" showIcon="false" labelColor="39,76,114">
+ <customFeatures>labelSize</customFeatures>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_SiFs0_LREeaQ7K1Gtdrq5A" name="[0..*] types" sourceNode="_qIBzsO08EeameoS4CYpxdQ" targetNode="_fepS0O0_EeameoS4CYpxdQ">
+ <target xmi:type="ecore:EReference" href="modelpatch.ecore#//EModelPatch/types"/>
+ <semanticElements xmi:type="ecore:EReference" href="modelpatch.ecore#//EModelPatch/types"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_SiGT4PLREeaQ7K1Gtdrq5A" description="_nZlwIO0_EeameoS4CYpxdQ" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_SiGT4fLREeaQ7K1Gtdrq5A" showIcon="false">
+ <customFeatures>labelSize</customFeatures>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_SiGT4vLREeaQ7K1Gtdrq5A" showIcon="false" labelColor="39,76,114">
+ <customFeatures>labelSize</customFeatures>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_0w3N0PLSEeaQ7K1Gtdrq5A" name="EModelPatchElement" tooltipText="" incomingEdges="_EpFDsPLTEeaQ7K1Gtdrq5A _FzeaQPLTEeaQ7K1Gtdrq5A _GqsWIPLTEeaQ7K1Gtdrq5A _I43d4PLTEeaQ7K1Gtdrq5A" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="modelpatch.ecore#//EModelPatchElement"/>
+ <semanticElements xmi:type="ecore:EClass" href="modelpatch.ecore#//EModelPatchElement"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_8LGKwPLSEeaQ7K1Gtdrq5A" iconPath="/org.eclipse.emf.ecoretools.design/icons/full/obj16/EClass_abstract.gif" borderSize="1" borderSizeComputationExpression="1" borderColor="125,125,125" backgroundStyle="Liquid" foregroundColor="228,228,228">
+ <labelFormat>italic</labelFormat>
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@conditionnalStyles.1/@style"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ <ownedElements xmi:type="diagram:DNodeListElement" xmi:id="_xJtpAPQnEeaMb47YEBOpBw" name="elementIdentifier : EString" tooltipText="">
+ <target xmi:type="ecore:EAttribute" href="modelpatch.ecore#//EModelPatchElement/elementIdentifier"/>
+ <semanticElements xmi:type="ecore:EAttribute" href="modelpatch.ecore#//EModelPatchElement/elementIdentifier"/>
+ <ownedStyle xmi:type="diagram:BundledImage" xmi:id="_xJuQEPQnEeaMb47YEBOpBw" labelAlignment="LEFT">
+ <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
+ </ownedElements>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_EpFDsPLTEeaQ7K1Gtdrq5A" sourceNode="_qIBzsO08EeameoS4CYpxdQ" targetNode="_0w3N0PLSEeaQ7K1Gtdrq5A">
+ <target xmi:type="ecore:EClass" href="modelpatch.ecore#//EModelPatch"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="modelpatch.ecore#//EModelPatch/@eGenericSuperTypes.0"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_EpFqwPLTEeaQ7K1Gtdrq5A" targetArrow="InputClosedArrow" routingStyle="tree">
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+ <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_EpFqwfLTEeaQ7K1Gtdrq5A" showIcon="false">
+ <labelFormat>italic</labelFormat>
+ </beginLabelStyle>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_EpFqwvLTEeaQ7K1Gtdrq5A" showIcon="false"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_FzeaQPLTEeaQ7K1Gtdrq5A" sourceNode="_wQ3aMO08EeameoS4CYpxdQ" targetNode="_0w3N0PLSEeaQ7K1Gtdrq5A">
+ <target xmi:type="ecore:EClass" href="modelpatch.ecore#//EModelPatchMetadata"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="modelpatch.ecore#//EModelPatchMetadata/@eGenericSuperTypes.0"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_FzeaQfLTEeaQ7K1Gtdrq5A" targetArrow="InputClosedArrow" routingStyle="tree">
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+ <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_FzeaQvLTEeaQ7K1Gtdrq5A" showIcon="false">
+ <labelFormat>italic</labelFormat>
+ </beginLabelStyle>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_FzeaQ_LTEeaQ7K1Gtdrq5A" showIcon="false"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_GqsWIPLTEeaQ7K1Gtdrq5A" sourceNode="_MhdskO0-EeameoS4CYpxdQ" targetNode="_0w3N0PLSEeaQ7K1Gtdrq5A">
+ <target xmi:type="ecore:EClass" href="modelpatch.ecore#//EModelPatchEntry"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="modelpatch.ecore#//EModelPatchEntry/@eGenericSuperTypes.0"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_3wQfMPQnEeaMb47YEBOpBw" targetArrow="InputClosedArrow" routingStyle="tree">
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+ <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_3wQfMfQnEeaMb47YEBOpBw" showIcon="false">
+ <labelFormat>italic</labelFormat>
+ </beginLabelStyle>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_3wQfMvQnEeaMb47YEBOpBw" showIcon="false"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_I43d4PLTEeaQ7K1Gtdrq5A" sourceNode="_fepS0O0_EeameoS4CYpxdQ" targetNode="_0w3N0PLSEeaQ7K1Gtdrq5A">
+ <target xmi:type="ecore:EClass" href="modelpatch.ecore#//EIdentifiable"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="modelpatch.ecore#//EIdentifiable/@eGenericSuperTypes.0"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_I43d4fLTEeaQ7K1Gtdrq5A" targetArrow="InputClosedArrow" routingStyle="tree">
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+ <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_I43d4vLTEeaQ7K1Gtdrq5A" showIcon="false">
+ <labelFormat>italic</labelFormat>
+ </beginLabelStyle>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_I43d4_LTEeaQ7K1Gtdrq5A" showIcon="false"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+ </ownedDiagramElements>
+ <description xmi:type="description_1:DiagramDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']"/>
+ <filterVariableHistory xmi:type="diagram:FilterVariableHistory" xmi:id="_Unx-Uu08EeameoS4CYpxdQ"/>
+ <activatedLayers xmi:type="description_1:Layer" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer"/>
+ <activatedLayers xmi:type="description_1:AdditionalLayer" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@additionalLayers[name='Package']"/>
+ <activatedLayers xmi:type="description_1:AdditionalLayer" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@additionalLayers[name='Validation']"/>
+ <activatedLayers xmi:type="description_1:AdditionalLayer" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Archetype']/@ownedRepresentationExtensions[name='Entities%20With%20Archetypes']/@layers[name='Archetypes']"/>
+ <target xmi:type="ecore:EPackage" href="modelpatch.ecore#/"/>
+ </diagram:DSemanticDiagram>
+</xmi:XMI>
diff --git a/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/model/modelpatch.ecore b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/model/modelpatch.ecore
new file mode 100644
index 0000000..848d626
--- /dev/null
+++ b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/model/modelpatch.ecore
@@ -0,0 +1,58 @@
+<?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="emodelpatch" nsURI="http://www.eclipse.org/emf/diffmerge/1.0.0/patch"
+ nsPrefix="org.eclipse.emf.diffmerge.patch">
+ <eClassifiers xsi:type="ecore:EClass" name="EModelPatch" eSuperTypes="#//EModelPatchElement">
+ <eStructuralFeatures xsi:type="ecore:EReference" name="entries" upperBound="-1"
+ eType="#//EModelPatchEntry" containment="true"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="metadata" eType="#//EModelPatchMetadata"
+ containment="true"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="elements" upperBound="-1"
+ eType="#//EIdentifiable" containment="true"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="features" upperBound="-1"
+ eType="#//EIdentifiable" containment="true"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="types" upperBound="-1"
+ eType="#//EIdentifiable" containment="true"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="EModelPatchMetadata" eSuperTypes="#//EModelPatchElement">
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="author" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="createdAt" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="description" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="input" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="EModelPatchEntry" abstract="true" eSuperTypes="#//EModelPatchElement">
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="direction" eType="#//EChangeDirection"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="context" eType="#//EIdentifiable"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EEnum" name="EChangeDirection">
+ <eLiterals name="ADD"/>
+ <eLiterals name="REMOVE" value="1"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="EIdentifiable" eSuperTypes="#//EModelPatchElement">
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="targetIdentifier" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="description" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="EElementEntry" eSuperTypes="#//EModelPatchEntry">
+ <eStructuralFeatures xsi:type="ecore:EReference" name="type" eType="#//EIdentifiable"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="EModelPatchEMFMetadata" eSuperTypes="#//EModelPatchMetadata">
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="modelUris" upperBound="-1"
+ eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="usedNamespaceUris" upperBound="-1"
+ eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="EStructuralFeatureEntry" abstract="true"
+ eSuperTypes="#//EModelPatchEntry">
+ <eStructuralFeatures xsi:type="ecore:EReference" name="feature" eType="#//EIdentifiable"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="EReferenceEntry" eSuperTypes="#//EStructuralFeatureEntry">
+ <eStructuralFeatures xsi:type="ecore:EReference" name="target" eType="#//EIdentifiable"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="EAttributeEntry" eSuperTypes="#//EStructuralFeatureEntry">
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="value" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="EModelPatchElement" abstract="true">
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="elementIdentifier" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+ iD="true"/>
+ </eClassifiers>
+</ecore:EPackage>
diff --git a/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/model/modelpatch.genmodel b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/model/modelpatch.genmodel
new file mode 100644
index 0000000..39e13a7
--- /dev/null
+++ b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/model/modelpatch.genmodel
@@ -0,0 +1,56 @@
+<?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" copyrightText="Copyright (c) 2016-2017 Thales Global Services S.A.S.&#xD;&#xA;All rights reserved. This program and the accompanying materials&#xD;&#xA;are made available under the terms of the Eclipse Public License v1.0&#xD;&#xA;which accompanies this distribution, and is available at&#xD;&#xA;http://www.eclipse.org/legal/epl-v10.html&#xD;&#xA;&#xD;&#xA;Contributors:&#xD;&#xA; Abel Hegedus (IncQuery Labs Ltd.) - initial API and implementation"
+ modelDirectory="/org.eclipse.emf.diffmerge.patch.persistence.emf/src" modelPluginID="org.eclipse.emf.diffmerge.patch.persistence.emf"
+ modelName="EModelPatch" rootExtendsClass="org.eclipse.emf.ecore.impl.MinimalEObjectImpl$Container"
+ importerID="org.eclipse.emf.importer.ecore" complianceLevel="7.0" copyrightFields="false"
+ runtimeVersion="2.11" operationReflection="true" importOrganizing="true">
+ <foreignModel>modelpatch.ecore</foreignModel>
+ <genPackages prefix="EModelPatch" basePackage="org.eclipse.emf.diffmerge.patch.persistence.emf"
+ disposableProviderFactory="true" ecorePackage="modelpatch.ecore#/">
+ <genEnums typeSafeEnumCompatible="false" ecoreEnum="modelpatch.ecore#//EChangeDirection">
+ <genEnumLiterals ecoreEnumLiteral="modelpatch.ecore#//EChangeDirection/ADD"/>
+ <genEnumLiterals ecoreEnumLiteral="modelpatch.ecore#//EChangeDirection/REMOVE"/>
+ </genEnums>
+ <genClasses ecoreClass="modelpatch.ecore#//EModelPatch">
+ <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference modelpatch.ecore#//EModelPatch/entries"/>
+ <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference modelpatch.ecore#//EModelPatch/metadata"/>
+ <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference modelpatch.ecore#//EModelPatch/elements"/>
+ <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference modelpatch.ecore#//EModelPatch/features"/>
+ <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference modelpatch.ecore#//EModelPatch/types"/>
+ </genClasses>
+ <genClasses ecoreClass="modelpatch.ecore#//EModelPatchMetadata">
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute modelpatch.ecore#//EModelPatchMetadata/author"/>
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute modelpatch.ecore#//EModelPatchMetadata/createdAt"/>
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute modelpatch.ecore#//EModelPatchMetadata/description"/>
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute modelpatch.ecore#//EModelPatchMetadata/input"/>
+ </genClasses>
+ <genClasses image="false" ecoreClass="modelpatch.ecore#//EModelPatchEntry">
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute modelpatch.ecore#//EModelPatchEntry/direction"/>
+ <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference modelpatch.ecore#//EModelPatchEntry/context"/>
+ </genClasses>
+ <genClasses ecoreClass="modelpatch.ecore#//EIdentifiable" labelFeature="#//emodelpatch/EIdentifiable/targetIdentifier">
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute modelpatch.ecore#//EIdentifiable/targetIdentifier"/>
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute modelpatch.ecore#//EIdentifiable/description"/>
+ </genClasses>
+ <genClasses ecoreClass="modelpatch.ecore#//EElementEntry">
+ <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference modelpatch.ecore#//EElementEntry/type"/>
+ </genClasses>
+ <genClasses ecoreClass="modelpatch.ecore#//EModelPatchEMFMetadata">
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute modelpatch.ecore#//EModelPatchEMFMetadata/modelUris"/>
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute modelpatch.ecore#//EModelPatchEMFMetadata/usedNamespaceUris"/>
+ </genClasses>
+ <genClasses image="false" ecoreClass="modelpatch.ecore#//EStructuralFeatureEntry">
+ <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference modelpatch.ecore#//EStructuralFeatureEntry/feature"/>
+ </genClasses>
+ <genClasses ecoreClass="modelpatch.ecore#//EReferenceEntry">
+ <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference modelpatch.ecore#//EReferenceEntry/target"/>
+ </genClasses>
+ <genClasses ecoreClass="modelpatch.ecore#//EAttributeEntry">
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute modelpatch.ecore#//EAttributeEntry/value"/>
+ </genClasses>
+ <genClasses image="false" ecoreClass="modelpatch.ecore#//EModelPatchElement">
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute modelpatch.ecore#//EModelPatchElement/elementIdentifier"/>
+ </genClasses>
+ </genPackages>
+</genmodel:GenModel>
diff --git a/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/model/modelpatch.png b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/model/modelpatch.png
new file mode 100644
index 0000000..4dcfb88
--- /dev/null
+++ b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/model/modelpatch.png
Binary files differ
diff --git a/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/plugin.properties b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/plugin.properties
new file mode 100644
index 0000000..ab856e0
--- /dev/null
+++ b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/plugin.properties
@@ -0,0 +1,9 @@
+###############################################################################
+# Copyright (c) 2016-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 = Model Patch EMF Persistence Plug-In (Incubation)
+providerName = Eclipse Modeling Project
diff --git a/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/plugin.xml b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/plugin.xml
new file mode 100644
index 0000000..99df154
--- /dev/null
+++ b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/plugin.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+<plugin>
+
+ <extension point="org.eclipse.emf.ecore.generated_package">
+ <!-- @generated modelpatch -->
+ <package
+ uri="http://www.eclipse.org/emf/diffmerge/1.0.0/patch"
+ class="org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchPackage"
+ genModel="model/modelpatch.genmodel"/>
+ </extension>
+
+</plugin>
diff --git a/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/pom.xml b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/pom.xml
new file mode 100644
index 0000000..a4f7a8f
--- /dev/null
+++ b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/pom.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright (c) 2016-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:
+ Abel Hegedus (IncQuery Labs Ltd.) - initial API and implementation
+ -->
+<project
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+ xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <artifactId>org.eclipse.emf.diffmerge.patch.plugins</artifactId>
+ <groupId>org.eclipse.emf.diffmerge.patch</groupId>
+ <version>0.1.0-SNAPSHOT</version>
+ </parent>
+ <artifactId>org.eclipse.emf.diffmerge.patch.persistence.emf</artifactId>
+ <packaging>eclipse-plugin</packaging>
+ <version>0.1.0-SNAPSHOT</version>
+ <properties>
+ <rootPath>${basedir}/../</rootPath>
+ </properties>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-clean-plugin</artifactId>
+ <configuration>
+ <filesets>
+ <fileset>
+ <directory>xtend-gen</directory>
+ <excludes>
+ <exclude>.gitignore</exclude>
+ </excludes>
+ </fileset>
+ </filesets>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.eclipse.xtend</groupId>
+ <artifactId>xtend-maven-plugin</artifactId>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/EMFModelPatchPersister.xtend b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/EMFModelPatchPersister.xtend
new file mode 100644
index 0000000..f06a793
--- /dev/null
+++ b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/EMFModelPatchPersister.xtend
@@ -0,0 +1,41 @@
+/*******************************************************************************
+ * 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:
+ * Abel Hegedus (IncQuery Labs Ltd.) - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.emf.diffmerge.patch.persistence.emf
+
+import org.eclipse.emf.diffmerge.patch.api.ModelPatch
+import org.eclipse.emf.diffmerge.patch.api.ModelPatchException
+import org.eclipse.emf.diffmerge.patch.persistence.ModelPatchPersister
+import org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatch
+import org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchFactory
+import org.eclipse.emf.diffmerge.patch.persistence.emf.transform.ModelPatchToEMF
+import org.apache.log4j.Logger
+import org.eclipse.emf.diffmerge.patch.persistence.emf.transform.EModelPatchToPOJO
+
+class EMFModelPatchPersister implements ModelPatchPersister<EModelPatch> {
+
+ extension EModelPatchFactory factory = EModelPatchFactory.eINSTANCE
+ val logger = Logger.getLogger(EMFModelPatchPersister)
+
+ override persist(ModelPatch modelPatch) throws ModelPatchException {
+ val root = createEModelPatch
+ val mp2emf = new ModelPatchToEMF(modelPatch, root, logger, true)
+ mp2emf.transform
+ return root
+ }
+
+ override load(EModelPatch eModelPatch) throws ModelPatchException {
+ val root = new ModelPatch
+ val mp2pojo = new EModelPatchToPOJO(eModelPatch, root, logger)
+ mp2pojo.transform
+ return root
+ }
+
+}
diff --git a/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/EMFModelPatchSerializer.xtend b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/EMFModelPatchSerializer.xtend
new file mode 100644
index 0000000..928f965
--- /dev/null
+++ b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/EMFModelPatchSerializer.xtend
@@ -0,0 +1,99 @@
+/*******************************************************************************
+ * 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:
+ * Abel Hegedus (IncQuery Labs Ltd.) - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.emf.diffmerge.patch.persistence.emf
+
+import java.io.ByteArrayInputStream
+import java.io.ByteArrayOutputStream
+import java.io.File
+import java.io.InputStream
+import java.nio.charset.StandardCharsets
+import org.eclipse.emf.common.util.URI
+import org.eclipse.emf.diffmerge.patch.api.ModelPatch
+import org.eclipse.emf.diffmerge.patch.api.ModelPatchException
+import org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatch
+import org.eclipse.emf.diffmerge.patch.serializer.IModelPatchSerializer
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl
+
+class EMFModelPatchSerializer implements IModelPatchSerializer {
+
+ val persister = new EMFModelPatchPersister
+
+ override load(File file) throws ModelPatchException {
+ try{
+ val rs = new ResourceSetImpl
+ val r = rs.getResource(URI.createFileURI(file.path), true)
+ val emodelpatch = r.contents.head
+ if(emodelpatch instanceof EModelPatch){
+ val modelpatch = persister.load(emodelpatch)
+ return modelpatch
+ }
+ } catch(Exception e){
+ throw new ModelPatchException("Exception occurred while loading model patch", e)
+ }
+ }
+
+ override load(String source) throws ModelPatchException {
+ var InputStream stream
+ try{
+ stream = new ByteArrayInputStream(source.getBytes(StandardCharsets.UTF_8))
+ val reader = stream
+ val rs = new ResourceSetImpl
+ val r = rs.createResource(URI.createFileURI("file://dummy.emodelpatch")) => [
+ load(reader, #{})
+ ]
+ val emodelpatch = r.contents.head
+ if(emodelpatch instanceof EModelPatch){
+ val modelpatch = persister.load(emodelpatch)
+ return modelpatch
+ }
+ } catch(Exception e){
+ throw new ModelPatchException("Exception occurred while loading model patch", e)
+ } finally {
+ stream.close
+ }
+ }
+
+ override serialize(ModelPatch modelPatch, File file) throws ModelPatchException {
+ try{
+ val rs = new ResourceSetImpl
+ val r = rs.createResource(URI.createFileURI(file.path))
+ val emodelpatch = persister.persist(modelPatch)
+ r.contents.add(emodelpatch)
+ r.save(#{})
+ } catch(Exception e){
+ throw new ModelPatchException("Exception occurred while loading model patch", e)
+ }
+ }
+
+ override serialize(ModelPatch modelPatch) throws ModelPatchException {
+ var ByteArrayOutputStream stream
+ var String result = null
+ try{
+ val rs = new ResourceSetImpl
+ val r = rs.createResource(URI.createFileURI("file://dummy.emodelpatch"))
+ val emodelpatch = persister.persist(modelPatch)
+ r.contents.add(emodelpatch)
+ stream = new ByteArrayOutputStream()
+ r.save(stream, #{})
+ result = stream.toString(StandardCharsets.UTF_8.name)
+ } catch(Exception e){
+ throw new ModelPatchException("Exception occurred while loading model patch", e)
+ } finally {
+ stream.close
+ }
+ return result
+ }
+
+ override getPreferredFileExtension() {
+ return "emodelpatch"
+ }
+
+}
diff --git a/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/EAttributeEntry.java b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/EAttributeEntry.java
new file mode 100644
index 0000000..bf235e0
--- /dev/null
+++ b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/EAttributeEntry.java
@@ -0,0 +1,57 @@
+/**
+ * Copyright (c) 2016-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:
+ * Abel Hegedus (IncQuery Labs Ltd.) - initial API and implementation
+ */
+package org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>EAttribute Entry</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EAttributeEntry#getValue <em>Value</em>}</li>
+ * </ul>
+ *
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchPackage#getEAttributeEntry()
+ * @model
+ * @generated
+ */
+public interface EAttributeEntry extends EStructuralFeatureEntry {
+ /**
+ * Returns the value of the '<em><b>Value</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Value</em>' attribute isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Value</em>' attribute.
+ * @see #setValue(String)
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchPackage#getEAttributeEntry_Value()
+ * @model
+ * @generated
+ */
+ String getValue();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EAttributeEntry#getValue <em>Value</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Value</em>' attribute.
+ * @see #getValue()
+ * @generated
+ */
+ void setValue(String value);
+
+} // EAttributeEntry
diff --git a/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/EChangeDirection.java b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/EChangeDirection.java
new file mode 100644
index 0000000..a04821c
--- /dev/null
+++ b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/EChangeDirection.java
@@ -0,0 +1,222 @@
+/**
+ * Copyright (c) 2016-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:
+ * Abel Hegedus (IncQuery Labs Ltd.) - initial API and implementation
+ */
+package org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.emf.common.util.Enumerator;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the literals of the enumeration '<em><b>EChange Direction</b></em>',
+ * and utility methods for working with them.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchPackage#getEChangeDirection()
+ * @model
+ * @generated
+ */
+public enum EChangeDirection implements Enumerator {
+ /**
+ * The '<em><b>ADD</b></em>' literal object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #ADD_VALUE
+ * @generated
+ * @ordered
+ */
+ ADD(0, "ADD", "ADD"),
+
+ /**
+ * The '<em><b>REMOVE</b></em>' literal object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #REMOVE_VALUE
+ * @generated
+ * @ordered
+ */
+ REMOVE(1, "REMOVE", "REMOVE");
+
+ /**
+ * The '<em><b>ADD</b></em>' literal value.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of '<em><b>ADD</b></em>' literal object isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @see #ADD
+ * @model
+ * @generated
+ * @ordered
+ */
+ public static final int ADD_VALUE = 0;
+
+ /**
+ * The '<em><b>REMOVE</b></em>' literal value.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of '<em><b>REMOVE</b></em>' literal object isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @see #REMOVE
+ * @model
+ * @generated
+ * @ordered
+ */
+ public static final int REMOVE_VALUE = 1;
+
+ /**
+ * An array of all the '<em><b>EChange Direction</b></em>' enumerators.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private static final EChangeDirection[] VALUES_ARRAY =
+ new EChangeDirection[] {
+ ADD,
+ REMOVE,
+ };
+
+ /**
+ * A public read-only list of all the '<em><b>EChange Direction</b></em>' enumerators.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static final List<EChangeDirection> VALUES = Collections.unmodifiableList(Arrays.asList(VALUES_ARRAY));
+
+ /**
+ * Returns the '<em><b>EChange Direction</b></em>' literal with the specified literal value.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param literal the literal.
+ * @return the matching enumerator or <code>null</code>.
+ * @generated
+ */
+ public static EChangeDirection get(String literal) {
+ for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+ EChangeDirection result = VALUES_ARRAY[i];
+ if (result.toString().equals(literal)) {
+ return result;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Returns the '<em><b>EChange Direction</b></em>' literal with the specified name.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param name the name.
+ * @return the matching enumerator or <code>null</code>.
+ * @generated
+ */
+ public static EChangeDirection getByName(String name) {
+ for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+ EChangeDirection result = VALUES_ARRAY[i];
+ if (result.getName().equals(name)) {
+ return result;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Returns the '<em><b>EChange Direction</b></em>' literal with the specified integer value.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the integer value.
+ * @return the matching enumerator or <code>null</code>.
+ * @generated
+ */
+ public static EChangeDirection get(int value) {
+ switch (value) {
+ case ADD_VALUE: return ADD;
+ case REMOVE_VALUE: return REMOVE;
+ }
+ return null;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private final int value;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private final String name;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private final String literal;
+
+ /**
+ * Only this class can construct instances.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EChangeDirection(int value, String name, String literal) {
+ this.value = value;
+ this.name = name;
+ this.literal = literal;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public int getValue() {
+ return value;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public String getName() {
+ return name;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public String getLiteral() {
+ return literal;
+ }
+
+ /**
+ * Returns the literal value of the enumerator, which is its string representation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String toString() {
+ return literal;
+ }
+
+} //EChangeDirection
diff --git a/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/EElementEntry.java b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/EElementEntry.java
new file mode 100644
index 0000000..b55abb1
--- /dev/null
+++ b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/EElementEntry.java
@@ -0,0 +1,57 @@
+/**
+ * Copyright (c) 2016-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:
+ * Abel Hegedus (IncQuery Labs Ltd.) - initial API and implementation
+ */
+package org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>EElement Entry</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EElementEntry#getType <em>Type</em>}</li>
+ * </ul>
+ *
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchPackage#getEElementEntry()
+ * @model
+ * @generated
+ */
+public interface EElementEntry extends EModelPatchEntry {
+ /**
+ * Returns the value of the '<em><b>Type</b></em>' reference.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Type</em>' reference isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Type</em>' reference.
+ * @see #setType(EIdentifiable)
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchPackage#getEElementEntry_Type()
+ * @model
+ * @generated
+ */
+ EIdentifiable getType();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EElementEntry#getType <em>Type</em>}' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Type</em>' reference.
+ * @see #getType()
+ * @generated
+ */
+ void setType(EIdentifiable value);
+
+} // EElementEntry
diff --git a/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/EIdentifiable.java b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/EIdentifiable.java
new file mode 100644
index 0000000..8b4a17f
--- /dev/null
+++ b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/EIdentifiable.java
@@ -0,0 +1,84 @@
+/**
+ * Copyright (c) 2016-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:
+ * Abel Hegedus (IncQuery Labs Ltd.) - initial API and implementation
+ */
+package org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>EIdentifiable</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EIdentifiable#getTargetIdentifier <em>Target Identifier</em>}</li>
+ * <li>{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EIdentifiable#getDescription <em>Description</em>}</li>
+ * </ul>
+ *
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchPackage#getEIdentifiable()
+ * @model
+ * @generated
+ */
+public interface EIdentifiable extends EModelPatchElement {
+ /**
+ * Returns the value of the '<em><b>Target Identifier</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Target Identifier</em>' attribute isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Target Identifier</em>' attribute.
+ * @see #setTargetIdentifier(String)
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchPackage#getEIdentifiable_TargetIdentifier()
+ * @model
+ * @generated
+ */
+ String getTargetIdentifier();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EIdentifiable#getTargetIdentifier <em>Target Identifier</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Target Identifier</em>' attribute.
+ * @see #getTargetIdentifier()
+ * @generated
+ */
+ void setTargetIdentifier(String value);
+
+ /**
+ * Returns the value of the '<em><b>Description</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Description</em>' attribute isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Description</em>' attribute.
+ * @see #setDescription(String)
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchPackage#getEIdentifiable_Description()
+ * @model
+ * @generated
+ */
+ String getDescription();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EIdentifiable#getDescription <em>Description</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Description</em>' attribute.
+ * @see #getDescription()
+ * @generated
+ */
+ void setDescription(String value);
+
+} // EIdentifiable
diff --git a/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/EModelPatch.java b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/EModelPatch.java
new file mode 100644
index 0000000..fdb28da
--- /dev/null
+++ b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/EModelPatch.java
@@ -0,0 +1,126 @@
+/**
+ * Copyright (c) 2016-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:
+ * Abel Hegedus (IncQuery Labs Ltd.) - initial API and implementation
+ */
+package org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch;
+
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>EModel Patch</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatch#getEntries <em>Entries</em>}</li>
+ * <li>{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatch#getMetadata <em>Metadata</em>}</li>
+ * <li>{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatch#getElements <em>Elements</em>}</li>
+ * <li>{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatch#getFeatures <em>Features</em>}</li>
+ * <li>{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatch#getTypes <em>Types</em>}</li>
+ * </ul>
+ *
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchPackage#getEModelPatch()
+ * @model
+ * @generated
+ */
+public interface EModelPatch extends EModelPatchElement {
+ /**
+ * Returns the value of the '<em><b>Entries</b></em>' containment reference list.
+ * The list contents are of type {@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchEntry}.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Entries</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>Entries</em>' containment reference list.
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchPackage#getEModelPatch_Entries()
+ * @model containment="true"
+ * @generated
+ */
+ EList<EModelPatchEntry> getEntries();
+
+ /**
+ * Returns the value of the '<em><b>Metadata</b></em>' containment reference.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Metadata</em>' containment reference isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Metadata</em>' containment reference.
+ * @see #setMetadata(EModelPatchMetadata)
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchPackage#getEModelPatch_Metadata()
+ * @model containment="true"
+ * @generated
+ */
+ EModelPatchMetadata getMetadata();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatch#getMetadata <em>Metadata</em>}' containment reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Metadata</em>' containment reference.
+ * @see #getMetadata()
+ * @generated
+ */
+ void setMetadata(EModelPatchMetadata value);
+
+ /**
+ * Returns the value of the '<em><b>Elements</b></em>' containment reference list.
+ * The list contents are of type {@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EIdentifiable}.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Elements</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>Elements</em>' containment reference list.
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchPackage#getEModelPatch_Elements()
+ * @model containment="true"
+ * @generated
+ */
+ EList<EIdentifiable> getElements();
+
+ /**
+ * Returns the value of the '<em><b>Features</b></em>' containment reference list.
+ * The list contents are of type {@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EIdentifiable}.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Features</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>Features</em>' containment reference list.
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchPackage#getEModelPatch_Features()
+ * @model containment="true"
+ * @generated
+ */
+ EList<EIdentifiable> getFeatures();
+
+ /**
+ * Returns the value of the '<em><b>Types</b></em>' containment reference list.
+ * The list contents are of type {@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EIdentifiable}.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Types</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>Types</em>' containment reference list.
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchPackage#getEModelPatch_Types()
+ * @model containment="true"
+ * @generated
+ */
+ EList<EIdentifiable> getTypes();
+
+} // EModelPatch
diff --git a/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/EModelPatchEMFMetadata.java b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/EModelPatchEMFMetadata.java
new file mode 100644
index 0000000..21839b7
--- /dev/null
+++ b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/EModelPatchEMFMetadata.java
@@ -0,0 +1,65 @@
+/**
+ * Copyright (c) 2016-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:
+ * Abel Hegedus (IncQuery Labs Ltd.) - initial API and implementation
+ */
+package org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch;
+
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>EMF Metadata</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchEMFMetadata#getModelUris <em>Model Uris</em>}</li>
+ * <li>{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchEMFMetadata#getUsedNamespaceUris <em>Used Namespace Uris</em>}</li>
+ * </ul>
+ *
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchPackage#getEModelPatchEMFMetadata()
+ * @model
+ * @generated
+ */
+public interface EModelPatchEMFMetadata extends EModelPatchMetadata {
+ /**
+ * Returns the value of the '<em><b>Model Uris</b></em>' attribute list.
+ * The list contents are of type {@link java.lang.String}.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Model Uris</em>' attribute list isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Model Uris</em>' attribute list.
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchPackage#getEModelPatchEMFMetadata_ModelUris()
+ * @model
+ * @generated
+ */
+ EList<String> getModelUris();
+
+ /**
+ * Returns the value of the '<em><b>Used Namespace Uris</b></em>' attribute list.
+ * The list contents are of type {@link java.lang.String}.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Used Namespace Uris</em>' attribute list isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Used Namespace Uris</em>' attribute list.
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchPackage#getEModelPatchEMFMetadata_UsedNamespaceUris()
+ * @model
+ * @generated
+ */
+ EList<String> getUsedNamespaceUris();
+
+} // EModelPatchEMFMetadata
diff --git a/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/EModelPatchElement.java b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/EModelPatchElement.java
new file mode 100644
index 0000000..7440d6e
--- /dev/null
+++ b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/EModelPatchElement.java
@@ -0,0 +1,58 @@
+/**
+ * Copyright (c) 2016-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:
+ * Abel Hegedus (IncQuery Labs Ltd.) - initial API and implementation
+ */
+package org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Element</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchElement#getElementIdentifier <em>Element Identifier</em>}</li>
+ * </ul>
+ *
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchPackage#getEModelPatchElement()
+ * @model abstract="true"
+ * @generated
+ */
+public interface EModelPatchElement extends EObject {
+ /**
+ * Returns the value of the '<em><b>Element Identifier</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Element Identifier</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 Identifier</em>' attribute.
+ * @see #setElementIdentifier(String)
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchPackage#getEModelPatchElement_ElementIdentifier()
+ * @model id="true"
+ * @generated
+ */
+ String getElementIdentifier();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchElement#getElementIdentifier <em>Element Identifier</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Element Identifier</em>' attribute.
+ * @see #getElementIdentifier()
+ * @generated
+ */
+ void setElementIdentifier(String value);
+
+} // EModelPatchElement
diff --git a/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/EModelPatchEntry.java b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/EModelPatchEntry.java
new file mode 100644
index 0000000..3a586ce
--- /dev/null
+++ b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/EModelPatchEntry.java
@@ -0,0 +1,87 @@
+/**
+ * Copyright (c) 2016-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:
+ * Abel Hegedus (IncQuery Labs Ltd.) - initial API and implementation
+ */
+package org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Entry</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchEntry#getDirection <em>Direction</em>}</li>
+ * <li>{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchEntry#getContext <em>Context</em>}</li>
+ * </ul>
+ *
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchPackage#getEModelPatchEntry()
+ * @model abstract="true"
+ * @generated
+ */
+public interface EModelPatchEntry extends EModelPatchElement {
+ /**
+ * Returns the value of the '<em><b>Direction</b></em>' attribute.
+ * The literals are from the enumeration {@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EChangeDirection}.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Direction</em>' attribute isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Direction</em>' attribute.
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EChangeDirection
+ * @see #setDirection(EChangeDirection)
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchPackage#getEModelPatchEntry_Direction()
+ * @model
+ * @generated
+ */
+ EChangeDirection getDirection();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchEntry#getDirection <em>Direction</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Direction</em>' attribute.
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EChangeDirection
+ * @see #getDirection()
+ * @generated
+ */
+ void setDirection(EChangeDirection value);
+
+ /**
+ * Returns the value of the '<em><b>Context</b></em>' reference.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Context</em>' reference isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Context</em>' reference.
+ * @see #setContext(EIdentifiable)
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchPackage#getEModelPatchEntry_Context()
+ * @model
+ * @generated
+ */
+ EIdentifiable getContext();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchEntry#getContext <em>Context</em>}' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Context</em>' reference.
+ * @see #getContext()
+ * @generated
+ */
+ void setContext(EIdentifiable value);
+
+} // EModelPatchEntry
diff --git a/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/EModelPatchFactory.java b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/EModelPatchFactory.java
new file mode 100644
index 0000000..dca5be0
--- /dev/null
+++ b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/EModelPatchFactory.java
@@ -0,0 +1,104 @@
+/**
+ * Copyright (c) 2016-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:
+ * Abel Hegedus (IncQuery Labs Ltd.) - initial API and implementation
+ */
+package org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch;
+
+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.patch.persistence.emf.emodelpatch.EModelPatchPackage
+ * @generated
+ */
+public interface EModelPatchFactory extends EFactory {
+ /**
+ * The singleton instance of the factory.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EModelPatchFactory eINSTANCE = org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl.EModelPatchFactoryImpl.init();
+
+ /**
+ * Returns a new object of class '<em>EModel Patch</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return a new object of class '<em>EModel Patch</em>'.
+ * @generated
+ */
+ EModelPatch createEModelPatch();
+
+ /**
+ * Returns a new object of class '<em>Metadata</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return a new object of class '<em>Metadata</em>'.
+ * @generated
+ */
+ EModelPatchMetadata createEModelPatchMetadata();
+
+ /**
+ * Returns a new object of class '<em>EIdentifiable</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return a new object of class '<em>EIdentifiable</em>'.
+ * @generated
+ */
+ EIdentifiable createEIdentifiable();
+
+ /**
+ * Returns a new object of class '<em>EElement Entry</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return a new object of class '<em>EElement Entry</em>'.
+ * @generated
+ */
+ EElementEntry createEElementEntry();
+
+ /**
+ * Returns a new object of class '<em>EMF Metadata</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return a new object of class '<em>EMF Metadata</em>'.
+ * @generated
+ */
+ EModelPatchEMFMetadata createEModelPatchEMFMetadata();
+
+ /**
+ * Returns a new object of class '<em>EReference Entry</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return a new object of class '<em>EReference Entry</em>'.
+ * @generated
+ */
+ EReferenceEntry createEReferenceEntry();
+
+ /**
+ * Returns a new object of class '<em>EAttribute Entry</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return a new object of class '<em>EAttribute Entry</em>'.
+ * @generated
+ */
+ EAttributeEntry createEAttributeEntry();
+
+ /**
+ * Returns the package supported by this factory.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the package supported by this factory.
+ * @generated
+ */
+ EModelPatchPackage getEModelPatchPackage();
+
+} //EModelPatchFactory
diff --git a/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/EModelPatchMetadata.java b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/EModelPatchMetadata.java
new file mode 100644
index 0000000..6b3209a
--- /dev/null
+++ b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/EModelPatchMetadata.java
@@ -0,0 +1,138 @@
+/**
+ * Copyright (c) 2016-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:
+ * Abel Hegedus (IncQuery Labs Ltd.) - initial API and implementation
+ */
+package org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Metadata</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchMetadata#getAuthor <em>Author</em>}</li>
+ * <li>{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchMetadata#getCreatedAt <em>Created At</em>}</li>
+ * <li>{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchMetadata#getDescription <em>Description</em>}</li>
+ * <li>{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchMetadata#getInput <em>Input</em>}</li>
+ * </ul>
+ *
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchPackage#getEModelPatchMetadata()
+ * @model
+ * @generated
+ */
+public interface EModelPatchMetadata extends EModelPatchElement {
+ /**
+ * Returns the value of the '<em><b>Author</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Author</em>' attribute isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Author</em>' attribute.
+ * @see #setAuthor(String)
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchPackage#getEModelPatchMetadata_Author()
+ * @model
+ * @generated
+ */
+ String getAuthor();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchMetadata#getAuthor <em>Author</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Author</em>' attribute.
+ * @see #getAuthor()
+ * @generated
+ */
+ void setAuthor(String value);
+
+ /**
+ * Returns the value of the '<em><b>Created At</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Created At</em>' attribute isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Created At</em>' attribute.
+ * @see #setCreatedAt(String)
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchPackage#getEModelPatchMetadata_CreatedAt()
+ * @model
+ * @generated
+ */
+ String getCreatedAt();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchMetadata#getCreatedAt <em>Created At</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Created At</em>' attribute.
+ * @see #getCreatedAt()
+ * @generated
+ */
+ void setCreatedAt(String value);
+
+ /**
+ * Returns the value of the '<em><b>Description</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Description</em>' attribute isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Description</em>' attribute.
+ * @see #setDescription(String)
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchPackage#getEModelPatchMetadata_Description()
+ * @model
+ * @generated
+ */
+ String getDescription();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchMetadata#getDescription <em>Description</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Description</em>' attribute.
+ * @see #getDescription()
+ * @generated
+ */
+ void setDescription(String value);
+
+ /**
+ * Returns the value of the '<em><b>Input</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Input</em>' attribute isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Input</em>' attribute.
+ * @see #setInput(String)
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchPackage#getEModelPatchMetadata_Input()
+ * @model
+ * @generated
+ */
+ String getInput();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchMetadata#getInput <em>Input</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Input</em>' attribute.
+ * @see #getInput()
+ * @generated
+ */
+ void setInput(String value);
+
+} // EModelPatchMetadata
diff --git a/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/EModelPatchPackage.java b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/EModelPatchPackage.java
new file mode 100644
index 0000000..b88e22b
--- /dev/null
+++ b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/EModelPatchPackage.java
@@ -0,0 +1,1371 @@
+/**
+ * Copyright (c) 2016-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:
+ * Abel Hegedus (IncQuery Labs Ltd.) - initial API and implementation
+ */
+package org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch;
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EEnum;
+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.patch.persistence.emf.emodelpatch.EModelPatchFactory
+ * @model kind="package"
+ * @generated
+ */
+public interface EModelPatchPackage extends EPackage {
+ /**
+ * The package name.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ String eNAME = "emodelpatch";
+
+ /**
+ * The package namespace URI.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ String eNS_URI = "http://www.eclipse.org/emf/diffmerge/1.0.0/patch";
+
+ /**
+ * The package namespace name.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ String eNS_PREFIX = "org.eclipse.emf.diffmerge.patch";
+
+ /**
+ * The singleton instance of the package.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EModelPatchPackage eINSTANCE = org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl.EModelPatchPackageImpl.init();
+
+ /**
+ * The meta object id for the '{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl.EModelPatchElementImpl <em>Element</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl.EModelPatchElementImpl
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl.EModelPatchPackageImpl#getEModelPatchElement()
+ * @generated
+ */
+ int EMODEL_PATCH_ELEMENT = 9;
+
+ /**
+ * The feature id for the '<em><b>Element Identifier</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EMODEL_PATCH_ELEMENT__ELEMENT_IDENTIFIER = 0;
+
+ /**
+ * The number of structural features of the '<em>Element</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EMODEL_PATCH_ELEMENT_FEATURE_COUNT = 1;
+
+ /**
+ * The number of operations of the '<em>Element</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EMODEL_PATCH_ELEMENT_OPERATION_COUNT = 0;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl.EModelPatchImpl <em>EModel Patch</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl.EModelPatchImpl
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl.EModelPatchPackageImpl#getEModelPatch()
+ * @generated
+ */
+ int EMODEL_PATCH = 0;
+
+ /**
+ * The feature id for the '<em><b>Element Identifier</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EMODEL_PATCH__ELEMENT_IDENTIFIER = EMODEL_PATCH_ELEMENT__ELEMENT_IDENTIFIER;
+
+ /**
+ * The feature id for the '<em><b>Entries</b></em>' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EMODEL_PATCH__ENTRIES = EMODEL_PATCH_ELEMENT_FEATURE_COUNT + 0;
+
+ /**
+ * The feature id for the '<em><b>Metadata</b></em>' containment reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EMODEL_PATCH__METADATA = EMODEL_PATCH_ELEMENT_FEATURE_COUNT + 1;
+
+ /**
+ * The feature id for the '<em><b>Elements</b></em>' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EMODEL_PATCH__ELEMENTS = EMODEL_PATCH_ELEMENT_FEATURE_COUNT + 2;
+
+ /**
+ * The feature id for the '<em><b>Features</b></em>' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EMODEL_PATCH__FEATURES = EMODEL_PATCH_ELEMENT_FEATURE_COUNT + 3;
+
+ /**
+ * The feature id for the '<em><b>Types</b></em>' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EMODEL_PATCH__TYPES = EMODEL_PATCH_ELEMENT_FEATURE_COUNT + 4;
+
+ /**
+ * The number of structural features of the '<em>EModel Patch</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EMODEL_PATCH_FEATURE_COUNT = EMODEL_PATCH_ELEMENT_FEATURE_COUNT + 5;
+
+ /**
+ * The number of operations of the '<em>EModel Patch</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EMODEL_PATCH_OPERATION_COUNT = EMODEL_PATCH_ELEMENT_OPERATION_COUNT + 0;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl.EModelPatchMetadataImpl <em>Metadata</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl.EModelPatchMetadataImpl
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl.EModelPatchPackageImpl#getEModelPatchMetadata()
+ * @generated
+ */
+ int EMODEL_PATCH_METADATA = 1;
+
+ /**
+ * The feature id for the '<em><b>Element Identifier</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EMODEL_PATCH_METADATA__ELEMENT_IDENTIFIER = EMODEL_PATCH_ELEMENT__ELEMENT_IDENTIFIER;
+
+ /**
+ * The feature id for the '<em><b>Author</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EMODEL_PATCH_METADATA__AUTHOR = EMODEL_PATCH_ELEMENT_FEATURE_COUNT + 0;
+
+ /**
+ * The feature id for the '<em><b>Created At</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EMODEL_PATCH_METADATA__CREATED_AT = EMODEL_PATCH_ELEMENT_FEATURE_COUNT + 1;
+
+ /**
+ * The feature id for the '<em><b>Description</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EMODEL_PATCH_METADATA__DESCRIPTION = EMODEL_PATCH_ELEMENT_FEATURE_COUNT + 2;
+
+ /**
+ * The feature id for the '<em><b>Input</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EMODEL_PATCH_METADATA__INPUT = EMODEL_PATCH_ELEMENT_FEATURE_COUNT + 3;
+
+ /**
+ * The number of structural features of the '<em>Metadata</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EMODEL_PATCH_METADATA_FEATURE_COUNT = EMODEL_PATCH_ELEMENT_FEATURE_COUNT + 4;
+
+ /**
+ * The number of operations of the '<em>Metadata</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EMODEL_PATCH_METADATA_OPERATION_COUNT = EMODEL_PATCH_ELEMENT_OPERATION_COUNT + 0;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl.EModelPatchEntryImpl <em>Entry</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl.EModelPatchEntryImpl
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl.EModelPatchPackageImpl#getEModelPatchEntry()
+ * @generated
+ */
+ int EMODEL_PATCH_ENTRY = 2;
+
+ /**
+ * The feature id for the '<em><b>Element Identifier</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EMODEL_PATCH_ENTRY__ELEMENT_IDENTIFIER = EMODEL_PATCH_ELEMENT__ELEMENT_IDENTIFIER;
+
+ /**
+ * The feature id for the '<em><b>Direction</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EMODEL_PATCH_ENTRY__DIRECTION = EMODEL_PATCH_ELEMENT_FEATURE_COUNT + 0;
+
+ /**
+ * The feature id for the '<em><b>Context</b></em>' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EMODEL_PATCH_ENTRY__CONTEXT = EMODEL_PATCH_ELEMENT_FEATURE_COUNT + 1;
+
+ /**
+ * The number of structural features of the '<em>Entry</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EMODEL_PATCH_ENTRY_FEATURE_COUNT = EMODEL_PATCH_ELEMENT_FEATURE_COUNT + 2;
+
+ /**
+ * The number of operations of the '<em>Entry</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EMODEL_PATCH_ENTRY_OPERATION_COUNT = EMODEL_PATCH_ELEMENT_OPERATION_COUNT + 0;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl.EIdentifiableImpl <em>EIdentifiable</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl.EIdentifiableImpl
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl.EModelPatchPackageImpl#getEIdentifiable()
+ * @generated
+ */
+ int EIDENTIFIABLE = 3;
+
+ /**
+ * The feature id for the '<em><b>Element Identifier</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EIDENTIFIABLE__ELEMENT_IDENTIFIER = EMODEL_PATCH_ELEMENT__ELEMENT_IDENTIFIER;
+
+ /**
+ * The feature id for the '<em><b>Target Identifier</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EIDENTIFIABLE__TARGET_IDENTIFIER = EMODEL_PATCH_ELEMENT_FEATURE_COUNT + 0;
+
+ /**
+ * The feature id for the '<em><b>Description</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EIDENTIFIABLE__DESCRIPTION = EMODEL_PATCH_ELEMENT_FEATURE_COUNT + 1;
+
+ /**
+ * The number of structural features of the '<em>EIdentifiable</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EIDENTIFIABLE_FEATURE_COUNT = EMODEL_PATCH_ELEMENT_FEATURE_COUNT + 2;
+
+ /**
+ * The number of operations of the '<em>EIdentifiable</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EIDENTIFIABLE_OPERATION_COUNT = EMODEL_PATCH_ELEMENT_OPERATION_COUNT + 0;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl.EElementEntryImpl <em>EElement Entry</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl.EElementEntryImpl
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl.EModelPatchPackageImpl#getEElementEntry()
+ * @generated
+ */
+ int EELEMENT_ENTRY = 4;
+
+ /**
+ * The feature id for the '<em><b>Element Identifier</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EELEMENT_ENTRY__ELEMENT_IDENTIFIER = EMODEL_PATCH_ENTRY__ELEMENT_IDENTIFIER;
+
+ /**
+ * The feature id for the '<em><b>Direction</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EELEMENT_ENTRY__DIRECTION = EMODEL_PATCH_ENTRY__DIRECTION;
+
+ /**
+ * The feature id for the '<em><b>Context</b></em>' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EELEMENT_ENTRY__CONTEXT = EMODEL_PATCH_ENTRY__CONTEXT;
+
+ /**
+ * The feature id for the '<em><b>Type</b></em>' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EELEMENT_ENTRY__TYPE = EMODEL_PATCH_ENTRY_FEATURE_COUNT + 0;
+
+ /**
+ * The number of structural features of the '<em>EElement Entry</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EELEMENT_ENTRY_FEATURE_COUNT = EMODEL_PATCH_ENTRY_FEATURE_COUNT + 1;
+
+ /**
+ * The number of operations of the '<em>EElement Entry</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EELEMENT_ENTRY_OPERATION_COUNT = EMODEL_PATCH_ENTRY_OPERATION_COUNT + 0;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl.EModelPatchEMFMetadataImpl <em>EMF Metadata</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl.EModelPatchEMFMetadataImpl
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl.EModelPatchPackageImpl#getEModelPatchEMFMetadata()
+ * @generated
+ */
+ int EMODEL_PATCH_EMF_METADATA = 5;
+
+ /**
+ * The feature id for the '<em><b>Element Identifier</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EMODEL_PATCH_EMF_METADATA__ELEMENT_IDENTIFIER = EMODEL_PATCH_METADATA__ELEMENT_IDENTIFIER;
+
+ /**
+ * The feature id for the '<em><b>Author</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EMODEL_PATCH_EMF_METADATA__AUTHOR = EMODEL_PATCH_METADATA__AUTHOR;
+
+ /**
+ * The feature id for the '<em><b>Created At</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EMODEL_PATCH_EMF_METADATA__CREATED_AT = EMODEL_PATCH_METADATA__CREATED_AT;
+
+ /**
+ * The feature id for the '<em><b>Description</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EMODEL_PATCH_EMF_METADATA__DESCRIPTION = EMODEL_PATCH_METADATA__DESCRIPTION;
+
+ /**
+ * The feature id for the '<em><b>Input</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EMODEL_PATCH_EMF_METADATA__INPUT = EMODEL_PATCH_METADATA__INPUT;
+
+ /**
+ * The feature id for the '<em><b>Model Uris</b></em>' attribute list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EMODEL_PATCH_EMF_METADATA__MODEL_URIS = EMODEL_PATCH_METADATA_FEATURE_COUNT + 0;
+
+ /**
+ * The feature id for the '<em><b>Used Namespace Uris</b></em>' attribute list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EMODEL_PATCH_EMF_METADATA__USED_NAMESPACE_URIS = EMODEL_PATCH_METADATA_FEATURE_COUNT + 1;
+
+ /**
+ * The number of structural features of the '<em>EMF Metadata</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EMODEL_PATCH_EMF_METADATA_FEATURE_COUNT = EMODEL_PATCH_METADATA_FEATURE_COUNT + 2;
+
+ /**
+ * The number of operations of the '<em>EMF Metadata</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EMODEL_PATCH_EMF_METADATA_OPERATION_COUNT = EMODEL_PATCH_METADATA_OPERATION_COUNT + 0;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl.EStructuralFeatureEntryImpl <em>EStructural Feature Entry</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl.EStructuralFeatureEntryImpl
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl.EModelPatchPackageImpl#getEStructuralFeatureEntry()
+ * @generated
+ */
+ int ESTRUCTURAL_FEATURE_ENTRY = 6;
+
+ /**
+ * The feature id for the '<em><b>Element Identifier</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int ESTRUCTURAL_FEATURE_ENTRY__ELEMENT_IDENTIFIER = EMODEL_PATCH_ENTRY__ELEMENT_IDENTIFIER;
+
+ /**
+ * The feature id for the '<em><b>Direction</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int ESTRUCTURAL_FEATURE_ENTRY__DIRECTION = EMODEL_PATCH_ENTRY__DIRECTION;
+
+ /**
+ * The feature id for the '<em><b>Context</b></em>' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int ESTRUCTURAL_FEATURE_ENTRY__CONTEXT = EMODEL_PATCH_ENTRY__CONTEXT;
+
+ /**
+ * The feature id for the '<em><b>Feature</b></em>' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int ESTRUCTURAL_FEATURE_ENTRY__FEATURE = EMODEL_PATCH_ENTRY_FEATURE_COUNT + 0;
+
+ /**
+ * The number of structural features of the '<em>EStructural Feature Entry</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int ESTRUCTURAL_FEATURE_ENTRY_FEATURE_COUNT = EMODEL_PATCH_ENTRY_FEATURE_COUNT + 1;
+
+ /**
+ * The number of operations of the '<em>EStructural Feature Entry</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int ESTRUCTURAL_FEATURE_ENTRY_OPERATION_COUNT = EMODEL_PATCH_ENTRY_OPERATION_COUNT + 0;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl.EReferenceEntryImpl <em>EReference Entry</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl.EReferenceEntryImpl
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl.EModelPatchPackageImpl#getEReferenceEntry()
+ * @generated
+ */
+ int EREFERENCE_ENTRY = 7;
+
+ /**
+ * The feature id for the '<em><b>Element Identifier</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EREFERENCE_ENTRY__ELEMENT_IDENTIFIER = ESTRUCTURAL_FEATURE_ENTRY__ELEMENT_IDENTIFIER;
+
+ /**
+ * The feature id for the '<em><b>Direction</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EREFERENCE_ENTRY__DIRECTION = ESTRUCTURAL_FEATURE_ENTRY__DIRECTION;
+
+ /**
+ * The feature id for the '<em><b>Context</b></em>' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EREFERENCE_ENTRY__CONTEXT = ESTRUCTURAL_FEATURE_ENTRY__CONTEXT;
+
+ /**
+ * The feature id for the '<em><b>Feature</b></em>' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EREFERENCE_ENTRY__FEATURE = ESTRUCTURAL_FEATURE_ENTRY__FEATURE;
+
+ /**
+ * The feature id for the '<em><b>Target</b></em>' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EREFERENCE_ENTRY__TARGET = ESTRUCTURAL_FEATURE_ENTRY_FEATURE_COUNT + 0;
+
+ /**
+ * The number of structural features of the '<em>EReference Entry</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EREFERENCE_ENTRY_FEATURE_COUNT = ESTRUCTURAL_FEATURE_ENTRY_FEATURE_COUNT + 1;
+
+ /**
+ * The number of operations of the '<em>EReference Entry</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EREFERENCE_ENTRY_OPERATION_COUNT = ESTRUCTURAL_FEATURE_ENTRY_OPERATION_COUNT + 0;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl.EAttributeEntryImpl <em>EAttribute Entry</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl.EAttributeEntryImpl
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl.EModelPatchPackageImpl#getEAttributeEntry()
+ * @generated
+ */
+ int EATTRIBUTE_ENTRY = 8;
+
+ /**
+ * The feature id for the '<em><b>Element Identifier</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EATTRIBUTE_ENTRY__ELEMENT_IDENTIFIER = ESTRUCTURAL_FEATURE_ENTRY__ELEMENT_IDENTIFIER;
+
+ /**
+ * The feature id for the '<em><b>Direction</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EATTRIBUTE_ENTRY__DIRECTION = ESTRUCTURAL_FEATURE_ENTRY__DIRECTION;
+
+ /**
+ * The feature id for the '<em><b>Context</b></em>' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EATTRIBUTE_ENTRY__CONTEXT = ESTRUCTURAL_FEATURE_ENTRY__CONTEXT;
+
+ /**
+ * The feature id for the '<em><b>Feature</b></em>' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EATTRIBUTE_ENTRY__FEATURE = ESTRUCTURAL_FEATURE_ENTRY__FEATURE;
+
+ /**
+ * The feature id for the '<em><b>Value</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EATTRIBUTE_ENTRY__VALUE = ESTRUCTURAL_FEATURE_ENTRY_FEATURE_COUNT + 0;
+
+ /**
+ * The number of structural features of the '<em>EAttribute Entry</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EATTRIBUTE_ENTRY_FEATURE_COUNT = ESTRUCTURAL_FEATURE_ENTRY_FEATURE_COUNT + 1;
+
+ /**
+ * The number of operations of the '<em>EAttribute Entry</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EATTRIBUTE_ENTRY_OPERATION_COUNT = ESTRUCTURAL_FEATURE_ENTRY_OPERATION_COUNT + 0;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EChangeDirection <em>EChange Direction</em>}' enum.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EChangeDirection
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl.EModelPatchPackageImpl#getEChangeDirection()
+ * @generated
+ */
+ int ECHANGE_DIRECTION = 10;
+
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatch <em>EModel Patch</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>EModel Patch</em>'.
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatch
+ * @generated
+ */
+ EClass getEModelPatch();
+
+ /**
+ * Returns the meta object for the containment reference list '{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatch#getEntries <em>Entries</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the containment reference list '<em>Entries</em>'.
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatch#getEntries()
+ * @see #getEModelPatch()
+ * @generated
+ */
+ EReference getEModelPatch_Entries();
+
+ /**
+ * Returns the meta object for the containment reference '{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatch#getMetadata <em>Metadata</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the containment reference '<em>Metadata</em>'.
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatch#getMetadata()
+ * @see #getEModelPatch()
+ * @generated
+ */
+ EReference getEModelPatch_Metadata();
+
+ /**
+ * Returns the meta object for the containment reference list '{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatch#getElements <em>Elements</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the containment reference list '<em>Elements</em>'.
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatch#getElements()
+ * @see #getEModelPatch()
+ * @generated
+ */
+ EReference getEModelPatch_Elements();
+
+ /**
+ * Returns the meta object for the containment reference list '{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatch#getFeatures <em>Features</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the containment reference list '<em>Features</em>'.
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatch#getFeatures()
+ * @see #getEModelPatch()
+ * @generated
+ */
+ EReference getEModelPatch_Features();
+
+ /**
+ * Returns the meta object for the containment reference list '{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatch#getTypes <em>Types</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the containment reference list '<em>Types</em>'.
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatch#getTypes()
+ * @see #getEModelPatch()
+ * @generated
+ */
+ EReference getEModelPatch_Types();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchMetadata <em>Metadata</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>Metadata</em>'.
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchMetadata
+ * @generated
+ */
+ EClass getEModelPatchMetadata();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchMetadata#getAuthor <em>Author</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Author</em>'.
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchMetadata#getAuthor()
+ * @see #getEModelPatchMetadata()
+ * @generated
+ */
+ EAttribute getEModelPatchMetadata_Author();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchMetadata#getCreatedAt <em>Created At</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Created At</em>'.
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchMetadata#getCreatedAt()
+ * @see #getEModelPatchMetadata()
+ * @generated
+ */
+ EAttribute getEModelPatchMetadata_CreatedAt();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchMetadata#getDescription <em>Description</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Description</em>'.
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchMetadata#getDescription()
+ * @see #getEModelPatchMetadata()
+ * @generated
+ */
+ EAttribute getEModelPatchMetadata_Description();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchMetadata#getInput <em>Input</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Input</em>'.
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchMetadata#getInput()
+ * @see #getEModelPatchMetadata()
+ * @generated
+ */
+ EAttribute getEModelPatchMetadata_Input();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchEntry <em>Entry</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>Entry</em>'.
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchEntry
+ * @generated
+ */
+ EClass getEModelPatchEntry();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchEntry#getDirection <em>Direction</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Direction</em>'.
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchEntry#getDirection()
+ * @see #getEModelPatchEntry()
+ * @generated
+ */
+ EAttribute getEModelPatchEntry_Direction();
+
+ /**
+ * Returns the meta object for the reference '{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchEntry#getContext <em>Context</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the reference '<em>Context</em>'.
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchEntry#getContext()
+ * @see #getEModelPatchEntry()
+ * @generated
+ */
+ EReference getEModelPatchEntry_Context();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EIdentifiable <em>EIdentifiable</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>EIdentifiable</em>'.
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EIdentifiable
+ * @generated
+ */
+ EClass getEIdentifiable();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EIdentifiable#getTargetIdentifier <em>Target Identifier</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Target Identifier</em>'.
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EIdentifiable#getTargetIdentifier()
+ * @see #getEIdentifiable()
+ * @generated
+ */
+ EAttribute getEIdentifiable_TargetIdentifier();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EIdentifiable#getDescription <em>Description</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Description</em>'.
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EIdentifiable#getDescription()
+ * @see #getEIdentifiable()
+ * @generated
+ */
+ EAttribute getEIdentifiable_Description();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EElementEntry <em>EElement Entry</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>EElement Entry</em>'.
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EElementEntry
+ * @generated
+ */
+ EClass getEElementEntry();
+
+ /**
+ * Returns the meta object for the reference '{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EElementEntry#getType <em>Type</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the reference '<em>Type</em>'.
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EElementEntry#getType()
+ * @see #getEElementEntry()
+ * @generated
+ */
+ EReference getEElementEntry_Type();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchEMFMetadata <em>EMF Metadata</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>EMF Metadata</em>'.
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchEMFMetadata
+ * @generated
+ */
+ EClass getEModelPatchEMFMetadata();
+
+ /**
+ * Returns the meta object for the attribute list '{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchEMFMetadata#getModelUris <em>Model Uris</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute list '<em>Model Uris</em>'.
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchEMFMetadata#getModelUris()
+ * @see #getEModelPatchEMFMetadata()
+ * @generated
+ */
+ EAttribute getEModelPatchEMFMetadata_ModelUris();
+
+ /**
+ * Returns the meta object for the attribute list '{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchEMFMetadata#getUsedNamespaceUris <em>Used Namespace Uris</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute list '<em>Used Namespace Uris</em>'.
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchEMFMetadata#getUsedNamespaceUris()
+ * @see #getEModelPatchEMFMetadata()
+ * @generated
+ */
+ EAttribute getEModelPatchEMFMetadata_UsedNamespaceUris();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EStructuralFeatureEntry <em>EStructural Feature Entry</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>EStructural Feature Entry</em>'.
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EStructuralFeatureEntry
+ * @generated
+ */
+ EClass getEStructuralFeatureEntry();
+
+ /**
+ * Returns the meta object for the reference '{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EStructuralFeatureEntry#getFeature <em>Feature</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the reference '<em>Feature</em>'.
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EStructuralFeatureEntry#getFeature()
+ * @see #getEStructuralFeatureEntry()
+ * @generated
+ */
+ EReference getEStructuralFeatureEntry_Feature();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EReferenceEntry <em>EReference Entry</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>EReference Entry</em>'.
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EReferenceEntry
+ * @generated
+ */
+ EClass getEReferenceEntry();
+
+ /**
+ * Returns the meta object for the reference '{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EReferenceEntry#getTarget <em>Target</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the reference '<em>Target</em>'.
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EReferenceEntry#getTarget()
+ * @see #getEReferenceEntry()
+ * @generated
+ */
+ EReference getEReferenceEntry_Target();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EAttributeEntry <em>EAttribute Entry</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>EAttribute Entry</em>'.
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EAttributeEntry
+ * @generated
+ */
+ EClass getEAttributeEntry();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EAttributeEntry#getValue <em>Value</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Value</em>'.
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EAttributeEntry#getValue()
+ * @see #getEAttributeEntry()
+ * @generated
+ */
+ EAttribute getEAttributeEntry_Value();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchElement <em>Element</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>Element</em>'.
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchElement
+ * @generated
+ */
+ EClass getEModelPatchElement();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchElement#getElementIdentifier <em>Element Identifier</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Element Identifier</em>'.
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchElement#getElementIdentifier()
+ * @see #getEModelPatchElement()
+ * @generated
+ */
+ EAttribute getEModelPatchElement_ElementIdentifier();
+
+ /**
+ * Returns the meta object for enum '{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EChangeDirection <em>EChange Direction</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for enum '<em>EChange Direction</em>'.
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EChangeDirection
+ * @generated
+ */
+ EEnum getEChangeDirection();
+
+ /**
+ * 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
+ */
+ EModelPatchFactory getEModelPatchFactory();
+
+ /**
+ * <!-- 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.patch.persistence.emf.emodelpatch.impl.EModelPatchImpl <em>EModel Patch</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl.EModelPatchImpl
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl.EModelPatchPackageImpl#getEModelPatch()
+ * @generated
+ */
+ EClass EMODEL_PATCH = eINSTANCE.getEModelPatch();
+
+ /**
+ * The meta object literal for the '<em><b>Entries</b></em>' containment reference list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference EMODEL_PATCH__ENTRIES = eINSTANCE.getEModelPatch_Entries();
+
+ /**
+ * The meta object literal for the '<em><b>Metadata</b></em>' containment reference feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference EMODEL_PATCH__METADATA = eINSTANCE.getEModelPatch_Metadata();
+
+ /**
+ * The meta object literal for the '<em><b>Elements</b></em>' containment reference list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference EMODEL_PATCH__ELEMENTS = eINSTANCE.getEModelPatch_Elements();
+
+ /**
+ * The meta object literal for the '<em><b>Features</b></em>' containment reference list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference EMODEL_PATCH__FEATURES = eINSTANCE.getEModelPatch_Features();
+
+ /**
+ * The meta object literal for the '<em><b>Types</b></em>' containment reference list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference EMODEL_PATCH__TYPES = eINSTANCE.getEModelPatch_Types();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl.EModelPatchMetadataImpl <em>Metadata</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl.EModelPatchMetadataImpl
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl.EModelPatchPackageImpl#getEModelPatchMetadata()
+ * @generated
+ */
+ EClass EMODEL_PATCH_METADATA = eINSTANCE.getEModelPatchMetadata();
+
+ /**
+ * The meta object literal for the '<em><b>Author</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute EMODEL_PATCH_METADATA__AUTHOR = eINSTANCE.getEModelPatchMetadata_Author();
+
+ /**
+ * The meta object literal for the '<em><b>Created At</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute EMODEL_PATCH_METADATA__CREATED_AT = eINSTANCE.getEModelPatchMetadata_CreatedAt();
+
+ /**
+ * The meta object literal for the '<em><b>Description</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute EMODEL_PATCH_METADATA__DESCRIPTION = eINSTANCE.getEModelPatchMetadata_Description();
+
+ /**
+ * The meta object literal for the '<em><b>Input</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute EMODEL_PATCH_METADATA__INPUT = eINSTANCE.getEModelPatchMetadata_Input();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl.EModelPatchEntryImpl <em>Entry</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl.EModelPatchEntryImpl
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl.EModelPatchPackageImpl#getEModelPatchEntry()
+ * @generated
+ */
+ EClass EMODEL_PATCH_ENTRY = eINSTANCE.getEModelPatchEntry();
+
+ /**
+ * The meta object literal for the '<em><b>Direction</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute EMODEL_PATCH_ENTRY__DIRECTION = eINSTANCE.getEModelPatchEntry_Direction();
+
+ /**
+ * The meta object literal for the '<em><b>Context</b></em>' reference feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference EMODEL_PATCH_ENTRY__CONTEXT = eINSTANCE.getEModelPatchEntry_Context();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl.EIdentifiableImpl <em>EIdentifiable</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl.EIdentifiableImpl
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl.EModelPatchPackageImpl#getEIdentifiable()
+ * @generated
+ */
+ EClass EIDENTIFIABLE = eINSTANCE.getEIdentifiable();
+
+ /**
+ * The meta object literal for the '<em><b>Target Identifier</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute EIDENTIFIABLE__TARGET_IDENTIFIER = eINSTANCE.getEIdentifiable_TargetIdentifier();
+
+ /**
+ * The meta object literal for the '<em><b>Description</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute EIDENTIFIABLE__DESCRIPTION = eINSTANCE.getEIdentifiable_Description();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl.EElementEntryImpl <em>EElement Entry</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl.EElementEntryImpl
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl.EModelPatchPackageImpl#getEElementEntry()
+ * @generated
+ */
+ EClass EELEMENT_ENTRY = eINSTANCE.getEElementEntry();
+
+ /**
+ * The meta object literal for the '<em><b>Type</b></em>' reference feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference EELEMENT_ENTRY__TYPE = eINSTANCE.getEElementEntry_Type();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl.EModelPatchEMFMetadataImpl <em>EMF Metadata</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl.EModelPatchEMFMetadataImpl
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl.EModelPatchPackageImpl#getEModelPatchEMFMetadata()
+ * @generated
+ */
+ EClass EMODEL_PATCH_EMF_METADATA = eINSTANCE.getEModelPatchEMFMetadata();
+
+ /**
+ * The meta object literal for the '<em><b>Model Uris</b></em>' attribute list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute EMODEL_PATCH_EMF_METADATA__MODEL_URIS = eINSTANCE.getEModelPatchEMFMetadata_ModelUris();
+
+ /**
+ * The meta object literal for the '<em><b>Used Namespace Uris</b></em>' attribute list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute EMODEL_PATCH_EMF_METADATA__USED_NAMESPACE_URIS = eINSTANCE.getEModelPatchEMFMetadata_UsedNamespaceUris();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl.EStructuralFeatureEntryImpl <em>EStructural Feature Entry</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl.EStructuralFeatureEntryImpl
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl.EModelPatchPackageImpl#getEStructuralFeatureEntry()
+ * @generated
+ */
+ EClass ESTRUCTURAL_FEATURE_ENTRY = eINSTANCE.getEStructuralFeatureEntry();
+
+ /**
+ * The meta object literal for the '<em><b>Feature</b></em>' reference feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference ESTRUCTURAL_FEATURE_ENTRY__FEATURE = eINSTANCE.getEStructuralFeatureEntry_Feature();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl.EReferenceEntryImpl <em>EReference Entry</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl.EReferenceEntryImpl
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl.EModelPatchPackageImpl#getEReferenceEntry()
+ * @generated
+ */
+ EClass EREFERENCE_ENTRY = eINSTANCE.getEReferenceEntry();
+
+ /**
+ * The meta object literal for the '<em><b>Target</b></em>' reference feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference EREFERENCE_ENTRY__TARGET = eINSTANCE.getEReferenceEntry_Target();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl.EAttributeEntryImpl <em>EAttribute Entry</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl.EAttributeEntryImpl
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl.EModelPatchPackageImpl#getEAttributeEntry()
+ * @generated
+ */
+ EClass EATTRIBUTE_ENTRY = eINSTANCE.getEAttributeEntry();
+
+ /**
+ * The meta object literal for the '<em><b>Value</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute EATTRIBUTE_ENTRY__VALUE = eINSTANCE.getEAttributeEntry_Value();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl.EModelPatchElementImpl <em>Element</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl.EModelPatchElementImpl
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl.EModelPatchPackageImpl#getEModelPatchElement()
+ * @generated
+ */
+ EClass EMODEL_PATCH_ELEMENT = eINSTANCE.getEModelPatchElement();
+
+ /**
+ * The meta object literal for the '<em><b>Element Identifier</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute EMODEL_PATCH_ELEMENT__ELEMENT_IDENTIFIER = eINSTANCE.getEModelPatchElement_ElementIdentifier();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EChangeDirection <em>EChange Direction</em>}' enum.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EChangeDirection
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl.EModelPatchPackageImpl#getEChangeDirection()
+ * @generated
+ */
+ EEnum ECHANGE_DIRECTION = eINSTANCE.getEChangeDirection();
+
+ }
+
+} //EModelPatchPackage
diff --git a/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/EReferenceEntry.java b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/EReferenceEntry.java
new file mode 100644
index 0000000..c427358
--- /dev/null
+++ b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/EReferenceEntry.java
@@ -0,0 +1,57 @@
+/**
+ * Copyright (c) 2016-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:
+ * Abel Hegedus (IncQuery Labs Ltd.) - initial API and implementation
+ */
+package org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>EReference Entry</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EReferenceEntry#getTarget <em>Target</em>}</li>
+ * </ul>
+ *
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchPackage#getEReferenceEntry()
+ * @model
+ * @generated
+ */
+public interface EReferenceEntry extends EStructuralFeatureEntry {
+ /**
+ * Returns the value of the '<em><b>Target</b></em>' reference.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Target</em>' reference isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Target</em>' reference.
+ * @see #setTarget(EIdentifiable)
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchPackage#getEReferenceEntry_Target()
+ * @model
+ * @generated
+ */
+ EIdentifiable getTarget();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EReferenceEntry#getTarget <em>Target</em>}' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Target</em>' reference.
+ * @see #getTarget()
+ * @generated
+ */
+ void setTarget(EIdentifiable value);
+
+} // EReferenceEntry
diff --git a/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/EStructuralFeatureEntry.java b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/EStructuralFeatureEntry.java
new file mode 100644
index 0000000..432422e
--- /dev/null
+++ b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/EStructuralFeatureEntry.java
@@ -0,0 +1,57 @@
+/**
+ * Copyright (c) 2016-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:
+ * Abel Hegedus (IncQuery Labs Ltd.) - initial API and implementation
+ */
+package org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>EStructural Feature Entry</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EStructuralFeatureEntry#getFeature <em>Feature</em>}</li>
+ * </ul>
+ *
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchPackage#getEStructuralFeatureEntry()
+ * @model abstract="true"
+ * @generated
+ */
+public interface EStructuralFeatureEntry extends EModelPatchEntry {
+ /**
+ * Returns the value of the '<em><b>Feature</b></em>' reference.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Feature</em>' reference isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Feature</em>' reference.
+ * @see #setFeature(EIdentifiable)
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchPackage#getEStructuralFeatureEntry_Feature()
+ * @model
+ * @generated
+ */
+ EIdentifiable getFeature();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EStructuralFeatureEntry#getFeature <em>Feature</em>}' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Feature</em>' reference.
+ * @see #getFeature()
+ * @generated
+ */
+ void setFeature(EIdentifiable value);
+
+} // EStructuralFeatureEntry
diff --git a/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/impl/EAttributeEntryImpl.java b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/impl/EAttributeEntryImpl.java
new file mode 100644
index 0000000..d53fb7a
--- /dev/null
+++ b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/impl/EAttributeEntryImpl.java
@@ -0,0 +1,170 @@
+/**
+ * Copyright (c) 2016-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:
+ * Abel Hegedus (IncQuery Labs Ltd.) - initial API and implementation
+ */
+package org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EAttributeEntry;
+import org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchPackage;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>EAttribute Entry</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl.EAttributeEntryImpl#getValue <em>Value</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class EAttributeEntryImpl extends EStructuralFeatureEntryImpl implements EAttributeEntry {
+ /**
+ * The default value of the '{@link #getValue() <em>Value</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getValue()
+ * @generated
+ * @ordered
+ */
+ protected static final String VALUE_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getValue() <em>Value</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getValue()
+ * @generated
+ * @ordered
+ */
+ protected String value = VALUE_EDEFAULT;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected EAttributeEntryImpl() {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return EModelPatchPackage.Literals.EATTRIBUTE_ENTRY;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public String getValue() {
+ return value;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setValue(String newValue) {
+ String oldValue = value;
+ value = newValue;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, EModelPatchPackage.EATTRIBUTE_ENTRY__VALUE, oldValue, value));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case EModelPatchPackage.EATTRIBUTE_ENTRY__VALUE:
+ return getValue();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case EModelPatchPackage.EATTRIBUTE_ENTRY__VALUE:
+ setValue((String)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case EModelPatchPackage.EATTRIBUTE_ENTRY__VALUE:
+ setValue(VALUE_EDEFAULT);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case EModelPatchPackage.EATTRIBUTE_ENTRY__VALUE:
+ return VALUE_EDEFAULT == null ? value != null : !VALUE_EDEFAULT.equals(value);
+ }
+ 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(" (value: ");
+ result.append(value);
+ result.append(')');
+ return result.toString();
+ }
+
+} //EAttributeEntryImpl
diff --git a/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/impl/EElementEntryImpl.java b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/impl/EElementEntryImpl.java
new file mode 100644
index 0000000..f6d7a4e
--- /dev/null
+++ b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/impl/EElementEntryImpl.java
@@ -0,0 +1,164 @@
+/**
+ * Copyright (c) 2016-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:
+ * Abel Hegedus (IncQuery Labs Ltd.) - initial API and implementation
+ */
+package org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EElementEntry;
+import org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EIdentifiable;
+import org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchPackage;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>EElement Entry</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl.EElementEntryImpl#getType <em>Type</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class EElementEntryImpl extends EModelPatchEntryImpl implements EElementEntry {
+ /**
+ * The cached value of the '{@link #getType() <em>Type</em>}' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getType()
+ * @generated
+ * @ordered
+ */
+ protected EIdentifiable type;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected EElementEntryImpl() {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return EModelPatchPackage.Literals.EELEMENT_ENTRY;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EIdentifiable getType() {
+ if (type != null && type.eIsProxy()) {
+ InternalEObject oldType = (InternalEObject)type;
+ type = (EIdentifiable)eResolveProxy(oldType);
+ if (type != oldType) {
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.RESOLVE, EModelPatchPackage.EELEMENT_ENTRY__TYPE, oldType, type));
+ }
+ }
+ return type;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EIdentifiable basicGetType() {
+ return type;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setType(EIdentifiable newType) {
+ EIdentifiable oldType = type;
+ type = newType;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, EModelPatchPackage.EELEMENT_ENTRY__TYPE, oldType, type));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case EModelPatchPackage.EELEMENT_ENTRY__TYPE:
+ if (resolve) return getType();
+ return basicGetType();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case EModelPatchPackage.EELEMENT_ENTRY__TYPE:
+ setType((EIdentifiable)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case EModelPatchPackage.EELEMENT_ENTRY__TYPE:
+ setType((EIdentifiable)null);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case EModelPatchPackage.EELEMENT_ENTRY__TYPE:
+ return type != null;
+ }
+ return super.eIsSet(featureID);
+ }
+
+} //EElementEntryImpl
diff --git a/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/impl/EIdentifiableImpl.java b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/impl/EIdentifiableImpl.java
new file mode 100644
index 0000000..d98b3dc
--- /dev/null
+++ b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/impl/EIdentifiableImpl.java
@@ -0,0 +1,224 @@
+/**
+ * Copyright (c) 2016-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:
+ * Abel Hegedus (IncQuery Labs Ltd.) - initial API and implementation
+ */
+package org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EIdentifiable;
+import org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchPackage;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>EIdentifiable</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl.EIdentifiableImpl#getTargetIdentifier <em>Target Identifier</em>}</li>
+ * <li>{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl.EIdentifiableImpl#getDescription <em>Description</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class EIdentifiableImpl extends EModelPatchElementImpl implements EIdentifiable {
+ /**
+ * The default value of the '{@link #getTargetIdentifier() <em>Target Identifier</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getTargetIdentifier()
+ * @generated
+ * @ordered
+ */
+ protected static final String TARGET_IDENTIFIER_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getTargetIdentifier() <em>Target Identifier</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getTargetIdentifier()
+ * @generated
+ * @ordered
+ */
+ protected String targetIdentifier = TARGET_IDENTIFIER_EDEFAULT;
+
+ /**
+ * The default value of the '{@link #getDescription() <em>Description</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getDescription()
+ * @generated
+ * @ordered
+ */
+ protected static final String DESCRIPTION_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getDescription() <em>Description</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getDescription()
+ * @generated
+ * @ordered
+ */
+ protected String description = DESCRIPTION_EDEFAULT;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected EIdentifiableImpl() {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return EModelPatchPackage.Literals.EIDENTIFIABLE;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public String getTargetIdentifier() {
+ return targetIdentifier;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setTargetIdentifier(String newTargetIdentifier) {
+ String oldTargetIdentifier = targetIdentifier;
+ targetIdentifier = newTargetIdentifier;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, EModelPatchPackage.EIDENTIFIABLE__TARGET_IDENTIFIER, oldTargetIdentifier, targetIdentifier));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public String getDescription() {
+ return description;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setDescription(String newDescription) {
+ String oldDescription = description;
+ description = newDescription;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, EModelPatchPackage.EIDENTIFIABLE__DESCRIPTION, oldDescription, description));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case EModelPatchPackage.EIDENTIFIABLE__TARGET_IDENTIFIER:
+ return getTargetIdentifier();
+ case EModelPatchPackage.EIDENTIFIABLE__DESCRIPTION:
+ return getDescription();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case EModelPatchPackage.EIDENTIFIABLE__TARGET_IDENTIFIER:
+ setTargetIdentifier((String)newValue);
+ return;
+ case EModelPatchPackage.EIDENTIFIABLE__DESCRIPTION:
+ setDescription((String)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case EModelPatchPackage.EIDENTIFIABLE__TARGET_IDENTIFIER:
+ setTargetIdentifier(TARGET_IDENTIFIER_EDEFAULT);
+ return;
+ case EModelPatchPackage.EIDENTIFIABLE__DESCRIPTION:
+ setDescription(DESCRIPTION_EDEFAULT);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case EModelPatchPackage.EIDENTIFIABLE__TARGET_IDENTIFIER:
+ return TARGET_IDENTIFIER_EDEFAULT == null ? targetIdentifier != null : !TARGET_IDENTIFIER_EDEFAULT.equals(targetIdentifier);
+ case EModelPatchPackage.EIDENTIFIABLE__DESCRIPTION:
+ return DESCRIPTION_EDEFAULT == null ? description != null : !DESCRIPTION_EDEFAULT.equals(description);
+ }
+ 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(" (targetIdentifier: ");
+ result.append(targetIdentifier);
+ result.append(", description: ");
+ result.append(description);
+ result.append(')');
+ return result.toString();
+ }
+
+} //EIdentifiableImpl
diff --git a/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/impl/EModelPatchEMFMetadataImpl.java b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/impl/EModelPatchEMFMetadataImpl.java
new file mode 100644
index 0000000..e58d611
--- /dev/null
+++ b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/impl/EModelPatchEMFMetadataImpl.java
@@ -0,0 +1,191 @@
+/**
+ * Copyright (c) 2016-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:
+ * Abel Hegedus (IncQuery Labs Ltd.) - initial API and implementation
+ */
+package org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchEMFMetadata;
+import org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchPackage;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.util.EDataTypeUniqueEList;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>EMF Metadata</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl.EModelPatchEMFMetadataImpl#getModelUris <em>Model Uris</em>}</li>
+ * <li>{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl.EModelPatchEMFMetadataImpl#getUsedNamespaceUris <em>Used Namespace Uris</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class EModelPatchEMFMetadataImpl extends EModelPatchMetadataImpl implements EModelPatchEMFMetadata {
+ /**
+ * The cached value of the '{@link #getModelUris() <em>Model Uris</em>}' attribute list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getModelUris()
+ * @generated
+ * @ordered
+ */
+ protected EList<String> modelUris;
+
+ /**
+ * The cached value of the '{@link #getUsedNamespaceUris() <em>Used Namespace Uris</em>}' attribute list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getUsedNamespaceUris()
+ * @generated
+ * @ordered
+ */
+ protected EList<String> usedNamespaceUris;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected EModelPatchEMFMetadataImpl() {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return EModelPatchPackage.Literals.EMODEL_PATCH_EMF_METADATA;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EList<String> getModelUris() {
+ if (modelUris == null) {
+ modelUris = new EDataTypeUniqueEList<String>(String.class, this, EModelPatchPackage.EMODEL_PATCH_EMF_METADATA__MODEL_URIS);
+ }
+ return modelUris;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EList<String> getUsedNamespaceUris() {
+ if (usedNamespaceUris == null) {
+ usedNamespaceUris = new EDataTypeUniqueEList<String>(String.class, this, EModelPatchPackage.EMODEL_PATCH_EMF_METADATA__USED_NAMESPACE_URIS);
+ }
+ return usedNamespaceUris;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case EModelPatchPackage.EMODEL_PATCH_EMF_METADATA__MODEL_URIS:
+ return getModelUris();
+ case EModelPatchPackage.EMODEL_PATCH_EMF_METADATA__USED_NAMESPACE_URIS:
+ return getUsedNamespaceUris();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case EModelPatchPackage.EMODEL_PATCH_EMF_METADATA__MODEL_URIS:
+ getModelUris().clear();
+ getModelUris().addAll((Collection<? extends String>)newValue);
+ return;
+ case EModelPatchPackage.EMODEL_PATCH_EMF_METADATA__USED_NAMESPACE_URIS:
+ getUsedNamespaceUris().clear();
+ getUsedNamespaceUris().addAll((Collection<? extends String>)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case EModelPatchPackage.EMODEL_PATCH_EMF_METADATA__MODEL_URIS:
+ getModelUris().clear();
+ return;
+ case EModelPatchPackage.EMODEL_PATCH_EMF_METADATA__USED_NAMESPACE_URIS:
+ getUsedNamespaceUris().clear();
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case EModelPatchPackage.EMODEL_PATCH_EMF_METADATA__MODEL_URIS:
+ return modelUris != null && !modelUris.isEmpty();
+ case EModelPatchPackage.EMODEL_PATCH_EMF_METADATA__USED_NAMESPACE_URIS:
+ return usedNamespaceUris != null && !usedNamespaceUris.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(" (modelUris: ");
+ result.append(modelUris);
+ result.append(", usedNamespaceUris: ");
+ result.append(usedNamespaceUris);
+ result.append(')');
+ return result.toString();
+ }
+
+} //EModelPatchEMFMetadataImpl
diff --git a/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/impl/EModelPatchElementImpl.java b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/impl/EModelPatchElementImpl.java
new file mode 100644
index 0000000..a8dd79b
--- /dev/null
+++ b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/impl/EModelPatchElementImpl.java
@@ -0,0 +1,174 @@
+/**
+ * Copyright (c) 2016-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:
+ * Abel Hegedus (IncQuery Labs Ltd.) - initial API and implementation
+ */
+package org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchElement;
+import org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchPackage;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Element</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl.EModelPatchElementImpl#getElementIdentifier <em>Element Identifier</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public abstract class EModelPatchElementImpl extends MinimalEObjectImpl.Container implements EModelPatchElement {
+ /**
+ * The default value of the '{@link #getElementIdentifier() <em>Element Identifier</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getElementIdentifier()
+ * @generated
+ * @ordered
+ */
+ protected static final String ELEMENT_IDENTIFIER_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getElementIdentifier() <em>Element Identifier</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getElementIdentifier()
+ * @generated
+ * @ordered
+ */
+ protected String elementIdentifier = ELEMENT_IDENTIFIER_EDEFAULT;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ protected EModelPatchElementImpl() {
+ super();
+ setElementIdentifier(EcoreUtil.generateUUID());
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return EModelPatchPackage.Literals.EMODEL_PATCH_ELEMENT;
+ }
+
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public String getElementIdentifier() {
+ return elementIdentifier;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setElementIdentifier(String newElementIdentifier) {
+ String oldElementIdentifier = elementIdentifier;
+ elementIdentifier = newElementIdentifier;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, EModelPatchPackage.EMODEL_PATCH_ELEMENT__ELEMENT_IDENTIFIER, oldElementIdentifier, elementIdentifier));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case EModelPatchPackage.EMODEL_PATCH_ELEMENT__ELEMENT_IDENTIFIER:
+ return getElementIdentifier();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case EModelPatchPackage.EMODEL_PATCH_ELEMENT__ELEMENT_IDENTIFIER:
+ setElementIdentifier((String)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case EModelPatchPackage.EMODEL_PATCH_ELEMENT__ELEMENT_IDENTIFIER:
+ setElementIdentifier(ELEMENT_IDENTIFIER_EDEFAULT);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case EModelPatchPackage.EMODEL_PATCH_ELEMENT__ELEMENT_IDENTIFIER:
+ return ELEMENT_IDENTIFIER_EDEFAULT == null ? elementIdentifier != null : !ELEMENT_IDENTIFIER_EDEFAULT.equals(elementIdentifier);
+ }
+ 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(" (elementIdentifier: ");
+ result.append(elementIdentifier);
+ result.append(')');
+ return result.toString();
+ }
+
+} //EModelPatchElementImpl
diff --git a/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/impl/EModelPatchEntryImpl.java b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/impl/EModelPatchEntryImpl.java
new file mode 100644
index 0000000..cbfc863
--- /dev/null
+++ b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/impl/EModelPatchEntryImpl.java
@@ -0,0 +1,233 @@
+/**
+ * Copyright (c) 2016-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:
+ * Abel Hegedus (IncQuery Labs Ltd.) - initial API and implementation
+ */
+package org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EChangeDirection;
+import org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EIdentifiable;
+import org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchEntry;
+import org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchPackage;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Entry</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl.EModelPatchEntryImpl#getDirection <em>Direction</em>}</li>
+ * <li>{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl.EModelPatchEntryImpl#getContext <em>Context</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public abstract class EModelPatchEntryImpl extends EModelPatchElementImpl implements EModelPatchEntry {
+ /**
+ * The default value of the '{@link #getDirection() <em>Direction</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getDirection()
+ * @generated
+ * @ordered
+ */
+ protected static final EChangeDirection DIRECTION_EDEFAULT = EChangeDirection.ADD;
+
+ /**
+ * The cached value of the '{@link #getDirection() <em>Direction</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getDirection()
+ * @generated
+ * @ordered
+ */
+ protected EChangeDirection direction = DIRECTION_EDEFAULT;
+
+ /**
+ * The cached value of the '{@link #getContext() <em>Context</em>}' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getContext()
+ * @generated
+ * @ordered
+ */
+ protected EIdentifiable context;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected EModelPatchEntryImpl() {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return EModelPatchPackage.Literals.EMODEL_PATCH_ENTRY;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EChangeDirection getDirection() {
+ return direction;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setDirection(EChangeDirection newDirection) {
+ EChangeDirection oldDirection = direction;
+ direction = newDirection == null ? DIRECTION_EDEFAULT : newDirection;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, EModelPatchPackage.EMODEL_PATCH_ENTRY__DIRECTION, oldDirection, direction));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EIdentifiable getContext() {
+ if (context != null && context.eIsProxy()) {
+ InternalEObject oldContext = (InternalEObject)context;
+ context = (EIdentifiable)eResolveProxy(oldContext);
+ if (context != oldContext) {
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.RESOLVE, EModelPatchPackage.EMODEL_PATCH_ENTRY__CONTEXT, oldContext, context));
+ }
+ }
+ return context;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EIdentifiable basicGetContext() {
+ return context;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setContext(EIdentifiable newContext) {
+ EIdentifiable oldContext = context;
+ context = newContext;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, EModelPatchPackage.EMODEL_PATCH_ENTRY__CONTEXT, oldContext, context));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case EModelPatchPackage.EMODEL_PATCH_ENTRY__DIRECTION:
+ return getDirection();
+ case EModelPatchPackage.EMODEL_PATCH_ENTRY__CONTEXT:
+ if (resolve) return getContext();
+ return basicGetContext();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case EModelPatchPackage.EMODEL_PATCH_ENTRY__DIRECTION:
+ setDirection((EChangeDirection)newValue);
+ return;
+ case EModelPatchPackage.EMODEL_PATCH_ENTRY__CONTEXT:
+ setContext((EIdentifiable)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case EModelPatchPackage.EMODEL_PATCH_ENTRY__DIRECTION:
+ setDirection(DIRECTION_EDEFAULT);
+ return;
+ case EModelPatchPackage.EMODEL_PATCH_ENTRY__CONTEXT:
+ setContext((EIdentifiable)null);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case EModelPatchPackage.EMODEL_PATCH_ENTRY__DIRECTION:
+ return direction != DIRECTION_EDEFAULT;
+ case EModelPatchPackage.EMODEL_PATCH_ENTRY__CONTEXT:
+ return context != null;
+ }
+ 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(" (direction: ");
+ result.append(direction);
+ result.append(')');
+ return result.toString();
+ }
+
+} //EModelPatchEntryImpl
diff --git a/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/impl/EModelPatchFactoryImpl.java b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/impl/EModelPatchFactoryImpl.java
new file mode 100644
index 0000000..2a3f914
--- /dev/null
+++ b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/impl/EModelPatchFactoryImpl.java
@@ -0,0 +1,220 @@
+/**
+ * Copyright (c) 2016-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:
+ * Abel Hegedus (IncQuery Labs Ltd.) - initial API and implementation
+ */
+package org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl;
+
+import org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.*;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EDataType;
+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 EModelPatchFactoryImpl extends EFactoryImpl implements EModelPatchFactory {
+ /**
+ * Creates the default factory implementation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static EModelPatchFactory init() {
+ try {
+ EModelPatchFactory theEModelPatchFactory = (EModelPatchFactory)EPackage.Registry.INSTANCE.getEFactory(EModelPatchPackage.eNS_URI);
+ if (theEModelPatchFactory != null) {
+ return theEModelPatchFactory;
+ }
+ }
+ catch (Exception exception) {
+ EcorePlugin.INSTANCE.log(exception);
+ }
+ return new EModelPatchFactoryImpl();
+ }
+
+ /**
+ * Creates an instance of the factory.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EModelPatchFactoryImpl() {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public EObject create(EClass eClass) {
+ switch (eClass.getClassifierID()) {
+ case EModelPatchPackage.EMODEL_PATCH: return createEModelPatch();
+ case EModelPatchPackage.EMODEL_PATCH_METADATA: return createEModelPatchMetadata();
+ case EModelPatchPackage.EIDENTIFIABLE: return createEIdentifiable();
+ case EModelPatchPackage.EELEMENT_ENTRY: return createEElementEntry();
+ case EModelPatchPackage.EMODEL_PATCH_EMF_METADATA: return createEModelPatchEMFMetadata();
+ case EModelPatchPackage.EREFERENCE_ENTRY: return createEReferenceEntry();
+ case EModelPatchPackage.EATTRIBUTE_ENTRY: return createEAttributeEntry();
+ default:
+ throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier");
+ }
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object createFromString(EDataType eDataType, String initialValue) {
+ switch (eDataType.getClassifierID()) {
+ case EModelPatchPackage.ECHANGE_DIRECTION:
+ return createEChangeDirectionFromString(eDataType, initialValue);
+ default:
+ throw new IllegalArgumentException("The datatype '" + eDataType.getName() + "' is not a valid classifier");
+ }
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String convertToString(EDataType eDataType, Object instanceValue) {
+ switch (eDataType.getClassifierID()) {
+ case EModelPatchPackage.ECHANGE_DIRECTION:
+ return convertEChangeDirectionToString(eDataType, instanceValue);
+ default:
+ throw new IllegalArgumentException("The datatype '" + eDataType.getName() + "' is not a valid classifier");
+ }
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EModelPatch createEModelPatch() {
+ EModelPatchImpl eModelPatch = new EModelPatchImpl();
+ return eModelPatch;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EModelPatchMetadata createEModelPatchMetadata() {
+ EModelPatchMetadataImpl eModelPatchMetadata = new EModelPatchMetadataImpl();
+ return eModelPatchMetadata;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EIdentifiable createEIdentifiable() {
+ EIdentifiableImpl eIdentifiable = new EIdentifiableImpl();
+ return eIdentifiable;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EElementEntry createEElementEntry() {
+ EElementEntryImpl eElementEntry = new EElementEntryImpl();
+ return eElementEntry;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EModelPatchEMFMetadata createEModelPatchEMFMetadata() {
+ EModelPatchEMFMetadataImpl eModelPatchEMFMetadata = new EModelPatchEMFMetadataImpl();
+ return eModelPatchEMFMetadata;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EReferenceEntry createEReferenceEntry() {
+ EReferenceEntryImpl eReferenceEntry = new EReferenceEntryImpl();
+ return eReferenceEntry;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EAttributeEntry createEAttributeEntry() {
+ EAttributeEntryImpl eAttributeEntry = new EAttributeEntryImpl();
+ return eAttributeEntry;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EChangeDirection createEChangeDirectionFromString(EDataType eDataType, String initialValue) {
+ EChangeDirection result = EChangeDirection.get(initialValue);
+ if (result == null) throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'");
+ return result;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public String convertEChangeDirectionToString(EDataType eDataType, Object instanceValue) {
+ return instanceValue == null ? null : instanceValue.toString();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EModelPatchPackage getEModelPatchPackage() {
+ return (EModelPatchPackage)getEPackage();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @deprecated
+ * @generated
+ */
+ @Deprecated
+ public static EModelPatchPackage getPackage() {
+ return EModelPatchPackage.eINSTANCE;
+ }
+
+} //EModelPatchFactoryImpl
diff --git a/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/impl/EModelPatchImpl.java b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/impl/EModelPatchImpl.java
new file mode 100644
index 0000000..ee3767b
--- /dev/null
+++ b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/impl/EModelPatchImpl.java
@@ -0,0 +1,337 @@
+/**
+ * Copyright (c) 2016-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:
+ * Abel Hegedus (IncQuery Labs Ltd.) - initial API and implementation
+ */
+package org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.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.patch.persistence.emf.emodelpatch.EIdentifiable;
+import org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatch;
+import org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchEntry;
+import org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchMetadata;
+import org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchPackage;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>EModel Patch</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl.EModelPatchImpl#getEntries <em>Entries</em>}</li>
+ * <li>{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl.EModelPatchImpl#getMetadata <em>Metadata</em>}</li>
+ * <li>{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl.EModelPatchImpl#getElements <em>Elements</em>}</li>
+ * <li>{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl.EModelPatchImpl#getFeatures <em>Features</em>}</li>
+ * <li>{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl.EModelPatchImpl#getTypes <em>Types</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class EModelPatchImpl extends EModelPatchElementImpl implements EModelPatch {
+ /**
+ * The cached value of the '{@link #getEntries() <em>Entries</em>}' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getEntries()
+ * @generated
+ * @ordered
+ */
+ protected EList<EModelPatchEntry> entries;
+
+ /**
+ * The cached value of the '{@link #getMetadata() <em>Metadata</em>}' containment reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getMetadata()
+ * @generated
+ * @ordered
+ */
+ protected EModelPatchMetadata metadata;
+
+ /**
+ * The cached value of the '{@link #getElements() <em>Elements</em>}' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getElements()
+ * @generated
+ * @ordered
+ */
+ protected EList<EIdentifiable> elements;
+
+ /**
+ * The cached value of the '{@link #getFeatures() <em>Features</em>}' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getFeatures()
+ * @generated
+ * @ordered
+ */
+ protected EList<EIdentifiable> features;
+
+ /**
+ * The cached value of the '{@link #getTypes() <em>Types</em>}' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getTypes()
+ * @generated
+ * @ordered
+ */
+ protected EList<EIdentifiable> types;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected EModelPatchImpl() {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return EModelPatchPackage.Literals.EMODEL_PATCH;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EList<EModelPatchEntry> getEntries() {
+ if (entries == null) {
+ entries = new EObjectContainmentEList<EModelPatchEntry>(EModelPatchEntry.class, this, EModelPatchPackage.EMODEL_PATCH__ENTRIES);
+ }
+ return entries;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EModelPatchMetadata getMetadata() {
+ return metadata;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public NotificationChain basicSetMetadata(EModelPatchMetadata newMetadata, NotificationChain msgs) {
+ EModelPatchMetadata oldMetadata = metadata;
+ metadata = newMetadata;
+ if (eNotificationRequired()) {
+ ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, EModelPatchPackage.EMODEL_PATCH__METADATA, oldMetadata, newMetadata);
+ if (msgs == null) msgs = notification; else msgs.add(notification);
+ }
+ return msgs;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setMetadata(EModelPatchMetadata newMetadata) {
+ if (newMetadata != metadata) {
+ NotificationChain msgs = null;
+ if (metadata != null)
+ msgs = ((InternalEObject)metadata).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - EModelPatchPackage.EMODEL_PATCH__METADATA, null, msgs);
+ if (newMetadata != null)
+ msgs = ((InternalEObject)newMetadata).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - EModelPatchPackage.EMODEL_PATCH__METADATA, null, msgs);
+ msgs = basicSetMetadata(newMetadata, msgs);
+ if (msgs != null) msgs.dispatch();
+ }
+ else if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, EModelPatchPackage.EMODEL_PATCH__METADATA, newMetadata, newMetadata));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EList<EIdentifiable> getElements() {
+ if (elements == null) {
+ elements = new EObjectContainmentEList<EIdentifiable>(EIdentifiable.class, this, EModelPatchPackage.EMODEL_PATCH__ELEMENTS);
+ }
+ return elements;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EList<EIdentifiable> getFeatures() {
+ if (features == null) {
+ features = new EObjectContainmentEList<EIdentifiable>(EIdentifiable.class, this, EModelPatchPackage.EMODEL_PATCH__FEATURES);
+ }
+ return features;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EList<EIdentifiable> getTypes() {
+ if (types == null) {
+ types = new EObjectContainmentEList<EIdentifiable>(EIdentifiable.class, this, EModelPatchPackage.EMODEL_PATCH__TYPES);
+ }
+ return types;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case EModelPatchPackage.EMODEL_PATCH__ENTRIES:
+ return ((InternalEList<?>)getEntries()).basicRemove(otherEnd, msgs);
+ case EModelPatchPackage.EMODEL_PATCH__METADATA:
+ return basicSetMetadata(null, msgs);
+ case EModelPatchPackage.EMODEL_PATCH__ELEMENTS:
+ return ((InternalEList<?>)getElements()).basicRemove(otherEnd, msgs);
+ case EModelPatchPackage.EMODEL_PATCH__FEATURES:
+ return ((InternalEList<?>)getFeatures()).basicRemove(otherEnd, msgs);
+ case EModelPatchPackage.EMODEL_PATCH__TYPES:
+ return ((InternalEList<?>)getTypes()).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 EModelPatchPackage.EMODEL_PATCH__ENTRIES:
+ return getEntries();
+ case EModelPatchPackage.EMODEL_PATCH__METADATA:
+ return getMetadata();
+ case EModelPatchPackage.EMODEL_PATCH__ELEMENTS:
+ return getElements();
+ case EModelPatchPackage.EMODEL_PATCH__FEATURES:
+ return getFeatures();
+ case EModelPatchPackage.EMODEL_PATCH__TYPES:
+ return getTypes();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case EModelPatchPackage.EMODEL_PATCH__ENTRIES:
+ getEntries().clear();
+ getEntries().addAll((Collection<? extends EModelPatchEntry>)newValue);
+ return;
+ case EModelPatchPackage.EMODEL_PATCH__METADATA:
+ setMetadata((EModelPatchMetadata)newValue);
+ return;
+ case EModelPatchPackage.EMODEL_PATCH__ELEMENTS:
+ getElements().clear();
+ getElements().addAll((Collection<? extends EIdentifiable>)newValue);
+ return;
+ case EModelPatchPackage.EMODEL_PATCH__FEATURES:
+ getFeatures().clear();
+ getFeatures().addAll((Collection<? extends EIdentifiable>)newValue);
+ return;
+ case EModelPatchPackage.EMODEL_PATCH__TYPES:
+ getTypes().clear();
+ getTypes().addAll((Collection<? extends EIdentifiable>)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case EModelPatchPackage.EMODEL_PATCH__ENTRIES:
+ getEntries().clear();
+ return;
+ case EModelPatchPackage.EMODEL_PATCH__METADATA:
+ setMetadata((EModelPatchMetadata)null);
+ return;
+ case EModelPatchPackage.EMODEL_PATCH__ELEMENTS:
+ getElements().clear();
+ return;
+ case EModelPatchPackage.EMODEL_PATCH__FEATURES:
+ getFeatures().clear();
+ return;
+ case EModelPatchPackage.EMODEL_PATCH__TYPES:
+ getTypes().clear();
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case EModelPatchPackage.EMODEL_PATCH__ENTRIES:
+ return entries != null && !entries.isEmpty();
+ case EModelPatchPackage.EMODEL_PATCH__METADATA:
+ return metadata != null;
+ case EModelPatchPackage.EMODEL_PATCH__ELEMENTS:
+ return elements != null && !elements.isEmpty();
+ case EModelPatchPackage.EMODEL_PATCH__FEATURES:
+ return features != null && !features.isEmpty();
+ case EModelPatchPackage.EMODEL_PATCH__TYPES:
+ return types != null && !types.isEmpty();
+ }
+ return super.eIsSet(featureID);
+ }
+
+} //EModelPatchImpl
diff --git a/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/impl/EModelPatchMetadataImpl.java b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/impl/EModelPatchMetadataImpl.java
new file mode 100644
index 0000000..ea37ee6
--- /dev/null
+++ b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/impl/EModelPatchMetadataImpl.java
@@ -0,0 +1,332 @@
+/**
+ * Copyright (c) 2016-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:
+ * Abel Hegedus (IncQuery Labs Ltd.) - initial API and implementation
+ */
+package org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchMetadata;
+import org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchPackage;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Metadata</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl.EModelPatchMetadataImpl#getAuthor <em>Author</em>}</li>
+ * <li>{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl.EModelPatchMetadataImpl#getCreatedAt <em>Created At</em>}</li>
+ * <li>{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl.EModelPatchMetadataImpl#getDescription <em>Description</em>}</li>
+ * <li>{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl.EModelPatchMetadataImpl#getInput <em>Input</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class EModelPatchMetadataImpl extends EModelPatchElementImpl implements EModelPatchMetadata {
+ /**
+ * The default value of the '{@link #getAuthor() <em>Author</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getAuthor()
+ * @generated
+ * @ordered
+ */
+ protected static final String AUTHOR_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getAuthor() <em>Author</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getAuthor()
+ * @generated
+ * @ordered
+ */
+ protected String author = AUTHOR_EDEFAULT;
+
+ /**
+ * The default value of the '{@link #getCreatedAt() <em>Created At</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getCreatedAt()
+ * @generated
+ * @ordered
+ */
+ protected static final String CREATED_AT_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getCreatedAt() <em>Created At</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getCreatedAt()
+ * @generated
+ * @ordered
+ */
+ protected String createdAt = CREATED_AT_EDEFAULT;
+
+ /**
+ * The default value of the '{@link #getDescription() <em>Description</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getDescription()
+ * @generated
+ * @ordered
+ */
+ protected static final String DESCRIPTION_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getDescription() <em>Description</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getDescription()
+ * @generated
+ * @ordered
+ */
+ protected String description = DESCRIPTION_EDEFAULT;
+
+ /**
+ * The default value of the '{@link #getInput() <em>Input</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getInput()
+ * @generated
+ * @ordered
+ */
+ protected static final String INPUT_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getInput() <em>Input</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getInput()
+ * @generated
+ * @ordered
+ */
+ protected String input = INPUT_EDEFAULT;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected EModelPatchMetadataImpl() {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return EModelPatchPackage.Literals.EMODEL_PATCH_METADATA;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public String getAuthor() {
+ return author;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setAuthor(String newAuthor) {
+ String oldAuthor = author;
+ author = newAuthor;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, EModelPatchPackage.EMODEL_PATCH_METADATA__AUTHOR, oldAuthor, author));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public String getCreatedAt() {
+ return createdAt;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setCreatedAt(String newCreatedAt) {
+ String oldCreatedAt = createdAt;
+ createdAt = newCreatedAt;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, EModelPatchPackage.EMODEL_PATCH_METADATA__CREATED_AT, oldCreatedAt, createdAt));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public String getDescription() {
+ return description;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setDescription(String newDescription) {
+ String oldDescription = description;
+ description = newDescription;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, EModelPatchPackage.EMODEL_PATCH_METADATA__DESCRIPTION, oldDescription, description));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public String getInput() {
+ return input;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setInput(String newInput) {
+ String oldInput = input;
+ input = newInput;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, EModelPatchPackage.EMODEL_PATCH_METADATA__INPUT, oldInput, input));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case EModelPatchPackage.EMODEL_PATCH_METADATA__AUTHOR:
+ return getAuthor();
+ case EModelPatchPackage.EMODEL_PATCH_METADATA__CREATED_AT:
+ return getCreatedAt();
+ case EModelPatchPackage.EMODEL_PATCH_METADATA__DESCRIPTION:
+ return getDescription();
+ case EModelPatchPackage.EMODEL_PATCH_METADATA__INPUT:
+ return getInput();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case EModelPatchPackage.EMODEL_PATCH_METADATA__AUTHOR:
+ setAuthor((String)newValue);
+ return;
+ case EModelPatchPackage.EMODEL_PATCH_METADATA__CREATED_AT:
+ setCreatedAt((String)newValue);
+ return;
+ case EModelPatchPackage.EMODEL_PATCH_METADATA__DESCRIPTION:
+ setDescription((String)newValue);
+ return;
+ case EModelPatchPackage.EMODEL_PATCH_METADATA__INPUT:
+ setInput((String)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case EModelPatchPackage.EMODEL_PATCH_METADATA__AUTHOR:
+ setAuthor(AUTHOR_EDEFAULT);
+ return;
+ case EModelPatchPackage.EMODEL_PATCH_METADATA__CREATED_AT:
+ setCreatedAt(CREATED_AT_EDEFAULT);
+ return;
+ case EModelPatchPackage.EMODEL_PATCH_METADATA__DESCRIPTION:
+ setDescription(DESCRIPTION_EDEFAULT);
+ return;
+ case EModelPatchPackage.EMODEL_PATCH_METADATA__INPUT:
+ setInput(INPUT_EDEFAULT);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case EModelPatchPackage.EMODEL_PATCH_METADATA__AUTHOR:
+ return AUTHOR_EDEFAULT == null ? author != null : !AUTHOR_EDEFAULT.equals(author);
+ case EModelPatchPackage.EMODEL_PATCH_METADATA__CREATED_AT:
+ return CREATED_AT_EDEFAULT == null ? createdAt != null : !CREATED_AT_EDEFAULT.equals(createdAt);
+ case EModelPatchPackage.EMODEL_PATCH_METADATA__DESCRIPTION:
+ return DESCRIPTION_EDEFAULT == null ? description != null : !DESCRIPTION_EDEFAULT.equals(description);
+ case EModelPatchPackage.EMODEL_PATCH_METADATA__INPUT:
+ return INPUT_EDEFAULT == null ? input != null : !INPUT_EDEFAULT.equals(input);
+ }
+ 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(" (author: ");
+ result.append(author);
+ result.append(", createdAt: ");
+ result.append(createdAt);
+ result.append(", description: ");
+ result.append(description);
+ result.append(", input: ");
+ result.append(input);
+ result.append(')');
+ return result.toString();
+ }
+
+} //EModelPatchMetadataImpl
diff --git a/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/impl/EModelPatchPackageImpl.java b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/impl/EModelPatchPackageImpl.java
new file mode 100644
index 0000000..9c9c768
--- /dev/null
+++ b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/impl/EModelPatchPackageImpl.java
@@ -0,0 +1,619 @@
+/**
+ * Copyright (c) 2016-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:
+ * Abel Hegedus (IncQuery Labs Ltd.) - initial API and implementation
+ */
+package org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl;
+
+import org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EAttributeEntry;
+import org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EChangeDirection;
+import org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EElementEntry;
+import org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EIdentifiable;
+import org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatch;
+import org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchEMFMetadata;
+import org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchElement;
+import org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchEntry;
+import org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchFactory;
+import org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchMetadata;
+import org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchPackage;
+import org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EReferenceEntry;
+import org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EStructuralFeatureEntry;
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EEnum;
+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 EModelPatchPackageImpl extends EPackageImpl implements EModelPatchPackage {
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass eModelPatchEClass = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass eModelPatchMetadataEClass = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass eModelPatchEntryEClass = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass eIdentifiableEClass = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass eElementEntryEClass = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass eModelPatchEMFMetadataEClass = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass eStructuralFeatureEntryEClass = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass eReferenceEntryEClass = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass eAttributeEntryEClass = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass eModelPatchElementEClass = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EEnum eChangeDirectionEEnum = 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.patch.persistence.emf.emodelpatch.EModelPatchPackage#eNS_URI
+ * @see #init()
+ * @generated
+ */
+ private EModelPatchPackageImpl() {
+ super(eNS_URI, EModelPatchFactory.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 EModelPatchPackage#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 EModelPatchPackage init() {
+ if (isInited) return (EModelPatchPackage)EPackage.Registry.INSTANCE.getEPackage(EModelPatchPackage.eNS_URI);
+
+ // Obtain or create and register package
+ EModelPatchPackageImpl theEModelPatchPackage = (EModelPatchPackageImpl)(EPackage.Registry.INSTANCE.get(eNS_URI) instanceof EModelPatchPackageImpl ? EPackage.Registry.INSTANCE.get(eNS_URI) : new EModelPatchPackageImpl());
+
+ isInited = true;
+
+ // Create package meta-data objects
+ theEModelPatchPackage.createPackageContents();
+
+ // Initialize created meta-data
+ theEModelPatchPackage.initializePackageContents();
+
+ // Mark meta-data to indicate it can't be changed
+ theEModelPatchPackage.freeze();
+
+
+ // Update the registry and return the package
+ EPackage.Registry.INSTANCE.put(EModelPatchPackage.eNS_URI, theEModelPatchPackage);
+ return theEModelPatchPackage;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EClass getEModelPatch() {
+ return eModelPatchEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EReference getEModelPatch_Entries() {
+ return (EReference)eModelPatchEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EReference getEModelPatch_Metadata() {
+ return (EReference)eModelPatchEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EReference getEModelPatch_Elements() {
+ return (EReference)eModelPatchEClass.getEStructuralFeatures().get(2);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EReference getEModelPatch_Features() {
+ return (EReference)eModelPatchEClass.getEStructuralFeatures().get(3);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EReference getEModelPatch_Types() {
+ return (EReference)eModelPatchEClass.getEStructuralFeatures().get(4);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EClass getEModelPatchMetadata() {
+ return eModelPatchMetadataEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EAttribute getEModelPatchMetadata_Author() {
+ return (EAttribute)eModelPatchMetadataEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EAttribute getEModelPatchMetadata_CreatedAt() {
+ return (EAttribute)eModelPatchMetadataEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EAttribute getEModelPatchMetadata_Description() {
+ return (EAttribute)eModelPatchMetadataEClass.getEStructuralFeatures().get(2);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EAttribute getEModelPatchMetadata_Input() {
+ return (EAttribute)eModelPatchMetadataEClass.getEStructuralFeatures().get(3);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EClass getEModelPatchEntry() {
+ return eModelPatchEntryEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EAttribute getEModelPatchEntry_Direction() {
+ return (EAttribute)eModelPatchEntryEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EReference getEModelPatchEntry_Context() {
+ return (EReference)eModelPatchEntryEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EClass getEIdentifiable() {
+ return eIdentifiableEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EAttribute getEIdentifiable_TargetIdentifier() {
+ return (EAttribute)eIdentifiableEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EAttribute getEIdentifiable_Description() {
+ return (EAttribute)eIdentifiableEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EClass getEElementEntry() {
+ return eElementEntryEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EReference getEElementEntry_Type() {
+ return (EReference)eElementEntryEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EClass getEModelPatchEMFMetadata() {
+ return eModelPatchEMFMetadataEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EAttribute getEModelPatchEMFMetadata_ModelUris() {
+ return (EAttribute)eModelPatchEMFMetadataEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EAttribute getEModelPatchEMFMetadata_UsedNamespaceUris() {
+ return (EAttribute)eModelPatchEMFMetadataEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EClass getEStructuralFeatureEntry() {
+ return eStructuralFeatureEntryEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EReference getEStructuralFeatureEntry_Feature() {
+ return (EReference)eStructuralFeatureEntryEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EClass getEReferenceEntry() {
+ return eReferenceEntryEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EReference getEReferenceEntry_Target() {
+ return (EReference)eReferenceEntryEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EClass getEAttributeEntry() {
+ return eAttributeEntryEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EAttribute getEAttributeEntry_Value() {
+ return (EAttribute)eAttributeEntryEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EClass getEModelPatchElement() {
+ return eModelPatchElementEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EAttribute getEModelPatchElement_ElementIdentifier() {
+ return (EAttribute)eModelPatchElementEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EEnum getEChangeDirection() {
+ return eChangeDirectionEEnum;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EModelPatchFactory getEModelPatchFactory() {
+ return (EModelPatchFactory)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
+ eModelPatchEClass = createEClass(EMODEL_PATCH);
+ createEReference(eModelPatchEClass, EMODEL_PATCH__ENTRIES);
+ createEReference(eModelPatchEClass, EMODEL_PATCH__METADATA);
+ createEReference(eModelPatchEClass, EMODEL_PATCH__ELEMENTS);
+ createEReference(eModelPatchEClass, EMODEL_PATCH__FEATURES);
+ createEReference(eModelPatchEClass, EMODEL_PATCH__TYPES);
+
+ eModelPatchMetadataEClass = createEClass(EMODEL_PATCH_METADATA);
+ createEAttribute(eModelPatchMetadataEClass, EMODEL_PATCH_METADATA__AUTHOR);
+ createEAttribute(eModelPatchMetadataEClass, EMODEL_PATCH_METADATA__CREATED_AT);
+ createEAttribute(eModelPatchMetadataEClass, EMODEL_PATCH_METADATA__DESCRIPTION);
+ createEAttribute(eModelPatchMetadataEClass, EMODEL_PATCH_METADATA__INPUT);
+
+ eModelPatchEntryEClass = createEClass(EMODEL_PATCH_ENTRY);
+ createEAttribute(eModelPatchEntryEClass, EMODEL_PATCH_ENTRY__DIRECTION);
+ createEReference(eModelPatchEntryEClass, EMODEL_PATCH_ENTRY__CONTEXT);
+
+ eIdentifiableEClass = createEClass(EIDENTIFIABLE);
+ createEAttribute(eIdentifiableEClass, EIDENTIFIABLE__TARGET_IDENTIFIER);
+ createEAttribute(eIdentifiableEClass, EIDENTIFIABLE__DESCRIPTION);
+
+ eElementEntryEClass = createEClass(EELEMENT_ENTRY);
+ createEReference(eElementEntryEClass, EELEMENT_ENTRY__TYPE);
+
+ eModelPatchEMFMetadataEClass = createEClass(EMODEL_PATCH_EMF_METADATA);
+ createEAttribute(eModelPatchEMFMetadataEClass, EMODEL_PATCH_EMF_METADATA__MODEL_URIS);
+ createEAttribute(eModelPatchEMFMetadataEClass, EMODEL_PATCH_EMF_METADATA__USED_NAMESPACE_URIS);
+
+ eStructuralFeatureEntryEClass = createEClass(ESTRUCTURAL_FEATURE_ENTRY);
+ createEReference(eStructuralFeatureEntryEClass, ESTRUCTURAL_FEATURE_ENTRY__FEATURE);
+
+ eReferenceEntryEClass = createEClass(EREFERENCE_ENTRY);
+ createEReference(eReferenceEntryEClass, EREFERENCE_ENTRY__TARGET);
+
+ eAttributeEntryEClass = createEClass(EATTRIBUTE_ENTRY);
+ createEAttribute(eAttributeEntryEClass, EATTRIBUTE_ENTRY__VALUE);
+
+ eModelPatchElementEClass = createEClass(EMODEL_PATCH_ELEMENT);
+ createEAttribute(eModelPatchElementEClass, EMODEL_PATCH_ELEMENT__ELEMENT_IDENTIFIER);
+
+ // Create enums
+ eChangeDirectionEEnum = createEEnum(ECHANGE_DIRECTION);
+ }
+
+ /**
+ * <!-- 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
+ eModelPatchEClass.getESuperTypes().add(this.getEModelPatchElement());
+ eModelPatchMetadataEClass.getESuperTypes().add(this.getEModelPatchElement());
+ eModelPatchEntryEClass.getESuperTypes().add(this.getEModelPatchElement());
+ eIdentifiableEClass.getESuperTypes().add(this.getEModelPatchElement());
+ eElementEntryEClass.getESuperTypes().add(this.getEModelPatchEntry());
+ eModelPatchEMFMetadataEClass.getESuperTypes().add(this.getEModelPatchMetadata());
+ eStructuralFeatureEntryEClass.getESuperTypes().add(this.getEModelPatchEntry());
+ eReferenceEntryEClass.getESuperTypes().add(this.getEStructuralFeatureEntry());
+ eAttributeEntryEClass.getESuperTypes().add(this.getEStructuralFeatureEntry());
+
+ // Initialize classes, features, and operations; add parameters
+ initEClass(eModelPatchEClass, EModelPatch.class, "EModelPatch", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEReference(getEModelPatch_Entries(), this.getEModelPatchEntry(), null, "entries", null, 0, -1, EModelPatch.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEReference(getEModelPatch_Metadata(), this.getEModelPatchMetadata(), null, "metadata", null, 0, 1, EModelPatch.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEReference(getEModelPatch_Elements(), this.getEIdentifiable(), null, "elements", null, 0, -1, EModelPatch.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEReference(getEModelPatch_Features(), this.getEIdentifiable(), null, "features", null, 0, -1, EModelPatch.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEReference(getEModelPatch_Types(), this.getEIdentifiable(), null, "types", null, 0, -1, EModelPatch.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ initEClass(eModelPatchMetadataEClass, EModelPatchMetadata.class, "EModelPatchMetadata", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEAttribute(getEModelPatchMetadata_Author(), ecorePackage.getEString(), "author", null, 0, 1, EModelPatchMetadata.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEAttribute(getEModelPatchMetadata_CreatedAt(), ecorePackage.getEString(), "createdAt", null, 0, 1, EModelPatchMetadata.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEAttribute(getEModelPatchMetadata_Description(), ecorePackage.getEString(), "description", null, 0, 1, EModelPatchMetadata.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEAttribute(getEModelPatchMetadata_Input(), ecorePackage.getEString(), "input", null, 0, 1, EModelPatchMetadata.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ initEClass(eModelPatchEntryEClass, EModelPatchEntry.class, "EModelPatchEntry", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEAttribute(getEModelPatchEntry_Direction(), this.getEChangeDirection(), "direction", null, 0, 1, EModelPatchEntry.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEReference(getEModelPatchEntry_Context(), this.getEIdentifiable(), null, "context", null, 0, 1, EModelPatchEntry.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ initEClass(eIdentifiableEClass, EIdentifiable.class, "EIdentifiable", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEAttribute(getEIdentifiable_TargetIdentifier(), ecorePackage.getEString(), "targetIdentifier", null, 0, 1, EIdentifiable.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEAttribute(getEIdentifiable_Description(), ecorePackage.getEString(), "description", null, 0, 1, EIdentifiable.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ initEClass(eElementEntryEClass, EElementEntry.class, "EElementEntry", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEReference(getEElementEntry_Type(), this.getEIdentifiable(), null, "type", null, 0, 1, EElementEntry.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ initEClass(eModelPatchEMFMetadataEClass, EModelPatchEMFMetadata.class, "EModelPatchEMFMetadata", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEAttribute(getEModelPatchEMFMetadata_ModelUris(), ecorePackage.getEString(), "modelUris", null, 0, -1, EModelPatchEMFMetadata.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEAttribute(getEModelPatchEMFMetadata_UsedNamespaceUris(), ecorePackage.getEString(), "usedNamespaceUris", null, 0, -1, EModelPatchEMFMetadata.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ initEClass(eStructuralFeatureEntryEClass, EStructuralFeatureEntry.class, "EStructuralFeatureEntry", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEReference(getEStructuralFeatureEntry_Feature(), this.getEIdentifiable(), null, "feature", null, 0, 1, EStructuralFeatureEntry.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ initEClass(eReferenceEntryEClass, EReferenceEntry.class, "EReferenceEntry", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEReference(getEReferenceEntry_Target(), this.getEIdentifiable(), null, "target", null, 0, 1, EReferenceEntry.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ initEClass(eAttributeEntryEClass, EAttributeEntry.class, "EAttributeEntry", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEAttribute(getEAttributeEntry_Value(), ecorePackage.getEString(), "value", null, 0, 1, EAttributeEntry.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ initEClass(eModelPatchElementEClass, EModelPatchElement.class, "EModelPatchElement", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEAttribute(getEModelPatchElement_ElementIdentifier(), ecorePackage.getEString(), "elementIdentifier", null, 0, 1, EModelPatchElement.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ // Initialize enums and add enum literals
+ initEEnum(eChangeDirectionEEnum, EChangeDirection.class, "EChangeDirection");
+ addEEnumLiteral(eChangeDirectionEEnum, EChangeDirection.ADD);
+ addEEnumLiteral(eChangeDirectionEEnum, EChangeDirection.REMOVE);
+
+ // Create resource
+ createResource(eNS_URI);
+ }
+
+} //EModelPatchPackageImpl
diff --git a/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/impl/EReferenceEntryImpl.java b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/impl/EReferenceEntryImpl.java
new file mode 100644
index 0000000..112b34a
--- /dev/null
+++ b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/impl/EReferenceEntryImpl.java
@@ -0,0 +1,164 @@
+/**
+ * Copyright (c) 2016-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:
+ * Abel Hegedus (IncQuery Labs Ltd.) - initial API and implementation
+ */
+package org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EIdentifiable;
+import org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchPackage;
+import org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EReferenceEntry;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>EReference Entry</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl.EReferenceEntryImpl#getTarget <em>Target</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class EReferenceEntryImpl extends EStructuralFeatureEntryImpl implements EReferenceEntry {
+ /**
+ * The cached value of the '{@link #getTarget() <em>Target</em>}' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getTarget()
+ * @generated
+ * @ordered
+ */
+ protected EIdentifiable target;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected EReferenceEntryImpl() {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return EModelPatchPackage.Literals.EREFERENCE_ENTRY;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EIdentifiable getTarget() {
+ if (target != null && target.eIsProxy()) {
+ InternalEObject oldTarget = (InternalEObject)target;
+ target = (EIdentifiable)eResolveProxy(oldTarget);
+ if (target != oldTarget) {
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.RESOLVE, EModelPatchPackage.EREFERENCE_ENTRY__TARGET, oldTarget, target));
+ }
+ }
+ return target;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EIdentifiable basicGetTarget() {
+ return target;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setTarget(EIdentifiable newTarget) {
+ EIdentifiable oldTarget = target;
+ target = newTarget;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, EModelPatchPackage.EREFERENCE_ENTRY__TARGET, oldTarget, target));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case EModelPatchPackage.EREFERENCE_ENTRY__TARGET:
+ if (resolve) return getTarget();
+ return basicGetTarget();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case EModelPatchPackage.EREFERENCE_ENTRY__TARGET:
+ setTarget((EIdentifiable)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case EModelPatchPackage.EREFERENCE_ENTRY__TARGET:
+ setTarget((EIdentifiable)null);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case EModelPatchPackage.EREFERENCE_ENTRY__TARGET:
+ return target != null;
+ }
+ return super.eIsSet(featureID);
+ }
+
+} //EReferenceEntryImpl
diff --git a/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/impl/EStructuralFeatureEntryImpl.java b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/impl/EStructuralFeatureEntryImpl.java
new file mode 100644
index 0000000..fccbbf2
--- /dev/null
+++ b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/impl/EStructuralFeatureEntryImpl.java
@@ -0,0 +1,164 @@
+/**
+ * Copyright (c) 2016-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:
+ * Abel Hegedus (IncQuery Labs Ltd.) - initial API and implementation
+ */
+package org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EIdentifiable;
+import org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchPackage;
+import org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EStructuralFeatureEntry;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>EStructural Feature Entry</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.impl.EStructuralFeatureEntryImpl#getFeature <em>Feature</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public abstract class EStructuralFeatureEntryImpl extends EModelPatchEntryImpl implements EStructuralFeatureEntry {
+ /**
+ * The cached value of the '{@link #getFeature() <em>Feature</em>}' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getFeature()
+ * @generated
+ * @ordered
+ */
+ protected EIdentifiable feature;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected EStructuralFeatureEntryImpl() {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return EModelPatchPackage.Literals.ESTRUCTURAL_FEATURE_ENTRY;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EIdentifiable getFeature() {
+ if (feature != null && feature.eIsProxy()) {
+ InternalEObject oldFeature = (InternalEObject)feature;
+ feature = (EIdentifiable)eResolveProxy(oldFeature);
+ if (feature != oldFeature) {
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.RESOLVE, EModelPatchPackage.ESTRUCTURAL_FEATURE_ENTRY__FEATURE, oldFeature, feature));
+ }
+ }
+ return feature;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EIdentifiable basicGetFeature() {
+ return feature;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setFeature(EIdentifiable newFeature) {
+ EIdentifiable oldFeature = feature;
+ feature = newFeature;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, EModelPatchPackage.ESTRUCTURAL_FEATURE_ENTRY__FEATURE, oldFeature, feature));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case EModelPatchPackage.ESTRUCTURAL_FEATURE_ENTRY__FEATURE:
+ if (resolve) return getFeature();
+ return basicGetFeature();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case EModelPatchPackage.ESTRUCTURAL_FEATURE_ENTRY__FEATURE:
+ setFeature((EIdentifiable)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case EModelPatchPackage.ESTRUCTURAL_FEATURE_ENTRY__FEATURE:
+ setFeature((EIdentifiable)null);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case EModelPatchPackage.ESTRUCTURAL_FEATURE_ENTRY__FEATURE:
+ return feature != null;
+ }
+ return super.eIsSet(featureID);
+ }
+
+} //EStructuralFeatureEntryImpl
diff --git a/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/util/EModelPatchAdapterFactory.java b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/util/EModelPatchAdapterFactory.java
new file mode 100644
index 0000000..10f5744
--- /dev/null
+++ b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/util/EModelPatchAdapterFactory.java
@@ -0,0 +1,290 @@
+/**
+ * Copyright (c) 2016-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:
+ * Abel Hegedus (IncQuery Labs Ltd.) - initial API and implementation
+ */
+package org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.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.patch.persistence.emf.emodelpatch.*;
+
+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.patch.persistence.emf.emodelpatch.EModelPatchPackage
+ * @generated
+ */
+public class EModelPatchAdapterFactory extends AdapterFactoryImpl {
+ /**
+ * The cached model package.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected static EModelPatchPackage modelPackage;
+
+ /**
+ * Creates an instance of the adapter factory.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EModelPatchAdapterFactory() {
+ if (modelPackage == null) {
+ modelPackage = EModelPatchPackage.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 EModelPatchSwitch<Adapter> modelSwitch =
+ new EModelPatchSwitch<Adapter>() {
+ @Override
+ public Adapter caseEModelPatch(EModelPatch object) {
+ return createEModelPatchAdapter();
+ }
+ @Override
+ public Adapter caseEModelPatchMetadata(EModelPatchMetadata object) {
+ return createEModelPatchMetadataAdapter();
+ }
+ @Override
+ public Adapter caseEModelPatchEntry(EModelPatchEntry object) {
+ return createEModelPatchEntryAdapter();
+ }
+ @Override
+ public Adapter caseEIdentifiable(EIdentifiable object) {
+ return createEIdentifiableAdapter();
+ }
+ @Override
+ public Adapter caseEElementEntry(EElementEntry object) {
+ return createEElementEntryAdapter();
+ }
+ @Override
+ public Adapter caseEModelPatchEMFMetadata(EModelPatchEMFMetadata object) {
+ return createEModelPatchEMFMetadataAdapter();
+ }
+ @Override
+ public Adapter caseEStructuralFeatureEntry(EStructuralFeatureEntry object) {
+ return createEStructuralFeatureEntryAdapter();
+ }
+ @Override
+ public Adapter caseEReferenceEntry(EReferenceEntry object) {
+ return createEReferenceEntryAdapter();
+ }
+ @Override
+ public Adapter caseEAttributeEntry(EAttributeEntry object) {
+ return createEAttributeEntryAdapter();
+ }
+ @Override
+ public Adapter caseEModelPatchElement(EModelPatchElement object) {
+ return createEModelPatchElementAdapter();
+ }
+ @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.patch.persistence.emf.emodelpatch.EModelPatch <em>EModel Patch</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.patch.persistence.emf.emodelpatch.EModelPatch
+ * @generated
+ */
+ public Adapter createEModelPatchAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchMetadata <em>Metadata</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.patch.persistence.emf.emodelpatch.EModelPatchMetadata
+ * @generated
+ */
+ public Adapter createEModelPatchMetadataAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchEntry <em>Entry</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.patch.persistence.emf.emodelpatch.EModelPatchEntry
+ * @generated
+ */
+ public Adapter createEModelPatchEntryAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EIdentifiable <em>EIdentifiable</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.patch.persistence.emf.emodelpatch.EIdentifiable
+ * @generated
+ */
+ public Adapter createEIdentifiableAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EElementEntry <em>EElement Entry</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.patch.persistence.emf.emodelpatch.EElementEntry
+ * @generated
+ */
+ public Adapter createEElementEntryAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchEMFMetadata <em>EMF Metadata</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.patch.persistence.emf.emodelpatch.EModelPatchEMFMetadata
+ * @generated
+ */
+ public Adapter createEModelPatchEMFMetadataAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EStructuralFeatureEntry <em>EStructural Feature Entry</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.patch.persistence.emf.emodelpatch.EStructuralFeatureEntry
+ * @generated
+ */
+ public Adapter createEStructuralFeatureEntryAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EReferenceEntry <em>EReference Entry</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.patch.persistence.emf.emodelpatch.EReferenceEntry
+ * @generated
+ */
+ public Adapter createEReferenceEntryAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EAttributeEntry <em>EAttribute Entry</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.patch.persistence.emf.emodelpatch.EAttributeEntry
+ * @generated
+ */
+ public Adapter createEAttributeEntryAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchElement <em>Element</em>}'.
+ * <!-- begin-user-doc -->
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ * <!-- end-user-doc -->
+ * @return the new adapter.
+ * @see org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchElement
+ * @generated
+ */
+ public Adapter createEModelPatchElementAdapter() {
+ 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;
+ }
+
+} //EModelPatchAdapterFactory
diff --git a/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/util/EModelPatchSwitch.java b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/util/EModelPatchSwitch.java
new file mode 100644
index 0000000..25f67dc
--- /dev/null
+++ b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/emodelpatch/util/EModelPatchSwitch.java
@@ -0,0 +1,323 @@
+/**
+ * Copyright (c) 2016-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:
+ * Abel Hegedus (IncQuery Labs Ltd.) - initial API and implementation
+ */
+package org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.util;
+
+import org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.*;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.emf.ecore.util.Switch;
+
+/**
+ * <!-- 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.patch.persistence.emf.emodelpatch.EModelPatchPackage
+ * @generated
+ */
+public class EModelPatchSwitch<T> extends Switch<T> {
+ /**
+ * The cached model package
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected static EModelPatchPackage modelPackage;
+
+ /**
+ * Creates an instance of the switch.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EModelPatchSwitch() {
+ if (modelPackage == null) {
+ modelPackage = EModelPatchPackage.eINSTANCE;
+ }
+ }
+
+ /**
+ * Checks whether this is a switch for the given package.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param ePackage the package in question.
+ * @return whether this is a switch for the given package.
+ * @generated
+ */
+ @Override
+ protected boolean isSwitchFor(EPackage ePackage) {
+ return ePackage == modelPackage;
+ }
+
+ /**
+ * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the first non-null result returned by a <code>caseXXX</code> call.
+ * @generated
+ */
+ @Override
+ protected T doSwitch(int classifierID, EObject theEObject) {
+ switch (classifierID) {
+ case EModelPatchPackage.EMODEL_PATCH: {
+ EModelPatch eModelPatch = (EModelPatch)theEObject;
+ T result = caseEModelPatch(eModelPatch);
+ if (result == null) result = caseEModelPatchElement(eModelPatch);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case EModelPatchPackage.EMODEL_PATCH_METADATA: {
+ EModelPatchMetadata eModelPatchMetadata = (EModelPatchMetadata)theEObject;
+ T result = caseEModelPatchMetadata(eModelPatchMetadata);
+ if (result == null) result = caseEModelPatchElement(eModelPatchMetadata);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case EModelPatchPackage.EMODEL_PATCH_ENTRY: {
+ EModelPatchEntry eModelPatchEntry = (EModelPatchEntry)theEObject;
+ T result = caseEModelPatchEntry(eModelPatchEntry);
+ if (result == null) result = caseEModelPatchElement(eModelPatchEntry);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case EModelPatchPackage.EIDENTIFIABLE: {
+ EIdentifiable eIdentifiable = (EIdentifiable)theEObject;
+ T result = caseEIdentifiable(eIdentifiable);
+ if (result == null) result = caseEModelPatchElement(eIdentifiable);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case EModelPatchPackage.EELEMENT_ENTRY: {
+ EElementEntry eElementEntry = (EElementEntry)theEObject;
+ T result = caseEElementEntry(eElementEntry);
+ if (result == null) result = caseEModelPatchEntry(eElementEntry);
+ if (result == null) result = caseEModelPatchElement(eElementEntry);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case EModelPatchPackage.EMODEL_PATCH_EMF_METADATA: {
+ EModelPatchEMFMetadata eModelPatchEMFMetadata = (EModelPatchEMFMetadata)theEObject;
+ T result = caseEModelPatchEMFMetadata(eModelPatchEMFMetadata);
+ if (result == null) result = caseEModelPatchMetadata(eModelPatchEMFMetadata);
+ if (result == null) result = caseEModelPatchElement(eModelPatchEMFMetadata);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case EModelPatchPackage.ESTRUCTURAL_FEATURE_ENTRY: {
+ EStructuralFeatureEntry eStructuralFeatureEntry = (EStructuralFeatureEntry)theEObject;
+ T result = caseEStructuralFeatureEntry(eStructuralFeatureEntry);
+ if (result == null) result = caseEModelPatchEntry(eStructuralFeatureEntry);
+ if (result == null) result = caseEModelPatchElement(eStructuralFeatureEntry);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case EModelPatchPackage.EREFERENCE_ENTRY: {
+ EReferenceEntry eReferenceEntry = (EReferenceEntry)theEObject;
+ T result = caseEReferenceEntry(eReferenceEntry);
+ if (result == null) result = caseEStructuralFeatureEntry(eReferenceEntry);
+ if (result == null) result = caseEModelPatchEntry(eReferenceEntry);
+ if (result == null) result = caseEModelPatchElement(eReferenceEntry);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case EModelPatchPackage.EATTRIBUTE_ENTRY: {
+ EAttributeEntry eAttributeEntry = (EAttributeEntry)theEObject;
+ T result = caseEAttributeEntry(eAttributeEntry);
+ if (result == null) result = caseEStructuralFeatureEntry(eAttributeEntry);
+ if (result == null) result = caseEModelPatchEntry(eAttributeEntry);
+ if (result == null) result = caseEModelPatchElement(eAttributeEntry);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case EModelPatchPackage.EMODEL_PATCH_ELEMENT: {
+ EModelPatchElement eModelPatchElement = (EModelPatchElement)theEObject;
+ T result = caseEModelPatchElement(eModelPatchElement);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ default: return defaultCase(theEObject);
+ }
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>EModel Patch</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>EModel Patch</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseEModelPatch(EModelPatch object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>Metadata</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>Metadata</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseEModelPatchMetadata(EModelPatchMetadata object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>Entry</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>Entry</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseEModelPatchEntry(EModelPatchEntry object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>EIdentifiable</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>EIdentifiable</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseEIdentifiable(EIdentifiable object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>EElement Entry</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>EElement Entry</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseEElementEntry(EElementEntry object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>EMF Metadata</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>EMF Metadata</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseEModelPatchEMFMetadata(EModelPatchEMFMetadata object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>EStructural Feature Entry</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>EStructural Feature Entry</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseEStructuralFeatureEntry(EStructuralFeatureEntry object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>EReference Entry</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>EReference Entry</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseEReferenceEntry(EReferenceEntry object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>EAttribute Entry</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>EAttribute Entry</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseEAttributeEntry(EAttributeEntry object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>Element</em>'.
+ * <!-- begin-user-doc -->
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ * <!-- end-user-doc -->
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of '<em>Element</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseEModelPatchElement(EModelPatchElement object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.
+ * <!-- begin-user-doc -->
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch, but this is the last case anyway.
+ * <!-- end-user-doc -->
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of '<em>EObject</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject)
+ * @generated
+ */
+ @Override
+ public T defaultCase(EObject object) {
+ return null;
+ }
+
+} //EModelPatchSwitch
diff --git a/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/transform/EModelPatchToPOJO.xtend b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/transform/EModelPatchToPOJO.xtend
new file mode 100644
index 0000000..ad6114e
--- /dev/null
+++ b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/transform/EModelPatchToPOJO.xtend
@@ -0,0 +1,125 @@
+/*******************************************************************************
+ * 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:
+ * Abel Hegedus (IncQuery Labs Ltd.) - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.emf.diffmerge.patch.persistence.emf.transform
+
+import org.apache.log4j.Logger
+import org.eclipse.emf.diffmerge.patch.AbstractModelPatchEntry
+import org.eclipse.emf.diffmerge.patch.AttributeEntry
+import org.eclipse.emf.diffmerge.patch.ElementEntry
+import org.eclipse.emf.diffmerge.patch.ReferenceEntry
+import org.eclipse.emf.diffmerge.patch.StructuralFeatureEntry
+import org.eclipse.emf.diffmerge.patch.api.BaseModelPatchMetadata
+import org.eclipse.emf.diffmerge.patch.api.ChangeDirection
+import org.eclipse.emf.diffmerge.patch.api.Identifiable
+import org.eclipse.emf.diffmerge.patch.api.ModelPatch
+import org.eclipse.emf.diffmerge.patch.api.ModelPatchEntry
+import org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EAttributeEntry
+import org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EChangeDirection
+import org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EElementEntry
+import org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EIdentifiable
+import org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatch
+import org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchEMFMetadata
+import org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchEntry
+import org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchMetadata
+import org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EReferenceEntry
+import org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EStructuralFeatureEntry
+import org.eclipse.emf.diffmerge.patch.runtime.EMFModelPatchMetadata
+
+class EModelPatchToPOJO {
+
+ val EModelPatch source
+ val ModelPatch target
+ val Logger logger
+
+ new(EModelPatch source, ModelPatch target, Logger logger) {
+ this.source = source
+ this.target = target
+ this.logger = logger
+
+ }
+
+ def transform(){
+ source.metadata.transformElement
+
+ source.entries.filter(EModelPatchEntry).forEach[
+ it.transformElement
+ ]
+ }
+
+ protected def void transformElement(EModelPatchMetadata emetadata) {
+ val metadata = if(emetadata instanceof EModelPatchEMFMetadata
+ ){
+ new EMFModelPatchMetadata => [
+ modelUriList += emetadata.modelUris
+ usedNamespaceUris += emetadata.usedNamespaceUris
+ ]
+ } else {
+ new BaseModelPatchMetadata
+ }
+ metadata => [
+ author = emetadata.author
+ createdAt = emetadata.createdAt
+ description = emetadata.description
+ input = emetadata.input
+ ]
+ target.metadata = metadata
+ return
+ }
+
+ protected def void transformElement(EModelPatchEntry entry) {
+ val eentry = entry.transformEntry
+ target.entries.add(eentry)
+ return
+ }
+
+ protected def dispatch ModelPatchEntry transformEntry(EElementEntry entry) {
+ new ElementEntry => [
+ entry.transformAbstractEntryFeatures(it)
+ type = entry.type.toIdentifiable
+ ]
+ }
+
+ protected def dispatch ModelPatchEntry transformEntry(EAttributeEntry entry) {
+ new AttributeEntry => [
+ entry.transformStructuralFeatureEntryFeatures(it)
+ value = entry.value
+ ]
+ }
+
+ protected def dispatch ModelPatchEntry transformEntry(EReferenceEntry entry) {
+ new ReferenceEntry => [
+ entry.transformStructuralFeatureEntryFeatures(it)
+ target = entry.target.toIdentifiable
+ ]
+ }
+
+ protected def transformAbstractEntryFeatures(EModelPatchEntry eentry, AbstractModelPatchEntry entry) {
+ entry.direction = eentry.direction.transformDirection
+ entry.context = eentry.context.toIdentifiable
+ }
+
+ protected def transformStructuralFeatureEntryFeatures(EStructuralFeatureEntry eentry, StructuralFeatureEntry entry) {
+ eentry.transformAbstractEntryFeatures(entry)
+ entry.feature = eentry.feature.toIdentifiable
+ }
+
+ protected def toIdentifiable(EIdentifiable eidentifiable) {
+ new Identifiable(eidentifiable.targetIdentifier)
+ }
+
+ protected def transformDirection(EChangeDirection direction) {
+ return switch direction {
+ case ADD: ChangeDirection.ADD
+ case REMOVE: ChangeDirection.REMOVE
+ }
+ }
+
+}
diff --git a/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/transform/ModelPatchToEMF.xtend b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/transform/ModelPatchToEMF.xtend
new file mode 100644
index 0000000..ff2c00d
--- /dev/null
+++ b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/src/org/eclipse/emf/diffmerge/patch/persistence/emf/transform/ModelPatchToEMF.xtend
@@ -0,0 +1,181 @@
+/*******************************************************************************
+ * 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:
+ * Abel Hegedus (IncQuery Labs Ltd.) - initial API and implementation
+ *******************************************************************************/
+ package org.eclipse.emf.diffmerge.patch.persistence.emf.transform
+
+import java.util.List
+import org.apache.log4j.Logger
+import org.eclipse.emf.diffmerge.patch.AbstractModelPatchEntry
+import org.eclipse.emf.diffmerge.patch.AttributeEntry
+import org.eclipse.emf.diffmerge.patch.ElementEntry
+import org.eclipse.emf.diffmerge.patch.ReferenceEntry
+import org.eclipse.emf.diffmerge.patch.StructuralFeatureEntry
+import org.eclipse.emf.diffmerge.patch.api.ChangeDirection
+import org.eclipse.emf.diffmerge.patch.api.Identifiable
+import org.eclipse.emf.diffmerge.patch.api.ModelPatch
+import org.eclipse.emf.diffmerge.patch.api.ModelPatchMetadata
+import org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EChangeDirection
+import org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EIdentifiable
+import org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatch
+import org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchEntry
+import org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchFactory
+import org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchPackage
+import org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EStructuralFeatureEntry
+import org.eclipse.emf.diffmerge.patch.runtime.EMFModelPatchMetadata
+import org.eclipse.emf.ecore.EStructuralFeature
+import org.eclipse.viatra.query.runtime.base.api.BaseIndexOptions
+import org.eclipse.viatra.query.runtime.base.api.IndexingLevel
+import org.eclipse.viatra.query.runtime.base.api.NavigationHelper
+import org.eclipse.viatra.query.runtime.base.api.ViatraBaseFactory
+
+class ModelPatchToEMF {
+
+
+ extension val EModelPatchFactory factory = EModelPatchFactory.eINSTANCE
+ val targetIdentiferFeature = EModelPatchPackage::eINSTANCE.EIdentifiable_TargetIdentifier
+ val elementsFeature = EModelPatchPackage::eINSTANCE.EModelPatch_Elements
+ val typesFeature = EModelPatchPackage::eINSTANCE.EModelPatch_Types
+ val featuresFeature = EModelPatchPackage::eINSTANCE.EModelPatch_Features
+
+ val NavigationHelper indexer
+ val ModelPatch source
+ val EModelPatch target
+ val Logger logger
+ /**
+ * When true, the same targetIdentifier can appear in the elements, types and features lists.
+ *
+ * Note that duplicates in the same list are not allowed even if set to true.
+ */
+ val boolean allowDuplicateIdentifiables;
+
+ new(ModelPatch source, EModelPatch target, Logger logger, boolean allowDuplicateIdentifiables) {
+ this.source = source
+ this.target = target
+ this.allowDuplicateIdentifiables = allowDuplicateIdentifiables
+
+ this.logger = logger
+ indexer = ViatraBaseFactory.instance.createNavigationHelper(target, new BaseIndexOptions(false, IndexingLevel.NONE), logger)
+ indexer.registerEStructuralFeatures(#{targetIdentiferFeature}, IndexingLevel.FULL)
+
+ }
+
+ def transform(){
+ source.metadata.transformElement
+
+ source.entries.filter(AbstractModelPatchEntry).forEach[
+ it.transformElement
+ ]
+
+ indexer.dispose
+ }
+
+ protected def void transformElement(ModelPatchMetadata metadata) {
+ val emetadata = if (metadata instanceof EMFModelPatchMetadata) {
+ createEModelPatchEMFMetadata => [
+ modelUris += metadata.modelUriList
+ usedNamespaceUris += metadata.usedNamespaceUris
+ ]
+ } else {
+ createEModelPatchMetadata
+ }
+ emetadata => [
+ author = metadata.author
+ createdAt = metadata.createdAt
+ description = metadata.description
+ input = metadata.input
+ ]
+ target.metadata = emetadata
+ return
+ }
+
+ protected def void transformElement(AbstractModelPatchEntry entry) {
+ val eentry = entry.transformEntry
+ target.entries.add(eentry)
+ return
+ }
+
+ protected def dispatch EModelPatchEntry transformEntry(ElementEntry entry) {
+ createEElementEntry => [
+ entry.transformAbstractEntryFeatures(it)
+ type = entry.type.ensureEIdentifiable(typesFeature)
+ ]
+ }
+
+ protected def dispatch EModelPatchEntry transformEntry(AttributeEntry entry) {
+ createEAttributeEntry => [
+ entry.transformStructuralFeatureEntryFeatures(it)
+ value = entry.value
+ ]
+ }
+
+ protected def dispatch EModelPatchEntry transformEntry(ReferenceEntry entry) {
+ createEReferenceEntry => [
+ entry.transformStructuralFeatureEntryFeatures(it)
+ target = entry.target.ensureEIdentifiable(elementsFeature)
+ ]
+ }
+
+ protected def transformAbstractEntryFeatures(AbstractModelPatchEntry entry, EModelPatchEntry eentry) {
+ eentry.direction = entry.direction.transformDirection
+ eentry.context = entry.context.ensureEIdentifiable(elementsFeature)
+ }
+
+ protected def transformStructuralFeatureEntryFeatures(StructuralFeatureEntry entry, EStructuralFeatureEntry eentry) {
+ entry.transformAbstractEntryFeatures(eentry)
+ eentry.feature = entry.feature.ensureEIdentifiable(featuresFeature)
+ }
+
+ protected def transformDirection(ChangeDirection direction) {
+ return switch direction {
+ case ADD: EChangeDirection.ADD
+ case REMOVE: EChangeDirection.REMOVE
+ }
+ }
+
+ protected def ensureEIdentifiable(Identifiable identifiable, EStructuralFeature identifiableContainmentFeature) {
+ val identifier = identifiable.identifier
+ val allEIdentifiables = indexer.findByAttributeValue(identifier, targetIdentiferFeature).filter(EIdentifiable)
+
+ // no identifiable found, we have to create it
+ if (allEIdentifiables.empty) {
+ val eidentifable = identifiable.prepareEIdentifiable(identifiableContainmentFeature)
+ return eidentifable
+ }
+
+ // otherwise an identifiable with the given targetIdentifier already exists
+ val noOfIdentifiables = allEIdentifiables.size
+ val onlyGivenFeature = allEIdentifiables.filter[eContainmentFeature === identifiableContainmentFeature]
+ val noOfIdentifiablesInGivenFeature = onlyGivenFeature.size
+ if(noOfIdentifiablesInGivenFeature == 1 && noOfIdentifiables == 1){
+ // this is the only one and it is in the correct list
+ return onlyGivenFeature.head
+ }
+
+ if (allowDuplicateIdentifiables && onlyGivenFeature.empty) {
+ // although there is already another identifiable, it is in a different list
+ val eidentifable = identifiable.prepareEIdentifiable(identifiableContainmentFeature)
+ return eidentifable
+ }
+
+ // if we get here, there is a duplicate
+ throw new IllegalStateException(String.format("Duplicate identifiers found: %s", identifier))
+ }
+
+ protected def EIdentifiable prepareEIdentifiable(Identifiable identifiable, EStructuralFeature identifiableContainmentFeature) {
+ val eidentifable = createEIdentifiable => [
+ targetIdentifier = identifiable.identifier
+ description = identifiable.description
+ ]
+ val list = target.eGet(identifiableContainmentFeature) as List<EIdentifiable>
+ list.add(eidentifable)
+ eidentifable
+ }
+
+}
diff --git a/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/xtend-gen/.gitignore b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/xtend-gen/.gitignore
new file mode 100644
index 0000000..d6b7ef3
--- /dev/null
+++ b/plugins/org.eclipse.emf.diffmerge.patch.persistence.emf/xtend-gen/.gitignore
@@ -0,0 +1,2 @@
+*
+!.gitignore
diff --git a/plugins/org.eclipse.emf.diffmerge.patch.persistence.json/.classpath b/plugins/org.eclipse.emf.diffmerge.patch.persistence.json/.classpath
index 098194c..7445162 100644
--- a/plugins/org.eclipse.emf.diffmerge.patch.persistence.json/.classpath
+++ b/plugins/org.eclipse.emf.diffmerge.patch.persistence.json/.classpath
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
- <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
- <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
- <classpathentry kind="src" path="src"/>
- <classpathentry kind="output" path="bin"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
</classpath>
diff --git a/plugins/org.eclipse.emf.diffmerge.patch.persistence.json/pom.xml b/plugins/org.eclipse.emf.diffmerge.patch.persistence.json/pom.xml
index 47b5f8b..f277062 100644
--- a/plugins/org.eclipse.emf.diffmerge.patch.persistence.json/pom.xml
+++ b/plugins/org.eclipse.emf.diffmerge.patch.persistence.json/pom.xml
@@ -10,18 +10,18 @@
Abel Hegedus, Tamas Borbas, Peter Lunk, Daniel Segesdi (IncQuery Labs Ltd.) - initial API and implementation
-->
<project
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
- xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
- <modelVersion>4.0.0</modelVersion>
- <parent>
- <artifactId>org.eclipse.emf.diffmerge.patch.plugins</artifactId>
- <groupId>org.eclipse.emf.diffmerge.patch</groupId>
- <version>0.1.0-SNAPSHOT</version>
- </parent>
- <artifactId>org.eclipse.emf.diffmerge.patch.persistence.json</artifactId>
- <packaging>eclipse-plugin</packaging>
- <version>0.1.0-SNAPSHOT</version>
- <properties>
- <rootPath>${basedir}/../</rootPath>
- </properties>
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+ xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <artifactId>org.eclipse.emf.diffmerge.patch.plugins</artifactId>
+ <groupId>org.eclipse.emf.diffmerge.patch</groupId>
+ <version>0.1.0-SNAPSHOT</version>
+ </parent>
+ <artifactId>org.eclipse.emf.diffmerge.patch.persistence.json</artifactId>
+ <packaging>eclipse-plugin</packaging>
+ <version>0.1.0-SNAPSHOT</version>
+ <properties>
+ <rootPath>${basedir}/../</rootPath>
+ </properties>
</project>
diff --git a/plugins/org.eclipse.emf.diffmerge.patch.persistence.json/src/org/eclipse/emf/diffmerge/patch/serializer/gson/GsonModelPatchSerializer.java b/plugins/org.eclipse.emf.diffmerge.patch.persistence.json/src/org/eclipse/emf/diffmerge/patch/serializer/gson/GsonModelPatchSerializer.java
index a739a2f..6bf928a 100644
--- a/plugins/org.eclipse.emf.diffmerge.patch.persistence.json/src/org/eclipse/emf/diffmerge/patch/serializer/gson/GsonModelPatchSerializer.java
+++ b/plugins/org.eclipse.emf.diffmerge.patch.persistence.json/src/org/eclipse/emf/diffmerge/patch/serializer/gson/GsonModelPatchSerializer.java
@@ -10,28 +10,23 @@
*******************************************************************************/
package org.eclipse.emf.diffmerge.patch.serializer.gson;
-import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.nio.charset.StandardCharsets;
import org.eclipse.emf.diffmerge.patch.api.ModelPatch;
import org.eclipse.emf.diffmerge.patch.api.ModelPatchEntry;
import org.eclipse.emf.diffmerge.patch.api.ModelPatchException;
import org.eclipse.emf.diffmerge.patch.api.ModelPatchMetadata;
+import org.eclipse.emf.diffmerge.patch.persistence.ModelPatchPersister;
import org.eclipse.emf.diffmerge.patch.serializer.IModelPatchSerializer;
import org.eclipse.emf.diffmerge.patch.serializer.gson.typeadapters.AbstractSubclassAdapter;
-import com.google.common.base.Charsets;
-import com.google.common.io.CharStreams;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
-public class GsonModelPatchSerializer implements IModelPatchSerializer{
+public class GsonModelPatchSerializer implements IModelPatchSerializer, ModelPatchPersister<String>{
public static GsonModelPatchSerializer create(ClassLoader classLoader) {
GsonModelPatchSerializer gsonModelPatchSerializer = new GsonModelPatchSerializer();
@@ -61,11 +56,6 @@ public class GsonModelPatchSerializer implements IModelPatchSerializer{
}
@Override
- public InputStream serializeStream(ModelPatch modelPatch) throws ModelPatchException {
- return new ByteArrayInputStream(createGson().toJson(modelPatch).getBytes(StandardCharsets.UTF_8));
- }
-
- @Override
public ModelPatch load(File file) throws ModelPatchException {
try {
FileReader reader = new FileReader(file);
@@ -85,17 +75,6 @@ public class GsonModelPatchSerializer implements IModelPatchSerializer{
return createGson().fromJson(jsonSource, ModelPatch.class);
}
- @Override
- public ModelPatch load(InputStream jsonStream) throws ModelPatchException {
- String content = "";
- try {
- content = CharStreams.toString(new InputStreamReader(jsonStream, Charsets.UTF_8));
- } catch (IOException e) {
- throw new ModelPatchException("GSON deserialization failed, check if source has the correct JSON syntax", e);
- }
- return createGson().fromJson(content, ModelPatch.class);
- }
-
private Gson createGson(){
return new GsonBuilder()
.registerTypeAdapter(ModelPatchEntry.class, new AbstractSubclassAdapter<ModelPatchEntry>(classLoader))
@@ -104,6 +83,14 @@ public class GsonModelPatchSerializer implements IModelPatchSerializer{
.create();
}
+ @Override
+ public String persist(ModelPatch modelPatch) throws ModelPatchException {
+ return serialize(modelPatch);
+ }
+ @Override
+ public String getPreferredFileExtension() {
+ return "modelpatch";
+ }
}
diff --git a/plugins/org.eclipse.emf.diffmerge.patch.runtime/META-INF/MANIFEST.MF b/plugins/org.eclipse.emf.diffmerge.patch.runtime/META-INF/MANIFEST.MF
index 6db8dbb..040b244 100644
--- a/plugins/org.eclipse.emf.diffmerge.patch.runtime/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.emf.diffmerge.patch.runtime/META-INF/MANIFEST.MF
@@ -5,13 +5,12 @@ Bundle-SymbolicName: org.eclipse.emf.diffmerge.patch.runtime
Bundle-Version: 0.1.0.qualifier
Bundle-Vendor: %providerName
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
-Require-Bundle: org.eclipse.emf.diffmerge.patch;bundle-version="[0.1.0,0.2.0)",
+Require-Bundle: org.eclipse.emf.diffmerge;bundle-version="[0.7.0,0.8.0)",
+ org.eclipse.emf.diffmerge.patch;bundle-version="[0.1.0,0.2.0)",
org.eclipse.emf.ecore;bundle-version="2.10.2",
+ org.eclipse.emf.edit;bundle-version="2.11.0",
com.google.guava;bundle-version="15.0.0",
org.eclipse.xtend.lib,
- org.eclipse.emf.diffmerge;bundle-version="[0.7.0,0.8.0)",
- org.eclipse.emf.ecore.change;bundle-version="2.11.0",
- org.eclipse.emf.edit;bundle-version="2.11.1",
org.eclipse.viatra.transformation.runtime.emf;bundle-version="[1.4.0,2.0.0)",
org.eclipse.viatra.query.runtime;bundle-version="[1.4.0,2.0.0)",
org.eclipse.viatra.query.runtime.base;bundle-version="[1.4.0,2.0.0)"
diff --git a/plugins/org.eclipse.emf.diffmerge.patch.runtime/src/org/eclipse/emf/diffmerge/patch/runtime/identifier/EMFIdentifierProvider.java b/plugins/org.eclipse.emf.diffmerge.patch.runtime/src/org/eclipse/emf/diffmerge/patch/runtime/identifier/EMFIdentifierProvider.java
index 64e226a..06b5597 100644
--- a/plugins/org.eclipse.emf.diffmerge.patch.runtime/src/org/eclipse/emf/diffmerge/patch/runtime/identifier/EMFIdentifierProvider.java
+++ b/plugins/org.eclipse.emf.diffmerge.patch.runtime/src/org/eclipse/emf/diffmerge/patch/runtime/identifier/EMFIdentifierProvider.java
@@ -31,8 +31,9 @@ public class EMFIdentifierProvider {
public String identifyEObject(EObject eObject) {
String identifier = null;
- if(eObjectIdentifierProvider != null){
- identifier = eObjectIdentifierProvider.identify(eObject);
+ EObjectIdentifierProvider provider = getEObjectIdentifierProvider();
+ if(provider != null){
+ identifier = provider.identify(eObject);
}
return identifier;
}
diff --git a/plugins/org.eclipse.emf.diffmerge.patch.runtime/src/org/eclipse/emf/diffmerge/patch/runtime/identifier/IdentifiedEMFObjectLocator.java b/plugins/org.eclipse.emf.diffmerge.patch.runtime/src/org/eclipse/emf/diffmerge/patch/runtime/identifier/IdentifiedEMFObjectLocator.java
index 7b56cf9..8ed10ea 100644
--- a/plugins/org.eclipse.emf.diffmerge.patch.runtime/src/org/eclipse/emf/diffmerge/patch/runtime/identifier/IdentifiedEMFObjectLocator.java
+++ b/plugins/org.eclipse.emf.diffmerge.patch.runtime/src/org/eclipse/emf/diffmerge/patch/runtime/identifier/IdentifiedEMFObjectLocator.java
@@ -43,8 +43,9 @@ public class IdentifiedEMFObjectLocator {
public Optional<EObject> locateEObject(String identifier) {
checkNotNullIdentifier(identifier);
Optional<EObject> locate = Optional.absent();
- if(eObjectLocator != null) {
- locate = eObjectLocator.locate(identifier);
+ EObjectLocator locator = getEObjectLocator();
+ if(locator != null) {
+ locate = locator.locate(identifier);
}
return locate;
}
diff --git a/plugins/org.eclipse.emf.diffmerge.patch.runtime/src/org/eclipse/emf/diffmerge/patch/runtime/modelaccess/ModelAccessProvider.xtend b/plugins/org.eclipse.emf.diffmerge.patch.runtime/src/org/eclipse/emf/diffmerge/patch/runtime/modelaccess/ModelAccessProvider.xtend
index 5cc64d8..baf01d3 100644
--- a/plugins/org.eclipse.emf.diffmerge.patch.runtime/src/org/eclipse/emf/diffmerge/patch/runtime/modelaccess/ModelAccessProvider.xtend
+++ b/plugins/org.eclipse.emf.diffmerge.patch.runtime/src/org/eclipse/emf/diffmerge/patch/runtime/modelaccess/ModelAccessProvider.xtend
@@ -22,6 +22,10 @@ public class ModelAccessProvider {
public def EMFModelAccess getSelectedModelAccess(String pref, ResourceSet resourceSet){
val accessType = ModelAccessTypes.valueOf(pref)
+ return accessType.getSelectedModelAccess(resourceSet)
+ }
+
+ public def EMFModelAccess getSelectedModelAccess(ModelAccessTypes accessType, ResourceSet resourceSet){
var EMFModelAccess access
switch (accessType) {
case EMF_REFLECTIVE: {
@@ -33,7 +37,7 @@ public class ModelAccessProvider {
val engine = ViatraQueryEngine.on(scope)
val domain = AdapterFactoryEditingDomain.getEditingDomainFor(resourceSet)
- if(domain != null){
+ if(domain !== null){
val viatraModelManipulator = new ModelManipulationWithEditingDomain(engine, domain)
access = new ViatraModelAccess(viatraModelManipulator, temporaryResource)
}else{
diff --git a/plugins/org.eclipse.emf.diffmerge.patch.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.emf.diffmerge.patch.ui/META-INF/MANIFEST.MF
index 50534d0..e993079 100644
--- a/plugins/org.eclipse.emf.diffmerge.patch.ui/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.emf.diffmerge.patch.ui/META-INF/MANIFEST.MF
@@ -20,12 +20,13 @@ Require-Bundle: org.eclipse.emf.common.ui;bundle-version="2.10.0",
org.eclipse.ui.ide,
org.eclipse.emf.diffmerge.ui;bundle-version="[0.7.0,0.8.0)",
org.eclipse.viatra.query.runtime.base;bundle-version="[1.4.0,2.0.0)",
- org.eclipse.emf.diffmerge.patch.persistence.json;bundle-version="0.1.0"
+ org.eclipse.emf.diffmerge.patch.persistence.json;bundle-version="[0.1.0,0.2.0)",
+ org.eclipse.emf.diffmerge.patch.persistence.emf;bundle-version="[0.1.0,0.2.0)"
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Export-Package: org.eclipse.emf.diffmerge.patch.ui.dialogs,
org.eclipse.emf.diffmerge.patch.ui.preferences,
org.eclipse.emf.diffmerge.patch.ui.utils
Bundle-ActivationPolicy: lazy
-Bundle-Activator: org.eclipse.emf.diffmerge.patch.ui.Activator
+Bundle-Activator: org.eclipse.emf.diffmerge.patch.ui.ModelPatchUIPlugin
Import-Package: org.apache.log4j;version="1.2.0"
diff --git a/plugins/org.eclipse.emf.diffmerge.patch.ui/plugin.xml b/plugins/org.eclipse.emf.diffmerge.patch.ui/plugin.xml
index 8855797..e47e20a 100644
--- a/plugins/org.eclipse.emf.diffmerge.patch.ui/plugin.xml
+++ b/plugins/org.eclipse.emf.diffmerge.patch.ui/plugin.xml
@@ -24,7 +24,7 @@
point="org.eclipse.ui.editors">
<editor
class="org.eclipse.emf.diffmerge.patch.ui.editors.ModelPatchEditorPart"
- extensions="modelpatch"
+ extensions="modelpatch, emodelpatch"
id="org.eclipse.emf.diffmerge.patch.ui.editors.ModelPatchEditorPart"
name="ModelPatch Editor">
</editor>
diff --git a/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/Activator.java b/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/Activator.java
deleted file mode 100644
index 942f498..0000000
--- a/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/Activator.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2016-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:
- * Abel Hegedus, Tamas Borbas, Balazs Grill, Peter Lunk, Daniel Segesdi (IncQuery Labs Ltd.) - initial API and implementation
- *******************************************************************************/
-package org.eclipse.emf.diffmerge.patch.ui;
-
-import org.eclipse.ui.plugin.AbstractUIPlugin;
-import org.osgi.framework.BundleContext;
-
-
-public class Activator extends AbstractUIPlugin {
-
- // The plug-in ID
- public static final String PLUGIN_ID = "org.eclipse.emf.diffmerge.patch.gui"; //$NON-NLS-1$
-
- // The shared instance
- private static Activator plugin;
-
- /**
- * The constructor
- */
- public Activator() {
- }
-
- /*
- * (non-Javadoc)
- * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
- */
- public void start(BundleContext context) throws Exception {
- super.start(context);
- plugin = this;
- }
-
- /*
- * (non-Javadoc)
- * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
- */
- public void stop(BundleContext context) throws Exception {
- plugin = null;
- super.stop(context);
- }
-
- /**
- * Returns the shared instance
- *
- * @return the shared instance
- */
- public static Activator getDefault() {
- return plugin;
- }
-
-}
diff --git a/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/ModelPatchUIPlugin.java b/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/ModelPatchUIPlugin.java
new file mode 100644
index 0000000..4ad44f8
--- /dev/null
+++ b/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/ModelPatchUIPlugin.java
@@ -0,0 +1,61 @@
+/*******************************************************************************
+ * Copyright (c) 2016-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:
+ * Abel Hegedus, Tamas Borbas, Balazs Grill, Peter Lunk, Daniel Segesdi (IncQuery Labs Ltd.) - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.emf.diffmerge.patch.ui;
+
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+public class ModelPatchUIPlugin extends AbstractUIPlugin {
+
+ // The plug-in ID
+ public static final String PLUGIN_ID = "org.eclipse.emf.diffmerge.patch.ui"; //$NON-NLS-1$
+
+ // The shared instance
+ private static ModelPatchUIPlugin plugin;
+
+ /**
+ * The constructor
+ */
+ public ModelPatchUIPlugin() {
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.
+ * BundleContext)
+ */
+ public void start(BundleContext context) throws Exception {
+ super.start(context);
+ plugin = this;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.
+ * BundleContext)
+ */
+ public void stop(BundleContext context) throws Exception {
+ plugin = null;
+ super.stop(context);
+ }
+
+ /**
+ * Returns the shared instance
+ *
+ * @return the shared instance
+ */
+ public static ModelPatchUIPlugin getDefault() {
+ return plugin;
+ }
+
+}
diff --git a/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/dialogs/ModelpatchEntryFilterCreationDialog.java b/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/dialogs/ModelpatchEntryFilterCreationDialog.java
index 3ace2a0..fcdc117 100644
--- a/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/dialogs/ModelpatchEntryFilterCreationDialog.java
+++ b/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/dialogs/ModelpatchEntryFilterCreationDialog.java
@@ -39,235 +39,243 @@ import org.eclipse.emf.diffmerge.patch.api.filters.EntryDirectionFilter;
import org.eclipse.emf.diffmerge.patch.api.filters.EntryTypeFilter;
public class ModelpatchEntryFilterCreationDialog extends Dialog {
- @SuppressWarnings("unused")
- private DataBindingContext m_bindingContext;
- IModelPatchEntryFilter filter = null;
- private Label lblDirection;
- private Label lblFilterType;
- private Label lblEntryType;
- private Combo cFilterType;
- private ModelpatchEntryFilterType filterType = ModelpatchEntryFilterType.Direction;
- private boolean add = true;
- private boolean remove = false;
- private boolean attribute = true;
- private boolean element = false;
- private boolean reference = false;
- /**
- * Create the dialog.
- * @param parentShell
- */
- public ModelpatchEntryFilterCreationDialog(Shell parentShell) {
- super(parentShell);
- setShellStyle(SWT.TITLE | SWT.APPLICATION_MODAL);
- }
- private String title;
+ @SuppressWarnings("unused")
+ private DataBindingContext m_bindingContext;
+ IModelPatchEntryFilter filter = null;
+ private Label lblDirection;
+ private Label lblFilterType;
+ private Label lblEntryType;
+ private Combo cFilterType;
+ private ModelpatchEntryFilterType filterType = ModelpatchEntryFilterType.Direction;
+ private boolean add = true;
+ private boolean remove = false;
+ private boolean attribute = true;
+ private boolean element = false;
+ private boolean reference = false;
- public void setTitle(String title) {
- this.title = title;
- if(getShell()==null) {
- configureShell(createShell());
- } else {
- getShell().setText(title);
- }
- }
+ /**
+ * Create the dialog.
+ *
+ * @param parentShell
+ */
+ public ModelpatchEntryFilterCreationDialog(Shell parentShell) {
+ super(parentShell);
+ setShellStyle(SWT.TITLE | SWT.APPLICATION_MODAL);
+ }
- @Override
- protected void configureShell(Shell shell) {
- super.configureShell(shell);
- shell.setText(title);
+ private String title;
+
+ public void setTitle(String title) {
+ this.title = title;
+ if (getShell() == null) {
+ configureShell(createShell());
+ } else {
+ getShell().setText(title);
}
+ }
- /**
- * Create contents of the dialog.
- * @param parent
- */
- @Override
- protected Control createDialogArea(Composite parent) {
- Composite container = (Composite) super.createDialogArea(parent);
- GridLayout gridLayout = (GridLayout) container.getLayout();
- gridLayout.numColumns = 2;
+ @Override
+ protected void configureShell(Shell shell) {
+ super.configureShell(shell);
+ shell.setText(title);
+ }
- lblFilterType = new Label(container, SWT.NONE);
- GridData gd_lblFilterType = new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1);
- gd_lblFilterType.widthHint = 55;
- lblFilterType.setLayoutData(gd_lblFilterType);
- lblFilterType.setText("Filter type:");
+ /**
+ * Create contents of the dialog.
+ *
+ * @param parent
+ */
+ @Override
+ protected Control createDialogArea(Composite parent) {
+ Composite container = (Composite) super.createDialogArea(parent);
+ GridLayout gridLayout = (GridLayout) container.getLayout();
+ gridLayout.numColumns = 2;
- ComboViewer cvFilterType = new ComboViewer(container, SWT.READ_ONLY);
- cvFilterType.setContentProvider(new ArrayContentProvider());
- cvFilterType.setInput(ModelpatchEntryFilterType.values());
- cFilterType = cvFilterType.getCombo();
- cFilterType.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
- cFilterType.select(0);
+ lblFilterType = new Label(container, SWT.NONE);
+ GridData gd_lblFilterType = new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1);
+ gd_lblFilterType.widthHint = 55;
+ lblFilterType.setLayoutData(gd_lblFilterType);
+ lblFilterType.setText("Filter type:");
- final Composite composite = new Composite(container, SWT.NONE);
- final StackLayout stack = new StackLayout();
- composite.setLayout(stack);
- composite.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, true, 2, 1));
+ ComboViewer cvFilterType = new ComboViewer(container, SWT.READ_ONLY);
+ cvFilterType.setContentProvider(new ArrayContentProvider());
+ cvFilterType.setInput(ModelpatchEntryFilterType.values());
+ cFilterType = cvFilterType.getCombo();
+ cFilterType.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+ cFilterType.select(0);
- final Composite cmpNothing = new Composite(composite, SWT.NONE);
- cmpNothing.setLayout(new FillLayout(SWT.HORIZONTAL));
+ final Composite composite = new Composite(container, SWT.NONE);
+ final StackLayout stack = new StackLayout();
+ composite.setLayout(stack);
+ composite.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, true, 2, 1));
- final Composite grpDirectionFilter = new Composite(composite, SWT.NONE);
- GridLayout gl_grpDirectionFilter = new GridLayout(3, false);
- gl_grpDirectionFilter.marginWidth = 0;
- gl_grpDirectionFilter.marginHeight = 0;
- grpDirectionFilter.setLayout(gl_grpDirectionFilter);
+ final Composite cmpNothing = new Composite(composite, SWT.NONE);
+ cmpNothing.setLayout(new FillLayout(SWT.HORIZONTAL));
- lblDirection = new Label(grpDirectionFilter, SWT.NONE);
- GridData gd_lblDirection = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1);
- gd_lblDirection.widthHint = 55;
- lblDirection.setLayoutData(gd_lblDirection);
- lblDirection.setText("Direction:");
+ final Composite grpDirectionFilter = new Composite(composite, SWT.NONE);
+ GridLayout gl_grpDirectionFilter = new GridLayout(3, false);
+ gl_grpDirectionFilter.marginWidth = 0;
+ gl_grpDirectionFilter.marginHeight = 0;
+ grpDirectionFilter.setLayout(gl_grpDirectionFilter);
- Button btnAdd = new Button(grpDirectionFilter, SWT.RADIO);
- btnAdd.addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(SelectionEvent e) {
- add = ((Button)e.widget).getSelection();
- }
- });
- btnAdd.setSelection(true);
- btnAdd.setText("ADD");
+ lblDirection = new Label(grpDirectionFilter, SWT.NONE);
+ GridData gd_lblDirection = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1);
+ gd_lblDirection.widthHint = 55;
+ lblDirection.setLayoutData(gd_lblDirection);
+ lblDirection.setText("Direction:");
- Button btnRemove = new Button(grpDirectionFilter, SWT.RADIO);
- btnRemove.addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(SelectionEvent e) {
- remove = ((Button)e.widget).getSelection();
- }
- });
- btnRemove.setText("REMOVE");
+ Button btnAdd = new Button(grpDirectionFilter, SWT.RADIO);
+ btnAdd.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ add = ((Button) e.widget).getSelection();
+ }
+ });
+ btnAdd.setSelection(true);
+ btnAdd.setText("ADD");
- final Composite grpEntryTypeFilter = new Composite(composite, SWT.NONE);
- GridLayout gl_grpEntryTypeFilter = new GridLayout(4, false);
- gl_grpEntryTypeFilter.marginHeight = 0;
- gl_grpEntryTypeFilter.marginWidth = 0;
- grpEntryTypeFilter.setLayout(gl_grpEntryTypeFilter);
+ Button btnRemove = new Button(grpDirectionFilter, SWT.RADIO);
+ btnRemove.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ remove = ((Button) e.widget).getSelection();
+ }
+ });
+ btnRemove.setText("REMOVE");
- lblEntryType = new Label(grpEntryTypeFilter, SWT.NONE);
- GridData gd_lblEntryType = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1);
- gd_lblEntryType.widthHint = 55;
- lblEntryType.setLayoutData(gd_lblEntryType);
- lblEntryType.setText("Entry type:");
+ final Composite grpEntryTypeFilter = new Composite(composite, SWT.NONE);
+ GridLayout gl_grpEntryTypeFilter = new GridLayout(4, false);
+ gl_grpEntryTypeFilter.marginHeight = 0;
+ gl_grpEntryTypeFilter.marginWidth = 0;
+ grpEntryTypeFilter.setLayout(gl_grpEntryTypeFilter);
- Button btnAttribute = new Button(grpEntryTypeFilter, SWT.RADIO);
- btnAttribute.addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(SelectionEvent e) {
- attribute = ((Button)e.widget).getSelection();
- }
- });
- btnAttribute.setSelection(true);
- btnAttribute.setText("Attribute");
+ lblEntryType = new Label(grpEntryTypeFilter, SWT.NONE);
+ GridData gd_lblEntryType = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1);
+ gd_lblEntryType.widthHint = 55;
+ lblEntryType.setLayoutData(gd_lblEntryType);
+ lblEntryType.setText("Entry type:");
- Button btnElement = new Button(grpEntryTypeFilter, SWT.RADIO);
- btnElement.addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(SelectionEvent e) {
- element = ((Button)e.widget).getSelection();
- }
- });
- btnElement.setText("Element");
+ Button btnAttribute = new Button(grpEntryTypeFilter, SWT.RADIO);
+ btnAttribute.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ attribute = ((Button) e.widget).getSelection();
+ }
+ });
+ btnAttribute.setSelection(true);
+ btnAttribute.setText("Attribute");
- Button btnReference = new Button(grpEntryTypeFilter, SWT.RADIO);
- btnReference.addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(SelectionEvent e) {
- reference = ((Button)e.widget).getSelection();
- }
- });
- btnReference.setText("Reference");
+ Button btnElement = new Button(grpEntryTypeFilter, SWT.RADIO);
+ btnElement.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ element = ((Button) e.widget).getSelection();
+ }
+ });
+ btnElement.setText("Element");
- stack.topControl = grpDirectionFilter;
+ Button btnReference = new Button(grpEntryTypeFilter, SWT.RADIO);
+ btnReference.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ reference = ((Button) e.widget).getSelection();
+ }
+ });
+ btnReference.setText("Reference");
- cFilterType.addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(SelectionEvent e) {
- filterType = getSelectedFilterType();
- switch(filterType) {
- case Direction:
- stack.topControl = grpDirectionFilter;
- break;
- case EntryType:
- stack.topControl = grpEntryTypeFilter;
- break;
- default:
- stack.topControl = cmpNothing;
- break;
- }
- composite.layout();
- }
+ stack.topControl = grpDirectionFilter;
- });
+ cFilterType.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ filterType = getSelectedFilterType();
+ switch (filterType) {
+ case Direction:
+ stack.topControl = grpDirectionFilter;
+ break;
+ case EntryType:
+ stack.topControl = grpEntryTypeFilter;
+ break;
+ default:
+ stack.topControl = cmpNothing;
+ break;
+ }
+ composite.layout();
+ }
- return container;
- }
+ });
- /**
- * Create contents of the button bar.
- * @param parent
- */
- @Override
- protected void createButtonsForButtonBar(Composite parent) {
- Button btnOK = createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true);
- btnOK.addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(SelectionEvent e) {
- switch(filterType) {
- case Direction:
- if(add) {
- filter = new EntryDirectionFilter(ChangeDirection.ADD);
- } else if (remove) {
- filter = new EntryDirectionFilter(ChangeDirection.REMOVE);
- }
- break;
- case EntryType:
- if(attribute) {
- filter = new EntryTypeFilter(EntryType.ATTRIBUTE);
- } else if(element) {
- filter = new EntryTypeFilter(EntryType.ELEMENT);
- } else if(reference) {
- filter = new EntryTypeFilter(EntryType.REFERENCE);
- }
- break;
- default:
- break;
- }
- }
- });
- createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false);
- m_bindingContext = initDataBindings();
- }
+ return container;
+ }
- /**
- * Return the initial size of the dialog.
- */
- @Override
- protected Point getInitialSize() {
- return new Point(310, 160);
- }
+ /**
+ * Create contents of the button bar.
+ *
+ * @param parent
+ */
+ @Override
+ protected void createButtonsForButtonBar(Composite parent) {
+ Button btnOK = createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true);
+ btnOK.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ switch (filterType) {
+ case Direction:
+ if (add) {
+ filter = new EntryDirectionFilter(ChangeDirection.ADD);
+ } else if (remove) {
+ filter = new EntryDirectionFilter(ChangeDirection.REMOVE);
+ }
+ break;
+ case EntryType:
+ if (attribute) {
+ filter = new EntryTypeFilter(EntryType.ATTRIBUTE);
+ } else if (element) {
+ filter = new EntryTypeFilter(EntryType.ELEMENT);
+ } else if (reference) {
+ filter = new EntryTypeFilter(EntryType.REFERENCE);
+ }
+ break;
+ default:
+ break;
+ }
+ }
+ });
+ createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false);
+ m_bindingContext = initDataBindings();
+ }
- public IModelPatchEntryFilter getCreatedFilter() {
- return filter;
- }
- enum ModelpatchEntryFilterType {
- Direction, EntryType
- }
- private ModelpatchEntryFilterType getSelectedFilterType() {
- return ModelpatchEntryFilterType.valueOf(cFilterType.getItem(cFilterType.getSelectionIndex()));
- }
- protected DataBindingContext initDataBindings() {
- DataBindingContext bindingContext = new DataBindingContext();
- //
- IObservableValue observeSizeLblDirectionObserveWidget = WidgetProperties.size().observe(lblDirection);
- IObservableValue observeSizeLblFilterTypeObserveWidget = WidgetProperties.size().observe(lblFilterType);
- bindingContext.bindValue(observeSizeLblDirectionObserveWidget, observeSizeLblFilterTypeObserveWidget, null, null);
- //
- IObservableValue observeSizeLblEntryTypeObserveWidget = WidgetProperties.size().observe(lblEntryType);
- IObservableValue observeSizeLblFilterTypeObserveWidget_1 = WidgetProperties.size().observe(lblFilterType);
- bindingContext.bindValue(observeSizeLblEntryTypeObserveWidget, observeSizeLblFilterTypeObserveWidget_1, null, null);
- //
- return bindingContext;
- }
+ /**
+ * Return the initial size of the dialog.
+ */
+ @Override
+ protected Point getInitialSize() {
+ return new Point(310, 160);
+ }
+
+ public IModelPatchEntryFilter getCreatedFilter() {
+ return filter;
+ }
+
+ enum ModelpatchEntryFilterType {
+ Direction, EntryType
+ }
+
+ private ModelpatchEntryFilterType getSelectedFilterType() {
+ return ModelpatchEntryFilterType.valueOf(cFilterType.getItem(cFilterType.getSelectionIndex()));
+ }
+
+ protected DataBindingContext initDataBindings() {
+ DataBindingContext bindingContext = new DataBindingContext();
+ //
+ IObservableValue observeSizeLblDirectionObserveWidget = WidgetProperties.size().observe(lblDirection);
+ IObservableValue observeSizeLblFilterTypeObserveWidget = WidgetProperties.size().observe(lblFilterType);
+ bindingContext.bindValue(observeSizeLblDirectionObserveWidget, observeSizeLblFilterTypeObserveWidget, null, null);
+ //
+ IObservableValue observeSizeLblEntryTypeObserveWidget = WidgetProperties.size().observe(lblEntryType);
+ IObservableValue observeSizeLblFilterTypeObserveWidget_1 = WidgetProperties.size().observe(lblFilterType);
+ bindingContext.bindValue(observeSizeLblEntryTypeObserveWidget, observeSizeLblFilterTypeObserveWidget_1, null, null);
+ //
+ return bindingContext;
+ }
}
diff --git a/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/dialogs/ModelpatchViewerDialog.java b/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/dialogs/ModelpatchViewerDialog.java
index 7484736..5270872 100644
--- a/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/dialogs/ModelpatchViewerDialog.java
+++ b/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/dialogs/ModelpatchViewerDialog.java
@@ -30,101 +30,104 @@ import org.eclipse.swt.widgets.Tree;
import org.eclipse.wb.swt.SWTResourceManager;
public class ModelpatchViewerDialog extends Dialog {
- private ModelPatch patch;
- private String path;
- private TreeViewer tvParsedPatch;
-
- /**
- * Create the dialog.
- * @param parentShell
- */
- public ModelpatchViewerDialog(Shell parentShell, ModelPatch patch, String path) {
- super(parentShell);
- setShellStyle(SWT.RESIZE | SWT.TITLE | SWT.APPLICATION_MODAL);
- this.patch = patch;
- this.path = path;
- }
-
- private String title;
- private Text txtPath;
-
- public void setTitle(String title) {
- this.title = title;
- if(getShell()==null) {
- configureShell(createShell());
- } else {
- getShell().setText(title);
- }
- }
-
- @Override
- protected void configureShell(Shell shell) {
- super.configureShell(shell);
- shell.setText(title);
- }
-
- /**
- * Create contents of the dialog.
- * @param parent
- */
- @Override
- protected Control createDialogArea(Composite parent) {
- getShell().setMinimumSize(getInitialSize());
- Composite container = (Composite) super.createDialogArea(parent);
-
- Composite composite = new Composite(container, SWT.NONE);
- composite.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
- GridLayout gl_composite = new GridLayout(2, false);
- gl_composite.marginHeight = 0;
- gl_composite.marginWidth = 0;
- composite.setLayout(gl_composite);
-
- Label lblPath = new Label(composite, SWT.WRAP);
- lblPath.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
- lblPath.setSize(92, 15);
- lblPath.setText("Path: ");
-
- txtPath = new Text(composite, SWT.BORDER);
- txtPath.setEditable(false);
- txtPath.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
- txtPath.setText(path);
-
- Label lblEntries = new Label(container, SWT.NONE);
- lblEntries.setFont(SWTResourceManager.getFont("Segoe UI", 14, SWT.BOLD));
- lblEntries.setText("Entries:");
-
- tvParsedPatch = new TreeViewer(container, SWT.BORDER);
- Tree treeParsedPatch = tvParsedPatch.getTree();
- treeParsedPatch.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
- treeParsedPatch.setVisible(true);
- tvParsedPatch.setContentProvider(new ModelPatchContentProvider());
- tvParsedPatch.setLabelProvider(new ModelPatchLabelProvider(new DescriptiveEntryLabelProvider()));
- tvParsedPatch.setInput(patch);
-
- return container;
- }
-
- /**
- * Create contents of the button bar.
- * @param parent
- */
- @Override
- protected void createButtonsForButtonBar(Composite parent) {
- createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true);
- }
-
- /**
- * Return the initial size of the dialog.
- */
- @Override
- protected Point getInitialSize() {
- return new Point(450, 300);
- }
-
- @Override
- public boolean close() {
- SWTResourceManager.dispose();
- return super.close();
+ private ModelPatch patch;
+ private String path;
+ private TreeViewer tvParsedPatch;
+
+ /**
+ * Create the dialog.
+ *
+ * @param parentShell
+ */
+ public ModelpatchViewerDialog(Shell parentShell, ModelPatch patch, String path) {
+ super(parentShell);
+ setShellStyle(SWT.RESIZE | SWT.TITLE | SWT.APPLICATION_MODAL);
+ this.patch = patch;
+ this.path = path;
+ }
+
+ private String title;
+ private Text txtPath;
+
+ public void setTitle(String title) {
+ this.title = title;
+ if (getShell() == null) {
+ configureShell(createShell());
+ } else {
+ getShell().setText(title);
}
+ }
+
+ @Override
+ protected void configureShell(Shell shell) {
+ super.configureShell(shell);
+ shell.setText(title);
+ }
+
+ /**
+ * Create contents of the dialog.
+ *
+ * @param parent
+ */
+ @Override
+ protected Control createDialogArea(Composite parent) {
+ getShell().setMinimumSize(getInitialSize());
+ Composite container = (Composite) super.createDialogArea(parent);
+
+ Composite composite = new Composite(container, SWT.NONE);
+ composite.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+ GridLayout gl_composite = new GridLayout(2, false);
+ gl_composite.marginHeight = 0;
+ gl_composite.marginWidth = 0;
+ composite.setLayout(gl_composite);
+
+ Label lblPath = new Label(composite, SWT.WRAP);
+ lblPath.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
+ lblPath.setSize(92, 15);
+ lblPath.setText("Path: ");
+
+ txtPath = new Text(composite, SWT.BORDER);
+ txtPath.setEditable(false);
+ txtPath.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+ txtPath.setText(path);
+
+ Label lblEntries = new Label(container, SWT.NONE);
+ lblEntries.setFont(SWTResourceManager.getFont("Segoe UI", 14, SWT.BOLD));
+ lblEntries.setText("Entries:");
+
+ tvParsedPatch = new TreeViewer(container, SWT.BORDER);
+ Tree treeParsedPatch = tvParsedPatch.getTree();
+ treeParsedPatch.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
+ treeParsedPatch.setVisible(true);
+ tvParsedPatch.setContentProvider(new ModelPatchContentProvider());
+ tvParsedPatch.setLabelProvider(new ModelPatchLabelProvider(new DescriptiveEntryLabelProvider()));
+ tvParsedPatch.setInput(patch);
+
+ return container;
+ }
+
+ /**
+ * Create contents of the button bar.
+ *
+ * @param parent
+ */
+ @Override
+ protected void createButtonsForButtonBar(Composite parent) {
+ createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true);
+ }
+
+ /**
+ * Return the initial size of the dialog.
+ */
+ @Override
+ protected Point getInitialSize() {
+ return new Point(450, 300);
+ }
+
+ @Override
+ public boolean close() {
+ SWTResourceManager.dispose();
+ return super.close();
+ }
}
diff --git a/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/editors/ModelPatchEditorPart.java b/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/editors/ModelPatchEditorPart.java
index ca0b0f1..ccf07b1 100644
--- a/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/editors/ModelPatchEditorPart.java
+++ b/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/editors/ModelPatchEditorPart.java
@@ -21,6 +21,7 @@ import org.eclipse.emf.diffmerge.patch.api.ModelPatch;
import org.eclipse.emf.diffmerge.patch.api.ModelPatchException;
import org.eclipse.emf.diffmerge.patch.api.ModelPatchFilterApplier;
import org.eclipse.emf.diffmerge.patch.api.ModelPatchReverser;
+import org.eclipse.emf.diffmerge.patch.serializer.IModelPatchSerializer;
import org.eclipse.emf.diffmerge.patch.ui.dialogs.ModelpatchEntryFilterCreationDialog;
import org.eclipse.emf.diffmerge.patch.ui.preferences.ModelPatchPreferenceProvider;
import org.eclipse.emf.diffmerge.patch.ui.utils.DescriptiveEntryLabelProvider;
@@ -52,212 +53,229 @@ import org.eclipse.ui.part.FileEditorInput;
public class ModelPatchEditorPart extends EditorPart {
private SerializerProvider serializerProvider = new SerializerProvider();
- private ModelPatchFilterApplier filterApplier = new ModelPatchFilterApplier();
- private IFile file;
- public ModelPatch originalModelPatch;
- public ModelPatch modifiedModelPatch;
- public java.util.List<IModelPatchEntryFilter> filters = new ArrayList<>();
- public DialogFactory dialFactory;
+ private ModelPatchFilterApplier filterApplier = new ModelPatchFilterApplier();
+ private IFile file;
+ public ModelPatch originalModelPatch;
+ public ModelPatch modifiedModelPatch;
+ public java.util.List<IModelPatchEntryFilter> filters = new ArrayList<>();
+ public DialogFactory dialFactory;
- public static final String ID = "org.eclipse.emf.diffmerge.patch.gui.editors.ModelPatchEditorPart"; //$NON-NLS-1$
- private Button btnReversePatch;
- private List lFilters;
- private Button btnAdd;
- private Button btnRemove;
- private Label lblSequenceOfPatch;
- private TreeViewer tvParsedPatch;
- private Label lblFilters;
+ public static final String ID = "org.eclipse.emf.diffmerge.patch.gui.editors.ModelPatchEditorPart"; //$NON-NLS-1$
+ private Button btnReversePatch;
+ private List lFilters;
+ private Button btnAdd;
+ private Button btnRemove;
+ private Label lblSequenceOfPatch;
+ private TreeViewer tvParsedPatch;
+ private Label lblFilters;
- public ModelPatchEditorPart() {}
+ public ModelPatchEditorPart() {
+ }
- /**
- * Create contents of the editor part.
- * @param parent
- */
- @Override
- public void createPartControl(Composite parent) {
- Composite container = new Composite(parent, SWT.NONE);
- container.setLayout(new GridLayout(1, false));
- dialFactory = new DialogFactory(getSite().getShell());
+ /**
+ * Create contents of the editor part.
+ *
+ * @param parent
+ */
+ @Override
+ public void createPartControl(Composite parent) {
+ Composite container = new Composite(parent, SWT.NONE);
+ container.setLayout(new GridLayout(1, false));
+ dialFactory = new DialogFactory(getSite().getShell());
- Composite compFile = new Composite(container, SWT.NONE);
- compFile.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
- GridLayout gl_compFile = new GridLayout(2, false);
- gl_compFile.marginWidth = 0;
- gl_compFile.marginHeight = 0;
- compFile.setLayout(gl_compFile);
+ Composite compFile = new Composite(container, SWT.NONE);
+ compFile.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
+ GridLayout gl_compFile = new GridLayout(2, false);
+ gl_compFile.marginWidth = 0;
+ gl_compFile.marginHeight = 0;
+ compFile.setLayout(gl_compFile);
- lblSequenceOfPatch = new Label(container, SWT.NONE);
- lblSequenceOfPatch.setText("Sequence of patch entries:");
+ lblSequenceOfPatch = new Label(container, SWT.NONE);
+ lblSequenceOfPatch.setText("Sequence of patch entries:");
- tvParsedPatch = new TreeViewer(container, SWT.BORDER);
- tvParsedPatch.setContentProvider(new ModelPatchContentProvider());
- tvParsedPatch.setLabelProvider(new ModelPatchLabelProvider(new DescriptiveEntryLabelProvider()));
- Tree treeParsedPatch = tvParsedPatch.getTree();
- treeParsedPatch.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
- treeParsedPatch.setVisible(true);
+ tvParsedPatch = new TreeViewer(container, SWT.BORDER);
+ tvParsedPatch.setContentProvider(new ModelPatchContentProvider());
+ tvParsedPatch.setLabelProvider(new ModelPatchLabelProvider(new DescriptiveEntryLabelProvider()));
+ Tree treeParsedPatch = tvParsedPatch.getTree();
+ treeParsedPatch.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
+ treeParsedPatch.setVisible(true);
- btnReversePatch = new Button(container, SWT.CHECK);
- btnReversePatch.addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(SelectionEvent e) {
- refreshPatchViewer();
- }
- });
- btnReversePatch.setText("Reverse");
-
- lblFilters = new Label(container, SWT.NONE);
- lblFilters.setText("Filters:");
+ btnReversePatch = new Button(container, SWT.CHECK);
+ btnReversePatch.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ refreshPatchViewer();
+ }
+ });
+ btnReversePatch.setText("Reverse");
- Composite compFiltering = new Composite(container, SWT.NONE);
- compFiltering.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
- GridLayout gl_compFiltering = new GridLayout(2, false);
- gl_compFiltering.marginWidth = 0;
- gl_compFiltering.marginHeight = 0;
- compFiltering.setLayout(gl_compFiltering);
+ lblFilters = new Label(container, SWT.NONE);
+ lblFilters.setText("Filters:");
- final ListViewer lvFilters = new ListViewer(compFiltering, SWT.BORDER | SWT.V_SCROLL);
- lFilters = lvFilters.getList();
- lFilters.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 2));
- lvFilters.setContentProvider(new ModelPatchEntryFilterContentProvider());
- lvFilters.setLabelProvider(new ModelPatchEntryFilterLabelProvider());
- lvFilters.setInput(filters);
+ Composite compFiltering = new Composite(container, SWT.NONE);
+ compFiltering.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
+ GridLayout gl_compFiltering = new GridLayout(2, false);
+ gl_compFiltering.marginWidth = 0;
+ gl_compFiltering.marginHeight = 0;
+ compFiltering.setLayout(gl_compFiltering);
- btnAdd = new Button(compFiltering, SWT.NONE);
- btnAdd.addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(SelectionEvent e) {
- ModelpatchEntryFilterCreationDialog dialog = new ModelpatchEntryFilterCreationDialog(getSite().getShell());
- dialog.setBlockOnOpen(true);
- dialog.setTitle("Add filter");
- dialog.open();
- IModelPatchEntryFilter filter = dialog.getCreatedFilter();
- if(filter!=null) {
- filters.add(filter);
- lvFilters.refresh();
- refreshPatchViewer();
- }
- }
- });
- btnAdd.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
- btnAdd.setText("Add");
+ final ListViewer lvFilters = new ListViewer(compFiltering, SWT.BORDER | SWT.V_SCROLL);
+ lFilters = lvFilters.getList();
+ lFilters.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 2));
+ lvFilters.setContentProvider(new ModelPatchEntryFilterContentProvider());
+ lvFilters.setLabelProvider(new ModelPatchEntryFilterLabelProvider());
+ lvFilters.setInput(filters);
- btnRemove = new Button(compFiltering, SWT.NONE);
- btnRemove.addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(SelectionEvent e) {
- for(Object selectedElement : lvFilters.getStructuredSelection().toList()) {
- filters.remove(selectedElement);
- }
- lvFilters.refresh();
- refreshPatchViewer();
- }
- });
- btnRemove.setLayoutData(new GridData(SWT.FILL, SWT.TOP, false, false, 1, 1));
- btnRemove.setText("Remove");
+ btnAdd = new Button(compFiltering, SWT.NONE);
+ btnAdd.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ ModelpatchEntryFilterCreationDialog dialog = new ModelpatchEntryFilterCreationDialog(getSite().getShell());
+ dialog.setBlockOnOpen(true);
+ dialog.setTitle("Add filter");
+ dialog.open();
+ IModelPatchEntryFilter filter = dialog.getCreatedFilter();
+ if (filter != null) {
+ filters.add(filter);
+ lvFilters.refresh();
+ refreshPatchViewer();
+ }
+ }
+ });
+ btnAdd.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
+ btnAdd.setText("Add");
+ btnRemove = new Button(compFiltering, SWT.NONE);
+ btnRemove.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ for (Object selectedElement : lvFilters.getStructuredSelection().toList()) {
+ filters.remove(selectedElement);
+ }
+ lvFilters.refresh();
refreshPatchViewer();
- }
+ }
+ });
+ btnRemove.setLayoutData(new GridData(SWT.FILL, SWT.TOP, false, false, 1, 1));
+ btnRemove.setText("Remove");
- private ModelPatch modifyPatch(boolean isReverse) {
- if(isReverse) {
- try {
- modifiedModelPatch = ModelPatchReverser.INSTANCE.reverse(originalModelPatch);
- } catch (ModelPatchException e) {
- e.printStackTrace();
- }
- } else {
- modifiedModelPatch = originalModelPatch;
- }
- for(IModelPatchEntryFilter filter : filters) {
- if(filter!=null) modifiedModelPatch = filterApplier.applyFilter(modifiedModelPatch, filter);
- }
- return modifiedModelPatch;
- }
+ refreshPatchViewer();
+ }
- private void refreshPatchViewer() {
- modifyPatch(btnReversePatch.getSelection());
- tvParsedPatch.setInput(modifiedModelPatch);
- tvParsedPatch.refresh();
- firePropertyChange(PROP_DIRTY);
+ private ModelPatch modifyPatch(boolean isReverse) {
+ if (isReverse) {
+ try {
+ modifiedModelPatch = ModelPatchReverser.INSTANCE.reverse(originalModelPatch);
+ } catch (ModelPatchException e) {
+ e.printStackTrace();
+ }
+ } else {
+ modifiedModelPatch = originalModelPatch;
}
-
- @Override
- public void setFocus() {
- // Set the focus
+ for (IModelPatchEntryFilter filter : filters) {
+ if (filter != null)
+ modifiedModelPatch = filterApplier.applyFilter(modifiedModelPatch, filter);
}
+ return modifiedModelPatch;
+ }
- @Override
- public void doSave(IProgressMonitor monitor) {
- monitor.beginTask("Save model patch: "+file.getName(), 1);
- try {
- String pref = ModelPatchPreferenceProvider.INSTANCE.getSerializationType();
- serializerProvider.getSelectedSerializer(pref).serialize(modifiedModelPatch, new File(file.getLocation().toOSString()));
- refreshAfterSave();
- } catch (ModelPatchException e) {
- new RuntimeException("We are unable to save the modifications!", new Throwable(e));
- }
- monitor.done();
- }
+ private void refreshPatchViewer() {
+ modifyPatch(btnReversePatch.getSelection());
+ tvParsedPatch.setInput(modifiedModelPatch);
+ tvParsedPatch.refresh();
+ firePropertyChange(PROP_DIRTY);
+ }
- @Override
- public void doSaveAs() {
- try {
- IWorkbench workbench = getSite().getWorkbenchWindow().getWorkbench();
- IFile newFile = dialFactory.openSaveFileDialog(workbench, new StructuredSelection(ResourcesPlugin.getWorkspace().getRoot().getFile(file.getFullPath())), "modelpatch");
- String pref = ModelPatchPreferenceProvider.INSTANCE.getSerializationType();
- serializerProvider.getSelectedSerializer(pref).serialize(modifiedModelPatch, newFile.getLocation().toFile());
- file = newFile;
- setPartName("ModelPatch: "+file.getName());
- refreshAfterSave();
- } catch (ModelPatchException e) {
- new RuntimeException("We are unable to save the new file!", new Throwable(e));
- }
- }
+ @Override
+ public void setFocus() {
+ // Set the focus
+ }
- private void refreshAfterSave() {
- originalModelPatch = modifiedModelPatch;
- filters.clear();
- btnReversePatch.setSelection(false);
- refreshPatchViewer();
+ @Override
+ public void doSave(IProgressMonitor monitor) {
+ monitor.beginTask("Save model patch: " + file.getName(), 1);
+ try {
+ IModelPatchSerializer serializer = getSerializer();
+ serializer.serialize(modifiedModelPatch, new File(file.getLocation().toOSString()));
+ refreshAfterSave();
+ } catch (ModelPatchException e) {
+ new RuntimeException("We are unable to save the modifications!", new Throwable(e));
}
+ monitor.done();
+ }
- @Override
- public void init(IEditorSite site, IEditorInput input) throws PartInitException {
- if(!(input instanceof FileEditorInput)) {
- throw new PartInitException("Wrong input!");
- }
- file = ((FileEditorInput)input).getFile();
- try {
- String pref = ModelPatchPreferenceProvider.INSTANCE.getSerializationType();
- originalModelPatch = serializerProvider.getSelectedSerializer(pref).load(new File(file.getLocation().toOSString()));
- modifiedModelPatch = originalModelPatch;
- } catch (ModelPatchException e) {
- throw new PartInitException(e.getMessage(), new Throwable(e));
- }
- this.setInput(input);
- this.setSite(site);
- setPartName("ModelPatch: "+file.getName());
+ private IModelPatchSerializer getSerializer() {
+ IModelPatchSerializer serializer = serializerProvider.getSerializerByFileExtension(file.getFileExtension());
+ if(serializer == null) {
+ String pref = ModelPatchPreferenceProvider.INSTANCE.getSerializationType();
+ serializer = serializerProvider.getSelectedSerializer(pref);
}
+ return serializer;
+ }
- @Override
- public boolean isDirty() {
- return !originalModelPatch.equals(modifiedModelPatch);
+ @Override
+ public void doSaveAs() {
+ try {
+ IWorkbench workbench = getSite().getWorkbenchWindow().getWorkbench();
+ String pref = ModelPatchPreferenceProvider.INSTANCE.getSerializationType();
+ IModelPatchSerializer serializer = serializerProvider.getSelectedSerializer(pref);
+ IFile newFile = dialFactory.openSaveFileDialog(workbench,
+ new StructuredSelection(ResourcesPlugin.getWorkspace().getRoot().getFile(file.getFullPath())),
+ serializer.getPreferredFileExtension());
+ if (newFile != null) {
+ serializer.serialize(modifiedModelPatch, newFile.getLocation().toFile());
+ file = newFile;
+ setPartName("ModelPatch: " + file.getName());
+ refreshAfterSave();
+ }
+ } catch (ModelPatchException e) {
+ new RuntimeException("We are unable to save the new file!", new Throwable(e));
}
+ }
- @Override
- public boolean isSaveAsAllowed() {
- return true;
- }
+ private void refreshAfterSave() {
+ originalModelPatch = modifiedModelPatch;
+ filters.clear();
+ btnReversePatch.setSelection(false);
+ refreshPatchViewer();
+ }
- @Override
- public void dispose() {
- super.dispose();
- filterApplier = new ModelPatchFilterApplier();
- file = null;
- originalModelPatch = null;
- modifiedModelPatch = null;
- filters = null;
+ @Override
+ public void init(IEditorSite site, IEditorInput input) throws PartInitException {
+ if (!(input instanceof FileEditorInput)) {
+ throw new PartInitException("Wrong input!");
+ }
+ file = ((FileEditorInput) input).getFile();
+ try {
+ IModelPatchSerializer serializer = getSerializer();
+ originalModelPatch = serializer.load(new File(file.getLocation().toOSString()));
+ modifiedModelPatch = originalModelPatch;
+ } catch (ModelPatchException e) {
+ throw new PartInitException(e.getMessage(), new Throwable(e));
}
+ this.setInput(input);
+ this.setSite(site);
+ setPartName("ModelPatch: " + file.getName());
+ }
+
+ @Override
+ public boolean isDirty() {
+ return !originalModelPatch.equals(modifiedModelPatch);
+ }
+
+ @Override
+ public boolean isSaveAsAllowed() {
+ return true;
+ }
+
+ @Override
+ public void dispose() {
+ super.dispose();
+ filterApplier = new ModelPatchFilterApplier();
+ file = null;
+ originalModelPatch = null;
+ modifiedModelPatch = null;
+ filters = null;
+ }
}
diff --git a/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/handlers/ComparisonSelectionUtil.xtend b/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/handlers/ComparisonSelectionUtil.xtend
index b61b9e7..c334bd9 100644
--- a/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/handlers/ComparisonSelectionUtil.xtend
+++ b/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/handlers/ComparisonSelectionUtil.xtend
@@ -34,130 +34,130 @@ import org.eclipse.ui.progress.IProgressService
class ComparisonSelectionUtil {
- protected def Collection<IDifference> getDiffsToMerge(ComparisonSelection selection, boolean toLeft_p,
- EMFDiffNode input) {
- val showImpact = input.isShowMergeImpact();
- input.setDefaultShowImpact(false);
- val Role destination = Role.REFERENCE;
- val isCoverChildren = true;
- val isIncrementalMode = false;
- val List<EMatch> selectedMatches = getSelectedMatchesForInteractions(selection)
- val Collection<IDifference> toMerge = if (!selectedMatches.isEmpty()) {
- getDifferencesToMerge(selectedMatches, destination, isCoverChildren, isIncrementalMode, input)
- } else {
- input.categoryManager.getPendingDifferencesFiltered(selection.asDifferencesToMerge())
- }
- val ImpactInput mergeInput = new ImpactInput(toMerge, toLeft_p, input);
- val IProgressService progress = PlatformUI.getWorkbench().getProgressService();
- try {
- progress.busyCursorWhile(new IRunnableWithProgress() {
- /**
- * @see IRunnableWithProgress#run(IProgressMonitor)
- */
- override void run(IProgressMonitor monitor_p) throws InvocationTargetException, InterruptedException {
- mergeInput.compute(monitor_p);
- }
- });
- } catch (Exception ex) {
- return null;
- }
- input.setDefaultShowImpact(showImpact);
-
- val EMap<IMatch, Collection<IDifference>> explicitImpacts = mergeInput.getImpact(true);
- val EMap<IMatch, Collection<IDifference>> implicitImpacts = mergeInput.getImpact(false);
- val Set<IDifference> diffs = new HashSet<IDifference>();
- for (Entry<IMatch, Collection<IDifference>> impact : implicitImpacts) {
- diffs.addAll(impact.getValue());
+ protected def Collection<IDifference> getDiffsToMerge(ComparisonSelection selection, boolean toLeft_p,
+ EMFDiffNode input) {
+ val showImpact = input.isShowMergeImpact();
+ input.setDefaultShowImpact(false);
+ val Role destination = Role.REFERENCE;
+ val isCoverChildren = true;
+ val isIncrementalMode = false;
+ val List<EMatch> selectedMatches = getSelectedMatchesForInteractions(selection)
+ val Collection<IDifference> toMerge = if (!selectedMatches.isEmpty()) {
+ getDifferencesToMerge(selectedMatches, destination, isCoverChildren, isIncrementalMode, input)
+ } else {
+ input.categoryManager.getPendingDifferencesFiltered(selection.asDifferencesToMerge())
+ }
+ val ImpactInput mergeInput = new ImpactInput(toMerge, toLeft_p, input);
+ val IProgressService progress = PlatformUI.getWorkbench().getProgressService();
+ try {
+ progress.busyCursorWhile(new IRunnableWithProgress() {
+ /**
+ * @see IRunnableWithProgress#run(IProgressMonitor)
+ */
+ override void run(IProgressMonitor monitor_p) throws InvocationTargetException, InterruptedException {
+ mergeInput.compute(monitor_p);
}
- for (Entry<IMatch, Collection<IDifference>> impact : explicitImpacts) {
- diffs.addAll(impact.getValue());
- }
-
- return diffs;
+ });
+ } catch (Exception ex) {
+ return null;
}
+ input.setDefaultShowImpact(showImpact);
- protected def List<EMatch> getSelectedMatchesForInteractions(ComparisonSelection selection_p) {
- var List<EMatch> selectedMatches = selection_p.getSelectedMatches();
- if (selectedMatches.isEmpty()) {
- val List<EMatch> treePath = selection_p.getSelectedTreePath();
- if (!treePath.isEmpty()) {
- selectedMatches = Collections.singletonList(treePath.get(treePath.size() - 1));
- }
- }
- return selectedMatches;
+ val EMap<IMatch, Collection<IDifference>> explicitImpacts = mergeInput.getImpact(true);
+ val EMap<IMatch, Collection<IDifference>> implicitImpacts = mergeInput.getImpact(false);
+ val Set<IDifference> diffs = new HashSet<IDifference>();
+ for (Entry<IMatch, Collection<IDifference>> impact : implicitImpacts) {
+ diffs.addAll(impact.getValue());
+ }
+ for (Entry<IMatch, Collection<IDifference>> impact : explicitImpacts) {
+ diffs.addAll(impact.getValue());
}
- /**
- * Copied from {@link org.eclipse.emf.diffmerge.ui.viewers.ComparisonViewer}
- *
- * Return the differences to merge from a given list of selected matches and the given
- * criteria
- * @param selectedMatches_p a non-null list
- * @param coverChildren_p whether children of the matches must be covered
- * @param incrementalMode_p whether optional deletions must be skipped
- * @return a non-null, potentially empty, unmodifiable list
- */
- protected def List<IDifference> getDifferencesToMerge(List<EMatch> selectedMatches_p, Role destination_p,
- boolean coverChildren_p, boolean incrementalMode_p, EMFDiffNode input) {
- val List<IDifference> result = new ArrayList<IDifference>();
- val IProgressService progress = PlatformUI.getWorkbench().getProgressService();
- try {
- progress.busyCursorWhile(new IRunnableWithProgress() {
- /**
- * @see IRunnableWithProgress#run(IProgressMonitor)
- */
- override void run(IProgressMonitor monitor_p) throws InvocationTargetException, InterruptedException {
- for (EMatch selectedMatch : selectedMatches_p) {
- if (coverChildren_p) {
- addDifferencesToMergeRec(result, selectedMatch, destination_p, incrementalMode_p, input);
- } else {
- addDifferencesToMerge(result, selectedMatch, destination_p, incrementalMode_p, input);
- }
- }
- }
- });
- } catch (Exception e) {
- // Proceed
- }
- return Collections.unmodifiableList(result);
+ return diffs;
+ }
+
+ protected def List<EMatch> getSelectedMatchesForInteractions(ComparisonSelection selection_p) {
+ var List<EMatch> selectedMatches = selection_p.getSelectedMatches();
+ if (selectedMatches.isEmpty()) {
+ val List<EMatch> treePath = selection_p.getSelectedTreePath();
+ if (!treePath.isEmpty()) {
+ selectedMatches = Collections.singletonList(treePath.get(treePath.size() - 1));
+ }
}
+ return selectedMatches;
+ }
- /**
- * Copied from {@link org.eclipse.emf.diffmerge.ui.viewers.ComparisonViewer}
- *
- * Add differences to merge on the given match to the given list according
- * to the given criteria
- * @param toMerge_p a non-null, modifiable list
- * @param match_p a non-null match
- * @param destination_p a non-null role which is TARGET or REFEREBCE
- * @param incrementalMode_p whether optional deletions must be skipped
- */
- protected def void addDifferencesToMerge(List<IDifference> toMerge_p, IMatch match_p, Role destination_p,
- boolean incrementalMode_p, EMFDiffNode input) {
- for (IDifference difference : match_p.getAllDifferences()) {
- if (!input.getCategoryManager().isFiltered(difference)) {
- if (!incrementalMode_p || difference instanceof IPresenceDifference &&
- (difference as IPresenceDifference).getPresenceRole() != destination_p)
- toMerge_p.add(difference);
+ /**
+ * Copied from {@link org.eclipse.emf.diffmerge.ui.viewers.ComparisonViewer}
+ *
+ * Return the differences to merge from a given list of selected matches and the given
+ * criteria
+ * @param selectedMatches_p a non-null list
+ * @param coverChildren_p whether children of the matches must be covered
+ * @param incrementalMode_p whether optional deletions must be skipped
+ * @return a non-null, potentially empty, unmodifiable list
+ */
+ protected def List<IDifference> getDifferencesToMerge(List<EMatch> selectedMatches_p, Role destination_p,
+ boolean coverChildren_p, boolean incrementalMode_p, EMFDiffNode input) {
+ val List<IDifference> result = new ArrayList<IDifference>();
+ val IProgressService progress = PlatformUI.getWorkbench().getProgressService();
+ try {
+ progress.busyCursorWhile(new IRunnableWithProgress() {
+ /**
+ * @see IRunnableWithProgress#run(IProgressMonitor)
+ */
+ override void run(IProgressMonitor monitor_p) throws InvocationTargetException, InterruptedException {
+ for (EMatch selectedMatch : selectedMatches_p) {
+ if (coverChildren_p) {
+ addDifferencesToMergeRec(result, selectedMatch, destination_p, incrementalMode_p, input);
+ } else {
+ addDifferencesToMerge(result, selectedMatch, destination_p, incrementalMode_p, input);
}
+ }
}
+ });
+ } catch (Exception e) {
+ // Proceed
}
+ return Collections.unmodifiableList(result);
+ }
- /**
- * Copied from {@link org.eclipse.emf.diffmerge.ui.viewers.ComparisonViewer}
- *
- * Add differences to merge on the given match and its children to the given list according
- * to the given criteria
- * @param toMerge_p a non-null, modifiable list
- * @param match_p a non-null match
- * @param destination_p a non-null role which is TARGET or REFEREBCE
- * @param incrementalMode_p whether optional deletions must be skipped
- */
- protected def void addDifferencesToMergeRec(List<IDifference> toMerge_p, IMatch match_p, Role destination_p,
- boolean incrementalMode_p, EMFDiffNode input) {
- addDifferencesToMerge(toMerge_p, match_p, destination_p, incrementalMode_p, input);
- for (IMatch child : input.getCategoryManager().getChildrenForMerge(match_p)) {
- addDifferencesToMergeRec(toMerge_p, child, destination_p, incrementalMode_p, input);
- }
+ /**
+ * Copied from {@link org.eclipse.emf.diffmerge.ui.viewers.ComparisonViewer}
+ *
+ * Add differences to merge on the given match to the given list according
+ * to the given criteria
+ * @param toMerge_p a non-null, modifiable list
+ * @param match_p a non-null match
+ * @param destination_p a non-null role which is TARGET or REFEREBCE
+ * @param incrementalMode_p whether optional deletions must be skipped
+ */
+ protected def void addDifferencesToMerge(List<IDifference> toMerge_p, IMatch match_p, Role destination_p,
+ boolean incrementalMode_p, EMFDiffNode input) {
+ for (IDifference difference : match_p.getAllDifferences()) {
+ if (!input.getCategoryManager().isFiltered(difference)) {
+ if (!incrementalMode_p || difference instanceof IPresenceDifference &&
+ (difference as IPresenceDifference).getPresenceRole() != destination_p)
+ toMerge_p.add(difference);
+ }
+ }
+ }
+
+ /**
+ * Copied from {@link org.eclipse.emf.diffmerge.ui.viewers.ComparisonViewer}
+ *
+ * Add differences to merge on the given match and its children to the given list according
+ * to the given criteria
+ * @param toMerge_p a non-null, modifiable list
+ * @param match_p a non-null match
+ * @param destination_p a non-null role which is TARGET or REFEREBCE
+ * @param incrementalMode_p whether optional deletions must be skipped
+ */
+ protected def void addDifferencesToMergeRec(List<IDifference> toMerge_p, IMatch match_p, Role destination_p,
+ boolean incrementalMode_p, EMFDiffNode input) {
+ addDifferencesToMerge(toMerge_p, match_p, destination_p, incrementalMode_p, input);
+ for (IMatch child : input.getCategoryManager().getChildrenForMerge(match_p)) {
+ addDifferencesToMergeRec(toMerge_p, child, destination_p, incrementalMode_p, input);
}
+ }
}
diff --git a/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/handlers/ModelpatchApplicationHandler.xtend b/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/handlers/ModelpatchApplicationHandler.xtend
index e1a2de6..aafa406 100644
--- a/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/handlers/ModelpatchApplicationHandler.xtend
+++ b/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/handlers/ModelpatchApplicationHandler.xtend
@@ -31,7 +31,7 @@ class ModelpatchApplicationHandler extends AbstractHandler {
try {
shell = HandlerUtil.getActiveShell(event)
(HandlerUtil.getCurrentSelection(event) as IStructuredSelection).executePatch
- } catch(Exception ex) {
+ } catch (Exception ex) {
val factory = new DialogFactory(shell)
factory.openErrorDialog("Modelpatch Application Problem", "Patch cannot be applied!", ex, ID)
ex.printStackTrace
@@ -39,13 +39,14 @@ class ModelpatchApplicationHandler extends AbstractHandler {
return null
}
-
private dispatch def void executePatch(IStructuredSelection strucSelection) {
strucSelection.firstElement.executePatch
}
+
private dispatch def void executePatch(EObject eobj) {
eobj.eResource.executePatch
}
+
private dispatch def void executePatch(Resource resource) {
// Show ModelpatchApplicationWizard for patch file and filters
val wizard = new WizardDialog(shell, new ModelpatchApplicationWizard(resource))
diff --git a/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/handlers/ModelpatchGenerationHandler.xtend b/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/handlers/ModelpatchGenerationHandler.xtend
index 2a74e18..1a7e686 100644
--- a/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/handlers/ModelpatchGenerationHandler.xtend
+++ b/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/handlers/ModelpatchGenerationHandler.xtend
@@ -42,34 +42,35 @@ class ModelpatchGenerationHandler extends AbstractHandler {
ex.printStackTrace
}
- val part = HandlerUtil.getActiveEditorInput(event)
- if (part instanceof EMFDiffMergeEditorInput){
- val diffNode = part.compareResult
- val comparison = diffNode.actualComparison
- if (selection instanceof ComparisonSelection){
- val diffs = selection.getDiffsToMerge(false, diffNode)
- if(!diffs.empty) {
- diffs.generatePatch(shell, workbench, selection)
- }
- } else {
- comparison.generatePatch(shell, workbench, selection)
- }
+ val part = HandlerUtil.getActiveEditorInput(event)
+ if (part instanceof EMFDiffMergeEditorInput) {
+ val diffNode = part.compareResult
+ val comparison = diffNode.actualComparison
+ if (selection instanceof ComparisonSelection) {
+ val diffs = selection.getDiffsToMerge(false, diffNode)
+ if (!diffs.empty) {
+ diffs.generatePatch(shell, workbench, selection)
}
- return null
+ } else {
+ comparison.generatePatch(shell, workbench, selection)
+ }
+ }
+ return null
}
public def Object generatePatch(Object diff, Shell shell, IWorkbench workbench, IStructuredSelection selection) {
extension val DialogFactory factory = new DialogFactory(shell)
val SerializerProvider serializerProvider = new SerializerProvider
try {
- val path = openSaveFileDialog(workbench, selection,"modelpatch")
- if (path != null) {
+ val serializer = serializerProvider.getSelectedSerializer(serializationType)
+ val path = openSaveFileDialog(workbench, selection, serializer.preferredFileExtension)
+ if (path !== null) {
val modelPatchRecorder = new ModelPatchRecorder
val generatedPatch = modelPatchRecorder.generateModelPatch(diff)
val patchFile = path.location.toFile
- serializerProvider.getSelectedSerializer(serializationType).serialize(generatedPatch,patchFile)
+ serializer.serialize(generatedPatch, patchFile)
- if(isFileGenerated(patchFile)==true) {
+ if (isFileGenerated(patchFile) == true) {
openModelPatchEditor(workbench.activeWorkbenchWindow, path);
} else {
openErrorDialog(MODELPATCH_GENERATION_ERROR_TITLE, '''File cannot be created at the following path: «path»''')
@@ -78,7 +79,8 @@ class ModelpatchGenerationHandler extends AbstractHandler {
openInformationDialog("Model Patch Generation Information", "No file has been selected!")
}
} catch (ModelPatchException ex) {
- openErrorDialog(MODELPATCH_GENERATION_ERROR_TITLE, "Modelpatch generation finished with errors!", ex, "org.eclipse.emf.diffmerge.patch")
+ openErrorDialog(MODELPATCH_GENERATION_ERROR_TITLE, "Modelpatch generation finished with errors!", ex,
+ "org.eclipse.emf.diffmerge.patch")
} catch (ClassCastException ex) {
openErrorDialog(MODELPATCH_GENERATION_ERROR_TITLE, "Patch generation only works from EMF Diff/Merge!")
} catch (Exception ex) {
diff --git a/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/preferences/ModelPatchPreferencePage.java b/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/preferences/ModelPatchPreferencePage.java
index caa1256..e5af756 100644
--- a/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/preferences/ModelPatchPreferencePage.java
+++ b/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/preferences/ModelPatchPreferencePage.java
@@ -15,8 +15,8 @@ import org.eclipse.jface.preference.RadioGroupFieldEditor;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
import org.eclipse.emf.diffmerge.patch.runtime.modelaccess.ModelAccessTypes;
-import org.eclipse.emf.diffmerge.patch.ui.Activator;
-import org.eclipse.emf.diffmerge.patch.ui.utils.SerializationTypes;
+import org.eclipse.emf.diffmerge.patch.ui.ModelPatchUIPlugin;
+import org.eclipse.emf.diffmerge.patch.ui.utils.PersistenceTypes;
public class ModelPatchPreferencePage extends FieldEditorPreferencePage implements IWorkbenchPreferencePage {
@@ -32,16 +32,15 @@ public class ModelPatchPreferencePage extends FieldEditorPreferencePage implemen
{ "Editing Domain Aware Model Access", ModelAccessTypes.VIATRA.toString() } },
getFieldEditorParent()));
- addField(new RadioGroupFieldEditor(ModelPatchPreferenceProvider.SERIALIZER_PREFERENCE_ID, "Serialization:", 1,
- new String[][] { { "Jackson - JSON", SerializationTypes.JACKSON.toString() },
- { "GSON - JSON", SerializationTypes.GSON.toString() },
- { "Jackson - BSON", SerializationTypes.BSON.toString() } },
+ addField(new RadioGroupFieldEditor(
+ ModelPatchPreferenceProvider.SERIALIZER_PREFERENCE_ID, "Serialization:", 1, new String[][] {
+ { "GSON - JSON", PersistenceTypes.GSON.toString() }, { "EMF - XMI", PersistenceTypes.EMF.toString() } },
getFieldEditorParent()));
}
@Override
public void init(IWorkbench workbench) {
- setPreferenceStore(Activator.getDefault().getPreferenceStore());
+ setPreferenceStore(ModelPatchUIPlugin.getDefault().getPreferenceStore());
}
}
diff --git a/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/preferences/ModelPatchPreferenceProvider.java b/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/preferences/ModelPatchPreferenceProvider.java
index f9e7288..ad85b28 100644
--- a/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/preferences/ModelPatchPreferenceProvider.java
+++ b/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/preferences/ModelPatchPreferenceProvider.java
@@ -12,22 +12,22 @@ package org.eclipse.emf.diffmerge.patch.ui.preferences;
import org.eclipse.core.runtime.Platform;
import org.eclipse.emf.diffmerge.patch.runtime.modelaccess.ModelAccessTypes;
-import org.eclipse.emf.diffmerge.patch.ui.utils.SerializationTypes;
+import org.eclipse.emf.diffmerge.patch.ui.ModelPatchUIPlugin;
+import org.eclipse.emf.diffmerge.patch.ui.utils.PersistenceTypes;
public enum ModelPatchPreferenceProvider {
INSTANCE;
- public static String PREFERENCES_ID = "org.eclipse.emf.diffmerge.patch.gui";
- public static String SERIALIZER_PREFERENCE_ID = "ModelPatch.Serializer";
- public static String MODELACCESS_PREFERENCE_ID = "ModelPatch.ModelAccess";
+ public static final String SERIALIZER_PREFERENCE_ID = "ModelPatch.Serializer";
+ public static final String MODELACCESS_PREFERENCE_ID = "ModelPatch.ModelAccess";
public String getSerializationType() {
- return Platform.getPreferencesService().getString(PREFERENCES_ID,
- SERIALIZER_PREFERENCE_ID, SerializationTypes.JACKSON.toString(), null);
+ return Platform.getPreferencesService().getString(ModelPatchUIPlugin.PLUGIN_ID, SERIALIZER_PREFERENCE_ID,
+ PersistenceTypes.GSON.toString(), null);
}
public String getModelAccessType() {
- return Platform.getPreferencesService().getString(PREFERENCES_ID, MODELACCESS_PREFERENCE_ID,
+ return Platform.getPreferencesService().getString(ModelPatchUIPlugin.PLUGIN_ID, MODELACCESS_PREFERENCE_ID,
ModelAccessTypes.EMF_REFLECTIVE.toString(), null);
}
}
diff --git a/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/utils/DefaultEntryLabelProvider.xtend b/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/utils/DefaultEntryLabelProvider.xtend
index 976cad7..b13cf77 100644
--- a/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/utils/DefaultEntryLabelProvider.xtend
+++ b/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/utils/DefaultEntryLabelProvider.xtend
@@ -22,7 +22,8 @@ class DefaultEntryLabelProvider implements IEntryLabelProvider {
return entry.toString
}
- override shortDescription(ModelPatchEntry entry) '''«entry.direction.toString.toLowerCase.toFirstUpper» «entry.entryType.toString.toLowerCase.toFirstUpper»'''
+ override shortDescription(
+ ModelPatchEntry entry) '''«entry.direction.toString.toLowerCase.toFirstUpper» «entry.entryType.toString.toLowerCase.toFirstUpper»'''
override getPropertyList(ModelPatchEntry entry) {
val props = <EntryPropertyWrapper>newArrayList
@@ -35,7 +36,7 @@ class DefaultEntryLabelProvider implements IEntryLabelProvider {
if (entry instanceof StructuralFeatureEntry) {
props.add(new EntryPropertyWrapper("feature", entry.feature))
- if(entry.index.isPresent) {
+ if (entry.index.isPresent) {
props.add(new EntryPropertyWrapper("index", entry.index))
}
diff --git a/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/utils/DialogFactory.xtend b/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/utils/DialogFactory.xtend
index 8cc3721..dc2f1ef 100644
--- a/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/utils/DialogFactory.xtend
+++ b/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/utils/DialogFactory.xtend
@@ -76,15 +76,13 @@ class DialogFactory {
}
selectAndReveal(file)
- if(file.location!=null) {
+ if (file.location != null) {
path = file.location.toString
}
return true;
}
-
-
} => [
it.windowTitle = "Modelpatch file"
]
@@ -105,7 +103,7 @@ class DialogFactory {
}
}
} catch (PartInitException e) {
- openError(window.getShell(), "Modelpatch editor cannot be opened",e.getMessage(), e)
+ openError(window.getShell(), "Modelpatch editor cannot be opened", e.getMessage(), e)
}
}
diff --git a/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/utils/EntryPropertyWrapper.java b/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/utils/EntryPropertyWrapper.java
index 85b6f25..9b4ddae 100644
--- a/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/utils/EntryPropertyWrapper.java
+++ b/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/utils/EntryPropertyWrapper.java
@@ -15,19 +15,21 @@ import org.eclipse.emf.diffmerge.patch.api.Identifiable;
import com.google.common.base.Optional;
public class EntryPropertyWrapper {
- public String prop = "";
- public String value = "";
+ public String prop = "";
+ public String value = "";
- public EntryPropertyWrapper(String prop, String value) {
- this.prop = prop;
- this.value = value;
- }
- public EntryPropertyWrapper(String prop, Identifiable value) {
- this.prop = prop;
- this.value = value.getIdentifier();
- }
- public EntryPropertyWrapper(String prop, Optional<? extends Object> value) {
- this.prop = prop;
- this.value = value.isPresent()?value.get().toString():"No value";
- }
+ public EntryPropertyWrapper(String prop, String value) {
+ this.prop = prop;
+ this.value = value;
+ }
+
+ public EntryPropertyWrapper(String prop, Identifiable value) {
+ this.prop = prop;
+ this.value = value.getIdentifier();
+ }
+
+ public EntryPropertyWrapper(String prop, Optional<? extends Object> value) {
+ this.prop = prop;
+ this.value = value.isPresent() ? value.get().toString() : "No value";
+ }
}
diff --git a/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/utils/IEntryLabelProvider.java b/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/utils/IEntryLabelProvider.java
index fdfec1b..fcb796f 100644
--- a/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/utils/IEntryLabelProvider.java
+++ b/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/utils/IEntryLabelProvider.java
@@ -15,9 +15,9 @@ import java.util.List;
import org.eclipse.emf.diffmerge.patch.api.ModelPatchEntry;
public interface IEntryLabelProvider {
- public String shortDescription(ModelPatchEntry entry);
+ public String shortDescription(ModelPatchEntry entry);
- public String getLabel(ModelPatchEntry entry);
+ public String getLabel(ModelPatchEntry entry);
- public List<EntryPropertyWrapper> getPropertyList(ModelPatchEntry entry);
+ public List<EntryPropertyWrapper> getPropertyList(ModelPatchEntry entry);
}
diff --git a/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/utils/IdentifiableWrapper.java b/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/utils/IdentifiableWrapper.java
index 51ca3e8..69fa716 100644
--- a/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/utils/IdentifiableWrapper.java
+++ b/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/utils/IdentifiableWrapper.java
@@ -11,6 +11,6 @@
package org.eclipse.emf.diffmerge.patch.ui.utils;
public class IdentifiableWrapper {
- public String name;
- public String ident;
+ public String name;
+ public String ident;
}
diff --git a/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/utils/IdentifiableWrapperFactory.java b/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/utils/IdentifiableWrapperFactory.java
index c8f1f89..3dcd0cb 100644
--- a/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/utils/IdentifiableWrapperFactory.java
+++ b/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/utils/IdentifiableWrapperFactory.java
@@ -13,15 +13,16 @@ package org.eclipse.emf.diffmerge.patch.ui.utils;
import org.eclipse.emf.diffmerge.patch.api.Identifiable;
public enum IdentifiableWrapperFactory {
- INSTANCE;
+ INSTANCE;
- public IdentifiableWrapper create(Identifiable ident, String name) {
- return create(ident.getIdentifier(), name);
- }
- public IdentifiableWrapper create(String ident, String name) {
- IdentifiableWrapper wrapper = new IdentifiableWrapper();
- wrapper.name = name;
- wrapper.ident = ident;
- return wrapper;
- }
+ public IdentifiableWrapper create(Identifiable ident, String name) {
+ return create(ident.getIdentifier(), name);
+ }
+
+ public IdentifiableWrapper create(String ident, String name) {
+ IdentifiableWrapper wrapper = new IdentifiableWrapper();
+ wrapper.name = name;
+ wrapper.ident = ident;
+ return wrapper;
+ }
}
diff --git a/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/utils/ModelPatchContentProvider.xtend b/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/utils/ModelPatchContentProvider.xtend
index ac5cfcf..e5b31fe 100644
--- a/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/utils/ModelPatchContentProvider.xtend
+++ b/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/utils/ModelPatchContentProvider.xtend
@@ -23,7 +23,7 @@ class ModelPatchContentProvider implements ITreeContentProvider {
override void inputChanged(Viewer viewer, Object oldInput, Object newInput) {}
override Object[] getElements(Object inputElement) {
- if(inputElement==null) {
+ if (inputElement == null) {
return newArrayList
}
return inputElement.allElements
@@ -38,15 +38,17 @@ class ModelPatchContentProvider implements ITreeContentProvider {
}
override boolean hasChildren(Object element) {
- return element.allElements.size>0
+ return element.allElements.size > 0
}
private dispatch def List<? extends Object> getAllElements(Object patch) {
return newArrayList
}
+
private dispatch def List<? extends Object> getAllElements(ModelPatch patch) {
return patch.entries
}
+
private dispatch def List<? extends Object> getAllElements(ModelPatchEntry ee) {
return newArrayList
}
diff --git a/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/utils/ModelPatchEntryFilterContentProvider.xtend b/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/utils/ModelPatchEntryFilterContentProvider.xtend
index 83903cc..11247d3 100644
--- a/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/utils/ModelPatchEntryFilterContentProvider.xtend
+++ b/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/utils/ModelPatchEntryFilterContentProvider.xtend
@@ -21,7 +21,7 @@ class ModelPatchEntryFilterContentProvider implements IStructuredContentProvider
override void inputChanged(Viewer viewer, Object oldInput, Object newInput) {}
override Object[] getElements(Object inputElement) {
- if(inputElement==null) {
+ if (inputElement == null) {
return newArrayList
}
return inputElement.allElements
@@ -30,6 +30,7 @@ class ModelPatchEntryFilterContentProvider implements IStructuredContentProvider
private dispatch def List<? extends Object> getAllElements(Object object) {
return newArrayList
}
+
private dispatch def List<? extends Object> getAllElements(List list) {
return list
}
diff --git a/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/utils/ModelPatchEntryFilterLabelProvider.xtend b/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/utils/ModelPatchEntryFilterLabelProvider.xtend
index 02726b7..755e1b7 100644
--- a/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/utils/ModelPatchEntryFilterLabelProvider.xtend
+++ b/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/utils/ModelPatchEntryFilterLabelProvider.xtend
@@ -27,9 +27,14 @@ class ModelPatchEntryFilterLabelProvider implements ILabelProvider {
private dispatch def String getLabel(Object object) {
return object.toString
}
+
private dispatch def String getLabel(ComplexEntryFilter filter) '''«filter.type.name»'''
- private dispatch def String getLabel(EntryDirectionFilter filter) '''Filtered direction: «filter.filteredDirection.name»'''
- private dispatch def String getLabel(EntryTypeFilter filter) '''Filtered entry types: «FOR type : filter.filteredTypes SEPARATOR ", "»«type.name»«ENDFOR»'''
+
+ private dispatch def String getLabel(
+ EntryDirectionFilter filter) '''Filtered direction: «filter.filteredDirection.name»'''
+
+ private dispatch def String getLabel(
+ EntryTypeFilter filter) '''Filtered entry types: «FOR type : filter.filteredTypes SEPARATOR ", "»«type.name»«ENDFOR»'''
override addListener(ILabelProviderListener listener) {}
diff --git a/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/utils/ModelPatchEntryHelper.xtend b/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/utils/ModelPatchEntryHelper.xtend
index 0ed9ba9..5d3d2a9 100644
--- a/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/utils/ModelPatchEntryHelper.xtend
+++ b/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/utils/ModelPatchEntryHelper.xtend
@@ -22,6 +22,7 @@ class ModelPatchEntryHelper {
* ID: «entry.context.identifier»
* Type: «entry.type.identifier»
'''
+
dispatch def String stringRepresentation(AttributeEntry entry) '''
AttributeEntry
* Direction: «entry.direction.name»
@@ -29,6 +30,7 @@ class ModelPatchEntryHelper {
* Attribute: «entry.feature.identifier»
* Value: «entry.value»
'''
+
dispatch def String stringRepresentation(ReferenceEntry entry) '''
ReferenceEntry
* Direction: «entry.direction.name»
@@ -36,6 +38,7 @@ class ModelPatchEntryHelper {
* Reference: «entry.feature.identifier»
* Target: «entry.target.identifier»
'''
+
dispatch def String stringRepresentation(ModelPatchEntry entry) {
return entry.toString
}
diff --git a/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/utils/ModelPatchLabelProvider.xtend b/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/utils/ModelPatchLabelProvider.xtend
index 085841c..f98b78c 100644
--- a/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/utils/ModelPatchLabelProvider.xtend
+++ b/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/utils/ModelPatchLabelProvider.xtend
@@ -44,16 +44,18 @@ class ModelPatchLabelProvider implements ILabelProvider {
override removeListener(ILabelProviderListener listener) {}
-
private dispatch def String getLabel(ModelPatch patch) {
return '''ModelPatch [«patch.entries.size»]'''
}
+
private dispatch def String getLabel(ModelPatchEntry entry) {
return entryLabelProvider.getLabel(entry)
}
+
private dispatch def String getLabel(IdentifiableWrapper wrapper) {
return '''«wrapper.name»: «wrapper.ident»'''
}
+
private dispatch def String getLabel(Object object) {
return object.toString
}
diff --git a/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/utils/ModelpatchApplicationDTO.xtend b/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/utils/ModelpatchApplicationDTO.xtend
index 743ed9d..d440eb0 100644
--- a/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/utils/ModelpatchApplicationDTO.xtend
+++ b/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/utils/ModelpatchApplicationDTO.xtend
@@ -10,6 +10,7 @@
*******************************************************************************/
package org.eclipse.emf.diffmerge.patch.ui.utils
+import com.google.common.io.Files
import java.io.File
import org.apache.log4j.Logger
import org.eclipse.core.runtime.IProgressMonitor
@@ -69,19 +70,20 @@ class ModelpatchApplicationDTO {
Command lastCommand
EditingDomain editingDomain
-
-
new(Resource originalModel) {
checkNotNull(originalModel, "Model cannot be null.")
- this.originalModel=originalModel
+ this.originalModel = originalModel
}
def boolean loadPatch(String patchPath) {
- if(!patchPath.isNullOrEmpty) {
+ if (!patchPath.isNullOrEmpty) {
try {
- originalModelPatch = serializationType.selectedSerializer.load(new File(patchPath))
+ val file = new File(patchPath)
+ val serializerByFileExtension = serializerProvider.getSerializerByFileExtension(Files.getFileExtension(patchPath))
+ val serializer = serializerByFileExtension ?: serializationType.selectedSerializer
+ originalModelPatch = (serializer).load(file)
modifiedModelPatch = originalModelPatch
- } catch(Exception ex) {
+ } catch (Exception ex) {
originalModelPatch = null
this.patchPath = patchPath
throw ex
@@ -95,14 +97,14 @@ class ModelpatchApplicationDTO {
}
def ModelPatch modifyPatch(boolean isReverse, IModelPatchEntryFilter... filters) {
- if(isReverse) {
+ if (isReverse) {
modifiedModelPatch = ModelPatchReverser.INSTANCE.reverse(originalModelPatch)
} else {
modifiedModelPatch = originalModelPatch
}
- if(filters != null) {
- for(filter : filters) {
- if(filter!=null) modifiedModelPatch = modifiedModelPatch.applyFilter(filter)
+ if (filters !== null) {
+ for (filter : filters) {
+ if(filter !== null) modifiedModelPatch = modifiedModelPatch.applyFilter(filter)
}
}
return modifiedModelPatch
@@ -169,19 +171,17 @@ class ModelpatchApplicationDTO {
}
def void undoEDMModifications() {
- if(lastCommand==null) {
- while(lastCommand!=editingDomain.commandStack.undoCommand && editingDomain.commandStack.canUndo) {
+ if (lastCommand === null) {
+ while (lastCommand != editingDomain.commandStack.undoCommand && editingDomain.commandStack.canUndo) {
editingDomain.commandStack.undo
}
} else {
- while(editingDomain.commandStack.canUndo) {
+ while (editingDomain.commandStack.canUndo) {
editingDomain.commandStack.undo
}
}
}
-
-
private def PatchApplication applyPatch(Resource resource) {
val patchApplier = preparePatchApplier(resource.resourceSet)
@@ -192,7 +192,8 @@ class ModelpatchApplicationDTO {
val EMFModelAccess access = modelAccessType.getSelectedModelAccess(resourceSet)
val patchApplier = new EMFModelPatchApplier(access)
- val navigationHelper = ViatraBaseFactory.getInstance().createNavigationHelper(resourceSet,new BaseIndexOptions(false, IndexingLevel.FULL), Logger.getLogger(class));
+ val navigationHelper = ViatraBaseFactory.getInstance().createNavigationHelper(resourceSet,
+ new BaseIndexOptions(false, IndexingLevel.FULL), Logger.getLogger(class));
patchApplier.locator.EObjectLocator = new BaseIndexEObjectLocator(navigationHelper)
patchApplier
}
@@ -205,7 +206,7 @@ class ModelpatchApplicationDTO {
private def Resource copyTo(Resource copiable, Resource target) {
val copier = new EcoreUtil.Copier
- if(target.contents!=null && target.contents.size>0) {
+ if (target.contents !== null && target.contents.size > 0) {
target.contents.clear
}
target.contents.addAll(copier.copyAll(copiable.contents))
diff --git a/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/utils/SerializationTypes.java b/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/utils/PersistenceTypes.java
index bec2e0b..29301cd 100644
--- a/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/utils/SerializationTypes.java
+++ b/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/utils/PersistenceTypes.java
@@ -10,8 +10,6 @@
*******************************************************************************/
package org.eclipse.emf.diffmerge.patch.ui.utils;
-public enum SerializationTypes {
- JACKSON,
- GSON,
- BSON
+public enum PersistenceTypes {
+ GSON, EMF
}
diff --git a/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/utils/SerializerProvider.xtend b/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/utils/SerializerProvider.xtend
index be0e8f0..534c14f 100644
--- a/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/utils/SerializerProvider.xtend
+++ b/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/utils/SerializerProvider.xtend
@@ -10,22 +10,39 @@
*******************************************************************************/
package org.eclipse.emf.diffmerge.patch.ui.utils
+import org.eclipse.emf.diffmerge.patch.persistence.emf.EMFModelPatchSerializer
+import org.eclipse.emf.diffmerge.patch.serializer.IModelPatchSerializer
import org.eclipse.emf.diffmerge.patch.serializer.gson.GsonModelPatchSerializer
class SerializerProvider {
- public def org.eclipse.emf.diffmerge.patch.serializer.IModelPatchSerializer getSelectedSerializer(String preference){
- val accessType = SerializationTypes.valueOf(preference)
+ def IModelPatchSerializer getSelectedSerializer(String typeName) {
+ val accessType = PersistenceTypes.valueOf(typeName)
- var org.eclipse.emf.diffmerge.patch.serializer.IModelPatchSerializer serializer
- switch (accessType) {
+ return accessType.selectedSerializer
+ }
+
+ def IModelPatchSerializer getSelectedSerializer(PersistenceTypes type) {
+ var IModelPatchSerializer serializer
+ switch (type) {
case GSON: {
serializer = GsonModelPatchSerializer.create(this.class.classLoader)
-
}
-
+ case EMF: {
+ serializer = new EMFModelPatchSerializer
+ }
default: {
serializer = GsonModelPatchSerializer.create(this.class.classLoader)
}
}
+ return serializer
+ }
+
+ def IModelPatchSerializer getSerializerByFileExtension(String fileExtension) {
+ val serializer = PersistenceTypes.values.map [
+ it.selectedSerializer
+ ].findFirst [
+ preferredFileExtension == fileExtension
+ ]
+ return serializer
}
}
diff --git a/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/wizards/ModelpatchApplicationWizard.xtend b/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/wizards/ModelpatchApplicationWizard.xtend
index f36e168..04c933c 100644
--- a/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/wizards/ModelpatchApplicationWizard.xtend
+++ b/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/wizards/ModelpatchApplicationWizard.xtend
@@ -45,21 +45,21 @@ class ModelpatchApplicationWizard extends Wizard {
}
override canFinish() {
- return container.currentPage==resultPage || (container.currentPage==edmPage && edmPage.canFinish)
+ return container.currentPage == resultPage || (container.currentPage == edmPage && edmPage.canFinish)
}
override boolean performFinish() {
- if(container.currentPage == resultPage) {
+ if (container.currentPage == resultPage) {
dto.saveModel
return true
- } else if(container.currentPage == edmPage) {
+ } else if (container.currentPage == edmPage) {
return true
}
return false
}
override performCancel() {
- if(container.currentPage == edmPage) {
+ if (container.currentPage == edmPage) {
dto.undoEDMModifications
}
super.performCancel()
@@ -67,7 +67,7 @@ class ModelpatchApplicationWizard extends Wizard {
override IWizardPage getNextPage(IWizardPage currentPage) {
try {
- switch(currentPage) {
+ switch (currentPage) {
case patchLoadingPage: {
dto.loadPatch(patchLoadingPage.getSelectedFilePath())
return patchModificationPage
diff --git a/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/wizards/pages/ModelpatchEDMWizardPage.java b/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/wizards/pages/ModelpatchEDMWizardPage.java
index 12facef..8080ea0 100644
--- a/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/wizards/pages/ModelpatchEDMWizardPage.java
+++ b/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/wizards/pages/ModelpatchEDMWizardPage.java
@@ -25,75 +25,78 @@ import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
public class ModelpatchEDMWizardPage extends WizardPage {
- ModelpatchApplicationDTO dto;
- public boolean canFinish = false;
+ ModelpatchApplicationDTO dto;
+ public boolean canFinish = false;
- ComparisonViewer comp;
- /**
- * Create the wizard.
- */
- public ModelpatchEDMWizardPage(ModelpatchApplicationDTO dto) {
- super("EDM Wizard Page");
- setTitle("Differences");
- setDescription("You can select changes which you want to apply. The target model will be only modified if you explicitly merge changes from the synthesis panel.");
- this.dto = dto;
- }
+ ComparisonViewer comp;
- /**
- * Create contents of the wizard.
- * @param parent
- */
- public void createControl(Composite parent) {
- Composite container = new Composite(parent, SWT.NULL);
+ /**
+ * Create the wizard.
+ */
+ public ModelpatchEDMWizardPage(ModelpatchApplicationDTO dto) {
+ super("EDM Wizard Page");
+ setTitle("Differences");
+ setDescription(
+ "You can select changes which you want to apply. The target model will be only modified if you explicitly merge changes from the synthesis panel.");
+ this.dto = dto;
+ }
- setControl(container);
- container.setLayout(new GridLayout(1, false));
- comp = new ComparisonViewer(container) {
- @Override
- protected void setupToolBars() {
- // We only need the lower tool bars
- setupToolsDetails(_viewerFeatures.getToolbar());
- setupToolsDetailsSide(_viewerValuesLeft.getToolbar(), true);
- setupToolsDetailsSide(_viewerValuesRight.getToolbar(), false);
- addSelectionChangedListener(new ISelectionChangedListener() {
- /**
- * @see org.eclipse.jface.viewers.ISelectionChangedListener#selectionChanged(org.eclipse.jface.viewers.SelectionChangedEvent)
- */
- public void selectionChanged(SelectionChangedEvent event_p) {
- refreshTools();
- }
- });
- refreshTools();
- addPropertyChangeListener(new IPropertyChangeListener() {
- /**
- * @see org.eclipse.jface.util.IPropertyChangeListener#propertyChange(org.eclipse.jface.util.PropertyChangeEvent)
- */
- public void propertyChange(PropertyChangeEvent event_p) {
- if (CompareEditorInput.DIRTY_STATE.equals(event_p.getProperty()) && event_p.getNewValue() instanceof Boolean && ((Boolean)event_p.getNewValue()).booleanValue()) {
- canFinish = true;
- setPageComplete(true);
- }
- }
- });
- }
- };
- comp.getControl().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
- }
+ /**
+ * Create contents of the wizard.
+ *
+ * @param parent
+ */
+ public void createControl(Composite parent) {
+ Composite container = new Composite(parent, SWT.NULL);
- @Override
- public void setVisible(boolean visible) {
- if(visible==true) {
- dto.prepareDiffNode();
- dto.diffNode.updateDifferenceNumbers();
- comp.setInput(dto.diffNode);
- }
- super.setVisible(visible);
- }
+ setControl(container);
+ container.setLayout(new GridLayout(1, false));
+ comp = new ComparisonViewer(container) {
+ @Override
+ protected void setupToolBars() {
+ // We only need the lower tool bars
+ setupToolsDetails(_viewerFeatures.getToolbar());
+ setupToolsDetailsSide(_viewerValuesLeft.getToolbar(), true);
+ setupToolsDetailsSide(_viewerValuesRight.getToolbar(), false);
+ addSelectionChangedListener(new ISelectionChangedListener() {
+ /**
+ * @see org.eclipse.jface.viewers.ISelectionChangedListener#selectionChanged(org.eclipse.jface.viewers.SelectionChangedEvent)
+ */
+ public void selectionChanged(SelectionChangedEvent event_p) {
+ refreshTools();
+ }
+ });
+ refreshTools();
+ addPropertyChangeListener(new IPropertyChangeListener() {
+ /**
+ * @see org.eclipse.jface.util.IPropertyChangeListener#propertyChange(org.eclipse.jface.util.PropertyChangeEvent)
+ */
+ public void propertyChange(PropertyChangeEvent event_p) {
+ if (CompareEditorInput.DIRTY_STATE.equals(event_p.getProperty()) && event_p.getNewValue() instanceof Boolean
+ && ((Boolean) event_p.getNewValue()).booleanValue()) {
+ canFinish = true;
+ setPageComplete(true);
+ }
+ }
+ });
+ }
+ };
+ comp.getControl().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+ }
- @Override
- public IWizardPage getPreviousPage() {
- return null;
+ @Override
+ public void setVisible(boolean visible) {
+ if (visible == true) {
+ dto.prepareDiffNode();
+ dto.diffNode.updateDifferenceNumbers();
+ comp.setInput(dto.diffNode);
}
+ super.setVisible(visible);
+ }
+ @Override
+ public IWizardPage getPreviousPage() {
+ return null;
+ }
}
diff --git a/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/wizards/pages/ModelpatchFilteringWizardPage.java b/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/wizards/pages/ModelpatchFilteringWizardPage.java
index d0731f4..5f4ebf2 100644
--- a/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/wizards/pages/ModelpatchFilteringWizardPage.java
+++ b/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/wizards/pages/ModelpatchFilteringWizardPage.java
@@ -43,202 +43,208 @@ import org.eclipse.emf.diffmerge.patch.ui.utils.ModelPatchLabelProvider;
import org.eclipse.emf.diffmerge.patch.ui.utils.ModelpatchApplicationDTO;
public class ModelpatchFilteringWizardPage extends WizardPage {
- public static final String[] SUPPORTED_PATCH_FILE_EXTENSIONS = { "*.modelpatch" };
- public static final String ID = "org.eclipse.emf.diffmerge.patch";
-
- // Data fields
- private DataBindingContext m_bindingContext;
- private ModelpatchApplicationDTO dto;
- private java.util.List<IModelPatchEntryFilter> filters = new ArrayList<>();
- private boolean isFiltered = false;
-
- // UI fields
- private Text txtPatchFilePath;
-
- private TreeViewer tvParsedPatch;
- private Button btnReversePatch;
- private Button btnFiltering;
- private Button btnAdd;
- private Button btnRemove;
- private List lFilters;
-
- /**
- * Create the dialog.
- * @param patch
- *
- * @param parentShell
- */
- public ModelpatchFilteringWizardPage(ModelpatchApplicationDTO dto) {
- super("Modify patch");
- this.setTitle("Modify Patch");
- this.dto = dto;
- }
-
- /**
- * Create contents of the dialog.
- *
- * @param parent
- */
- public void createControl(Composite parent) {
- Composite container = new Composite(parent, SWT.NULL);
- setControl(container);
- container.setLayout(new GridLayout(1, false));
-
- Composite compFile = new Composite(container, SWT.NONE);
- compFile.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
- GridLayout gl_compFile = new GridLayout(2, false);
- gl_compFile.marginWidth = 0;
- gl_compFile.marginHeight = 0;
- compFile.setLayout(gl_compFile);
-
- CLabel lblPatchFile = new CLabel(compFile, SWT.NONE);
- lblPatchFile.setBounds(0, 0, 61, 21);
- lblPatchFile.setText("Patch file:");
-
- txtPatchFilePath = new Text(compFile, SWT.BORDER);
- txtPatchFilePath.setEditable(false);
- txtPatchFilePath.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
- txtPatchFilePath.setBounds(0, 0, 76, 21);
-
- btnReversePatch = new Button(container, SWT.CHECK);
- btnReversePatch.addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(SelectionEvent e) {
- reverse = btnReversePatch.getSelection();
- refreshPatchViewer();
- }
- });
- btnReversePatch.setText("Reverse");
-
- btnFiltering = new Button(container, SWT.CHECK);
- btnFiltering.addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(SelectionEvent e) {
- isFiltered = ((Button)btnFiltering).getSelection();
- refreshPatchViewer();
- }
- });
- btnFiltering.setText("Filtering");
-
- Composite compFiltering = new Composite(container, SWT.NONE);
- compFiltering.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
- GridLayout gl_compFiltering = new GridLayout(2, false);
- gl_compFiltering.marginWidth = 0;
- gl_compFiltering.marginHeight = 0;
- compFiltering.setLayout(gl_compFiltering);
-
- final ListViewer lvFilters = new ListViewer(compFiltering, SWT.BORDER | SWT.V_SCROLL);
- lFilters = lvFilters.getList();
- lFilters.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 2));
- lvFilters.setContentProvider(new ModelPatchEntryFilterContentProvider());
- lvFilters.setLabelProvider(new ModelPatchEntryFilterLabelProvider());
- lvFilters.setInput(filters);
-
- btnAdd = new Button(compFiltering, SWT.NONE);
- btnAdd.addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(SelectionEvent e) {
- ModelpatchEntryFilterCreationDialog dialog = new ModelpatchEntryFilterCreationDialog(getShell());
- dialog.setBlockOnOpen(true);
- dialog.setTitle("Add filter");
- dialog.open();
- IModelPatchEntryFilter filter = dialog.getCreatedFilter();
- if(filter!=null) {
- filters.add(filter);
- lvFilters.refresh();
- refreshPatchViewer();
- }
- }
- });
- btnAdd.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
- btnAdd.setText("Add");
-
- btnRemove = new Button(compFiltering, SWT.NONE);
- btnRemove.addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(SelectionEvent e) {
- for(Object selectedElement : lvFilters.getStructuredSelection().toList()) {
- filters.remove(selectedElement);
- }
- lvFilters.refresh();
- refreshPatchViewer();
- }
- });
- btnRemove.setLayoutData(new GridData(SWT.FILL, SWT.TOP, false, false, 1, 1));
- btnRemove.setText("Remove");
-
- lblSequenceOfPatch = new Label(container, SWT.NONE);
- lblSequenceOfPatch.setText("Sequence of patch entries:");
-
- tvParsedPatch = new TreeViewer(container, SWT.BORDER);
- tvParsedPatch.setContentProvider(new ModelPatchContentProvider());
- tvParsedPatch.setLabelProvider(new ModelPatchLabelProvider(new DescriptiveEntryLabelProvider()));
- Tree treeParsedPatch = tvParsedPatch.getTree();
- treeParsedPatch.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
- treeParsedPatch.setVisible(true);
-
- m_bindingContext = initDataBindings();
- }
-
- private void refreshPatchViewer() {
- dto.modifyPatch(btnReversePatch.getSelection(), getFilter());
- tvParsedPatch.setInput(dto.modifiedModelPatch);
- tvParsedPatch.refresh();
- }
-
- private boolean direct;
- public boolean isDirect() {
- return direct;
- }
- private boolean reverse;
- private Label lblSequenceOfPatch;
- public boolean isReverse() {
- return reverse;
- }
-
- public IModelPatchEntryFilter getFilter() {
- if(isFiltered) {
- if(filters.size()>1) {
- return new ComplexEntryFilter(ComplexMPEFilterType.OR, filters.toArray(new IModelPatchEntryFilter[] {}));
- } else if(filters.size()==1) {
- return filters.get(0);
- }
+ public static final String[] SUPPORTED_PATCH_FILE_EXTENSIONS = { "*.modelpatch" };
+ public static final String ID = "org.eclipse.emf.diffmerge.patch";
+
+ // Data fields
+ private DataBindingContext m_bindingContext;
+ private ModelpatchApplicationDTO dto;
+ private java.util.List<IModelPatchEntryFilter> filters = new ArrayList<>();
+ private boolean isFiltered = false;
+
+ // UI fields
+ private Text txtPatchFilePath;
+
+ private TreeViewer tvParsedPatch;
+ private Button btnReversePatch;
+ private Button btnFiltering;
+ private Button btnAdd;
+ private Button btnRemove;
+ private List lFilters;
+
+ /**
+ * Create the dialog.
+ *
+ * @param patch
+ *
+ * @param parentShell
+ */
+ public ModelpatchFilteringWizardPage(ModelpatchApplicationDTO dto) {
+ super("Modify patch");
+ this.setTitle("Modify Patch");
+ this.dto = dto;
+ }
+
+ /**
+ * Create contents of the dialog.
+ *
+ * @param parent
+ */
+ public void createControl(Composite parent) {
+ Composite container = new Composite(parent, SWT.NULL);
+ setControl(container);
+ container.setLayout(new GridLayout(1, false));
+
+ Composite compFile = new Composite(container, SWT.NONE);
+ compFile.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+ GridLayout gl_compFile = new GridLayout(2, false);
+ gl_compFile.marginWidth = 0;
+ gl_compFile.marginHeight = 0;
+ compFile.setLayout(gl_compFile);
+
+ CLabel lblPatchFile = new CLabel(compFile, SWT.NONE);
+ lblPatchFile.setBounds(0, 0, 61, 21);
+ lblPatchFile.setText("Patch file:");
+
+ txtPatchFilePath = new Text(compFile, SWT.BORDER);
+ txtPatchFilePath.setEditable(false);
+ txtPatchFilePath.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+ txtPatchFilePath.setBounds(0, 0, 76, 21);
+
+ btnReversePatch = new Button(container, SWT.CHECK);
+ btnReversePatch.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ reverse = btnReversePatch.getSelection();
+ refreshPatchViewer();
+ }
+ });
+ btnReversePatch.setText("Reverse");
+
+ btnFiltering = new Button(container, SWT.CHECK);
+ btnFiltering.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ isFiltered = ((Button) btnFiltering).getSelection();
+ refreshPatchViewer();
+ }
+ });
+ btnFiltering.setText("Filtering");
+
+ Composite compFiltering = new Composite(container, SWT.NONE);
+ compFiltering.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+ GridLayout gl_compFiltering = new GridLayout(2, false);
+ gl_compFiltering.marginWidth = 0;
+ gl_compFiltering.marginHeight = 0;
+ compFiltering.setLayout(gl_compFiltering);
+
+ final ListViewer lvFilters = new ListViewer(compFiltering, SWT.BORDER | SWT.V_SCROLL);
+ lFilters = lvFilters.getList();
+ lFilters.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 2));
+ lvFilters.setContentProvider(new ModelPatchEntryFilterContentProvider());
+ lvFilters.setLabelProvider(new ModelPatchEntryFilterLabelProvider());
+ lvFilters.setInput(filters);
+
+ btnAdd = new Button(compFiltering, SWT.NONE);
+ btnAdd.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ ModelpatchEntryFilterCreationDialog dialog = new ModelpatchEntryFilterCreationDialog(getShell());
+ dialog.setBlockOnOpen(true);
+ dialog.setTitle("Add filter");
+ dialog.open();
+ IModelPatchEntryFilter filter = dialog.getCreatedFilter();
+ if (filter != null) {
+ filters.add(filter);
+ lvFilters.refresh();
+ refreshPatchViewer();
}
- return null;
- }
-
- public void setPatchPath(String patchPath) {
- txtPatchFilePath.setText(patchPath);
- }
-
- @Override
- public void setVisible(boolean visible) {
- if(visible) {
- refreshPatchViewer();
- setPatchPath(org.eclipse.core.runtime.Path.fromOSString(dto.patchPath).lastSegment());
+ }
+ });
+ btnAdd.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
+ btnAdd.setText("Add");
+
+ btnRemove = new Button(compFiltering, SWT.NONE);
+ btnRemove.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ for (Object selectedElement : lvFilters.getStructuredSelection().toList()) {
+ filters.remove(selectedElement);
}
- super.setVisible(visible);
- }
-
- protected DataBindingContext initDataBindings() {
- DataBindingContext bindingContext = new DataBindingContext();
- IObservableValue observeSelectionBtnFilteringObserveWidget = WidgetProperties.selection().observe(btnFiltering);
- //
- IObservableValue observeEnabledBtnAddObserveWidget = WidgetProperties.enabled().observe(btnAdd);
- bindingContext.bindValue(observeEnabledBtnAddObserveWidget, observeSelectionBtnFilteringObserveWidget, null, null);
- //
- IObservableValue observeEnabledBtnRemoveObserveWidget = WidgetProperties.enabled().observe(btnRemove);
- bindingContext.bindValue(observeEnabledBtnRemoveObserveWidget, observeSelectionBtnFilteringObserveWidget, null, null);
- //
- IObservableValue observeEnabledLFiltersObserveWidget = WidgetProperties.enabled().observe(lFilters);
- bindingContext.bindValue(observeEnabledLFiltersObserveWidget, observeSelectionBtnFilteringObserveWidget, null, null);
- //
- return bindingContext;
+ lvFilters.refresh();
+ refreshPatchViewer();
+ }
+ });
+ btnRemove.setLayoutData(new GridData(SWT.FILL, SWT.TOP, false, false, 1, 1));
+ btnRemove.setText("Remove");
+
+ lblSequenceOfPatch = new Label(container, SWT.NONE);
+ lblSequenceOfPatch.setText("Sequence of patch entries:");
+
+ tvParsedPatch = new TreeViewer(container, SWT.BORDER);
+ tvParsedPatch.setContentProvider(new ModelPatchContentProvider());
+ tvParsedPatch.setLabelProvider(new ModelPatchLabelProvider(new DescriptiveEntryLabelProvider()));
+ Tree treeParsedPatch = tvParsedPatch.getTree();
+ treeParsedPatch.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
+ treeParsedPatch.setVisible(true);
+
+ m_bindingContext = initDataBindings();
+ }
+
+ private void refreshPatchViewer() {
+ dto.modifyPatch(btnReversePatch.getSelection(), getFilter());
+ tvParsedPatch.setInput(dto.modifiedModelPatch);
+ tvParsedPatch.refresh();
+ }
+
+ private boolean direct;
+
+ public boolean isDirect() {
+ return direct;
+ }
+
+ private boolean reverse;
+ private Label lblSequenceOfPatch;
+
+ public boolean isReverse() {
+ return reverse;
+ }
+
+ public IModelPatchEntryFilter getFilter() {
+ if (isFiltered) {
+ if (filters.size() > 1) {
+ return new ComplexEntryFilter(ComplexMPEFilterType.OR, filters.toArray(new IModelPatchEntryFilter[] {}));
+ } else if (filters.size() == 1) {
+ return filters.get(0);
+ }
}
-
- @Override
- public void dispose() {
- m_bindingContext.dispose();
- super.dispose();
+ return null;
+ }
+
+ public void setPatchPath(String patchPath) {
+ txtPatchFilePath.setText(patchPath);
+ }
+
+ @Override
+ public void setVisible(boolean visible) {
+ if (visible) {
+ refreshPatchViewer();
+ setPatchPath(org.eclipse.core.runtime.Path.fromOSString(dto.patchPath).lastSegment());
}
+ super.setVisible(visible);
+ }
+
+ protected DataBindingContext initDataBindings() {
+ DataBindingContext bindingContext = new DataBindingContext();
+ IObservableValue observeSelectionBtnFilteringObserveWidget = WidgetProperties.selection().observe(btnFiltering);
+ //
+ IObservableValue observeEnabledBtnAddObserveWidget = WidgetProperties.enabled().observe(btnAdd);
+ bindingContext.bindValue(observeEnabledBtnAddObserveWidget, observeSelectionBtnFilteringObserveWidget, null, null);
+ //
+ IObservableValue observeEnabledBtnRemoveObserveWidget = WidgetProperties.enabled().observe(btnRemove);
+ bindingContext.bindValue(observeEnabledBtnRemoveObserveWidget, observeSelectionBtnFilteringObserveWidget, null,
+ null);
+ //
+ IObservableValue observeEnabledLFiltersObserveWidget = WidgetProperties.enabled().observe(lFilters);
+ bindingContext.bindValue(observeEnabledLFiltersObserveWidget, observeSelectionBtnFilteringObserveWidget, null,
+ null);
+ //
+ return bindingContext;
+ }
+
+ @Override
+ public void dispose() {
+ m_bindingContext.dispose();
+ super.dispose();
+ }
}
diff --git a/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/wizards/pages/ModelpatchLoadingPatchWizardPage.java b/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/wizards/pages/ModelpatchLoadingPatchWizardPage.java
index 52573c6..6f767b4 100644
--- a/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/wizards/pages/ModelpatchLoadingPatchWizardPage.java
+++ b/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/wizards/pages/ModelpatchLoadingPatchWizardPage.java
@@ -24,95 +24,98 @@ import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
public class ModelpatchLoadingPatchWizardPage extends WizardPage {
- private ModelpatchApplicationDTO dto;
- private Text txtPatchFilePath;
- private String filePath;
-
- /**
- * Create the wizard.
- */
- public ModelpatchLoadingPatchWizardPage(ModelpatchApplicationDTO dto) {
- super("Load Patch File");
- setTitle("Load Patch File");
- setDescription("Select the applicable patch file.");
- this.dto = dto;
- }
-
- /**
- * Create contents of the wizard.
- * @param parent
- */
- public void createControl(Composite parent) {
- Composite container = new Composite(parent, SWT.NULL);
- final DialogFactory dialogFactory = new DialogFactory(getShell());
-
- setControl(container);
- container.setLayout(new GridLayout(4, false));
-
- Label lblPatchFile = new Label(container, SWT.NONE);
- lblPatchFile.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
- lblPatchFile.setText("Patch file:");
-
- txtPatchFilePath = new Text(container, SWT.BORDER);
- txtPatchFilePath.setEditable(false);
- txtPatchFilePath.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
-
- Button btnBrowseWorkspace = new Button(container, SWT.NONE);
- btnBrowseWorkspace.setText("Browse Workspace...");
- btnBrowseWorkspace.addSelectionListener(new SelectionListener() {
-
- @Override
- public void widgetSelected(SelectionEvent e) {
- String path = dialogFactory.openWorkspaceFileDialog("Patch File Selection");
- if (path != null) {
- txtPatchFilePath.setText(path);
- } else {
- txtPatchFilePath.setText("");
- }
- filePath = path;
- setPageComplete(checkPatchFile(path));
- }
-
- @Override
- public void widgetDefaultSelected(SelectionEvent e) {}
- });
-
- Button btnBrowseFileSystem = new Button(container, SWT.NONE);
- btnBrowseFileSystem.setText("Browse File System...");
-
- btnBrowseFileSystem.addSelectionListener(new SelectionListener() {
-
- @Override
- public void widgetSelected(SelectionEvent e) {
- String path = dialogFactory.openFileDialog("Patch File Selection", new String[] {"modelpatch"});
- if (path != null) {
- txtPatchFilePath.setText(path);
- } else {
- txtPatchFilePath.setText("");
- }
- filePath = path;
- setPageComplete(checkPatchFile(path));
- }
-
- @Override
- public void widgetDefaultSelected(SelectionEvent e) {}
- });
- setPageComplete(false);
- }
-
- public String getSelectedFilePath() {
- return filePath;
- }
-
- private boolean checkPatchFile(String path) {
- boolean loadedSuccessfully = false;
- try{
- loadedSuccessfully = dto.loadPatch(path);
- setErrorMessage(null);
- } catch(Exception ex) {
- setErrorMessage(ex.getMessage());
+ private ModelpatchApplicationDTO dto;
+ private Text txtPatchFilePath;
+ private String filePath;
+
+ /**
+ * Create the wizard.
+ */
+ public ModelpatchLoadingPatchWizardPage(ModelpatchApplicationDTO dto) {
+ super("Load Patch File");
+ setTitle("Load Patch File");
+ setDescription("Select the applicable patch file.");
+ this.dto = dto;
+ }
+
+ /**
+ * Create contents of the wizard.
+ *
+ * @param parent
+ */
+ public void createControl(Composite parent) {
+ Composite container = new Composite(parent, SWT.NULL);
+ final DialogFactory dialogFactory = new DialogFactory(getShell());
+
+ setControl(container);
+ container.setLayout(new GridLayout(4, false));
+
+ Label lblPatchFile = new Label(container, SWT.NONE);
+ lblPatchFile.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
+ lblPatchFile.setText("Patch file:");
+
+ txtPatchFilePath = new Text(container, SWT.BORDER);
+ txtPatchFilePath.setEditable(false);
+ txtPatchFilePath.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+
+ Button btnBrowseWorkspace = new Button(container, SWT.NONE);
+ btnBrowseWorkspace.setText("Browse Workspace...");
+ btnBrowseWorkspace.addSelectionListener(new SelectionListener() {
+
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ String path = dialogFactory.openWorkspaceFileDialog("Patch File Selection");
+ if (path != null) {
+ txtPatchFilePath.setText(path);
+ } else {
+ txtPatchFilePath.setText("");
+ }
+ filePath = path;
+ setPageComplete(checkPatchFile(path));
+ }
+
+ @Override
+ public void widgetDefaultSelected(SelectionEvent e) {
+ }
+ });
+
+ Button btnBrowseFileSystem = new Button(container, SWT.NONE);
+ btnBrowseFileSystem.setText("Browse File System...");
+
+ btnBrowseFileSystem.addSelectionListener(new SelectionListener() {
+
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ String path = dialogFactory.openFileDialog("Patch File Selection", new String[] { "modelpatch" });
+ if (path != null) {
+ txtPatchFilePath.setText(path);
+ } else {
+ txtPatchFilePath.setText("");
}
- return loadedSuccessfully;
+ filePath = path;
+ setPageComplete(checkPatchFile(path));
+ }
+
+ @Override
+ public void widgetDefaultSelected(SelectionEvent e) {
+ }
+ });
+ setPageComplete(false);
+ }
+
+ public String getSelectedFilePath() {
+ return filePath;
+ }
+
+ private boolean checkPatchFile(String path) {
+ boolean loadedSuccessfully = false;
+ try {
+ loadedSuccessfully = dto.loadPatch(path);
+ setErrorMessage(null);
+ } catch (Exception ex) {
+ setErrorMessage(ex.getMessage());
}
+ return loadedSuccessfully;
+ }
}
diff --git a/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/wizards/pages/ModelpatchResultWizardPage.java b/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/wizards/pages/ModelpatchResultWizardPage.java
index 0f3b66b..628679d 100644
--- a/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/wizards/pages/ModelpatchResultWizardPage.java
+++ b/plugins/org.eclipse.emf.diffmerge.patch.ui/src/org/eclipse/emf/diffmerge/patch/ui/wizards/pages/ModelpatchResultWizardPage.java
@@ -40,184 +40,199 @@ import org.eclipse.emf.diffmerge.patch.ui.utils.IEntryLabelProvider;
import org.eclipse.emf.diffmerge.patch.ui.utils.ModelpatchApplicationDTO;
public class ModelpatchResultWizardPage extends WizardPage {
- IEntryLabelProvider entryLabelProvider = new DefaultEntryLabelProvider();
-
- private Tree tblDiagnostics;
- private ModelpatchApplicationDTO dto;
- private StackLayout stack;
- private TreeViewer tvDiagnostics;
- private Text lblNoProblem;
- private Composite composite;
- private Text txtDescription;
- private Text txtRejects;
- private Composite cmpDiagnostics;
-
- /**
- * Create the dialog.
- * @param dto
- */
- public ModelpatchResultWizardPage(ModelpatchApplicationDTO dto) {
- super("Patch application results");
- setTitle("Patch Application Resolution Result");
- this.dto = dto;
+ IEntryLabelProvider entryLabelProvider = new DefaultEntryLabelProvider();
+
+ private Tree tblDiagnostics;
+ private ModelpatchApplicationDTO dto;
+ private StackLayout stack;
+ private TreeViewer tvDiagnostics;
+ private Text lblNoProblem;
+ private Composite composite;
+ private Text txtDescription;
+ private Text txtRejects;
+ private Composite cmpDiagnostics;
+
+ /**
+ * Create the dialog.
+ *
+ * @param dto
+ */
+ public ModelpatchResultWizardPage(ModelpatchApplicationDTO dto) {
+ super("Patch application results");
+ setTitle("Patch Application Resolution Result");
+ this.dto = dto;
+ }
+
+ @Override
+ public void setVisible(boolean visible) {
+ if (visible) {
+ dto.applyPatch();
+ final List<ModelPatchDiagnosticElement> input = getTableInput();
+ if (input.size() == 0) {
+ stack.topControl = lblNoProblem;
+ } else {
+ tvDiagnostics.setInput(input);
+ stack.topControl = cmpDiagnostics;
+ }
}
-
- @Override
- public void setVisible(boolean visible) {
- if(visible) {
- dto.applyPatch();
- final List<ModelPatchDiagnosticElement> input = getTableInput();
- if(input.size()==0) {
- stack.topControl = lblNoProblem;
- } else {
- tvDiagnostics.setInput(input);
- stack.topControl = cmpDiagnostics;
- }
- }
- composite.layout();
- super.setVisible(visible);
+ composite.layout();
+ super.setVisible(visible);
+ }
+
+ private List<ModelPatchDiagnosticElement> getTableInput() {
+ if (dto.patchApplication != null && dto.patchApplication.getDiagnostics() != null
+ && dto.patchApplication.getDiagnostics().getDiagnosticElements() != null) {
+ List<ModelPatchDiagnosticElement> elements = dto.patchApplication.getDiagnostics().getDiagnosticElements();
+ return elements;
}
-
- private List<ModelPatchDiagnosticElement> getTableInput() {
- if(dto.patchApplication!=null && dto.patchApplication.getDiagnostics()!=null && dto.patchApplication.getDiagnostics().getDiagnosticElements()!=null) {
- List<ModelPatchDiagnosticElement> elements = dto.patchApplication.getDiagnostics().getDiagnosticElements();
- return elements;
+ return new ArrayList<>();
+ }
+
+ /**
+ * Create contents of the dialog.
+ *
+ * @param parent
+ */
+ @Override
+ public void createControl(Composite parent) {
+ Composite container = new Composite(parent, SWT.NULL);
+ setControl(container);
+ container.setLayout(new GridLayout(1, false));
+
+ Label lblResult = new Label(container, SWT.NONE);
+ lblResult.setFont(SWTResourceManager.getFont("Segoe UI", 14, SWT.BOLD));
+ lblResult.setText("Result");
+
+ composite = new Composite(container, SWT.NONE);
+ composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
+ stack = new StackLayout();
+ composite.setLayout(stack);
+
+ lblNoProblem = new Text(composite, SWT.READ_ONLY | SWT.MULTI);
+ lblNoProblem
+ .setText("Patch application resolution finished successfully!\r\nPatch can be applied without any rejects.");
+
+ cmpDiagnostics = new Composite(composite, SWT.NONE);
+ GridLayout gl_cmpDiagnostics = new GridLayout(1, false);
+ gl_cmpDiagnostics.marginWidth = 0;
+ gl_cmpDiagnostics.marginHeight = 0;
+ cmpDiagnostics.setLayout(gl_cmpDiagnostics);
+
+ txtRejects = new Text(cmpDiagnostics, SWT.READ_ONLY | SWT.MULTI);
+ txtRejects.setText(
+ "Patch application resolution finished!\r\nThe following rejects have been found while resolving the patch:");
+ txtRejects.setBounds(0, 0, 76, 21);
+
+ tvDiagnostics = new TreeViewer(cmpDiagnostics,
+ SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.BORDER);
+ tblDiagnostics = tvDiagnostics.getTree();
+ tblDiagnostics.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
+ tblDiagnostics.setSize(564, 236);
+ tblDiagnostics.setLinesVisible(true);
+ tblDiagnostics.setHeaderVisible(true);
+
+ TreeColumn tvcEntry = new TreeColumn(tblDiagnostics, SWT.NONE);
+ tvcEntry.setWidth(150);
+ tvcEntry.setText("Entry");
+
+ TreeColumn tvcMessage = new TreeColumn(tblDiagnostics, SWT.NONE);
+ tvcMessage.setWidth(400);
+ tvcMessage.setText("Details");
+
+ tvDiagnostics.setContentProvider(new ITreeContentProvider() {
+ @Override
+ public void dispose() {
+ }
+
+ @Override
+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+ }
+
+ @Override
+ public Object[] getElements(Object inputElement) {
+ return getChildren(inputElement);
+ }
+
+ @Override
+ public Object[] getChildren(Object parentElement) {
+ if (parentElement instanceof ModelPatchDiagnosticElement) {
+ ModelPatchDiagnosticElement diagElem = (ModelPatchDiagnosticElement) parentElement;
+ ModelPatchEntry entry = diagElem.getProblematicEntry();
+ return entryLabelProvider.getPropertyList(entry).toArray();
}
- return new ArrayList<>();
- }
+ if (parentElement instanceof ArrayList) {
+ return ((ArrayList) parentElement).toArray();
+ }
+ return new Object[0];
+ }
- /**
- * Create contents of the dialog.
- * @param parent
- */
- @Override
- public void createControl(Composite parent) {
- Composite container = new Composite(parent, SWT.NULL);
- setControl(container);
- container.setLayout(new GridLayout(1, false));
-
-
- Label lblResult = new Label(container, SWT.NONE);
- lblResult.setFont(SWTResourceManager.getFont("Segoe UI", 14, SWT.BOLD));
- lblResult.setText("Result");
-
- composite = new Composite(container, SWT.NONE);
- composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
- stack = new StackLayout();
- composite.setLayout(stack);
-
- lblNoProblem = new Text(composite, SWT.READ_ONLY | SWT.MULTI);
- lblNoProblem.setText("Patch application resolution finished successfully!\r\nPatch can be applied without any rejects.");
-
- cmpDiagnostics = new Composite(composite, SWT.NONE);
- GridLayout gl_cmpDiagnostics = new GridLayout(1, false);
- gl_cmpDiagnostics.marginWidth = 0;
- gl_cmpDiagnostics.marginHeight = 0;
- cmpDiagnostics.setLayout(gl_cmpDiagnostics);
-
- txtRejects = new Text(cmpDiagnostics, SWT.READ_ONLY | SWT.MULTI);
- txtRejects.setText("Patch application resolution finished!\r\nThe following rejects have been found while resolving the patch:");
- txtRejects.setBounds(0, 0, 76, 21);
-
- tvDiagnostics = new TreeViewer(cmpDiagnostics, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.BORDER);
- tblDiagnostics = tvDiagnostics.getTree();
- tblDiagnostics.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
- tblDiagnostics.setSize(564, 236);
- tblDiagnostics.setLinesVisible(true);
- tblDiagnostics.setHeaderVisible(true);
-
- TreeColumn tvcEntry = new TreeColumn(tblDiagnostics, SWT.NONE);
- tvcEntry.setWidth(150);
- tvcEntry.setText("Entry");
-
- TreeColumn tvcMessage = new TreeColumn(tblDiagnostics, SWT.NONE);
- tvcMessage.setWidth(400);
- tvcMessage.setText("Details");
-
- tvDiagnostics.setContentProvider(new ITreeContentProvider() {
- @Override
- public void dispose() {}
-
- @Override
- public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {}
-
- @Override
- public Object[] getElements(Object inputElement) {
- return getChildren(inputElement);
- }
-
- @Override
- public Object[] getChildren(Object parentElement) {
- if(parentElement instanceof ModelPatchDiagnosticElement) {
- ModelPatchDiagnosticElement diagElem = (ModelPatchDiagnosticElement)parentElement;
- ModelPatchEntry entry = diagElem.getProblematicEntry();
- return entryLabelProvider.getPropertyList(entry).toArray();
- }
- if(parentElement instanceof ArrayList) {
- return ((ArrayList)parentElement).toArray();
- }
- return new Object[0];
- }
-
- @Override
- public Object getParent(Object element) {
- return null;
- }
-
- @Override
- public boolean hasChildren(Object element) {
- Object[] childrens = getChildren(element);
- return childrens!=null && childrens.length>0;
- }
-
- });
- tvDiagnostics.setLabelProvider(new ITableLabelProvider() {
- @Override
- public void removeListener(ILabelProviderListener listener) {}
-
- @Override
- public boolean isLabelProperty(Object element, String property) {
- return false;
- }
-
- @Override
- public void dispose() {}
-
- @Override
- public void addListener(ILabelProviderListener listener) {}
-
- @Override
- public String getColumnText(Object element, int columnIndex) {
- if(element instanceof ModelPatchDiagnosticElement) {
- switch(columnIndex) {
- case 0: return entryLabelProvider.shortDescription(((ModelPatchDiagnosticElement)element).getProblematicEntry());
- case 1: return ((ModelPatchDiagnosticElement)element).getMessage();
- }
- } else if(element instanceof EntryPropertyWrapper) {
- switch(columnIndex) {
- case 0: return ((EntryPropertyWrapper)element).prop;
- case 1: return ((EntryPropertyWrapper)element).value;
- }
- }
- return "";
- }
-
- @Override
- public Image getColumnImage(Object element, int columnIndex) {
- return null;
- }
- });
-
- Label label = new Label(container, SWT.SEPARATOR | SWT.HORIZONTAL);
- label.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
-
- txtDescription = new Text(container, SWT.READ_ONLY | SWT.WRAP | SWT.MULTI);
- txtDescription.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
- txtDescription.setText("If you click Next, you can select changes from the resolved model which you want to merge into the target model.\r\nIf you choose Finish, all the possible changes will be merged directly into the target model.");
- }
+ @Override
+ public Object getParent(Object element) {
+ return null;
+ }
+
+ @Override
+ public boolean hasChildren(Object element) {
+ Object[] childrens = getChildren(element);
+ return childrens != null && childrens.length > 0;
+ }
+
+ });
+ tvDiagnostics.setLabelProvider(new ITableLabelProvider() {
+ @Override
+ public void removeListener(ILabelProviderListener listener) {
+ }
+
+ @Override
+ public boolean isLabelProperty(Object element, String property) {
+ return false;
+ }
+
+ @Override
+ public void dispose() {
+ }
+
+ @Override
+ public void addListener(ILabelProviderListener listener) {
+ }
+
+ @Override
+ public String getColumnText(Object element, int columnIndex) {
+ if (element instanceof ModelPatchDiagnosticElement) {
+ switch (columnIndex) {
+ case 0:
+ return entryLabelProvider.shortDescription(((ModelPatchDiagnosticElement) element).getProblematicEntry());
+ case 1:
+ return ((ModelPatchDiagnosticElement) element).getMessage();
+ }
+ } else if (element instanceof EntryPropertyWrapper) {
+ switch (columnIndex) {
+ case 0:
+ return ((EntryPropertyWrapper) element).prop;
+ case 1:
+ return ((EntryPropertyWrapper) element).value;
+ }
+ }
+ return "";
+ }
- @Override
- public IWizardPage getPreviousPage() {
+ @Override
+ public Image getColumnImage(Object element, int columnIndex) {
return null;
- }
+ }
+ });
+
+ Label label = new Label(container, SWT.SEPARATOR | SWT.HORIZONTAL);
+ label.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
+
+ txtDescription = new Text(container, SWT.READ_ONLY | SWT.WRAP | SWT.MULTI);
+ txtDescription.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+ txtDescription.setText(
+ "If you click Next, you can select changes from the resolved model which you want to merge into the target model.\r\nIf you choose Finish, all the possible changes will be merged directly into the target model.");
+ }
+
+ @Override
+ public IWizardPage getPreviousPage() {
+ return null;
+ }
}
diff --git a/plugins/org.eclipse.emf.diffmerge.patch/META-INF/MANIFEST.MF b/plugins/org.eclipse.emf.diffmerge.patch/META-INF/MANIFEST.MF
index 31c107f..1730884 100644
--- a/plugins/org.eclipse.emf.diffmerge.patch/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.emf.diffmerge.patch/META-INF/MANIFEST.MF
@@ -10,5 +10,6 @@ Require-Bundle: com.google.guava;bundle-version="15.0.0",
Export-Package: org.eclipse.emf.diffmerge.patch,
org.eclipse.emf.diffmerge.patch.api,
org.eclipse.emf.diffmerge.patch.api.filters,
+ org.eclipse.emf.diffmerge.patch.persistence,
org.eclipse.emf.diffmerge.patch.serializer
Bundle-ClassPath: .
diff --git a/plugins/org.eclipse.emf.diffmerge.patch/src/org/eclipse/emf/diffmerge/patch/api/ModelPatchFilterApplier.xtend b/plugins/org.eclipse.emf.diffmerge.patch/src/org/eclipse/emf/diffmerge/patch/api/ModelPatchFilterApplier.xtend
index 70d0ebe..a8329e2 100644
--- a/plugins/org.eclipse.emf.diffmerge.patch/src/org/eclipse/emf/diffmerge/patch/api/ModelPatchFilterApplier.xtend
+++ b/plugins/org.eclipse.emf.diffmerge.patch/src/org/eclipse/emf/diffmerge/patch/api/ModelPatchFilterApplier.xtend
@@ -38,7 +38,7 @@ class ModelPatchFilterApplier {
*/
def ModelPatch applyUnfilter(ModelPatch originalPatch, IModelPatchEntryFilter filter) {
val builder = ModelPatchBuilder.create
- builder.append(originalPatch.entries.filter[!filter.isEntryFiltered(it)].toList)
+ builder.append(originalPatch.entries.filter[filter.isEntryFiltered(it)].toList)
return builder.build
}
diff --git a/plugins/org.eclipse.emf.diffmerge.patch/src/org/eclipse/emf/diffmerge/patch/api/ModelPatchMetadata.java b/plugins/org.eclipse.emf.diffmerge.patch/src/org/eclipse/emf/diffmerge/patch/api/ModelPatchMetadata.java
index 3be3789..6034206 100644
--- a/plugins/org.eclipse.emf.diffmerge.patch/src/org/eclipse/emf/diffmerge/patch/api/ModelPatchMetadata.java
+++ b/plugins/org.eclipse.emf.diffmerge.patch/src/org/eclipse/emf/diffmerge/patch/api/ModelPatchMetadata.java
@@ -20,4 +20,4 @@ public interface ModelPatchMetadata {
String getInput();
-} \ No newline at end of file
+}
diff --git a/plugins/org.eclipse.emf.diffmerge.patch/src/org/eclipse/emf/diffmerge/patch/persistence/ModelPatchPersister.xtend b/plugins/org.eclipse.emf.diffmerge.patch/src/org/eclipse/emf/diffmerge/patch/persistence/ModelPatchPersister.xtend
new file mode 100644
index 0000000..0c0035c
--- /dev/null
+++ b/plugins/org.eclipse.emf.diffmerge.patch/src/org/eclipse/emf/diffmerge/patch/persistence/ModelPatchPersister.xtend
@@ -0,0 +1,25 @@
+/*******************************************************************************
+ * 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:
+ * Abel Hegedus (IncQuery Labs Ltd.) - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.emf.diffmerge.patch.persistence
+
+import org.eclipse.emf.diffmerge.patch.api.ModelPatch
+import org.eclipse.emf.diffmerge.patch.api.ModelPatchException
+
+/**
+ * @author Abel Hegedus
+ */
+interface ModelPatchPersister<Format> {
+
+ def Format persist(ModelPatch modelPatch) throws ModelPatchException
+
+ def ModelPatch load(Format format) throws ModelPatchException
+
+}
diff --git a/plugins/org.eclipse.emf.diffmerge.patch/src/org/eclipse/emf/diffmerge/patch/serializer/IModelPatchSerializer.java b/plugins/org.eclipse.emf.diffmerge.patch/src/org/eclipse/emf/diffmerge/patch/serializer/IModelPatchSerializer.java
index fffa595..77cf07f 100644
--- a/plugins/org.eclipse.emf.diffmerge.patch/src/org/eclipse/emf/diffmerge/patch/serializer/IModelPatchSerializer.java
+++ b/plugins/org.eclipse.emf.diffmerge.patch/src/org/eclipse/emf/diffmerge/patch/serializer/IModelPatchSerializer.java
@@ -11,41 +11,32 @@
package org.eclipse.emf.diffmerge.patch.serializer;
import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
import org.eclipse.emf.diffmerge.patch.api.ModelPatch;
import org.eclipse.emf.diffmerge.patch.api.ModelPatchException;
+/**
+ * Interface for saving the model patch to a new file. In the case of an already
+ * existing file the content is overwritten.
+ *
+ * @param modelPatch
+ * an initialized ModelPatch object
+ * @param file
+ * the file to write to
+ *
+ * @throws ModelPatchException
+ */
public interface IModelPatchSerializer {
- /**
- * Interface for saving the model patch to a new file.
- * In the case of an already existing file the content is overwritten.
- *
- *
- * @param modelPatch
- * an initialized ModelPatch object with properly
- * used JsonProperty annotations
- * @param file
- * the file to write to
- *
- * @throws IOException
- * if some error occur during the JSON serialization
- * @throws ModelPatchException
- */
-
- public void serialize(ModelPatch modelPatch, File file)
- throws ModelPatchException;
- public String serialize(ModelPatch modelPatch) throws ModelPatchException;
+ public void serialize(ModelPatch modelPatch, File file) throws ModelPatchException;
- public InputStream serializeStream(ModelPatch modelPatch) throws ModelPatchException;
+ public String serialize(ModelPatch modelPatch) throws ModelPatchException;
public ModelPatch load(File file) throws ModelPatchException;
- public ModelPatch load(String jsonSource) throws ModelPatchException;
+ public ModelPatch load(String source) throws ModelPatchException;
- public ModelPatch load(InputStream jsonStream) throws ModelPatchException;
+ public String getPreferredFileExtension();
}
diff --git a/plugins/pom.xml b/plugins/pom.xml
index a83aa15..38abd83 100644
--- a/plugins/pom.xml
+++ b/plugins/pom.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
- xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
- <modelVersion>4.0.0</modelVersion>
+ xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>org.eclipse.emf.diffmerge.patch.parent</artifactId>
@@ -9,17 +9,18 @@
<version>0.1.0-SNAPSHOT</version>
<relativePath>../releng/org.eclipse.emf.diffmerge.patch.parent</relativePath>
</parent>
- <groupId>org.eclipse.emf.diffmerge.patch</groupId>
- <artifactId>org.eclipse.emf.diffmerge.patch.plugins</artifactId>
- <name>Model Patcher Plug-ins</name>
- <version>0.1.0-SNAPSHOT</version>
- <packaging>pom</packaging>
+ <groupId>org.eclipse.emf.diffmerge.patch</groupId>
+ <artifactId>org.eclipse.emf.diffmerge.patch.plugins</artifactId>
+ <name>Model Patcher Plug-ins</name>
+ <version>0.1.0-SNAPSHOT</version>
+ <packaging>pom</packaging>
- <modules>
- <module>org.eclipse.emf.diffmerge.patch</module>
+ <modules>
+ <module>org.eclipse.emf.diffmerge.patch</module>
<module>org.eclipse.emf.diffmerge.patch.runtime</module>
<module>org.eclipse.emf.diffmerge.patch.persistence.json</module>
+ <module>org.eclipse.emf.diffmerge.patch.persistence.emf</module>
<module>org.eclipse.emf.diffmerge.patch.ui</module>
- </modules>
+ </modules>
-</project> \ No newline at end of file
+</project>
diff --git a/releng/org.eclipse.emf.diffmerge.patch.target/org.eclipse.emf.diffmerge.patch.target.target b/releng/org.eclipse.emf.diffmerge.patch.target/org.eclipse.emf.diffmerge.patch.target.target
index a9f6de7..d509ae1 100644
--- a/releng/org.eclipse.emf.diffmerge.patch.target/org.eclipse.emf.diffmerge.patch.target.target
+++ b/releng/org.eclipse.emf.diffmerge.patch.target/org.eclipse.emf.diffmerge.patch.target.target
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?pde?>
<!-- generated with https://github.com/mbarbero/fr.obeo.releng.targetplatform -->
-<target name="EMF DiffMerge Model Patch" sequenceNumber="1485178630">
+<target name="EMF DiffMerge Model Patch" sequenceNumber="1487943191">
<locations>
<location includeMode="planner" includeAllPlatforms="false" includeSource="false" includeConfigurePhase="false" type="InstallableUnit">
<unit id="org.eclipse.equinox.executable.feature.group" version="3.6.200.v20150602-1417"/>
@@ -22,13 +22,17 @@
<repository location="http://download.eclipse.org/diffmerge/updates/oxygen/official"/>
</location>
<location includeMode="planner" includeAllPlatforms="false" includeSource="false" includeConfigurePhase="false" type="InstallableUnit">
- <unit id="org.eclipse.viatra.transformation.runtime.emf.feature.feature.group" version="1.6.0.201701201731"/>
+ <unit id="org.eclipse.viatra.transformation.runtime.emf.feature.feature.group" version="1.6.0.201702171730"/>
<repository location="http://download.eclipse.org/viatra/updates/integration"/>
</location>
<location includeMode="planner" includeAllPlatforms="false" includeSource="false" includeConfigurePhase="false" type="InstallableUnit">
<unit id="org.eclipse.license.feature.group" version="1.0.1.v20140414-1359"/>
<repository location="http://download.eclipse.org/cbi/updates/license/"/>
</location>
+ <location includeMode="planner" includeAllPlatforms="false" includeSource="false" includeConfigurePhase="false" type="InstallableUnit">
+ <unit id="org.eclipse.viatra.examples.cps.metamodel.feature.feature.group" version="0.1.0.201702231015"/>
+ <repository location="http://download.eclipse.org/viatra/examples/cps/"/>
+ </location>
</locations>
<targetJRE path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
</target>
diff --git a/releng/org.eclipse.emf.diffmerge.patch.target/org.eclipse.emf.diffmerge.patch.target.tpd b/releng/org.eclipse.emf.diffmerge.patch.target/org.eclipse.emf.diffmerge.patch.target.tpd
index 6194282..83fc0ff 100644
--- a/releng/org.eclipse.emf.diffmerge.patch.target/org.eclipse.emf.diffmerge.patch.target.tpd
+++ b/releng/org.eclipse.emf.diffmerge.patch.target/org.eclipse.emf.diffmerge.patch.target.tpd
@@ -3,27 +3,31 @@ environment JavaSE-1.7
with requirements
location "http://download.eclipse.org/releases/mars/201602261000/" {
- org.eclipse.equinox.executable.feature.group
- org.eclipse.platform.sdk
- org.eclipse.jdt.feature.group
- org.eclipse.pde.feature.group
- org.eclipse.sdk.feature.group
- org.eclipse.platform.feature.group
- org.eclipse.emf.sdk.feature.group
- org.eclipse.gmf.feature.group
- org.eclipse.xtend.feature.group
- com.google.gson
- org.junit
+ org.eclipse.equinox.executable.feature.group
+ org.eclipse.platform.sdk
+ org.eclipse.jdt.feature.group
+ org.eclipse.pde.feature.group
+ org.eclipse.sdk.feature.group
+ org.eclipse.platform.feature.group
+ org.eclipse.emf.sdk.feature.group
+ org.eclipse.gmf.feature.group
+ org.eclipse.xtend.feature.group
+ com.google.gson
+ org.junit
}
location "http://download.eclipse.org/diffmerge/updates/oxygen/official" {
- org.eclipse.emf.diffmerge.sdk.feature.feature.group
+ org.eclipse.emf.diffmerge.sdk.feature.feature.group
}
location "http://download.eclipse.org/viatra/updates/integration" {
- org.eclipse.viatra.transformation.runtime.emf.feature.feature.group
+ org.eclipse.viatra.transformation.runtime.emf.feature.feature.group
}
location "http://download.eclipse.org/cbi/updates/license/" {
- org.eclipse.license.feature.group
+ org.eclipse.license.feature.group
}
+
+location "http://download.eclipse.org/viatra/examples/cps/" {
+ org.eclipse.viatra.examples.cps.metamodel.feature.feature.group
+} \ No newline at end of file
diff --git a/releng/org.eclipse.emf.diffmerge.patch.update/packaging-p2composite.ant b/releng/org.eclipse.emf.diffmerge.patch.update/packaging-p2composite.ant
index 28c53a5..7e1e275 100644
--- a/releng/org.eclipse.emf.diffmerge.patch.update/packaging-p2composite.ant
+++ b/releng/org.eclipse.emf.diffmerge.patch.update/packaging-p2composite.ant
@@ -1,6 +1,6 @@
<?xml version="1.0"?>
<project name="project">
-
+
<target name="getMajorMinorVersion">
<script language="javascript">
<![CDATA[
@@ -56,11 +56,11 @@
composite.repository.name="${site.composite.name}"
composite.repository.child="${child.repository}"
/>
-
+
</target>
-
+
<!-- = = = = = = = = = = = = = = = = =
- macrodef: add.composite.repository.internal
+ macrodef: add.composite.repository.internal
= = = = = = = = = = = = = = = = = -->
<macrodef name="add.composite.repository.internal">
<attribute name="composite.repository.location" />
@@ -76,7 +76,7 @@
<p2.composite.repository>
<repository
compressed="false"
- location="@{composite.repository.location}"
+ location="@{composite.repository.location}"
name="@{composite.repository.name}" />
<add>
<repository location="@{composite.repository.child}" />
@@ -87,9 +87,9 @@
metadata.repository.factory.order=compositeContent.xml,\!
artifact.repository.factory.order=compositeArtifacts.xml,\!
</echo>
-
+
</sequential>
</macrodef>
-</project> \ No newline at end of file
+</project>
diff --git a/releng/org.eclipse.emf.diffmerge.patch.update/pom.xml b/releng/org.eclipse.emf.diffmerge.patch.update/pom.xml
index b4b783a..0d5b6cf 100644
--- a/releng/org.eclipse.emf.diffmerge.patch.update/pom.xml
+++ b/releng/org.eclipse.emf.diffmerge.patch.update/pom.xml
@@ -1,30 +1,30 @@
<?xml version="1.0" encoding="UTF-8"?>
<project
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
- xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
- <modelVersion>4.0.0</modelVersion>
- <parent>
- <artifactId>org.eclipse.emf.diffmerge.patch.parent</artifactId>
- <groupId>org.eclipse.emf.diffmerge.patch</groupId>
- <version>0.1.0-SNAPSHOT</version>
- <relativePath>../org.eclipse.emf.diffmerge.patch.parent</relativePath>
- </parent>
- <artifactId>org.eclipse.emf.diffmerge.patch.update</artifactId>
- <packaging>eclipse-repository</packaging>
- <version>0.1.0-SNAPSHOT</version>
- <build>
- <plugins>
- <plugin>
- <groupId>org.eclipse.tycho</groupId>
- <artifactId>tycho-p2-repository-plugin</artifactId>
- <version>${tycho.version}</version>
- <configuration>
- <repositoryName>${patch.updates.label}</repositoryName>
- </configuration>
- </plugin>
- </plugins>
- </build>
- <profiles>
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+ xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <artifactId>org.eclipse.emf.diffmerge.patch.parent</artifactId>
+ <groupId>org.eclipse.emf.diffmerge.patch</groupId>
+ <version>0.1.0-SNAPSHOT</version>
+ <relativePath>../org.eclipse.emf.diffmerge.patch.parent</relativePath>
+ </parent>
+ <artifactId>org.eclipse.emf.diffmerge.patch.update</artifactId>
+ <packaging>eclipse-repository</packaging>
+ <version>0.1.0-SNAPSHOT</version>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.eclipse.tycho</groupId>
+ <artifactId>tycho-p2-repository-plugin</artifactId>
+ <version>${tycho.version}</version>
+ <configuration>
+ <repositoryName>${patch.updates.label}</repositoryName>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+ <profiles>
<profile>
<id>build-integration-composite</id>
<activation>
@@ -221,4 +221,4 @@
</build>
</profile>
</profiles>
-</project> \ No newline at end of file
+</project>
diff --git a/tests/org.eclipse.emf.diffmerge.patch.tests.all/META-INF/MANIFEST.MF b/tests/org.eclipse.emf.diffmerge.patch.tests.all/META-INF/MANIFEST.MF
index 591b391..902a23b 100644
--- a/tests/org.eclipse.emf.diffmerge.patch.tests.all/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.emf.diffmerge.patch.tests.all/META-INF/MANIFEST.MF
@@ -14,7 +14,10 @@ Require-Bundle: com.google.guava,
org.eclipse.emf.diffmerge.patch.tests.emf;bundle-version="[0.1.0,0.2.0)",
org.eclipse.emf.diffmerge.patch.tests.persistence.json;bundle-version="0.1.0",
org.eclipse.emf.diffmerge.patch.ui;bundle-version="[0.1.0,0.2.0)",
- org.junit;bundle-version="4.12.0"
+ org.junit;bundle-version="4.12.0",
+ org.eclipse.emf.diffmerge.patch.persistence.emf;bundle-version="[0.1.0,0.2.0)",
+ org.eclipse.emf.diffmerge.patch.persistence.json;bundle-version="[0.1.0,0.2.0)",
+ org.eclipse.emf.diffmerge.patch.tests.persistence.emf;bundle-version="[0.1.0,0.2.0)"
Import-Package: org.apache.log4j;version="1.2.0"
Bundle-Vendor: %providerName
diff --git a/tests/org.eclipse.emf.diffmerge.patch.tests.all/launch/RunAllTestSuite.launch b/tests/org.eclipse.emf.diffmerge.patch.tests.all/launch/RunAllTestSuite.launch
index 0a90da5..fdf89ba 100644
--- a/tests/org.eclipse.emf.diffmerge.patch.tests.all/launch/RunAllTestSuite.launch
+++ b/tests/org.eclipse.emf.diffmerge.patch.tests.all/launch/RunAllTestSuite.launch
@@ -2,13 +2,13 @@
<launchConfiguration type="org.eclipse.jdt.junit.launchconfig">
<stringAttribute key="bad_container_name" value="\org.eclipse.emf.diffmerge.patch.all.tests\launc"/>
<listAttribute key="com.mountainminds.eclemma.core.SCOPE_IDS">
-<listEntry value="=org.eclipse.emf.diffmerge.patch.gui/xtend-gen"/>
-<listEntry value="=com.incquerylabs.util.identifier/src"/>
-<listEntry value="=org.eclipse.emf.diffmerge.patch.emf/src"/>
+<listEntry value="=org.eclipse.emf.diffmerge.patch.persistence.emf/xtend-gen"/>
+<listEntry value="=org.eclipse.emf.diffmerge.patch.persistence.json/src"/>
+<listEntry value="=org.eclipse.emf.diffmerge.patch.runtime/xtend-gen"/>
<listEntry value="=org.eclipse.emf.diffmerge.patch/src"/>
-<listEntry value="=org.eclipse.emf.diffmerge.patch.emf/xtend-gen"/>
-<listEntry value="=org.eclipse.emf.diffmerge.patch.gui/src"/>
<listEntry value="=org.eclipse.emf.diffmerge.patch/xtend-gen"/>
+<listEntry value="=org.eclipse.emf.diffmerge.patch.persistence.emf/src"/>
+<listEntry value="=org.eclipse.emf.diffmerge.patch.runtime/src"/>
</listAttribute>
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
<listEntry value="/org.eclipse.emf.diffmerge.patch.tests.all/xtend-gen/org/eclipse/emf/diffmerge/patch/tests/all/RunAllTestSuite.java"/>
@@ -17,8 +17,8 @@
<listEntry value="1"/>
</listAttribute>
<listAttribute key="org.eclipse.debug.ui.favoriteGroups">
-<listEntry value="org.eclipse.debug.ui.launchGroup.debug"/>
<listEntry value="org.eclipse.debug.ui.launchGroup.run"/>
+<listEntry value="org.eclipse.debug.ui.launchGroup.debug"/>
</listAttribute>
<stringAttribute key="org.eclipse.jdt.junit.CONTAINER" value=""/>
<booleanAttribute key="org.eclipse.jdt.junit.KEEPRUNNING_ATTR" value="false"/>
diff --git a/tests/org.eclipse.emf.diffmerge.patch.tests.all/src/org/eclipse/emf/diffmerge/patch/tests/all/RunAllTestSuite.xtend b/tests/org.eclipse.emf.diffmerge.patch.tests.all/src/org/eclipse/emf/diffmerge/patch/tests/all/RunAllTestSuite.xtend
index 0d95ba1..f6627cd 100644
--- a/tests/org.eclipse.emf.diffmerge.patch.tests.all/src/org/eclipse/emf/diffmerge/patch/tests/all/RunAllTestSuite.xtend
+++ b/tests/org.eclipse.emf.diffmerge.patch.tests.all/src/org/eclipse/emf/diffmerge/patch/tests/all/RunAllTestSuite.xtend
@@ -16,11 +16,13 @@ import org.junit.runner.RunWith
import org.junit.runners.Suite
import org.junit.runners.Suite.SuiteClasses
import org.eclipse.emf.diffmerge.patch.tests.ModelPatchTestSuite
+import org.eclipse.emf.diffmerge.patch.tests.persistence.emf.ModelPatchPersistenceEMFTestSuite
@SuiteClasses(#[
ModelPatchTestSuite,
ModelPatchEmfTestSuite,
- ModelPatchPersistenceJsonTestSuite
+ ModelPatchPersistenceJsonTestSuite,
+ ModelPatchPersistenceEMFTestSuite
])
@RunWith(Suite)
diff --git a/tests/org.eclipse.emf.diffmerge.patch.tests.emf/META-INF/MANIFEST.MF b/tests/org.eclipse.emf.diffmerge.patch.tests.emf/META-INF/MANIFEST.MF
index ecdc0fb..fb6e8f7 100644
--- a/tests/org.eclipse.emf.diffmerge.patch.tests.emf/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.emf.diffmerge.patch.tests.emf/META-INF/MANIFEST.MF
@@ -4,7 +4,8 @@ Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.emf.diffmerge.patch.tests.emf;singleton:=true
Bundle-Version: 0.1.0.qualifier
Bundle-Vendor: %providerName
-Export-Package: org.eclipse.emf.diffmerge.patch.tests.emf
+Export-Package: org.eclipse.emf.diffmerge.patch.tests.emf,
+ org.eclipse.emf.diffmerge.patch.tests.emf.identifier
Require-Bundle: com.google.guava;bundle-version="15.0.0",
org.eclipse.emf.ecore;bundle-version="2.10.2",
org.eclipse.emf.diffmerge.patch;bundle-version="[0.1.0,0.2.0)",
diff --git a/tests/org.eclipse.emf.diffmerge.patch.tests.emf/model/demo-patch-generated.emodelpatch b/tests/org.eclipse.emf.diffmerge.patch.tests.emf/model/demo-patch-generated.emodelpatch
new file mode 100644
index 0000000..134a7f9
--- /dev/null
+++ b/tests/org.eclipse.emf.diffmerge.patch.tests.emf/model/demo-patch-generated.emodelpatch
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="ASCII"?>
+<org.eclipse.emf.diffmerge.patch:EModelPatch xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:org.eclipse.emf.diffmerge.patch="http://www.eclipse.org/emf/diffmerge/1.0.0/patch">
+ <entries xsi:type="org.eclipse.emf.diffmerge.patch:EAttributeEntry" direction="REMOVE" context="//@elements.0" feature="//@features.0" value="simple.cps.host.FirstHostClass0.inst0"/>
+ <entries xsi:type="org.eclipse.emf.diffmerge.patch:EAttributeEntry" direction="REMOVE" context="//@elements.1" feature="//@features.1" value="Running"/>
+ <entries xsi:type="org.eclipse.emf.diffmerge.patch:EReferenceEntry" direction="REMOVE" context="//@elements.1" feature="//@features.2" target="//@elements.2"/>
+ <entries xsi:type="org.eclipse.emf.diffmerge.patch:EReferenceEntry" direction="REMOVE" context="//@elements.3" feature="//@features.3" target="//@elements.0"/>
+ <entries xsi:type="org.eclipse.emf.diffmerge.patch:EReferenceEntry" direction="REMOVE" context="//@elements.2" feature="//@features.4" target="//@elements.1"/>
+ <entries xsi:type="org.eclipse.emf.diffmerge.patch:EReferenceEntry" direction="REMOVE" context="//@elements.4" feature="//@features.3" target="//@elements.0"/>
+ <entries xsi:type="org.eclipse.emf.diffmerge.patch:EReferenceEntry" direction="REMOVE" context="//@elements.5" feature="//@features.3" target="//@elements.0"/>
+ <entries xsi:type="org.eclipse.emf.diffmerge.patch:EReferenceEntry" direction="REMOVE" context="//@elements.6" feature="//@features.3" target="//@elements.0"/>
+ <entries xsi:type="org.eclipse.emf.diffmerge.patch:EReferenceEntry" direction="REMOVE" context="//@elements.2" feature="//@features.3" target="//@elements.0"/>
+ <entries xsi:type="org.eclipse.emf.diffmerge.patch:EReferenceEntry" direction="REMOVE" context="//@elements.7" feature="//@features.5" target="//@elements.0"/>
+ <entries xsi:type="org.eclipse.emf.diffmerge.patch:EElementEntry" direction="REMOVE" context="//@elements.0" type="//@types.0"/>
+ <entries xsi:type="org.eclipse.emf.diffmerge.patch:EReferenceEntry" context="//@elements.6" feature="//@features.4" target="//@elements.1"/>
+ <entries xsi:type="org.eclipse.emf.diffmerge.patch:EReferenceEntry" context="//@elements.1" feature="//@features.2" target="//@elements.6"/>
+ <entries xsi:type="org.eclipse.emf.diffmerge.patch:EAttributeEntry" context="//@elements.1" feature="//@features.1" value="Stopped"/>
+ <metadata createdAt="Wed Jan 25 11:39:32 CET 2017"/>
+ <elements targetIdentifier="simple.cps.host.FirstHostClass0.inst0"/>
+ <elements targetIdentifier="simple.cps.app.FirstAppClass0.inst0"/>
+ <elements targetIdentifier="simple.cps.host.SecondHostClass0.inst1"/>
+ <elements targetIdentifier="simple.cps.host.SecondHostClass0.inst2"/>
+ <elements targetIdentifier="simple.cps.host.SecondHostClass0.inst3"/>
+ <elements targetIdentifier="simple.cps.host.SecondHostClass0.inst4"/>
+ <elements targetIdentifier="simple.cps.host.SecondHostClass0.inst0"/>
+ <elements targetIdentifier="simple.cps.host.FirstHostClass0"/>
+ <features targetIdentifier="http://org.eclipse.viatra/model/cps#HostInstance.nodeIp"/>
+ <features targetIdentifier="http://org.eclipse.viatra/model/cps#ApplicationInstance.state"/>
+ <features targetIdentifier="http://org.eclipse.viatra/model/cps#ApplicationInstance.allocatedTo"/>
+ <features targetIdentifier="http://org.eclipse.viatra/model/cps#HostInstance.communicateWith"/>
+ <features targetIdentifier="http://org.eclipse.viatra/model/cps#HostInstance.applications"/>
+ <features targetIdentifier="http://org.eclipse.viatra/model/cps#HostType.instances"/>
+ <types targetIdentifier="http://org.eclipse.viatra/model/cps#HostInstance"/>
+</org.eclipse.emf.diffmerge.patch:EModelPatch>
diff --git a/tests/org.eclipse.emf.diffmerge.patch.tests.emf/src/org/eclipse/emf/diffmerge/patch/tests/emf/CPSModelPatchApplierTest.xtend b/tests/org.eclipse.emf.diffmerge.patch.tests.emf/src/org/eclipse/emf/diffmerge/patch/tests/emf/CPSModelPatchApplierTest.xtend
index 16318f6..4e0e2df 100644
--- a/tests/org.eclipse.emf.diffmerge.patch.tests.emf/src/org/eclipse/emf/diffmerge/patch/tests/emf/CPSModelPatchApplierTest.xtend
+++ b/tests/org.eclipse.emf.diffmerge.patch.tests.emf/src/org/eclipse/emf/diffmerge/patch/tests/emf/CPSModelPatchApplierTest.xtend
@@ -139,6 +139,12 @@ class CPSModelPatchApplierTest extends CPSModelPatchTest{
// Assert
assertTrue(patchApplication.diagnostics.numOfExceptions > 0);
+ val diags = patchApplication.diagnostics.diagnosticElements
+ assertTrue(diags.size > 0)
+ val diag = diags.head
+ assertNotNull(diag.caughtException)
+ assertNotNull(diag.message)
+ assertNotNull(diag.problematicEntry)
}
@Test
diff --git a/tests/org.eclipse.emf.diffmerge.patch.tests.emf/src/org/eclipse/emf/diffmerge/patch/tests/emf/EMFModelAccessTest.xtend b/tests/org.eclipse.emf.diffmerge.patch.tests.emf/src/org/eclipse/emf/diffmerge/patch/tests/emf/EMFModelAccessTest.xtend
index fe9f697..1c9083d 100644
--- a/tests/org.eclipse.emf.diffmerge.patch.tests.emf/src/org/eclipse/emf/diffmerge/patch/tests/emf/EMFModelAccessTest.xtend
+++ b/tests/org.eclipse.emf.diffmerge.patch.tests.emf/src/org/eclipse/emf/diffmerge/patch/tests/emf/EMFModelAccessTest.xtend
@@ -40,6 +40,8 @@ import org.junit.runners.Parameterized
import org.junit.runners.Parameterized.Parameter
import static org.junit.Assert.*
+import org.eclipse.emf.diffmerge.patch.runtime.modelaccess.ModelAccessProvider
+import org.eclipse.emf.diffmerge.patch.runtime.modelaccess.ModelAccessTypes
@RunWith(Parameterized)
class EMFModelAccessTest extends CPSModelPatchTest {
@@ -57,12 +59,7 @@ class EMFModelAccessTest extends CPSModelPatchTest {
#[
"ViatraSimpleModelManipulations",
[ResourceSet resourceSet|
- val temporaryResource = resourceSet.createResource(TEMPORARY_RESOURCE_URI)
- val scope = new EMFScope(resourceSet)
- val engine = ViatraQueryEngine.on(scope)
-
- val viatraModelManipulator = new SimpleModelManipulations(engine)
- val modelAccess = new ViatraModelAccess(viatraModelManipulator, temporaryResource)
+ val modelAccess = new ModelAccessProvider().getSelectedModelAccess(ModelAccessTypes.VIATRA, resourceSet)
return modelAccess
]
],
@@ -83,7 +80,8 @@ class EMFModelAccessTest extends CPSModelPatchTest {
#[
"SimpleReflectiveEMFModelAccess",
[ResourceSet resourceSet|
- return new SimpleReflectiveEMFModelAccess
+ val modelAccess = new ModelAccessProvider().getSelectedModelAccess(ModelAccessTypes.EMF_REFLECTIVE, resourceSet)
+ return modelAccess
]
]
)
@@ -104,7 +102,7 @@ class EMFModelAccessTest extends CPSModelPatchTest {
@BeforeClass
public static def void initCPS() {
- Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().put(MODEL_FILE_EXTENSION, new XMIResourceFactoryImpl())
+ Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().put("*", new XMIResourceFactoryImpl())
CyberPhysicalSystemPackage.eINSTANCE.eClass()
}
diff --git a/tests/org.eclipse.emf.diffmerge.patch.tests.emf/src/org/eclipse/emf/diffmerge/patch/tests/emf/ModelPatchApplierSmokeTests.xtend b/tests/org.eclipse.emf.diffmerge.patch.tests.emf/src/org/eclipse/emf/diffmerge/patch/tests/emf/ModelPatchApplierSmokeTests.xtend
index 93cd68a..9d592b8 100644
--- a/tests/org.eclipse.emf.diffmerge.patch.tests.emf/src/org/eclipse/emf/diffmerge/patch/tests/emf/ModelPatchApplierSmokeTests.xtend
+++ b/tests/org.eclipse.emf.diffmerge.patch.tests.emf/src/org/eclipse/emf/diffmerge/patch/tests/emf/ModelPatchApplierSmokeTests.xtend
@@ -111,7 +111,7 @@ class ModelPatchApplierSmokeTests extends CPSModelPatchTest {
val patchApplication = patchApplier.apply(reversePatch, resourceSet)
val diags = patchApplication.diagnostics
- // TODO Check the result
+ // Check the result
assertEquals("Unexpected exceptions while applying reverse patch", 0, diags.numOfExceptions)
val referenceSet = new ResourceSetImpl()
val referenceResource = referenceSet.getResource(URI.createFileURI(originalModelPath), true)
diff --git a/tests/org.eclipse.emf.diffmerge.patch.tests.emf/src/org/eclipse/emf/diffmerge/patch/tests/emf/ModelPatchEmfTestSuite.xtend b/tests/org.eclipse.emf.diffmerge.patch.tests.emf/src/org/eclipse/emf/diffmerge/patch/tests/emf/ModelPatchEmfTestSuite.xtend
index 8d3ac9a..f36d197 100644
--- a/tests/org.eclipse.emf.diffmerge.patch.tests.emf/src/org/eclipse/emf/diffmerge/patch/tests/emf/ModelPatchEmfTestSuite.xtend
+++ b/tests/org.eclipse.emf.diffmerge.patch.tests.emf/src/org/eclipse/emf/diffmerge/patch/tests/emf/ModelPatchEmfTestSuite.xtend
@@ -13,6 +13,7 @@ package org.eclipse.emf.diffmerge.patch.tests.emf
import org.junit.runner.RunWith
import org.junit.runners.Suite
import org.junit.runners.Suite.SuiteClasses
+import org.eclipse.emf.diffmerge.patch.tests.emf.identifier.IdentifierTestSuite
@SuiteClasses(#[
EMFModelPatchMetadataTest,
@@ -22,7 +23,8 @@ import org.junit.runners.Suite.SuiteClasses
EMFModelAccessTest,
ModelPatchRecorderTest,
ModelPatchApplierSmokeTests,
- ModelPatchExporterTest
+ ModelPatchExporterTest,
+ IdentifierTestSuite
])
@RunWith(Suite)
class ModelPatchEmfTestSuite {
diff --git a/tests/org.eclipse.emf.diffmerge.patch.tests.emf/src/org/eclipse/emf/diffmerge/patch/tests/emf/identifier/EMFIdentifierProviderTest.java b/tests/org.eclipse.emf.diffmerge.patch.tests.emf/src/org/eclipse/emf/diffmerge/patch/tests/emf/identifier/EMFIdentifierProviderTest.java
new file mode 100644
index 0000000..6baf67e
--- /dev/null
+++ b/tests/org.eclipse.emf.diffmerge.patch.tests.emf/src/org/eclipse/emf/diffmerge/patch/tests/emf/identifier/EMFIdentifierProviderTest.java
@@ -0,0 +1,150 @@
+/*******************************************************************************
+ * Copyright (c) 2016-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:
+ * Abel Hegedus, Tamas Borbas, Daniel Segesdi (IncQuery Labs Ltd.) - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.emf.diffmerge.patch.tests.emf.identifier;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.diffmerge.patch.runtime.identifier.EMFIdentifierProvider;
+import org.eclipse.emf.diffmerge.patch.runtime.identifier.EObjectIdentifierProvider;
+import org.eclipse.emf.diffmerge.patch.runtime.identifier.TreeIteratorEObjectLocator;
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EDataType;
+import org.eclipse.emf.ecore.EEnum;
+import org.eclipse.emf.ecore.EEnumLiteral;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EOperation;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EcoreFactory;
+import org.eclipse.emf.ecore.EcorePackage;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.viatra.examples.cps.cyberPhysicalSystem.CyberPhysicalSystem;
+import org.eclipse.viatra.examples.cps.cyberPhysicalSystem.CyberPhysicalSystemFactory;
+import org.junit.Test;
+
+public class EMFIdentifierProviderTest {
+
+ private EMFIdentifierProvider identifierProvider = new EMFIdentifierProvider();
+
+ @Test
+ public void identifyEPackage() {
+ EcorePackage ecorePackage = EcorePackage.eINSTANCE;
+ String identify = identifierProvider.identify(ecorePackage);
+
+ assertEquals(EcorePackage.eNS_URI, identify);
+
+ }
+
+ @Test
+ public void identifyEClass() {
+ EClass eClass = EcorePackage.Literals.ECLASS;
+ String identify = identifierProvider.identify(eClass);
+
+ assertTrue(identify.startsWith(eClass.getEPackage().getNsURI()));
+ assertTrue(identify.endsWith(eClass.getName()));
+ }
+
+ @Test
+ public void identifyEStructuralFeature() {
+ EAttribute eAttribute = EcorePackage.Literals.ENAMED_ELEMENT__NAME;
+ String identify = identifierProvider.identify(eAttribute);
+
+ assertTrue(identify.startsWith(eAttribute.getEContainingClass().getEPackage().getNsURI()));
+ assertTrue(identify.contains(eAttribute.getEContainingClass().getName()));
+ assertTrue(identify.endsWith(eAttribute.getName()));
+
+ }
+
+ @Test
+ public void identifyEOperation() {
+ EcoreFactory ecoreFactory = EcoreFactory.eINSTANCE;
+ EPackage ePackage = ecoreFactory.createEPackage();
+ ePackage.setNsURI("testUri");
+ EClass eClass = ecoreFactory.createEClass();
+ eClass.setName("TestClass");
+ ePackage.getEClassifiers().add(eClass);
+ EOperation eOperation = ecoreFactory.createEOperation();
+ eOperation.setName("testOp");
+ eClass.getEOperations().add(eOperation);
+ String identify = identifierProvider.identify(eOperation);
+
+ assertTrue(identify.startsWith(eOperation.getEContainingClass().getEPackage().getNsURI()));
+ assertTrue(identify.contains(eOperation.getEContainingClass().getName()));
+ assertTrue(identify.endsWith(eOperation.getName()));
+
+ }
+
+ @Test
+ public void identifyEDataType() {
+ EDataType eBoolean = EcorePackage.Literals.EBOOLEAN;
+ String identify = identifierProvider.identify(eBoolean);
+
+ assertTrue(identify.startsWith(eBoolean.getEPackage().getNsURI()));
+ assertTrue(identify.endsWith(eBoolean.getName()));
+
+ }
+
+ @Test
+ public void identifyEEnum() {
+ EcoreFactory ecoreFactory = EcoreFactory.eINSTANCE;
+ EPackage ePackage = ecoreFactory.createEPackage();
+ ePackage.setNsURI("testUri");
+ EEnum eEnum = ecoreFactory.createEEnum();
+ eEnum.setName("testEnum");
+ ePackage.getEClassifiers().add(eEnum);
+ String identify = identifierProvider.identify(eEnum);
+
+ assertTrue(identify.startsWith(eEnum.getEPackage().getNsURI()));
+ assertTrue(identify.endsWith(eEnum.getName()));
+
+ }
+
+ @Test
+ public void identifyEEnumLiteral() {
+ EcoreFactory ecoreFactory = EcoreFactory.eINSTANCE;
+ EPackage ePackage = ecoreFactory.createEPackage();
+ ePackage.setNsURI("testUri");
+ EEnum eEnum = ecoreFactory.createEEnum();
+ eEnum.setName("testEnum");
+ ePackage.getEClassifiers().add(eEnum);
+ EEnumLiteral literal = ecoreFactory.createEEnumLiteral();
+ literal.setName("testLiteral");
+ eEnum.getELiterals().add(literal);
+
+ String identify = identifierProvider.identify(literal);
+
+ assertTrue(identify.startsWith(eEnum.getEPackage().getNsURI()));
+ assertTrue(identify.contains(eEnum.getName()));
+ assertTrue(identify.endsWith(literal.getName()));
+ }
+
+ @Test
+ public void identifyEObject() {
+ CyberPhysicalSystemFactory factory = CyberPhysicalSystemFactory.eINSTANCE;
+ CyberPhysicalSystem cps = factory.createCyberPhysicalSystem();
+ cps.setIdentifier("cps");
+
+ identifierProvider.setEObjectIdentifierProvider(new EObjectIdentifierProvider() {
+
+ @Override
+ public String identify(EObject eObject) {
+ return EcoreUtil.getID(eObject);
+ }
+ });
+ String identify = identifierProvider.identifyEObject(cps);
+
+ assertTrue(identify.endsWith(cps.getIdentifier()));
+ }
+}
diff --git a/tests/org.eclipse.emf.diffmerge.patch.tests.emf/src/org/eclipse/emf/diffmerge/patch/tests/emf/identifier/IdentifiedEMFObjectLocatorTest.java b/tests/org.eclipse.emf.diffmerge.patch.tests.emf/src/org/eclipse/emf/diffmerge/patch/tests/emf/identifier/IdentifiedEMFObjectLocatorTest.java
new file mode 100644
index 0000000..51cb9e5
--- /dev/null
+++ b/tests/org.eclipse.emf.diffmerge.patch.tests.emf/src/org/eclipse/emf/diffmerge/patch/tests/emf/identifier/IdentifiedEMFObjectLocatorTest.java
@@ -0,0 +1,86 @@
+/*******************************************************************************
+ * Copyright (c) 2016-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:
+ * Abel Hegedus, Tamas Borbas, Daniel Segesdi (IncQuery Labs Ltd.) - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.emf.diffmerge.patch.tests.emf.identifier;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import org.eclipse.emf.diffmerge.patch.runtime.identifier.EMFIdentifierProvider;
+import org.eclipse.emf.diffmerge.patch.runtime.identifier.IdentifiedEMFObjectLocator;
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EClassifier;
+import org.eclipse.emf.ecore.EEnum;
+import org.eclipse.emf.ecore.EEnumLiteral;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecore.EcoreFactory;
+import org.eclipse.emf.ecore.EcorePackage;
+import org.junit.Test;
+
+import com.google.common.base.Optional;
+
+public class IdentifiedEMFObjectLocatorTest {
+
+ EMFIdentifierProvider identifierProvider = new EMFIdentifierProvider();
+ IdentifiedEMFObjectLocator objectLocator = new IdentifiedEMFObjectLocator();
+
+ @Test
+ public void locateEPackage() {
+ EcorePackage ecorePackage = EcorePackage.eINSTANCE;
+ String identify = identifierProvider.identify(ecorePackage);
+
+ Optional<EPackage> located = objectLocator.locateEPackage(identify);
+ assertLocatedValue(ecorePackage, located);
+ }
+
+ @Test
+ public void locateEClass() {
+ EClass eClass = EcorePackage.Literals.ECLASS;
+ String identify = identifierProvider.identify(eClass);
+
+ Optional<EClassifier> located = objectLocator.locateEClassifier(identify);
+ assertLocatedValue(eClass, located);
+ }
+
+ @Test
+ public void locateEStructuralFeature() {
+ EAttribute eAttribute = EcorePackage.Literals.ENAMED_ELEMENT__NAME;
+ String identify = identifierProvider.identify(eAttribute);
+
+ Optional<EStructuralFeature> located = objectLocator.locateEStructuralFeature(identify);
+ assertLocatedValue(eAttribute, located);
+ }
+
+ @Test
+ public void locateEEnumLiteral() {
+ EcoreFactory ecoreFactory = EcoreFactory.eINSTANCE;
+ EPackage ePackage = ecoreFactory.createEPackage();
+ ePackage.setNsURI("testUri");
+ EEnum eEnum = ecoreFactory.createEEnum();
+ eEnum.setName("testEnum");
+ ePackage.getEClassifiers().add(eEnum);
+ EEnumLiteral literal = ecoreFactory.createEEnumLiteral();
+ literal.setName("testLiteral");
+ eEnum.getELiterals().add(literal);
+
+ String identify = identifierProvider.identify(literal);
+
+ objectLocator.registerEPackage(ePackage);
+ Optional<EEnumLiteral> located = objectLocator.locateEEnumLiteral(identify);
+ assertLocatedValue(literal, located);
+ }
+
+ private <T> void assertLocatedValue(T value, Optional<T> located) {
+ assertTrue("Locate did not return value",located.isPresent());
+ assertEquals(value, located.get());
+ }
+}
diff --git a/tests/org.eclipse.emf.diffmerge.patch.tests.emf/src/org/eclipse/emf/diffmerge/patch/tests/emf/identifier/IdentifierTestSuite.java b/tests/org.eclipse.emf.diffmerge.patch.tests.emf/src/org/eclipse/emf/diffmerge/patch/tests/emf/identifier/IdentifierTestSuite.java
new file mode 100644
index 0000000..62ad3ae
--- /dev/null
+++ b/tests/org.eclipse.emf.diffmerge.patch.tests.emf/src/org/eclipse/emf/diffmerge/patch/tests/emf/identifier/IdentifierTestSuite.java
@@ -0,0 +1,24 @@
+/*******************************************************************************
+ * Copyright (c) 2016-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:
+ * Abel Hegedus, Tamas Borbas, Daniel Segesdi (IncQuery Labs Ltd.) - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.emf.diffmerge.patch.tests.emf.identifier;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Suite;
+import org.junit.runners.Suite.SuiteClasses;
+
+@SuiteClasses({
+ EMFIdentifierProviderTest.class,
+ IdentifiedEMFObjectLocatorTest.class
+})
+
+
+@RunWith(Suite.class)
+public class IdentifierTestSuite {}
diff --git a/tests/org.eclipse.emf.diffmerge.patch.tests.performance/META-INF/MANIFEST.MF b/tests/org.eclipse.emf.diffmerge.patch.tests.performance/META-INF/MANIFEST.MF
index e6ae46a..14375e4 100644
--- a/tests/org.eclipse.emf.diffmerge.patch.tests.performance/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.emf.diffmerge.patch.tests.performance/META-INF/MANIFEST.MF
@@ -20,5 +20,6 @@ Require-Bundle: org.junit;bundle-version="4.12.0",
org.apache.log4j;bundle-version="1.2.15",
org.eclipse.viatra.query.runtime;bundle-version="[1.4.0,2.0.0)",
org.eclipse.viatra.transformation.runtime.emf;bundle-version="[1.4.0,2.0.0)",
- org.eclipse.emf.diffmerge.patch.persistence.json;bundle-version="[0.1.0,0.2.0)"
+ org.eclipse.emf.diffmerge.patch.persistence.json;bundle-version="[0.1.0,0.2.0)",
+ org.eclipse.viatra.query.runtime.base.itc;bundle-version="[1.4.0,2.0.0)"
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
diff --git a/tests/org.eclipse.emf.diffmerge.patch.tests.performance/src/org/eclipse/emf/diffmerge/patch/tests/performance/ModelPatchPerformanceTests.xtend b/tests/org.eclipse.emf.diffmerge.patch.tests.performance/src/org/eclipse/emf/diffmerge/patch/tests/performance/ModelPatchPerformanceTests.xtend
index d155808..2720273 100644
--- a/tests/org.eclipse.emf.diffmerge.patch.tests.performance/src/org/eclipse/emf/diffmerge/patch/tests/performance/ModelPatchPerformanceTests.xtend
+++ b/tests/org.eclipse.emf.diffmerge.patch.tests.performance/src/org/eclipse/emf/diffmerge/patch/tests/performance/ModelPatchPerformanceTests.xtend
@@ -107,10 +107,10 @@ class ModelPatchPerformanceTests {
println("Patch created")
//********** Serialize Patch **********
- var IModelPatchSerializer serializer=GsonModelPatchSerializer.create(this.class.classLoader)
+ var IModelPatchSerializer serializer = GsonModelPatchSerializer.create(this.class.classLoader)
watch.reset.start
- val serializedPatch = serializer.serializeStream(modelPatch)
+ val serializedPatch = serializer.serialize(modelPatch)
results.add(watch.elapsed(TimeUnit.MICROSECONDS))
println("Patch serialized")
@@ -168,8 +168,8 @@ class ModelPatchPerformanceTests {
val modelPatchRecorder = new ModelPatchRecorder
val modelPatch = modelPatchRecorder.generateModelPatch(comparison)
//********** Serialize Patch **********
- var IModelPatchSerializer serializer=GsonModelPatchSerializer.create(this.class.classLoader)
- val patchOutput = serializer.serializeStream(modelPatch)
+ var IModelPatchSerializer serializer = GsonModelPatchSerializer.create(this.class.classLoader)
+ val patchOutput = serializer.serialize(modelPatch)
//********** Deserialize Patch **********
val readPatch = serializer.load(patchOutput)
//********** Apply Patch **********
diff --git a/tests/org.eclipse.emf.diffmerge.patch.tests.persistence.emf/.classpath b/tests/org.eclipse.emf.diffmerge.patch.tests.persistence.emf/.classpath
new file mode 100644
index 0000000..e850b35
--- /dev/null
+++ b/tests/org.eclipse.emf.diffmerge.patch.tests.persistence.emf/.classpath
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="src" path="xtend-gen"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/tests/org.eclipse.emf.diffmerge.patch.tests.persistence.emf/.project b/tests/org.eclipse.emf.diffmerge.patch.tests.persistence.emf/.project
new file mode 100644
index 0000000..42a1e20
--- /dev/null
+++ b/tests/org.eclipse.emf.diffmerge.patch.tests.persistence.emf/.project
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.emf.diffmerge.patch.tests.persistence.emf</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.xtext.ui.shared.xtextBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <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.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
+ </natures>
+</projectDescription>
diff --git a/tests/org.eclipse.emf.diffmerge.patch.tests.persistence.emf/.settings/org.eclipse.core.resources.prefs b/tests/org.eclipse.emf.diffmerge.patch.tests.persistence.emf/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/tests/org.eclipse.emf.diffmerge.patch.tests.persistence.emf/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/tests/org.eclipse.emf.diffmerge.patch.tests.persistence.emf/.settings/org.eclipse.core.runtime.prefs b/tests/org.eclipse.emf.diffmerge.patch.tests.persistence.emf/.settings/org.eclipse.core.runtime.prefs
new file mode 100644
index 0000000..5a0ad22
--- /dev/null
+++ b/tests/org.eclipse.emf.diffmerge.patch.tests.persistence.emf/.settings/org.eclipse.core.runtime.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+line.separator=\n
diff --git a/tests/org.eclipse.emf.diffmerge.patch.tests.persistence.emf/.settings/org.eclipse.jdt.core.prefs b/tests/org.eclipse.emf.diffmerge.patch.tests.persistence.emf/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..f42de36
--- /dev/null
+++ b/tests/org.eclipse.emf.diffmerge.patch.tests.persistence.emf/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
+org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.7
diff --git a/tests/org.eclipse.emf.diffmerge.patch.tests.persistence.emf/META-INF/MANIFEST.MF b/tests/org.eclipse.emf.diffmerge.patch.tests.persistence.emf/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..f240da6
--- /dev/null
+++ b/tests/org.eclipse.emf.diffmerge.patch.tests.persistence.emf/META-INF/MANIFEST.MF
@@ -0,0 +1,14 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.emf.diffmerge.patch.tests.persistence.emf
+Bundle-Version: 0.1.0.qualifier
+Bundle-RequiredExecutionEnvironment: JavaSE-1.7
+Require-Bundle: org.junit;bundle-version="4.12.0",
+ org.eclipse.emf.diffmerge.patch;bundle-version="[0.1.0,0.2.0)",
+ org.eclipse.xtend.lib,
+ org.eclipse.emf.diffmerge.patch.persistence.emf;bundle-version="[0.1.0,0.2.0)",
+ org.eclipse.emf.diffmerge.patch.runtime;bundle-version="[0.1.0,0.2.0)",
+ org.eclipse.emf.diffmerge.patch.persistence.json;bundle-version="[0.1.0,0.2.0)"
+Bundle-Vendor: %providerName
+Export-Package: org.eclipse.emf.diffmerge.patch.tests.persistence.emf
diff --git a/tests/org.eclipse.emf.diffmerge.patch.tests.persistence.emf/about.html b/tests/org.eclipse.emf.diffmerge.patch.tests.persistence.emf/about.html
new file mode 100644
index 0000000..d8e1984
--- /dev/null
+++ b/tests/org.eclipse.emf.diffmerge.patch.tests.persistence.emf/about.html
@@ -0,0 +1,21 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html>
+<head>
+<title>About</title>
+<meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1">
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>June 5, 2007</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;). Unless otherwise indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;). A copy of the EPL is available at <a href="http://www.eclipse.org/org/documents/epl-v10.php">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+</body>
+</html> \ No newline at end of file
diff --git a/tests/org.eclipse.emf.diffmerge.patch.tests.persistence.emf/build.properties b/tests/org.eclipse.emf.diffmerge.patch.tests.persistence.emf/build.properties
new file mode 100644
index 0000000..909ef3f
--- /dev/null
+++ b/tests/org.eclipse.emf.diffmerge.patch.tests.persistence.emf/build.properties
@@ -0,0 +1,17 @@
+###############################################################################
+# Copyright (c) 2016-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:
+# Abel Hegedus, Tamas Borbas, Peter Lunk, Daniel Segesdi (IncQuery Labs Ltd.) - initial API and implementation
+###############################################################################
+source.. = src/,\
+ xtend-gen/
+output.. = bin/
+bin.includes = META-INF/,\
+ .,\
+ about.html
+src.includes = about.html
diff --git a/tests/org.eclipse.emf.diffmerge.patch.tests.persistence.emf/plugin.properties b/tests/org.eclipse.emf.diffmerge.patch.tests.persistence.emf/plugin.properties
new file mode 100644
index 0000000..8cf3b92
--- /dev/null
+++ b/tests/org.eclipse.emf.diffmerge.patch.tests.persistence.emf/plugin.properties
@@ -0,0 +1,9 @@
+###############################################################################
+# Copyright (c) 2016-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 = Model Patch EMF Persistence Tests Plug-In (Incubation)
+providerName = Eclipse Modeling Project
diff --git a/tests/org.eclipse.emf.diffmerge.patch.tests.persistence.emf/pom.xml b/tests/org.eclipse.emf.diffmerge.patch.tests.persistence.emf/pom.xml
new file mode 100644
index 0000000..7505279
--- /dev/null
+++ b/tests/org.eclipse.emf.diffmerge.patch.tests.persistence.emf/pom.xml
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright (c) 2016-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:
+ Abel Hegedus, Tamas Borbas, Peter Lunk, Daniel Segesdi (IncQuery Labs Ltd.) - initial API and implementation
+ -->
+
+<project
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+ xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <artifactId>org.eclipse.emf.diffmerge.patch.tests.parent</artifactId>
+ <groupId>org.eclipse.emf.diffmerge.patch</groupId>
+ <version>0.1.0-SNAPSHOT</version>
+ </parent>
+ <artifactId>org.eclipse.emf.diffmerge.patch.tests.persistence.emf</artifactId>
+ <packaging>eclipse-test-plugin</packaging>
+ <version>0.1.0-SNAPSHOT</version>
+ <properties>
+ <rootPath>${basedir}/../</rootPath>
+ </properties>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-clean-plugin</artifactId>
+ <configuration>
+ <filesets>
+ <fileset>
+ <directory>xtend-gen</directory>
+ <excludes>
+ <exclude>.gitignore</exclude>
+ </excludes>
+ </fileset>
+ </filesets>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.eclipse.xtend</groupId>
+ <artifactId>xtend-maven-plugin</artifactId>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/tests/org.eclipse.emf.diffmerge.patch.tests.persistence.emf/src/org/eclipse/emf/diffmerge/patch/tests/persistence/emf/BaseModelPatchPersistenceEMFTest.java b/tests/org.eclipse.emf.diffmerge.patch.tests.persistence.emf/src/org/eclipse/emf/diffmerge/patch/tests/persistence/emf/BaseModelPatchPersistenceEMFTest.java
new file mode 100644
index 0000000..7e60ea5
--- /dev/null
+++ b/tests/org.eclipse.emf.diffmerge.patch.tests.persistence.emf/src/org/eclipse/emf/diffmerge/patch/tests/persistence/emf/BaseModelPatchPersistenceEMFTest.java
@@ -0,0 +1,60 @@
+/*******************************************************************************
+ * 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:
+ * Abel Hegedus (IncQuery Labs Ltd.) - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.emf.diffmerge.patch.tests.persistence.emf;
+
+import org.eclipse.emf.diffmerge.patch.AttributeEntry;
+import org.eclipse.emf.diffmerge.patch.ElementEntry;
+import org.eclipse.emf.diffmerge.patch.ReferenceEntry;
+import org.eclipse.emf.diffmerge.patch.api.ChangeDirection;
+import org.eclipse.emf.diffmerge.patch.api.Identifiable;
+import org.eclipse.emf.diffmerge.patch.api.ModelPatch;
+import org.eclipse.emf.diffmerge.patch.api.ModelPatchBuilder;
+import org.eclipse.emf.diffmerge.patch.api.ModelPatchEntryBuilder;
+
+public class BaseModelPatchPersistenceEMFTest {
+
+ public BaseModelPatchPersistenceEMFTest() {
+ super();
+ }
+
+ protected ModelPatch buildPatch() {
+ ModelPatchBuilder builder = ModelPatchBuilder.create();
+
+ Identifiable elementId = new Identifiable("element1");
+ ModelPatchEntryBuilder entryBuilder = ModelPatchBuilder.entryBuilder(elementId, ChangeDirection.ADD);
+ ElementEntry elementEntry = entryBuilder
+ .setType(new Identifiable("type1"))
+ .buildElementEntry();
+ builder.addEntry(elementEntry);
+
+ AttributeEntry attributeEntry = entryBuilder
+ .setFeature(new Identifiable("attr1"))
+ .setValue("value1")
+ .buildAttributeEntry();
+ builder.addEntry(attributeEntry);
+
+ ReferenceEntry referenceEntry = entryBuilder
+ .setFeature(new Identifiable("ref1"))
+ .setTarget(elementId)
+ .buildReferenceEntry();
+ builder.addEntry(referenceEntry);
+
+ ReferenceEntry refEntry2 = entryBuilder
+ .setFeature(new Identifiable("ref2"))
+ .setTarget(new Identifiable("target"))
+ .setDirection(ChangeDirection.REMOVE)
+ .buildReferenceEntry();
+ builder.addEntry(refEntry2);
+
+ return builder.build();
+ }
+
+}
diff --git a/tests/org.eclipse.emf.diffmerge.patch.tests.persistence.emf/src/org/eclipse/emf/diffmerge/patch/tests/persistence/emf/ModelPatchPersistenceEMFTest.java b/tests/org.eclipse.emf.diffmerge.patch.tests.persistence.emf/src/org/eclipse/emf/diffmerge/patch/tests/persistence/emf/ModelPatchPersistenceEMFTest.java
new file mode 100644
index 0000000..ebabb58
--- /dev/null
+++ b/tests/org.eclipse.emf.diffmerge.patch.tests.persistence.emf/src/org/eclipse/emf/diffmerge/patch/tests/persistence/emf/ModelPatchPersistenceEMFTest.java
@@ -0,0 +1,103 @@
+/*******************************************************************************
+ * Copyright (c) 2016-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:
+ * Abel Hegedus (IncQuery Labs Ltd.) - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.emf.diffmerge.patch.tests.persistence.emf;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import org.eclipse.emf.diffmerge.patch.ElementEntry;
+import org.eclipse.emf.diffmerge.patch.api.ChangeDirection;
+import org.eclipse.emf.diffmerge.patch.api.Identifiable;
+import org.eclipse.emf.diffmerge.patch.api.ModelPatch;
+import org.eclipse.emf.diffmerge.patch.api.ModelPatchBuilder;
+import org.eclipse.emf.diffmerge.patch.api.ModelPatchException;
+import org.eclipse.emf.diffmerge.patch.persistence.emf.EMFModelPatchPersister;
+import org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatch;
+import org.eclipse.emf.diffmerge.patch.persistence.emf.emodelpatch.EModelPatchEMFMetadata;
+import org.eclipse.emf.diffmerge.patch.runtime.EMFModelPatchMetadata;
+import org.junit.Test;
+
+public class ModelPatchPersistenceEMFTest extends BaseModelPatchPersistenceEMFTest {
+
+
+ @Test
+ public void persist_emptyModelPatch() throws ModelPatchException {
+ ModelPatch modelPatch = new ModelPatch();
+ EMFModelPatchPersister emfPersister = new EMFModelPatchPersister();
+ EModelPatch eModelPatch = emfPersister.persist(modelPatch);
+ assertNotNull(eModelPatch.getMetadata());
+ }
+
+ @Test
+ public void persist_entries() throws ModelPatchException {
+ ModelPatch modelPatch = buildPatch();
+ EMFModelPatchPersister emfPersister = new EMFModelPatchPersister();
+ EModelPatch eModelPatch = emfPersister.persist(modelPatch);
+ assertFalse(eModelPatch.getEntries().isEmpty());
+ }
+
+ @Test
+ public void persist_emfMetadata() throws ModelPatchException {
+ ModelPatch modelPatch = buildPatch();
+ EMFModelPatchMetadata emfModelPatchMetadata = new EMFModelPatchMetadata();
+ emfModelPatchMetadata.getModelUriList().add("modelUri");
+ emfModelPatchMetadata.getUsedNamespaceUris().add("nsUri");
+ modelPatch.setMetadata(emfModelPatchMetadata);
+
+ EMFModelPatchPersister emfPersister = new EMFModelPatchPersister();
+ EModelPatch eModelPatch = emfPersister.persist(modelPatch);
+
+ assertTrue(eModelPatch.getMetadata() instanceof EModelPatchEMFMetadata);
+ }
+
+ @Test
+ public void persist_duplicates() throws ModelPatchException {
+ ModelPatch modelPatch = buildPatch();
+ ElementEntry duplicateEntry = ModelPatchBuilder.entryBuilder(new Identifiable("context"), ChangeDirection.ADD)
+ .setType(new Identifiable("target"))
+ .buildElementEntry();
+ modelPatch.getEntries().add(duplicateEntry);
+
+ EMFModelPatchPersister emfPersister = new EMFModelPatchPersister();
+ EModelPatch eModelPatch = emfPersister.persist(modelPatch);
+ assertFalse(eModelPatch.getEntries().isEmpty());
+ }
+
+ @Test
+ public void load() throws ModelPatchException {
+ ModelPatch modelPatch = buildPatch();
+ EMFModelPatchPersister emfPersister = new EMFModelPatchPersister();
+ EModelPatch eModelPatch = emfPersister.persist(modelPatch);
+ assertFalse(eModelPatch.getEntries().isEmpty());
+
+ ModelPatch patch = emfPersister.load(eModelPatch);
+ assertEquals(patch.getEntries().size(), modelPatch.getEntries().size());
+ }
+
+ @Test
+ public void load_emfMetadata() throws ModelPatchException {
+ ModelPatch modelPatch = buildPatch();
+ EMFModelPatchMetadata emfModelPatchMetadata = new EMFModelPatchMetadata();
+ emfModelPatchMetadata.getModelUriList().add("modelUri");
+ emfModelPatchMetadata.getUsedNamespaceUris().add("nsUri");
+ modelPatch.setMetadata(emfModelPatchMetadata);
+
+ EMFModelPatchPersister emfPersister = new EMFModelPatchPersister();
+ EModelPatch eModelPatch = emfPersister.persist(modelPatch);
+ assertFalse(eModelPatch.getEntries().isEmpty());
+
+ ModelPatch patch = emfPersister.load(eModelPatch);
+ assertTrue(patch.getMetadata() instanceof EMFModelPatchMetadata);
+ }
+
+}
diff --git a/tests/org.eclipse.emf.diffmerge.patch.tests.persistence.emf/src/org/eclipse/emf/diffmerge/patch/tests/persistence/emf/ModelPatchPersistenceEMFTestSuite.xtend b/tests/org.eclipse.emf.diffmerge.patch.tests.persistence.emf/src/org/eclipse/emf/diffmerge/patch/tests/persistence/emf/ModelPatchPersistenceEMFTestSuite.xtend
new file mode 100644
index 0000000..7b5d49a
--- /dev/null
+++ b/tests/org.eclipse.emf.diffmerge.patch.tests.persistence.emf/src/org/eclipse/emf/diffmerge/patch/tests/persistence/emf/ModelPatchPersistenceEMFTestSuite.xtend
@@ -0,0 +1,22 @@
+/*******************************************************************************
+ * Copyright (c) 2016-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:
+ * Abel Hegedus (IncQuery Labs Ltd.) - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.emf.diffmerge.patch.tests.persistence.emf
+
+import org.junit.runner.RunWith
+import org.junit.runners.Suite
+import org.junit.runners.Suite.SuiteClasses
+
+@SuiteClasses(#[
+ ModelPatchPersistenceEMFTest,
+ ModelPatchSerializerEMFTest
+])
+@RunWith(Suite)
+class ModelPatchPersistenceEMFTestSuite {}
diff --git a/tests/org.eclipse.emf.diffmerge.patch.tests.persistence.emf/src/org/eclipse/emf/diffmerge/patch/tests/persistence/emf/ModelPatchSerializerEMFTest.xtend b/tests/org.eclipse.emf.diffmerge.patch.tests.persistence.emf/src/org/eclipse/emf/diffmerge/patch/tests/persistence/emf/ModelPatchSerializerEMFTest.xtend
new file mode 100644
index 0000000..769470d
--- /dev/null
+++ b/tests/org.eclipse.emf.diffmerge.patch.tests.persistence.emf/src/org/eclipse/emf/diffmerge/patch/tests/persistence/emf/ModelPatchSerializerEMFTest.xtend
@@ -0,0 +1,73 @@
+/*******************************************************************************
+ * 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:
+ * Abel Hegedus (IncQuery Labs Ltd.) - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.emf.diffmerge.patch.tests.persistence.emf
+
+import java.io.File
+import org.eclipse.emf.diffmerge.patch.api.ModelPatch
+import org.eclipse.emf.diffmerge.patch.api.ModelPatchException
+import org.eclipse.emf.diffmerge.patch.persistence.emf.EMFModelPatchSerializer
+import org.junit.Test
+
+import static org.junit.Assert.*
+
+class ModelPatchSerializerEMFTest extends BaseModelPatchPersistenceEMFTest {
+
+ public static val PATCH_FILE_PATH = "../org.eclipse.emf.diffmerge.patch.tests.emf/model/demo-patch-generated."
+ public static val RESULT_FILE_PATH = "../org.eclipse.emf.diffmerge.patch.tests.emf/results/demo-patch-generated."
+
+ @Test
+ def void persist_emptyModelPatch() throws ModelPatchException {
+ val modelPatch = new ModelPatch()
+ val emfSerializer = new EMFModelPatchSerializer()
+ val eModelPatch = emfSerializer.serialize(modelPatch)
+ println(eModelPatch);
+ assertTrue(eModelPatch.contains("org.eclipse.emf.diffmerge.patch:EModelPatch"));
+ }
+
+ @Test
+ def void persist_entries() throws ModelPatchException {
+ val modelPatch = buildPatch()
+ val emfSerializer = new EMFModelPatchSerializer()
+ val eModelPatch = emfSerializer.serialize(modelPatch)
+ println(eModelPatch)
+ assertTrue(eModelPatch.contains("entries"))
+ }
+
+ @Test
+ def void load_entries() throws ModelPatchException {
+ val modelPatch = buildPatch()
+ val emfSerializer = new EMFModelPatchSerializer()
+ val eModelPatch = emfSerializer.serialize(modelPatch)
+
+ val modelPatch2 = emfSerializer.load(eModelPatch)
+ assertEquals(modelPatch.entries.size, modelPatch2.entries.size)
+ }
+
+ @Test
+ def void persist_file() throws ModelPatchException {
+ val patchFile = new File(PATCH_FILE_PATH + "emodelpatch");
+ val epatchFile = new File(RESULT_FILE_PATH + "emodelpatch");
+ epatchFile.delete
+ val emfSerializer = new EMFModelPatchSerializer()
+ val modelPatch = emfSerializer.load(patchFile)
+ emfSerializer.serialize(modelPatch,epatchFile)
+ assertTrue(epatchFile.exists)
+ }
+
+ @Test
+ def void load_file() throws ModelPatchException {
+ val epatchFile = new File(PATCH_FILE_PATH + "emodelpatch");
+ val emfSerializer = new EMFModelPatchSerializer()
+
+ val modelPatch = emfSerializer.load(epatchFile)
+ assertTrue(modelPatch.entries.size > 0)
+ }
+}
diff --git a/tests/org.eclipse.emf.diffmerge.patch.tests.persistence.emf/xtend-gen/.gitignore b/tests/org.eclipse.emf.diffmerge.patch.tests.persistence.emf/xtend-gen/.gitignore
new file mode 100644
index 0000000..d6b7ef3
--- /dev/null
+++ b/tests/org.eclipse.emf.diffmerge.patch.tests.persistence.emf/xtend-gen/.gitignore
@@ -0,0 +1,2 @@
+*
+!.gitignore
diff --git a/tests/org.eclipse.emf.diffmerge.patch.tests.persistence.json/.classpath b/tests/org.eclipse.emf.diffmerge.patch.tests.persistence.json/.classpath
index 325150d..e850b35 100644
--- a/tests/org.eclipse.emf.diffmerge.patch.tests.persistence.json/.classpath
+++ b/tests/org.eclipse.emf.diffmerge.patch.tests.persistence.json/.classpath
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
- <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
- <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
- <classpathentry kind="src" path="src"/>
- <classpathentry kind="src" path="xtend-gen"/>
- <classpathentry kind="output" path="bin"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="src" path="xtend-gen"/>
+ <classpathentry kind="output" path="bin"/>
</classpath>
diff --git a/tests/org.eclipse.emf.diffmerge.patch.tests.persistence.json/src/org/eclipse/emf/diffmerge/patch/tests/persistence/json/ModelPatchPersistenceJsonTest.java b/tests/org.eclipse.emf.diffmerge.patch.tests.persistence.json/src/org/eclipse/emf/diffmerge/patch/tests/persistence/json/ModelPatchPersistenceJsonTest.java
index f631814..3fef874 100644
--- a/tests/org.eclipse.emf.diffmerge.patch.tests.persistence.json/src/org/eclipse/emf/diffmerge/patch/tests/persistence/json/ModelPatchPersistenceJsonTest.java
+++ b/tests/org.eclipse.emf.diffmerge.patch.tests.persistence.json/src/org/eclipse/emf/diffmerge/patch/tests/persistence/json/ModelPatchPersistenceJsonTest.java
@@ -31,15 +31,15 @@ public class ModelPatchPersistenceJsonTest {
@Test
public void emptyModelPatchGsonSerialization() throws ModelPatchException {
ModelPatch modelPatch = new ModelPatch();
- String result = GsonModelPatchSerializer.create(this.getClass().getClassLoader()).serialize(modelPatch);
+ String result = GsonModelPatchSerializer.create(this.getClass().getClassLoader()).persist(modelPatch);
assertTrue(result.contains("entries"));
}
@Test
public void entriesGsonSerialization() throws ModelPatchException {
- ModelPatch modelPatch = createPatch();
+ ModelPatch modelPatch = buildPatch();
- String result = GsonModelPatchSerializer.create(this.getClass().getClassLoader()).serialize(modelPatch);
+ String result = GsonModelPatchSerializer.create(this.getClass().getClassLoader()).persist(modelPatch);
System.out.println(result);
assertTrue(result.contains("entries"));
}
@@ -48,7 +48,7 @@ public class ModelPatchPersistenceJsonTest {
public void modelPatchBuilderGson() throws ModelPatchException {
ModelPatch modelPatch = buildPatch();
- String result = GsonModelPatchSerializer.create(this.getClass().getClassLoader()).serialize(modelPatch);
+ String result = GsonModelPatchSerializer.create(this.getClass().getClassLoader()).persist(modelPatch);
System.out.println(result);
assertTrue(result.contains("entries"));
@@ -81,35 +81,4 @@ public class ModelPatchPersistenceJsonTest {
return builder.build();
}
- private ModelPatch createPatch(){
- ModelPatch modelPatch = new ModelPatch();
- ElementEntry elementEntry = new ElementEntry();
- elementEntry.setDirection(ChangeDirection.ADD);
-
- Identifiable elementId = new Identifiable("element1");
- elementEntry.setContext(elementId);
-
- Identifiable typeId = new Identifiable("type1");
- elementEntry.setType(typeId);
- modelPatch.getEntries().add(elementEntry);
-
- AttributeEntry attributeEntry = new AttributeEntry();
- attributeEntry.setDirection(ChangeDirection.ADD);
- attributeEntry.setContext(elementId);
- attributeEntry.setValue("value1");
-
- Identifiable attributeId = new Identifiable("attr1");
- attributeEntry.setFeature(attributeId);
- modelPatch.getEntries().add(attributeEntry);
-
- ReferenceEntry referenceEntry = new ReferenceEntry();
- referenceEntry.setDirection(ChangeDirection.ADD);
- referenceEntry.setContext(elementId);
- referenceEntry.setTarget(elementId);
-
- Identifiable referenceId = new Identifiable("ref1");
- referenceEntry.setFeature(referenceId);
- modelPatch.getEntries().add(referenceEntry);
- return modelPatch;
- }
}
diff --git a/tests/org.eclipse.emf.diffmerge.patch.tests.ui/pom.xml b/tests/org.eclipse.emf.diffmerge.patch.tests.ui/pom.xml
index b8bafde..8cab5b9 100644
--- a/tests/org.eclipse.emf.diffmerge.patch.tests.ui/pom.xml
+++ b/tests/org.eclipse.emf.diffmerge.patch.tests.ui/pom.xml
@@ -21,14 +21,14 @@
<version>0.1.0-SNAPSHOT</version>
<packaging>rcpttTest</packaging>
- <dependencies>
- <dependency>
- <groupId>org.eclipse.emf.diffmerge.patch</groupId>
- <artifactId>org.eclipse.emf.diffmerge.patch.product</artifactId>
- <version>${project.version}</version>
- <type>eclipse-repository</type>
- </dependency>
- </dependencies>
+ <dependencies>
+ <dependency>
+ <groupId>org.eclipse.emf.diffmerge.patch</groupId>
+ <artifactId>org.eclipse.emf.diffmerge.patch.product</artifactId>
+ <version>${project.version}</version>
+ <type>eclipse-repository</type>
+ </dependency>
+ </dependencies>
<!-- Change properties below to your values -->
<properties>
diff --git a/tests/org.eclipse.emf.diffmerge.patch.tests/src/org/eclipse/emf/diffmerge/patch/tests/ModelPatchFilterTest.xtend b/tests/org.eclipse.emf.diffmerge.patch.tests/src/org/eclipse/emf/diffmerge/patch/tests/ModelPatchFilterTest.xtend
new file mode 100644
index 0000000..96b6b7c
--- /dev/null
+++ b/tests/org.eclipse.emf.diffmerge.patch.tests/src/org/eclipse/emf/diffmerge/patch/tests/ModelPatchFilterTest.xtend
@@ -0,0 +1,234 @@
+/**
+ * Copyright (c) 2016-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:
+ * Abel Hegedus (IncQuery Labs Ltd.) - initial API and implementation
+ */
+package org.eclipse.emf.diffmerge.patch.tests
+
+import org.eclipse.emf.diffmerge.patch.api.ChangeDirection
+import org.eclipse.emf.diffmerge.patch.api.ComplexMPEFilterType
+import org.eclipse.emf.diffmerge.patch.api.EntryType
+import org.eclipse.emf.diffmerge.patch.api.Identifiable
+import org.eclipse.emf.diffmerge.patch.api.ModelPatch
+import org.eclipse.emf.diffmerge.patch.api.ModelPatchBuilder
+import org.eclipse.emf.diffmerge.patch.api.ModelPatchFilterApplier
+import org.eclipse.emf.diffmerge.patch.api.filters.ComplexEntryFilter
+import org.eclipse.emf.diffmerge.patch.api.filters.EntryDirectionFilter
+import org.eclipse.emf.diffmerge.patch.api.filters.EntryTypeFilter
+import org.junit.Test
+
+import static org.junit.Assert.*
+import org.eclipse.emf.diffmerge.patch.api.filters.EntryPropertyFilter
+import org.eclipse.emf.diffmerge.patch.api.ModelPatchEntryProperty
+
+class ModelPatchFilterTest {
+
+ @Test
+ public def filterElementEntryType() {
+ // Prepare original patch
+ val originalPatch = ModelPatchBuilder.create.addEntry(
+ (ModelPatchBuilder.entryBuilder => [
+ it.context = new Identifiable("context")
+ it.direction = ChangeDirection.ADD
+ it.type = new Identifiable("type")
+ ]).build(EntryType.ELEMENT)
+ ).build
+
+ // Create filtered patch
+ val filtering = new ModelPatchFilterApplier
+ val filter = new EntryTypeFilter(EntryType.ELEMENT)
+ val filteredPatch = filtering.applyFilter(originalPatch, filter)
+
+ assertTrue(filter.filteredTypes.contains(EntryType.ELEMENT))
+ assertTrue(filteredPatch.entries.empty)
+ }
+
+ @Test
+ public def filterEntryType_notEmpty() {
+ // Prepare original patch
+ val originalPatch = preparePatch()
+
+ // Create filtered patch
+ val filtering = new ModelPatchFilterApplier
+ val filter = new EntryTypeFilter(EntryType.ELEMENT)
+ val filteredPatch = filtering.applyFilter(originalPatch, filter)
+
+ assertTrue(filteredPatch.entries.size == 1)
+ assertTrue(filteredPatch.entries.head.entryType == EntryType.ATTRIBUTE)
+ }
+
+ @Test
+ public def unfilterEntryType_notEmpty() {
+ // Prepare original patch
+ val originalPatch = preparePatch()
+
+ // Create filtered patch
+ val filtering = new ModelPatchFilterApplier
+ val filter = new EntryTypeFilter(EntryType.ELEMENT)
+ val filteredPatch = filtering.applyUnfilter(originalPatch, filter)
+
+ assertTrue(filteredPatch.entries.size == 1)
+ assertTrue(filteredPatch.entries.head.entryType == EntryType.ELEMENT)
+ }
+
+ @Test
+ public def directionFilter() {
+ // Prepare original patch
+ val originalPatch = preparePatch()
+
+ // Create filtered patch
+ val filtering = new ModelPatchFilterApplier
+ val filter = new EntryDirectionFilter(ChangeDirection.ADD)
+ val filteredPatch = filtering.applyFilter(originalPatch, filter)
+
+ assertTrue(filter.filteredDirection == ChangeDirection.ADD)
+ assertTrue(filteredPatch.entries.size == 1)
+ assertTrue(filteredPatch.entries.head.direction == ChangeDirection.REMOVE)
+ }
+
+ @Test
+ public def entryPropertyFilter_context() {
+ // Prepare original patch
+ val originalPatch = preparePatch()
+
+ // Create filtered patch
+ val filtering = new ModelPatchFilterApplier
+ val filter = new EntryPropertyFilter(ModelPatchEntryProperty.CONTEXT, "context")
+ val filteredPatch = filtering.applyFilter(originalPatch, filter)
+
+ assertTrue(filter.filteredProperty == ModelPatchEntryProperty.CONTEXT)
+ assertTrue(filter.filteredValue == "context")
+ assertTrue(filteredPatch.entries.size == 1)
+ assertTrue(filteredPatch.entries.head.context.identifier != "context")
+ }
+
+ @Test
+ public def entryPropertyFilter_type() {
+ // Prepare original patch
+ val originalPatch = preparePatch()
+
+ // Create filtered patch
+ val filtering = new ModelPatchFilterApplier
+ val filter = new EntryPropertyFilter(ModelPatchEntryProperty.TYPE, "type")
+ val filter