Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Stepper2018-09-14 06:29:37 +0000
committerEike Stepper2018-09-22 07:02:26 +0000
commitcae31d7fc6d047e936e1c6f220bf3f9c93c5758d (patch)
treef1d6f83ee5a322bd81e0d8004cce57df4ed9c833
parent20f29ab16df76f65f9454ffb70e713fc5354a689 (diff)
downloadcdo-cae31d7fc6d047e936e1c6f220bf3f9c93c5758d.tar.gz
cdo-cae31d7fc6d047e936e1c6f220bf3f9c93c5758d.tar.xz
cdo-cae31d7fc6d047e936e1c6f220bf3f9c93c5758d.zip
[256856] Support model evolution
https://bugs.eclipse.org/bugs/show_bug.cgi?id=256856
-rw-r--r--features/org.eclipse.emf.cdo-feature/feature.xml23
-rw-r--r--features/org.eclipse.emf.cdo-feature/pom.xml2
-rw-r--r--features/org.eclipse.emf.cdo.sdk-feature/feature.xml2
-rw-r--r--features/org.eclipse.emf.cdo.sdk-feature/pom.xml2
-rw-r--r--features/org.eclipse.emf.cdo.server.embedded-feature/feature.xml2
-rw-r--r--features/org.eclipse.emf.cdo.server.embedded-feature/pom.xml2
-rw-r--r--features/org.eclipse.net4j.db-feature/feature.xml2
-rw-r--r--features/org.eclipse.net4j.db-feature/pom.xml2
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution.edit/.classpath7
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution.edit/.project58
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution.edit/.settings/org.eclipse.jdt.core.prefs427
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution.edit/.settings/org.eclipse.jdt.launching.prefs3
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution.edit/.settings/org.eclipse.jdt.ui.prefs119
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution.edit/.settings/org.eclipse.ltk.core.refactoring.prefs3
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution.edit/.settings/org.eclipse.mylyn.tasks.ui.prefs4
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution.edit/.settings/org.eclipse.mylyn.team.ui.prefs3
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution.edit/.settings/org.eclipse.pde.api.tools.prefs95
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution.edit/.settings/org.eclipse.pde.prefs31
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution.edit/META-INF/MANIFEST.MF19
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution.edit/build.properties10
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution.edit/icons/full/obj16/Evolution.gifbin0 -> 551 bytes
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution.edit/icons/full/obj16/FeaturePathMigration.gifbin0 -> 129 bytes
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution.edit/icons/full/obj16/Model.gifbin0 -> 364 bytes
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution.edit/icons/full/obj16/ModelSetChange.gifbin0 -> 596 bytes
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution.edit/icons/full/obj16/Package.gifbin0 -> 291 bytes
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution.edit/icons/full/obj16/PropertyChange.gifbin0 -> 314 bytes
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution.edit/icons/full/obj16/Release.gifbin0 -> 376 bytes
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution.edit/plugin.properties85
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution.edit/plugin.xml25
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution.edit/pom.xml31
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution.edit/src/org/eclipse/emf/cdo/evolution/provider/ChangeItemProvider.java191
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution.edit/src/org/eclipse/emf/cdo/evolution/provider/ElementChangeItemProvider.java234
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution.edit/src/org/eclipse/emf/cdo/evolution/provider/EvolutionEditPlugin.java99
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution.edit/src/org/eclipse/emf/cdo/evolution/provider/EvolutionItemProvider.java359
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution.edit/src/org/eclipse/emf/cdo/evolution/provider/EvolutionItemProviderAdapterFactory.java443
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution.edit/src/org/eclipse/emf/cdo/evolution/provider/FeaturePathMigrationItemProvider.java182
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution.edit/src/org/eclipse/emf/cdo/evolution/provider/MigrationItemProvider.java167
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution.edit/src/org/eclipse/emf/cdo/evolution/provider/ModelItemProvider.java331
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution.edit/src/org/eclipse/emf/cdo/evolution/provider/ModelSetChangeItemProvider.java156
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution.edit/src/org/eclipse/emf/cdo/evolution/provider/ModelSetItemProvider.java196
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution.edit/src/org/eclipse/emf/cdo/evolution/provider/PropertyChangeItemProvider.java294
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution.edit/src/org/eclipse/emf/cdo/evolution/provider/ReleaseItemProvider.java256
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution.editor/.classpath7
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution.editor/.project58
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution.editor/.settings/org.eclipse.jdt.core.prefs412
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution.editor/.settings/org.eclipse.jdt.launching.prefs3
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution.editor/.settings/org.eclipse.jdt.ui.prefs119
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution.editor/.settings/org.eclipse.ltk.core.refactoring.prefs3
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution.editor/.settings/org.eclipse.mylyn.tasks.ui.prefs4
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution.editor/.settings/org.eclipse.mylyn.team.ui.prefs3
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution.editor/.settings/org.eclipse.pde.api.tools.prefs95
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution.editor/.settings/org.eclipse.pde.prefs31
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution.editor/META-INF/MANIFEST.MF24
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution.editor/build.properties10
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution.editor/icons/full/obj16/EvolutionModelFile.gifbin0 -> 597 bytes
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution.editor/icons/full/wizban/NewEvolution.gifbin0 -> 2462 bytes
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution.editor/icons/full/wizban/quick_fix.pngbin0 -> 7644 bytes
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution.editor/icons/full/wizban/quick_fix@2x.pngbin0 -> 23187 bytes
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution.editor/plugin.properties58
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution.editor/plugin.xml44
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution.editor/pom.xml31
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution.editor/src/org/eclipse/emf/cdo/evolution/presentation/EvolutionActionBarContributor.java812
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution.editor/src/org/eclipse/emf/cdo/evolution/presentation/EvolutionEditor.java3024
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution.editor/src/org/eclipse/emf/cdo/evolution/presentation/EvolutionEditorPlugin.java96
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution.editor/src/org/eclipse/emf/cdo/evolution/presentation/EvolutionModelWizard.java657
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution.editor/src/org/eclipse/emf/cdo/evolution/presentation/quickfix/BasicDiagnosticResolution.java138
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution.editor/src/org/eclipse/emf/cdo/evolution/presentation/quickfix/BasicDiagnosticResolutionGenerator.java36
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution.editor/src/org/eclipse/emf/cdo/evolution/presentation/quickfix/DefaultDiagnosticResolutionGenerator.java403
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution.editor/src/org/eclipse/emf/cdo/evolution/presentation/quickfix/DiagnosticResolution.java120
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution.editor/src/org/eclipse/emf/cdo/evolution/presentation/quickfix/DiagnosticResolutionRelevance.java19
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution.editor/src/org/eclipse/emf/cdo/evolution/presentation/quickfix/QuickFixPage.java408
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution.editor/src/org/eclipse/emf/cdo/evolution/presentation/quickfix/QuickFixWizard.java115
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution/.classpath7
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution/.options3
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution/.project58
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution/.settings/.api_filters25
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution/.settings/org.eclipse.core.resources.prefs3
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution/.settings/org.eclipse.jdt.core.prefs412
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution/.settings/org.eclipse.jdt.launching.prefs3
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution/.settings/org.eclipse.jdt.ui.prefs119
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution/.settings/org.eclipse.ltk.core.refactoring.prefs3
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution/.settings/org.eclipse.mylyn.tasks.ui.prefs4
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution/.settings/org.eclipse.mylyn.team.ui.prefs3
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution/.settings/org.eclipse.pde.api.tools.prefs95
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution/.settings/org.eclipse.pde.prefs31
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution/META-INF/MANIFEST.MF18
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution/about.html28
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution/build.properties27
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution/model/evolution.ecore213
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution/model/evolution.genmodel128
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution/plugin.properties36
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution/plugin.xml25
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution/pom.xml31
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/Change.java116
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/ChangeKind.java330
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/ElementChange.java82
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/Evolution.java286
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/EvolutionFactory.java148
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/EvolutionPackage.java2761
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/FeaturePathMigration.java97
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/Migration.java82
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/Model.java163
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/ModelSet.java163
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/ModelSetChange.java71
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/PropertyChange.java90
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/Release.java177
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/impl/ChangeImpl.java349
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/impl/ElementChangeImpl.java317
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/impl/EvolutionFactoryImpl.java352
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/impl/EvolutionImpl.java691
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/impl/EvolutionPackageImpl.java1306
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/impl/EvolutionPlugin.java92
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/impl/FeaturePathMigrationImpl.java220
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/impl/MigrationImpl.java252
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/impl/ModelImpl.java567
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/impl/ModelSetChangeImpl.java276
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/impl/ModelSetImpl.java937
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/impl/PropertyChangeImpl.java301
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/impl/ReleaseImpl.java463
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/util/DiagnosticID.java147
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/util/DiagnosticType.java110
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/util/ElementHandler.java465
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/util/ElementRunnable.java21
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/util/EvolutionAdapterFactory.java328
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/util/EvolutionSwitch.java390
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/util/EvolutionValidator.java1032
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/util/IDAnnotation.java151
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/util/ValidationContext.java101
-rw-r--r--plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/util/ValidationPhase.java191
-rw-r--r--plugins/org.eclipse.emf.cdo/META-INF/MANIFEST.MF3
-rw-r--r--plugins/org.eclipse.net4j.util/META-INF/MANIFEST.MF62
-rw-r--r--plugins/org.eclipse.net4j.util/pom.xml2
-rw-r--r--plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/collection/CollectionUtil.java88
-rw-r--r--releng/org.eclipse.emf.cdo.releng.parent/plugins/pom.xml3
134 files changed, 25609 insertions, 41 deletions
diff --git a/features/org.eclipse.emf.cdo-feature/feature.xml b/features/org.eclipse.emf.cdo-feature/feature.xml
index 5d77738c13..a4ec54f056 100644
--- a/features/org.eclipse.emf.cdo-feature/feature.xml
+++ b/features/org.eclipse.emf.cdo-feature/feature.xml
@@ -13,7 +13,7 @@
<feature
id="org.eclipse.emf.cdo"
label="%featureName"
- version="4.7.100.qualifier"
+ version="4.8.0.qualifier"
provider-name="%providerName"
license-feature="org.eclipse.emf.cdo.license"
license-feature-version="0.0.0">
@@ -210,4 +210,25 @@
version="0.0.0"
unpack="false"/>
+ <plugin
+ id="org.eclipse.emf.cdo.evolution"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.emf.cdo.evolution.edit"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.emf.cdo.evolution.editor"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
</feature>
diff --git a/features/org.eclipse.emf.cdo-feature/pom.xml b/features/org.eclipse.emf.cdo-feature/pom.xml
index 8d4c20dfd6..7f5062d8b2 100644
--- a/features/org.eclipse.emf.cdo-feature/pom.xml
+++ b/features/org.eclipse.emf.cdo-feature/pom.xml
@@ -25,7 +25,7 @@
<groupId>org.eclipse.emf.cdo.features</groupId>
<artifactId>org.eclipse.emf.cdo</artifactId>
- <version>4.7.100-SNAPSHOT</version>
+ <version>4.8.0-SNAPSHOT</version>
<packaging>eclipse-feature</packaging>
</project>
diff --git a/features/org.eclipse.emf.cdo.sdk-feature/feature.xml b/features/org.eclipse.emf.cdo.sdk-feature/feature.xml
index d8c4b0f462..46031e6b41 100644
--- a/features/org.eclipse.emf.cdo.sdk-feature/feature.xml
+++ b/features/org.eclipse.emf.cdo.sdk-feature/feature.xml
@@ -12,7 +12,7 @@
<feature
id="org.eclipse.emf.cdo.sdk"
label="%featureName"
- version="5.0.100.qualifier"
+ version="5.1.0.qualifier"
provider-name="%providerName"
image="eclipse_update_120.jpg"
license-feature="org.eclipse.emf.cdo.license"
diff --git a/features/org.eclipse.emf.cdo.sdk-feature/pom.xml b/features/org.eclipse.emf.cdo.sdk-feature/pom.xml
index d75aa0cd0c..b9ad5214af 100644
--- a/features/org.eclipse.emf.cdo.sdk-feature/pom.xml
+++ b/features/org.eclipse.emf.cdo.sdk-feature/pom.xml
@@ -25,7 +25,7 @@
<groupId>org.eclipse.emf.cdo.features</groupId>
<artifactId>org.eclipse.emf.cdo.sdk</artifactId>
- <version>5.0.100-SNAPSHOT</version>
+ <version>5.1.0-SNAPSHOT</version>
<packaging>eclipse-feature</packaging>
</project>
diff --git a/features/org.eclipse.emf.cdo.server.embedded-feature/feature.xml b/features/org.eclipse.emf.cdo.server.embedded-feature/feature.xml
index a6c80258d6..dfbd13339c 100644
--- a/features/org.eclipse.emf.cdo.server.embedded-feature/feature.xml
+++ b/features/org.eclipse.emf.cdo.server.embedded-feature/feature.xml
@@ -12,7 +12,7 @@
<feature
id="org.eclipse.emf.cdo.server.embedded"
label="%featureName"
- version="4.7.100.qualifier"
+ version="4.8.0.qualifier"
provider-name="%providerName"
image="eclipse_update_120.jpg"
license-feature="org.eclipse.emf.cdo.license"
diff --git a/features/org.eclipse.emf.cdo.server.embedded-feature/pom.xml b/features/org.eclipse.emf.cdo.server.embedded-feature/pom.xml
index b13684a8d3..4b597ea1b2 100644
--- a/features/org.eclipse.emf.cdo.server.embedded-feature/pom.xml
+++ b/features/org.eclipse.emf.cdo.server.embedded-feature/pom.xml
@@ -25,7 +25,7 @@
<groupId>org.eclipse.emf.cdo.features</groupId>
<artifactId>org.eclipse.emf.cdo.server.embedded</artifactId>
- <version>4.7.100-SNAPSHOT</version>
+ <version>4.8.0-SNAPSHOT</version>
<packaging>eclipse-feature</packaging>
</project>
diff --git a/features/org.eclipse.net4j.db-feature/feature.xml b/features/org.eclipse.net4j.db-feature/feature.xml
index f960055b96..76569d2a4e 100644
--- a/features/org.eclipse.net4j.db-feature/feature.xml
+++ b/features/org.eclipse.net4j.db-feature/feature.xml
@@ -12,7 +12,7 @@
<feature
id="org.eclipse.net4j.db"
label="%featureName"
- version="4.7.0.qualifier"
+ version="4.8.0.qualifier"
provider-name="%providerName"
license-feature="org.eclipse.emf.cdo.license"
license-feature-version="0.0.0">
diff --git a/features/org.eclipse.net4j.db-feature/pom.xml b/features/org.eclipse.net4j.db-feature/pom.xml
index 230e5a205d..b13d62102c 100644
--- a/features/org.eclipse.net4j.db-feature/pom.xml
+++ b/features/org.eclipse.net4j.db-feature/pom.xml
@@ -25,7 +25,7 @@
<groupId>org.eclipse.emf.cdo.features</groupId>
<artifactId>org.eclipse.net4j.db</artifactId>
- <version>4.7.0-SNAPSHOT</version>
+ <version>4.8.0-SNAPSHOT</version>
<packaging>eclipse-feature</packaging>
</project>
diff --git a/plugins/org.eclipse.emf.cdo.evolution.edit/.classpath b/plugins/org.eclipse.emf.cdo.evolution.edit/.classpath
new file mode 100644
index 0000000000..64c5e31b7a
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution.edit/.classpath
@@ -0,0 +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/J2SE-1.5"/>
+ <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.cdo.evolution.edit/.project b/plugins/org.eclipse.emf.cdo.evolution.edit/.project
new file mode 100644
index 0000000000..4ead2df722
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution.edit/.project
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.emf.cdo.evolution.edit</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.api.tools.apiAnalysisBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.oomph.version.VersionBuilder</name>
+ <arguments>
+ <dictionary>
+ <key>check.maven.pom</key>
+ <value>true</value>
+ </dictionary>
+ <dictionary>
+ <key>ignore.lower.bound.dependency.ranges</key>
+ <value>true</value>
+ </dictionary>
+ <dictionary>
+ <key>release.path</key>
+ <value>/org.eclipse.emf.cdo.releng/versions/release.xml</value>
+ </dictionary>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.pde.api.tools.apiAnalysisNature</nature>
+ <nature>org.eclipse.oomph.version.VersionNature</nature>
+ </natures>
+ <filteredResources>
+ <filter>
+ <id>1396938000000</id>
+ <name></name>
+ <type>10</type>
+ <matcher>
+ <id>org.eclipse.ui.ide.multiFilter</id>
+ <arguments>1.0-projectRelativePath-matches-true-false-target</arguments>
+ </matcher>
+ </filter>
+ </filteredResources>
+</projectDescription>
diff --git a/plugins/org.eclipse.emf.cdo.evolution.edit/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.emf.cdo.evolution.edit/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000000..b03b9db471
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution.edit/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,427 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.builder.cleanOutputFolder=clean
+org.eclipse.jdt.core.builder.duplicateResourceTask=warning
+org.eclipse.jdt.core.builder.invalidClasspath=abort
+org.eclipse.jdt.core.builder.recreateModifiedClassFileInOutputFolder=ignore
+org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch,*.ucls,doc-files/,package.html,package-info.java
+org.eclipse.jdt.core.circularClasspath=error
+org.eclipse.jdt.core.classpath.exclusionPatterns=enabled
+org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled
+org.eclipse.jdt.core.codeComplete.argumentPrefixes=
+org.eclipse.jdt.core.codeComplete.argumentSuffixes=
+org.eclipse.jdt.core.codeComplete.fieldPrefixes=
+org.eclipse.jdt.core.codeComplete.fieldSuffixes=
+org.eclipse.jdt.core.codeComplete.localPrefixes=
+org.eclipse.jdt.core.codeComplete.localSuffixes=
+org.eclipse.jdt.core.codeComplete.staticFieldPrefixes=
+org.eclipse.jdt.core.codeComplete.staticFieldSuffixes=
+org.eclipse.jdt.core.codeComplete.staticFinalFieldPrefixes=
+org.eclipse.jdt.core.codeComplete.staticFinalFieldSuffixes=
+org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled
+org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
+org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull
+org.eclipse.jdt.core.compiler.annotation.nonnull.secondary=
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault.secondary=
+org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
+org.eclipse.jdt.core.compiler.annotation.nullable.secondary=
+org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.doc.comment.support=enabled
+org.eclipse.jdt.core.compiler.maxProblemPerUnit=100
+org.eclipse.jdt.core.compiler.problem.APILeak=warning
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=ignore
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=return_tag
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning
+org.eclipse.jdt.core.compiler.problem.nonnullTypeVariableFromLegacyInvocation=warning
+org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
+org.eclipse.jdt.core.compiler.problem.nullReference=warning
+org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
+org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.pessimisticNullAnalysisForFreeTypeVariables=warning
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
+org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning
+org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=ignore
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.terminalDeprecation=warning
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentType=ignore
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentTypeStrict=disabled
+org.eclipse.jdt.core.compiler.problem.unlikelyEqualsArgumentType=ignore
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedExceptionParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.5
+org.eclipse.jdt.core.compiler.taskCaseSensitive=enabled
+org.eclipse.jdt.core.compiler.taskPriorities=NORMAL,HIGH,HIGH,LOW,LOW,LOW,LOW,LOW
+org.eclipse.jdt.core.compiler.taskTags=TODO,FIXME,XXX,PERF,MEM,POLISH,@generated NOT,@ADDED
+org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_assignment=0
+org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
+org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
+org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
+org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80
+org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16
+org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_after_package=1
+org.eclipse.jdt.core.formatter.blank_lines_before_field=1
+org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
+org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
+org.eclipse.jdt.core.formatter.blank_lines_before_method=1
+org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
+org.eclipse.jdt.core.formatter.blank_lines_before_package=0
+org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
+org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
+org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_switch=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=next_line
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=true
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=true
+org.eclipse.jdt.core.formatter.comment.format_block_comments=true
+org.eclipse.jdt.core.formatter.comment.format_header=false
+org.eclipse.jdt.core.formatter.comment.format_html=true
+org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=false
+org.eclipse.jdt.core.formatter.comment.format_line_comments=true
+org.eclipse.jdt.core.formatter.comment.format_source_code=true
+org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true
+org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
+org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
+org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert
+org.eclipse.jdt.core.formatter.comment.line_length=120
+org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
+org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
+org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
+org.eclipse.jdt.core.formatter.compact_else_if=true
+org.eclipse.jdt.core.formatter.continuation_indentation=2
+org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
+org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
+org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
+org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
+org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
+org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_empty_lines=false
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false
+org.eclipse.jdt.core.formatter.indentation.size=2
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
+org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
+org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.join_lines_in_comments=true
+org.eclipse.jdt.core.formatter.join_wrapped_lines=true
+org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.lineSplit=160
+org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
+org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
+org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
+org.eclipse.jdt.core.formatter.tabulation.char=space
+org.eclipse.jdt.core.formatter.tabulation.size=2
+org.eclipse.jdt.core.formatter.use_on_off_tags=false
+org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
+org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
+org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
+org.eclipse.jdt.core.incompatibleJDKLevel=ignore
+org.eclipse.jdt.core.incompleteClasspath=error
diff --git a/plugins/org.eclipse.emf.cdo.evolution.edit/.settings/org.eclipse.jdt.launching.prefs b/plugins/org.eclipse.emf.cdo.evolution.edit/.settings/org.eclipse.jdt.launching.prefs
new file mode 100644
index 0000000000..556ed07a3c
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution.edit/.settings/org.eclipse.jdt.launching.prefs
@@ -0,0 +1,3 @@
+#Fri Sep 02 05:38:34 CEST 2011
+eclipse.preferences.version=1
+org.eclipse.jdt.launching.PREF_STRICTLY_COMPATIBLE_JRE_NOT_AVAILABLE=ignore
diff --git a/plugins/org.eclipse.emf.cdo.evolution.edit/.settings/org.eclipse.jdt.ui.prefs b/plugins/org.eclipse.emf.cdo.evolution.edit/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 0000000000..222aec0421
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution.edit/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,119 @@
+cleanup.add_default_serial_version_id=true
+cleanup.add_generated_serial_version_id=false
+cleanup.add_missing_annotations=true
+cleanup.add_missing_deprecated_annotations=true
+cleanup.add_missing_methods=false
+cleanup.add_missing_nls_tags=false
+cleanup.add_missing_override_annotations=true
+cleanup.add_missing_override_annotations_interface_methods=true
+cleanup.add_serial_version_id=true
+cleanup.always_use_blocks=true
+cleanup.always_use_parentheses_in_expressions=false
+cleanup.always_use_this_for_non_static_field_access=false
+cleanup.always_use_this_for_non_static_method_access=false
+cleanup.convert_to_enhanced_for_loop=false
+cleanup.correct_indentation=true
+cleanup.format_source_code=true
+cleanup.format_source_code_changes_only=false
+cleanup.make_local_variable_final=true
+cleanup.make_parameters_final=false
+cleanup.make_private_fields_final=true
+cleanup.make_type_abstract_if_missing_method=false
+cleanup.make_variable_declarations_final=false
+cleanup.never_use_blocks=false
+cleanup.never_use_parentheses_in_expressions=true
+cleanup.organize_imports=true
+cleanup.qualify_static_field_accesses_with_declaring_class=false
+cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+cleanup.qualify_static_member_accesses_with_declaring_class=false
+cleanup.qualify_static_method_accesses_with_declaring_class=false
+cleanup.remove_private_constructors=true
+cleanup.remove_trailing_whitespaces=true
+cleanup.remove_trailing_whitespaces_all=true
+cleanup.remove_trailing_whitespaces_ignore_empty=false
+cleanup.remove_unnecessary_casts=true
+cleanup.remove_unnecessary_nls_tags=true
+cleanup.remove_unused_imports=true
+cleanup.remove_unused_local_variables=false
+cleanup.remove_unused_private_fields=true
+cleanup.remove_unused_private_members=false
+cleanup.remove_unused_private_methods=true
+cleanup.remove_unused_private_types=true
+cleanup.sort_members=false
+cleanup.sort_members_all=false
+cleanup.use_blocks=true
+cleanup.use_blocks_only_for_return_and_throw=false
+cleanup.use_parentheses_in_expressions=true
+cleanup.use_this_for_non_static_field_access=true
+cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+cleanup.use_this_for_non_static_method_access=true
+cleanup.use_this_for_non_static_method_access_only_if_necessary=true
+cleanup_profile=_EMFT
+cleanup_settings_version=2
+eclipse.preferences.version=1
+editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
+formatter_profile=_EMFT
+formatter_settings_version=12
+org.eclipse.jdt.ui.exception.name=ex
+org.eclipse.jdt.ui.gettersetter.use.is=true
+org.eclipse.jdt.ui.ignorelowercasenames=true
+org.eclipse.jdt.ui.importorder=org.eclipse.emf.cdo;org.eclipse.emf.internal.cdo;org.eclipse.net4j;org.eclipse.internal.net4j;org.eclipse.emf;org.eclipse;com;org;javax;java;
+org.eclipse.jdt.ui.javadoc=true
+org.eclipse.jdt.ui.keywordthis=false
+org.eclipse.jdt.ui.ondemandthreshold=99
+org.eclipse.jdt.ui.overrideannotation=true
+org.eclipse.jdt.ui.staticondemandthreshold=99
+org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8" standalone\="no"?><templates><template autoinsert\="false" context\="gettercomment_context" deleted\="false" description\="Comment for getter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.gettercomment" name\="gettercomment"/><template autoinsert\="false" context\="settercomment_context" deleted\="false" description\="Comment for setter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.settercomment" name\="settercomment"/><template autoinsert\="false" context\="constructorcomment_context" deleted\="false" description\="Comment for created constructors" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorcomment" name\="constructorcomment"/><template autoinsert\="false" context\="filecomment_context" deleted\="false" description\="Comment for created Java files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.filecomment" name\="filecomment">/*\r\n * Copyright (c) 2004-2018 Eike Stepper (Loehne, Germany) and others.\r\n * All rights reserved. This program and the accompanying materials\r\n * are made available under the terms of the Eclipse Public License v1.0\r\n * which accompanies this distribution, and is available at\r\n * http\://www.eclipse.org/legal/epl-v10.html\r\n * \r\n * Contributors\:\r\n * Eike Stepper - initial API and implementation\r\n */</template><template autoinsert\="false" context\="typecomment_context" deleted\="false" description\="Comment for created types" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.typecomment" name\="typecomment">/**\r\n * @author Eike Stepper\r\n */</template><template autoinsert\="false" context\="fieldcomment_context" deleted\="false" description\="Comment for fields" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.fieldcomment" name\="fieldcomment"/><template autoinsert\="false" context\="methodcomment_context" deleted\="false" description\="Comment for non-overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodcomment" name\="methodcomment"/><template autoinsert\="false" context\="overridecomment_context" deleted\="false" description\="Comment for overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.overridecomment" name\="overridecomment"/><template autoinsert\="false" context\="delegatecomment_context" deleted\="false" description\="Comment for delegate methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.delegatecomment" name\="delegatecomment"/><template autoinsert\="true" context\="newtype_context" deleted\="false" description\="Newly created files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.newtype" name\="newtype">${filecomment}\r\n${package_declaration}\r\n\r\n${typecomment}\r\n${type_declaration}</template><template autoinsert\="true" context\="classbody_context" deleted\="false" description\="Code in new class type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.classbody" name\="classbody">\r\n</template><template autoinsert\="true" context\="interfacebody_context" deleted\="false" description\="Code in new interface type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.interfacebody" name\="interfacebody">\r\n</template><template autoinsert\="true" context\="enumbody_context" deleted\="false" description\="Code in new enum type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.enumbody" name\="enumbody">\r\n</template><template autoinsert\="true" context\="annotationbody_context" deleted\="false" description\="Code in new annotation type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.annotationbody" name\="annotationbody">\r\n</template><template autoinsert\="false" context\="catchblock_context" deleted\="false" description\="Code in new catch blocks" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.catchblock" name\="catchblock">${exception_var}.printStackTrace();</template><template autoinsert\="false" context\="methodbody_context" deleted\="false" description\="Code in created method stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodbody" name\="methodbody">${body_statement}</template><template autoinsert\="false" context\="constructorbody_context" deleted\="false" description\="Code in created constructor stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorbody" name\="constructorbody">${body_statement}</template><template autoinsert\="true" context\="getterbody_context" deleted\="false" description\="Code in created getters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.getterbody" name\="getterbody">return ${field};</template><template autoinsert\="true" context\="setterbody_context" deleted\="false" description\="Code in created setters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.setterbody" name\="setterbody">${field} \= ${param};</template></templates>
+sp_cleanup.add_default_serial_version_id=true
+sp_cleanup.add_generated_serial_version_id=false
+sp_cleanup.add_missing_annotations=true
+sp_cleanup.add_missing_deprecated_annotations=true
+sp_cleanup.add_missing_methods=false
+sp_cleanup.add_missing_nls_tags=false
+sp_cleanup.add_missing_override_annotations=true
+sp_cleanup.add_missing_override_annotations_interface_methods=false
+sp_cleanup.add_serial_version_id=false
+sp_cleanup.always_use_blocks=true
+sp_cleanup.always_use_parentheses_in_expressions=false
+sp_cleanup.always_use_this_for_non_static_field_access=false
+sp_cleanup.always_use_this_for_non_static_method_access=false
+sp_cleanup.convert_to_enhanced_for_loop=false
+sp_cleanup.correct_indentation=false
+sp_cleanup.format_source_code=true
+sp_cleanup.format_source_code_changes_only=false
+sp_cleanup.make_local_variable_final=false
+sp_cleanup.make_parameters_final=false
+sp_cleanup.make_private_fields_final=true
+sp_cleanup.make_type_abstract_if_missing_method=false
+sp_cleanup.make_variable_declarations_final=false
+sp_cleanup.never_use_blocks=false
+sp_cleanup.never_use_parentheses_in_expressions=true
+sp_cleanup.on_save_use_additional_actions=true
+sp_cleanup.organize_imports=true
+sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
+sp_cleanup.remove_private_constructors=true
+sp_cleanup.remove_trailing_whitespaces=true
+sp_cleanup.remove_trailing_whitespaces_all=true
+sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
+sp_cleanup.remove_unnecessary_casts=true
+sp_cleanup.remove_unnecessary_nls_tags=true
+sp_cleanup.remove_unused_imports=true
+sp_cleanup.remove_unused_local_variables=false
+sp_cleanup.remove_unused_private_fields=true
+sp_cleanup.remove_unused_private_members=false
+sp_cleanup.remove_unused_private_methods=true
+sp_cleanup.remove_unused_private_types=true
+sp_cleanup.sort_members=false
+sp_cleanup.sort_members_all=false
+sp_cleanup.use_blocks=true
+sp_cleanup.use_blocks_only_for_return_and_throw=false
+sp_cleanup.use_parentheses_in_expressions=true
+sp_cleanup.use_this_for_non_static_field_access=true
+sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+sp_cleanup.use_this_for_non_static_method_access=true
+sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
diff --git a/plugins/org.eclipse.emf.cdo.evolution.edit/.settings/org.eclipse.ltk.core.refactoring.prefs b/plugins/org.eclipse.emf.cdo.evolution.edit/.settings/org.eclipse.ltk.core.refactoring.prefs
new file mode 100644
index 0000000000..864e30fe5d
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution.edit/.settings/org.eclipse.ltk.core.refactoring.prefs
@@ -0,0 +1,3 @@
+#Thu Feb 04 09:44:24 CET 2010
+eclipse.preferences.version=1
+org.eclipse.ltk.core.refactoring.enable.project.refactoring.history=false
diff --git a/plugins/org.eclipse.emf.cdo.evolution.edit/.settings/org.eclipse.mylyn.tasks.ui.prefs b/plugins/org.eclipse.emf.cdo.evolution.edit/.settings/org.eclipse.mylyn.tasks.ui.prefs
new file mode 100644
index 0000000000..b050639a54
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution.edit/.settings/org.eclipse.mylyn.tasks.ui.prefs
@@ -0,0 +1,4 @@
+#Thu Feb 04 09:44:24 CET 2010
+eclipse.preferences.version=1
+project.repository.kind=bugzilla
+project.repository.url=https\://bugs.eclipse.org/bugs
diff --git a/plugins/org.eclipse.emf.cdo.evolution.edit/.settings/org.eclipse.mylyn.team.ui.prefs b/plugins/org.eclipse.emf.cdo.evolution.edit/.settings/org.eclipse.mylyn.team.ui.prefs
new file mode 100644
index 0000000000..97c11e6725
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution.edit/.settings/org.eclipse.mylyn.team.ui.prefs
@@ -0,0 +1,3 @@
+#Thu Feb 04 09:44:24 CET 2010
+commit.comment.template=[${task.id}] ${task.description}\r\n\r\n${task.url}
+eclipse.preferences.version=1
diff --git a/plugins/org.eclipse.emf.cdo.evolution.edit/.settings/org.eclipse.pde.api.tools.prefs b/plugins/org.eclipse.emf.cdo.evolution.edit/.settings/org.eclipse.pde.api.tools.prefs
new file mode 100644
index 0000000000..0c17d59e45
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution.edit/.settings/org.eclipse.pde.api.tools.prefs
@@ -0,0 +1,95 @@
+#Thu Feb 04 09:44:24 CET 2010
+ANNOTATION_ELEMENT_TYPE_ADDED_METHOD_WITHOUT_DEFAULT_VALUE=Error
+ANNOTATION_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_FIELD=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_METHOD=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_API_TYPE=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_REEXPORTED_API_TYPE=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_REEXPORTED_TYPE=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_TYPE=Error
+CLASS_ELEMENT_TYPE_ADDED_METHOD=Error
+CLASS_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+CLASS_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+CLASS_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+CLASS_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+CLASS_ELEMENT_TYPE_CHANGED_NON_ABSTRACT_TO_ABSTRACT=Error
+CLASS_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+CLASS_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+CLASS_ELEMENT_TYPE_REMOVED_CONSTRUCTOR=Error
+CLASS_ELEMENT_TYPE_REMOVED_FIELD=Error
+CLASS_ELEMENT_TYPE_REMOVED_METHOD=Error
+CLASS_ELEMENT_TYPE_REMOVED_SUPERCLASS=Error
+CLASS_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+CLASS_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+CONSTRUCTOR_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+CONSTRUCTOR_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+CONSTRUCTOR_ELEMENT_TYPE_CHANGED_VARARGS_TO_ARRAY=Error
+CONSTRUCTOR_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+ENUM_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+ENUM_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+ENUM_ELEMENT_TYPE_REMOVED_ENUM_CONSTANT=Error
+ENUM_ELEMENT_TYPE_REMOVED_FIELD=Error
+ENUM_ELEMENT_TYPE_REMOVED_METHOD=Error
+ENUM_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+FIELD_ELEMENT_TYPE_ADDED_VALUE=Error
+FIELD_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+FIELD_ELEMENT_TYPE_CHANGED_FINAL_TO_NON_FINAL_STATIC_CONSTANT=Error
+FIELD_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+FIELD_ELEMENT_TYPE_CHANGED_NON_STATIC_TO_STATIC=Error
+FIELD_ELEMENT_TYPE_CHANGED_STATIC_TO_NON_STATIC=Error
+FIELD_ELEMENT_TYPE_CHANGED_TYPE=Error
+FIELD_ELEMENT_TYPE_CHANGED_VALUE=Error
+FIELD_ELEMENT_TYPE_REMOVED_TYPE_ARGUMENT=Error
+FIELD_ELEMENT_TYPE_REMOVED_VALUE=Error
+ILLEGAL_EXTEND=Warning
+ILLEGAL_IMPLEMENT=Warning
+ILLEGAL_INSTANTIATE=Warning
+ILLEGAL_OVERRIDE=Warning
+ILLEGAL_REFERENCE=Warning
+INTERFACE_ELEMENT_TYPE_ADDED_FIELD=Error
+INTERFACE_ELEMENT_TYPE_ADDED_METHOD=Error
+INTERFACE_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+INTERFACE_ELEMENT_TYPE_ADDED_SUPER_INTERFACE_WITH_METHODS=Error
+INTERFACE_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+INTERFACE_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+INTERFACE_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_FIELD=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_METHOD=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+INVALID_JAVADOC_TAG=Ignore
+INVALID_REFERENCE_IN_SYSTEM_LIBRARIES=Error
+MISSING_EE_DESCRIPTIONS=Warning
+LEAK_EXTEND=Warning
+LEAK_FIELD_DECL=Warning
+LEAK_IMPLEMENT=Warning
+LEAK_METHOD_PARAM=Warning
+LEAK_METHOD_RETURN_TYPE=Warning
+METHOD_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+METHOD_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+METHOD_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_ABSTRACT_TO_ABSTRACT=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_STATIC_TO_STATIC=Error
+METHOD_ELEMENT_TYPE_CHANGED_STATIC_TO_NON_STATIC=Error
+METHOD_ELEMENT_TYPE_CHANGED_VARARGS_TO_ARRAY=Error
+METHOD_ELEMENT_TYPE_REMOVED_ANNOTATION_DEFAULT_VALUE=Error
+METHOD_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+TYPE_PARAMETER_ELEMENT_TYPE_ADDED_CLASS_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_ADDED_INTERFACE_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_CHANGED_CLASS_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_CHANGED_INTERFACE_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_REMOVED_CLASS_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_REMOVED_INTERFACE_BOUND=Error
+UNUSED_PROBLEM_FILTERS=Ignore
+automatically_removed_unused_problem_filters=Disabled
+eclipse.preferences.version=1
+incompatible_api_component_version=Error
+incompatible_api_component_version_include_major_without_breaking_change=Disabled
+incompatible_api_component_version_include_minor_without_api_change=Disabled
+invalid_since_tag_version=Error
+malformed_since_tag=Error
+missing_since_tag=Error
+report_api_breakage_when_major_version_incremented=Disabled
+report_resolution_errors_api_component=Warning
diff --git a/plugins/org.eclipse.emf.cdo.evolution.edit/.settings/org.eclipse.pde.prefs b/plugins/org.eclipse.emf.cdo.evolution.edit/.settings/org.eclipse.pde.prefs
new file mode 100644
index 0000000000..fe01bb701d
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution.edit/.settings/org.eclipse.pde.prefs
@@ -0,0 +1,31 @@
+#Thu Feb 04 09:44:24 CET 2010
+compilers.f.unresolved-features=1
+compilers.f.unresolved-plugins=1
+compilers.incompatible-environment=1
+compilers.p.build=1
+compilers.p.build.bin.includes=1
+compilers.p.build.java.compliance=1
+compilers.p.build.missing.output=2
+compilers.p.build.output.library=1
+compilers.p.build.source.library=1
+compilers.p.build.src.includes=1
+compilers.p.deprecated=2
+compilers.p.discouraged-class=1
+compilers.p.internal=1
+compilers.p.missing-packages=1
+compilers.p.missing-version-export-package=1
+compilers.p.missing-version-import-package=1
+compilers.p.missing-version-require-bundle=1
+compilers.p.no-required-att=0
+compilers.p.not-externalized-att=2
+compilers.p.unknown-attribute=1
+compilers.p.unknown-class=1
+compilers.p.unknown-element=1
+compilers.p.unknown-identifier=1
+compilers.p.unknown-resource=1
+compilers.p.unresolved-ex-points=0
+compilers.p.unresolved-import=0
+compilers.s.create-docs=false
+compilers.s.doc-folder=doc
+compilers.s.open-tags=1
+eclipse.preferences.version=1
diff --git a/plugins/org.eclipse.emf.cdo.evolution.edit/META-INF/MANIFEST.MF b/plugins/org.eclipse.emf.cdo.evolution.edit/META-INF/MANIFEST.MF
new file mode 100644
index 0000000000..eea0f2d76d
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution.edit/META-INF/MANIFEST.MF
@@ -0,0 +1,19 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.emf.cdo.evolution.edit;singleton:=true
+Automatic-Module-Name: org.eclipse.emf.cdo.evolution.edit
+Bundle-Version: 1.0.0.qualifier
+Bundle-ClassPath: .
+Bundle-Activator: org.eclipse.emf.cdo.evolution.provider.EvolutionEditPlugin$Implementation
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Export-Package: org.eclipse.emf.cdo.evolution.provider;version="1.0.0"
+Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.5.0,4.0.0)";visibility:=reexport,
+ org.eclipse.emf.cdo.evolution;bundle-version="[1.0.0,2.0.0)";visibility:=reexport,
+ org.eclipse.emf.edit;bundle-version="[2.5.0,3.0.0)";visibility:=reexport,
+ org.eclipse.emf.ecore;bundle-version="[2.5.0,3.0.0)";visibility:=reexport,
+ org.eclipse.emf.ecore.edit;bundle-version="[2.5.0,3.0.0)";visibility:=reexport,
+ org.eclipse.emf.cdo.edit;bundle-version="[4.0.0,5.0.0)"
+Bundle-ActivationPolicy: lazy
diff --git a/plugins/org.eclipse.emf.cdo.evolution.edit/build.properties b/plugins/org.eclipse.emf.cdo.evolution.edit/build.properties
new file mode 100644
index 0000000000..6e3e902e80
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution.edit/build.properties
@@ -0,0 +1,10 @@
+#
+
+bin.includes = .,\
+ icons/,\
+ META-INF/,\
+ plugin.xml,\
+ plugin.properties
+jars.compile.order = .
+source.. = src/
+output.. = bin/
diff --git a/plugins/org.eclipse.emf.cdo.evolution.edit/icons/full/obj16/Evolution.gif b/plugins/org.eclipse.emf.cdo.evolution.edit/icons/full/obj16/Evolution.gif
new file mode 100644
index 0000000000..df2990f5c2
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution.edit/icons/full/obj16/Evolution.gif
Binary files differ
diff --git a/plugins/org.eclipse.emf.cdo.evolution.edit/icons/full/obj16/FeaturePathMigration.gif b/plugins/org.eclipse.emf.cdo.evolution.edit/icons/full/obj16/FeaturePathMigration.gif
new file mode 100644
index 0000000000..d92f34c8ae
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution.edit/icons/full/obj16/FeaturePathMigration.gif
Binary files differ
diff --git a/plugins/org.eclipse.emf.cdo.evolution.edit/icons/full/obj16/Model.gif b/plugins/org.eclipse.emf.cdo.evolution.edit/icons/full/obj16/Model.gif
new file mode 100644
index 0000000000..0b60dcc395
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution.edit/icons/full/obj16/Model.gif
Binary files differ
diff --git a/plugins/org.eclipse.emf.cdo.evolution.edit/icons/full/obj16/ModelSetChange.gif b/plugins/org.eclipse.emf.cdo.evolution.edit/icons/full/obj16/ModelSetChange.gif
new file mode 100644
index 0000000000..f988003212
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution.edit/icons/full/obj16/ModelSetChange.gif
Binary files differ
diff --git a/plugins/org.eclipse.emf.cdo.evolution.edit/icons/full/obj16/Package.gif b/plugins/org.eclipse.emf.cdo.evolution.edit/icons/full/obj16/Package.gif
new file mode 100644
index 0000000000..d931a97fcc
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution.edit/icons/full/obj16/Package.gif
Binary files differ
diff --git a/plugins/org.eclipse.emf.cdo.evolution.edit/icons/full/obj16/PropertyChange.gif b/plugins/org.eclipse.emf.cdo.evolution.edit/icons/full/obj16/PropertyChange.gif
new file mode 100644
index 0000000000..ce8bdb99b7
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution.edit/icons/full/obj16/PropertyChange.gif
Binary files differ
diff --git a/plugins/org.eclipse.emf.cdo.evolution.edit/icons/full/obj16/Release.gif b/plugins/org.eclipse.emf.cdo.evolution.edit/icons/full/obj16/Release.gif
new file mode 100644
index 0000000000..ce096aafbc
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution.edit/icons/full/obj16/Release.gif
Binary files differ
diff --git a/plugins/org.eclipse.emf.cdo.evolution.edit/plugin.properties b/plugins/org.eclipse.emf.cdo.evolution.edit/plugin.properties
new file mode 100644
index 0000000000..eb5cb8ea7b
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution.edit/plugin.properties
@@ -0,0 +1,85 @@
+#
+
+pluginName = CDO Model Repository Evolution Edit Support
+providerName = Eclipse Modeling Project
+
+_UI_CreateChild_text = {0}
+_UI_CreateChild_text2 = {1} {0}
+_UI_CreateChild_text3 = {1}
+_UI_CreateChild_tooltip = Create New {0} Under {1} Feature
+_UI_CreateChild_description = Create a new child of type {0} for the {1} feature of the selected {2}.
+_UI_CreateSibling_description = Create a new sibling of type {0} for the selected {2}, under the {1} feature of their parent.
+
+_UI_PropertyDescriptor_description = The {0} of the {1}
+
+##### Sorted:
+
+_UI_ChangeKind_ADDED_literal = ADDED
+_UI_ChangeKind_CHANGED_literal = CHANGED
+_UI_ChangeKind_COPIED_literal = COPIED
+_UI_ChangeKind_MOVED_literal = MOVED
+_UI_ChangeKind_NONE_literal = NONE
+_UI_ChangeKind_REMOVED_literal = REMOVED
+_UI_Change_children_feature = Children
+_UI_Change_parent_feature = Parent
+_UI_Change_type = Change
+_UI_ElementChange_kind_feature = Kind
+_UI_ElementChange_newElement_feature = New Element
+_UI_ElementChange_oldElement_feature = Old Element
+_UI_ElementChange_type = Element Change
+_UI_Evolution_allPackages_feature = All Packages
+_UI_Evolution_latestRelease_feature = Latest Release
+_UI_Evolution_missingPackages_feature = Missing Packages
+_UI_Evolution_models_feature = Models
+_UI_Evolution_orderedReleases_feature = Ordered Releases
+_UI_Evolution_releases_feature = Releases
+_UI_Evolution_rootPackages_feature = Root Packages
+_UI_Evolution_type = Evolution
+_UI_Evolution_useEcorePackage_feature = Use Ecore Package
+_UI_Evolution_useEresourcePackage_feature = Use Eresource Package
+_UI_Evolution_useEtypesPackage_feature = Use Etypes Package
+_UI_FeaturePathMigration_featurePath_feature = Feature Path
+_UI_FeaturePathMigration_fromClass_feature = From Class
+_UI_FeaturePathMigration_toClass_feature = To Class
+_UI_FeaturePathMigration_type = Feature Path Migration
+_UI_Migration_diagnosticID_feature = Diagnostic ID
+_UI_Migration_modelSet_feature = Model Set
+_UI_Migration_type = Migration
+_UI_ModelSetChange_newModelSet_feature = New Model Set
+_UI_ModelSetChange_oldModelSet_feature = Old Model Set
+_UI_ModelSetChange_type = Changes
+_UI_ModelSet_allPackages_feature = All Packages
+_UI_ModelSet_change_feature = Change
+_UI_ModelSet_migrations_feature = Migrations
+_UI_ModelSet_missingPackages_feature = Missing Packages
+_UI_ModelSet_models_feature = Models
+_UI_ModelSet_rootPackages_feature = Root Packages
+_UI_ModelSet_type = Model Set
+_UI_Model_allPackages_feature = All Packages
+_UI_Model_evolution_feature = Evolution
+_UI_Model_missingPackages_feature = Missing Packages
+_UI_Model_modelSet_feature = Model Set
+_UI_Model_referencedPackages_feature = Referenced Packages
+_UI_Model_rootPackage_feature = Root Package
+_UI_Model_type = Model
+_UI_Model_uRI_feature = URI
+_UI_PropertyChange_feature_feature = Feature
+_UI_PropertyChange_kind_feature = Kind
+_UI_PropertyChange_newValue_feature = New Value
+_UI_PropertyChange_oldValue_feature = Old Value
+_UI_PropertyChange_type = Property Change
+_UI_Release_allPackages_feature = All Packages
+_UI_Release_date_feature = Date
+_UI_Release_evolution_feature = Evolution
+_UI_Release_migrations_feature = Migrations
+_UI_Release_nextRelease_feature = Next Release
+_UI_Release_previousRelease_feature = Previous Release
+_UI_Release_rootPackages_feature = Root Packages
+_UI_Release_type = Release
+_UI_Release_version_feature = Version
+_UI_Unknown_datatype= Value
+_UI_Unknown_feature = Unspecified
+_UI_Unknown_type = Object
+_UI_Evolution_uniqueNamespaceURIs_feature = Unique Namespace UR Is
+_UI_Evolution_uniqueNamespaces_feature = Unique Namespaces
+_UI_Evolution_nextReleaseVersion_feature = Next Release Version
diff --git a/plugins/org.eclipse.emf.cdo.evolution.edit/plugin.xml b/plugins/org.eclipse.emf.cdo.evolution.edit/plugin.xml
new file mode 100644
index 0000000000..04468135cc
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution.edit/plugin.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+
+<!--
+-->
+
+<plugin>
+
+ <extension point="org.eclipse.emf.edit.itemProviderAdapterFactories">
+ <!-- @generated evolution -->
+ <factory
+ uri="http://www.eclipse.org/emf/CDO/evolution/1.0.0"
+ class="org.eclipse.emf.cdo.evolution.provider.EvolutionItemProviderAdapterFactory"
+ supportedTypes=
+ "org.eclipse.emf.edit.provider.IEditingDomainItemProvider
+ org.eclipse.emf.edit.provider.IStructuredItemContentProvider
+ org.eclipse.emf.edit.provider.ITreeItemContentProvider
+ org.eclipse.emf.edit.provider.IItemLabelProvider
+ org.eclipse.emf.edit.provider.IItemPropertySource
+ org.eclipse.emf.edit.provider.IItemColorProvider
+ org.eclipse.emf.edit.provider.IItemFontProvider
+ org.eclipse.emf.edit.provider.IItemStyledLabelProvider"/>
+ </extension>
+
+</plugin>
diff --git a/plugins/org.eclipse.emf.cdo.evolution.edit/pom.xml b/plugins/org.eclipse.emf.cdo.evolution.edit/pom.xml
new file mode 100644
index 0000000000..a39e32d09e
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution.edit/pom.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright (c) 2017 Eike Stepper (Loehne, Germany) and others.
+ All rights reserved. This program and the accompanying materials
+ are made available under the terms of the Eclipse Public License v1.0
+ which accompanies this distribution, and is available at
+ http://www.eclipse.org/legal/epl-v10.html
+
+ Contributors:
+ Eike Stepper - initial API and implementation
+-->
+<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>
+ <groupId>org.eclipse.emf.cdo</groupId>
+ <artifactId>org.eclipse.emf.cdo.plugins</artifactId>
+ <version>4.7.0-SNAPSHOT</version>
+ <relativePath>../../releng/org.eclipse.emf.cdo.releng.parent/plugins</relativePath>
+ </parent>
+
+ <groupId>org.eclipse.emf.cdo</groupId>
+ <artifactId>org.eclipse.emf.cdo.evolution.edit</artifactId>
+ <version>1.0.0-SNAPSHOT</version>
+ <packaging>eclipse-plugin</packaging>
+
+</project>
diff --git a/plugins/org.eclipse.emf.cdo.evolution.edit/src/org/eclipse/emf/cdo/evolution/provider/ChangeItemProvider.java b/plugins/org.eclipse.emf.cdo.evolution.edit/src/org/eclipse/emf/cdo/evolution/provider/ChangeItemProvider.java
new file mode 100644
index 0000000000..ae805298d6
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution.edit/src/org/eclipse/emf/cdo/evolution/provider/ChangeItemProvider.java
@@ -0,0 +1,191 @@
+/**
+ */
+package org.eclipse.emf.cdo.evolution.provider;
+
+import org.eclipse.emf.cdo.evolution.Change;
+import org.eclipse.emf.cdo.evolution.EvolutionPackage;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.edit.provider.IChildCreationExtender;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemColorProvider;
+import org.eclipse.emf.edit.provider.IItemFontProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IItemStyledLabelProvider;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemProviderAdapter;
+import org.eclipse.emf.edit.provider.StyledString;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.emf.cdo.evolution.Change} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ChangeItemProvider extends ItemProviderAdapter implements IEditingDomainItemProvider, IStructuredItemContentProvider, ITreeItemContentProvider,
+ IItemLabelProvider, IItemPropertySource, IItemColorProvider, IItemFontProvider, IItemStyledLabelProvider
+{
+ /**
+ * This constructs an instance from a factory and a notifier.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public ChangeItemProvider(AdapterFactory adapterFactory)
+ {
+ super(adapterFactory);
+ }
+
+ /**
+ * This returns the property descriptors for the adapted class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object)
+ {
+ if (itemPropertyDescriptors == null)
+ {
+ super.getPropertyDescriptors(object);
+
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
+ * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
+ * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Collection<? extends EStructuralFeature> getChildrenFeatures(Object object)
+ {
+ if (childrenFeatures == null)
+ {
+ super.getChildrenFeatures(object);
+ childrenFeatures.add(EvolutionPackage.Literals.CHANGE__CHILDREN);
+ }
+ return childrenFeatures;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EStructuralFeature getChildFeature(Object object, Object child)
+ {
+ // Check the type of the specified child object and return the proper feature to use for
+ // adding (see {@link AddCommand}) it as a child.
+
+ return super.getChildFeature(object, child);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public boolean hasChildren(Object object)
+ {
+ return hasChildren(object, true);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected boolean shouldComposeCreationImage()
+ {
+ return true;
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String getText(Object object)
+ {
+ return ((StyledString)getStyledText(object)).getString();
+ }
+
+ /**
+ * This returns the label styled text for the adapted class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object getStyledText(Object object)
+ {
+ return new StyledString(getString("_UI_Change_type"));
+ }
+
+ /**
+ * This handles model notifications by calling {@link #updateChildren} to update any cached
+ * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void notifyChanged(Notification notification)
+ {
+ updateChildren(notification);
+
+ switch (notification.getFeatureID(Change.class))
+ {
+ case EvolutionPackage.CHANGE__CHILDREN:
+ fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
+ return;
+ }
+ super.notifyChanged(notification);
+ }
+
+ /**
+ * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+ * that can be created under this object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object)
+ {
+ super.collectNewChildDescriptors(newChildDescriptors, object);
+ }
+
+ /**
+ * Return the resource locator for this item provider's resources.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public ResourceLocator getResourceLocator()
+ {
+ return ((IChildCreationExtender)adapterFactory).getResourceLocator();
+ }
+
+}
diff --git a/plugins/org.eclipse.emf.cdo.evolution.edit/src/org/eclipse/emf/cdo/evolution/provider/ElementChangeItemProvider.java b/plugins/org.eclipse.emf.cdo.evolution.edit/src/org/eclipse/emf/cdo/evolution/provider/ElementChangeItemProvider.java
new file mode 100644
index 0000000000..138670dacb
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution.edit/src/org/eclipse/emf/cdo/evolution/provider/ElementChangeItemProvider.java
@@ -0,0 +1,234 @@
+/**
+ */
+package org.eclipse.emf.cdo.evolution.provider;
+
+import org.eclipse.emf.cdo.evolution.ChangeKind;
+import org.eclipse.emf.cdo.evolution.ElementChange;
+import org.eclipse.emf.cdo.evolution.EvolutionPackage;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EModelElement;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.StyledString;
+import org.eclipse.emf.edit.provider.StyledString.Style;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.emf.cdo.evolution.ElementChange} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ElementChangeItemProvider extends ChangeItemProvider
+{
+ private static final URI RED = URI.createURI("color://rgb/200/0/0"); //$NON-NLS-1$
+
+ private static final URI GREEN = URI.createURI("color://rgb/0/160/0"); //$NON-NLS-1$
+
+ static final Style REMOVAL_STYLER = Style.newBuilder().setForegroundColor(RED).toStyle();
+
+ static final Style ADDITION_STYLER = Style.newBuilder().setForegroundColor(GREEN).toStyle();
+
+ /**
+ * This constructs an instance from a factory and a notifier.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public ElementChangeItemProvider(AdapterFactory adapterFactory)
+ {
+ super(adapterFactory);
+ }
+
+ /**
+ * This returns the property descriptors for the adapted class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object)
+ {
+ if (itemPropertyDescriptors == null)
+ {
+ super.getPropertyDescriptors(object);
+
+ addOldElementPropertyDescriptor(object);
+ addNewElementPropertyDescriptor(object);
+ addKindPropertyDescriptor(object);
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This adds a property descriptor for the Old Element feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addOldElementPropertyDescriptor(Object object)
+ {
+ itemPropertyDescriptors.add(createItemPropertyDescriptor(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(), getResourceLocator(),
+ getString("_UI_ElementChange_oldElement_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_ElementChange_oldElement_feature", "_UI_ElementChange_type"),
+ EvolutionPackage.Literals.ELEMENT_CHANGE__OLD_ELEMENT, true, false, true, null, null, null));
+ }
+
+ /**
+ * This adds a property descriptor for the New Element feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addNewElementPropertyDescriptor(Object object)
+ {
+ itemPropertyDescriptors.add(createItemPropertyDescriptor(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(), getResourceLocator(),
+ getString("_UI_ElementChange_newElement_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_ElementChange_newElement_feature", "_UI_ElementChange_type"),
+ EvolutionPackage.Literals.ELEMENT_CHANGE__NEW_ELEMENT, true, false, true, null, null, null));
+ }
+
+ /**
+ * This adds a property descriptor for the Kind feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addKindPropertyDescriptor(Object object)
+ {
+ itemPropertyDescriptors.add(createItemPropertyDescriptor(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(), getResourceLocator(),
+ getString("_UI_ElementChange_kind_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_ElementChange_kind_feature", "_UI_ElementChange_type"),
+ EvolutionPackage.Literals.ELEMENT_CHANGE__KIND, true, false, false, ItemPropertyDescriptor.GENERIC_VALUE_IMAGE, null, null));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected boolean shouldComposeCreationImage()
+ {
+ return true;
+ }
+
+ @Override
+ public Object getImage(Object object)
+ {
+ ElementChange elementChange = (ElementChange)object;
+ EModelElement element = elementChange.getElement();
+
+ if (element != null)
+ {
+ IItemLabelProvider labelProvider = (IItemLabelProvider)getRootAdapterFactory().adapt(element, IItemLabelProvider.class);
+ if (labelProvider != null)
+ {
+ return labelProvider.getImage(element);
+ }
+ }
+
+ return null;
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String getText(Object object)
+ {
+ return ((StyledString)getStyledText(object)).getString();
+ }
+
+ /**
+ * This returns the label styled text for the adapted class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ @Override
+ public Object getStyledText(Object object)
+ {
+ ElementChange elementChange = (ElementChange)object;
+ EModelElement element = elementChange.getElement();
+
+ StyledString styledLabel = new StyledString();
+ ChangeKind kind = elementChange.getKind();
+
+ IItemLabelProvider labelProvider = (IItemLabelProvider)getRootAdapterFactory().adapt(element, IItemLabelProvider.class);
+ if (labelProvider != null)
+ {
+ String text = labelProvider.getText(element);
+ if (kind == ChangeKind.ADDED || kind == ChangeKind.COPIED || kind == ChangeKind.MOVED)
+ {
+ styledLabel.append(text, ADDITION_STYLER);
+ }
+ else if (kind == ChangeKind.REMOVED)
+ {
+ styledLabel.append(text, REMOVAL_STYLER);
+ }
+ else
+ {
+ styledLabel.append(text);
+ }
+ }
+ else
+ {
+ styledLabel.append(getString("_UI_ElementChange_type"));
+ }
+
+ String label = kind == null || kind == ChangeKind.NONE ? null : kind.toString();
+ if (label != null)
+ {
+ styledLabel.append(" " + label, StyledString.Style.DECORATIONS_STYLER);
+ }
+
+ return styledLabel;
+ }
+
+ /**
+ * This handles model notifications by calling {@link #updateChildren} to update any cached
+ * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void notifyChanged(Notification notification)
+ {
+ updateChildren(notification);
+
+ switch (notification.getFeatureID(ElementChange.class))
+ {
+ case EvolutionPackage.ELEMENT_CHANGE__KIND:
+ fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+ return;
+ }
+ super.notifyChanged(notification);
+ }
+
+ /**
+ * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+ * that can be created under this object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object)
+ {
+ super.collectNewChildDescriptors(newChildDescriptors, object);
+ }
+
+}
diff --git a/plugins/org.eclipse.emf.cdo.evolution.edit/src/org/eclipse/emf/cdo/evolution/provider/EvolutionEditPlugin.java b/plugins/org.eclipse.emf.cdo.evolution.edit/src/org/eclipse/emf/cdo/evolution/provider/EvolutionEditPlugin.java
new file mode 100644
index 0000000000..d3b8f2a27b
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution.edit/src/org/eclipse/emf/cdo/evolution/provider/EvolutionEditPlugin.java
@@ -0,0 +1,99 @@
+/**
+ */
+package org.eclipse.emf.cdo.evolution.provider;
+
+import org.eclipse.emf.common.EMFPlugin;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+import org.eclipse.emf.ecore.provider.EcoreEditPlugin;
+
+/**
+ * This is the central singleton for the Evolution edit plugin.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public final class EvolutionEditPlugin extends EMFPlugin
+{
+ /**
+ * Keep track of the singleton.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static final EvolutionEditPlugin INSTANCE = new EvolutionEditPlugin();
+
+ /**
+ * Keep track of the singleton.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private static Implementation plugin;
+
+ /**
+ * Create the instance.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EvolutionEditPlugin()
+ {
+ super
+ (new ResourceLocator []
+ {
+ EcoreEditPlugin.INSTANCE,
+ });
+ }
+
+ /**
+ * Returns the singleton instance of the Eclipse plugin.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the singleton instance.
+ * @generated
+ */
+ @Override
+ public ResourceLocator getPluginResourceLocator()
+ {
+ return plugin;
+ }
+
+ /**
+ * Returns the singleton instance of the Eclipse plugin.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the singleton instance.
+ * @generated
+ */
+ public static Implementation getPlugin()
+ {
+ return plugin;
+ }
+
+ /**
+ * The actual implementation of the Eclipse <b>Plugin</b>.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static class Implementation extends EclipsePlugin
+ {
+ /**
+ * Creates an instance.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public Implementation()
+ {
+ super();
+
+ // Remember the static instance.
+ //
+ plugin = this;
+ }
+ }
+
+}
diff --git a/plugins/org.eclipse.emf.cdo.evolution.edit/src/org/eclipse/emf/cdo/evolution/provider/EvolutionItemProvider.java b/plugins/org.eclipse.emf.cdo.evolution.edit/src/org/eclipse/emf/cdo/evolution/provider/EvolutionItemProvider.java
new file mode 100644
index 0000000000..ceac47f72e
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution.edit/src/org/eclipse/emf/cdo/evolution/provider/EvolutionItemProvider.java
@@ -0,0 +1,359 @@
+/**
+ */
+package org.eclipse.emf.cdo.evolution.provider;
+
+import org.eclipse.emf.cdo.evolution.Evolution;
+import org.eclipse.emf.cdo.evolution.EvolutionFactory;
+import org.eclipse.emf.cdo.evolution.EvolutionPackage;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.StyledString;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.emf.cdo.evolution.Evolution} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class EvolutionItemProvider extends ModelSetItemProvider
+{
+ /**
+ * This constructs an instance from a factory and a notifier.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EvolutionItemProvider(AdapterFactory adapterFactory)
+ {
+ super(adapterFactory);
+ }
+
+ /**
+ * This returns the property descriptors for the adapted class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object)
+ {
+ if (itemPropertyDescriptors == null)
+ {
+ super.getPropertyDescriptors(object);
+
+ addUseEcorePackagePropertyDescriptor(object);
+ addUseEresourcePackagePropertyDescriptor(object);
+ addUseEtypesPackagePropertyDescriptor(object);
+ addUniqueNamespacesPropertyDescriptor(object);
+ addRootPackagesPropertyDescriptor(object);
+ addAllPackagesPropertyDescriptor(object);
+ addMissingPackagesPropertyDescriptor(object);
+ addOrderedReleasesPropertyDescriptor(object);
+ addLatestReleasePropertyDescriptor(object);
+ addNextReleaseVersionPropertyDescriptor(object);
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This adds a property descriptor for the Use Ecore Package feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addUseEcorePackagePropertyDescriptor(Object object)
+ {
+ itemPropertyDescriptors.add(createItemPropertyDescriptor(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(), getResourceLocator(),
+ getString("_UI_Evolution_useEcorePackage_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_Evolution_useEcorePackage_feature", "_UI_Evolution_type"),
+ EvolutionPackage.Literals.EVOLUTION__USE_ECORE_PACKAGE, true, false, false, ItemPropertyDescriptor.BOOLEAN_VALUE_IMAGE, null, null));
+ }
+
+ /**
+ * This adds a property descriptor for the Use Eresource Package feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addUseEresourcePackagePropertyDescriptor(Object object)
+ {
+ itemPropertyDescriptors.add(createItemPropertyDescriptor(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(), getResourceLocator(),
+ getString("_UI_Evolution_useEresourcePackage_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_Evolution_useEresourcePackage_feature", "_UI_Evolution_type"),
+ EvolutionPackage.Literals.EVOLUTION__USE_ERESOURCE_PACKAGE, true, false, false, ItemPropertyDescriptor.BOOLEAN_VALUE_IMAGE, null, null));
+ }
+
+ /**
+ * This adds a property descriptor for the Use Etypes Package feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addUseEtypesPackagePropertyDescriptor(Object object)
+ {
+ itemPropertyDescriptors.add(createItemPropertyDescriptor(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(), getResourceLocator(),
+ getString("_UI_Evolution_useEtypesPackage_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_Evolution_useEtypesPackage_feature", "_UI_Evolution_type"),
+ EvolutionPackage.Literals.EVOLUTION__USE_ETYPES_PACKAGE, true, false, false, ItemPropertyDescriptor.BOOLEAN_VALUE_IMAGE, null, null));
+ }
+
+ /**
+ * This adds a property descriptor for the Unique Namespaces feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addUniqueNamespacesPropertyDescriptor(Object object)
+ {
+ itemPropertyDescriptors.add(createItemPropertyDescriptor(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(), getResourceLocator(),
+ getString("_UI_Evolution_uniqueNamespaces_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_Evolution_uniqueNamespaces_feature", "_UI_Evolution_type"),
+ EvolutionPackage.Literals.EVOLUTION__UNIQUE_NAMESPACES, true, false, false, ItemPropertyDescriptor.BOOLEAN_VALUE_IMAGE, null, null));
+ }
+
+ /**
+ * This adds a property descriptor for the Root Packages feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addRootPackagesPropertyDescriptor(Object object)
+ {
+ itemPropertyDescriptors.add(createItemPropertyDescriptor(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(), getResourceLocator(),
+ getString("_UI_Evolution_rootPackages_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_Evolution_rootPackages_feature", "_UI_Evolution_type"),
+ EvolutionPackage.Literals.EVOLUTION__ROOT_PACKAGES, false, false, false, null, null, null));
+ }
+
+ /**
+ * This adds a property descriptor for the All Packages feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addAllPackagesPropertyDescriptor(Object object)
+ {
+ itemPropertyDescriptors.add(createItemPropertyDescriptor(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(), getResourceLocator(),
+ getString("_UI_Evolution_allPackages_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_Evolution_allPackages_feature", "_UI_Evolution_type"),
+ EvolutionPackage.Literals.EVOLUTION__ALL_PACKAGES, false, false, false, null, null, null));
+ }
+
+ /**
+ * This adds a property descriptor for the Ordered Releases feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addOrderedReleasesPropertyDescriptor(Object object)
+ {
+ itemPropertyDescriptors.add(createItemPropertyDescriptor(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(), getResourceLocator(),
+ getString("_UI_Evolution_orderedReleases_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_Evolution_orderedReleases_feature", "_UI_Evolution_type"),
+ EvolutionPackage.Literals.EVOLUTION__ORDERED_RELEASES, false, false, false, null, null, null));
+ }
+
+ /**
+ * This adds a property descriptor for the Latest Release feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addLatestReleasePropertyDescriptor(Object object)
+ {
+ itemPropertyDescriptors.add(createItemPropertyDescriptor(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(), getResourceLocator(),
+ getString("_UI_Evolution_latestRelease_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_Evolution_latestRelease_feature", "_UI_Evolution_type"),
+ EvolutionPackage.Literals.EVOLUTION__LATEST_RELEASE, false, false, false, null, null, null));
+ }
+
+ /**
+ * This adds a property descriptor for the Next Release Version feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addNextReleaseVersionPropertyDescriptor(Object object)
+ {
+ itemPropertyDescriptors.add(createItemPropertyDescriptor(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(), getResourceLocator(),
+ getString("_UI_Evolution_nextReleaseVersion_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_Evolution_nextReleaseVersion_feature", "_UI_Evolution_type"),
+ EvolutionPackage.Literals.EVOLUTION__NEXT_RELEASE_VERSION, false, false, false, ItemPropertyDescriptor.INTEGRAL_VALUE_IMAGE, null, null));
+ }
+
+ /**
+ * This adds a property descriptor for the Missing Packages feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addMissingPackagesPropertyDescriptor(Object object)
+ {
+ itemPropertyDescriptors.add(createItemPropertyDescriptor(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(), getResourceLocator(),
+ getString("_UI_Evolution_missingPackages_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_Evolution_missingPackages_feature", "_UI_Evolution_type"),
+ EvolutionPackage.Literals.EVOLUTION__MISSING_PACKAGES, false, false, false, null, null, null));
+ }
+
+ /**
+ * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
+ * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
+ * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public Collection<? extends EStructuralFeature> getChildrenFeaturesGen(Object object)
+ {
+ if (childrenFeatures == null)
+ {
+ super.getChildrenFeatures(object);
+ childrenFeatures.add(EvolutionPackage.Literals.EVOLUTION__MODELS);
+ childrenFeatures.add(EvolutionPackage.Literals.EVOLUTION__ORDERED_RELEASES);
+ }
+ return childrenFeatures;
+ }
+
+ /**
+ * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
+ * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
+ * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ @Override
+ public Collection<? extends EStructuralFeature> getChildrenFeatures(Object object)
+ {
+ @SuppressWarnings("unchecked")
+ List<EStructuralFeature> childrenFeatures = (List<EStructuralFeature>)getChildrenFeaturesGen(object);
+
+ childrenFeatures.remove(EvolutionPackage.Literals.EVOLUTION__MODELS);
+ childrenFeatures.add(0, EvolutionPackage.Literals.EVOLUTION__MODELS);
+
+ return childrenFeatures;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EStructuralFeature getChildFeature(Object object, Object child)
+ {
+ // Check the type of the specified child object and return the proper feature to use for
+ // adding (see {@link AddCommand}) it as a child.
+
+ return super.getChildFeature(object, child);
+ }
+
+ @Override
+ protected boolean hasChildren(Object object, boolean optimized)
+ {
+ Evolution evolution = (Evolution)object;
+ return !(evolution.getModels().isEmpty() && evolution.getReleases().isEmpty());
+ }
+
+ /**
+ * This returns Evolution.gif.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object)
+ {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/Evolution"));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected boolean shouldComposeCreationImage()
+ {
+ return true;
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String getText(Object object)
+ {
+ return ((StyledString)getStyledText(object)).getString();
+ }
+
+ /**
+ * This returns the label styled text for the adapted class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ @Override
+ public Object getStyledText(Object object)
+ {
+ return new StyledString(getString("_UI_Evolution_type"));
+ }
+
+ /**
+ * This handles model notifications by calling {@link #updateChildren} to update any cached
+ * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void notifyChanged(Notification notification)
+ {
+ updateChildren(notification);
+
+ switch (notification.getFeatureID(Evolution.class))
+ {
+ case EvolutionPackage.EVOLUTION__USE_ECORE_PACKAGE:
+ case EvolutionPackage.EVOLUTION__USE_ERESOURCE_PACKAGE:
+ case EvolutionPackage.EVOLUTION__USE_ETYPES_PACKAGE:
+ case EvolutionPackage.EVOLUTION__UNIQUE_NAMESPACES:
+ case EvolutionPackage.EVOLUTION__RELEASES:
+ case EvolutionPackage.EVOLUTION__NEXT_RELEASE_VERSION:
+ fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+ return;
+ case EvolutionPackage.EVOLUTION__MODELS:
+ case EvolutionPackage.EVOLUTION__ORDERED_RELEASES:
+ fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
+ return;
+ }
+ super.notifyChanged(notification);
+ }
+
+ /**
+ * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+ * that can be created under this object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object)
+ {
+ super.collectNewChildDescriptors(newChildDescriptors, object);
+
+ newChildDescriptors.add(createChildParameter(EvolutionPackage.Literals.EVOLUTION__MODELS, EvolutionFactory.eINSTANCE.createModel()));
+ }
+
+}
diff --git a/plugins/org.eclipse.emf.cdo.evolution.edit/src/org/eclipse/emf/cdo/evolution/provider/EvolutionItemProviderAdapterFactory.java b/plugins/org.eclipse.emf.cdo.evolution.edit/src/org/eclipse/emf/cdo/evolution/provider/EvolutionItemProviderAdapterFactory.java
new file mode 100644
index 0000000000..9560a78d5f
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution.edit/src/org/eclipse/emf/cdo/evolution/provider/EvolutionItemProviderAdapterFactory.java
@@ -0,0 +1,443 @@
+/**
+ */
+package org.eclipse.emf.cdo.evolution.provider;
+
+import org.eclipse.emf.cdo.evolution.EvolutionPackage;
+import org.eclipse.emf.cdo.evolution.util.EvolutionAdapterFactory;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.Notifier;
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.emf.edit.provider.ChangeNotifier;
+import org.eclipse.emf.edit.provider.ChildCreationExtenderManager;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.IChangeNotifier;
+import org.eclipse.emf.edit.provider.IChildCreationExtender;
+import org.eclipse.emf.edit.provider.IDisposable;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemColorProvider;
+import org.eclipse.emf.edit.provider.IItemFontProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IItemStyledLabelProvider;
+import org.eclipse.emf.edit.provider.INotifyChangedListener;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * This is the factory that is used to provide the interfaces needed to support Viewers.
+ * The adapters generated by this factory convert EMF adapter notifications into calls to {@link #fireNotifyChanged fireNotifyChanged}.
+ * The adapters also support Eclipse property sheets.
+ * Note that most of the adapters are shared among multiple instances.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class EvolutionItemProviderAdapterFactory extends EvolutionAdapterFactory
+ implements ComposeableAdapterFactory, IChangeNotifier, IDisposable, IChildCreationExtender
+{
+ /**
+ * This keeps track of the root adapter factory that delegates to this adapter factory.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected ComposedAdapterFactory parentAdapterFactory;
+
+ /**
+ * This is used to implement {@link org.eclipse.emf.edit.provider.IChangeNotifier}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected IChangeNotifier changeNotifier = new ChangeNotifier();
+
+ /**
+ * This helps manage the child creation extenders.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected ChildCreationExtenderManager childCreationExtenderManager = new ChildCreationExtenderManager(EvolutionEditPlugin.INSTANCE,
+ EvolutionPackage.eNS_URI);
+
+ /**
+ * This keeps track of all the supported types checked by {@link #isFactoryForType isFactoryForType}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected Collection<Object> supportedTypes = new ArrayList<Object>();
+
+ /**
+ * This constructs an instance.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EvolutionItemProviderAdapterFactory()
+ {
+ supportedTypes.add(IEditingDomainItemProvider.class);
+ supportedTypes.add(IStructuredItemContentProvider.class);
+ supportedTypes.add(ITreeItemContentProvider.class);
+ supportedTypes.add(IItemLabelProvider.class);
+ supportedTypes.add(IItemPropertySource.class);
+ supportedTypes.add(IItemColorProvider.class);
+ supportedTypes.add(IItemFontProvider.class);
+ supportedTypes.add(IItemStyledLabelProvider.class);
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link org.eclipse.emf.cdo.evolution.Model} instances.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected ModelItemProvider modelItemProvider;
+
+ /**
+ * This creates an adapter for a {@link org.eclipse.emf.cdo.evolution.Model}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Adapter createModelAdapter()
+ {
+ if (modelItemProvider == null)
+ {
+ modelItemProvider = new ModelItemProvider(this);
+ }
+
+ return modelItemProvider;
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link org.eclipse.emf.cdo.evolution.Evolution} instances.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected EvolutionItemProvider evolutionItemProvider;
+
+ /**
+ * This creates an adapter for a {@link org.eclipse.emf.cdo.evolution.Evolution}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Adapter createEvolutionAdapter()
+ {
+ if (evolutionItemProvider == null)
+ {
+ evolutionItemProvider = new EvolutionItemProvider(this);
+ }
+
+ return evolutionItemProvider;
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link org.eclipse.emf.cdo.evolution.Release} instances.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected ReleaseItemProvider releaseItemProvider;
+
+ /**
+ * This creates an adapter for a {@link org.eclipse.emf.cdo.evolution.Release}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Adapter createReleaseAdapter()
+ {
+ if (releaseItemProvider == null)
+ {
+ releaseItemProvider = new ReleaseItemProvider(this);
+ }
+
+ return releaseItemProvider;
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link org.eclipse.emf.cdo.evolution.ModelSetChange} instances.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected ModelSetChangeItemProvider modelSetChangeItemProvider;
+
+ /**
+ * This creates an adapter for a {@link org.eclipse.emf.cdo.evolution.ModelSetChange}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Adapter createModelSetChangeAdapter()
+ {
+ if (modelSetChangeItemProvider == null)
+ {
+ modelSetChangeItemProvider = new ModelSetChangeItemProvider(this);
+ }
+
+ return modelSetChangeItemProvider;
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link org.eclipse.emf.cdo.evolution.ElementChange} instances.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected ElementChangeItemProvider elementChangeItemProvider;
+
+ /**
+ * This creates an adapter for a {@link org.eclipse.emf.cdo.evolution.ElementChange}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Adapter createElementChangeAdapter()
+ {
+ if (elementChangeItemProvider == null)
+ {
+ elementChangeItemProvider = new ElementChangeItemProvider(this);
+ }
+
+ return elementChangeItemProvider;
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link org.eclipse.emf.cdo.evolution.PropertyChange} instances.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected PropertyChangeItemProvider propertyChangeItemProvider;
+
+ /**
+ * This creates an adapter for a {@link org.eclipse.emf.cdo.evolution.PropertyChange}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Adapter createPropertyChangeAdapter()
+ {
+ if (propertyChangeItemProvider == null)
+ {
+ propertyChangeItemProvider = new PropertyChangeItemProvider(this);
+ }
+
+ return propertyChangeItemProvider;
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link org.eclipse.emf.cdo.evolution.FeaturePathMigration} instances.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected FeaturePathMigrationItemProvider featurePathMigrationItemProvider;
+
+ /**
+ * This creates an adapter for a {@link org.eclipse.emf.cdo.evolution.FeaturePathMigration}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Adapter createFeaturePathMigrationAdapter()
+ {
+ if (featurePathMigrationItemProvider == null)
+ {
+ featurePathMigrationItemProvider = new FeaturePathMigrationItemProvider(this);
+ }
+
+ return featurePathMigrationItemProvider;
+ }
+
+ /**
+ * This returns the root adapter factory that contains this factory.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public ComposeableAdapterFactory getRootAdapterFactory()
+ {
+ return parentAdapterFactory == null ? this : parentAdapterFactory.getRootAdapterFactory();
+ }
+
+ /**
+ * This sets the composed adapter factory that contains this factory.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setParentAdapterFactory(ComposedAdapterFactory parentAdapterFactory)
+ {
+ this.parentAdapterFactory = parentAdapterFactory;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public boolean isFactoryForType(Object type)
+ {
+ return supportedTypes.contains(type) || super.isFactoryForType(type);
+ }
+
+ /**
+ * This implementation substitutes the factory itself as the key for the adapter.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Adapter adapt(Notifier notifier, Object type)
+ {
+ return super.adapt(notifier, this);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object adapt(Object object, Object type)
+ {
+ if (isFactoryForType(type))
+ {
+ Object adapter = super.adapt(object, type);
+ if (!(type instanceof Class<?>) || ((Class<?>)type).isInstance(adapter))
+ {
+ return adapter;
+ }
+ }
+
+ return null;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public List<IChildCreationExtender> getChildCreationExtenders()
+ {
+ return childCreationExtenderManager.getChildCreationExtenders();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public Collection<?> getNewChildDescriptors(Object object, EditingDomain editingDomain)
+ {
+ return childCreationExtenderManager.getNewChildDescriptors(object, editingDomain);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public ResourceLocator getResourceLocator()
+ {
+ return childCreationExtenderManager;
+ }
+
+ /**
+ * This adds a listener.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void addListener(INotifyChangedListener notifyChangedListener)
+ {
+ changeNotifier.addListener(notifyChangedListener);
+ }
+
+ /**
+ * This removes a listener.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void removeListener(INotifyChangedListener notifyChangedListener)
+ {
+ changeNotifier.removeListener(notifyChangedListener);
+ }
+
+ /**
+ * This delegates to {@link #changeNotifier} and to {@link #parentAdapterFactory}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void fireNotifyChanged(Notification notification)
+ {
+ changeNotifier.fireNotifyChanged(notification);
+
+ if (parentAdapterFactory != null)
+ {
+ parentAdapterFactory.fireNotifyChanged(notification);
+ }
+ }
+
+ /**
+ * This disposes all of the item providers created by this factory.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void dispose()
+ {
+ if (modelItemProvider != null)
+ {
+ modelItemProvider.dispose();
+ }
+ if (evolutionItemProvider != null)
+ {
+ evolutionItemProvider.dispose();
+ }
+ if (releaseItemProvider != null)
+ {
+ releaseItemProvider.dispose();
+ }
+ if (modelSetChangeItemProvider != null)
+ {
+ modelSetChangeItemProvider.dispose();
+ }
+ if (elementChangeItemProvider != null)
+ {
+ elementChangeItemProvider.dispose();
+ }
+ if (propertyChangeItemProvider != null)
+ {
+ propertyChangeItemProvider.dispose();
+ }
+ if (featurePathMigrationItemProvider != null)
+ {
+ featurePathMigrationItemProvider.dispose();
+ }
+ }
+
+}
diff --git a/plugins/org.eclipse.emf.cdo.evolution.edit/src/org/eclipse/emf/cdo/evolution/provider/FeaturePathMigrationItemProvider.java b/plugins/org.eclipse.emf.cdo.evolution.edit/src/org/eclipse/emf/cdo/evolution/provider/FeaturePathMigrationItemProvider.java
new file mode 100644
index 0000000000..f2b38b4f86
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution.edit/src/org/eclipse/emf/cdo/evolution/provider/FeaturePathMigrationItemProvider.java
@@ -0,0 +1,182 @@
+/**
+ */
+package org.eclipse.emf.cdo.evolution.provider;
+
+import org.eclipse.emf.cdo.evolution.EvolutionPackage;
+import org.eclipse.emf.cdo.evolution.FeaturePathMigration;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.StyledString;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.emf.cdo.evolution.FeaturePathMigration} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class FeaturePathMigrationItemProvider extends MigrationItemProvider
+{
+ /**
+ * This constructs an instance from a factory and a notifier.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public FeaturePathMigrationItemProvider(AdapterFactory adapterFactory)
+ {
+ super(adapterFactory);
+ }
+
+ /**
+ * This returns the property descriptors for the adapted class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object)
+ {
+ if (itemPropertyDescriptors == null)
+ {
+ super.getPropertyDescriptors(object);
+
+ addFromClassPropertyDescriptor(object);
+ addToClassPropertyDescriptor(object);
+ addFeaturePathPropertyDescriptor(object);
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This adds a property descriptor for the From Class feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addFromClassPropertyDescriptor(Object object)
+ {
+ itemPropertyDescriptors.add(createItemPropertyDescriptor(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(), getResourceLocator(),
+ getString("_UI_FeaturePathMigration_fromClass_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_FeaturePathMigration_fromClass_feature", "_UI_FeaturePathMigration_type"),
+ EvolutionPackage.Literals.FEATURE_PATH_MIGRATION__FROM_CLASS, true, false, true, null, null, null));
+ }
+
+ /**
+ * This adds a property descriptor for the To Class feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addToClassPropertyDescriptor(Object object)
+ {
+ itemPropertyDescriptors.add(createItemPropertyDescriptor(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(), getResourceLocator(),
+ getString("_UI_FeaturePathMigration_toClass_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_FeaturePathMigration_toClass_feature", "_UI_FeaturePathMigration_type"),
+ EvolutionPackage.Literals.FEATURE_PATH_MIGRATION__TO_CLASS, true, false, true, null, null, null));
+ }
+
+ /**
+ * This adds a property descriptor for the Feature Path feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addFeaturePathPropertyDescriptor(Object object)
+ {
+ itemPropertyDescriptors.add(createItemPropertyDescriptor(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(), getResourceLocator(),
+ getString("_UI_FeaturePathMigration_featurePath_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_FeaturePathMigration_featurePath_feature", "_UI_FeaturePathMigration_type"),
+ EvolutionPackage.Literals.FEATURE_PATH_MIGRATION__FEATURE_PATH, true, false, true, null, null, null));
+ }
+
+ /**
+ * This returns FeaturePathMigration.gif.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object)
+ {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/FeaturePathMigration"));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected boolean shouldComposeCreationImage()
+ {
+ return true;
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String getText(Object object)
+ {
+ return ((StyledString)getStyledText(object)).getString();
+ }
+
+ /**
+ * This returns the label styled text for the adapted class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object getStyledText(Object object)
+ {
+ String label = ((FeaturePathMigration)object).getDiagnosticID();
+ StyledString styledLabel = new StyledString();
+ if (label == null || label.length() == 0)
+ {
+ styledLabel.append(getString("_UI_FeaturePathMigration_type"), StyledString.Style.QUALIFIER_STYLER);
+ }
+ else
+ {
+ styledLabel.append(getString("_UI_FeaturePathMigration_type"), StyledString.Style.QUALIFIER_STYLER).append(" " + label);
+ }
+ return styledLabel;
+ }
+
+ /**
+ * This handles model notifications by calling {@link #updateChildren} to update any cached
+ * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void notifyChanged(Notification notification)
+ {
+ updateChildren(notification);
+ super.notifyChanged(notification);
+ }
+
+ /**
+ * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+ * that can be created under this object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object)
+ {
+ super.collectNewChildDescriptors(newChildDescriptors, object);
+ }
+
+}
diff --git a/plugins/org.eclipse.emf.cdo.evolution.edit/src/org/eclipse/emf/cdo/evolution/provider/MigrationItemProvider.java b/plugins/org.eclipse.emf.cdo.evolution.edit/src/org/eclipse/emf/cdo/evolution/provider/MigrationItemProvider.java
new file mode 100644
index 0000000000..0577be42e5
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution.edit/src/org/eclipse/emf/cdo/evolution/provider/MigrationItemProvider.java
@@ -0,0 +1,167 @@
+/**
+ */
+package org.eclipse.emf.cdo.evolution.provider;
+
+import org.eclipse.emf.cdo.evolution.EvolutionPackage;
+import org.eclipse.emf.cdo.evolution.Migration;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.edit.provider.IChildCreationExtender;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemColorProvider;
+import org.eclipse.emf.edit.provider.IItemFontProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IItemStyledLabelProvider;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemProviderAdapter;
+import org.eclipse.emf.edit.provider.StyledString;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.emf.cdo.evolution.Migration} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class MigrationItemProvider extends ItemProviderAdapter implements IEditingDomainItemProvider, IStructuredItemContentProvider, ITreeItemContentProvider,
+ IItemLabelProvider, IItemPropertySource, IItemColorProvider, IItemFontProvider, IItemStyledLabelProvider
+{
+ /**
+ * This constructs an instance from a factory and a notifier.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public MigrationItemProvider(AdapterFactory adapterFactory)
+ {
+ super(adapterFactory);
+ }
+
+ /**
+ * This returns the property descriptors for the adapted class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object)
+ {
+ if (itemPropertyDescriptors == null)
+ {
+ super.getPropertyDescriptors(object);
+
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public boolean hasChildren(Object object)
+ {
+ return hasChildren(object, true);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected boolean shouldComposeCreationImage()
+ {
+ return true;
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String getText(Object object)
+ {
+ return ((StyledString)getStyledText(object)).getString();
+ }
+
+ /**
+ * This returns the label styled text for the adapted class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object getStyledText(Object object)
+ {
+ String label = ((Migration)object).getDiagnosticID();
+ StyledString styledLabel = new StyledString();
+ if (label == null || label.length() == 0)
+ {
+ styledLabel.append(getString("_UI_Migration_type"), StyledString.Style.QUALIFIER_STYLER);
+ }
+ else
+ {
+ styledLabel.append(getString("_UI_Migration_type"), StyledString.Style.QUALIFIER_STYLER).append(" " + label);
+ }
+ return styledLabel;
+ }
+
+ /**
+ * This handles model notifications by calling {@link #updateChildren} to update any cached
+ * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void notifyChanged(Notification notification)
+ {
+ updateChildren(notification);
+
+ switch (notification.getFeatureID(Migration.class))
+ {
+ case EvolutionPackage.MIGRATION__DIAGNOSTIC_ID:
+ fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+ return;
+ }
+ super.notifyChanged(notification);
+ }
+
+ /**
+ * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+ * that can be created under this object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object)
+ {
+ super.collectNewChildDescriptors(newChildDescriptors, object);
+ }
+
+ /**
+ * Return the resource locator for this item provider's resources.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public ResourceLocator getResourceLocator()
+ {
+ return ((IChildCreationExtender)adapterFactory).getResourceLocator();
+ }
+
+}
diff --git a/plugins/org.eclipse.emf.cdo.evolution.edit/src/org/eclipse/emf/cdo/evolution/provider/ModelItemProvider.java b/plugins/org.eclipse.emf.cdo.evolution.edit/src/org/eclipse/emf/cdo/evolution/provider/ModelItemProvider.java
new file mode 100644
index 0000000000..bf209fec5a
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution.edit/src/org/eclipse/emf/cdo/evolution/provider/ModelItemProvider.java
@@ -0,0 +1,331 @@
+/**
+ */
+package org.eclipse.emf.cdo.evolution.provider;
+
+import org.eclipse.emf.cdo.evolution.EvolutionPackage;
+import org.eclipse.emf.cdo.evolution.Model;
+
+import org.eclipse.emf.common.command.Command;
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.edit.command.CommandParameter;
+import org.eclipse.emf.edit.command.DragAndDropCommand;
+import org.eclipse.emf.edit.command.SetCommand;
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IChildCreationExtender;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemColorProvider;
+import org.eclipse.emf.edit.provider.IItemFontProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IItemStyledLabelProvider;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ItemProviderAdapter;
+import org.eclipse.emf.edit.provider.StyledString;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.emf.cdo.evolution.Model} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ModelItemProvider extends ItemProviderAdapter implements IEditingDomainItemProvider, IStructuredItemContentProvider, ITreeItemContentProvider,
+ IItemLabelProvider, IItemPropertySource, IItemColorProvider, IItemFontProvider, IItemStyledLabelProvider
+{
+ /**
+ * This constructs an instance from a factory and a notifier.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public ModelItemProvider(AdapterFactory adapterFactory)
+ {
+ super(adapterFactory);
+ }
+
+ /**
+ * This returns the property descriptors for the adapted class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object)
+ {
+ if (itemPropertyDescriptors == null)
+ {
+ super.getPropertyDescriptors(object);
+
+ addURIPropertyDescriptor(object);
+ addRootPackagePropertyDescriptor(object);
+ addAllPackagesPropertyDescriptor(object);
+ addReferencedPackagesPropertyDescriptor(object);
+ addMissingPackagesPropertyDescriptor(object);
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This adds a property descriptor for the URI feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addURIPropertyDescriptor(Object object)
+ {
+ itemPropertyDescriptors.add(createItemPropertyDescriptor(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(), getResourceLocator(),
+ getString("_UI_Model_uRI_feature"), getString("_UI_PropertyDescriptor_description", "_UI_Model_uRI_feature", "_UI_Model_type"),
+ EvolutionPackage.Literals.MODEL__URI, true, false, false, ItemPropertyDescriptor.GENERIC_VALUE_IMAGE, null, null));
+ }
+
+ /**
+ * This adds a property descriptor for the Root Package feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addRootPackagePropertyDescriptor(Object object)
+ {
+ itemPropertyDescriptors.add(createItemPropertyDescriptor(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(), getResourceLocator(),
+ getString("_UI_Model_rootPackage_feature"), getString("_UI_PropertyDescriptor_description", "_UI_Model_rootPackage_feature", "_UI_Model_type"),
+ EvolutionPackage.Literals.MODEL__ROOT_PACKAGE, false, false, false, null, null, null));
+ }
+
+ /**
+ * This adds a property descriptor for the All Packages feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addAllPackagesPropertyDescriptor(Object object)
+ {
+ itemPropertyDescriptors.add(createItemPropertyDescriptor(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(), getResourceLocator(),
+ getString("_UI_Model_allPackages_feature"), getString("_UI_PropertyDescriptor_description", "_UI_Model_allPackages_feature", "_UI_Model_type"),
+ EvolutionPackage.Literals.MODEL__ALL_PACKAGES, false, false, false, null, null, null));
+ }
+
+ /**
+ * This adds a property descriptor for the Referenced Packages feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addReferencedPackagesPropertyDescriptor(Object object)
+ {
+ itemPropertyDescriptors.add(createItemPropertyDescriptor(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(), getResourceLocator(),
+ getString("_UI_Model_referencedPackages_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_Model_referencedPackages_feature", "_UI_Model_type"),
+ EvolutionPackage.Literals.MODEL__REFERENCED_PACKAGES, false, false, false, null, null, null));
+ }
+
+ /**
+ * This adds a property descriptor for the Missing Packages feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addMissingPackagesPropertyDescriptor(Object object)
+ {
+ itemPropertyDescriptors.add(createItemPropertyDescriptor(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(), getResourceLocator(),
+ getString("_UI_Model_missingPackages_feature"), getString("_UI_PropertyDescriptor_description", "_UI_Model_missingPackages_feature", "_UI_Model_type"),
+ EvolutionPackage.Literals.MODEL__MISSING_PACKAGES, false, false, false, null, null, null));
+ }
+
+ /**
+ * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
+ * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
+ * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Collection<? extends EStructuralFeature> getChildrenFeatures(Object object)
+ {
+ if (childrenFeatures == null)
+ {
+ super.getChildrenFeatures(object);
+ childrenFeatures.add(EvolutionPackage.Literals.MODEL__ROOT_PACKAGE);
+ }
+ return childrenFeatures;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EStructuralFeature getChildFeature(Object object, Object child)
+ {
+ // Check the type of the specified child object and return the proper feature to use for
+ // adding (see {@link AddCommand}) it as a child.
+
+ return super.getChildFeature(object, child);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public boolean hasChildren(Object object)
+ {
+ return hasChildren(object, true);
+ }
+
+ /**
+ * This returns Model.gif.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object)
+ {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/Model"));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected boolean shouldComposeCreationImage()
+ {
+ return true;
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String getText(Object object)
+ {
+ return ((StyledString)getStyledText(object)).getString();
+ }
+
+ /**
+ * This returns the label styled text for the adapted class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object getStyledText(Object object)
+ {
+ URI labelValue = ((Model)object).getURI();
+ String label = labelValue == null ? null : labelValue.toString();
+ StyledString styledLabel = new StyledString();
+ if (label == null || label.length() == 0)
+ {
+ styledLabel.append(getString("_UI_Model_type"), StyledString.Style.QUALIFIER_STYLER);
+ }
+ else
+ {
+ styledLabel.append(getString("_UI_Model_type"), StyledString.Style.QUALIFIER_STYLER).append(" " + label);
+ }
+ return styledLabel;
+ }
+
+ /**
+ * This handles model notifications by calling {@link #updateChildren} to update any cached
+ * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void notifyChanged(Notification notification)
+ {
+ updateChildren(notification);
+
+ switch (notification.getFeatureID(Model.class))
+ {
+ case EvolutionPackage.MODEL__URI:
+ case EvolutionPackage.MODEL__ALL_PACKAGES:
+ case EvolutionPackage.MODEL__REFERENCED_PACKAGES:
+ case EvolutionPackage.MODEL__MISSING_PACKAGES:
+ fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+ return;
+ case EvolutionPackage.MODEL__ROOT_PACKAGE:
+ fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
+ return;
+ }
+ super.notifyChanged(notification);
+ }
+
+ /**
+ * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+ * that can be created under this object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object)
+ {
+ super.collectNewChildDescriptors(newChildDescriptors, object);
+ }
+
+ /**
+ * Return the resource locator for this item provider's resources.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public ResourceLocator getResourceLocator()
+ {
+ return ((IChildCreationExtender)adapterFactory).getResourceLocator();
+ }
+
+ @Override
+ public Command createCommand(Object owner, EditingDomain domain, Class<? extends Command> commandClass, CommandParameter commandParameter)
+ {
+ if (commandClass == DragAndDropCommand.class)
+ {
+ // DragAndDropCommand.Detail detail = (DragAndDropCommand.Detail)commandParameter.getFeature();
+ Collection<?> collection = commandParameter.getCollection();
+ if (domain != null && collection.size() == 1 && commandParameter.getOwner() != domain.getResourceSet())
+ {
+ Object element = collection.iterator().next();
+ if (element instanceof URI)
+ {
+ URI uri = (URI)element;
+ return SetCommand.create(domain, owner, EvolutionPackage.Literals.MODEL__URI, uri);
+ }
+
+ // return createDragAndDropCommand(domain, commandParameter.getOwner(), detail.location, detail.operations,
+ // detail.operation,
+ // commandParameter.getCollection());
+ }
+ }
+
+ return super.createCommand(owner, domain, commandClass, commandParameter);
+ }
+
+ @Override
+ protected boolean isWrappingNeeded(Object object)
+ {
+ // Wrapping is always needed because of the derived cross reference 'rootPackage', which is shown as children.
+ return true;
+ }
+
+}
diff --git a/plugins/org.eclipse.emf.cdo.evolution.edit/src/org/eclipse/emf/cdo/evolution/provider/ModelSetChangeItemProvider.java b/plugins/org.eclipse.emf.cdo.evolution.edit/src/org/eclipse/emf/cdo/evolution/provider/ModelSetChangeItemProvider.java
new file mode 100644
index 0000000000..c0746ec255
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution.edit/src/org/eclipse/emf/cdo/evolution/provider/ModelSetChangeItemProvider.java
@@ -0,0 +1,156 @@
+/**
+ */
+package org.eclipse.emf.cdo.evolution.provider;
+
+import org.eclipse.emf.cdo.evolution.EvolutionPackage;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.StyledString;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.emf.cdo.evolution.ModelSetChange} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ModelSetChangeItemProvider extends ChangeItemProvider
+{
+ /**
+ * This constructs an instance from a factory and a notifier.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public ModelSetChangeItemProvider(AdapterFactory adapterFactory)
+ {
+ super(adapterFactory);
+ }
+
+ /**
+ * This returns the property descriptors for the adapted class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object)
+ {
+ if (itemPropertyDescriptors == null)
+ {
+ super.getPropertyDescriptors(object);
+
+ addOldModelSetPropertyDescriptor(object);
+ addNewModelSetPropertyDescriptor(object);
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This adds a property descriptor for the Old Model Set feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addOldModelSetPropertyDescriptor(Object object)
+ {
+ itemPropertyDescriptors.add(createItemPropertyDescriptor(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(), getResourceLocator(),
+ getString("_UI_ModelSetChange_oldModelSet_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_ModelSetChange_oldModelSet_feature", "_UI_ModelSetChange_type"),
+ EvolutionPackage.Literals.MODEL_SET_CHANGE__OLD_MODEL_SET, true, false, true, null, null, null));
+ }
+
+ /**
+ * This adds a property descriptor for the New Model Set feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addNewModelSetPropertyDescriptor(Object object)
+ {
+ itemPropertyDescriptors.add(createItemPropertyDescriptor(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(), getResourceLocator(),
+ getString("_UI_ModelSetChange_newModelSet_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_ModelSetChange_newModelSet_feature", "_UI_ModelSetChange_type"),
+ EvolutionPackage.Literals.MODEL_SET_CHANGE__NEW_MODEL_SET, true, false, true, null, null, null));
+ }
+
+ /**
+ * This returns ModelSetChange.gif.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object)
+ {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/ModelSetChange"));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected boolean shouldComposeCreationImage()
+ {
+ return true;
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String getText(Object object)
+ {
+ return ((StyledString)getStyledText(object)).getString();
+ }
+
+ /**
+ * This returns the label styled text for the adapted class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object getStyledText(Object object)
+ {
+ return new StyledString(getString("_UI_ModelSetChange_type"));
+ }
+
+ /**
+ * This handles model notifications by calling {@link #updateChildren} to update any cached
+ * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void notifyChanged(Notification notification)
+ {
+ updateChildren(notification);
+ super.notifyChanged(notification);
+ }
+
+ /**
+ * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+ * that can be created under this object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object)
+ {
+ super.collectNewChildDescriptors(newChildDescriptors, object);
+ }
+
+}
diff --git a/plugins/org.eclipse.emf.cdo.evolution.edit/src/org/eclipse/emf/cdo/evolution/provider/ModelSetItemProvider.java b/plugins/org.eclipse.emf.cdo.evolution.edit/src/org/eclipse/emf/cdo/evolution/provider/ModelSetItemProvider.java
new file mode 100644
index 0000000000..7969d8e777
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution.edit/src/org/eclipse/emf/cdo/evolution/provider/ModelSetItemProvider.java
@@ -0,0 +1,196 @@
+/**
+ */
+package org.eclipse.emf.cdo.evolution.provider;
+
+import org.eclipse.emf.cdo.evolution.EvolutionFactory;
+import org.eclipse.emf.cdo.evolution.EvolutionPackage;
+import org.eclipse.emf.cdo.evolution.ModelSet;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.edit.provider.IChildCreationExtender;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemColorProvider;
+import org.eclipse.emf.edit.provider.IItemFontProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IItemStyledLabelProvider;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemProviderAdapter;
+import org.eclipse.emf.edit.provider.StyledString;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.emf.cdo.evolution.ModelSet} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ModelSetItemProvider extends ItemProviderAdapter implements IEditingDomainItemProvider, IStructuredItemContentProvider, ITreeItemContentProvider,
+ IItemLabelProvider, IItemPropertySource, IItemColorProvider, IItemFontProvider, IItemStyledLabelProvider
+{
+ /**
+ * This constructs an instance from a factory and a notifier.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public ModelSetItemProvider(AdapterFactory adapterFactory)
+ {
+ super(adapterFactory);
+ }
+
+ /**
+ * This returns the property descriptors for the adapted class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object)
+ {
+ if (itemPropertyDescriptors == null)
+ {
+ super.getPropertyDescriptors(object);
+
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
+ * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
+ * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Collection<? extends EStructuralFeature> getChildrenFeatures(Object object)
+ {
+ if (childrenFeatures == null)
+ {
+ super.getChildrenFeatures(object);
+ childrenFeatures.add(EvolutionPackage.Literals.MODEL_SET__CHANGE);
+ childrenFeatures.add(EvolutionPackage.Literals.MODEL_SET__MIGRATIONS);
+ }
+ return childrenFeatures;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EStructuralFeature getChildFeature(Object object, Object child)
+ {
+ // Check the type of the specified child object and return the proper feature to use for
+ // adding (see {@link AddCommand}) it as a child.
+
+ return super.getChildFeature(object, child);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public boolean hasChildren(Object object)
+ {
+ return hasChildren(object, true);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected boolean shouldComposeCreationImage()
+ {
+ return true;
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String getText(Object object)
+ {
+ return ((StyledString)getStyledText(object)).getString();
+ }
+
+ /**
+ * This returns the label styled text for the adapted class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object getStyledText(Object object)
+ {
+ return new StyledString(getString("_UI_ModelSet_type"));
+ }
+
+ /**
+ * This handles model notifications by calling {@link #updateChildren} to update any cached
+ * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void notifyChanged(Notification notification)
+ {
+ updateChildren(notification);
+
+ switch (notification.getFeatureID(ModelSet.class))
+ {
+ case EvolutionPackage.MODEL_SET__CHANGE:
+ case EvolutionPackage.MODEL_SET__MIGRATIONS:
+ fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
+ return;
+ }
+ super.notifyChanged(notification);
+ }
+
+ /**
+ * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+ * that can be created under this object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object)
+ {
+ super.collectNewChildDescriptors(newChildDescriptors, object);
+
+ newChildDescriptors.add(createChildParameter(EvolutionPackage.Literals.MODEL_SET__MIGRATIONS, EvolutionFactory.eINSTANCE.createFeaturePathMigration()));
+ }
+
+ /**
+ * Return the resource locator for this item provider's resources.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public ResourceLocator getResourceLocator()
+ {
+ return ((IChildCreationExtender)adapterFactory).getResourceLocator();
+ }
+
+}
diff --git a/plugins/org.eclipse.emf.cdo.evolution.edit/src/org/eclipse/emf/cdo/evolution/provider/PropertyChangeItemProvider.java b/plugins/org.eclipse.emf.cdo.evolution.edit/src/org/eclipse/emf/cdo/evolution/provider/PropertyChangeItemProvider.java
new file mode 100644
index 0000000000..cfa947d8c4
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution.edit/src/org/eclipse/emf/cdo/evolution/provider/PropertyChangeItemProvider.java
@@ -0,0 +1,294 @@
+/**
+ */
+package org.eclipse.emf.cdo.evolution.provider;
+
+import org.eclipse.emf.cdo.evolution.ChangeKind;
+import org.eclipse.emf.cdo.evolution.EvolutionPackage;
+import org.eclipse.emf.cdo.evolution.PropertyChange;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.ENamedElement;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.StyledString;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.emf.cdo.evolution.PropertyChange} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class PropertyChangeItemProvider extends ChangeItemProvider
+{
+ /**
+ * This constructs an instance from a factory and a notifier.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public PropertyChangeItemProvider(AdapterFactory adapterFactory)
+ {
+ super(adapterFactory);
+ }
+
+ /**
+ * This returns the property descriptors for the adapted class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object)
+ {
+ if (itemPropertyDescriptors == null)
+ {
+ super.getPropertyDescriptors(object);
+
+ addFeaturePropertyDescriptor(object);
+ addOldValuePropertyDescriptor(object);
+ addNewValuePropertyDescriptor(object);
+ addKindPropertyDescriptor(object);
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This adds a property descriptor for the Feature feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addFeaturePropertyDescriptor(Object object)
+ {
+ itemPropertyDescriptors.add(createItemPropertyDescriptor(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(), getResourceLocator(),
+ getString("_UI_PropertyChange_feature_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_PropertyChange_feature_feature", "_UI_PropertyChange_type"),
+ EvolutionPackage.Literals.PROPERTY_CHANGE__FEATURE, true, false, true, null, null, null));
+ }
+
+ /**
+ * This adds a property descriptor for the Old Value feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addOldValuePropertyDescriptor(Object object)
+ {
+ itemPropertyDescriptors.add(createItemPropertyDescriptor(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(), getResourceLocator(),
+ getString("_UI_PropertyChange_oldValue_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_PropertyChange_oldValue_feature", "_UI_PropertyChange_type"),
+ EvolutionPackage.Literals.PROPERTY_CHANGE__OLD_VALUE, true, false, false, ItemPropertyDescriptor.GENERIC_VALUE_IMAGE, null, null));
+ }
+
+ /**
+ * This adds a property descriptor for the New Value feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addNewValuePropertyDescriptor(Object object)
+ {
+ itemPropertyDescriptors.add(createItemPropertyDescriptor(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(), getResourceLocator(),
+ getString("_UI_PropertyChange_newValue_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_PropertyChange_newValue_feature", "_UI_PropertyChange_type"),
+ EvolutionPackage.Literals.PROPERTY_CHANGE__NEW_VALUE, true, false, false, ItemPropertyDescriptor.GENERIC_VALUE_IMAGE, null, null));
+ }
+
+ /**
+ * This adds a property descriptor for the Kind feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addKindPropertyDescriptor(Object object)
+ {
+ itemPropertyDescriptors.add(createItemPropertyDescriptor(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(), getResourceLocator(),
+ getString("_UI_PropertyChange_kind_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_PropertyChange_kind_feature", "_UI_PropertyChange_type"),
+ EvolutionPackage.Literals.PROPERTY_CHANGE__KIND, false, false, false, ItemPropertyDescriptor.GENERIC_VALUE_IMAGE, null, null));
+ }
+
+ /**
+ * This returns PropertyChange.gif.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object)
+ {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/PropertyChange"));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected boolean shouldComposeCreationImage()
+ {
+ return true;
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String getText(Object object)
+ {
+ return ((StyledString)getStyledText(object)).getString();
+ }
+
+ /**
+ * This returns the label styled text for the adapted class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ @Override
+ public Object getStyledText(Object object)
+ {
+ PropertyChange propertyChange = (PropertyChange)object;
+ EStructuralFeature feature = propertyChange.getFeature();
+
+ StyledString styledLabel = new StyledString();
+ if (feature != null)
+ {
+ String text = null;
+
+ EClass eClass = feature.getEContainingClass();
+ IItemPropertySource propertySource = (IItemPropertySource)getRootAdapterFactory().adapt(eClass, IItemPropertySource.class);
+ if (propertySource != null)
+ {
+ for (IItemPropertyDescriptor propertyDescriptor : propertySource.getPropertyDescriptors(eClass))
+ {
+ if (propertyDescriptor.getFeature(eClass) == feature)
+ {
+ text = propertyDescriptor.getDisplayName(eClass);
+ break;
+ }
+ }
+ }
+
+ if (text == null)
+ {
+ text = feature.getName();
+ }
+
+ ChangeKind kind = propertyChange.getKind();
+ if (kind == ChangeKind.ADDED || kind == ChangeKind.COPIED)
+ {
+ styledLabel.append(text, ElementChangeItemProvider.ADDITION_STYLER);
+ }
+ else if (kind == ChangeKind.REMOVED)
+ {
+ styledLabel.append(text, ElementChangeItemProvider.REMOVAL_STYLER);
+ }
+ else
+ {
+ styledLabel.append(text);
+ }
+ }
+ else
+ {
+ // Can't really happen.
+ styledLabel.append(getString("_UI_PropertyChange_type"), StyledString.Style.QUALIFIER_STYLER);
+ }
+
+ StringBuilder builder = new StringBuilder(" ");
+ formatValue(propertyChange.getOldValue(), builder);
+ builder.append(" \u279d ");
+ formatValue(propertyChange.getNewValue(), builder);
+
+ styledLabel.append(builder.toString(), StyledString.Style.DECORATIONS_STYLER);
+ return styledLabel;
+ }
+
+ /**
+ * This handles model notifications by calling {@link #updateChildren} to update any cached
+ * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void notifyChanged(Notification notification)
+ {
+ updateChildren(notification);
+
+ switch (notification.getFeatureID(PropertyChange.class))
+ {
+ case EvolutionPackage.PROPERTY_CHANGE__OLD_VALUE:
+ case EvolutionPackage.PROPERTY_CHANGE__NEW_VALUE:
+ case EvolutionPackage.PROPERTY_CHANGE__KIND:
+ fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+ return;
+ }
+ super.notifyChanged(notification);
+ }
+
+ /**
+ * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+ * that can be created under this object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object)
+ {
+ super.collectNewChildDescriptors(newChildDescriptors, object);
+ }
+
+ private static void formatValue(Object value, StringBuilder builder)
+ {
+ if (value instanceof List<?>)
+ {
+ List<?> list = (List<?>)value;
+ boolean first = true;
+ for (Object element : list)
+ {
+ if (first)
+ {
+ first = false;
+ }
+ else
+ {
+ builder.append(", ");
+ }
+
+ formatValueSingle(element, builder);
+ }
+ }
+ else
+ {
+ formatValueSingle(value, builder);
+ }
+ }
+
+ private static void formatValueSingle(Object value, StringBuilder builder)
+ {
+ if (value instanceof ENamedElement)
+ {
+ builder.append(((ENamedElement)value).getName());
+ }
+ else
+ {
+ builder.append(String.valueOf(value));
+ }
+ }
+
+}
diff --git a/plugins/org.eclipse.emf.cdo.evolution.edit/src/org/eclipse/emf/cdo/evolution/provider/ReleaseItemProvider.java b/plugins/org.eclipse.emf.cdo.evolution.edit/src/org/eclipse/emf/cdo/evolution/provider/ReleaseItemProvider.java
new file mode 100644
index 0000000000..2576c88618
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution.edit/src/org/eclipse/emf/cdo/evolution/provider/ReleaseItemProvider.java
@@ -0,0 +1,256 @@
+/**
+ */
+package org.eclipse.emf.cdo.evolution.provider;
+
+import org.eclipse.emf.cdo.evolution.EvolutionPackage;
+import org.eclipse.emf.cdo.evolution.Release;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecore.EcoreFactory;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.StyledString;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+import java.util.Collection;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.emf.cdo.evolution.Release} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ReleaseItemProvider extends ModelSetItemProvider
+{
+ /**
+ * This constructs an instance from a factory and a notifier.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public ReleaseItemProvider(AdapterFactory adapterFactory)
+ {
+ super(adapterFactory);
+ }
+
+ /**
+ * This returns the property descriptors for the adapted class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object)
+ {
+ if (itemPropertyDescriptors == null)
+ {
+ super.getPropertyDescriptors(object);
+
+ addVersionPropertyDescriptor(object);
+ addDatePropertyDescriptor(object);
+ addAllPackagesPropertyDescriptor(object);
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This adds a property descriptor for the Date feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addDatePropertyDescriptor(Object object)
+ {
+ itemPropertyDescriptors.add(createItemPropertyDescriptor(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(), getResourceLocator(),
+ getString("_UI_Release_date_feature"), getString("_UI_PropertyDescriptor_description", "_UI_Release_date_feature", "_UI_Release_type"),
+ EvolutionPackage.Literals.RELEASE__DATE, true, false, false, ItemPropertyDescriptor.GENERIC_VALUE_IMAGE, null, null));
+ }
+
+ /**
+ * This adds a property descriptor for the Version feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addVersionPropertyDescriptor(Object object)
+ {
+ itemPropertyDescriptors.add(createItemPropertyDescriptor(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(), getResourceLocator(),
+ getString("_UI_Release_version_feature"), getString("_UI_PropertyDescriptor_description", "_UI_Release_version_feature", "_UI_Release_type"),
+ EvolutionPackage.Literals.RELEASE__VERSION, true, false, false, ItemPropertyDescriptor.INTEGRAL_VALUE_IMAGE, null, null));
+ }
+
+ /**
+ * This adds a property descriptor for the All Packages feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addAllPackagesPropertyDescriptor(Object object)
+ {
+ itemPropertyDescriptors.add(createItemPropertyDescriptor(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(), getResourceLocator(),
+ getString("_UI_Release_allPackages_feature"), getString("_UI_PropertyDescriptor_description", "_UI_Release_allPackages_feature", "_UI_Release_type"),
+ EvolutionPackage.Literals.RELEASE__ALL_PACKAGES, false, false, false, null, null, null));
+ }
+
+ /**
+ * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
+ * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
+ * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public Collection<? extends EStructuralFeature> getChildrenFeaturesGen(Object object)
+ {
+ if (childrenFeatures == null)
+ {
+ super.getChildrenFeatures(object);
+ childrenFeatures.add(EvolutionPackage.Literals.RELEASE__ROOT_PACKAGES);
+ }
+ return childrenFeatures;
+ }
+
+ /**
+ * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
+ * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
+ * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ @Override
+ public Collection<? extends EStructuralFeature> getChildrenFeatures(Object object)
+ {
+ @SuppressWarnings("unchecked")
+ List<EStructuralFeature> childrenFeatures = (List<EStructuralFeature>)getChildrenFeaturesGen(object);
+
+ childrenFeatures.remove(EvolutionPackage.Literals.RELEASE__ROOT_PACKAGES);
+ childrenFeatures.add(0, EvolutionPackage.Literals.RELEASE__ROOT_PACKAGES);
+
+ return childrenFeatures;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EStructuralFeature getChildFeature(Object object, Object child)
+ {
+ // Check the type of the specified child object and return the proper feature to use for
+ // adding (see {@link AddCommand}) it as a child.
+
+ return super.getChildFeature(object, child);
+ }
+
+ @Override
+ protected boolean hasChildren(Object object, boolean optimized)
+ {
+ Release release = (Release)object;
+ return !release.getRootPackages().isEmpty();
+ }
+
+ /**
+ * This returns Release.gif.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object)
+ {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/Release"));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected boolean shouldComposeCreationImage()
+ {
+ return true;
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String getText(Object object)
+ {
+ return ((StyledString)getStyledText(object)).getString();
+ }
+
+ /**
+ * This returns the label styled text for the adapted class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ @Override
+ public Object getStyledText(Object object)
+ {
+ StyledString styledLabel = new StyledString();
+ styledLabel.append(getString("_UI_Release_type"), StyledString.Style.QUALIFIER_STYLER);
+ styledLabel.append(" v" + ((Release)object).getVersion());
+
+ Date date = ((Release)object).getDate();
+ if (date != null)
+ {
+ styledLabel.append(" " + date.toString(), StyledString.Style.DECORATIONS_STYLER);
+ }
+
+ return styledLabel;
+ }
+
+ /**
+ * This handles model notifications by calling {@link #updateChildren} to update any cached
+ * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void notifyChanged(Notification notification)
+ {
+ updateChildren(notification);
+
+ switch (notification.getFeatureID(Release.class))
+ {
+ case EvolutionPackage.RELEASE__VERSION:
+ case EvolutionPackage.RELEASE__DATE:
+ fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+ return;
+ case EvolutionPackage.RELEASE__ROOT_PACKAGES:
+ fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
+ return;
+ }
+ super.notifyChanged(notification);
+ }
+
+ /**
+ * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+ * that can be created under this object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object)
+ {
+ super.collectNewChildDescriptors(newChildDescriptors, object);
+
+ newChildDescriptors.add(createChildParameter(EvolutionPackage.Literals.RELEASE__ROOT_PACKAGES, EcoreFactory.eINSTANCE.createEPackage()));
+ }
+
+}
diff --git a/plugins/org.eclipse.emf.cdo.evolution.editor/.classpath b/plugins/org.eclipse.emf.cdo.evolution.editor/.classpath
new file mode 100644
index 0000000000..64c5e31b7a
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution.editor/.classpath
@@ -0,0 +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/J2SE-1.5"/>
+ <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.cdo.evolution.editor/.project b/plugins/org.eclipse.emf.cdo.evolution.editor/.project
new file mode 100644
index 0000000000..297c6f6a85
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution.editor/.project
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.emf.cdo.evolution.editor</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.api.tools.apiAnalysisBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.oomph.version.VersionBuilder</name>
+ <arguments>
+ <dictionary>
+ <key>check.maven.pom</key>
+ <value>true</value>
+ </dictionary>
+ <dictionary>
+ <key>ignore.lower.bound.dependency.ranges</key>
+ <value>true</value>
+ </dictionary>
+ <dictionary>
+ <key>release.path</key>
+ <value>/org.eclipse.emf.cdo.releng/versions/release.xml</value>
+ </dictionary>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.pde.api.tools.apiAnalysisNature</nature>
+ <nature>org.eclipse.oomph.version.VersionNature</nature>
+ </natures>
+ <filteredResources>
+ <filter>
+ <id>1396938000000</id>
+ <name></name>
+ <type>10</type>
+ <matcher>
+ <id>org.eclipse.ui.ide.multiFilter</id>
+ <arguments>1.0-projectRelativePath-matches-true-false-target</arguments>
+ </matcher>
+ </filter>
+ </filteredResources>
+</projectDescription>
diff --git a/plugins/org.eclipse.emf.cdo.evolution.editor/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.emf.cdo.evolution.editor/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000000..ff3d8e623b
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution.editor/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,412 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.builder.cleanOutputFolder=clean
+org.eclipse.jdt.core.builder.duplicateResourceTask=warning
+org.eclipse.jdt.core.builder.invalidClasspath=abort
+org.eclipse.jdt.core.builder.recreateModifiedClassFileInOutputFolder=ignore
+org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch,*.ucls,doc-files/,package.html,package-info.java
+org.eclipse.jdt.core.circularClasspath=error
+org.eclipse.jdt.core.classpath.exclusionPatterns=enabled
+org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled
+org.eclipse.jdt.core.codeComplete.argumentPrefixes=
+org.eclipse.jdt.core.codeComplete.argumentSuffixes=
+org.eclipse.jdt.core.codeComplete.fieldPrefixes=
+org.eclipse.jdt.core.codeComplete.fieldSuffixes=
+org.eclipse.jdt.core.codeComplete.localPrefixes=
+org.eclipse.jdt.core.codeComplete.localSuffixes=
+org.eclipse.jdt.core.codeComplete.staticFieldPrefixes=
+org.eclipse.jdt.core.codeComplete.staticFieldSuffixes=
+org.eclipse.jdt.core.codeComplete.staticFinalFieldPrefixes=
+org.eclipse.jdt.core.codeComplete.staticFinalFieldSuffixes=
+org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
+org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
+org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
+org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.doc.comment.support=enabled
+org.eclipse.jdt.core.compiler.maxProblemPerUnit=100
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=ignore
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=return_tag
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
+org.eclipse.jdt.core.compiler.problem.nullReference=warning
+org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
+org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
+org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning
+org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=ignore
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.5
+org.eclipse.jdt.core.compiler.taskCaseSensitive=enabled
+org.eclipse.jdt.core.compiler.taskPriorities=NORMAL,HIGH,HIGH,LOW,LOW,LOW,LOW,LOW
+org.eclipse.jdt.core.compiler.taskTags=TODO,FIXME,XXX,PERF,MEM,POLISH,@generated NOT,@ADDED
+org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_assignment=0
+org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
+org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
+org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
+org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80
+org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16
+org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_after_package=1
+org.eclipse.jdt.core.formatter.blank_lines_before_field=1
+org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
+org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
+org.eclipse.jdt.core.formatter.blank_lines_before_method=1
+org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
+org.eclipse.jdt.core.formatter.blank_lines_before_package=0
+org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
+org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
+org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_switch=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=next_line
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=true
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=true
+org.eclipse.jdt.core.formatter.comment.format_block_comments=true
+org.eclipse.jdt.core.formatter.comment.format_header=false
+org.eclipse.jdt.core.formatter.comment.format_html=true
+org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=false
+org.eclipse.jdt.core.formatter.comment.format_line_comments=true
+org.eclipse.jdt.core.formatter.comment.format_source_code=true
+org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true
+org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
+org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
+org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert
+org.eclipse.jdt.core.formatter.comment.line_length=120
+org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
+org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
+org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
+org.eclipse.jdt.core.formatter.compact_else_if=true
+org.eclipse.jdt.core.formatter.continuation_indentation=2
+org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
+org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
+org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
+org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
+org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
+org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_empty_lines=false
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false
+org.eclipse.jdt.core.formatter.indentation.size=2
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
+org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
+org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.join_lines_in_comments=true
+org.eclipse.jdt.core.formatter.join_wrapped_lines=true
+org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.lineSplit=160
+org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
+org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
+org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
+org.eclipse.jdt.core.formatter.tabulation.char=space
+org.eclipse.jdt.core.formatter.tabulation.size=2
+org.eclipse.jdt.core.formatter.use_on_off_tags=false
+org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
+org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
+org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
+org.eclipse.jdt.core.incompatibleJDKLevel=ignore
+org.eclipse.jdt.core.incompleteClasspath=error
diff --git a/plugins/org.eclipse.emf.cdo.evolution.editor/.settings/org.eclipse.jdt.launching.prefs b/plugins/org.eclipse.emf.cdo.evolution.editor/.settings/org.eclipse.jdt.launching.prefs
new file mode 100644
index 0000000000..556ed07a3c
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution.editor/.settings/org.eclipse.jdt.launching.prefs
@@ -0,0 +1,3 @@
+#Fri Sep 02 05:38:34 CEST 2011
+eclipse.preferences.version=1
+org.eclipse.jdt.launching.PREF_STRICTLY_COMPATIBLE_JRE_NOT_AVAILABLE=ignore
diff --git a/plugins/org.eclipse.emf.cdo.evolution.editor/.settings/org.eclipse.jdt.ui.prefs b/plugins/org.eclipse.emf.cdo.evolution.editor/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 0000000000..222aec0421
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution.editor/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,119 @@
+cleanup.add_default_serial_version_id=true
+cleanup.add_generated_serial_version_id=false
+cleanup.add_missing_annotations=true
+cleanup.add_missing_deprecated_annotations=true
+cleanup.add_missing_methods=false
+cleanup.add_missing_nls_tags=false
+cleanup.add_missing_override_annotations=true
+cleanup.add_missing_override_annotations_interface_methods=true
+cleanup.add_serial_version_id=true
+cleanup.always_use_blocks=true
+cleanup.always_use_parentheses_in_expressions=false
+cleanup.always_use_this_for_non_static_field_access=false
+cleanup.always_use_this_for_non_static_method_access=false
+cleanup.convert_to_enhanced_for_loop=false
+cleanup.correct_indentation=true
+cleanup.format_source_code=true
+cleanup.format_source_code_changes_only=false
+cleanup.make_local_variable_final=true
+cleanup.make_parameters_final=false
+cleanup.make_private_fields_final=true
+cleanup.make_type_abstract_if_missing_method=false
+cleanup.make_variable_declarations_final=false
+cleanup.never_use_blocks=false
+cleanup.never_use_parentheses_in_expressions=true
+cleanup.organize_imports=true
+cleanup.qualify_static_field_accesses_with_declaring_class=false
+cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+cleanup.qualify_static_member_accesses_with_declaring_class=false
+cleanup.qualify_static_method_accesses_with_declaring_class=false
+cleanup.remove_private_constructors=true
+cleanup.remove_trailing_whitespaces=true
+cleanup.remove_trailing_whitespaces_all=true
+cleanup.remove_trailing_whitespaces_ignore_empty=false
+cleanup.remove_unnecessary_casts=true
+cleanup.remove_unnecessary_nls_tags=true
+cleanup.remove_unused_imports=true
+cleanup.remove_unused_local_variables=false
+cleanup.remove_unused_private_fields=true
+cleanup.remove_unused_private_members=false
+cleanup.remove_unused_private_methods=true
+cleanup.remove_unused_private_types=true
+cleanup.sort_members=false
+cleanup.sort_members_all=false
+cleanup.use_blocks=true
+cleanup.use_blocks_only_for_return_and_throw=false
+cleanup.use_parentheses_in_expressions=true
+cleanup.use_this_for_non_static_field_access=true
+cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+cleanup.use_this_for_non_static_method_access=true
+cleanup.use_this_for_non_static_method_access_only_if_necessary=true
+cleanup_profile=_EMFT
+cleanup_settings_version=2
+eclipse.preferences.version=1
+editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
+formatter_profile=_EMFT
+formatter_settings_version=12
+org.eclipse.jdt.ui.exception.name=ex
+org.eclipse.jdt.ui.gettersetter.use.is=true
+org.eclipse.jdt.ui.ignorelowercasenames=true
+org.eclipse.jdt.ui.importorder=org.eclipse.emf.cdo;org.eclipse.emf.internal.cdo;org.eclipse.net4j;org.eclipse.internal.net4j;org.eclipse.emf;org.eclipse;com;org;javax;java;
+org.eclipse.jdt.ui.javadoc=true
+org.eclipse.jdt.ui.keywordthis=false
+org.eclipse.jdt.ui.ondemandthreshold=99
+org.eclipse.jdt.ui.overrideannotation=true
+org.eclipse.jdt.ui.staticondemandthreshold=99
+org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8" standalone\="no"?><templates><template autoinsert\="false" context\="gettercomment_context" deleted\="false" description\="Comment for getter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.gettercomment" name\="gettercomment"/><template autoinsert\="false" context\="settercomment_context" deleted\="false" description\="Comment for setter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.settercomment" name\="settercomment"/><template autoinsert\="false" context\="constructorcomment_context" deleted\="false" description\="Comment for created constructors" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorcomment" name\="constructorcomment"/><template autoinsert\="false" context\="filecomment_context" deleted\="false" description\="Comment for created Java files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.filecomment" name\="filecomment">/*\r\n * Copyright (c) 2004-2018 Eike Stepper (Loehne, Germany) and others.\r\n * All rights reserved. This program and the accompanying materials\r\n * are made available under the terms of the Eclipse Public License v1.0\r\n * which accompanies this distribution, and is available at\r\n * http\://www.eclipse.org/legal/epl-v10.html\r\n * \r\n * Contributors\:\r\n * Eike Stepper - initial API and implementation\r\n */</template><template autoinsert\="false" context\="typecomment_context" deleted\="false" description\="Comment for created types" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.typecomment" name\="typecomment">/**\r\n * @author Eike Stepper\r\n */</template><template autoinsert\="false" context\="fieldcomment_context" deleted\="false" description\="Comment for fields" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.fieldcomment" name\="fieldcomment"/><template autoinsert\="false" context\="methodcomment_context" deleted\="false" description\="Comment for non-overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodcomment" name\="methodcomment"/><template autoinsert\="false" context\="overridecomment_context" deleted\="false" description\="Comment for overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.overridecomment" name\="overridecomment"/><template autoinsert\="false" context\="delegatecomment_context" deleted\="false" description\="Comment for delegate methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.delegatecomment" name\="delegatecomment"/><template autoinsert\="true" context\="newtype_context" deleted\="false" description\="Newly created files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.newtype" name\="newtype">${filecomment}\r\n${package_declaration}\r\n\r\n${typecomment}\r\n${type_declaration}</template><template autoinsert\="true" context\="classbody_context" deleted\="false" description\="Code in new class type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.classbody" name\="classbody">\r\n</template><template autoinsert\="true" context\="interfacebody_context" deleted\="false" description\="Code in new interface type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.interfacebody" name\="interfacebody">\r\n</template><template autoinsert\="true" context\="enumbody_context" deleted\="false" description\="Code in new enum type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.enumbody" name\="enumbody">\r\n</template><template autoinsert\="true" context\="annotationbody_context" deleted\="false" description\="Code in new annotation type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.annotationbody" name\="annotationbody">\r\n</template><template autoinsert\="false" context\="catchblock_context" deleted\="false" description\="Code in new catch blocks" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.catchblock" name\="catchblock">${exception_var}.printStackTrace();</template><template autoinsert\="false" context\="methodbody_context" deleted\="false" description\="Code in created method stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodbody" name\="methodbody">${body_statement}</template><template autoinsert\="false" context\="constructorbody_context" deleted\="false" description\="Code in created constructor stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorbody" name\="constructorbody">${body_statement}</template><template autoinsert\="true" context\="getterbody_context" deleted\="false" description\="Code in created getters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.getterbody" name\="getterbody">return ${field};</template><template autoinsert\="true" context\="setterbody_context" deleted\="false" description\="Code in created setters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.setterbody" name\="setterbody">${field} \= ${param};</template></templates>
+sp_cleanup.add_default_serial_version_id=true
+sp_cleanup.add_generated_serial_version_id=false
+sp_cleanup.add_missing_annotations=true
+sp_cleanup.add_missing_deprecated_annotations=true
+sp_cleanup.add_missing_methods=false
+sp_cleanup.add_missing_nls_tags=false
+sp_cleanup.add_missing_override_annotations=true
+sp_cleanup.add_missing_override_annotations_interface_methods=false
+sp_cleanup.add_serial_version_id=false
+sp_cleanup.always_use_blocks=true
+sp_cleanup.always_use_parentheses_in_expressions=false
+sp_cleanup.always_use_this_for_non_static_field_access=false
+sp_cleanup.always_use_this_for_non_static_method_access=false
+sp_cleanup.convert_to_enhanced_for_loop=false
+sp_cleanup.correct_indentation=false
+sp_cleanup.format_source_code=true
+sp_cleanup.format_source_code_changes_only=false
+sp_cleanup.make_local_variable_final=false
+sp_cleanup.make_parameters_final=false
+sp_cleanup.make_private_fields_final=true
+sp_cleanup.make_type_abstract_if_missing_method=false
+sp_cleanup.make_variable_declarations_final=false
+sp_cleanup.never_use_blocks=false
+sp_cleanup.never_use_parentheses_in_expressions=true
+sp_cleanup.on_save_use_additional_actions=true
+sp_cleanup.organize_imports=true
+sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
+sp_cleanup.remove_private_constructors=true
+sp_cleanup.remove_trailing_whitespaces=true
+sp_cleanup.remove_trailing_whitespaces_all=true
+sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
+sp_cleanup.remove_unnecessary_casts=true
+sp_cleanup.remove_unnecessary_nls_tags=true
+sp_cleanup.remove_unused_imports=true
+sp_cleanup.remove_unused_local_variables=false
+sp_cleanup.remove_unused_private_fields=true
+sp_cleanup.remove_unused_private_members=false
+sp_cleanup.remove_unused_private_methods=true
+sp_cleanup.remove_unused_private_types=true
+sp_cleanup.sort_members=false
+sp_cleanup.sort_members_all=false
+sp_cleanup.use_blocks=true
+sp_cleanup.use_blocks_only_for_return_and_throw=false
+sp_cleanup.use_parentheses_in_expressions=true
+sp_cleanup.use_this_for_non_static_field_access=true
+sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+sp_cleanup.use_this_for_non_static_method_access=true
+sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
diff --git a/plugins/org.eclipse.emf.cdo.evolution.editor/.settings/org.eclipse.ltk.core.refactoring.prefs b/plugins/org.eclipse.emf.cdo.evolution.editor/.settings/org.eclipse.ltk.core.refactoring.prefs
new file mode 100644
index 0000000000..864e30fe5d
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution.editor/.settings/org.eclipse.ltk.core.refactoring.prefs
@@ -0,0 +1,3 @@
+#Thu Feb 04 09:44:24 CET 2010
+eclipse.preferences.version=1
+org.eclipse.ltk.core.refactoring.enable.project.refactoring.history=false
diff --git a/plugins/org.eclipse.emf.cdo.evolution.editor/.settings/org.eclipse.mylyn.tasks.ui.prefs b/plugins/org.eclipse.emf.cdo.evolution.editor/.settings/org.eclipse.mylyn.tasks.ui.prefs
new file mode 100644
index 0000000000..b050639a54
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution.editor/.settings/org.eclipse.mylyn.tasks.ui.prefs
@@ -0,0 +1,4 @@
+#Thu Feb 04 09:44:24 CET 2010
+eclipse.preferences.version=1
+project.repository.kind=bugzilla
+project.repository.url=https\://bugs.eclipse.org/bugs
diff --git a/plugins/org.eclipse.emf.cdo.evolution.editor/.settings/org.eclipse.mylyn.team.ui.prefs b/plugins/org.eclipse.emf.cdo.evolution.editor/.settings/org.eclipse.mylyn.team.ui.prefs
new file mode 100644
index 0000000000..97c11e6725
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution.editor/.settings/org.eclipse.mylyn.team.ui.prefs
@@ -0,0 +1,3 @@
+#Thu Feb 04 09:44:24 CET 2010
+commit.comment.template=[${task.id}] ${task.description}\r\n\r\n${task.url}
+eclipse.preferences.version=1
diff --git a/plugins/org.eclipse.emf.cdo.evolution.editor/.settings/org.eclipse.pde.api.tools.prefs b/plugins/org.eclipse.emf.cdo.evolution.editor/.settings/org.eclipse.pde.api.tools.prefs
new file mode 100644
index 0000000000..0c17d59e45
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution.editor/.settings/org.eclipse.pde.api.tools.prefs
@@ -0,0 +1,95 @@
+#Thu Feb 04 09:44:24 CET 2010
+ANNOTATION_ELEMENT_TYPE_ADDED_METHOD_WITHOUT_DEFAULT_VALUE=Error
+ANNOTATION_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_FIELD=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_METHOD=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_API_TYPE=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_REEXPORTED_API_TYPE=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_REEXPORTED_TYPE=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_TYPE=Error
+CLASS_ELEMENT_TYPE_ADDED_METHOD=Error
+CLASS_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+CLASS_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+CLASS_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+CLASS_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+CLASS_ELEMENT_TYPE_CHANGED_NON_ABSTRACT_TO_ABSTRACT=Error
+CLASS_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+CLASS_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+CLASS_ELEMENT_TYPE_REMOVED_CONSTRUCTOR=Error
+CLASS_ELEMENT_TYPE_REMOVED_FIELD=Error
+CLASS_ELEMENT_TYPE_REMOVED_METHOD=Error
+CLASS_ELEMENT_TYPE_REMOVED_SUPERCLASS=Error
+CLASS_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+CLASS_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+CONSTRUCTOR_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+CONSTRUCTOR_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+CONSTRUCTOR_ELEMENT_TYPE_CHANGED_VARARGS_TO_ARRAY=Error
+CONSTRUCTOR_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+ENUM_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+ENUM_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+ENUM_ELEMENT_TYPE_REMOVED_ENUM_CONSTANT=Error
+ENUM_ELEMENT_TYPE_REMOVED_FIELD=Error
+ENUM_ELEMENT_TYPE_REMOVED_METHOD=Error
+ENUM_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+FIELD_ELEMENT_TYPE_ADDED_VALUE=Error
+FIELD_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+FIELD_ELEMENT_TYPE_CHANGED_FINAL_TO_NON_FINAL_STATIC_CONSTANT=Error
+FIELD_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+FIELD_ELEMENT_TYPE_CHANGED_NON_STATIC_TO_STATIC=Error
+FIELD_ELEMENT_TYPE_CHANGED_STATIC_TO_NON_STATIC=Error
+FIELD_ELEMENT_TYPE_CHANGED_TYPE=Error
+FIELD_ELEMENT_TYPE_CHANGED_VALUE=Error
+FIELD_ELEMENT_TYPE_REMOVED_TYPE_ARGUMENT=Error
+FIELD_ELEMENT_TYPE_REMOVED_VALUE=Error
+ILLEGAL_EXTEND=Warning
+ILLEGAL_IMPLEMENT=Warning
+ILLEGAL_INSTANTIATE=Warning
+ILLEGAL_OVERRIDE=Warning
+ILLEGAL_REFERENCE=Warning
+INTERFACE_ELEMENT_TYPE_ADDED_FIELD=Error
+INTERFACE_ELEMENT_TYPE_ADDED_METHOD=Error
+INTERFACE_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+INTERFACE_ELEMENT_TYPE_ADDED_SUPER_INTERFACE_WITH_METHODS=Error
+INTERFACE_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+INTERFACE_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+INTERFACE_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_FIELD=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_METHOD=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+INVALID_JAVADOC_TAG=Ignore
+INVALID_REFERENCE_IN_SYSTEM_LIBRARIES=Error
+MISSING_EE_DESCRIPTIONS=Warning
+LEAK_EXTEND=Warning
+LEAK_FIELD_DECL=Warning
+LEAK_IMPLEMENT=Warning
+LEAK_METHOD_PARAM=Warning
+LEAK_METHOD_RETURN_TYPE=Warning
+METHOD_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+METHOD_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+METHOD_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_ABSTRACT_TO_ABSTRACT=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_STATIC_TO_STATIC=Error
+METHOD_ELEMENT_TYPE_CHANGED_STATIC_TO_NON_STATIC=Error
+METHOD_ELEMENT_TYPE_CHANGED_VARARGS_TO_ARRAY=Error
+METHOD_ELEMENT_TYPE_REMOVED_ANNOTATION_DEFAULT_VALUE=Error
+METHOD_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+TYPE_PARAMETER_ELEMENT_TYPE_ADDED_CLASS_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_ADDED_INTERFACE_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_CHANGED_CLASS_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_CHANGED_INTERFACE_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_REMOVED_CLASS_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_REMOVED_INTERFACE_BOUND=Error
+UNUSED_PROBLEM_FILTERS=Ignore
+automatically_removed_unused_problem_filters=Disabled
+eclipse.preferences.version=1
+incompatible_api_component_version=Error
+incompatible_api_component_version_include_major_without_breaking_change=Disabled
+incompatible_api_component_version_include_minor_without_api_change=Disabled
+invalid_since_tag_version=Error
+malformed_since_tag=Error
+missing_since_tag=Error
+report_api_breakage_when_major_version_incremented=Disabled
+report_resolution_errors_api_component=Warning
diff --git a/plugins/org.eclipse.emf.cdo.evolution.editor/.settings/org.eclipse.pde.prefs b/plugins/org.eclipse.emf.cdo.evolution.editor/.settings/org.eclipse.pde.prefs
new file mode 100644
index 0000000000..fe01bb701d
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution.editor/.settings/org.eclipse.pde.prefs
@@ -0,0 +1,31 @@
+#Thu Feb 04 09:44:24 CET 2010
+compilers.f.unresolved-features=1
+compilers.f.unresolved-plugins=1
+compilers.incompatible-environment=1
+compilers.p.build=1
+compilers.p.build.bin.includes=1
+compilers.p.build.java.compliance=1
+compilers.p.build.missing.output=2
+compilers.p.build.output.library=1
+compilers.p.build.source.library=1
+compilers.p.build.src.includes=1
+compilers.p.deprecated=2
+compilers.p.discouraged-class=1
+compilers.p.internal=1
+compilers.p.missing-packages=1
+compilers.p.missing-version-export-package=1
+compilers.p.missing-version-import-package=1
+compilers.p.missing-version-require-bundle=1
+compilers.p.no-required-att=0
+compilers.p.not-externalized-att=2
+compilers.p.unknown-attribute=1
+compilers.p.unknown-class=1
+compilers.p.unknown-element=1
+compilers.p.unknown-identifier=1
+compilers.p.unknown-resource=1
+compilers.p.unresolved-ex-points=0
+compilers.p.unresolved-import=0
+compilers.s.create-docs=false
+compilers.s.doc-folder=doc
+compilers.s.open-tags=1
+eclipse.preferences.version=1
diff --git a/plugins/org.eclipse.emf.cdo.evolution.editor/META-INF/MANIFEST.MF b/plugins/org.eclipse.emf.cdo.evolution.editor/META-INF/MANIFEST.MF
new file mode 100644
index 0000000000..8d4420235f
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution.editor/META-INF/MANIFEST.MF
@@ -0,0 +1,24 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.emf.cdo.evolution.editor;singleton:=true
+Automatic-Module-Name: org.eclipse.emf.cdo.evolution.editor
+Bundle-Version: 1.0.0.qualifier
+Bundle-ClassPath: .
+Bundle-Activator: org.eclipse.emf.cdo.evolution.presentation.EvolutionEditorPlugin$Implementation
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Export-Package: org.eclipse.emf.cdo.evolution.presentation;version="1.0.0",
+ org.eclipse.emf.cdo.evolution.presentation.quickfix;version="1.0.0"
+Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.5.0,4.0.0)";visibility:=reexport,
+ org.eclipse.core.resources;bundle-version="[3.5.0,4.0.0)";visibility:=reexport,
+ org.eclipse.emf.cdo.evolution.edit;bundle-version="[1.0.0,2.0.0)";visibility:=reexport,
+ org.eclipse.emf.ecore.xmi;bundle-version="[2.5.0,3.0.0)";visibility:=reexport,
+ org.eclipse.emf.edit.ui;bundle-version="[2.5.0,3.0.0)";visibility:=reexport,
+ org.eclipse.jface.text;bundle-version="[3.5.0,4.0.0)",
+ org.eclipse.ui.ide;bundle-version="[3.5.0,4.0.0)";visibility:=reexport,
+ org.eclipse.emf.ecore.edit;bundle-version="[2.5.0,3.0.0)";visibility:=reexport,
+ org.eclipse.net4j.ui.shared;bundle-version="[4.0.0,5.0.0)",
+ org.eclipse.emf.ecore.editor;bundle-version="[2.5.0,3.0.0)"
+Bundle-ActivationPolicy: lazy
diff --git a/plugins/org.eclipse.emf.cdo.evolution.editor/build.properties b/plugins/org.eclipse.emf.cdo.evolution.editor/build.properties
new file mode 100644
index 0000000000..5fb07711cf
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution.editor/build.properties
@@ -0,0 +1,10 @@
+#
+
+bin.includes = .,\
+ icons/,\
+ META-INF/,\
+ plugin.xml,\
+ plugin.properties
+jars.compile.order = .
+source.. = src/
+output.. = bin
diff --git a/plugins/org.eclipse.emf.cdo.evolution.editor/icons/full/obj16/EvolutionModelFile.gif b/plugins/org.eclipse.emf.cdo.evolution.editor/icons/full/obj16/EvolutionModelFile.gif
new file mode 100644
index 0000000000..09bd7b3a29
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution.editor/icons/full/obj16/EvolutionModelFile.gif
Binary files differ
diff --git a/plugins/org.eclipse.emf.cdo.evolution.editor/icons/full/wizban/NewEvolution.gif b/plugins/org.eclipse.emf.cdo.evolution.editor/icons/full/wizban/NewEvolution.gif
new file mode 100644
index 0000000000..e3b9c14a6a
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution.editor/icons/full/wizban/NewEvolution.gif
Binary files differ
diff --git a/plugins/org.eclipse.emf.cdo.evolution.editor/icons/full/wizban/quick_fix.png b/plugins/org.eclipse.emf.cdo.evolution.editor/icons/full/wizban/quick_fix.png
new file mode 100644
index 0000000000..87ef6f5b03
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution.editor/icons/full/wizban/quick_fix.png
Binary files differ
diff --git a/plugins/org.eclipse.emf.cdo.evolution.editor/icons/full/wizban/quick_fix@2x.png b/plugins/org.eclipse.emf.cdo.evolution.editor/icons/full/wizban/quick_fix@2x.png
new file mode 100644
index 0000000000..1ce492806a
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution.editor/icons/full/wizban/quick_fix@2x.png
Binary files differ
diff --git a/plugins/org.eclipse.emf.cdo.evolution.editor/plugin.properties b/plugins/org.eclipse.emf.cdo.evolution.editor/plugin.properties
new file mode 100644
index 0000000000..bf422441ea
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution.editor/plugin.properties
@@ -0,0 +1,58 @@
+#
+
+pluginName = CDO Model Repository Evolution Editor
+providerName = Eclipse Modeling Project
+
+_UI_EvolutionEditor_menu = &Evolution Editor
+
+_UI_CreateChild_menu_item = &New Child
+_UI_CreateSibling_menu_item = N&ew Sibling
+
+_UI_ShowPropertiesView_menu_item = Show &Properties View
+_UI_RefreshViewer_menu_item = &Refresh
+
+_UI_SelectionPage_label = Selection
+
+_UI_NoObjectSelected = Selected Nothing
+_UI_SingleObjectSelected = Selected Object: {0}
+_UI_MultiObjectSelected = Selected {0} Objects
+
+_UI_OpenEditorError_label = Open Editor
+
+_UI_Wizard_category = Example EMF Model Creation Wizards
+
+_UI_CreateModelError_message = Problems encountered in file "{0}"
+
+_UI_EvolutionModelWizard_label = Evolution Model
+_UI_EvolutionModelWizard_description = Create a new Evolution model
+
+_UI_EvolutionEditor_label = Evolution Model Editor
+
+_UI_EvolutionEditorFilenameDefaultBase = My
+_UI_EvolutionEditorFilenameExtensions = evolution
+
+_UI_Wizard_label = New
+
+_WARN_FilenameExtension = The file name must end in ''.{0}''
+_WARN_FilenameExtensions = The file name must have one of the following extensions: {0}
+
+_UI_ModelObject = &Model Object
+_UI_XMLEncoding = &XML Encoding
+_UI_XMLEncodingChoices = UTF-8 ASCII UTF-16 UTF-16BE UTF-16LE ISO-8859-1
+_UI_Wizard_initial_object_description = Select a model object to create
+
+_UI_FileConflict_label = File Conflict
+_WARN_FileConflict = There are unsaved changes that conflict with changes made outside the editor. Do you wish to discard this editor's changes?
+
+_UI_ValidatingPhase_message = Validating phase {0}
+
+_QF_SelectModelsFromWorkspace = Select one or more models from the workspace
+_QF_SelectModelFromWorkspace = Select a model from the workspace
+_QF_PackageMissing = Add the model ''{0}'' to the evolution
+_QF_SetVersionIntoNamespace = Set the upcoming version v{0} into the namespace URI
+_QF_DisableUniqueNamespaceEnforcement = Disable enforcement of unique namespace URIs in this evolution
+_QF_AssignID = Assign a new ID
+_QF_RememberID = Remember the old ID and assign a new ID
+_QF_ReplaceID = Replace the existing ID with a new ID
+_QF_SpecifyFeaturePath = Specify the feature path for the {0} feature ''{1}''
+_QF_CreateRelease = Create the v{0} release
diff --git a/plugins/org.eclipse.emf.cdo.evolution.editor/plugin.xml b/plugins/org.eclipse.emf.cdo.evolution.editor/plugin.xml
new file mode 100644
index 0000000000..a1def4025d
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution.editor/plugin.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+
+<!--
+-->
+
+<plugin>
+
+ <extension point="org.eclipse.net4j.util.factories">
+ <factory
+ productGroup="org.eclipse.emf.cdo.evolution.diagnosticResolutionGenerators"
+ type="default"
+ class="org.eclipse.emf.cdo.evolution.presentation.quickfix.DefaultDiagnosticResolutionGenerator$Factory"/>
+ </extension>
+
+ <extension point="org.eclipse.ui.newWizards">
+ <!-- @generated evolution -->
+ <category
+ id="org.eclipse.emf.ecore.Wizard.category.ID"
+ name="%_UI_Wizard_category"/>
+ <wizard
+ id="org.eclipse.emf.cdo.evolution.presentation.EvolutionModelWizardID"
+ name="%_UI_EvolutionModelWizard_label"
+ class="org.eclipse.emf.cdo.evolution.presentation.EvolutionModelWizard"
+ category="org.eclipse.emf.ecore.Wizard.category.ID"
+ icon="icons/full/obj16/EvolutionModelFile.gif">
+ <description>%_UI_EvolutionModelWizard_description</description>
+ <selection class="org.eclipse.core.resources.IResource"/>
+ </wizard>
+ </extension>
+
+ <extension point="org.eclipse.ui.editors">
+ <!-- @generated evolution -->
+ <editor
+ id="org.eclipse.emf.cdo.evolution.presentation.EvolutionEditorID"
+ name="%_UI_EvolutionEditor_label"
+ icon="icons/full/obj16/EvolutionModelFile.gif"
+ extensions="evolution"
+ class="org.eclipse.emf.cdo.evolution.presentation.EvolutionEditor"
+ contributorClass="org.eclipse.emf.cdo.evolution.presentation.EvolutionActionBarContributor">
+ </editor>
+ </extension>
+
+</plugin>
diff --git a/plugins/org.eclipse.emf.cdo.evolution.editor/pom.xml b/plugins/org.eclipse.emf.cdo.evolution.editor/pom.xml
new file mode 100644
index 0000000000..3d18aec667
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution.editor/pom.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright (c) 2017 Eike Stepper (Loehne, Germany) and others.
+ All rights reserved. This program and the accompanying materials
+ are made available under the terms of the Eclipse Public License v1.0
+ which accompanies this distribution, and is available at
+ http://www.eclipse.org/legal/epl-v10.html
+
+ Contributors:
+ Eike Stepper - initial API and implementation
+-->
+<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>
+ <groupId>org.eclipse.emf.cdo</groupId>
+ <artifactId>org.eclipse.emf.cdo.plugins</artifactId>
+ <version>4.7.0-SNAPSHOT</version>
+ <relativePath>../../releng/org.eclipse.emf.cdo.releng.parent/plugins</relativePath>
+ </parent>
+
+ <groupId>org.eclipse.emf.cdo</groupId>
+ <artifactId>org.eclipse.emf.cdo.evolution.editor</artifactId>
+ <version>1.0.0-SNAPSHOT</version>
+ <packaging>eclipse-plugin</packaging>
+
+</project>
diff --git a/plugins/org.eclipse.emf.cdo.evolution.editor/src/org/eclipse/emf/cdo/evolution/presentation/EvolutionActionBarContributor.java b/plugins/org.eclipse.emf.cdo.evolution.editor/src/org/eclipse/emf/cdo/evolution/presentation/EvolutionActionBarContributor.java
new file mode 100644
index 0000000000..bb586373cb
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution.editor/src/org/eclipse/emf/cdo/evolution/presentation/EvolutionActionBarContributor.java
@@ -0,0 +1,812 @@
+/**
+ */
+package org.eclipse.emf.cdo.evolution.presentation;
+
+import org.eclipse.emf.cdo.evolution.util.ElementHandler;
+import org.eclipse.emf.cdo.evolution.util.ElementRunnable;
+import org.eclipse.emf.cdo.evolution.util.IDAnnotation;
+
+import org.eclipse.emf.common.ui.action.ViewerFilterAction;
+import org.eclipse.emf.common.ui.viewer.IViewerProvider;
+import org.eclipse.emf.ecore.EAnnotation;
+import org.eclipse.emf.ecore.EGenericType;
+import org.eclipse.emf.ecore.EModelElement;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.ETypeParameter;
+import org.eclipse.emf.ecore.EcorePackage;
+import org.eclipse.emf.ecore.presentation.EcoreEditorPlugin;
+import org.eclipse.emf.edit.command.ChangeCommand;
+import org.eclipse.emf.edit.command.CommandParameter;
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.emf.edit.domain.IEditingDomainProvider;
+import org.eclipse.emf.edit.ui.action.CollapseAllAction;
+import org.eclipse.emf.edit.ui.action.ControlAction;
+import org.eclipse.emf.edit.ui.action.CreateChildAction;
+import org.eclipse.emf.edit.ui.action.CreateSiblingAction;
+import org.eclipse.emf.edit.ui.action.EditingDomainActionBarContributor;
+import org.eclipse.emf.edit.ui.action.FindAction;
+import org.eclipse.emf.edit.ui.action.LoadResourceAction;
+import org.eclipse.emf.edit.ui.provider.DiagnosticDecorator;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.ActionContributionItem;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.action.IContributionItem;
+import org.eclipse.jface.action.IContributionManager;
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.action.SubContributionItem;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.PartInitException;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.LinkedHashSet;
+import java.util.Set;
+
+/**
+ * This is the action bar contributor for the Evolution model editor.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class EvolutionActionBarContributor extends EditingDomainActionBarContributor implements ISelectionChangedListener
+{
+ /**
+ * This keeps track of the active editor.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected IEditorPart activeEditorPart;
+
+ /**
+ * This keeps track of the current selection provider.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected ISelectionProvider selectionProvider;
+
+ /**
+ * This action opens the Properties view.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected IAction showPropertiesViewAction = new Action(EvolutionEditorPlugin.INSTANCE.getString("_UI_ShowPropertiesView_menu_item"))
+ {
+ @Override
+ public void run()
+ {
+ try
+ {
+ getPage().showView("org.eclipse.ui.views.PropertySheet");
+ }
+ catch (PartInitException exception)
+ {
+ EvolutionEditorPlugin.INSTANCE.log(exception);
+ }
+ }
+ };
+
+ /**
+ * This action refreshes the viewer of the current editor if the editor
+ * implements {@link org.eclipse.emf.common.ui.viewer.IViewerProvider}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected IAction refreshViewerAction = new Action(EvolutionEditorPlugin.INSTANCE.getString("_UI_RefreshViewer_menu_item"))
+ {
+ @Override
+ public boolean isEnabled()
+ {
+ return activeEditorPart instanceof IViewerProvider;
+ }
+
+ @Override
+ public void run()
+ {
+ if (activeEditorPart instanceof IViewerProvider)
+ {
+ Viewer viewer = ((IViewerProvider)activeEditorPart).getViewer();
+ if (viewer != null)
+ {
+ viewer.refresh();
+ }
+ }
+ }
+ };
+
+ protected IAction assignIDsAction = new IDAction("Assign IDs")
+ {
+ @Override
+ protected void handleID(EModelElement modelElement)
+ {
+ IDAnnotation.ensureValue(modelElement);
+ }
+ };
+
+ protected IAction removeIDsAction = new IDAction("Remove IDs")
+ {
+ @Override
+ protected void handleID(EModelElement modelElement)
+ {
+ IDAnnotation.removeFrom(modelElement);
+ }
+ };
+
+ /**
+ * This will contain one {@link org.eclipse.emf.edit.ui.action.CreateChildAction} corresponding to each descriptor
+ * generated for the current selection by the item provider.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected Collection<IAction> createChildActions;
+
+ /**
+ * This is the menu manager into which menu contribution items should be added for CreateChild actions.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected IMenuManager createChildMenuManager;
+
+ /**
+ * This will contain one {@link org.eclipse.emf.edit.ui.action.CreateSiblingAction} corresponding to each descriptor
+ * generated for the current selection by the item provider.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected Collection<IAction> createSiblingActions;
+
+ /**
+ * This is the menu manager into which menu contribution items should be added for CreateSibling actions.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected IMenuManager createSiblingMenuManager;
+
+ protected SelectionChangedEvent lastSelectionChangedEvent;
+
+ protected ViewerFilterAction showGenericsAction = new ViewerFilterAction(EcoreEditorPlugin.INSTANCE.getString("_UI_ShowGenerics_menu_item"),
+ IAction.AS_CHECK_BOX)
+ {
+ @Override
+ protected void refreshViewers()
+ {
+ if (activeEditorPart instanceof EvolutionEditor)
+ {
+ ((EvolutionEditor)activeEditorPart).ecoreItemProviderAdapterFactory.setShowGenerics(isChecked());
+ }
+
+ super.refreshViewers();
+
+ if (lastSelectionChangedEvent != null && activeEditorPart instanceof EvolutionEditor)
+ {
+ selectionChanged(lastSelectionChangedEvent);
+ }
+ }
+
+ @Override
+ public boolean select(Viewer viewer, Object parentElement, Object element)
+ {
+ return isChecked() || !(element instanceof ETypeParameter || element instanceof EGenericType);
+ }
+ };
+
+ /**
+ * This creates an instance of the contributor.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ public EvolutionActionBarContributor()
+ {
+ super(ADDITIONS_LAST_STYLE);
+ loadResourceAction = new LoadResourceAction();
+ // validateAction = new ValidateAction();
+ liveValidationAction = new DiagnosticDecorator.LiveValidator.LiveValidationAction(EvolutionEditorPlugin.getPlugin().getDialogSettings());
+ controlAction = new ControlAction();
+ findAction = FindAction.create();
+ collapseAllAction = new CollapseAllAction();
+
+ showGenericsAction.setChecked(Boolean.parseBoolean(EcoreEditorPlugin.getPlugin().getDialogSettings().get("showGenericsAction")));
+ }
+
+ public void showGenerics(boolean isChecked)
+ {
+ if (showGenericsAction != null)
+ {
+ showGenericsAction.setChecked(isChecked);
+ }
+ }
+
+ @Override
+ public void dispose()
+ {
+ EcoreEditorPlugin.getPlugin().getDialogSettings().put("showGenericsAction", Boolean.toString(showGenericsAction.isChecked()));
+
+ super.dispose();
+ }
+
+ /**
+ * This adds Separators for editor additions to the tool bar.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ @Override
+ public void contributeToToolBar(IToolBarManager toolBarManager)
+ {
+ super.contributeToToolBar(toolBarManager);
+ toolBarManager.add(new Separator("evolution-settings"));
+ toolBarManager.add(new Separator("evolution-additions"));
+ toolBarManager.add(assignIDsAction);
+ toolBarManager.add(removeIDsAction);
+ }
+
+ /**
+ * This adds to the menu bar a menu and some separators for editor additions,
+ * as well as the sub-menus for object creation items.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ @Override
+ public void contributeToMenu(IMenuManager menuManager)
+ {
+ super.contributeToMenu(menuManager);
+
+ IMenuManager submenuManager = new MenuManager(EvolutionEditorPlugin.INSTANCE.getString("_UI_EvolutionEditor_menu"), "org.eclipse.emf.cdo.evolutionMenuID");
+ menuManager.insertAfter("additions", submenuManager);
+ submenuManager.add(new Separator("settings"));
+ submenuManager.add(new Separator("actions"));
+ submenuManager.add(new Separator("additions"));
+ submenuManager.add(new Separator("additions-end"));
+
+ // Prepare for CreateChild item addition or removal.
+ //
+ createChildMenuManager = new MenuManager(EvolutionEditorPlugin.INSTANCE.getString("_UI_CreateChild_menu_item"));
+ submenuManager.insertBefore("additions", createChildMenuManager);
+
+ // Prepare for CreateSibling item addition or removal.
+ //
+ createSiblingMenuManager = new MenuManager(EvolutionEditorPlugin.INSTANCE.getString("_UI_CreateSibling_menu_item"));
+ submenuManager.insertBefore("additions", createSiblingMenuManager);
+
+ // Force an update because Eclipse hides empty menus now.
+ //
+ submenuManager.addMenuListener(new IMenuListener()
+ {
+ public void menuAboutToShow(IMenuManager menuManager)
+ {
+ menuManager.updateAll(true);
+ }
+ });
+
+ addGlobalActions(submenuManager);
+ submenuManager.insertBefore("additions-end", showGenericsAction);
+ }
+
+ /**
+ * When the active editor changes, this remembers the change and registers with it as a selection provider.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setActiveEditorGen(IEditorPart part)
+ {
+ super.setActiveEditor(part);
+ activeEditorPart = part;
+
+ // Switch to the new selection provider.
+ //
+ if (selectionProvider != null)
+ {
+ selectionProvider.removeSelectionChangedListener(this);
+ }
+ if (part == null)
+ {
+ selectionProvider = null;
+ }
+ else
+ {
+ selectionProvider = part.getSite().getSelectionProvider();
+ selectionProvider.addSelectionChangedListener(this);
+
+ // Fake a selection changed event to update the menus.
+ //
+ if (selectionProvider.getSelection() != null)
+ {
+ selectionChanged(new SelectionChangedEvent(selectionProvider, selectionProvider.getSelection()));
+ }
+ }
+ }
+
+ /**
+ * When the active editor changes, this remembers the change and registers with it as a selection provider.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ @Override
+ public void setActiveEditor(IEditorPart part)
+ {
+ setActiveEditorGen(part);
+
+ if (part instanceof EvolutionEditor)
+ {
+ showGenericsAction.addViewer(((EvolutionEditor)part).getViewer());
+ showGenericsAction.setEnabled(true);
+ }
+ else
+ {
+ showGenericsAction.setEnabled(false);
+ }
+ }
+
+ /**
+ * This implements {@link org.eclipse.jface.viewers.ISelectionChangedListener},
+ * handling {@link org.eclipse.jface.viewers.SelectionChangedEvent}s by querying for the children and siblings
+ * that can be added to the selected object and updating the menus accordingly.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void selectionChanged(SelectionChangedEvent event)
+ {
+ // Remove any menu items for old selection.
+ //
+ if (createChildMenuManager != null)
+ {
+ depopulateManager(createChildMenuManager, createChildActions);
+ }
+ if (createSiblingMenuManager != null)
+ {
+ depopulateManager(createSiblingMenuManager, createSiblingActions);
+ }
+
+ // Query the new selection for appropriate new child/sibling descriptors
+ //
+ Collection<?> newChildDescriptors = null;
+ Collection<?> newSiblingDescriptors = null;
+
+ ISelection selection = event.getSelection();
+ if (selection instanceof IStructuredSelection && ((IStructuredSelection)selection).size() == 1)
+ {
+ Object object = ((IStructuredSelection)selection).getFirstElement();
+
+ EditingDomain domain = ((IEditingDomainProvider)activeEditorPart).getEditingDomain();
+
+ newChildDescriptors = domain.getNewChildDescriptors(object, null);
+ newSiblingDescriptors = domain.getNewChildDescriptors(null, object);
+ }
+
+ // Generate actions for selection; populate and redraw the menus.
+ //
+ createChildActions = generateCreateChildActions(newChildDescriptors, selection);
+ createSiblingActions = generateCreateSiblingActions(newSiblingDescriptors, selection);
+
+ if (createChildMenuManager != null)
+ {
+ populateManager(createChildMenuManager, createChildActions, null);
+ createChildMenuManager.update(true);
+ }
+ if (createSiblingMenuManager != null)
+ {
+ populateManager(createSiblingMenuManager, createSiblingActions, null);
+ createSiblingMenuManager.update(true);
+ }
+ }
+
+ /**
+ * This generates a {@link org.eclipse.emf.edit.ui.action.CreateChildAction} for each object in <code>descriptors</code>,
+ * and returns the collection of these actions.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ protected Collection<IAction> generateCreateChildActions(Collection<?> descriptors, ISelection selection)
+ {
+ Collection<IAction> actions = new ArrayList<IAction>();
+ if (descriptors != null)
+ {
+ for (Object descriptor : descriptors)
+ {
+ if (!showGenericsAction.isChecked() && descriptor instanceof CommandParameter)
+ {
+ Object feature = ((CommandParameter)descriptor).getFeature();
+ if (isGenericFeature(feature))
+ {
+ continue;
+ }
+ }
+ actions.add(new EcoreCreateChildAction(activeEditorPart, selection, descriptor));
+ }
+ }
+ return actions;
+ }
+
+ /**
+ * This generates a {@link org.eclipse.emf.edit.ui.action.CreateSiblingAction} for each object in <code>descriptors</code>,
+ * and returns the collection of these actions.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ protected Collection<IAction> generateCreateSiblingActions(Collection<?> descriptors, ISelection selection)
+ {
+ Collection<IAction> actions = new ArrayList<IAction>();
+ if (descriptors != null)
+ {
+ for (Object descriptor : descriptors)
+ {
+ if (!showGenericsAction.isChecked() && descriptor instanceof CommandParameter)
+ {
+ Object feature = ((CommandParameter)descriptor).getFeature();
+ if (isGenericFeature(feature))
+ {
+ continue;
+ }
+ }
+ actions.add(new EcoreCreateSiblingAction(activeEditorPart, selection, descriptor));
+ }
+ }
+ return actions;
+ }
+
+ protected boolean isGenericFeature(Object feature)
+ {
+ return feature == EcorePackage.Literals.ECLASS__EGENERIC_SUPER_TYPES || feature == EcorePackage.Literals.ECLASSIFIER__ETYPE_PARAMETERS
+ || feature == EcorePackage.Literals.EOPERATION__EGENERIC_EXCEPTIONS || feature == EcorePackage.Literals.EOPERATION__ETYPE_PARAMETERS
+ || feature == EcorePackage.Literals.ETYPED_ELEMENT__EGENERIC_TYPE;
+ }
+
+ /**
+ * This populates the specified <code>manager</code> with {@link org.eclipse.jface.action.ActionContributionItem}s
+ * based on the {@link org.eclipse.jface.action.IAction}s contained in the <code>actions</code> collection,
+ * by inserting them before the specified contribution item <code>contributionID</code>.
+ * If <code>contributionID</code> is <code>null</code>, they are simply added.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ protected void populateManager(IContributionManager manager, Collection<? extends IAction> actions, String contributionID)
+ {
+ if (actions != null)
+ {
+ // Look for actions that create EAnnotations.
+ //
+ Set<IAction> ignoredActions = new HashSet<IAction>();
+ Set<IAction> annotationActions = new LinkedHashSet<IAction>();
+ for (IAction action : actions)
+ {
+ if (action instanceof EObjectProvider)
+ {
+ EObjectProvider eObjectProvider = (EObjectProvider)action;
+ EObject eObject = eObjectProvider.getEObject();
+ if (eObject instanceof EAnnotation)
+ {
+ annotationActions.add(action);
+ ignoredActions.add(action);
+ }
+ }
+ }
+
+ // If there is more than one action that creates an annotation...
+ //
+ if (annotationActions.size() > 1)
+ {
+ // Create a menu manager to group them.
+ // This assumes the first action is one for the null source.
+ //
+ IAction action = annotationActions.iterator().next();
+ String actionText = action.getText();
+ MenuManager annotationMenuManager = new MenuManager(actionText, action.getImageDescriptor(), "annotations");
+
+ // Add that menu manager instead of the individual actions.
+ if (contributionID != null)
+ {
+ manager.insertBefore(contributionID, annotationMenuManager);
+ }
+ else
+ {
+ manager.add(annotationMenuManager);
+ }
+
+ // Add an item for each annotation action.
+ //
+ for (IAction annotationAction : annotationActions)
+ {
+ annotationMenuManager.add(annotationAction);
+ String source = ((EAnnotation)((EObjectProvider)annotationAction).getEObject()).getSource();
+ if (source != null)
+ {
+ // Set the label to include the source.
+ //
+ annotationAction.setText(actionText + " - " + source);
+ }
+ }
+ }
+ else
+ {
+ ignoredActions.clear();
+ }
+
+ for (IAction action : actions)
+ {
+ if (!ignoredActions.contains(action))
+ {
+ if (contributionID != null)
+ {
+ manager.insertBefore(contributionID, action);
+ }
+ else
+ {
+ manager.add(action);
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * This removes from the specified <code>manager</code> all {@link org.eclipse.jface.action.ActionContributionItem}s
+ * based on the {@link org.eclipse.jface.action.IAction}s contained in the <code>actions</code> collection.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void depopulateManager(IContributionManager manager, Collection<? extends IAction> actions)
+ {
+ if (actions != null)
+ {
+ IContributionItem[] items = manager.getItems();
+ for (int i = 0; i < items.length; i++)
+ {
+ // Look into SubContributionItems
+ //
+ IContributionItem contributionItem = items[i];
+ while (contributionItem instanceof SubContributionItem)
+ {
+ contributionItem = ((SubContributionItem)contributionItem).getInnerItem();
+ }
+
+ // Delete the ActionContributionItems with matching action.
+ //
+ if (contributionItem instanceof ActionContributionItem)
+ {
+ IAction action = ((ActionContributionItem)contributionItem).getAction();
+ if (actions.contains(action))
+ {
+ manager.remove(contributionItem);
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * This populates the pop-up menu before it appears.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void menuAboutToShow(IMenuManager menuManager)
+ {
+ super.menuAboutToShow(menuManager);
+ MenuManager submenuManager = null;
+
+ submenuManager = new MenuManager(EvolutionEditorPlugin.INSTANCE.getString("_UI_CreateChild_menu_item"));
+ populateManager(submenuManager, createChildActions, null);
+ menuManager.insertBefore("edit", submenuManager);
+
+ submenuManager = new MenuManager(EvolutionEditorPlugin.INSTANCE.getString("_UI_CreateSibling_menu_item"));
+ populateManager(submenuManager, createSiblingActions, null);
+ menuManager.insertBefore("edit", submenuManager);
+ }
+
+ /**
+ * This inserts global actions before the "additions-end" separator.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected void addGlobalActions(IMenuManager menuManager)
+ {
+ menuManager.insertAfter("additions-end", new Separator("ui-actions"));
+ menuManager.insertAfter("ui-actions", showPropertiesViewAction);
+
+ refreshViewerAction.setEnabled(refreshViewerAction.isEnabled());
+ menuManager.insertAfter("ui-actions", refreshViewerAction);
+
+ super.addGlobalActions(menuManager);
+ }
+
+ /**
+ * This ensures that a delete action will clean up all references to deleted objects.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected boolean removeAllReferencesOnDelete()
+ {
+ return true;
+ }
+
+ /**
+ * An interface implemented by {@link EcoreCreateChildAction} and {@link EcoreCreateSiblingAction} to provide access to the data in the descriptor.
+ */
+ public interface EObjectProvider
+ {
+ public EObject getEObject();
+ }
+
+ /**
+ * A create child action subclass that provides access to the {@link #descriptor} and specializes {@link #run()} to show the properties view.
+ */
+ public class EcoreCreateChildAction extends CreateChildAction implements EObjectProvider
+ {
+ public EcoreCreateChildAction(IWorkbenchPart workbenchPart, ISelection selection, Object descriptor)
+ {
+ super(workbenchPart, selection, descriptor);
+ }
+
+ public EObject getEObject()
+ {
+ if (descriptor instanceof CommandParameter)
+ {
+ CommandParameter commandParameter = (CommandParameter)descriptor;
+ return commandParameter.getEValue();
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ @Override
+ public void run()
+ {
+ super.run();
+
+ // This is dispatched twice because the command stack listener dispatches once and then the viewer selection is
+ // also dispatches once,
+ // and we need to delay until the selection is established.
+ //
+ final Display display = getPage().getWorkbenchWindow().getShell().getDisplay();
+ display.asyncExec(new Runnable()
+ {
+ public void run()
+ {
+ display.asyncExec(new Runnable()
+ {
+ public void run()
+ {
+ showPropertiesViewAction.run();
+ }
+ });
+ }
+ });
+ }
+ }
+
+ /**
+ * A create sibling action subclass that provides access to the {@link #descriptor} and specializes {@link #run()} to show the properties view.
+ */
+ public class EcoreCreateSiblingAction extends CreateSiblingAction implements EObjectProvider
+ {
+ public EcoreCreateSiblingAction(IWorkbenchPart workbenchPart, ISelection selection, Object descriptor)
+ {
+ super(workbenchPart, selection, descriptor);
+ }
+
+ public EObject getEObject()
+ {
+ if (descriptor instanceof CommandParameter)
+ {
+ CommandParameter commandParameter = (CommandParameter)descriptor;
+ return commandParameter.getEValue();
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ @Override
+ public void run()
+ {
+ super.run();
+
+ // This is dispatched twice because the command stack listener dispatches once and then the viewer selection is
+ // also dispatches once,
+ // and we need to delay until the selection is established.
+ //
+ final Display display = getPage().getWorkbenchWindow().getShell().getDisplay();
+ display.asyncExec(new Runnable()
+ {
+ public void run()
+ {
+ display.asyncExec(new Runnable()
+ {
+ public void run()
+ {
+ showPropertiesViewAction.run();
+ }
+ });
+ }
+ });
+ }
+ }
+
+ /**
+ * @author Eike Stepper
+ */
+ private abstract class IDAction extends Action
+ {
+ public IDAction(String text)
+ {
+ super(text);
+ }
+
+ @Override
+ public void run()
+ {
+ if (selectionProvider != null)
+ {
+ ISelection selection = selectionProvider.getSelection();
+ if (selection instanceof IStructuredSelection)
+ {
+ IStructuredSelection ssel = (IStructuredSelection)selection;
+ final Object element = ssel.getFirstElement();
+ if (element instanceof EModelElement)
+ {
+ final EModelElement rootElement = (EModelElement)element;
+
+ EditingDomain domain = ((IEditingDomainProvider)activeEditorPart).getEditingDomain();
+ ChangeCommand command = new ChangeCommand(rootElement)
+ {
+ @Override
+ protected void doExecute()
+ {
+ ElementHandler.execute(rootElement, new ElementRunnable()
+ {
+ public void run(EModelElement modelElement)
+ {
+ handleID(modelElement);
+ }
+ });
+ }
+ };
+
+ domain.getCommandStack().execute(command);
+ }
+ }
+ }
+ }
+
+ protected abstract void handleID(EModelElement modelElement);
+ }
+
+}
diff --git a/plugins/org.eclipse.emf.cdo.evolution.editor/src/org/eclipse/emf/cdo/evolution/presentation/EvolutionEditor.java b/plugins/org.eclipse.emf.cdo.evolution.editor/src/org/eclipse/emf/cdo/evolution/presentation/EvolutionEditor.java
new file mode 100644
index 0000000000..bff82ec24b
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution.editor/src/org/eclipse/emf/cdo/evolution/presentation/EvolutionEditor.java
@@ -0,0 +1,3024 @@
+/**
+ */
+package org.eclipse.emf.cdo.evolution.presentation;
+
+import org.eclipse.emf.cdo.evolution.Change;
+import org.eclipse.emf.cdo.evolution.Evolution;
+import org.eclipse.emf.cdo.evolution.EvolutionPackage;
+import org.eclipse.emf.cdo.evolution.Release;
+import org.eclipse.emf.cdo.evolution.impl.EvolutionImpl;
+import org.eclipse.emf.cdo.evolution.presentation.quickfix.DiagnosticResolution;
+import org.eclipse.emf.cdo.evolution.presentation.quickfix.QuickFixWizard;
+import org.eclipse.emf.cdo.evolution.provider.EvolutionItemProviderAdapterFactory;
+import org.eclipse.emf.cdo.evolution.util.DiagnosticID;
+import org.eclipse.emf.cdo.evolution.util.ElementHandler;
+import org.eclipse.emf.cdo.evolution.util.ValidationContext;
+import org.eclipse.emf.cdo.evolution.util.ValidationPhase;
+
+import org.eclipse.net4j.ui.shared.SharedIcons;
+import org.eclipse.net4j.util.ReflectUtil;
+import org.eclipse.net4j.util.StringUtil;
+import org.eclipse.net4j.util.WrappedException;
+
+import org.eclipse.emf.common.command.AbstractCommand;
+import org.eclipse.emf.common.command.BasicCommandStack;
+import org.eclipse.emf.common.command.Command;
+import org.eclipse.emf.common.command.CommandStack;
+import org.eclipse.emf.common.command.CommandStackListener;
+import org.eclipse.emf.common.command.UnexecutableCommand;
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.ui.ImageURIRegistry;
+import org.eclipse.emf.common.ui.MarkerHelper;
+import org.eclipse.emf.common.ui.editor.ProblemEditorPart;
+import org.eclipse.emf.common.ui.viewer.ColumnViewerInformationControlToolTipSupport;
+import org.eclipse.emf.common.ui.viewer.IViewerProvider;
+import org.eclipse.emf.common.util.BasicDiagnostic;
+import org.eclipse.emf.common.util.Diagnostic;
+import org.eclipse.emf.common.util.DiagnosticChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EGenericType;
+import org.eclipse.emf.ecore.EModelElement;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.ETypeParameter;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.provider.EcoreItemProviderAdapterFactory;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.util.Diagnostician;
+import org.eclipse.emf.ecore.util.EContentAdapter;
+import org.eclipse.emf.ecore.util.EObjectValidator;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.emf.edit.command.CommandParameter;
+import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.emf.edit.domain.IEditingDomainProvider;
+import org.eclipse.emf.edit.provider.AdapterFactoryItemDelegator;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.ReflectiveItemProviderAdapterFactory;
+import org.eclipse.emf.edit.provider.resource.ResourceItemProviderAdapterFactory;
+import org.eclipse.emf.edit.ui.EMFEditUIPlugin;
+import org.eclipse.emf.edit.ui.action.EditingDomainActionBarContributor;
+import org.eclipse.emf.edit.ui.celleditor.AdapterFactoryTreeEditor;
+import org.eclipse.emf.edit.ui.dnd.EditingDomainViewerDropAdapter;
+import org.eclipse.emf.edit.ui.dnd.LocalTransfer;
+import org.eclipse.emf.edit.ui.dnd.ViewerDragAdapter;
+import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider;
+import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider;
+import org.eclipse.emf.edit.ui.provider.DecoratingColumLabelProvider;
+import org.eclipse.emf.edit.ui.provider.DelegatingStyledCellLabelProvider;
+import org.eclipse.emf.edit.ui.provider.DiagnosticDecorator;
+import org.eclipse.emf.edit.ui.provider.DiagnosticDecorator.DiagnosticAdapter;
+import org.eclipse.emf.edit.ui.provider.DiagnosticDecorator.LiveValidator;
+import org.eclipse.emf.edit.ui.provider.ExtendedImageRegistry;
+import org.eclipse.emf.edit.ui.provider.PropertySource;
+import org.eclipse.emf.edit.ui.provider.UnwrappingSelectionProvider;
+import org.eclipse.emf.edit.ui.util.EditUIMarkerHelper;
+import org.eclipse.emf.edit.ui.util.EditUIUtil;
+import org.eclipse.emf.edit.ui.util.FindAndReplaceTarget;
+import org.eclipse.emf.edit.ui.view.ExtendedPropertySheetPage;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceChangeEvent;
+import org.eclipse.core.resources.IResourceChangeListener;
+import org.eclipse.core.resources.IResourceDelta;
+import org.eclipse.core.resources.IResourceDeltaVisitor;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.Adapters;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.IStatusLineManager;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.dialogs.IDialogSettings;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.dialogs.ProgressMonitorDialog;
+import org.eclipse.jface.operation.IRunnableContext;
+import org.eclipse.jface.operation.IRunnableWithProgress;
+import org.eclipse.jface.text.IFindReplaceTarget;
+import org.eclipse.jface.util.LocalSelectionTransfer;
+import org.eclipse.jface.viewers.ColumnLabelProvider;
+import org.eclipse.jface.viewers.IOpenListener;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.OpenEvent;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.StructuredViewer;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.TableViewerColumn;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.wizard.IWizard;
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.jface.wizard.WizardDialog;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.CTabFolder;
+import org.eclipse.swt.custom.SashForm;
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.DropTargetEvent;
+import org.eclipse.swt.dnd.FileTransfer;
+import org.eclipse.swt.dnd.Transfer;
+import org.eclipse.swt.events.ControlAdapter;
+import org.eclipse.swt.events.ControlEvent;
+import org.eclipse.swt.events.KeyAdapter;
+import org.eclipse.swt.events.KeyEvent;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
+import org.eclipse.swt.widgets.Tree;
+import org.eclipse.ui.IActionBars;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IEditorSite;
+import org.eclipse.ui.IPartListener;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.IWorkbenchPartSite;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.actions.WorkspaceModifyOperation;
+import org.eclipse.ui.dialogs.SaveAsDialog;
+import org.eclipse.ui.ide.IGotoMarker;
+import org.eclipse.ui.part.FileEditorInput;
+import org.eclipse.ui.part.MultiPageEditorPart;
+import org.eclipse.ui.progress.IWorkbenchSiteProgressService;
+import org.eclipse.ui.views.contentoutline.ContentOutline;
+import org.eclipse.ui.views.contentoutline.ContentOutlinePage;
+import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
+import org.eclipse.ui.views.properties.IPropertyDescriptor;
+import org.eclipse.ui.views.properties.IPropertySheetEntry;
+import org.eclipse.ui.views.properties.IPropertySheetPage;
+import org.eclipse.ui.views.properties.IPropertySource;
+import org.eclipse.ui.views.properties.PropertySheet;
+import org.eclipse.ui.views.properties.PropertySheetPage;
+import org.eclipse.ui.views.properties.PropertySheetSorter;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.EventObject;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * This is an example of a Evolution model editor.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class EvolutionEditor extends MultiPageEditorPart implements IEditingDomainProvider, ISelectionProvider, IMenuListener, IViewerProvider, IGotoMarker
+{
+ /**
+ * This keeps track of the editing domain that is used to track all changes to the model.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected AdapterFactoryEditingDomain editingDomain;
+
+ /**
+ * This is the one adapter factory used for providing views of the model.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected ComposedAdapterFactory adapterFactory;
+
+ /**
+ * This is the content outline page.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected IContentOutlinePage contentOutlinePage;
+
+ /**
+ * This is a kludge...
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected IStatusLineManager contentOutlineStatusLineManager;
+
+ /**
+ * This is the content outline page's viewer.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected TreeViewer contentOutlineViewer;
+
+ /**
+ * This is the property sheet page.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected List<PropertySheetPage> propertySheetPages = new ArrayList<PropertySheetPage>();
+
+ /**
+ * This is the viewer that shadows the selection in the content outline.
+ * The parent relation must be correctly defined for this to work.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected TreeViewer selectionViewer;
+
+ /**
+ * This keeps track of the active content viewer, which may be either one of the viewers in the pages or the content outline viewer.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected Viewer currentViewer;
+
+ /**
+ * This listens to which ever viewer is active.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected ISelectionChangedListener selectionChangedListener;
+
+ /**
+ * This keeps track of all the {@link org.eclipse.jface.viewers.ISelectionChangedListener}s that are listening to this editor.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected Collection<ISelectionChangedListener> selectionChangedListeners = new ArrayList<ISelectionChangedListener>();
+
+ /**
+ * This keeps track of the selection of the editor as a whole.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected ISelection editorSelection = StructuredSelection.EMPTY;
+
+ /**
+ * The MarkerHelper is responsible for creating workspace resource markers presented
+ * in Eclipse's Problems View.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected MarkerHelper markerHelper = new EditUIMarkerHelper();
+
+ /**
+ * This listens for when the outline becomes active
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected IPartListener partListener = new IPartListener()
+ {
+ public void partActivated(IWorkbenchPart p)
+ {
+ if (p instanceof ContentOutline)
+ {
+ if (((ContentOutline)p).getCurrentPage() == contentOutlinePage)
+ {
+ getActionBarContributor().setActiveEditor(EvolutionEditor.this);
+
+ setCurrentViewer(contentOutlineViewer);
+ }
+ }
+ else if (p instanceof PropertySheet)
+ {
+ if (propertySheetPages.contains(((PropertySheet)p).getCurrentPage()))
+ {
+ getActionBarContributor().setActiveEditor(EvolutionEditor.this);
+ handleActivate();
+ }
+ }
+ else if (p == EvolutionEditor.this)
+ {
+ handleActivate();
+ }
+ }
+
+ public void partBroughtToTop(IWorkbenchPart p)
+ {
+ // Ignore.
+ }
+
+ public void partClosed(IWorkbenchPart p)
+ {
+ // Ignore.
+ }
+
+ public void partDeactivated(IWorkbenchPart p)
+ {
+ // Ignore.
+ }
+
+ public void partOpened(IWorkbenchPart p)
+ {
+ // Ignore.
+ }
+ };
+
+ /**
+ * Resources that have been removed since last activation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected Collection<Resource> removedResources = new ArrayList<Resource>();
+
+ /**
+ * Resources that have been changed since last activation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected Collection<Resource> changedResources = new ArrayList<Resource>();
+
+ /**
+ * Resources that have been saved.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected Collection<Resource> savedResources = new ArrayList<Resource>();
+
+ /**
+ * Map to store the diagnostic associated with a resource.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected Map<Resource, Diagnostic> resourceToDiagnosticMap = new LinkedHashMap<Resource, Diagnostic>();
+
+ /**
+ * Controls whether the problem indication should be updated.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected boolean updateProblemIndication = true;
+
+ /**
+ * Adapter used to update the problem indication when resources are demanded loaded.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected EContentAdapter problemIndicationAdapter = new EContentAdapter()
+ {
+ protected boolean dispatching;
+
+ @Override
+ public void notifyChanged(Notification notification)
+ {
+ if (notification.getNotifier() instanceof Resource)
+ {
+ switch (notification.getFeatureID(Resource.class))
+ {
+ case Resource.RESOURCE__IS_LOADED:
+ case Resource.RESOURCE__ERRORS:
+ case Resource.RESOURCE__WARNINGS:
+ {
+ Resource resource = (Resource)notification.getNotifier();
+ Diagnostic diagnostic = analyzeResourceProblems(resource, null);
+ if (diagnostic.getSeverity() != Diagnostic.OK)
+ {
+ resourceToDiagnosticMap.put(resource, diagnostic);
+ }
+ else
+ {
+ resourceToDiagnosticMap.remove(resource);
+ }
+ dispatchUpdateProblemIndication();
+ break;
+ }
+ }
+ }
+ else
+ {
+ super.notifyChanged(notification);
+ }
+ }
+
+ protected void dispatchUpdateProblemIndication()
+ {
+ if (updateProblemIndication && !dispatching)
+ {
+ dispatching = true;
+ getSite().getShell().getDisplay().asyncExec(new Runnable()
+ {
+ public void run()
+ {
+ dispatching = false;
+ updateProblemIndication();
+ }
+ });
+ }
+ }
+
+ @Override
+ protected void setTarget(Resource target)
+ {
+ basicSetTarget(target);
+ }
+
+ @Override
+ protected void unsetTarget(Resource target)
+ {
+ basicUnsetTarget(target);
+ resourceToDiagnosticMap.remove(target);
+ dispatchUpdateProblemIndication();
+ }
+ };
+
+ /**
+ * This listens for workspace changes.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected IResourceChangeListener resourceChangeListener = new IResourceChangeListener()
+ {
+ public void resourceChanged(IResourceChangeEvent event)
+ {
+ IResourceDelta delta = event.getDelta();
+ try
+ {
+ class ResourceDeltaVisitor implements IResourceDeltaVisitor
+ {
+ protected ResourceSet resourceSet = editingDomain.getResourceSet();
+
+ protected Collection<Resource> changedResources = new ArrayList<Resource>();
+
+ protected Collection<Resource> removedResources = new ArrayList<Resource>();
+
+ public boolean visit(final IResourceDelta delta)
+ {
+ if (delta.getResource().getType() == IResource.FILE)
+ {
+ if (delta.getKind() == IResourceDelta.REMOVED || delta.getKind() == IResourceDelta.CHANGED)
+ {
+ final Resource resource = resourceSet.getResource(URI.createPlatformResourceURI(delta.getFullPath().toString(), true), false);
+ if (resource != null)
+ {
+ if (delta.getKind() == IResourceDelta.REMOVED)
+ {
+ removedResources.add(resource);
+ }
+ else
+ {
+ if ((delta.getFlags() & IResourceDelta.MARKERS) != 0)
+ {
+ DiagnosticDecorator.Styled.DiagnosticAdapter.update(resource,
+ markerHelper.getMarkerDiagnostics(resource, (IFile)delta.getResource(), false));
+ }
+ if ((delta.getFlags() & IResourceDelta.CONTENT) != 0)
+ {
+ if (!savedResources.remove(resource))
+ {
+ changedResources.add(resource);
+ }
+ }
+ }
+ }
+ }
+ return false;
+ }
+
+ return true;
+ }
+
+ public Collection<Resource> getChangedResources()
+ {
+ return changedResources;
+ }
+
+ public Collection<Resource> getRemovedResources()
+ {
+ return removedResources;
+ }
+ }
+
+ final ResourceDeltaVisitor visitor = new ResourceDeltaVisitor();
+ delta.accept(visitor);
+
+ if (!visitor.getRemovedResources().isEmpty())
+ {
+ getSite().getShell().getDisplay().asyncExec(new Runnable()
+ {
+ public void run()
+ {
+ removedResources.addAll(visitor.getRemovedResources());
+ if (!isDirty())
+ {
+ getSite().getPage().closeEditor(EvolutionEditor.this, false);
+ }
+ }
+ });
+ }
+
+ if (!visitor.getChangedResources().isEmpty())
+ {
+ getSite().getShell().getDisplay().asyncExec(new Runnable()
+ {
+ public void run()
+ {
+ changedResources.addAll(visitor.getChangedResources());
+ if (getSite().getPage().getActiveEditor() == EvolutionEditor.this)
+ {
+ handleActivate();
+ }
+ }
+ });
+ }
+ }
+ catch (CoreException exception)
+ {
+ EvolutionEditorPlugin.INSTANCE.log(exception);
+ }
+ }
+ };
+
+ protected EcoreItemProviderAdapterFactory ecoreItemProviderAdapterFactory;
+
+ private TableViewer problemViewer;
+
+ private final Set<Object> readOnlyObjects = new HashSet<Object>();
+
+ private Evolution evolution;
+
+ private Diagnostic[] allDiagnostics;
+
+ /**
+ * Handles activation of the editor or it's associated views.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void handleActivate()
+ {
+ // Recompute the read only state.
+ //
+ if (editingDomain.getResourceToReadOnlyMap() != null)
+ {
+ editingDomain.getResourceToReadOnlyMap().clear();
+
+ // Refresh any actions that may become enabled or disabled.
+ //
+ setSelection(getSelection());
+ }
+
+ if (!removedResources.isEmpty())
+ {
+ if (handleDirtyConflict())
+ {
+ getSite().getPage().closeEditor(EvolutionEditor.this, false);
+ }
+ else
+ {
+ removedResources.clear();
+ changedResources.clear();
+ savedResources.clear();
+ }
+ }
+ else if (!changedResources.isEmpty())
+ {
+ changedResources.removeAll(savedResources);
+ handleChangedResources();
+ changedResources.clear();
+ savedResources.clear();
+ }
+ }
+
+ /**
+ * Handles what to do with changed resources on activation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void handleChangedResources()
+ {
+ if (!changedResources.isEmpty() && (!isDirty() || handleDirtyConflict()))
+ {
+ ResourceSet resourceSet = editingDomain.getResourceSet();
+ if (isDirty())
+ {
+ changedResources.addAll(resourceSet.getResources());
+ }
+ editingDomain.getCommandStack().flush();
+
+ updateProblemIndication = false;
+ for (Resource resource : changedResources)
+ {
+ if (resource.isLoaded())
+ {
+ resource.unload();
+ try
+ {
+ resource.load(resourceSet.getLoadOptions());
+ }
+ catch (IOException exception)
+ {
+ if (!resourceToDiagnosticMap.containsKey(resource))
+ {
+ resourceToDiagnosticMap.put(resource, analyzeResourceProblems(resource, exception));
+ }
+ }
+ }
+ }
+
+ if (AdapterFactoryEditingDomain.isStale(editorSelection))
+ {
+ setSelection(StructuredSelection.EMPTY);
+ }
+
+ updateProblemIndication = true;
+ updateProblemIndication();
+ }
+ }
+
+ /**
+ * Updates the problems indication with the information described in the specified diagnostic.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void updateProblemIndication()
+ {
+ if (updateProblemIndication)
+ {
+ BasicDiagnostic diagnostic = new BasicDiagnostic(Diagnostic.OK, "org.eclipse.emf.cdo.evolution.editor", 0, null,
+ new Object[] { editingDomain.getResourceSet() });
+ for (Diagnostic childDiagnostic : resourceToDiagnosticMap.values())
+ {
+ if (childDiagnostic.getSeverity() != Diagnostic.OK)
+ {
+ diagnostic.add(childDiagnostic);
+ }
+ }
+
+ int lastEditorPage = getPageCount() - 1;
+ if (lastEditorPage >= 0 && getEditor(lastEditorPage) instanceof ProblemEditorPart)
+ {
+ ((ProblemEditorPart)getEditor(lastEditorPage)).setDiagnostic(diagnostic);
+ if (diagnostic.getSeverity() != Diagnostic.OK)
+ {
+ setActivePage(lastEditorPage);
+ }
+ }
+ else if (diagnostic.getSeverity() != Diagnostic.OK)
+ {
+ ProblemEditorPart problemEditorPart = new ProblemEditorPart();
+ problemEditorPart.setDiagnostic(diagnostic);
+ problemEditorPart.setMarkerHelper(markerHelper);
+ try
+ {
+ addPage(++lastEditorPage, problemEditorPart, getEditorInput());
+ setPageText(lastEditorPage, problemEditorPart.getPartName());
+ setActivePage(lastEditorPage);
+ showTabs();
+ }
+ catch (PartInitException exception)
+ {
+ EvolutionEditorPlugin.INSTANCE.log(exception);
+ }
+ }
+
+ if (markerHelper.hasMarkers(editingDomain.getResourceSet()))
+ {
+ try
+ {
+ markerHelper.updateMarkers(diagnostic);
+ }
+ catch (CoreException exception)
+ {
+ EvolutionEditorPlugin.INSTANCE.log(exception);
+ }
+ }
+ }
+ }
+
+ /**
+ * Shows a dialog that asks if conflicting changes should be discarded.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected boolean handleDirtyConflict()
+ {
+ return MessageDialog.openQuestion(getSite().getShell(), getString("_UI_FileConflict_label"), getString("_WARN_FileConflict"));
+ }
+
+ /**
+ * This creates a model editor.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EvolutionEditor()
+ {
+ super();
+ initializeEditingDomain();
+ }
+
+ /**
+ * This sets up the editing domain for the model editor.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ protected void initializeEditingDomain()
+ {
+ // Create an adapter factory that yields item providers.
+ //
+ adapterFactory = new ComposedAdapterFactory(ComposedAdapterFactory.Descriptor.Registry.INSTANCE);
+
+ adapterFactory.addAdapterFactory(new ResourceItemProviderAdapterFactory());
+ adapterFactory.addAdapterFactory(new EvolutionItemProviderAdapterFactory());
+ ecoreItemProviderAdapterFactory = new EcoreItemProviderAdapterFactory();
+ adapterFactory.addAdapterFactory(ecoreItemProviderAdapterFactory);
+ adapterFactory.addAdapterFactory(new ReflectiveItemProviderAdapterFactory());
+
+ // Create the command stack that will notify this editor as commands are executed.
+ //
+ BasicCommandStack commandStack = new BasicCommandStack()
+ {
+ @Override
+ public void execute(Command command)
+ {
+ // Cancel live validation before executing a command that will trigger a new round of validation.
+ //
+ if (!(command instanceof AbstractCommand.NonDirtying))
+ {
+ DiagnosticDecorator.Styled.cancel(editingDomain);
+ }
+ super.execute(command);
+ }
+ };
+
+ // Add a listener to set the most recent command's affected objects to be the selection of the viewer with focus.
+ //
+ commandStack.addCommandStackListener(new CommandStackListener()
+ {
+ public void commandStackChanged(final EventObject event)
+ {
+ ((EvolutionImpl)evolution).invalidateChange();
+
+ getContainer().getDisplay().asyncExec(new Runnable()
+ {
+ public void run()
+ {
+ firePropertyChange(IEditorPart.PROP_DIRTY);
+
+ // Try to select the affected objects.
+ //
+ Command mostRecentCommand = ((CommandStack)event.getSource()).getMostRecentCommand();
+ if (mostRecentCommand != null)
+ {
+ setSelectionToViewer(mostRecentCommand.getAffectedObjects());
+ }
+ for (Iterator<PropertySheetPage> i = propertySheetPages.iterator(); i.hasNext();)
+ {
+ PropertySheetPage propertySheetPage = i.next();
+ if (propertySheetPage.getControl().isDisposed())
+ {
+ i.remove();
+ }
+ else
+ {
+ propertySheetPage.refresh();
+ }
+ }
+ }
+ });
+ }
+ });
+
+ // Create the editing domain with a special command stack.
+ //
+ editingDomain = new AdapterFactoryEditingDomain(adapterFactory, commandStack, new HashMap<Resource, Boolean>())
+ {
+ @Override
+ public Command createCommand(Class<? extends Command> commandClass, CommandParameter commandParameter)
+ {
+ Collection<?> collection = commandParameter.getCollection();
+ if (collection != null && !collection.isEmpty())
+ {
+ Object value = collection.iterator().next();
+ if (isReadOnlyObject(value))
+ {
+ return UnexecutableCommand.INSTANCE;
+ }
+ }
+
+ return super.createCommand(commandClass, commandParameter);
+ }
+ };
+ }
+
+ protected boolean isReadOnlyObject(Object object)
+ {
+ if (object instanceof Release)
+ {
+ return true;
+ }
+
+ if (object instanceof Change)
+ {
+ return true;
+ }
+
+ if (readOnlyObjects.contains(object))
+ {
+ return true;
+ }
+
+ if (object instanceof EModelElement)
+ {
+ EModelElement modelElement = (EModelElement)object;
+
+ if (evolution.containsElement(modelElement))
+ {
+ return false;
+ }
+
+ for (Release release : evolution.getReleases())
+ {
+ if (release.containsElement(modelElement))
+ {
+ readOnlyObjects.add(modelElement);
+ return true;
+ }
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * This is here for the listener to be able to call it.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected void firePropertyChange(int action)
+ {
+ super.firePropertyChange(action);
+ }
+
+ /**
+ * This sets the selection into whichever viewer is active.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setSelectionToViewer(Collection<?> collection)
+ {
+ final Collection<?> theSelection = collection;
+ // Make sure it's okay.
+ //
+ if (theSelection != null && !theSelection.isEmpty())
+ {
+ Runnable runnable = new Runnable()
+ {
+ public void run()
+ {
+ // Try to select the items in the current content viewer of the editor.
+ //
+ if (currentViewer != null)
+ {
+ currentViewer.setSelection(new StructuredSelection(theSelection.toArray()), true);
+ }
+ }
+ };
+ getSite().getShell().getDisplay().asyncExec(runnable);
+ }
+ }
+
+ /**
+ * This returns the editing domain as required by the {@link IEditingDomainProvider} interface.
+ * This is important for implementing the static methods of {@link AdapterFactoryEditingDomain}
+ * and for supporting {@link org.eclipse.emf.edit.ui.action.CommandAction}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EditingDomain getEditingDomain()
+ {
+ return editingDomain;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public class ReverseAdapterFactoryContentProvider extends AdapterFactoryContentProvider
+ {
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public ReverseAdapterFactoryContentProvider(AdapterFactory adapterFactory)
+ {
+ super(adapterFactory);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object[] getElements(Object object)
+ {
+ Object parent = super.getParent(object);
+ return (parent == null ? Collections.EMPTY_SET : Collections.singleton(parent)).toArray();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object[] getChildren(Object object)
+ {
+ Object parent = super.getParent(object);
+ return (parent == null ? Collections.EMPTY_SET : Collections.singleton(parent)).toArray();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public boolean hasChildren(Object object)
+ {
+ Object parent = super.getParent(object);
+ return parent != null;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object getParent(Object object)
+ {
+ return null;
+ }
+ }
+
+ /**
+ * This makes sure that one content viewer, either for the current page or the outline view, if it has focus,
+ * is the current one.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setCurrentViewer(Viewer viewer)
+ {
+ // If it is changing...
+ //
+ if (currentViewer != viewer)
+ {
+ if (selectionChangedListener == null)
+ {
+ // Create the listener on demand.
+ //
+ selectionChangedListener = new ISelectionChangedListener()
+ {
+ // This just notifies those things that are affected by the section.
+ //
+ public void selectionChanged(SelectionChangedEvent selectionChangedEvent)
+ {
+ setSelection(selectionChangedEvent.getSelection());
+ }
+ };
+ }
+
+ // Stop listening to the old one.
+ //
+ if (currentViewer != null)
+ {
+ currentViewer.removeSelectionChangedListener(selectionChangedListener);
+ }
+
+ // Start listening to the new one.
+ //
+ if (viewer != null)
+ {
+ viewer.addSelectionChangedListener(selectionChangedListener);
+ }
+
+ // Remember it.
+ //
+ currentViewer = viewer;
+
+ // Set the editors selection based on the current viewer's selection.
+ //
+ setSelection(currentViewer == null ? StructuredSelection.EMPTY : currentViewer.getSelection());
+ }
+ }
+
+ /**
+ * This returns the viewer as required by the {@link IViewerProvider} interface.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public Viewer getViewer()
+ {
+ return currentViewer;
+ }
+
+ /**
+ * This creates a context menu for the viewer and adds a listener as well registering the menu for extension.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ protected void createContextMenuFor(StructuredViewer viewer)
+ {
+ MenuManager contextMenu = new MenuManager("#PopUp");
+ contextMenu.add(new Separator("additions"));
+ contextMenu.setRemoveAllWhenShown(true);
+ contextMenu.addMenuListener(this);
+ Menu menu = contextMenu.createContextMenu(viewer.getControl());
+ viewer.getControl().setMenu(menu);
+ getSite().registerContextMenu(contextMenu, new UnwrappingSelectionProvider(viewer));
+
+ int dndOperations = DND.DROP_COPY | DND.DROP_MOVE | DND.DROP_LINK;
+ Transfer[] transfers = new Transfer[] { LocalTransfer.getInstance(), LocalSelectionTransfer.getTransfer(), FileTransfer.getInstance() };
+ viewer.addDragSupport(dndOperations, transfers, new ViewerDragAdapter(viewer));
+ viewer.addDropSupport(dndOperations, transfers, new EditingDomainViewerDropAdapter(editingDomain, viewer)
+ {
+ @Override
+ public void dropAccept(DropTargetEvent event)
+ {
+ super.dropAccept(event);
+ }
+
+ @Override
+ public void drop(DropTargetEvent event)
+ {
+ super.drop(event);
+ }
+ });
+ }
+
+ /**
+ * This is the method called to load a resource into the editing domain's resource set based on the editor's input.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void createModelGen()
+ {
+ URI resourceURI = EditUIUtil.getURI(getEditorInput(), editingDomain.getResourceSet().getURIConverter());
+ Exception exception = null;
+ Resource resource = null;
+ try
+ {
+ // Load the resource through the editing domain.
+ //
+ resource = editingDomain.getResourceSet().getResource(resourceURI, true);
+ }
+ catch (Exception e)
+ {
+ exception = e;
+ resource = editingDomain.getResourceSet().getResource(resourceURI, false);
+ }
+
+ Diagnostic diagnostic = analyzeResourceProblems(resource, exception);
+ if (diagnostic.getSeverity() != Diagnostic.OK)
+ {
+ resourceToDiagnosticMap.put(resource, analyzeResourceProblems(resource, exception));
+ }
+ editingDomain.getResourceSet().eAdapters().add(problemIndicationAdapter);
+ }
+
+ /**
+ * This is the method called to load a resource into the editing domain's resource set based on the editor's input.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ public void createModel()
+ {
+ createModelGen();
+
+ ResourceSet resourceSet = editingDomain.getResourceSet();
+ evolution = EvolutionImpl.get(resourceSet);
+ if (evolution != null)
+ {
+ if (hasGenerics(evolution))
+ {
+ ((EvolutionActionBarContributor)getActionBarContributor()).showGenerics(true);
+ }
+ }
+ }
+
+ private boolean hasGenerics(Evolution evolution)
+ {
+ if (hasGenerics(evolution.getRootPackages()))
+ {
+ return true;
+ }
+
+ for (Release release : evolution.getReleases())
+ {
+ if (hasGenerics(release.getRootPackages()))
+ {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ private boolean hasGenerics(EList<EPackage> rootPackages)
+ {
+ for (EPackage rootPackage : rootPackages)
+ {
+ for (Iterator<EObject> i = rootPackage.eAllContents(); i.hasNext();)
+ {
+ EObject eObject = i.next();
+ if (eObject instanceof ETypeParameter || eObject instanceof EGenericType && !((EGenericType)eObject).getETypeArguments().isEmpty())
+ {
+ return true;
+ }
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * Returns a diagnostic describing the errors and warnings listed in the resource
+ * and the specified exception (if any).
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public Diagnostic analyzeResourceProblems(Resource resource, Exception exception)
+ {
+ boolean hasErrors = !resource.getErrors().isEmpty();
+ if (hasErrors || !resource.getWarnings().isEmpty())
+ {
+ BasicDiagnostic basicDiagnostic = new BasicDiagnostic(hasErrors ? Diagnostic.ERROR : Diagnostic.WARNING, "org.eclipse.emf.cdo.evolution.editor", 0,
+ getString("_UI_CreateModelError_message", resource.getURI()), new Object[] { exception == null ? (Object)resource : exception });
+ basicDiagnostic.merge(EcoreUtil.computeDiagnostic(resource, true));
+ return basicDiagnostic;
+ }
+ else if (exception != null)
+ {
+ return new BasicDiagnostic(Diagnostic.ERROR, "org.eclipse.emf.cdo.evolution.editor", 0, getString("_UI_CreateModelError_message", resource.getURI()),
+ new Object[] { exception });
+ }
+ else
+ {
+ return Diagnostic.OK_INSTANCE;
+ }
+ }
+
+ /**
+ * @author Eike Stepper
+ */
+ private static class PhasedLiveValidator extends LiveValidator
+ {
+ public PhasedLiveValidator(EditingDomain editingDomain, IDialogSettings dialogSettings)
+ {
+ super(editingDomain, dialogSettings);
+ }
+
+ @Override
+ public void scheduleValidation()
+ {
+ if (validationJob == null && (dialogSettings == null || dialogSettings.getBoolean(LiveValidationAction.LIVE_VALIDATOR_DIALOG_SETTINGS_KEY)))
+ {
+ validationJob = new Job("Validation Job")
+ {
+ @Override
+ protected IStatus run(final IProgressMonitor monitor)
+ {
+ try
+ {
+ Diagnostician diagnostician = new Diagnostician()
+ {
+ @Override
+ public String getObjectLabel(EObject eObject)
+ {
+ String text = labelProvider != null && eObject.eIsProxy() ? ((InternalEObject)eObject).eProxyURI().toString()
+ : labelProvider.getText(eObject);
+ if (text == null || text.length() == 0)
+ {
+ text = "<i>null</i>";
+ }
+ else
+ {
+ text = DiagnosticDecorator.escapeContent(text);
+ }
+ Image image = labelProvider != null ? labelProvider.getImage(eObject) : null;
+ if (image != null)
+ {
+ URI imageURI = ImageURIRegistry.INSTANCE.getImageURI(image);
+ return DiagnosticDecorator.enquote("<img src='" + imageURI + "'/> " + text);
+ }
+ else
+ {
+ return text;
+ }
+ }
+
+ @Override
+ public boolean validate(EClass eClass, EObject eObject, DiagnosticChain diagnostics, Map<Object, Object> context)
+ {
+ if (monitor.isCanceled())
+ {
+ throw new RuntimeException();
+ }
+
+ monitor.worked(1);
+ return super.validate(eClass, eObject, diagnostics, context);
+ }
+
+ @Override
+ protected boolean doValidateContents(EObject eObject, DiagnosticChain diagnostics, Map<Object, Object> context)
+ {
+ Evolution evolution;
+ List<? extends EObject> eContents;
+
+ ValidationContext validationContext = ValidationContext.getFrom(context);
+ if (validationContext != null)
+ {
+ ValidationPhase phase = validationContext.getPhase();
+ evolution = validationContext.getEvolution();
+ eContents = phase.getContentsToValidate(this, evolution, eObject, context);
+ }
+ else
+ {
+ evolution = null;
+ eContents = eObject.eContents();
+ }
+
+ boolean result = true;
+ for (EObject child : eContents)
+ {
+ Resource resource = child.eResource();
+ if (resource == null && evolution != null)
+ {
+ // Change objects are not contained in a resource. Use the evolution's resource.
+ resource = evolution.eResource();
+ }
+
+ DiagnosticChain resourceDiagnostic = resource != null && validationContext != null
+ ? validationContext.getResourceDiagnostics().get(resource)
+ : null;
+
+ result &= validate(child, resourceDiagnostic, context);
+ }
+
+ return result;
+ }
+ };
+
+ final ResourceSet resourceSet = editingDomain.getResourceSet();
+
+ Map<Object, Object> context = diagnostician.createDefaultContext();
+ context.put(EObjectValidator.ROOT_OBJECT, new Object()); // Disable circular containment validation.
+
+ { ///////////////////////////////////////////////////////////////////////////////
+
+ Evolution evolution = EvolutionImpl.get(resourceSet);
+ ValidationContext validationContext = new ValidationContext(evolution);
+ validationContext.putInto(context);
+
+ int count = 0;
+ for (ValidationPhase phase : ValidationPhase.values())
+ {
+ validationContext.setPhase(phase);
+
+ // int xxx;
+ // System.out.println("Count " + phase);
+
+ count += countObjects(diagnostician, evolution, validationContext, context, monitor);
+ }
+
+ scheduledResources.clear();
+ monitor.beginTask("", count);
+
+ Map<Resource, BasicDiagnostic> resourceDiagnostics = validationContext.getResourceDiagnostics();
+ final BasicDiagnostic rootDiagnostic = new BasicDiagnostic(EObjectValidator.DIAGNOSTIC_SOURCE, 0,
+ EMFEditUIPlugin.INSTANCE.getString("_UI_DiagnosisOfNObjects_message", new String[] { "" + resourceDiagnostics.size() }),
+ new Object[] { resourceSet });
+
+ for (BasicDiagnostic resourceDiagnostic : resourceDiagnostics.values())
+ {
+ rootDiagnostic.add(resourceDiagnostic);
+ }
+
+ BasicDiagnostic modelSetResourceDiagnostic = resourceDiagnostics.get(evolution.eResource());
+
+ for (ValidationPhase phase : ValidationPhase.values())
+ {
+ validationContext.setPhase(phase);
+
+ // int xxx;
+ // System.out.println("Validate " + phase);
+
+ monitor
+ .setTaskName(EvolutionEditorPlugin.INSTANCE.getString("_UI_ValidatingPhase_message", new Object[] { Integer.toString(phase.ordinal()) }));
+
+ boolean valid = diagnostician.validate(evolution, modelSetResourceDiagnostic, context);
+ if (!valid)
+ {
+ break;
+ }
+ }
+
+ if (monitor.isCanceled())
+ {
+ throw new RuntimeException();
+ }
+
+ monitor.worked(1);
+
+ DiagnosticAdapter.update(resourceSet, rootDiagnostic);
+
+ } ///////////////////////////////////////////////////////////////////////////////
+
+ Display.getDefault().asyncExec(new Runnable()
+ {
+ public void run()
+ {
+ validationJob = null;
+ if (!monitor.isCanceled() && !scheduledResources.isEmpty())
+ {
+ PhasedLiveValidator.this.scheduleValidation();
+ }
+ }
+ });
+
+ return Status.OK_STATUS;
+ }
+ catch (RuntimeException exception)
+ {
+ int xxx;
+ exception.printStackTrace();
+
+ validationJob = null;
+ return Status.CANCEL_STATUS;
+ }
+ }
+
+ private int countObjects(Diagnostician diagnostician, EObject eObject, ValidationContext validationContext, Map<Object, Object> context,
+ IProgressMonitor monitor)
+ {
+ if (monitor.isCanceled())
+ {
+ throw new RuntimeException();
+ }
+
+ for (EReference eReference : eObject.eClass().getEAllReferences())
+ {
+ if (monitor.isCanceled())
+ {
+ throw new RuntimeException();
+ }
+
+ if (eReference == EvolutionPackage.Literals.MODEL_SET__CHANGE)
+ {
+ continue;
+ }
+
+ if (eReference.isContainment() || eReference.isContainer())
+ {
+ continue;
+ }
+
+ // Resolve all proxies.
+ if (eReference.isResolveProxies())
+ {
+ Object value = eObject.eGet(eReference, true);
+ if (eReference.isMany())
+ {
+ @SuppressWarnings("unchecked")
+ List<EObject> list = (List<EObject>)value;
+
+ for (@SuppressWarnings("unused")
+ EObject element : list)
+ {
+ if (monitor.isCanceled())
+ {
+ throw new RuntimeException();
+ }
+ }
+ }
+ }
+ }
+
+ Resource resource = eObject.eResource();
+ if (resource != null)
+ {
+ Map<Resource, BasicDiagnostic> resourceDiagnostics = validationContext.getResourceDiagnostics();
+ if (!resourceDiagnostics.containsKey(resource))
+ {
+ BasicDiagnostic diagnostic = new BasicDiagnostic(EObjectValidator.DIAGNOSTIC_SOURCE, 0,
+ EMFEditUIPlugin.INSTANCE.getString("_UI_DiagnosisOfNObjects_message", new String[] { "1" }), new Object[] { resource });
+ resourceDiagnostics.put(resource, diagnostic);
+ }
+ }
+
+ Evolution evolution = validationContext.getEvolution();
+ ValidationPhase phase = validationContext.getPhase();
+ int count = 1;
+
+ for (EObject child : phase.getContentsToValidate(diagnostician, evolution, eObject, context))
+ {
+ count += countObjects(diagnostician, child, validationContext, context, monitor);
+ }
+
+ return count;
+ }
+ };
+
+ validationJob.setPriority(Job.DECORATE);
+ validationJob.schedule(500);
+ }
+ }
+ }
+
+ /**
+ * @author Eike Stepper
+ */
+ private static class DiagnosticContentProvider implements IStructuredContentProvider
+ {
+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput)
+ {
+ }
+
+ public Object[] getElements(Object inputElement)
+ {
+ List<Diagnostic> result = new ArrayList<Diagnostic>();
+
+ @SuppressWarnings("unchecked")
+ List<Diagnostic> diagnostics = (List<Diagnostic>)inputElement;
+ for (Diagnostic diagnostic : diagnostics)
+ {
+ collectDiagnostics(diagnostic, result);
+ }
+
+ return result.toArray(new Diagnostic[result.size()]);
+ }
+
+ private void collectDiagnostics(Diagnostic diagnostic, List<Diagnostic> result)
+ {
+ if (isRelevant(diagnostic))
+ {
+ result.add(diagnostic);
+ }
+
+ for (Diagnostic child : diagnostic.getChildren())
+ {
+ collectDiagnostics(child, result);
+ }
+ }
+
+ private boolean isRelevant(Diagnostic diagnostic)
+ {
+ // if (diagnostic.getSeverity() != Diagnostic.ERROR)
+ // {
+ // return false;
+ // }
+
+ List<?> data = diagnostic.getData();
+ if (data.isEmpty())
+ {
+ return false;
+ }
+
+ if (data.get(0) instanceof Resource)
+ {
+ return false;
+ }
+
+ return true;
+ }
+
+ public void dispose()
+ {
+ }
+ }
+
+ /**
+ * This is the method used by the framework to install your own controls.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ @Override
+ public void createPages()
+ {
+ // Creates the model from the editor input
+ //
+ createModel();
+
+ // Only creates the other pages if there is something that can be edited
+ //
+ if (!getEditingDomain().getResourceSet().getResources().isEmpty())
+ {
+ // Create a page for the selection tree view.
+ //
+
+ SashForm mainSash = new SashForm(getContainer(), SWT.VERTICAL);
+ mainSash.setLayoutData(new GridData(GridData.FILL_BOTH | GridData.GRAB_VERTICAL));
+
+ selectionViewer = createSelectionViewer(mainSash);
+ TableViewer problemViewer = createProblemViewer(mainSash);
+
+ mainSash.setWeights(new int[] { 70, 30 });
+
+ int pageIndex = addPage(mainSash);
+ setPageText(pageIndex, getString("_UI_SelectionPage_label"));
+
+ getSite().getShell().getDisplay().asyncExec(new Runnable()
+ {
+ public void run()
+ {
+ if (!getContainer().isDisposed())
+ {
+ setActivePage(0);
+ }
+ }
+ });
+
+ this.problemViewer = problemViewer;
+ }
+
+ // Ensures that this editor will only display the page's tab
+ // area if there are more than one page
+ //
+ getContainer().addControlListener(new ControlAdapter()
+ {
+ boolean guard = false;
+
+ @Override
+ public void controlResized(ControlEvent event)
+ {
+ if (!guard)
+ {
+ guard = true;
+ hideTabs();
+ guard = false;
+ }
+ }
+ });
+
+ getSite().getShell().getDisplay().asyncExec(new Runnable()
+ {
+ public void run()
+ {
+ updateProblemIndication();
+ }
+ });
+ }
+
+ private TreeViewer createSelectionViewer(Composite parent)
+ {
+ Tree tree = new Tree(parent, SWT.MULTI);
+ TreeViewer selectionViewer = new TreeViewer(tree);
+ setCurrentViewer(selectionViewer);
+
+ DiagnosticDecorator diagnosticDecorator = new DiagnosticDecorator.Styled(editingDomain, selectionViewer,
+ EvolutionEditorPlugin.getPlugin().getDialogSettings())
+ {
+ @Override
+ protected void redecorate()
+ {
+ super.redecorate();
+ handleDiagnostics(diagnostics);
+ }
+
+ @Override
+ protected LiveValidator getLiveValidator()
+ {
+ if (liveValidator == null && editingDomain != null)
+ {
+ Field field = ReflectUtil.getField(DiagnosticDecorator.class, "LIVE_VALIDATORS");
+
+ @SuppressWarnings("unchecked")
+ Map<EditingDomain, LiveValidator> LIVE_VALIDATORS = (Map<EditingDomain, LiveValidator>)ReflectUtil.getValue(field, null);
+
+ liveValidator = LIVE_VALIDATORS.get(editingDomain);
+ if (liveValidator == null)
+ {
+ liveValidator = new PhasedLiveValidator(editingDomain, dialogSettings);
+
+ LIVE_VALIDATORS.put(editingDomain, liveValidator);
+ }
+
+ liveValidator.register(this);
+ }
+
+ return liveValidator;
+ }
+ };
+
+ selectionViewer.setUseHashlookup(true);
+ selectionViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+ selectionViewer.setLabelProvider(new DelegatingStyledCellLabelProvider.FontAndColorProvider(new DecoratingColumLabelProvider.StyledLabelProvider(
+ new AdapterFactoryLabelProvider.StyledLabelProvider(adapterFactory, selectionViewer), diagnosticDecorator)));
+ selectionViewer.setInput(editingDomain.getResourceSet().getResources().get(0));
+ selectionViewer.setSelection(new StructuredSelection(editingDomain.getResourceSet().getResources().get(0)), true);
+
+ new AdapterFactoryTreeEditor(selectionViewer.getTree(), adapterFactory);
+ new ColumnViewerInformationControlToolTipSupport(selectionViewer,
+ new DiagnosticDecorator.Styled.EditingDomainLocationListener(editingDomain, selectionViewer));
+
+ createContextMenuFor(selectionViewer);
+ return selectionViewer;
+ }
+
+ private TableViewer createProblemViewer(Composite parent)
+ {
+ final TableViewer problemViewer = new TableViewer(parent, SWT.MULTI);
+ problemViewer.setContentProvider(new DiagnosticContentProvider());
+ problemViewer.setInput(Collections.emptyList());
+
+ Table problemTable = problemViewer.getTable();
+ problemTable.setHeaderVisible(true);
+ problemTable.setLinesVisible(true);
+
+ createDiagnosticMessageColumn(problemViewer);
+ createDiagnosticElementColumn(problemViewer, adapterFactory);
+ createDiagnosticResourceColumn(problemViewer, adapterFactory);
+ // createDiagnosticIDColumn(problemViewer);
+
+ // {
+ // TableViewerColumn tableViewerColumn = new TableViewerColumn(problemViewer, SWT.NONE);
+ // tableViewerColumn.setLabelProvider(new ColumnLabelProvider()
+ // {
+ // @Override
+ // public String getText(Object element)
+ // {
+ // return ((Diagnostic)element).getSource();
+ // }
+ // });
+ //
+ // TableColumn tableColumn = tableViewerColumn.getColumn();
+ // tableColumn.setResizable(true);
+ // tableColumn.setAlignment(SWT.LEFT);
+ // tableColumn.setWidth(200);
+ // tableColumn.setText("Source");
+ // }
+ //
+ // {
+ // TableViewerColumn tableViewerColumn = new TableViewerColumn(problemViewer, SWT.NONE);
+ // tableViewerColumn.setLabelProvider(new ColumnLabelProvider()
+ // {
+ //
+ // @Override
+ // public String getText(Object element)
+ // {
+ // return Integer.toString(((Diagnostic)element).getCode());
+ // }
+ // });
+ //
+ // TableColumn tableColumn = tableViewerColumn.getColumn();
+ // tableColumn.setResizable(true);
+ // tableColumn.setAlignment(SWT.LEFT);
+ // tableColumn.setWidth(70);
+ // tableColumn.setText("Code");
+ // }
+ //
+ // {
+ // TableViewerColumn tableViewerColumn = new TableViewerColumn(problemViewer, SWT.NONE);
+ // tableViewerColumn.setLabelProvider(new ColumnLabelProvider()
+ // {
+ // @Override
+ // public String getText(Object element)
+ // {
+ // StringBuilder builder = new StringBuilder();
+ //
+ // List<?> data = ((Diagnostic)element).getData();
+ // for (Object object : data)
+ // {
+ // if (builder.length() != 0)
+ // {
+ // builder.append(", ");
+ // }
+ //
+ // if (object instanceof Resource)
+ // {
+ // Resource resource = (Resource)object;
+ // builder.append("Resource[");
+ // builder.append(resource.getURI());
+ // builder.append("]");
+ // }
+ // else if (object instanceof ENamedElement)
+ // {
+ // ENamedElement namedElement = (ENamedElement)object;
+ // builder.append(namedElement.getName());
+ // }
+ // else if (object instanceof EObject)
+ // {
+ // EObject eObject = (EObject)object;
+ // builder.append(eObject.eClass().getName());
+ // }
+ // else
+ // {
+ // builder.append(String.valueOf(object));
+ // }
+ // }
+ //
+ // return builder.toString();
+ // }
+ // });
+ //
+ // TableColumn tableColumn = tableViewerColumn.getColumn();
+ // tableColumn.setResizable(true);
+ // tableColumn.setAlignment(SWT.LEFT);
+ // tableColumn.setWidth(400);
+ // tableColumn.setText("Data");
+ // }
+
+ problemTable.addKeyListener(new KeyAdapter()
+ {
+ @Override
+ public void keyPressed(KeyEvent e)
+ {
+ if (e.stateMask == SWT.CTRL && e.character == '1')
+ {
+ showQuickFixes();
+ }
+ }
+ });
+
+ problemViewer.addOpenListener(new IOpenListener()
+ {
+ public void open(OpenEvent event)
+ {
+ IStructuredSelection selection = (IStructuredSelection)event.getSelection();
+ Object element = selection.getFirstElement();
+ if (element instanceof Diagnostic)
+ {
+ List<?> data = ((Diagnostic)element).getData();
+ int size = data.size();
+ if (size != 0)
+ {
+ List<Object> list = new ArrayList<Object>(size);
+ for (Object object : data)
+ {
+ Object wrapper = editingDomain.getWrapper(object);
+ list.add(wrapper);
+ }
+
+ setSelectionToViewer(list);
+ }
+ }
+ }
+ });
+
+ return problemViewer;
+ }
+
+ public static TableViewerColumn createDiagnosticMessageColumn(final TableViewer problemViewer)
+ {
+ TableViewerColumn tableViewerColumn = new TableViewerColumn(problemViewer, SWT.NONE);
+ tableViewerColumn.setLabelProvider(new ColumnLabelProvider()
+ {
+ @Override
+ public Image getImage(Object element)
+ {
+ switch (((Diagnostic)element).getSeverity())
+ {
+ case Diagnostic.INFO:
+ return SharedIcons.getImage(SharedIcons.OBJ_INFO);
+
+ default:
+ return SharedIcons.getImage(SharedIcons.OBJ_ERROR);
+ }
+ }
+
+ @Override
+ public String getText(Object element)
+ {
+ return ((Diagnostic)element).getMessage();
+ }
+ });
+
+ TableColumn tableColumn = tableViewerColumn.getColumn();
+ tableColumn.setResizable(true);
+ tableColumn.setAlignment(SWT.LEFT);
+ tableColumn.setWidth(400);
+ tableColumn.setText("Message");
+ return tableViewerColumn;
+ }
+
+ public static TableViewerColumn createDiagnosticResourceColumn(TableViewer problemViewer, AdapterFactory adapterFactory)
+ {
+ TableViewerColumn tableViewerColumn = new TableViewerColumn(problemViewer, SWT.NONE);
+ tableViewerColumn.setLabelProvider(new ResourceColumnLabelProvider(adapterFactory));
+
+ TableColumn tableColumn = tableViewerColumn.getColumn();
+ tableColumn.setResizable(true);
+ tableColumn.setAlignment(SWT.LEFT);
+ tableColumn.setWidth(450);
+ tableColumn.setText("Resource");
+ return tableViewerColumn;
+ }
+
+ public static TableViewerColumn createDiagnosticElementColumn(TableViewer problemViewer, AdapterFactory adapterFactory)
+ {
+ TableViewerColumn tableViewerColumn = new TableViewerColumn(problemViewer, SWT.NONE);
+ tableViewerColumn.setLabelProvider(new ElementColumnLabelProvider(adapterFactory));
+
+ TableColumn tableColumn = tableViewerColumn.getColumn();
+ tableColumn.setResizable(true);
+ tableColumn.setAlignment(SWT.LEFT);
+ tableColumn.setWidth(200);
+ tableColumn.setText("Element");
+ return tableViewerColumn;
+ }
+
+ public static TableViewerColumn createDiagnosticIDColumn(final TableViewer problemViewer)
+ {
+ TableViewerColumn tableViewerColumn = new TableViewerColumn(problemViewer, SWT.NONE);
+ tableViewerColumn.setLabelProvider(new ColumnLabelProvider()
+ {
+ @Override
+ public String getText(Object element)
+ {
+ DiagnosticID diagnosticID = DiagnosticID.get((Diagnostic)element);
+ if (diagnosticID != null)
+ {
+ return diagnosticID.getValue();
+ }
+
+ return "";
+ }
+ });
+
+ TableColumn tableColumn = tableViewerColumn.getColumn();
+ tableColumn.setResizable(true);
+ tableColumn.setAlignment(SWT.LEFT);
+ tableColumn.setWidth(800);
+ tableColumn.setText("ID");
+ return tableViewerColumn;
+ }
+
+ /**
+ * @author Eike Stepper
+ */
+ public static class ResourceColumnLabelProvider extends ColumnLabelProvider
+ {
+ protected final AdapterFactory adapterFactory;
+
+ public ResourceColumnLabelProvider(AdapterFactory adapterFactory)
+ {
+ this.adapterFactory = adapterFactory;
+ }
+
+ @Override
+ public Image getImage(Object element)
+ {
+ List<?> data = ((Diagnostic)element).getData();
+ if (!data.isEmpty())
+ {
+ Object object = data.get(0);
+ if (object instanceof EObject)
+ {
+ EObject eObject = (EObject)object;
+ Resource resource = eObject.eResource();
+ if (resource != null)
+ {
+ IItemLabelProvider labelProvider = (IItemLabelProvider)adapterFactory.adapt(resource, IItemLabelProvider.class);
+ if (labelProvider != null)
+ {
+ return ExtendedImageRegistry.getInstance().getImage(labelProvider.getImage(resource));
+ }
+ }
+ }
+ }
+
+ return null;
+ }
+
+ @Override
+ public String getText(Object element)
+ {
+ List<?> data = ((Diagnostic)element).getData();
+ if (!data.isEmpty())
+ {
+ Object object = data.get(0);
+ if (object instanceof EObject)
+ {
+ EObject eObject = (EObject)object;
+ Resource resource = eObject.eResource();
+ if (resource != null)
+ {
+ IItemLabelProvider labelProvider = (IItemLabelProvider)adapterFactory.adapt(resource, IItemLabelProvider.class);
+ if (labelProvider != null)
+ {
+ return labelProvider.getText(resource);
+ }
+ }
+ }
+ }
+
+ return null;
+ }
+ }
+
+ /**
+ * @author Eike Stepper
+ */
+ public static class ElementColumnLabelProvider extends ColumnLabelProvider
+ {
+ protected final AdapterFactory adapterFactory;
+
+ public ElementColumnLabelProvider(AdapterFactory adapterFactory)
+ {
+ this.adapterFactory = adapterFactory;
+ }
+
+ @Override
+ public Image getImage(Object element)
+ {
+ List<?> data = ((Diagnostic)element).getData();
+ if (!data.isEmpty())
+ {
+ Object object = data.get(0);
+ if (object instanceof EObject)
+ {
+ IItemLabelProvider labelProvider = (IItemLabelProvider)adapterFactory.adapt(object, IItemLabelProvider.class);
+ if (labelProvider != null)
+ {
+ return ExtendedImageRegistry.getInstance().getImage(labelProvider.getImage(object));
+ }
+ }
+ }
+
+ return null;
+ }
+
+ @Override
+ public String getText(Object element)
+ {
+ List<?> data = ((Diagnostic)element).getData();
+ if (!data.isEmpty())
+ {
+ Object object = data.get(0);
+ if (object instanceof EModelElement)
+ {
+ EModelElement modelElement = (EModelElement)object;
+ return ElementHandler.getLabel(modelElement);
+ }
+
+ if (object instanceof EObject)
+ {
+
+ IItemLabelProvider labelProvider = (IItemLabelProvider)adapterFactory.adapt(object, IItemLabelProvider.class);
+ if (labelProvider != null)
+ {
+ return labelProvider.getText(object);
+ }
+ }
+ }
+
+ return null;
+ }
+ }
+
+ private Diagnostic[] getSelectedDiagnostics()
+ {
+ IStructuredSelection selection = problemViewer.getStructuredSelection();
+ if (selection.isEmpty())
+ {
+ return DiagnosticResolution.NO_DIAGNOSTICS;
+ }
+
+ List<Diagnostic> result = new ArrayList<Diagnostic>();
+ for (Iterator<?> it = selection.iterator(); it.hasNext();)
+ {
+ result.add((Diagnostic)it.next());
+ }
+
+ return result.toArray(new Diagnostic[result.size()]);
+ }
+
+ private void showQuickFixes()
+ {
+ final Map<DiagnosticResolution, Collection<Diagnostic>> resolutionsMap = new LinkedHashMap<DiagnosticResolution, Collection<Diagnostic>>();
+ final Diagnostic[] selectedDiagnostics = getSelectedDiagnostics();
+ if (selectedDiagnostics == null || selectedDiagnostics.length == 0)
+ {
+ return;
+ }
+
+ final Diagnostic firstSelectedDiagnostic = selectedDiagnostics[0];
+
+ IRunnableWithProgress runnable = new IRunnableWithProgress()
+ {
+ public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException
+ {
+ monitor.beginTask("Finding fixes", 100);
+ monitor.worked(20);
+
+ DiagnosticResolution[] resolutions = DiagnosticResolution.getResolutions(firstSelectedDiagnostic, EvolutionEditor.this);
+ int progressCount = 80;
+ if (resolutions.length > 1)
+ {
+ progressCount = progressCount / resolutions.length;
+ }
+
+ for (DiagnosticResolution resolution : resolutions)
+ {
+ Diagnostic[] other = resolution.findOtherDiagnostics(allDiagnostics);
+ if (containsAllButFirst(other, selectedDiagnostics))
+ {
+ Collection<Diagnostic> diagnostics = new LinkedHashSet<Diagnostic>(other.length + 1);
+ diagnostics.add(firstSelectedDiagnostic);
+ diagnostics.addAll(Arrays.asList(other));
+ resolutionsMap.put(resolution, diagnostics);
+ }
+
+ monitor.worked(progressCount);
+ }
+
+ monitor.done();
+ }
+ };
+
+ IWorkbenchPartSite site = getSite();
+ IWorkbenchSiteProgressService service = Adapters.adapt(site, IWorkbenchSiteProgressService.class);
+
+ Shell shell = site.getShell();
+ IRunnableContext context = new ProgressMonitorDialog(shell);
+
+ try
+ {
+ if (service == null)
+ {
+ PlatformUI.getWorkbench().getProgressService().runInUI(context, runnable, null);
+ }
+ else
+ {
+ service.runInUI(context, runnable, null);
+ }
+ }
+ catch (InvocationTargetException ex)
+ {
+ throw WrappedException.wrap(ex);
+ }
+ catch (InterruptedException ex)
+ {
+ throw WrappedException.wrap(ex);
+ }
+
+ String description = StringUtil.safe(firstSelectedDiagnostic.getMessage());
+ if (resolutionsMap.isEmpty())
+ {
+ if (selectedDiagnostics.length == 1)
+ {
+ MessageDialog.openInformation(shell, "Quick Fix", NLS.bind("No fixes available for:\n\n {0}.", new Object[] { description }));
+ }
+ else
+ {
+ MessageDialog.openInformation(shell, "Quick Fix", "The selected problems do not have a common applicable quick fix.");
+ }
+ }
+ else
+ {
+ String problemDescription = NLS.bind("Select the fix for ''{0}''.", description);
+
+ Wizard wizard = new QuickFixWizard(problemDescription, selectedDiagnostics, resolutionsMap, editingDomain);
+ wizard.setWindowTitle("Quick Fix");
+
+ WizardDialog dialog = new QuickFixWizardDialog(shell, wizard);
+ dialog.open();
+ }
+ }
+
+ /**
+ * Checks whether the given extent contains all but the first element from the given members array.
+ *
+ * @param extent the array which should contain the elements
+ * @param members the elements to check
+ * @return <code>true</code> if all but the first element are inside the extent
+ */
+ private static boolean containsAllButFirst(Object[] extent, Object[] members)
+ {
+ outer: for (int i = 1; i < members.length; i++)
+ {
+ for (int j = 0; j < extent.length; j++)
+ {
+ if (members[i] == extent[j])
+ {
+ continue outer;
+ }
+ }
+
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * @author Eike Stepper
+ */
+ private static final class QuickFixWizardDialog extends WizardDialog
+ {
+ public QuickFixWizardDialog(Shell parentShell, IWizard newWizard)
+ {
+ super(parentShell, newWizard);
+ setShellStyle(SWT.CLOSE | SWT.MAX | SWT.TITLE | SWT.BORDER | SWT.MODELESS | SWT.RESIZE | getDefaultOrientation());
+ }
+ }
+
+ protected void handleDiagnostics(List<Diagnostic> diagnostics)
+ {
+ List<Diagnostic> result = new ArrayList<Diagnostic>();
+ flattenDiagnostics(diagnostics, result);
+ allDiagnostics = result.toArray(new Diagnostic[result.size()]);
+
+ if (problemViewer != null && !problemViewer.getControl().isDisposed())
+ {
+ problemViewer.setInput(diagnostics);
+ }
+ }
+
+ private void flattenDiagnostics(List<Diagnostic> diagnostics, List<Diagnostic> result)
+ {
+ for (Diagnostic diagnostic : diagnostics)
+ {
+ result.add(diagnostic);
+ flattenDiagnostics(diagnostic.getChildren(), result);
+ }
+ }
+
+ /**
+ * If there is just one page in the multi-page editor part,
+ * this hides the single tab at the bottom.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void hideTabs()
+ {
+ if (getPageCount() <= 1)
+ {
+ setPageText(0, "");
+ if (getContainer() instanceof CTabFolder)
+ {
+ Point point = getContainer().getSize();
+ Rectangle clientArea = getContainer().getClientArea();
+ getContainer().setSize(point.x, 2 * point.y - clientArea.height - clientArea.y);
+ }
+ }
+ }
+
+ /**
+ * If there is more than one page in the multi-page editor part,
+ * this shows the tabs at the bottom.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void showTabs()
+ {
+ if (getPageCount() > 1)
+ {
+ setPageText(0, getString("_UI_SelectionPage_label"));
+ if (getContainer() instanceof CTabFolder)
+ {
+ Point point = getContainer().getSize();
+ Rectangle clientArea = getContainer().getClientArea();
+ getContainer().setSize(point.x, clientArea.height + clientArea.y);
+ }
+ }
+ }
+
+ /**
+ * This is used to track the active viewer.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected void pageChange(int pageIndex)
+ {
+ super.pageChange(pageIndex);
+
+ if (contentOutlinePage != null)
+ {
+ handleContentOutlineSelection(contentOutlinePage.getSelection());
+ }
+ }
+
+ /**
+ * This is how the framework determines which interfaces we implement.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public <T> T getAdapter(Class<T> key)
+ {
+ if (key.equals(IContentOutlinePage.class))
+ {
+ return showOutlineView() ? key.cast(getContentOutlinePage()) : null;
+ }
+ else if (key.equals(IPropertySheetPage.class))
+ {
+ return key.cast(getPropertySheetPage());
+ }
+ else if (key.equals(IGotoMarker.class))
+ {
+ return key.cast(this);
+ }
+ else if (key.equals(IFindReplaceTarget.class))
+ {
+ return FindAndReplaceTarget.getAdapter(key, this, EvolutionEditorPlugin.getPlugin());
+ }
+ else
+ {
+ return super.getAdapter(key);
+ }
+ }
+
+ /**
+ * This accesses a cached version of the content outliner.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public IContentOutlinePage getContentOutlinePage()
+ {
+ if (contentOutlinePage == null)
+ {
+ // The content outline is just a tree.
+ //
+ class MyContentOutlinePage extends ContentOutlinePage
+ {
+ @Override
+ public void createControl(Composite parent)
+ {
+ super.createControl(parent);
+ contentOutlineViewer = getTreeViewer();
+ contentOutlineViewer.addSelectionChangedListener(this);
+
+ // Set up the tree viewer.
+ //
+ contentOutlineViewer.setUseHashlookup(true);
+ contentOutlineViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+ contentOutlineViewer.setLabelProvider(new DelegatingStyledCellLabelProvider.FontAndColorProvider(
+ new DecoratingColumLabelProvider.StyledLabelProvider(new AdapterFactoryLabelProvider.StyledLabelProvider(adapterFactory, contentOutlineViewer),
+ new DiagnosticDecorator.Styled(editingDomain, contentOutlineViewer, EvolutionEditorPlugin.getPlugin().getDialogSettings()))));
+ contentOutlineViewer.setInput(editingDomain.getResourceSet());
+
+ new ColumnViewerInformationControlToolTipSupport(contentOutlineViewer,
+ new DiagnosticDecorator.Styled.EditingDomainLocationListener(editingDomain, contentOutlineViewer));
+
+ // Make sure our popups work.
+ //
+ createContextMenuFor(contentOutlineViewer);
+
+ if (!editingDomain.getResourceSet().getResources().isEmpty())
+ {
+ // Select the root object in the view.
+ //
+ contentOutlineViewer.setSelection(new StructuredSelection(editingDomain.getResourceSet().getResources().get(0)), true);
+ }
+ }
+
+ @Override
+ public void makeContributions(IMenuManager menuManager, IToolBarManager toolBarManager, IStatusLineManager statusLineManager)
+ {
+ super.makeContributions(menuManager, toolBarManager, statusLineManager);
+ contentOutlineStatusLineManager = statusLineManager;
+ }
+
+ @Override
+ public void setActionBars(IActionBars actionBars)
+ {
+ super.setActionBars(actionBars);
+ getActionBarContributor().shareGlobalActions(this, actionBars);
+ }
+ }
+
+ contentOutlinePage = new MyContentOutlinePage();
+
+ // Listen to selection so that we can handle it is a special way.
+ //
+ contentOutlinePage.addSelectionChangedListener(new ISelectionChangedListener()
+ {
+ // This ensures that we handle selections correctly.
+ //
+ public void selectionChanged(SelectionChangedEvent event)
+ {
+ handleContentOutlineSelection(event.getSelection());
+ }
+ });
+ }
+
+ return contentOutlinePage;
+ }
+
+ /**
+ * @author Eike Stepper
+ */
+ private static class DelegatingItemPropertyDescriptor implements IItemPropertyDescriptor
+ {
+ private final IItemPropertyDescriptor itemPropertyDescriptor;
+
+ private DelegatingItemPropertyDescriptor(IItemPropertyDescriptor itemPropertyDescriptor)
+ {
+ this.itemPropertyDescriptor = itemPropertyDescriptor;
+ }
+
+ public Object getPropertyValue(Object object)
+ {
+ return itemPropertyDescriptor.getPropertyValue(object);
+ }
+
+ public boolean isPropertySet(Object object)
+ {
+ return itemPropertyDescriptor.isPropertySet(object);
+ }
+
+ public boolean canSetProperty(Object object)
+ {
+ return itemPropertyDescriptor.canSetProperty(object);
+ }
+
+ public void resetPropertyValue(Object object)
+ {
+ itemPropertyDescriptor.resetPropertyValue(object);
+ }
+
+ public void setPropertyValue(Object object, Object value)
+ {
+ itemPropertyDescriptor.setPropertyValue(object, value);
+ }
+
+ public String getCategory(Object object)
+ {
+ return itemPropertyDescriptor.getCategory(object);
+ }
+
+ public String getDescription(Object object)
+ {
+ return itemPropertyDescriptor.getDescription(object);
+ }
+
+ public String getDisplayName(Object object)
+ {
+ return itemPropertyDescriptor.getDisplayName(object);
+ }
+
+ public String[] getFilterFlags(Object object)
+ {
+ return itemPropertyDescriptor.getFilterFlags(object);
+ }
+
+ public Object getHelpContextIds(Object object)
+ {
+ return itemPropertyDescriptor.getHelpContextIds(object);
+ }
+
+ public String getId(Object object)
+ {
+ return itemPropertyDescriptor.getId(object);
+ }
+
+ public IItemLabelProvider getLabelProvider(Object object)
+ {
+ return itemPropertyDescriptor.getLabelProvider(object);
+ }
+
+ public boolean isCompatibleWith(Object object, Object anotherObject, IItemPropertyDescriptor anotherPropertyDescriptor)
+ {
+ return itemPropertyDescriptor.isCompatibleWith(object, anotherObject, anotherPropertyDescriptor);
+ }
+
+ public Object getFeature(Object object)
+ {
+ return itemPropertyDescriptor.getFeature(object);
+ }
+
+ public boolean isMany(Object object)
+ {
+ return itemPropertyDescriptor.isMany(object);
+ }
+
+ public Collection<?> getChoiceOfValues(Object object)
+ {
+ return itemPropertyDescriptor.getChoiceOfValues(object);
+ }
+
+ public boolean isMultiLine(Object object)
+ {
+ return itemPropertyDescriptor.isMultiLine(object);
+ }
+
+ public boolean isSortChoices(Object object)
+ {
+ return itemPropertyDescriptor.isSortChoices(object);
+ }
+ }
+
+ /**
+ * This accesses a cached version of the property sheet.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ public IPropertySheetPage getPropertySheetPage()
+ {
+ PropertySheetPage propertySheetPage = new ExtendedPropertySheetPage(editingDomain, ExtendedPropertySheetPage.Decoration.LIVE,
+ EvolutionEditorPlugin.getPlugin().getDialogSettings(), 0, true)
+ {
+ {
+ setSorter(new PropertySheetSorter()
+ {
+ @Override
+ public void sort(IPropertySheetEntry[] entries)
+ {
+ // Intentionally left empty
+ }
+ });
+ }
+
+ @Override
+ public void setSelectionToViewer(List<?> selection)
+ {
+ EvolutionEditor.this.setSelectionToViewer(selection);
+ EvolutionEditor.this.setFocus();
+ }
+
+ @Override
+ public void setActionBars(IActionBars actionBars)
+ {
+ super.setActionBars(actionBars);
+ getActionBarContributor().shareGlobalActions(this, actionBars);
+ }
+ };
+
+ propertySheetPage.setPropertySourceProvider(new AdapterFactoryContentProvider(adapterFactory)
+ {
+ @Override
+ protected IPropertySource createPropertySource(Object object, IItemPropertySource itemPropertySource)
+ {
+ if (isReadOnlyObject(object))
+ {
+ /**
+ * Create no cell editor for read-only objects.
+ */
+ return new PropertySource(object, itemPropertySource)
+ {
+ @Override
+ protected IPropertyDescriptor createPropertyDescriptor(final IItemPropertyDescriptor itemPropertyDescriptor)
+ {
+ return super.createPropertyDescriptor(new DelegatingItemPropertyDescriptor(itemPropertyDescriptor)
+ {
+ @Override
+ public boolean canSetProperty(Object object)
+ {
+ return false;
+ }
+ });
+ }
+ };
+ }
+ else if (object instanceof EModelElement && evolution.containsElement((EModelElement)object))
+ {
+ /**
+ * Eliminate released elements from selection choices.
+ */
+ return new PropertySource(object, itemPropertySource)
+ {
+ @Override
+ protected IPropertyDescriptor createPropertyDescriptor(final IItemPropertyDescriptor itemPropertyDescriptor)
+ {
+ return super.createPropertyDescriptor(new DelegatingItemPropertyDescriptor(itemPropertyDescriptor)
+ {
+ @Override
+ public Collection<?> getChoiceOfValues(Object object)
+ {
+ Collection<?> values = super.getChoiceOfValues(object);
+ if (values != null)
+ {
+ for (Iterator<?> it = values.iterator(); it.hasNext();)
+ {
+ Object value = it.next();
+ if (value instanceof EModelElement)
+ {
+ EModelElement modelElement = (EModelElement)value;
+ if (!evolution.containsElement(modelElement))
+ {
+ it.remove();
+ }
+ }
+ }
+ }
+
+ return values;
+ }
+ });
+ }
+ };
+ }
+
+ return super.createPropertySource(object, itemPropertySource);
+ }
+ });
+
+ propertySheetPages.add(propertySheetPage);
+
+ return propertySheetPage;
+ }
+
+ /**
+ * This deals with how we want selection in the outliner to affect the other views.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void handleContentOutlineSelection(ISelection selection)
+ {
+ if (selectionViewer != null && !selection.isEmpty() && selection instanceof IStructuredSelection)
+ {
+ Iterator<?> selectedElements = ((IStructuredSelection)selection).iterator();
+ if (selectedElements.hasNext())
+ {
+ // Get the first selected element.
+ //
+ Object selectedElement = selectedElements.next();
+
+ ArrayList<Object> selectionList = new ArrayList<Object>();
+ selectionList.add(selectedElement);
+ while (selectedElements.hasNext())
+ {
+ selectionList.add(selectedElements.next());
+ }
+
+ // Set the selection to the widget.
+ //
+ selectionViewer.setSelection(new StructuredSelection(selectionList));
+ }
+ }
+ }
+
+ /**
+ * This is for implementing {@link IEditorPart} and simply tests the command stack.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public boolean isDirty()
+ {
+ return ((BasicCommandStack)editingDomain.getCommandStack()).isSaveNeeded();
+ }
+
+ /**
+ * This is for implementing {@link IEditorPart} and simply saves the model file.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void doSave(IProgressMonitor progressMonitor)
+ {
+ // Save only resources that have actually changed.
+ //
+ final Map<Object, Object> saveOptions = new HashMap<Object, Object>();
+ saveOptions.put(Resource.OPTION_SAVE_ONLY_IF_CHANGED, Resource.OPTION_SAVE_ONLY_IF_CHANGED_MEMORY_BUFFER);
+ saveOptions.put(Resource.OPTION_LINE_DELIMITER, Resource.OPTION_LINE_DELIMITER_UNSPECIFIED);
+
+ // Do the work within an operation because this is a long running activity that modifies the workbench.
+ //
+ WorkspaceModifyOperation operation = new WorkspaceModifyOperation()
+ {
+ // This is the method that gets invoked when the operation runs.
+ //
+ @Override
+ public void execute(IProgressMonitor monitor)
+ {
+ // Save the resources to the file system.
+ //
+ boolean first = true;
+ List<Resource> resources = editingDomain.getResourceSet().getResources();
+ for (int i = 0; i < resources.size(); ++i)
+ {
+ Resource resource = resources.get(i);
+ if ((first || !resource.getContents().isEmpty() || isPersisted(resource)) && !editingDomain.isReadOnly(resource))
+ {
+ try
+ {
+ long timeStamp = resource.getTimeStamp();
+ resource.save(saveOptions);
+ if (resource.getTimeStamp() != timeStamp)
+ {
+ savedResources.add(resource);
+ }
+ }
+ catch (Exception exception)
+ {
+ resourceToDiagnosticMap.put(resource, analyzeResourceProblems(resource, exception));
+ }
+ first = false;
+ }
+ }
+ }
+ };
+
+ updateProblemIndication = false;
+ try
+ {
+ // This runs the options, and shows progress.
+ //
+ new ProgressMonitorDialog(getSite().getShell()).run(true, false, operation);
+
+ // Refresh the necessary state.
+ //
+ ((BasicCommandStack)editingDomain.getCommandStack()).saveIsDone();
+ firePropertyChange(IEditorPart.PROP_DIRTY);
+ }
+ catch (Exception exception)
+ {
+ // Something went wrong that shouldn't.
+ //
+ EvolutionEditorPlugin.INSTANCE.log(exception);
+ }
+ updateProblemIndication = true;
+ updateProblemIndication();
+ }
+
+ /**
+ * This returns whether something has been persisted to the URI of the specified resource.
+ * The implementation uses the URI converter from the editor's resource set to try to open an input stream.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected boolean isPersisted(Resource resource)
+ {
+ boolean result = false;
+ try
+ {
+ InputStream stream = editingDomain.getResourceSet().getURIConverter().createInputStream(resource.getURI());
+ if (stream != null)
+ {
+ result = true;
+ stream.close();
+ }
+ }
+ catch (IOException e)
+ {
+ // Ignore
+ }
+ return result;
+ }
+
+ /**
+ * This always returns true because it is not currently supported.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public boolean isSaveAsAllowed()
+ {
+ return true;
+ }
+
+ /**
+ * This also changes the editor's input.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void doSaveAs()
+ {
+ SaveAsDialog saveAsDialog = new SaveAsDialog(getSite().getShell());
+ saveAsDialog.open();
+ IPath path = saveAsDialog.getResult();
+ if (path != null)
+ {
+ IFile file = ResourcesPlugin.getWorkspace().getRoot().getFile(path);
+ if (file != null)
+ {
+ doSaveAs(URI.createPlatformResourceURI(file.getFullPath().toString(), true), new FileEditorInput(file));
+ }
+ }
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void doSaveAs(URI uri, IEditorInput editorInput)
+ {
+ editingDomain.getResourceSet().getResources().get(0).setURI(uri);
+ setInputWithNotify(editorInput);
+ setPartName(editorInput.getName());
+ IProgressMonitor progressMonitor = getActionBars().getStatusLineManager() != null ? getActionBars().getStatusLineManager().getProgressMonitor()
+ : new NullProgressMonitor();
+ doSave(progressMonitor);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void gotoMarker(IMarker marker)
+ {
+ List<?> targetObjects = markerHelper.getTargetObjects(editingDomain, marker);
+ if (!targetObjects.isEmpty())
+ {
+ setSelectionToViewer(targetObjects);
+ }
+ }
+
+ /**
+ * This is called during startup.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void init(IEditorSite site, IEditorInput editorInput)
+ {
+ setSite(site);
+ setInputWithNotify(editorInput);
+ setPartName(editorInput.getName());
+ site.setSelectionProvider(this);
+ site.getPage().addPartListener(partListener);
+ ResourcesPlugin.getWorkspace().addResourceChangeListener(resourceChangeListener, IResourceChangeEvent.POST_CHANGE);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void setFocus()
+ {
+ getControl(getActivePage()).setFocus();
+ }
+
+ /**
+ * This implements {@link org.eclipse.jface.viewers.ISelectionProvider}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void addSelectionChangedListener(ISelectionChangedListener listener)
+ {
+ selectionChangedListeners.add(listener);
+ }
+
+ /**
+ * This implements {@link org.eclipse.jface.viewers.ISelectionProvider}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void removeSelectionChangedListener(ISelectionChangedListener listener)
+ {
+ selectionChangedListeners.remove(listener);
+ }
+
+ /**
+ * This implements {@link org.eclipse.jface.viewers.ISelectionProvider} to return this editor's overall selection.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public ISelection getSelection()
+ {
+ return editorSelection;
+ }
+
+ /**
+ * This implements {@link org.eclipse.jface.viewers.ISelectionProvider} to set this editor's overall selection.
+ * Calling this result will notify the listeners.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setSelection(ISelection selection)
+ {
+ editorSelection = selection;
+
+ for (ISelectionChangedListener listener : selectionChangedListeners)
+ {
+ listener.selectionChanged(new SelectionChangedEvent(this, selection));
+ }
+ setStatusLineManager(selection);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setStatusLineManager(ISelection selection)
+ {
+ IStatusLineManager statusLineManager = currentViewer != null && currentViewer == contentOutlineViewer ? contentOutlineStatusLineManager
+ : getActionBars().getStatusLineManager();
+
+ if (statusLineManager != null)
+ {
+ if (selection instanceof IStructuredSelection)
+ {
+ Collection<?> collection = ((IStructuredSelection)selection).toList();
+ switch (collection.size())
+ {
+ case 0:
+ {
+ statusLineManager.setMessage(getString("_UI_NoObjectSelected"));
+ break;
+ }
+ case 1:
+ {
+ String text = new AdapterFactoryItemDelegator(adapterFactory).getText(collection.iterator().next());
+ statusLineManager.setMessage(getString("_UI_SingleObjectSelected", text));
+ break;
+ }
+ default:
+ {
+ statusLineManager.setMessage(getString("_UI_MultiObjectSelected", Integer.toString(collection.size())));
+ break;
+ }
+ }
+ }
+ else
+ {
+ statusLineManager.setMessage("");
+ }
+ }
+ }
+
+ /**
+ * This looks up a string in the plugin's plugin.properties file.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private static String getString(String key)
+ {
+ return EvolutionEditorPlugin.INSTANCE.getString(key);
+ }
+
+ /**
+ * This looks up a string in plugin.properties, making a substitution.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private static String getString(String key, Object s1)
+ {
+ return EvolutionEditorPlugin.INSTANCE.getString(key, new Object[] { s1 });
+ }
+
+ /**
+ * This implements {@link org.eclipse.jface.action.IMenuListener} to help fill the context menus with contributions from the Edit menu.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void menuAboutToShow(IMenuManager menuManager)
+ {
+ ((IMenuListener)getEditorSite().getActionBarContributor()).menuAboutToShow(menuManager);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EditingDomainActionBarContributor getActionBarContributor()
+ {
+ return (EditingDomainActionBarContributor)getEditorSite().getActionBarContributor();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public IActionBars getActionBars()
+ {
+ return getActionBarContributor().getActionBars();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public AdapterFactory getAdapterFactory()
+ {
+ return adapterFactory;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void dispose()
+ {
+ updateProblemIndication = false;
+
+ ResourcesPlugin.getWorkspace().removeResourceChangeListener(resourceChangeListener);
+
+ getSite().getPage().removePartListener(partListener);
+
+ adapterFactory.dispose();
+
+ if (getActionBarContributor().getActiveEditor() == this)
+ {
+ getActionBarContributor().setActiveEditor(null);
+ }
+
+ for (PropertySheetPage propertySheetPage : propertySheetPages)
+ {
+ propertySheetPage.dispose();
+ }
+
+ if (contentOutlinePage != null)
+ {
+ contentOutlinePage.dispose();
+ }
+
+ super.dispose();
+ }
+
+ /**
+ * Returns whether the outline view should be presented to the user.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected boolean showOutlineView()
+ {
+ return false;
+ }
+}
diff --git a/plugins/org.eclipse.emf.cdo.evolution.editor/src/org/eclipse/emf/cdo/evolution/presentation/EvolutionEditorPlugin.java b/plugins/org.eclipse.emf.cdo.evolution.editor/src/org/eclipse/emf/cdo/evolution/presentation/EvolutionEditorPlugin.java
new file mode 100644
index 0000000000..8aa42e9f46
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution.editor/src/org/eclipse/emf/cdo/evolution/presentation/EvolutionEditorPlugin.java
@@ -0,0 +1,96 @@
+/**
+ */
+package org.eclipse.emf.cdo.evolution.presentation;
+
+import org.eclipse.emf.common.EMFPlugin;
+import org.eclipse.emf.common.ui.EclipseUIPlugin;
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.ecore.provider.EcoreEditPlugin;
+
+/**
+ * This is the central singleton for the Evolution editor plugin.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public final class EvolutionEditorPlugin extends EMFPlugin
+{
+ public static final String PLUGIN_ID = "org.eclipse.emf.cdo.evolution.editor";
+
+ /**
+ * Keep track of the singleton.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static final EvolutionEditorPlugin INSTANCE = new EvolutionEditorPlugin();
+
+ /**
+ * Keep track of the singleton.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private static Implementation plugin;
+
+ /**
+ * Create the instance.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EvolutionEditorPlugin()
+ {
+ super(new ResourceLocator[] { EcoreEditPlugin.INSTANCE, });
+ }
+
+ /**
+ * Returns the singleton instance of the Eclipse plugin.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the singleton instance.
+ * @generated
+ */
+ @Override
+ public ResourceLocator getPluginResourceLocator()
+ {
+ return plugin;
+ }
+
+ /**
+ * Returns the singleton instance of the Eclipse plugin.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the singleton instance.
+ * @generated
+ */
+ public static Implementation getPlugin()
+ {
+ return plugin;
+ }
+
+ /**
+ * The actual implementation of the Eclipse <b>Plugin</b>.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static class Implementation extends EclipseUIPlugin
+ {
+ /**
+ * Creates an instance.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public Implementation()
+ {
+ super();
+
+ // Remember the static instance.
+ //
+ plugin = this;
+ }
+ }
+
+}
diff --git a/plugins/org.eclipse.emf.cdo.evolution.editor/src/org/eclipse/emf/cdo/evolution/presentation/EvolutionModelWizard.java b/plugins/org.eclipse.emf.cdo.evolution.editor/src/org/eclipse/emf/cdo/evolution/presentation/EvolutionModelWizard.java
new file mode 100644
index 0000000000..1e7b23d1f7
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution.editor/src/org/eclipse/emf/cdo/evolution/presentation/EvolutionModelWizard.java
@@ -0,0 +1,657 @@
+/**
+ */
+package org.eclipse.emf.cdo.evolution.presentation;
+
+import org.eclipse.emf.cdo.evolution.EvolutionFactory;
+import org.eclipse.emf.cdo.evolution.EvolutionPackage;
+import org.eclipse.emf.cdo.evolution.provider.EvolutionEditPlugin;
+
+import org.eclipse.emf.common.CommonPlugin;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EClassifier;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+import org.eclipse.emf.ecore.xmi.XMLResource;
+import org.eclipse.emf.edit.ui.provider.ExtendedImageRegistry;
+
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.ui.INewWizard;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.actions.WorkspaceModifyOperation;
+import org.eclipse.ui.dialogs.WizardNewFileCreationPage;
+import org.eclipse.ui.part.FileEditorInput;
+import org.eclipse.ui.part.ISetSelectionTarget;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.MissingResourceException;
+import java.util.StringTokenizer;
+
+/**
+ * This is a simple wizard for creating a new model file.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class EvolutionModelWizard extends Wizard implements INewWizard
+{
+ /**
+ * The supported extensions for created files.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static final List<String> FILE_EXTENSIONS = Collections
+ .unmodifiableList(Arrays.asList(EvolutionEditorPlugin.INSTANCE.getString("_UI_EvolutionEditorFilenameExtensions").split("\\s*,\\s*")));
+
+ /**
+ * A formatted list of supported file extensions, suitable for display.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static final String FORMATTED_FILE_EXTENSIONS = EvolutionEditorPlugin.INSTANCE.getString("_UI_EvolutionEditorFilenameExtensions")
+ .replaceAll("\\s*,\\s*", ", ");
+
+ /**
+ * This caches an instance of the model package.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected EvolutionPackage evolutionPackage = EvolutionPackage.eINSTANCE;
+
+ /**
+ * This caches an instance of the model factory.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected EvolutionFactory evolutionFactory = evolutionPackage.getEvolutionFactory();
+
+ /**
+ * This is the file creation page.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected EvolutionModelWizardNewFileCreationPage newFileCreationPage;
+
+ /**
+ * This is the initial object creation page.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected EvolutionModelWizardInitialObjectCreationPage initialObjectCreationPage;
+
+ /**
+ * Remember the selection during initialization for populating the default container.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected IStructuredSelection selection;
+
+ /**
+ * Remember the workbench during initialization.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected IWorkbench workbench;
+
+ /**
+ * Caches the names of the types that can be created as the root object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected List<String> initialObjectNames;
+
+ /**
+ * This just records the information.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void init(IWorkbench workbench, IStructuredSelection selection)
+ {
+ this.workbench = workbench;
+ this.selection = selection;
+ setWindowTitle(EvolutionEditorPlugin.INSTANCE.getString("_UI_Wizard_label"));
+ setDefaultPageImageDescriptor(ExtendedImageRegistry.INSTANCE.getImageDescriptor(EvolutionEditorPlugin.INSTANCE.getImage("full/wizban/NewEvolution")));
+ }
+
+ /**
+ * Returns the names of the types that can be created as the root object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected Collection<String> getInitialObjectNames()
+ {
+ if (initialObjectNames == null)
+ {
+ initialObjectNames = new ArrayList<String>();
+ for (EClassifier eClassifier : evolutionPackage.getEClassifiers())
+ {
+ if (eClassifier instanceof EClass)
+ {
+ EClass eClass = (EClass)eClassifier;
+ if (!eClass.isAbstract())
+ {
+ initialObjectNames.add(eClass.getName());
+ }
+ }
+ }
+ Collections.sort(initialObjectNames, CommonPlugin.INSTANCE.getComparator());
+ }
+ return initialObjectNames;
+ }
+
+ /**
+ * Create a new model.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected EObject createInitialModel()
+ {
+ EClass eClass = (EClass)evolutionPackage.getEClassifier(initialObjectCreationPage.getInitialObjectName());
+ EObject rootObject = evolutionFactory.create(eClass);
+ return rootObject;
+ }
+
+ /**
+ * Do the work after everything is specified.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public boolean performFinish()
+ {
+ try
+ {
+ // Remember the file.
+ //
+ final IFile modelFile = getModelFile();
+
+ // Do the work within an operation.
+ //
+ WorkspaceModifyOperation operation = new WorkspaceModifyOperation()
+ {
+ @Override
+ protected void execute(IProgressMonitor progressMonitor)
+ {
+ try
+ {
+ // Create a resource set
+ //
+ ResourceSet resourceSet = new ResourceSetImpl();
+
+ // Get the URI of the model file.
+ //
+ URI fileURI = URI.createPlatformResourceURI(modelFile.getFullPath().toString(), true);
+
+ // Create a resource for this file.
+ //
+ Resource resource = resourceSet.createResource(fileURI);
+
+ // Add the initial model object to the contents.
+ //
+ EObject rootObject = createInitialModel();
+ if (rootObject != null)
+ {
+ resource.getContents().add(rootObject);
+ }
+
+ // Save the contents of the resource to the file system.
+ //
+ Map<Object, Object> options = new HashMap<Object, Object>();
+ options.put(XMLResource.OPTION_ENCODING, initialObjectCreationPage.getEncoding());
+ resource.save(options);
+ }
+ catch (Exception exception)
+ {
+ EvolutionEditorPlugin.INSTANCE.log(exception);
+ }
+ finally
+ {
+ progressMonitor.done();
+ }
+ }
+ };
+
+ getContainer().run(false, false, operation);
+
+ // Select the new file resource in the current view.
+ //
+ IWorkbenchWindow workbenchWindow = workbench.getActiveWorkbenchWindow();
+ IWorkbenchPage page = workbenchWindow.getActivePage();
+ final IWorkbenchPart activePart = page.getActivePart();
+ if (activePart instanceof ISetSelectionTarget)
+ {
+ final ISelection targetSelection = new StructuredSelection(modelFile);
+ getShell().getDisplay().asyncExec(new Runnable()
+ {
+ public void run()
+ {
+ ((ISetSelectionTarget)activePart).selectReveal(targetSelection);
+ }
+ });
+ }
+
+ // Open an editor on the new file.
+ //
+ try
+ {
+ page.openEditor(new FileEditorInput(modelFile), workbench.getEditorRegistry().getDefaultEditor(modelFile.getFullPath().toString()).getId());
+ }
+ catch (PartInitException exception)
+ {
+ MessageDialog.openError(workbenchWindow.getShell(), EvolutionEditorPlugin.INSTANCE.getString("_UI_OpenEditorError_label"), exception.getMessage());
+ return false;
+ }
+
+ return true;
+ }
+ catch (Exception exception)
+ {
+ EvolutionEditorPlugin.INSTANCE.log(exception);
+ return false;
+ }
+ }
+
+ /**
+ * This is the one page of the wizard.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public class EvolutionModelWizardNewFileCreationPage extends WizardNewFileCreationPage
+ {
+ /**
+ * Pass in the selection.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EvolutionModelWizardNewFileCreationPage(String pageId, IStructuredSelection selection)
+ {
+ super(pageId, selection);
+ }
+
+ /**
+ * The framework calls this to see if the file is correct.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected boolean validatePage()
+ {
+ if (super.validatePage())
+ {
+ String extension = new Path(getFileName()).getFileExtension();
+ if (extension == null || !FILE_EXTENSIONS.contains(extension))
+ {
+ String key = FILE_EXTENSIONS.size() > 1 ? "_WARN_FilenameExtensions" : "_WARN_FilenameExtension";
+ setErrorMessage(EvolutionEditorPlugin.INSTANCE.getString(key, new Object[] { FORMATTED_FILE_EXTENSIONS }));
+ return false;
+ }
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public IFile getModelFile()
+ {
+ return ResourcesPlugin.getWorkspace().getRoot().getFile(getContainerFullPath().append(getFileName()));
+ }
+ }
+
+ /**
+ * This is the page where the type of object to create is selected.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public class EvolutionModelWizardInitialObjectCreationPage extends WizardPage
+ {
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected Combo initialObjectField;
+
+ /**
+ * @generated
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ */
+ protected List<String> encodings;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected Combo encodingField;
+
+ /**
+ * Pass in the selection.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EvolutionModelWizardInitialObjectCreationPage(String pageId)
+ {
+ super(pageId);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void createControl(Composite parent)
+ {
+ Composite composite = new Composite(parent, SWT.NONE);
+ {
+ GridLayout layout = new GridLayout();
+ layout.numColumns = 1;
+ layout.verticalSpacing = 12;
+ composite.setLayout(layout);
+
+ GridData data = new GridData();
+ data.verticalAlignment = GridData.FILL;
+ data.grabExcessVerticalSpace = true;
+ data.horizontalAlignment = GridData.FILL;
+ composite.setLayoutData(data);
+ }
+
+ Label containerLabel = new Label(composite, SWT.LEFT);
+ {
+ containerLabel.setText(EvolutionEditorPlugin.INSTANCE.getString("_UI_ModelObject"));
+
+ GridData data = new GridData();
+ data.horizontalAlignment = GridData.FILL;
+ containerLabel.setLayoutData(data);
+ }
+
+ initialObjectField = new Combo(composite, SWT.BORDER);
+ {
+ GridData data = new GridData();
+ data.horizontalAlignment = GridData.FILL;
+ data.grabExcessHorizontalSpace = true;
+ initialObjectField.setLayoutData(data);
+ }
+
+ for (String objectName : getInitialObjectNames())
+ {
+ initialObjectField.add(getLabel(objectName));
+ }
+
+ if (initialObjectField.getItemCount() == 1)
+ {
+ initialObjectField.select(0);
+ }
+ initialObjectField.addModifyListener(validator);
+
+ Label encodingLabel = new Label(composite, SWT.LEFT);
+ {
+ encodingLabel.setText(EvolutionEditorPlugin.INSTANCE.getString("_UI_XMLEncoding"));
+
+ GridData data = new GridData();
+ data.horizontalAlignment = GridData.FILL;
+ encodingLabel.setLayoutData(data);
+ }
+ encodingField = new Combo(composite, SWT.BORDER);
+ {
+ GridData data = new GridData();
+ data.horizontalAlignment = GridData.FILL;
+ data.grabExcessHorizontalSpace = true;
+ encodingField.setLayoutData(data);
+ }
+
+ for (String encoding : getEncodings())
+ {
+ encodingField.add(encoding);
+ }
+
+ encodingField.select(0);
+ encodingField.addModifyListener(validator);
+
+ setPageComplete(validatePage());
+ setControl(composite);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected ModifyListener validator = new ModifyListener()
+ {
+ public void modifyText(ModifyEvent e)
+ {
+ setPageComplete(validatePage());
+ }
+ };
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected boolean validatePage()
+ {
+ return getInitialObjectName() != null && getEncodings().contains(encodingField.getText());
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void setVisible(boolean visible)
+ {
+ super.setVisible(visible);
+ if (visible)
+ {
+ if (initialObjectField.getItemCount() == 1)
+ {
+ initialObjectField.clearSelection();
+ encodingField.setFocus();
+ }
+ else
+ {
+ encodingField.clearSelection();
+ initialObjectField.setFocus();
+ }
+ }
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public String getInitialObjectName()
+ {
+ String label = initialObjectField.getText();
+
+ for (String name : getInitialObjectNames())
+ {
+ if (getLabel(name).equals(label))
+ {
+ return name;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public String getEncoding()
+ {
+ return encodingField.getText();
+ }
+
+ /**
+ * Returns the label for the specified type name.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected String getLabel(String typeName)
+ {
+ try
+ {
+ return EvolutionEditPlugin.INSTANCE.getString("_UI_" + typeName + "_type");
+ }
+ catch (MissingResourceException mre)
+ {
+ EvolutionEditorPlugin.INSTANCE.log(mre);
+ }
+ return typeName;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected Collection<String> getEncodings()
+ {
+ if (encodings == null)
+ {
+ encodings = new ArrayList<String>();
+ for (StringTokenizer stringTokenizer = new StringTokenizer(EvolutionEditorPlugin.INSTANCE.getString("_UI_XMLEncodingChoices")); stringTokenizer
+ .hasMoreTokens();)
+ {
+ encodings.add(stringTokenizer.nextToken());
+ }
+ }
+ return encodings;
+ }
+ }
+
+ /**
+ * The framework calls this to create the contents of the wizard.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void addPages()
+ {
+ // Create a page, set the title, and the initial model file name.
+ //
+ newFileCreationPage = new EvolutionModelWizardNewFileCreationPage("Whatever", selection);
+ newFileCreationPage.setTitle(EvolutionEditorPlugin.INSTANCE.getString("_UI_EvolutionModelWizard_label"));
+ newFileCreationPage.setDescription(EvolutionEditorPlugin.INSTANCE.getString("_UI_EvolutionModelWizard_description"));
+ newFileCreationPage.setFileName(EvolutionEditorPlugin.INSTANCE.getString("_UI_EvolutionEditorFilenameDefaultBase") + "." + FILE_EXTENSIONS.get(0));
+ addPage(newFileCreationPage);
+
+ // Try and get the resource selection to determine a current directory for the file dialog.
+ //
+ if (selection != null && !selection.isEmpty())
+ {
+ // Get the resource...
+ //
+ Object selectedElement = selection.iterator().next();
+ if (selectedElement instanceof IResource)
+ {
+ // Get the resource parent, if its a file.
+ //
+ IResource selectedResource = (IResource)selectedElement;
+ if (selectedResource.getType() == IResource.FILE)
+ {
+ selectedResource = selectedResource.getParent();
+ }
+
+ // This gives us a directory...
+ //
+ if (selectedResource instanceof IFolder || selectedResource instanceof IProject)
+ {
+ // Set this for the container.
+ //
+ newFileCreationPage.setContainerFullPath(selectedResource.getFullPath());
+
+ // Make up a unique new name here.
+ //
+ String defaultModelBaseFilename = EvolutionEditorPlugin.INSTANCE.getString("_UI_EvolutionEditorFilenameDefaultBase");
+ String defaultModelFilenameExtension = FILE_EXTENSIONS.get(0);
+ String modelFilename = defaultModelBaseFilename + "." + defaultModelFilenameExtension;
+ for (int i = 1; ((IContainer)selectedResource).findMember(modelFilename) != null; ++i)
+ {
+ modelFilename = defaultModelBaseFilename + i + "." + defaultModelFilenameExtension;
+ }
+ newFileCreationPage.setFileName(modelFilename);
+ }
+ }
+ }
+ initialObjectCreationPage = new EvolutionModelWizardInitialObjectCreationPage("Whatever2");
+ initialObjectCreationPage.setTitle(EvolutionEditorPlugin.INSTANCE.getString("_UI_EvolutionModelWizard_label"));
+ initialObjectCreationPage.setDescription(EvolutionEditorPlugin.INSTANCE.getString("_UI_Wizard_initial_object_description"));
+ addPage(initialObjectCreationPage);
+ }
+
+ /**
+ * Get the file from the page.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public IFile getModelFile()
+ {
+ return newFileCreationPage.getModelFile();
+ }
+
+}
diff --git a/plugins/org.eclipse.emf.cdo.evolution.editor/src/org/eclipse/emf/cdo/evolution/presentation/quickfix/BasicDiagnosticResolution.java b/plugins/org.eclipse.emf.cdo.evolution.editor/src/org/eclipse/emf/cdo/evolution/presentation/quickfix/BasicDiagnosticResolution.java
new file mode 100644
index 0000000000..91cbd8a227
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution.editor/src/org/eclipse/emf/cdo/evolution/presentation/quickfix/BasicDiagnosticResolution.java
@@ -0,0 +1,138 @@
+/*
+ * Copyright (c) 2004-2018 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.evolution.presentation.quickfix;
+
+import org.eclipse.emf.cdo.evolution.util.DiagnosticType;
+
+import org.eclipse.emf.common.util.Diagnostic;
+
+import org.eclipse.swt.graphics.Image;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author Eike Stepper
+ */
+public abstract class BasicDiagnosticResolution extends DiagnosticResolution implements DiagnosticResolutionRelevance
+{
+ private final Image image;
+
+ private final String text;
+
+ private final String description;
+
+ private final boolean multi;
+
+ public BasicDiagnosticResolution(Image image, String text, String description, boolean multi)
+ {
+ this.image = image;
+ this.text = text;
+ this.description = description;
+ this.multi = multi;
+ }
+
+ @Override
+ public Image getImage()
+ {
+ return image;
+ }
+
+ @Override
+ public String getText()
+ {
+ return text;
+ }
+
+ @Override
+ public String getDescription()
+ {
+ return description;
+ }
+
+ public boolean isMulti()
+ {
+ return multi;
+ }
+
+ @Override
+ public Diagnostic[] findOtherDiagnostics(Diagnostic[] diagnostics)
+ {
+ if (multi && diagnostics != null && diagnostics.length != 0)
+ {
+ List<Diagnostic> result = new ArrayList<Diagnostic>();
+ for (int i = 0; i < diagnostics.length; i++)
+ {
+ Diagnostic diagnostic = diagnostics[i];
+ if (isCompatibleDiagnostic(diagnostic))
+ {
+ result.add(diagnostic);
+ }
+ }
+
+ return result.toArray(new Diagnostic[result.size()]);
+ }
+
+ return super.findOtherDiagnostics(diagnostics);
+ }
+
+ protected boolean isCompatibleDiagnostic(Diagnostic diagnostic)
+ {
+ return false;
+ }
+
+ public int getRelevanceForResolution()
+ {
+ return 0;
+ }
+
+ @Override
+ public abstract void run(Diagnostic diagnostic);
+
+ /**
+ * @author Eike Stepper
+ */
+ public static abstract class TypedDiagnosticResolution extends BasicDiagnosticResolution
+ {
+ private final DiagnosticType type;
+
+ public TypedDiagnosticResolution(Image image, String text, String description, boolean multi, String source, int code)
+ {
+ super(image, text, description, multi);
+ type = new DiagnosticType(source, code);
+ }
+
+ public DiagnosticType getType()
+ {
+ return type;
+ }
+
+ protected DiagnosticType[] getCompatibleTypes()
+ {
+ return new DiagnosticType[] { type };
+ }
+
+ @Override
+ protected boolean isCompatibleDiagnostic(Diagnostic diagnostic)
+ {
+ for (int i = 0; i < getCompatibleTypes().length; i++)
+ {
+ DiagnosticType type = getCompatibleTypes()[i];
+ if (type.appliesTo(diagnostic))
+ {
+ return true;
+ }
+ }
+
+ return super.isCompatibleDiagnostic(diagnostic);
+ }
+ }
+}
diff --git a/plugins/org.eclipse.emf.cdo.evolution.editor/src/org/eclipse/emf/cdo/evolution/presentation/quickfix/BasicDiagnosticResolutionGenerator.java b/plugins/org.eclipse.emf.cdo.evolution.editor/src/org/eclipse/emf/cdo/evolution/presentation/quickfix/BasicDiagnosticResolutionGenerator.java
new file mode 100644
index 0000000000..60a5bc7421
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution.editor/src/org/eclipse/emf/cdo/evolution/presentation/quickfix/BasicDiagnosticResolutionGenerator.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2004-2018 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.evolution.presentation.quickfix;
+
+import org.eclipse.emf.cdo.evolution.presentation.EvolutionEditorPlugin;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+/**
+ * @author Eike Stepper
+ */
+public abstract class BasicDiagnosticResolutionGenerator implements DiagnosticResolution.Generator
+{
+ protected ResourceLocator getResourceLocator()
+ {
+ return EvolutionEditorPlugin.INSTANCE;
+ }
+
+ protected String getString(String key, Object... substitutions)
+ {
+ return getString(getResourceLocator(), key, substitutions);
+ }
+
+ private String getString(ResourceLocator resourceLocator, String key, Object[] substitutions)
+ {
+ return substitutions == null || substitutions.length == 0 ? resourceLocator.getString(key) : resourceLocator.getString(key, substitutions);
+ }
+}
diff --git a/plugins/org.eclipse.emf.cdo.evolution.editor/src/org/eclipse/emf/cdo/evolution/presentation/quickfix/DefaultDiagnosticResolutionGenerator.java b/plugins/org.eclipse.emf.cdo.evolution.editor/src/org/eclipse/emf/cdo/evolution/presentation/quickfix/DefaultDiagnosticResolutionGenerator.java
new file mode 100644
index 0000000000..75fd4aa4e5
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution.editor/src/org/eclipse/emf/cdo/evolution/presentation/quickfix/DefaultDiagnosticResolutionGenerator.java
@@ -0,0 +1,403 @@
+/*
+ * Copyright (c) 2004-2018 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.evolution.presentation.quickfix;
+
+import org.eclipse.emf.cdo.evolution.ChangeKind;
+import org.eclipse.emf.cdo.evolution.ElementChange;
+import org.eclipse.emf.cdo.evolution.Evolution;
+import org.eclipse.emf.cdo.evolution.EvolutionFactory;
+import org.eclipse.emf.cdo.evolution.FeaturePathMigration;
+import org.eclipse.emf.cdo.evolution.Model;
+import org.eclipse.emf.cdo.evolution.Release;
+import org.eclipse.emf.cdo.evolution.impl.EvolutionImpl;
+import org.eclipse.emf.cdo.evolution.impl.ModelSetChangeImpl;
+import org.eclipse.emf.cdo.evolution.presentation.quickfix.DiagnosticResolution.Generator;
+import org.eclipse.emf.cdo.evolution.util.DiagnosticID;
+import org.eclipse.emf.cdo.evolution.util.DiagnosticType;
+import org.eclipse.emf.cdo.evolution.util.ElementHandler;
+import org.eclipse.emf.cdo.evolution.util.ElementRunnable;
+import org.eclipse.emf.cdo.evolution.util.EvolutionValidator;
+import org.eclipse.emf.cdo.evolution.util.IDAnnotation;
+
+import org.eclipse.net4j.util.factory.ProductCreationException;
+
+import org.eclipse.emf.common.util.Diagnostic;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EModelElement;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.dialogs.FilteredResourcesSelectionDialog;
+
+import java.util.Collection;
+import java.util.Date;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * @author Eike Stepper
+ */
+public class DefaultDiagnosticResolutionGenerator extends BasicDiagnosticResolutionGenerator
+{
+ public DefaultDiagnosticResolutionGenerator()
+ {
+ }
+
+ public void getResolutions(Diagnostic diagnostic, final Context context)
+ {
+ if (EvolutionValidator.DIAGNOSTIC_SOURCE.equals(diagnostic.getSource()))
+ {
+ int code = diagnostic.getCode();
+ switch (code)
+ {
+ case EvolutionValidator.CODE_NO_MODEL:
+ handleNoModel(diagnostic, context);
+ break;
+
+ case EvolutionValidator.CODE_NO_URI:
+ handleNoURI(diagnostic, context);
+ break;
+
+ case EvolutionValidator.CODE_NO_RESOURCE_SET:
+ break;
+
+ case EvolutionValidator.CODE_RESOURCE_NOT_FOUND:
+ break;
+
+ case EvolutionValidator.CODE_LOAD_PROBLEM:
+ break;
+
+ case EvolutionValidator.CODE_CONTENT_PROBLEM:
+ break;
+
+ case EvolutionValidator.CODE_PACKAGE_MISSING:
+ handlePackageMissing(diagnostic, context);
+ break;
+
+ case EvolutionValidator.CODE_PACKAGE_NOT_UNIQUE:
+ break;
+
+ case EvolutionValidator.CODE_NSURI_NOT_UNIQUE:
+ break;
+
+ case EvolutionValidator.CODE_NSURI_NOT_CHANGED:
+ handleNSURINotChanged(diagnostic, context);
+ break;
+
+ case EvolutionValidator.CODE_ID_ANNOTATION_MISSING:
+ case EvolutionValidator.CODE_ID_WITHOUT_VALUE:
+ handleNoID(diagnostic, context);
+ break;
+
+ case EvolutionValidator.CODE_ID_NOT_UNIQUE:
+ handleIDNotUnique(diagnostic, context);
+ break;
+
+ case EvolutionValidator.CODE_FEATURE_PATH_UNKNOWN:
+ handleFeaturePathUnknown(diagnostic, context);
+ break;
+
+ case EvolutionValidator.CODE_RELEASE:
+ handleRelease(diagnostic, context);
+ break;
+ }
+ }
+ }
+
+ protected void handleNoModel(Diagnostic diagnostic, final Context context)
+ {
+ context.add(new EvolutionDiagnosticResolution(null, getString("_QF_SelectModelsFromWorkspace"), null, false, diagnostic.getCode())
+ {
+ @Override
+ public void run(Diagnostic diagnostic)
+ {
+ Shell shell = context.getEditor().getSite().getShell();
+
+ FilteredResourcesSelectionDialog dialog = new FilteredResourcesSelectionDialog(shell, true, ResourcesPlugin.getWorkspace().getRoot(), IResource.FILE);
+ dialog.setInitialPattern("*.ecore");
+ dialog.open();
+
+ Object[] result = dialog.getResult();
+ if (result == null || result.length == 0)
+ {
+ return;
+ }
+
+ Evolution evolution = (Evolution)diagnostic.getData().get(0);
+ for (Object object : result)
+ {
+ if (object instanceof IFile)
+ {
+ IFile file = (IFile)object;
+
+ Model model = EvolutionFactory.eINSTANCE.createModel(URI.createPlatformResourceURI(file.getFullPath().toString(), true));
+ evolution.getModels().add(model);
+ }
+ }
+ }
+ });
+ }
+
+ protected void handleNoURI(Diagnostic diagnostic, final Context context)
+ {
+ context.add(new EvolutionDiagnosticResolution(null, getString("_QF_SelectModelFromWorkspace"), null, false, diagnostic.getCode())
+ {
+ @Override
+ public void run(Diagnostic diagnostic)
+ {
+ Shell shell = context.getEditor().getSite().getShell();
+
+ FilteredResourcesSelectionDialog dialog = new FilteredResourcesSelectionDialog(shell, false, ResourcesPlugin.getWorkspace().getRoot(), IResource.FILE);
+ dialog.setInitialPattern("*.ecore");
+ dialog.open();
+
+ Object[] result = dialog.getResult();
+ if (result == null || result.length == 0 || !(result[0] instanceof IFile))
+ {
+ return;
+ }
+
+ IFile file = (IFile)result[0];
+ Model model = (Model)diagnostic.getData().get(0);
+ model.setURI(URI.createPlatformResourceURI(file.getFullPath().toString(), true));
+ }
+ });
+ }
+
+ protected void handlePackageMissing(Diagnostic diagnostic, final Context context)
+ {
+ final List<?> data = diagnostic.getData();
+
+ Resource resource = ((EPackage)data.get(2)).eResource();
+ if (resource != null)
+ {
+ final URI uri = resource.getURI();
+ if (uri != null)
+ {
+ context.add(new EvolutionDiagnosticResolution(null, getString("_QF_PackageMissing", uri), null, true, diagnostic.getCode())
+ {
+ @Override
+ public void run(Diagnostic diagnostic)
+ {
+ Model model = EvolutionFactory.eINSTANCE.createModel(uri);
+
+ Evolution evolution = (Evolution)data.get(0);
+ evolution.getModels().add(model);
+ }
+ });
+ }
+ }
+ }
+
+ protected void handleNSURINotChanged(Diagnostic diagnostic, Context context)
+ {
+ Evolution evolution = (Evolution)diagnostic.getData().get(3);
+ final int nextVersion = evolution.getNextReleaseVersion();
+
+ context.add(new EvolutionDiagnosticResolution(null, getString("_QF_SetVersionIntoNamespace", nextVersion), null, true, diagnostic.getCode())
+ {
+ @Override
+ public void run(Diagnostic diagnostic)
+ {
+ EPackage ePackage = (EPackage)diagnostic.getData().get(0);
+ String nsURI = ePackage.getNsURI();
+ if (!nsURI.endsWith("/"))
+ {
+ nsURI += "/";
+ }
+
+ Pattern pattern = Pattern.compile("/v[0-9]+/");
+ Matcher matcher = pattern.matcher(nsURI);
+ if (matcher.find())
+ {
+ int start = matcher.start();
+ int end = matcher.end();
+ String prefix = nsURI.substring(0, start);
+ String suffix = nsURI.substring(end, nsURI.length() - 1);
+
+ nsURI = prefix + "/v" + nextVersion + "/" + suffix;
+ }
+ else
+ {
+ nsURI += "v" + nextVersion;
+ }
+
+ ePackage.setNsURI(nsURI);
+ }
+ });
+
+ context.add(new EvolutionDiagnosticResolution(null, getString("_QF_DisableUniqueNamespaceEnforcement"), null, false, diagnostic.getCode())
+ {
+ @Override
+ public int getRelevanceForResolution()
+ {
+ return -100;
+ }
+
+ @Override
+ public void run(Diagnostic diagnostic)
+ {
+ Evolution evolution = (Evolution)diagnostic.getData().get(3);
+ evolution.setUniqueNamespaces(false);
+ }
+ });
+ }
+
+ protected void handleNoID(Diagnostic diagnostic, final Context context)
+ {
+ context.add(new EvolutionDiagnosticResolution(null, getString("_QF_AssignID"), null, true, diagnostic.getCode())
+ {
+ @Override
+ protected DiagnosticType[] getCompatibleTypes()
+ {
+ return new DiagnosticType[] { getType(), new DiagnosticType(EvolutionValidator.DIAGNOSTIC_SOURCE, EvolutionValidator.CODE_ID_WITHOUT_VALUE) };
+ }
+
+ @Override
+ public void run(Diagnostic diagnostic)
+ {
+ EModelElement modelElement = (EModelElement)diagnostic.getData().get(0);
+ IDAnnotation.ensureValue(modelElement);
+ }
+ });
+ }
+
+ protected void handleIDNotUnique(Diagnostic diagnostic, final Context context)
+ {
+ context.add(new EvolutionDiagnosticResolution(null, getString("_QF_RememberID"), null, true, diagnostic.getCode())
+ {
+ @Override
+ public int getRelevanceForResolution()
+ {
+ return 100;
+ }
+
+ @Override
+ public void run(Diagnostic diagnostic)
+ {
+ EModelElement modelElement = (EModelElement)diagnostic.getData().get(0);
+ String oldValue = IDAnnotation.getValue(modelElement);
+ IDAnnotation.setOldValue(modelElement, oldValue);
+ IDAnnotation.setValue(modelElement, null);
+ IDAnnotation.ensureValue(modelElement);
+ }
+ });
+
+ context.add(new EvolutionDiagnosticResolution(null, getString("_QF_ReplaceID"), null, true, diagnostic.getCode())
+ {
+ @Override
+ public void run(Diagnostic diagnostic)
+ {
+ EModelElement modelElement = (EModelElement)diagnostic.getData().get(0);
+ IDAnnotation.setValue(modelElement, null);
+ IDAnnotation.ensureValue(modelElement);
+ }
+ });
+ }
+
+ protected void handleFeaturePathUnknown(Diagnostic diagnostic, Context context)
+ {
+ final ElementChange elementChange = (ElementChange)diagnostic.getData().get(0);
+ final ChangeKind kind = elementChange.getKind();
+
+ context.add(new EvolutionDiagnosticResolution(null,
+ getString("_QF_SpecifyFeaturePath", kind.getName().toLowerCase(), ElementHandler.getLabel(elementChange.getNewElement())), null, false,
+ diagnostic.getCode())
+ {
+ @Override
+ public void run(Diagnostic diagnostic)
+ {
+ FeaturePathMigration migration = EvolutionFactory.eINSTANCE.createFeaturePathMigration();
+ migration.setDiagnosticID(DiagnosticID.get(diagnostic).getValue());
+ migration.setFromClass(((EStructuralFeature)elementChange.getOldElement()).getEContainingClass());
+ migration.setToClass(((EStructuralFeature)elementChange.getNewElement()).getEContainingClass());
+
+ Evolution evolution = (Evolution)elementChange.getNewModelSet();
+ evolution.getMigrations().add(migration);
+ }
+ });
+ }
+
+ protected void handleRelease(Diagnostic diagnostic, final Context context)
+ {
+ final EvolutionImpl evolution = (EvolutionImpl)diagnostic.getData().get(0);
+ final int nextVersion = evolution.getNextReleaseVersion();
+
+ context.add(new EvolutionDiagnosticResolution(null, getString("_QF_CreateRelease", nextVersion), null, false, diagnostic.getCode())
+ {
+ @Override
+ public void run(Diagnostic diagnostic)
+ {
+ Release release = EvolutionFactory.eINSTANCE.createRelease();
+ release.setDate(new Date());
+ release.setVersion(nextVersion);
+
+ evolution.getReleases().add(release);
+
+ Collection<EPackage> rootPackages = EcoreUtil.copyAll(evolution.getRootPackages());
+ release.getRootPackages().addAll(rootPackages);
+
+ for (EPackage rootPackage : evolution.getRootPackages())
+ {
+ ElementHandler.execute(rootPackage, new ElementRunnable()
+ {
+ public void run(EModelElement modelElement)
+ {
+ IDAnnotation.setOldValue(modelElement, null);
+ }
+ });
+ }
+
+ ModelSetChangeImpl change = (ModelSetChangeImpl)evolution.getChange();
+ if (change != null)
+ {
+ change.reset();
+ evolution.setChange(null);
+ }
+ }
+ });
+ }
+
+ /**
+ * @author Eike Stepper
+ */
+ protected static abstract class EvolutionDiagnosticResolution extends BasicDiagnosticResolution.TypedDiagnosticResolution
+ {
+ protected EvolutionDiagnosticResolution(Image image, String text, String description, boolean multi, int code)
+ {
+ super(image, text, description, multi, EvolutionValidator.DIAGNOSTIC_SOURCE, code);
+ }
+ }
+
+ /**
+ * @author Eike Stepper
+ */
+ public static class Factory extends DiagnosticResolution.Generator.Factory
+ {
+ public Factory()
+ {
+ }
+
+ @Override
+ public Generator create(String description) throws ProductCreationException
+ {
+ return new DefaultDiagnosticResolutionGenerator();
+ }
+ }
+}
diff --git a/plugins/org.eclipse.emf.cdo.evolution.editor/src/org/eclipse/emf/cdo/evolution/presentation/quickfix/DiagnosticResolution.java b/plugins/org.eclipse.emf.cdo.evolution.editor/src/org/eclipse/emf/cdo/evolution/presentation/quickfix/DiagnosticResolution.java
new file mode 100644
index 0000000000..603b7467e4
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution.editor/src/org/eclipse/emf/cdo/evolution/presentation/quickfix/DiagnosticResolution.java
@@ -0,0 +1,120 @@
+/*
+ * Copyright (c) 2004-2018 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.evolution.presentation.quickfix;
+
+import org.eclipse.emf.cdo.evolution.presentation.EvolutionEditor;
+import org.eclipse.emf.cdo.evolution.presentation.quickfix.DiagnosticResolution.Generator.Context;
+
+import org.eclipse.net4j.util.container.IPluginContainer;
+import org.eclipse.net4j.util.factory.ProductCreationException;
+
+import org.eclipse.emf.common.util.Diagnostic;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.swt.graphics.Image;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author Eike Stepper
+ */
+public abstract class DiagnosticResolution
+{
+ public static final Diagnostic[] NO_DIAGNOSTICS = {};
+
+ public abstract Image getImage();
+
+ public abstract String getText();
+
+ public abstract String getDescription();
+
+ public abstract void run(Diagnostic diagnostic);
+
+ public void run(Diagnostic[] diagnostics, IProgressMonitor monitor)
+ {
+ for (Diagnostic diagnostic : diagnostics)
+ {
+ monitor.subTask(diagnostic.getMessage());
+ run(diagnostic);
+ }
+ }
+
+ public Diagnostic[] findOtherDiagnostics(Diagnostic[] diagnostics)
+ {
+ return NO_DIAGNOSTICS;
+ }
+
+ public static DiagnosticResolution[] getResolutions(Diagnostic diagnostic, final EvolutionEditor editor)
+ {
+ final List<DiagnosticResolution> result = new ArrayList<DiagnosticResolution>();
+ Context context = new Generator.Context()
+ {
+ public EvolutionEditor getEditor()
+ {
+ return editor;
+ }
+
+ public void add(DiagnosticResolution resolution)
+ {
+ result.add(resolution);
+ }
+ };
+
+ for (String factoryType : IPluginContainer.INSTANCE.getFactoryTypes(Generator.Factory.PRODUCT_GROUP))
+ {
+ Generator generator = (Generator)IPluginContainer.INSTANCE.getElement(Generator.Factory.PRODUCT_GROUP, factoryType, null);
+ generator.getResolutions(diagnostic, context);
+ }
+
+ return result.toArray(new DiagnosticResolution[result.size()]);
+ }
+
+ /**
+ * @author Eike Stepper
+ */
+ public interface Generator
+ {
+ public void getResolutions(Diagnostic diagnostic, Context context);
+
+ /**
+ * @author Eike Stepper
+ */
+ public interface Context
+ {
+ public EvolutionEditor getEditor();
+
+ public void add(DiagnosticResolution resolution);
+ }
+
+ /**
+ * @author Eike Stepper
+ */
+ public static abstract class Factory extends org.eclipse.net4j.util.factory.Factory
+ {
+ public static final String PRODUCT_GROUP = "org.eclipse.emf.cdo.evolution.diagnosticResolutionGenerators";
+
+ public static final String DEFAULT_TYPE = "default";
+
+ public Factory()
+ {
+ this(DEFAULT_TYPE);
+ }
+
+ public Factory(String type)
+ {
+ super(PRODUCT_GROUP, type);
+ }
+
+ public abstract Generator create(String description) throws ProductCreationException;
+ }
+ }
+}
diff --git a/plugins/org.eclipse.emf.cdo.evolution.editor/src/org/eclipse/emf/cdo/evolution/presentation/quickfix/DiagnosticResolutionRelevance.java b/plugins/org.eclipse.emf.cdo.evolution.editor/src/org/eclipse/emf/cdo/evolution/presentation/quickfix/DiagnosticResolutionRelevance.java
new file mode 100644
index 0000000000..88f67d482a
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution.editor/src/org/eclipse/emf/cdo/evolution/presentation/quickfix/DiagnosticResolutionRelevance.java
@@ -0,0 +1,19 @@
+/*
+ * Copyright (c) 2004-2018 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.evolution.presentation.quickfix;
+
+/**
+ * @author Eike Stepper
+ */
+public interface DiagnosticResolutionRelevance
+{
+ public int getRelevanceForResolution();
+}
diff --git a/plugins/org.eclipse.emf.cdo.evolution.editor/src/org/eclipse/emf/cdo/evolution/presentation/quickfix/QuickFixPage.java b/plugins/org.eclipse.emf.cdo.evolution.editor/src/org/eclipse/emf/cdo/evolution/presentation/quickfix/QuickFixPage.java
new file mode 100644
index 0000000000..fb48612ff7
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution.editor/src/org/eclipse/emf/cdo/evolution/presentation/quickfix/QuickFixPage.java
@@ -0,0 +1,408 @@
+package org.eclipse.emf.cdo.evolution.presentation.quickfix;
+
+import org.eclipse.emf.cdo.evolution.presentation.EvolutionEditor;
+
+import org.eclipse.emf.common.util.Diagnostic;
+import org.eclipse.emf.edit.command.ChangeCommand;
+import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.operation.IRunnableWithProgress;
+import org.eclipse.jface.viewers.CheckStateChangedEvent;
+import org.eclipse.jface.viewers.CheckboxTableViewer;
+import org.eclipse.jface.viewers.ICheckStateListener;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerComparator;
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.FormAttachment;
+import org.eclipse.swt.layout.FormData;
+import org.eclipse.swt.layout.FormLayout;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.ui.statushandlers.StatusManager;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.Collection;
+import java.util.Map;
+
+/**
+ * QuickFixPage is a page for the quick fixes of a marker.
+ *
+ * @since 3.4
+ *
+ */
+public class QuickFixPage extends WizardPage
+{
+ private Map<DiagnosticResolution, Collection<Diagnostic>> resolutionsMap;
+
+ private TableViewer resolutionsViewer;
+
+ private CheckboxTableViewer diagnosticsViewer;
+
+ private final Diagnostic[] selectedDiagnostics;
+
+ private AdapterFactoryEditingDomain editingDomain;
+
+ public QuickFixPage(String problemDescription, Diagnostic[] selectedDiagnostics, Map<DiagnosticResolution, Collection<Diagnostic>> resolutionsMap,
+ AdapterFactoryEditingDomain editingDomain)
+ {
+ super("QuickFixPage");
+ this.selectedDiagnostics = selectedDiagnostics;
+ this.resolutionsMap = resolutionsMap;
+ this.editingDomain = editingDomain;
+
+ setTitle("Quick Fix");
+ setMessage(problemDescription);
+ }
+
+ public void createControl(Composite parent)
+ {
+ initializeDialogUnits(parent);
+
+ // Create a new composite as there is the title bar separator to deal with
+ Composite control = new Composite(parent, SWT.NONE);
+ control.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+ setControl(control);
+
+ // PlatformUI.getWorkbench().getHelpSystem().setHelp(control, IWorkbenchHelpContextIds.PROBLEMS_VIEW);
+
+ FormLayout layout = new FormLayout();
+ layout.marginHeight = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN);
+ layout.marginWidth = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN);
+ layout.spacing = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING);
+ control.setLayout(layout);
+
+ Label resolutionsLabel = new Label(control, SWT.NONE);
+ resolutionsLabel.setText("&Select a fix:");
+ resolutionsLabel.setLayoutData(new FormData());
+
+ createResolutionsList(control);
+
+ FormData listData = new FormData();
+ listData.top = new FormAttachment(resolutionsLabel, 0);
+ listData.left = new FormAttachment(0);
+ listData.right = new FormAttachment(100, 0);
+ listData.height = convertHeightInCharsToPixels(10);
+ resolutionsViewer.getControl().setLayoutData(listData);
+
+ Label title = new Label(control, SWT.NONE);
+ title.setText("&Problems:");
+ FormData labelData = new FormData();
+ labelData.top = new FormAttachment(resolutionsViewer.getControl(), 0);
+ labelData.left = new FormAttachment(0);
+ title.setLayoutData(labelData);
+
+ createDiagnosticsViewer(control);
+
+ Composite buttons = createTableButtons(control);
+ FormData buttonData = new FormData();
+ buttonData.top = new FormAttachment(title, 0);
+ buttonData.right = new FormAttachment(100);
+ buttonData.height = convertHeightInCharsToPixels(10);
+ buttons.setLayoutData(buttonData);
+
+ FormData tableData = new FormData();
+ tableData.top = new FormAttachment(buttons, 0, SWT.TOP);
+ tableData.left = new FormAttachment(0);
+ tableData.bottom = new FormAttachment(100);
+ tableData.right = new FormAttachment(buttons, 0);
+ tableData.height = convertHeightInCharsToPixels(10);
+ diagnosticsViewer.getControl().setLayoutData(tableData);
+
+ Dialog.applyDialogFont(control);
+
+ resolutionsViewer.setSelection(new StructuredSelection(resolutionsViewer.getElementAt(0)));
+
+ diagnosticsViewer.setCheckedElements(selectedDiagnostics);
+
+ setPageComplete(diagnosticsViewer.getCheckedElements().length > 0);
+ }
+
+ private Composite createTableButtons(Composite control)
+ {
+ Composite buttonComposite = new Composite(control, SWT.NONE);
+ GridLayout layout = new GridLayout();
+ layout.marginWidth = 0;
+ layout.marginHeight = 0;
+ layout.horizontalSpacing = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING);
+ layout.verticalSpacing = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_SPACING);
+ buttonComposite.setLayout(layout);
+
+ Button selectAll = new Button(buttonComposite, SWT.PUSH);
+ selectAll.setText("Select &All");
+ selectAll.setLayoutData(new GridData(SWT.FILL, SWT.NONE, false, false));
+ selectAll.addSelectionListener(new SelectionAdapter()
+ {
+ @Override
+ public void widgetSelected(SelectionEvent arg0)
+ {
+ diagnosticsViewer.setAllChecked(true);
+ setPageComplete(!resolutionsViewer.getStructuredSelection().isEmpty());
+ }
+ });
+
+ Button deselectAll = new Button(buttonComposite, SWT.PUSH);
+ deselectAll.setText("&Deselect All");
+ deselectAll.setLayoutData(new GridData(SWT.FILL, SWT.NONE, false, false));
+ deselectAll.addSelectionListener(new SelectionAdapter()
+ {
+ @Override
+ public void widgetSelected(SelectionEvent arg0)
+ {
+ diagnosticsViewer.setAllChecked(false);
+ setPageComplete(false);
+ }
+ });
+
+ return buttonComposite;
+ }
+
+ private void createResolutionsList(Composite control)
+ {
+ resolutionsViewer = new TableViewer(control, SWT.BORDER | SWT.SINGLE | SWT.V_SCROLL);
+ resolutionsViewer.setContentProvider(new IStructuredContentProvider()
+ {
+ public Object[] getElements(Object inputElement)
+ {
+ return resolutionsMap.keySet().toArray();
+ }
+
+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput)
+ {
+ }
+
+ public void dispose()
+ {
+ }
+ });
+
+ resolutionsViewer.setLabelProvider(new LabelProvider()
+ {
+ @Override
+ public String getText(Object element)
+ {
+ return ((DiagnosticResolution)element).getText();
+ }
+
+ @Override
+ public Image getImage(Object element)
+ {
+ return ((DiagnosticResolution)element).getImage();
+ }
+ });
+
+ resolutionsViewer.setComparator(new ViewerComparator()
+ {
+ /**
+ * This comparator compares the resolutions based on the relevance of the
+ * resolutions. Any resolution that doesn't implement DiagnosticResolutionRelevance
+ * will be deemed to have relevance 0 (default value for relevance). If both
+ * resolutions have the same relevance, then marker resolution label string will
+ * be used for comparing the resolutions.
+ *
+ * @see DiagnosticResolutionRelevance#getRelevanceForResolution()
+ */
+ @Override
+ public int compare(Viewer viewer, Object e1, Object e2)
+ {
+ int relevanceMarker1 = e1 instanceof DiagnosticResolutionRelevance ? ((DiagnosticResolutionRelevance)e1).getRelevanceForResolution() : 0;
+ int relevanceMarker2 = e2 instanceof DiagnosticResolutionRelevance ? ((DiagnosticResolutionRelevance)e2).getRelevanceForResolution() : 0;
+ if (relevanceMarker1 != relevanceMarker2)
+ {
+ return Integer.valueOf(relevanceMarker2).compareTo(Integer.valueOf(relevanceMarker1));
+ }
+
+ return ((DiagnosticResolution)e1).getText().compareTo(((DiagnosticResolution)e2).getText());
+ }
+ });
+
+ resolutionsViewer.addSelectionChangedListener(new ISelectionChangedListener()
+ {
+ public void selectionChanged(SelectionChangedEvent event)
+ {
+ diagnosticsViewer.refresh();
+ setPageComplete(diagnosticsViewer.getCheckedElements().length > 0);
+ }
+ });
+
+ resolutionsViewer.setInput(this);
+ }
+
+ private void createDiagnosticsViewer(Composite parent)
+ {
+ diagnosticsViewer = CheckboxTableViewer.newCheckList(parent, SWT.BORDER | SWT.V_SCROLL | SWT.SINGLE);
+ diagnosticsViewer.setContentProvider(new DiagnosticsContentProvider());
+ diagnosticsViewer.setInput(this);
+
+ Table table = diagnosticsViewer.getTable();
+ table.setHeaderVisible(true);
+ table.setLinesVisible(true);
+
+ EvolutionEditor.createDiagnosticElementColumn(diagnosticsViewer, editingDomain.getAdapterFactory());
+ EvolutionEditor.createDiagnosticResourceColumn(diagnosticsViewer, editingDomain.getAdapterFactory());
+
+ diagnosticsViewer.addCheckStateListener(new ICheckStateListener()
+ {
+ public void checkStateChanged(CheckStateChangedEvent event)
+ {
+ if (event.getChecked() == true)
+ {
+ setPageComplete(true);
+ }
+ else
+ {
+ setPageComplete(diagnosticsViewer.getCheckedElements().length > 0);
+ }
+ }
+ });
+
+ // new OpenAndLinkWithEditorHelper(markersTable)
+ // {
+ // {
+ // setLinkWithEditor(false);
+ // }
+ //
+ // @Override
+ // protected void activate(ISelection selection)
+ // {
+ // open(selection, true);
+ // }
+ //
+ // /** Not supported*/
+ //
+ // @Override
+ // protected void linkToEditor(ISelection selection)
+ // {
+ // }
+ //
+ // @Override
+ // protected void open(ISelection selection, boolean activate)
+ // {
+ // if (selection.isEmpty())
+ // {
+ // return;
+ // }
+ // Diagnostic marker = (Diagnostic)((IStructuredSelection)selection).getFirstElement();
+ // if (marker != null && marker.getResource() instanceof IFile)
+ // {
+ // try
+ // {
+ // IDE.openEditor(site.getPage(), marker, activate);
+ // }
+ // catch (PartInitException e)
+ // {
+ // MarkerSupportInternalUtilities.showViewError(e);
+ // }
+ // }
+ // }
+ // };
+ }
+
+ public Diagnostic getSelectedDiagnostic()
+ {
+ IStructuredSelection selection = diagnosticsViewer.getStructuredSelection();
+ if (!selection.isEmpty())
+ {
+ if (selection.size() == 1)
+ {
+ return (Diagnostic)selection.getFirstElement();
+ }
+ }
+
+ return null;
+ }
+
+ void performFinish(IProgressMonitor monitor)
+ {
+ final DiagnosticResolution resolution = getSelectedResolution();
+ if (resolution == null)
+ {
+ return;
+ }
+
+ final Object[] checked = diagnosticsViewer.getCheckedElements();
+ if (checked.length == 0)
+ {
+ return;
+ }
+
+ try
+ {
+ getWizard().getContainer().run(false, true, new IRunnableWithProgress()
+ {
+ public void run(final IProgressMonitor monitor) throws InvocationTargetException, InterruptedException
+ {
+ final Diagnostic[] diagnostics = new Diagnostic[checked.length];
+ System.arraycopy(checked, 0, diagnostics, 0, checked.length);
+
+ ChangeCommand command = new ChangeCommand(editingDomain.getResourceSet())
+ {
+ @Override
+ protected void doExecute()
+ {
+ resolution.run(diagnostics, monitor);
+ }
+ };
+
+ editingDomain.getCommandStack().execute(command);
+ }
+ });
+ }
+ catch (InvocationTargetException e)
+ {
+ StatusManager.getManager().handle(QuickFixWizard.newStatus(IStatus.ERROR, e.getLocalizedMessage(), e));
+ }
+ catch (InterruptedException e)
+ {
+ StatusManager.getManager().handle(QuickFixWizard.newStatus(IStatus.ERROR, e.getLocalizedMessage(), e));
+ }
+ }
+
+ private DiagnosticResolution getSelectedResolution()
+ {
+ return (DiagnosticResolution)resolutionsViewer.getStructuredSelection().getFirstElement();
+ }
+
+ /**
+ * @author Eike Stepper
+ */
+ private final class DiagnosticsContentProvider implements IStructuredContentProvider
+ {
+ public Object[] getElements(Object inputElement)
+ {
+ DiagnosticResolution selected = getSelectedResolution();
+ if (selected != null && resolutionsMap.containsKey(selected))
+ {
+ return resolutionsMap.get(selected).toArray();
+ }
+
+ return DiagnosticResolution.NO_DIAGNOSTICS;
+ }
+
+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput)
+ {
+ }
+
+ public void dispose()
+ {
+ }
+ }
+}
diff --git a/plugins/org.eclipse.emf.cdo.evolution.editor/src/org/eclipse/emf/cdo/evolution/presentation/quickfix/QuickFixWizard.java b/plugins/org.eclipse.emf.cdo.evolution.editor/src/org/eclipse/emf/cdo/evolution/presentation/quickfix/QuickFixWizard.java
new file mode 100644
index 0000000000..d9a677846f
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution.editor/src/org/eclipse/emf/cdo/evolution/presentation/quickfix/QuickFixWizard.java
@@ -0,0 +1,115 @@
+package org.eclipse.emf.cdo.evolution.presentation.quickfix;
+
+import org.eclipse.emf.cdo.evolution.presentation.EvolutionEditorPlugin;
+
+import org.eclipse.emf.common.util.Diagnostic;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
+import org.eclipse.emf.edit.ui.provider.ExtendedImageRegistry;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.SubMonitor;
+import org.eclipse.jface.operation.IRunnableWithProgress;
+import org.eclipse.jface.wizard.IWizardPage;
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.ui.statushandlers.StatusManager;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.Collection;
+import java.util.Map;
+
+/**
+ * The wizard for quick fixes.
+ */
+public class QuickFixWizard extends Wizard
+{
+ private Diagnostic[] selectedDiagnostics;
+
+ private Map<DiagnosticResolution, Collection<Diagnostic>> resolutionsMap;
+
+ private String description;
+
+ private AdapterFactoryEditingDomain editingDomain;
+
+ public QuickFixWizard(String description, Diagnostic[] selectedDiagnostics, Map<DiagnosticResolution, Collection<Diagnostic>> resolutionsMap,
+ AdapterFactoryEditingDomain editingDomain)
+ {
+ this.selectedDiagnostics = selectedDiagnostics;
+ this.resolutionsMap = resolutionsMap;
+ this.description = description;
+ this.editingDomain = editingDomain;
+
+ setNeedsProgressMonitor(true);
+ setDefaultPageImageDescriptor(ExtendedImageRegistry.INSTANCE
+ .getImageDescriptor(URI.createPlatformPluginURI(EvolutionEditorPlugin.PLUGIN_ID + "/icons/full/wizban/quick_fix.png", true)));
+ }
+
+ @Override
+ public void addPages()
+ {
+ super.addPages();
+ addPage(new QuickFixPage(description, selectedDiagnostics, resolutionsMap, editingDomain));
+ }
+
+ @Override
+ public boolean performFinish()
+ {
+ IRunnableWithProgress finishRunnable = new IRunnableWithProgress()
+ {
+ public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException
+ {
+ IWizardPage[] pages = getPages();
+ SubMonitor subMonitor = SubMonitor.convert(monitor, "Fixing", 10 * pages.length + 1);
+ subMonitor.worked(1);
+ for (IWizardPage page : pages)
+ {
+ // Allow for cancel event processing
+ getShell().getDisplay().readAndDispatch();
+ QuickFixPage wizardPage = (QuickFixPage)page;
+ wizardPage.performFinish(subMonitor.split(10));
+ }
+ }
+ };
+
+ try
+ {
+ getContainer().run(false, true, finishRunnable);
+ }
+ catch (InvocationTargetException e)
+ {
+ StatusManager.getManager().handle(newStatus(IStatus.ERROR, e.getLocalizedMessage(), e));
+ return false;
+ }
+ catch (InterruptedException e)
+ {
+ StatusManager.getManager().handle(newStatus(IStatus.ERROR, e.getLocalizedMessage(), e));
+ return false;
+ }
+
+ return true;
+ }
+
+ public static IStatus newStatus(int severity, String message, Throwable exception)
+ {
+ String statusMessage = message;
+ if (message == null || message.trim().length() == 0)
+ {
+ if (exception == null)
+ {
+ throw new IllegalArgumentException();
+ }
+ else if (exception.getMessage() == null)
+ {
+ statusMessage = exception.toString();
+ }
+ else
+ {
+ statusMessage = exception.getMessage();
+ }
+ }
+
+ return new Status(severity, EvolutionEditorPlugin.PLUGIN_ID, severity, statusMessage, exception);
+ }
+}
diff --git a/plugins/org.eclipse.emf.cdo.evolution/.classpath b/plugins/org.eclipse.emf.cdo.evolution/.classpath
new file mode 100644
index 0000000000..64c5e31b7a
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution/.classpath
@@ -0,0 +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/J2SE-1.5"/>
+ <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.cdo.evolution/.options b/plugins/org.eclipse.emf.cdo.evolution/.options
new file mode 100644
index 0000000000..1ce0cff2a9
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution/.options
@@ -0,0 +1,3 @@
+# Debugging and tracing options
+
+org.eclipse.emf.cdo.evolution/debug = true
diff --git a/plugins/org.eclipse.emf.cdo.evolution/.project b/plugins/org.eclipse.emf.cdo.evolution/.project
new file mode 100644
index 0000000000..ab2b2d65c6
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution/.project
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.emf.cdo.evolution</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.api.tools.apiAnalysisBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.oomph.version.VersionBuilder</name>
+ <arguments>
+ <dictionary>
+ <key>check.maven.pom</key>
+ <value>true</value>
+ </dictionary>
+ <dictionary>
+ <key>ignore.lower.bound.dependency.ranges</key>
+ <value>true</value>
+ </dictionary>
+ <dictionary>
+ <key>release.path</key>
+ <value>/org.eclipse.emf.cdo.releng/versions/release.xml</value>
+ </dictionary>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.eclipse.pde.api.tools.apiAnalysisNature</nature>
+ <nature>org.eclipse.oomph.version.VersionNature</nature>
+ </natures>
+ <filteredResources>
+ <filter>
+ <id>1396938000000</id>
+ <name></name>
+ <type>10</type>
+ <matcher>
+ <id>org.eclipse.ui.ide.multiFilter</id>
+ <arguments>1.0-projectRelativePath-matches-true-false-target</arguments>
+ </matcher>
+ </filter>
+ </filteredResources>
+</projectDescription>
diff --git a/plugins/org.eclipse.emf.cdo.evolution/.settings/.api_filters b/plugins/org.eclipse.emf.cdo.evolution/.settings/.api_filters
new file mode 100644
index 0000000000..ceab79999b
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution/.settings/.api_filters
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<component id="org.eclipse.emf.cdo.evolution" version="2">
+ <resource path="src/org/eclipse/emf/cdo/evolution/Release.java" type="org.eclipse.emf.cdo.evolution.Release">
+ <filter id="574619656">
+ <message_arguments>
+ <message_argument value="CDOObject"/>
+ <message_argument value="Release"/>
+ </message_arguments>
+ </filter>
+ <filter id="574668824">
+ <message_arguments>
+ <message_argument value="Migratable"/>
+ <message_argument value="Release"/>
+ <message_argument value="CDOObject"/>
+ </message_arguments>
+ </filter>
+ <filter id="574668824">
+ <message_arguments>
+ <message_argument value="ModelSet"/>
+ <message_argument value="Release"/>
+ <message_argument value="CDOObject"/>
+ </message_arguments>
+ </filter>
+ </resource>
+</component>
diff --git a/plugins/org.eclipse.emf.cdo.evolution/.settings/org.eclipse.core.resources.prefs b/plugins/org.eclipse.emf.cdo.evolution/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000000..e9c6dcb88e
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,3 @@
+eclipse.preferences.version=1
+encoding/.project=UTF-8
+encoding//model/evolution.ecore=UTF-8
diff --git a/plugins/org.eclipse.emf.cdo.evolution/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.emf.cdo.evolution/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000000..ff3d8e623b
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,412 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.builder.cleanOutputFolder=clean
+org.eclipse.jdt.core.builder.duplicateResourceTask=warning
+org.eclipse.jdt.core.builder.invalidClasspath=abort
+org.eclipse.jdt.core.builder.recreateModifiedClassFileInOutputFolder=ignore
+org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch,*.ucls,doc-files/,package.html,package-info.java
+org.eclipse.jdt.core.circularClasspath=error
+org.eclipse.jdt.core.classpath.exclusionPatterns=enabled
+org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled
+org.eclipse.jdt.core.codeComplete.argumentPrefixes=
+org.eclipse.jdt.core.codeComplete.argumentSuffixes=
+org.eclipse.jdt.core.codeComplete.fieldPrefixes=
+org.eclipse.jdt.core.codeComplete.fieldSuffixes=
+org.eclipse.jdt.core.codeComplete.localPrefixes=
+org.eclipse.jdt.core.codeComplete.localSuffixes=
+org.eclipse.jdt.core.codeComplete.staticFieldPrefixes=
+org.eclipse.jdt.core.codeComplete.staticFieldSuffixes=
+org.eclipse.jdt.core.codeComplete.staticFinalFieldPrefixes=
+org.eclipse.jdt.core.codeComplete.staticFinalFieldSuffixes=
+org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
+org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
+org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
+org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.doc.comment.support=enabled
+org.eclipse.jdt.core.compiler.maxProblemPerUnit=100
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=ignore
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=return_tag
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
+org.eclipse.jdt.core.compiler.problem.nullReference=warning
+org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
+org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
+org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning
+org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=ignore
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.5
+org.eclipse.jdt.core.compiler.taskCaseSensitive=enabled
+org.eclipse.jdt.core.compiler.taskPriorities=NORMAL,HIGH,HIGH,LOW,LOW,LOW,LOW,LOW
+org.eclipse.jdt.core.compiler.taskTags=TODO,FIXME,XXX,PERF,MEM,POLISH,@generated NOT,@ADDED
+org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_assignment=0
+org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
+org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
+org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
+org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80
+org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16
+org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_after_package=1
+org.eclipse.jdt.core.formatter.blank_lines_before_field=1
+org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
+org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
+org.eclipse.jdt.core.formatter.blank_lines_before_method=1
+org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
+org.eclipse.jdt.core.formatter.blank_lines_before_package=0
+org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
+org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
+org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_switch=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=next_line
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=true
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=true
+org.eclipse.jdt.core.formatter.comment.format_block_comments=true
+org.eclipse.jdt.core.formatter.comment.format_header=false
+org.eclipse.jdt.core.formatter.comment.format_html=true
+org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=false
+org.eclipse.jdt.core.formatter.comment.format_line_comments=true
+org.eclipse.jdt.core.formatter.comment.format_source_code=true
+org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true
+org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
+org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
+org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert
+org.eclipse.jdt.core.formatter.comment.line_length=120
+org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
+org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
+org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
+org.eclipse.jdt.core.formatter.compact_else_if=true
+org.eclipse.jdt.core.formatter.continuation_indentation=2
+org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
+org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
+org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
+org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
+org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
+org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_empty_lines=false
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false
+org.eclipse.jdt.core.formatter.indentation.size=2
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
+org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
+org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.join_lines_in_comments=true
+org.eclipse.jdt.core.formatter.join_wrapped_lines=true
+org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.lineSplit=160
+org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
+org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
+org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
+org.eclipse.jdt.core.formatter.tabulation.char=space
+org.eclipse.jdt.core.formatter.tabulation.size=2
+org.eclipse.jdt.core.formatter.use_on_off_tags=false
+org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
+org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
+org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
+org.eclipse.jdt.core.incompatibleJDKLevel=ignore
+org.eclipse.jdt.core.incompleteClasspath=error
diff --git a/plugins/org.eclipse.emf.cdo.evolution/.settings/org.eclipse.jdt.launching.prefs b/plugins/org.eclipse.emf.cdo.evolution/.settings/org.eclipse.jdt.launching.prefs
new file mode 100644
index 0000000000..556ed07a3c
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution/.settings/org.eclipse.jdt.launching.prefs
@@ -0,0 +1,3 @@
+#Fri Sep 02 05:38:34 CEST 2011
+eclipse.preferences.version=1
+org.eclipse.jdt.launching.PREF_STRICTLY_COMPATIBLE_JRE_NOT_AVAILABLE=ignore
diff --git a/plugins/org.eclipse.emf.cdo.evolution/.settings/org.eclipse.jdt.ui.prefs b/plugins/org.eclipse.emf.cdo.evolution/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 0000000000..222aec0421
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,119 @@
+cleanup.add_default_serial_version_id=true
+cleanup.add_generated_serial_version_id=false
+cleanup.add_missing_annotations=true
+cleanup.add_missing_deprecated_annotations=true
+cleanup.add_missing_methods=false
+cleanup.add_missing_nls_tags=false
+cleanup.add_missing_override_annotations=true
+cleanup.add_missing_override_annotations_interface_methods=true
+cleanup.add_serial_version_id=true
+cleanup.always_use_blocks=true
+cleanup.always_use_parentheses_in_expressions=false
+cleanup.always_use_this_for_non_static_field_access=false
+cleanup.always_use_this_for_non_static_method_access=false
+cleanup.convert_to_enhanced_for_loop=false
+cleanup.correct_indentation=true
+cleanup.format_source_code=true
+cleanup.format_source_code_changes_only=false
+cleanup.make_local_variable_final=true
+cleanup.make_parameters_final=false
+cleanup.make_private_fields_final=true
+cleanup.make_type_abstract_if_missing_method=false
+cleanup.make_variable_declarations_final=false
+cleanup.never_use_blocks=false
+cleanup.never_use_parentheses_in_expressions=true
+cleanup.organize_imports=true
+cleanup.qualify_static_field_accesses_with_declaring_class=false
+cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+cleanup.qualify_static_member_accesses_with_declaring_class=false
+cleanup.qualify_static_method_accesses_with_declaring_class=false
+cleanup.remove_private_constructors=true
+cleanup.remove_trailing_whitespaces=true
+cleanup.remove_trailing_whitespaces_all=true
+cleanup.remove_trailing_whitespaces_ignore_empty=false
+cleanup.remove_unnecessary_casts=true
+cleanup.remove_unnecessary_nls_tags=true
+cleanup.remove_unused_imports=true
+cleanup.remove_unused_local_variables=false
+cleanup.remove_unused_private_fields=true
+cleanup.remove_unused_private_members=false
+cleanup.remove_unused_private_methods=true
+cleanup.remove_unused_private_types=true
+cleanup.sort_members=false
+cleanup.sort_members_all=false
+cleanup.use_blocks=true
+cleanup.use_blocks_only_for_return_and_throw=false
+cleanup.use_parentheses_in_expressions=true
+cleanup.use_this_for_non_static_field_access=true
+cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+cleanup.use_this_for_non_static_method_access=true
+cleanup.use_this_for_non_static_method_access_only_if_necessary=true
+cleanup_profile=_EMFT
+cleanup_settings_version=2
+eclipse.preferences.version=1
+editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
+formatter_profile=_EMFT
+formatter_settings_version=12
+org.eclipse.jdt.ui.exception.name=ex
+org.eclipse.jdt.ui.gettersetter.use.is=true
+org.eclipse.jdt.ui.ignorelowercasenames=true
+org.eclipse.jdt.ui.importorder=org.eclipse.emf.cdo;org.eclipse.emf.internal.cdo;org.eclipse.net4j;org.eclipse.internal.net4j;org.eclipse.emf;org.eclipse;com;org;javax;java;
+org.eclipse.jdt.ui.javadoc=true
+org.eclipse.jdt.ui.keywordthis=false
+org.eclipse.jdt.ui.ondemandthreshold=99
+org.eclipse.jdt.ui.overrideannotation=true
+org.eclipse.jdt.ui.staticondemandthreshold=99
+org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8" standalone\="no"?><templates><template autoinsert\="false" context\="gettercomment_context" deleted\="false" description\="Comment for getter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.gettercomment" name\="gettercomment"/><template autoinsert\="false" context\="settercomment_context" deleted\="false" description\="Comment for setter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.settercomment" name\="settercomment"/><template autoinsert\="false" context\="constructorcomment_context" deleted\="false" description\="Comment for created constructors" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorcomment" name\="constructorcomment"/><template autoinsert\="false" context\="filecomment_context" deleted\="false" description\="Comment for created Java files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.filecomment" name\="filecomment">/*\r\n * Copyright (c) 2004-2018 Eike Stepper (Loehne, Germany) and others.\r\n * All rights reserved. This program and the accompanying materials\r\n * are made available under the terms of the Eclipse Public License v1.0\r\n * which accompanies this distribution, and is available at\r\n * http\://www.eclipse.org/legal/epl-v10.html\r\n * \r\n * Contributors\:\r\n * Eike Stepper - initial API and implementation\r\n */</template><template autoinsert\="false" context\="typecomment_context" deleted\="false" description\="Comment for created types" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.typecomment" name\="typecomment">/**\r\n * @author Eike Stepper\r\n */</template><template autoinsert\="false" context\="fieldcomment_context" deleted\="false" description\="Comment for fields" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.fieldcomment" name\="fieldcomment"/><template autoinsert\="false" context\="methodcomment_context" deleted\="false" description\="Comment for non-overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodcomment" name\="methodcomment"/><template autoinsert\="false" context\="overridecomment_context" deleted\="false" description\="Comment for overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.overridecomment" name\="overridecomment"/><template autoinsert\="false" context\="delegatecomment_context" deleted\="false" description\="Comment for delegate methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.delegatecomment" name\="delegatecomment"/><template autoinsert\="true" context\="newtype_context" deleted\="false" description\="Newly created files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.newtype" name\="newtype">${filecomment}\r\n${package_declaration}\r\n\r\n${typecomment}\r\n${type_declaration}</template><template autoinsert\="true" context\="classbody_context" deleted\="false" description\="Code in new class type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.classbody" name\="classbody">\r\n</template><template autoinsert\="true" context\="interfacebody_context" deleted\="false" description\="Code in new interface type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.interfacebody" name\="interfacebody">\r\n</template><template autoinsert\="true" context\="enumbody_context" deleted\="false" description\="Code in new enum type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.enumbody" name\="enumbody">\r\n</template><template autoinsert\="true" context\="annotationbody_context" deleted\="false" description\="Code in new annotation type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.annotationbody" name\="annotationbody">\r\n</template><template autoinsert\="false" context\="catchblock_context" deleted\="false" description\="Code in new catch blocks" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.catchblock" name\="catchblock">${exception_var}.printStackTrace();</template><template autoinsert\="false" context\="methodbody_context" deleted\="false" description\="Code in created method stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodbody" name\="methodbody">${body_statement}</template><template autoinsert\="false" context\="constructorbody_context" deleted\="false" description\="Code in created constructor stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorbody" name\="constructorbody">${body_statement}</template><template autoinsert\="true" context\="getterbody_context" deleted\="false" description\="Code in created getters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.getterbody" name\="getterbody">return ${field};</template><template autoinsert\="true" context\="setterbody_context" deleted\="false" description\="Code in created setters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.setterbody" name\="setterbody">${field} \= ${param};</template></templates>
+sp_cleanup.add_default_serial_version_id=true
+sp_cleanup.add_generated_serial_version_id=false
+sp_cleanup.add_missing_annotations=true
+sp_cleanup.add_missing_deprecated_annotations=true
+sp_cleanup.add_missing_methods=false
+sp_cleanup.add_missing_nls_tags=false
+sp_cleanup.add_missing_override_annotations=true
+sp_cleanup.add_missing_override_annotations_interface_methods=false
+sp_cleanup.add_serial_version_id=false
+sp_cleanup.always_use_blocks=true
+sp_cleanup.always_use_parentheses_in_expressions=false
+sp_cleanup.always_use_this_for_non_static_field_access=false
+sp_cleanup.always_use_this_for_non_static_method_access=false
+sp_cleanup.convert_to_enhanced_for_loop=false
+sp_cleanup.correct_indentation=false
+sp_cleanup.format_source_code=true
+sp_cleanup.format_source_code_changes_only=false
+sp_cleanup.make_local_variable_final=false
+sp_cleanup.make_parameters_final=false
+sp_cleanup.make_private_fields_final=true
+sp_cleanup.make_type_abstract_if_missing_method=false
+sp_cleanup.make_variable_declarations_final=false
+sp_cleanup.never_use_blocks=false
+sp_cleanup.never_use_parentheses_in_expressions=true
+sp_cleanup.on_save_use_additional_actions=true
+sp_cleanup.organize_imports=true
+sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
+sp_cleanup.remove_private_constructors=true
+sp_cleanup.remove_trailing_whitespaces=true
+sp_cleanup.remove_trailing_whitespaces_all=true
+sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
+sp_cleanup.remove_unnecessary_casts=true
+sp_cleanup.remove_unnecessary_nls_tags=true
+sp_cleanup.remove_unused_imports=true
+sp_cleanup.remove_unused_local_variables=false
+sp_cleanup.remove_unused_private_fields=true
+sp_cleanup.remove_unused_private_members=false
+sp_cleanup.remove_unused_private_methods=true
+sp_cleanup.remove_unused_private_types=true
+sp_cleanup.sort_members=false
+sp_cleanup.sort_members_all=false
+sp_cleanup.use_blocks=true
+sp_cleanup.use_blocks_only_for_return_and_throw=false
+sp_cleanup.use_parentheses_in_expressions=true
+sp_cleanup.use_this_for_non_static_field_access=true
+sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+sp_cleanup.use_this_for_non_static_method_access=true
+sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
diff --git a/plugins/org.eclipse.emf.cdo.evolution/.settings/org.eclipse.ltk.core.refactoring.prefs b/plugins/org.eclipse.emf.cdo.evolution/.settings/org.eclipse.ltk.core.refactoring.prefs
new file mode 100644
index 0000000000..864e30fe5d
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution/.settings/org.eclipse.ltk.core.refactoring.prefs
@@ -0,0 +1,3 @@
+#Thu Feb 04 09:44:24 CET 2010
+eclipse.preferences.version=1
+org.eclipse.ltk.core.refactoring.enable.project.refactoring.history=false
diff --git a/plugins/org.eclipse.emf.cdo.evolution/.settings/org.eclipse.mylyn.tasks.ui.prefs b/plugins/org.eclipse.emf.cdo.evolution/.settings/org.eclipse.mylyn.tasks.ui.prefs
new file mode 100644
index 0000000000..b050639a54
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution/.settings/org.eclipse.mylyn.tasks.ui.prefs
@@ -0,0 +1,4 @@
+#Thu Feb 04 09:44:24 CET 2010
+eclipse.preferences.version=1
+project.repository.kind=bugzilla
+project.repository.url=https\://bugs.eclipse.org/bugs
diff --git a/plugins/org.eclipse.emf.cdo.evolution/.settings/org.eclipse.mylyn.team.ui.prefs b/plugins/org.eclipse.emf.cdo.evolution/.settings/org.eclipse.mylyn.team.ui.prefs
new file mode 100644
index 0000000000..97c11e6725
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution/.settings/org.eclipse.mylyn.team.ui.prefs
@@ -0,0 +1,3 @@
+#Thu Feb 04 09:44:24 CET 2010
+commit.comment.template=[${task.id}] ${task.description}\r\n\r\n${task.url}
+eclipse.preferences.version=1
diff --git a/plugins/org.eclipse.emf.cdo.evolution/.settings/org.eclipse.pde.api.tools.prefs b/plugins/org.eclipse.emf.cdo.evolution/.settings/org.eclipse.pde.api.tools.prefs
new file mode 100644
index 0000000000..0c17d59e45
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution/.settings/org.eclipse.pde.api.tools.prefs
@@ -0,0 +1,95 @@
+#Thu Feb 04 09:44:24 CET 2010
+ANNOTATION_ELEMENT_TYPE_ADDED_METHOD_WITHOUT_DEFAULT_VALUE=Error
+ANNOTATION_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_FIELD=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_METHOD=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_API_TYPE=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_REEXPORTED_API_TYPE=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_REEXPORTED_TYPE=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_TYPE=Error
+CLASS_ELEMENT_TYPE_ADDED_METHOD=Error
+CLASS_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+CLASS_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+CLASS_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+CLASS_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+CLASS_ELEMENT_TYPE_CHANGED_NON_ABSTRACT_TO_ABSTRACT=Error
+CLASS_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+CLASS_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+CLASS_ELEMENT_TYPE_REMOVED_CONSTRUCTOR=Error
+CLASS_ELEMENT_TYPE_REMOVED_FIELD=Error
+CLASS_ELEMENT_TYPE_REMOVED_METHOD=Error
+CLASS_ELEMENT_TYPE_REMOVED_SUPERCLASS=Error
+CLASS_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+CLASS_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+CONSTRUCTOR_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+CONSTRUCTOR_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+CONSTRUCTOR_ELEMENT_TYPE_CHANGED_VARARGS_TO_ARRAY=Error
+CONSTRUCTOR_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+ENUM_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+ENUM_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+ENUM_ELEMENT_TYPE_REMOVED_ENUM_CONSTANT=Error
+ENUM_ELEMENT_TYPE_REMOVED_FIELD=Error
+ENUM_ELEMENT_TYPE_REMOVED_METHOD=Error
+ENUM_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+FIELD_ELEMENT_TYPE_ADDED_VALUE=Error
+FIELD_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+FIELD_ELEMENT_TYPE_CHANGED_FINAL_TO_NON_FINAL_STATIC_CONSTANT=Error
+FIELD_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+FIELD_ELEMENT_TYPE_CHANGED_NON_STATIC_TO_STATIC=Error
+FIELD_ELEMENT_TYPE_CHANGED_STATIC_TO_NON_STATIC=Error
+FIELD_ELEMENT_TYPE_CHANGED_TYPE=Error
+FIELD_ELEMENT_TYPE_CHANGED_VALUE=Error
+FIELD_ELEMENT_TYPE_REMOVED_TYPE_ARGUMENT=Error
+FIELD_ELEMENT_TYPE_REMOVED_VALUE=Error
+ILLEGAL_EXTEND=Warning
+ILLEGAL_IMPLEMENT=Warning
+ILLEGAL_INSTANTIATE=Warning
+ILLEGAL_OVERRIDE=Warning
+ILLEGAL_REFERENCE=Warning
+INTERFACE_ELEMENT_TYPE_ADDED_FIELD=Error
+INTERFACE_ELEMENT_TYPE_ADDED_METHOD=Error
+INTERFACE_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+INTERFACE_ELEMENT_TYPE_ADDED_SUPER_INTERFACE_WITH_METHODS=Error
+INTERFACE_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+INTERFACE_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+INTERFACE_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_FIELD=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_METHOD=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+INVALID_JAVADOC_TAG=Ignore
+INVALID_REFERENCE_IN_SYSTEM_LIBRARIES=Error
+MISSING_EE_DESCRIPTIONS=Warning
+LEAK_EXTEND=Warning
+LEAK_FIELD_DECL=Warning
+LEAK_IMPLEMENT=Warning
+LEAK_METHOD_PARAM=Warning
+LEAK_METHOD_RETURN_TYPE=Warning
+METHOD_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+METHOD_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+METHOD_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_ABSTRACT_TO_ABSTRACT=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_STATIC_TO_STATIC=Error
+METHOD_ELEMENT_TYPE_CHANGED_STATIC_TO_NON_STATIC=Error
+METHOD_ELEMENT_TYPE_CHANGED_VARARGS_TO_ARRAY=Error
+METHOD_ELEMENT_TYPE_REMOVED_ANNOTATION_DEFAULT_VALUE=Error
+METHOD_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+TYPE_PARAMETER_ELEMENT_TYPE_ADDED_CLASS_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_ADDED_INTERFACE_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_CHANGED_CLASS_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_CHANGED_INTERFACE_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_REMOVED_CLASS_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_REMOVED_INTERFACE_BOUND=Error
+UNUSED_PROBLEM_FILTERS=Ignore
+automatically_removed_unused_problem_filters=Disabled
+eclipse.preferences.version=1
+incompatible_api_component_version=Error
+incompatible_api_component_version_include_major_without_breaking_change=Disabled
+incompatible_api_component_version_include_minor_without_api_change=Disabled
+invalid_since_tag_version=Error
+malformed_since_tag=Error
+missing_since_tag=Error
+report_api_breakage_when_major_version_incremented=Disabled
+report_resolution_errors_api_component=Warning
diff --git a/plugins/org.eclipse.emf.cdo.evolution/.settings/org.eclipse.pde.prefs b/plugins/org.eclipse.emf.cdo.evolution/.settings/org.eclipse.pde.prefs
new file mode 100644
index 0000000000..fe01bb701d
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution/.settings/org.eclipse.pde.prefs
@@ -0,0 +1,31 @@
+#Thu Feb 04 09:44:24 CET 2010
+compilers.f.unresolved-features=1
+compilers.f.unresolved-plugins=1
+compilers.incompatible-environment=1
+compilers.p.build=1
+compilers.p.build.bin.includes=1
+compilers.p.build.java.compliance=1
+compilers.p.build.missing.output=2
+compilers.p.build.output.library=1
+compilers.p.build.source.library=1
+compilers.p.build.src.includes=1
+compilers.p.deprecated=2
+compilers.p.discouraged-class=1
+compilers.p.internal=1
+compilers.p.missing-packages=1
+compilers.p.missing-version-export-package=1
+compilers.p.missing-version-import-package=1
+compilers.p.missing-version-require-bundle=1
+compilers.p.no-required-att=0
+compilers.p.not-externalized-att=2
+compilers.p.unknown-attribute=1
+compilers.p.unknown-class=1
+compilers.p.unknown-element=1
+compilers.p.unknown-identifier=1
+compilers.p.unknown-resource=1
+compilers.p.unresolved-ex-points=0
+compilers.p.unresolved-import=0
+compilers.s.create-docs=false
+compilers.s.doc-folder=doc
+compilers.s.open-tags=1
+eclipse.preferences.version=1
diff --git a/plugins/org.eclipse.emf.cdo.evolution/META-INF/MANIFEST.MF b/plugins/org.eclipse.emf.cdo.evolution/META-INF/MANIFEST.MF
new file mode 100644
index 0000000000..3ed48d3abf
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution/META-INF/MANIFEST.MF
@@ -0,0 +1,18 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.emf.cdo.evolution;singleton:=true
+Bundle-Version: 1.0.0.qualifier
+Bundle-ClassPath: .
+Bundle-Activator: org.eclipse.emf.cdo.evolution.impl.EvolutionPlugin$Implementation
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Export-Package: org.eclipse.emf.cdo.evolution;version="1.0.0",
+ org.eclipse.emf.cdo.evolution.impl;version="1.0.0",
+ org.eclipse.emf.cdo.evolution.util;version="1.0.0"
+Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.5.0,4.0.0)";visibility:=reexport,
+ org.eclipse.emf.ecore;bundle-version="[2.5.0,3.0.0)";visibility:=reexport,
+ org.eclipse.emf.cdo;bundle-version="[4.0.0,5.0.0)";visibility:=reexport
+Bundle-ActivationPolicy: lazy
+Automatic-Module-Name: org.eclipse.emf.cdo.evolution
diff --git a/plugins/org.eclipse.emf.cdo.evolution/about.html b/plugins/org.eclipse.emf.cdo.evolution/about.html
new file mode 100644
index 0000000000..d35d5aed64
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</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/legal/epl-v10.html">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>
diff --git a/plugins/org.eclipse.emf.cdo.evolution/build.properties b/plugins/org.eclipse.emf.cdo.evolution/build.properties
new file mode 100644
index 0000000000..310af6c0ef
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution/build.properties
@@ -0,0 +1,27 @@
+# Copyright (c) 2013, 2017 Eike Stepper (Loehne, Germany) and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Eike Stepper - initial API and implementation
+
+# NLS_MESSAGEFORMAT_VAR
+
+bin.includes = .,\
+ model/,\
+ META-INF/,\
+ plugin.xml,\
+ plugin.properties,\
+ about.html
+jars.compile.order = .
+source.. = src/
+output.. = bin/
+src.includes = about.html,\
+ pom.xml
+
+doc.project = org.eclipse.emf.cdo.doc
+
+generateSourceReferences = true
+
diff --git a/plugins/org.eclipse.emf.cdo.evolution/model/evolution.ecore b/plugins/org.eclipse.emf.cdo.evolution/model/evolution.ecore
new file mode 100644
index 0000000000..b40781227a
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution/model/evolution.ecore
@@ -0,0 +1,213 @@
+<?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="evolution" nsURI="http://www.eclipse.org/emf/CDO/evolution/1.0.0"
+ nsPrefix="evolution">
+ <eClassifiers xsi:type="ecore:EClass" name="ModelSet" abstract="true">
+ <eOperations name="getEvolution" eType="#//Evolution"/>
+ <eOperations name="getVersion" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
+ <eOperations name="getPreviousRelease" eType="#//Release"/>
+ <eOperations name="getRootPackages" upperBound="-1" eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EPackage"/>
+ <eOperations name="getAllPackages" upperBound="-1" eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EPackage"/>
+ <eOperations name="containsElement" eType="ecore:EDataType ../../org.eclipse.emf.ecore/model/Ecore.ecore#//EBoolean">
+ <eParameters name="modelElement" eType="ecore:EClass ../../org.eclipse.emf.ecore/model/Ecore.ecore#//EModelElement"/>
+ </eOperations>
+ <eOperations name="getElement">
+ <eGenericType eTypeParameter="#//ModelSet/getElement/T"/>
+ <eTypeParameters name="T">
+ <eBounds eClassifier="ecore:EClass ../../org.eclipse.emf.ecore/model/Ecore.ecore#//EModelElement"/>
+ </eTypeParameters>
+ <eParameters name="id" eType="ecore:EDataType ../../org.eclipse.emf.ecore/model/Ecore.ecore#//EString"/>
+ </eOperations>
+ <eOperations name="getElementID" eType="ecore:EDataType ../../org.eclipse.emf.ecore/model/Ecore.ecore#//EString">
+ <eParameters name="modelElement" eType="ecore:EClass ../../org.eclipse.emf.ecore/model/Ecore.ecore#//EModelElement"/>
+ </eOperations>
+ <eOperations name="getElementID" eType="ecore:EDataType ../../org.eclipse.emf.ecore/model/Ecore.ecore#//EString">
+ <eParameters name="modelElement" eType="ecore:EClass ../../org.eclipse.emf.ecore/model/Ecore.ecore#//EModelElement"/>
+ <eParameters name="considerOldIDs" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+ </eOperations>
+ <eOperations name="compare" eType="#//ModelSetChange">
+ <eParameters name="other" eType="#//ModelSet"/>
+ </eOperations>
+ <eOperations name="getMigration" eType="#//Migration">
+ <eParameters name="diagnosticID" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+ </eOperations>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="change" eType="#//ModelSetChange"
+ transient="true" unsettable="true" derived="true" containment="true" resolveProxies="false">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="suppressedSetVisibility" value="true"/>
+ <details key="suppressedUnsetVisibility" value="true"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="migrations" upperBound="-1"
+ eType="#//Migration" containment="true" eOpposite="#//Migration/modelSet"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="Model">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore">
+ <details key="constraints" value="ModelLoaded IDs_Exist NamespaceReflectsChange"/>
+ </eAnnotations>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="evolution" lowerBound="1"
+ eType="#//Evolution" eOpposite="#//Evolution/models"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="uRI" eType="#//URI">
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
+ <details key="kind" value="attribute"/>
+ <details key="name" value="uri"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="rootPackage" eType="ecore:EClass ../../org.eclipse.emf.ecore/model/Ecore.ecore#//EPackage"
+ changeable="false" volatile="true" transient="true" derived="true"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="allPackages" upperBound="-1"
+ eType="ecore:EClass ../../org.eclipse.emf.ecore/model/Ecore.ecore#//EPackage"
+ changeable="false" volatile="true" transient="true" derived="true"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="referencedPackages" upperBound="-1"
+ eType="ecore:EClass ../../org.eclipse.emf.ecore/model/Ecore.ecore#//EPackage"
+ changeable="false" volatile="true" transient="true" derived="true"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="missingPackages" upperBound="-1"
+ eType="ecore:EClass ../../org.eclipse.emf.ecore/model/Ecore.ecore#//EPackage"
+ changeable="false" volatile="true" transient="true" derived="true"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="Evolution" eSuperTypes="#//ModelSet">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore">
+ <details key="constraints" value="NotEmpty PackagesUnique NoMissingPackages IDsUnique"/>
+ </eAnnotations>
+ <eOperations name="getRelease" eType="#//Release">
+ <eParameters name="version" eType="ecore:EDataType ../../org.eclipse.emf.ecore/model/Ecore.ecore#//EInt"/>
+ </eOperations>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="useEcorePackage" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
+ defaultValueLiteral="true"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="useEresourcePackage" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="useEtypesPackage" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="uniqueNamespaces" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
+ defaultValueLiteral="true"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="models" upperBound="-1"
+ eType="#//Model" containment="true" eOpposite="#//Model/evolution"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="rootPackages" upperBound="-1"
+ eType="ecore:EClass ../../org.eclipse.emf.ecore/model/Ecore.ecore#//EPackage"
+ changeable="false" volatile="true" transient="true" derived="true"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="allPackages" upperBound="-1"
+ eType="ecore:EClass ../../org.eclipse.emf.ecore/model/Ecore.ecore#//EPackage"
+ changeable="false" volatile="true" transient="true" derived="true"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="missingPackages" upperBound="-1"
+ eType="ecore:EClass ../../org.eclipse.emf.ecore/model/Ecore.ecore#//EPackage"
+ changeable="false" volatile="true" transient="true" derived="true"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="releases" upperBound="-1"
+ eType="#//Release" containment="true" eOpposite="#//Release/evolution"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="orderedReleases" upperBound="-1"
+ eType="#//Release" changeable="false" volatile="true" transient="true" derived="true"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="latestRelease" eType="#//Release"
+ changeable="false" volatile="true" transient="true" derived="true"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="nextReleaseVersion" eType="ecore:EDataType ../../org.eclipse.emf.ecore/model/Ecore.ecore#//EInt"
+ changeable="false" volatile="true" transient="true" derived="true"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="Release" eSuperTypes="#//ModelSet">
+ <eStructuralFeatures xsi:type="ecore:EReference" name="evolution" lowerBound="1"
+ eType="#//Evolution" eOpposite="#//Evolution/releases"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="version" lowerBound="1"
+ eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="date" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDate"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="nextRelease" eType="#//Release"
+ changeable="false" volatile="true" transient="true" derived="true"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="previousRelease" eType="#//Release"
+ changeable="false" volatile="true" transient="true" derived="true"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="rootPackages" upperBound="-1"
+ eType="ecore:EClass ../../org.eclipse.emf.ecore/model/Ecore.ecore#//EPackage"
+ containment="true"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="allPackages" upperBound="-1"
+ eType="ecore:EClass ../../org.eclipse.emf.ecore/model/Ecore.ecore#//EPackage"
+ changeable="false" volatile="true" transient="true" derived="true"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="Change" abstract="true">
+ <eOperations name="getModelSetChange" eType="#//ModelSetChange"/>
+ <eOperations name="getOldElementFor" eType="ecore:EClass ../../org.eclipse.emf.ecore/model/Ecore.ecore#//EModelElement">
+ <eParameters name="newElement" eType="ecore:EClass ../../org.eclipse.emf.ecore/model/Ecore.ecore#//EModelElement"/>
+ </eOperations>
+ <eOperations name="getNewElementsFor" upperBound="-1" eType="ecore:EClass ../../org.eclipse.emf.ecore/model/Ecore.ecore#//EModelElement">
+ <eParameters name="oldElement" eType="ecore:EClass ../../org.eclipse.emf.ecore/model/Ecore.ecore#//EModelElement"/>
+ </eOperations>
+ <eOperations name="getOldModelSet" eType="#//ModelSet"/>
+ <eOperations name="getNewModelSet" eType="#//ModelSet"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="parent" eType="#//Change"
+ resolveProxies="false" eOpposite="#//Change/children"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="children" upperBound="-1"
+ eType="#//Change" containment="true" resolveProxies="false" eOpposite="#//Change/parent"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="ModelSetChange" eSuperTypes="#//Change">
+ <eStructuralFeatures xsi:type="ecore:EReference" name="oldModelSet" eType="#//ModelSet">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="suppressedSetVisibility" value="true"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="newModelSet" eType="#//ModelSet">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="suppressedSetVisibility" value="true"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="ElementChange" eSuperTypes="#//Change">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore">
+ <details key="constraints" value="FeaturePathIsKnown"/>
+ </eAnnotations>
+ <eOperations name="getElement" eType="ecore:EClass ../../org.eclipse.emf.ecore/model/Ecore.ecore#//EModelElement"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="oldElement" eType="ecore:EClass ../../org.eclipse.emf.ecore/model/Ecore.ecore#//EModelElement">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="suppressedSetVisibility" value="true"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="newElement" eType="ecore:EClass ../../org.eclipse.emf.ecore/model/Ecore.ecore#//EModelElement">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="suppressedSetVisibility" value="true"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="kind" eType="#//ChangeKind">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="suppressedSetVisibility" value="true"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="PropertyChange" eSuperTypes="#//Change">
+ <eStructuralFeatures xsi:type="ecore:EReference" name="feature" eType="ecore:EClass ../../org.eclipse.emf.ecore/model/Ecore.ecore#//EStructuralFeature">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="suppressedSetVisibility" value="true"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="oldValue" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="suppressedSetVisibility" value="true"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="newValue" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="suppressedSetVisibility" value="true"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="kind" eType="#//ChangeKind"
+ changeable="false" volatile="true" transient="true" derived="true"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="Migration" abstract="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore">
+ <details key="constraints" value="NotObsolete"/>
+ </eAnnotations>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="modelSet" eType="#//ModelSet"
+ eOpposite="#//ModelSet/migrations"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="diagnosticID" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="FeaturePathMigration" eSuperTypes="#//Migration">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore">
+ <details key="constraints" value="NewFeatureReachable"/>
+ </eAnnotations>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="fromClass" lowerBound="1"
+ eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EClass"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="toClass" lowerBound="1"
+ eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EClass"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="featurePath" upperBound="-1"
+ eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EReference"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EDataType" name="URI" instanceClassName="org.eclipse.emf.common.util.URI"/>
+ <eClassifiers xsi:type="ecore:EEnum" name="ChangeKind">
+ <eLiterals name="NONE"/>
+ <eLiterals name="CHANGED" value="1"/>
+ <eLiterals name="REMOVED" value="2"/>
+ <eLiterals name="ADDED" value="3"/>
+ <eLiterals name="COPIED" value="4"/>
+ <eLiterals name="MOVED" value="5"/>
+ </eClassifiers>
+</ecore:EPackage>
diff --git a/plugins/org.eclipse.emf.cdo.evolution/model/evolution.genmodel b/plugins/org.eclipse.emf.cdo.evolution/model/evolution.genmodel
new file mode 100644
index 0000000000..ae03a8ab51
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution/model/evolution.genmodel
@@ -0,0 +1,128 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<genmodel:GenModel xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore"
+ xmlns:genmodel="http://www.eclipse.org/emf/2002/GenModel" modelDirectory="/org.eclipse.emf.cdo.evolution/src" creationIcons="false"
+ modelPluginID="org.eclipse.emf.cdo.evolution" modelName="Evolution" modelPluginClass="org.eclipse.emf.cdo.evolution.impl.EvolutionPlugin"
+ rootExtendsInterface="org.eclipse.emf.cdo.CDOObject" rootExtendsClass="org.eclipse.emf.internal.cdo.CDOObjectImpl"
+ testsDirectory="" importerID="org.eclipse.emf.importer.cdo" featureDelegation="Dynamic"
+ complianceLevel="5.0" copyrightFields="false" optimizedHasChildren="true" colorProviders="true"
+ fontProviders="true" usedGenPackages="../../org.eclipse.emf.ecore/model/Ecore.genmodel#//ecore"
+ operationReflection="true" importOrganizing="true" decoration="Live" styleProviders="true"
+ cleanup="true" autoResizeProperties="true" findAction="true" collapseAllAction="true">
+ <foreignModel>evolution.ecore</foreignModel>
+ <modelPluginVariables>CDO=org.eclipse.emf.cdo</modelPluginVariables>
+ <genPackages prefix="Evolution" basePackage="org.eclipse.emf.cdo" disposableProviderFactory="true"
+ dataTypeConverters="true" multipleEditorPages="false" extensibleProviderFactory="true"
+ childCreationExtenders="true" ecorePackage="evolution.ecore#/">
+ <genEnums typeSafeEnumCompatible="false" ecoreEnum="evolution.ecore#//ChangeKind">
+ <genEnumLiterals ecoreEnumLiteral="evolution.ecore#//ChangeKind/NONE"/>
+ <genEnumLiterals ecoreEnumLiteral="evolution.ecore#//ChangeKind/CHANGED"/>
+ <genEnumLiterals ecoreEnumLiteral="evolution.ecore#//ChangeKind/REMOVED"/>
+ <genEnumLiterals ecoreEnumLiteral="evolution.ecore#//ChangeKind/ADDED"/>
+ <genEnumLiterals ecoreEnumLiteral="evolution.ecore#//ChangeKind/COPIED"/>
+ <genEnumLiterals ecoreEnumLiteral="evolution.ecore#//ChangeKind/MOVED"/>
+ </genEnums>
+ <genDataTypes ecoreDataType="evolution.ecore#//URI"/>
+ <genClasses image="false" ecoreClass="evolution.ecore#//ModelSet">
+ <genFeatures property="None" children="true" createChild="false" ecoreFeature="ecore:EReference evolution.ecore#//ModelSet/change"/>
+ <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference evolution.ecore#//ModelSet/migrations"/>
+ <genOperations ecoreOperation="evolution.ecore#//ModelSet/getEvolution"/>
+ <genOperations ecoreOperation="evolution.ecore#//ModelSet/getVersion"/>
+ <genOperations ecoreOperation="evolution.ecore#//ModelSet/getPreviousRelease"/>
+ <genOperations ecoreOperation="evolution.ecore#//ModelSet/getRootPackages"/>
+ <genOperations ecoreOperation="evolution.ecore#//ModelSet/getAllPackages"/>
+ <genOperations ecoreOperation="evolution.ecore#//ModelSet/containsElement">
+ <genParameters ecoreParameter="evolution.ecore#//ModelSet/containsElement/modelElement"/>
+ </genOperations>
+ <genOperations ecoreOperation="evolution.ecore#//ModelSet/getElement">
+ <genParameters ecoreParameter="evolution.ecore#//ModelSet/getElement/id"/>
+ <genTypeParameters ecoreTypeParameter="evolution.ecore#//ModelSet/getElement/T"/>
+ </genOperations>
+ <genOperations ecoreOperation="evolution.ecore#//ModelSet/getElementID">
+ <genParameters ecoreParameter="evolution.ecore#//ModelSet/getElementID/modelElement"/>
+ </genOperations>
+ <genOperations ecoreOperation="evolution.ecore#//ModelSet/getElementID.1">
+ <genParameters ecoreParameter="evolution.ecore#//ModelSet/getElementID.1/modelElement"/>
+ <genParameters ecoreParameter="evolution.ecore#//ModelSet/getElementID.1/considerOldIDs"/>
+ </genOperations>
+ <genOperations ecoreOperation="evolution.ecore#//ModelSet/compare">
+ <genParameters ecoreParameter="evolution.ecore#//ModelSet/compare/other"/>
+ </genOperations>
+ <genOperations ecoreOperation="evolution.ecore#//ModelSet/getMigration">
+ <genParameters ecoreParameter="evolution.ecore#//ModelSet/getMigration/diagnosticID"/>
+ </genOperations>
+ </genClasses>
+ <genClasses ecoreClass="evolution.ecore#//Model">
+ <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference evolution.ecore#//Model/evolution"/>
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute evolution.ecore#//Model/uRI"/>
+ <genFeatures property="Readonly" children="true" createChild="false" ecoreFeature="ecore:EReference evolution.ecore#//Model/rootPackage"/>
+ <genFeatures property="Readonly" createChild="false" ecoreFeature="ecore:EReference evolution.ecore#//Model/allPackages"/>
+ <genFeatures property="Readonly" createChild="false" ecoreFeature="ecore:EReference evolution.ecore#//Model/referencedPackages"/>
+ <genFeatures property="Readonly" createChild="false" ecoreFeature="ecore:EReference evolution.ecore#//Model/missingPackages"/>
+ </genClasses>
+ <genClasses ecoreClass="evolution.ecore#//Evolution">
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute evolution.ecore#//Evolution/useEcorePackage"/>
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute evolution.ecore#//Evolution/useEresourcePackage"/>
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute evolution.ecore#//Evolution/useEtypesPackage"/>
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute evolution.ecore#//Evolution/uniqueNamespaces"/>
+ <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference evolution.ecore#//Evolution/models"/>
+ <genFeatures property="Readonly" notify="false" createChild="false" ecoreFeature="ecore:EReference evolution.ecore#//Evolution/rootPackages"/>
+ <genFeatures property="Readonly" notify="false" createChild="false" ecoreFeature="ecore:EReference evolution.ecore#//Evolution/allPackages"/>
+ <genFeatures property="Readonly" notify="false" createChild="false" ecoreFeature="ecore:EReference evolution.ecore#//Evolution/missingPackages"/>
+ <genFeatures property="None" createChild="false" ecoreFeature="ecore:EReference evolution.ecore#//Evolution/releases"/>
+ <genFeatures property="Readonly" children="true" createChild="false" ecoreFeature="ecore:EReference evolution.ecore#//Evolution/orderedReleases"/>
+ <genFeatures property="Readonly" notify="false" createChild="false" ecoreFeature="ecore:EReference evolution.ecore#//Evolution/latestRelease"/>
+ <genFeatures property="Readonly" createChild="false" ecoreFeature="ecore:EAttribute evolution.ecore#//Evolution/nextReleaseVersion"/>
+ <genOperations ecoreOperation="evolution.ecore#//Evolution/getRelease">
+ <genParameters ecoreParameter="evolution.ecore#//Evolution/getRelease/version"/>
+ </genOperations>
+ </genClasses>
+ <genClasses ecoreClass="evolution.ecore#//Release">
+ <genFeatures property="None" notify="false" createChild="false" propertySortChoices="true"
+ ecoreFeature="ecore:EReference evolution.ecore#//Release/evolution"/>
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute evolution.ecore#//Release/version"/>
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute evolution.ecore#//Release/date"/>
+ <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference evolution.ecore#//Release/nextRelease"/>
+ <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference evolution.ecore#//Release/previousRelease"/>
+ <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference evolution.ecore#//Release/rootPackages"/>
+ <genFeatures property="Readonly" notify="false" createChild="false" ecoreFeature="ecore:EReference evolution.ecore#//Release/allPackages"/>
+ </genClasses>
+ <genClasses image="false" ecoreClass="evolution.ecore#//Change">
+ <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference evolution.ecore#//Change/parent"/>
+ <genFeatures property="None" children="true" createChild="false" ecoreFeature="ecore:EReference evolution.ecore#//Change/children"/>
+ <genOperations ecoreOperation="evolution.ecore#//Change/getModelSetChange"/>
+ <genOperations ecoreOperation="evolution.ecore#//Change/getOldElementFor">
+ <genParameters ecoreParameter="evolution.ecore#//Change/getOldElementFor/newElement"/>
+ </genOperations>
+ <genOperations ecoreOperation="evolution.ecore#//Change/getNewElementsFor">
+ <genParameters ecoreParameter="evolution.ecore#//Change/getNewElementsFor/oldElement"/>
+ </genOperations>
+ <genOperations ecoreOperation="evolution.ecore#//Change/getOldModelSet"/>
+ <genOperations ecoreOperation="evolution.ecore#//Change/getNewModelSet"/>
+ </genClasses>
+ <genClasses ecoreClass="evolution.ecore#//ModelSetChange">
+ <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference evolution.ecore#//ModelSetChange/oldModelSet"/>
+ <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference evolution.ecore#//ModelSetChange/newModelSet"/>
+ </genClasses>
+ <genClasses image="false" ecoreClass="evolution.ecore#//ElementChange">
+ <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference evolution.ecore#//ElementChange/oldElement"/>
+ <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference evolution.ecore#//ElementChange/newElement"/>
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute evolution.ecore#//ElementChange/kind"/>
+ <genOperations ecoreOperation="evolution.ecore#//ElementChange/getElement"/>
+ </genClasses>
+ <genClasses ecoreClass="evolution.ecore#//PropertyChange">
+ <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference evolution.ecore#//PropertyChange/feature"/>
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute evolution.ecore#//PropertyChange/oldValue"/>
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute evolution.ecore#//PropertyChange/newValue"/>
+ <genFeatures property="Readonly" createChild="false" ecoreFeature="ecore:EAttribute evolution.ecore#//PropertyChange/kind"/>
+ </genClasses>
+ <genClasses image="false" ecoreClass="evolution.ecore#//Migration">
+ <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference evolution.ecore#//Migration/modelSet"/>
+ <genFeatures property="None" createChild="false" ecoreFeature="ecore:EAttribute evolution.ecore#//Migration/diagnosticID"/>
+ </genClasses>
+ <genClasses ecoreClass="evolution.ecore#//FeaturePathMigration">
+ <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference evolution.ecore#//FeaturePathMigration/fromClass"/>
+ <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference evolution.ecore#//FeaturePathMigration/toClass"/>
+ <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference evolution.ecore#//FeaturePathMigration/featurePath"/>
+ </genClasses>
+ </genPackages>
+</genmodel:GenModel>
diff --git a/plugins/org.eclipse.emf.cdo.evolution/plugin.properties b/plugins/org.eclipse.emf.cdo.evolution/plugin.properties
new file mode 100644
index 0000000000..8e8682ad25
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution/plugin.properties
@@ -0,0 +1,36 @@
+# Copyright (c) 2013 Eike Stepper (Loehne, Germany) and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Eike Stepper - initial API and implementation
+
+pluginName = CDO Model Repository Evolution
+providerName = Eclipse Modeling Project
+
+_UI_NoModel_diagnostic = The evolution has no model
+_UI_NO_URI_diagnostic = The URI is missing
+_UI_NO_RESOURCE_SET_diagnostic = A resource set is not available
+_UI_RESOURCE_NOT_FOUND_diagnostic = The resource ''{0}'' is not found
+_UI_LOAD_PROBLEM_diagnostic = The resource ''{0}'' could not be loaded
+_UI_CONTENT_PROBLEM_diagnostic = The resource ''{0}'' does not contain a package
+
+_UI_PackageNotUnique_diagnostic = The model URI ''{0}'' is not unique
+_UI_NsuriNotUnique_diagnostic = The nsURI ''{0}'' of package ''{0}'' is not unique
+_UI_MissingPackage_diagnostic = The referenced package ''{0}'' is missing
+
+_UI_NsUriMustChange_diagnostic = The structure of the package ''{0}'' has changed since release v{1} but the nsURI is still the same
+
+_UI_IDsExist_AnnotationMissing_diagnostic = The ID annotation is missing
+_UI_IDsExist_NoValue_diagnostic = The ID annotation has no value
+_UI_IDNotUnique_diagnostic = The ID ''{0}'' is not unique
+
+_UI_MigrationUnused_diagnostic = The migration ''{0}'' is unused
+
+_UI_FeaturePathIsKnown_diagnostic = The feature ''{0}'' has been {1} from ''{2}'' but the feature path is not known
+
+_UI_Unchanged_diagnostic = The models are unchanged
+_UI_UnchangedSince_diagnostic = The models are unchanged since release v{0}
+_UI_Release_diagnostic = The models can be released now
diff --git a/plugins/org.eclipse.emf.cdo.evolution/plugin.xml b/plugins/org.eclipse.emf.cdo.evolution/plugin.xml
new file mode 100644
index 0000000000..3e851a63fa
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution/plugin.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<!--
+ Copyright (c) 2013 Eike Stepper (Loehne, Germany) and others.
+ All rights reserved. This program and the accompanying materials
+ are made available under the terms of the Eclipse Public License v1.0
+ which accompanies this distribution, and is available at
+ http://www.eclipse.org/legal/epl-v10.html
+
+ Contributors:
+ Eike Stepper - initial API and implementation
+-->
+
+<plugin>
+
+
+ <extension point="org.eclipse.emf.ecore.generated_package">
+ <!-- @generated evolution -->
+ <package
+ uri="http://www.eclipse.org/emf/CDO/evolution/1.0.0"
+ class="org.eclipse.emf.cdo.evolution.EvolutionPackage"
+ genModel="model/evolution.genmodel"/>
+ </extension>
+
+</plugin>
diff --git a/plugins/org.eclipse.emf.cdo.evolution/pom.xml b/plugins/org.eclipse.emf.cdo.evolution/pom.xml
new file mode 100644
index 0000000000..755d2139b4
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution/pom.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright (c) 2017 Eike Stepper (Loehne, Germany) and others.
+ All rights reserved. This program and the accompanying materials
+ are made available under the terms of the Eclipse Public License v1.0
+ which accompanies this distribution, and is available at
+ http://www.eclipse.org/legal/epl-v10.html
+
+ Contributors:
+ Eike Stepper - initial API and implementation
+-->
+<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>
+ <groupId>org.eclipse.emf.cdo</groupId>
+ <artifactId>org.eclipse.emf.cdo.plugins</artifactId>
+ <version>4.7.0-SNAPSHOT</version>
+ <relativePath>../../releng/org.eclipse.emf.cdo.releng.parent/plugins</relativePath>
+ </parent>
+
+ <groupId>org.eclipse.emf.cdo</groupId>
+ <artifactId>org.eclipse.emf.cdo.evolution</artifactId>
+ <version>1.0.0-SNAPSHOT</version>
+ <packaging>eclipse-plugin</packaging>
+
+</project>
diff --git a/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/Change.java b/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/Change.java
new file mode 100644
index 0000000000..7492053477
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/Change.java
@@ -0,0 +1,116 @@
+/**
+ */
+package org.eclipse.emf.cdo.evolution;
+
+import org.eclipse.emf.cdo.CDOObject;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EModelElement;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Change</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.emf.cdo.evolution.Change#getParent <em>Parent</em>}</li>
+ * <li>{@link org.eclipse.emf.cdo.evolution.Change#getChildren <em>Children</em>}</li>
+ * </ul>
+ *
+ * @see org.eclipse.emf.cdo.evolution.EvolutionPackage#getChange()
+ * @model abstract="true"
+ * @extends CDOObject
+ * @generated
+ */
+public interface Change extends CDOObject
+{
+ /**
+ * Returns the value of the '<em><b>Parent</b></em>' container reference.
+ * It is bidirectional and its opposite is '{@link org.eclipse.emf.cdo.evolution.Change#getChildren <em>Children</em>}'.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Parent</em>' container reference isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Parent</em>' container reference.
+ * @see #setParent(Change)
+ * @see org.eclipse.emf.cdo.evolution.EvolutionPackage#getChange_Parent()
+ * @see org.eclipse.emf.cdo.evolution.Change#getChildren
+ * @model opposite="children" resolveProxies="false" transient="false"
+ * @generated
+ */
+ Change getParent();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.emf.cdo.evolution.Change#getParent <em>Parent</em>}' container reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Parent</em>' container reference.
+ * @see #getParent()
+ * @generated
+ */
+ void setParent(Change value);
+
+ /**
+ * Returns the value of the '<em><b>Children</b></em>' containment reference list.
+ * The list contents are of type {@link org.eclipse.emf.cdo.evolution.Change}.
+ * It is bidirectional and its opposite is '{@link org.eclipse.emf.cdo.evolution.Change#getParent <em>Parent</em>}'.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Children</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>Children</em>' containment reference list.
+ * @see org.eclipse.emf.cdo.evolution.EvolutionPackage#getChange_Children()
+ * @see org.eclipse.emf.cdo.evolution.Change#getParent
+ * @model opposite="parent" containment="true"
+ * @generated
+ */
+ EList<Change> getChildren();
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @model kind="operation"
+ * @generated
+ */
+ ModelSet getOldModelSet();
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @model kind="operation"
+ * @generated
+ */
+ ModelSet getNewModelSet();
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @model kind="operation"
+ * @generated
+ */
+ ModelSetChange getModelSetChange();
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @model
+ * @generated
+ */
+ EModelElement getOldElementFor(EModelElement newElement);
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @model
+ * @generated
+ */
+ EList<EModelElement> getNewElementsFor(EModelElement oldElement);
+
+} // Change
diff --git a/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/ChangeKind.java b/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/ChangeKind.java
new file mode 100644
index 0000000000..d77d774386
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/ChangeKind.java
@@ -0,0 +1,330 @@
+/**
+ */
+package org.eclipse.emf.cdo.evolution;
+
+import org.eclipse.emf.common.util.Enumerator;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the literals of the enumeration '<em><b>Change Kind</b></em>',
+ * and utility methods for working with them.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.cdo.evolution.EvolutionPackage#getChangeKind()
+ * @model
+ * @generated
+ */
+public enum ChangeKind implements Enumerator
+{
+ /**
+ * The '<em><b>NONE</b></em>' literal object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #NONE_VALUE
+ * @generated
+ * @ordered
+ */
+ NONE(0, "NONE", "NONE"),
+
+ /**
+ * The '<em><b>CHANGED</b></em>' literal object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #CHANGED_VALUE
+ * @generated
+ * @ordered
+ */
+ CHANGED(1, "CHANGED", "CHANGED"),
+ /**
+ * The '<em><b>REMOVED</b></em>' literal object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #REMOVED_VALUE
+ * @generated
+ * @ordered
+ */
+ REMOVED(2, "REMOVED", "REMOVED"),
+ /**
+ * The '<em><b>ADDED</b></em>' literal object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #ADDED_VALUE
+ * @generated
+ * @ordered
+ */
+ ADDED(3, "ADDED", "ADDED"),
+ /**
+ * The '<em><b>COPIED</b></em>' literal object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #COPIED_VALUE
+ * @generated
+ * @ordered
+ */
+ COPIED(4, "COPIED", "COPIED"),
+ /**
+ * The '<em><b>MOVED</b></em>' literal object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #MOVED_VALUE
+ * @generated
+ * @ordered
+ */
+ MOVED(5, "MOVED", "MOVED");
+
+ /**
+ * The '<em><b>NONE</b></em>' literal value.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of '<em><b>NONE</b></em>' literal object isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @see #NONE
+ * @model
+ * @generated
+ * @ordered
+ */
+ public static final int NONE_VALUE = 0;
+
+ /**
+ * The '<em><b>CHANGED</b></em>' literal value.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of '<em><b>CHANGED</b></em>' literal object isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @see #CHANGED
+ * @model
+ * @generated
+ * @ordered
+ */
+ public static final int CHANGED_VALUE = 1;
+
+ /**
+ * The '<em><b>REMOVED</b></em>' literal value.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of '<em><b>REMOVED</b></em>' literal object isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @see #REMOVED
+ * @model
+ * @generated
+ * @ordered
+ */
+ public static final int REMOVED_VALUE = 2;
+
+ /**
+ * The '<em><b>ADDED</b></em>' literal value.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of '<em><b>ADDED</b></em>' literal object isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @see #ADDED
+ * @model
+ * @generated
+ * @ordered
+ */
+ public static final int ADDED_VALUE = 3;
+
+ /**
+ * The '<em><b>COPIED</b></em>' literal value.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of '<em><b>COPIED</b></em>' literal object isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @see #COPIED
+ * @model
+ * @generated
+ * @ordered
+ */
+ public static final int COPIED_VALUE = 4;
+
+ /**
+ * The '<em><b>MOVED</b></em>' literal value.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of '<em><b>MOVED</b></em>' literal object isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @see #MOVED
+ * @model
+ * @generated
+ * @ordered
+ */
+ public static final int MOVED_VALUE = 5;
+
+ /**
+ * An array of all the '<em><b>Change Kind</b></em>' enumerators.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private static final ChangeKind[] VALUES_ARRAY = new ChangeKind[] { NONE, CHANGED, REMOVED, ADDED, COPIED, MOVED, };
+
+ /**
+ * A public read-only list of all the '<em><b>Change Kind</b></em>' enumerators.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static final List<ChangeKind> VALUES = Collections.unmodifiableList(Arrays.asList(VALUES_ARRAY));
+
+ /**
+ * Returns the '<em><b>Change Kind</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 ChangeKind get(String literal)
+ {
+ for (int i = 0; i < VALUES_ARRAY.length; ++i)
+ {
+ ChangeKind result = VALUES_ARRAY[i];
+ if (result.toString().equals(literal))
+ {
+ return result;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Returns the '<em><b>Change Kind</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 ChangeKind getByName(String name)
+ {
+ for (int i = 0; i < VALUES_ARRAY.length; ++i)
+ {
+ ChangeKind result = VALUES_ARRAY[i];
+ if (result.getName().equals(name))
+ {
+ return result;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Returns the '<em><b>Change Kind</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 ChangeKind get(int value)
+ {
+ switch (value)
+ {
+ case NONE_VALUE:
+ return NONE;
+ case CHANGED_VALUE:
+ return CHANGED;
+ case REMOVED_VALUE:
+ return REMOVED;
+ case ADDED_VALUE:
+ return ADDED;
+ case COPIED_VALUE:
+ return COPIED;
+ case MOVED_VALUE:
+ return MOVED;
+ }
+ 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 ChangeKind(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;
+ }
+
+} // ChangeKind
diff --git a/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/ElementChange.java b/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/ElementChange.java
new file mode 100644
index 0000000000..5daa1bf5a5
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/ElementChange.java
@@ -0,0 +1,82 @@
+/**
+ */
+package org.eclipse.emf.cdo.evolution;
+
+import org.eclipse.emf.ecore.EModelElement;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Element Change</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.emf.cdo.evolution.ElementChange#getOldElement <em>Old Element</em>}</li>
+ * <li>{@link org.eclipse.emf.cdo.evolution.ElementChange#getNewElement <em>New Element</em>}</li>
+ * <li>{@link org.eclipse.emf.cdo.evolution.ElementChange#getKind <em>Kind</em>}</li>
+ * </ul>
+ *
+ * @see org.eclipse.emf.cdo.evolution.EvolutionPackage#getElementChange()
+ * @model annotation="http://www.eclipse.org/emf/2002/Ecore constraints='FeaturePathIsKnown'"
+ * @generated
+ */
+public interface ElementChange extends Change
+{
+ /**
+ * Returns the value of the '<em><b>Old Element</b></em>' reference.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Old Element</em>' reference isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Old Element</em>' reference.
+ * @see org.eclipse.emf.cdo.evolution.EvolutionPackage#getElementChange_OldElement()
+ * @model suppressedSetVisibility="true"
+ * @generated
+ */
+ EModelElement getOldElement();
+
+ /**
+ * Returns the value of the '<em><b>New Element</b></em>' reference.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>New Element</em>' reference isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>New Element</em>' reference.
+ * @see org.eclipse.emf.cdo.evolution.EvolutionPackage#getElementChange_NewElement()
+ * @model suppressedSetVisibility="true"
+ * @generated
+ */
+ EModelElement getNewElement();
+
+ /**
+ * Returns the value of the '<em><b>Kind</b></em>' attribute.
+ * The literals are from the enumeration {@link org.eclipse.emf.cdo.evolution.ChangeKind}.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Kind</em>' attribute isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Kind</em>' attribute.
+ * @see org.eclipse.emf.cdo.evolution.ChangeKind
+ * @see org.eclipse.emf.cdo.evolution.EvolutionPackage#getElementChange_Kind()
+ * @model suppressedSetVisibility="true"
+ * @generated
+ */
+ ChangeKind getKind();
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @model kind="operation"
+ * @generated
+ */
+ EModelElement getElement();
+
+} // ElementChange
diff --git a/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/Evolution.java b/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/Evolution.java
new file mode 100644
index 0000000000..528cbb50d5
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/Evolution.java
@@ -0,0 +1,286 @@
+/**
+ */
+package org.eclipse.emf.cdo.evolution;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EPackage;
+
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Evolution</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.emf.cdo.evolution.Evolution#isUseEcorePackage <em>Use Ecore Package</em>}</li>
+ * <li>{@link org.eclipse.emf.cdo.evolution.Evolution#isUseEresourcePackage <em>Use Eresource Package</em>}</li>
+ * <li>{@link org.eclipse.emf.cdo.evolution.Evolution#isUseEtypesPackage <em>Use Etypes Package</em>}</li>
+ * <li>{@link org.eclipse.emf.cdo.evolution.Evolution#isUniqueNamespaces <em>Unique Namespaces</em>}</li>
+ * <li>{@link org.eclipse.emf.cdo.evolution.Evolution#getModels <em>Models</em>}</li>
+ * <li>{@link org.eclipse.emf.cdo.evolution.Evolution#getRootPackages <em>Root Packages</em>}</li>
+ * <li>{@link org.eclipse.emf.cdo.evolution.Evolution#getAllPackages <em>All Packages</em>}</li>
+ * <li>{@link org.eclipse.emf.cdo.evolution.Evolution#getMissingPackages <em>Missing Packages</em>}</li>
+ * <li>{@link org.eclipse.emf.cdo.evolution.Evolution#getReleases <em>Releases</em>}</li>
+ * <li>{@link org.eclipse.emf.cdo.evolution.Evolution#getOrderedReleases <em>Ordered Releases</em>}</li>
+ * <li>{@link org.eclipse.emf.cdo.evolution.Evolution#getLatestRelease <em>Latest Release</em>}</li>
+ * <li>{@link org.eclipse.emf.cdo.evolution.Evolution#getNextReleaseVersion <em>Next Release Version</em>}</li>
+ * </ul>
+ *
+ * @see org.eclipse.emf.cdo.evolution.EvolutionPackage#getEvolution()
+ * @model annotation="http://www.eclipse.org/emf/2002/Ecore constraints='NotEmpty PackagesUnique NoMissingPackages IDsUnique'"
+ * @generated
+ */
+public interface Evolution extends ModelSet
+{
+ /**
+ * Returns the value of the '<em><b>Models</b></em>' containment reference list.
+ * The list contents are of type {@link org.eclipse.emf.cdo.evolution.Model}.
+ * It is bidirectional and its opposite is '{@link org.eclipse.emf.cdo.evolution.Model#getEvolution <em>Evolution</em>}'.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Models</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>Models</em>' containment reference list.
+ * @see org.eclipse.emf.cdo.evolution.EvolutionPackage#getEvolution_Models()
+ * @see org.eclipse.emf.cdo.evolution.Model#getEvolution
+ * @model opposite="evolution" containment="true"
+ * @generated
+ */
+ EList<Model> getModels();
+
+ /**
+ * Returns the value of the '<em><b>Use Ecore Package</b></em>' attribute.
+ * The default value is <code>"true"</code>.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Use Ecore Package</em>' attribute isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Use Ecore Package</em>' attribute.
+ * @see #setUseEcorePackage(boolean)
+ * @see org.eclipse.emf.cdo.evolution.EvolutionPackage#getEvolution_UseEcorePackage()
+ * @model default="true"
+ * @generated
+ */
+ boolean isUseEcorePackage();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.emf.cdo.evolution.Evolution#isUseEcorePackage <em>Use Ecore Package</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Use Ecore Package</em>' attribute.
+ * @see #isUseEcorePackage()
+ * @generated
+ */
+ void setUseEcorePackage(boolean value);
+
+ /**
+ * Returns the value of the '<em><b>Use Eresource Package</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Use Eresource Package</em>' attribute isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Use Eresource Package</em>' attribute.
+ * @see #setUseEresourcePackage(boolean)
+ * @see org.eclipse.emf.cdo.evolution.EvolutionPackage#getEvolution_UseEresourcePackage()
+ * @model
+ * @generated
+ */
+ boolean isUseEresourcePackage();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.emf.cdo.evolution.Evolution#isUseEresourcePackage <em>Use Eresource Package</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Use Eresource Package</em>' attribute.
+ * @see #isUseEresourcePackage()
+ * @generated
+ */
+ void setUseEresourcePackage(boolean value);
+
+ /**
+ * Returns the value of the '<em><b>Use Etypes Package</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Use Etypes Package</em>' attribute isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Use Etypes Package</em>' attribute.
+ * @see #setUseEtypesPackage(boolean)
+ * @see org.eclipse.emf.cdo.evolution.EvolutionPackage#getEvolution_UseEtypesPackage()
+ * @model
+ * @generated
+ */
+ boolean isUseEtypesPackage();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.emf.cdo.evolution.Evolution#isUseEtypesPackage <em>Use Etypes Package</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Use Etypes Package</em>' attribute.
+ * @see #isUseEtypesPackage()
+ * @generated
+ */
+ void setUseEtypesPackage(boolean value);
+
+ /**
+ * Returns the value of the '<em><b>Unique Namespaces</b></em>' attribute.
+ * The default value is <code>"true"</code>.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Unique Namespaces</em>' attribute isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Unique Namespaces</em>' attribute.
+ * @see #setUniqueNamespaces(boolean)
+ * @see org.eclipse.emf.cdo.evolution.EvolutionPackage#getEvolution_UniqueNamespaces()
+ * @model default="true"
+ * @generated
+ */
+ boolean isUniqueNamespaces();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.emf.cdo.evolution.Evolution#isUniqueNamespaces <em>Unique Namespaces</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Unique Namespaces</em>' attribute.
+ * @see #isUniqueNamespaces()
+ * @generated
+ */
+ void setUniqueNamespaces(boolean value);
+
+ /**
+ * Returns the value of the '<em><b>Root Packages</b></em>' reference list.
+ * The list contents are of type {@link org.eclipse.emf.ecore.EPackage}.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Root Packages</em>' reference list isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Root Packages</em>' reference list.
+ * @see org.eclipse.emf.cdo.evolution.EvolutionPackage#getEvolution_RootPackages()
+ * @model transient="true" changeable="false" volatile="true" derived="true"
+ * @generated
+ */
+ EList<EPackage> getRootPackages();
+
+ /**
+ * Returns the value of the '<em><b>All Packages</b></em>' reference list.
+ * The list contents are of type {@link org.eclipse.emf.ecore.EPackage}.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>All Packages</em>' reference list isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>All Packages</em>' reference list.
+ * @see org.eclipse.emf.cdo.evolution.EvolutionPackage#getEvolution_AllPackages()
+ * @model transient="true" changeable="false" volatile="true" derived="true"
+ * @generated
+ */
+ EList<EPackage> getAllPackages();
+
+ public Map<String, Set<EPackage>> getReleasedPackages();
+
+ /**
+ * Returns the value of the '<em><b>Releases</b></em>' containment reference list.
+ * The list contents are of type {@link org.eclipse.emf.cdo.evolution.Release}.
+ * It is bidirectional and its opposite is '{@link org.eclipse.emf.cdo.evolution.Release#getEvolution <em>Evolution</em>}'.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Releases</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>Releases</em>' containment reference list.
+ * @see org.eclipse.emf.cdo.evolution.EvolutionPackage#getEvolution_Releases()
+ * @see org.eclipse.emf.cdo.evolution.Release#getEvolution
+ * @model opposite="evolution" containment="true"
+ * @generated
+ */
+ EList<Release> getReleases();
+
+ /**
+ * Returns the value of the '<em><b>Ordered Releases</b></em>' reference list.
+ * The list contents are of type {@link org.eclipse.emf.cdo.evolution.Release}.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Ordered Releases</em>' reference list isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Ordered Releases</em>' reference list.
+ * @see org.eclipse.emf.cdo.evolution.EvolutionPackage#getEvolution_OrderedReleases()
+ * @model transient="true" changeable="false" volatile="true" derived="true"
+ * @generated
+ */
+ EList<Release> getOrderedReleases();
+
+ /**
+ * Returns the value of the '<em><b>Latest Release</b></em>' reference.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Latest Release</em>' reference isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Latest Release</em>' reference.
+ * @see org.eclipse.emf.cdo.evolution.EvolutionPackage#getEvolution_LatestRelease()
+ * @model transient="true" changeable="false" volatile="true" derived="true"
+ * @generated
+ */
+ Release getLatestRelease();
+
+ /**
+ * Returns the value of the '<em><b>Next Release Version</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Next Release Version</em>' attribute isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Next Release Version</em>' attribute.
+ * @see org.eclipse.emf.cdo.evolution.EvolutionPackage#getEvolution_NextReleaseVersion()
+ * @model transient="true" changeable="false" volatile="true" derived="true"
+ * @generated
+ */
+ int getNextReleaseVersion();
+
+ /**
+ * Returns the value of the '<em><b>Missing Packages</b></em>' reference list.
+ * The list contents are of type {@link org.eclipse.emf.ecore.EPackage}.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Missing Packages</em>' reference list isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Missing Packages</em>' reference list.
+ * @see org.eclipse.emf.cdo.evolution.EvolutionPackage#getEvolution_MissingPackages()
+ * @model transient="true" changeable="false" volatile="true" derived="true"
+ * @generated
+ */
+ EList<EPackage> getMissingPackages();
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @model
+ * @generated
+ */
+ Release getRelease(int version);
+
+} // Evolution
diff --git a/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/EvolutionFactory.java b/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/EvolutionFactory.java
new file mode 100644
index 0000000000..90503ae4bc
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/EvolutionFactory.java
@@ -0,0 +1,148 @@
+/**
+ */
+package org.eclipse.emf.cdo.evolution;
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EFactory;
+import org.eclipse.emf.ecore.EModelElement;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+/**
+ * <!-- 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.cdo.evolution.EvolutionPackage
+ * @generated
+ */
+public interface EvolutionFactory extends EFactory
+{
+ /**
+ * The singleton instance of the factory.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EvolutionFactory eINSTANCE = org.eclipse.emf.cdo.evolution.impl.EvolutionFactoryImpl.init();
+
+ /**
+ * Returns a new object of class '<em>Model</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return a new object of class '<em>Model</em>'.
+ * @generated
+ */
+ Model createModel();
+
+ Model createModel(URI uri);
+
+ /**
+ * Returns a new object of class '<em>Evolution</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return a new object of class '<em>Evolution</em>'.
+ * @generated
+ */
+ Evolution createEvolution();
+
+ /**
+ * Returns a new object of class '<em>Release</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return a new object of class '<em>Release</em>'.
+ * @generated
+ */
+ Release createRelease();
+
+ /**
+ * Returns a new object of class '<em>Model Set Change</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return a new object of class '<em>Model Set Change</em>'.
+ * @generated
+ */
+ ModelSetChange createModelSetChange();
+
+ ModelSetChange createModelSetChange(ModelSet[] modelSetChain);
+
+ /**
+ * Returns a new object of class '<em>Element Change</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return a new object of class '<em>Element Change</em>'.
+ * @generated
+ */
+ ElementChange createElementChange();
+
+ ElementChange createElementChange(EModelElement oldElement, EModelElement newElement, ChangeKind kind);
+
+ /**
+ * Returns a new object of class '<em>Property Change</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return a new object of class '<em>Property Change</em>'.
+ * @generated
+ */
+ PropertyChange createPropertyChange();
+
+ /**
+ * Returns a new object of class '<em>Feature Path Migration</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return a new object of class '<em>Feature Path Migration</em>'.
+ * @generated
+ */
+ FeaturePathMigration createFeaturePathMigration();
+
+ PropertyChange createPropertyChange(EStructuralFeature feature, Object oldValue, Object newValue);
+
+ /**
+ * Returns an instance of data type '<em>Change Kind</em>' corresponding the given literal.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param literal a literal of the data type.
+ * @return a new instance value of the data type.
+ * @generated
+ */
+ ChangeKind createChangeKind(String literal);
+
+ /**
+ * Returns a literal representation of an instance of data type '<em>Change Kind</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param instanceValue an instance value of the data type.
+ * @return a literal representation of the instance value.
+ * @generated
+ */
+ String convertChangeKind(ChangeKind instanceValue);
+
+ /**
+ * Returns an instance of data type '<em>URI</em>' corresponding the given literal.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param literal a literal of the data type.
+ * @return a new instance value of the data type.
+ * @generated
+ */
+ URI createURI(String literal);
+
+ /**
+ * Returns a literal representation of an instance of data type '<em>URI</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param instanceValue an instance value of the data type.
+ * @return a literal representation of the instance value.
+ * @generated
+ */
+ String convertURI(URI instanceValue);
+
+ /**
+ * Returns the package supported by this factory.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the package supported by this factory.
+ * @generated
+ */
+ EvolutionPackage getEvolutionPackage();
+
+} // EvolutionFactory
diff --git a/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/EvolutionPackage.java b/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/EvolutionPackage.java
new file mode 100644
index 0000000000..3be6a2ddf1
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/EvolutionPackage.java
@@ -0,0 +1,2761 @@
+/**
+ */
+package org.eclipse.emf.cdo.evolution;
+
+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.EOperation;
+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.cdo.evolution.EvolutionFactory
+ * @model kind="package"
+ * @generated
+ */
+public interface EvolutionPackage extends EPackage
+{
+ /**
+ * The package name.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ String eNAME = "evolution";
+
+ /**
+ * The package namespace URI.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ String eNS_URI = "http://www.eclipse.org/emf/CDO/evolution/1.0.0";
+
+ /**
+ * The package namespace name.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ String eNS_PREFIX = "evolution";
+
+ /**
+ * The singleton instance of the package.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EvolutionPackage eINSTANCE = org.eclipse.emf.cdo.evolution.impl.EvolutionPackageImpl.init();
+
+ /**
+ * The meta object id for the '{@link org.eclipse.emf.cdo.evolution.impl.ModelSetImpl <em>Model Set</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.cdo.evolution.impl.ModelSetImpl
+ * @see org.eclipse.emf.cdo.evolution.impl.EvolutionPackageImpl#getModelSet()
+ * @generated
+ */
+ int MODEL_SET = 0;
+
+ /**
+ * The feature id for the '<em><b>Change</b></em>' containment reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int MODEL_SET__CHANGE = 0;
+
+ /**
+ * The feature id for the '<em><b>Migrations</b></em>' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int MODEL_SET__MIGRATIONS = 1;
+
+ /**
+ * The number of structural features of the '<em>Model Set</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int MODEL_SET_FEATURE_COUNT = 2;
+
+ /**
+ * The operation id for the '<em>Get Evolution</em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int MODEL_SET___GET_EVOLUTION = 0;
+
+ /**
+ * The operation id for the '<em>Get Version</em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int MODEL_SET___GET_VERSION = 1;
+
+ /**
+ * The operation id for the '<em>Get Previous Release</em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int MODEL_SET___GET_PREVIOUS_RELEASE = 2;
+
+ /**
+ * The operation id for the '<em>Get Root Packages</em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int MODEL_SET___GET_ROOT_PACKAGES = 3;
+
+ /**
+ * The operation id for the '<em>Get All Packages</em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int MODEL_SET___GET_ALL_PACKAGES = 4;
+
+ /**
+ * The operation id for the '<em>Contains Element</em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int MODEL_SET___CONTAINS_ELEMENT__EMODELELEMENT = 5;
+
+ /**
+ * The operation id for the '<em>Get Element</em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int MODEL_SET___GET_ELEMENT__STRING = 6;
+
+ /**
+ * The operation id for the '<em>Get Element ID</em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int MODEL_SET___GET_ELEMENT_ID__EMODELELEMENT = 7;
+
+ /**
+ * The operation id for the '<em>Get Element ID</em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int MODEL_SET___GET_ELEMENT_ID__EMODELELEMENT_BOOLEAN = 8;
+
+ /**
+ * The operation id for the '<em>Compare</em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int MODEL_SET___COMPARE__MODELSET = 9;
+
+ /**
+ * The operation id for the '<em>Get Migration</em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int MODEL_SET___GET_MIGRATION__STRING = 10;
+
+ /**
+ * The number of operations of the '<em>Model Set</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int MODEL_SET_OPERATION_COUNT = 11;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.emf.cdo.evolution.impl.ModelImpl <em>Model</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.cdo.evolution.impl.ModelImpl
+ * @see org.eclipse.emf.cdo.evolution.impl.EvolutionPackageImpl#getModel()
+ * @generated
+ */
+ int MODEL = 1;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.emf.cdo.evolution.impl.EvolutionImpl <em>Evolution</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.cdo.evolution.impl.EvolutionImpl
+ * @see org.eclipse.emf.cdo.evolution.impl.EvolutionPackageImpl#getEvolution()
+ * @generated
+ */
+ int EVOLUTION = 2;
+
+ /**
+ * The feature id for the '<em><b>Evolution</b></em>' container reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int MODEL__EVOLUTION = 0;
+
+ /**
+ * The feature id for the '<em><b>URI</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int MODEL__URI = 1;
+
+ /**
+ * The feature id for the '<em><b>Root Package</b></em>' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int MODEL__ROOT_PACKAGE = 2;
+
+ /**
+ * The feature id for the '<em><b>All Packages</b></em>' reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int MODEL__ALL_PACKAGES = 3;
+
+ /**
+ * The feature id for the '<em><b>Referenced Packages</b></em>' reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int MODEL__REFERENCED_PACKAGES = 4;
+
+ /**
+ * The feature id for the '<em><b>Missing Packages</b></em>' reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int MODEL__MISSING_PACKAGES = 5;
+
+ /**
+ * The number of structural features of the '<em>Model</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int MODEL_FEATURE_COUNT = 6;
+
+ /**
+ * The number of operations of the '<em>Model</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int MODEL_OPERATION_COUNT = 0;
+
+ /**
+ * The feature id for the '<em><b>Change</b></em>' containment reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EVOLUTION__CHANGE = MODEL_SET__CHANGE;
+
+ /**
+ * The feature id for the '<em><b>Migrations</b></em>' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EVOLUTION__MIGRATIONS = MODEL_SET__MIGRATIONS;
+
+ /**
+ * The feature id for the '<em><b>Use Ecore Package</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EVOLUTION__USE_ECORE_PACKAGE = MODEL_SET_FEATURE_COUNT + 0;
+
+ /**
+ * The feature id for the '<em><b>Use Eresource Package</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EVOLUTION__USE_ERESOURCE_PACKAGE = MODEL_SET_FEATURE_COUNT + 1;
+
+ /**
+ * The feature id for the '<em><b>Use Etypes Package</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EVOLUTION__USE_ETYPES_PACKAGE = MODEL_SET_FEATURE_COUNT + 2;
+
+ /**
+ * The feature id for the '<em><b>Unique Namespaces</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EVOLUTION__UNIQUE_NAMESPACES = MODEL_SET_FEATURE_COUNT + 3;
+
+ /**
+ * The feature id for the '<em><b>Models</b></em>' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EVOLUTION__MODELS = MODEL_SET_FEATURE_COUNT + 4;
+
+ /**
+ * The feature id for the '<em><b>Root Packages</b></em>' reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EVOLUTION__ROOT_PACKAGES = MODEL_SET_FEATURE_COUNT + 5;
+
+ /**
+ * The feature id for the '<em><b>All Packages</b></em>' reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EVOLUTION__ALL_PACKAGES = MODEL_SET_FEATURE_COUNT + 6;
+
+ /**
+ * The feature id for the '<em><b>Missing Packages</b></em>' reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EVOLUTION__MISSING_PACKAGES = MODEL_SET_FEATURE_COUNT + 7;
+
+ /**
+ * The feature id for the '<em><b>Releases</b></em>' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EVOLUTION__RELEASES = MODEL_SET_FEATURE_COUNT + 8;
+
+ /**
+ * The feature id for the '<em><b>Ordered Releases</b></em>' reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EVOLUTION__ORDERED_RELEASES = MODEL_SET_FEATURE_COUNT + 9;
+
+ /**
+ * The feature id for the '<em><b>Latest Release</b></em>' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EVOLUTION__LATEST_RELEASE = MODEL_SET_FEATURE_COUNT + 10;
+
+ /**
+ * The feature id for the '<em><b>Next Release Version</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EVOLUTION__NEXT_RELEASE_VERSION = MODEL_SET_FEATURE_COUNT + 11;
+
+ /**
+ * The number of structural features of the '<em>Evolution</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EVOLUTION_FEATURE_COUNT = MODEL_SET_FEATURE_COUNT + 12;
+
+ /**
+ * The operation id for the '<em>Get Evolution</em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EVOLUTION___GET_EVOLUTION = MODEL_SET___GET_EVOLUTION;
+
+ /**
+ * The operation id for the '<em>Get Version</em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EVOLUTION___GET_VERSION = MODEL_SET___GET_VERSION;
+
+ /**
+ * The operation id for the '<em>Get Previous Release</em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EVOLUTION___GET_PREVIOUS_RELEASE = MODEL_SET___GET_PREVIOUS_RELEASE;
+
+ /**
+ * The operation id for the '<em>Get Root Packages</em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EVOLUTION___GET_ROOT_PACKAGES = MODEL_SET___GET_ROOT_PACKAGES;
+
+ /**
+ * The operation id for the '<em>Get All Packages</em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EVOLUTION___GET_ALL_PACKAGES = MODEL_SET___GET_ALL_PACKAGES;
+
+ /**
+ * The operation id for the '<em>Contains Element</em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EVOLUTION___CONTAINS_ELEMENT__EMODELELEMENT = MODEL_SET___CONTAINS_ELEMENT__EMODELELEMENT;
+
+ /**
+ * The operation id for the '<em>Get Element</em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EVOLUTION___GET_ELEMENT__STRING = MODEL_SET___GET_ELEMENT__STRING;
+
+ /**
+ * The operation id for the '<em>Get Element ID</em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EVOLUTION___GET_ELEMENT_ID__EMODELELEMENT = MODEL_SET___GET_ELEMENT_ID__EMODELELEMENT;
+
+ /**
+ * The operation id for the '<em>Get Element ID</em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EVOLUTION___GET_ELEMENT_ID__EMODELELEMENT_BOOLEAN = MODEL_SET___GET_ELEMENT_ID__EMODELELEMENT_BOOLEAN;
+
+ /**
+ * The operation id for the '<em>Compare</em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EVOLUTION___COMPARE__MODELSET = MODEL_SET___COMPARE__MODELSET;
+
+ /**
+ * The operation id for the '<em>Get Migration</em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EVOLUTION___GET_MIGRATION__STRING = MODEL_SET___GET_MIGRATION__STRING;
+
+ /**
+ * The operation id for the '<em>Get Release</em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EVOLUTION___GET_RELEASE__INT = MODEL_SET_OPERATION_COUNT + 0;
+
+ /**
+ * The number of operations of the '<em>Evolution</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EVOLUTION_OPERATION_COUNT = MODEL_SET_OPERATION_COUNT + 1;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.emf.cdo.evolution.impl.ReleaseImpl <em>Release</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.cdo.evolution.impl.ReleaseImpl
+ * @see org.eclipse.emf.cdo.evolution.impl.EvolutionPackageImpl#getRelease()
+ * @generated
+ */
+ int RELEASE = 3;
+
+ /**
+ * The feature id for the '<em><b>Change</b></em>' containment reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int RELEASE__CHANGE = MODEL_SET__CHANGE;
+
+ /**
+ * The feature id for the '<em><b>Migrations</b></em>' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int RELEASE__MIGRATIONS = MODEL_SET__MIGRATIONS;
+
+ /**
+ * The feature id for the '<em><b>Evolution</b></em>' container reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int RELEASE__EVOLUTION = MODEL_SET_FEATURE_COUNT + 0;
+
+ /**
+ * The feature id for the '<em><b>Version</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int RELEASE__VERSION = MODEL_SET_FEATURE_COUNT + 1;
+
+ /**
+ * The feature id for the '<em><b>Date</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int RELEASE__DATE = MODEL_SET_FEATURE_COUNT + 2;
+
+ /**
+ * The feature id for the '<em><b>Next Release</b></em>' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int RELEASE__NEXT_RELEASE = MODEL_SET_FEATURE_COUNT + 3;
+
+ /**
+ * The feature id for the '<em><b>Previous Release</b></em>' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int RELEASE__PREVIOUS_RELEASE = MODEL_SET_FEATURE_COUNT + 4;
+
+ /**
+ * The feature id for the '<em><b>Root Packages</b></em>' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int RELEASE__ROOT_PACKAGES = MODEL_SET_FEATURE_COUNT + 5;
+
+ /**
+ * The feature id for the '<em><b>All Packages</b></em>' reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int RELEASE__ALL_PACKAGES = MODEL_SET_FEATURE_COUNT + 6;
+
+ /**
+ * The number of structural features of the '<em>Release</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int RELEASE_FEATURE_COUNT = MODEL_SET_FEATURE_COUNT + 7;
+
+ /**
+ * The operation id for the '<em>Get Evolution</em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int RELEASE___GET_EVOLUTION = MODEL_SET___GET_EVOLUTION;
+
+ /**
+ * The operation id for the '<em>Get Version</em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int RELEASE___GET_VERSION = MODEL_SET___GET_VERSION;
+
+ /**
+ * The operation id for the '<em>Get Previous Release</em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int RELEASE___GET_PREVIOUS_RELEASE = MODEL_SET___GET_PREVIOUS_RELEASE;
+
+ /**
+ * The operation id for the '<em>Get Root Packages</em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int RELEASE___GET_ROOT_PACKAGES = MODEL_SET___GET_ROOT_PACKAGES;
+
+ /**
+ * The operation id for the '<em>Get All Packages</em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int RELEASE___GET_ALL_PACKAGES = MODEL_SET___GET_ALL_PACKAGES;
+
+ /**
+ * The operation id for the '<em>Contains Element</em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int RELEASE___CONTAINS_ELEMENT__EMODELELEMENT = MODEL_SET___CONTAINS_ELEMENT__EMODELELEMENT;
+
+ /**
+ * The operation id for the '<em>Get Element</em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int RELEASE___GET_ELEMENT__STRING = MODEL_SET___GET_ELEMENT__STRING;
+
+ /**
+ * The operation id for the '<em>Get Element ID</em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int RELEASE___GET_ELEMENT_ID__EMODELELEMENT = MODEL_SET___GET_ELEMENT_ID__EMODELELEMENT;
+
+ /**
+ * The operation id for the '<em>Get Element ID</em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int RELEASE___GET_ELEMENT_ID__EMODELELEMENT_BOOLEAN = MODEL_SET___GET_ELEMENT_ID__EMODELELEMENT_BOOLEAN;
+
+ /**
+ * The operation id for the '<em>Compare</em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int RELEASE___COMPARE__MODELSET = MODEL_SET___COMPARE__MODELSET;
+
+ /**
+ * The operation id for the '<em>Get Migration</em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int RELEASE___GET_MIGRATION__STRING = MODEL_SET___GET_MIGRATION__STRING;
+
+ /**
+ * The number of operations of the '<em>Release</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int RELEASE_OPERATION_COUNT = MODEL_SET_OPERATION_COUNT + 0;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.emf.cdo.evolution.impl.ChangeImpl <em>Change</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.cdo.evolution.impl.ChangeImpl
+ * @see org.eclipse.emf.cdo.evolution.impl.EvolutionPackageImpl#getChange()
+ * @generated
+ */
+ int CHANGE = 4;
+
+ /**
+ * The feature id for the '<em><b>Parent</b></em>' container reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int CHANGE__PARENT = 0;
+
+ /**
+ * The feature id for the '<em><b>Children</b></em>' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int CHANGE__CHILDREN = 1;
+
+ /**
+ * The number of structural features of the '<em>Change</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int CHANGE_FEATURE_COUNT = 2;
+
+ /**
+ * The operation id for the '<em>Get Model Set Change</em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int CHANGE___GET_MODEL_SET_CHANGE = 0;
+
+ /**
+ * The operation id for the '<em>Get Old Element For</em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int CHANGE___GET_OLD_ELEMENT_FOR__EMODELELEMENT = 1;
+
+ /**
+ * The operation id for the '<em>Get New Elements For</em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int CHANGE___GET_NEW_ELEMENTS_FOR__EMODELELEMENT = 2;
+
+ /**
+ * The operation id for the '<em>Get Old Model Set</em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int CHANGE___GET_OLD_MODEL_SET = 3;
+
+ /**
+ * The operation id for the '<em>Get New Model Set</em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int CHANGE___GET_NEW_MODEL_SET = 4;
+
+ /**
+ * The number of operations of the '<em>Change</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int CHANGE_OPERATION_COUNT = 5;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.emf.cdo.evolution.impl.ModelSetChangeImpl <em>Model Set Change</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.cdo.evolution.impl.ModelSetChangeImpl
+ * @see org.eclipse.emf.cdo.evolution.impl.EvolutionPackageImpl#getModelSetChange()
+ * @generated
+ */
+ int MODEL_SET_CHANGE = 5;
+
+ /**
+ * The feature id for the '<em><b>Parent</b></em>' container reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int MODEL_SET_CHANGE__PARENT = CHANGE__PARENT;
+
+ /**
+ * The feature id for the '<em><b>Children</b></em>' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int MODEL_SET_CHANGE__CHILDREN = CHANGE__CHILDREN;
+
+ /**
+ * The feature id for the '<em><b>Old Model Set</b></em>' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int MODEL_SET_CHANGE__OLD_MODEL_SET = CHANGE_FEATURE_COUNT + 0;
+
+ /**
+ * The feature id for the '<em><b>New Model Set</b></em>' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int MODEL_SET_CHANGE__NEW_MODEL_SET = CHANGE_FEATURE_COUNT + 1;
+
+ /**
+ * The number of structural features of the '<em>Model Set Change</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int MODEL_SET_CHANGE_FEATURE_COUNT = CHANGE_FEATURE_COUNT + 2;
+
+ /**
+ * The operation id for the '<em>Get Model Set Change</em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int MODEL_SET_CHANGE___GET_MODEL_SET_CHANGE = CHANGE___GET_MODEL_SET_CHANGE;
+
+ /**
+ * The operation id for the '<em>Get Old Element For</em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int MODEL_SET_CHANGE___GET_OLD_ELEMENT_FOR__EMODELELEMENT = CHANGE___GET_OLD_ELEMENT_FOR__EMODELELEMENT;
+
+ /**
+ * The operation id for the '<em>Get New Elements For</em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int MODEL_SET_CHANGE___GET_NEW_ELEMENTS_FOR__EMODELELEMENT = CHANGE___GET_NEW_ELEMENTS_FOR__EMODELELEMENT;
+
+ /**
+ * The operation id for the '<em>Get Old Model Set</em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int MODEL_SET_CHANGE___GET_OLD_MODEL_SET = CHANGE___GET_OLD_MODEL_SET;
+
+ /**
+ * The operation id for the '<em>Get New Model Set</em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int MODEL_SET_CHANGE___GET_NEW_MODEL_SET = CHANGE___GET_NEW_MODEL_SET;
+
+ /**
+ * The number of operations of the '<em>Model Set Change</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int MODEL_SET_CHANGE_OPERATION_COUNT = CHANGE_OPERATION_COUNT + 0;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.emf.cdo.evolution.impl.ElementChangeImpl <em>Element Change</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.cdo.evolution.impl.ElementChangeImpl
+ * @see org.eclipse.emf.cdo.evolution.impl.EvolutionPackageImpl#getElementChange()
+ * @generated
+ */
+ int ELEMENT_CHANGE = 6;
+
+ /**
+ * The feature id for the '<em><b>Parent</b></em>' container reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int ELEMENT_CHANGE__PARENT = CHANGE__PARENT;
+
+ /**
+ * The feature id for the '<em><b>Children</b></em>' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int ELEMENT_CHANGE__CHILDREN = CHANGE__CHILDREN;
+
+ /**
+ * The feature id for the '<em><b>Old Element</b></em>' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int ELEMENT_CHANGE__OLD_ELEMENT = CHANGE_FEATURE_COUNT + 0;
+
+ /**
+ * The feature id for the '<em><b>New Element</b></em>' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int ELEMENT_CHANGE__NEW_ELEMENT = CHANGE_FEATURE_COUNT + 1;
+
+ /**
+ * The feature id for the '<em><b>Kind</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int ELEMENT_CHANGE__KIND = CHANGE_FEATURE_COUNT + 2;
+
+ /**
+ * The number of structural features of the '<em>Element Change</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int ELEMENT_CHANGE_FEATURE_COUNT = CHANGE_FEATURE_COUNT + 3;
+
+ /**
+ * The operation id for the '<em>Get Model Set Change</em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int ELEMENT_CHANGE___GET_MODEL_SET_CHANGE = CHANGE___GET_MODEL_SET_CHANGE;
+
+ /**
+ * The operation id for the '<em>Get Old Element For</em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int ELEMENT_CHANGE___GET_OLD_ELEMENT_FOR__EMODELELEMENT = CHANGE___GET_OLD_ELEMENT_FOR__EMODELELEMENT;
+
+ /**
+ * The operation id for the '<em>Get New Elements For</em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int ELEMENT_CHANGE___GET_NEW_ELEMENTS_FOR__EMODELELEMENT = CHANGE___GET_NEW_ELEMENTS_FOR__EMODELELEMENT;
+
+ /**
+ * The operation id for the '<em>Get Old Model Set</em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int ELEMENT_CHANGE___GET_OLD_MODEL_SET = CHANGE___GET_OLD_MODEL_SET;
+
+ /**
+ * The operation id for the '<em>Get New Model Set</em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int ELEMENT_CHANGE___GET_NEW_MODEL_SET = CHANGE___GET_NEW_MODEL_SET;
+
+ /**
+ * The operation id for the '<em>Get Element</em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int ELEMENT_CHANGE___GET_ELEMENT = CHANGE_OPERATION_COUNT + 0;
+
+ /**
+ * The number of operations of the '<em>Element Change</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int ELEMENT_CHANGE_OPERATION_COUNT = CHANGE_OPERATION_COUNT + 1;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.emf.cdo.evolution.impl.PropertyChangeImpl <em>Property Change</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.cdo.evolution.impl.PropertyChangeImpl
+ * @see org.eclipse.emf.cdo.evolution.impl.EvolutionPackageImpl#getPropertyChange()
+ * @generated
+ */
+ int PROPERTY_CHANGE = 7;
+
+ /**
+ * The feature id for the '<em><b>Parent</b></em>' container reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int PROPERTY_CHANGE__PARENT = CHANGE__PARENT;
+
+ /**
+ * The feature id for the '<em><b>Children</b></em>' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int PROPERTY_CHANGE__CHILDREN = CHANGE__CHILDREN;
+
+ /**
+ * The feature id for the '<em><b>Feature</b></em>' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int PROPERTY_CHANGE__FEATURE = CHANGE_FEATURE_COUNT + 0;
+
+ /**
+ * The feature id for the '<em><b>Old Value</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int PROPERTY_CHANGE__OLD_VALUE = CHANGE_FEATURE_COUNT + 1;
+
+ /**
+ * The feature id for the '<em><b>New Value</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int PROPERTY_CHANGE__NEW_VALUE = CHANGE_FEATURE_COUNT + 2;
+
+ /**
+ * The feature id for the '<em><b>Kind</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int PROPERTY_CHANGE__KIND = CHANGE_FEATURE_COUNT + 3;
+
+ /**
+ * The number of structural features of the '<em>Property Change</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int PROPERTY_CHANGE_FEATURE_COUNT = CHANGE_FEATURE_COUNT + 4;
+
+ /**
+ * The operation id for the '<em>Get Model Set Change</em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int PROPERTY_CHANGE___GET_MODEL_SET_CHANGE = CHANGE___GET_MODEL_SET_CHANGE;
+
+ /**
+ * The operation id for the '<em>Get Old Element For</em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int PROPERTY_CHANGE___GET_OLD_ELEMENT_FOR__EMODELELEMENT = CHANGE___GET_OLD_ELEMENT_FOR__EMODELELEMENT;
+
+ /**
+ * The operation id for the '<em>Get New Elements For</em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int PROPERTY_CHANGE___GET_NEW_ELEMENTS_FOR__EMODELELEMENT = CHANGE___GET_NEW_ELEMENTS_FOR__EMODELELEMENT;
+
+ /**
+ * The operation id for the '<em>Get Old Model Set</em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int PROPERTY_CHANGE___GET_OLD_MODEL_SET = CHANGE___GET_OLD_MODEL_SET;
+
+ /**
+ * The operation id for the '<em>Get New Model Set</em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int PROPERTY_CHANGE___GET_NEW_MODEL_SET = CHANGE___GET_NEW_MODEL_SET;
+
+ /**
+ * The number of operations of the '<em>Property Change</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int PROPERTY_CHANGE_OPERATION_COUNT = CHANGE_OPERATION_COUNT + 0;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.emf.cdo.evolution.impl.MigrationImpl <em>Migration</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.cdo.evolution.impl.MigrationImpl
+ * @see org.eclipse.emf.cdo.evolution.impl.EvolutionPackageImpl#getMigration()
+ * @generated
+ */
+ int MIGRATION = 8;
+
+ /**
+ * The feature id for the '<em><b>Model Set</b></em>' container reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int MIGRATION__MODEL_SET = 0;
+
+ /**
+ * The feature id for the '<em><b>Diagnostic ID</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int MIGRATION__DIAGNOSTIC_ID = 1;
+
+ /**
+ * The number of structural features of the '<em>Migration</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int MIGRATION_FEATURE_COUNT = 2;
+
+ /**
+ * The number of operations of the '<em>Migration</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int MIGRATION_OPERATION_COUNT = 0;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.emf.cdo.evolution.impl.FeaturePathMigrationImpl <em>Feature Path Migration</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.cdo.evolution.impl.FeaturePathMigrationImpl
+ * @see org.eclipse.emf.cdo.evolution.impl.EvolutionPackageImpl#getFeaturePathMigration()
+ * @generated
+ */
+ int FEATURE_PATH_MIGRATION = 9;
+
+ /**
+ * The feature id for the '<em><b>Model Set</b></em>' container reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int FEATURE_PATH_MIGRATION__MODEL_SET = MIGRATION__MODEL_SET;
+
+ /**
+ * The feature id for the '<em><b>Diagnostic ID</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int FEATURE_PATH_MIGRATION__DIAGNOSTIC_ID = MIGRATION__DIAGNOSTIC_ID;
+
+ /**
+ * The feature id for the '<em><b>From Class</b></em>' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int FEATURE_PATH_MIGRATION__FROM_CLASS = MIGRATION_FEATURE_COUNT + 0;
+
+ /**
+ * The feature id for the '<em><b>To Class</b></em>' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int FEATURE_PATH_MIGRATION__TO_CLASS = MIGRATION_FEATURE_COUNT + 1;
+
+ /**
+ * The feature id for the '<em><b>Feature Path</b></em>' reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int FEATURE_PATH_MIGRATION__FEATURE_PATH = MIGRATION_FEATURE_COUNT + 2;
+
+ /**
+ * The number of structural features of the '<em>Feature Path Migration</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int FEATURE_PATH_MIGRATION_FEATURE_COUNT = MIGRATION_FEATURE_COUNT + 3;
+
+ /**
+ * The number of operations of the '<em>Feature Path Migration</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int FEATURE_PATH_MIGRATION_OPERATION_COUNT = MIGRATION_OPERATION_COUNT + 0;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.emf.cdo.evolution.ChangeKind <em>Change Kind</em>}' enum.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.cdo.evolution.ChangeKind
+ * @see org.eclipse.emf.cdo.evolution.impl.EvolutionPackageImpl#getChangeKind()
+ * @generated
+ */
+ int CHANGE_KIND = 10;
+
+ /**
+ * The meta object id for the '<em>URI</em>' data type.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.common.util.URI
+ * @see org.eclipse.emf.cdo.evolution.impl.EvolutionPackageImpl#getURI()
+ * @generated
+ */
+ int URI = 11;
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.emf.cdo.evolution.ModelSet <em>Model Set</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>Model Set</em>'.
+ * @see org.eclipse.emf.cdo.evolution.ModelSet
+ * @generated
+ */
+ EClass getModelSet();
+
+ /**
+ * Returns the meta object for the containment reference '{@link org.eclipse.emf.cdo.evolution.ModelSet#getChange <em>Change</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the containment reference '<em>Change</em>'.
+ * @see org.eclipse.emf.cdo.evolution.ModelSet#getChange()
+ * @see #getModelSet()
+ * @generated
+ */
+ EReference getModelSet_Change();
+
+ /**
+ * Returns the meta object for the containment reference list '{@link org.eclipse.emf.cdo.evolution.ModelSet#getMigrations <em>Migrations</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the containment reference list '<em>Migrations</em>'.
+ * @see org.eclipse.emf.cdo.evolution.ModelSet#getMigrations()
+ * @see #getModelSet()
+ * @generated
+ */
+ EReference getModelSet_Migrations();
+
+ /**
+ * Returns the meta object for the '{@link org.eclipse.emf.cdo.evolution.ModelSet#getEvolution() <em>Get Evolution</em>}' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the '<em>Get Evolution</em>' operation.
+ * @see org.eclipse.emf.cdo.evolution.ModelSet#getEvolution()
+ * @generated
+ */
+ EOperation getModelSet__GetEvolution();
+
+ /**
+ * Returns the meta object for the '{@link org.eclipse.emf.cdo.evolution.ModelSet#getVersion() <em>Get Version</em>}' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the '<em>Get Version</em>' operation.
+ * @see org.eclipse.emf.cdo.evolution.ModelSet#getVersion()
+ * @generated
+ */
+ EOperation getModelSet__GetVersion();
+
+ /**
+ * Returns the meta object for the '{@link org.eclipse.emf.cdo.evolution.ModelSet#getPreviousRelease() <em>Get Previous Release</em>}' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the '<em>Get Previous Release</em>' operation.
+ * @see org.eclipse.emf.cdo.evolution.ModelSet#getPreviousRelease()
+ * @generated
+ */
+ EOperation getModelSet__GetPreviousRelease();
+
+ /**
+ * Returns the meta object for the '{@link org.eclipse.emf.cdo.evolution.ModelSet#getRootPackages() <em>Get Root Packages</em>}' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the '<em>Get Root Packages</em>' operation.
+ * @see org.eclipse.emf.cdo.evolution.ModelSet#getRootPackages()
+ * @generated
+ */
+ EOperation getModelSet__GetRootPackages();
+
+ /**
+ * Returns the meta object for the '{@link org.eclipse.emf.cdo.evolution.ModelSet#getAllPackages() <em>Get All Packages</em>}' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the '<em>Get All Packages</em>' operation.
+ * @see org.eclipse.emf.cdo.evolution.ModelSet#getAllPackages()
+ * @generated
+ */
+ EOperation getModelSet__GetAllPackages();
+
+ /**
+ * Returns the meta object for the '{@link org.eclipse.emf.cdo.evolution.ModelSet#containsElement(org.eclipse.emf.ecore.EModelElement) <em>Contains Element</em>}' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the '<em>Contains Element</em>' operation.
+ * @see org.eclipse.emf.cdo.evolution.ModelSet#containsElement(org.eclipse.emf.ecore.EModelElement)
+ * @generated
+ */
+ EOperation getModelSet__ContainsElement__EModelElement();
+
+ /**
+ * Returns the meta object for the '{@link org.eclipse.emf.cdo.evolution.ModelSet#getElement(java.lang.String) <em>Get Element</em>}' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the '<em>Get Element</em>' operation.
+ * @see org.eclipse.emf.cdo.evolution.ModelSet#getElement(java.lang.String)
+ * @generated
+ */
+ EOperation getModelSet__GetElement__String();
+
+ /**
+ * Returns the meta object for the '{@link org.eclipse.emf.cdo.evolution.ModelSet#getElementID(org.eclipse.emf.ecore.EModelElement) <em>Get Element ID</em>}' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the '<em>Get Element ID</em>' operation.
+ * @see org.eclipse.emf.cdo.evolution.ModelSet#getElementID(org.eclipse.emf.ecore.EModelElement)
+ * @generated
+ */
+ EOperation getModelSet__GetElementID__EModelElement();
+
+ /**
+ * Returns the meta object for the '{@link org.eclipse.emf.cdo.evolution.ModelSet#getElementID(org.eclipse.emf.ecore.EModelElement, boolean) <em>Get Element ID</em>}' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the '<em>Get Element ID</em>' operation.
+ * @see org.eclipse.emf.cdo.evolution.ModelSet#getElementID(org.eclipse.emf.ecore.EModelElement, boolean)
+ * @generated
+ */
+ EOperation getModelSet__GetElementID__EModelElement_boolean();
+
+ /**
+ * Returns the meta object for the '{@link org.eclipse.emf.cdo.evolution.ModelSet#compare(org.eclipse.emf.cdo.evolution.ModelSet) <em>Compare</em>}' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the '<em>Compare</em>' operation.
+ * @see org.eclipse.emf.cdo.evolution.ModelSet#compare(org.eclipse.emf.cdo.evolution.ModelSet)
+ * @generated
+ */
+ EOperation getModelSet__Compare__ModelSet();
+
+ /**
+ * Returns the meta object for the '{@link org.eclipse.emf.cdo.evolution.ModelSet#getMigration(java.lang.String) <em>Get Migration</em>}' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the '<em>Get Migration</em>' operation.
+ * @see org.eclipse.emf.cdo.evolution.ModelSet#getMigration(java.lang.String)
+ * @generated
+ */
+ EOperation getModelSet__GetMigration__String();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.emf.cdo.evolution.Model <em>Model</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>Model</em>'.
+ * @see org.eclipse.emf.cdo.evolution.Model
+ * @generated
+ */
+ EClass getModel();
+
+ /**
+ * Returns the meta object for the container reference '{@link org.eclipse.emf.cdo.evolution.Model#getEvolution <em>Evolution</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the container reference '<em>Evolution</em>'.
+ * @see org.eclipse.emf.cdo.evolution.Model#getEvolution()
+ * @see #getModel()
+ * @generated
+ */
+ EReference getModel_Evolution();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.emf.cdo.evolution.Model#getURI <em>URI</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>URI</em>'.
+ * @see org.eclipse.emf.cdo.evolution.Model#getURI()
+ * @see #getModel()
+ * @generated
+ */
+ EAttribute getModel_URI();
+
+ /**
+ * Returns the meta object for the reference '{@link org.eclipse.emf.cdo.evolution.Model#getRootPackage <em>Root Package</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the reference '<em>Root Package</em>'.
+ * @see org.eclipse.emf.cdo.evolution.Model#getRootPackage()
+ * @see #getModel()
+ * @generated
+ */
+ EReference getModel_RootPackage();
+
+ /**
+ * Returns the meta object for the reference list '{@link org.eclipse.emf.cdo.evolution.Model#getAllPackages <em>All Packages</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the reference list '<em>All Packages</em>'.
+ * @see org.eclipse.emf.cdo.evolution.Model#getAllPackages()
+ * @see #getModel()
+ * @generated
+ */
+ EReference getModel_AllPackages();
+
+ /**
+ * Returns the meta object for the reference list '{@link org.eclipse.emf.cdo.evolution.Model#getReferencedPackages <em>Referenced Packages</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the reference list '<em>Referenced Packages</em>'.
+ * @see org.eclipse.emf.cdo.evolution.Model#getReferencedPackages()
+ * @see #getModel()
+ * @generated
+ */
+ EReference getModel_ReferencedPackages();
+
+ /**
+ * Returns the meta object for the reference list '{@link org.eclipse.emf.cdo.evolution.Model#getMissingPackages <em>Missing Packages</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the reference list '<em>Missing Packages</em>'.
+ * @see org.eclipse.emf.cdo.evolution.Model#getMissingPackages()
+ * @see #getModel()
+ * @generated
+ */
+ EReference getModel_MissingPackages();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.emf.cdo.evolution.Evolution <em>Evolution</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>Evolution</em>'.
+ * @see org.eclipse.emf.cdo.evolution.Evolution
+ * @generated
+ */
+ EClass getEvolution();
+
+ /**
+ * Returns the meta object for the containment reference list '{@link org.eclipse.emf.cdo.evolution.Evolution#getModels <em>Models</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the containment reference list '<em>Models</em>'.
+ * @see org.eclipse.emf.cdo.evolution.Evolution#getModels()
+ * @see #getEvolution()
+ * @generated
+ */
+ EReference getEvolution_Models();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.emf.cdo.evolution.Evolution#isUseEcorePackage <em>Use Ecore Package</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Use Ecore Package</em>'.
+ * @see org.eclipse.emf.cdo.evolution.Evolution#isUseEcorePackage()
+ * @see #getEvolution()
+ * @generated
+ */
+ EAttribute getEvolution_UseEcorePackage();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.emf.cdo.evolution.Evolution#isUseEresourcePackage <em>Use Eresource Package</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Use Eresource Package</em>'.
+ * @see org.eclipse.emf.cdo.evolution.Evolution#isUseEresourcePackage()
+ * @see #getEvolution()
+ * @generated
+ */
+ EAttribute getEvolution_UseEresourcePackage();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.emf.cdo.evolution.Evolution#isUseEtypesPackage <em>Use Etypes Package</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Use Etypes Package</em>'.
+ * @see org.eclipse.emf.cdo.evolution.Evolution#isUseEtypesPackage()
+ * @see #getEvolution()
+ * @generated
+ */
+ EAttribute getEvolution_UseEtypesPackage();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.emf.cdo.evolution.Evolution#isUniqueNamespaces <em>Unique Namespaces</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Unique Namespaces</em>'.
+ * @see org.eclipse.emf.cdo.evolution.Evolution#isUniqueNamespaces()
+ * @see #getEvolution()
+ * @generated
+ */
+ EAttribute getEvolution_UniqueNamespaces();
+
+ /**
+ * Returns the meta object for the reference list '{@link org.eclipse.emf.cdo.evolution.Evolution#getRootPackages <em>Root Packages</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the reference list '<em>Root Packages</em>'.
+ * @see org.eclipse.emf.cdo.evolution.Evolution#getRootPackages()
+ * @see #getEvolution()
+ * @generated
+ */
+ EReference getEvolution_RootPackages();
+
+ /**
+ * Returns the meta object for the reference list '{@link org.eclipse.emf.cdo.evolution.Evolution#getAllPackages <em>All Packages</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the reference list '<em>All Packages</em>'.
+ * @see org.eclipse.emf.cdo.evolution.Evolution#getAllPackages()
+ * @see #getEvolution()
+ * @generated
+ */
+ EReference getEvolution_AllPackages();
+
+ /**
+ * Returns the meta object for the containment reference list '{@link org.eclipse.emf.cdo.evolution.Evolution#getReleases <em>Releases</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the containment reference list '<em>Releases</em>'.
+ * @see org.eclipse.emf.cdo.evolution.Evolution#getReleases()
+ * @see #getEvolution()
+ * @generated
+ */
+ EReference getEvolution_Releases();
+
+ /**
+ * Returns the meta object for the reference list '{@link org.eclipse.emf.cdo.evolution.Evolution#getOrderedReleases <em>Ordered Releases</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the reference list '<em>Ordered Releases</em>'.
+ * @see org.eclipse.emf.cdo.evolution.Evolution#getOrderedReleases()
+ * @see #getEvolution()
+ * @generated
+ */
+ EReference getEvolution_OrderedReleases();
+
+ /**
+ * Returns the meta object for the reference '{@link org.eclipse.emf.cdo.evolution.Evolution#getLatestRelease <em>Latest Release</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the reference '<em>Latest Release</em>'.
+ * @see org.eclipse.emf.cdo.evolution.Evolution#getLatestRelease()
+ * @see #getEvolution()
+ * @generated
+ */
+ EReference getEvolution_LatestRelease();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.emf.cdo.evolution.Evolution#getNextReleaseVersion <em>Next Release Version</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Next Release Version</em>'.
+ * @see org.eclipse.emf.cdo.evolution.Evolution#getNextReleaseVersion()
+ * @see #getEvolution()
+ * @generated
+ */
+ EAttribute getEvolution_NextReleaseVersion();
+
+ /**
+ * Returns the meta object for the reference list '{@link org.eclipse.emf.cdo.evolution.Evolution#getMissingPackages <em>Missing Packages</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the reference list '<em>Missing Packages</em>'.
+ * @see org.eclipse.emf.cdo.evolution.Evolution#getMissingPackages()
+ * @see #getEvolution()
+ * @generated
+ */
+ EReference getEvolution_MissingPackages();
+
+ /**
+ * Returns the meta object for the '{@link org.eclipse.emf.cdo.evolution.Evolution#getRelease(int) <em>Get Release</em>}' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the '<em>Get Release</em>' operation.
+ * @see org.eclipse.emf.cdo.evolution.Evolution#getRelease(int)
+ * @generated
+ */
+ EOperation getEvolution__GetRelease__int();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.emf.cdo.evolution.Release <em>Release</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>Release</em>'.
+ * @see org.eclipse.emf.cdo.evolution.Release
+ * @generated
+ */
+ EClass getRelease();
+
+ /**
+ * Returns the meta object for the container reference '{@link org.eclipse.emf.cdo.evolution.Release#getEvolution <em>Evolution</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the container reference '<em>Evolution</em>'.
+ * @see org.eclipse.emf.cdo.evolution.Release#getEvolution()
+ * @see #getRelease()
+ * @generated
+ */
+ EReference getRelease_Evolution();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.emf.cdo.evolution.Release#getDate <em>Date</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Date</em>'.
+ * @see org.eclipse.emf.cdo.evolution.Release#getDate()
+ * @see #getRelease()
+ * @generated
+ */
+ EAttribute getRelease_Date();
+
+ /**
+ * Returns the meta object for the reference '{@link org.eclipse.emf.cdo.evolution.Release#getNextRelease <em>Next Release</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the reference '<em>Next Release</em>'.
+ * @see org.eclipse.emf.cdo.evolution.Release#getNextRelease()
+ * @see #getRelease()
+ * @generated
+ */
+ EReference getRelease_NextRelease();
+
+ /**
+ * Returns the meta object for the reference '{@link org.eclipse.emf.cdo.evolution.Release#getPreviousRelease <em>Previous Release</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the reference '<em>Previous Release</em>'.
+ * @see org.eclipse.emf.cdo.evolution.Release#getPreviousRelease()
+ * @see #getRelease()
+ * @generated
+ */
+ EReference getRelease_PreviousRelease();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.emf.cdo.evolution.Release#getVersion <em>Version</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Version</em>'.
+ * @see org.eclipse.emf.cdo.evolution.Release#getVersion()
+ * @see #getRelease()
+ * @generated
+ */
+ EAttribute getRelease_Version();
+
+ /**
+ * Returns the meta object for the containment reference list '{@link org.eclipse.emf.cdo.evolution.Release#getRootPackages <em>Root Packages</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the containment reference list '<em>Root Packages</em>'.
+ * @see org.eclipse.emf.cdo.evolution.Release#getRootPackages()
+ * @see #getRelease()
+ * @generated
+ */
+ EReference getRelease_RootPackages();
+
+ /**
+ * Returns the meta object for the reference list '{@link org.eclipse.emf.cdo.evolution.Release#getAllPackages <em>All Packages</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the reference list '<em>All Packages</em>'.
+ * @see org.eclipse.emf.cdo.evolution.Release#getAllPackages()
+ * @see #getRelease()
+ * @generated
+ */
+ EReference getRelease_AllPackages();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.emf.cdo.evolution.Change <em>Change</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>Change</em>'.
+ * @see org.eclipse.emf.cdo.evolution.Change
+ * @generated
+ */
+ EClass getChange();
+
+ /**
+ * Returns the meta object for the container reference '{@link org.eclipse.emf.cdo.evolution.Change#getParent <em>Parent</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the container reference '<em>Parent</em>'.
+ * @see org.eclipse.emf.cdo.evolution.Change#getParent()
+ * @see #getChange()
+ * @generated
+ */
+ EReference getChange_Parent();
+
+ /**
+ * Returns the meta object for the containment reference list '{@link org.eclipse.emf.cdo.evolution.Change#getChildren <em>Children</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the containment reference list '<em>Children</em>'.
+ * @see org.eclipse.emf.cdo.evolution.Change#getChildren()
+ * @see #getChange()
+ * @generated
+ */
+ EReference getChange_Children();
+
+ /**
+ * Returns the meta object for the '{@link org.eclipse.emf.cdo.evolution.Change#getOldModelSet() <em>Get Old Model Set</em>}' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the '<em>Get Old Model Set</em>' operation.
+ * @see org.eclipse.emf.cdo.evolution.Change#getOldModelSet()
+ * @generated
+ */
+ EOperation getChange__GetOldModelSet();
+
+ /**
+ * Returns the meta object for the '{@link org.eclipse.emf.cdo.evolution.Change#getNewModelSet() <em>Get New Model Set</em>}' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the '<em>Get New Model Set</em>' operation.
+ * @see org.eclipse.emf.cdo.evolution.Change#getNewModelSet()
+ * @generated
+ */
+ EOperation getChange__GetNewModelSet();
+
+ /**
+ * Returns the meta object for the '{@link org.eclipse.emf.cdo.evolution.Change#getModelSetChange() <em>Get Model Set Change</em>}' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the '<em>Get Model Set Change</em>' operation.
+ * @see org.eclipse.emf.cdo.evolution.Change#getModelSetChange()
+ * @generated
+ */
+ EOperation getChange__GetModelSetChange();
+
+ /**
+ * Returns the meta object for the '{@link org.eclipse.emf.cdo.evolution.Change#getOldElementFor(org.eclipse.emf.ecore.EModelElement) <em>Get Old Element For</em>}' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the '<em>Get Old Element For</em>' operation.
+ * @see org.eclipse.emf.cdo.evolution.Change#getOldElementFor(org.eclipse.emf.ecore.EModelElement)
+ * @generated
+ */
+ EOperation getChange__GetOldElementFor__EModelElement();
+
+ /**
+ * Returns the meta object for the '{@link org.eclipse.emf.cdo.evolution.Change#getNewElementsFor(org.eclipse.emf.ecore.EModelElement) <em>Get New Elements For</em>}' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the '<em>Get New Elements For</em>' operation.
+ * @see org.eclipse.emf.cdo.evolution.Change#getNewElementsFor(org.eclipse.emf.ecore.EModelElement)
+ * @generated
+ */
+ EOperation getChange__GetNewElementsFor__EModelElement();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.emf.cdo.evolution.ModelSetChange <em>Model Set Change</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>Model Set Change</em>'.
+ * @see org.eclipse.emf.cdo.evolution.ModelSetChange
+ * @generated
+ */
+ EClass getModelSetChange();
+
+ /**
+ * Returns the meta object for the reference '{@link org.eclipse.emf.cdo.evolution.ModelSetChange#getOldModelSet <em>Old Model Set</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the reference '<em>Old Model Set</em>'.
+ * @see org.eclipse.emf.cdo.evolution.ModelSetChange#getOldModelSet()
+ * @see #getModelSetChange()
+ * @generated
+ */
+ EReference getModelSetChange_OldModelSet();
+
+ /**
+ * Returns the meta object for the reference '{@link org.eclipse.emf.cdo.evolution.ModelSetChange#getNewModelSet <em>New Model Set</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the reference '<em>New Model Set</em>'.
+ * @see org.eclipse.emf.cdo.evolution.ModelSetChange#getNewModelSet()
+ * @see #getModelSetChange()
+ * @generated
+ */
+ EReference getModelSetChange_NewModelSet();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.emf.cdo.evolution.ElementChange <em>Element Change</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>Element Change</em>'.
+ * @see org.eclipse.emf.cdo.evolution.ElementChange
+ * @generated
+ */
+ EClass getElementChange();
+
+ /**
+ * Returns the meta object for the reference '{@link org.eclipse.emf.cdo.evolution.ElementChange#getOldElement <em>Old Element</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the reference '<em>Old Element</em>'.
+ * @see org.eclipse.emf.cdo.evolution.ElementChange#getOldElement()
+ * @see #getElementChange()
+ * @generated
+ */
+ EReference getElementChange_OldElement();
+
+ /**
+ * Returns the meta object for the reference '{@link org.eclipse.emf.cdo.evolution.ElementChange#getNewElement <em>New Element</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the reference '<em>New Element</em>'.
+ * @see org.eclipse.emf.cdo.evolution.ElementChange#getNewElement()
+ * @see #getElementChange()
+ * @generated
+ */
+ EReference getElementChange_NewElement();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.emf.cdo.evolution.ElementChange#getKind <em>Kind</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Kind</em>'.
+ * @see org.eclipse.emf.cdo.evolution.ElementChange#getKind()
+ * @see #getElementChange()
+ * @generated
+ */
+ EAttribute getElementChange_Kind();
+
+ /**
+ * Returns the meta object for the '{@link org.eclipse.emf.cdo.evolution.ElementChange#getElement() <em>Get Element</em>}' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the '<em>Get Element</em>' operation.
+ * @see org.eclipse.emf.cdo.evolution.ElementChange#getElement()
+ * @generated
+ */
+ EOperation getElementChange__GetElement();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.emf.cdo.evolution.PropertyChange <em>Property Change</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>Property Change</em>'.
+ * @see org.eclipse.emf.cdo.evolution.PropertyChange
+ * @generated
+ */
+ EClass getPropertyChange();
+
+ /**
+ * Returns the meta object for the reference '{@link org.eclipse.emf.cdo.evolution.PropertyChange#getFeature <em>Feature</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the reference '<em>Feature</em>'.
+ * @see org.eclipse.emf.cdo.evolution.PropertyChange#getFeature()
+ * @see #getPropertyChange()
+ * @generated
+ */
+ EReference getPropertyChange_Feature();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.emf.cdo.evolution.PropertyChange#getOldValue <em>Old Value</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Old Value</em>'.
+ * @see org.eclipse.emf.cdo.evolution.PropertyChange#getOldValue()
+ * @see #getPropertyChange()
+ * @generated
+ */
+ EAttribute getPropertyChange_OldValue();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.emf.cdo.evolution.PropertyChange#getNewValue <em>New Value</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>New Value</em>'.
+ * @see org.eclipse.emf.cdo.evolution.PropertyChange#getNewValue()
+ * @see #getPropertyChange()
+ * @generated
+ */
+ EAttribute getPropertyChange_NewValue();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.emf.cdo.evolution.PropertyChange#getKind <em>Kind</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Kind</em>'.
+ * @see org.eclipse.emf.cdo.evolution.PropertyChange#getKind()
+ * @see #getPropertyChange()
+ * @generated
+ */
+ EAttribute getPropertyChange_Kind();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.emf.cdo.evolution.Migration <em>Migration</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>Migration</em>'.
+ * @see org.eclipse.emf.cdo.evolution.Migration
+ * @generated
+ */
+ EClass getMigration();
+
+ /**
+ * Returns the meta object for the container reference '{@link org.eclipse.emf.cdo.evolution.Migration#getModelSet <em>Model Set</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the container reference '<em>Model Set</em>'.
+ * @see org.eclipse.emf.cdo.evolution.Migration#getModelSet()
+ * @see #getMigration()
+ * @generated
+ */
+ EReference getMigration_ModelSet();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.emf.cdo.evolution.Migration#getDiagnosticID <em>Diagnostic ID</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Diagnostic ID</em>'.
+ * @see org.eclipse.emf.cdo.evolution.Migration#getDiagnosticID()
+ * @see #getMigration()
+ * @generated
+ */
+ EAttribute getMigration_DiagnosticID();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.emf.cdo.evolution.FeaturePathMigration <em>Feature Path Migration</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>Feature Path Migration</em>'.
+ * @see org.eclipse.emf.cdo.evolution.FeaturePathMigration
+ * @generated
+ */
+ EClass getFeaturePathMigration();
+
+ /**
+ * Returns the meta object for the reference '{@link org.eclipse.emf.cdo.evolution.FeaturePathMigration#getFromClass <em>From Class</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the reference '<em>From Class</em>'.
+ * @see org.eclipse.emf.cdo.evolution.FeaturePathMigration#getFromClass()
+ * @see #getFeaturePathMigration()
+ * @generated
+ */
+ EReference getFeaturePathMigration_FromClass();
+
+ /**
+ * Returns the meta object for the reference '{@link org.eclipse.emf.cdo.evolution.FeaturePathMigration#getToClass <em>To Class</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the reference '<em>To Class</em>'.
+ * @see org.eclipse.emf.cdo.evolution.FeaturePathMigration#getToClass()
+ * @see #getFeaturePathMigration()
+ * @generated
+ */
+ EReference getFeaturePathMigration_ToClass();
+
+ /**
+ * Returns the meta object for the reference list '{@link org.eclipse.emf.cdo.evolution.FeaturePathMigration#getFeaturePath <em>Feature Path</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the reference list '<em>Feature Path</em>'.
+ * @see org.eclipse.emf.cdo.evolution.FeaturePathMigration#getFeaturePath()
+ * @see #getFeaturePathMigration()
+ * @generated
+ */
+ EReference getFeaturePathMigration_FeaturePath();
+
+ /**
+ * Returns the meta object for enum '{@link org.eclipse.emf.cdo.evolution.ChangeKind <em>Change Kind</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for enum '<em>Change Kind</em>'.
+ * @see org.eclipse.emf.cdo.evolution.ChangeKind
+ * @generated
+ */
+ EEnum getChangeKind();
+
+ /**
+ * Returns the meta object for data type '{@link org.eclipse.emf.common.util.URI <em>URI</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for data type '<em>URI</em>'.
+ * @see org.eclipse.emf.common.util.URI
+ * @model instanceClass="org.eclipse.emf.common.util.URI"
+ * @generated
+ */
+ EDataType getURI();
+
+ /**
+ * 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
+ */
+ EvolutionFactory getEvolutionFactory();
+
+ /**
+ * <!-- 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.cdo.evolution.impl.ModelSetImpl <em>Model Set</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.cdo.evolution.impl.ModelSetImpl
+ * @see org.eclipse.emf.cdo.evolution.impl.EvolutionPackageImpl#getModelSet()
+ * @generated
+ */
+ EClass MODEL_SET = eINSTANCE.getModelSet();
+
+ /**
+ * The meta object literal for the '<em><b>Change</b></em>' containment reference feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference MODEL_SET__CHANGE = eINSTANCE.getModelSet_Change();
+
+ /**
+ * The meta object literal for the '<em><b>Migrations</b></em>' containment reference list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference MODEL_SET__MIGRATIONS = eINSTANCE.getModelSet_Migrations();
+
+ /**
+ * The meta object literal for the '<em><b>Get Evolution</b></em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EOperation MODEL_SET___GET_EVOLUTION = eINSTANCE.getModelSet__GetEvolution();
+
+ /**
+ * The meta object literal for the '<em><b>Get Version</b></em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EOperation MODEL_SET___GET_VERSION = eINSTANCE.getModelSet__GetVersion();
+
+ /**
+ * The meta object literal for the '<em><b>Get Previous Release</b></em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EOperation MODEL_SET___GET_PREVIOUS_RELEASE = eINSTANCE.getModelSet__GetPreviousRelease();
+
+ /**
+ * The meta object literal for the '<em><b>Get Root Packages</b></em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EOperation MODEL_SET___GET_ROOT_PACKAGES = eINSTANCE.getModelSet__GetRootPackages();
+
+ /**
+ * The meta object literal for the '<em><b>Get All Packages</b></em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EOperation MODEL_SET___GET_ALL_PACKAGES = eINSTANCE.getModelSet__GetAllPackages();
+
+ /**
+ * The meta object literal for the '<em><b>Contains Element</b></em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EOperation MODEL_SET___CONTAINS_ELEMENT__EMODELELEMENT = eINSTANCE.getModelSet__ContainsElement__EModelElement();
+
+ /**
+ * The meta object literal for the '<em><b>Get Element</b></em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EOperation MODEL_SET___GET_ELEMENT__STRING = eINSTANCE.getModelSet__GetElement__String();
+
+ /**
+ * The meta object literal for the '<em><b>Get Element ID</b></em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EOperation MODEL_SET___GET_ELEMENT_ID__EMODELELEMENT = eINSTANCE.getModelSet__GetElementID__EModelElement();
+
+ /**
+ * The meta object literal for the '<em><b>Get Element ID</b></em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EOperation MODEL_SET___GET_ELEMENT_ID__EMODELELEMENT_BOOLEAN = eINSTANCE.getModelSet__GetElementID__EModelElement_boolean();
+
+ /**
+ * The meta object literal for the '<em><b>Compare</b></em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EOperation MODEL_SET___COMPARE__MODELSET = eINSTANCE.getModelSet__Compare__ModelSet();
+
+ /**
+ * The meta object literal for the '<em><b>Get Migration</b></em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EOperation MODEL_SET___GET_MIGRATION__STRING = eINSTANCE.getModelSet__GetMigration__String();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.emf.cdo.evolution.impl.ModelImpl <em>Model</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.cdo.evolution.impl.ModelImpl
+ * @see org.eclipse.emf.cdo.evolution.impl.EvolutionPackageImpl#getModel()
+ * @generated
+ */
+ EClass MODEL = eINSTANCE.getModel();
+
+ /**
+ * The meta object literal for the '<em><b>Evolution</b></em>' container reference feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference MODEL__EVOLUTION = eINSTANCE.getModel_Evolution();
+
+ /**
+ * The meta object literal for the '<em><b>URI</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute MODEL__URI = eINSTANCE.getModel_URI();
+
+ /**
+ * The meta object literal for the '<em><b>Root Package</b></em>' reference feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference MODEL__ROOT_PACKAGE = eINSTANCE.getModel_RootPackage();
+
+ /**
+ * The meta object literal for the '<em><b>All Packages</b></em>' reference list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference MODEL__ALL_PACKAGES = eINSTANCE.getModel_AllPackages();
+
+ /**
+ * The meta object literal for the '<em><b>Referenced Packages</b></em>' reference list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference MODEL__REFERENCED_PACKAGES = eINSTANCE.getModel_ReferencedPackages();
+
+ /**
+ * The meta object literal for the '<em><b>Missing Packages</b></em>' reference list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference MODEL__MISSING_PACKAGES = eINSTANCE.getModel_MissingPackages();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.emf.cdo.evolution.impl.EvolutionImpl <em>Evolution</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.cdo.evolution.impl.EvolutionImpl
+ * @see org.eclipse.emf.cdo.evolution.impl.EvolutionPackageImpl#getEvolution()
+ * @generated
+ */
+ EClass EVOLUTION = eINSTANCE.getEvolution();
+
+ /**
+ * The meta object literal for the '<em><b>Models</b></em>' containment reference list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference EVOLUTION__MODELS = eINSTANCE.getEvolution_Models();
+
+ /**
+ * The meta object literal for the '<em><b>Use Ecore Package</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute EVOLUTION__USE_ECORE_PACKAGE = eINSTANCE.getEvolution_UseEcorePackage();
+
+ /**
+ * The meta object literal for the '<em><b>Use Eresource Package</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute EVOLUTION__USE_ERESOURCE_PACKAGE = eINSTANCE.getEvolution_UseEresourcePackage();
+
+ /**
+ * The meta object literal for the '<em><b>Use Etypes Package</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute EVOLUTION__USE_ETYPES_PACKAGE = eINSTANCE.getEvolution_UseEtypesPackage();
+
+ /**
+ * The meta object literal for the '<em><b>Unique Namespaces</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute EVOLUTION__UNIQUE_NAMESPACES = eINSTANCE.getEvolution_UniqueNamespaces();
+
+ /**
+ * The meta object literal for the '<em><b>Root Packages</b></em>' reference list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference EVOLUTION__ROOT_PACKAGES = eINSTANCE.getEvolution_RootPackages();
+
+ /**
+ * The meta object literal for the '<em><b>All Packages</b></em>' reference list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference EVOLUTION__ALL_PACKAGES = eINSTANCE.getEvolution_AllPackages();
+
+ /**
+ * The meta object literal for the '<em><b>Releases</b></em>' containment reference list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference EVOLUTION__RELEASES = eINSTANCE.getEvolution_Releases();
+
+ /**
+ * The meta object literal for the '<em><b>Ordered Releases</b></em>' reference list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference EVOLUTION__ORDERED_RELEASES = eINSTANCE.getEvolution_OrderedReleases();
+
+ /**
+ * The meta object literal for the '<em><b>Latest Release</b></em>' reference feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference EVOLUTION__LATEST_RELEASE = eINSTANCE.getEvolution_LatestRelease();
+
+ /**
+ * The meta object literal for the '<em><b>Next Release Version</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute EVOLUTION__NEXT_RELEASE_VERSION = eINSTANCE.getEvolution_NextReleaseVersion();
+
+ /**
+ * The meta object literal for the '<em><b>Missing Packages</b></em>' reference list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference EVOLUTION__MISSING_PACKAGES = eINSTANCE.getEvolution_MissingPackages();
+
+ /**
+ * The meta object literal for the '<em><b>Get Release</b></em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EOperation EVOLUTION___GET_RELEASE__INT = eINSTANCE.getEvolution__GetRelease__int();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.emf.cdo.evolution.impl.ReleaseImpl <em>Release</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.cdo.evolution.impl.ReleaseImpl
+ * @see org.eclipse.emf.cdo.evolution.impl.EvolutionPackageImpl#getRelease()
+ * @generated
+ */
+ EClass RELEASE = eINSTANCE.getRelease();
+
+ /**
+ * The meta object literal for the '<em><b>Evolution</b></em>' container reference feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference RELEASE__EVOLUTION = eINSTANCE.getRelease_Evolution();
+
+ /**
+ * The meta object literal for the '<em><b>Date</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute RELEASE__DATE = eINSTANCE.getRelease_Date();
+
+ /**
+ * The meta object literal for the '<em><b>Next Release</b></em>' reference feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference RELEASE__NEXT_RELEASE = eINSTANCE.getRelease_NextRelease();
+
+ /**
+ * The meta object literal for the '<em><b>Previous Release</b></em>' reference feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference RELEASE__PREVIOUS_RELEASE = eINSTANCE.getRelease_PreviousRelease();
+
+ /**
+ * The meta object literal for the '<em><b>Version</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute RELEASE__VERSION = eINSTANCE.getRelease_Version();
+
+ /**
+ * The meta object literal for the '<em><b>Root Packages</b></em>' containment reference list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference RELEASE__ROOT_PACKAGES = eINSTANCE.getRelease_RootPackages();
+
+ /**
+ * The meta object literal for the '<em><b>All Packages</b></em>' reference list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference RELEASE__ALL_PACKAGES = eINSTANCE.getRelease_AllPackages();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.emf.cdo.evolution.impl.ChangeImpl <em>Change</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.cdo.evolution.impl.ChangeImpl
+ * @see org.eclipse.emf.cdo.evolution.impl.EvolutionPackageImpl#getChange()
+ * @generated
+ */
+ EClass CHANGE = eINSTANCE.getChange();
+
+ /**
+ * The meta object literal for the '<em><b>Parent</b></em>' container reference feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference CHANGE__PARENT = eINSTANCE.getChange_Parent();
+
+ /**
+ * The meta object literal for the '<em><b>Children</b></em>' containment reference list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference CHANGE__CHILDREN = eINSTANCE.getChange_Children();
+
+ /**
+ * The meta object literal for the '<em><b>Get Old Model Set</b></em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EOperation CHANGE___GET_OLD_MODEL_SET = eINSTANCE.getChange__GetOldModelSet();
+
+ /**
+ * The meta object literal for the '<em><b>Get New Model Set</b></em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EOperation CHANGE___GET_NEW_MODEL_SET = eINSTANCE.getChange__GetNewModelSet();
+
+ /**
+ * The meta object literal for the '<em><b>Get Model Set Change</b></em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EOperation CHANGE___GET_MODEL_SET_CHANGE = eINSTANCE.getChange__GetModelSetChange();
+
+ /**
+ * The meta object literal for the '<em><b>Get Old Element For</b></em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EOperation CHANGE___GET_OLD_ELEMENT_FOR__EMODELELEMENT = eINSTANCE.getChange__GetOldElementFor__EModelElement();
+
+ /**
+ * The meta object literal for the '<em><b>Get New Elements For</b></em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EOperation CHANGE___GET_NEW_ELEMENTS_FOR__EMODELELEMENT = eINSTANCE.getChange__GetNewElementsFor__EModelElement();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.emf.cdo.evolution.impl.ModelSetChangeImpl <em>Model Set Change</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.cdo.evolution.impl.ModelSetChangeImpl
+ * @see org.eclipse.emf.cdo.evolution.impl.EvolutionPackageImpl#getModelSetChange()
+ * @generated
+ */
+ EClass MODEL_SET_CHANGE = eINSTANCE.getModelSetChange();
+
+ /**
+ * The meta object literal for the '<em><b>Old Model Set</b></em>' reference feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference MODEL_SET_CHANGE__OLD_MODEL_SET = eINSTANCE.getModelSetChange_OldModelSet();
+
+ /**
+ * The meta object literal for the '<em><b>New Model Set</b></em>' reference feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference MODEL_SET_CHANGE__NEW_MODEL_SET = eINSTANCE.getModelSetChange_NewModelSet();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.emf.cdo.evolution.impl.ElementChangeImpl <em>Element Change</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.cdo.evolution.impl.ElementChangeImpl
+ * @see org.eclipse.emf.cdo.evolution.impl.EvolutionPackageImpl#getElementChange()
+ * @generated
+ */
+ EClass ELEMENT_CHANGE = eINSTANCE.getElementChange();
+
+ /**
+ * The meta object literal for the '<em><b>Old Element</b></em>' reference feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference ELEMENT_CHANGE__OLD_ELEMENT = eINSTANCE.getElementChange_OldElement();
+
+ /**
+ * The meta object literal for the '<em><b>New Element</b></em>' reference feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference ELEMENT_CHANGE__NEW_ELEMENT = eINSTANCE.getElementChange_NewElement();
+
+ /**
+ * The meta object literal for the '<em><b>Kind</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute ELEMENT_CHANGE__KIND = eINSTANCE.getElementChange_Kind();
+
+ /**
+ * The meta object literal for the '<em><b>Get Element</b></em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EOperation ELEMENT_CHANGE___GET_ELEMENT = eINSTANCE.getElementChange__GetElement();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.emf.cdo.evolution.impl.PropertyChangeImpl <em>Property Change</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.cdo.evolution.impl.PropertyChangeImpl
+ * @see org.eclipse.emf.cdo.evolution.impl.EvolutionPackageImpl#getPropertyChange()
+ * @generated
+ */
+ EClass PROPERTY_CHANGE = eINSTANCE.getPropertyChange();
+
+ /**
+ * The meta object literal for the '<em><b>Feature</b></em>' reference feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference PROPERTY_CHANGE__FEATURE = eINSTANCE.getPropertyChange_Feature();
+
+ /**
+ * The meta object literal for the '<em><b>Old Value</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute PROPERTY_CHANGE__OLD_VALUE = eINSTANCE.getPropertyChange_OldValue();
+
+ /**
+ * The meta object literal for the '<em><b>New Value</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute PROPERTY_CHANGE__NEW_VALUE = eINSTANCE.getPropertyChange_NewValue();
+
+ /**
+ * The meta object literal for the '<em><b>Kind</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute PROPERTY_CHANGE__KIND = eINSTANCE.getPropertyChange_Kind();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.emf.cdo.evolution.impl.MigrationImpl <em>Migration</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.cdo.evolution.impl.MigrationImpl
+ * @see org.eclipse.emf.cdo.evolution.impl.EvolutionPackageImpl#getMigration()
+ * @generated
+ */
+ EClass MIGRATION = eINSTANCE.getMigration();
+
+ /**
+ * The meta object literal for the '<em><b>Model Set</b></em>' container reference feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference MIGRATION__MODEL_SET = eINSTANCE.getMigration_ModelSet();
+
+ /**
+ * The meta object literal for the '<em><b>Diagnostic ID</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute MIGRATION__DIAGNOSTIC_ID = eINSTANCE.getMigration_DiagnosticID();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.emf.cdo.evolution.impl.FeaturePathMigrationImpl <em>Feature Path Migration</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.cdo.evolution.impl.FeaturePathMigrationImpl
+ * @see org.eclipse.emf.cdo.evolution.impl.EvolutionPackageImpl#getFeaturePathMigration()
+ * @generated
+ */
+ EClass FEATURE_PATH_MIGRATION = eINSTANCE.getFeaturePathMigration();
+
+ /**
+ * The meta object literal for the '<em><b>From Class</b></em>' reference feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference FEATURE_PATH_MIGRATION__FROM_CLASS = eINSTANCE.getFeaturePathMigration_FromClass();
+
+ /**
+ * The meta object literal for the '<em><b>To Class</b></em>' reference feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference FEATURE_PATH_MIGRATION__TO_CLASS = eINSTANCE.getFeaturePathMigration_ToClass();
+
+ /**
+ * The meta object literal for the '<em><b>Feature Path</b></em>' reference list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference FEATURE_PATH_MIGRATION__FEATURE_PATH = eINSTANCE.getFeaturePathMigration_FeaturePath();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.emf.cdo.evolution.ChangeKind <em>Change Kind</em>}' enum.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.cdo.evolution.ChangeKind
+ * @see org.eclipse.emf.cdo.evolution.impl.EvolutionPackageImpl#getChangeKind()
+ * @generated
+ */
+ EEnum CHANGE_KIND = eINSTANCE.getChangeKind();
+
+ /**
+ * The meta object literal for the '<em>URI</em>' data type.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.common.util.URI
+ * @see org.eclipse.emf.cdo.evolution.impl.EvolutionPackageImpl#getURI()
+ * @generated
+ */
+ EDataType URI = eINSTANCE.getURI();
+
+ }
+
+} // EvolutionPackage
diff --git a/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/FeaturePathMigration.java b/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/FeaturePathMigration.java
new file mode 100644
index 0000000000..857f6b9440
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/FeaturePathMigration.java
@@ -0,0 +1,97 @@
+/**
+ */
+package org.eclipse.emf.cdo.evolution;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EReference;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Feature Path Migration</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.emf.cdo.evolution.FeaturePathMigration#getFromClass <em>From Class</em>}</li>
+ * <li>{@link org.eclipse.emf.cdo.evolution.FeaturePathMigration#getToClass <em>To Class</em>}</li>
+ * <li>{@link org.eclipse.emf.cdo.evolution.FeaturePathMigration#getFeaturePath <em>Feature Path</em>}</li>
+ * </ul>
+ *
+ * @see org.eclipse.emf.cdo.evolution.EvolutionPackage#getFeaturePathMigration()
+ * @model annotation="http://www.eclipse.org/emf/2002/Ecore constraints='NewFeatureReachable'"
+ * @generated
+ */
+public interface FeaturePathMigration extends Migration
+{
+ /**
+ * Returns the value of the '<em><b>From Class</b></em>' reference.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>From Class</em>' reference isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>From Class</em>' reference.
+ * @see #setFromClass(EClass)
+ * @see org.eclipse.emf.cdo.evolution.EvolutionPackage#getFeaturePathMigration_FromClass()
+ * @model required="true"
+ * @generated
+ */
+ EClass getFromClass();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.emf.cdo.evolution.FeaturePathMigration#getFromClass <em>From Class</em>}' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>From Class</em>' reference.
+ * @see #getFromClass()
+ * @generated
+ */
+ void setFromClass(EClass value);
+
+ /**
+ * Returns the value of the '<em><b>To Class</b></em>' reference.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>To Class</em>' reference isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>To Class</em>' reference.
+ * @see #setToClass(EClass)
+ * @see org.eclipse.emf.cdo.evolution.EvolutionPackage#getFeaturePathMigration_ToClass()
+ * @model required="true"
+ * @generated
+ */
+ EClass getToClass();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.emf.cdo.evolution.FeaturePathMigration#getToClass <em>To Class</em>}' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>To Class</em>' reference.
+ * @see #getToClass()
+ * @generated
+ */
+ void setToClass(EClass value);
+
+ /**
+ * Returns the value of the '<em><b>Feature Path</b></em>' reference list.
+ * The list contents are of type {@link org.eclipse.emf.ecore.EReference}.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Feature Path</em>' reference list isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Feature Path</em>' reference list.
+ * @see org.eclipse.emf.cdo.evolution.EvolutionPackage#getFeaturePathMigration_FeaturePath()
+ * @model
+ * @generated
+ */
+ EList<EReference> getFeaturePath();
+
+} // FeaturePathMigration
diff --git a/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/Migration.java b/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/Migration.java
new file mode 100644
index 0000000000..6da9d95632
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/Migration.java
@@ -0,0 +1,82 @@
+/**
+ */
+package org.eclipse.emf.cdo.evolution;
+
+import org.eclipse.emf.cdo.CDOObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Migration</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.emf.cdo.evolution.Migration#getModelSet <em>Model Set</em>}</li>
+ * <li>{@link org.eclipse.emf.cdo.evolution.Migration#getDiagnosticID <em>Diagnostic ID</em>}</li>
+ * </ul>
+ *
+ * @see org.eclipse.emf.cdo.evolution.EvolutionPackage#getMigration()
+ * @model abstract="true"
+ * annotation="http://www.eclipse.org/emf/2002/Ecore constraints='NotObsolete'"
+ * @extends CDOObject
+ * @generated
+ */
+public interface Migration extends CDOObject
+{
+ /**
+ * Returns the value of the '<em><b>Model Set</b></em>' container reference.
+ * It is bidirectional and its opposite is '{@link org.eclipse.emf.cdo.evolution.ModelSet#getMigrations <em>Migrations</em>}'.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Model Set</em>' container reference isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Model Set</em>' container reference.
+ * @see #setModelSet(ModelSet)
+ * @see org.eclipse.emf.cdo.evolution.EvolutionPackage#getMigration_ModelSet()
+ * @see org.eclipse.emf.cdo.evolution.ModelSet#getMigrations
+ * @model opposite="migrations" transient="false"
+ * @generated
+ */
+ ModelSet getModelSet();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.emf.cdo.evolution.Migration#getModelSet <em>Model Set</em>}' container reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Model Set</em>' container reference.
+ * @see #getModelSet()
+ * @generated
+ */
+ void setModelSet(ModelSet value);
+
+ /**
+ * Returns the value of the '<em><b>Diagnostic ID</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Diagnostic ID</em>' attribute isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Diagnostic ID</em>' attribute.
+ * @see #setDiagnosticID(String)
+ * @see org.eclipse.emf.cdo.evolution.EvolutionPackage#getMigration_DiagnosticID()
+ * @model
+ * @generated
+ */
+ String getDiagnosticID();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.emf.cdo.evolution.Migration#getDiagnosticID <em>Diagnostic ID</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Diagnostic ID</em>' attribute.
+ * @see #getDiagnosticID()
+ * @generated
+ */
+ void setDiagnosticID(String value);
+
+} // Migration
diff --git a/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/Model.java b/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/Model.java
new file mode 100644
index 0000000000..77ad5c8e4e
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/Model.java
@@ -0,0 +1,163 @@
+/**
+ */
+package org.eclipse.emf.cdo.evolution;
+
+import org.eclipse.emf.cdo.CDOObject;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Model</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.emf.cdo.evolution.Model#getEvolution <em>Evolution</em>}</li>
+ * <li>{@link org.eclipse.emf.cdo.evolution.Model#getURI <em>URI</em>}</li>
+ * <li>{@link org.eclipse.emf.cdo.evolution.Model#getRootPackage <em>Root Package</em>}</li>
+ * <li>{@link org.eclipse.emf.cdo.evolution.Model#getAllPackages <em>All Packages</em>}</li>
+ * <li>{@link org.eclipse.emf.cdo.evolution.Model#getReferencedPackages <em>Referenced Packages</em>}</li>
+ * <li>{@link org.eclipse.emf.cdo.evolution.Model#getMissingPackages <em>Missing Packages</em>}</li>
+ * </ul>
+ *
+ * @see org.eclipse.emf.cdo.evolution.EvolutionPackage#getModel()
+ * @model annotation="http://www.eclipse.org/emf/2002/Ecore constraints='ModelLoaded IDs_Exist NamespaceReflectsChange'"
+ * @extends CDOObject
+ * @generated
+ */
+public interface Model extends CDOObject
+{
+ /**
+ * Returns the value of the '<em><b>Evolution</b></em>' container reference.
+ * It is bidirectional and its opposite is '{@link org.eclipse.emf.cdo.evolution.Evolution#getModels <em>Models</em>}'.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Evolution</em>' container reference isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Evolution</em>' container reference.
+ * @see #setEvolution(Evolution)
+ * @see org.eclipse.emf.cdo.evolution.EvolutionPackage#getModel_Evolution()
+ * @see org.eclipse.emf.cdo.evolution.Evolution#getModels
+ * @model opposite="models" required="true" transient="false"
+ * @generated
+ */
+ Evolution getEvolution();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.emf.cdo.evolution.Model#getEvolution <em>Evolution</em>}' container reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Evolution</em>' container reference.
+ * @see #getEvolution()
+ * @generated
+ */
+ void setEvolution(Evolution value);
+
+ /**
+ * Returns the value of the '<em><b>URI</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>URI</em>' attribute isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>URI</em>' attribute.
+ * @see #setURI(URI)
+ * @see org.eclipse.emf.cdo.evolution.EvolutionPackage#getModel_URI()
+ * @model dataType="org.eclipse.emf.cdo.evolution.URI"
+ * extendedMetaData="kind='attribute' name='uri'"
+ * @generated
+ */
+ URI getURI();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.emf.cdo.evolution.Model#getURI <em>URI</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>URI</em>' attribute.
+ * @see #getURI()
+ * @generated
+ */
+ void setURI(URI value);
+
+ /**
+ * Returns the value of the '<em><b>Root Package</b></em>' reference.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Root Package</em>' reference isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Root Package</em>' reference.
+ * @see org.eclipse.emf.cdo.evolution.EvolutionPackage#getModel_RootPackage()
+ * @model transient="true" changeable="false" volatile="true" derived="true"
+ * @generated
+ */
+ EPackage getRootPackage();
+
+ /**
+ * Returns the value of the '<em><b>All Packages</b></em>' reference list.
+ * The list contents are of type {@link org.eclipse.emf.ecore.EPackage}.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>All Packages</em>' reference list isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>All Packages</em>' reference list.
+ * @see org.eclipse.emf.cdo.evolution.EvolutionPackage#getModel_AllPackages()
+ * @model transient="true" changeable="false" volatile="true" derived="true"
+ * @generated
+ */
+ EList<EPackage> getAllPackages();
+
+ /**
+ * Returns the value of the '<em><b>Referenced Packages</b></em>' reference list.
+ * The list contents are of type {@link org.eclipse.emf.ecore.EPackage}.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Referenced Packages</em>' reference list isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Referenced Packages</em>' reference list.
+ * @see org.eclipse.emf.cdo.evolution.EvolutionPackage#getModel_ReferencedPackages()
+ * @model transient="true" changeable="false" volatile="true" derived="true"
+ * @generated
+ */
+ EList<EPackage> getReferencedPackages();
+
+ /**
+ * Returns the value of the '<em><b>Missing Packages</b></em>' reference list.
+ * The list contents are of type {@link org.eclipse.emf.ecore.EPackage}.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Missing Packages</em>' reference list isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Missing Packages</em>' reference list.
+ * @see org.eclipse.emf.cdo.evolution.EvolutionPackage#getModel_MissingPackages()
+ * @model transient="true" changeable="false" volatile="true" derived="true"
+ * @generated
+ */
+ EList<EPackage> getMissingPackages();
+
+ public ModelStatus getStatus();
+
+ /**
+ * @author Eike Stepper
+ */
+ public enum ModelStatus
+ {
+ NO_URI, NO_RESOURCE_SET, RESOURCE_NOT_FOUND, LOAD_PROBLEM, CONTENT_PROBLEM, OK
+ }
+
+} // Model
diff --git a/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/ModelSet.java b/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/ModelSet.java
new file mode 100644
index 0000000000..9b4e61e5d5
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/ModelSet.java
@@ -0,0 +1,163 @@
+/**
+ */
+package org.eclipse.emf.cdo.evolution;
+
+import org.eclipse.emf.cdo.CDOObject;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EModelElement;
+import org.eclipse.emf.ecore.EPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Model Set</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.emf.cdo.evolution.ModelSet#getChange <em>Change</em>}</li>
+ * <li>{@link org.eclipse.emf.cdo.evolution.ModelSet#getMigrations <em>Migrations</em>}</li>
+ * </ul>
+ *
+ * @see org.eclipse.emf.cdo.evolution.EvolutionPackage#getModelSet()
+ * @model abstract="true"
+ * @extends CDOObject
+ * @generated
+ */
+public interface ModelSet extends CDOObject
+{
+ /**
+ * Returns the value of the '<em><b>Change</b></em>' containment reference.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Change</em>' reference isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Change</em>' containment reference.
+ * @see #isSetChange()
+ * @see org.eclipse.emf.cdo.evolution.EvolutionPackage#getModelSet_Change()
+ * @model containment="true" unsettable="true" transient="true" derived="true" suppressedSetVisibility="true" suppressedUnsetVisibility="true"
+ * @generated
+ */
+ ModelSetChange getChange();
+
+ /**
+ * Returns whether the value of the '{@link org.eclipse.emf.cdo.evolution.ModelSet#getChange <em>Change</em>}' containment reference is set.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return whether the value of the '<em>Change</em>' containment reference is set.
+ * @see #getChange()
+ * @generated
+ */
+ boolean isSetChange();
+
+ /**
+ * Returns the value of the '<em><b>Migrations</b></em>' containment reference list.
+ * The list contents are of type {@link org.eclipse.emf.cdo.evolution.Migration}.
+ * It is bidirectional and its opposite is '{@link org.eclipse.emf.cdo.evolution.Migration#getModelSet <em>Model Set</em>}'.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Migrations</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>Migrations</em>' containment reference list.
+ * @see org.eclipse.emf.cdo.evolution.EvolutionPackage#getModelSet_Migrations()
+ * @see org.eclipse.emf.cdo.evolution.Migration#getModelSet
+ * @model opposite="modelSet" containment="true"
+ * @generated
+ */
+ EList<Migration> getMigrations();
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @model kind="operation"
+ * @generated
+ */
+ Evolution getEvolution();
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @model kind="operation"
+ * @generated
+ */
+ int getVersion();
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @model kind="operation"
+ * @generated
+ */
+ Release getPreviousRelease();
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @model kind="operation"
+ * @generated
+ */
+ EList<EPackage> getRootPackages();
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @model kind="operation"
+ * @generated
+ */
+ EList<EPackage> getAllPackages();
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @model
+ * @generated
+ */
+ boolean containsElement(EModelElement modelElement);
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @model
+ * @generated
+ */
+ <T extends EModelElement> T getElement(String id);
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @model
+ * @generated
+ */
+ String getElementID(EModelElement modelElement);
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @model
+ * @generated
+ */
+ String getElementID(EModelElement modelElement, boolean considerOldIDs);
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @model
+ * @generated
+ */
+ ModelSetChange compare(ModelSet other);
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @model
+ * @generated
+ */
+ Migration getMigration(String diagnosticID);
+
+} // ModelSet
diff --git a/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/ModelSetChange.java b/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/ModelSetChange.java
new file mode 100644
index 0000000000..d17c62092b
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/ModelSetChange.java
@@ -0,0 +1,71 @@
+/**
+ */
+package org.eclipse.emf.cdo.evolution;
+
+import org.eclipse.emf.ecore.EModelElement;
+
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Model Set Change</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.emf.cdo.evolution.ModelSetChange#getOldModelSet <em>Old Model Set</em>}</li>
+ * <li>{@link org.eclipse.emf.cdo.evolution.ModelSetChange#getNewModelSet <em>New Model Set</em>}</li>
+ * </ul>
+ *
+ * @see org.eclipse.emf.cdo.evolution.EvolutionPackage#getModelSetChange()
+ * @model
+ * @generated
+ */
+public interface ModelSetChange extends Change
+{
+ /**
+ * Returns the value of the '<em><b>Old Model Set</b></em>' reference.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Old Model Set</em>' reference isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Old Model Set</em>' reference.
+ * @see org.eclipse.emf.cdo.evolution.EvolutionPackage#getModelSetChange_OldModelSet()
+ * @model suppressedSetVisibility="true"
+ * @generated
+ */
+ ModelSet getOldModelSet();
+
+ /**
+ * Returns the value of the '<em><b>New Model Set</b></em>' reference.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>New Model Set</em>' reference isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>New Model Set</em>' reference.
+ * @see org.eclipse.emf.cdo.evolution.EvolutionPackage#getModelSetChange_NewModelSet()
+ * @model suppressedSetVisibility="true"
+ * @generated
+ */
+ ModelSet getNewModelSet();
+
+ ModelSet[] getModelSetChain();
+
+ Map<EModelElement, ElementChange> getElementChanges();
+
+ Map<EModelElement, EModelElement> getNewToOldElements();
+
+ Map<EModelElement, Set<EModelElement>> getOldToNewElements();
+
+ Set<EModelElement> getAddedElements();
+
+ Set<EModelElement> getRemovedElements();
+
+} // ModelSetChange
diff --git a/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/PropertyChange.java b/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/PropertyChange.java
new file mode 100644
index 0000000000..7aab3eae4b
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/PropertyChange.java
@@ -0,0 +1,90 @@
+/**
+ */
+package org.eclipse.emf.cdo.evolution;
+
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Property Change</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.emf.cdo.evolution.PropertyChange#getFeature <em>Feature</em>}</li>
+ * <li>{@link org.eclipse.emf.cdo.evolution.PropertyChange#getOldValue <em>Old Value</em>}</li>
+ * <li>{@link org.eclipse.emf.cdo.evolution.PropertyChange#getNewValue <em>New Value</em>}</li>
+ * <li>{@link org.eclipse.emf.cdo.evolution.PropertyChange#getKind <em>Kind</em>}</li>
+ * </ul>
+ *
+ * @see org.eclipse.emf.cdo.evolution.EvolutionPackage#getPropertyChange()
+ * @model
+ * @generated
+ */
+public interface PropertyChange extends Change
+{
+ /**
+ * 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 org.eclipse.emf.cdo.evolution.EvolutionPackage#getPropertyChange_Feature()
+ * @model suppressedSetVisibility="true"
+ * @generated
+ */
+ EStructuralFeature getFeature();
+
+ /**
+ * Returns the value of the '<em><b>Old Value</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Old 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>Old Value</em>' attribute.
+ * @see org.eclipse.emf.cdo.evolution.EvolutionPackage#getPropertyChange_OldValue()
+ * @model suppressedSetVisibility="true"
+ * @generated
+ */
+ Object getOldValue();
+
+ /**
+ * Returns the value of the '<em><b>New Value</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>New 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>New Value</em>' attribute.
+ * @see org.eclipse.emf.cdo.evolution.EvolutionPackage#getPropertyChange_NewValue()
+ * @model suppressedSetVisibility="true"
+ * @generated
+ */
+ Object getNewValue();
+
+ /**
+ * Returns the value of the '<em><b>Kind</b></em>' attribute.
+ * The literals are from the enumeration {@link org.eclipse.emf.cdo.evolution.ChangeKind}.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Kind</em>' attribute isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Kind</em>' attribute.
+ * @see org.eclipse.emf.cdo.evolution.ChangeKind
+ * @see org.eclipse.emf.cdo.evolution.EvolutionPackage#getPropertyChange_Kind()
+ * @model transient="true" changeable="false" volatile="true" derived="true"
+ * @generated
+ */
+ ChangeKind getKind();
+
+} // PropertyChange
diff --git a/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/Release.java b/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/Release.java
new file mode 100644
index 0000000000..ef07d0dfbb
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/Release.java
@@ -0,0 +1,177 @@
+/**
+ */
+package org.eclipse.emf.cdo.evolution;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EPackage;
+
+import java.util.Date;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Release</b></em>'.
+ * @extends Comparable<Release>
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.emf.cdo.evolution.Release#getEvolution <em>Evolution</em>}</li>
+ * <li>{@link org.eclipse.emf.cdo.evolution.Release#getVersion <em>Version</em>}</li>
+ * <li>{@link org.eclipse.emf.cdo.evolution.Release#getDate <em>Date</em>}</li>
+ * <li>{@link org.eclipse.emf.cdo.evolution.Release#getNextRelease <em>Next Release</em>}</li>
+ * <li>{@link org.eclipse.emf.cdo.evolution.Release#getPreviousRelease <em>Previous Release</em>}</li>
+ * <li>{@link org.eclipse.emf.cdo.evolution.Release#getRootPackages <em>Root Packages</em>}</li>
+ * <li>{@link org.eclipse.emf.cdo.evolution.Release#getAllPackages <em>All Packages</em>}</li>
+ * </ul>
+ *
+ * @see org.eclipse.emf.cdo.evolution.EvolutionPackage#getRelease()
+ * @model
+ * @generated
+ */
+public interface Release extends ModelSet, Comparable<Release>
+{
+ /**
+ * Returns the value of the '<em><b>Evolution</b></em>' container reference.
+ * It is bidirectional and its opposite is '{@link org.eclipse.emf.cdo.evolution.Evolution#getReleases <em>Releases</em>}'.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Evolution</em>' reference isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Evolution</em>' container reference.
+ * @see #setEvolution(Evolution)
+ * @see org.eclipse.emf.cdo.evolution.EvolutionPackage#getRelease_Evolution()
+ * @see org.eclipse.emf.cdo.evolution.Evolution#getReleases
+ * @model opposite="releases" required="true" transient="false"
+ * @generated
+ */
+ Evolution getEvolution();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.emf.cdo.evolution.Release#getEvolution <em>Evolution</em>}' container reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Evolution</em>' container reference.
+ * @see #getEvolution()
+ * @generated
+ */
+ void setEvolution(Evolution value);
+
+ /**
+ * Returns the value of the '<em><b>Date</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Date</em>' attribute isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Date</em>' attribute.
+ * @see #setDate(Date)
+ * @see org.eclipse.emf.cdo.evolution.EvolutionPackage#getRelease_Date()
+ * @model required="true"
+ * @generated
+ */
+ Date getDate();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.emf.cdo.evolution.Release#getDate <em>Date</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Date</em>' attribute.
+ * @see #getDate()
+ * @generated
+ */
+ void setDate(Date value);
+
+ /**
+ * Returns the value of the '<em><b>Next Release</b></em>' reference.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Next Release</em>' reference isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Next Release</em>' reference.
+ * @see org.eclipse.emf.cdo.evolution.EvolutionPackage#getRelease_NextRelease()
+ * @model transient="true" changeable="false" volatile="true" derived="true"
+ * @generated
+ */
+ Release getNextRelease();
+
+ /**
+ * Returns the value of the '<em><b>Previous Release</b></em>' reference.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Previous Release</em>' reference isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Previous Release</em>' reference.
+ * @see org.eclipse.emf.cdo.evolution.EvolutionPackage#getRelease_PreviousRelease()
+ * @model transient="true" changeable="false" volatile="true" derived="true"
+ * @generated
+ */
+ Release getPreviousRelease();
+
+ /**
+ * Returns the value of the '<em><b>Version</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Version</em>' attribute isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Version</em>' attribute.
+ * @see #setVersion(int)
+ * @see org.eclipse.emf.cdo.evolution.EvolutionPackage#getRelease_Version()
+ * @model required="true"
+ * @generated
+ */
+ int getVersion();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.emf.cdo.evolution.Release#getVersion <em>Version</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Version</em>' attribute.
+ * @see #getVersion()
+ * @generated
+ */
+ void setVersion(int value);
+
+ /**
+ * Returns the value of the '<em><b>Root Packages</b></em>' containment reference list.
+ * The list contents are of type {@link org.eclipse.emf.ecore.EPackage}.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Root Packages</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>Root Packages</em>' containment reference list.
+ * @see org.eclipse.emf.cdo.evolution.EvolutionPackage#getRelease_RootPackages()
+ * @model containment="true"
+ * @generated
+ */
+ EList<EPackage> getRootPackages();
+
+ /**
+ * Returns the value of the '<em><b>All Packages</b></em>' reference list.
+ * The list contents are of type {@link org.eclipse.emf.ecore.EPackage}.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>All Packages</em>' reference list isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>All Packages</em>' reference list.
+ * @see org.eclipse.emf.cdo.evolution.EvolutionPackage#getRelease_AllPackages()
+ * @model transient="true" changeable="false" volatile="true" derived="true"
+ * @generated
+ */
+ EList<EPackage> getAllPackages();
+
+} // Release
diff --git a/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/impl/ChangeImpl.java b/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/impl/ChangeImpl.java
new file mode 100644
index 0000000000..eb877a9fc6
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/impl/ChangeImpl.java
@@ -0,0 +1,349 @@
+/**
+ */
+package org.eclipse.emf.cdo.evolution.impl;
+
+import org.eclipse.emf.cdo.evolution.Change;
+import org.eclipse.emf.cdo.evolution.EvolutionPackage;
+import org.eclipse.emf.cdo.evolution.ModelSet;
+import org.eclipse.emf.cdo.evolution.ModelSetChange;
+
+import org.eclipse.emf.internal.cdo.CDOObjectImpl;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.BasicEList;
+import org.eclipse.emf.common.util.ECollections;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EModelElement;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.Collection;
+import java.util.Set;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Change</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.emf.cdo.evolution.impl.ChangeImpl#getParent <em>Parent</em>}</li>
+ * <li>{@link org.eclipse.emf.cdo.evolution.impl.ChangeImpl#getChildren <em>Children</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public abstract class ChangeImpl extends CDOObjectImpl implements Change
+{
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected ChangeImpl()
+ {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass()
+ {
+ return EvolutionPackage.Literals.CHANGE;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected int eStaticFeatureCount()
+ {
+ return 0;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public Change getParent()
+ {
+ return (Change)eDynamicGet(EvolutionPackage.CHANGE__PARENT, EvolutionPackage.Literals.CHANGE__PARENT, true, true);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public NotificationChain basicSetParent(Change newParent, NotificationChain msgs)
+ {
+ msgs = eBasicSetContainer((InternalEObject)newParent, EvolutionPackage.CHANGE__PARENT, msgs);
+ return msgs;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setParent(Change newParent)
+ {
+ eDynamicSet(EvolutionPackage.CHANGE__PARENT, EvolutionPackage.Literals.CHANGE__PARENT, newParent);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ public EList<Change> getChildren()
+ {
+ return (EList<Change>)eDynamicGet(EvolutionPackage.CHANGE__CHILDREN, EvolutionPackage.Literals.CHANGE__CHILDREN, true, true);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ public abstract ModelSet getOldModelSet();
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ public abstract ModelSet getNewModelSet();
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ public ModelSetChange getModelSetChange()
+ {
+ Change parent = getParent();
+ if (parent != null)
+ {
+ return parent.getModelSetChange();
+ }
+
+ return null;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ public EModelElement getOldElementFor(EModelElement newElement)
+ {
+ ModelSetChange modelSetChange = getModelSetChange();
+ if (modelSetChange != null)
+ {
+ return modelSetChange.getNewToOldElements().get(newElement);
+ }
+
+ return null;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ public EList<EModelElement> getNewElementsFor(EModelElement oldElement)
+ {
+ ModelSetChange modelSetChange = getModelSetChange();
+ if (modelSetChange != null)
+ {
+ Set<EModelElement> newElements = modelSetChange.getOldToNewElements().get(oldElement);
+ if (newElements != null)
+ {
+ int size = newElements.size();
+ if (size == 1)
+ {
+ return ECollections.singletonEList(newElements.iterator().next());
+ }
+
+ if (size > 1)
+ {
+ return new BasicEList<EModelElement>(newElements);
+ }
+ }
+ }
+
+ return ECollections.emptyEList();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+ {
+ switch (featureID)
+ {
+ case EvolutionPackage.CHANGE__PARENT:
+ if (eInternalContainer() != null)
+ {
+ msgs = eBasicRemoveFromContainer(msgs);
+ }
+ return basicSetParent((Change)otherEnd, msgs);
+ case EvolutionPackage.CHANGE__CHILDREN:
+ return ((InternalEList<InternalEObject>)(InternalEList<?>)getChildren()).basicAdd(otherEnd, msgs);
+ }
+ return super.eInverseAdd(otherEnd, featureID, msgs);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+ {
+ switch (featureID)
+ {
+ case EvolutionPackage.CHANGE__PARENT:
+ return basicSetParent(null, msgs);
+ case EvolutionPackage.CHANGE__CHILDREN:
+ return ((InternalEList<?>)getChildren()).basicRemove(otherEnd, msgs);
+ }
+ return super.eInverseRemove(otherEnd, featureID, msgs);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public NotificationChain eBasicRemoveFromContainerFeature(NotificationChain msgs)
+ {
+ switch (eContainerFeatureID())
+ {
+ case EvolutionPackage.CHANGE__PARENT:
+ return eInternalContainer().eInverseRemove(this, EvolutionPackage.CHANGE__CHILDREN, Change.class, msgs);
+ }
+ return super.eBasicRemoveFromContainerFeature(msgs);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType)
+ {
+ switch (featureID)
+ {
+ case EvolutionPackage.CHANGE__PARENT:
+ return getParent();
+ case EvolutionPackage.CHANGE__CHILDREN:
+ return getChildren();
+ }
+ 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 EvolutionPackage.CHANGE__PARENT:
+ setParent((Change)newValue);
+ return;
+ case EvolutionPackage.CHANGE__CHILDREN:
+ getChildren().clear();
+ getChildren().addAll((Collection<? extends Change>)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID)
+ {
+ switch (featureID)
+ {
+ case EvolutionPackage.CHANGE__PARENT:
+ setParent((Change)null);
+ return;
+ case EvolutionPackage.CHANGE__CHILDREN:
+ getChildren().clear();
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID)
+ {
+ switch (featureID)
+ {
+ case EvolutionPackage.CHANGE__PARENT:
+ return getParent() != null;
+ case EvolutionPackage.CHANGE__CHILDREN:
+ return !getChildren().isEmpty();
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object eInvoke(int operationID, EList<?> arguments) throws InvocationTargetException
+ {
+ switch (operationID)
+ {
+ case EvolutionPackage.CHANGE___GET_MODEL_SET_CHANGE:
+ return getModelSetChange();
+ case EvolutionPackage.CHANGE___GET_OLD_ELEMENT_FOR__EMODELELEMENT:
+ return getOldElementFor((EModelElement)arguments.get(0));
+ case EvolutionPackage.CHANGE___GET_NEW_ELEMENTS_FOR__EMODELELEMENT:
+ return getNewElementsFor((EModelElement)arguments.get(0));
+ case EvolutionPackage.CHANGE___GET_OLD_MODEL_SET:
+ return getOldModelSet();
+ case EvolutionPackage.CHANGE___GET_NEW_MODEL_SET:
+ return getNewModelSet();
+ }
+ return super.eInvoke(operationID, arguments);
+ }
+
+} // ChangeImpl
diff --git a/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/impl/ElementChangeImpl.java b/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/impl/ElementChangeImpl.java
new file mode 100644
index 0000000000..9789905356
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/impl/ElementChangeImpl.java
@@ -0,0 +1,317 @@
+/**
+ */
+package org.eclipse.emf.cdo.evolution.impl;
+
+import org.eclipse.emf.cdo.evolution.Change;
+import org.eclipse.emf.cdo.evolution.ChangeKind;
+import org.eclipse.emf.cdo.evolution.ElementChange;
+import org.eclipse.emf.cdo.evolution.EvolutionPackage;
+import org.eclipse.emf.cdo.evolution.ModelSet;
+import org.eclipse.emf.cdo.evolution.util.DiagnosticID;
+import org.eclipse.emf.cdo.evolution.util.IDAnnotation;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EModelElement;
+
+import java.lang.reflect.InvocationTargetException;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Element Change</b></em>'.
+ * @implements DiagnosticID.Provider
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.emf.cdo.evolution.impl.ElementChangeImpl#getOldElement <em>Old Element</em>}</li>
+ * <li>{@link org.eclipse.emf.cdo.evolution.impl.ElementChangeImpl#getNewElement <em>New Element</em>}</li>
+ * <li>{@link org.eclipse.emf.cdo.evolution.impl.ElementChangeImpl#getKind <em>Kind</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class ElementChangeImpl extends ChangeImpl implements ElementChange, DiagnosticID.Provider
+{
+ /**
+ * The default value of the '{@link #getKind() <em>Kind</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getKind()
+ * @generated
+ * @ordered
+ */
+ protected static final ChangeKind KIND_EDEFAULT = ChangeKind.NONE;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected ElementChangeImpl()
+ {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass()
+ {
+ return EvolutionPackage.Literals.ELEMENT_CHANGE;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EModelElement getOldElement()
+ {
+ return (EModelElement)eDynamicGet(EvolutionPackage.ELEMENT_CHANGE__OLD_ELEMENT, EvolutionPackage.Literals.ELEMENT_CHANGE__OLD_ELEMENT, true, true);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EModelElement basicGetOldElement()
+ {
+ return (EModelElement)eDynamicGet(EvolutionPackage.ELEMENT_CHANGE__OLD_ELEMENT, EvolutionPackage.Literals.ELEMENT_CHANGE__OLD_ELEMENT, false, true);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setOldElement(EModelElement newOldElement)
+ {
+ eDynamicSet(EvolutionPackage.ELEMENT_CHANGE__OLD_ELEMENT, EvolutionPackage.Literals.ELEMENT_CHANGE__OLD_ELEMENT, newOldElement);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EModelElement getNewElement()
+ {
+ return (EModelElement)eDynamicGet(EvolutionPackage.ELEMENT_CHANGE__NEW_ELEMENT, EvolutionPackage.Literals.ELEMENT_CHANGE__NEW_ELEMENT, true, true);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EModelElement basicGetNewElement()
+ {
+ return (EModelElement)eDynamicGet(EvolutionPackage.ELEMENT_CHANGE__NEW_ELEMENT, EvolutionPackage.Literals.ELEMENT_CHANGE__NEW_ELEMENT, false, true);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setNewElement(EModelElement newNewElement)
+ {
+ eDynamicSet(EvolutionPackage.ELEMENT_CHANGE__NEW_ELEMENT, EvolutionPackage.Literals.ELEMENT_CHANGE__NEW_ELEMENT, newNewElement);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public ChangeKind getKind()
+ {
+ return (ChangeKind)eDynamicGet(EvolutionPackage.ELEMENT_CHANGE__KIND, EvolutionPackage.Literals.ELEMENT_CHANGE__KIND, true, true);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setKind(ChangeKind newKind)
+ {
+ eDynamicSet(EvolutionPackage.ELEMENT_CHANGE__KIND, EvolutionPackage.Literals.ELEMENT_CHANGE__KIND, newKind);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ public EModelElement getElement()
+ {
+ EModelElement element = getNewElement();
+ if (element == null)
+ {
+ element = getOldElement();
+ }
+
+ return element;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType)
+ {
+ switch (featureID)
+ {
+ case EvolutionPackage.ELEMENT_CHANGE__OLD_ELEMENT:
+ if (resolve)
+ {
+ return getOldElement();
+ }
+ return basicGetOldElement();
+ case EvolutionPackage.ELEMENT_CHANGE__NEW_ELEMENT:
+ if (resolve)
+ {
+ return getNewElement();
+ }
+ return basicGetNewElement();
+ case EvolutionPackage.ELEMENT_CHANGE__KIND:
+ return getKind();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eSet(int featureID, Object newValue)
+ {
+ switch (featureID)
+ {
+ case EvolutionPackage.ELEMENT_CHANGE__OLD_ELEMENT:
+ setOldElement((EModelElement)newValue);
+ return;
+ case EvolutionPackage.ELEMENT_CHANGE__NEW_ELEMENT:
+ setNewElement((EModelElement)newValue);
+ return;
+ case EvolutionPackage.ELEMENT_CHANGE__KIND:
+ setKind((ChangeKind)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID)
+ {
+ switch (featureID)
+ {
+ case EvolutionPackage.ELEMENT_CHANGE__OLD_ELEMENT:
+ setOldElement((EModelElement)null);
+ return;
+ case EvolutionPackage.ELEMENT_CHANGE__NEW_ELEMENT:
+ setNewElement((EModelElement)null);
+ return;
+ case EvolutionPackage.ELEMENT_CHANGE__KIND:
+ setKind(KIND_EDEFAULT);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID)
+ {
+ switch (featureID)
+ {
+ case EvolutionPackage.ELEMENT_CHANGE__OLD_ELEMENT:
+ return basicGetOldElement() != null;
+ case EvolutionPackage.ELEMENT_CHANGE__NEW_ELEMENT:
+ return basicGetNewElement() != null;
+ case EvolutionPackage.ELEMENT_CHANGE__KIND:
+ return getKind() != KIND_EDEFAULT;
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object eInvoke(int operationID, EList<?> arguments) throws InvocationTargetException
+ {
+ switch (operationID)
+ {
+ case EvolutionPackage.ELEMENT_CHANGE___GET_ELEMENT:
+ return getElement();
+ }
+ return super.eInvoke(operationID, arguments);
+ }
+
+ @Override
+ public ModelSet getOldModelSet()
+ {
+ Change parent = getParent();
+ if (parent != null)
+ {
+ return parent.getOldModelSet();
+ }
+
+ return null;
+ }
+
+ @Override
+ public ModelSet getNewModelSet()
+ {
+ Change parent = getParent();
+ if (parent != null)
+ {
+ return parent.getNewModelSet();
+ }
+
+ return null;
+ }
+
+ public void extractDiagnosticData(Context context)
+ {
+ context.add("EC");
+
+ EModelElement newElement = getNewElement();
+ if (newElement != null)
+ {
+ context.add(IDAnnotation.getValue(newElement));
+ }
+
+ EModelElement oldElement = getOldElement();
+ if (oldElement != null)
+ {
+ context.add(IDAnnotation.getValue(oldElement));
+ }
+
+ context.add(getKind().getName());
+ }
+
+} // ElementChangeImpl
diff --git a/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/impl/EvolutionFactoryImpl.java b/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/impl/EvolutionFactoryImpl.java
new file mode 100644
index 0000000000..f50c7c98ea
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/impl/EvolutionFactoryImpl.java
@@ -0,0 +1,352 @@
+/**
+ */
+package org.eclipse.emf.cdo.evolution.impl;
+
+import org.eclipse.emf.cdo.evolution.ChangeKind;
+import org.eclipse.emf.cdo.evolution.ElementChange;
+import org.eclipse.emf.cdo.evolution.Evolution;
+import org.eclipse.emf.cdo.evolution.EvolutionFactory;
+import org.eclipse.emf.cdo.evolution.EvolutionPackage;
+import org.eclipse.emf.cdo.evolution.FeaturePathMigration;
+import org.eclipse.emf.cdo.evolution.Model;
+import org.eclipse.emf.cdo.evolution.ModelSet;
+import org.eclipse.emf.cdo.evolution.ModelSetChange;
+import org.eclipse.emf.cdo.evolution.PropertyChange;
+import org.eclipse.emf.cdo.evolution.Release;
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EDataType;
+import org.eclipse.emf.ecore.EModelElement;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EStructuralFeature;
+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 EvolutionFactoryImpl extends EFactoryImpl implements EvolutionFactory
+{
+ /**
+ * Creates the default factory implementation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static EvolutionFactory init()
+ {
+ try
+ {
+ EvolutionFactory theEvolutionFactory = (EvolutionFactory)EPackage.Registry.INSTANCE.getEFactory(EvolutionPackage.eNS_URI);
+ if (theEvolutionFactory != null)
+ {
+ return theEvolutionFactory;
+ }
+ }
+ catch (Exception exception)
+ {
+ EcorePlugin.INSTANCE.log(exception);
+ }
+ return new EvolutionFactoryImpl();
+ }
+
+ /**
+ * Creates an instance of the factory.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EvolutionFactoryImpl()
+ {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public EObject create(EClass eClass)
+ {
+ switch (eClass.getClassifierID())
+ {
+ case EvolutionPackage.MODEL:
+ return createModel();
+ case EvolutionPackage.EVOLUTION:
+ return createEvolution();
+ case EvolutionPackage.RELEASE:
+ return createRelease();
+ case EvolutionPackage.MODEL_SET_CHANGE:
+ return createModelSetChange();
+ case EvolutionPackage.ELEMENT_CHANGE:
+ return createElementChange();
+ case EvolutionPackage.PROPERTY_CHANGE:
+ return createPropertyChange();
+ case EvolutionPackage.FEATURE_PATH_MIGRATION:
+ return createFeaturePathMigration();
+ 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 EvolutionPackage.CHANGE_KIND:
+ return createChangeKindFromString(eDataType, initialValue);
+ case EvolutionPackage.URI:
+ return createURIFromString(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 EvolutionPackage.CHANGE_KIND:
+ return convertChangeKindToString(eDataType, instanceValue);
+ case EvolutionPackage.URI:
+ return convertURIToString(eDataType, instanceValue);
+ default:
+ throw new IllegalArgumentException("The datatype '" + eDataType.getName() + "' is not a valid classifier");
+ }
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public Model createModel()
+ {
+ ModelImpl model = new ModelImpl();
+ return model;
+ }
+
+ public Model createModel(URI uri)
+ {
+ ModelImpl model = new ModelImpl();
+ model.setURI(uri);
+ return model;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public Evolution createEvolution()
+ {
+ EvolutionImpl evolution = new EvolutionImpl();
+ return evolution;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public Release createRelease()
+ {
+ ReleaseImpl release = new ReleaseImpl();
+ return release;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public ModelSetChange createModelSetChange()
+ {
+ ModelSetChangeImpl modelSetChange = new ModelSetChangeImpl();
+ return modelSetChange;
+ }
+
+ public ModelSetChange createModelSetChange(ModelSet[] modelSetChain)
+ {
+ ModelSetChangeImpl modelSetChange = new ModelSetChangeImpl();
+ modelSetChange.setModelSetChain(modelSetChain);
+ return modelSetChange;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public ElementChange createElementChange()
+ {
+ ElementChangeImpl elementChange = new ElementChangeImpl();
+ return elementChange;
+ }
+
+ public ElementChange createElementChange(EModelElement oldElement, EModelElement newElement, ChangeKind kind)
+ {
+ ElementChangeImpl elementChange = new ElementChangeImpl();
+ elementChange.setOldElement(oldElement);
+ elementChange.setNewElement(newElement);
+ elementChange.setKind(kind);
+ return elementChange;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public PropertyChange createPropertyChange()
+ {
+ PropertyChangeImpl propertyChange = new PropertyChangeImpl();
+ return propertyChange;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public FeaturePathMigration createFeaturePathMigration()
+ {
+ FeaturePathMigrationImpl featurePathMigration = new FeaturePathMigrationImpl();
+ return featurePathMigration;
+ }
+
+ public PropertyChange createPropertyChange(EStructuralFeature feature, Object oldValue, Object newValue)
+ {
+ PropertyChangeImpl propertyChange = new PropertyChangeImpl();
+ propertyChange.setFeature(feature);
+ propertyChange.setOldValue(oldValue);
+ propertyChange.setNewValue(newValue);
+ return propertyChange;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public ChangeKind createChangeKind(String literal)
+ {
+ ChangeKind result = ChangeKind.get(literal);
+ if (result == null)
+ {
+ throw new IllegalArgumentException("The value '" + literal + "' is not a valid enumerator of '" + EvolutionPackage.Literals.CHANGE_KIND.getName() + "'");
+ }
+ return result;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public ChangeKind createChangeKindFromString(EDataType eDataType, String initialValue)
+ {
+ return createChangeKind(initialValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public String convertChangeKind(ChangeKind instanceValue)
+ {
+ return instanceValue == null ? null : instanceValue.toString();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public String convertChangeKindToString(EDataType eDataType, Object instanceValue)
+ {
+ return convertChangeKind((ChangeKind)instanceValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ public URI createURI(String literal)
+ {
+ return literal == null ? null : URI.createURI(literal);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ public URI createURIFromString(EDataType eDataType, String initialValue)
+ {
+ return initialValue == null ? null : URI.createURI(initialValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ public String convertURI(URI instanceValue)
+ {
+ return instanceValue == null ? null : instanceValue.toString();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ public String convertURIToString(EDataType eDataType, Object instanceValue)
+ {
+ return instanceValue == null ? null : instanceValue.toString();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EvolutionPackage getEvolutionPackage()
+ {
+ return (EvolutionPackage)getEPackage();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @deprecated
+ * @generated
+ */
+ @Deprecated
+ public static EvolutionPackage getPackage()
+ {
+ return EvolutionPackage.eINSTANCE;
+ }
+
+} // EvolutionFactoryImpl
diff --git a/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/impl/EvolutionImpl.java b/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/impl/EvolutionImpl.java
new file mode 100644
index 0000000000..a4af9491d0
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/impl/EvolutionImpl.java
@@ -0,0 +1,691 @@
+/**
+ */
+package org.eclipse.emf.cdo.evolution.impl;
+
+import org.eclipse.emf.cdo.evolution.Evolution;
+import org.eclipse.emf.cdo.evolution.EvolutionPackage;
+import org.eclipse.emf.cdo.evolution.Model;
+import org.eclipse.emf.cdo.evolution.Release;
+
+import org.eclipse.net4j.util.collection.CollectionUtil;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.notify.Notifier;
+import org.eclipse.emf.common.util.ECollections;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EModelElement;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.util.EcoreEList;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Evolution</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.emf.cdo.evolution.impl.EvolutionImpl#isUseEcorePackage <em>Use Ecore Package</em>}</li>
+ * <li>{@link org.eclipse.emf.cdo.evolution.impl.EvolutionImpl#isUseEresourcePackage <em>Use Eresource Package</em>}</li>
+ * <li>{@link org.eclipse.emf.cdo.evolution.impl.EvolutionImpl#isUseEtypesPackage <em>Use Etypes Package</em>}</li>
+ * <li>{@link org.eclipse.emf.cdo.evolution.impl.EvolutionImpl#isUniqueNamespaces <em>Unique Namespaces</em>}</li>
+ * <li>{@link org.eclipse.emf.cdo.evolution.impl.EvolutionImpl#getModels <em>Models</em>}</li>
+ * <li>{@link org.eclipse.emf.cdo.evolution.impl.EvolutionImpl#getRootPackages <em>Root Packages</em>}</li>
+ * <li>{@link org.eclipse.emf.cdo.evolution.impl.EvolutionImpl#getAllPackages <em>All Packages</em>}</li>
+ * <li>{@link org.eclipse.emf.cdo.evolution.impl.EvolutionImpl#getMissingPackages <em>Missing Packages</em>}</li>
+ * <li>{@link org.eclipse.emf.cdo.evolution.impl.EvolutionImpl#getReleases <em>Releases</em>}</li>
+ * <li>{@link org.eclipse.emf.cdo.evolution.impl.EvolutionImpl#getOrderedReleases <em>Ordered Releases</em>}</li>
+ * <li>{@link org.eclipse.emf.cdo.evolution.impl.EvolutionImpl#getLatestRelease <em>Latest Release</em>}</li>
+ * <li>{@link org.eclipse.emf.cdo.evolution.impl.EvolutionImpl#getNextReleaseVersion <em>Next Release Version</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class EvolutionImpl extends ModelSetImpl implements Evolution
+{
+ /**
+ * The default value of the '{@link #isUseEcorePackage() <em>Use Ecore Package</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #isUseEcorePackage()
+ * @generated
+ * @ordered
+ */
+ protected static final boolean USE_ECORE_PACKAGE_EDEFAULT = true;
+
+ /**
+ * The default value of the '{@link #isUseEresourcePackage() <em>Use Eresource Package</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #isUseEresourcePackage()
+ * @generated
+ * @ordered
+ */
+ protected static final boolean USE_ERESOURCE_PACKAGE_EDEFAULT = false;
+
+ /**
+ * The default value of the '{@link #isUseEtypesPackage() <em>Use Etypes Package</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #isUseEtypesPackage()
+ * @generated
+ * @ordered
+ */
+ protected static final boolean USE_ETYPES_PACKAGE_EDEFAULT = false;
+
+ /**
+ * The default value of the '{@link #isUniqueNamespaces() <em>Unique Namespaces</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #isUniqueNamespaces()
+ * @generated
+ * @ordered
+ */
+ protected static final boolean UNIQUE_NAMESPACES_EDEFAULT = true;
+
+ /**
+ * The default value of the '{@link #getNextReleaseVersion() <em>Next Release Version</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getNextReleaseVersion()
+ * @generated
+ * @ordered
+ */
+ protected static final int NEXT_RELEASE_VERSION_EDEFAULT = 0;
+
+ private Map<String, Set<EPackage>> releasedPackages;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected EvolutionImpl()
+ {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass()
+ {
+ return EvolutionPackage.Literals.EVOLUTION;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ public EList<Model> getModels()
+ {
+ return (EList<Model>)eDynamicGet(EvolutionPackage.EVOLUTION__MODELS, EvolutionPackage.Literals.EVOLUTION__MODELS, true, true);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public boolean isUseEcorePackage()
+ {
+ return (Boolean)eDynamicGet(EvolutionPackage.EVOLUTION__USE_ECORE_PACKAGE, EvolutionPackage.Literals.EVOLUTION__USE_ECORE_PACKAGE, true, true);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setUseEcorePackage(boolean newUseEcorePackage)
+ {
+ eDynamicSet(EvolutionPackage.EVOLUTION__USE_ECORE_PACKAGE, EvolutionPackage.Literals.EVOLUTION__USE_ECORE_PACKAGE, newUseEcorePackage);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public boolean isUseEresourcePackage()
+ {
+ return (Boolean)eDynamicGet(EvolutionPackage.EVOLUTION__USE_ERESOURCE_PACKAGE, EvolutionPackage.Literals.EVOLUTION__USE_ERESOURCE_PACKAGE, true, true);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setUseEresourcePackage(boolean newUseEresourcePackage)
+ {
+ eDynamicSet(EvolutionPackage.EVOLUTION__USE_ERESOURCE_PACKAGE, EvolutionPackage.Literals.EVOLUTION__USE_ERESOURCE_PACKAGE, newUseEresourcePackage);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public boolean isUseEtypesPackage()
+ {
+ return (Boolean)eDynamicGet(EvolutionPackage.EVOLUTION__USE_ETYPES_PACKAGE, EvolutionPackage.Literals.EVOLUTION__USE_ETYPES_PACKAGE, true, true);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setUseEtypesPackage(boolean newUseEtypesPackage)
+ {
+ eDynamicSet(EvolutionPackage.EVOLUTION__USE_ETYPES_PACKAGE, EvolutionPackage.Literals.EVOLUTION__USE_ETYPES_PACKAGE, newUseEtypesPackage);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public boolean isUniqueNamespaces()
+ {
+ return (Boolean)eDynamicGet(EvolutionPackage.EVOLUTION__UNIQUE_NAMESPACES, EvolutionPackage.Literals.EVOLUTION__UNIQUE_NAMESPACES, true, true);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setUniqueNamespaces(boolean newUniqueNamespaces)
+ {
+ eDynamicSet(EvolutionPackage.EVOLUTION__UNIQUE_NAMESPACES, EvolutionPackage.Literals.EVOLUTION__UNIQUE_NAMESPACES, newUniqueNamespaces);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ @Override
+ public EList<EPackage> getRootPackages()
+ {
+ EcoreEList<EPackage> list = new EcoreEList<EPackage>(EPackage.class, this)
+ {
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ public int getFeatureID()
+ {
+ return EvolutionPackage.EVOLUTION__ROOT_PACKAGES;
+ }
+ };
+
+ for (Model model : getModels())
+ {
+ EPackage rootPackage = model.getRootPackage();
+ if (rootPackage != null)
+ {
+ list.add(rootPackage);
+ }
+ }
+
+ return list;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ @Override
+ public EList<EPackage> getAllPackages()
+ {
+ EcoreEList<EPackage> list = new EcoreEList<EPackage>(EPackage.class, this)
+ {
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ public int getFeatureID()
+ {
+ return EvolutionPackage.EVOLUTION__ALL_PACKAGES;
+ }
+ };
+
+ for (Model model : getModels())
+ {
+ list.addAll(model.getAllPackages());
+ }
+
+ return list;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ public EList<EPackage> getMissingPackages()
+ {
+ EcoreEList<EPackage> list = new EcoreEList<EPackage>(EPackage.class, this)
+ {
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ public int getFeatureID()
+ {
+ return EvolutionPackage.EVOLUTION__MISSING_PACKAGES;
+ }
+ };
+
+ Set<EPackage> set = new HashSet<EPackage>();
+ for (Model model : getModels())
+ {
+ set.addAll(model.getMissingPackages());
+ }
+
+ list.addAll(set);
+ return list;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ public Release getRelease(int version)
+ {
+ for (Release release : getReleases())
+ {
+ if (release.getVersion() == version)
+ {
+ return release;
+ }
+ }
+
+ return null;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ public EList<Release> getReleases()
+ {
+ return (EList<Release>)eDynamicGet(EvolutionPackage.EVOLUTION__RELEASES, EvolutionPackage.Literals.EVOLUTION__RELEASES, true, true);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ public EList<Release> getOrderedReleases()
+ {
+ EcoreEList<Release> list = new EcoreEList<Release>(Release.class, this)
+ {
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ public int getFeatureID()
+ {
+ return EvolutionPackage.EVOLUTION__ORDERED_RELEASES;
+ }
+ };
+
+ list.addAll(getReleases());
+ ECollections.sort(list);
+ return list;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public Release getLatestRelease()
+ {
+ Release latestRelease = basicGetLatestRelease();
+ return latestRelease != null && ((EObject)latestRelease).eIsProxy() ? (Release)eResolveProxy((InternalEObject)latestRelease) : latestRelease;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ public Release basicGetLatestRelease()
+ {
+ EList<Release> orderedReleases = getOrderedReleases();
+ if (orderedReleases.isEmpty())
+ {
+ return null;
+ }
+
+ return orderedReleases.get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ public int getNextReleaseVersion()
+ {
+ Release latestRelease = getLatestRelease();
+ return latestRelease == null ? 1 : latestRelease.getVersion() + 1;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+ {
+ switch (featureID)
+ {
+ case EvolutionPackage.EVOLUTION__MODELS:
+ return ((InternalEList<InternalEObject>)(InternalEList<?>)getModels()).basicAdd(otherEnd, msgs);
+ case EvolutionPackage.EVOLUTION__RELEASES:
+ return ((InternalEList<InternalEObject>)(InternalEList<?>)getReleases()).basicAdd(otherEnd, msgs);
+ }
+ return super.eInverseAdd(otherEnd, featureID, msgs);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+ {
+ switch (featureID)
+ {
+ case EvolutionPackage.EVOLUTION__MODELS:
+ return ((InternalEList<?>)getModels()).basicRemove(otherEnd, msgs);
+ case EvolutionPackage.EVOLUTION__RELEASES:
+ return ((InternalEList<?>)getReleases()).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 EvolutionPackage.EVOLUTION__USE_ECORE_PACKAGE:
+ return isUseEcorePackage();
+ case EvolutionPackage.EVOLUTION__USE_ERESOURCE_PACKAGE:
+ return isUseEresourcePackage();
+ case EvolutionPackage.EVOLUTION__USE_ETYPES_PACKAGE:
+ return isUseEtypesPackage();
+ case EvolutionPackage.EVOLUTION__UNIQUE_NAMESPACES:
+ return isUniqueNamespaces();
+ case EvolutionPackage.EVOLUTION__MODELS:
+ return getModels();
+ case EvolutionPackage.EVOLUTION__ROOT_PACKAGES:
+ return getRootPackages();
+ case EvolutionPackage.EVOLUTION__ALL_PACKAGES:
+ return getAllPackages();
+ case EvolutionPackage.EVOLUTION__MISSING_PACKAGES:
+ return getMissingPackages();
+ case EvolutionPackage.EVOLUTION__RELEASES:
+ return getReleases();
+ case EvolutionPackage.EVOLUTION__ORDERED_RELEASES:
+ return getOrderedReleases();
+ case EvolutionPackage.EVOLUTION__LATEST_RELEASE:
+ if (resolve)
+ {
+ return getLatestRelease();
+ }
+ return basicGetLatestRelease();
+ case EvolutionPackage.EVOLUTION__NEXT_RELEASE_VERSION:
+ return getNextReleaseVersion();
+ }
+ 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 EvolutionPackage.EVOLUTION__USE_ECORE_PACKAGE:
+ setUseEcorePackage((Boolean)newValue);
+ return;
+ case EvolutionPackage.EVOLUTION__USE_ERESOURCE_PACKAGE:
+ setUseEresourcePackage((Boolean)newValue);
+ return;
+ case EvolutionPackage.EVOLUTION__USE_ETYPES_PACKAGE:
+ setUseEtypesPackage((Boolean)newValue);
+ return;
+ case EvolutionPackage.EVOLUTION__UNIQUE_NAMESPACES:
+ setUniqueNamespaces((Boolean)newValue);
+ return;
+ case EvolutionPackage.EVOLUTION__MODELS:
+ getModels().clear();
+ getModels().addAll((Collection<? extends Model>)newValue);
+ return;
+ case EvolutionPackage.EVOLUTION__RELEASES:
+ getReleases().clear();
+ getReleases().addAll((Collection<? extends Release>)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID)
+ {
+ switch (featureID)
+ {
+ case EvolutionPackage.EVOLUTION__USE_ECORE_PACKAGE:
+ setUseEcorePackage(USE_ECORE_PACKAGE_EDEFAULT);
+ return;
+ case EvolutionPackage.EVOLUTION__USE_ERESOURCE_PACKAGE:
+ setUseEresourcePackage(USE_ERESOURCE_PACKAGE_EDEFAULT);
+ return;
+ case EvolutionPackage.EVOLUTION__USE_ETYPES_PACKAGE:
+ setUseEtypesPackage(USE_ETYPES_PACKAGE_EDEFAULT);
+ return;
+ case EvolutionPackage.EVOLUTION__UNIQUE_NAMESPACES:
+ setUniqueNamespaces(UNIQUE_NAMESPACES_EDEFAULT);
+ return;
+ case EvolutionPackage.EVOLUTION__MODELS:
+ getModels().clear();
+ return;
+ case EvolutionPackage.EVOLUTION__RELEASES:
+ getReleases().clear();
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID)
+ {
+ switch (featureID)
+ {
+ case EvolutionPackage.EVOLUTION__USE_ECORE_PACKAGE:
+ return isUseEcorePackage() != USE_ECORE_PACKAGE_EDEFAULT;
+ case EvolutionPackage.EVOLUTION__USE_ERESOURCE_PACKAGE:
+ return isUseEresourcePackage() != USE_ERESOURCE_PACKAGE_EDEFAULT;
+ case EvolutionPackage.EVOLUTION__USE_ETYPES_PACKAGE:
+ return isUseEtypesPackage() != USE_ETYPES_PACKAGE_EDEFAULT;
+ case EvolutionPackage.EVOLUTION__UNIQUE_NAMESPACES:
+ return isUniqueNamespaces() != UNIQUE_NAMESPACES_EDEFAULT;
+ case EvolutionPackage.EVOLUTION__MODELS:
+ return !getModels().isEmpty();
+ case EvolutionPackage.EVOLUTION__ROOT_PACKAGES:
+ return !getRootPackages().isEmpty();
+ case EvolutionPackage.EVOLUTION__ALL_PACKAGES:
+ return !getAllPackages().isEmpty();
+ case EvolutionPackage.EVOLUTION__MISSING_PACKAGES:
+ return !getMissingPackages().isEmpty();
+ case EvolutionPackage.EVOLUTION__RELEASES:
+ return !getReleases().isEmpty();
+ case EvolutionPackage.EVOLUTION__ORDERED_RELEASES:
+ return !getOrderedReleases().isEmpty();
+ case EvolutionPackage.EVOLUTION__LATEST_RELEASE:
+ return basicGetLatestRelease() != null;
+ case EvolutionPackage.EVOLUTION__NEXT_RELEASE_VERSION:
+ return getNextReleaseVersion() != NEXT_RELEASE_VERSION_EDEFAULT;
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object eInvoke(int operationID, EList<?> arguments) throws InvocationTargetException
+ {
+ switch (operationID)
+ {
+ case EvolutionPackage.EVOLUTION___GET_RELEASE__INT:
+ return getRelease((Integer)arguments.get(0));
+ }
+ return super.eInvoke(operationID, arguments);
+ }
+
+ @Override
+ public Evolution getEvolution()
+ {
+ return this;
+ }
+
+ @Override
+ public int getVersion()
+ {
+ return Integer.MAX_VALUE;
+ }
+
+ @Override
+ public Release getPreviousRelease()
+ {
+ return getLatestRelease();
+ }
+
+ @Override
+ public boolean containsElement(EModelElement modelElement)
+ {
+ for (EPackage ePackage : getRootPackages())
+ {
+ if (EcoreUtil.isAncestor(ePackage, modelElement))
+ {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ public Map<String, Set<EPackage>> getReleasedPackages()
+ {
+ if (releasedPackages == null)
+ {
+ releasedPackages = new HashMap<String, Set<EPackage>>();
+
+ for (Release release : getReleases())
+ {
+ for (EPackage ePackage : release.getAllPackages())
+ {
+ CollectionUtil.add(releasedPackages, ePackage.getNsURI(), ePackage);
+ }
+ }
+ }
+
+ return releasedPackages;
+ }
+
+ public static Evolution get(Notifier notifier)
+ {
+ if (notifier instanceof ResourceSet)
+ {
+ EList<Resource> resources = ((ResourceSet)notifier).getResources();
+ if (resources.isEmpty())
+ {
+ return null;
+ }
+
+ notifier = resources.get(0);
+ }
+
+ if (notifier instanceof Resource)
+ {
+ EList<EObject> contents = ((Resource)notifier).getContents();
+ if (contents.isEmpty())
+ {
+ return null;
+ }
+
+ notifier = contents.get(0);
+ }
+
+ if (notifier instanceof Evolution)
+ {
+ return (Evolution)notifier;
+ }
+
+ if (notifier instanceof EObject)
+ {
+ Resource resource = ((EObject)notifier).eResource();
+ if (resource != null)
+ {
+ return get(resource.getResourceSet());
+ }
+ }
+
+ return null;
+ }
+
+} // EvolutionImpl
diff --git a/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/impl/EvolutionPackageImpl.java b/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/impl/EvolutionPackageImpl.java
new file mode 100644
index 0000000000..3f66950b8f
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/impl/EvolutionPackageImpl.java
@@ -0,0 +1,1306 @@
+/**
+ */
+package org.eclipse.emf.cdo.evolution.impl;
+
+import org.eclipse.emf.cdo.evolution.Change;
+import org.eclipse.emf.cdo.evolution.ChangeKind;
+import org.eclipse.emf.cdo.evolution.ElementChange;
+import org.eclipse.emf.cdo.evolution.Evolution;
+import org.eclipse.emf.cdo.evolution.EvolutionFactory;
+import org.eclipse.emf.cdo.evolution.EvolutionPackage;
+import org.eclipse.emf.cdo.evolution.FeaturePathMigration;
+import org.eclipse.emf.cdo.evolution.Migration;
+import org.eclipse.emf.cdo.evolution.Model;
+import org.eclipse.emf.cdo.evolution.ModelSet;
+import org.eclipse.emf.cdo.evolution.ModelSetChange;
+import org.eclipse.emf.cdo.evolution.PropertyChange;
+import org.eclipse.emf.cdo.evolution.Release;
+import org.eclipse.emf.cdo.evolution.util.EvolutionValidator;
+
+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.EGenericType;
+import org.eclipse.emf.ecore.EOperation;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.ETypeParameter;
+import org.eclipse.emf.ecore.EValidator;
+import org.eclipse.emf.ecore.EcorePackage;
+import org.eclipse.emf.ecore.impl.EPackageImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Package</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class EvolutionPackageImpl extends EPackageImpl implements EvolutionPackage
+{
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass modelSetEClass = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass modelEClass = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass evolutionEClass = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass releaseEClass = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass changeEClass = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass modelSetChangeEClass = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass elementChangeEClass = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass propertyChangeEClass = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass migrationEClass = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass featurePathMigrationEClass = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EEnum changeKindEEnum = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EDataType uriEDataType = 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.cdo.evolution.EvolutionPackage#eNS_URI
+ * @see #init()
+ * @generated
+ */
+ private EvolutionPackageImpl()
+ {
+ super(eNS_URI, EvolutionFactory.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 EvolutionPackage#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 EvolutionPackage init()
+ {
+ if (isInited)
+ {
+ return (EvolutionPackage)EPackage.Registry.INSTANCE.getEPackage(EvolutionPackage.eNS_URI);
+ }
+
+ // Obtain or create and register package
+ Object registeredEvolutionPackage = EPackage.Registry.INSTANCE.get(eNS_URI);
+ EvolutionPackageImpl theEvolutionPackage = registeredEvolutionPackage instanceof EvolutionPackageImpl ? (EvolutionPackageImpl)registeredEvolutionPackage
+ : new EvolutionPackageImpl();
+
+ isInited = true;
+
+ // Initialize simple dependencies
+ EcorePackage.eINSTANCE.eClass();
+
+ // Create package meta-data objects
+ theEvolutionPackage.createPackageContents();
+
+ // Initialize created meta-data
+ theEvolutionPackage.initializePackageContents();
+
+ // Register package validator
+ EValidator.Registry.INSTANCE.put(theEvolutionPackage, new EValidator.Descriptor()
+ {
+ public EValidator getEValidator()
+ {
+ return EvolutionValidator.INSTANCE;
+ }
+ });
+
+ // Mark meta-data to indicate it can't be changed
+ theEvolutionPackage.freeze();
+
+ // Update the registry and return the package
+ EPackage.Registry.INSTANCE.put(EvolutionPackage.eNS_URI, theEvolutionPackage);
+ return theEvolutionPackage;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EClass getModelSet()
+ {
+ return modelSetEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EReference getModelSet_Change()
+ {
+ return (EReference)modelSetEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EReference getModelSet_Migrations()
+ {
+ return (EReference)modelSetEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EOperation getModelSet__GetEvolution()
+ {
+ return modelSetEClass.getEOperations().get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EOperation getModelSet__GetVersion()
+ {
+ return modelSetEClass.getEOperations().get(1);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EOperation getModelSet__GetPreviousRelease()
+ {
+ return modelSetEClass.getEOperations().get(2);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EOperation getModelSet__GetRootPackages()
+ {
+ return modelSetEClass.getEOperations().get(3);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EOperation getModelSet__GetAllPackages()
+ {
+ return modelSetEClass.getEOperations().get(4);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EOperation getModelSet__ContainsElement__EModelElement()
+ {
+ return modelSetEClass.getEOperations().get(5);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EOperation getModelSet__GetElement__String()
+ {
+ return modelSetEClass.getEOperations().get(6);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EOperation getModelSet__GetElementID__EModelElement()
+ {
+ return modelSetEClass.getEOperations().get(7);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EOperation getModelSet__GetElementID__EModelElement_boolean()
+ {
+ return modelSetEClass.getEOperations().get(8);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EOperation getModelSet__Compare__ModelSet()
+ {
+ return modelSetEClass.getEOperations().get(9);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EOperation getModelSet__GetMigration__String()
+ {
+ return modelSetEClass.getEOperations().get(10);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EClass getModel()
+ {
+ return modelEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EReference getModel_Evolution()
+ {
+ return (EReference)modelEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EAttribute getModel_URI()
+ {
+ return (EAttribute)modelEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EReference getModel_RootPackage()
+ {
+ return (EReference)modelEClass.getEStructuralFeatures().get(2);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EReference getModel_AllPackages()
+ {
+ return (EReference)modelEClass.getEStructuralFeatures().get(3);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EReference getModel_ReferencedPackages()
+ {
+ return (EReference)modelEClass.getEStructuralFeatures().get(4);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EReference getModel_MissingPackages()
+ {
+ return (EReference)modelEClass.getEStructuralFeatures().get(5);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EClass getEvolution()
+ {
+ return evolutionEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EReference getEvolution_Models()
+ {
+ return (EReference)evolutionEClass.getEStructuralFeatures().get(4);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EAttribute getEvolution_UseEcorePackage()
+ {
+ return (EAttribute)evolutionEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EAttribute getEvolution_UseEresourcePackage()
+ {
+ return (EAttribute)evolutionEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EAttribute getEvolution_UseEtypesPackage()
+ {
+ return (EAttribute)evolutionEClass.getEStructuralFeatures().get(2);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EAttribute getEvolution_UniqueNamespaces()
+ {
+ return (EAttribute)evolutionEClass.getEStructuralFeatures().get(3);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EReference getEvolution_RootPackages()
+ {
+ return (EReference)evolutionEClass.getEStructuralFeatures().get(5);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EReference getEvolution_AllPackages()
+ {
+ return (EReference)evolutionEClass.getEStructuralFeatures().get(6);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EReference getEvolution_Releases()
+ {
+ return (EReference)evolutionEClass.getEStructuralFeatures().get(8);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EReference getEvolution_OrderedReleases()
+ {
+ return (EReference)evolutionEClass.getEStructuralFeatures().get(9);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EReference getEvolution_LatestRelease()
+ {
+ return (EReference)evolutionEClass.getEStructuralFeatures().get(10);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EAttribute getEvolution_NextReleaseVersion()
+ {
+ return (EAttribute)evolutionEClass.getEStructuralFeatures().get(11);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EReference getEvolution_MissingPackages()
+ {
+ return (EReference)evolutionEClass.getEStructuralFeatures().get(7);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EOperation getEvolution__GetRelease__int()
+ {
+ return evolutionEClass.getEOperations().get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EClass getRelease()
+ {
+ return releaseEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EReference getRelease_Evolution()
+ {
+ return (EReference)releaseEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EAttribute getRelease_Date()
+ {
+ return (EAttribute)releaseEClass.getEStructuralFeatures().get(2);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EReference getRelease_NextRelease()
+ {
+ return (EReference)releaseEClass.getEStructuralFeatures().get(3);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EReference getRelease_PreviousRelease()
+ {
+ return (EReference)releaseEClass.getEStructuralFeatures().get(4);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EAttribute getRelease_Version()
+ {
+ return (EAttribute)releaseEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EReference getRelease_RootPackages()
+ {
+ return (EReference)releaseEClass.getEStructuralFeatures().get(5);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EReference getRelease_AllPackages()
+ {
+ return (EReference)releaseEClass.getEStructuralFeatures().get(6);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EClass getChange()
+ {
+ return changeEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EReference getChange_Parent()
+ {
+ return (EReference)changeEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EReference getChange_Children()
+ {
+ return (EReference)changeEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EOperation getChange__GetOldModelSet()
+ {
+ return changeEClass.getEOperations().get(3);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EOperation getChange__GetNewModelSet()
+ {
+ return changeEClass.getEOperations().get(4);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EOperation getChange__GetModelSetChange()
+ {
+ return changeEClass.getEOperations().get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EOperation getChange__GetOldElementFor__EModelElement()
+ {
+ return changeEClass.getEOperations().get(1);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EOperation getChange__GetNewElementsFor__EModelElement()
+ {
+ return changeEClass.getEOperations().get(2);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EClass getModelSetChange()
+ {
+ return modelSetChangeEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EReference getModelSetChange_OldModelSet()
+ {
+ return (EReference)modelSetChangeEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EReference getModelSetChange_NewModelSet()
+ {
+ return (EReference)modelSetChangeEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EClass getElementChange()
+ {
+ return elementChangeEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EReference getElementChange_OldElement()
+ {
+ return (EReference)elementChangeEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EReference getElementChange_NewElement()
+ {
+ return (EReference)elementChangeEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EAttribute getElementChange_Kind()
+ {
+ return (EAttribute)elementChangeEClass.getEStructuralFeatures().get(2);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EOperation getElementChange__GetElement()
+ {
+ return elementChangeEClass.getEOperations().get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EClass getPropertyChange()
+ {
+ return propertyChangeEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EReference getPropertyChange_Feature()
+ {
+ return (EReference)propertyChangeEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EAttribute getPropertyChange_OldValue()
+ {
+ return (EAttribute)propertyChangeEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EAttribute getPropertyChange_NewValue()
+ {
+ return (EAttribute)propertyChangeEClass.getEStructuralFeatures().get(2);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EAttribute getPropertyChange_Kind()
+ {
+ return (EAttribute)propertyChangeEClass.getEStructuralFeatures().get(3);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EClass getMigration()
+ {
+ return migrationEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EReference getMigration_ModelSet()
+ {
+ return (EReference)migrationEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EAttribute getMigration_DiagnosticID()
+ {
+ return (EAttribute)migrationEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EClass getFeaturePathMigration()
+ {
+ return featurePathMigrationEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EReference getFeaturePathMigration_FromClass()
+ {
+ return (EReference)featurePathMigrationEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EReference getFeaturePathMigration_ToClass()
+ {
+ return (EReference)featurePathMigrationEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EReference getFeaturePathMigration_FeaturePath()
+ {
+ return (EReference)featurePathMigrationEClass.getEStructuralFeatures().get(2);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EEnum getChangeKind()
+ {
+ return changeKindEEnum;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EDataType getURI()
+ {
+ return uriEDataType;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EvolutionFactory getEvolutionFactory()
+ {
+ return (EvolutionFactory)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
+ modelSetEClass = createEClass(MODEL_SET);
+ createEReference(modelSetEClass, MODEL_SET__CHANGE);
+ createEReference(modelSetEClass, MODEL_SET__MIGRATIONS);
+ createEOperation(modelSetEClass, MODEL_SET___GET_EVOLUTION);
+ createEOperation(modelSetEClass, MODEL_SET___GET_VERSION);
+ createEOperation(modelSetEClass, MODEL_SET___GET_PREVIOUS_RELEASE);
+ createEOperation(modelSetEClass, MODEL_SET___GET_ROOT_PACKAGES);
+ createEOperation(modelSetEClass, MODEL_SET___GET_ALL_PACKAGES);
+ createEOperation(modelSetEClass, MODEL_SET___CONTAINS_ELEMENT__EMODELELEMENT);
+ createEOperation(modelSetEClass, MODEL_SET___GET_ELEMENT__STRING);
+ createEOperation(modelSetEClass, MODEL_SET___GET_ELEMENT_ID__EMODELELEMENT);
+ createEOperation(modelSetEClass, MODEL_SET___GET_ELEMENT_ID__EMODELELEMENT_BOOLEAN);
+ createEOperation(modelSetEClass, MODEL_SET___COMPARE__MODELSET);
+ createEOperation(modelSetEClass, MODEL_SET___GET_MIGRATION__STRING);
+
+ modelEClass = createEClass(MODEL);
+ createEReference(modelEClass, MODEL__EVOLUTION);
+ createEAttribute(modelEClass, MODEL__URI);
+ createEReference(modelEClass, MODEL__ROOT_PACKAGE);
+ createEReference(modelEClass, MODEL__ALL_PACKAGES);
+ createEReference(modelEClass, MODEL__REFERENCED_PACKAGES);
+ createEReference(modelEClass, MODEL__MISSING_PACKAGES);
+
+ evolutionEClass = createEClass(EVOLUTION);
+ createEAttribute(evolutionEClass, EVOLUTION__USE_ECORE_PACKAGE);
+ createEAttribute(evolutionEClass, EVOLUTION__USE_ERESOURCE_PACKAGE);
+ createEAttribute(evolutionEClass, EVOLUTION__USE_ETYPES_PACKAGE);
+ createEAttribute(evolutionEClass, EVOLUTION__UNIQUE_NAMESPACES);
+ createEReference(evolutionEClass, EVOLUTION__MODELS);
+ createEReference(evolutionEClass, EVOLUTION__ROOT_PACKAGES);
+ createEReference(evolutionEClass, EVOLUTION__ALL_PACKAGES);
+ createEReference(evolutionEClass, EVOLUTION__MISSING_PACKAGES);
+ createEReference(evolutionEClass, EVOLUTION__RELEASES);
+ createEReference(evolutionEClass, EVOLUTION__ORDERED_RELEASES);
+ createEReference(evolutionEClass, EVOLUTION__LATEST_RELEASE);
+ createEAttribute(evolutionEClass, EVOLUTION__NEXT_RELEASE_VERSION);
+ createEOperation(evolutionEClass, EVOLUTION___GET_RELEASE__INT);
+
+ releaseEClass = createEClass(RELEASE);
+ createEReference(releaseEClass, RELEASE__EVOLUTION);
+ createEAttribute(releaseEClass, RELEASE__VERSION);
+ createEAttribute(releaseEClass, RELEASE__DATE);
+ createEReference(releaseEClass, RELEASE__NEXT_RELEASE);
+ createEReference(releaseEClass, RELEASE__PREVIOUS_RELEASE);
+ createEReference(releaseEClass, RELEASE__ROOT_PACKAGES);
+ createEReference(releaseEClass, RELEASE__ALL_PACKAGES);
+
+ changeEClass = createEClass(CHANGE);
+ createEReference(changeEClass, CHANGE__PARENT);
+ createEReference(changeEClass, CHANGE__CHILDREN);
+ createEOperation(changeEClass, CHANGE___GET_MODEL_SET_CHANGE);
+ createEOperation(changeEClass, CHANGE___GET_OLD_ELEMENT_FOR__EMODELELEMENT);
+ createEOperation(changeEClass, CHANGE___GET_NEW_ELEMENTS_FOR__EMODELELEMENT);
+ createEOperation(changeEClass, CHANGE___GET_OLD_MODEL_SET);
+ createEOperation(changeEClass, CHANGE___GET_NEW_MODEL_SET);
+
+ modelSetChangeEClass = createEClass(MODEL_SET_CHANGE);
+ createEReference(modelSetChangeEClass, MODEL_SET_CHANGE__OLD_MODEL_SET);
+ createEReference(modelSetChangeEClass, MODEL_SET_CHANGE__NEW_MODEL_SET);
+
+ elementChangeEClass = createEClass(ELEMENT_CHANGE);
+ createEReference(elementChangeEClass, ELEMENT_CHANGE__OLD_ELEMENT);
+ createEReference(elementChangeEClass, ELEMENT_CHANGE__NEW_ELEMENT);
+ createEAttribute(elementChangeEClass, ELEMENT_CHANGE__KIND);
+ createEOperation(elementChangeEClass, ELEMENT_CHANGE___GET_ELEMENT);
+
+ propertyChangeEClass = createEClass(PROPERTY_CHANGE);
+ createEReference(propertyChangeEClass, PROPERTY_CHANGE__FEATURE);
+ createEAttribute(propertyChangeEClass, PROPERTY_CHANGE__OLD_VALUE);
+ createEAttribute(propertyChangeEClass, PROPERTY_CHANGE__NEW_VALUE);
+ createEAttribute(propertyChangeEClass, PROPERTY_CHANGE__KIND);
+
+ migrationEClass = createEClass(MIGRATION);
+ createEReference(migrationEClass, MIGRATION__MODEL_SET);
+ createEAttribute(migrationEClass, MIGRATION__DIAGNOSTIC_ID);
+
+ featurePathMigrationEClass = createEClass(FEATURE_PATH_MIGRATION);
+ createEReference(featurePathMigrationEClass, FEATURE_PATH_MIGRATION__FROM_CLASS);
+ createEReference(featurePathMigrationEClass, FEATURE_PATH_MIGRATION__TO_CLASS);
+ createEReference(featurePathMigrationEClass, FEATURE_PATH_MIGRATION__FEATURE_PATH);
+
+ // Create enums
+ changeKindEEnum = createEEnum(CHANGE_KIND);
+
+ // Create data types
+ uriEDataType = createEDataType(URI);
+ }
+
+ /**
+ * <!-- 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);
+
+ // Obtain other dependent packages
+ EcorePackage theEcorePackage = (EcorePackage)EPackage.Registry.INSTANCE.getEPackage(EcorePackage.eNS_URI);
+
+ // Create type parameters
+
+ // Set bounds for type parameters
+
+ // Add supertypes to classes
+ evolutionEClass.getESuperTypes().add(getModelSet());
+ releaseEClass.getESuperTypes().add(getModelSet());
+ modelSetChangeEClass.getESuperTypes().add(getChange());
+ elementChangeEClass.getESuperTypes().add(getChange());
+ propertyChangeEClass.getESuperTypes().add(getChange());
+ featurePathMigrationEClass.getESuperTypes().add(getMigration());
+
+ // Initialize classes, features, and operations; add parameters
+ initEClass(modelSetEClass, ModelSet.class, "ModelSet", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEReference(getModelSet_Change(), getModelSetChange(), null, "change", null, 0, 1, ModelSet.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE,
+ IS_COMPOSITE, !IS_RESOLVE_PROXIES, IS_UNSETTABLE, IS_UNIQUE, IS_DERIVED, IS_ORDERED);
+ initEReference(getModelSet_Migrations(), getMigration(), getMigration_ModelSet(), "migrations", null, 0, -1, ModelSet.class, !IS_TRANSIENT, !IS_VOLATILE,
+ IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ initEOperation(getModelSet__GetEvolution(), getEvolution(), "getEvolution", 0, 1, IS_UNIQUE, IS_ORDERED);
+
+ initEOperation(getModelSet__GetVersion(), ecorePackage.getEInt(), "getVersion", 0, 1, IS_UNIQUE, IS_ORDERED);
+
+ initEOperation(getModelSet__GetPreviousRelease(), getRelease(), "getPreviousRelease", 0, 1, IS_UNIQUE, IS_ORDERED);
+
+ initEOperation(getModelSet__GetRootPackages(), ecorePackage.getEPackage(), "getRootPackages", 0, -1, IS_UNIQUE, IS_ORDERED);
+
+ initEOperation(getModelSet__GetAllPackages(), ecorePackage.getEPackage(), "getAllPackages", 0, -1, IS_UNIQUE, IS_ORDERED);
+
+ EOperation op = initEOperation(getModelSet__ContainsElement__EModelElement(), theEcorePackage.getEBoolean(), "containsElement", 0, 1, IS_UNIQUE,
+ IS_ORDERED);
+ addEParameter(op, theEcorePackage.getEModelElement(), "modelElement", 0, 1, IS_UNIQUE, IS_ORDERED);
+
+ op = initEOperation(getModelSet__GetElement__String(), null, "getElement", 0, 1, IS_UNIQUE, IS_ORDERED);
+ ETypeParameter t1 = addETypeParameter(op, "T");
+ EGenericType g1 = createEGenericType(theEcorePackage.getEModelElement());
+ t1.getEBounds().add(g1);
+ addEParameter(op, theEcorePackage.getEString(), "id", 0, 1, IS_UNIQUE, IS_ORDERED);
+ g1 = createEGenericType(t1);
+ initEOperation(op, g1);
+
+ op = initEOperation(getModelSet__GetElementID__EModelElement(), theEcorePackage.getEString(), "getElementID", 0, 1, IS_UNIQUE, IS_ORDERED);
+ addEParameter(op, theEcorePackage.getEModelElement(), "modelElement", 0, 1, IS_UNIQUE, IS_ORDERED);
+
+ op = initEOperation(getModelSet__GetElementID__EModelElement_boolean(), theEcorePackage.getEString(), "getElementID", 0, 1, IS_UNIQUE, IS_ORDERED);
+ addEParameter(op, theEcorePackage.getEModelElement(), "modelElement", 0, 1, IS_UNIQUE, IS_ORDERED);
+ addEParameter(op, ecorePackage.getEBoolean(), "considerOldIDs", 0, 1, IS_UNIQUE, IS_ORDERED);
+
+ op = initEOperation(getModelSet__Compare__ModelSet(), getModelSetChange(), "compare", 0, 1, IS_UNIQUE, IS_ORDERED);
+ addEParameter(op, getModelSet(), "other", 0, 1, IS_UNIQUE, IS_ORDERED);
+
+ op = initEOperation(getModelSet__GetMigration__String(), getMigration(), "getMigration", 0, 1, IS_UNIQUE, IS_ORDERED);
+ addEParameter(op, ecorePackage.getEString(), "diagnosticID", 0, 1, IS_UNIQUE, IS_ORDERED);
+
+ initEClass(modelEClass, Model.class, "Model", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEReference(getModel_Evolution(), getEvolution(), getEvolution_Models(), "evolution", null, 1, 1, Model.class, !IS_TRANSIENT, !IS_VOLATILE,
+ IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEAttribute(getModel_URI(), getURI(), "uRI", null, 0, 1, Model.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
+ !IS_DERIVED, IS_ORDERED);
+ initEReference(getModel_RootPackage(), theEcorePackage.getEPackage(), null, "rootPackage", null, 0, 1, Model.class, IS_TRANSIENT, IS_VOLATILE,
+ !IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, IS_DERIVED, IS_ORDERED);
+ initEReference(getModel_AllPackages(), theEcorePackage.getEPackage(), null, "allPackages", null, 0, -1, Model.class, IS_TRANSIENT, IS_VOLATILE,
+ !IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, IS_DERIVED, IS_ORDERED);
+ initEReference(getModel_ReferencedPackages(), theEcorePackage.getEPackage(), null, "referencedPackages", null, 0, -1, Model.class, IS_TRANSIENT,
+ IS_VOLATILE, !IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, IS_DERIVED, IS_ORDERED);
+ initEReference(getModel_MissingPackages(), theEcorePackage.getEPackage(), null, "missingPackages", null, 0, -1, Model.class, IS_TRANSIENT, IS_VOLATILE,
+ !IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, IS_DERIVED, IS_ORDERED);
+
+ initEClass(evolutionEClass, Evolution.class, "Evolution", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEAttribute(getEvolution_UseEcorePackage(), ecorePackage.getEBoolean(), "useEcorePackage", "true", 0, 1, Evolution.class, !IS_TRANSIENT, !IS_VOLATILE,
+ IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEAttribute(getEvolution_UseEresourcePackage(), ecorePackage.getEBoolean(), "useEresourcePackage", null, 0, 1, Evolution.class, !IS_TRANSIENT,
+ !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEAttribute(getEvolution_UseEtypesPackage(), ecorePackage.getEBoolean(), "useEtypesPackage", null, 0, 1, Evolution.class, !IS_TRANSIENT, !IS_VOLATILE,
+ IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEAttribute(getEvolution_UniqueNamespaces(), ecorePackage.getEBoolean(), "uniqueNamespaces", "true", 0, 1, Evolution.class, !IS_TRANSIENT, !IS_VOLATILE,
+ IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEReference(getEvolution_Models(), getModel(), getModel_Evolution(), "models", null, 0, -1, Evolution.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE,
+ IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEReference(getEvolution_RootPackages(), theEcorePackage.getEPackage(), null, "rootPackages", null, 0, -1, Evolution.class, IS_TRANSIENT, IS_VOLATILE,
+ !IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, IS_DERIVED, IS_ORDERED);
+ initEReference(getEvolution_AllPackages(), theEcorePackage.getEPackage(), null, "allPackages", null, 0, -1, Evolution.class, IS_TRANSIENT, IS_VOLATILE,
+ !IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, IS_DERIVED, IS_ORDERED);
+ initEReference(getEvolution_MissingPackages(), theEcorePackage.getEPackage(), null, "missingPackages", null, 0, -1, Evolution.class, IS_TRANSIENT,
+ IS_VOLATILE, !IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, IS_DERIVED, IS_ORDERED);
+ initEReference(getEvolution_Releases(), getRelease(), getRelease_Evolution(), "releases", null, 0, -1, Evolution.class, !IS_TRANSIENT, !IS_VOLATILE,
+ IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEReference(getEvolution_OrderedReleases(), getRelease(), null, "orderedReleases", null, 0, -1, Evolution.class, IS_TRANSIENT, IS_VOLATILE,
+ !IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, IS_DERIVED, IS_ORDERED);
+ initEReference(getEvolution_LatestRelease(), getRelease(), null, "latestRelease", null, 0, 1, Evolution.class, IS_TRANSIENT, IS_VOLATILE, !IS_CHANGEABLE,
+ !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, IS_DERIVED, IS_ORDERED);
+ initEAttribute(getEvolution_NextReleaseVersion(), theEcorePackage.getEInt(), "nextReleaseVersion", null, 0, 1, Evolution.class, IS_TRANSIENT, IS_VOLATILE,
+ !IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, IS_DERIVED, IS_ORDERED);
+
+ op = initEOperation(getEvolution__GetRelease__int(), getRelease(), "getRelease", 0, 1, IS_UNIQUE, IS_ORDERED);
+ addEParameter(op, theEcorePackage.getEInt(), "version", 0, 1, IS_UNIQUE, IS_ORDERED);
+
+ initEClass(releaseEClass, Release.class, "Release", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEReference(getRelease_Evolution(), getEvolution(), getEvolution_Releases(), "evolution", null, 1, 1, Release.class, !IS_TRANSIENT, !IS_VOLATILE,
+ IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEAttribute(getRelease_Version(), ecorePackage.getEInt(), "version", null, 1, 1, Release.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE,
+ !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEAttribute(getRelease_Date(), ecorePackage.getEDate(), "date", null, 1, 1, Release.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE,
+ !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEReference(getRelease_NextRelease(), getRelease(), null, "nextRelease", null, 0, 1, Release.class, IS_TRANSIENT, IS_VOLATILE, !IS_CHANGEABLE,
+ !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, IS_DERIVED, IS_ORDERED);
+ initEReference(getRelease_PreviousRelease(), getRelease(), null, "previousRelease", null, 0, 1, Release.class, IS_TRANSIENT, IS_VOLATILE, !IS_CHANGEABLE,
+ !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, IS_DERIVED, IS_ORDERED);
+ initEReference(getRelease_RootPackages(), theEcorePackage.getEPackage(), null, "rootPackages", null, 0, -1, Release.class, !IS_TRANSIENT, !IS_VOLATILE,
+ IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEReference(getRelease_AllPackages(), theEcorePackage.getEPackage(), null, "allPackages", null, 0, -1, Release.class, IS_TRANSIENT, IS_VOLATILE,
+ !IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, IS_DERIVED, IS_ORDERED);
+
+ initEClass(changeEClass, Change.class, "Change", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEReference(getChange_Parent(), getChange(), getChange_Children(), "parent", null, 0, 1, Change.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE,
+ !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEReference(getChange_Children(), getChange(), getChange_Parent(), "children", null, 0, -1, Change.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE,
+ IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ initEOperation(getChange__GetModelSetChange(), getModelSetChange(), "getModelSetChange", 0, 1, IS_UNIQUE, IS_ORDERED);
+
+ op = initEOperation(getChange__GetOldElementFor__EModelElement(), theEcorePackage.getEModelElement(), "getOldElementFor", 0, 1, IS_UNIQUE, IS_ORDERED);
+ addEParameter(op, theEcorePackage.getEModelElement(), "newElement", 0, 1, IS_UNIQUE, IS_ORDERED);
+
+ op = initEOperation(getChange__GetNewElementsFor__EModelElement(), theEcorePackage.getEModelElement(), "getNewElementsFor", 0, -1, IS_UNIQUE, IS_ORDERED);
+ addEParameter(op, theEcorePackage.getEModelElement(), "oldElement", 0, 1, IS_UNIQUE, IS_ORDERED);
+
+ initEOperation(getChange__GetOldModelSet(), getModelSet(), "getOldModelSet", 0, 1, IS_UNIQUE, IS_ORDERED);
+
+ initEOperation(getChange__GetNewModelSet(), getModelSet(), "getNewModelSet", 0, 1, IS_UNIQUE, IS_ORDERED);
+
+ initEClass(modelSetChangeEClass, ModelSetChange.class, "ModelSetChange", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEReference(getModelSetChange_OldModelSet(), getModelSet(), null, "oldModelSet", null, 0, 1, ModelSetChange.class, !IS_TRANSIENT, !IS_VOLATILE,
+ IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEReference(getModelSetChange_NewModelSet(), getModelSet(), null, "newModelSet", null, 0, 1, ModelSetChange.class, !IS_TRANSIENT, !IS_VOLATILE,
+ IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ initEClass(elementChangeEClass, ElementChange.class, "ElementChange", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEReference(getElementChange_OldElement(), theEcorePackage.getEModelElement(), null, "oldElement", null, 0, 1, ElementChange.class, !IS_TRANSIENT,
+ !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEReference(getElementChange_NewElement(), theEcorePackage.getEModelElement(), null, "newElement", null, 0, 1, ElementChange.class, !IS_TRANSIENT,
+ !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEAttribute(getElementChange_Kind(), getChangeKind(), "kind", null, 0, 1, ElementChange.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE,
+ !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ initEOperation(getElementChange__GetElement(), theEcorePackage.getEModelElement(), "getElement", 0, 1, IS_UNIQUE, IS_ORDERED);
+
+ initEClass(propertyChangeEClass, PropertyChange.class, "PropertyChange", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEReference(getPropertyChange_Feature(), theEcorePackage.getEStructuralFeature(), null, "feature", null, 0, 1, PropertyChange.class, !IS_TRANSIENT,
+ !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEAttribute(getPropertyChange_OldValue(), ecorePackage.getEJavaObject(), "oldValue", null, 0, 1, PropertyChange.class, !IS_TRANSIENT, !IS_VOLATILE,
+ IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEAttribute(getPropertyChange_NewValue(), ecorePackage.getEJavaObject(), "newValue", null, 0, 1, PropertyChange.class, !IS_TRANSIENT, !IS_VOLATILE,
+ IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEAttribute(getPropertyChange_Kind(), getChangeKind(), "kind", null, 0, 1, PropertyChange.class, IS_TRANSIENT, IS_VOLATILE, !IS_CHANGEABLE,
+ !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, IS_DERIVED, IS_ORDERED);
+
+ initEClass(migrationEClass, Migration.class, "Migration", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEReference(getMigration_ModelSet(), getModelSet(), getModelSet_Migrations(), "modelSet", null, 0, 1, Migration.class, !IS_TRANSIENT, !IS_VOLATILE,
+ IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEAttribute(getMigration_DiagnosticID(), ecorePackage.getEString(), "diagnosticID", null, 0, 1, Migration.class, !IS_TRANSIENT, !IS_VOLATILE,
+ IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ initEClass(featurePathMigrationEClass, FeaturePathMigration.class, "FeaturePathMigration", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEReference(getFeaturePathMigration_FromClass(), ecorePackage.getEClass(), null, "fromClass", null, 1, 1, FeaturePathMigration.class, !IS_TRANSIENT,
+ !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEReference(getFeaturePathMigration_ToClass(), ecorePackage.getEClass(), null, "toClass", null, 1, 1, FeaturePathMigration.class, !IS_TRANSIENT,
+ !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEReference(getFeaturePathMigration_FeaturePath(), ecorePackage.getEReference(), null, "featurePath", null, 0, -1, FeaturePathMigration.class,
+ !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ // Initialize enums and add enum literals
+ initEEnum(changeKindEEnum, ChangeKind.class, "ChangeKind");
+ addEEnumLiteral(changeKindEEnum, ChangeKind.NONE);
+ addEEnumLiteral(changeKindEEnum, ChangeKind.CHANGED);
+ addEEnumLiteral(changeKindEEnum, ChangeKind.REMOVED);
+ addEEnumLiteral(changeKindEEnum, ChangeKind.ADDED);
+ addEEnumLiteral(changeKindEEnum, ChangeKind.COPIED);
+ addEEnumLiteral(changeKindEEnum, ChangeKind.MOVED);
+
+ // Initialize data types
+ initEDataType(uriEDataType, org.eclipse.emf.common.util.URI.class, "URI", IS_SERIALIZABLE, !IS_GENERATED_INSTANCE_CLASS);
+
+ // Create resource
+ createResource(eNS_URI);
+
+ // Create annotations
+ // http://www.eclipse.org/emf/2002/Ecore
+ createEcoreAnnotations();
+ // http:///org/eclipse/emf/ecore/util/ExtendedMetaData
+ createExtendedMetaDataAnnotations();
+ }
+
+ /**
+ * Initializes the annotations for <b>http://www.eclipse.org/emf/2002/Ecore</b>.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void createEcoreAnnotations()
+ {
+ String source = "http://www.eclipse.org/emf/2002/Ecore";
+ addAnnotation(modelEClass, source, new String[] { "constraints", "ModelLoaded IDs_Exist NamespaceReflectsChange" });
+ addAnnotation(evolutionEClass, source, new String[] { "constraints", "NotEmpty PackagesUnique NoMissingPackages IDsUnique" });
+ addAnnotation(elementChangeEClass, source, new String[] { "constraints", "FeaturePathIsKnown" });
+ addAnnotation(migrationEClass, source, new String[] { "constraints", "NotObsolete" });
+ addAnnotation(featurePathMigrationEClass, source, new String[] { "constraints", "NewFeatureReachable" });
+ }
+
+ /**
+ * Initializes the annotations for <b>http:///org/eclipse/emf/ecore/util/ExtendedMetaData</b>.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void createExtendedMetaDataAnnotations()
+ {
+ String source = "http:///org/eclipse/emf/ecore/util/ExtendedMetaData";
+ addAnnotation(getModel_URI(), source, new String[] { "kind", "attribute", "name", "uri" });
+ }
+
+} // EvolutionPackageImpl
diff --git a/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/impl/EvolutionPlugin.java b/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/impl/EvolutionPlugin.java
new file mode 100644
index 0000000000..9f831d2a44
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/impl/EvolutionPlugin.java
@@ -0,0 +1,92 @@
+/**
+ */
+package org.eclipse.emf.cdo.evolution.impl;
+
+import org.eclipse.emf.common.EMFPlugin;
+import org.eclipse.emf.common.util.ResourceLocator;
+
+/**
+ * This is the central singleton for the Evolution model plugin.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public final class EvolutionPlugin extends EMFPlugin
+{
+ /**
+ * Keep track of the singleton.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static final EvolutionPlugin INSTANCE = new EvolutionPlugin();
+
+ /**
+ * Keep track of the singleton.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private static Implementation plugin;
+
+ /**
+ * Create the instance.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EvolutionPlugin()
+ {
+ super(new ResourceLocator[] {});
+ }
+
+ /**
+ * Returns the singleton instance of the Eclipse plugin.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the singleton instance.
+ * @generated
+ */
+ @Override
+ public ResourceLocator getPluginResourceLocator()
+ {
+ return plugin;
+ }
+
+ /**
+ * Returns the singleton instance of the Eclipse plugin.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the singleton instance.
+ * @generated
+ */
+ public static Implementation getPlugin()
+ {
+ return plugin;
+ }
+
+ /**
+ * The actual implementation of the Eclipse <b>Plugin</b>.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static class Implementation extends EclipsePlugin
+ {
+ /**
+ * Creates an instance.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public Implementation()
+ {
+ super();
+
+ // Remember the static instance.
+ //
+ plugin = this;
+ }
+ }
+
+}
diff --git a/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/impl/FeaturePathMigrationImpl.java b/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/impl/FeaturePathMigrationImpl.java
new file mode 100644
index 0000000000..48239adeaa
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/impl/FeaturePathMigrationImpl.java
@@ -0,0 +1,220 @@
+/**
+ */
+package org.eclipse.emf.cdo.evolution.impl;
+
+import org.eclipse.emf.cdo.evolution.EvolutionPackage;
+import org.eclipse.emf.cdo.evolution.FeaturePathMigration;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EReference;
+
+import java.util.Collection;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Feature Path Migration</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.emf.cdo.evolution.impl.FeaturePathMigrationImpl#getFromClass <em>From Class</em>}</li>
+ * <li>{@link org.eclipse.emf.cdo.evolution.impl.FeaturePathMigrationImpl#getToClass <em>To Class</em>}</li>
+ * <li>{@link org.eclipse.emf.cdo.evolution.impl.FeaturePathMigrationImpl#getFeaturePath <em>Feature Path</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class FeaturePathMigrationImpl extends MigrationImpl implements FeaturePathMigration
+{
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected FeaturePathMigrationImpl()
+ {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass()
+ {
+ return EvolutionPackage.Literals.FEATURE_PATH_MIGRATION;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EClass getFromClass()
+ {
+ return (EClass)eDynamicGet(EvolutionPackage.FEATURE_PATH_MIGRATION__FROM_CLASS, EvolutionPackage.Literals.FEATURE_PATH_MIGRATION__FROM_CLASS, true, true);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EClass basicGetFromClass()
+ {
+ return (EClass)eDynamicGet(EvolutionPackage.FEATURE_PATH_MIGRATION__FROM_CLASS, EvolutionPackage.Literals.FEATURE_PATH_MIGRATION__FROM_CLASS, false, true);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setFromClass(EClass newFromClass)
+ {
+ eDynamicSet(EvolutionPackage.FEATURE_PATH_MIGRATION__FROM_CLASS, EvolutionPackage.Literals.FEATURE_PATH_MIGRATION__FROM_CLASS, newFromClass);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EClass getToClass()
+ {
+ return (EClass)eDynamicGet(EvolutionPackage.FEATURE_PATH_MIGRATION__TO_CLASS, EvolutionPackage.Literals.FEATURE_PATH_MIGRATION__TO_CLASS, true, true);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EClass basicGetToClass()
+ {
+ return (EClass)eDynamicGet(EvolutionPackage.FEATURE_PATH_MIGRATION__TO_CLASS, EvolutionPackage.Literals.FEATURE_PATH_MIGRATION__TO_CLASS, false, true);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setToClass(EClass newToClass)
+ {
+ eDynamicSet(EvolutionPackage.FEATURE_PATH_MIGRATION__TO_CLASS, EvolutionPackage.Literals.FEATURE_PATH_MIGRATION__TO_CLASS, newToClass);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ public EList<EReference> getFeaturePath()
+ {
+ return (EList<EReference>)eDynamicGet(EvolutionPackage.FEATURE_PATH_MIGRATION__FEATURE_PATH, EvolutionPackage.Literals.FEATURE_PATH_MIGRATION__FEATURE_PATH,
+ true, true);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType)
+ {
+ switch (featureID)
+ {
+ case EvolutionPackage.FEATURE_PATH_MIGRATION__FROM_CLASS:
+ if (resolve)
+ {
+ return getFromClass();
+ }
+ return basicGetFromClass();
+ case EvolutionPackage.FEATURE_PATH_MIGRATION__TO_CLASS:
+ if (resolve)
+ {
+ return getToClass();
+ }
+ return basicGetToClass();
+ case EvolutionPackage.FEATURE_PATH_MIGRATION__FEATURE_PATH:
+ return getFeaturePath();
+ }
+ 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 EvolutionPackage.FEATURE_PATH_MIGRATION__FROM_CLASS:
+ setFromClass((EClass)newValue);
+ return;
+ case EvolutionPackage.FEATURE_PATH_MIGRATION__TO_CLASS:
+ setToClass((EClass)newValue);
+ return;
+ case EvolutionPackage.FEATURE_PATH_MIGRATION__FEATURE_PATH:
+ getFeaturePath().clear();
+ getFeaturePath().addAll((Collection<? extends EReference>)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID)
+ {
+ switch (featureID)
+ {
+ case EvolutionPackage.FEATURE_PATH_MIGRATION__FROM_CLASS:
+ setFromClass((EClass)null);
+ return;
+ case EvolutionPackage.FEATURE_PATH_MIGRATION__TO_CLASS:
+ setToClass((EClass)null);
+ return;
+ case EvolutionPackage.FEATURE_PATH_MIGRATION__FEATURE_PATH:
+ getFeaturePath().clear();
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID)
+ {
+ switch (featureID)
+ {
+ case EvolutionPackage.FEATURE_PATH_MIGRATION__FROM_CLASS:
+ return basicGetFromClass() != null;
+ case EvolutionPackage.FEATURE_PATH_MIGRATION__TO_CLASS:
+ return basicGetToClass() != null;
+ case EvolutionPackage.FEATURE_PATH_MIGRATION__FEATURE_PATH:
+ return !getFeaturePath().isEmpty();
+ }
+ return super.eIsSet(featureID);
+ }
+
+} // FeaturePathMigrationImpl
diff --git a/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/impl/MigrationImpl.java b/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/impl/MigrationImpl.java
new file mode 100644
index 0000000000..5f37be483b
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/impl/MigrationImpl.java
@@ -0,0 +1,252 @@
+/**
+ */
+package org.eclipse.emf.cdo.evolution.impl;
+
+import org.eclipse.emf.cdo.evolution.EvolutionPackage;
+import org.eclipse.emf.cdo.evolution.Migration;
+import org.eclipse.emf.cdo.evolution.ModelSet;
+
+import org.eclipse.emf.internal.cdo.CDOObjectImpl;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Migration</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.emf.cdo.evolution.impl.MigrationImpl#getModelSet <em>Model Set</em>}</li>
+ * <li>{@link org.eclipse.emf.cdo.evolution.impl.MigrationImpl#getDiagnosticID <em>Diagnostic ID</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public abstract class MigrationImpl extends CDOObjectImpl implements Migration
+{
+ /**
+ * The default value of the '{@link #getDiagnosticID() <em>Diagnostic ID</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getDiagnosticID()
+ * @generated
+ * @ordered
+ */
+ protected static final String DIAGNOSTIC_ID_EDEFAULT = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected MigrationImpl()
+ {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass()
+ {
+ return EvolutionPackage.Literals.MIGRATION;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected int eStaticFeatureCount()
+ {
+ return 0;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public ModelSet getModelSet()
+ {
+ return (ModelSet)eDynamicGet(EvolutionPackage.MIGRATION__MODEL_SET, EvolutionPackage.Literals.MIGRATION__MODEL_SET, true, true);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public NotificationChain basicSetModelSet(ModelSet newModelSet, NotificationChain msgs)
+ {
+ msgs = eBasicSetContainer((InternalEObject)newModelSet, EvolutionPackage.MIGRATION__MODEL_SET, msgs);
+ return msgs;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setModelSet(ModelSet newModelSet)
+ {
+ eDynamicSet(EvolutionPackage.MIGRATION__MODEL_SET, EvolutionPackage.Literals.MIGRATION__MODEL_SET, newModelSet);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public String getDiagnosticID()
+ {
+ return (String)eDynamicGet(EvolutionPackage.MIGRATION__DIAGNOSTIC_ID, EvolutionPackage.Literals.MIGRATION__DIAGNOSTIC_ID, true, true);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setDiagnosticID(String newDiagnosticID)
+ {
+ eDynamicSet(EvolutionPackage.MIGRATION__DIAGNOSTIC_ID, EvolutionPackage.Literals.MIGRATION__DIAGNOSTIC_ID, newDiagnosticID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+ {
+ switch (featureID)
+ {
+ case EvolutionPackage.MIGRATION__MODEL_SET:
+ if (eInternalContainer() != null)
+ {
+ msgs = eBasicRemoveFromContainer(msgs);
+ }
+ return basicSetModelSet((ModelSet)otherEnd, msgs);
+ }
+ return super.eInverseAdd(otherEnd, featureID, msgs);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+ {
+ switch (featureID)
+ {
+ case EvolutionPackage.MIGRATION__MODEL_SET:
+ return basicSetModelSet(null, msgs);
+ }
+ return super.eInverseRemove(otherEnd, featureID, msgs);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public NotificationChain eBasicRemoveFromContainerFeature(NotificationChain msgs)
+ {
+ switch (eContainerFeatureID())
+ {
+ case EvolutionPackage.MIGRATION__MODEL_SET:
+ return eInternalContainer().eInverseRemove(this, EvolutionPackage.MODEL_SET__MIGRATIONS, ModelSet.class, msgs);
+ }
+ return super.eBasicRemoveFromContainerFeature(msgs);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType)
+ {
+ switch (featureID)
+ {
+ case EvolutionPackage.MIGRATION__MODEL_SET:
+ return getModelSet();
+ case EvolutionPackage.MIGRATION__DIAGNOSTIC_ID:
+ return getDiagnosticID();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eSet(int featureID, Object newValue)
+ {
+ switch (featureID)
+ {
+ case EvolutionPackage.MIGRATION__MODEL_SET:
+ setModelSet((ModelSet)newValue);
+ return;
+ case EvolutionPackage.MIGRATION__DIAGNOSTIC_ID:
+ setDiagnosticID((String)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID)
+ {
+ switch (featureID)
+ {
+ case EvolutionPackage.MIGRATION__MODEL_SET:
+ setModelSet((ModelSet)null);
+ return;
+ case EvolutionPackage.MIGRATION__DIAGNOSTIC_ID:
+ setDiagnosticID(DIAGNOSTIC_ID_EDEFAULT);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID)
+ {
+ switch (featureID)
+ {
+ case EvolutionPackage.MIGRATION__MODEL_SET:
+ return getModelSet() != null;
+ case EvolutionPackage.MIGRATION__DIAGNOSTIC_ID:
+ return DIAGNOSTIC_ID_EDEFAULT == null ? getDiagnosticID() != null : !DIAGNOSTIC_ID_EDEFAULT.equals(getDiagnosticID());
+ }
+ return super.eIsSet(featureID);
+ }
+
+} // MigrationImpl
diff --git a/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/impl/ModelImpl.java b/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/impl/ModelImpl.java
new file mode 100644
index 0000000000..577b41095b
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/impl/ModelImpl.java
@@ -0,0 +1,567 @@
+/**
+ */
+package org.eclipse.emf.cdo.evolution.impl;
+
+import org.eclipse.emf.cdo.eresource.EresourcePackage;
+import org.eclipse.emf.cdo.etypes.EtypesPackage;
+import org.eclipse.emf.cdo.evolution.Evolution;
+import org.eclipse.emf.cdo.evolution.EvolutionPackage;
+import org.eclipse.emf.cdo.evolution.Model;
+
+import org.eclipse.emf.internal.cdo.CDOObjectImpl;
+import org.eclipse.emf.internal.cdo.util.CompletePackageClosure;
+import org.eclipse.emf.internal.cdo.util.IPackageClosure;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.ECollections;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EcorePackage;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.util.EcoreEList;
+
+import java.util.Collections;
+import java.util.Set;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Model</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.emf.cdo.evolution.impl.ModelImpl#getEvolution <em>Evolution</em>}</li>
+ * <li>{@link org.eclipse.emf.cdo.evolution.impl.ModelImpl#getURI <em>URI</em>}</li>
+ * <li>{@link org.eclipse.emf.cdo.evolution.impl.ModelImpl#getRootPackage <em>Root Package</em>}</li>
+ * <li>{@link org.eclipse.emf.cdo.evolution.impl.ModelImpl#getAllPackages <em>All Packages</em>}</li>
+ * <li>{@link org.eclipse.emf.cdo.evolution.impl.ModelImpl#getReferencedPackages <em>Referenced Packages</em>}</li>
+ * <li>{@link org.eclipse.emf.cdo.evolution.impl.ModelImpl#getMissingPackages <em>Missing Packages</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class ModelImpl extends CDOObjectImpl implements Model
+{
+ /**
+ * The default value of the '{@link #getURI() <em>URI</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getURI()
+ * @generated
+ * @ordered
+ */
+ protected static final URI URI_EDEFAULT = null;
+
+ private ModelStatus status;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected ModelImpl()
+ {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass()
+ {
+ return EvolutionPackage.Literals.MODEL;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected int eStaticFeatureCount()
+ {
+ return 0;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public Evolution getEvolution()
+ {
+ return (Evolution)eDynamicGet(EvolutionPackage.MODEL__EVOLUTION, EvolutionPackage.Literals.MODEL__EVOLUTION, true, true);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public NotificationChain basicSetEvolution(Evolution newEvolution, NotificationChain msgs)
+ {
+ msgs = eBasicSetContainer((InternalEObject)newEvolution, EvolutionPackage.MODEL__EVOLUTION, msgs);
+ return msgs;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setEvolution(Evolution newEvolution)
+ {
+ eDynamicSet(EvolutionPackage.MODEL__EVOLUTION, EvolutionPackage.Literals.MODEL__EVOLUTION, newEvolution);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public URI getURI()
+ {
+ return (URI)eDynamicGet(EvolutionPackage.MODEL__URI, EvolutionPackage.Literals.MODEL__URI, true, true);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setURIGen(URI newURI)
+ {
+ eDynamicSet(EvolutionPackage.MODEL__URI, EvolutionPackage.Literals.MODEL__URI, newURI);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ public void setURI(URI newURI)
+ {
+ status = null;
+
+ EPackage oldRootPackage = null;
+ // EList<EPackage> oldAllPackages = null;
+ // EList<EPackage> oldReferencedPackages = null;
+ // EList<EPackage> oldMissingPackages = null;
+
+ boolean notificationRequired = eNotificationRequired();
+ if (notificationRequired)
+ {
+ oldRootPackage = getRootPackage();
+ // oldAllPackages = getAllPackages();
+ // oldReferencedPackages = getReferencedPackages();
+ // oldMissingPackages = getMissingPackages();
+ }
+
+ setURIGen(newURI);
+
+ if (notificationRequired)
+ {
+ EPackage rootPackage = getRootPackage();
+ if (rootPackage != oldRootPackage)
+ {
+ eNotify(new ENotificationImpl(this, Notification.SET, EvolutionPackage.Literals.MODEL__ROOT_PACKAGE, oldRootPackage, rootPackage));
+ }
+
+ // EList<EPackage> allPackages = getAllPackages();
+ // if (!allPackages.equals(oldAllPackages))
+ // {
+ // eNotify(new ENotificationImpl(this, Notification.SET, EvolutionPackage.Literals.MODEL__ALL_PACKAGES,
+ // oldAllPackages, allPackages));
+ // }
+ }
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EPackage getRootPackage()
+ {
+ EPackage rootPackage = basicGetRootPackage();
+ return rootPackage != null && rootPackage.eIsProxy() ? (EPackage)eResolveProxy((InternalEObject)rootPackage) : rootPackage;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ public EPackage basicGetRootPackage()
+ {
+ URI uri = getURI();
+ if (uri == null)
+ {
+ status = ModelStatus.NO_URI;
+ return null;
+ }
+
+ Resource resource = eResource();
+ if (resource == null)
+ {
+ status = ModelStatus.NO_RESOURCE_SET;
+ return null;
+ }
+
+ ResourceSet resourceSet = resource.getResourceSet();
+ if (resourceSet == null)
+ {
+ status = ModelStatus.NO_RESOURCE_SET;
+ return null;
+ }
+
+ if (!resourceSet.getURIConverter().exists(uri, Collections.emptyMap()))
+ {
+ status = ModelStatus.RESOURCE_NOT_FOUND;
+ return null;
+ }
+
+ Resource modelResource;
+
+ try
+ {
+ modelResource = resourceSet.getResource(uri, true);
+ }
+ catch (Exception ex)
+ {
+ // ex.printStackTrace();
+ modelResource = null;
+ }
+
+ if (modelResource == null)
+ {
+ status = ModelStatus.LOAD_PROBLEM;
+ return null;
+ }
+
+ if (!modelResource.getErrors().isEmpty())
+ {
+ status = ModelStatus.LOAD_PROBLEM;
+ resourceSet.getResources().remove(modelResource);
+ return null;
+ }
+
+ EList<EObject> contents = modelResource.getContents();
+ if (contents.isEmpty())
+ {
+ status = ModelStatus.CONTENT_PROBLEM;
+ return null;
+ }
+
+ EObject firstElement = contents.get(0);
+ if (!(firstElement instanceof EPackage))
+ {
+ status = ModelStatus.CONTENT_PROBLEM;
+ return null;
+ }
+
+ status = ModelStatus.OK;
+ return (EPackage)firstElement;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ public EList<EPackage> getAllPackages()
+ {
+ EPackage rootPackage = getRootPackage();
+ if (rootPackage == null)
+ {
+ return ECollections.emptyEList();
+ }
+
+ EcoreEList<EPackage> list = new EcoreEList<EPackage>(EPackage.class, this)
+ {
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ public int getFeatureID()
+ {
+ return EvolutionPackage.MODEL__ALL_PACKAGES;
+ }
+ };
+
+ collectAllPackages(rootPackage, list);
+ return list;
+ }
+
+ static void collectAllPackages(EPackage ePackage, EList<EPackage> list)
+ {
+ list.add(ePackage);
+
+ for (EPackage subPackage : ePackage.getESubpackages())
+ {
+ collectAllPackages(subPackage, list);
+ }
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ public EList<EPackage> getReferencedPackages()
+ {
+ EList<EPackage> allPackages = getAllPackages();
+ if (allPackages.isEmpty())
+ {
+ return ECollections.emptyEList();
+ }
+
+ EcoreEList<EPackage> list = new EcoreEList<EPackage>(EPackage.class, this)
+ {
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ public int getFeatureID()
+ {
+ return EvolutionPackage.MODEL__REFERENCED_PACKAGES;
+ }
+ };
+
+ IPackageClosure closure = new CompletePackageClosure();
+ Set<EPackage> referencedPackages = closure.calculate(allPackages);
+
+ for (EPackage referencedPackage : referencedPackages)
+ {
+ if (!allPackages.contains(referencedPackage))
+ {
+ list.add(referencedPackage);
+ }
+ }
+
+ return list;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ public EList<EPackage> getMissingPackages()
+ {
+ EList<EPackage> referencedPackages = getReferencedPackages();
+ if (referencedPackages.isEmpty())
+ {
+ return ECollections.emptyEList();
+ }
+
+ Evolution evolution = getEvolution();
+ if (evolution == null)
+ {
+ return ECollections.emptyEList();
+ }
+
+ EList<EPackage> allPackages = evolution.getAllPackages();
+
+ EcoreEList<EPackage> list = new EcoreEList<EPackage>(EPackage.class, this)
+ {
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ public int getFeatureID()
+ {
+ return EvolutionPackage.MODEL__MISSING_PACKAGES;
+ }
+ };
+
+ for (EPackage referencedPackage : referencedPackages)
+ {
+ if (referencedPackage == EcorePackage.eINSTANCE && evolution.isUseEcorePackage())
+ {
+ continue;
+ }
+
+ if (referencedPackage == EresourcePackage.eINSTANCE && evolution.isUseEresourcePackage())
+ {
+ continue;
+ }
+
+ if (referencedPackage == EtypesPackage.eINSTANCE && evolution.isUseEtypesPackage())
+ {
+ continue;
+ }
+
+ if (allPackages.contains(referencedPackage))
+ {
+ continue;
+ }
+
+ list.add(referencedPackage);
+ }
+
+ return list;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+ {
+ switch (featureID)
+ {
+ case EvolutionPackage.MODEL__EVOLUTION:
+ if (eInternalContainer() != null)
+ {
+ msgs = eBasicRemoveFromContainer(msgs);
+ }
+ return basicSetEvolution((Evolution)otherEnd, msgs);
+ }
+ return super.eInverseAdd(otherEnd, featureID, msgs);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+ {
+ switch (featureID)
+ {
+ case EvolutionPackage.MODEL__EVOLUTION:
+ return basicSetEvolution(null, msgs);
+ }
+ return super.eInverseRemove(otherEnd, featureID, msgs);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public NotificationChain eBasicRemoveFromContainerFeature(NotificationChain msgs)
+ {
+ switch (eContainerFeatureID())
+ {
+ case EvolutionPackage.MODEL__EVOLUTION:
+ return eInternalContainer().eInverseRemove(this, EvolutionPackage.EVOLUTION__MODELS, Evolution.class, msgs);
+ }
+ return super.eBasicRemoveFromContainerFeature(msgs);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType)
+ {
+ switch (featureID)
+ {
+ case EvolutionPackage.MODEL__EVOLUTION:
+ return getEvolution();
+ case EvolutionPackage.MODEL__URI:
+ return getURI();
+ case EvolutionPackage.MODEL__ROOT_PACKAGE:
+ if (resolve)
+ {
+ return getRootPackage();
+ }
+ return basicGetRootPackage();
+ case EvolutionPackage.MODEL__ALL_PACKAGES:
+ return getAllPackages();
+ case EvolutionPackage.MODEL__REFERENCED_PACKAGES:
+ return getReferencedPackages();
+ case EvolutionPackage.MODEL__MISSING_PACKAGES:
+ return getMissingPackages();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eSet(int featureID, Object newValue)
+ {
+ switch (featureID)
+ {
+ case EvolutionPackage.MODEL__EVOLUTION:
+ setEvolution((Evolution)newValue);
+ return;
+ case EvolutionPackage.MODEL__URI:
+ setURI((URI)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID)
+ {
+ switch (featureID)
+ {
+ case EvolutionPackage.MODEL__EVOLUTION:
+ setEvolution((Evolution)null);
+ return;
+ case EvolutionPackage.MODEL__URI:
+ setURI(URI_EDEFAULT);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID)
+ {
+ switch (featureID)
+ {
+ case EvolutionPackage.MODEL__EVOLUTION:
+ return getEvolution() != null;
+ case EvolutionPackage.MODEL__URI:
+ return URI_EDEFAULT == null ? getURI() != null : !URI_EDEFAULT.equals(getURI());
+ case EvolutionPackage.MODEL__ROOT_PACKAGE:
+ return basicGetRootPackage() != null;
+ case EvolutionPackage.MODEL__ALL_PACKAGES:
+ return !getAllPackages().isEmpty();
+ case EvolutionPackage.MODEL__REFERENCED_PACKAGES:
+ return !getReferencedPackages().isEmpty();
+ case EvolutionPackage.MODEL__MISSING_PACKAGES:
+ return !getMissingPackages().isEmpty();
+ }
+ return super.eIsSet(featureID);
+ }
+
+ public ModelStatus getStatus()
+ {
+ return status;
+ }
+
+} // ModelImpl
diff --git a/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/impl/ModelSetChangeImpl.java b/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/impl/ModelSetChangeImpl.java
new file mode 100644
index 0000000000..b06a02328f
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/impl/ModelSetChangeImpl.java
@@ -0,0 +1,276 @@
+/**
+ */
+package org.eclipse.emf.cdo.evolution.impl;
+
+import org.eclipse.emf.cdo.evolution.ElementChange;
+import org.eclipse.emf.cdo.evolution.EvolutionPackage;
+import org.eclipse.emf.cdo.evolution.ModelSet;
+import org.eclipse.emf.cdo.evolution.ModelSetChange;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EModelElement;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Model Set Change</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.emf.cdo.evolution.impl.ModelSetChangeImpl#getOldModelSet <em>Old Model Set</em>}</li>
+ * <li>{@link org.eclipse.emf.cdo.evolution.impl.ModelSetChangeImpl#getNewModelSet <em>New Model Set</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class ModelSetChangeImpl extends ChangeImpl implements ModelSetChange
+{
+ private final Map<EModelElement, ElementChange> elementChanges = new HashMap<EModelElement, ElementChange>();
+
+ private final Map<EModelElement, EModelElement> newToOldElements = new HashMap<EModelElement, EModelElement>();
+
+ private final Map<EModelElement, Set<EModelElement>> oldToNewElements = new HashMap<EModelElement, Set<EModelElement>>();
+
+ private final Set<EModelElement> addedElements = new HashSet<EModelElement>();
+
+ private final Set<EModelElement> removedElements = new HashSet<EModelElement>();
+
+ private ModelSet[] modelSetChain;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected ModelSetChangeImpl()
+ {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass()
+ {
+ return EvolutionPackage.Literals.MODEL_SET_CHANGE;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public ModelSet getOldModelSet()
+ {
+ return (ModelSet)eDynamicGet(EvolutionPackage.MODEL_SET_CHANGE__OLD_MODEL_SET, EvolutionPackage.Literals.MODEL_SET_CHANGE__OLD_MODEL_SET, true, true);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public ModelSet basicGetOldModelSet()
+ {
+ return (ModelSet)eDynamicGet(EvolutionPackage.MODEL_SET_CHANGE__OLD_MODEL_SET, EvolutionPackage.Literals.MODEL_SET_CHANGE__OLD_MODEL_SET, false, true);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setOldModelSet(ModelSet newOldModelSet)
+ {
+ eDynamicSet(EvolutionPackage.MODEL_SET_CHANGE__OLD_MODEL_SET, EvolutionPackage.Literals.MODEL_SET_CHANGE__OLD_MODEL_SET, newOldModelSet);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public ModelSet getNewModelSet()
+ {
+ return (ModelSet)eDynamicGet(EvolutionPackage.MODEL_SET_CHANGE__NEW_MODEL_SET, EvolutionPackage.Literals.MODEL_SET_CHANGE__NEW_MODEL_SET, true, true);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public ModelSet basicGetNewModelSet()
+ {
+ return (ModelSet)eDynamicGet(EvolutionPackage.MODEL_SET_CHANGE__NEW_MODEL_SET, EvolutionPackage.Literals.MODEL_SET_CHANGE__NEW_MODEL_SET, false, true);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setNewModelSet(ModelSet newNewModelSet)
+ {
+ eDynamicSet(EvolutionPackage.MODEL_SET_CHANGE__NEW_MODEL_SET, EvolutionPackage.Literals.MODEL_SET_CHANGE__NEW_MODEL_SET, newNewModelSet);
+ }
+
+ @Override
+ public ModelSetChange getModelSetChange()
+ {
+ return this;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType)
+ {
+ switch (featureID)
+ {
+ case EvolutionPackage.MODEL_SET_CHANGE__OLD_MODEL_SET:
+ if (resolve)
+ {
+ return getOldModelSet();
+ }
+ return basicGetOldModelSet();
+ case EvolutionPackage.MODEL_SET_CHANGE__NEW_MODEL_SET:
+ if (resolve)
+ {
+ return getNewModelSet();
+ }
+ return basicGetNewModelSet();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eSet(int featureID, Object newValue)
+ {
+ switch (featureID)
+ {
+ case EvolutionPackage.MODEL_SET_CHANGE__OLD_MODEL_SET:
+ setOldModelSet((ModelSet)newValue);
+ return;
+ case EvolutionPackage.MODEL_SET_CHANGE__NEW_MODEL_SET:
+ setNewModelSet((ModelSet)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID)
+ {
+ switch (featureID)
+ {
+ case EvolutionPackage.MODEL_SET_CHANGE__OLD_MODEL_SET:
+ setOldModelSet((ModelSet)null);
+ return;
+ case EvolutionPackage.MODEL_SET_CHANGE__NEW_MODEL_SET:
+ setNewModelSet((ModelSet)null);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID)
+ {
+ switch (featureID)
+ {
+ case EvolutionPackage.MODEL_SET_CHANGE__OLD_MODEL_SET:
+ return basicGetOldModelSet() != null;
+ case EvolutionPackage.MODEL_SET_CHANGE__NEW_MODEL_SET:
+ return basicGetNewModelSet() != null;
+ }
+ return super.eIsSet(featureID);
+ }
+
+ public Map<EModelElement, ElementChange> getElementChanges()
+ {
+ return elementChanges;
+ }
+
+ public Map<EModelElement, EModelElement> getNewToOldElements()
+ {
+ return newToOldElements;
+ }
+
+ public Map<EModelElement, Set<EModelElement>> getOldToNewElements()
+ {
+ return oldToNewElements;
+ }
+
+ public Set<EModelElement> getAddedElements()
+ {
+ return addedElements;
+ }
+
+ public Set<EModelElement> getRemovedElements()
+ {
+ return removedElements;
+ }
+
+ public ModelSet[] getModelSetChain()
+ {
+ return modelSetChain;
+ }
+
+ public void setModelSetChain(ModelSet[] modelSetChain)
+ {
+ this.modelSetChain = modelSetChain;
+ setOldModelSet(modelSetChain[0]);
+ setNewModelSet(modelSetChain[modelSetChain.length - 1]);
+
+ }
+
+ public Map<EModelElement, ElementChange> reset()
+ {
+ Map<EModelElement, ElementChange> result = new HashMap<EModelElement, ElementChange>(elementChanges);
+
+ for (ElementChange elementChange : elementChanges.values())
+ {
+ elementChange.getChildren().clear();
+ }
+
+ getChildren().clear();
+ oldToNewElements.clear();
+ newToOldElements.clear();
+ addedElements.clear();
+ removedElements.clear();
+ elementChanges.clear();
+
+ return result;
+ }
+
+} // ModelSetChangeImpl
diff --git a/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/impl/ModelSetImpl.java b/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/impl/ModelSetImpl.java
new file mode 100644
index 0000000000..b7d7696a87
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/impl/ModelSetImpl.java
@@ -0,0 +1,937 @@
+/**
+ */
+package org.eclipse.emf.cdo.evolution.impl;
+
+import org.eclipse.emf.cdo.evolution.Change;
+import org.eclipse.emf.cdo.evolution.ChangeKind;
+import org.eclipse.emf.cdo.evolution.ElementChange;
+import org.eclipse.emf.cdo.evolution.Evolution;
+import org.eclipse.emf.cdo.evolution.EvolutionFactory;
+import org.eclipse.emf.cdo.evolution.EvolutionPackage;
+import org.eclipse.emf.cdo.evolution.Migration;
+import org.eclipse.emf.cdo.evolution.ModelSet;
+import org.eclipse.emf.cdo.evolution.ModelSetChange;
+import org.eclipse.emf.cdo.evolution.PropertyChange;
+import org.eclipse.emf.cdo.evolution.Release;
+import org.eclipse.emf.cdo.evolution.util.ElementHandler;
+import org.eclipse.emf.cdo.evolution.util.ElementRunnable;
+import org.eclipse.emf.cdo.evolution.util.IDAnnotation;
+
+import org.eclipse.emf.internal.cdo.CDOObjectImpl;
+
+import org.eclipse.net4j.util.ObjectUtil;
+import org.eclipse.net4j.util.collection.CollectionUtil;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.BasicEList;
+import org.eclipse.emf.common.util.ECollections;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EModelElement;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecore.EcorePackage;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Model Set</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.emf.cdo.evolution.impl.ModelSetImpl#getChange <em>Change</em>}</li>
+ * <li>{@link org.eclipse.emf.cdo.evolution.impl.ModelSetImpl#getMigrations <em>Migrations</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public abstract class ModelSetImpl extends CDOObjectImpl implements ModelSet
+{
+ private static final boolean COMPARE_CONTAINMENT = false;
+
+ private static final boolean DEBUG_IDS = false;
+
+ private static final boolean DEBUG_MATCH = false;
+
+ private static final boolean DEBUG_COMPARE = false;
+
+ private static final boolean DEBUG_CLEANUP = false;
+
+ private boolean changeInvalid;
+
+ private ModelSetImpl emptyModelSet;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected ModelSetImpl()
+ {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass()
+ {
+ return EvolutionPackage.Literals.MODEL_SET;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected int eStaticFeatureCount()
+ {
+ return 0;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public ModelSetChange getChangeGen()
+ {
+ return (ModelSetChange)eDynamicGet(EvolutionPackage.MODEL_SET__CHANGE, EvolutionPackage.Literals.MODEL_SET__CHANGE, true, true);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated NOT
+ */
+ public ModelSetChange getChange()
+ {
+ ModelSetChangeImpl change = (ModelSetChangeImpl)getChangeGen();
+ if (change != null && change.getOldModelSet() != getOldModelSet())
+ {
+ // Can happen after undoing a release.
+ change = null;
+ }
+
+ if (change == null || changeInvalid)
+
+ {
+ ModelSetChangeImpl result;
+ Map<EModelElement, ElementChange> previousElementChanges;
+
+ if (change != null)
+ {
+ previousElementChanges = change.reset();
+ result = change;
+ }
+ else
+ {
+ ModelSet oldModelSet = getOldModelSet();
+ ModelSet[] modelSetChain = createModelSetChain(oldModelSet, this);
+
+ previousElementChanges = null;
+ result = (ModelSetChangeImpl)EvolutionFactory.eINSTANCE.createModelSetChange(modelSetChain);
+ }
+
+ compareElements(result, previousElementChanges);
+
+ try
+ {
+ eSetDeliver(false);
+ setChange(change = result);
+ }
+ finally
+ {
+ eSetDeliver(true);
+ changeInvalid = false;
+ }
+ }
+
+ return change;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public NotificationChain basicSetChange(ModelSetChange newChange, NotificationChain msgs)
+ {
+ msgs = eDynamicInverseAdd((InternalEObject)newChange, EvolutionPackage.MODEL_SET__CHANGE, msgs);
+ return msgs;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setChange(ModelSetChange newChange)
+ {
+ eDynamicSet(EvolutionPackage.MODEL_SET__CHANGE, EvolutionPackage.Literals.MODEL_SET__CHANGE, newChange);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public NotificationChain basicUnsetChange(NotificationChain msgs)
+ {
+ return eDynamicInverseRemove((InternalEObject)getChange(), EvolutionPackage.MODEL_SET__CHANGE, msgs);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void unsetChange()
+ {
+ eDynamicUnset(EvolutionPackage.MODEL_SET__CHANGE, EvolutionPackage.Literals.MODEL_SET__CHANGE);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public boolean isSetChange()
+ {
+ return eDynamicIsSet(EvolutionPackage.MODEL_SET__CHANGE, EvolutionPackage.Literals.MODEL_SET__CHANGE);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ public EList<Migration> getMigrations()
+ {
+ return (EList<Migration>)eDynamicGet(EvolutionPackage.MODEL_SET__MIGRATIONS, EvolutionPackage.Literals.MODEL_SET__MIGRATIONS, true, true);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ public abstract Evolution getEvolution();
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ public abstract int getVersion();
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ public abstract Release getPreviousRelease();
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ public abstract EList<EPackage> getRootPackages();
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ public abstract EList<EPackage> getAllPackages();
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ public abstract boolean containsElement(EModelElement modelElement);
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ @SuppressWarnings("unchecked")
+ public <T extends EModelElement> T getElement(final String id)
+ {
+ // TODO Design better approach to early return from ElementHandler.execute().
+ int xxx;
+
+ class ResultException extends RuntimeException
+ {
+ private static final long serialVersionUID = 1L;
+
+ EModelElement result;
+ }
+
+ try
+ {
+ ElementHandler.execute(getRootPackages(), new ElementRunnable()
+ {
+ public void run(EModelElement modelElement)
+ {
+ if (ObjectUtil.equals(id, getElementID(modelElement)))
+ {
+ ResultException ex = new ResultException();
+ ex.result = modelElement;
+ throw ex;
+ }
+ }
+ });
+ }
+ catch (ResultException ex)
+ {
+ return (T)ex.result;
+ }
+
+ return null;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ public String getElementID(EModelElement modelElement)
+ {
+ return getElementID(modelElement, false);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ public String getElementID(EModelElement modelElement, boolean considerOldIDs)
+ {
+ if (containsElement(modelElement))
+ {
+ return IDAnnotation.getValue(modelElement, considerOldIDs);
+ }
+
+ return null;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ public ModelSetChange compare(ModelSet other)
+ {
+ ModelSet[] modelSetChain = createModelSetChain(this, other);
+ ModelSetChangeImpl result = (ModelSetChangeImpl)EvolutionFactory.eINSTANCE.createModelSetChange(modelSetChain);
+
+ compareElements(result, null);
+ return result;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ public Migration getMigration(String diagnosticID)
+ {
+ if (diagnosticID != null)
+ {
+ for (Migration migration : getMigrations())
+ {
+ if (diagnosticID.equals(migration.getDiagnosticID()))
+ {
+ return migration;
+ }
+ }
+ }
+
+ return null;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+ {
+ switch (featureID)
+ {
+ case EvolutionPackage.MODEL_SET__MIGRATIONS:
+ return ((InternalEList<InternalEObject>)(InternalEList<?>)getMigrations()).basicAdd(otherEnd, msgs);
+ }
+ return super.eInverseAdd(otherEnd, featureID, msgs);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+ {
+ switch (featureID)
+ {
+ case EvolutionPackage.MODEL_SET__CHANGE:
+ return basicUnsetChange(msgs);
+ case EvolutionPackage.MODEL_SET__MIGRATIONS:
+ return ((InternalEList<?>)getMigrations()).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 EvolutionPackage.MODEL_SET__CHANGE:
+ return getChange();
+ case EvolutionPackage.MODEL_SET__MIGRATIONS:
+ return getMigrations();
+ }
+ 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 EvolutionPackage.MODEL_SET__CHANGE:
+ setChange((ModelSetChange)newValue);
+ return;
+ case EvolutionPackage.MODEL_SET__MIGRATIONS:
+ getMigrations().clear();
+ getMigrations().addAll((Collection<? extends Migration>)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID)
+ {
+ switch (featureID)
+ {
+ case EvolutionPackage.MODEL_SET__CHANGE:
+ unsetChange();
+ return;
+ case EvolutionPackage.MODEL_SET__MIGRATIONS:
+ getMigrations().clear();
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID)
+ {
+ switch (featureID)
+ {
+ case EvolutionPackage.MODEL_SET__CHANGE:
+ return isSetChange();
+ case EvolutionPackage.MODEL_SET__MIGRATIONS:
+ return !getMigrations().isEmpty();
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object eInvoke(int operationID, EList<?> arguments) throws InvocationTargetException
+ {
+ switch (operationID)
+ {
+ case EvolutionPackage.MODEL_SET___GET_EVOLUTION:
+ return getEvolution();
+ case EvolutionPackage.MODEL_SET___GET_VERSION:
+ return getVersion();
+ case EvolutionPackage.MODEL_SET___GET_PREVIOUS_RELEASE:
+ return getPreviousRelease();
+ case EvolutionPackage.MODEL_SET___GET_ROOT_PACKAGES:
+ return getRootPackages();
+ case EvolutionPackage.MODEL_SET___GET_ALL_PACKAGES:
+ return getAllPackages();
+ case EvolutionPackage.MODEL_SET___CONTAINS_ELEMENT__EMODELELEMENT:
+ return containsElement((EModelElement)arguments.get(0));
+ case EvolutionPackage.MODEL_SET___GET_ELEMENT__STRING:
+ return getElement((String)arguments.get(0));
+ case EvolutionPackage.MODEL_SET___GET_ELEMENT_ID__EMODELELEMENT:
+ return getElementID((EModelElement)arguments.get(0));
+ case EvolutionPackage.MODEL_SET___GET_ELEMENT_ID__EMODELELEMENT_BOOLEAN:
+ return getElementID((EModelElement)arguments.get(0), (Boolean)arguments.get(1));
+ case EvolutionPackage.MODEL_SET___COMPARE__MODELSET:
+ return compare((ModelSet)arguments.get(0));
+ case EvolutionPackage.MODEL_SET___GET_MIGRATION__STRING:
+ return getMigration((String)arguments.get(0));
+ }
+ return super.eInvoke(operationID, arguments);
+ }
+
+ public void invalidateChange()
+ {
+ changeInvalid = true;
+ }
+
+ private ModelSet getOldModelSet()
+ {
+ Release previousRelease = getPreviousRelease();
+ return previousRelease != null ? previousRelease : getEmptyModelSet();
+ }
+
+ private ModelSet getEmptyModelSet()
+ {
+ if (emptyModelSet == null)
+ {
+ emptyModelSet = new ModelSetImpl()
+ {
+ @Override
+ public int getVersion()
+ {
+ return 0;
+ }
+
+ @Override
+ public EList<EPackage> getRootPackages()
+ {
+ return ECollections.emptyEList();
+ }
+
+ @Override
+ public Release getPreviousRelease()
+ {
+ return null;
+ }
+
+ @Override
+ public Evolution getEvolution()
+ {
+ return ModelSetImpl.this.getEvolution();
+ }
+
+ @Override
+ public EList<EPackage> getAllPackages()
+ {
+ return ECollections.emptyEList();
+ }
+
+ @Override
+ public boolean containsElement(EModelElement modelElement)
+ {
+ return false;
+ }
+ };
+ }
+
+ return emptyModelSet;
+ }
+
+ private static void compareElements(final ModelSetChangeImpl result, final Map<EModelElement, ElementChange> previousElementChanges)
+ {
+ final ModelSet[] modelSets = result.getModelSetChain();
+ final ModelSet oldModelSet = result.getOldModelSet();
+ final ModelSet newModelSet = result.getNewModelSet();
+
+ ElementHandler.execute(newModelSet.getRootPackages(), new ElementRunnable()
+ {
+ public void run(EModelElement newElement)
+ {
+ EModelElement oldElement = newElement;
+
+ for (int i = modelSets.length - 1; i > 0; --i)
+ {
+ String id = modelSets[i].getElementID(oldElement, true);
+ oldElement = modelSets[i - 1].getElement(id);
+ if (oldElement == null)
+ {
+ break;
+ }
+ }
+
+ if (oldElement != null)
+ {
+ String newID = IDAnnotation.getValue(newElement);
+ String oldID = IDAnnotation.getValue(oldElement);
+
+ ChangeKind kind = ObjectUtil.equals(newID, oldID) ? ChangeKind.NONE : ChangeKind.COPIED;
+ if (kind == ChangeKind.COPIED)
+ {
+ if (newModelSet.getElement(oldID) == null)
+ {
+ kind = ChangeKind.MOVED;
+ }
+ }
+
+ if (DEBUG_MATCH)
+ {
+ System.out.println(kind + " " + getLabel(oldElement) + " --> " + getLabel(newElement));
+ }
+
+ ElementChange elementChange = getElementChange(newElement, oldElement, kind, previousElementChanges);
+ getParentChange(elementChange, result).getChildren().add(elementChange);
+ result.getElementChanges().put(oldElement, elementChange);
+ result.getElementChanges().put(newElement, elementChange);
+ result.getNewToOldElements().put(newElement, oldElement);
+ CollectionUtil.add(result.getOldToNewElements(), oldElement, newElement);
+ }
+ else
+ {
+ if (DEBUG_MATCH)
+ {
+ System.out.println("ADDED " + getLabel(newElement));
+ }
+
+ ElementChange elementChange = getElementChange(null, newElement, ChangeKind.ADDED, previousElementChanges);
+ getParentChange(elementChange, result).getChildren().add(elementChange);
+ result.getElementChanges().put(newElement, elementChange);
+ result.getAddedElements().add(newElement);
+ }
+ }
+ });
+
+ ElementHandler.execute(oldModelSet.getRootPackages(), new ElementRunnable()
+ {
+ public void run(EModelElement oldElement)
+ {
+ if (isRemoved(oldElement))
+ {
+ if (DEBUG_MATCH)
+ {
+ System.out.println("REMOVED " + getLabel(oldElement));
+ }
+
+ ElementChange elementChange = getElementChange(oldElement, null, ChangeKind.REMOVED, previousElementChanges);
+ getParentChange(elementChange, result).getChildren().add(elementChange);
+ result.getElementChanges().put(oldElement, elementChange);
+ result.getRemovedElements().add(oldElement);
+ }
+ }
+
+ private boolean isRemoved(EModelElement oldElement)
+ {
+ Set<EModelElement> newElements = result.getOldToNewElements().get(oldElement);
+ if (newElements == null || newElements.isEmpty())
+ {
+ return true;
+ }
+
+ String oldID = oldModelSet.getElementID(oldElement);
+ for (EModelElement newElement : newElements)
+ {
+ String newID = newModelSet.getElementID(newElement);
+ if (ObjectUtil.equals(newID, oldID))
+ {
+ return false;
+ }
+ }
+
+ return true;
+ }
+ });
+
+ for (Map.Entry<EModelElement, EModelElement> entry : result.getNewToOldElements().entrySet())
+ {
+ EModelElement newElement = entry.getKey();
+ EModelElement oldElement = entry.getValue();
+
+ compareProperties(result, newElement, oldElement);
+ }
+
+ for (EModelElement newElement : result.getAddedElements())
+ {
+ compareProperties(result, newElement, null);
+ }
+
+ cleanupChanges(result);
+ }
+
+ private static void compareProperties(ModelSetChange result, EModelElement newElement, EModelElement oldElement)
+ {
+ EClass eClass = newElement.eClass();
+
+ if (oldElement == null)
+ {
+ oldElement = (EModelElement)EcoreUtil.create(eClass);
+ }
+ else if (oldElement.eClass() != eClass)
+ {
+ int xxx;
+ throw new IllegalArgumentException();
+ }
+
+ Map<EModelElement, EModelElement> newToOldElements = result.getNewToOldElements();
+
+ for (EStructuralFeature feature : eClass.getEAllStructuralFeatures())
+ {
+ if (feature.isDerived())
+ {
+ continue;
+ }
+
+ if (feature == EcorePackage.Literals.EPACKAGE__EFACTORY_INSTANCE)
+ {
+ continue;
+ }
+
+ if (feature == EcorePackage.Literals.EENUM_LITERAL__INSTANCE)
+ {
+ continue;
+ }
+
+ EReference eReference = feature instanceof EReference ? (EReference)feature : null;
+ if (COMPARE_CONTAINMENT)
+ {
+ if (feature == EcorePackage.Literals.EMODEL_ELEMENT__EANNOTATIONS)
+ {
+ continue;
+ }
+
+ if (feature == EcorePackage.Literals.ETYPED_ELEMENT__EGENERIC_TYPE)
+ {
+ continue;
+ }
+
+ if (feature == EcorePackage.Literals.ECLASS__EGENERIC_SUPER_TYPES)
+ {
+ continue;
+ }
+ }
+ else
+ {
+ if (eReference != null && eReference.isContainment())
+ {
+ continue;
+ }
+ }
+
+ Object newValue = newElement.eGet(feature);
+ if (eReference != null)
+ {
+ if (eReference.isMany())
+ {
+ @SuppressWarnings("unchecked")
+ EList<EObject> list = (EList<EObject>)newValue;
+
+ // TODO As an optimization, defer list creation.
+ EList<EObject> newList = new BasicEList<EObject>(list.size());
+
+ for (EObject eObject : list)
+ {
+ if (eObject instanceof EModelElement)
+ {
+ EModelElement newListElement = (EModelElement)eObject;
+ EModelElement oldListElement = newToOldElements.get(newListElement);
+ if (oldListElement != null && oldListElement != newListElement)
+ {
+ eObject = oldListElement;
+ }
+ }
+
+ newList.add(eObject);
+ }
+
+ newValue = newList;
+ }
+ else
+ {
+ if (newValue instanceof EModelElement)
+ {
+ EModelElement oldValue = newToOldElements.get(newValue);
+ if (oldValue != null && oldValue != newValue)
+ {
+ newValue = oldValue;
+ }
+ }
+ }
+ }
+
+ Object oldValue = oldElement.eGet(feature);
+ if (!ObjectUtil.equals(newValue, oldValue))
+ {
+ if (DEBUG_COMPARE)
+ {
+ System.out.println("PROPERTY CHANGE " + getLabel(newElement) + " --> " + feature.getName());
+ }
+
+ PropertyChange propertyChange = EvolutionFactory.eINSTANCE.createPropertyChange(feature, oldValue, newValue);
+ ElementChange elementChange = result.getElementChanges().get(newElement);
+ elementChange.getChildren().add(0, propertyChange);
+ }
+ }
+ }
+
+ private static void cleanupChanges(Change change)
+ {
+ for (Iterator<Change> it = change.getChildren().iterator(); it.hasNext();)
+ {
+ Change child = it.next();
+ if (child instanceof ElementChange)
+ {
+ ElementChange elementChange = (ElementChange)child;
+ cleanupChanges(elementChange);
+
+ if (elementChange.getKind() == ChangeKind.NONE && elementChange.getChildren().isEmpty())
+ {
+ if (DEBUG_CLEANUP)
+ {
+ System.out.println("CLEANUP " + getLabel(elementChange.getElement()));
+ }
+
+ it.remove();
+ }
+ }
+ }
+ }
+
+ private static Change getParentChange(ElementChange elementChange, ModelSetChange modelSetChange)
+ {
+ EModelElement element = elementChange.getElement();
+ EObject eContainer = element.eContainer();
+ if (eContainer instanceof EModelElement)
+ {
+ EModelElement parentElement = (EModelElement)eContainer;
+ ElementChange parentChange = modelSetChange.getElementChanges().get(parentElement);
+ if (parentChange != null)
+ {
+ return parentChange;
+ }
+ }
+
+ return modelSetChange;
+ }
+
+ private static ElementChange getElementChange(EModelElement newElement, EModelElement oldElement, ChangeKind kind,
+ Map<EModelElement, ElementChange> previousElementChanges)
+ {
+ if (previousElementChanges != null)
+ {
+ ElementChangeImpl elementChange = (ElementChangeImpl)previousElementChanges.remove(newElement);
+ if (elementChange == null)
+ {
+ elementChange = (ElementChangeImpl)previousElementChanges.remove(oldElement);
+ }
+
+ if (elementChange != null)
+ {
+ // Make sure that the ElementChange can't be used later through any other lookup.
+ for (Iterator<Map.Entry<EModelElement, ElementChange>> it = previousElementChanges.entrySet().iterator(); it.hasNext();)
+ {
+ Map.Entry<EModelElement, ElementChange> entry = it.next();
+ if (entry.getValue() == elementChange)
+ {
+ it.remove();
+ }
+ }
+
+ elementChange.setOldElement(oldElement);
+ elementChange.setNewElement(newElement);
+ elementChange.setKind(kind);
+ return elementChange;
+ }
+ }
+
+ return EvolutionFactory.eINSTANCE.createElementChange(oldElement, newElement, kind);
+ }
+
+ private static String getLabel(EModelElement element)
+ {
+ String label = ElementHandler.getLabel(element);
+
+ if (DEBUG_IDS)
+ {
+ String id = IDAnnotation.getValue(element);
+ if (id != null)
+ {
+ label += "[" + id + "]";
+ }
+ }
+
+ return label;
+ }
+
+ private static ModelSet[] createModelSetChain(ModelSet modelSetA, ModelSet modelSetB)
+ {
+ int versionA = modelSetA.getVersion();
+ int versionB = modelSetB.getVersion();
+
+ EList<ModelSet> result = new BasicEList<ModelSet>();
+ if (versionA < versionB)
+ {
+ result.add(modelSetA);
+ result.add(modelSetB);
+ }
+ else
+ {
+ result.add(modelSetB);
+ result.add(modelSetA);
+ }
+
+ ModelSet first = result.get(0);
+ ModelSet second;
+ while ((second = result.get(1).getPreviousRelease()) != first)
+ {
+ if (second == null)
+ {
+ break;
+ }
+
+ result.add(1, second);
+ }
+
+ return result.toArray(new ModelSet[result.size()]);
+ }
+
+} // ModelSetImpl
diff --git a/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/impl/PropertyChangeImpl.java b/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/impl/PropertyChangeImpl.java
new file mode 100644
index 0000000000..d8e7d9b720
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/impl/PropertyChangeImpl.java
@@ -0,0 +1,301 @@
+/**
+ */
+package org.eclipse.emf.cdo.evolution.impl;
+
+import org.eclipse.emf.cdo.evolution.Change;
+import org.eclipse.emf.cdo.evolution.ChangeKind;
+import org.eclipse.emf.cdo.evolution.EvolutionPackage;
+import org.eclipse.emf.cdo.evolution.ModelSet;
+import org.eclipse.emf.cdo.evolution.PropertyChange;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Property Change</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.emf.cdo.evolution.impl.PropertyChangeImpl#getFeature <em>Feature</em>}</li>
+ * <li>{@link org.eclipse.emf.cdo.evolution.impl.PropertyChangeImpl#getOldValue <em>Old Value</em>}</li>
+ * <li>{@link org.eclipse.emf.cdo.evolution.impl.PropertyChangeImpl#getNewValue <em>New Value</em>}</li>
+ * <li>{@link org.eclipse.emf.cdo.evolution.impl.PropertyChangeImpl#getKind <em>Kind</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class PropertyChangeImpl extends ChangeImpl implements PropertyChange
+{
+ /**
+ * The default value of the '{@link #getOldValue() <em>Old Value</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getOldValue()
+ * @generated
+ * @ordered
+ */
+ protected static final Object OLD_VALUE_EDEFAULT = null;
+
+ /**
+ * The default value of the '{@link #getNewValue() <em>New Value</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getNewValue()
+ * @generated
+ * @ordered
+ */
+ protected static final Object NEW_VALUE_EDEFAULT = null;
+
+ /**
+ * The default value of the '{@link #getKind() <em>Kind</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getKind()
+ * @generated
+ * @ordered
+ */
+ protected static final ChangeKind KIND_EDEFAULT = ChangeKind.NONE;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected PropertyChangeImpl()
+ {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass()
+ {
+ return EvolutionPackage.Literals.PROPERTY_CHANGE;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EStructuralFeature getFeature()
+ {
+ return (EStructuralFeature)eDynamicGet(EvolutionPackage.PROPERTY_CHANGE__FEATURE, EvolutionPackage.Literals.PROPERTY_CHANGE__FEATURE, true, true);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EStructuralFeature basicGetFeature()
+ {
+ return (EStructuralFeature)eDynamicGet(EvolutionPackage.PROPERTY_CHANGE__FEATURE, EvolutionPackage.Literals.PROPERTY_CHANGE__FEATURE, false, true);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setFeature(EStructuralFeature newFeature)
+ {
+ eDynamicSet(EvolutionPackage.PROPERTY_CHANGE__FEATURE, EvolutionPackage.Literals.PROPERTY_CHANGE__FEATURE, newFeature);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public Object getOldValue()
+ {
+ return eDynamicGet(EvolutionPackage.PROPERTY_CHANGE__OLD_VALUE, EvolutionPackage.Literals.PROPERTY_CHANGE__OLD_VALUE, true, true);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setOldValue(Object newOldValue)
+ {
+ eDynamicSet(EvolutionPackage.PROPERTY_CHANGE__OLD_VALUE, EvolutionPackage.Literals.PROPERTY_CHANGE__OLD_VALUE, newOldValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public Object getNewValue()
+ {
+ return eDynamicGet(EvolutionPackage.PROPERTY_CHANGE__NEW_VALUE, EvolutionPackage.Literals.PROPERTY_CHANGE__NEW_VALUE, true, true);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setNewValue(Object newNewValue)
+ {
+ eDynamicSet(EvolutionPackage.PROPERTY_CHANGE__NEW_VALUE, EvolutionPackage.Literals.PROPERTY_CHANGE__NEW_VALUE, newNewValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ public ChangeKind getKind()
+ {
+ Object oldValue = getOldValue();
+ Object newValue = getNewValue();
+
+ if (oldValue == null)
+ {
+ if (newValue == null)
+ {
+ return ChangeKind.NONE;
+ }
+
+ return ChangeKind.ADDED;
+ }
+ else
+ {
+ if (newValue == null)
+ {
+ return ChangeKind.REMOVED;
+ }
+
+ return ChangeKind.CHANGED;
+ }
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType)
+ {
+ switch (featureID)
+ {
+ case EvolutionPackage.PROPERTY_CHANGE__FEATURE:
+ if (resolve)
+ {
+ return getFeature();
+ }
+ return basicGetFeature();
+ case EvolutionPackage.PROPERTY_CHANGE__OLD_VALUE:
+ return getOldValue();
+ case EvolutionPackage.PROPERTY_CHANGE__NEW_VALUE:
+ return getNewValue();
+ case EvolutionPackage.PROPERTY_CHANGE__KIND:
+ return getKind();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eSet(int featureID, Object newValue)
+ {
+ switch (featureID)
+ {
+ case EvolutionPackage.PROPERTY_CHANGE__FEATURE:
+ setFeature((EStructuralFeature)newValue);
+ return;
+ case EvolutionPackage.PROPERTY_CHANGE__OLD_VALUE:
+ setOldValue(newValue);
+ return;
+ case EvolutionPackage.PROPERTY_CHANGE__NEW_VALUE:
+ setNewValue(newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID)
+ {
+ switch (featureID)
+ {
+ case EvolutionPackage.PROPERTY_CHANGE__FEATURE:
+ setFeature((EStructuralFeature)null);
+ return;
+ case EvolutionPackage.PROPERTY_CHANGE__OLD_VALUE:
+ setOldValue(OLD_VALUE_EDEFAULT);
+ return;
+ case EvolutionPackage.PROPERTY_CHANGE__NEW_VALUE:
+ setNewValue(NEW_VALUE_EDEFAULT);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID)
+ {
+ switch (featureID)
+ {
+ case EvolutionPackage.PROPERTY_CHANGE__FEATURE:
+ return basicGetFeature() != null;
+ case EvolutionPackage.PROPERTY_CHANGE__OLD_VALUE:
+ return OLD_VALUE_EDEFAULT == null ? getOldValue() != null : !OLD_VALUE_EDEFAULT.equals(getOldValue());
+ case EvolutionPackage.PROPERTY_CHANGE__NEW_VALUE:
+ return NEW_VALUE_EDEFAULT == null ? getNewValue() != null : !NEW_VALUE_EDEFAULT.equals(getNewValue());
+ case EvolutionPackage.PROPERTY_CHANGE__KIND:
+ return getKind() != KIND_EDEFAULT;
+ }
+ return super.eIsSet(featureID);
+ }
+
+ @Override
+ public ModelSet getOldModelSet()
+ {
+ Change parent = getParent();
+ if (parent != null)
+ {
+ return parent.getOldModelSet();
+ }
+
+ return null;
+ }
+
+ @Override
+ public ModelSet getNewModelSet()
+ {
+ Change parent = getParent();
+ if (parent != null)
+ {
+ return parent.getNewModelSet();
+ }
+
+ return null;
+ }
+
+} // PropertyChangeImpl
diff --git a/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/impl/ReleaseImpl.java b/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/impl/ReleaseImpl.java
new file mode 100644
index 0000000000..f219630386
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/impl/ReleaseImpl.java
@@ -0,0 +1,463 @@
+/**
+ */
+package org.eclipse.emf.cdo.evolution.impl;
+
+import org.eclipse.emf.cdo.evolution.Evolution;
+import org.eclipse.emf.cdo.evolution.EvolutionPackage;
+import org.eclipse.emf.cdo.evolution.Release;
+import org.eclipse.emf.cdo.evolution.util.ElementHandler;
+import org.eclipse.emf.cdo.evolution.util.ElementRunnable;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EModelElement;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.util.EcoreEList;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import java.util.Collection;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Release</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.emf.cdo.evolution.impl.ReleaseImpl#getEvolution <em>Evolution</em>}</li>
+ * <li>{@link org.eclipse.emf.cdo.evolution.impl.ReleaseImpl#getVersion <em>Version</em>}</li>
+ * <li>{@link org.eclipse.emf.cdo.evolution.impl.ReleaseImpl#getDate <em>Date</em>}</li>
+ * <li>{@link org.eclipse.emf.cdo.evolution.impl.ReleaseImpl#getNextRelease <em>Next Release</em>}</li>
+ * <li>{@link org.eclipse.emf.cdo.evolution.impl.ReleaseImpl#getPreviousRelease <em>Previous Release</em>}</li>
+ * <li>{@link org.eclipse.emf.cdo.evolution.impl.ReleaseImpl#getRootPackages <em>Root Packages</em>}</li>
+ * <li>{@link org.eclipse.emf.cdo.evolution.impl.ReleaseImpl#getAllPackages <em>All Packages</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class ReleaseImpl extends ModelSetImpl implements Release
+{
+ /**
+ * The default value of the '{@link #getVersion() <em>Version</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getVersion()
+ * @generated
+ * @ordered
+ */
+ protected static final int VERSION_EDEFAULT = 0;
+
+ /**
+ * The default value of the '{@link #getDate() <em>Date</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getDate()
+ * @generated
+ * @ordered
+ */
+ protected static final Date DATE_EDEFAULT = null;
+
+ private Map<String, EModelElement> idCache;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected ReleaseImpl()
+ {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass()
+ {
+ return EvolutionPackage.Literals.RELEASE;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public Date getDate()
+ {
+ return (Date)eDynamicGet(EvolutionPackage.RELEASE__DATE, EvolutionPackage.Literals.RELEASE__DATE, true, true);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setDate(Date newDate)
+ {
+ eDynamicSet(EvolutionPackage.RELEASE__DATE, EvolutionPackage.Literals.RELEASE__DATE, newDate);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public Release getNextRelease()
+ {
+ Release nextRelease = basicGetNextRelease();
+ return nextRelease != null && ((EObject)nextRelease).eIsProxy() ? (Release)eResolveProxy((InternalEObject)nextRelease) : nextRelease;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ public Release basicGetNextRelease()
+ {
+ int nextVersion = getVersion() + 1;
+ return getEvolution().getRelease(nextVersion);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Release getPreviousRelease()
+ {
+ Release previousRelease = basicGetPreviousRelease();
+ return previousRelease != null && ((EObject)previousRelease).eIsProxy() ? (Release)eResolveProxy((InternalEObject)previousRelease) : previousRelease;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ public Release basicGetPreviousRelease()
+ {
+ int previousVersion = getVersion() - 1;
+ if (previousVersion < 1)
+ {
+ return null;
+ }
+
+ return getEvolution().getRelease(previousVersion);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public int getVersion()
+ {
+ return (Integer)eDynamicGet(EvolutionPackage.RELEASE__VERSION, EvolutionPackage.Literals.RELEASE__VERSION, true, true);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setVersion(int newVersion)
+ {
+ eDynamicSet(EvolutionPackage.RELEASE__VERSION, EvolutionPackage.Literals.RELEASE__VERSION, newVersion);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ @SuppressWarnings("unchecked")
+ public EList<EPackage> getRootPackages()
+ {
+ return (EList<EPackage>)eDynamicGet(EvolutionPackage.RELEASE__ROOT_PACKAGES, EvolutionPackage.Literals.RELEASE__ROOT_PACKAGES, true, true);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Evolution getEvolution()
+ {
+ return (Evolution)eDynamicGet(EvolutionPackage.RELEASE__EVOLUTION, EvolutionPackage.Literals.RELEASE__EVOLUTION, true, true);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public NotificationChain basicSetEvolution(Evolution newEvolution, NotificationChain msgs)
+ {
+ msgs = eBasicSetContainer((InternalEObject)newEvolution, EvolutionPackage.RELEASE__EVOLUTION, msgs);
+ return msgs;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setEvolution(Evolution newEvolution)
+ {
+ eDynamicSet(EvolutionPackage.RELEASE__EVOLUTION, EvolutionPackage.Literals.RELEASE__EVOLUTION, newEvolution);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ @Override
+ public EList<EPackage> getAllPackages()
+ {
+ EcoreEList<EPackage> list = new EcoreEList<EPackage>(EPackage.class, this)
+ {
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ public int getFeatureID()
+ {
+ return EvolutionPackage.MODEL__ALL_PACKAGES;
+ }
+ };
+
+ for (EPackage rootPackage : getRootPackages())
+ {
+ ModelImpl.collectAllPackages(rootPackage, list);
+ }
+
+ return list;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+ {
+ switch (featureID)
+ {
+ case EvolutionPackage.RELEASE__EVOLUTION:
+ if (eInternalContainer() != null)
+ {
+ msgs = eBasicRemoveFromContainer(msgs);
+ }
+ return basicSetEvolution((Evolution)otherEnd, msgs);
+ }
+ return super.eInverseAdd(otherEnd, featureID, msgs);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+ {
+ switch (featureID)
+ {
+ case EvolutionPackage.RELEASE__EVOLUTION:
+ return basicSetEvolution(null, msgs);
+ case EvolutionPackage.RELEASE__ROOT_PACKAGES:
+ return ((InternalEList<?>)getRootPackages()).basicRemove(otherEnd, msgs);
+ }
+ return super.eInverseRemove(otherEnd, featureID, msgs);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public NotificationChain eBasicRemoveFromContainerFeature(NotificationChain msgs)
+ {
+ switch (eContainerFeatureID())
+ {
+ case EvolutionPackage.RELEASE__EVOLUTION:
+ return eInternalContainer().eInverseRemove(this, EvolutionPackage.EVOLUTION__RELEASES, Evolution.class, msgs);
+ }
+ return super.eBasicRemoveFromContainerFeature(msgs);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType)
+ {
+ switch (featureID)
+ {
+ case EvolutionPackage.RELEASE__EVOLUTION:
+ return getEvolution();
+ case EvolutionPackage.RELEASE__VERSION:
+ return getVersion();
+ case EvolutionPackage.RELEASE__DATE:
+ return getDate();
+ case EvolutionPackage.RELEASE__NEXT_RELEASE:
+ if (resolve)
+ {
+ return getNextRelease();
+ }
+ return basicGetNextRelease();
+ case EvolutionPackage.RELEASE__PREVIOUS_RELEASE:
+ if (resolve)
+ {
+ return getPreviousRelease();
+ }
+ return basicGetPreviousRelease();
+ case EvolutionPackage.RELEASE__ROOT_PACKAGES:
+ return getRootPackages();
+ case EvolutionPackage.RELEASE__ALL_PACKAGES:
+ return getAllPackages();
+ }
+ 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 EvolutionPackage.RELEASE__EVOLUTION:
+ setEvolution((Evolution)newValue);
+ return;
+ case EvolutionPackage.RELEASE__VERSION:
+ setVersion((Integer)newValue);
+ return;
+ case EvolutionPackage.RELEASE__DATE:
+ setDate((Date)newValue);
+ return;
+ case EvolutionPackage.RELEASE__ROOT_PACKAGES:
+ getRootPackages().clear();
+ getRootPackages().addAll((Collection<? extends EPackage>)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID)
+ {
+ switch (featureID)
+ {
+ case EvolutionPackage.RELEASE__EVOLUTION:
+ setEvolution((Evolution)null);
+ return;
+ case EvolutionPackage.RELEASE__VERSION:
+ setVersion(VERSION_EDEFAULT);
+ return;
+ case EvolutionPackage.RELEASE__DATE:
+ setDate(DATE_EDEFAULT);
+ return;
+ case EvolutionPackage.RELEASE__ROOT_PACKAGES:
+ getRootPackages().clear();
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID)
+ {
+ switch (featureID)
+ {
+ case EvolutionPackage.RELEASE__EVOLUTION:
+ return getEvolution() != null;
+ case EvolutionPackage.RELEASE__VERSION:
+ return getVersion() != VERSION_EDEFAULT;
+ case EvolutionPackage.RELEASE__DATE:
+ return DATE_EDEFAULT == null ? getDate() != null : !DATE_EDEFAULT.equals(getDate());
+ case EvolutionPackage.RELEASE__NEXT_RELEASE:
+ return basicGetNextRelease() != null;
+ case EvolutionPackage.RELEASE__PREVIOUS_RELEASE:
+ return basicGetPreviousRelease() != null;
+ case EvolutionPackage.RELEASE__ROOT_PACKAGES:
+ return !getRootPackages().isEmpty();
+ case EvolutionPackage.RELEASE__ALL_PACKAGES:
+ return !getAllPackages().isEmpty();
+ }
+ return super.eIsSet(featureID);
+ }
+
+ public int compareTo(Release o)
+ {
+ return o.getVersion() - getVersion();
+ }
+
+ @Override
+ public void invalidateChange()
+ {
+ // Do nothing.
+ }
+
+ @Override
+ public boolean containsElement(EModelElement modelElement)
+ {
+ return EcoreUtil.isAncestor(this, modelElement);
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public <T extends EModelElement> T getElement(String id)
+ {
+ if (idCache == null)
+ {
+ idCache = new HashMap<String, EModelElement>();
+
+ ElementHandler.execute(getRootPackages(), new ElementRunnable()
+ {
+ public void run(EModelElement modelElement)
+ {
+ String id = getElementID(modelElement);
+ idCache.put(id, modelElement);
+ }
+ });
+ }
+
+ return (T)idCache.get(id);
+ }
+
+} // ReleaseImpl
diff --git a/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/util/DiagnosticID.java b/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/util/DiagnosticID.java
new file mode 100644
index 0000000000..eaea7ad7cb
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/util/DiagnosticID.java
@@ -0,0 +1,147 @@
+/*
+ * Copyright (c) 2004-2018 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.evolution.util;
+
+import org.eclipse.emf.common.util.Diagnostic;
+import org.eclipse.emf.ecore.EModelElement;
+
+/**
+ * @author Eike Stepper
+ */
+public final class DiagnosticID
+{
+ private final String value;
+
+ public DiagnosticID(String value)
+ {
+ this.value = value;
+ }
+
+ public String getValue()
+ {
+ return value;
+ }
+
+ @Override
+ public int hashCode()
+ {
+ return 31 + (value == null ? 0 : value.hashCode());
+ }
+
+ @Override
+ public boolean equals(Object obj)
+ {
+ if (this == obj)
+ {
+ return true;
+ }
+
+ if (obj == null)
+ {
+ return false;
+ }
+
+ if (getClass() != obj.getClass())
+ {
+ return false;
+ }
+
+ DiagnosticID other = (DiagnosticID)obj;
+ if (value == null)
+ {
+ if (other.value != null)
+ {
+ return false;
+ }
+ }
+ else if (!value.equals(other.value))
+ {
+ return false;
+ }
+
+ return true;
+ }
+
+ @Override
+ public String toString()
+ {
+ return "DiagnosticID[" + value + "]";
+ }
+
+ public static DiagnosticID get(Diagnostic diagnostic)
+ {
+ for (Object data : diagnostic.getData())
+ {
+ if (data instanceof DiagnosticID)
+ {
+ return (DiagnosticID)data;
+ }
+ }
+
+ StringBuilder builder = new StringBuilder();
+ builder.append(diagnostic.getSource());
+ builder.append("|");
+ builder.append(diagnostic.getCode());
+
+ for (Object data : diagnostic.getData())
+ {
+ appendData(builder, data);
+ }
+
+ return new DiagnosticID(builder.toString());
+ }
+
+ private static void appendData(final StringBuilder builder, Object data)
+ {
+ if (data instanceof Provider)
+ {
+ Provider provider = (Provider)data;
+ provider.extractDiagnosticData(new Provider.Context()
+ {
+ public void add(String data)
+ {
+ builder.append("|");
+ builder.append(data);
+ }
+ });
+
+ return;
+ }
+
+ if (data instanceof EModelElement)
+ {
+ EModelElement modelElement = (EModelElement)data;
+ String label = ElementHandler.getLabel(modelElement);
+ if (label != null)
+ {
+ builder.append("|");
+ builder.append(label);
+ return;
+ }
+ }
+ }
+
+ /**
+ * @author Eike Stepper
+ */
+ public interface Provider
+ {
+ public void extractDiagnosticData(Context context);
+
+ /**
+ * @author Eike Stepper
+ */
+ public interface Context
+ {
+ public void add(String data);
+ }
+ }
+}
diff --git a/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/util/DiagnosticType.java b/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/util/DiagnosticType.java
new file mode 100644
index 0000000000..34e0bd4dba
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/util/DiagnosticType.java
@@ -0,0 +1,110 @@
+/*
+ * Copyright (c) 2004-2018 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.evolution.util;
+
+import org.eclipse.emf.common.util.Diagnostic;
+
+/**
+ * @author Eike Stepper
+ */
+public final class DiagnosticType
+{
+ private final String source;
+
+ private final int code;
+
+ public DiagnosticType(String source, int code)
+ {
+ this.source = source;
+ this.code = code;
+ }
+
+ public String getSource()
+ {
+ return source;
+ }
+
+ public int getCode()
+ {
+ return code;
+ }
+
+ public boolean appliesTo(Diagnostic diagnostic)
+ {
+ return code == diagnostic.getCode() && source.equals(diagnostic.getSource());
+ }
+
+ @Override
+ public int hashCode()
+ {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + code;
+ result = prime * result + (source == null ? 0 : source.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj)
+ {
+ if (this == obj)
+ {
+ return true;
+ }
+
+ if (obj == null)
+ {
+ return false;
+ }
+
+ if (getClass() != obj.getClass())
+ {
+ return false;
+ }
+
+ DiagnosticType other = (DiagnosticType)obj;
+ if (code != other.code)
+ {
+ return false;
+ }
+
+ if (source == null)
+ {
+ if (other.source != null)
+ {
+ return false;
+ }
+ }
+ else if (!source.equals(other.source))
+ {
+ return false;
+ }
+
+ return true;
+ }
+
+ @Override
+ public String toString()
+ {
+ StringBuilder builder = new StringBuilder();
+ builder.append("DiagnosticType[");
+ builder.append(source);
+ builder.append(":");
+ builder.append(code);
+ builder.append("]");
+ return builder.toString();
+ }
+
+ public static DiagnosticType from(Diagnostic diagnostic)
+ {
+ return new DiagnosticType(diagnostic.getSource(), diagnostic.getCode());
+ }
+}
diff --git a/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/util/ElementHandler.java b/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/util/ElementHandler.java
new file mode 100644
index 0000000000..f5176925e4
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/util/ElementHandler.java
@@ -0,0 +1,465 @@
+/*
+ * Copyright (c) 2004-2018 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.evolution.util;
+
+import org.eclipse.emf.cdo.evolution.ModelSet;
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EClassifier;
+import org.eclipse.emf.ecore.EDataType;
+import org.eclipse.emf.ecore.EEnum;
+import org.eclipse.emf.ecore.EEnumLiteral;
+import org.eclipse.emf.ecore.EModelElement;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecore.EcorePackage;
+
+import java.util.List;
+
+/**
+ * @author Eike Stepper
+ */
+public abstract class ElementHandler
+{
+ private static ElementHandler PACKAGE = new PackageHandler();
+
+ private static ElementHandler CLASS = new ClassHandler();
+
+ private static ElementHandler ATTRIBUTE = new AttributeHandler();
+
+ private static ElementHandler REFERENCE = new ReferenceHandler();
+
+ private static ElementHandler DATA_TYPE = new DataTypeHandler();
+
+ private static ElementHandler ENUM = new EnumHandler();
+
+ private static ElementHandler ENUM_LITERAL = new EnumLiteralHandler();
+
+ private static final EReference[] NO_CHILD_FEATURES = {};
+
+ private ElementHandler()
+ {
+ }
+
+ public abstract EClass getEClass();
+
+ public EReference[] getChildFeatures()
+ {
+ return NO_CHILD_FEATURES;
+ }
+
+ public boolean hasChildFeatures()
+ {
+ return getChildFeatures().length != 0;
+ }
+
+ protected abstract String computeLabel(EModelElement element);
+
+ public static ElementHandler getHandler(EClass eClass)
+ {
+ if (eClass.getEPackage() == EcorePackage.eINSTANCE)
+ {
+ switch (eClass.getClassifierID())
+ {
+ case EcorePackage.EPACKAGE:
+ return PACKAGE;
+
+ case EcorePackage.ECLASS:
+ return CLASS;
+
+ case EcorePackage.EATTRIBUTE:
+ return ATTRIBUTE;
+
+ case EcorePackage.EREFERENCE:
+ return REFERENCE;
+
+ case EcorePackage.EDATA_TYPE:
+ return DATA_TYPE;
+
+ case EcorePackage.EENUM:
+ return ENUM;
+
+ case EcorePackage.EENUM_LITERAL:
+ return ENUM_LITERAL;
+ }
+ }
+
+ return null;
+ }
+
+ public static String getLabel(EModelElement element)
+ {
+ ElementHandler handler = getHandler(element.eClass());
+ if (handler != null)
+ {
+ return handler.computeLabel(element);
+ }
+
+ return String.valueOf(element);
+ }
+
+ public static ModelSet getModelSet(EModelElement element)
+ {
+ EObject eContainer;
+ while ((eContainer = element.eContainer()) != null)
+ {
+ if (eContainer instanceof ModelSet)
+ {
+ return (ModelSet)eContainer;
+ }
+ }
+
+ return null;
+ }
+
+ public static void execute(EModelElement element, ElementRunnable runnable)
+ {
+ runnable.run(element);
+
+ EClass eClass = element.eClass();
+ ElementHandler handler = getHandler(eClass);
+ if (handler != null)
+ {
+ EReference[] childFeatures = handler.getChildFeatures();
+ for (int i = 0; i < childFeatures.length; i++)
+ {
+ EReference childFeature = childFeatures[i];
+
+ List<?> children = (List<?>)element.eGet(childFeature);
+ for (Object child : children)
+ {
+ if (child instanceof EModelElement)
+ {
+ execute((EModelElement)child, runnable);
+ }
+ }
+ }
+ }
+ }
+
+ public static void execute(List<? extends EModelElement> elements, ElementRunnable runnable)
+ {
+ for (EModelElement element : elements)
+ {
+ execute(element, runnable);
+ }
+ }
+
+ public static void main(String[] args)
+ {
+ // dumpRelevantContainments();
+ dumpManyValuedNonContainments();
+ }
+
+ private static void dumpRelevantContainments()
+ {
+ for (EClassifier eClassifier : EcorePackage.eINSTANCE.getEClassifiers())
+ {
+ if (eClassifier instanceof EClass)
+ {
+ EClass eClass = (EClass)eClassifier;
+
+ if (eClass == EcorePackage.Literals.EOPERATION)
+ {
+ continue;
+ }
+
+ if (eClass == EcorePackage.Literals.EGENERIC_TYPE)
+ {
+ continue;
+ }
+
+ if (eClass == EcorePackage.Literals.ETYPE_PARAMETER)
+ {
+ continue;
+ }
+
+ boolean first = true;
+ for (EStructuralFeature eStructuralFeature : eClass.getEStructuralFeatures())
+ {
+ if (eStructuralFeature instanceof EReference)
+ {
+ EReference eReference = (EReference)eStructuralFeature;
+ if (eReference.isContainment())
+ {
+ if (eReference == EcorePackage.Literals.ECLASS__EOPERATIONS)
+ {
+ continue;
+ }
+
+ if (eReference == EcorePackage.Literals.ECLASS__EGENERIC_SUPER_TYPES)
+ {
+ continue;
+ }
+
+ if (eReference == EcorePackage.Literals.ECLASSIFIER__ETYPE_PARAMETERS)
+ {
+ continue;
+ }
+
+ if (eReference == EcorePackage.Literals.ETYPED_ELEMENT__EGENERIC_TYPE)
+ {
+ continue;
+ }
+
+ if (first)
+ {
+ System.out.println(eClass.getName());
+ first = false;
+ }
+
+ System.out.println(" " + eReference.getName() + (eReference.isDerived() ? " DERIVED" : ""));
+ }
+ }
+ }
+ }
+ }
+ }
+
+ private static void dumpManyValuedNonContainments()
+ {
+ for (EClassifier eClassifier : EcorePackage.eINSTANCE.getEClassifiers())
+ {
+ if (eClassifier instanceof EClass)
+ {
+ EClass eClass = (EClass)eClassifier;
+
+ boolean first = true;
+ for (EStructuralFeature eStructuralFeature : eClass.getEStructuralFeatures())
+ {
+ if (!eStructuralFeature.isMany())
+ {
+ continue;
+ }
+
+ if (eStructuralFeature instanceof EReference)
+ {
+ EReference eReference = (EReference)eStructuralFeature;
+ if (eReference.isContainment())
+ {
+ continue;
+ }
+ }
+
+ if (first)
+ {
+ System.out.println(eClass.getName());
+ first = false;
+ }
+
+ System.out.println(" " + eStructuralFeature.getName() + (eStructuralFeature.isDerived() ? " DERIVED" : ""));
+ }
+ }
+ }
+ }
+
+ /**
+ * @author Eike Stepper
+ */
+ private static final class PackageHandler extends ElementHandler
+ {
+ private static final EReference[] CHILDREN = { EcorePackage.Literals.EPACKAGE__ECLASSIFIERS, EcorePackage.Literals.EPACKAGE__ESUBPACKAGES };
+
+ @Override
+ public EClass getEClass()
+ {
+ return EcorePackage.Literals.EPACKAGE;
+ }
+
+ @Override
+ public EReference[] getChildFeatures()
+ {
+ return CHILDREN;
+ }
+
+ @Override
+ protected String computeLabel(EModelElement element)
+ {
+ EPackage ePackage = (EPackage)element;
+ EPackage eSuperPackage = ePackage.getESuperPackage();
+ if (eSuperPackage != null)
+ {
+ return computeLabel(eSuperPackage) + "." + ePackage.getName();
+ }
+
+ return ePackage.getName();
+ }
+ }
+
+ /**
+ * @author Eike Stepper
+ */
+ private static final class ClassHandler extends ElementHandler
+ {
+ private static final EReference[] CHILDREN = { EcorePackage.Literals.ECLASS__ESTRUCTURAL_FEATURES };
+
+ @Override
+ public EClass getEClass()
+ {
+ return EcorePackage.Literals.ECLASS;
+ }
+
+ @Override
+ public EReference[] getChildFeatures()
+ {
+ return CHILDREN;
+ }
+
+ @Override
+ protected String computeLabel(EModelElement element)
+ {
+ EClass eClass = (EClass)element;
+ EPackage ePackage = eClass.getEPackage();
+ if (ePackage != null)
+ {
+ return getLabel(ePackage) + "." + eClass.getName();
+ }
+
+ return eClass.getName();
+ }
+ }
+
+ /**
+ * @author Eike Stepper
+ */
+ private static class AttributeHandler extends ElementHandler
+ {
+ @Override
+ public EClass getEClass()
+ {
+ return EcorePackage.Literals.EATTRIBUTE;
+ }
+
+ @Override
+ protected String computeLabel(EModelElement element)
+ {
+ EAttribute eAttribute = (EAttribute)element;
+ EClass eClass = eAttribute.getEContainingClass();
+ if (eClass != null)
+ {
+ return getLabel(eClass) + "." + eAttribute.getName();
+ }
+
+ return eAttribute.getName();
+ }
+ }
+
+ /**
+ * @author Eike Stepper
+ */
+ private static class ReferenceHandler extends ElementHandler
+ {
+ @Override
+ public EClass getEClass()
+ {
+ return EcorePackage.Literals.EREFERENCE;
+ }
+
+ @Override
+ protected String computeLabel(EModelElement element)
+ {
+ EReference eReference = (EReference)element;
+ EClass eClass = eReference.getEContainingClass();
+ if (eClass != null)
+ {
+ return getLabel(eClass) + "." + eReference.getName();
+ }
+
+ return eReference.getName();
+ }
+ }
+
+ /**
+ * @author Eike Stepper
+ */
+ private static final class DataTypeHandler extends ElementHandler
+ {
+ @Override
+ public EClass getEClass()
+ {
+ return EcorePackage.Literals.EDATA_TYPE;
+ }
+
+ @Override
+ protected String computeLabel(EModelElement element)
+ {
+ EDataType eDataType = (EDataType)element;
+ EPackage ePackage = eDataType.getEPackage();
+ if (ePackage != null)
+ {
+ return getLabel(ePackage) + "." + eDataType.getName();
+ }
+
+ return eDataType.getName();
+ }
+ }
+
+ /**
+ * @author Eike Stepper
+ */
+ private static final class EnumHandler extends ElementHandler
+ {
+ private static final EReference[] CHILDREN = { EcorePackage.Literals.EENUM__ELITERALS };
+
+ @Override
+ public EClass getEClass()
+ {
+ return EcorePackage.Literals.EENUM;
+ }
+
+ @Override
+ public EReference[] getChildFeatures()
+ {
+ return CHILDREN;
+ }
+
+ @Override
+ protected String computeLabel(EModelElement element)
+ {
+ EEnum eEnum = (EEnum)element;
+ EPackage ePackage = eEnum.getEPackage();
+ if (ePackage != null)
+ {
+ return getLabel(ePackage) + "." + eEnum.getName();
+ }
+
+ return eEnum.getName();
+ }
+ }
+
+ /**
+ * @author Eike Stepper
+ */
+ private static final class EnumLiteralHandler extends ElementHandler
+ {
+ @Override
+ public EClass getEClass()
+ {
+ return EcorePackage.Literals.EENUM_LITERAL;
+ }
+
+ @Override
+ protected String computeLabel(EModelElement element)
+ {
+ EEnumLiteral eLiteral = (EEnumLiteral)element;
+ EEnum eEnum = eLiteral.getEEnum();
+ if (eEnum != null)
+ {
+ return getLabel(eEnum) + "." + eLiteral.getName();
+ }
+
+ return eLiteral.getName();
+ }
+ }
+}
diff --git a/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/util/ElementRunnable.java b/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/util/ElementRunnable.java
new file mode 100644
index 0000000000..f5907cb02d
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/util/ElementRunnable.java
@@ -0,0 +1,21 @@
+/*
+ * Copyright (c) 2004-2018 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.evolution.util;
+
+import org.eclipse.emf.ecore.EModelElement;
+
+/**
+ * @author Eike Stepper
+ */
+public interface ElementRunnable
+{
+ public void run(EModelElement modelElement);
+}
diff --git a/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/util/EvolutionAdapterFactory.java b/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/util/EvolutionAdapterFactory.java
new file mode 100644
index 0000000000..c9a6d166f7
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/util/EvolutionAdapterFactory.java
@@ -0,0 +1,328 @@
+/**
+ */
+package org.eclipse.emf.cdo.evolution.util;
+
+import org.eclipse.emf.cdo.evolution.Change;
+import org.eclipse.emf.cdo.evolution.ElementChange;
+import org.eclipse.emf.cdo.evolution.Evolution;
+import org.eclipse.emf.cdo.evolution.EvolutionPackage;
+import org.eclipse.emf.cdo.evolution.FeaturePathMigration;
+import org.eclipse.emf.cdo.evolution.Migration;
+import org.eclipse.emf.cdo.evolution.Model;
+import org.eclipse.emf.cdo.evolution.ModelSet;
+import org.eclipse.emf.cdo.evolution.ModelSetChange;
+import org.eclipse.emf.cdo.evolution.PropertyChange;
+import org.eclipse.emf.cdo.evolution.Release;
+
+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.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.cdo.evolution.EvolutionPackage
+ * @generated
+ */
+public class EvolutionAdapterFactory extends AdapterFactoryImpl
+{
+ /**
+ * The cached model package.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected static EvolutionPackage modelPackage;
+
+ /**
+ * Creates an instance of the adapter factory.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EvolutionAdapterFactory()
+ {
+ if (modelPackage == null)
+ {
+ modelPackage = EvolutionPackage.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 EvolutionSwitch<Adapter> modelSwitch = new EvolutionSwitch<Adapter>()
+ {
+ @Override
+ public Adapter caseModelSet(ModelSet object)
+ {
+ return createModelSetAdapter();
+ }
+
+ @Override
+ public Adapter caseModel(Model object)
+ {
+ return createModelAdapter();
+ }
+
+ @Override
+ public Adapter caseEvolution(Evolution object)
+ {
+ return createEvolutionAdapter();
+ }
+
+ @Override
+ public Adapter caseRelease(Release object)
+ {
+ return createReleaseAdapter();
+ }
+
+ @Override
+ public Adapter caseChange(Change object)
+ {
+ return createChangeAdapter();
+ }
+
+ @Override
+ public Adapter caseModelSetChange(ModelSetChange object)
+ {
+ return createModelSetChangeAdapter();
+ }
+
+ @Override
+ public Adapter caseElementChange(ElementChange object)
+ {
+ return createElementChangeAdapter();
+ }
+
+ @Override
+ public Adapter casePropertyChange(PropertyChange object)
+ {
+ return createPropertyChangeAdapter();
+ }
+
+ @Override
+ public Adapter caseMigration(Migration object)
+ {
+ return createMigrationAdapter();
+ }
+
+ @Override
+ public Adapter caseFeaturePathMigration(FeaturePathMigration object)
+ {
+ return createFeaturePathMigrationAdapter();
+ }
+
+ @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.cdo.evolution.ModelSet <em>Model Set</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.cdo.evolution.ModelSet
+ * @generated
+ */
+ public Adapter createModelSetAdapter()
+ {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.emf.cdo.evolution.Model <em>Model</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.cdo.evolution.Model
+ * @generated
+ */
+ public Adapter createModelAdapter()
+ {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.emf.cdo.evolution.Evolution <em>Evolution</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.cdo.evolution.Evolution
+ * @generated
+ */
+ public Adapter createEvolutionAdapter()
+ {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.emf.cdo.evolution.Release <em>Release</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.cdo.evolution.Release
+ * @generated
+ */
+ public Adapter createReleaseAdapter()
+ {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.emf.cdo.evolution.Change <em>Change</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.cdo.evolution.Change
+ * @generated
+ */
+ public Adapter createChangeAdapter()
+ {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.emf.cdo.evolution.ModelSetChange <em>Model Set Change</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.cdo.evolution.ModelSetChange
+ * @generated
+ */
+ public Adapter createModelSetChangeAdapter()
+ {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.emf.cdo.evolution.ElementChange <em>Element Change</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.cdo.evolution.ElementChange
+ * @generated
+ */
+ public Adapter createElementChangeAdapter()
+ {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.emf.cdo.evolution.PropertyChange <em>Property Change</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.cdo.evolution.PropertyChange
+ * @generated
+ */
+ public Adapter createPropertyChangeAdapter()
+ {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.emf.cdo.evolution.Migration <em>Migration</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.cdo.evolution.Migration
+ * @generated
+ */
+ public Adapter createMigrationAdapter()
+ {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.emf.cdo.evolution.FeaturePathMigration <em>Feature Path Migration</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.cdo.evolution.FeaturePathMigration
+ * @generated
+ */
+ public Adapter createFeaturePathMigrationAdapter()
+ {
+ 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;
+ }
+
+} // EvolutionAdapterFactory
diff --git a/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/util/EvolutionSwitch.java b/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/util/EvolutionSwitch.java
new file mode 100644
index 0000000000..e630b1f7ef
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/util/EvolutionSwitch.java
@@ -0,0 +1,390 @@
+/**
+ */
+package org.eclipse.emf.cdo.evolution.util;
+
+import org.eclipse.emf.cdo.evolution.Change;
+import org.eclipse.emf.cdo.evolution.ElementChange;
+import org.eclipse.emf.cdo.evolution.Evolution;
+import org.eclipse.emf.cdo.evolution.EvolutionPackage;
+import org.eclipse.emf.cdo.evolution.FeaturePathMigration;
+import org.eclipse.emf.cdo.evolution.Migration;
+import org.eclipse.emf.cdo.evolution.Model;
+import org.eclipse.emf.cdo.evolution.ModelSet;
+import org.eclipse.emf.cdo.evolution.ModelSetChange;
+import org.eclipse.emf.cdo.evolution.PropertyChange;
+import org.eclipse.emf.cdo.evolution.Release;
+
+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.cdo.evolution.EvolutionPackage
+ * @generated
+ */
+public class EvolutionSwitch<T> extends Switch<T>
+{
+ /**
+ * The cached model package
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected static EvolutionPackage modelPackage;
+
+ /**
+ * Creates an instance of the switch.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EvolutionSwitch()
+ {
+ if (modelPackage == null)
+ {
+ modelPackage = EvolutionPackage.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 EvolutionPackage.MODEL_SET:
+ {
+ ModelSet modelSet = (ModelSet)theEObject;
+ T result = caseModelSet(modelSet);
+ if (result == null)
+ {
+ result = defaultCase(theEObject);
+ }
+ return result;
+ }
+ case EvolutionPackage.MODEL:
+ {
+ Model model = (Model)theEObject;
+ T result = caseModel(model);
+ if (result == null)
+ {
+ result = defaultCase(theEObject);
+ }
+ return result;
+ }
+ case EvolutionPackage.EVOLUTION:
+ {
+ Evolution evolution = (Evolution)theEObject;
+ T result = caseEvolution(evolution);
+ if (result == null)
+ {
+ result = caseModelSet(evolution);
+ }
+ if (result == null)
+ {
+ result = defaultCase(theEObject);
+ }
+ return result;
+ }
+ case EvolutionPackage.RELEASE:
+ {
+ Release release = (Release)theEObject;
+ T result = caseRelease(release);
+ if (result == null)
+ {
+ result = caseModelSet(release);
+ }
+ if (result == null)
+ {
+ result = defaultCase(theEObject);
+ }
+ return result;
+ }
+ case EvolutionPackage.CHANGE:
+ {
+ Change change = (Change)theEObject;
+ T result = caseChange(change);
+ if (result == null)
+ {
+ result = defaultCase(theEObject);
+ }
+ return result;
+ }
+ case EvolutionPackage.MODEL_SET_CHANGE:
+ {
+ ModelSetChange modelSetChange = (ModelSetChange)theEObject;
+ T result = caseModelSetChange(modelSetChange);
+ if (result == null)
+ {
+ result = caseChange(modelSetChange);
+ }
+ if (result == null)
+ {
+ result = defaultCase(theEObject);
+ }
+ return result;
+ }
+ case EvolutionPackage.ELEMENT_CHANGE:
+ {
+ ElementChange elementChange = (ElementChange)theEObject;
+ T result = caseElementChange(elementChange);
+ if (result == null)
+ {
+ result = caseChange(elementChange);
+ }
+ if (result == null)
+ {
+ result = defaultCase(theEObject);
+ }
+ return result;
+ }
+ case EvolutionPackage.PROPERTY_CHANGE:
+ {
+ PropertyChange propertyChange = (PropertyChange)theEObject;
+ T result = casePropertyChange(propertyChange);
+ if (result == null)
+ {
+ result = caseChange(propertyChange);
+ }
+ if (result == null)
+ {
+ result = defaultCase(theEObject);
+ }
+ return result;
+ }
+ case EvolutionPackage.MIGRATION:
+ {
+ Migration migration = (Migration)theEObject;
+ T result = caseMigration(migration);
+ if (result == null)
+ {
+ result = defaultCase(theEObject);
+ }
+ return result;
+ }
+ case EvolutionPackage.FEATURE_PATH_MIGRATION:
+ {
+ FeaturePathMigration featurePathMigration = (FeaturePathMigration)theEObject;
+ T result = caseFeaturePathMigration(featurePathMigration);
+ if (result == null)
+ {
+ result = caseMigration(featurePathMigration);
+ }
+ if (result == null)
+ {
+ result = defaultCase(theEObject);
+ }
+ return result;
+ }
+ default:
+ return defaultCase(theEObject);
+ }
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>Model Set</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>Model Set</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseModelSet(ModelSet object)
+ {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>Model</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>Model</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseModel(Model object)
+ {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>Evolution</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>Evolution</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseEvolution(Evolution object)
+ {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>Release</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>Release</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseRelease(Release object)
+ {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>Change</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>Change</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseChange(Change object)
+ {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>Model Set Change</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>Model Set Change</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseModelSetChange(ModelSetChange object)
+ {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>Element Change</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 Change</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseElementChange(ElementChange object)
+ {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>Property Change</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>Property Change</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T casePropertyChange(PropertyChange object)
+ {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>Migration</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>Migration</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseMigration(Migration object)
+ {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>Feature Path Migration</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>Feature Path Migration</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseFeaturePathMigration(FeaturePathMigration 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;
+ }
+
+} // EvolutionSwitch
diff --git a/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/util/EvolutionValidator.java b/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/util/EvolutionValidator.java
new file mode 100644
index 0000000000..d16997899a
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/util/EvolutionValidator.java
@@ -0,0 +1,1032 @@
+/**
+ */
+package org.eclipse.emf.cdo.evolution.util;
+
+import org.eclipse.emf.cdo.evolution.Change;
+import org.eclipse.emf.cdo.evolution.ChangeKind;
+import org.eclipse.emf.cdo.evolution.ElementChange;
+import org.eclipse.emf.cdo.evolution.Evolution;
+import org.eclipse.emf.cdo.evolution.EvolutionPackage;
+import org.eclipse.emf.cdo.evolution.FeaturePathMigration;
+import org.eclipse.emf.cdo.evolution.Migration;
+import org.eclipse.emf.cdo.evolution.Model;
+import org.eclipse.emf.cdo.evolution.ModelSet;
+import org.eclipse.emf.cdo.evolution.ModelSetChange;
+import org.eclipse.emf.cdo.evolution.PropertyChange;
+import org.eclipse.emf.cdo.evolution.Release;
+import org.eclipse.emf.cdo.evolution.impl.EvolutionPlugin;
+
+import org.eclipse.net4j.util.collection.CollectionUtil;
+
+import org.eclipse.emf.common.util.BasicDiagnostic;
+import org.eclipse.emf.common.util.Diagnostic;
+import org.eclipse.emf.common.util.DiagnosticChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EModelElement;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecore.EcorePackage;
+import org.eclipse.emf.ecore.util.EObjectValidator;
+import org.eclipse.emf.ecore.util.EcoreUtil.EqualityHelper;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Validator</b> for the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.cdo.evolution.EvolutionPackage
+ * @generated
+ */
+public class EvolutionValidator extends EObjectValidator
+{
+ /**
+ * The cached model package
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static final EvolutionValidator INSTANCE = new EvolutionValidator();
+
+ /**
+ * A constant for the {@link org.eclipse.emf.common.util.Diagnostic#getSource() source} of diagnostic {@link org.eclipse.emf.common.util.Diagnostic#getCode() codes} from this package.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.common.util.Diagnostic#getSource()
+ * @see org.eclipse.emf.common.util.Diagnostic#getCode()
+ * @generated
+ */
+ public static final String DIAGNOSTIC_SOURCE = "org.eclipse.emf.cdo.evolution";
+
+ /**
+ * A constant with a fixed name that can be used as the base value for additional hand written constants.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ protected static final int GENERATED_DIAGNOSTIC_CODE_COUNT = 0;
+
+ public static final int CODE_NO_MODEL = GENERATED_DIAGNOSTIC_CODE_COUNT + 1;
+
+ public static final int CODE_NO_URI = CODE_NO_MODEL + 1;
+
+ public static final int CODE_NO_RESOURCE_SET = CODE_NO_URI + 1;
+
+ public static final int CODE_RESOURCE_NOT_FOUND = CODE_NO_RESOURCE_SET + 1;
+
+ public static final int CODE_LOAD_PROBLEM = CODE_RESOURCE_NOT_FOUND + 1;
+
+ public static final int CODE_CONTENT_PROBLEM = CODE_LOAD_PROBLEM + 1;
+
+ public static final int CODE_PACKAGE_MISSING = CODE_CONTENT_PROBLEM + 1;
+
+ public static final int CODE_PACKAGE_NOT_UNIQUE = CODE_PACKAGE_MISSING + 1;
+
+ public static final int CODE_NSURI_NOT_UNIQUE = CODE_PACKAGE_NOT_UNIQUE + 1;
+
+ public static final int CODE_NSURI_NOT_CHANGED = CODE_NSURI_NOT_UNIQUE + 1;
+
+ public static final int CODE_ID_ANNOTATION_MISSING = CODE_NSURI_NOT_CHANGED + 1;
+
+ public static final int CODE_ID_WITHOUT_VALUE = CODE_ID_ANNOTATION_MISSING + 1;
+
+ public static final int CODE_ID_NOT_UNIQUE = CODE_ID_WITHOUT_VALUE + 1;
+
+ public static final int CODE_MIGRATION_UNUSED = CODE_ID_NOT_UNIQUE + 1;
+
+ public static final int CODE_FEATURE_PATH_UNKNOWN = CODE_MIGRATION_UNUSED + 1;
+
+ // Insert new codes above.
+
+ public static final int CODE_UNCHANGED = CODE_FEATURE_PATH_UNKNOWN + 1;
+
+ public static final int CODE_RELEASE = CODE_UNCHANGED + 1;
+
+ /**
+ * A constant with a fixed name that can be used as the base value for additional hand written constants in a derived class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ protected static final int DIAGNOSTIC_CODE_COUNT = CODE_RELEASE;
+
+ /**
+ * Creates an instance of the switch.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EvolutionValidator()
+ {
+ super();
+ }
+
+ @Override
+ public boolean validate_EveryReferenceIsContained(EObject eObject, DiagnosticChain diagnostics, Map<Object, Object> context)
+ {
+ return true;
+ }
+
+ @Override
+ public boolean validate_EveryProxyResolves(EObject eObject, DiagnosticChain diagnostics, Map<Object, Object> context)
+ {
+ return true;
+ }
+
+ /**
+ * Returns the package of this validator switch.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EPackage getEPackage()
+ {
+ return EvolutionPackage.eINSTANCE;
+ }
+
+ /**
+ * Calls <code>validateXXX</code> for the corresponding classifier of the model.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected boolean validateGen(int classifierID, Object value, DiagnosticChain diagnostics, Map<Object, Object> context)
+ {
+ switch (classifierID)
+ {
+ case EvolutionPackage.MODEL_SET:
+ return validateModelSet((ModelSet)value, diagnostics, context);
+ case EvolutionPackage.MODEL:
+ return validateModel((Model)value, diagnostics, context);
+ case EvolutionPackage.EVOLUTION:
+ return validateEvolution((Evolution)value, diagnostics, context);
+ case EvolutionPackage.RELEASE:
+ return validateRelease((Release)value, diagnostics, context);
+ case EvolutionPackage.CHANGE:
+ return validateChange((Change)value, diagnostics, context);
+ case EvolutionPackage.MODEL_SET_CHANGE:
+ return validateModelSetChange((ModelSetChange)value, diagnostics, context);
+ case EvolutionPackage.ELEMENT_CHANGE:
+ return validateElementChange((ElementChange)value, diagnostics, context);
+ case EvolutionPackage.PROPERTY_CHANGE:
+ return validatePropertyChange((PropertyChange)value, diagnostics, context);
+ case EvolutionPackage.MIGRATION:
+ return validateMigration((Migration)value, diagnostics, context);
+ case EvolutionPackage.FEATURE_PATH_MIGRATION:
+ return validateFeaturePathMigration((FeaturePathMigration)value, diagnostics, context);
+ case EvolutionPackage.CHANGE_KIND:
+ return validateChangeKind((ChangeKind)value, diagnostics, context);
+ case EvolutionPackage.URI:
+ return validateURI((URI)value, diagnostics, context);
+ default:
+ return true;
+ }
+ }
+
+ @Override
+ protected boolean validate(int classifierID, Object value, DiagnosticChain diagnostics, Map<Object, Object> context)
+ {
+ if (diagnostics == null)
+ {
+ return true;
+ }
+
+ if (context == null)
+ {
+ return true;
+ }
+
+ return validateGen(classifierID, value, diagnostics, context);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public boolean validateModelSetGen(ModelSet modelSet, DiagnosticChain diagnostics, Map<Object, Object> context)
+ {
+ return validate_EveryDefaultConstraint(modelSet, diagnostics, context);
+ }
+
+ public boolean validateModelSet(ModelSet modelSet, DiagnosticChain diagnostics, Map<Object, Object> context)
+ {
+ if (ValidationContext.isPhase(context, ValidationPhase.RELEASE))
+ {
+ diagnostics.add(
+ createDiagnostic(Diagnostic.INFO, DIAGNOSTIC_SOURCE, CODE_RELEASE, "_UI_Release_diagnostic", new Object[] {}, new Object[] { modelSet }, context));
+ return true;
+ }
+
+ return validateModelSetGen(modelSet, diagnostics, context);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public boolean validateModel(Model model, DiagnosticChain diagnostics, Map<Object, Object> context)
+ {
+ if (!validate_NoCircularContainment(model, diagnostics, context))
+ {
+ return false;
+ }
+ boolean result = validate_EveryMultiplicityConforms(model, diagnostics, context);
+ if (result || diagnostics != null)
+ {
+ result &= validate_EveryDataValueConforms(model, diagnostics, context);
+ }
+ if (result || diagnostics != null)
+ {
+ result &= validate_EveryReferenceIsContained(model, diagnostics, context);
+ }
+ if (result || diagnostics != null)
+ {
+ result &= validate_EveryBidirectionalReferenceIsPaired(model, diagnostics, context);
+ }
+ if (result || diagnostics != null)
+ {
+ result &= validate_EveryProxyResolves(model, diagnostics, context);
+ }
+ if (result || diagnostics != null)
+ {
+ result &= validate_UniqueID(model, diagnostics, context);
+ }
+ if (result || diagnostics != null)
+ {
+ result &= validate_EveryKeyUnique(model, diagnostics, context);
+ }
+ if (result || diagnostics != null)
+ {
+ result &= validate_EveryMapEntryUnique(model, diagnostics, context);
+ }
+ if (result || diagnostics != null)
+ {
+ result &= validateModel_ModelLoaded(model, diagnostics, context);
+ }
+ if (result || diagnostics != null)
+ {
+ result &= validateModel_IDs_Exist(model, diagnostics, context);
+ }
+ if (result || diagnostics != null)
+ {
+ result &= validateModel_NamespaceReflectsChange(model, diagnostics, context);
+ }
+ return result;
+ }
+
+ /**
+ * Validates the ModelLoaded constraint of '<em>Model</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ * @category MODEL_AVAILABILITY
+ */
+ public boolean validateModel_ModelLoaded(Model model, DiagnosticChain diagnostics, Map<Object, Object> context)
+ {
+ if (ValidationContext.isPhase(context, ValidationPhase.MODEL_AVAILABILITY))
+ {
+ switch (model.getStatus())
+ {
+ case NO_URI:
+ diagnostics.add(createDiagnostic(Diagnostic.ERROR, DIAGNOSTIC_SOURCE, CODE_NO_URI, "_UI_NO_URI_diagnostic", new Object[] {},
+ new Object[] { model, EvolutionPackage.Literals.MODEL__URI }, context));
+ return false;
+
+ case NO_RESOURCE_SET:
+ diagnostics.add(createDiagnostic(Diagnostic.ERROR, DIAGNOSTIC_SOURCE, CODE_NO_RESOURCE_SET, "_UI_NO_RESOURCE_SET_diagnostic", new Object[] {},
+ new Object[] { model }, context));
+ return false;
+
+ case RESOURCE_NOT_FOUND:
+ diagnostics.add(createDiagnostic(Diagnostic.ERROR, DIAGNOSTIC_SOURCE, CODE_RESOURCE_NOT_FOUND, "_UI_RESOURCE_NOT_FOUND_diagnostic",
+ new Object[] { model.getURI().toString() }, new Object[] { model, EvolutionPackage.Literals.MODEL__URI }, context));
+ return false;
+
+ case LOAD_PROBLEM:
+ diagnostics.add(createDiagnostic(Diagnostic.ERROR, DIAGNOSTIC_SOURCE, CODE_RESOURCE_NOT_FOUND, "_UI_LOAD_PROBLEM_diagnostic",
+ new Object[] { model.getURI().toString() }, new Object[] { model, EvolutionPackage.Literals.MODEL__URI }, context));
+ return false;
+
+ case CONTENT_PROBLEM:
+ diagnostics.add(createDiagnostic(Diagnostic.ERROR, DIAGNOSTIC_SOURCE, CODE_CONTENT_PROBLEM, "_UI_CONTENT_PROBLEM_diagnostic",
+ new Object[] { model.getURI().toString() }, new Object[] { model, EvolutionPackage.Literals.MODEL__URI }, context));
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * Validates the IDs_Exist constraint of '<em>Model</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ * @category IDENTITY_COMPLETENESS
+ */
+ public boolean validateModel_IDs_Exist(Model model, final DiagnosticChain diagnostics, final Map<Object, Object> context)
+ {
+ ValidationContext validationContext = ValidationContext.getFrom(context);
+ if (validationContext != null && validationContext.getPhase() == ValidationPhase.IDENTITY_COMPLETENESS)
+ {
+ final Map<String, Object> identifiedElements = validationContext.getIdentifiedElements();
+ EPackage rootPackage = model.getRootPackage();
+
+ final boolean[] result = { true };
+ ElementHandler.execute(rootPackage, new ElementRunnable()
+ {
+ public void run(EModelElement modelElement)
+ {
+ if (IDAnnotation.getFrom(modelElement, false) == null)
+ {
+ diagnostics.add(createDiagnostic(Diagnostic.ERROR, DIAGNOSTIC_SOURCE, CODE_ID_ANNOTATION_MISSING, "_UI_IDsExist_AnnotationMissing_diagnostic",
+ new Object[] {}, new Object[] { modelElement, EcorePackage.Literals.EMODEL_ELEMENT__EANNOTATIONS }, context));
+ result[0] = false;
+ }
+ else
+ {
+ String value = IDAnnotation.getValue(modelElement);
+ if (value == null)
+ {
+ diagnostics.add(createDiagnostic(Diagnostic.ERROR, DIAGNOSTIC_SOURCE, CODE_ID_WITHOUT_VALUE, "_UI_IDsExist_NoValue_diagnostic", new Object[] {},
+ new Object[] { modelElement, EcorePackage.Literals.EMODEL_ELEMENT__EANNOTATIONS }, context));
+ result[0] = false;
+ }
+ else
+ {
+ Object element = identifiedElements.get(value);
+ if (element == null)
+ {
+ identifiedElements.put(value, modelElement);
+ }
+ else if (element instanceof List<?>)
+ {
+ @SuppressWarnings("unchecked")
+ List<EModelElement> elements = (List<EModelElement>)element;
+ elements.add(modelElement);
+ }
+ else
+ {
+ List<EModelElement> elements = new ArrayList<EModelElement>();
+ elements.add((EModelElement)element);
+ elements.add(modelElement);
+ identifiedElements.put(value, elements);
+ }
+ }
+ }
+ }
+ });
+
+ return result[0];
+ }
+ return true;
+ }
+
+ /**
+ * Validates the NamespaceReflectsChange constraint of '<em>Model</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ * @category MODEL_UNIQUENESS
+ */
+ public boolean validateModel_NamespaceReflectsChange(Model model, DiagnosticChain diagnostics, Map<Object, Object> context)
+ {
+ if (ValidationContext.isPhase(context, ValidationPhase.MODEL_UNIQUENESS))
+ {
+ Evolution evolution = model.getEvolution();
+ if (evolution.isUniqueNamespaces())
+ {
+ Map<String, Set<EPackage>> releasedPackages = evolution.getReleasedPackages();
+ boolean result = true;
+
+ for (EPackage ePackage : model.getAllPackages())
+ {
+ Set<EPackage> set = releasedPackages.get(ePackage.getNsURI());
+ if (set != null)
+ {
+ for (EPackage releasedPackage : set)
+ {
+ EqualityHelper equalityHelper = new EqualityHelper()
+ {
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ protected boolean haveEqualFeature(EObject eObject1, EObject eObject2, EStructuralFeature feature)
+ {
+ if (feature == EcorePackage.Literals.EPACKAGE__ESUBPACKAGES)
+ {
+ // Compare packages without their subpackages.
+ return true;
+ }
+
+ return super.haveEqualFeature(eObject1, eObject2, feature);
+ }
+ };
+
+ if (!equalityHelper.equals(ePackage, releasedPackage))
+ {
+ Release release = (Release)ElementHandler.getModelSet(releasedPackage);
+
+ diagnostics.add(createDiagnostic(Diagnostic.ERROR, DIAGNOSTIC_SOURCE, CODE_NSURI_NOT_CHANGED, "_UI_NsUriMustChange_diagnostic",
+ new Object[] { ePackage.getNsURI(), release.getVersion() },
+ new Object[] { ePackage, EcorePackage.Literals.EPACKAGE__NS_URI, releasedPackage, evolution }, context));
+ result = false;
+ break;
+ }
+ }
+ }
+ }
+
+ return result;
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public boolean validateEvolutionGen(Evolution evolution, DiagnosticChain diagnostics, Map<Object, Object> context)
+ {
+ if (!validate_NoCircularContainment(evolution, diagnostics, context))
+ {
+ return false;
+ }
+ boolean result = validate_EveryMultiplicityConforms(evolution, diagnostics, context);
+ if (result || diagnostics != null)
+ {
+ result &= validate_EveryDataValueConforms(evolution, diagnostics, context);
+ }
+ if (result || diagnostics != null)
+ {
+ result &= validate_EveryReferenceIsContained(evolution, diagnostics, context);
+ }
+ if (result || diagnostics != null)
+ {
+ result &= validate_EveryBidirectionalReferenceIsPaired(evolution, diagnostics, context);
+ }
+ if (result || diagnostics != null)
+ {
+ result &= validate_EveryProxyResolves(evolution, diagnostics, context);
+ }
+ if (result || diagnostics != null)
+ {
+ result &= validate_UniqueID(evolution, diagnostics, context);
+ }
+ if (result || diagnostics != null)
+ {
+ result &= validate_EveryKeyUnique(evolution, diagnostics, context);
+ }
+ if (result || diagnostics != null)
+ {
+ result &= validate_EveryMapEntryUnique(evolution, diagnostics, context);
+ }
+ if (result || diagnostics != null)
+ {
+ result &= validateEvolution_NotEmpty(evolution, diagnostics, context);
+ }
+ if (result || diagnostics != null)
+ {
+ result &= validateEvolution_PackagesUnique(evolution, diagnostics, context);
+ }
+ if (result || diagnostics != null)
+ {
+ result &= validateEvolution_NoMissingPackages(evolution, diagnostics, context);
+ }
+ if (result || diagnostics != null)
+ {
+ result &= validateEvolution_IDsUnique(evolution, diagnostics, context);
+ }
+ return result;
+ }
+
+ public boolean validateEvolution(Evolution evolution, DiagnosticChain diagnostics, Map<Object, Object> context)
+ {
+ if (ValidationContext.isPhase(context, ValidationPhase.RELEASE))
+ {
+ ModelSetChange change = evolution.getChange();
+
+ if (change == null || change.getChildren().isEmpty())
+ {
+ Release latestRelease = evolution.getLatestRelease();
+ if (latestRelease == null)
+ {
+ diagnostics.add(createDiagnostic(Diagnostic.INFO, DIAGNOSTIC_SOURCE, CODE_UNCHANGED, "_UI_Unchanged_diagnostic", new Object[] {},
+ new Object[] { evolution }, context));
+ }
+ else
+ {
+ diagnostics.add(createDiagnostic(Diagnostic.INFO, DIAGNOSTIC_SOURCE, CODE_UNCHANGED, "_UI_UnchangedSince_diagnostic",
+ new Object[] { latestRelease.getVersion() }, new Object[] { evolution }, context));
+ }
+ }
+ else
+ {
+ diagnostics.add(
+ createDiagnostic(Diagnostic.INFO, DIAGNOSTIC_SOURCE, CODE_RELEASE, "_UI_Release_diagnostic", new Object[] {}, new Object[] { evolution }, context));
+ }
+ return true;
+ }
+
+ return validateEvolutionGen(evolution, diagnostics, context);
+ }
+
+ /**
+ * Validates the NotEmpty constraint of '<em>Evolution</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ * @category MODEL_AVAILABILITY
+ */
+ public boolean validateEvolution_NotEmpty(Evolution evolution, DiagnosticChain diagnostics, Map<Object, Object> context)
+ {
+ if (ValidationContext.isPhase(context, ValidationPhase.MODEL_AVAILABILITY))
+ {
+ if (evolution.getModels().isEmpty())
+ {
+ diagnostics.add(createDiagnostic(Diagnostic.ERROR, DIAGNOSTIC_SOURCE, CODE_NO_MODEL, "_UI_NoModel_diagnostic", new Object[] {},
+ new Object[] { evolution }, context));
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * Validates the PackagesUnique constraint of '<em>Evolution</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ * @category MODEL_UNIQUENESS
+ */
+ public boolean validateEvolution_PackagesUnique(Evolution evolution, DiagnosticChain diagnostics, Map<Object, Object> context)
+ {
+ if (ValidationContext.isPhase(context, ValidationPhase.MODEL_UNIQUENESS))
+ {
+ boolean result = true;
+
+ Map<URI, Set<Model>> models = new HashMap<URI, Set<Model>>();
+ for (Model model : evolution.getModels())
+ {
+ CollectionUtil.add(models, model.getURI(), model);
+ }
+
+ for (Set<Model> set : models.values())
+ {
+ if (set.size() > 1)
+ {
+ for (Model model : set)
+ {
+ diagnostics.add(createDiagnostic(Diagnostic.ERROR, DIAGNOSTIC_SOURCE, CODE_PACKAGE_NOT_UNIQUE, "_UI_PackageNotUnique_diagnostic",
+ new Object[] { model.getURI().toString() }, new Object[] { model, EvolutionPackage.Literals.MODEL__URI, model.getURI() }, context));
+ result = false;
+ }
+ }
+ }
+
+ Map<String, Set<EPackage>> packages = new HashMap<String, Set<EPackage>>();
+ for (EPackage ePackage : evolution.getAllPackages())
+ {
+ CollectionUtil.add(packages, ePackage.getNsURI(), ePackage);
+ }
+
+ for (Set<EPackage> set : packages.values())
+ {
+ if (set.size() > 1)
+ {
+ for (EPackage ePackage : set)
+ {
+ diagnostics.add(createDiagnostic(Diagnostic.ERROR, DIAGNOSTIC_SOURCE, CODE_NSURI_NOT_UNIQUE, "_UI_NsuriNotUnique_diagnostic",
+ new Object[] { ePackage.getNsURI() }, new Object[] { ePackage, EcorePackage.Literals.EPACKAGE__NS_URI, ePackage.getNsURI() }, context));
+ result = false;
+ }
+ }
+ }
+
+ return result;
+ }
+
+ return true;
+ }
+
+ /**
+ * Validates the NoMissingPackages constraint of '<em>Evolution</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ * @category MODEL_INTEGRITY
+ */
+ public boolean validateEvolution_NoMissingPackages(Evolution evolution, DiagnosticChain diagnostics, Map<Object, Object> context)
+ {
+ if (ValidationContext.isPhase(context, ValidationPhase.MODEL_INTEGRITY))
+ {
+ EList<EPackage> missingPackages = evolution.getMissingPackages();
+ if (missingPackages.size() != 0)
+ {
+ for (EPackage missingPackage : missingPackages)
+ {
+ diagnostics.add(createDiagnostic(Diagnostic.ERROR, DIAGNOSTIC_SOURCE, CODE_PACKAGE_MISSING, "_UI_MissingPackage_diagnostic",
+ new Object[] { missingPackage.getName() }, new Object[] { evolution, EvolutionPackage.Literals.EVOLUTION__MISSING_PACKAGES, missingPackage },
+ context));
+ }
+
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * Validates the IDsUnique constraint of '<em>Evolution</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ * @category IDENTITY_UNIQUENESS
+ */
+ public boolean validateEvolution_IDsUnique(Evolution evolution, DiagnosticChain diagnostics, Map<Object, Object> context)
+ {
+ // TODO Validate oldValue.
+ // TODO Validate oldElement.eClass() == newElement.eClass().
+ int xxx;
+
+ ValidationContext validationContext = ValidationContext.getFrom(context);
+ if (validationContext != null && validationContext.getPhase() == ValidationPhase.IDENTITY_UNIQUENESS)
+ {
+ boolean result = true;
+ for (Map.Entry<String, Object> entry : validationContext.getIdentifiedElements().entrySet())
+ {
+ Object element = entry.getValue();
+ if (element instanceof List<?>)
+ {
+ String id = entry.getKey();
+
+ @SuppressWarnings("unchecked")
+ List<EModelElement> elements = (List<EModelElement>)element;
+ for (EModelElement modelElement : elements)
+ {
+ List<Object> data = new ArrayList<Object>();
+ data.add(modelElement);
+ data.add(EcorePackage.Literals.EMODEL_ELEMENT__EANNOTATIONS);
+ data.add(id);
+
+ for (EModelElement conflictingElement : elements)
+ {
+ if (conflictingElement != modelElement)
+ {
+ data.add(conflictingElement);
+ }
+ }
+
+ diagnostics.add(createDiagnostic(Diagnostic.ERROR, DIAGNOSTIC_SOURCE, CODE_ID_NOT_UNIQUE, "_UI_IDNotUnique_diagnostic", new Object[] { id },
+ data.toArray(new Object[data.size()]), context));
+ result = false;
+ }
+ }
+ }
+
+ return result;
+ }
+
+ return true;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public boolean validateRelease(Release release, DiagnosticChain diagnostics, Map<Object, Object> context)
+ {
+ return validate_EveryDefaultConstraint(release, diagnostics, context);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public boolean validateChange(Change change, DiagnosticChain diagnostics, Map<Object, Object> context)
+ {
+ return validate_EveryDefaultConstraint(change, diagnostics, context);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public boolean validateModelSetChange(ModelSetChange modelSetChange, DiagnosticChain diagnostics, Map<Object, Object> context)
+ {
+ return validate_EveryDefaultConstraint(modelSetChange, diagnostics, context);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public boolean validateElementChange(ElementChange elementChange, DiagnosticChain diagnostics, Map<Object, Object> context)
+ {
+ if (!validate_NoCircularContainment(elementChange, diagnostics, context))
+ {
+ return false;
+ }
+ boolean result = validate_EveryMultiplicityConforms(elementChange, diagnostics, context);
+ if (result || diagnostics != null)
+ {
+ result &= validate_EveryDataValueConforms(elementChange, diagnostics, context);
+ }
+ if (result || diagnostics != null)
+ {
+ result &= validate_EveryReferenceIsContained(elementChange, diagnostics, context);
+ }
+ if (result || diagnostics != null)
+ {
+ result &= validate_EveryBidirectionalReferenceIsPaired(elementChange, diagnostics, context);
+ }
+ if (result || diagnostics != null)
+ {
+ result &= validate_EveryProxyResolves(elementChange, diagnostics, context);
+ }
+ if (result || diagnostics != null)
+ {
+ result &= validate_UniqueID(elementChange, diagnostics, context);
+ }
+ if (result || diagnostics != null)
+ {
+ result &= validate_EveryKeyUnique(elementChange, diagnostics, context);
+ }
+ if (result || diagnostics != null)
+ {
+ result &= validate_EveryMapEntryUnique(elementChange, diagnostics, context);
+ }
+ if (result || diagnostics != null)
+ {
+ result &= validateElementChange_FeaturePathIsKnown(elementChange, diagnostics, context);
+ }
+ return result;
+ }
+
+ /**
+ * Validates the FeaturePathIsKnown constraint of '<em>Element Change</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ * @category CHANGE_VALIDITY
+ */
+ public boolean validateElementChange_FeaturePathIsKnown(ElementChange elementChange, DiagnosticChain diagnostics, Map<Object, Object> context)
+ {
+ ValidationContext validationContext = ValidationContext.getFrom(context);
+ if (validationContext != null && validationContext.getPhase() == ValidationPhase.CHANGE_VALIDITY)
+ {
+ ChangeKind kind = elementChange.getKind();
+ if (kind == ChangeKind.COPIED || kind == ChangeKind.MOVED)
+ {
+ EModelElement newElement = elementChange.getNewElement();
+ if (newElement instanceof EStructuralFeature)
+ {
+ EStructuralFeature newFeature = (EStructuralFeature)newElement;
+ EStructuralFeature oldFeature = (EStructuralFeature)elementChange.getOldElement();
+
+ EClass newContainingClass = newFeature.getEContainingClass();
+ EClass oldContainingClass = oldFeature.getEContainingClass();
+ if (elementChange.getOldElementFor(newContainingClass) != oldContainingClass)
+ {
+ BasicDiagnostic diagnostic = createDiagnostic(Diagnostic.ERROR, DIAGNOSTIC_SOURCE, CODE_FEATURE_PATH_UNKNOWN, "_UI_FeaturePathIsKnown_diagnostic",
+ new Object[] { ElementHandler.getLabel(newFeature), kind.getName().toLowerCase(), ElementHandler.getLabel(oldFeature) },
+ new Object[] { elementChange, newFeature }, context);
+
+ Evolution evolution = validationContext.getEvolution();
+ DiagnosticID diagnosticID = DiagnosticID.get(diagnostic);
+
+ Migration migration = evolution.getMigration(diagnosticID.getValue());
+ if (migration != null)
+ {
+ validationContext.getUsedMigrations().put(diagnosticID, migration);
+ return true;
+ }
+
+ diagnostics.add(diagnostic);
+ return false;
+ }
+ }
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public boolean validatePropertyChange(PropertyChange propertyChange, DiagnosticChain diagnostics, Map<Object, Object> context)
+ {
+ return validate_EveryDefaultConstraint(propertyChange, diagnostics, context);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public boolean validateMigration(Migration migration, DiagnosticChain diagnostics, Map<Object, Object> context)
+ {
+ if (!validate_NoCircularContainment(migration, diagnostics, context))
+ {
+ return false;
+ }
+ boolean result = validate_EveryMultiplicityConforms(migration, diagnostics, context);
+ if (result || diagnostics != null)
+ {
+ result &= validate_EveryDataValueConforms(migration, diagnostics, context);
+ }
+ if (result || diagnostics != null)
+ {
+ result &= validate_EveryReferenceIsContained(migration, diagnostics, context);
+ }
+ if (result || diagnostics != null)
+ {
+ result &= validate_EveryBidirectionalReferenceIsPaired(migration, diagnostics, context);
+ }
+ if (result || diagnostics != null)
+ {
+ result &= validate_EveryProxyResolves(migration, diagnostics, context);
+ }
+ if (result || diagnostics != null)
+ {
+ result &= validate_UniqueID(migration, diagnostics, context);
+ }
+ if (result || diagnostics != null)
+ {
+ result &= validate_EveryKeyUnique(migration, diagnostics, context);
+ }
+ if (result || diagnostics != null)
+ {
+ result &= validate_EveryMapEntryUnique(migration, diagnostics, context);
+ }
+ if (result || diagnostics != null)
+ {
+ result &= validateMigration_NotObsolete(migration, diagnostics, context);
+ }
+ return result;
+ }
+
+ /**
+ * Validates the NotObsolete constraint of '<em>Migration</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ * @category MIGRATION_OBSOLETENESS
+ */
+ public boolean validateMigration_NotObsolete(Migration migration, DiagnosticChain diagnostics, Map<Object, Object> context)
+ {
+ ValidationContext validationContext = ValidationContext.getFrom(context);
+ if (validationContext != null && validationContext.getPhase() == ValidationPhase.MIGRATION_OBSOLETENESS)
+ {
+ String idValue = migration.getDiagnosticID();
+ if (idValue != null && idValue.length() != 0)
+ {
+ DiagnosticID diagnosticID = new DiagnosticID(idValue);
+ if (!validationContext.getUsedMigrations().containsKey(diagnosticID))
+ {
+ diagnostics.add(createDiagnostic(Diagnostic.ERROR, DIAGNOSTIC_SOURCE, CODE_MIGRATION_UNUSED, "_UI_MigrationUnused_diagnostic",
+ new Object[] { migration }, new Object[] { migration, diagnosticID }, context));
+ return false;
+ }
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public boolean validateFeaturePathMigration(FeaturePathMigration featurePathMigration, DiagnosticChain diagnostics, Map<Object, Object> context)
+ {
+ if (!validate_NoCircularContainment(featurePathMigration, diagnostics, context))
+ {
+ return false;
+ }
+ boolean result = validate_EveryMultiplicityConforms(featurePathMigration, diagnostics, context);
+ if (result || diagnostics != null)
+ {
+ result &= validate_EveryDataValueConforms(featurePathMigration, diagnostics, context);
+ }
+ if (result || diagnostics != null)
+ {
+ result &= validate_EveryReferenceIsContained(featurePathMigration, diagnostics, context);
+ }
+ if (result || diagnostics != null)
+ {
+ result &= validate_EveryBidirectionalReferenceIsPaired(featurePathMigration, diagnostics, context);
+ }
+ if (result || diagnostics != null)
+ {
+ result &= validate_EveryProxyResolves(featurePathMigration, diagnostics, context);
+ }
+ if (result || diagnostics != null)
+ {
+ result &= validate_UniqueID(featurePathMigration, diagnostics, context);
+ }
+ if (result || diagnostics != null)
+ {
+ result &= validate_EveryKeyUnique(featurePathMigration, diagnostics, context);
+ }
+ if (result || diagnostics != null)
+ {
+ result &= validate_EveryMapEntryUnique(featurePathMigration, diagnostics, context);
+ }
+ if (result || diagnostics != null)
+ {
+ result &= validateMigration_NotObsolete(featurePathMigration, diagnostics, context);
+ }
+ if (result || diagnostics != null)
+ {
+ result &= validateFeaturePathMigration_NewFeatureReachable(featurePathMigration, diagnostics, context);
+ }
+ return result;
+ }
+
+ /**
+ * Validates the NewFeatureReachable constraint of '<em>Feature Path Migration</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ * @category MIGRATION_VALIDITY
+ */
+ public boolean validateFeaturePathMigration_NewFeatureReachable(FeaturePathMigration featurePathMigration, DiagnosticChain diagnostics,
+ Map<Object, Object> context)
+ {
+ if (ValidationContext.isPhase(context, ValidationPhase.MIGRATION_VALIDITY))
+ {
+ }
+ // TODO implement the constraint
+ // -> specify the condition that violates the constraint
+ // -> verify the diagnostic details, including severity, code, and message
+ // Ensure that you remove @generated or mark it @generated NOT
+ if (false)
+ {
+ if (diagnostics != null)
+ {
+ diagnostics.add(createDiagnostic(Diagnostic.ERROR, DIAGNOSTIC_SOURCE, 0, "_UI_GenericConstraint_diagnostic",
+ new Object[] { "NewFeatureReachable", getObjectLabel(featurePathMigration, context) }, new Object[] { featurePathMigration }, context));
+ }
+ return false;
+ }
+ return true;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public boolean validateChangeKind(ChangeKind changeKind, DiagnosticChain diagnostics, Map<Object, Object> context)
+ {
+ return true;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public boolean validateURI(URI uri, DiagnosticChain diagnostics, Map<Object, Object> context)
+ {
+ return true;
+ }
+
+ /**
+ * Returns the resource locator that will be used to fetch messages for this validator's diagnostics.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public ResourceLocator getResourceLocator()
+ {
+ return EvolutionPlugin.INSTANCE;
+ }
+
+} // EvolutionValidator
diff --git a/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/util/IDAnnotation.java b/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/util/IDAnnotation.java
new file mode 100644
index 0000000000..961921345c
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/util/IDAnnotation.java
@@ -0,0 +1,151 @@
+/*
+ * Copyright (c) 2004-2018 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.evolution.util;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.common.util.EMap;
+import org.eclipse.emf.ecore.EAnnotation;
+import org.eclipse.emf.ecore.EModelElement;
+import org.eclipse.emf.ecore.EcoreFactory;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+
+import java.util.ListIterator;
+
+/**
+ * @author Eike Stepper
+ */
+public class IDAnnotation
+{
+ public static final String SOURCE = "http://www.eclipse.org/CDO/evolution/ID";
+
+ public static final String VALUE_KEY = "value";
+
+ public static final String OLD_VALUE_KEY = "oldValue";
+
+ public static EAnnotation getFrom(EModelElement element, boolean createOnDemand)
+ {
+ EList<EAnnotation> annotations = element.getEAnnotations();
+ for (ListIterator<EAnnotation> it = annotations.listIterator(); it.hasNext();)
+ {
+ EAnnotation annotation = it.next();
+ if (SOURCE.equals(annotation.getSource()))
+ {
+ return annotation;
+ }
+ }
+
+ if (createOnDemand)
+ {
+ EAnnotation annotation = EcoreFactory.eINSTANCE.createEAnnotation();
+ annotation.setSource(IDAnnotation.SOURCE);
+ annotations.add(annotation);
+ return annotation;
+ }
+
+ return null;
+ }
+
+ public static boolean removeFrom(EModelElement element)
+ {
+ boolean removed = false;
+
+ for (ListIterator<EAnnotation> it = element.getEAnnotations().listIterator(); it.hasNext();)
+ {
+ EAnnotation annotation = it.next();
+ if (IDAnnotation.SOURCE.equals(annotation.getSource()))
+ {
+ it.remove();
+ removed = true;
+ }
+ }
+
+ return removed;
+ }
+
+ public static String getOldValue(EModelElement element)
+ {
+ EAnnotation annotation = getFrom(element, false);
+ if (annotation != null)
+ {
+ return annotation.getDetails().get(OLD_VALUE_KEY);
+ }
+
+ return null;
+ }
+
+ public static String setOldValue(EModelElement element, String oldValue)
+ {
+ EAnnotation annotation = getFrom(element, true);
+ if (oldValue == null || oldValue.length() == 0)
+ {
+ oldValue = annotation.getDetails().get(OLD_VALUE_KEY);
+ annotation.getDetails().remove(OLD_VALUE_KEY);
+ return oldValue;
+ }
+
+ return annotation.getDetails().put(OLD_VALUE_KEY, oldValue);
+ }
+
+ public static String getValue(EModelElement element)
+ {
+ return getValue(element, false);
+ }
+
+ public static String getValue(EModelElement element, boolean considerOldValue)
+ {
+ EAnnotation annotation = getFrom(element, false);
+ if (annotation != null)
+ {
+ EMap<String, String> details = annotation.getDetails();
+ if (considerOldValue)
+ {
+ String oldValue = details.get(OLD_VALUE_KEY);
+ if (oldValue != null && oldValue.length() != 0)
+ {
+ return oldValue;
+ }
+ }
+
+ return details.get(VALUE_KEY);
+ }
+
+ return null;
+ }
+
+ public static String setValue(EModelElement element, String value)
+ {
+ EAnnotation annotation = getFrom(element, true);
+ if (value == null || value.length() == 0)
+ {
+ value = annotation.getDetails().get(VALUE_KEY);
+ annotation.getDetails().remove(VALUE_KEY);
+ return value;
+ }
+
+ return annotation.getDetails().put(VALUE_KEY, value);
+ }
+
+ public static String ensureValue(EModelElement element)
+ {
+ EAnnotation annotation = getFrom(element, true);
+ EMap<String, String> details = annotation.getDetails();
+
+ String value = details.get(VALUE_KEY);
+ if (value != null && value.length() != 0)
+ {
+ return null;
+ }
+
+ value = EcoreUtil.generateUUID();
+ details.put(VALUE_KEY, value);
+ return value;
+ }
+}
diff --git a/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/util/ValidationContext.java b/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/util/ValidationContext.java
new file mode 100644
index 0000000000..002f90a3c2
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/util/ValidationContext.java
@@ -0,0 +1,101 @@
+/*
+ * Copyright (c) 2004-2018 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.evolution.util;
+
+import org.eclipse.emf.cdo.evolution.Evolution;
+import org.eclipse.emf.cdo.evolution.Migration;
+
+import org.eclipse.emf.common.util.BasicDiagnostic;
+import org.eclipse.emf.ecore.resource.Resource;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @author Eike Stepper
+ */
+public final class ValidationContext
+{
+ private static final String KEY = ValidationContext.class.getName();
+
+ private final Evolution evolution;
+
+ private ValidationPhase phase;
+
+ private final Map<Resource, BasicDiagnostic> resourceDiagnostics = new HashMap<Resource, BasicDiagnostic>();
+
+ private final Map<String, Object> identifiedElements = new HashMap<String, Object>();
+
+ private final Map<DiagnosticID, Migration> usedMigrations = new HashMap<DiagnosticID, Migration>();
+
+ public ValidationContext(Evolution evolution)
+ {
+ this.evolution = evolution;
+ phase = ValidationPhase.values()[0];
+ }
+
+ public Evolution getEvolution()
+ {
+ return evolution;
+ }
+
+ public ValidationPhase getPhase()
+ {
+ return phase;
+ }
+
+ public void setPhase(ValidationPhase phase)
+ {
+ this.phase = phase;
+ }
+
+ public Map<Resource, BasicDiagnostic> getResourceDiagnostics()
+ {
+ return resourceDiagnostics;
+ }
+
+ public Map<String, Object> getIdentifiedElements()
+ {
+ return identifiedElements;
+ }
+
+ public Map<DiagnosticID, Migration> getUsedMigrations()
+ {
+ return usedMigrations;
+ }
+
+ public void putInto(Map<Object, Object> context)
+ {
+ context.put(KEY, this);
+ }
+
+ public static ValidationContext getFrom(Map<Object, Object> context)
+ {
+ Object contextObject = context.get(KEY);
+ if (contextObject instanceof ValidationContext)
+ {
+ return (ValidationContext)contextObject;
+ }
+
+ return null;
+ }
+
+ public static void removeFrom(Map<Object, Object> context)
+ {
+ context.remove(KEY);
+ }
+
+ public static boolean isPhase(Map<Object, Object> context, ValidationPhase phase)
+ {
+ ValidationContext validationContext = getFrom(context);
+ return validationContext != null && validationContext.getPhase() == phase;
+ }
+}
diff --git a/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/util/ValidationPhase.java b/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/util/ValidationPhase.java
new file mode 100644
index 0000000000..1b2c86cbaf
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.evolution/src/org/eclipse/emf/cdo/evolution/util/ValidationPhase.java
@@ -0,0 +1,191 @@
+/*
+ * Copyright (c) 2004-2018 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.evolution.util;
+
+import org.eclipse.emf.cdo.evolution.Change;
+import org.eclipse.emf.cdo.evolution.Evolution;
+import org.eclipse.emf.cdo.evolution.Migration;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.util.Diagnostician;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author Eike Stepper
+ */
+public enum ValidationPhase
+{
+ MODEL_AVAILABILITY
+ {
+ @Override
+ public List<? extends EObject> getContentsToValidate(Diagnostician diagnostician, Evolution evolution, EObject eObject, Map<Object, Object> context)
+ {
+ if (eObject == evolution)
+ {
+ return evolution.getModels();
+ }
+
+ return Collections.emptyList();
+ }
+ },
+
+ MODEL_UNIQUENESS
+ {
+ @Override
+ public List<? extends EObject> getContentsToValidate(Diagnostician diagnostician, Evolution evolution, EObject eObject, Map<Object, Object> context)
+ {
+ if (eObject == evolution)
+ {
+ return evolution.getModels();
+ }
+
+ return Collections.emptyList();
+ }
+ },
+
+ MODEL_INTEGRITY
+ {
+ @Override
+ public List<? extends EObject> getContentsToValidate(Diagnostician diagnostician, Evolution evolution, EObject eObject, Map<Object, Object> context)
+ {
+ return Collections.emptyList();
+ }
+ },
+
+ MODEL_VALIDITY
+ {
+ @Override
+ public List<? extends EObject> getContentsToValidate(Diagnostician diagnostician, Evolution evolution, EObject eObject, Map<Object, Object> context)
+ {
+ if (eObject == evolution)
+ {
+ return evolution.getRootPackages();
+ }
+
+ if (isPackageElement(evolution, eObject))
+ {
+ return super.getContentsToValidate(diagnostician, evolution, eObject, context);
+ }
+
+ return Collections.emptyList();
+ }
+ },
+
+ IDENTITY_COMPLETENESS
+ {
+ @Override
+ public List<? extends EObject> getContentsToValidate(Diagnostician diagnostician, Evolution evolution, EObject eObject, Map<Object, Object> context)
+ {
+ return MODEL_AVAILABILITY.getContentsToValidate(diagnostician, evolution, eObject, context);
+ }
+ },
+
+ IDENTITY_UNIQUENESS
+ {
+ @Override
+ public List<? extends EObject> getContentsToValidate(Diagnostician diagnostician, Evolution evolution, EObject eObject, Map<Object, Object> context)
+ {
+ return Collections.emptyList();
+ }
+ },
+
+ CHANGE_VALIDITY
+ {
+ @Override
+ public List<? extends EObject> getContentsToValidate(Diagnostician diagnostician, Evolution evolution, EObject eObject, Map<Object, Object> context)
+ {
+ if (eObject == evolution)
+ {
+ return Collections.singletonList(evolution.getChange());
+ }
+
+ if (eObject instanceof Change)
+ {
+ Change change = (Change)eObject;
+ if (EcoreUtil.isAncestor(evolution.getChange(), change))
+ {
+ return change.getChildren();
+ }
+ }
+
+ return Collections.emptyList();
+ }
+ },
+
+ MIGRATION_OBSOLETENESS
+ {
+ @Override
+ public List<? extends EObject> getContentsToValidate(Diagnostician diagnostician, Evolution evolution, EObject eObject, Map<Object, Object> context)
+ {
+ if (eObject == evolution)
+ {
+ return evolution.getMigrations();
+ }
+
+ return Collections.emptyList();
+ }
+ },
+
+ MIGRATION_VALIDITY
+ {
+ @Override
+ public List<? extends EObject> getContentsToValidate(Diagnostician diagnostician, Evolution evolution, EObject eObject, Map<Object, Object> context)
+ {
+ if (eObject == evolution)
+ {
+ return evolution.getMigrations();
+ }
+
+ if (eObject instanceof Migration)
+ {
+ return super.getContentsToValidate(diagnostician, evolution, eObject, context);
+ }
+
+ return Collections.emptyList();
+ }
+ },
+
+ RELEASE
+ {
+ @Override
+ public List<? extends EObject> getContentsToValidate(Diagnostician diagnostician, Evolution evolution, EObject eObject, Map<Object, Object> context)
+ {
+ return Collections.emptyList();
+ }
+ };
+
+ public static final List<ValidationPhase> ALL = Arrays.asList(ValidationPhase.values());
+
+ public List<? extends EObject> getContentsToValidate(Diagnostician diagnostician, Evolution evolution, EObject eObject, Map<Object, Object> context)
+ {
+ return eObject.eContents();
+ }
+
+ private static boolean isPackageElement(Evolution evolution, EObject eObject)
+ {
+ EObject rootContainer = EcoreUtil.getRootContainer(eObject);
+ for (EPackage rootPackage : evolution.getRootPackages())
+ {
+ if (rootContainer == rootPackage)
+ {
+ return true;
+ }
+ }
+
+ return false;
+ }
+}
diff --git a/plugins/org.eclipse.emf.cdo/META-INF/MANIFEST.MF b/plugins/org.eclipse.emf.cdo/META-INF/MANIFEST.MF
index afff752c79..cc9efeacf5 100644
--- a/plugins/org.eclipse.emf.cdo/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.emf.cdo/META-INF/MANIFEST.MF
@@ -71,7 +71,8 @@ Export-Package: org.eclipse.emf.cdo;version="4.6.200",
x-friends:="org.eclipse.emf.cdo.net4j,
org.eclipse.emf.cdo.server,
org.eclipse.emf.cdo.tests,
- org.eclipse.emf.cdo.ui",
+ org.eclipse.emf.cdo.ui,
+ org.eclipse.emf.cdo.evolution",
org.eclipse.emf.internal.cdo.view;version="4.6.200";
x-friends:="org.eclipse.emf.cdo.net4j,
org.eclipse.emf.cdo.server,
diff --git a/plugins/org.eclipse.net4j.util/META-INF/MANIFEST.MF b/plugins/org.eclipse.net4j.util/META-INF/MANIFEST.MF
index 94d4b2ff08..4df488a5b0 100644
--- a/plugins/org.eclipse.net4j.util/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.net4j.util/META-INF/MANIFEST.MF
@@ -1,7 +1,7 @@
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-SymbolicName: org.eclipse.net4j.util;singleton:=true
-Bundle-Version: 3.8.0.qualifier
+Bundle-Version: 3.9.0.qualifier
Bundle-Name: %pluginName
Bundle-Vendor: %providerName
Bundle-Localization: plugin
@@ -15,35 +15,35 @@ Import-Package: org.eclipse.osgi.service.debug;version="[1.0.0,2.0.0)";resolutio
org.osgi.framework;version="[1.3.0,2.0.0)";resolution:=optional,
org.osgi.service.log;version="[1.3.0,2.0.0)";resolution:=optional,
org.osgi.util.tracker;version="[1.3.0,2.0.0)";resolution:=optional
-Export-Package: org.eclipse.net4j.internal.util.bundle;version="3.8.0";x-friends:="org.eclipse.net4j.util.ui,org.eclipse.net4j.tests",
- org.eclipse.net4j.internal.util.container;version="3.8.0";x-internal:=true,
- org.eclipse.net4j.internal.util.factory;version="3.8.0";x-internal:=true,
- org.eclipse.net4j.internal.util.om;version="3.8.0";x-internal:=true,
- org.eclipse.net4j.internal.util.om.pref;version="3.8.0";x-internal:=true,
- org.eclipse.net4j.internal.util.table;version="3.8.0";x-internal:=true,
- org.eclipse.net4j.internal.util.test;version="3.8.0";x-friends:="org.eclipse.net4j.tests",
- org.eclipse.net4j.util;version="3.8.0",
- org.eclipse.net4j.util.cache;version="3.8.0",
- org.eclipse.net4j.util.collection;version="3.8.0",
- org.eclipse.net4j.util.concurrent;version="3.8.0",
- org.eclipse.net4j.util.confirmation;version="3.8.0",
- org.eclipse.net4j.util.container;version="3.8.0",
- org.eclipse.net4j.util.container.delegate;version="3.8.0",
- org.eclipse.net4j.util.event;version="3.8.0",
- org.eclipse.net4j.util.factory;version="3.8.0",
- org.eclipse.net4j.util.fsm;version="3.8.0",
- org.eclipse.net4j.util.io;version="3.8.0",
- org.eclipse.net4j.util.lifecycle;version="3.8.0",
- org.eclipse.net4j.util.om;version="3.8.0",
- org.eclipse.net4j.util.om.log;version="3.8.0",
- org.eclipse.net4j.util.om.monitor;version="3.8.0",
- org.eclipse.net4j.util.om.pref;version="3.8.0",
- org.eclipse.net4j.util.om.trace;version="3.8.0",
- org.eclipse.net4j.util.options;version="3.8.0",
- org.eclipse.net4j.util.properties;version="3.8.0",
- org.eclipse.net4j.util.ref;version="3.8.0",
- org.eclipse.net4j.util.registry;version="3.8.0",
- org.eclipse.net4j.util.security;version="3.8.0",
- org.eclipse.net4j.util.transaction;version="3.8.0"
+Export-Package: org.eclipse.net4j.internal.util.bundle;version="3.9.0";x-friends:="org.eclipse.net4j.util.ui,org.eclipse.net4j.tests",
+ org.eclipse.net4j.internal.util.container;version="3.9.0";x-internal:=true,
+ org.eclipse.net4j.internal.util.factory;version="3.9.0";x-internal:=true,
+ org.eclipse.net4j.internal.util.om;version="3.9.0";x-internal:=true,
+ org.eclipse.net4j.internal.util.om.pref;version="3.9.0";x-internal:=true,
+ org.eclipse.net4j.internal.util.table;version="3.9.0";x-internal:=true,
+ org.eclipse.net4j.internal.util.test;version="3.9.0";x-friends:="org.eclipse.net4j.tests",
+ org.eclipse.net4j.util;version="3.9.0",
+ org.eclipse.net4j.util.cache;version="3.9.0",
+ org.eclipse.net4j.util.collection;version="3.9.0",
+ org.eclipse.net4j.util.concurrent;version="3.9.0",
+ org.eclipse.net4j.util.confirmation;version="3.9.0",
+ org.eclipse.net4j.util.container;version="3.9.0",
+ org.eclipse.net4j.util.container.delegate;version="3.9.0",
+ org.eclipse.net4j.util.event;version="3.9.0",
+ org.eclipse.net4j.util.factory;version="3.9.0",
+ org.eclipse.net4j.util.fsm;version="3.9.0",
+ org.eclipse.net4j.util.io;version="3.9.0",
+ org.eclipse.net4j.util.lifecycle;version="3.9.0",
+ org.eclipse.net4j.util.om;version="3.9.0",
+ org.eclipse.net4j.util.om.log;version="3.9.0",
+ org.eclipse.net4j.util.om.monitor;version="3.9.0",
+ org.eclipse.net4j.util.om.pref;version="3.9.0",
+ org.eclipse.net4j.util.om.trace;version="3.9.0",
+ org.eclipse.net4j.util.options;version="3.9.0",
+ org.eclipse.net4j.util.properties;version="3.9.0",
+ org.eclipse.net4j.util.ref;version="3.9.0",
+ org.eclipse.net4j.util.registry;version="3.9.0",
+ org.eclipse.net4j.util.security;version="3.9.0",
+ org.eclipse.net4j.util.transaction;version="3.9.0"
Eclipse-BuddyPolicy: registered
Automatic-Module-Name: org.eclipse.net4j.util
diff --git a/plugins/org.eclipse.net4j.util/pom.xml b/plugins/org.eclipse.net4j.util/pom.xml
index dc0b1fd537..6d212faf2c 100644
--- a/plugins/org.eclipse.net4j.util/pom.xml
+++ b/plugins/org.eclipse.net4j.util/pom.xml
@@ -25,7 +25,7 @@
<groupId>org.eclipse.emf.cdo</groupId>
<artifactId>org.eclipse.net4j.util</artifactId>
- <version>3.8.0-SNAPSHOT</version>
+ <version>3.9.0-SNAPSHOT</version>
<packaging>eclipse-plugin</packaging>
</project>
diff --git a/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/collection/CollectionUtil.java b/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/collection/CollectionUtil.java
index 14e081949a..3787367671 100644
--- a/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/collection/CollectionUtil.java
+++ b/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/collection/CollectionUtil.java
@@ -11,8 +11,12 @@
package org.eclipse.net4j.util.collection;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.Iterator;
+import java.util.LinkedHashSet;
import java.util.List;
+import java.util.Map;
+import java.util.Set;
/**
* Various static helper methods.
@@ -26,6 +30,90 @@ public final class CollectionUtil
{
}
+ /**
+ * @since 3.9
+ */
+ public static <K, V> Set<V> getSet(Map<K, Set<V>> map, K key)
+ {
+ Set<V> set = map.get(key);
+ if (set == null)
+ {
+ set = new LinkedHashSet<V>();
+ map.put(key, set);
+ }
+
+ return set;
+ }
+
+ /**
+ * @since 3.9
+ */
+ public static <K, V> boolean add(Map<K, Set<V>> map, K key, V value)
+ {
+ Set<V> set = getSet(map, key);
+ return set.add(value);
+ }
+
+ /**
+ * @since 3.9
+ */
+ public static <K, V> boolean addAll(Map<K, Set<V>> map, K key, Collection<? extends V> values)
+ {
+ Set<V> set = getSet(map, key);
+ return set.addAll(values);
+ }
+
+ /**
+ * @since 3.9
+ */
+ public static <K, V> boolean addAll(Map<K, Set<V>> map, Collection<? extends K> keys, V value)
+ {
+ boolean result = false;
+ for (K key : keys)
+ {
+ if (add(map, key, value))
+ {
+ result = true;
+ }
+ }
+
+ return result;
+ }
+
+ /**
+ * @since 3.9
+ */
+ public static <K, V> boolean addAll(Map<K, Set<V>> map, Map<? extends K, ? extends Collection<? extends V>> map2)
+ {
+ boolean result = false;
+ for (Map.Entry<? extends K, ? extends Collection<? extends V>> entry : map2.entrySet())
+ {
+ if (addAll(map, entry.getKey(), entry.getValue()))
+ {
+ result = true;
+ }
+ }
+
+ return result;
+ }
+
+ /**
+ * @since 3.9
+ */
+ public static <K, V> boolean putAll(Map<K, Set<V>> map, Map<? extends K, ? extends V> map2)
+ {
+ boolean result = false;
+ for (Map.Entry<? extends K, ? extends V> entry : map2.entrySet())
+ {
+ if (add(map, entry.getKey(), entry.getValue()))
+ {
+ result = true;
+ }
+ }
+
+ return result;
+ }
+
public static <T> Iterator<T> dump(Iterator<T> it)
{
List<T> list = new ArrayList<T>();
diff --git a/releng/org.eclipse.emf.cdo.releng.parent/plugins/pom.xml b/releng/org.eclipse.emf.cdo.releng.parent/plugins/pom.xml
index fbc95eb70e..f7c177f766 100644
--- a/releng/org.eclipse.emf.cdo.releng.parent/plugins/pom.xml
+++ b/releng/org.eclipse.emf.cdo.releng.parent/plugins/pom.xml
@@ -43,6 +43,9 @@ Eike Stepper - initial API and implementation
<module>../../../plugins/org.eclipse.emf.cdo.doc</module>
<module>../../../plugins/org.eclipse.emf.cdo.ecore</module>
<module>../../../plugins/org.eclipse.emf.cdo.edit</module>
+ <module>../../../plugins/org.eclipse.emf.cdo.evolution</module>
+ <module>../../../plugins/org.eclipse.emf.cdo.evolution.edit</module>
+ <module>../../../plugins/org.eclipse.emf.cdo.evolution.editor</module>
<module>../../../plugins/org.eclipse.emf.cdo.examples</module>
<module>../../../plugins/org.eclipse.emf.cdo.examples.client</module>
<module>../../../plugins/org.eclipse.emf.cdo.examples.client.offline</module>

Back to the top