Bug 562908 - Populate the JustJ Git clones with initial content
Provide an initial prototype for a model from which JRE scaffolding can
be generated.
diff --git a/.gitignore b/.gitignore
index 2f7896d..809cc8f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,2 @@
target/
+bin/
diff --git a/features/org.eclipse.justj.tools-feature/.project b/features/org.eclipse.justj.tools-feature/.project
new file mode 100644
index 0000000..ecbe7b3
--- /dev/null
+++ b/features/org.eclipse.justj.tools-feature/.project
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.justj.tools-feature</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.pde.FeatureBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <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/features/org.eclipse.justj.tools-feature/build.properties b/features/org.eclipse.justj.tools-feature/build.properties
new file mode 100644
index 0000000..5274509
--- /dev/null
+++ b/features/org.eclipse.justj.tools-feature/build.properties
@@ -0,0 +1,12 @@
+# Copyright (c) 2020 Eclipse contributors and others.
+#
+# This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License 2.0
+# which accompanies this distribution, and is available at
+# https://www.eclipse.org/legal/epl-2.0/
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+
+bin.includes = feature.xml,\
+ feature.properties
diff --git a/features/org.eclipse.justj.tools-feature/feature.properties b/features/org.eclipse.justj.tools-feature/feature.properties
new file mode 100644
index 0000000..2f8f0b0
--- /dev/null
+++ b/features/org.eclipse.justj.tools-feature/feature.properties
@@ -0,0 +1,21 @@
+# Copyright (c) 2020 Eclipse contributors and others.
+#
+# This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License 2.0
+# which accompanies this distribution, and is available at
+# https://www.eclipse.org/legal/epl-2.0/
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+
+providerName = Eclipse JustJ
+featureName = JustJ Tools
+description = Contains the plug-ins for the Tools
+copyright = Copyright (c) 2020 Eclipse contributors and others.\n\
+\n\
+This program and the accompanying materials\n\
+are made available under the terms of the Eclipse Public License 2.0\n\
+which accompanies this distribution, and is available at\n\
+https://www.eclipse.org/legal/epl-2.0/\n\
+\n\
+SPDX-License-Identifier: EPL-2.0\n
diff --git a/features/org.eclipse.justj.tools-feature/feature.xml b/features/org.eclipse.justj.tools-feature/feature.xml
new file mode 100644
index 0000000..258f856
--- /dev/null
+++ b/features/org.eclipse.justj.tools-feature/feature.xml
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Copyright (c) 2020 Eclipse contributors and others.
+
+This program and the accompanying materials
+are made available under the terms of the Eclipse Public License 2.0
+which accompanies this distribution, and is available at
+https://www.eclipse.org/legal/epl-2.0/
+
+SPDX-License-Identifier: EPL-2.0
+-->
+<feature
+ id="org.eclipse.justj.tools"
+ label="%featureName"
+ version="0.1.0.qualifier"
+ provider-name="%providerName"
+ license-feature="org.eclipse.license"
+ license-feature-version="0.0.0">
+
+ <description>
+ %description
+ </description>
+
+ <copyright>
+ %copyright
+ </copyright>
+
+ <license url="%licenseURL">
+ %license
+ </license>
+
+ <plugin
+ id="org.eclipse.justj.tools"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.justj.codegen"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.justj.codegen.edit"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.justj.codegen.editor"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+</feature>
diff --git a/features/org.eclipse.justj.tools-feature/pom.xml b/features/org.eclipse.justj.tools-feature/pom.xml
new file mode 100644
index 0000000..796db56
--- /dev/null
+++ b/features/org.eclipse.justj.tools-feature/pom.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Copyright (c) 2020 Eclipse contributors and others.
+
+This program and the accompanying materials
+are made available under the terms of the Eclipse Public License 2.0
+which accompanies this distribution, and is available at
+https://www.eclipse.org/legal/epl-2.0/
+
+SPDX-License-Identifier: EPL-2.0
+-->
+<project
+ xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.eclipse.justj</groupId>
+ <artifactId>org.eclipse.justj.features</artifactId>
+ <version>1.0.0-SNAPSHOT</version>
+ <relativePath>../../releng/org.eclipse.justj.tools.parent/features</relativePath>
+ </parent>
+
+ <groupId>org.eclipse.justj.features</groupId>
+ <artifactId>org.eclipse.justj.tools</artifactId>
+ <version>0.1.0-SNAPSHOT</version>
+ <packaging>eclipse-feature</packaging>
+</project>
diff --git a/plugins/org.eclipse.justj.codegen.edit/.classpath b/plugins/org.eclipse.justj.codegen.edit/.classpath
new file mode 100644
index 0000000..3bc2475
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen.edit/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/org.eclipse.justj.codegen.edit/.project b/plugins/org.eclipse.justj.codegen.edit/.project
new file mode 100644
index 0000000..c016e2c
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen.edit/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.justj.codegen.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.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ </natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.justj.codegen.edit/META-INF/MANIFEST.MF b/plugins/org.eclipse.justj.codegen.edit/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..f879f0f
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen.edit/META-INF/MANIFEST.MF
@@ -0,0 +1,16 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.justj.codegen.edit;singleton:=true
+Automatic-Module-Name: org.eclipse.justj.codegen.edit
+Bundle-Version: 0.1.0.qualifier
+Bundle-ClassPath: .
+Bundle-Activator: org.eclipse.justj.codegen.model.provider.ModelEditPlugin$Implementation
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Export-Package: org.eclipse.justj.codegen.model.provider
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.justj.codegen;visibility:=reexport,
+ org.eclipse.emf.edit;visibility:=reexport
+Bundle-ActivationPolicy: lazy
diff --git a/plugins/org.eclipse.justj.codegen.edit/about.html b/plugins/org.eclipse.justj.codegen.edit/about.html
new file mode 100644
index 0000000..164f781
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen.edit/about.html
@@ -0,0 +1,36 @@
+<!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>November 30, 2017</p>
+ <h3>License</h3>
+
+ <p>
+ The Eclipse Foundation makes available all content in this plug-in
+ ("Content"). Unless otherwise indicated below, the Content
+ is provided to you under the terms and conditions of the Eclipse
+ Public License Version 2.0 ("EPL"). A copy of the EPL is
+ available at <a href="http://www.eclipse.org/legal/epl-2.0">http://www.eclipse.org/legal/epl-2.0</a>.
+ For purposes of the EPL, "Program" 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
+ ("Redistributor") and different terms and conditions may
+ apply to your use of any object code in the Content. Check the
+ Redistributor's license that was provided with the Content. If no such
+ license exists, contact the Redistributor. Unless otherwise indicated
+ below, the terms and conditions of the EPL still apply to any source
+ code in the Content and such source code may be obtained at <a
+ href="http://www.eclipse.org/">http://www.eclipse.org</a>.
+ </p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.justj.codegen.edit/about.mappings b/plugins/org.eclipse.justj.codegen.edit/about.mappings
new file mode 100644
index 0000000..9c84f0a
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen.edit/about.mappings
@@ -0,0 +1,2 @@
+0=${build.id}
+1=${git.commit}
diff --git a/plugins/org.eclipse.justj.codegen.edit/build.properties b/plugins/org.eclipse.justj.codegen.edit/build.properties
new file mode 100644
index 0000000..f9f2c35
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen.edit/build.properties
@@ -0,0 +1,21 @@
+# Copyright (c) 2020 Eclipse contributors and others.
+#
+# This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License 2.0
+# which accompanies this distribution, and is available at
+# https://www.eclipse.org/legal/epl-2.0/
+#
+# SPDX-License-Identifier: EPL-2.0
+
+bin.includes = .,\
+ icons/,\
+ META-INF/,\
+ plugin.xml,\
+ plugin.properties,\
+ about.html,\
+ about.mappings
+jars.compile.order = .
+source.. = src/
+output.. = bin/
+src.includes = about.mappings,\
+ about.html
diff --git a/plugins/org.eclipse.justj.codegen.edit/icons/full/obj16/Install.gif b/plugins/org.eclipse.justj.codegen.edit/icons/full/obj16/Install.gif
new file mode 100644
index 0000000..2230997
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen.edit/icons/full/obj16/Install.gif
Binary files differ
diff --git a/plugins/org.eclipse.justj.codegen.edit/icons/full/obj16/Instruction.gif b/plugins/org.eclipse.justj.codegen.edit/icons/full/obj16/Instruction.gif
new file mode 100644
index 0000000..5818a30
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen.edit/icons/full/obj16/Instruction.gif
Binary files differ
diff --git a/plugins/org.eclipse.justj.codegen.edit/icons/full/obj16/JVM.gif b/plugins/org.eclipse.justj.codegen.edit/icons/full/obj16/JVM.gif
new file mode 100644
index 0000000..dd994fd
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen.edit/icons/full/obj16/JVM.gif
Binary files differ
diff --git a/plugins/org.eclipse.justj.codegen.edit/icons/full/obj16/Model.gif b/plugins/org.eclipse.justj.codegen.edit/icons/full/obj16/Model.gif
new file mode 100644
index 0000000..cd5e74f
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen.edit/icons/full/obj16/Model.gif
Binary files differ
diff --git a/plugins/org.eclipse.justj.codegen.edit/icons/full/obj16/Touchpoint.gif b/plugins/org.eclipse.justj.codegen.edit/icons/full/obj16/Touchpoint.gif
new file mode 100644
index 0000000..33854e9
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen.edit/icons/full/obj16/Touchpoint.gif
Binary files differ
diff --git a/plugins/org.eclipse.justj.codegen.edit/icons/full/obj16/Uninstall.gif b/plugins/org.eclipse.justj.codegen.edit/icons/full/obj16/Uninstall.gif
new file mode 100644
index 0000000..9b74ecc
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen.edit/icons/full/obj16/Uninstall.gif
Binary files differ
diff --git a/plugins/org.eclipse.justj.codegen.edit/icons/full/obj16/Variant.gif b/plugins/org.eclipse.justj.codegen.edit/icons/full/obj16/Variant.gif
new file mode 100644
index 0000000..78eafd8
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen.edit/icons/full/obj16/Variant.gif
Binary files differ
diff --git a/plugins/org.eclipse.justj.codegen.edit/plugin.properties b/plugins/org.eclipse.justj.codegen.edit/plugin.properties
new file mode 100644
index 0000000..d29fe57
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen.edit/plugin.properties
@@ -0,0 +1,62 @@
+# Copyright (c) 2020 Eclipse contributors and others.
+#
+# This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License 2.0
+# which accompanies this distribution, and is available at
+# https://www.eclipse.org/legal/epl-2.0/
+#
+# SPDX-License-Identifier: EPL-2.0
+
+pluginName = JustJ Codegen Edit Support
+providerName = Eclipse JustJ
+
+_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}
+
+_UI_Model_type = Model
+_UI_JVM_type = JVM
+_UI_Variant_type = Variant
+_UI_Copyrightable_type = Copyrightable
+_UI_Unknown_type = Object
+
+_UI_Unknown_datatype= Value
+
+_UI_Model_name_feature = Name
+_UI_Model_label_feature = Label
+_UI_Model_jVMs_feature = JVMs
+_UI_Model_provider_feature = Provider
+_UI_Model_providerImageName_feature = Provider Image Name
+_UI_Model_providerImageData_feature = Provider Image Data
+_UI_Model_aboutURL_feature = About URL
+_UI_JVM_name_feature = Name
+_UI_JVM_version_feature = Version
+_UI_JVM_label_feature = Label
+_UI_JVM_variants_feature = Variants
+_UI_JVM_model_feature = Model
+_UI_JVM_aboutTextExtra_feature = About Text Extra
+_UI_Variant_os_feature = Os
+_UI_Variant_arch_feature = Arch
+_UI_Variant_jVM_feature = JVM
+_UI_Variant_label_feature = Label
+_UI_Copyrightable_copyrightHolder_feature = Copyright Holder
+_UI_Copyrightable_copyrightYear_feature = Copyright Year
+_UI_Copyrightable_copyrightText_feature = Copyright Text
+_UI_Unknown_feature = Unspecified
+
+_UI_Model_target_feature = Target
+_UI_Touchpoint_type = Touchpoint
+_UI_Touchable_type = Touchable
+_UI_Touchpoint_phase_feature = Phase
+_UI_Touchpoint_instructions_feature = Instructions
+_UI_Touchable_touchpoints_feature = Touchpoints
+_UI_Phase_Install_literal = install
+_UI_Phase_Uninstall_literal = uninstall
+_UI_Variant_source_feature = Source
+_UI_Model_source_feature = Source
+_UI_Model_localCache_feature = Local Cache
diff --git a/plugins/org.eclipse.justj.codegen.edit/plugin.xml b/plugins/org.eclipse.justj.codegen.edit/plugin.xml
new file mode 100644
index 0000000..105853e
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen.edit/plugin.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+
+<!--
+ Copyright (c) 2020 Eclipse contributors and others.
+
+ This program and the accompanying materials
+ are made available under the terms of the Eclipse Public License 2.0
+ which accompanies this distribution, and is available at
+ https://www.eclipse.org/legal/epl-2.0/
+
+ SPDX-License-Identifier: EPL-2.0
+-->
+
+<plugin>
+
+ <extension point="org.eclipse.emf.edit.itemProviderAdapterFactories">
+ <!-- @generated Model -->
+ <factory
+ uri="http://www.eclipse.org/just/2020/Model"
+ class="org.eclipse.justj.codegen.model.provider.ModelItemProviderAdapterFactory"
+ 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"/>
+ </extension>
+
+</plugin>
diff --git a/plugins/org.eclipse.justj.codegen.edit/pom.xml b/plugins/org.eclipse.justj.codegen.edit/pom.xml
new file mode 100644
index 0000000..a6c43cb
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen.edit/pom.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Copyright (c) 2020 Eclipse contributors and others.
+
+This program and the accompanying materials
+are made available under the terms of the Eclipse Public License 2.0
+which accompanies this distribution, and is available at
+https://www.eclipse.org/legal/epl-2.0/
+
+SPDX-License-Identifier: EPL-2.0
+-->
+<project
+ xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.eclipse.justj</groupId>
+ <artifactId>org.eclipse.justj.plugins</artifactId>
+ <version>1.0.0-SNAPSHOT</version>
+ <relativePath>../../releng/org.eclipse.justj.tools.parent/plugins</relativePath>
+ </parent>
+
+ <groupId>org.eclipse.justj</groupId>
+ <artifactId>org.eclipse.justj.codegen.edit</artifactId>
+ <version>0.1.0-SNAPSHOT</version>
+ <packaging>eclipse-plugin</packaging>
+
+ <build>
+ <resources>
+ <resource>
+ <directory>.</directory>
+ <filtering>true</filtering>
+ <includes>
+ <include>about.mappings</include>
+ </includes>
+ </resource>
+ </resources>
+ </build>
+
+</project>
diff --git a/plugins/org.eclipse.justj.codegen.edit/src/org/eclipse/justj/codegen/model/provider/CopyrightableItemProvider.java b/plugins/org.eclipse.justj.codegen.edit/src/org/eclipse/justj/codegen/model/provider/CopyrightableItemProvider.java
new file mode 100644
index 0000000..0a98d9c
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen.edit/src/org/eclipse/justj/codegen/model/provider/CopyrightableItemProvider.java
@@ -0,0 +1,220 @@
+/**
+ * Copyright (c) 2020 Eclipse contributors and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.eclipse.justj.codegen.model.provider;
+
+
+import java.util.Collection;
+import java.util.List;
+
+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.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+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.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.ViewerNotification;
+import org.eclipse.justj.codegen.model.Copyrightable;
+import org.eclipse.justj.codegen.model.ModelPackage;
+
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.justj.codegen.model.Copyrightable} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class CopyrightableItemProvider extends ItemProviderAdapter
+ implements
+ IEditingDomainItemProvider,
+ IStructuredItemContentProvider,
+ ITreeItemContentProvider,
+ IItemLabelProvider,
+ IItemPropertySource
+{
+ /**
+ * This constructs an instance from a factory and a notifier.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public CopyrightableItemProvider(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);
+
+ addCopyrightHolderPropertyDescriptor(object);
+ addCopyrightYearPropertyDescriptor(object);
+ addCopyrightTextPropertyDescriptor(object);
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This adds a property descriptor for the Copyright Holder feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addCopyrightHolderPropertyDescriptor(Object object)
+ {
+ itemPropertyDescriptors.add(
+ createItemPropertyDescriptor(
+ ((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_Copyrightable_copyrightHolder_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_Copyrightable_copyrightHolder_feature", "_UI_Copyrightable_type"),
+ ModelPackage.Literals.COPYRIGHTABLE__COPYRIGHT_HOLDER,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This adds a property descriptor for the Copyright Year feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addCopyrightYearPropertyDescriptor(Object object)
+ {
+ itemPropertyDescriptors.add(
+ createItemPropertyDescriptor(
+ ((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_Copyrightable_copyrightYear_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_Copyrightable_copyrightYear_feature", "_UI_Copyrightable_type"),
+ ModelPackage.Literals.COPYRIGHTABLE__COPYRIGHT_YEAR,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This adds a property descriptor for the Copyright Text feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addCopyrightTextPropertyDescriptor(Object object)
+ {
+ itemPropertyDescriptors.add(
+ createItemPropertyDescriptor(
+ ((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_Copyrightable_copyrightText_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_Copyrightable_copyrightText_feature", "_UI_Copyrightable_type"),
+ ModelPackage.Literals.COPYRIGHTABLE__COPYRIGHT_TEXT,
+ true,
+ true,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * <!-- 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)
+ {
+ String label = ((Copyrightable)object).getCopyrightHolder();
+ return label == null || label.length() == 0 ? getString("_UI_Copyrightable_type") : getString("_UI_Copyrightable_type") + " " + label;
+ }
+
+ /**
+ * 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(Copyrightable.class))
+ {
+ case ModelPackage.COPYRIGHTABLE__COPYRIGHT_HOLDER:
+ case ModelPackage.COPYRIGHTABLE__COPYRIGHT_YEAR:
+ case ModelPackage.COPYRIGHTABLE__COPYRIGHT_TEXT:
+ 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 ModelEditPlugin.INSTANCE;
+ }
+
+}
diff --git a/plugins/org.eclipse.justj.codegen.edit/src/org/eclipse/justj/codegen/model/provider/JVMItemProvider.java b/plugins/org.eclipse.justj.codegen.edit/src/org/eclipse/justj/codegen/model/provider/JVMItemProvider.java
new file mode 100644
index 0000000..ec81f5a
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen.edit/src/org/eclipse/justj/codegen/model/provider/JVMItemProvider.java
@@ -0,0 +1,302 @@
+/**
+ * Copyright (c) 2020 Eclipse contributors and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.eclipse.justj.codegen.model.provider;
+
+
+import java.util.Collection;
+import java.util.List;
+
+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.ViewerNotification;
+import org.eclipse.justj.codegen.model.JVM;
+import org.eclipse.justj.codegen.model.ModelFactory;
+import org.eclipse.justj.codegen.model.ModelPackage;
+
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.justj.codegen.model.JVM} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class JVMItemProvider extends CopyrightableItemProvider
+{
+ /**
+ * This constructs an instance from a factory and a notifier.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public JVMItemProvider(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);
+
+ addNamePropertyDescriptor(object);
+ addVersionPropertyDescriptor(object);
+ addLabelPropertyDescriptor(object);
+ addAboutTextExtraPropertyDescriptor(object);
+ addVariantsPropertyDescriptor(object);
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This adds a property descriptor for the Name feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addNamePropertyDescriptor(Object object)
+ {
+ itemPropertyDescriptors.add(
+ createItemPropertyDescriptor(
+ ((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_JVM_name_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_JVM_name_feature", "_UI_JVM_type"),
+ ModelPackage.Literals.JVM__NAME,
+ 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_JVM_version_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_JVM_version_feature", "_UI_JVM_type"),
+ ModelPackage.Literals.JVM__VERSION,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This adds a property descriptor for the Label feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addLabelPropertyDescriptor(Object object)
+ {
+ itemPropertyDescriptors.add(
+ createItemPropertyDescriptor(
+ ((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_JVM_label_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_JVM_label_feature", "_UI_JVM_type"),
+ ModelPackage.Literals.JVM__LABEL,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This adds a property descriptor for the Variants feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addVariantsPropertyDescriptor(Object object)
+ {
+ itemPropertyDescriptors.add(
+ createItemPropertyDescriptor(
+ ((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_JVM_variants_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_JVM_variants_feature", "_UI_JVM_type"),
+ ModelPackage.Literals.JVM__VARIANTS,
+ true,
+ false,
+ true,
+ null,
+ null,
+ null));
+ }
+
+ /**
+ * This adds a property descriptor for the About Text Extra feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addAboutTextExtraPropertyDescriptor(Object object)
+ {
+ itemPropertyDescriptors.add(
+ createItemPropertyDescriptor(
+ ((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_JVM_aboutTextExtra_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_JVM_aboutTextExtra_feature", "_UI_JVM_type"),
+ ModelPackage.Literals.JVM__ABOUT_TEXT_EXTRA,
+ true,
+ true,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ 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(ModelPackage.Literals.TOUCHABLE__TOUCHPOINTS);
+ childrenFeatures.add(ModelPackage.Literals.JVM__VARIANTS);
+ }
+ 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);
+ }
+
+ /**
+ * This returns JVM.gif.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object)
+ {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/JVM"));
+ }
+
+ /**
+ * <!-- 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 NOT
+ */
+ @Override
+ public String getText(Object object)
+ {
+ JVM jvm = (JVM)object;
+ String name = jvm.getName();
+ String label = jvm.getLabel();
+ return "" + name + " - " + label;
+ }
+
+ /**
+ * 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(JVM.class))
+ {
+ case ModelPackage.JVM__NAME:
+ case ModelPackage.JVM__VERSION:
+ case ModelPackage.JVM__LABEL:
+ case ModelPackage.JVM__ABOUT_TEXT_EXTRA:
+ fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+ return;
+ case ModelPackage.JVM__TOUCHPOINTS:
+ case ModelPackage.JVM__VARIANTS:
+ 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(ModelPackage.Literals.TOUCHABLE__TOUCHPOINTS, ModelFactory.eINSTANCE.createTouchpoint()));
+
+ newChildDescriptors.add(createChildParameter(ModelPackage.Literals.JVM__VARIANTS, ModelFactory.eINSTANCE.createVariant()));
+ }
+
+}
diff --git a/plugins/org.eclipse.justj.codegen.edit/src/org/eclipse/justj/codegen/model/provider/ModelEditPlugin.java b/plugins/org.eclipse.justj.codegen.edit/src/org/eclipse/justj/codegen/model/provider/ModelEditPlugin.java
new file mode 100644
index 0000000..27d0697
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen.edit/src/org/eclipse/justj/codegen/model/provider/ModelEditPlugin.java
@@ -0,0 +1,102 @@
+/**
+ * Copyright (c) 2020 Eclipse contributors and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.eclipse.justj.codegen.model.provider;
+
+
+import org.eclipse.emf.common.EMFPlugin;
+import org.eclipse.emf.common.util.ResourceLocator;
+
+
+/**
+ * This is the central singleton for the Model edit plugin.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public final class ModelEditPlugin extends EMFPlugin
+{
+ /**
+ * Keep track of the singleton.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static final ModelEditPlugin INSTANCE = new ModelEditPlugin();
+
+ /**
+ * 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 ModelEditPlugin()
+ {
+ 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.justj.codegen.edit/src/org/eclipse/justj/codegen/model/provider/ModelItemProvider.java b/plugins/org.eclipse.justj.codegen.edit/src/org/eclipse/justj/codegen/model/provider/ModelItemProvider.java
new file mode 100644
index 0000000..2ef2133
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen.edit/src/org/eclipse/justj/codegen/model/provider/ModelItemProvider.java
@@ -0,0 +1,403 @@
+/**
+ * Copyright (c) 2020 Eclipse contributors and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.eclipse.justj.codegen.model.provider;
+
+
+import java.util.Collection;
+import java.util.List;
+
+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.ViewerNotification;
+import org.eclipse.justj.codegen.model.Model;
+import org.eclipse.justj.codegen.model.ModelFactory;
+import org.eclipse.justj.codegen.model.ModelPackage;
+
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.justj.codegen.model.Model} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ModelItemProvider extends CopyrightableItemProvider
+{
+ /**
+ * 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);
+
+ addNamePropertyDescriptor(object);
+ addLabelPropertyDescriptor(object);
+ addProviderPropertyDescriptor(object);
+ addProviderImageNamePropertyDescriptor(object);
+ addProviderImageDataPropertyDescriptor(object);
+ addAboutURLPropertyDescriptor(object);
+ addTargetPropertyDescriptor(object);
+ addSourcePropertyDescriptor(object);
+ addLocalCachePropertyDescriptor(object);
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This adds a property descriptor for the Name feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addNamePropertyDescriptor(Object object)
+ {
+ itemPropertyDescriptors.add(
+ createItemPropertyDescriptor(
+ ((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_Model_name_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_Model_name_feature", "_UI_Model_type"),
+ ModelPackage.Literals.MODEL__NAME,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This adds a property descriptor for the Label feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addLabelPropertyDescriptor(Object object)
+ {
+ itemPropertyDescriptors.add(
+ createItemPropertyDescriptor(
+ ((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_Model_label_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_Model_label_feature", "_UI_Model_type"),
+ ModelPackage.Literals.MODEL__LABEL,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This adds a property descriptor for the Provider feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addProviderPropertyDescriptor(Object object)
+ {
+ itemPropertyDescriptors.add(
+ createItemPropertyDescriptor(
+ ((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_Model_provider_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_Model_provider_feature", "_UI_Model_type"),
+ ModelPackage.Literals.MODEL__PROVIDER,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This adds a property descriptor for the Provider Image Name feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addProviderImageNamePropertyDescriptor(Object object)
+ {
+ itemPropertyDescriptors.add(
+ createItemPropertyDescriptor(
+ ((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_Model_providerImageName_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_Model_providerImageName_feature", "_UI_Model_type"),
+ ModelPackage.Literals.MODEL__PROVIDER_IMAGE_NAME,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This adds a property descriptor for the Provider Image Data feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addProviderImageDataPropertyDescriptor(Object object)
+ {
+ itemPropertyDescriptors.add(
+ createItemPropertyDescriptor(
+ ((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_Model_providerImageData_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_Model_providerImageData_feature", "_UI_Model_type"),
+ ModelPackage.Literals.MODEL__PROVIDER_IMAGE_DATA,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This adds a property descriptor for the About URL feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addAboutURLPropertyDescriptor(Object object)
+ {
+ itemPropertyDescriptors.add(
+ createItemPropertyDescriptor(
+ ((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_Model_aboutURL_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_Model_aboutURL_feature", "_UI_Model_type"),
+ ModelPackage.Literals.MODEL__ABOUT_URL,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This adds a property descriptor for the Target feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addTargetPropertyDescriptor(Object object)
+ {
+ itemPropertyDescriptors.add(
+ createItemPropertyDescriptor(
+ ((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_Model_target_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_Model_target_feature", "_UI_Model_type"),
+ ModelPackage.Literals.MODEL__TARGET,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This adds a property descriptor for the Source feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addSourcePropertyDescriptor(Object object)
+ {
+ itemPropertyDescriptors.add(
+ createItemPropertyDescriptor(
+ ((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_Model_source_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_Model_source_feature", "_UI_Model_type"),
+ ModelPackage.Literals.MODEL__SOURCE,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This adds a property descriptor for the Local Cache feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addLocalCachePropertyDescriptor(Object object)
+ {
+ itemPropertyDescriptors.add(
+ createItemPropertyDescriptor(
+ ((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_Model_localCache_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_Model_localCache_feature", "_UI_Model_type"),
+ ModelPackage.Literals.MODEL__LOCAL_CACHE,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ 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(ModelPackage.Literals.TOUCHABLE__TOUCHPOINTS);
+ childrenFeatures.add(ModelPackage.Literals.MODEL__JV_MS);
+ }
+ 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);
+ }
+
+ /**
+ * 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 NOT
+ */
+ @Override
+ public String getText(Object object)
+ {
+ Model model = (Model)object;
+ String name = model.getName();
+ String label = model.getLabel();
+ return "" + name + " - " + label;
+ }
+
+ /**
+ * 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 ModelPackage.MODEL__NAME:
+ case ModelPackage.MODEL__LABEL:
+ case ModelPackage.MODEL__PROVIDER:
+ case ModelPackage.MODEL__PROVIDER_IMAGE_NAME:
+ case ModelPackage.MODEL__PROVIDER_IMAGE_DATA:
+ case ModelPackage.MODEL__ABOUT_URL:
+ case ModelPackage.MODEL__TARGET:
+ case ModelPackage.MODEL__SOURCE:
+ case ModelPackage.MODEL__LOCAL_CACHE:
+ fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+ return;
+ case ModelPackage.MODEL__TOUCHPOINTS:
+ case ModelPackage.MODEL__JV_MS:
+ 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(ModelPackage.Literals.TOUCHABLE__TOUCHPOINTS, ModelFactory.eINSTANCE.createTouchpoint()));
+
+ newChildDescriptors.add(createChildParameter(ModelPackage.Literals.MODEL__JV_MS, ModelFactory.eINSTANCE.createJVM()));
+ }
+
+}
diff --git a/plugins/org.eclipse.justj.codegen.edit/src/org/eclipse/justj/codegen/model/provider/ModelItemProviderAdapterFactory.java b/plugins/org.eclipse.justj.codegen.edit/src/org/eclipse/justj/codegen/model/provider/ModelItemProviderAdapterFactory.java
new file mode 100644
index 0000000..94d2632
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen.edit/src/org/eclipse/justj/codegen/model/provider/ModelItemProviderAdapterFactory.java
@@ -0,0 +1,319 @@
+/**
+ * Copyright (c) 2020 Eclipse contributors and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.eclipse.justj.codegen.model.provider;
+
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+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.edit.provider.ChangeNotifier;
+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.IDisposable;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.INotifyChangedListener;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.justj.codegen.model.util.ModelAdapterFactory;
+
+
+/**
+ * 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 ModelItemProviderAdapterFactory extends ModelAdapterFactory implements ComposeableAdapterFactory, IChangeNotifier, IDisposable
+{
+ /**
+ * 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 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 ModelItemProviderAdapterFactory()
+ {
+ supportedTypes.add(IEditingDomainItemProvider.class);
+ supportedTypes.add(IStructuredItemContentProvider.class);
+ supportedTypes.add(ITreeItemContentProvider.class);
+ supportedTypes.add(IItemLabelProvider.class);
+ supportedTypes.add(IItemPropertySource.class);
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link org.eclipse.justj.codegen.model.Model} instances.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected ModelItemProvider modelItemProvider;
+
+ /**
+ * This creates an adapter for a {@link org.eclipse.justj.codegen.model.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.justj.codegen.model.JVM} instances.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected JVMItemProvider jvmItemProvider;
+
+ /**
+ * This creates an adapter for a {@link org.eclipse.justj.codegen.model.JVM}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Adapter createJVMAdapter()
+ {
+ if (jvmItemProvider == null)
+ {
+ jvmItemProvider = new JVMItemProvider(this);
+ }
+
+ return jvmItemProvider;
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link org.eclipse.justj.codegen.model.Variant} instances.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected VariantItemProvider variantItemProvider;
+
+ /**
+ * This creates an adapter for a {@link org.eclipse.justj.codegen.model.Variant}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Adapter createVariantAdapter()
+ {
+ if (variantItemProvider == null)
+ {
+ variantItemProvider = new VariantItemProvider(this);
+ }
+
+ return variantItemProvider;
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link org.eclipse.justj.codegen.model.Touchpoint} instances.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected TouchpointItemProvider touchpointItemProvider;
+
+ /**
+ * This creates an adapter for a {@link org.eclipse.justj.codegen.model.Touchpoint}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Adapter createTouchpointAdapter()
+ {
+ if (touchpointItemProvider == null)
+ {
+ touchpointItemProvider = new TouchpointItemProvider(this);
+ }
+
+ return touchpointItemProvider;
+ }
+
+ /**
+ * This returns the root adapter factory that contains this factory.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ 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
+ */
+ @Override
+ 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;
+ }
+
+ /**
+ * This adds a listener.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void addListener(INotifyChangedListener notifyChangedListener)
+ {
+ changeNotifier.addListener(notifyChangedListener);
+ }
+
+ /**
+ * This removes a listener.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void removeListener(INotifyChangedListener notifyChangedListener)
+ {
+ changeNotifier.removeListener(notifyChangedListener);
+ }
+
+ /**
+ * This delegates to {@link #changeNotifier} and to {@link #parentAdapterFactory}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ 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
+ */
+ @Override
+ public void dispose()
+ {
+ if (modelItemProvider != null)
+ {
+ modelItemProvider.dispose();
+ }
+ if (jvmItemProvider != null)
+ {
+ jvmItemProvider.dispose();
+ }
+ if (variantItemProvider != null)
+ {
+ variantItemProvider.dispose();
+ }
+ if (touchpointItemProvider != null)
+ {
+ touchpointItemProvider.dispose();
+ }
+ }
+
+}
diff --git a/plugins/org.eclipse.justj.codegen.edit/src/org/eclipse/justj/codegen/model/provider/TouchpointItemProvider.java b/plugins/org.eclipse.justj.codegen.edit/src/org/eclipse/justj/codegen/model/provider/TouchpointItemProvider.java
new file mode 100644
index 0000000..ddd4577
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen.edit/src/org/eclipse/justj/codegen/model/provider/TouchpointItemProvider.java
@@ -0,0 +1,318 @@
+/**
+ * Copyright (c) 2020 Eclipse contributors and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.eclipse.justj.codegen.model.provider;
+
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+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.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.edit.EMFEditPlugin;
+import org.eclipse.emf.edit.provider.AttributeValueWrapperItemProvider;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.ComposedImage;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+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.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.IUpdateableItemText;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ItemProviderAdapter;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+import org.eclipse.justj.codegen.model.ModelPackage;
+import org.eclipse.justj.codegen.model.Phase;
+import org.eclipse.justj.codegen.model.Touchpoint;
+
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.justj.codegen.model.Touchpoint} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class TouchpointItemProvider extends ItemProviderAdapter
+ implements
+ IEditingDomainItemProvider,
+ IStructuredItemContentProvider,
+ ITreeItemContentProvider,
+ IItemLabelProvider,
+ IItemPropertySource
+{
+ /**
+ * This constructs an instance from a factory and a notifier.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public TouchpointItemProvider(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);
+
+ addPhasePropertyDescriptor(object);
+ addInstructionsPropertyDescriptor(object);
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This adds a property descriptor for the Phase feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addPhasePropertyDescriptor(Object object)
+ {
+ itemPropertyDescriptors.add(
+ createItemPropertyDescriptor(
+ ((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_Touchpoint_phase_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_Touchpoint_phase_feature", "_UI_Touchpoint_type"),
+ ModelPackage.Literals.TOUCHPOINT__PHASE,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This adds a property descriptor for the Instructions feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addInstructionsPropertyDescriptor(Object object)
+ {
+ itemPropertyDescriptors.add(
+ createItemPropertyDescriptor(
+ ((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_Touchpoint_instructions_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_Touchpoint_instructions_feature", "_UI_Touchpoint_type"),
+ ModelPackage.Literals.TOUCHPOINT__INSTRUCTIONS,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ 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(ModelPackage.Literals.TOUCHPOINT__INSTRUCTIONS);
+ }
+ 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);
+ }
+
+ /**
+ * This returns Touchpoint.gif.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ @Override
+ public Object getImage(Object object)
+ {
+ Touchpoint touchpoint = (Touchpoint)object;
+ Phase phase = touchpoint.getPhase();
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/" + phase.getName()));
+ }
+
+ /**
+ * <!-- 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 NOT
+ */
+ @Override
+ public String getText(Object object)
+ {
+ Touchpoint touchpoint = (Touchpoint)object;
+ return touchpoint.getPhase().getLiteral();
+ }
+
+ /**
+ * 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(Touchpoint.class))
+ {
+ case ModelPackage.TOUCHPOINT__PHASE:
+ fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+ return;
+ case ModelPackage.TOUCHPOINT__INSTRUCTIONS:
+ 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(ModelPackage.Literals.TOUCHPOINT__INSTRUCTIONS, ""));
+ }
+
+ /**
+ * Return the resource locator for this item provider's resources.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public ResourceLocator getResourceLocator()
+ {
+ return ModelEditPlugin.INSTANCE;
+ }
+
+ @Override
+ public Object getCreateChildImage(Object owner, Object feature, Object child, Collection<?> selection)
+ {
+ List<Object> images = new ArrayList<Object>();
+ images.add(getImage("full/obj16/Instruction"));
+ images.add(EMFEditPlugin.INSTANCE.getImage("full/ovr16/CreateChild"));
+ return new ChildCreationComposedImage(images);
+ }
+
+ @Override
+ public String getCreateChildText(Object owner, Object feature, Object child, Collection<?> selection)
+ {
+ return "Instruction";
+ }
+
+ private static final class ChildCreationComposedImage extends ComposedImage
+ {
+ private ChildCreationComposedImage(Collection<?> images)
+ {
+ super(images);
+ }
+
+ @Override
+ public List<Point> getDrawPoints(Size size)
+ {
+ List<Point> result = super.getDrawPoints(size);
+ result.get(1).x = size.width - 7;
+ return result;
+ }
+ }
+
+ @Override
+ protected Object createWrapper(EObject object, EStructuralFeature feature, Object value, int index)
+ {
+ if (feature == ModelPackage.Literals.TOUCHPOINT__INSTRUCTIONS)
+ {
+ return new Instruction(value, object, index, adapterFactory, getResourceLocator());
+ }
+ else
+ {
+ return super.createWrapper(object, feature, value, index);
+ }
+ }
+
+ private static class Instruction extends AttributeValueWrapperItemProvider implements IUpdateableItemText
+ {
+ public Instruction(Object value, EObject owner, int index, AdapterFactory adapterFactory, ResourceLocator resourceLocator)
+ {
+ super(value, owner, ModelPackage.Literals.TOUCHPOINT__INSTRUCTIONS, index, adapterFactory, resourceLocator);
+ }
+
+ @Override
+ public void setText(Object object, String text)
+ {
+ List<IItemPropertyDescriptor> propertyDescriptors = getPropertyDescriptors(object);
+ propertyDescriptors.get(0).setPropertyValue(object, text);
+ }
+
+ @Override
+ public Object getImage(Object object)
+ {
+ return resourceLocator.getImage("full/obj16/Instruction");
+ }
+ }
+}
diff --git a/plugins/org.eclipse.justj.codegen.edit/src/org/eclipse/justj/codegen/model/provider/VariantItemProvider.java b/plugins/org.eclipse.justj.codegen.edit/src/org/eclipse/justj/codegen/model/provider/VariantItemProvider.java
new file mode 100644
index 0000000..bc5735d
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen.edit/src/org/eclipse/justj/codegen/model/provider/VariantItemProvider.java
@@ -0,0 +1,274 @@
+/**
+ * Copyright (c) 2020 Eclipse contributors and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.eclipse.justj.codegen.model.provider;
+
+
+import java.util.Collection;
+import java.util.List;
+
+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.ViewerNotification;
+import org.eclipse.justj.codegen.model.ModelFactory;
+import org.eclipse.justj.codegen.model.ModelPackage;
+import org.eclipse.justj.codegen.model.Variant;
+
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.justj.codegen.model.Variant} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class VariantItemProvider extends CopyrightableItemProvider
+{
+ /**
+ * This constructs an instance from a factory and a notifier.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public VariantItemProvider(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);
+
+ addOsPropertyDescriptor(object);
+ addArchPropertyDescriptor(object);
+ addLabelPropertyDescriptor(object);
+ addSourcePropertyDescriptor(object);
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This adds a property descriptor for the Os feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addOsPropertyDescriptor(Object object)
+ {
+ itemPropertyDescriptors.add(
+ createItemPropertyDescriptor(
+ ((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_Variant_os_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_Variant_os_feature", "_UI_Variant_type"),
+ ModelPackage.Literals.VARIANT__OS,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This adds a property descriptor for the Arch feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addArchPropertyDescriptor(Object object)
+ {
+ itemPropertyDescriptors.add(
+ createItemPropertyDescriptor(
+ ((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_Variant_arch_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_Variant_arch_feature", "_UI_Variant_type"),
+ ModelPackage.Literals.VARIANT__ARCH,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This adds a property descriptor for the Label feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addLabelPropertyDescriptor(Object object)
+ {
+ itemPropertyDescriptors.add(
+ createItemPropertyDescriptor(
+ ((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_Variant_label_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_Variant_label_feature", "_UI_Variant_type"),
+ ModelPackage.Literals.VARIANT__LABEL,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This adds a property descriptor for the Source feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addSourcePropertyDescriptor(Object object)
+ {
+ itemPropertyDescriptors.add(
+ createItemPropertyDescriptor(
+ ((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_Variant_source_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_Variant_source_feature", "_UI_Variant_type"),
+ ModelPackage.Literals.VARIANT__SOURCE,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ 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(ModelPackage.Literals.TOUCHABLE__TOUCHPOINTS);
+ }
+ 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);
+ }
+
+ /**
+ * This returns Variant.gif.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object)
+ {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/Variant"));
+ }
+
+ /**
+ * <!-- 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 NOT
+ */
+ @Override
+ public String getText(Object object)
+ {
+ Variant variant = (Variant)object;
+ String os = variant.getOs();
+ String arch = variant.getArch();
+ String label = variant.getLabel();
+ return "" + os + '.' + arch + " - " + label;
+ }
+
+ /**
+ * 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(Variant.class))
+ {
+ case ModelPackage.VARIANT__OS:
+ case ModelPackage.VARIANT__ARCH:
+ case ModelPackage.VARIANT__LABEL:
+ case ModelPackage.VARIANT__SOURCE:
+ fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+ return;
+ case ModelPackage.VARIANT__TOUCHPOINTS:
+ 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(ModelPackage.Literals.TOUCHABLE__TOUCHPOINTS, ModelFactory.eINSTANCE.createTouchpoint()));
+ }
+}
diff --git a/plugins/org.eclipse.justj.codegen.editor/.classpath b/plugins/org.eclipse.justj.codegen.editor/.classpath
new file mode 100644
index 0000000..eca7bdb
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen.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/JavaSE-1.8"/>
+ <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.justj.codegen.editor/.project b/plugins/org.eclipse.justj.codegen.editor/.project
new file mode 100644
index 0000000..4bfc3c4
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen.editor/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.justj.codegen.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.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ </natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.justj.codegen.editor/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.justj.codegen.editor/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..9f6ece8
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen.editor/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,8 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.release=disabled
+org.eclipse.jdt.core.compiler.source=1.8
diff --git a/plugins/org.eclipse.justj.codegen.editor/META-INF/MANIFEST.MF b/plugins/org.eclipse.justj.codegen.editor/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..9c435b3
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen.editor/META-INF/MANIFEST.MF
@@ -0,0 +1,20 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.justj.codegen.editor;singleton:=true
+Automatic-Module-Name: org.eclipse.justj.codegen.editor
+Bundle-Version: 0.1.0.qualifier
+Bundle-ClassPath: .
+Bundle-Activator: org.eclipse.justj.codegen.model.presentation.ModelEditorPlugin$Implementation
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Export-Package: org.eclipse.justj.codegen.model.presentation
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.core.resources;visibility:=reexport,
+ org.eclipse.justj.codegen.edit;visibility:=reexport,
+ org.eclipse.emf.ecore.xmi;visibility:=reexport,
+ org.eclipse.emf.edit.ui;visibility:=reexport,
+ org.eclipse.jface.text,
+ org.eclipse.ui.ide;visibility:=reexport
+Bundle-ActivationPolicy: lazy
diff --git a/plugins/org.eclipse.justj.codegen.editor/about.html b/plugins/org.eclipse.justj.codegen.editor/about.html
new file mode 100644
index 0000000..164f781
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen.editor/about.html
@@ -0,0 +1,36 @@
+<!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>November 30, 2017</p>
+ <h3>License</h3>
+
+ <p>
+ The Eclipse Foundation makes available all content in this plug-in
+ ("Content"). Unless otherwise indicated below, the Content
+ is provided to you under the terms and conditions of the Eclipse
+ Public License Version 2.0 ("EPL"). A copy of the EPL is
+ available at <a href="http://www.eclipse.org/legal/epl-2.0">http://www.eclipse.org/legal/epl-2.0</a>.
+ For purposes of the EPL, "Program" 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
+ ("Redistributor") and different terms and conditions may
+ apply to your use of any object code in the Content. Check the
+ Redistributor's license that was provided with the Content. If no such
+ license exists, contact the Redistributor. Unless otherwise indicated
+ below, the terms and conditions of the EPL still apply to any source
+ code in the Content and such source code may be obtained at <a
+ href="http://www.eclipse.org/">http://www.eclipse.org</a>.
+ </p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.justj.codegen.editor/about.mappings b/plugins/org.eclipse.justj.codegen.editor/about.mappings
new file mode 100644
index 0000000..9c84f0a
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen.editor/about.mappings
@@ -0,0 +1,2 @@
+0=${build.id}
+1=${git.commit}
diff --git a/plugins/org.eclipse.justj.codegen.editor/build.properties b/plugins/org.eclipse.justj.codegen.editor/build.properties
new file mode 100644
index 0000000..a9d3063
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen.editor/build.properties
@@ -0,0 +1,21 @@
+# Copyright (c) 2020 Eclipse contributors and others.
+#
+# This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License 2.0
+# which accompanies this distribution, and is available at
+# https://www.eclipse.org/legal/epl-2.0/
+#
+# SPDX-License-Identifier: EPL-2.0
+
+bin.includes = .,\
+ icons/,\
+ META-INF/,\
+ plugin.xml,\
+ plugin.properties,\
+ about.mappings,\
+ about.html
+jars.compile.order = .
+source.. = src/
+output.. = bin
+src.includes = about.mappings,\
+ about.html
diff --git a/plugins/org.eclipse.justj.codegen.editor/icons/full/obj16/ModelModelFile.gif b/plugins/org.eclipse.justj.codegen.editor/icons/full/obj16/ModelModelFile.gif
new file mode 100644
index 0000000..cd5e74f
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen.editor/icons/full/obj16/ModelModelFile.gif
Binary files differ
diff --git a/plugins/org.eclipse.justj.codegen.editor/icons/full/wizban/NewModel.gif b/plugins/org.eclipse.justj.codegen.editor/icons/full/wizban/NewModel.gif
new file mode 100644
index 0000000..b2beab0
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen.editor/icons/full/wizban/NewModel.gif
Binary files differ
diff --git a/plugins/org.eclipse.justj.codegen.editor/plugin.properties b/plugins/org.eclipse.justj.codegen.editor/plugin.properties
new file mode 100644
index 0000000..ac741d2
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen.editor/plugin.properties
@@ -0,0 +1,53 @@
+# Copyright (c) 2020 Eclipse contributors and others.
+#
+# This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License 2.0
+# which accompanies this distribution, and is available at
+# https://www.eclipse.org/legal/epl-2.0/
+#
+# SPDX-License-Identifier: EPL-2.0
+
+pluginName = JustJ Codegen Editor
+providerName = Eclipse JustJ
+
+_UI_ModelEditor_menu = &JRE Generator 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 = JustJ Tools Creation Wizards
+
+_UI_CreateModelError_message = Problems encountered in file "{0}"
+
+_UI_ModelModelWizard_label = JRE Generator Model
+_UI_ModelModelWizard_description = Create a new JRE Generator model
+
+_UI_ModelEditor_label = JRE Generator Editor
+
+_UI_ModelEditorFilenameDefaultBase = My
+_UI_ModelEditorFilenameExtensions = jregen
+
+_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?
+
diff --git a/plugins/org.eclipse.justj.codegen.editor/plugin.xml b/plugins/org.eclipse.justj.codegen.editor/plugin.xml
new file mode 100644
index 0000000..4672959
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen.editor/plugin.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+
+<!--
+ Copyright (c) 2020 Eclipse contributors and others.
+
+ This program and the accompanying materials
+ are made available under the terms of the Eclipse Public License 2.0
+ which accompanies this distribution, and is available at
+ https://www.eclipse.org/legal/epl-2.0/
+
+ SPDX-License-Identifier: EPL-2.0
+-->
+
+<plugin>
+
+ <extension point="org.eclipse.ui.newWizards">
+ <!-- @generated Model NOT -->
+ <category
+ id="org.eclipse.justj.codegen.Wizard.category.ID"
+ name="%_UI_Wizard_category"/>
+ <wizard
+ id="org.eclipse.justj.codegen.model.presentation.ModelModelWizardID"
+ name="%_UI_ModelModelWizard_label"
+ class="org.eclipse.justj.codegen.model.presentation.ModelModelWizard"
+ category="org.eclipse.justj.codegen.Wizard.category.ID"
+ icon="icons/full/obj16/ModelModelFile.gif">
+ <description>%_UI_ModelModelWizard_description</description>
+ <selection class="org.eclipse.core.resources.IResource"/>
+ </wizard>
+ </extension>
+
+ <extension point="org.eclipse.ui.editors">
+ <!-- @generated Model -->
+ <editor
+ id="org.eclipse.justj.codegen.model.presentation.ModelEditorID"
+ name="%_UI_ModelEditor_label"
+ icon="icons/full/obj16/ModelModelFile.gif"
+ class="org.eclipse.justj.codegen.model.presentation.ModelEditor"
+ contributorClass="org.eclipse.justj.codegen.model.presentation.ModelActionBarContributor">
+ <contentTypeBinding contentTypeId="org.eclipse.justj.codegen"/>
+ </editor>
+ </extension>
+
+</plugin>
diff --git a/plugins/org.eclipse.justj.codegen.editor/pom.xml b/plugins/org.eclipse.justj.codegen.editor/pom.xml
new file mode 100644
index 0000000..f6a1d93
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen.editor/pom.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Copyright (c) 2020 Eclipse contributors and others.
+
+This program and the accompanying materials
+are made available under the terms of the Eclipse Public License 2.0
+which accompanies this distribution, and is available at
+https://www.eclipse.org/legal/epl-2.0/
+
+SPDX-License-Identifier: EPL-2.0
+-->
+<project
+ xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.eclipse.justj</groupId>
+ <artifactId>org.eclipse.justj.plugins</artifactId>
+ <version>1.0.0-SNAPSHOT</version>
+ <relativePath>../../releng/org.eclipse.justj.tools.parent/plugins</relativePath>
+ </parent>
+
+ <groupId>org.eclipse.justj</groupId>
+ <artifactId>org.eclipse.justj.codegen.editor</artifactId>
+ <version>0.1.0-SNAPSHOT</version>
+ <packaging>eclipse-plugin</packaging>
+
+ <build>
+ <resources>
+ <resource>
+ <directory>.</directory>
+ <filtering>true</filtering>
+ <includes>
+ <include>about.mappings</include>
+ </includes>
+ </resource>
+ </resources>
+ </build>
+
+</project>
diff --git a/plugins/org.eclipse.justj.codegen.editor/src/org/eclipse/justj/codegen/model/presentation/ModelActionBarContributor.java b/plugins/org.eclipse.justj.codegen.editor/src/org/eclipse/justj/codegen/model/presentation/ModelActionBarContributor.java
new file mode 100644
index 0000000..70bfd24
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen.editor/src/org/eclipse/justj/codegen/model/presentation/ModelActionBarContributor.java
@@ -0,0 +1,627 @@
+/**
+ * Copyright (c) 2020 Eclipse contributors and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.eclipse.justj.codegen.model.presentation;
+
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.concurrent.atomic.AtomicReference;
+
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.emf.common.ui.viewer.IViewerProvider;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.emf.edit.command.ChangeCommand;
+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.ExpandAllAction;
+import org.eclipse.emf.edit.ui.action.FindAction;
+import org.eclipse.emf.edit.ui.action.LoadResourceAction;
+import org.eclipse.emf.edit.ui.action.RevertAction;
+import org.eclipse.emf.edit.ui.action.ValidateAction;
+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.dialogs.ErrorDialog;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.dialogs.ProgressMonitorDialog;
+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.justj.codegen.model.Model;
+import org.eclipse.justj.codegen.model.util.Generator;
+import org.eclipse.justj.codegen.model.util.Reconciler;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.PartInitException;
+
+
+/**
+ * This is the action bar contributor for the Model model editor.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ModelActionBarContributor 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(ModelEditorPlugin.INSTANCE.getString("_UI_ShowPropertiesView_menu_item"))
+ {
+ @Override
+ public void run()
+ {
+ try
+ {
+ getPage().showView("org.eclipse.ui.views.PropertySheet");
+ }
+ catch (PartInitException exception)
+ {
+ ModelEditorPlugin.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(ModelEditorPlugin.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();
+ }
+ }
+ }
+ };
+
+ /**
+ * 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 GenerateAction generateAction = new GenerateAction();
+
+ protected ReconcileAction reconcileAction = new ReconcileAction();
+
+ /**
+ * This creates an instance of the contributor.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public ModelActionBarContributor()
+ {
+ super(ADDITIONS_LAST_STYLE);
+ loadResourceAction = new LoadResourceAction();
+ validateAction = new ValidateAction();
+ liveValidationAction = new DiagnosticDecorator.LiveValidator.LiveValidationAction(ModelEditorPlugin.getPlugin().getDialogSettings());
+ controlAction = new ControlAction();
+ findAction = FindAction.create();
+ revertAction = new RevertAction();
+ expandAllAction = new ExpandAllAction();
+ collapseAllAction = new CollapseAllAction();
+ }
+
+ /**
+ * This adds Separators for editor additions to the tool bar.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void contributeToToolBar(IToolBarManager toolBarManager)
+ {
+ super.contributeToToolBar(toolBarManager);
+ toolBarManager.add(new Separator("model-settings"));
+ toolBarManager.add(new Separator("model-additions"));
+ }
+
+ /**
+ * 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
+ */
+ @Override
+ public void contributeToMenu(IMenuManager menuManager)
+ {
+ super.contributeToMenu(menuManager);
+
+ IMenuManager submenuManager = new MenuManager(ModelEditorPlugin.INSTANCE.getString("_UI_ModelEditor_menu"), "org.eclipse.justj.codegen.modelMenuID");
+ 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(ModelEditorPlugin.INSTANCE.getString("_UI_CreateChild_menu_item"));
+ submenuManager.insertBefore("additions", createChildMenuManager);
+
+ // Prepare for CreateSibling item addition or removal.
+ //
+ createSiblingMenuManager = new MenuManager(ModelEditorPlugin.INSTANCE.getString("_UI_CreateSibling_menu_item"));
+ submenuManager.insertBefore("additions", createSiblingMenuManager);
+
+ // Force an update because Eclipse hides empty menus now.
+ //
+ submenuManager.addMenuListener(new IMenuListener()
+ {
+ @Override
+ public void menuAboutToShow(IMenuManager menuManager)
+ {
+ menuManager.updateAll(true);
+ }
+ });
+
+ addGlobalActions(submenuManager);
+ }
+
+ /**
+ * When the active editor changes, this remembers the change and registers with it as a selection provider.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void setActiveEditor(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()));
+ }
+ }
+ }
+
+ /**
+ * 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
+ */
+ @Override
+ 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
+ */
+ protected Collection<IAction> generateCreateChildActions(Collection<?> descriptors, ISelection selection)
+ {
+ Collection<IAction> actions = new ArrayList<IAction>();
+ if (descriptors != null)
+ {
+ for (Object descriptor : descriptors)
+ {
+ actions.add(new CreateChildAction(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
+ */
+ protected Collection<IAction> generateCreateSiblingActions(Collection<?> descriptors, ISelection selection)
+ {
+ Collection<IAction> actions = new ArrayList<IAction>();
+ if (descriptors != null)
+ {
+ for (Object descriptor : descriptors)
+ {
+ actions.add(new CreateSiblingAction(activeEditorPart, selection, descriptor));
+ }
+ }
+ return actions;
+ }
+
+ /**
+ * 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
+ */
+ protected void populateManager(IContributionManager manager, Collection<? extends IAction> actions, String contributionID)
+ {
+ if (actions != null)
+ {
+ for (IAction action : actions)
+ {
+ 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(ModelEditorPlugin.INSTANCE.getString("_UI_CreateChild_menu_item"));
+ populateManager(submenuManager, createChildActions, null);
+ menuManager.insertBefore("edit", submenuManager);
+
+ submenuManager = new MenuManager(ModelEditorPlugin.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
+ */
+ protected void addGlobalActionsGen(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);
+ }
+
+ @Override
+ public void addGlobalActions(IMenuManager menuManager)
+ {
+ addGlobalActionsGen(menuManager);
+ boolean hasSettings = menuManager.find("settings") != null;
+ menuManager.insertBefore(hasSettings ? "settings" : "edit", generateAction);
+ menuManager.insertBefore(hasSettings ? "settings" : "edit", reconcileAction);
+ if (!hasSettings)
+ {
+ menuManager.insertBefore("edit", new Separator());
+ }
+ }
+
+ /**
+ * 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;
+ }
+
+ private class GenerateAction extends Action
+ {
+ public GenerateAction()
+ {
+ super("&Generate");
+ }
+
+ @Override
+ public void run()
+ {
+ Model model = (Model)((IEditingDomainProvider)activeEditorPart).getEditingDomain().getResourceSet().getResources().get(0).getContents().get(0);
+
+ System.err.println("###" + model.eResource().getURI());
+ System.err.println("###" + model.getTarget());
+ Generator generator = new Generator(model);
+ System.err.println("###>" + generator.getTarget());
+
+ Shell shell = activeEditorPart.getSite().getShell();
+ if (MessageDialog.openConfirm(shell, "Generator Confirmation", "The results will be generated to '" + generator.getTarget() + "'"))
+ {
+ try
+ {
+ new ProgressMonitorDialog(activeEditorPart.getSite().getShell()).run(true, true, monitor ->
+ {
+ try
+ {
+ generator.generate(monitor);
+ ResourcesPlugin.getWorkspace().getRoot().refreshLocal(IResource.DEPTH_INFINITE, monitor);
+ }
+ catch (Exception exception)
+ {
+ new InvocationTargetException(exception);
+ }
+ });
+ }
+ catch (Exception exception)
+ {
+ ModelEditorPlugin.INSTANCE.log(exception);
+ }
+ }
+ }
+ }
+
+ private class ReconcileAction extends Action
+ {
+ public ReconcileAction()
+ {
+ super("&Reconcile");
+ }
+
+ @Override
+ public void run()
+ {
+ EditingDomain editingDomain = ((IEditingDomainProvider)activeEditorPart).getEditingDomain();
+ Model model = (Model)editingDomain.getResourceSet().getResources().get(0).getContents().get(0);
+
+ System.err.println("###" + model.eResource().getURI());
+ System.err.println("###" + model.getTarget());
+ Reconciler reconciler = new Reconciler(model);
+
+ Shell shell = activeEditorPart.getSite().getShell();
+ if (MessageDialog.openConfirm(shell, "Reconciler Confirmation", "The model will be updated from '" + reconciler.getSource() + "'"))
+ {
+ AtomicReference<Model> reconciledModelReference = new AtomicReference<Model>();
+ try
+ {
+ new ProgressMonitorDialog(activeEditorPart.getSite().getShell()).run(true, true, monitor ->
+ {
+ try
+ {
+ reconciledModelReference.set(reconciler.reconcile(monitor));
+ }
+ catch (Exception exception)
+ {
+ throw new RuntimeException(exception);
+ }
+ });
+
+ Model reconciledModel = reconciledModelReference.get();
+ if (reconciledModel != null && !EcoreUtil.equals(model, reconciledModel))
+ {
+ editingDomain.getCommandStack().execute(new ChangeCommand(Collections.singleton(model.eResource()))
+ {
+ {
+ setLabel("Reconcile");
+ }
+
+ @Override
+ protected void doExecute()
+ {
+ EcoreUtil.replace(model, reconciledModel);
+ }
+ });
+ }
+ }
+ catch (Exception exception)
+ {
+ ModelEditorPlugin.INSTANCE.log(exception);
+ Throwable throwable = exception;
+ if (exception instanceof InvocationTargetException)
+ {
+ throwable = ((InvocationTargetException)exception).getTargetException();
+ }
+
+ ErrorDialog.openError(
+ shell,
+ "Reconciliation Problems",
+ "Reconciliation failed",
+ new Status(IStatus.ERROR, ModelEditorPlugin.INSTANCE.getSymbolicName(), 1, throwable.getLocalizedMessage() + "\n\nSee the error log for more details", throwable));
+ }
+ }
+ }
+ }
+}
diff --git a/plugins/org.eclipse.justj.codegen.editor/src/org/eclipse/justj/codegen/model/presentation/ModelEditor.java b/plugins/org.eclipse.justj.codegen.editor/src/org/eclipse/justj/codegen/model/presentation/ModelEditor.java
new file mode 100644
index 0000000..e50103d
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen.editor/src/org/eclipse/justj/codegen/model/presentation/ModelEditor.java
@@ -0,0 +1,1814 @@
+/**
+ * Copyright (c) 2020 Eclipse contributors and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.eclipse.justj.codegen.model.presentation;
+
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.EventObject;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+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.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.NullProgressMonitor;
+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.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+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.URI;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.util.EContentAdapter;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+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.ReflectiveItemProviderAdapterFactory;
+import org.eclipse.emf.edit.provider.resource.ResourceItemProviderAdapterFactory;
+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.DiagnosticDecorator;
+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.util.IRevertablePart;
+import org.eclipse.emf.edit.ui.view.ExtendedPropertySheetPage;
+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.MessageDialog;
+import org.eclipse.jface.dialogs.ProgressMonitorDialog;
+import org.eclipse.jface.text.IFindReplaceTarget;
+import org.eclipse.jface.util.LocalSelectionTransfer;
+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.StructuredSelection;
+import org.eclipse.jface.viewers.StructuredViewer;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.justj.codegen.model.provider.ModelItemProviderAdapterFactory;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.CTabFolder;
+import org.eclipse.swt.dnd.DND;
+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.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Menu;
+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.PartInitException;
+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.views.contentoutline.ContentOutline;
+import org.eclipse.ui.views.contentoutline.ContentOutlinePage;
+import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
+import org.eclipse.ui.views.properties.IPropertySheetPage;
+import org.eclipse.ui.views.properties.PropertySheet;
+import org.eclipse.ui.views.properties.PropertySheetPage;
+
+
+/**
+ * This is an example of a Model model editor.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ModelEditor extends MultiPageEditorPart implements IEditingDomainProvider, ISelectionProvider, IMenuListener, IViewerProvider, IGotoMarker, IRevertablePart
+{
+ /**
+ * 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()
+ {
+ @Override
+ public void partActivated(IWorkbenchPart p)
+ {
+ if (p instanceof ContentOutline)
+ {
+ if (((ContentOutline)p).getCurrentPage() == contentOutlinePage)
+ {
+ getActionBarContributor().setActiveEditor(ModelEditor.this);
+
+ setCurrentViewer(contentOutlineViewer);
+ }
+ }
+ else if (p instanceof PropertySheet)
+ {
+ if (propertySheetPages.contains(((PropertySheet)p).getCurrentPage()))
+ {
+ getActionBarContributor().setActiveEditor(ModelEditor.this);
+ handleActivate();
+ }
+ }
+ else if (p == ModelEditor.this)
+ {
+ handleActivate();
+ }
+ }
+
+ @Override
+ public void partBroughtToTop(IWorkbenchPart p)
+ {
+ // Ignore.
+ }
+
+ @Override
+ public void partClosed(IWorkbenchPart p)
+ {
+ // Ignore.
+ }
+
+ @Override
+ public void partDeactivated(IWorkbenchPart p)
+ {
+ // Ignore.
+ }
+
+ @Override
+ 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()
+ {
+ @Override
+ 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()
+ {
+ @Override
+ 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>();
+
+ @Override
+ 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.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()
+ {
+ @Override
+ public void run()
+ {
+ removedResources.addAll(visitor.getRemovedResources());
+ if (!isDirty())
+ {
+ getSite().getPage().closeEditor(ModelEditor.this, false);
+ }
+ }
+ });
+ }
+
+ if (!visitor.getChangedResources().isEmpty())
+ {
+ getSite().getShell().getDisplay().asyncExec(new Runnable()
+ {
+ @Override
+ public void run()
+ {
+ changedResources.addAll(visitor.getChangedResources());
+ if (getSite().getPage().getActiveEditor() == ModelEditor.this)
+ {
+ handleActivate();
+ }
+ }
+ });
+ }
+ }
+ catch (CoreException exception)
+ {
+ ModelEditorPlugin.INSTANCE.log(exception);
+ }
+ }
+ };
+
+ /**
+ * 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(ModelEditor.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.justj.codegen.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)
+ {
+ ModelEditorPlugin.INSTANCE.log(exception);
+ }
+ }
+
+ if (markerHelper.hasMarkers(editingDomain.getResourceSet()))
+ {
+ try
+ {
+ markerHelper.updateMarkers(diagnostic);
+ }
+ catch (CoreException exception)
+ {
+ ModelEditorPlugin.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 ModelEditor()
+ {
+ super();
+ initializeEditingDomain();
+ }
+
+ /**
+ * This sets up the editing domain for the model editor.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ 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 ModelItemProviderAdapterFactory());
+ 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.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()
+ {
+ @Override
+ public void commandStackChanged(final EventObject event)
+ {
+ getContainer().getDisplay().asyncExec(new Runnable()
+ {
+ @Override
+ 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() == null || 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>());
+ }
+
+ /**
+ * 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()
+ {
+ @Override
+ 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
+ */
+ @Override
+ 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.
+ //
+ @Override
+ 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
+ */
+ @Override
+ 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
+ */
+ 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));
+ }
+
+ /**
+ * 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 createModel()
+ {
+ 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);
+ }
+
+ /**
+ * 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.justj.codegen.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.justj.codegen.editor", 0, getString("_UI_CreateModelError_message", resource.getURI()), new Object []{ exception });
+ }
+ else
+ {
+ return Diagnostic.OK_INSTANCE;
+ }
+ }
+
+ /**
+ * 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.
+ //
+ Tree tree = new Tree(getContainer(), SWT.MULTI);
+ selectionViewer = new TreeViewer(tree);
+ setCurrentViewer(selectionViewer);
+
+ selectionViewer.setUseHashlookup(true);
+ selectionViewer.setAutoExpandLevel(3);
+ selectionViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+ selectionViewer.setLabelProvider(
+ new DecoratingColumLabelProvider(
+ new AdapterFactoryLabelProvider(adapterFactory),
+ new DiagnosticDecorator(editingDomain, selectionViewer, ModelEditorPlugin.getPlugin().getDialogSettings())));
+ selectionViewer.setInput(editingDomain.getResourceSet().getResources().get(0));
+ selectionViewer.setSelection(new StructuredSelection(editingDomain.getResourceSet().getResources().get(0)), true);
+
+ new AdapterFactoryTreeEditor(selectionViewer.getTree(), adapterFactory).grabHorizontal = true;
+ new ColumnViewerInformationControlToolTipSupport(selectionViewer, new DiagnosticDecorator.EditingDomainLocationListener(editingDomain, selectionViewer));
+
+ createContextMenuFor(selectionViewer);
+ int pageIndex = addPage(tree);
+ setPageText(pageIndex, getString("_UI_SelectionPage_label"));
+
+ getSite().getShell().getDisplay().asyncExec(new Runnable()
+ {
+ @Override
+ public void run()
+ {
+ if (!getContainer().isDisposed())
+ {
+ setActivePage(0);
+ }
+ }
+ });
+ }
+
+ // 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()
+ {
+ @Override
+ public void run()
+ {
+ updateProblemIndication();
+ }
+ });
+ }
+
+ /**
+ * 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, ModelEditorPlugin.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 DecoratingColumLabelProvider(
+ new AdapterFactoryLabelProvider(adapterFactory),
+ new DiagnosticDecorator(editingDomain, contentOutlineViewer, ModelEditorPlugin.getPlugin().getDialogSettings())));
+ contentOutlineViewer.setInput(editingDomain.getResourceSet());
+
+ new ColumnViewerInformationControlToolTipSupport(contentOutlineViewer, new DiagnosticDecorator.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.
+ //
+ @Override
+ public void selectionChanged(SelectionChangedEvent event)
+ {
+ handleContentOutlineSelection(event.getSelection());
+ }
+ });
+ }
+
+ return contentOutlinePage;
+ }
+
+ /**
+ * This accesses a cached version of the property sheet.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public IPropertySheetPage getPropertySheetPage()
+ {
+ PropertySheetPage propertySheetPage = new ExtendedPropertySheetPage(
+ editingDomain,
+ ExtendedPropertySheetPage.Decoration.LIVE,
+ ModelEditorPlugin.getPlugin().getDialogSettings(),
+ 0,
+ true)
+ {
+ @Override
+ public void setSelectionToViewer(List<?> selection)
+ {
+ ModelEditor.this.setSelectionToViewer(selection);
+ ModelEditor.this.setFocus();
+ }
+
+ @Override
+ public void setActionBars(IActionBars actionBars)
+ {
+ super.setActionBars(actionBars);
+ getActionBarContributor().shareGlobalActions(this, actionBars);
+ }
+ };
+ propertySheetPage.setPropertySourceProvider(new AdapterFactoryContentProvider(adapterFactory));
+ 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 IRevertablePart}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void doRevert()
+ {
+ DiagnosticDecorator.cancel(editingDomain);
+
+ ResourceSet resourceSet = editingDomain.getResourceSet();
+ List<Resource> resources = resourceSet.getResources();
+ List<Resource> unloadedResources = new ArrayList<Resource>();
+ updateProblemIndication = false;
+ for (int i = 0; i < resources.size(); ++i)
+ {
+ Resource resource = resources.get(i);
+ if (resource.isLoaded())
+ {
+ resource.unload();
+ unloadedResources.add(resource);
+ }
+ }
+
+ resourceToDiagnosticMap.clear();
+ for (Resource resource : unloadedResources)
+ {
+ try
+ {
+ resource.load(resourceSet.getLoadOptions());
+ }
+ catch (IOException exception)
+ {
+ if (!resourceToDiagnosticMap.containsKey(resource))
+ {
+ resourceToDiagnosticMap.put(resource, analyzeResourceProblems(resource, exception));
+ }
+ }
+ }
+
+ editingDomain.getCommandStack().flush();
+
+ if (AdapterFactoryEditingDomain.isStale(editorSelection))
+ {
+ setSelection(StructuredSelection.EMPTY);
+ }
+
+ updateProblemIndication = true;
+ updateProblemIndication();
+ }
+
+ /**
+ * 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.
+ //
+ ModelEditorPlugin.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
+ */
+ @Override
+ 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
+ */
+ @Override
+ public void addSelectionChangedListener(ISelectionChangedListener listener)
+ {
+ selectionChangedListeners.add(listener);
+ }
+
+ /**
+ * This implements {@link org.eclipse.jface.viewers.ISelectionProvider}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ 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
+ */
+ @Override
+ 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
+ */
+ @Override
+ 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 ModelEditorPlugin.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 ModelEditorPlugin.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
+ */
+ @Override
+ 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.justj.codegen.editor/src/org/eclipse/justj/codegen/model/presentation/ModelEditorPlugin.java b/plugins/org.eclipse.justj.codegen.editor/src/org/eclipse/justj/codegen/model/presentation/ModelEditorPlugin.java
new file mode 100644
index 0000000..0d367a3
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen.editor/src/org/eclipse/justj/codegen/model/presentation/ModelEditorPlugin.java
@@ -0,0 +1,103 @@
+/**
+ * Copyright (c) 2020 Eclipse contributors and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.eclipse.justj.codegen.model.presentation;
+
+
+import org.eclipse.emf.common.EMFPlugin;
+import org.eclipse.emf.common.ui.EclipseUIPlugin;
+import org.eclipse.emf.common.util.ResourceLocator;
+
+
+/**
+ * This is the central singleton for the Model editor plugin.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public final class ModelEditorPlugin extends EMFPlugin
+{
+ /**
+ * Keep track of the singleton.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static final ModelEditorPlugin INSTANCE = new ModelEditorPlugin();
+
+ /**
+ * 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 ModelEditorPlugin()
+ {
+ 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 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.justj.codegen.editor/src/org/eclipse/justj/codegen/model/presentation/ModelModelWizard.java b/plugins/org.eclipse.justj.codegen.editor/src/org/eclipse/justj/codegen/model/presentation/ModelModelWizard.java
new file mode 100644
index 0000000..84921a5
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen.editor/src/org/eclipse/justj/codegen/model/presentation/ModelModelWizard.java
@@ -0,0 +1,659 @@
+/**
+ * Copyright (c) 2020 Eclipse contributors and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.eclipse.justj.codegen.model.presentation;
+
+
+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;
+
+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.core.runtime.Platform;
+import org.eclipse.emf.common.CommonPlugin;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EClass;
+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.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.justj.codegen.model.ModelFactory;
+import org.eclipse.justj.codegen.model.ModelPackage;
+import org.eclipse.justj.codegen.model.provider.ModelEditPlugin;
+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;
+
+
+/**
+ * This is a simple wizard for creating a new model file.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ModelModelWizard 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(ModelEditorPlugin.INSTANCE.getString("_UI_ModelEditorFilenameExtensions").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 = ModelEditorPlugin.INSTANCE.getString("_UI_ModelEditorFilenameExtensions").replaceAll("\\s*,\\s*", ", ");
+
+ /**
+ * This caches an instance of the model package.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected ModelPackage modelPackage = ModelPackage.eINSTANCE;
+
+ /**
+ * This caches an instance of the model factory.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected ModelFactory modelFactory = modelPackage.getModelFactory();
+
+ /**
+ * This is the file creation page.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected ModelModelWizardNewFileCreationPage newFileCreationPage;
+
+ /**
+ * This is the initial object creation page.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected ModelModelWizardInitialObjectCreationPage 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
+ */
+ @Override
+ public void init(IWorkbench workbench, IStructuredSelection selection)
+ {
+ this.workbench = workbench;
+ this.selection = selection;
+ setWindowTitle(ModelEditorPlugin.INSTANCE.getString("_UI_Wizard_label"));
+ setDefaultPageImageDescriptor(ExtendedImageRegistry.INSTANCE.getImageDescriptor(ModelEditorPlugin.INSTANCE.getImage("full/wizban/NewModel")));
+ }
+
+ /**
+ * Returns the names of the types that can be created as the root object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ protected Collection<String> getInitialObjectNames()
+ {
+ if (initialObjectNames == null)
+ {
+ initialObjectNames = new ArrayList<String>();
+ initialObjectNames.add("Model");
+ 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)modelPackage.getEClassifier(initialObjectCreationPage.getInitialObjectName());
+ EObject rootObject = modelFactory.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, ModelPackage.eCONTENT_TYPE);
+
+ // 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)
+ {
+ ModelEditorPlugin.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()
+ {
+ @Override
+ 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(), Platform.getContentTypeManager().getContentType(ModelPackage.eCONTENT_TYPE)).getId());
+ }
+ catch (PartInitException exception)
+ {
+ MessageDialog.openError(workbenchWindow.getShell(), ModelEditorPlugin.INSTANCE.getString("_UI_OpenEditorError_label"), exception.getMessage());
+ return false;
+ }
+
+ return true;
+ }
+ catch (Exception exception)
+ {
+ ModelEditorPlugin.INSTANCE.log(exception);
+ return false;
+ }
+ }
+
+ /**
+ * This is the one page of the wizard.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public class ModelModelWizardNewFileCreationPage extends WizardNewFileCreationPage
+ {
+ /**
+ * Pass in the selection.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public ModelModelWizardNewFileCreationPage(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(ModelEditorPlugin.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 ModelModelWizardInitialObjectCreationPage 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 ModelModelWizardInitialObjectCreationPage(String pageId)
+ {
+ super(pageId);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ 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(ModelEditorPlugin.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(ModelEditorPlugin.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()
+ {
+ @Override
+ 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 ModelEditPlugin.INSTANCE.getString("_UI_" + typeName + "_type");
+ }
+ catch (MissingResourceException mre)
+ {
+ ModelEditorPlugin.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(ModelEditorPlugin.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 ModelModelWizardNewFileCreationPage("Whatever", selection);
+ newFileCreationPage.setTitle(ModelEditorPlugin.INSTANCE.getString("_UI_ModelModelWizard_label"));
+ newFileCreationPage.setDescription(ModelEditorPlugin.INSTANCE.getString("_UI_ModelModelWizard_description"));
+ newFileCreationPage.setFileName(ModelEditorPlugin.INSTANCE.getString("_UI_ModelEditorFilenameDefaultBase") + "." + 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 = ModelEditorPlugin.INSTANCE.getString("_UI_ModelEditorFilenameDefaultBase");
+ 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 ModelModelWizardInitialObjectCreationPage("Whatever2");
+ initialObjectCreationPage.setTitle(ModelEditorPlugin.INSTANCE.getString("_UI_ModelModelWizard_label"));
+ initialObjectCreationPage.setDescription(ModelEditorPlugin.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.justj.codegen/.classpath b/plugins/org.eclipse.justj.codegen/.classpath
new file mode 100644
index 0000000..eca7bdb
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/.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/JavaSE-1.8"/>
+ <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.justj.codegen/.jetproperties b/plugins/org.eclipse.justj.codegen/.jetproperties
new file mode 100644
index 0000000..5585019
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/.jetproperties
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<jet-settings>
+ <template-container>templates</template-container> <source-container>src</source-container>
+</jet-settings>
diff --git a/plugins/org.eclipse.justj.codegen/.project b/plugins/org.eclipse.justj.codegen/.project
new file mode 100644
index 0000000..ebf5123
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/.project
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.justj.codegen</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.emf.codegen.JETBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.emf.codegen.jet.IJETNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ </natures>
+ <filteredResources>
+ <filter>
+ <id>1587539265552</id>
+ <name></name>
+ <type>26</type>
+ <matcher>
+ <id>org.eclipse.ui.ide.multiFilter</id>
+ <arguments>1.0-name-matches-false-false-target</arguments>
+ </matcher>
+ </filter>
+ </filteredResources>
+</projectDescription>
diff --git a/plugins/org.eclipse.justj.codegen/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.justj.codegen/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..9f6ece8
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,8 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.release=disabled
+org.eclipse.jdt.core.compiler.source=1.8
diff --git a/plugins/org.eclipse.justj.codegen/META-INF/MANIFEST.MF b/plugins/org.eclipse.justj.codegen/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..f8964f0
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/META-INF/MANIFEST.MF
@@ -0,0 +1,27 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.justj.codegen;singleton:=true
+Automatic-Module-Name: org.eclipse.justj.codegen
+Bundle-Version: 0.1.0.qualifier
+Bundle-ClassPath: .
+Bundle-Activator: org.eclipse.justj.codegen.model.ModelPlugin$Implementation
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Export-Package: org.eclipse.justj.codegen.model,
+ org.eclipse.justj.codegen.model.impl,
+ org.eclipse.justj.codegen.model.util,
+ org.eclipse.justj.codegen.templates,
+ org.eclipse.justj.codegen.templates.feature,
+ org.eclipse.justj.codegen.templates.fragment,
+ org.eclipse.justj.codegen.templates.plugin,
+ org.eclipse.justj.codegen.templates.releng.parent,
+ org.eclipse.justj.codegen.templates.releng.parent.features,
+ org.eclipse.justj.codegen.templates.releng.parent.plugins,
+ org.eclipse.justj.codegen.templates.releng.site
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.emf.ecore;visibility:=reexport,
+ org.eclipse.emf.ecore.xmi;visibility:=reexport,
+ org.apache.commons.compress
+Bundle-ActivationPolicy: lazy
diff --git a/plugins/org.eclipse.justj.codegen/about.html b/plugins/org.eclipse.justj.codegen/about.html
new file mode 100644
index 0000000..164f781
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/about.html
@@ -0,0 +1,36 @@
+<!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>November 30, 2017</p>
+ <h3>License</h3>
+
+ <p>
+ The Eclipse Foundation makes available all content in this plug-in
+ ("Content"). Unless otherwise indicated below, the Content
+ is provided to you under the terms and conditions of the Eclipse
+ Public License Version 2.0 ("EPL"). A copy of the EPL is
+ available at <a href="http://www.eclipse.org/legal/epl-2.0">http://www.eclipse.org/legal/epl-2.0</a>.
+ For purposes of the EPL, "Program" 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
+ ("Redistributor") and different terms and conditions may
+ apply to your use of any object code in the Content. Check the
+ Redistributor's license that was provided with the Content. If no such
+ license exists, contact the Redistributor. Unless otherwise indicated
+ below, the terms and conditions of the EPL still apply to any source
+ code in the Content and such source code may be obtained at <a
+ href="http://www.eclipse.org/">http://www.eclipse.org</a>.
+ </p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.justj.codegen/about.mappings b/plugins/org.eclipse.justj.codegen/about.mappings
new file mode 100644
index 0000000..9c84f0a
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/about.mappings
@@ -0,0 +1,2 @@
+0=${build.id}
+1=${git.commit}
diff --git a/plugins/org.eclipse.justj.codegen/build.properties b/plugins/org.eclipse.justj.codegen/build.properties
new file mode 100644
index 0000000..f4a9a7d
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/build.properties
@@ -0,0 +1,22 @@
+# Copyright (c) 2020 Eclipse contributors and others.
+#
+# This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License 2.0
+# which accompanies this distribution, and is available at
+# https://www.eclipse.org/legal/epl-2.0/
+#
+# SPDX-License-Identifier: EPL-2.0
+
+bin.includes = .,\
+ model/,\
+ META-INF/,\
+ plugin.xml,\
+ plugin.properties,\
+ templates/,\
+ about.mappings,\
+ about.html
+jars.compile.order = .
+source.. = src/
+output.. = bin/
+src.includes = about.html,\
+ about.mappings
diff --git a/plugins/org.eclipse.justj.codegen/model/Model.ecore b/plugins/org.eclipse.justj.codegen/model/Model.ecore
new file mode 100644
index 0000000..c458d03
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/model/Model.ecore
@@ -0,0 +1,97 @@
+<?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="model" nsURI="http://www.eclipse.org/just/2020/Model" nsPrefix="model">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="copyrightText" value="Copyright (c) 2020 Eclipse contributors and others.

This program and the accompanying materials
are made available under the terms of the Eclipse Public License 2.0
which accompanies this distribution, and is available at
https://www.eclipse.org/legal/epl-2.0/

SPDX-License-Identifier: EPL-2.0"/>
+ </eAnnotations>
+ <eClassifiers xsi:type="ecore:EClass" name="Model" eSuperTypes="#//Copyrightable #//Touchable">
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="label" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="provider" lowerBound="1"
+ eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="providerImageName" lowerBound="1"
+ eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="providerImageData" lowerBound="1"
+ eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Base64Binary"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="aboutURL" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+ defaultValueLiteral="https://www.eclipse.org/legal/epl/epl-2.0/about.html"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="target" lowerBound="1"
+ eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="source" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="localCache" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="jVMs" lowerBound="1" upperBound="-1"
+ eType="#//JVM" containment="true" resolveProxies="false" eOpposite="#//JVM/model">
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
+ <details key="name" value="jvm"/>
+ <details key="kind" value="element"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="JVM" eSuperTypes="#//Copyrightable #//Touchable">
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="version" lowerBound="1"
+ eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="label" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="model" eType="#//Model"
+ transient="true" resolveProxies="false" eOpposite="#//Model/jVMs"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="aboutTextExtra" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="propertyMultiLine" value="true"/>
+ </eAnnotations>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
+ <details key="kind" value="element"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="variants" lowerBound="1"
+ upperBound="-1" eType="#//Variant" containment="true" resolveProxies="false"
+ eOpposite="#//Variant/jVM">
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
+ <details key="name" value="variant"/>
+ <details key="kind" value="element"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="Variant" eSuperTypes="#//Copyrightable #//Touchable">
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="os" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="arch" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="label" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="source" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="jVM" eType="#//JVM" transient="true"
+ resolveProxies="false" eOpposite="#//JVM/variants">
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
+ <details key="name" value="jvm"/>
+ <details key="kind" value="element"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="Copyrightable" abstract="true">
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="copyrightHolder" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="copyrightYear" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="copyrightText" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="propertyMultiLine" value="true"/>
+ </eAnnotations>
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
+ <details key="kind" value="element"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="Touchpoint">
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="phase" eType="#//Phase"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="instructions" unique="false"
+ lowerBound="1" upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+ <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
+ <details key="kind" value="element"/>
+ <details key="name" value="instruction"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EEnum" name="Phase">
+ <eLiterals name="Install" literal="install"/>
+ <eLiterals name="Uninstall" value="1" literal="uninstall"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="Touchable" abstract="true" interface="true">
+ <eStructuralFeatures xsi:type="ecore:EReference" name="touchpoints" upperBound="-1"
+ eType="#//Touchpoint" containment="true"/>
+ </eClassifiers>
+</ecore:EPackage>
diff --git a/plugins/org.eclipse.justj.codegen/model/Model.genmodel b/plugins/org.eclipse.justj.codegen/model/Model.genmodel
new file mode 100644
index 0000000..6e5ddca
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/model/Model.genmodel
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<genmodel:GenModel xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore"
+ xmlns:genmodel="http://www.eclipse.org/emf/2002/GenModel" copyrightText="Copyright (c) 2020 Eclipse contributors and others.

This program and the accompanying materials
are made available under the terms of the Eclipse Public License 2.0
which accompanies this distribution, and is available at
https://www.eclipse.org/legal/epl-2.0/

SPDX-License-Identifier: EPL-2.0"
+ modelDirectory="/org.eclipse.justj.codegen/src" creationIcons="false" modelPluginID="org.eclipse.justj.codegen"
+ modelName="Model" modelPluginClass="org.eclipse.justj.codegen.model.ModelPlugin"
+ rootExtendsClass="org.eclipse.emf.ecore.impl.MinimalEObjectImpl$Container" codeFormatting="true"
+ testsDirectory="" importerID="org.eclipse.emf.importer.ecore" complianceLevel="8.0"
+ suppressGenModelAnnotations="false" copyrightFields="false" operationReflection="true"
+ decoration="Live" cleanup="true" autoResizeProperties="true" findAction="true"
+ expandAllAction="true" collapseAllAction="true" revertAction="true">
+ <foreignModel>Model.ecore</foreignModel>
+ <genPackages prefix="Model" basePackage="org.eclipse.justj.codegen" resource="XML"
+ disposableProviderFactory="true" multipleEditorPages="false" contentTypeIdentifier="org.eclipse.justj.codegen"
+ fileExtensions="jregen" ecorePackage="Model.ecore#/">
+ <genEnums typeSafeEnumCompatible="false" ecoreEnum="Model.ecore#//Phase">
+ <genEnumLiterals ecoreEnumLiteral="Model.ecore#//Phase/Install"/>
+ <genEnumLiterals ecoreEnumLiteral="Model.ecore#//Phase/Uninstall"/>
+ </genEnums>
+ <genClasses ecoreClass="Model.ecore#//Model">
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute Model.ecore#//Model/name"/>
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute Model.ecore#//Model/label"/>
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute Model.ecore#//Model/provider"/>
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute Model.ecore#//Model/providerImageName"/>
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute Model.ecore#//Model/providerImageData"/>
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute Model.ecore#//Model/aboutURL"/>
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute Model.ecore#//Model/target"/>
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute Model.ecore#//Model/source"/>
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute Model.ecore#//Model/localCache"/>
+ <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Model.ecore#//Model/jVMs"/>
+ </genClasses>
+ <genClasses ecoreClass="Model.ecore#//JVM">
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute Model.ecore#//JVM/name"/>
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute Model.ecore#//JVM/version"/>
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute Model.ecore#//JVM/label"/>
+ <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference Model.ecore#//JVM/model"/>
+ <genFeatures createChild="false" propertyMultiLine="true" ecoreFeature="ecore:EAttribute Model.ecore#//JVM/aboutTextExtra"/>
+ <genFeatures children="true" createChild="true" propertySortChoices="true" ecoreFeature="ecore:EReference Model.ecore#//JVM/variants"/>
+ </genClasses>
+ <genClasses ecoreClass="Model.ecore#//Variant">
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute Model.ecore#//Variant/os"/>
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute Model.ecore#//Variant/arch"/>
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute Model.ecore#//Variant/label"/>
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute Model.ecore#//Variant/source"/>
+ <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference Model.ecore#//Variant/jVM"/>
+ </genClasses>
+ <genClasses image="false" ecoreClass="Model.ecore#//Copyrightable">
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute Model.ecore#//Copyrightable/copyrightHolder"/>
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute Model.ecore#//Copyrightable/copyrightYear"/>
+ <genFeatures createChild="false" propertyMultiLine="true" ecoreFeature="ecore:EAttribute Model.ecore#//Copyrightable/copyrightText"/>
+ </genClasses>
+ <genClasses ecoreClass="Model.ecore#//Touchpoint">
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute Model.ecore#//Touchpoint/phase"/>
+ <genFeatures children="true" createChild="true" ecoreFeature="ecore:EAttribute Model.ecore#//Touchpoint/instructions"/>
+ </genClasses>
+ <genClasses image="false" ecoreClass="Model.ecore#//Touchable">
+ <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Model.ecore#//Touchable/touchpoints"/>
+ </genClasses>
+ </genPackages>
+ <codeStyle>UnnecessaryDeprecatedMethod</codeStyle>
+</genmodel:GenModel>
diff --git a/plugins/org.eclipse.justj.codegen/plugin.properties b/plugins/org.eclipse.justj.codegen/plugin.properties
new file mode 100644
index 0000000..7377e88
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/plugin.properties
@@ -0,0 +1,13 @@
+# Copyright (c) 2020 Eclipse contributors and others.
+#
+# This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License 2.0
+# which accompanies this distribution, and is available at
+# https://www.eclipse.org/legal/epl-2.0/
+#
+# SPDX-License-Identifier: EPL-2.0
+
+pluginName = JustJ Codegen Model
+providerName = Eclipse JustJ
+
+_UI_Model_content_type = Model File
diff --git a/plugins/org.eclipse.justj.codegen/plugin.xml b/plugins/org.eclipse.justj.codegen/plugin.xml
new file mode 100644
index 0000000..7b9cce2
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/plugin.xml
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+
+<!--
+ Copyright (c) 2020 Eclipse contributors and others.
+
+ This program and the accompanying materials
+ are made available under the terms of the Eclipse Public License 2.0
+ which accompanies this distribution, and is available at
+ https://www.eclipse.org/legal/epl-2.0/
+
+ SPDX-License-Identifier: EPL-2.0
+-->
+
+<plugin>
+
+ <extension point="org.eclipse.emf.ecore.generated_package">
+ <!-- @generated Model -->
+ <package
+ uri="http://www.eclipse.org/just/2020/Model"
+ class="org.eclipse.justj.codegen.model.ModelPackage"
+ genModel="model/Model.genmodel"/>
+ </extension>
+
+ <extension point="org.eclipse.emf.ecore.content_parser">
+ <!-- @generated Model -->
+ <parser
+ contentTypeIdentifier="org.eclipse.justj.codegen"
+ class="org.eclipse.justj.codegen.model.util.ModelResourceFactoryImpl"/>
+ </extension>
+
+ <extension point="org.eclipse.core.contenttype.contentTypes">
+ <!-- @generated Model -->
+ <content-type
+ base-type="org.eclipse.core.runtime.xml"
+ file-extensions="jregen"
+ id="org.eclipse.justj.codegen"
+ name="%_UI_Model_content_type"
+ priority="normal">
+ <describer class="org.eclipse.emf.ecore.xmi.impl.RootXMLContentHandlerImpl$Describer">
+ <parameter name="namespace" value="http://www.eclipse.org/just/2020/Model"/>
+ </describer>
+ </content-type>
+ </extension>
+
+ <extension
+ id="generator"
+ point="org.eclipse.core.runtime.applications">
+ <application
+ cardinality="singleton-global"
+ thread="main"
+ visible="true">
+ <run
+ class="org.eclipse.justj.codegen.model.util.Generator$Application">
+ </run>
+ </application>
+ </extension>
+
+</plugin>
diff --git a/plugins/org.eclipse.justj.codegen/pom.xml b/plugins/org.eclipse.justj.codegen/pom.xml
new file mode 100644
index 0000000..224e597
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/pom.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Copyright (c) 2020 Eclipse contributors and others.
+
+This program and the accompanying materials
+are made available under the terms of the Eclipse Public License 2.0
+which accompanies this distribution, and is available at
+https://www.eclipse.org/legal/epl-2.0/
+
+SPDX-License-Identifier: EPL-2.0
+-->
+<project
+ xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.eclipse.justj</groupId>
+ <artifactId>org.eclipse.justj.plugins</artifactId>
+ <version>1.0.0-SNAPSHOT</version>
+ <relativePath>../../releng/org.eclipse.justj.tools.parent/plugins</relativePath>
+ </parent>
+
+ <groupId>org.eclipse.justj</groupId>
+ <artifactId>org.eclipse.justj.codegen</artifactId>
+ <version>0.1.0-SNAPSHOT</version>
+ <packaging>eclipse-plugin</packaging>
+
+ <build>
+ <resources>
+ <resource>
+ <directory>.</directory>
+ <filtering>true</filtering>
+ <includes>
+ <include>about.mappings</include>
+ </includes>
+ </resource>
+ </resources>
+ </build>
+
+</project>
diff --git a/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/model/Copyrightable.java b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/model/Copyrightable.java
new file mode 100644
index 0000000..1781b88
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/model/Copyrightable.java
@@ -0,0 +1,104 @@
+/**
+ * Copyright (c) 2020 Eclipse contributors and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.eclipse.justj.codegen.model;
+
+
+import org.eclipse.emf.ecore.EObject;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Copyrightable</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.justj.codegen.model.Copyrightable#getCopyrightHolder <em>Copyright Holder</em>}</li>
+ * <li>{@link org.eclipse.justj.codegen.model.Copyrightable#getCopyrightYear <em>Copyright Year</em>}</li>
+ * <li>{@link org.eclipse.justj.codegen.model.Copyrightable#getCopyrightText <em>Copyright Text</em>}</li>
+ * </ul>
+ *
+ * @see org.eclipse.justj.codegen.model.ModelPackage#getCopyrightable()
+ * @model abstract="true"
+ * @generated
+ */
+public interface Copyrightable extends EObject
+{
+ /**
+ * Returns the value of the '<em><b>Copyright Holder</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Copyright Holder</em>' attribute.
+ * @see #setCopyrightHolder(String)
+ * @see org.eclipse.justj.codegen.model.ModelPackage#getCopyrightable_CopyrightHolder()
+ * @model
+ * @generated
+ */
+ String getCopyrightHolder();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.justj.codegen.model.Copyrightable#getCopyrightHolder <em>Copyright Holder</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Copyright Holder</em>' attribute.
+ * @see #getCopyrightHolder()
+ * @generated
+ */
+ void setCopyrightHolder(String value);
+
+ /**
+ * Returns the value of the '<em><b>Copyright Year</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Copyright Year</em>' attribute.
+ * @see #setCopyrightYear(String)
+ * @see org.eclipse.justj.codegen.model.ModelPackage#getCopyrightable_CopyrightYear()
+ * @model
+ * @generated
+ */
+ String getCopyrightYear();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.justj.codegen.model.Copyrightable#getCopyrightYear <em>Copyright Year</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Copyright Year</em>' attribute.
+ * @see #getCopyrightYear()
+ * @generated
+ */
+ void setCopyrightYear(String value);
+
+ /**
+ * Returns the value of the '<em><b>Copyright Text</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Copyright Text</em>' attribute.
+ * @see #setCopyrightText(String)
+ * @see org.eclipse.justj.codegen.model.ModelPackage#getCopyrightable_CopyrightText()
+ * @model annotation="http://www.eclipse.org/emf/2002/GenModel propertyMultiLine='true'"
+ * extendedMetaData="kind='element'"
+ * @generated
+ */
+ String getCopyrightText();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.justj.codegen.model.Copyrightable#getCopyrightText <em>Copyright Text</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Copyright Text</em>' attribute.
+ * @see #getCopyrightText()
+ * @generated
+ */
+ void setCopyrightText(String value);
+
+} // Copyrightable
diff --git a/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/model/JVM.java b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/model/JVM.java
new file mode 100644
index 0000000..f22528d
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/model/JVM.java
@@ -0,0 +1,168 @@
+/**
+ * Copyright (c) 2020 Eclipse contributors and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.eclipse.justj.codegen.model;
+
+
+import org.eclipse.emf.common.util.EList;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>JVM</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.justj.codegen.model.JVM#getName <em>Name</em>}</li>
+ * <li>{@link org.eclipse.justj.codegen.model.JVM#getVersion <em>Version</em>}</li>
+ * <li>{@link org.eclipse.justj.codegen.model.JVM#getLabel <em>Label</em>}</li>
+ * <li>{@link org.eclipse.justj.codegen.model.JVM#getModel <em>Model</em>}</li>
+ * <li>{@link org.eclipse.justj.codegen.model.JVM#getAboutTextExtra <em>About Text Extra</em>}</li>
+ * <li>{@link org.eclipse.justj.codegen.model.JVM#getVariants <em>Variants</em>}</li>
+ * </ul>
+ *
+ * @see org.eclipse.justj.codegen.model.ModelPackage#getJVM()
+ * @model
+ * @generated
+ */
+public interface JVM extends Copyrightable, Touchable
+{
+ /**
+ * Returns the value of the '<em><b>Name</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Name</em>' attribute.
+ * @see #setName(String)
+ * @see org.eclipse.justj.codegen.model.ModelPackage#getJVM_Name()
+ * @model required="true"
+ * @generated
+ */
+ String getName();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.justj.codegen.model.JVM#getName <em>Name</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Name</em>' attribute.
+ * @see #getName()
+ * @generated
+ */
+ void setName(String value);
+
+ /**
+ * Returns the value of the '<em><b>Version</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Version</em>' attribute.
+ * @see #setVersion(String)
+ * @see org.eclipse.justj.codegen.model.ModelPackage#getJVM_Version()
+ * @model required="true"
+ * @generated
+ */
+ String getVersion();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.justj.codegen.model.JVM#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(String value);
+
+ /**
+ * Returns the value of the '<em><b>Label</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Label</em>' attribute.
+ * @see #setLabel(String)
+ * @see org.eclipse.justj.codegen.model.ModelPackage#getJVM_Label()
+ * @model required="true"
+ * @generated
+ */
+ String getLabel();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.justj.codegen.model.JVM#getLabel <em>Label</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Label</em>' attribute.
+ * @see #getLabel()
+ * @generated
+ */
+ void setLabel(String value);
+
+ /**
+ * Returns the value of the '<em><b>Variants</b></em>' containment reference list.
+ * The list contents are of type {@link org.eclipse.justj.codegen.model.Variant}.
+ * It is bidirectional and its opposite is '{@link org.eclipse.justj.codegen.model.Variant#getJVM <em>JVM</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Variants</em>' containment reference list.
+ * @see org.eclipse.justj.codegen.model.ModelPackage#getJVM_Variants()
+ * @see org.eclipse.justj.codegen.model.Variant#getJVM
+ * @model opposite="jVM" containment="true" required="true"
+ * extendedMetaData="name='variant' kind='element'"
+ * @generated
+ */
+ EList<Variant> getVariants();
+
+ /**
+ * Returns the value of the '<em><b>Model</b></em>' container reference.
+ * It is bidirectional and its opposite is '{@link org.eclipse.justj.codegen.model.Model#getJVMs <em>JV Ms</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Model</em>' container reference.
+ * @see #setModel(Model)
+ * @see org.eclipse.justj.codegen.model.ModelPackage#getJVM_Model()
+ * @see org.eclipse.justj.codegen.model.Model#getJVMs
+ * @model opposite="jVMs" resolveProxies="false"
+ * @generated
+ */
+ Model getModel();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.justj.codegen.model.JVM#getModel <em>Model</em>}' container reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Model</em>' container reference.
+ * @see #getModel()
+ * @generated
+ */
+ void setModel(Model value);
+
+ /**
+ * Returns the value of the '<em><b>About Text Extra</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>About Text Extra</em>' attribute.
+ * @see #setAboutTextExtra(String)
+ * @see org.eclipse.justj.codegen.model.ModelPackage#getJVM_AboutTextExtra()
+ * @model annotation="http://www.eclipse.org/emf/2002/GenModel propertyMultiLine='true'"
+ * extendedMetaData="kind='element'"
+ * @generated
+ */
+ String getAboutTextExtra();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.justj.codegen.model.JVM#getAboutTextExtra <em>About Text Extra</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>About Text Extra</em>' attribute.
+ * @see #getAboutTextExtra()
+ * @generated
+ */
+ void setAboutTextExtra(String value);
+
+} // JVM
diff --git a/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/model/Model.java b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/model/Model.java
new file mode 100644
index 0000000..247a0f4
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/model/Model.java
@@ -0,0 +1,258 @@
+/**
+ * Copyright (c) 2020 Eclipse contributors and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.eclipse.justj.codegen.model;
+
+
+import org.eclipse.emf.common.util.EList;
+
+
+/**
+ * <!-- 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.justj.codegen.model.Model#getName <em>Name</em>}</li>
+ * <li>{@link org.eclipse.justj.codegen.model.Model#getLabel <em>Label</em>}</li>
+ * <li>{@link org.eclipse.justj.codegen.model.Model#getProvider <em>Provider</em>}</li>
+ * <li>{@link org.eclipse.justj.codegen.model.Model#getProviderImageName <em>Provider Image Name</em>}</li>
+ * <li>{@link org.eclipse.justj.codegen.model.Model#getProviderImageData <em>Provider Image Data</em>}</li>
+ * <li>{@link org.eclipse.justj.codegen.model.Model#getAboutURL <em>About URL</em>}</li>
+ * <li>{@link org.eclipse.justj.codegen.model.Model#getTarget <em>Target</em>}</li>
+ * <li>{@link org.eclipse.justj.codegen.model.Model#getSource <em>Source</em>}</li>
+ * <li>{@link org.eclipse.justj.codegen.model.Model#getLocalCache <em>Local Cache</em>}</li>
+ * <li>{@link org.eclipse.justj.codegen.model.Model#getJVMs <em>JV Ms</em>}</li>
+ * </ul>
+ *
+ * @see org.eclipse.justj.codegen.model.ModelPackage#getModel()
+ * @model
+ * @generated
+ */
+public interface Model extends Copyrightable, Touchable
+{
+ /**
+ * Returns the value of the '<em><b>Name</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Name</em>' attribute.
+ * @see #setName(String)
+ * @see org.eclipse.justj.codegen.model.ModelPackage#getModel_Name()
+ * @model required="true"
+ * @generated
+ */
+ String getName();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.justj.codegen.model.Model#getName <em>Name</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Name</em>' attribute.
+ * @see #getName()
+ * @generated
+ */
+ void setName(String value);
+
+ /**
+ * Returns the value of the '<em><b>Label</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Label</em>' attribute.
+ * @see #setLabel(String)
+ * @see org.eclipse.justj.codegen.model.ModelPackage#getModel_Label()
+ * @model required="true"
+ * @generated
+ */
+ String getLabel();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.justj.codegen.model.Model#getLabel <em>Label</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Label</em>' attribute.
+ * @see #getLabel()
+ * @generated
+ */
+ void setLabel(String value);
+
+ /**
+ * Returns the value of the '<em><b>JV Ms</b></em>' containment reference list.
+ * The list contents are of type {@link org.eclipse.justj.codegen.model.JVM}.
+ * It is bidirectional and its opposite is '{@link org.eclipse.justj.codegen.model.JVM#getModel <em>Model</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>JV Ms</em>' containment reference list.
+ * @see org.eclipse.justj.codegen.model.ModelPackage#getModel_JVMs()
+ * @see org.eclipse.justj.codegen.model.JVM#getModel
+ * @model opposite="model" containment="true" required="true"
+ * extendedMetaData="name='jvm' kind='element'"
+ * @generated
+ */
+ EList<JVM> getJVMs();
+
+ /**
+ * Returns the value of the '<em><b>Provider</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Provider</em>' attribute.
+ * @see #setProvider(String)
+ * @see org.eclipse.justj.codegen.model.ModelPackage#getModel_Provider()
+ * @model required="true"
+ * @generated
+ */
+ String getProvider();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.justj.codegen.model.Model#getProvider <em>Provider</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Provider</em>' attribute.
+ * @see #getProvider()
+ * @generated
+ */
+ void setProvider(String value);
+
+ /**
+ * Returns the value of the '<em><b>Provider Image Name</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Provider Image Name</em>' attribute.
+ * @see #setProviderImageName(String)
+ * @see org.eclipse.justj.codegen.model.ModelPackage#getModel_ProviderImageName()
+ * @model required="true"
+ * @generated
+ */
+ String getProviderImageName();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.justj.codegen.model.Model#getProviderImageName <em>Provider Image Name</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Provider Image Name</em>' attribute.
+ * @see #getProviderImageName()
+ * @generated
+ */
+ void setProviderImageName(String value);
+
+ /**
+ * Returns the value of the '<em><b>Provider Image Data</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Provider Image Data</em>' attribute.
+ * @see #setProviderImageData(byte[])
+ * @see org.eclipse.justj.codegen.model.ModelPackage#getModel_ProviderImageData()
+ * @model dataType="org.eclipse.emf.ecore.xml.type.Base64Binary" required="true"
+ * @generated
+ */
+ byte[] getProviderImageData();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.justj.codegen.model.Model#getProviderImageData <em>Provider Image Data</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Provider Image Data</em>' attribute.
+ * @see #getProviderImageData()
+ * @generated
+ */
+ void setProviderImageData(byte[] value);
+
+ /**
+ * Returns the value of the '<em><b>About URL</b></em>' attribute.
+ * The default value is <code>"https://www.eclipse.org/legal/epl/epl-2.0/about.html"</code>.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>About URL</em>' attribute.
+ * @see #setAboutURL(String)
+ * @see org.eclipse.justj.codegen.model.ModelPackage#getModel_AboutURL()
+ * @model default="https://www.eclipse.org/legal/epl/epl-2.0/about.html"
+ * @generated
+ */
+ String getAboutURL();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.justj.codegen.model.Model#getAboutURL <em>About URL</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>About URL</em>' attribute.
+ * @see #getAboutURL()
+ * @generated
+ */
+ void setAboutURL(String value);
+
+ /**
+ * Returns the value of the '<em><b>Target</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Target</em>' attribute.
+ * @see #setTarget(String)
+ * @see org.eclipse.justj.codegen.model.ModelPackage#getModel_Target()
+ * @model required="true"
+ * @generated
+ */
+ String getTarget();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.justj.codegen.model.Model#getTarget <em>Target</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Target</em>' attribute.
+ * @see #getTarget()
+ * @generated
+ */
+ void setTarget(String value);
+
+ /**
+ * Returns the value of the '<em><b>Source</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Source</em>' attribute.
+ * @see #setSource(String)
+ * @see org.eclipse.justj.codegen.model.ModelPackage#getModel_Source()
+ * @model
+ * @generated
+ */
+ String getSource();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.justj.codegen.model.Model#getSource <em>Source</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Source</em>' attribute.
+ * @see #getSource()
+ * @generated
+ */
+ void setSource(String value);
+
+ /**
+ * Returns the value of the '<em><b>Local Cache</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Local Cache</em>' attribute.
+ * @see #setLocalCache(String)
+ * @see org.eclipse.justj.codegen.model.ModelPackage#getModel_LocalCache()
+ * @model
+ * @generated
+ */
+ String getLocalCache();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.justj.codegen.model.Model#getLocalCache <em>Local Cache</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Local Cache</em>' attribute.
+ * @see #getLocalCache()
+ * @generated
+ */
+ void setLocalCache(String value);
+
+} // Model
diff --git a/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/model/ModelFactory.java b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/model/ModelFactory.java
new file mode 100644
index 0000000..66ed585
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/model/ModelFactory.java
@@ -0,0 +1,80 @@
+/**
+ * Copyright (c) 2020 Eclipse contributors and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.eclipse.justj.codegen.model;
+
+
+import org.eclipse.emf.ecore.EFactory;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Factory</b> for the model.
+ * It provides a create method for each non-abstract class of the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.justj.codegen.model.ModelPackage
+ * @generated
+ */
+public interface ModelFactory extends EFactory
+{
+ /**
+ * The singleton instance of the factory.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ ModelFactory eINSTANCE = org.eclipse.justj.codegen.model.impl.ModelFactoryImpl.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();
+
+ /**
+ * Returns a new object of class '<em>JVM</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return a new object of class '<em>JVM</em>'.
+ * @generated
+ */
+ JVM createJVM();
+
+ /**
+ * Returns a new object of class '<em>Variant</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return a new object of class '<em>Variant</em>'.
+ * @generated
+ */
+ Variant createVariant();
+
+ /**
+ * Returns a new object of class '<em>Touchpoint</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return a new object of class '<em>Touchpoint</em>'.
+ * @generated
+ */
+ Touchpoint createTouchpoint();
+
+ /**
+ * Returns the package supported by this factory.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the package supported by this factory.
+ * @generated
+ */
+ ModelPackage getModelPackage();
+
+} //ModelFactory
diff --git a/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/model/ModelPackage.java b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/model/ModelPackage.java
new file mode 100644
index 0000000..6762339
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/model/ModelPackage.java
@@ -0,0 +1,1288 @@
+/**
+ * Copyright (c) 2020 Eclipse contributors and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.eclipse.justj.codegen.model;
+
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EEnum;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Package</b> for the model.
+ * It contains accessors for the meta objects to represent
+ * <ul>
+ * <li>each class,</li>
+ * <li>each feature of each class,</li>
+ * <li>each operation of each class,</li>
+ * <li>each enum,</li>
+ * <li>and each data type</li>
+ * </ul>
+ * <!-- end-user-doc -->
+ * @see org.eclipse.justj.codegen.model.ModelFactory
+ * @model kind="package"
+ * annotation="http://www.eclipse.org/emf/2002/GenModel copyrightText='Copyright (c) 2020 Eclipse contributors and others.\n\nThis program and the accompanying materials\nare made available under the terms of the Eclipse Public License 2.0\nwhich accompanies this distribution, and is available at\nhttps://www.eclipse.org/legal/epl-2.0/\n\nSPDX-License-Identifier: EPL-2.0'"
+ * @generated
+ */
+public interface ModelPackage extends EPackage
+{
+ /**
+ * The package name.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ String eNAME = "model";
+
+ /**
+ * The package namespace URI.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ String eNS_URI = "http://www.eclipse.org/just/2020/Model";
+
+ /**
+ * The package namespace name.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ String eNS_PREFIX = "model";
+
+ /**
+ * The package content type ID.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ String eCONTENT_TYPE = "org.eclipse.justj.codegen";
+
+ /**
+ * The singleton instance of the package.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ ModelPackage eINSTANCE = org.eclipse.justj.codegen.model.impl.ModelPackageImpl.init();
+
+ /**
+ * The meta object id for the '{@link org.eclipse.justj.codegen.model.impl.CopyrightableImpl <em>Copyrightable</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.justj.codegen.model.impl.CopyrightableImpl
+ * @see org.eclipse.justj.codegen.model.impl.ModelPackageImpl#getCopyrightable()
+ * @generated
+ */
+ int COPYRIGHTABLE = 3;
+
+ /**
+ * The feature id for the '<em><b>Copyright Holder</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int COPYRIGHTABLE__COPYRIGHT_HOLDER = 0;
+
+ /**
+ * The feature id for the '<em><b>Copyright Year</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int COPYRIGHTABLE__COPYRIGHT_YEAR = 1;
+
+ /**
+ * The feature id for the '<em><b>Copyright Text</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int COPYRIGHTABLE__COPYRIGHT_TEXT = 2;
+
+ /**
+ * The number of structural features of the '<em>Copyrightable</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int COPYRIGHTABLE_FEATURE_COUNT = 3;
+
+ /**
+ * The number of operations of the '<em>Copyrightable</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int COPYRIGHTABLE_OPERATION_COUNT = 0;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.justj.codegen.model.impl.ModelImpl <em>Model</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.justj.codegen.model.impl.ModelImpl
+ * @see org.eclipse.justj.codegen.model.impl.ModelPackageImpl#getModel()
+ * @generated
+ */
+ int MODEL = 0;
+
+ /**
+ * The feature id for the '<em><b>Copyright Holder</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int MODEL__COPYRIGHT_HOLDER = COPYRIGHTABLE__COPYRIGHT_HOLDER;
+
+ /**
+ * The feature id for the '<em><b>Copyright Year</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int MODEL__COPYRIGHT_YEAR = COPYRIGHTABLE__COPYRIGHT_YEAR;
+
+ /**
+ * The feature id for the '<em><b>Copyright Text</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int MODEL__COPYRIGHT_TEXT = COPYRIGHTABLE__COPYRIGHT_TEXT;
+
+ /**
+ * The feature id for the '<em><b>Touchpoints</b></em>' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int MODEL__TOUCHPOINTS = COPYRIGHTABLE_FEATURE_COUNT + 0;
+
+ /**
+ * The feature id for the '<em><b>Name</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int MODEL__NAME = COPYRIGHTABLE_FEATURE_COUNT + 1;
+
+ /**
+ * The feature id for the '<em><b>Label</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int MODEL__LABEL = COPYRIGHTABLE_FEATURE_COUNT + 2;
+
+ /**
+ * The feature id for the '<em><b>Provider</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int MODEL__PROVIDER = COPYRIGHTABLE_FEATURE_COUNT + 3;
+
+ /**
+ * The feature id for the '<em><b>Provider Image Name</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int MODEL__PROVIDER_IMAGE_NAME = COPYRIGHTABLE_FEATURE_COUNT + 4;
+
+ /**
+ * The feature id for the '<em><b>Provider Image Data</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int MODEL__PROVIDER_IMAGE_DATA = COPYRIGHTABLE_FEATURE_COUNT + 5;
+
+ /**
+ * The feature id for the '<em><b>About URL</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int MODEL__ABOUT_URL = COPYRIGHTABLE_FEATURE_COUNT + 6;
+
+ /**
+ * The feature id for the '<em><b>Target</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int MODEL__TARGET = COPYRIGHTABLE_FEATURE_COUNT + 7;
+
+ /**
+ * The feature id for the '<em><b>Source</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int MODEL__SOURCE = COPYRIGHTABLE_FEATURE_COUNT + 8;
+
+ /**
+ * The feature id for the '<em><b>Local Cache</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int MODEL__LOCAL_CACHE = COPYRIGHTABLE_FEATURE_COUNT + 9;
+
+ /**
+ * The feature id for the '<em><b>JV Ms</b></em>' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int MODEL__JV_MS = COPYRIGHTABLE_FEATURE_COUNT + 10;
+
+ /**
+ * The number of structural features of the '<em>Model</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int MODEL_FEATURE_COUNT = COPYRIGHTABLE_FEATURE_COUNT + 11;
+
+ /**
+ * The number of operations of the '<em>Model</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int MODEL_OPERATION_COUNT = COPYRIGHTABLE_OPERATION_COUNT + 0;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.justj.codegen.model.impl.JVMImpl <em>JVM</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.justj.codegen.model.impl.JVMImpl
+ * @see org.eclipse.justj.codegen.model.impl.ModelPackageImpl#getJVM()
+ * @generated
+ */
+ int JVM = 1;
+
+ /**
+ * The feature id for the '<em><b>Copyright Holder</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int JVM__COPYRIGHT_HOLDER = COPYRIGHTABLE__COPYRIGHT_HOLDER;
+
+ /**
+ * The feature id for the '<em><b>Copyright Year</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int JVM__COPYRIGHT_YEAR = COPYRIGHTABLE__COPYRIGHT_YEAR;
+
+ /**
+ * The feature id for the '<em><b>Copyright Text</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int JVM__COPYRIGHT_TEXT = COPYRIGHTABLE__COPYRIGHT_TEXT;
+
+ /**
+ * The feature id for the '<em><b>Touchpoints</b></em>' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int JVM__TOUCHPOINTS = COPYRIGHTABLE_FEATURE_COUNT + 0;
+
+ /**
+ * The feature id for the '<em><b>Name</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int JVM__NAME = COPYRIGHTABLE_FEATURE_COUNT + 1;
+
+ /**
+ * The feature id for the '<em><b>Version</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int JVM__VERSION = COPYRIGHTABLE_FEATURE_COUNT + 2;
+
+ /**
+ * The feature id for the '<em><b>Label</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int JVM__LABEL = COPYRIGHTABLE_FEATURE_COUNT + 3;
+
+ /**
+ * The feature id for the '<em><b>Model</b></em>' container reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int JVM__MODEL = COPYRIGHTABLE_FEATURE_COUNT + 4;
+
+ /**
+ * The feature id for the '<em><b>About Text Extra</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int JVM__ABOUT_TEXT_EXTRA = COPYRIGHTABLE_FEATURE_COUNT + 5;
+
+ /**
+ * The feature id for the '<em><b>Variants</b></em>' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int JVM__VARIANTS = COPYRIGHTABLE_FEATURE_COUNT + 6;
+
+ /**
+ * The number of structural features of the '<em>JVM</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int JVM_FEATURE_COUNT = COPYRIGHTABLE_FEATURE_COUNT + 7;
+
+ /**
+ * The number of operations of the '<em>JVM</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int JVM_OPERATION_COUNT = COPYRIGHTABLE_OPERATION_COUNT + 0;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.justj.codegen.model.impl.VariantImpl <em>Variant</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.justj.codegen.model.impl.VariantImpl
+ * @see org.eclipse.justj.codegen.model.impl.ModelPackageImpl#getVariant()
+ * @generated
+ */
+ int VARIANT = 2;
+
+ /**
+ * The feature id for the '<em><b>Copyright Holder</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int VARIANT__COPYRIGHT_HOLDER = COPYRIGHTABLE__COPYRIGHT_HOLDER;
+
+ /**
+ * The feature id for the '<em><b>Copyright Year</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int VARIANT__COPYRIGHT_YEAR = COPYRIGHTABLE__COPYRIGHT_YEAR;
+
+ /**
+ * The feature id for the '<em><b>Copyright Text</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int VARIANT__COPYRIGHT_TEXT = COPYRIGHTABLE__COPYRIGHT_TEXT;
+
+ /**
+ * The feature id for the '<em><b>Touchpoints</b></em>' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int VARIANT__TOUCHPOINTS = COPYRIGHTABLE_FEATURE_COUNT + 0;
+
+ /**
+ * The feature id for the '<em><b>Os</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int VARIANT__OS = COPYRIGHTABLE_FEATURE_COUNT + 1;
+
+ /**
+ * The feature id for the '<em><b>Arch</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int VARIANT__ARCH = COPYRIGHTABLE_FEATURE_COUNT + 2;
+
+ /**
+ * The feature id for the '<em><b>Label</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int VARIANT__LABEL = COPYRIGHTABLE_FEATURE_COUNT + 3;
+
+ /**
+ * The feature id for the '<em><b>Source</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int VARIANT__SOURCE = COPYRIGHTABLE_FEATURE_COUNT + 4;
+
+ /**
+ * The feature id for the '<em><b>JVM</b></em>' container reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int VARIANT__JVM = COPYRIGHTABLE_FEATURE_COUNT + 5;
+
+ /**
+ * The number of structural features of the '<em>Variant</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int VARIANT_FEATURE_COUNT = COPYRIGHTABLE_FEATURE_COUNT + 6;
+
+ /**
+ * The number of operations of the '<em>Variant</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int VARIANT_OPERATION_COUNT = COPYRIGHTABLE_OPERATION_COUNT + 0;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.justj.codegen.model.impl.TouchpointImpl <em>Touchpoint</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.justj.codegen.model.impl.TouchpointImpl
+ * @see org.eclipse.justj.codegen.model.impl.ModelPackageImpl#getTouchpoint()
+ * @generated
+ */
+ int TOUCHPOINT = 4;
+
+ /**
+ * The feature id for the '<em><b>Phase</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int TOUCHPOINT__PHASE = 0;
+
+ /**
+ * The feature id for the '<em><b>Instructions</b></em>' attribute list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int TOUCHPOINT__INSTRUCTIONS = 1;
+
+ /**
+ * The number of structural features of the '<em>Touchpoint</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int TOUCHPOINT_FEATURE_COUNT = 2;
+
+ /**
+ * The number of operations of the '<em>Touchpoint</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int TOUCHPOINT_OPERATION_COUNT = 0;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.justj.codegen.model.Touchable <em>Touchable</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.justj.codegen.model.Touchable
+ * @see org.eclipse.justj.codegen.model.impl.ModelPackageImpl#getTouchable()
+ * @generated
+ */
+ int TOUCHABLE = 5;
+
+ /**
+ * The feature id for the '<em><b>Touchpoints</b></em>' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int TOUCHABLE__TOUCHPOINTS = 0;
+
+ /**
+ * The number of structural features of the '<em>Touchable</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int TOUCHABLE_FEATURE_COUNT = 1;
+
+ /**
+ * The number of operations of the '<em>Touchable</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int TOUCHABLE_OPERATION_COUNT = 0;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.justj.codegen.model.Phase <em>Phase</em>}' enum.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.justj.codegen.model.Phase
+ * @see org.eclipse.justj.codegen.model.impl.ModelPackageImpl#getPhase()
+ * @generated
+ */
+ int PHASE = 6;
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.justj.codegen.model.Model <em>Model</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>Model</em>'.
+ * @see org.eclipse.justj.codegen.model.Model
+ * @generated
+ */
+ EClass getModel();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.justj.codegen.model.Model#getName <em>Name</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Name</em>'.
+ * @see org.eclipse.justj.codegen.model.Model#getName()
+ * @see #getModel()
+ * @generated
+ */
+ EAttribute getModel_Name();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.justj.codegen.model.Model#getLabel <em>Label</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Label</em>'.
+ * @see org.eclipse.justj.codegen.model.Model#getLabel()
+ * @see #getModel()
+ * @generated
+ */
+ EAttribute getModel_Label();
+
+ /**
+ * Returns the meta object for the containment reference list '{@link org.eclipse.justj.codegen.model.Model#getJVMs <em>JV Ms</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the containment reference list '<em>JV Ms</em>'.
+ * @see org.eclipse.justj.codegen.model.Model#getJVMs()
+ * @see #getModel()
+ * @generated
+ */
+ EReference getModel_JVMs();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.justj.codegen.model.Model#getProvider <em>Provider</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Provider</em>'.
+ * @see org.eclipse.justj.codegen.model.Model#getProvider()
+ * @see #getModel()
+ * @generated
+ */
+ EAttribute getModel_Provider();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.justj.codegen.model.Model#getProviderImageName <em>Provider Image Name</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Provider Image Name</em>'.
+ * @see org.eclipse.justj.codegen.model.Model#getProviderImageName()
+ * @see #getModel()
+ * @generated
+ */
+ EAttribute getModel_ProviderImageName();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.justj.codegen.model.Model#getProviderImageData <em>Provider Image Data</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Provider Image Data</em>'.
+ * @see org.eclipse.justj.codegen.model.Model#getProviderImageData()
+ * @see #getModel()
+ * @generated
+ */
+ EAttribute getModel_ProviderImageData();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.justj.codegen.model.Model#getAboutURL <em>About URL</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>About URL</em>'.
+ * @see org.eclipse.justj.codegen.model.Model#getAboutURL()
+ * @see #getModel()
+ * @generated
+ */
+ EAttribute getModel_AboutURL();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.justj.codegen.model.Model#getTarget <em>Target</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Target</em>'.
+ * @see org.eclipse.justj.codegen.model.Model#getTarget()
+ * @see #getModel()
+ * @generated
+ */
+ EAttribute getModel_Target();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.justj.codegen.model.Model#getSource <em>Source</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Source</em>'.
+ * @see org.eclipse.justj.codegen.model.Model#getSource()
+ * @see #getModel()
+ * @generated
+ */
+ EAttribute getModel_Source();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.justj.codegen.model.Model#getLocalCache <em>Local Cache</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Local Cache</em>'.
+ * @see org.eclipse.justj.codegen.model.Model#getLocalCache()
+ * @see #getModel()
+ * @generated
+ */
+ EAttribute getModel_LocalCache();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.justj.codegen.model.JVM <em>JVM</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>JVM</em>'.
+ * @see org.eclipse.justj.codegen.model.JVM
+ * @generated
+ */
+ EClass getJVM();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.justj.codegen.model.JVM#getName <em>Name</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Name</em>'.
+ * @see org.eclipse.justj.codegen.model.JVM#getName()
+ * @see #getJVM()
+ * @generated
+ */
+ EAttribute getJVM_Name();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.justj.codegen.model.JVM#getVersion <em>Version</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Version</em>'.
+ * @see org.eclipse.justj.codegen.model.JVM#getVersion()
+ * @see #getJVM()
+ * @generated
+ */
+ EAttribute getJVM_Version();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.justj.codegen.model.JVM#getLabel <em>Label</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Label</em>'.
+ * @see org.eclipse.justj.codegen.model.JVM#getLabel()
+ * @see #getJVM()
+ * @generated
+ */
+ EAttribute getJVM_Label();
+
+ /**
+ * Returns the meta object for the containment reference list '{@link org.eclipse.justj.codegen.model.JVM#getVariants <em>Variants</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the containment reference list '<em>Variants</em>'.
+ * @see org.eclipse.justj.codegen.model.JVM#getVariants()
+ * @see #getJVM()
+ * @generated
+ */
+ EReference getJVM_Variants();
+
+ /**
+ * Returns the meta object for the container reference '{@link org.eclipse.justj.codegen.model.JVM#getModel <em>Model</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the container reference '<em>Model</em>'.
+ * @see org.eclipse.justj.codegen.model.JVM#getModel()
+ * @see #getJVM()
+ * @generated
+ */
+ EReference getJVM_Model();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.justj.codegen.model.JVM#getAboutTextExtra <em>About Text Extra</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>About Text Extra</em>'.
+ * @see org.eclipse.justj.codegen.model.JVM#getAboutTextExtra()
+ * @see #getJVM()
+ * @generated
+ */
+ EAttribute getJVM_AboutTextExtra();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.justj.codegen.model.Variant <em>Variant</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>Variant</em>'.
+ * @see org.eclipse.justj.codegen.model.Variant
+ * @generated
+ */
+ EClass getVariant();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.justj.codegen.model.Variant#getOs <em>Os</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Os</em>'.
+ * @see org.eclipse.justj.codegen.model.Variant#getOs()
+ * @see #getVariant()
+ * @generated
+ */
+ EAttribute getVariant_Os();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.justj.codegen.model.Variant#getArch <em>Arch</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Arch</em>'.
+ * @see org.eclipse.justj.codegen.model.Variant#getArch()
+ * @see #getVariant()
+ * @generated
+ */
+ EAttribute getVariant_Arch();
+
+ /**
+ * Returns the meta object for the container reference '{@link org.eclipse.justj.codegen.model.Variant#getJVM <em>JVM</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the container reference '<em>JVM</em>'.
+ * @see org.eclipse.justj.codegen.model.Variant#getJVM()
+ * @see #getVariant()
+ * @generated
+ */
+ EReference getVariant_JVM();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.justj.codegen.model.Variant#getLabel <em>Label</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Label</em>'.
+ * @see org.eclipse.justj.codegen.model.Variant#getLabel()
+ * @see #getVariant()
+ * @generated
+ */
+ EAttribute getVariant_Label();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.justj.codegen.model.Variant#getSource <em>Source</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Source</em>'.
+ * @see org.eclipse.justj.codegen.model.Variant#getSource()
+ * @see #getVariant()
+ * @generated
+ */
+ EAttribute getVariant_Source();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.justj.codegen.model.Copyrightable <em>Copyrightable</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>Copyrightable</em>'.
+ * @see org.eclipse.justj.codegen.model.Copyrightable
+ * @generated
+ */
+ EClass getCopyrightable();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.justj.codegen.model.Copyrightable#getCopyrightHolder <em>Copyright Holder</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Copyright Holder</em>'.
+ * @see org.eclipse.justj.codegen.model.Copyrightable#getCopyrightHolder()
+ * @see #getCopyrightable()
+ * @generated
+ */
+ EAttribute getCopyrightable_CopyrightHolder();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.justj.codegen.model.Copyrightable#getCopyrightYear <em>Copyright Year</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Copyright Year</em>'.
+ * @see org.eclipse.justj.codegen.model.Copyrightable#getCopyrightYear()
+ * @see #getCopyrightable()
+ * @generated
+ */
+ EAttribute getCopyrightable_CopyrightYear();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.justj.codegen.model.Copyrightable#getCopyrightText <em>Copyright Text</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Copyright Text</em>'.
+ * @see org.eclipse.justj.codegen.model.Copyrightable#getCopyrightText()
+ * @see #getCopyrightable()
+ * @generated
+ */
+ EAttribute getCopyrightable_CopyrightText();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.justj.codegen.model.Touchpoint <em>Touchpoint</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>Touchpoint</em>'.
+ * @see org.eclipse.justj.codegen.model.Touchpoint
+ * @generated
+ */
+ EClass getTouchpoint();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.justj.codegen.model.Touchpoint#getPhase <em>Phase</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Phase</em>'.
+ * @see org.eclipse.justj.codegen.model.Touchpoint#getPhase()
+ * @see #getTouchpoint()
+ * @generated
+ */
+ EAttribute getTouchpoint_Phase();
+
+ /**
+ * Returns the meta object for the attribute list '{@link org.eclipse.justj.codegen.model.Touchpoint#getInstructions <em>Instructions</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute list '<em>Instructions</em>'.
+ * @see org.eclipse.justj.codegen.model.Touchpoint#getInstructions()
+ * @see #getTouchpoint()
+ * @generated
+ */
+ EAttribute getTouchpoint_Instructions();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.justj.codegen.model.Touchable <em>Touchable</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>Touchable</em>'.
+ * @see org.eclipse.justj.codegen.model.Touchable
+ * @generated
+ */
+ EClass getTouchable();
+
+ /**
+ * Returns the meta object for the containment reference list '{@link org.eclipse.justj.codegen.model.Touchable#getTouchpoints <em>Touchpoints</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the containment reference list '<em>Touchpoints</em>'.
+ * @see org.eclipse.justj.codegen.model.Touchable#getTouchpoints()
+ * @see #getTouchable()
+ * @generated
+ */
+ EReference getTouchable_Touchpoints();
+
+ /**
+ * Returns the meta object for enum '{@link org.eclipse.justj.codegen.model.Phase <em>Phase</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for enum '<em>Phase</em>'.
+ * @see org.eclipse.justj.codegen.model.Phase
+ * @generated
+ */
+ EEnum getPhase();
+
+ /**
+ * 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
+ */
+ ModelFactory getModelFactory();
+
+ /**
+ * <!-- 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.justj.codegen.model.impl.ModelImpl <em>Model</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.justj.codegen.model.impl.ModelImpl
+ * @see org.eclipse.justj.codegen.model.impl.ModelPackageImpl#getModel()
+ * @generated
+ */
+ EClass MODEL = eINSTANCE.getModel();
+
+ /**
+ * The meta object literal for the '<em><b>Name</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute MODEL__NAME = eINSTANCE.getModel_Name();
+
+ /**
+ * The meta object literal for the '<em><b>Label</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute MODEL__LABEL = eINSTANCE.getModel_Label();
+
+ /**
+ * The meta object literal for the '<em><b>JV Ms</b></em>' containment reference list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference MODEL__JV_MS = eINSTANCE.getModel_JVMs();
+
+ /**
+ * The meta object literal for the '<em><b>Provider</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute MODEL__PROVIDER = eINSTANCE.getModel_Provider();
+
+ /**
+ * The meta object literal for the '<em><b>Provider Image Name</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute MODEL__PROVIDER_IMAGE_NAME = eINSTANCE.getModel_ProviderImageName();
+
+ /**
+ * The meta object literal for the '<em><b>Provider Image Data</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute MODEL__PROVIDER_IMAGE_DATA = eINSTANCE.getModel_ProviderImageData();
+
+ /**
+ * The meta object literal for the '<em><b>About URL</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute MODEL__ABOUT_URL = eINSTANCE.getModel_AboutURL();
+
+ /**
+ * The meta object literal for the '<em><b>Target</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute MODEL__TARGET = eINSTANCE.getModel_Target();
+
+ /**
+ * The meta object literal for the '<em><b>Source</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute MODEL__SOURCE = eINSTANCE.getModel_Source();
+
+ /**
+ * The meta object literal for the '<em><b>Local Cache</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute MODEL__LOCAL_CACHE = eINSTANCE.getModel_LocalCache();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.justj.codegen.model.impl.JVMImpl <em>JVM</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.justj.codegen.model.impl.JVMImpl
+ * @see org.eclipse.justj.codegen.model.impl.ModelPackageImpl#getJVM()
+ * @generated
+ */
+ EClass JVM = eINSTANCE.getJVM();
+
+ /**
+ * The meta object literal for the '<em><b>Name</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute JVM__NAME = eINSTANCE.getJVM_Name();
+
+ /**
+ * The meta object literal for the '<em><b>Version</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute JVM__VERSION = eINSTANCE.getJVM_Version();
+
+ /**
+ * The meta object literal for the '<em><b>Label</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute JVM__LABEL = eINSTANCE.getJVM_Label();
+
+ /**
+ * The meta object literal for the '<em><b>Variants</b></em>' containment reference list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference JVM__VARIANTS = eINSTANCE.getJVM_Variants();
+
+ /**
+ * The meta object literal for the '<em><b>Model</b></em>' container reference feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference JVM__MODEL = eINSTANCE.getJVM_Model();
+
+ /**
+ * The meta object literal for the '<em><b>About Text Extra</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute JVM__ABOUT_TEXT_EXTRA = eINSTANCE.getJVM_AboutTextExtra();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.justj.codegen.model.impl.VariantImpl <em>Variant</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.justj.codegen.model.impl.VariantImpl
+ * @see org.eclipse.justj.codegen.model.impl.ModelPackageImpl#getVariant()
+ * @generated
+ */
+ EClass VARIANT = eINSTANCE.getVariant();
+
+ /**
+ * The meta object literal for the '<em><b>Os</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute VARIANT__OS = eINSTANCE.getVariant_Os();
+
+ /**
+ * The meta object literal for the '<em><b>Arch</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute VARIANT__ARCH = eINSTANCE.getVariant_Arch();
+
+ /**
+ * The meta object literal for the '<em><b>JVM</b></em>' container reference feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference VARIANT__JVM = eINSTANCE.getVariant_JVM();
+
+ /**
+ * The meta object literal for the '<em><b>Label</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute VARIANT__LABEL = eINSTANCE.getVariant_Label();
+
+ /**
+ * The meta object literal for the '<em><b>Source</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute VARIANT__SOURCE = eINSTANCE.getVariant_Source();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.justj.codegen.model.impl.CopyrightableImpl <em>Copyrightable</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.justj.codegen.model.impl.CopyrightableImpl
+ * @see org.eclipse.justj.codegen.model.impl.ModelPackageImpl#getCopyrightable()
+ * @generated
+ */
+ EClass COPYRIGHTABLE = eINSTANCE.getCopyrightable();
+
+ /**
+ * The meta object literal for the '<em><b>Copyright Holder</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute COPYRIGHTABLE__COPYRIGHT_HOLDER = eINSTANCE.getCopyrightable_CopyrightHolder();
+
+ /**
+ * The meta object literal for the '<em><b>Copyright Year</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute COPYRIGHTABLE__COPYRIGHT_YEAR = eINSTANCE.getCopyrightable_CopyrightYear();
+
+ /**
+ * The meta object literal for the '<em><b>Copyright Text</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute COPYRIGHTABLE__COPYRIGHT_TEXT = eINSTANCE.getCopyrightable_CopyrightText();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.justj.codegen.model.impl.TouchpointImpl <em>Touchpoint</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.justj.codegen.model.impl.TouchpointImpl
+ * @see org.eclipse.justj.codegen.model.impl.ModelPackageImpl#getTouchpoint()
+ * @generated
+ */
+ EClass TOUCHPOINT = eINSTANCE.getTouchpoint();
+
+ /**
+ * The meta object literal for the '<em><b>Phase</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute TOUCHPOINT__PHASE = eINSTANCE.getTouchpoint_Phase();
+
+ /**
+ * The meta object literal for the '<em><b>Instructions</b></em>' attribute list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute TOUCHPOINT__INSTRUCTIONS = eINSTANCE.getTouchpoint_Instructions();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.justj.codegen.model.Touchable <em>Touchable</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.justj.codegen.model.Touchable
+ * @see org.eclipse.justj.codegen.model.impl.ModelPackageImpl#getTouchable()
+ * @generated
+ */
+ EClass TOUCHABLE = eINSTANCE.getTouchable();
+
+ /**
+ * The meta object literal for the '<em><b>Touchpoints</b></em>' containment reference list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference TOUCHABLE__TOUCHPOINTS = eINSTANCE.getTouchable_Touchpoints();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.justj.codegen.model.Phase <em>Phase</em>}' enum.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.justj.codegen.model.Phase
+ * @see org.eclipse.justj.codegen.model.impl.ModelPackageImpl#getPhase()
+ * @generated
+ */
+ EEnum PHASE = eINSTANCE.getPhase();
+
+ }
+
+} //ModelPackage
diff --git a/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/model/ModelPlugin.java b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/model/ModelPlugin.java
new file mode 100644
index 0000000..c815f73
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/model/ModelPlugin.java
@@ -0,0 +1,102 @@
+/**
+ * Copyright (c) 2020 Eclipse contributors and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.eclipse.justj.codegen.model;
+
+
+import org.eclipse.emf.common.EMFPlugin;
+import org.eclipse.emf.common.util.ResourceLocator;
+
+
+/**
+ * This is the central singleton for the Model model plugin.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public final class ModelPlugin extends EMFPlugin
+{
+ /**
+ * Keep track of the singleton.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static final ModelPlugin INSTANCE = new ModelPlugin();
+
+ /**
+ * 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 ModelPlugin()
+ {
+ 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.justj.codegen/src/org/eclipse/justj/codegen/model/Phase.java b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/model/Phase.java
new file mode 100644
index 0000000..08b6f3f
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/model/Phase.java
@@ -0,0 +1,231 @@
+/**
+ * Copyright (c) 2020 Eclipse contributors and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.eclipse.justj.codegen.model;
+
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.emf.common.util.Enumerator;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the literals of the enumeration '<em><b>Phase</b></em>',
+ * and utility methods for working with them.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.justj.codegen.model.ModelPackage#getPhase()
+ * @model
+ * @generated
+ */
+public enum Phase implements Enumerator
+{
+ /**
+ * The '<em><b>Install</b></em>' literal object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #INSTALL_VALUE
+ * @generated
+ * @ordered
+ */
+ INSTALL(0, "Install", "install"),
+
+ /**
+ * The '<em><b>Uninstall</b></em>' literal object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #UNINSTALL_VALUE
+ * @generated
+ * @ordered
+ */
+ UNINSTALL(1, "Uninstall", "uninstall");
+
+ /**
+ * The '<em><b>Install</b></em>' literal value.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #INSTALL
+ * @model name="Install" literal="install"
+ * @generated
+ * @ordered
+ */
+ public static final int INSTALL_VALUE = 0;
+
+ /**
+ * The '<em><b>Uninstall</b></em>' literal value.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #UNINSTALL
+ * @model name="Uninstall" literal="uninstall"
+ * @generated
+ * @ordered
+ */
+ public static final int UNINSTALL_VALUE = 1;
+
+ /**
+ * An array of all the '<em><b>Phase</b></em>' enumerators.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private static final Phase[] VALUES_ARRAY = new Phase []{ INSTALL, UNINSTALL, };
+
+ /**
+ * A public read-only list of all the '<em><b>Phase</b></em>' enumerators.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static final List<Phase> VALUES = Collections.unmodifiableList(Arrays.asList(VALUES_ARRAY));
+
+ /**
+ * Returns the '<em><b>Phase</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 Phase get(String literal)
+ {
+ for (int i = 0; i < VALUES_ARRAY.length; ++i)
+ {
+ Phase result = VALUES_ARRAY[i];
+ if (result.toString().equals(literal))
+ {
+ return result;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Returns the '<em><b>Phase</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 Phase getByName(String name)
+ {
+ for (int i = 0; i < VALUES_ARRAY.length; ++i)
+ {
+ Phase result = VALUES_ARRAY[i];
+ if (result.getName().equals(name))
+ {
+ return result;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Returns the '<em><b>Phase</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 Phase get(int value)
+ {
+ switch (value)
+ {
+ case INSTALL_VALUE:
+ return INSTALL;
+ case UNINSTALL_VALUE:
+ return UNINSTALL;
+ }
+ 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 Phase(int value, String name, String literal)
+ {
+ this.value = value;
+ this.name = name;
+ this.literal = literal;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public int getValue()
+ {
+ return value;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String getName()
+ {
+ return name;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ 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;
+ }
+
+} //Phase
diff --git a/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/model/Touchable.java b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/model/Touchable.java
new file mode 100644
index 0000000..947cb2d
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/model/Touchable.java
@@ -0,0 +1,48 @@
+/**
+ * Copyright (c) 2020 Eclipse contributors and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.eclipse.justj.codegen.model;
+
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EObject;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Touchable</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.justj.codegen.model.Touchable#getTouchpoints <em>Touchpoints</em>}</li>
+ * </ul>
+ *
+ * @see org.eclipse.justj.codegen.model.ModelPackage#getTouchable()
+ * @model interface="true" abstract="true"
+ * @generated
+ */
+public interface Touchable extends EObject
+{
+ /**
+ * Returns the value of the '<em><b>Touchpoints</b></em>' containment reference list.
+ * The list contents are of type {@link org.eclipse.justj.codegen.model.Touchpoint}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Touchpoints</em>' containment reference list.
+ * @see org.eclipse.justj.codegen.model.ModelPackage#getTouchable_Touchpoints()
+ * @model containment="true"
+ * @generated
+ */
+ EList<Touchpoint> getTouchpoints();
+
+} // Touchable
diff --git a/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/model/Touchpoint.java b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/model/Touchpoint.java
new file mode 100644
index 0000000..844213d
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/model/Touchpoint.java
@@ -0,0 +1,75 @@
+/**
+ * Copyright (c) 2020 Eclipse contributors and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.eclipse.justj.codegen.model;
+
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EObject;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Touchpoint</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.justj.codegen.model.Touchpoint#getPhase <em>Phase</em>}</li>
+ * <li>{@link org.eclipse.justj.codegen.model.Touchpoint#getInstructions <em>Instructions</em>}</li>
+ * </ul>
+ *
+ * @see org.eclipse.justj.codegen.model.ModelPackage#getTouchpoint()
+ * @model
+ * @generated
+ */
+public interface Touchpoint extends EObject
+{
+ /**
+ * Returns the value of the '<em><b>Phase</b></em>' attribute.
+ * The literals are from the enumeration {@link org.eclipse.justj.codegen.model.Phase}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Phase</em>' attribute.
+ * @see org.eclipse.justj.codegen.model.Phase
+ * @see #setPhase(Phase)
+ * @see org.eclipse.justj.codegen.model.ModelPackage#getTouchpoint_Phase()
+ * @model
+ * @generated
+ */
+ Phase getPhase();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.justj.codegen.model.Touchpoint#getPhase <em>Phase</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Phase</em>' attribute.
+ * @see org.eclipse.justj.codegen.model.Phase
+ * @see #getPhase()
+ * @generated
+ */
+ void setPhase(Phase value);
+
+ /**
+ * Returns the value of the '<em><b>Instructions</b></em>' attribute list.
+ * The list contents are of type {@link java.lang.String}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Instructions</em>' attribute list.
+ * @see org.eclipse.justj.codegen.model.ModelPackage#getTouchpoint_Instructions()
+ * @model unique="false" required="true"
+ * extendedMetaData="kind='element' name='instruction'"
+ * @generated
+ */
+ EList<String> getInstructions();
+
+} // Touchpoint
diff --git a/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/model/Variant.java b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/model/Variant.java
new file mode 100644
index 0000000..f09f977
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/model/Variant.java
@@ -0,0 +1,149 @@
+/**
+ * Copyright (c) 2020 Eclipse contributors and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.eclipse.justj.codegen.model;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Variant</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.justj.codegen.model.Variant#getOs <em>Os</em>}</li>
+ * <li>{@link org.eclipse.justj.codegen.model.Variant#getArch <em>Arch</em>}</li>
+ * <li>{@link org.eclipse.justj.codegen.model.Variant#getLabel <em>Label</em>}</li>
+ * <li>{@link org.eclipse.justj.codegen.model.Variant#getSource <em>Source</em>}</li>
+ * <li>{@link org.eclipse.justj.codegen.model.Variant#getJVM <em>JVM</em>}</li>
+ * </ul>
+ *
+ * @see org.eclipse.justj.codegen.model.ModelPackage#getVariant()
+ * @model
+ * @generated
+ */
+public interface Variant extends Copyrightable, Touchable
+{
+ /**
+ * Returns the value of the '<em><b>Os</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Os</em>' attribute.
+ * @see #setOs(String)
+ * @see org.eclipse.justj.codegen.model.ModelPackage#getVariant_Os()
+ * @model required="true"
+ * @generated
+ */
+ String getOs();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.justj.codegen.model.Variant#getOs <em>Os</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Os</em>' attribute.
+ * @see #getOs()
+ * @generated
+ */
+ void setOs(String value);
+
+ /**
+ * Returns the value of the '<em><b>Arch</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Arch</em>' attribute.
+ * @see #setArch(String)
+ * @see org.eclipse.justj.codegen.model.ModelPackage#getVariant_Arch()
+ * @model required="true"
+ * @generated
+ */
+ String getArch();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.justj.codegen.model.Variant#getArch <em>Arch</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Arch</em>' attribute.
+ * @see #getArch()
+ * @generated
+ */
+ void setArch(String value);
+
+ /**
+ * Returns the value of the '<em><b>JVM</b></em>' container reference.
+ * It is bidirectional and its opposite is '{@link org.eclipse.justj.codegen.model.JVM#getVariants <em>Variants</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>JVM</em>' container reference.
+ * @see #setJVM(JVM)
+ * @see org.eclipse.justj.codegen.model.ModelPackage#getVariant_JVM()
+ * @see org.eclipse.justj.codegen.model.JVM#getVariants
+ * @model opposite="variants" resolveProxies="false"
+ * extendedMetaData="name='jvm' kind='element'"
+ * @generated
+ */
+ JVM getJVM();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.justj.codegen.model.Variant#getJVM <em>JVM</em>}' container reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>JVM</em>' container reference.
+ * @see #getJVM()
+ * @generated
+ */
+ void setJVM(JVM value);
+
+ /**
+ * Returns the value of the '<em><b>Label</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Label</em>' attribute.
+ * @see #setLabel(String)
+ * @see org.eclipse.justj.codegen.model.ModelPackage#getVariant_Label()
+ * @model required="true"
+ * @generated
+ */
+ String getLabel();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.justj.codegen.model.Variant#getLabel <em>Label</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Label</em>' attribute.
+ * @see #getLabel()
+ * @generated
+ */
+ void setLabel(String value);
+
+ /**
+ * Returns the value of the '<em><b>Source</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Source</em>' attribute.
+ * @see #setSource(String)
+ * @see org.eclipse.justj.codegen.model.ModelPackage#getVariant_Source()
+ * @model dataType="org.eclipse.emf.ecore.xml.type.String"
+ * @generated
+ */
+ String getSource();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.justj.codegen.model.Variant#getSource <em>Source</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Source</em>' attribute.
+ * @see #getSource()
+ * @generated
+ */
+ void setSource(String value);
+
+} // Variant
diff --git a/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/model/impl/CopyrightableImpl.java b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/model/impl/CopyrightableImpl.java
new file mode 100644
index 0000000..d3644b1
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/model/impl/CopyrightableImpl.java
@@ -0,0 +1,311 @@
+/**
+ * Copyright (c) 2020 Eclipse contributors and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.eclipse.justj.codegen.model.impl;
+
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+import org.eclipse.justj.codegen.model.Copyrightable;
+import org.eclipse.justj.codegen.model.ModelPackage;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Copyrightable</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.justj.codegen.model.impl.CopyrightableImpl#getCopyrightHolder <em>Copyright Holder</em>}</li>
+ * <li>{@link org.eclipse.justj.codegen.model.impl.CopyrightableImpl#getCopyrightYear <em>Copyright Year</em>}</li>
+ * <li>{@link org.eclipse.justj.codegen.model.impl.CopyrightableImpl#getCopyrightText <em>Copyright Text</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public abstract class CopyrightableImpl extends MinimalEObjectImpl.Container implements Copyrightable
+{
+ /**
+ * The default value of the '{@link #getCopyrightHolder() <em>Copyright Holder</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getCopyrightHolder()
+ * @generated
+ * @ordered
+ */
+ protected static final String COPYRIGHT_HOLDER_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getCopyrightHolder() <em>Copyright Holder</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getCopyrightHolder()
+ * @generated
+ * @ordered
+ */
+ protected String copyrightHolder = COPYRIGHT_HOLDER_EDEFAULT;
+
+ /**
+ * The default value of the '{@link #getCopyrightYear() <em>Copyright Year</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getCopyrightYear()
+ * @generated
+ * @ordered
+ */
+ protected static final String COPYRIGHT_YEAR_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getCopyrightYear() <em>Copyright Year</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getCopyrightYear()
+ * @generated
+ * @ordered
+ */
+ protected String copyrightYear = COPYRIGHT_YEAR_EDEFAULT;
+
+ /**
+ * The default value of the '{@link #getCopyrightText() <em>Copyright Text</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getCopyrightText()
+ * @generated
+ * @ordered
+ */
+ protected static final String COPYRIGHT_TEXT_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getCopyrightText() <em>Copyright Text</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getCopyrightText()
+ * @generated
+ * @ordered
+ */
+ protected String copyrightText = COPYRIGHT_TEXT_EDEFAULT;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected CopyrightableImpl()
+ {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass()
+ {
+ return ModelPackage.Literals.COPYRIGHTABLE;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String getCopyrightHolder()
+ {
+ return copyrightHolder;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void setCopyrightHolder(String newCopyrightHolder)
+ {
+ String oldCopyrightHolder = copyrightHolder;
+ copyrightHolder = newCopyrightHolder;
+ if (eNotificationRequired())
+ {
+ eNotify(new ENotificationImpl(this, Notification.SET, ModelPackage.COPYRIGHTABLE__COPYRIGHT_HOLDER, oldCopyrightHolder, copyrightHolder));
+ }
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String getCopyrightYear()
+ {
+ return copyrightYear;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void setCopyrightYear(String newCopyrightYear)
+ {
+ String oldCopyrightYear = copyrightYear;
+ copyrightYear = newCopyrightYear;
+ if (eNotificationRequired())
+ {
+ eNotify(new ENotificationImpl(this, Notification.SET, ModelPackage.COPYRIGHTABLE__COPYRIGHT_YEAR, oldCopyrightYear, copyrightYear));
+ }
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String getCopyrightText()
+ {
+ return copyrightText;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void setCopyrightText(String newCopyrightText)
+ {
+ String oldCopyrightText = copyrightText;
+ copyrightText = newCopyrightText;
+ if (eNotificationRequired())
+ {
+ eNotify(new ENotificationImpl(this, Notification.SET, ModelPackage.COPYRIGHTABLE__COPYRIGHT_TEXT, oldCopyrightText, copyrightText));
+ }
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType)
+ {
+ switch (featureID)
+ {
+ case ModelPackage.COPYRIGHTABLE__COPYRIGHT_HOLDER:
+ return getCopyrightHolder();
+ case ModelPackage.COPYRIGHTABLE__COPYRIGHT_YEAR:
+ return getCopyrightYear();
+ case ModelPackage.COPYRIGHTABLE__COPYRIGHT_TEXT:
+ return getCopyrightText();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eSet(int featureID, Object newValue)
+ {
+ switch (featureID)
+ {
+ case ModelPackage.COPYRIGHTABLE__COPYRIGHT_HOLDER:
+ setCopyrightHolder((String)newValue);
+ return;
+ case ModelPackage.COPYRIGHTABLE__COPYRIGHT_YEAR:
+ setCopyrightYear((String)newValue);
+ return;
+ case ModelPackage.COPYRIGHTABLE__COPYRIGHT_TEXT:
+ setCopyrightText((String)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID)
+ {
+ switch (featureID)
+ {
+ case ModelPackage.COPYRIGHTABLE__COPYRIGHT_HOLDER:
+ setCopyrightHolder(COPYRIGHT_HOLDER_EDEFAULT);
+ return;
+ case ModelPackage.COPYRIGHTABLE__COPYRIGHT_YEAR:
+ setCopyrightYear(COPYRIGHT_YEAR_EDEFAULT);
+ return;
+ case ModelPackage.COPYRIGHTABLE__COPYRIGHT_TEXT:
+ setCopyrightText(COPYRIGHT_TEXT_EDEFAULT);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID)
+ {
+ switch (featureID)
+ {
+ case ModelPackage.COPYRIGHTABLE__COPYRIGHT_HOLDER:
+ return COPYRIGHT_HOLDER_EDEFAULT == null ? copyrightHolder != null : !COPYRIGHT_HOLDER_EDEFAULT.equals(copyrightHolder);
+ case ModelPackage.COPYRIGHTABLE__COPYRIGHT_YEAR:
+ return COPYRIGHT_YEAR_EDEFAULT == null ? copyrightYear != null : !COPYRIGHT_YEAR_EDEFAULT.equals(copyrightYear);
+ case ModelPackage.COPYRIGHTABLE__COPYRIGHT_TEXT:
+ return COPYRIGHT_TEXT_EDEFAULT == null ? copyrightText != null : !COPYRIGHT_TEXT_EDEFAULT.equals(copyrightText);
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String toString()
+ {
+ if (eIsProxy())
+ {
+ return super.toString();
+ }
+
+ StringBuilder result = new StringBuilder(super.toString());
+ result.append(" (copyrightHolder: ");
+ result.append(copyrightHolder);
+ result.append(", copyrightYear: ");
+ result.append(copyrightYear);
+ result.append(", copyrightText: ");
+ result.append(copyrightText);
+ result.append(')');
+ return result.toString();
+ }
+
+} //CopyrightableImpl
diff --git a/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/model/impl/JVMImpl.java b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/model/impl/JVMImpl.java
new file mode 100644
index 0000000..296eab9
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/model/impl/JVMImpl.java
@@ -0,0 +1,631 @@
+/**
+ * Copyright (c) 2020 Eclipse contributors and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.eclipse.justj.codegen.model.impl;
+
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.EObjectContainmentWithInverseEList;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.emf.ecore.util.InternalEList;
+import org.eclipse.justj.codegen.model.JVM;
+import org.eclipse.justj.codegen.model.Model;
+import org.eclipse.justj.codegen.model.ModelPackage;
+import org.eclipse.justj.codegen.model.Touchable;
+import org.eclipse.justj.codegen.model.Touchpoint;
+import org.eclipse.justj.codegen.model.Variant;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>JVM</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.justj.codegen.model.impl.JVMImpl#getTouchpoints <em>Touchpoints</em>}</li>
+ * <li>{@link org.eclipse.justj.codegen.model.impl.JVMImpl#getName <em>Name</em>}</li>
+ * <li>{@link org.eclipse.justj.codegen.model.impl.JVMImpl#getVersion <em>Version</em>}</li>
+ * <li>{@link org.eclipse.justj.codegen.model.impl.JVMImpl#getLabel <em>Label</em>}</li>
+ * <li>{@link org.eclipse.justj.codegen.model.impl.JVMImpl#getModel <em>Model</em>}</li>
+ * <li>{@link org.eclipse.justj.codegen.model.impl.JVMImpl#getAboutTextExtra <em>About Text Extra</em>}</li>
+ * <li>{@link org.eclipse.justj.codegen.model.impl.JVMImpl#getVariants <em>Variants</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class JVMImpl extends CopyrightableImpl implements JVM
+{
+ /**
+ * The cached value of the '{@link #getTouchpoints() <em>Touchpoints</em>}' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getTouchpoints()
+ * @generated
+ * @ordered
+ */
+ protected EList<Touchpoint> touchpoints;
+
+ /**
+ * The default value of the '{@link #getName() <em>Name</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getName()
+ * @generated
+ * @ordered
+ */
+ protected static final String NAME_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getName() <em>Name</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getName()
+ * @generated
+ * @ordered
+ */
+ protected String name = NAME_EDEFAULT;
+
+ /**
+ * The default value of the '{@link #getVersion() <em>Version</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getVersion()
+ * @generated
+ * @ordered
+ */
+ protected static final String VERSION_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getVersion() <em>Version</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getVersion()
+ * @generated
+ * @ordered
+ */
+ protected String version = VERSION_EDEFAULT;
+
+ /**
+ * The default value of the '{@link #getLabel() <em>Label</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getLabel()
+ * @generated
+ * @ordered
+ */
+ protected static final String LABEL_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getLabel() <em>Label</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getLabel()
+ * @generated
+ * @ordered
+ */
+ protected String label = LABEL_EDEFAULT;
+
+ /**
+ * The default value of the '{@link #getAboutTextExtra() <em>About Text Extra</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getAboutTextExtra()
+ * @generated
+ * @ordered
+ */
+ protected static final String ABOUT_TEXT_EXTRA_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getAboutTextExtra() <em>About Text Extra</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getAboutTextExtra()
+ * @generated
+ * @ordered
+ */
+ protected String aboutTextExtra = ABOUT_TEXT_EXTRA_EDEFAULT;
+
+ /**
+ * The cached value of the '{@link #getVariants() <em>Variants</em>}' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getVariants()
+ * @generated
+ * @ordered
+ */
+ protected EList<Variant> variants;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected JVMImpl()
+ {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass()
+ {
+ return ModelPackage.Literals.JVM;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public EList<Touchpoint> getTouchpoints()
+ {
+ if (touchpoints == null)
+ {
+ touchpoints = new EObjectContainmentEList<Touchpoint>(Touchpoint.class, this, ModelPackage.JVM__TOUCHPOINTS);
+ }
+ return touchpoints;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String getName()
+ {
+ return name;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void setName(String newName)
+ {
+ String oldName = name;
+ name = newName;
+ if (eNotificationRequired())
+ {
+ eNotify(new ENotificationImpl(this, Notification.SET, ModelPackage.JVM__NAME, oldName, name));
+ }
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String getVersion()
+ {
+ return version;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void setVersion(String newVersion)
+ {
+ String oldVersion = version;
+ version = newVersion;
+ if (eNotificationRequired())
+ {
+ eNotify(new ENotificationImpl(this, Notification.SET, ModelPackage.JVM__VERSION, oldVersion, version));
+ }
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String getLabel()
+ {
+ return label;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void setLabel(String newLabel)
+ {
+ String oldLabel = label;
+ label = newLabel;
+ if (eNotificationRequired())
+ {
+ eNotify(new ENotificationImpl(this, Notification.SET, ModelPackage.JVM__LABEL, oldLabel, label));
+ }
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public EList<Variant> getVariants()
+ {
+ if (variants == null)
+ {
+ variants = new EObjectContainmentWithInverseEList<Variant>(Variant.class, this, ModelPackage.JVM__VARIANTS, ModelPackage.VARIANT__JVM);
+ }
+ return variants;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Model getModel()
+ {
+ if (eContainerFeatureID() != ModelPackage.JVM__MODEL)
+ {
+ return null;
+ }
+ return (Model)eInternalContainer();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public NotificationChain basicSetModel(Model newModel, NotificationChain msgs)
+ {
+ msgs = eBasicSetContainer((InternalEObject)newModel, ModelPackage.JVM__MODEL, msgs);
+ return msgs;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void setModel(Model newModel)
+ {
+ if (newModel != eInternalContainer() || (eContainerFeatureID() != ModelPackage.JVM__MODEL && newModel != null))
+ {
+ if (EcoreUtil.isAncestor(this, newModel))
+ {
+ throw new IllegalArgumentException("Recursive containment not allowed for " + toString());
+ }
+ NotificationChain msgs = null;
+ if (eInternalContainer() != null)
+ {
+ msgs = eBasicRemoveFromContainer(msgs);
+ }
+ if (newModel != null)
+ {
+ msgs = ((InternalEObject)newModel).eInverseAdd(this, ModelPackage.MODEL__JV_MS, Model.class, msgs);
+ }
+ msgs = basicSetModel(newModel, msgs);
+ if (msgs != null)
+ {
+ msgs.dispatch();
+ }
+ }
+ else if (eNotificationRequired())
+ {
+ eNotify(new ENotificationImpl(this, Notification.SET, ModelPackage.JVM__MODEL, newModel, newModel));
+ }
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String getAboutTextExtra()
+ {
+ return aboutTextExtra;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void setAboutTextExtra(String newAboutTextExtra)
+ {
+ String oldAboutTextExtra = aboutTextExtra;
+ aboutTextExtra = newAboutTextExtra;
+ if (eNotificationRequired())
+ {
+ eNotify(new ENotificationImpl(this, Notification.SET, ModelPackage.JVM__ABOUT_TEXT_EXTRA, oldAboutTextExtra, aboutTextExtra));
+ }
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+ {
+ switch (featureID)
+ {
+ case ModelPackage.JVM__MODEL:
+ if (eInternalContainer() != null)
+ {
+ msgs = eBasicRemoveFromContainer(msgs);
+ }
+ return basicSetModel((Model)otherEnd, msgs);
+ case ModelPackage.JVM__VARIANTS:
+ return ((InternalEList<InternalEObject>)(InternalEList<?>)getVariants()).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 ModelPackage.JVM__TOUCHPOINTS:
+ return ((InternalEList<?>)getTouchpoints()).basicRemove(otherEnd, msgs);
+ case ModelPackage.JVM__MODEL:
+ return basicSetModel(null, msgs);
+ case ModelPackage.JVM__VARIANTS:
+ return ((InternalEList<?>)getVariants()).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 ModelPackage.JVM__MODEL:
+ return eInternalContainer().eInverseRemove(this, ModelPackage.MODEL__JV_MS, Model.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 ModelPackage.JVM__TOUCHPOINTS:
+ return getTouchpoints();
+ case ModelPackage.JVM__NAME:
+ return getName();
+ case ModelPackage.JVM__VERSION:
+ return getVersion();
+ case ModelPackage.JVM__LABEL:
+ return getLabel();
+ case ModelPackage.JVM__MODEL:
+ return getModel();
+ case ModelPackage.JVM__ABOUT_TEXT_EXTRA:
+ return getAboutTextExtra();
+ case ModelPackage.JVM__VARIANTS:
+ return getVariants();
+ }
+ 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 ModelPackage.JVM__TOUCHPOINTS:
+ getTouchpoints().clear();
+ getTouchpoints().addAll((Collection<? extends Touchpoint>)newValue);
+ return;
+ case ModelPackage.JVM__NAME:
+ setName((String)newValue);
+ return;
+ case ModelPackage.JVM__VERSION:
+ setVersion((String)newValue);
+ return;
+ case ModelPackage.JVM__LABEL:
+ setLabel((String)newValue);
+ return;
+ case ModelPackage.JVM__MODEL:
+ setModel((Model)newValue);
+ return;
+ case ModelPackage.JVM__ABOUT_TEXT_EXTRA:
+ setAboutTextExtra((String)newValue);
+ return;
+ case ModelPackage.JVM__VARIANTS:
+ getVariants().clear();
+ getVariants().addAll((Collection<? extends Variant>)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID)
+ {
+ switch (featureID)
+ {
+ case ModelPackage.JVM__TOUCHPOINTS:
+ getTouchpoints().clear();
+ return;
+ case ModelPackage.JVM__NAME:
+ setName(NAME_EDEFAULT);
+ return;
+ case ModelPackage.JVM__VERSION:
+ setVersion(VERSION_EDEFAULT);
+ return;
+ case ModelPackage.JVM__LABEL:
+ setLabel(LABEL_EDEFAULT);
+ return;
+ case ModelPackage.JVM__MODEL:
+ setModel((Model)null);
+ return;
+ case ModelPackage.JVM__ABOUT_TEXT_EXTRA:
+ setAboutTextExtra(ABOUT_TEXT_EXTRA_EDEFAULT);
+ return;
+ case ModelPackage.JVM__VARIANTS:
+ getVariants().clear();
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID)
+ {
+ switch (featureID)
+ {
+ case ModelPackage.JVM__TOUCHPOINTS:
+ return touchpoints != null && !touchpoints.isEmpty();
+ case ModelPackage.JVM__NAME:
+ return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
+ case ModelPackage.JVM__VERSION:
+ return VERSION_EDEFAULT == null ? version != null : !VERSION_EDEFAULT.equals(version);
+ case ModelPackage.JVM__LABEL:
+ return LABEL_EDEFAULT == null ? label != null : !LABEL_EDEFAULT.equals(label);
+ case ModelPackage.JVM__MODEL:
+ return getModel() != null;
+ case ModelPackage.JVM__ABOUT_TEXT_EXTRA:
+ return ABOUT_TEXT_EXTRA_EDEFAULT == null ? aboutTextExtra != null : !ABOUT_TEXT_EXTRA_EDEFAULT.equals(aboutTextExtra);
+ case ModelPackage.JVM__VARIANTS:
+ return variants != null && !variants.isEmpty();
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public int eBaseStructuralFeatureID(int derivedFeatureID, Class<?> baseClass)
+ {
+ if (baseClass == Touchable.class)
+ {
+ switch (derivedFeatureID)
+ {
+ case ModelPackage.JVM__TOUCHPOINTS:
+ return ModelPackage.TOUCHABLE__TOUCHPOINTS;
+ default:
+ return -1;
+ }
+ }
+ return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public int eDerivedStructuralFeatureID(int baseFeatureID, Class<?> baseClass)
+ {
+ if (baseClass == Touchable.class)
+ {
+ switch (baseFeatureID)
+ {
+ case ModelPackage.TOUCHABLE__TOUCHPOINTS:
+ return ModelPackage.JVM__TOUCHPOINTS;
+ default:
+ return -1;
+ }
+ }
+ return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String toString()
+ {
+ if (eIsProxy())
+ {
+ return super.toString();
+ }
+
+ StringBuilder result = new StringBuilder(super.toString());
+ result.append(" (name: ");
+ result.append(name);
+ result.append(", version: ");
+ result.append(version);
+ result.append(", label: ");
+ result.append(label);
+ result.append(", aboutTextExtra: ");
+ result.append(aboutTextExtra);
+ result.append(')');
+ return result.toString();
+ }
+
+} //JVMImpl
diff --git a/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/model/impl/ModelFactoryImpl.java b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/model/impl/ModelFactoryImpl.java
new file mode 100644
index 0000000..b2d9fac
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/model/impl/ModelFactoryImpl.java
@@ -0,0 +1,212 @@
+/**
+ * Copyright (c) 2020 Eclipse contributors and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.eclipse.justj.codegen.model.impl;
+
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EDataType;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.impl.EFactoryImpl;
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+import org.eclipse.justj.codegen.model.JVM;
+import org.eclipse.justj.codegen.model.Model;
+import org.eclipse.justj.codegen.model.ModelFactory;
+import org.eclipse.justj.codegen.model.ModelPackage;
+import org.eclipse.justj.codegen.model.Phase;
+import org.eclipse.justj.codegen.model.Touchpoint;
+import org.eclipse.justj.codegen.model.Variant;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Factory</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ModelFactoryImpl extends EFactoryImpl implements ModelFactory
+{
+ /**
+ * Creates the default factory implementation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static ModelFactory init()
+ {
+ try
+ {
+ ModelFactory theModelFactory = (ModelFactory)EPackage.Registry.INSTANCE.getEFactory(ModelPackage.eNS_URI);
+ if (theModelFactory != null)
+ {
+ return theModelFactory;
+ }
+ }
+ catch (Exception exception)
+ {
+ EcorePlugin.INSTANCE.log(exception);
+ }
+ return new ModelFactoryImpl();
+ }
+
+ /**
+ * Creates an instance of the factory.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public ModelFactoryImpl()
+ {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public EObject create(EClass eClass)
+ {
+ switch (eClass.getClassifierID())
+ {
+ case ModelPackage.MODEL:
+ return createModel();
+ case ModelPackage.JVM:
+ return createJVM();
+ case ModelPackage.VARIANT:
+ return createVariant();
+ case ModelPackage.TOUCHPOINT:
+ return createTouchpoint();
+ 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 ModelPackage.PHASE:
+ return createPhaseFromString(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 ModelPackage.PHASE:
+ return convertPhaseToString(eDataType, instanceValue);
+ default:
+ throw new IllegalArgumentException("The datatype '" + eDataType.getName() + "' is not a valid classifier");
+ }
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Model createModel()
+ {
+ ModelImpl model = new ModelImpl();
+ return model;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public JVM createJVM()
+ {
+ JVMImpl jvm = new JVMImpl();
+ return jvm;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Variant createVariant()
+ {
+ VariantImpl variant = new VariantImpl();
+ return variant;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Touchpoint createTouchpoint()
+ {
+ TouchpointImpl touchpoint = new TouchpointImpl();
+ return touchpoint;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public Phase createPhaseFromString(EDataType eDataType, String initialValue)
+ {
+ Phase result = Phase.get(initialValue);
+ if (result == null)
+ {
+ throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'");
+ }
+ return result;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public String convertPhaseToString(EDataType eDataType, Object instanceValue)
+ {
+ return instanceValue == null ? null : instanceValue.toString();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public ModelPackage getModelPackage()
+ {
+ return (ModelPackage)getEPackage();
+ }
+
+} //ModelFactoryImpl
diff --git a/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/model/impl/ModelImpl.java b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/model/impl/ModelImpl.java
new file mode 100644
index 0000000..7b3183a
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/model/impl/ModelImpl.java
@@ -0,0 +1,834 @@
+/**
+ * Copyright (c) 2020 Eclipse contributors and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.eclipse.justj.codegen.model.impl;
+
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.EObjectContainmentWithInverseEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+import org.eclipse.justj.codegen.model.JVM;
+import org.eclipse.justj.codegen.model.Model;
+import org.eclipse.justj.codegen.model.ModelPackage;
+import org.eclipse.justj.codegen.model.Touchable;
+import org.eclipse.justj.codegen.model.Touchpoint;
+
+
+/**
+ * <!-- 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.justj.codegen.model.impl.ModelImpl#getTouchpoints <em>Touchpoints</em>}</li>
+ * <li>{@link org.eclipse.justj.codegen.model.impl.ModelImpl#getName <em>Name</em>}</li>
+ * <li>{@link org.eclipse.justj.codegen.model.impl.ModelImpl#getLabel <em>Label</em>}</li>
+ * <li>{@link org.eclipse.justj.codegen.model.impl.ModelImpl#getProvider <em>Provider</em>}</li>
+ * <li>{@link org.eclipse.justj.codegen.model.impl.ModelImpl#getProviderImageName <em>Provider Image Name</em>}</li>
+ * <li>{@link org.eclipse.justj.codegen.model.impl.ModelImpl#getProviderImageData <em>Provider Image Data</em>}</li>
+ * <li>{@link org.eclipse.justj.codegen.model.impl.ModelImpl#getAboutURL <em>About URL</em>}</li>
+ * <li>{@link org.eclipse.justj.codegen.model.impl.ModelImpl#getTarget <em>Target</em>}</li>
+ * <li>{@link org.eclipse.justj.codegen.model.impl.ModelImpl#getSource <em>Source</em>}</li>
+ * <li>{@link org.eclipse.justj.codegen.model.impl.ModelImpl#getLocalCache <em>Local Cache</em>}</li>
+ * <li>{@link org.eclipse.justj.codegen.model.impl.ModelImpl#getJVMs <em>JV Ms</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class ModelImpl extends CopyrightableImpl implements Model
+{
+ /**
+ * The cached value of the '{@link #getTouchpoints() <em>Touchpoints</em>}' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getTouchpoints()
+ * @generated
+ * @ordered
+ */
+ protected EList<Touchpoint> touchpoints;
+
+ /**
+ * The default value of the '{@link #getName() <em>Name</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getName()
+ * @generated
+ * @ordered
+ */
+ protected static final String NAME_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getName() <em>Name</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getName()
+ * @generated
+ * @ordered
+ */
+ protected String name = NAME_EDEFAULT;
+
+ /**
+ * The default value of the '{@link #getLabel() <em>Label</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getLabel()
+ * @generated
+ * @ordered
+ */
+ protected static final String LABEL_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getLabel() <em>Label</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getLabel()
+ * @generated
+ * @ordered
+ */
+ protected String label = LABEL_EDEFAULT;
+
+ /**
+ * The default value of the '{@link #getProvider() <em>Provider</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getProvider()
+ * @generated
+ * @ordered
+ */
+ protected static final String PROVIDER_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getProvider() <em>Provider</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getProvider()
+ * @generated
+ * @ordered
+ */
+ protected String provider = PROVIDER_EDEFAULT;
+
+ /**
+ * The default value of the '{@link #getProviderImageName() <em>Provider Image Name</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getProviderImageName()
+ * @generated
+ * @ordered
+ */
+ protected static final String PROVIDER_IMAGE_NAME_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getProviderImageName() <em>Provider Image Name</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getProviderImageName()
+ * @generated
+ * @ordered
+ */
+ protected String providerImageName = PROVIDER_IMAGE_NAME_EDEFAULT;
+
+ /**
+ * The default value of the '{@link #getProviderImageData() <em>Provider Image Data</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getProviderImageData()
+ * @generated
+ * @ordered
+ */
+ protected static final byte[] PROVIDER_IMAGE_DATA_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getProviderImageData() <em>Provider Image Data</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getProviderImageData()
+ * @generated
+ * @ordered
+ */
+ protected byte[] providerImageData = PROVIDER_IMAGE_DATA_EDEFAULT;
+
+ /**
+ * The default value of the '{@link #getAboutURL() <em>About URL</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getAboutURL()
+ * @generated
+ * @ordered
+ */
+ protected static final String ABOUT_URL_EDEFAULT = "https://www.eclipse.org/legal/epl/epl-2.0/about.html";
+
+ /**
+ * The cached value of the '{@link #getAboutURL() <em>About URL</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getAboutURL()
+ * @generated
+ * @ordered
+ */
+ protected String aboutURL = ABOUT_URL_EDEFAULT;
+
+ /**
+ * The default value of the '{@link #getTarget() <em>Target</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getTarget()
+ * @generated
+ * @ordered
+ */
+ protected static final String TARGET_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getTarget() <em>Target</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getTarget()
+ * @generated
+ * @ordered
+ */
+ protected String target = TARGET_EDEFAULT;
+
+ /**
+ * The default value of the '{@link #getSource() <em>Source</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getSource()
+ * @generated
+ * @ordered
+ */
+ protected static final String SOURCE_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getSource() <em>Source</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getSource()
+ * @generated
+ * @ordered
+ */
+ protected String source = SOURCE_EDEFAULT;
+
+ /**
+ * The default value of the '{@link #getLocalCache() <em>Local Cache</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getLocalCache()
+ * @generated
+ * @ordered
+ */
+ protected static final String LOCAL_CACHE_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getLocalCache() <em>Local Cache</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getLocalCache()
+ * @generated
+ * @ordered
+ */
+ protected String localCache = LOCAL_CACHE_EDEFAULT;
+
+ /**
+ * The cached value of the '{@link #getJVMs() <em>JV Ms</em>}' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getJVMs()
+ * @generated
+ * @ordered
+ */
+ protected EList<JVM> jVMs;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected ModelImpl()
+ {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass()
+ {
+ return ModelPackage.Literals.MODEL;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public EList<Touchpoint> getTouchpoints()
+ {
+ if (touchpoints == null)
+ {
+ touchpoints = new EObjectContainmentEList<Touchpoint>(Touchpoint.class, this, ModelPackage.MODEL__TOUCHPOINTS);
+ }
+ return touchpoints;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String getName()
+ {
+ return name;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void setName(String newName)
+ {
+ String oldName = name;
+ name = newName;
+ if (eNotificationRequired())
+ {
+ eNotify(new ENotificationImpl(this, Notification.SET, ModelPackage.MODEL__NAME, oldName, name));
+ }
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String getLabel()
+ {
+ return label;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void setLabel(String newLabel)
+ {
+ String oldLabel = label;
+ label = newLabel;
+ if (eNotificationRequired())
+ {
+ eNotify(new ENotificationImpl(this, Notification.SET, ModelPackage.MODEL__LABEL, oldLabel, label));
+ }
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public EList<JVM> getJVMs()
+ {
+ if (jVMs == null)
+ {
+ jVMs = new EObjectContainmentWithInverseEList<JVM>(JVM.class, this, ModelPackage.MODEL__JV_MS, ModelPackage.JVM__MODEL);
+ }
+ return jVMs;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String getProvider()
+ {
+ return provider;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void setProvider(String newProvider)
+ {
+ String oldProvider = provider;
+ provider = newProvider;
+ if (eNotificationRequired())
+ {
+ eNotify(new ENotificationImpl(this, Notification.SET, ModelPackage.MODEL__PROVIDER, oldProvider, provider));
+ }
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String getProviderImageName()
+ {
+ return providerImageName;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void setProviderImageName(String newProviderImageName)
+ {
+ String oldProviderImageName = providerImageName;
+ providerImageName = newProviderImageName;
+ if (eNotificationRequired())
+ {
+ eNotify(new ENotificationImpl(this, Notification.SET, ModelPackage.MODEL__PROVIDER_IMAGE_NAME, oldProviderImageName, providerImageName));
+ }
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public byte[] getProviderImageData()
+ {
+ return providerImageData;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void setProviderImageData(byte[] newProviderImageData)
+ {
+ byte[] oldProviderImageData = providerImageData;
+ providerImageData = newProviderImageData;
+ if (eNotificationRequired())
+ {
+ eNotify(new ENotificationImpl(this, Notification.SET, ModelPackage.MODEL__PROVIDER_IMAGE_DATA, oldProviderImageData, providerImageData));
+ }
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String getAboutURL()
+ {
+ return aboutURL;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void setAboutURL(String newAboutURL)
+ {
+ String oldAboutURL = aboutURL;
+ aboutURL = newAboutURL;
+ if (eNotificationRequired())
+ {
+ eNotify(new ENotificationImpl(this, Notification.SET, ModelPackage.MODEL__ABOUT_URL, oldAboutURL, aboutURL));
+ }
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String getTarget()
+ {
+ return target;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void setTarget(String newTarget)
+ {
+ String oldTarget = target;
+ target = newTarget;
+ if (eNotificationRequired())
+ {
+ eNotify(new ENotificationImpl(this, Notification.SET, ModelPackage.MODEL__TARGET, oldTarget, target));
+ }
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String getSource()
+ {
+ return source;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void setSource(String newSource)
+ {
+ String oldSource = source;
+ source = newSource;
+ if (eNotificationRequired())
+ {
+ eNotify(new ENotificationImpl(this, Notification.SET, ModelPackage.MODEL__SOURCE, oldSource, source));
+ }
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String getLocalCache()
+ {
+ return localCache;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void setLocalCache(String newLocalCache)
+ {
+ String oldLocalCache = localCache;
+ localCache = newLocalCache;
+ if (eNotificationRequired())
+ {
+ eNotify(new ENotificationImpl(this, Notification.SET, ModelPackage.MODEL__LOCAL_CACHE, oldLocalCache, localCache));
+ }
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+ {
+ switch (featureID)
+ {
+ case ModelPackage.MODEL__JV_MS:
+ return ((InternalEList<InternalEObject>)(InternalEList<?>)getJVMs()).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 ModelPackage.MODEL__TOUCHPOINTS:
+ return ((InternalEList<?>)getTouchpoints()).basicRemove(otherEnd, msgs);
+ case ModelPackage.MODEL__JV_MS:
+ return ((InternalEList<?>)getJVMs()).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 ModelPackage.MODEL__TOUCHPOINTS:
+ return getTouchpoints();
+ case ModelPackage.MODEL__NAME:
+ return getName();
+ case ModelPackage.MODEL__LABEL:
+ return getLabel();
+ case ModelPackage.MODEL__PROVIDER:
+ return getProvider();
+ case ModelPackage.MODEL__PROVIDER_IMAGE_NAME:
+ return getProviderImageName();
+ case ModelPackage.MODEL__PROVIDER_IMAGE_DATA:
+ return getProviderImageData();
+ case ModelPackage.MODEL__ABOUT_URL:
+ return getAboutURL();
+ case ModelPackage.MODEL__TARGET:
+ return getTarget();
+ case ModelPackage.MODEL__SOURCE:
+ return getSource();
+ case ModelPackage.MODEL__LOCAL_CACHE:
+ return getLocalCache();
+ case ModelPackage.MODEL__JV_MS:
+ return getJVMs();
+ }
+ 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 ModelPackage.MODEL__TOUCHPOINTS:
+ getTouchpoints().clear();
+ getTouchpoints().addAll((Collection<? extends Touchpoint>)newValue);
+ return;
+ case ModelPackage.MODEL__NAME:
+ setName((String)newValue);
+ return;
+ case ModelPackage.MODEL__LABEL:
+ setLabel((String)newValue);
+ return;
+ case ModelPackage.MODEL__PROVIDER:
+ setProvider((String)newValue);
+ return;
+ case ModelPackage.MODEL__PROVIDER_IMAGE_NAME:
+ setProviderImageName((String)newValue);
+ return;
+ case ModelPackage.MODEL__PROVIDER_IMAGE_DATA:
+ setProviderImageData((byte[])newValue);
+ return;
+ case ModelPackage.MODEL__ABOUT_URL:
+ setAboutURL((String)newValue);
+ return;
+ case ModelPackage.MODEL__TARGET:
+ setTarget((String)newValue);
+ return;
+ case ModelPackage.MODEL__SOURCE:
+ setSource((String)newValue);
+ return;
+ case ModelPackage.MODEL__LOCAL_CACHE:
+ setLocalCache((String)newValue);
+ return;
+ case ModelPackage.MODEL__JV_MS:
+ getJVMs().clear();
+ getJVMs().addAll((Collection<? extends JVM>)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID)
+ {
+ switch (featureID)
+ {
+ case ModelPackage.MODEL__TOUCHPOINTS:
+ getTouchpoints().clear();
+ return;
+ case ModelPackage.MODEL__NAME:
+ setName(NAME_EDEFAULT);
+ return;
+ case ModelPackage.MODEL__LABEL:
+ setLabel(LABEL_EDEFAULT);
+ return;
+ case ModelPackage.MODEL__PROVIDER:
+ setProvider(PROVIDER_EDEFAULT);
+ return;
+ case ModelPackage.MODEL__PROVIDER_IMAGE_NAME:
+ setProviderImageName(PROVIDER_IMAGE_NAME_EDEFAULT);
+ return;
+ case ModelPackage.MODEL__PROVIDER_IMAGE_DATA:
+ setProviderImageData(PROVIDER_IMAGE_DATA_EDEFAULT);
+ return;
+ case ModelPackage.MODEL__ABOUT_URL:
+ setAboutURL(ABOUT_URL_EDEFAULT);
+ return;
+ case ModelPackage.MODEL__TARGET:
+ setTarget(TARGET_EDEFAULT);
+ return;
+ case ModelPackage.MODEL__SOURCE:
+ setSource(SOURCE_EDEFAULT);
+ return;
+ case ModelPackage.MODEL__LOCAL_CACHE:
+ setLocalCache(LOCAL_CACHE_EDEFAULT);
+ return;
+ case ModelPackage.MODEL__JV_MS:
+ getJVMs().clear();
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @SuppressWarnings("null")
+ @Override
+ public boolean eIsSet(int featureID)
+ {
+ switch (featureID)
+ {
+ case ModelPackage.MODEL__TOUCHPOINTS:
+ return touchpoints != null && !touchpoints.isEmpty();
+ case ModelPackage.MODEL__NAME:
+ return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
+ case ModelPackage.MODEL__LABEL:
+ return LABEL_EDEFAULT == null ? label != null : !LABEL_EDEFAULT.equals(label);
+ case ModelPackage.MODEL__PROVIDER:
+ return PROVIDER_EDEFAULT == null ? provider != null : !PROVIDER_EDEFAULT.equals(provider);
+ case ModelPackage.MODEL__PROVIDER_IMAGE_NAME:
+ return PROVIDER_IMAGE_NAME_EDEFAULT == null ? providerImageName != null : !PROVIDER_IMAGE_NAME_EDEFAULT.equals(providerImageName);
+ case ModelPackage.MODEL__PROVIDER_IMAGE_DATA:
+ return PROVIDER_IMAGE_DATA_EDEFAULT == null ? providerImageData != null : !PROVIDER_IMAGE_DATA_EDEFAULT.equals(providerImageData);
+ case ModelPackage.MODEL__ABOUT_URL:
+ return ABOUT_URL_EDEFAULT == null ? aboutURL != null : !ABOUT_URL_EDEFAULT.equals(aboutURL);
+ case ModelPackage.MODEL__TARGET:
+ return TARGET_EDEFAULT == null ? target != null : !TARGET_EDEFAULT.equals(target);
+ case ModelPackage.MODEL__SOURCE:
+ return SOURCE_EDEFAULT == null ? source != null : !SOURCE_EDEFAULT.equals(source);
+ case ModelPackage.MODEL__LOCAL_CACHE:
+ return LOCAL_CACHE_EDEFAULT == null ? localCache != null : !LOCAL_CACHE_EDEFAULT.equals(localCache);
+ case ModelPackage.MODEL__JV_MS:
+ return jVMs != null && !jVMs.isEmpty();
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public int eBaseStructuralFeatureID(int derivedFeatureID, Class<?> baseClass)
+ {
+ if (baseClass == Touchable.class)
+ {
+ switch (derivedFeatureID)
+ {
+ case ModelPackage.MODEL__TOUCHPOINTS:
+ return ModelPackage.TOUCHABLE__TOUCHPOINTS;
+ default:
+ return -1;
+ }
+ }
+ return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public int eDerivedStructuralFeatureID(int baseFeatureID, Class<?> baseClass)
+ {
+ if (baseClass == Touchable.class)
+ {
+ switch (baseFeatureID)
+ {
+ case ModelPackage.TOUCHABLE__TOUCHPOINTS:
+ return ModelPackage.MODEL__TOUCHPOINTS;
+ default:
+ return -1;
+ }
+ }
+ return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String toString()
+ {
+ if (eIsProxy())
+ {
+ return super.toString();
+ }
+
+ StringBuilder result = new StringBuilder(super.toString());
+ result.append(" (name: ");
+ result.append(name);
+ result.append(", label: ");
+ result.append(label);
+ result.append(", provider: ");
+ result.append(provider);
+ result.append(", providerImageName: ");
+ result.append(providerImageName);
+ result.append(", providerImageData: ");
+ result.append(providerImageData);
+ result.append(", aboutURL: ");
+ result.append(aboutURL);
+ result.append(", target: ");
+ result.append(target);
+ result.append(", source: ");
+ result.append(source);
+ result.append(", localCache: ");
+ result.append(localCache);
+ result.append(')');
+ return result.toString();
+ }
+
+} //ModelImpl
diff --git a/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/model/impl/ModelPackageImpl.java b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/model/impl/ModelPackageImpl.java
new file mode 100644
index 0000000..5c52f9a
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/model/impl/ModelPackageImpl.java
@@ -0,0 +1,1156 @@
+/**
+ * Copyright (c) 2020 Eclipse contributors and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.eclipse.justj.codegen.model.impl;
+
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EEnum;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.impl.EPackageImpl;
+import org.eclipse.emf.ecore.xml.type.XMLTypePackage;
+import org.eclipse.justj.codegen.model.Copyrightable;
+import org.eclipse.justj.codegen.model.Model;
+import org.eclipse.justj.codegen.model.ModelFactory;
+import org.eclipse.justj.codegen.model.ModelPackage;
+import org.eclipse.justj.codegen.model.Phase;
+import org.eclipse.justj.codegen.model.Touchable;
+import org.eclipse.justj.codegen.model.Touchpoint;
+import org.eclipse.justj.codegen.model.Variant;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Package</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ModelPackageImpl extends EPackageImpl implements ModelPackage
+{
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass modelEClass = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass jvmEClass = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass variantEClass = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass copyrightableEClass = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass touchpointEClass = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass touchableEClass = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EEnum phaseEEnum = 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.justj.codegen.model.ModelPackage#eNS_URI
+ * @see #init()
+ * @generated
+ */
+ private ModelPackageImpl()
+ {
+ super(eNS_URI, ModelFactory.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 ModelPackage#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 ModelPackage init()
+ {
+ if (isInited)
+ {
+ return (ModelPackage)EPackage.Registry.INSTANCE.getEPackage(ModelPackage.eNS_URI);
+ }
+
+ // Obtain or create and register package
+ Object registeredModelPackage = EPackage.Registry.INSTANCE.get(eNS_URI);
+ ModelPackageImpl theModelPackage = registeredModelPackage instanceof ModelPackageImpl ? (ModelPackageImpl)registeredModelPackage : new ModelPackageImpl();
+
+ isInited = true;
+
+ // Initialize simple dependencies
+ XMLTypePackage.eINSTANCE.eClass();
+
+ // Create package meta-data objects
+ theModelPackage.createPackageContents();
+
+ // Initialize created meta-data
+ theModelPackage.initializePackageContents();
+
+ // Mark meta-data to indicate it can't be changed
+ theModelPackage.freeze();
+
+ // Update the registry and return the package
+ EPackage.Registry.INSTANCE.put(ModelPackage.eNS_URI, theModelPackage);
+ return theModelPackage;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public EClass getModel()
+ {
+ return modelEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public EAttribute getModel_Name()
+ {
+ return (EAttribute)modelEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public EAttribute getModel_Label()
+ {
+ return (EAttribute)modelEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public EReference getModel_JVMs()
+ {
+ return (EReference)modelEClass.getEStructuralFeatures().get(9);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public EAttribute getModel_Provider()
+ {
+ return (EAttribute)modelEClass.getEStructuralFeatures().get(2);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public EAttribute getModel_ProviderImageName()
+ {
+ return (EAttribute)modelEClass.getEStructuralFeatures().get(3);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public EAttribute getModel_ProviderImageData()
+ {
+ return (EAttribute)modelEClass.getEStructuralFeatures().get(4);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public EAttribute getModel_AboutURL()
+ {
+ return (EAttribute)modelEClass.getEStructuralFeatures().get(5);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public EAttribute getModel_Target()
+ {
+ return (EAttribute)modelEClass.getEStructuralFeatures().get(6);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public EAttribute getModel_Source()
+ {
+ return (EAttribute)modelEClass.getEStructuralFeatures().get(7);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public EAttribute getModel_LocalCache()
+ {
+ return (EAttribute)modelEClass.getEStructuralFeatures().get(8);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public EClass getJVM()
+ {
+ return jvmEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public EAttribute getJVM_Name()
+ {
+ return (EAttribute)jvmEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public EAttribute getJVM_Version()
+ {
+ return (EAttribute)jvmEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public EAttribute getJVM_Label()
+ {
+ return (EAttribute)jvmEClass.getEStructuralFeatures().get(2);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public EReference getJVM_Variants()
+ {
+ return (EReference)jvmEClass.getEStructuralFeatures().get(5);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public EReference getJVM_Model()
+ {
+ return (EReference)jvmEClass.getEStructuralFeatures().get(3);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public EAttribute getJVM_AboutTextExtra()
+ {
+ return (EAttribute)jvmEClass.getEStructuralFeatures().get(4);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public EClass getVariant()
+ {
+ return variantEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public EAttribute getVariant_Os()
+ {
+ return (EAttribute)variantEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public EAttribute getVariant_Arch()
+ {
+ return (EAttribute)variantEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public EReference getVariant_JVM()
+ {
+ return (EReference)variantEClass.getEStructuralFeatures().get(4);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public EAttribute getVariant_Label()
+ {
+ return (EAttribute)variantEClass.getEStructuralFeatures().get(2);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public EAttribute getVariant_Source()
+ {
+ return (EAttribute)variantEClass.getEStructuralFeatures().get(3);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public EClass getCopyrightable()
+ {
+ return copyrightableEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public EAttribute getCopyrightable_CopyrightHolder()
+ {
+ return (EAttribute)copyrightableEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public EAttribute getCopyrightable_CopyrightYear()
+ {
+ return (EAttribute)copyrightableEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public EAttribute getCopyrightable_CopyrightText()
+ {
+ return (EAttribute)copyrightableEClass.getEStructuralFeatures().get(2);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public EClass getTouchpoint()
+ {
+ return touchpointEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public EAttribute getTouchpoint_Phase()
+ {
+ return (EAttribute)touchpointEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public EAttribute getTouchpoint_Instructions()
+ {
+ return (EAttribute)touchpointEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public EClass getTouchable()
+ {
+ return touchableEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public EReference getTouchable_Touchpoints()
+ {
+ return (EReference)touchableEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public EEnum getPhase()
+ {
+ return phaseEEnum;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public ModelFactory getModelFactory()
+ {
+ return (ModelFactory)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
+ modelEClass = createEClass(MODEL);
+ createEAttribute(modelEClass, MODEL__NAME);
+ createEAttribute(modelEClass, MODEL__LABEL);
+ createEAttribute(modelEClass, MODEL__PROVIDER);
+ createEAttribute(modelEClass, MODEL__PROVIDER_IMAGE_NAME);
+ createEAttribute(modelEClass, MODEL__PROVIDER_IMAGE_DATA);
+ createEAttribute(modelEClass, MODEL__ABOUT_URL);
+ createEAttribute(modelEClass, MODEL__TARGET);
+ createEAttribute(modelEClass, MODEL__SOURCE);
+ createEAttribute(modelEClass, MODEL__LOCAL_CACHE);
+ createEReference(modelEClass, MODEL__JV_MS);
+
+ jvmEClass = createEClass(JVM);
+ createEAttribute(jvmEClass, JVM__NAME);
+ createEAttribute(jvmEClass, JVM__VERSION);
+ createEAttribute(jvmEClass, JVM__LABEL);
+ createEReference(jvmEClass, JVM__MODEL);
+ createEAttribute(jvmEClass, JVM__ABOUT_TEXT_EXTRA);
+ createEReference(jvmEClass, JVM__VARIANTS);
+
+ variantEClass = createEClass(VARIANT);
+ createEAttribute(variantEClass, VARIANT__OS);
+ createEAttribute(variantEClass, VARIANT__ARCH);
+ createEAttribute(variantEClass, VARIANT__LABEL);
+ createEAttribute(variantEClass, VARIANT__SOURCE);
+ createEReference(variantEClass, VARIANT__JVM);
+
+ copyrightableEClass = createEClass(COPYRIGHTABLE);
+ createEAttribute(copyrightableEClass, COPYRIGHTABLE__COPYRIGHT_HOLDER);
+ createEAttribute(copyrightableEClass, COPYRIGHTABLE__COPYRIGHT_YEAR);
+ createEAttribute(copyrightableEClass, COPYRIGHTABLE__COPYRIGHT_TEXT);
+
+ touchpointEClass = createEClass(TOUCHPOINT);
+ createEAttribute(touchpointEClass, TOUCHPOINT__PHASE);
+ createEAttribute(touchpointEClass, TOUCHPOINT__INSTRUCTIONS);
+
+ touchableEClass = createEClass(TOUCHABLE);
+ createEReference(touchableEClass, TOUCHABLE__TOUCHPOINTS);
+
+ // Create enums
+ phaseEEnum = createEEnum(PHASE);
+ }
+
+ /**
+ * <!-- 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
+ XMLTypePackage theXMLTypePackage = (XMLTypePackage)EPackage.Registry.INSTANCE.getEPackage(XMLTypePackage.eNS_URI);
+
+ // Create type parameters
+
+ // Set bounds for type parameters
+
+ // Add supertypes to classes
+ modelEClass.getESuperTypes().add(this.getCopyrightable());
+ modelEClass.getESuperTypes().add(this.getTouchable());
+ jvmEClass.getESuperTypes().add(this.getCopyrightable());
+ jvmEClass.getESuperTypes().add(this.getTouchable());
+ variantEClass.getESuperTypes().add(this.getCopyrightable());
+ variantEClass.getESuperTypes().add(this.getTouchable());
+
+ // Initialize classes, features, and operations; add parameters
+ initEClass(modelEClass, Model.class, "Model", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEAttribute(
+ getModel_Name(),
+ ecorePackage.getEString(),
+ "name",
+ null,
+ 1,
+ 1,
+ Model.class,
+ !IS_TRANSIENT,
+ !IS_VOLATILE,
+ IS_CHANGEABLE,
+ !IS_UNSETTABLE,
+ !IS_ID,
+ IS_UNIQUE,
+ !IS_DERIVED,
+ IS_ORDERED);
+ initEAttribute(
+ getModel_Label(),
+ ecorePackage.getEString(),
+ "label",
+ null,
+ 1,
+ 1,
+ Model.class,
+ !IS_TRANSIENT,
+ !IS_VOLATILE,
+ IS_CHANGEABLE,
+ !IS_UNSETTABLE,
+ !IS_ID,
+ IS_UNIQUE,
+ !IS_DERIVED,
+ IS_ORDERED);
+ initEAttribute(
+ getModel_Provider(),
+ ecorePackage.getEString(),
+ "provider",
+ null,
+ 1,
+ 1,
+ Model.class,
+ !IS_TRANSIENT,
+ !IS_VOLATILE,
+ IS_CHANGEABLE,
+ !IS_UNSETTABLE,
+ !IS_ID,
+ IS_UNIQUE,
+ !IS_DERIVED,
+ IS_ORDERED);
+ initEAttribute(
+ getModel_ProviderImageName(),
+ ecorePackage.getEString(),
+ "providerImageName",
+ null,
+ 1,
+ 1,
+ Model.class,
+ !IS_TRANSIENT,
+ !IS_VOLATILE,
+ IS_CHANGEABLE,
+ !IS_UNSETTABLE,
+ !IS_ID,
+ IS_UNIQUE,
+ !IS_DERIVED,
+ IS_ORDERED);
+ initEAttribute(
+ getModel_ProviderImageData(),
+ theXMLTypePackage.getBase64Binary(),
+ "providerImageData",
+ null,
+ 1,
+ 1,
+ Model.class,
+ !IS_TRANSIENT,
+ !IS_VOLATILE,
+ IS_CHANGEABLE,
+ !IS_UNSETTABLE,
+ !IS_ID,
+ IS_UNIQUE,
+ !IS_DERIVED,
+ IS_ORDERED);
+ initEAttribute(
+ getModel_AboutURL(),
+ ecorePackage.getEString(),
+ "aboutURL",
+ "https://www.eclipse.org/legal/epl/epl-2.0/about.html",
+ 0,
+ 1,
+ Model.class,
+ !IS_TRANSIENT,
+ !IS_VOLATILE,
+ IS_CHANGEABLE,
+ !IS_UNSETTABLE,
+ !IS_ID,
+ IS_UNIQUE,
+ !IS_DERIVED,
+ IS_ORDERED);
+ initEAttribute(
+ getModel_Target(),
+ ecorePackage.getEString(),
+ "target",
+ null,
+ 1,
+ 1,
+ Model.class,
+ !IS_TRANSIENT,
+ !IS_VOLATILE,
+ IS_CHANGEABLE,
+ !IS_UNSETTABLE,
+ !IS_ID,
+ IS_UNIQUE,
+ !IS_DERIVED,
+ IS_ORDERED);
+ initEAttribute(
+ getModel_Source(),
+ ecorePackage.getEString(),
+ "source",
+ null,
+ 0,
+ 1,
+ Model.class,
+ !IS_TRANSIENT,
+ !IS_VOLATILE,
+ IS_CHANGEABLE,
+ !IS_UNSETTABLE,
+ !IS_ID,
+ IS_UNIQUE,
+ !IS_DERIVED,
+ IS_ORDERED);
+ initEAttribute(
+ getModel_LocalCache(),
+ ecorePackage.getEString(),
+ "localCache",
+ null,
+ 0,
+ 1,
+ Model.class,
+ !IS_TRANSIENT,
+ !IS_VOLATILE,
+ IS_CHANGEABLE,
+ !IS_UNSETTABLE,
+ !IS_ID,
+ IS_UNIQUE,
+ !IS_DERIVED,
+ IS_ORDERED);
+ initEReference(
+ getModel_JVMs(),
+ this.getJVM(),
+ this.getJVM_Model(),
+ "jVMs",
+ null,
+ 1,
+ -1,
+ Model.class,
+ !IS_TRANSIENT,
+ !IS_VOLATILE,
+ IS_CHANGEABLE,
+ IS_COMPOSITE,
+ !IS_RESOLVE_PROXIES,
+ !IS_UNSETTABLE,
+ IS_UNIQUE,
+ !IS_DERIVED,
+ IS_ORDERED);
+
+ initEClass(jvmEClass, org.eclipse.justj.codegen.model.JVM.class, "JVM", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEAttribute(
+ getJVM_Name(),
+ ecorePackage.getEString(),
+ "name",
+ null,
+ 1,
+ 1,
+ org.eclipse.justj.codegen.model.JVM.class,
+ !IS_TRANSIENT,
+ !IS_VOLATILE,
+ IS_CHANGEABLE,
+ !IS_UNSETTABLE,
+ !IS_ID,
+ IS_UNIQUE,
+ !IS_DERIVED,
+ IS_ORDERED);
+ initEAttribute(
+ getJVM_Version(),
+ ecorePackage.getEString(),
+ "version",
+ null,
+ 1,
+ 1,
+ org.eclipse.justj.codegen.model.JVM.class,
+ !IS_TRANSIENT,
+ !IS_VOLATILE,
+ IS_CHANGEABLE,
+ !IS_UNSETTABLE,
+ !IS_ID,
+ IS_UNIQUE,
+ !IS_DERIVED,
+ IS_ORDERED);
+ initEAttribute(
+ getJVM_Label(),
+ ecorePackage.getEString(),
+ "label",
+ null,
+ 1,
+ 1,
+ org.eclipse.justj.codegen.model.JVM.class,
+ !IS_TRANSIENT,
+ !IS_VOLATILE,
+ IS_CHANGEABLE,
+ !IS_UNSETTABLE,
+ !IS_ID,
+ IS_UNIQUE,
+ !IS_DERIVED,
+ IS_ORDERED);
+ initEReference(
+ getJVM_Model(),
+ this.getModel(),
+ this.getModel_JVMs(),
+ "model",
+ null,
+ 0,
+ 1,
+ org.eclipse.justj.codegen.model.JVM.class,
+ IS_TRANSIENT,
+ !IS_VOLATILE,
+ IS_CHANGEABLE,
+ !IS_COMPOSITE,
+ !IS_RESOLVE_PROXIES,
+ !IS_UNSETTABLE,
+ IS_UNIQUE,
+ !IS_DERIVED,
+ IS_ORDERED);
+ initEAttribute(
+ getJVM_AboutTextExtra(),
+ ecorePackage.getEString(),
+ "aboutTextExtra",
+ null,
+ 0,
+ 1,
+ org.eclipse.justj.codegen.model.JVM.class,
+ !IS_TRANSIENT,
+ !IS_VOLATILE,
+ IS_CHANGEABLE,
+ !IS_UNSETTABLE,
+ !IS_ID,
+ IS_UNIQUE,
+ !IS_DERIVED,
+ IS_ORDERED);
+ initEReference(
+ getJVM_Variants(),
+ this.getVariant(),
+ this.getVariant_JVM(),
+ "variants",
+ null,
+ 1,
+ -1,
+ org.eclipse.justj.codegen.model.JVM.class,
+ !IS_TRANSIENT,
+ !IS_VOLATILE,
+ IS_CHANGEABLE,
+ IS_COMPOSITE,
+ !IS_RESOLVE_PROXIES,
+ !IS_UNSETTABLE,
+ IS_UNIQUE,
+ !IS_DERIVED,
+ IS_ORDERED);
+
+ initEClass(variantEClass, Variant.class, "Variant", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEAttribute(
+ getVariant_Os(),
+ ecorePackage.getEString(),
+ "os",
+ null,
+ 1,
+ 1,
+ Variant.class,
+ !IS_TRANSIENT,
+ !IS_VOLATILE,
+ IS_CHANGEABLE,
+ !IS_UNSETTABLE,
+ !IS_ID,
+ IS_UNIQUE,
+ !IS_DERIVED,
+ IS_ORDERED);
+ initEAttribute(
+ getVariant_Arch(),
+ ecorePackage.getEString(),
+ "arch",
+ null,
+ 1,
+ 1,
+ Variant.class,
+ !IS_TRANSIENT,
+ !IS_VOLATILE,
+ IS_CHANGEABLE,
+ !IS_UNSETTABLE,
+ !IS_ID,
+ IS_UNIQUE,
+ !IS_DERIVED,
+ IS_ORDERED);
+ initEAttribute(
+ getVariant_Label(),
+ ecorePackage.getEString(),
+ "label",
+ null,
+ 1,
+ 1,
+ Variant.class,
+ !IS_TRANSIENT,
+ !IS_VOLATILE,
+ IS_CHANGEABLE,
+ !IS_UNSETTABLE,
+ !IS_ID,
+ IS_UNIQUE,
+ !IS_DERIVED,
+ IS_ORDERED);
+ initEAttribute(
+ getVariant_Source(),
+ theXMLTypePackage.getString(),
+ "source",
+ null,
+ 0,
+ 1,
+ Variant.class,
+ !IS_TRANSIENT,
+ !IS_VOLATILE,
+ IS_CHANGEABLE,
+ !IS_UNSETTABLE,
+ !IS_ID,
+ IS_UNIQUE,
+ !IS_DERIVED,
+ IS_ORDERED);
+ initEReference(
+ getVariant_JVM(),
+ this.getJVM(),
+ this.getJVM_Variants(),
+ "jVM",
+ null,
+ 0,
+ 1,
+ Variant.class,
+ IS_TRANSIENT,
+ !IS_VOLATILE,
+ IS_CHANGEABLE,
+ !IS_COMPOSITE,
+ !IS_RESOLVE_PROXIES,
+ !IS_UNSETTABLE,
+ IS_UNIQUE,
+ !IS_DERIVED,
+ IS_ORDERED);
+
+ initEClass(copyrightableEClass, Copyrightable.class, "Copyrightable", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEAttribute(
+ getCopyrightable_CopyrightHolder(),
+ ecorePackage.getEString(),
+ "copyrightHolder",
+ null,
+ 0,
+ 1,
+ Copyrightable.class,
+ !IS_TRANSIENT,
+ !IS_VOLATILE,
+ IS_CHANGEABLE,
+ !IS_UNSETTABLE,
+ !IS_ID,
+ IS_UNIQUE,
+ !IS_DERIVED,
+ IS_ORDERED);
+ initEAttribute(
+ getCopyrightable_CopyrightYear(),
+ ecorePackage.getEString(),
+ "copyrightYear",
+ null,
+ 0,
+ 1,
+ Copyrightable.class,
+ !IS_TRANSIENT,
+ !IS_VOLATILE,
+ IS_CHANGEABLE,
+ !IS_UNSETTABLE,
+ !IS_ID,
+ IS_UNIQUE,
+ !IS_DERIVED,
+ IS_ORDERED);
+ initEAttribute(
+ getCopyrightable_CopyrightText(),
+ ecorePackage.getEString(),
+ "copyrightText",
+ null,
+ 0,
+ 1,
+ Copyrightable.class,
+ !IS_TRANSIENT,
+ !IS_VOLATILE,
+ IS_CHANGEABLE,
+ !IS_UNSETTABLE,
+ !IS_ID,
+ IS_UNIQUE,
+ !IS_DERIVED,
+ IS_ORDERED);
+
+ initEClass(touchpointEClass, Touchpoint.class, "Touchpoint", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEAttribute(
+ getTouchpoint_Phase(),
+ this.getPhase(),
+ "phase",
+ null,
+ 0,
+ 1,
+ Touchpoint.class,
+ !IS_TRANSIENT,
+ !IS_VOLATILE,
+ IS_CHANGEABLE,
+ !IS_UNSETTABLE,
+ !IS_ID,
+ IS_UNIQUE,
+ !IS_DERIVED,
+ IS_ORDERED);
+ initEAttribute(
+ getTouchpoint_Instructions(),
+ ecorePackage.getEString(),
+ "instructions",
+ null,
+ 1,
+ -1,
+ Touchpoint.class,
+ !IS_TRANSIENT,
+ !IS_VOLATILE,
+ IS_CHANGEABLE,
+ !IS_UNSETTABLE,
+ !IS_ID,
+ !IS_UNIQUE,
+ !IS_DERIVED,
+ IS_ORDERED);
+
+ initEClass(touchableEClass, Touchable.class, "Touchable", IS_ABSTRACT, IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEReference(
+ getTouchable_Touchpoints(),
+ this.getTouchpoint(),
+ null,
+ "touchpoints",
+ null,
+ 0,
+ -1,
+ Touchable.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(phaseEEnum, Phase.class, "Phase");
+ addEEnumLiteral(phaseEEnum, Phase.INSTALL);
+ addEEnumLiteral(phaseEEnum, Phase.UNINSTALL);
+
+ // Create resource
+ createResource(eNS_URI);
+
+ // Create annotations
+ // http://www.eclipse.org/emf/2002/GenModel
+ createGenModelAnnotations();
+ // http:///org/eclipse/emf/ecore/util/ExtendedMetaData
+ createExtendedMetaDataAnnotations();
+ }
+
+ /**
+ * Initializes the annotations for <b>http://www.eclipse.org/emf/2002/GenModel</b>.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void createGenModelAnnotations()
+ {
+ String source = "http://www.eclipse.org/emf/2002/GenModel";
+ addAnnotation(
+ this,
+ source,
+ new String []{
+ "copyrightText",
+ "Copyright (c) 2020 Eclipse contributors and others.\n\nThis program and the accompanying materials\nare made available under the terms of the Eclipse Public License 2.0\nwhich accompanies this distribution, and is available at\nhttps://www.eclipse.org/legal/epl-2.0/\n\nSPDX-License-Identifier: EPL-2.0" });
+ addAnnotation(getJVM_AboutTextExtra(), source, new String []{ "propertyMultiLine", "true" });
+ addAnnotation(getCopyrightable_CopyrightText(), source, new String []{ "propertyMultiLine", "true" });
+ }
+
+ /**
+ * 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_JVMs(), source, new String []{ "name", "jvm", "kind", "element" });
+ addAnnotation(getJVM_AboutTextExtra(), source, new String []{ "kind", "element" });
+ addAnnotation(getJVM_Variants(), source, new String []{ "name", "variant", "kind", "element" });
+ addAnnotation(getVariant_JVM(), source, new String []{ "name", "jvm", "kind", "element" });
+ addAnnotation(getCopyrightable_CopyrightText(), source, new String []{ "kind", "element" });
+ addAnnotation(getTouchpoint_Instructions(), source, new String []{ "kind", "element", "name", "instruction" });
+ }
+
+} //ModelPackageImpl
diff --git a/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/model/impl/TouchpointImpl.java b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/model/impl/TouchpointImpl.java
new file mode 100644
index 0000000..8a987c5
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/model/impl/TouchpointImpl.java
@@ -0,0 +1,236 @@
+/**
+ * Copyright (c) 2020 Eclipse contributors and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.eclipse.justj.codegen.model.impl;
+
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+import org.eclipse.emf.ecore.util.EDataTypeEList;
+import org.eclipse.justj.codegen.model.ModelPackage;
+import org.eclipse.justj.codegen.model.Phase;
+import org.eclipse.justj.codegen.model.Touchpoint;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Touchpoint</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.justj.codegen.model.impl.TouchpointImpl#getPhase <em>Phase</em>}</li>
+ * <li>{@link org.eclipse.justj.codegen.model.impl.TouchpointImpl#getInstructions <em>Instructions</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class TouchpointImpl extends MinimalEObjectImpl.Container implements Touchpoint
+{
+ /**
+ * The default value of the '{@link #getPhase() <em>Phase</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getPhase()
+ * @generated
+ * @ordered
+ */
+ protected static final Phase PHASE_EDEFAULT = Phase.INSTALL;
+
+ /**
+ * The cached value of the '{@link #getPhase() <em>Phase</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getPhase()
+ * @generated
+ * @ordered
+ */
+ protected Phase phase = PHASE_EDEFAULT;
+
+ /**
+ * The cached value of the '{@link #getInstructions() <em>Instructions</em>}' attribute list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getInstructions()
+ * @generated
+ * @ordered
+ */
+ protected EList<String> instructions;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected TouchpointImpl()
+ {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass()
+ {
+ return ModelPackage.Literals.TOUCHPOINT;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Phase getPhase()
+ {
+ return phase;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void setPhase(Phase newPhase)
+ {
+ Phase oldPhase = phase;
+ phase = newPhase == null ? PHASE_EDEFAULT : newPhase;
+ if (eNotificationRequired())
+ {
+ eNotify(new ENotificationImpl(this, Notification.SET, ModelPackage.TOUCHPOINT__PHASE, oldPhase, phase));
+ }
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public EList<String> getInstructions()
+ {
+ if (instructions == null)
+ {
+ instructions = new EDataTypeEList<String>(String.class, this, ModelPackage.TOUCHPOINT__INSTRUCTIONS);
+ }
+ return instructions;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType)
+ {
+ switch (featureID)
+ {
+ case ModelPackage.TOUCHPOINT__PHASE:
+ return getPhase();
+ case ModelPackage.TOUCHPOINT__INSTRUCTIONS:
+ return getInstructions();
+ }
+ 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 ModelPackage.TOUCHPOINT__PHASE:
+ setPhase((Phase)newValue);
+ return;
+ case ModelPackage.TOUCHPOINT__INSTRUCTIONS:
+ getInstructions().clear();
+ getInstructions().addAll((Collection<? extends String>)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID)
+ {
+ switch (featureID)
+ {
+ case ModelPackage.TOUCHPOINT__PHASE:
+ setPhase(PHASE_EDEFAULT);
+ return;
+ case ModelPackage.TOUCHPOINT__INSTRUCTIONS:
+ getInstructions().clear();
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID)
+ {
+ switch (featureID)
+ {
+ case ModelPackage.TOUCHPOINT__PHASE:
+ return phase != PHASE_EDEFAULT;
+ case ModelPackage.TOUCHPOINT__INSTRUCTIONS:
+ return instructions != null && !instructions.isEmpty();
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String toString()
+ {
+ if (eIsProxy())
+ {
+ return super.toString();
+ }
+
+ StringBuilder result = new StringBuilder(super.toString());
+ result.append(" (phase: ");
+ result.append(phase);
+ result.append(", instructions: ");
+ result.append(instructions);
+ result.append(')');
+ return result.toString();
+ }
+
+} //TouchpointImpl
diff --git a/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/model/impl/VariantImpl.java b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/model/impl/VariantImpl.java
new file mode 100644
index 0000000..af27ec9
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/model/impl/VariantImpl.java
@@ -0,0 +1,587 @@
+/**
+ * Copyright (c) 2020 Eclipse contributors and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.eclipse.justj.codegen.model.impl;
+
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.emf.ecore.util.InternalEList;
+import org.eclipse.justj.codegen.model.JVM;
+import org.eclipse.justj.codegen.model.ModelPackage;
+import org.eclipse.justj.codegen.model.Touchable;
+import org.eclipse.justj.codegen.model.Touchpoint;
+import org.eclipse.justj.codegen.model.Variant;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Variant</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.justj.codegen.model.impl.VariantImpl#getTouchpoints <em>Touchpoints</em>}</li>
+ * <li>{@link org.eclipse.justj.codegen.model.impl.VariantImpl#getOs <em>Os</em>}</li>
+ * <li>{@link org.eclipse.justj.codegen.model.impl.VariantImpl#getArch <em>Arch</em>}</li>
+ * <li>{@link org.eclipse.justj.codegen.model.impl.VariantImpl#getLabel <em>Label</em>}</li>
+ * <li>{@link org.eclipse.justj.codegen.model.impl.VariantImpl#getSource <em>Source</em>}</li>
+ * <li>{@link org.eclipse.justj.codegen.model.impl.VariantImpl#getJVM <em>JVM</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class VariantImpl extends CopyrightableImpl implements Variant
+{
+ /**
+ * The cached value of the '{@link #getTouchpoints() <em>Touchpoints</em>}' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getTouchpoints()
+ * @generated
+ * @ordered
+ */
+ protected EList<Touchpoint> touchpoints;
+
+ /**
+ * The default value of the '{@link #getOs() <em>Os</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getOs()
+ * @generated
+ * @ordered
+ */
+ protected static final String OS_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getOs() <em>Os</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getOs()
+ * @generated
+ * @ordered
+ */
+ protected String os = OS_EDEFAULT;
+
+ /**
+ * The default value of the '{@link #getArch() <em>Arch</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getArch()
+ * @generated
+ * @ordered
+ */
+ protected static final String ARCH_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getArch() <em>Arch</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getArch()
+ * @generated
+ * @ordered
+ */
+ protected String arch = ARCH_EDEFAULT;
+
+ /**
+ * The default value of the '{@link #getLabel() <em>Label</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getLabel()
+ * @generated
+ * @ordered
+ */
+ protected static final String LABEL_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getLabel() <em>Label</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getLabel()
+ * @generated
+ * @ordered
+ */
+ protected String label = LABEL_EDEFAULT;
+
+ /**
+ * The default value of the '{@link #getSource() <em>Source</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getSource()
+ * @generated
+ * @ordered
+ */
+ protected static final String SOURCE_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getSource() <em>Source</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getSource()
+ * @generated
+ * @ordered
+ */
+ protected String source = SOURCE_EDEFAULT;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected VariantImpl()
+ {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass()
+ {
+ return ModelPackage.Literals.VARIANT;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public EList<Touchpoint> getTouchpoints()
+ {
+ if (touchpoints == null)
+ {
+ touchpoints = new EObjectContainmentEList<Touchpoint>(Touchpoint.class, this, ModelPackage.VARIANT__TOUCHPOINTS);
+ }
+ return touchpoints;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String getOs()
+ {
+ return os;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void setOs(String newOs)
+ {
+ String oldOs = os;
+ os = newOs;
+ if (eNotificationRequired())
+ {
+ eNotify(new ENotificationImpl(this, Notification.SET, ModelPackage.VARIANT__OS, oldOs, os));
+ }
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String getArch()
+ {
+ return arch;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void setArch(String newArch)
+ {
+ String oldArch = arch;
+ arch = newArch;
+ if (eNotificationRequired())
+ {
+ eNotify(new ENotificationImpl(this, Notification.SET, ModelPackage.VARIANT__ARCH, oldArch, arch));
+ }
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public JVM getJVM()
+ {
+ if (eContainerFeatureID() != ModelPackage.VARIANT__JVM)
+ {
+ return null;
+ }
+ return (JVM)eInternalContainer();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public NotificationChain basicSetJVM(JVM newJVM, NotificationChain msgs)
+ {
+ msgs = eBasicSetContainer((InternalEObject)newJVM, ModelPackage.VARIANT__JVM, msgs);
+ return msgs;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void setJVM(JVM newJVM)
+ {
+ if (newJVM != eInternalContainer() || (eContainerFeatureID() != ModelPackage.VARIANT__JVM && newJVM != null))
+ {
+ if (EcoreUtil.isAncestor(this, newJVM))
+ {
+ throw new IllegalArgumentException("Recursive containment not allowed for " + toString());
+ }
+ NotificationChain msgs = null;
+ if (eInternalContainer() != null)
+ {
+ msgs = eBasicRemoveFromContainer(msgs);
+ }
+ if (newJVM != null)
+ {
+ msgs = ((InternalEObject)newJVM).eInverseAdd(this, ModelPackage.JVM__VARIANTS, JVM.class, msgs);
+ }
+ msgs = basicSetJVM(newJVM, msgs);
+ if (msgs != null)
+ {
+ msgs.dispatch();
+ }
+ }
+ else if (eNotificationRequired())
+ {
+ eNotify(new ENotificationImpl(this, Notification.SET, ModelPackage.VARIANT__JVM, newJVM, newJVM));
+ }
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String getLabel()
+ {
+ return label;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void setLabel(String newLabel)
+ {
+ String oldLabel = label;
+ label = newLabel;
+ if (eNotificationRequired())
+ {
+ eNotify(new ENotificationImpl(this, Notification.SET, ModelPackage.VARIANT__LABEL, oldLabel, label));
+ }
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String getSource()
+ {
+ return source;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void setSource(String newSource)
+ {
+ String oldSource = source;
+ source = newSource;
+ if (eNotificationRequired())
+ {
+ eNotify(new ENotificationImpl(this, Notification.SET, ModelPackage.VARIANT__SOURCE, oldSource, source));
+ }
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+ {
+ switch (featureID)
+ {
+ case ModelPackage.VARIANT__JVM:
+ if (eInternalContainer() != null)
+ {
+ msgs = eBasicRemoveFromContainer(msgs);
+ }
+ return basicSetJVM((JVM)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 ModelPackage.VARIANT__TOUCHPOINTS:
+ return ((InternalEList<?>)getTouchpoints()).basicRemove(otherEnd, msgs);
+ case ModelPackage.VARIANT__JVM:
+ return basicSetJVM(null, msgs);
+ }
+ return super.eInverseRemove(otherEnd, featureID, msgs);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public NotificationChain eBasicRemoveFromContainerFeature(NotificationChain msgs)
+ {
+ switch (eContainerFeatureID())
+ {
+ case ModelPackage.VARIANT__JVM:
+ return eInternalContainer().eInverseRemove(this, ModelPackage.JVM__VARIANTS, JVM.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 ModelPackage.VARIANT__TOUCHPOINTS:
+ return getTouchpoints();
+ case ModelPackage.VARIANT__OS:
+ return getOs();
+ case ModelPackage.VARIANT__ARCH:
+ return getArch();
+ case ModelPackage.VARIANT__LABEL:
+ return getLabel();
+ case ModelPackage.VARIANT__SOURCE:
+ return getSource();
+ case ModelPackage.VARIANT__JVM:
+ return getJVM();
+ }
+ 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 ModelPackage.VARIANT__TOUCHPOINTS:
+ getTouchpoints().clear();
+ getTouchpoints().addAll((Collection<? extends Touchpoint>)newValue);
+ return;
+ case ModelPackage.VARIANT__OS:
+ setOs((String)newValue);
+ return;
+ case ModelPackage.VARIANT__ARCH:
+ setArch((String)newValue);
+ return;
+ case ModelPackage.VARIANT__LABEL:
+ setLabel((String)newValue);
+ return;
+ case ModelPackage.VARIANT__SOURCE:
+ setSource((String)newValue);
+ return;
+ case ModelPackage.VARIANT__JVM:
+ setJVM((JVM)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID)
+ {
+ switch (featureID)
+ {
+ case ModelPackage.VARIANT__TOUCHPOINTS:
+ getTouchpoints().clear();
+ return;
+ case ModelPackage.VARIANT__OS:
+ setOs(OS_EDEFAULT);
+ return;
+ case ModelPackage.VARIANT__ARCH:
+ setArch(ARCH_EDEFAULT);
+ return;
+ case ModelPackage.VARIANT__LABEL:
+ setLabel(LABEL_EDEFAULT);
+ return;
+ case ModelPackage.VARIANT__SOURCE:
+ setSource(SOURCE_EDEFAULT);
+ return;
+ case ModelPackage.VARIANT__JVM:
+ setJVM((JVM)null);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID)
+ {
+ switch (featureID)
+ {
+ case ModelPackage.VARIANT__TOUCHPOINTS:
+ return touchpoints != null && !touchpoints.isEmpty();
+ case ModelPackage.VARIANT__OS:
+ return OS_EDEFAULT == null ? os != null : !OS_EDEFAULT.equals(os);
+ case ModelPackage.VARIANT__ARCH:
+ return ARCH_EDEFAULT == null ? arch != null : !ARCH_EDEFAULT.equals(arch);
+ case ModelPackage.VARIANT__LABEL:
+ return LABEL_EDEFAULT == null ? label != null : !LABEL_EDEFAULT.equals(label);
+ case ModelPackage.VARIANT__SOURCE:
+ return SOURCE_EDEFAULT == null ? source != null : !SOURCE_EDEFAULT.equals(source);
+ case ModelPackage.VARIANT__JVM:
+ return getJVM() != null;
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public int eBaseStructuralFeatureID(int derivedFeatureID, Class<?> baseClass)
+ {
+ if (baseClass == Touchable.class)
+ {
+ switch (derivedFeatureID)
+ {
+ case ModelPackage.VARIANT__TOUCHPOINTS:
+ return ModelPackage.TOUCHABLE__TOUCHPOINTS;
+ default:
+ return -1;
+ }
+ }
+ return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public int eDerivedStructuralFeatureID(int baseFeatureID, Class<?> baseClass)
+ {
+ if (baseClass == Touchable.class)
+ {
+ switch (baseFeatureID)
+ {
+ case ModelPackage.TOUCHABLE__TOUCHPOINTS:
+ return ModelPackage.VARIANT__TOUCHPOINTS;
+ default:
+ return -1;
+ }
+ }
+ return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String toString()
+ {
+ if (eIsProxy())
+ {
+ return super.toString();
+ }
+
+ StringBuilder result = new StringBuilder(super.toString());
+ result.append(" (os: ");
+ result.append(os);
+ result.append(", arch: ");
+ result.append(arch);
+ result.append(", label: ");
+ result.append(label);
+ result.append(", source: ");
+ result.append(source);
+ result.append(')');
+ return result.toString();
+ }
+
+} //VariantImpl
diff --git a/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/model/util/CodeGenUtil.java b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/model/util/CodeGenUtil.java
new file mode 100644
index 0000000..815d072
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/model/util/CodeGenUtil.java
@@ -0,0 +1,247 @@
+/**
+ * Copyright (c) 2020 Eclipse contributors and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.eclipse.justj.codegen.model.util;
+
+
+import java.io.BufferedInputStream;
+import java.io.Closeable;
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.nio.file.StandardCopyOption;
+import java.nio.file.attribute.PosixFileAttributeView;
+import java.nio.file.attribute.PosixFilePermission;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+import java.util.TreeSet;
+
+import org.apache.commons.compress.archivers.tar.TarArchiveEntry;
+import org.apache.commons.compress.archivers.tar.TarArchiveInputStream;
+import org.apache.commons.compress.compressors.gzip.GzipCompressorInputStream;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.resource.URIConverter;
+
+
+public class CodeGenUtil
+{
+ private static final Path CACHE_FOLDER;
+ static
+ {
+ String property = System.getProperty("org.eclipse.justj.cache", System.getProperty("user.home") + "/.eclipse/org.eclipse.justj/cache");
+ CACHE_FOLDER = Paths.get(property).normalize();
+ if (!Files.isDirectory(CACHE_FOLDER))
+ {
+ try
+ {
+ Files.createDirectories(CACHE_FOLDER);
+ }
+ catch (IOException ex)
+ {
+ throw new RuntimeException(ex);
+ }
+ }
+ }
+
+ private CodeGenUtil()
+ {
+ throw new RuntimeException("Not instantiable");
+ }
+
+ public static Path getCache(Path cacheFolder, URIConverter uriConverter, URI uri) throws IOException
+ {
+ if (cacheFolder == null)
+ {
+ cacheFolder = Files.createTempDirectory("justj-local-cache");
+ }
+ else if (!Files.isDirectory(cacheFolder))
+ {
+ Files.createDirectories(cacheFolder);
+ }
+
+ String uriString = uri.toString();
+ String fileName = uriString.substring(uriString.lastIndexOf('/') + 1);
+ Path result = cacheFolder.resolve(fileName);
+ if (!Files.isRegularFile(result))
+ {
+ try (InputStream inputStream = uriConverter.createInputStream(uri))
+ {
+ System.err.println("Start download: " + uri);
+ Files.copy(inputStream, result);
+ System.err.println("Finish download: " + uri);
+ }
+ }
+ return result;
+ }
+
+ public static void untar(Path tarFile, UntarHandler handler) throws IOException
+ {
+ String fileName = tarFile.getFileName().toString();
+ try (InputStream fileInputStream = Files.newInputStream(tarFile);
+ InputStream bufferedInputStream = new BufferedInputStream(fileInputStream);
+ InputStream gzipCompressorInputStream = fileName.endsWith(".gz") ? new GzipCompressorInputStream(bufferedInputStream) : bufferedInputStream;
+ TarArchiveInputStream tarArchiveInputStream = new TarArchiveInputStream(gzipCompressorInputStream);)
+ {
+ for (TarArchiveEntry entry; (entry = tarArchiveInputStream.getNextTarEntry()) != null;)
+ {
+ String name = entry.getName();
+ Path path = Paths.get(name).normalize();
+ Set<PosixFilePermission> posixFilePermissions = getPosixFilePermissions(entry);
+ boolean directory = entry.isDirectory();
+ if (directory)
+ {
+ handler.handleDirectory(path, posixFilePermissions);
+ }
+ else
+ {
+ boolean symbolicLink = entry.isSymbolicLink();
+ if (symbolicLink)
+ {
+ Path linkPath = Paths.get(entry.getLinkName());
+ handler.handleSymbolicLink(path, linkPath);
+ }
+ else
+ {
+ boolean file = entry.isFile();
+ if (file)
+ {
+ handler.handleRegularFile(tarArchiveInputStream, path, posixFilePermissions);
+ }
+ else
+ {
+ throw new IOException("Unhandled entry type");
+ }
+ }
+ }
+ }
+ }
+ }
+
+ private static Set<PosixFilePermission> getPosixFilePermissions(TarArchiveEntry entry)
+ {
+ int mode = entry.getMode();
+ Set<PosixFilePermission> perms = new TreeSet<>();
+ if ((mode & 0400) != 0)
+ {
+ perms.add(PosixFilePermission.OWNER_READ);
+ }
+ if ((mode & 0200) != 0)
+ {
+ perms.add(PosixFilePermission.OWNER_WRITE);
+ }
+ if ((mode & 0100) != 0)
+ {
+ perms.add(PosixFilePermission.OWNER_EXECUTE);
+ }
+ if ((mode & 0040) != 0)
+ {
+ perms.add(PosixFilePermission.GROUP_READ);
+ }
+ if ((mode & 0020) != 0)
+ {
+ perms.add(PosixFilePermission.GROUP_WRITE);
+ }
+ if ((mode & 0010) != 0)
+ {
+ perms.add(PosixFilePermission.GROUP_EXECUTE);
+ }
+ if ((mode & 0004) != 0)
+ {
+ perms.add(PosixFilePermission.OTHERS_READ);
+ }
+ if ((mode & 0002) != 0)
+ {
+ perms.add(PosixFilePermission.OTHERS_WRITE);
+ }
+ if ((mode & 0001) != 0)
+ {
+ perms.add(PosixFilePermission.OTHERS_EXECUTE);
+ }
+ return perms;
+ }
+
+ public static class UntarHandler
+ {
+ public void handleDirectory(Path path, Set<PosixFilePermission> posixFilePermissions) throws IOException
+ {
+ }
+
+ public void handleRegularFile(InputStream inputStream, Path path, Set<PosixFilePermission> posixFilePermissions) throws IOException
+ {
+ }
+
+ public void handleSymbolicLink(Path path, Path linkPath) throws IOException
+ {
+ }
+ }
+
+ public static class UntarToTargetHandler extends UntarHandler implements Closeable
+ {
+ private static final boolean POSIX = Files.getFileAttributeView(Paths.get("."), PosixFileAttributeView.class) != null;
+
+ private final Path target;
+
+ private final Map<Path, Path> symbolicLinks = new HashMap<>();
+
+ public UntarToTargetHandler(Path target)
+ {
+ this.target = target;
+ }
+
+ @Override
+ public void handleDirectory(Path path, Set<PosixFilePermission> posixFilePermissions) throws IOException
+ {
+ Path targetPath = target.resolve(path).normalize();
+ Files.createDirectories(targetPath);
+ if (POSIX)
+ {
+ Files.setPosixFilePermissions(targetPath, posixFilePermissions);
+ }
+ }
+
+ @Override
+ public void handleRegularFile(InputStream inputStream, Path path, Set<PosixFilePermission> posixFilePermissions) throws IOException
+ {
+ Path targetPath = target.resolve(path).normalize();
+ Files.copy(inputStream, targetPath, StandardCopyOption.REPLACE_EXISTING);
+ if (POSIX)
+ {
+ Files.setPosixFilePermissions(targetPath, posixFilePermissions);
+ }
+ }
+
+ @Override
+ public void handleSymbolicLink(Path path, Path linkPath) throws IOException
+ {
+ Path targetPath = target.resolve(path).normalize();
+ if (POSIX)
+ {
+ Files.createSymbolicLink(targetPath, linkPath);
+ }
+ else
+ {
+ Path resolvedLinkPath = targetPath.getParent().resolve(linkPath).normalize();
+ symbolicLinks.put(resolvedLinkPath, targetPath);
+ }
+ }
+
+ @Override
+ public void close() throws IOException
+ {
+ for (Map.Entry<Path, Path> entry : symbolicLinks.entrySet())
+ {
+ Files.copy(entry.getKey(), entry.getValue(), StandardCopyOption.REPLACE_EXISTING);
+ }
+ }
+ }
+}
diff --git a/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/model/util/Generator.java b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/model/util/Generator.java
new file mode 100644
index 0000000..1268f95
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/model/util/Generator.java
@@ -0,0 +1,467 @@
+/**
+ * Copyright (c) 2020 Eclipse contributors and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.eclipse.justj.codegen.model.util;
+
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.PrintStream;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
+import java.util.Map;
+import java.util.Set;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.core.runtime.ProgressMonitorWrapper;
+import org.eclipse.core.runtime.SubMonitor;
+import org.eclipse.emf.common.CommonPlugin;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.resource.URIConverter;
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+import org.eclipse.equinox.app.IApplication;
+import org.eclipse.equinox.app.IApplicationContext;
+import org.eclipse.justj.codegen.model.Copyrightable;
+import org.eclipse.justj.codegen.model.JVM;
+import org.eclipse.justj.codegen.model.Model;
+import org.eclipse.justj.codegen.model.ModelPackage;
+import org.eclipse.justj.codegen.model.Phase;
+import org.eclipse.justj.codegen.model.Touchable;
+import org.eclipse.justj.codegen.model.Touchpoint;
+import org.eclipse.justj.codegen.model.Variant;
+
+
+public class Generator
+{
+ private final Model model;
+
+ private final URI target;
+
+ private final Path localCache;
+
+ private final URIConverter uriConverter;
+
+ public static void main(String[] args) throws IOException
+ {
+ Path path = Paths.get(args[0]);
+ Path realPath = path.toRealPath();
+ Generator generator = new Generator(URI.createFileURI(realPath.toString()));
+ generator.generate(new ProgressMonitorWrapper(new NullProgressMonitor())
+ {
+ @Override
+ public void subTask(String name)
+ {
+ super.subTask(name);
+ System.out.println(name);
+ }
+ });
+ }
+
+ public Generator(URI source) throws IOException
+ {
+ ModelPackage.eINSTANCE.eClass();
+
+ ResourceSet resourceSet = new ResourceSetImpl();
+ uriConverter = resourceSet.getURIConverter();
+ resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("jregen", new ModelResourceFactoryImpl());
+
+ Resource resource = resourceSet.getResource(source, true);
+ model = (Model)resource.getContents().get(0);
+ this.target = computeTarget(model);
+ this.localCache = Reconciler.computeLocalCache(model);
+ }
+
+ public Generator(Model model)
+ {
+ this.model = model;
+ Resource resource = model.eResource();
+ uriConverter = resource.getResourceSet().getURIConverter();
+ this.target = computeTarget(model);
+ this.localCache = Reconciler.computeLocalCache(model);
+ }
+
+ private URI computeTarget(Model model)
+ {
+ String target = model.getTarget();
+ Resource resource = model.eResource();
+ if (target == null || target.trim().isEmpty())
+ {
+ return CommonPlugin.resolve(resource.getURI().trimSegments(0));
+ }
+ else
+ {
+ URI targetURI = URI.createURI(target);
+ if (targetURI.isRelative())
+ {
+ targetURI = targetURI.resolve(CommonPlugin.resolve(resource.getURI().trimSegments(0)));
+ }
+ return targetURI;
+ }
+ }
+
+ public Model getModel()
+ {
+ return model;
+ }
+
+ public URI getTarget()
+ {
+ return target;
+ }
+
+ public void generate(IProgressMonitor monitor) throws IOException
+ {
+ EList<JVM> jvms = model.getJVMs();
+
+ SubMonitor overallMonitor = SubMonitor.convert(monitor, "Generating " + model.getName() + " to " + target, jvms.size() + 1);
+
+ SubMonitor modelMonitor = overallMonitor.split(1);
+ modelMonitor.setWorkRemaining(9);
+
+ modelMonitor.beginTask("Generate Model Resources " + target, 5);
+
+ String name = model.getName();
+ modelMonitor.subTask("Generating .gitignore");
+ save(org.eclipse.justj.codegen.templates.GitIgnore.create(null).generate(model), target.appendSegment(".gitignore"), modelMonitor.split(1));
+ save(org.eclipse.justj.codegen.templates.POMXML.create(null).generate(model), target.appendSegment("pom.xml"), modelMonitor.split(1));
+
+ URI siteTarget = target.appendSegment("releng").appendSegment(name + ".site");
+ save(org.eclipse.justj.codegen.templates.releng.site.ProjectXML.create(null).generate(model), siteTarget.appendSegment(".project"), modelMonitor.split(1));
+ save(org.eclipse.justj.codegen.templates.releng.site.CategoryXML.create(null).generate(model), siteTarget.appendSegment("category.xml"), modelMonitor.split(1));
+ save(org.eclipse.justj.codegen.templates.releng.site.POMXML.create(null).generate(model), siteTarget.appendSegment("pom.xml"), modelMonitor.split(1));
+
+ URI parentTarget = target.appendSegment("releng").appendSegment(name + ".parent");
+ save(org.eclipse.justj.codegen.templates.releng.parent.ProjectXML.create(null).generate(model), parentTarget.appendSegment(".project"), modelMonitor.split(1));
+ save(org.eclipse.justj.codegen.templates.releng.parent.POMXML.create(null).generate(model), parentTarget.appendSegment("pom.xml"), modelMonitor.split(1));
+
+ save(
+ org.eclipse.justj.codegen.templates.releng.parent.features.POMXML.create(null).generate(model),
+ parentTarget.appendSegment("features").appendSegment("pom.xml"),
+ modelMonitor.split(1));
+
+ save(
+ org.eclipse.justj.codegen.templates.releng.parent.plugins.POMXML.create(null).generate(model),
+ parentTarget.appendSegment("plugins").appendSegment("pom.xml"),
+ modelMonitor.split(1));
+
+ String aboutURL = model.getAboutURL();
+ String aboutHTML = composeLines(load(URI.createURI(aboutURL)), "", org.eclipse.justj.codegen.templates.GitIgnore.create(null).NL);
+
+ for (JVM jvm : jvms)
+ {
+ SubMonitor jvmMonitor = overallMonitor.split(1);
+
+ EList<Variant> variants = jvm.getVariants();
+ jvmMonitor.setWorkRemaining(variants.size() + 17);
+
+ String jvmName = jvm.getName();
+ URI featureTarget = target.appendSegment("features").appendSegment(name + "." + jvmName + "-feature");
+ save(org.eclipse.justj.codegen.templates.feature.ProjectXML.create(null).generate(jvm), featureTarget.appendSegment(".project"), jvmMonitor.split(1));
+ save(org.eclipse.justj.codegen.templates.feature.BuildProperties.create(null).generate(jvm), featureTarget.appendSegment("build.properties"), jvmMonitor.split(1));
+ save(org.eclipse.justj.codegen.templates.feature.FeatureProperties.create(null).generate(jvm), featureTarget.appendSegment("feature.properties"), jvmMonitor.split(1));
+ save(org.eclipse.justj.codegen.templates.feature.FeatureXML.create(null).generate(jvm), featureTarget.appendSegment("feature.xml"), jvmMonitor.split(1));
+ save(org.eclipse.justj.codegen.templates.feature.POMXML.create(null).generate(jvm), featureTarget.appendSegment("pom.xml"), jvmMonitor.split(1));
+
+ URI pluginTarget = target.appendSegment("plugins").appendSegment(name + "." + jvmName);
+ save(org.eclipse.justj.codegen.templates.plugin.ProjectXML.create(null).generate(jvm), pluginTarget.appendSegment(".project"), jvmMonitor.split(1));
+ save(org.eclipse.justj.codegen.templates.plugin.POMXML.create(null).generate(jvm), pluginTarget.appendSegment("pom.xml"), jvmMonitor.split(1));
+
+ URI pluginMetaInfTarget = pluginTarget.appendSegment("META-INF");
+ save(org.eclipse.justj.codegen.templates.plugin.Manifest.create(null).generate(jvm), pluginMetaInfTarget.appendSegment("MANIFEST.MF"), jvmMonitor.split(1));
+ save(org.eclipse.justj.codegen.templates.plugin.P2Inf.create(null).generate(jvm), pluginMetaInfTarget.appendSegment("p2.inf"), jvmMonitor.split(1));
+
+ save(aboutHTML, pluginTarget.appendSegment("about.html"), jvmMonitor.split(1));
+ save(org.eclipse.justj.codegen.templates.plugin.AboutIni.create(null).generate(jvm), pluginTarget.appendSegment("about.ini"), jvmMonitor.split(1));
+ save(org.eclipse.justj.codegen.templates.plugin.AboutMappings.create(null).generate(jvm), pluginTarget.appendSegment("about.mappings"), jvmMonitor.split(1));
+ save(org.eclipse.justj.codegen.templates.plugin.AboutProperties.create(null).generate(jvm), pluginTarget.appendSegment("about.properties"), jvmMonitor.split(1));
+ save(org.eclipse.justj.codegen.templates.plugin.BuildProperties.create(null).generate(jvm), pluginTarget.appendSegment("build.properties"), jvmMonitor.split(1));
+ save(org.eclipse.justj.codegen.templates.plugin.PluginProperties.create(null).generate(jvm), pluginTarget.appendSegment("plugin.properties"), jvmMonitor.split(1));
+
+ String providerImageName = model.getProviderImageName();
+ save(model.getProviderImageData(), pluginTarget.appendSegment(providerImageName), jvmMonitor.split(1));
+
+ for (Variant variant : variants)
+ {
+ SubMonitor variantMonitor = jvmMonitor.split(1);
+ variantMonitor.setWorkRemaining(10);
+
+ String os = variant.getOs();
+ String arch = variant.getArch();
+ URI fragmentTarget = target.appendSegment("plugins").appendSegment(name + "." + jvmName + "." + os + "." + arch);
+ save(org.eclipse.justj.codegen.templates.fragment.ProjectXML.create(null).generate(variant), fragmentTarget.appendSegment(".project"), variantMonitor.split(1));
+
+ URI fragmentMetaInfTarget = fragmentTarget.appendSegment("META-INF");
+ save(org.eclipse.justj.codegen.templates.fragment.EclipseInf.create(null).generate(variant), fragmentMetaInfTarget.appendSegment("eclipse.inf"), variantMonitor.split(1));
+ save(org.eclipse.justj.codegen.templates.fragment.Manifest.create(null).generate(variant), fragmentMetaInfTarget.appendSegment("MANIFEST.MF"), variantMonitor.split(1));
+ save(org.eclipse.justj.codegen.templates.fragment.P2Inf.create(null).generate(variant), fragmentMetaInfTarget.appendSegment("p2.inf"), variantMonitor.split(1));
+
+ save(aboutHTML, fragmentTarget.appendSegment("about.html"), variantMonitor.split(1));
+ save(org.eclipse.justj.codegen.templates.fragment.AboutMappings.create(null).generate(variant), fragmentTarget.appendSegment("about.mappings"), variantMonitor.split(1));
+ save(
+ org.eclipse.justj.codegen.templates.fragment.BuildProperties.create(null).generate(variant),
+ fragmentTarget.appendSegment("build.properties"),
+ variantMonitor.split(1));
+ save(
+ org.eclipse.justj.codegen.templates.fragment.FragmentProperties.create(null).generate(variant),
+ fragmentTarget.appendSegment("fragment.properties"),
+ variantMonitor.split(1));
+ save(org.eclipse.justj.codegen.templates.fragment.POMXML.create(null).generate(variant), fragmentTarget.appendSegment("pom.xml"), variantMonitor.split(1));
+
+ URI fragmentJRETarget = fragmentTarget.appendSegment("jre");
+ save(org.eclipse.justj.codegen.templates.fragment.GitIgnore.create(null).generate(variant), fragmentJRETarget.appendSegment(".gitignore"), variantMonitor.split(1));
+
+ URI fragmentSettingsTarget = fragmentTarget.appendSegment(".settings");
+ save(
+ org.eclipse.justj.codegen.templates.fragment.PDEPrefs.create(null).generate(variant),
+ fragmentSettingsTarget.appendSegment("org.eclipse.pde.prefs"),
+ variantMonitor.split(1));
+
+ String source = variant.getSource();
+ if (source != null)
+ {
+ SubMonitor untarMonitor = variantMonitor.split(1);
+ Path sourceTarGZ = CodeGenUtil.getCache(localCache, uriConverter, URI.createURI(source));
+ untarMonitor.subTask("Untarring " + fragmentJRETarget.deresolve(target));
+ URI jreFolder = CommonPlugin.resolve(fragmentJRETarget);
+ if (jreFolder.isFile() && jreFolder.scheme() != null)
+ {
+ Path jrePath = Paths.get(jreFolder.toFileString());
+ CodeGenUtil.UntarToTargetHandler handler = new CodeGenUtil.UntarToTargetHandler(jrePath);
+ CodeGenUtil.untar(sourceTarGZ, handler);
+ handler.close();
+ }
+ }
+ }
+ }
+ }
+
+ protected void save(String text, URI target, SubMonitor monitor) throws IOException
+ {
+ monitor.subTask("Generating " + target.deresolve(this.target));
+ try (OutputStream out = uriConverter.createOutputStream(target); PrintStream print = new PrintStream(out, true, "UTF-8"))
+ {
+ print.print(text);
+ }
+ }
+
+ protected void save(URI source, URI target, SubMonitor monitor) throws IOException
+ {
+ monitor.subTask("Generating " + target.deresolve(this.target));
+ try (InputStream in = uriConverter.createInputStream(source); OutputStream out = uriConverter.createOutputStream(target))
+ {
+ byte[] buffer = new byte [10000];
+ int length = in.read(buffer);
+ out.write(buffer, 0, length);
+ }
+ }
+
+ protected void save(byte[] source, URI target, SubMonitor monitor) throws IOException
+ {
+ monitor.subTask("Generating " + target.deresolve(this.target));
+ try (OutputStream out = uriConverter.createOutputStream(target); PrintStream print = new PrintStream(out, true, "UTF-8"))
+ {
+ out.write(source);
+ }
+ }
+
+ protected String load(URI source) throws IOException
+ {
+ try (InputStream in = uriConverter.createInputStream(source))
+ {
+ byte[] buffer = new byte [100000];
+ int length = in.read(buffer);
+ return new String(buffer, 0, length, "UTF-8");
+ }
+ }
+
+ public static String getCopyright(Object argument, String prefix, String separator)
+ {
+ String copyrightText = null;
+ String copyrightYear = null;
+ String copyrightHolder = null;
+ for (Object object = argument; object instanceof Copyrightable;)
+ {
+ Copyrightable copyrightable = (Copyrightable)object;
+ if (copyrightText == null)
+ {
+ copyrightText = copyrightable.getCopyrightText();
+ }
+
+ if (copyrightYear == null)
+ {
+ copyrightYear = copyrightable.getCopyrightYear();
+ }
+
+ if (copyrightHolder == null)
+ {
+ copyrightHolder = copyrightable.getCopyrightHolder();
+ }
+
+ object = copyrightable.eContainer();
+ }
+
+ if (copyrightText != null)
+ {
+ if (copyrightHolder != null)
+ {
+ copyrightText = copyrightText.replace("${copyrightHolder}", copyrightHolder);
+ }
+
+ if (copyrightYear != null)
+ {
+ copyrightText = copyrightText.replace("${copyrightYear}", copyrightYear);
+ }
+
+ return composeLines(copyrightText, prefix, separator);
+ }
+
+ return "";
+ }
+
+ public static Map<String, Set<String>> getTouchpoints(Object argument)
+ {
+ Map<String, Set<String>> result = new LinkedHashMap<String, Set<String>>();
+ for (Object object = argument; object instanceof Touchable;)
+ {
+ Touchable touchable = (Touchable)object;
+ for (Touchpoint touchpoint : touchable.getTouchpoints())
+ {
+ EList<String> instructions = touchpoint.getInstructions();
+ if (!instructions.isEmpty())
+ {
+ Phase phase = touchpoint.getPhase();
+ Set<String> composedInstructions = result.get(phase.getLiteral());
+ if (composedInstructions == null)
+ {
+ composedInstructions = new LinkedHashSet<String>();
+ result.put(phase.getLiteral(), composedInstructions);
+ }
+ composedInstructions.addAll(instructions);
+ }
+ }
+
+ object = touchable.eContainer();
+ }
+
+ return result;
+ }
+
+ public static String composeLines(String body, String prefix, String separator)
+ {
+ if (body != null)
+ {
+ String[] lines = body.split("\r?\n", -1);
+ StringBuilder result = new StringBuilder();
+ for (int i = 0; i < lines.length; i++)
+ {
+ String line = lines[i];
+ result.append(prefix);
+ result.append(line);
+ if (i != lines.length - 1)
+ {
+ result.append(separator);
+ }
+ }
+
+ return result.toString();
+ }
+
+ return "";
+ }
+
+ public static String getVersionRange(String version)
+ {
+ int[] versionValue = getVersion(version);
+
+ return "[" + version + "," + versionValue[0] + '.' + versionValue[1] + '.' + (versionValue[2] + 1) + ")";
+ }
+
+ public static Map<String, Set<String>> getEECapabilities(String version)
+ {
+ int[] versionValue = getVersion(version);
+ Map<String, Set<String>> result = new LinkedHashMap<>();
+
+ Set<String> osgiMinimum = new LinkedHashSet<>();
+ result.put("OSGi/Minimum", osgiMinimum);
+ for (int i = 0; i <= 2; ++i)
+ {
+ osgiMinimum.add("1." + i);
+ }
+
+ Set<String> jre = new LinkedHashSet<>();
+ result.put("JRE", jre);
+ for (int i = 0; i <= 1; ++i)
+ {
+ jre.add("1." + i);
+ }
+
+ Set<String> javaSE = new LinkedHashSet<>();
+ result.put("JavaSE", javaSE);
+ for (int i = 0; i <= 8; ++i)
+ {
+ javaSE.add("1." + i);
+ }
+ for (int i = 9; i <= versionValue[0]; ++i)
+ {
+ javaSE.add("" + i + ".0");
+ }
+
+ for (int compact = 1; compact <= 3; ++compact)
+ {
+ Set<String> javaCompact = new LinkedHashSet<>();
+ result.put("JavaSE/compact" + compact, javaCompact);
+ javaCompact.add("1.8");
+ for (int i = 9; i <= versionValue[0]; ++i)
+ {
+ javaCompact.add("" + i + ".0");
+ }
+ }
+
+ return result;
+ }
+
+ public static class Application implements IApplication
+ {
+ @Override
+ public Object start(IApplicationContext context) throws Exception
+ {
+ System.out.println("start");
+ main((String[])context.getArguments().get("application.args"));
+ return null;
+ }
+
+ @Override
+ public void stop()
+ {
+ }
+ }
+
+ private static Pattern VERSION_PATTERN = Pattern.compile("([0-9]+)\\.([0-9]+)\\.([0-9]+)");
+
+ private static int[] getVersion(String version)
+ {
+ Matcher matcher = VERSION_PATTERN.matcher(version);
+ if (!matcher.matches())
+ {
+ throw new IllegalArgumentException("Invalid version " + version);
+ }
+
+ return new int []{ Integer.parseInt(matcher.group(1)), Integer.parseInt(matcher.group(2)), Integer.parseInt(matcher.group(3)) };
+ }
+}
diff --git a/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/model/util/ModelAdapterFactory.java b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/model/util/ModelAdapterFactory.java
new file mode 100644
index 0000000..87112b5
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/model/util/ModelAdapterFactory.java
@@ -0,0 +1,249 @@
+/**
+ * Copyright (c) 2020 Eclipse contributors and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.eclipse.justj.codegen.model.util;
+
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notifier;
+import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.justj.codegen.model.Copyrightable;
+import org.eclipse.justj.codegen.model.JVM;
+import org.eclipse.justj.codegen.model.Model;
+import org.eclipse.justj.codegen.model.ModelPackage;
+import org.eclipse.justj.codegen.model.Touchable;
+import org.eclipse.justj.codegen.model.Touchpoint;
+import org.eclipse.justj.codegen.model.Variant;
+
+
+/**
+ * <!-- 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.justj.codegen.model.ModelPackage
+ * @generated
+ */
+public class ModelAdapterFactory extends AdapterFactoryImpl
+{
+ /**
+ * The cached model package.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected static ModelPackage modelPackage;
+
+ /**
+ * Creates an instance of the adapter factory.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public ModelAdapterFactory()
+ {
+ if (modelPackage == null)
+ {
+ modelPackage = ModelPackage.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 ModelSwitch<Adapter> modelSwitch = new ModelSwitch<Adapter>()
+ {
+ @Override
+ public Adapter caseModel(Model object)
+ {
+ return createModelAdapter();
+ }
+
+ @Override
+ public Adapter caseJVM(JVM object)
+ {
+ return createJVMAdapter();
+ }
+
+ @Override
+ public Adapter caseVariant(Variant object)
+ {
+ return createVariantAdapter();
+ }
+
+ @Override
+ public Adapter caseCopyrightable(Copyrightable object)
+ {
+ return createCopyrightableAdapter();
+ }
+
+ @Override
+ public Adapter caseTouchpoint(Touchpoint object)
+ {
+ return createTouchpointAdapter();
+ }
+
+ @Override
+ public Adapter caseTouchable(Touchable object)
+ {
+ return createTouchableAdapter();
+ }
+
+ @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.justj.codegen.model.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.justj.codegen.model.Model
+ * @generated
+ */
+ public Adapter createModelAdapter()
+ {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.justj.codegen.model.JVM <em>JVM</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.justj.codegen.model.JVM
+ * @generated
+ */
+ public Adapter createJVMAdapter()
+ {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.justj.codegen.model.Variant <em>Variant</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.justj.codegen.model.Variant
+ * @generated
+ */
+ public Adapter createVariantAdapter()
+ {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.justj.codegen.model.Copyrightable <em>Copyrightable</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.justj.codegen.model.Copyrightable
+ * @generated
+ */
+ public Adapter createCopyrightableAdapter()
+ {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.justj.codegen.model.Touchpoint <em>Touchpoint</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.justj.codegen.model.Touchpoint
+ * @generated
+ */
+ public Adapter createTouchpointAdapter()
+ {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.justj.codegen.model.Touchable <em>Touchable</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.justj.codegen.model.Touchable
+ * @generated
+ */
+ public Adapter createTouchableAdapter()
+ {
+ 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;
+ }
+
+} //ModelAdapterFactory
diff --git a/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/model/util/ModelResourceFactoryImpl.java b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/model/util/ModelResourceFactoryImpl.java
new file mode 100644
index 0000000..d9c42bf
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/model/util/ModelResourceFactoryImpl.java
@@ -0,0 +1,67 @@
+/**
+ * Copyright (c) 2020 Eclipse contributors and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.eclipse.justj.codegen.model.util;
+
+
+import java.util.Map;
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.impl.ResourceFactoryImpl;
+import org.eclipse.emf.ecore.xmi.XMLResource;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Resource Factory</b> associated with the package.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.justj.codegen.model.util.ModelResourceImpl
+ * @generated
+ */
+public class ModelResourceFactoryImpl extends ResourceFactoryImpl
+{
+ /**
+ * Creates an instance of the resource factory.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public ModelResourceFactoryImpl()
+ {
+ super();
+ }
+
+ /**
+ * Creates an instance of the resource.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ @Override
+ public Resource createResource(URI uri)
+ {
+ XMLResource result = new ModelResourceImpl(uri);
+
+ Map<Object, Object> defaultSaveOptions = result.getDefaultSaveOptions();
+ defaultSaveOptions.put(XMLResource.OPTION_EXTENDED_META_DATA, Boolean.TRUE);
+ defaultSaveOptions.put(XMLResource.OPTION_LINE_WIDTH, 10);
+ defaultSaveOptions.put(XMLResource.OPTION_SCHEMA_LOCATION, Boolean.TRUE);
+ defaultSaveOptions.put(XMLResource.OPTION_USE_ENCODED_ATTRIBUTE_STYLE, Boolean.TRUE);
+
+ Map<Object, Object> defaultLoadOptions = result.getDefaultLoadOptions();
+ defaultLoadOptions.put(XMLResource.OPTION_EXTENDED_META_DATA, Boolean.TRUE);
+ defaultLoadOptions.put(XMLResource.OPTION_USE_ENCODED_ATTRIBUTE_STYLE, Boolean.TRUE);
+ defaultLoadOptions.put(XMLResource.OPTION_USE_LEXICAL_HANDLER, Boolean.TRUE);
+
+ return result;
+ }
+
+} //ModelResourceFactoryImpl
diff --git a/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/model/util/ModelResourceImpl.java b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/model/util/ModelResourceImpl.java
new file mode 100644
index 0000000..75574c1
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/model/util/ModelResourceImpl.java
@@ -0,0 +1,39 @@
+/**
+ * Copyright (c) 2020 Eclipse contributors and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.eclipse.justj.codegen.model.util;
+
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.xmi.impl.XMLResourceImpl;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Resource </b> associated with the package.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.justj.codegen.model.util.ModelResourceFactoryImpl
+ * @generated
+ */
+public class ModelResourceImpl extends XMLResourceImpl
+{
+ /**
+ * Creates an instance of the resource.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param uri the URI of the new resource.
+ * @generated
+ */
+ public ModelResourceImpl(URI uri)
+ {
+ super(uri);
+ }
+
+} //ModelResourceImpl
diff --git a/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/model/util/ModelSwitch.java b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/model/util/ModelSwitch.java
new file mode 100644
index 0000000..58f14ec
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/model/util/ModelSwitch.java
@@ -0,0 +1,291 @@
+/**
+ * Copyright (c) 2020 Eclipse contributors and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.eclipse.justj.codegen.model.util;
+
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.util.Switch;
+import org.eclipse.justj.codegen.model.Copyrightable;
+import org.eclipse.justj.codegen.model.JVM;
+import org.eclipse.justj.codegen.model.Model;
+import org.eclipse.justj.codegen.model.ModelPackage;
+import org.eclipse.justj.codegen.model.Touchable;
+import org.eclipse.justj.codegen.model.Touchpoint;
+import org.eclipse.justj.codegen.model.Variant;
+
+
+/**
+ * <!-- 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.justj.codegen.model.ModelPackage
+ * @generated
+ */
+public class ModelSwitch<T> extends Switch<T>
+{
+ /**
+ * The cached model package
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected static ModelPackage modelPackage;
+
+ /**
+ * Creates an instance of the switch.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public ModelSwitch()
+ {
+ if (modelPackage == null)
+ {
+ modelPackage = ModelPackage.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 ModelPackage.MODEL:
+ {
+ Model model = (Model)theEObject;
+ T result = caseModel(model);
+ if (result == null)
+ {
+ result = caseCopyrightable(model);
+ }
+ if (result == null)
+ {
+ result = caseTouchable(model);
+ }
+ if (result == null)
+ {
+ result = defaultCase(theEObject);
+ }
+ return result;
+ }
+ case ModelPackage.JVM:
+ {
+ JVM jvm = (JVM)theEObject;
+ T result = caseJVM(jvm);
+ if (result == null)
+ {
+ result = caseCopyrightable(jvm);
+ }
+ if (result == null)
+ {
+ result = caseTouchable(jvm);
+ }
+ if (result == null)
+ {
+ result = defaultCase(theEObject);
+ }
+ return result;
+ }
+ case ModelPackage.VARIANT:
+ {
+ Variant variant = (Variant)theEObject;
+ T result = caseVariant(variant);
+ if (result == null)
+ {
+ result = caseCopyrightable(variant);
+ }
+ if (result == null)
+ {
+ result = caseTouchable(variant);
+ }
+ if (result == null)
+ {
+ result = defaultCase(theEObject);
+ }
+ return result;
+ }
+ case ModelPackage.COPYRIGHTABLE:
+ {
+ Copyrightable copyrightable = (Copyrightable)theEObject;
+ T result = caseCopyrightable(copyrightable);
+ if (result == null)
+ {
+ result = defaultCase(theEObject);
+ }
+ return result;
+ }
+ case ModelPackage.TOUCHPOINT:
+ {
+ Touchpoint touchpoint = (Touchpoint)theEObject;
+ T result = caseTouchpoint(touchpoint);
+ if (result == null)
+ {
+ result = defaultCase(theEObject);
+ }
+ return result;
+ }
+ case ModelPackage.TOUCHABLE:
+ {
+ Touchable touchable = (Touchable)theEObject;
+ T result = caseTouchable(touchable);
+ 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</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>JVM</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>JVM</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseJVM(JVM object)
+ {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>Variant</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>Variant</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseVariant(Variant object)
+ {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>Copyrightable</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>Copyrightable</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseCopyrightable(Copyrightable object)
+ {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>Touchpoint</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>Touchpoint</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseTouchpoint(Touchpoint object)
+ {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>Touchable</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>Touchable</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseTouchable(Touchable 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;
+ }
+
+} //ModelSwitch
diff --git a/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/model/util/ModelXMLProcessor.java b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/model/util/ModelXMLProcessor.java
new file mode 100644
index 0000000..028268b
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/model/util/ModelXMLProcessor.java
@@ -0,0 +1,61 @@
+/**
+ * Copyright (c) 2020 Eclipse contributors and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.eclipse.justj.codegen.model.util;
+
+
+import java.util.Map;
+
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.xmi.util.XMLProcessor;
+import org.eclipse.justj.codegen.model.ModelPackage;
+
+
+/**
+ * This class contains helper methods to serialize and deserialize XML documents
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ModelXMLProcessor extends XMLProcessor
+{
+
+ /**
+ * Public constructor to instantiate the helper.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public ModelXMLProcessor()
+ {
+ super((EPackage.Registry.INSTANCE));
+ ModelPackage.eINSTANCE.eClass();
+ }
+
+ /**
+ * Register for "*" and "xml" file extensions the ModelResourceFactoryImpl factory.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected Map<String, Resource.Factory> getRegistrations()
+ {
+ if (registrations == null)
+ {
+ super.getRegistrations();
+ registrations.put(XML_EXTENSION, new ModelResourceFactoryImpl());
+ registrations.put(STAR_EXTENSION, new ModelResourceFactoryImpl());
+ }
+ return registrations;
+ }
+
+} //ModelXMLProcessor
diff --git a/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/model/util/ProcessLauncher.java b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/model/util/ProcessLauncher.java
new file mode 100644
index 0000000..576f7d0
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/model/util/ProcessLauncher.java
@@ -0,0 +1,86 @@
+/**
+ * Copyright (c) 2020 Eclipse contributors and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.eclipse.justj.codegen.model.util;
+
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.Map;
+import java.util.Set;
+import java.util.TreeSet;
+import java.util.function.Consumer;
+
+
+public class ProcessLauncher
+{
+ public static void main(String[] args) throws IOException, InterruptedException
+ {
+ ProcessBuilder builder = new ProcessBuilder(args);
+
+ // This is needed on Windows to find gzip and won't hurt elsewhere.
+ Map<String, String> environment = builder.environment();
+ Path executable = Paths.get(args[0]);
+ String path = environment.get("PATH");
+ environment.put("PATH", path + File.pathSeparator + executable.getParent());
+
+ Process process = builder.start();
+ OutputStream stdin = process.getOutputStream();
+ stdin.close();
+
+ InputStream stderr = process.getErrorStream();
+ new StreamHandler(stderr, System.err::println).start();
+
+ Set<String> result = new TreeSet<>();
+ InputStream stdout = process.getInputStream();
+ new StreamHandler(stdout, line ->
+ {
+ // Consume the results.
+ }).start();
+
+ process.waitFor();
+
+ result.stream().forEach(System.out::println);
+
+ System.exit(process.exitValue());
+ }
+
+ private static class StreamHandler extends Thread
+ {
+ private final InputStream input;
+
+ private final Consumer<String> consumer;
+
+ public StreamHandler(InputStream input, Consumer<String> consumer)
+ {
+ this.input = input;
+ this.consumer = consumer;
+ }
+
+ @Override
+ public void run()
+ {
+ try (BufferedReader reader = new BufferedReader(new InputStreamReader(input, "UTF-8")))
+ {
+ reader.lines().forEach(consumer);
+ }
+ catch (Exception ex)
+ {
+ ex.printStackTrace();
+ }
+ }
+ }
+}
diff --git a/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/model/util/Reconciler.java b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/model/util/Reconciler.java
new file mode 100644
index 0000000..e786257
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/model/util/Reconciler.java
@@ -0,0 +1,708 @@
+/**
+ * Copyright (c) 2020 Eclipse contributors and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.eclipse.justj.codegen.model.util;
+
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.PrintStream;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.nio.file.attribute.PosixFilePermission;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Set;
+import java.util.TreeMap;
+import java.util.TreeSet;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import java.util.stream.Collectors;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.SubMonitor;
+import org.eclipse.emf.common.CommonPlugin;
+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.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.resource.URIConverter;
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.justj.codegen.model.Copyrightable;
+import org.eclipse.justj.codegen.model.JVM;
+import org.eclipse.justj.codegen.model.Model;
+import org.eclipse.justj.codegen.model.ModelFactory;
+import org.eclipse.justj.codegen.model.ModelPackage;
+import org.eclipse.justj.codegen.model.ModelPlugin;
+import org.eclipse.justj.codegen.model.Phase;
+import org.eclipse.justj.codegen.model.Touchable;
+import org.eclipse.justj.codegen.model.Touchpoint;
+import org.eclipse.justj.codegen.model.Variant;
+
+
+public class Reconciler
+{
+ private final Model model;
+
+ private final URIConverter uriConverter;
+
+ private final URI source;
+
+ private Path localCache;
+
+ public static void main(String[] args) throws IOException, InterruptedException
+ {
+ ModelPackage.eINSTANCE.eClass();
+ Path path = Paths.get(args[0]);
+ Path realPath = path.toRealPath();
+ Reconciler reconciler = new Reconciler(URI.createFileURI(realPath.toString()));
+ reconciler.reconcile(null);
+ }
+
+ public Reconciler(URI modelURI) throws IOException
+ {
+ ResourceSet resourceSet = new ResourceSetImpl();
+ uriConverter = resourceSet.getURIConverter();
+ resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("jregen", new ModelResourceFactoryImpl());
+
+ Resource resource = resourceSet.getResource(modelURI, true);
+ model = (Model)resource.getContents().get(0);
+ this.source = computeSource(model);
+ this.localCache = computeLocalCache(model);
+ }
+
+ public Reconciler(Model model)
+ {
+ this.model = model;
+ Resource resource = model.eResource();
+ uriConverter = resource.getResourceSet().getURIConverter();
+ this.source = computeSource(model);
+ this.localCache = computeLocalCache(model);
+ }
+
+ private static URI computeSource(Model model)
+ {
+ String source = model.getSource();
+ URI resourceURI = model.eResource().getURI();
+ if (source == null || source.trim().isEmpty())
+ {
+ return CommonPlugin.resolve(resourceURI.trimSegments(0)).appendSegment("justj.manifest");
+ }
+ else
+ {
+ URI sourceURI = URI.createURI(source);
+ if (sourceURI.isRelative())
+ {
+ sourceURI = sourceURI.resolve(CommonPlugin.resolve(resourceURI.trimSegments(0)));
+ }
+ return sourceURI;
+ }
+ }
+
+ static Path computeLocalCache(Model model)
+ {
+ String localCache = model.getLocalCache();
+ if (localCache == null)
+ {
+ return null;
+ }
+ else
+ {
+ Path path = Paths.get(localCache);
+ if (path.isAbsolute())
+ {
+ return path;
+ }
+ else
+ {
+ URI resourceURI = model.eResource().getURI();
+ URI resolvedURI = CommonPlugin.resolve(resourceURI).trimSegments(1);
+ Path result = Paths.get(resolvedURI.toFileString()).resolve(path).normalize();
+ return result;
+ }
+ }
+ }
+
+ public Model getModel()
+ {
+ return model;
+ }
+
+ public URI getSource()
+ {
+ return source;
+ }
+
+ public Model reconcile(IProgressMonitor monitor) throws IOException, InterruptedException
+ {
+ SubMonitor overallMonitor = SubMonitor.convert(monitor);
+ overallMonitor.beginTask("Reconciling " + source, 10);
+
+ Map<URI, Path> manifest = loadManifest(overallMonitor.split(9));
+
+ Model modelCopy = EcoreUtil.copy(model);
+
+ modelCopy.getJVMs().clear();
+
+ Exception failure = null;
+ SubMonitor manifestMonitor = overallMonitor.split(1);
+ manifestMonitor.setWorkRemaining(manifest.size());
+ for (Map.Entry<URI, Path> entry : manifest.entrySet())
+ {
+ URI jreURI = entry.getKey();
+ Path localCache = entry.getValue();
+
+ manifestMonitor.subTask("Processing " + jreURI);
+
+ try
+ {
+ TarAnalyzer handler = new TarAnalyzer();
+ CodeGenUtil.untar(localCache, handler);
+
+ Variant variant = handler.reconcile(modelCopy);
+ variant.setSource(jreURI.toString());
+ }
+ catch (Exception ex)
+ {
+ Files.deleteIfExists(localCache);
+ ModelPlugin.INSTANCE.log(ex);
+ failure = ex;
+ }
+
+ manifestMonitor.worked(1);
+ }
+
+ if (failure instanceof IOException)
+ {
+ throw (IOException)failure;
+ }
+ else if (failure instanceof RuntimeException)
+ {
+ throw (RuntimeException)failure;
+ }
+ else if (failure instanceof InterruptedException)
+ {
+ throw (InterruptedException)failure;
+ }
+ else if (failure != null)
+ {
+ throw new RuntimeException(failure);
+ }
+
+ if (Boolean.FALSE)
+ {
+ Resource resource = model.eResource();
+ URI uri = resource.getURI();
+ URI targetURI = uri.trimFileExtension().appendFileExtension("reconciled").appendFileExtension(uri.fileExtension());
+ resource.setURI(targetURI);
+ resource.save(null);
+ }
+
+ return modelCopy;
+ }
+
+ private static class TarAnalyzer extends CodeGenUtil.UntarHandler
+ {
+ private final Map<Path, Set<PosixFilePermission>> allPosixFilePermissions = new TreeMap<>();
+
+ private final Set<Path> regularFiles = new TreeSet<>();
+
+ private final Map<Path, Path> symblicLinks = new TreeMap<>();
+
+ private final Properties properties;
+
+ public TarAnalyzer()
+ {
+ properties = new Properties();
+ }
+
+ @Override
+ public void handleRegularFile(InputStream inputStream, Path path, Set<PosixFilePermission> posixFilePermissions) throws IOException
+ {
+ allPosixFilePermissions.put(path, posixFilePermissions);
+ if (path.endsWith("org.eclipse.justj.properties"))
+ {
+ properties.load(inputStream);
+ }
+
+ regularFiles.add(path);
+ }
+
+ @Override
+ public void handleDirectory(Path path, Set<PosixFilePermission> posixFilePermissions)
+ {
+ allPosixFilePermissions.put(path, posixFilePermissions);
+ }
+
+ @Override
+ public void handleSymbolicLink(Path path, Path linkPath)
+ {
+ symblicLinks.put(path, linkPath);
+ }
+
+ public Variant reconcile(Model model)
+ {
+ String jreName = properties.getProperty("org.eclipse.justj.name");
+ String label = properties.getProperty("org.eclipse.justj.label");
+
+ String javaVersion = properties.getProperty("java.version");
+
+ JVM jvm = getJVM(model, jreName, javaVersion);
+ jvm.setLabel(label);
+
+ String os = properties.getProperty("osgi.os");
+ String arch = properties.getProperty("osgi.arch");
+ Variant variant = getVariant(jvm, os, arch);
+
+ if (jvm.getAboutTextExtra() == null)
+ {
+ String aboutTextExtra = "\nVisit http://www.eclipse.org/justj";
+ String vendor = properties.getProperty("org.eclipse.justj.url.vendor");
+ aboutTextExtra += "\n\nProvides Java Runtimes derived from " + vendor;
+ jvm.setAboutTextExtra(aboutTextExtra);
+ }
+
+ EList<Touchpoint> touchpoints = variant.getTouchpoints();
+ Touchpoint touchpoint = ModelFactory.eINSTANCE.createTouchpoint();
+ touchpoint.setPhase(Phase.INSTALL);
+ touchpoints.add(touchpoint);
+
+ EList<String> instructions = touchpoint.getInstructions();
+ String vmArg = properties.getProperty("org.eclipse.justj.vm.arg");
+ instructions.add("org.eclipse.equinox.p2.touchpoint.eclipse.setJvm(jvm:${artifact.location}/jre/" + vmArg + ")");
+
+ if (!"win32".equals(os))
+ {
+ Set<Path> ignore = new HashSet<>();
+ Set<Path> executableFolders = new TreeSet<>();
+ Set<Path> executableFiles = new TreeSet<>();
+ for (Map.Entry<Path, Set<PosixFilePermission>> entry : allPosixFilePermissions.entrySet())
+ {
+ Path path = entry.getKey();
+ if (ignore.add(path))
+ {
+ Set<PosixFilePermission> posixPermissions = entry.getValue();
+ if (regularFiles.contains(path) && posixPermissions.contains(PosixFilePermission.OWNER_EXECUTE))
+ {
+ Path parent = path.getParent();
+ if (parent != null)
+ {
+ boolean allDescendantsOfParentExecutable = true;
+ Set<Path> allDescendants = new HashSet<>();
+ for (Map.Entry<Path, Set<PosixFilePermission>> otherEntry : allPosixFilePermissions.entrySet())
+ {
+ Path otherPath = otherEntry.getKey();
+ if (otherPath.startsWith(parent))
+ {
+ Set<PosixFilePermission> otherPosixFilePermissions = otherEntry.getValue();
+ if (otherPosixFilePermissions.contains(PosixFilePermission.OWNER_EXECUTE))
+ {
+ allDescendants.add(otherPath);
+ }
+ else if (!symblicLinks.containsKey(otherPath))
+ {
+ allDescendantsOfParentExecutable = false;
+ break;
+ }
+ }
+ }
+
+ if (allDescendantsOfParentExecutable)
+ {
+ executableFolders.add(parent);
+ }
+ else
+ {
+ executableFiles.add(path);
+ }
+
+ ignore.addAll(allDescendants);
+ }
+ }
+ }
+ }
+
+ if (executableFolders.isEmpty() || !executableFiles.isEmpty())
+ {
+ for (Path executableFolder : executableFolders)
+ {
+ String chmodTouchpointInstruction = "org.eclipse.equinox.p2.touchpoint.eclipse.chmod(targetDir:${artifact.location},targetFile:"
+ + executableFolder.normalize().toString().replace('\\', '/') + ",permissions:+x,options:-R";
+ instructions.add(chmodTouchpointInstruction);
+ }
+
+ for (Path executableFile : executableFiles)
+ {
+ String chmodTouchpointInstruction = "org.eclipse.equinox.p2.touchpoint.eclipse.chmod(targetDir:${artifact.location},targetFile:"
+ + executableFile.normalize().toString().replace('\\', '/') + ",permissions:+x";
+ instructions.add(chmodTouchpointInstruction);
+ }
+ }
+ }
+
+ return variant;
+ }
+
+ private JVM getJVM(Model model, String name, String javaVersion)
+ {
+ EList<JVM> jvms = model.getJVMs();
+ for (JVM jvm : jvms)
+ {
+ if (name.equals(jvm.getName()) && javaVersion.equals(jvm.getVersion()))
+ {
+ return jvm;
+ }
+ }
+
+ JVM jvm = ModelFactory.eINSTANCE.createJVM();
+ jvm.setName(name);
+ jvm.setVersion(javaVersion);
+ jvms.add(jvm);
+
+ ECollections.sort(jvms, (j1, j2) -> j1.getName().compareTo(j2.getName()));
+ return jvm;
+ }
+
+ private Variant getVariant(JVM jvm, String os, String arch)
+ {
+ EList<Variant> variants = jvm.getVariants();
+ for (Variant variant : variants)
+ {
+ if (os.equals(variant.getOs()) && arch.equals(variant.getArch()))
+ {
+ return variant;
+ }
+ }
+
+ Variant variant = ModelFactory.eINSTANCE.createVariant();
+ variant.setOs(os);
+ variant.setArch(arch);
+
+ String label;
+ switch (os)
+ {
+ case "linux":
+ {
+ label = "Linux";
+ break;
+ }
+ case "win32":
+ {
+ label = "Windows";
+ break;
+ }
+ case "macosx":
+ {
+ label = "MacOS";
+ break;
+ }
+ default:
+ {
+ label = os;
+ break;
+ }
+ };
+
+ switch (arch)
+ {
+ case "x86_64":
+ {
+ label += " 64 bit";
+ break;
+ }
+ default:
+ {
+ label = " " + arch;
+ break;
+ }
+ }
+
+ variant.setLabel(label);
+ variants.add(variant);
+ ECollections.sort(variants, (v1, v2) -> v1.getOs().compareTo(v2.getOs()));
+ return variant;
+ }
+ }
+
+ private Map<URI, Path> loadManifest(SubMonitor monitor) throws IOException, InterruptedException
+ {
+ String content = load(source);
+ List<String> jreURIs = Arrays.asList(content.split("\r?\n"));
+
+ int originalSize = jreURIs.size();
+ monitor.subTask("Fetching " + originalSize + " JREs");
+ monitor.setWorkRemaining(originalSize);
+
+ ExecutorService executor = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors() * 4);
+ Map<URI, Future<Path>> jres = new LinkedHashMap<>();
+ AtomicInteger size = new AtomicInteger(originalSize);
+ jreURIs.forEach(jre ->
+ {
+ URI uri = URI.createURI(jre);
+ URI jreURI = uri.isRelative() ? uri.resolve(source) : uri;
+ jres.put(jreURI, executor.submit(() ->
+ {
+ try
+ {
+ return CodeGenUtil.getCache(localCache, uriConverter, jreURI);
+ }
+ finally
+ {
+ synchronized (monitor)
+ {
+ monitor.subTask("Fetcthing " + originalSize + " JREs; " + size.decrementAndGet() + " remaining");
+ monitor.worked(1);
+ }
+ }
+ }));
+ });
+
+ executor.shutdown();
+
+ // Wait for at most 20 minutes.
+ for (int elapsed = 0; elapsed < 60 * 20; elapsed += 2)
+ {
+ try
+ {
+ executor.awaitTermination(2, TimeUnit.SECONDS);
+ monitor.checkCanceled();
+ break;
+ }
+ catch (InterruptedException ex)
+ {
+ //$FALL-THROUGH$
+ }
+ }
+
+ Map<URI, Path> result = jres.entrySet().stream().collect(Collectors.toMap(entry -> entry.getKey(), entry ->
+ {
+ try
+ {
+ return entry.getValue().get();
+ }
+ catch (InterruptedException | ExecutionException e)
+ {
+ throw new RuntimeException(e);
+ }
+ }));
+
+ return result;
+ }
+
+ protected void save(String text, URI target) throws IOException
+ {
+ try (OutputStream out = uriConverter.createOutputStream(target); PrintStream print = new PrintStream(out, true, "UTF-8"))
+ {
+ print.print(text);
+ }
+ }
+
+ protected void save(URI source, URI target) throws IOException
+ {
+ try (InputStream in = uriConverter.createInputStream(source); OutputStream out = uriConverter.createOutputStream(target))
+ {
+ byte[] buffer = new byte [10000];
+ int length = in.read(buffer);
+ out.write(buffer, 0, length);
+ }
+ }
+
+ protected String load(URI source) throws IOException
+ {
+ try (InputStream in = uriConverter.createInputStream(source))
+ {
+ byte[] buffer = new byte [100000];
+ int length = in.read(buffer);
+ return new String(buffer, 0, length, "UTF-8");
+ }
+ }
+
+ protected void save(byte[] source, URI target) throws IOException
+ {
+ try (OutputStream out = uriConverter.createOutputStream(target); PrintStream print = new PrintStream(out, true, "UTF-8"))
+ {
+ out.write(source);
+ }
+ }
+
+ public static String getCopyright(Object argument, String prefix, String separator)
+ {
+ String copyrightText = null;
+ String copyrightYear = null;
+ String copyrightHolder = null;
+ for (Object object = argument; object instanceof Copyrightable;)
+ {
+ Copyrightable copyrightable = (Copyrightable)object;
+ if (copyrightText == null)
+ {
+ copyrightText = copyrightable.getCopyrightText();
+ }
+
+ if (copyrightYear == null)
+ {
+ copyrightYear = copyrightable.getCopyrightYear();
+ }
+
+ if (copyrightHolder == null)
+ {
+ copyrightHolder = copyrightable.getCopyrightHolder();
+ }
+
+ object = copyrightable.eContainer();
+ }
+
+ if (copyrightText != null)
+ {
+ if (copyrightHolder != null)
+ {
+ copyrightText = copyrightText.replace("${copyrightHolder}", copyrightHolder);
+ }
+
+ if (copyrightYear != null)
+ {
+ copyrightText = copyrightText.replace("${copyrightYear}", copyrightYear);
+ }
+
+ return composeLines(copyrightText, prefix, separator);
+ }
+
+ return "";
+ }
+
+ public static Map<String, Set<String>> getTouchpoints(Object argument)
+ {
+ Map<String, Set<String>> result = new LinkedHashMap<String, Set<String>>();
+ for (Object object = argument; object instanceof Touchable;)
+ {
+ Touchable touchable = (Touchable)object;
+ for (Touchpoint touchpoint : touchable.getTouchpoints())
+ {
+ EList<String> instructions = touchpoint.getInstructions();
+ if (!instructions.isEmpty())
+ {
+ Phase phase = touchpoint.getPhase();
+ Set<String> composedInstructions = result.get(phase.getLiteral());
+ if (composedInstructions == null)
+ {
+ composedInstructions = new LinkedHashSet<String>();
+ result.put(phase.getLiteral(), composedInstructions);
+ }
+ composedInstructions.addAll(instructions);
+ }
+ }
+
+ object = touchable.eContainer();
+ }
+
+ return result;
+ }
+
+ public static String composeLines(String body, String prefix, String separator)
+ {
+ if (body != null)
+ {
+ String[] lines = body.split("\r?\n", -1);
+ StringBuilder result = new StringBuilder();
+ for (int i = 0; i < lines.length; i++)
+ {
+ String line = lines[i];
+ result.append(prefix);
+ result.append(line);
+ if (i != lines.length - 1)
+ {
+ result.append(separator);
+ }
+ }
+
+ return result.toString();
+ }
+
+ return "";
+ }
+
+ public static String getVersionRange(String version)
+ {
+ int[] versionValue = getVersion(version);
+
+ return "[" + version + "," + versionValue[0] + '.' + versionValue[1] + '.' + (versionValue[2] + 1) + ")";
+ }
+
+ public static Map<String, Set<String>> getEECapabilities(String version)
+ {
+ int[] versionValue = getVersion(version);
+ Map<String, Set<String>> result = new LinkedHashMap<>();
+
+ Set<String> osgiMinimum = new LinkedHashSet<>();
+ result.put("OSGi/Minimum", osgiMinimum);
+ for (int i = 0; i <= 2; ++i)
+ {
+ osgiMinimum.add("1." + i);
+ }
+
+ Set<String> jre = new LinkedHashSet<>();
+ result.put("JRE", jre);
+ for (int i = 0; i <= 1; ++i)
+ {
+ jre.add("1." + i);
+ }
+
+ Set<String> javaSE = new LinkedHashSet<>();
+ result.put("JavaSE", javaSE);
+ for (int i = 0; i <= 8; ++i)
+ {
+ javaSE.add("1." + i);
+ }
+ for (int i = 9; i <= versionValue[0]; ++i)
+ {
+ javaSE.add("" + i + ".0");
+ }
+
+ for (int compact = 1; compact <= 3; ++compact)
+ {
+ Set<String> javaCompact = new LinkedHashSet<>();
+ result.put("JavaSE/compact" + compact, javaCompact);
+ javaCompact.add("1.8");
+ for (int i = 9; i <= versionValue[0]; ++i)
+ {
+ javaCompact.add("" + i + ".0");
+ }
+ }
+
+ return result;
+ }
+
+ private static Pattern VERSION_PATTERN = Pattern.compile("([0-9]+)\\.([0-9]+)\\.([0-9]+)");
+
+ private static int[] getVersion(String version)
+ {
+ Matcher matcher = VERSION_PATTERN.matcher(version);
+ if (!matcher.matches())
+ {
+ throw new IllegalArgumentException("Invalid version " + version);
+ }
+
+ return new int []{ Integer.parseInt(matcher.group(1)), Integer.parseInt(matcher.group(2)), Integer.parseInt(matcher.group(3)) };
+ }
+}
diff --git a/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/GitIgnore.java b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/GitIgnore.java
new file mode 100644
index 0000000..392607f
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/GitIgnore.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2020 Eclipse contributors and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.eclipse.justj.codegen.templates;
+
+public class GitIgnore
+{
+ protected static String nl;
+ public static synchronized GitIgnore create(String lineSeparator)
+ {
+ nl = lineSeparator;
+ GitIgnore result = new GitIgnore();
+ nl = null;
+ return result;
+ }
+
+ public final String NL = nl == null ? (System.getProperties().getProperty("line.separator")) : nl;
+ protected static final String _1 = "target/";
+
+ public String generate(Object argument)
+ {
+ final StringBuilder builder = new StringBuilder();
+ builder.append(_1);
+ builder.append(NL);
+ return builder.toString();
+ }
+}
diff --git a/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/POMXML.java b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/POMXML.java
new file mode 100644
index 0000000..0cba3f2
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/POMXML.java
@@ -0,0 +1,68 @@
+/*
+ * Copyright (c) 2020 Eclipse contributors and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.eclipse.justj.codegen.templates;
+
+import org.eclipse.justj.codegen.model.*;
+
+public class POMXML
+{
+ protected static String nl;
+ public static synchronized POMXML create(String lineSeparator)
+ {
+ nl = lineSeparator;
+ POMXML result = new POMXML();
+ nl = null;
+ return result;
+ }
+
+ public final String NL = nl == null ? (System.getProperties().getProperty("line.separator")) : nl;
+ protected static final String _1 = "-->";
+ protected static final String _2 = ".parent</module>";
+ protected static final String _3 = "<!--";
+ protected static final String _4 = "</groupId>";
+ protected static final String _5 = "</modules>";
+ protected static final String _6 = "</project>";
+ protected static final String _7 = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
+ protected static final String _8 = "<artifactId>org.eclipse.justj.root</artifactId>";
+ protected static final String _9 = "<groupId>";
+ protected static final String _10 = "<modelVersion>4.0.0</modelVersion>";
+ protected static final String _11 = "<module>releng/";
+ protected static final String _12 = "<modules>";
+ protected static final String _13 = "<packaging>pom</packaging>";
+ protected static final String _14 = "<project";
+ protected static final String _15 = "<version>1.0.0-SNAPSHOT</version>";
+ protected static final String _16 = "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"";
+ protected static final String _17 = "xmlns=\"http://maven.apache.org/POM/4.0.0\"";
+ protected static final String _18 = "xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\">";
+ protected final String NL_1 = NL + " ";
+ protected final String NL_2 = NL + " ";
+ protected final String _19 = NL + _1 + NL + _14 + NL_2 + _17 + NL_2 + _16 + NL_2 + _18 + NL_1 + _10 + NL + NL_1 + _9;
+ protected final String _20 = _4 + NL_1 + _8 + NL_1 + _15 + NL_1 + _13 + NL + NL_1 + _12 + NL_2 + _11;
+ protected final String _21 = _2 + NL_1 + _5 + NL + NL + _6;
+
+ public String generate(Object argument)
+ {
+ final StringBuilder builder = new StringBuilder();
+ Model model = (Model)argument;
+ builder.append(_7);
+ builder.append(NL);
+ builder.append(_3);
+ builder.append(NL);
+ builder.append(org.eclipse.justj.codegen.model.util.Generator.getCopyright(argument, "", NL));
+ builder.append(_19);
+ builder.append(model.getName());
+ builder.append(_20);
+ builder.append(model.getName());
+ builder.append(_21);
+ builder.append(NL);
+ return builder.toString();
+ }
+}
diff --git a/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/feature/BuildProperties.java b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/feature/BuildProperties.java
new file mode 100644
index 0000000..82b7461
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/feature/BuildProperties.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2020 Eclipse contributors and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.eclipse.justj.codegen.templates.feature;
+
+public class BuildProperties
+{
+ protected static String nl;
+ public static synchronized BuildProperties create(String lineSeparator)
+ {
+ nl = lineSeparator;
+ BuildProperties result = new BuildProperties();
+ nl = null;
+ return result;
+ }
+
+ public final String NL = nl == null ? (System.getProperties().getProperty("line.separator")) : nl;
+ protected static final String _1 = "#";
+ protected static final String _2 = "bin.includes = feature.xml,\\";
+ protected static final String _3 = "feature.properties";
+ protected final String NL_1 = NL + " ";
+ protected final String _4 = "";
+ protected final String _5 = NL + _1 + NL + NL + _2 + NL_1 + _3;
+
+ public String generate(Object argument)
+ {
+ final StringBuilder builder = new StringBuilder();
+ builder.append(_4);
+ builder.append(org.eclipse.justj.codegen.model.util.Generator.getCopyright(argument, "# ", NL));
+ builder.append(_5);
+ builder.append(NL);
+ return builder.toString();
+ }
+}
diff --git a/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/feature/FeatureProperties.java b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/feature/FeatureProperties.java
new file mode 100644
index 0000000..c5ef291
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/feature/FeatureProperties.java
@@ -0,0 +1,65 @@
+/*
+ * Copyright (c) 2020 Eclipse contributors and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.eclipse.justj.codegen.templates.feature;
+
+import org.eclipse.justj.codegen.model.*;
+import org.eclipse.justj.codegen.model.util.Generator;
+
+public class FeatureProperties
+{
+ protected static String nl;
+ public static synchronized FeatureProperties create(String lineSeparator)
+ {
+ nl = lineSeparator;
+ FeatureProperties result = new FeatureProperties();
+ nl = null;
+ return result;
+ }
+
+ public final String NL = nl == null ? (System.getProperties().getProperty("line.separator")) : nl;
+ protected static final String _1 = " ";
+ protected static final String _2 = "#";
+ protected static final String _3 = "\\n";
+ protected static final String _4 = "copyright = ";
+ protected static final String _5 = "description = Contains the plug-ins and fragments for the ";
+ protected static final String _6 = "featureName = ";
+ protected static final String _7 = "providerName = ";
+ protected final String _8 = "";
+ protected final String _9 = NL + _2 + NL + NL + _7;
+ protected final String _10 = NL + _6;
+ protected final String _11 = NL + _5;
+ protected final String _12 = NL + _4;
+
+ public String generate(Object argument)
+ {
+ final StringBuilder builder = new StringBuilder();
+ JVM jvm = (JVM)argument;
+ String jvmLabel = jvm.getLabel();
+ Model model = jvm.getModel();
+ String modelLabel = model.getLabel();
+ String provider = model.getProvider();
+ builder.append(_8);
+ builder.append(org.eclipse.justj.codegen.model.util.Generator.getCopyright(argument, "# ", NL));
+ builder.append(_9);
+ builder.append(provider);
+ builder.append(_10);
+ builder.append(modelLabel);
+ builder.append(_1);
+ builder.append(jvmLabel);
+ builder.append(_11);
+ builder.append(jvmLabel);
+ builder.append(_12);
+ builder.append(Generator.getCopyright(argument, "", "\\n\\" + NL));
+ builder.append(_3);
+ builder.append(NL);
+ return builder.toString();
+ }
+}
diff --git a/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/feature/FeatureXML.java b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/feature/FeatureXML.java
new file mode 100644
index 0000000..92cdade
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/feature/FeatureXML.java
@@ -0,0 +1,111 @@
+/*
+ * Copyright (c) 2020 Eclipse contributors and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.eclipse.justj.codegen.templates.feature;
+
+import org.eclipse.justj.codegen.model.*;
+
+public class FeatureXML
+{
+ protected static String nl;
+ public static synchronized FeatureXML create(String lineSeparator)
+ {
+ nl = lineSeparator;
+ FeatureXML result = new FeatureXML();
+ nl = null;
+ return result;
+ }
+
+ public final String NL = nl == null ? (System.getProperties().getProperty("line.separator")) : nl;
+ protected static final String _1 = "%copyright";
+ protected static final String _2 = "%description";
+ protected static final String _3 = "%license";
+ protected static final String _4 = "-->";
+ protected static final String _5 = ".";
+ protected static final String _6 = ".qualifier\"";
+ protected static final String _7 = "<!--";
+ protected static final String _8 = "</copyright>";
+ protected static final String _9 = "</description>";
+ protected static final String _10 = "</feature>";
+ protected static final String _11 = "</license>";
+ protected static final String _12 = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
+ protected static final String _13 = "<copyright>";
+ protected static final String _14 = "<description>";
+ protected static final String _15 = "<feature";
+ protected static final String _16 = "<license url=\"%licenseURL\">";
+ protected static final String _17 = "<plugin";
+ protected static final String _18 = "\"";
+ protected static final String _19 = "arch=\"";
+ protected static final String _20 = "download-size=\"0\"";
+ protected static final String _21 = "fragment=\"true\"/>";
+ protected static final String _22 = "id=\"";
+ protected static final String _23 = "install-size=\"0\"";
+ protected static final String _24 = "label=\"%featureName\"";
+ protected static final String _25 = "license-feature-version=\"0.0.0\">";
+ protected static final String _26 = "license-feature=\"org.eclipse.license\"";
+ protected static final String _27 = "os=\"";
+ protected static final String _28 = "provider-name=\"%providerName\"";
+ protected static final String _29 = "unpack=\"false\"/>";
+ protected static final String _30 = "version=\"";
+ protected static final String _31 = "version=\"0.0.0\"";
+ protected final String NL_1 = NL + " ";
+ protected final String NL_2 = NL + " ";
+ protected final String NL_3 = NL + " ";
+ protected final String _32 = NL + _4 + NL + _15 + NL_2 + _22;
+ protected final String _33 = _18 + NL_2 + _24 + NL_2 + _30;
+ protected final String _34 = _6 + NL_2 + _28 + NL_2 + _26 + NL_2 + _25 + NL + NL_1 + _14 + NL_2 + _2 + NL_1 + _9 + NL + NL_1 + _13 + NL_2 + _1 + NL_1 + _8 + NL + NL_1 + _16 + NL_2 + _3 + NL_1 + _11 + NL + NL_1 + _17 + NL_3 + _22;
+ protected final String _35 = _18 + NL_3 + _20 + NL_3 + _23 + NL_3 + _31 + NL_3 + _29 + NL;
+ protected final String _36 = NL_1 + _17 + NL_3 + _22;
+ protected final String _37 = _18 + NL_3 + _27;
+ protected final String _38 = _18 + NL_3 + _19;
+ protected final String _39 = _18 + NL_3 + _20 + NL_3 + _23 + NL_3 + _31 + NL_3 + _21 + NL;
+ protected final String _40 = NL + _10;
+
+ public String generate(Object argument)
+ {
+ final StringBuilder builder = new StringBuilder();
+ JVM jvm = (JVM)argument;
+ String jvmName = jvm.getName();
+ Model model = jvm.getModel();
+ String modelName = model.getName();
+ String fullName = modelName + '.' + jvmName;
+ String version = jvm.getVersion();
+ builder.append(_12);
+ builder.append(NL);
+ builder.append(_7);
+ builder.append(NL);
+ builder.append(org.eclipse.justj.codegen.model.util.Generator.getCopyright(argument, "", NL));
+ builder.append(_32);
+ builder.append(fullName);
+ builder.append(_33);
+ builder.append(version);
+ builder.append(_34);
+ builder.append(fullName);
+ builder.append(_35);
+ for (Variant variant : jvm.getVariants()) {
+ String os = variant.getOs();
+ String arch = variant.getArch();
+ builder.append(_36);
+ builder.append(fullName);
+ builder.append(_5);
+ builder.append(os);
+ builder.append(_5);
+ builder.append(arch);
+ builder.append(_37);
+ builder.append(os);
+ builder.append(_38);
+ builder.append(arch);
+ builder.append(_39);
+ }
+ builder.append(_40);
+ builder.append(NL);
+ return builder.toString();
+ }
+}
diff --git a/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/feature/POMXML.java b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/feature/POMXML.java
new file mode 100644
index 0000000..4874893
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/feature/POMXML.java
@@ -0,0 +1,90 @@
+/*
+ * Copyright (c) 2020 Eclipse contributors and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.eclipse.justj.codegen.templates.feature;
+
+import org.eclipse.justj.codegen.model.*;
+
+public class POMXML
+{
+ protected static String nl;
+ public static synchronized POMXML create(String lineSeparator)
+ {
+ nl = lineSeparator;
+ POMXML result = new POMXML();
+ nl = null;
+ return result;
+ }
+
+ public final String NL = nl == null ? (System.getProperties().getProperty("line.separator")) : nl;
+ protected static final String _1 = "-->";
+ protected static final String _2 = "-SNAPSHOT</version>";
+ protected static final String _3 = ".features</artifactId>";
+ protected static final String _4 = ".features</groupId>";
+ protected static final String _5 = ".parent/features</relativePath>";
+ protected static final String _6 = "<!--";
+ protected static final String _7 = "</artifactId>";
+ protected static final String _8 = "</groupId>";
+ protected static final String _9 = "</parent>";
+ protected static final String _10 = "</project>";
+ protected static final String _11 = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
+ protected static final String _12 = "<artifactId>";
+ protected static final String _13 = "<groupId>";
+ protected static final String _14 = "<modelVersion>4.0.0</modelVersion>";
+ protected static final String _15 = "<packaging>eclipse-feature</packaging>";
+ protected static final String _16 = "<parent>";
+ protected static final String _17 = "<project";
+ protected static final String _18 = "<relativePath>../../releng/";
+ protected static final String _19 = "<version>";
+ protected static final String _20 = "<version>1.0.0-SNAPSHOT</version>";
+ protected static final String _21 = "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"";
+ protected static final String _22 = "xmlns=\"http://maven.apache.org/POM/4.0.0\"";
+ protected static final String _23 = "xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\">";
+ protected final String NL_1 = NL + " ";
+ protected final String NL_2 = NL + " ";
+ protected final String _24 = NL + _1 + NL + _17 + NL_2 + _22 + NL_2 + _21 + NL_2 + _23 + NL_1 + _14 + NL + NL_1 + _16 + NL_2 + _13;
+ protected final String _25 = _8 + NL_2 + _12;
+ protected final String _26 = _3 + NL_2 + _20 + NL_2 + _18;
+ protected final String _27 = _5 + NL_1 + _9 + NL + NL_1 + _13;
+ protected final String _28 = _4 + NL_1 + _12;
+ protected final String _29 = _7 + NL_1 + _19;
+ protected final String _30 = _2 + NL_1 + _15 + NL + _10;
+
+ public String generate(Object argument)
+ {
+ final StringBuilder builder = new StringBuilder();
+ JVM jvm = (JVM)argument;
+ String jvmName = jvm.getName();
+ Model model = jvm.getModel();
+ String modelName = model.getName();
+ String fullName = modelName + '.' + jvmName;
+ String version = jvm.getVersion();
+ builder.append(_11);
+ builder.append(NL);
+ builder.append(_6);
+ builder.append(NL);
+ builder.append(org.eclipse.justj.codegen.model.util.Generator.getCopyright(argument, "", NL));
+ builder.append(_24);
+ builder.append(modelName);
+ builder.append(_25);
+ builder.append(modelName);
+ builder.append(_26);
+ builder.append(modelName);
+ builder.append(_27);
+ builder.append(modelName);
+ builder.append(_28);
+ builder.append(fullName);
+ builder.append(_29);
+ builder.append(version);
+ builder.append(_30);
+ builder.append(NL);
+ return builder.toString();
+ }
+}
diff --git a/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/feature/ProjectXML.java b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/feature/ProjectXML.java
new file mode 100644
index 0000000..fb8cb8a
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/feature/ProjectXML.java
@@ -0,0 +1,76 @@
+/*
+ * Copyright (c) 2020 Eclipse contributors and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.eclipse.justj.codegen.templates.feature;
+
+import org.eclipse.justj.codegen.model.*;
+
+public class ProjectXML
+{
+ protected static String nl;
+ public static synchronized ProjectXML create(String lineSeparator)
+ {
+ nl = lineSeparator;
+ ProjectXML result = new ProjectXML();
+ nl = null;
+ return result;
+ }
+
+ public final String NL = nl == null ? (System.getProperties().getProperty("line.separator")) : nl;
+ protected static final String _1 = "-feature</name>";
+ protected static final String _2 = ".";
+ protected static final String _3 = "</arguments>";
+ protected static final String _4 = "</buildCommand>";
+ protected static final String _5 = "</buildSpec>";
+ protected static final String _6 = "</filter>";
+ protected static final String _7 = "</filteredResources>";
+ protected static final String _8 = "</matcher>";
+ protected static final String _9 = "</projectDescription>";
+ protected static final String _10 = "</projects>";
+ protected static final String _11 = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
+ protected static final String _12 = "<arguments>";
+ protected static final String _13 = "<arguments>1.0-projectRelativePath-matches-true-false-target</arguments>";
+ protected static final String _14 = "<buildCommand>";
+ protected static final String _15 = "<buildSpec>";
+ protected static final String _16 = "<comment></comment>";
+ protected static final String _17 = "<filter>";
+ protected static final String _18 = "<filteredResources>";
+ protected static final String _19 = "<id>1396938000000</id>";
+ protected static final String _20 = "<id>org.eclipse.ui.ide.multiFilter</id>";
+ protected static final String _21 = "<matcher>";
+ protected static final String _22 = "<name>";
+ protected static final String _23 = "<name></name>";
+ protected static final String _24 = "<name>org.eclipse.pde.FeatureBuilder</name>";
+ protected static final String _25 = "<projectDescription>";
+ protected static final String _26 = "<projects>";
+ protected static final String _27 = "<type>10</type>";
+ protected final String NL_1 = NL + "\t";
+ protected final String NL_2 = NL + "\t\t";
+ protected final String NL_3 = NL + "\t\t\t";
+ protected final String NL_4 = NL + "\t\t\t\t";
+ protected final String _28 = _11 + NL + _25 + NL_1 + _22;
+ protected final String _29 = _1 + NL_1 + _16 + NL_1 + _26 + NL_1 + _10 + NL_1 + _15 + NL_2 + _14 + NL_3 + _24 + NL_3 + _12 + NL_3 + _3 + NL_2 + _4 + NL_1 + _5 + NL_1 + _18 + NL_2 + _17 + NL_3 + _19 + NL_3 + _23 + NL_3 + _27 + NL_3 + _21 + NL_4 + _20 + NL_4 + _13 + NL_3 + _8 + NL_2 + _6 + NL_1 + _7 + NL + _9;
+
+ public String generate(Object argument)
+ {
+ final StringBuilder builder = new StringBuilder();
+ JVM jvm = (JVM)argument;
+ String jvmName = jvm.getName();
+ Model model = jvm.getModel();
+ String modelName = model.getName();
+ builder.append(_28);
+ builder.append(modelName);
+ builder.append(_2);
+ builder.append(jvmName);
+ builder.append(_29);
+ builder.append(NL);
+ return builder.toString();
+ }
+}
diff --git a/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/fragment/AboutMappings.java b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/fragment/AboutMappings.java
new file mode 100644
index 0000000..a9460fd
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/fragment/AboutMappings.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2020 Eclipse contributors and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.eclipse.justj.codegen.templates.fragment;
+
+public class AboutMappings
+{
+ protected static String nl;
+ public static synchronized AboutMappings create(String lineSeparator)
+ {
+ nl = lineSeparator;
+ AboutMappings result = new AboutMappings();
+ nl = null;
+ return result;
+ }
+
+ public final String NL = nl == null ? (System.getProperties().getProperty("line.separator")) : nl;
+ protected static final String _1 = "0=${build.id}";
+ protected static final String _2 = "1=${git.commit}";
+ protected final String _3 = _1 + NL + _2;
+
+ public String generate(Object argument)
+ {
+ final StringBuilder builder = new StringBuilder();
+ builder.append(_3);
+ builder.append(NL);
+ return builder.toString();
+ }
+}
diff --git a/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/fragment/BuildProperties.java b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/fragment/BuildProperties.java
new file mode 100644
index 0000000..e740198
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/fragment/BuildProperties.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2020 Eclipse contributors and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.eclipse.justj.codegen.templates.fragment;
+
+public class BuildProperties
+{
+ protected static String nl;
+ public static synchronized BuildProperties create(String lineSeparator)
+ {
+ nl = lineSeparator;
+ BuildProperties result = new BuildProperties();
+ nl = null;
+ return result;
+ }
+
+ public final String NL = nl == null ? (System.getProperties().getProperty("line.separator")) : nl;
+ protected static final String _1 = "#";
+ protected static final String _2 = "about.html,\\";
+ protected static final String _3 = "about.mappings,\\";
+ protected static final String _4 = "bin.includes = META-INF/,\\";
+ protected static final String _5 = "fragment.properties,\\";
+ protected static final String _6 = "jre/";
+ protected final String NL_1 = NL + " ";
+ protected final String _7 = "";
+ protected final String _8 = NL + _1 + NL + NL + _4 + NL_1 + _2 + NL_1 + _3 + NL_1 + _5 + NL_1 + _6;
+
+ public String generate(Object argument)
+ {
+ final StringBuilder builder = new StringBuilder();
+ builder.append(_7);
+ builder.append(org.eclipse.justj.codegen.model.util.Generator.getCopyright(argument, "# ", NL));
+ builder.append(_8);
+ builder.append(NL);
+ return builder.toString();
+ }
+}
diff --git a/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/fragment/EclipseInf.java b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/fragment/EclipseInf.java
new file mode 100644
index 0000000..cc8255d
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/fragment/EclipseInf.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2020 Eclipse contributors and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.eclipse.justj.codegen.templates.fragment;
+
+public class EclipseInf
+{
+ protected static String nl;
+ public static synchronized EclipseInf create(String lineSeparator)
+ {
+ nl = lineSeparator;
+ EclipseInf result = new EclipseInf();
+ nl = null;
+ return result;
+ }
+
+ public final String NL = nl == null ? (System.getProperties().getProperty("line.separator")) : nl;
+ protected static final String _1 = "jarprocessor.exclude.children.pack = true";
+ protected static final String _2 = "jarprocessor.exclude.pack = true";
+ protected final String _3 = _2 + NL + _1;
+
+ public String generate(Object argument)
+ {
+ final StringBuilder builder = new StringBuilder();
+ builder.append(_3);
+ builder.append(NL);
+ return builder.toString();
+ }
+}
diff --git a/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/fragment/FragmentProperties.java b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/fragment/FragmentProperties.java
new file mode 100644
index 0000000..a6c2233
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/fragment/FragmentProperties.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2020 Eclipse contributors and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.eclipse.justj.codegen.templates.fragment;
+
+import org.eclipse.justj.codegen.model.*;
+
+public class FragmentProperties
+{
+ protected static String nl;
+ public static synchronized FragmentProperties create(String lineSeparator)
+ {
+ nl = lineSeparator;
+ FragmentProperties result = new FragmentProperties();
+ nl = null;
+ return result;
+ }
+
+ public final String NL = nl == null ? (System.getProperties().getProperty("line.separator")) : nl;
+ protected static final String _1 = " ";
+ protected static final String _2 = " for ";
+ protected static final String _3 = "#";
+ protected static final String _4 = "pluginName = ";
+ protected static final String _5 = "providerName = ";
+ protected final String _6 = "";
+ protected final String _7 = NL + _3 + NL + NL + _5;
+ protected final String _8 = NL + _4;
+
+ public String generate(Object argument)
+ {
+ final StringBuilder builder = new StringBuilder();
+ Variant variant = (Variant)argument;
+String variantLabel = variant.getLabel();
+ JVM jvm = variant.getJVM();
+ String jvmLabel = jvm.getLabel();
+ Model model = jvm.getModel();
+ String modelLabel = model.getLabel();
+ String provider = model.getProvider();
+ builder.append(_6);
+ builder.append(org.eclipse.justj.codegen.model.util.Generator.getCopyright(argument, "# ", NL));
+ builder.append(_7);
+ builder.append(provider);
+ builder.append(_8);
+ builder.append(modelLabel);
+ builder.append(_1);
+ builder.append(jvmLabel);
+ builder.append(_2);
+ builder.append(variantLabel);
+ builder.append(NL);
+ return builder.toString();
+ }
+}
diff --git a/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/fragment/GitIgnore.java b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/fragment/GitIgnore.java
new file mode 100644
index 0000000..4139c77
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/fragment/GitIgnore.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2020 Eclipse contributors and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.eclipse.justj.codegen.templates.fragment;
+
+public class GitIgnore
+{
+ protected static String nl;
+ public static synchronized GitIgnore create(String lineSeparator)
+ {
+ nl = lineSeparator;
+ GitIgnore result = new GitIgnore();
+ nl = null;
+ return result;
+ }
+
+ public final String NL = nl == null ? (System.getProperties().getProperty("line.separator")) : nl;
+ protected static final String _1 = "!.gitignore";
+ protected static final String _2 = "*";
+ protected final String _3 = _2 + NL + _1;
+
+ public String generate(Object argument)
+ {
+ final StringBuilder builder = new StringBuilder();
+ builder.append(_3);
+ builder.append(NL);
+ return builder.toString();
+ }
+}
diff --git a/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/fragment/Manifest.java b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/fragment/Manifest.java
new file mode 100644
index 0000000..49a0e89
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/fragment/Manifest.java
@@ -0,0 +1,97 @@
+package org.eclipse.justj.codegen.templates.fragment;
+
+import java.util.Iterator;
+import java.util.Map.Entry;
+import java.util.Set;
+import org.eclipse.justj.codegen.model.*;
+import org.eclipse.justj.codegen.model.util.Generator;
+
+public class Manifest
+{
+ protected static String nl;
+ public static synchronized Manifest create(String lineSeparator)
+ {
+ nl = lineSeparator;
+ Manifest result = new Manifest();
+ nl = null;
+ return result;
+ }
+
+ public final String NL = nl == null ? (System.getProperties().getProperty("line.separator")) : nl;
+ protected static final String _1 = ") (osgi.arch=";
+ protected static final String _2 = "))";
+ protected static final String _3 = ",";
+ protected static final String _4 = ".qualifier";
+ protected static final String _5 = ";bundle-version=\"";
+ protected static final String _6 = ";singleton:=true";
+ protected static final String _7 = "Automatic-Module-Name: ";
+ protected static final String _8 = "Bundle-Localization: fragment";
+ protected static final String _9 = "Bundle-ManifestVersion: 2";
+ protected static final String _10 = "Bundle-Name: %pluginName";
+ protected static final String _11 = "Bundle-SymbolicName: ";
+ protected static final String _12 = "Bundle-Vendor: %providerName";
+ protected static final String _13 = "Bundle-Version: ";
+ protected static final String _14 = "Eclipse-BundleShape: dir";
+ protected static final String _15 = "Eclipse-PlatformFilter: (& (osgi.os=";
+ protected static final String _16 = "Fragment-Host: ";
+ protected static final String _17 = "Manifest-Version: 1.0";
+ protected static final String _18 = "Provide-Capability: ";
+ protected static final String _19 = "\"";
+ protected static final String _20 = "\";version:Version=\"";
+ protected static final String _21 = "osgi.ee;osgi.ee=\"";
+ protected final String NL_1 = NL + " ";
+ protected final String _22 = _17 + NL + _9 + NL + _11;
+ protected final String _23 = _6 + NL + _13;
+ protected final String _24 = _4 + NL + _8 + NL + _10 + NL + _12 + NL + _16;
+ protected final String _25 = _19 + NL + _14 + NL + _15;
+ protected final String _26 = _2 + NL + _7;
+ protected final String _27 = NL + _18;
+ protected final String _28 = NL_1 + _21;
+
+ public String generate(Object argument)
+ {
+ final StringBuilder builder = new StringBuilder();
+ Variant variant = (Variant)argument;
+ String os = variant.getOs();
+ String arch = variant.getArch();
+ JVM jvm = variant.getJVM();
+ String jvmName = jvm.getName();
+ Model model = jvm.getModel();
+ String modelName = model.getName();
+ String hostName = modelName + '.' + jvmName;
+ String fullName = hostName + '.' + os + '.' + arch;
+ String version = jvm.getVersion();
+ builder.append(_22);
+ builder.append(fullName);
+ builder.append(_23);
+ builder.append(version);
+ builder.append(_24);
+ builder.append(hostName);
+ builder.append(_5);
+ builder.append(Generator.getVersionRange(version));
+ builder.append(_25);
+ builder.append(os);
+ builder.append(_1);
+ builder.append(arch);
+ builder.append(_26);
+ builder.append(fullName);
+ builder.append(_27);
+
+ for (Iterator<Entry<String, Set<String>>> it = Generator.getEECapabilities(version).entrySet().iterator(); it.hasNext();) {
+ Entry<String, Set<String>> entry = it.next();
+ for (Iterator<String> it2 = entry.getValue().iterator(); it2.hasNext();) {
+ String eeVersion = it2.next();
+ builder.append(_28);
+ builder.append(entry.getKey());
+ builder.append(_20);
+ builder.append(eeVersion);
+ builder.append(_19);
+ if (it.hasNext() || it2.hasNext()) {
+ builder.append(_3);
+ }
+ }
+ }
+ builder.append(NL);
+ return builder.toString();
+ }
+}
diff --git a/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/fragment/P2Inf.java b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/fragment/P2Inf.java
new file mode 100644
index 0000000..12e4c32
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/fragment/P2Inf.java
@@ -0,0 +1,66 @@
+/*
+ * Copyright (c) 2020 Eclipse contributors and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.eclipse.justj.codegen.templates.fragment;
+
+import java.util.*;
+import java.util.Iterator;
+import org.eclipse.justj.codegen.model.*;
+import org.eclipse.justj.codegen.model.util.Generator;
+
+public class P2Inf
+{
+ protected static String nl;
+ public static synchronized P2Inf create(String lineSeparator)
+ {
+ nl = lineSeparator;
+ P2Inf result = new P2Inf();
+ nl = null;
+ return result;
+ }
+
+ public final String NL = nl == null ? (System.getProperties().getProperty("line.separator")) : nl;
+ protected static final String _1 = " = \\";
+ protected static final String _2 = "#";
+ protected static final String _3 = ";";
+ protected static final String _4 = "\\";
+ protected static final String _5 = "instructions.";
+ protected final String NL_1 = NL + " ";
+ protected final String _6 = "";
+ protected final String _7 = NL + _2 + NL;
+ protected final String _8 = NL + _5;
+
+ public String generate(Object argument)
+ {
+ final StringBuilder builder = new StringBuilder();
+ Variant variant = (Variant)argument;
+ builder.append(_6);
+ builder.append(org.eclipse.justj.codegen.model.util.Generator.getCopyright(argument, "# ", NL));
+ builder.append(_7);
+ Map<String, Set<String>> touchpoints = Generator.getTouchpoints(variant);
+ for (Map.Entry<String, Set<String>> entry : touchpoints.entrySet()) {
+ String phase = entry.getKey();
+ builder.append(_8);
+ builder.append(phase);
+ builder.append(_1);
+ for (Iterator<String> it = entry.getValue().iterator(); it.hasNext();) {
+ String instruction = it.next();
+ builder.append(NL_1);
+ builder.append(instruction);
+ builder.append(_3);
+ if (it.hasNext()) {
+ builder.append(_4);
+ }
+ }
+ builder.append(NL);
+ }
+ return builder.toString();
+ }
+}
diff --git a/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/fragment/PDEPrefs.java b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/fragment/PDEPrefs.java
new file mode 100644
index 0000000..10a69a4
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/fragment/PDEPrefs.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2020 Eclipse contributors and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.eclipse.justj.codegen.templates.fragment;
+
+public class PDEPrefs
+{
+ protected static String nl;
+ public static synchronized PDEPrefs create(String lineSeparator)
+ {
+ nl = lineSeparator;
+ PDEPrefs result = new PDEPrefs();
+ nl = null;
+ return result;
+ }
+
+ public final String NL = nl == null ? (System.getProperties().getProperty("line.separator")) : nl;
+ protected static final String _1 = "compilers.incompatible-environment=2";
+ protected static final String _2 = "eclipse.preferences.version=1";
+ protected final String _3 = _2 + NL + _1;
+
+ public String generate(Object argument)
+ {
+ final StringBuilder builder = new StringBuilder();
+ builder.append(_3);
+ builder.append(NL);
+ return builder.toString();
+ }
+}
diff --git a/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/fragment/POMXML.java b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/fragment/POMXML.java
new file mode 100644
index 0000000..a01b5bc
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/fragment/POMXML.java
@@ -0,0 +1,132 @@
+/*
+ * Copyright (c) 2020 Eclipse contributors and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.eclipse.justj.codegen.templates.fragment;
+
+import org.eclipse.justj.codegen.model.*;
+
+public class POMXML
+{
+ protected static String nl;
+ public static synchronized POMXML create(String lineSeparator)
+ {
+ nl = lineSeparator;
+ POMXML result = new POMXML();
+ nl = null;
+ return result;
+ }
+
+ public final String NL = nl == null ? (System.getProperties().getProperty("line.separator")) : nl;
+ protected static final String _1 = "-->";
+ protected static final String _2 = "-SNAPSHOT</version>";
+ protected static final String _3 = ".parent/plugins</relativePath>";
+ protected static final String _4 = ".plugins</artifactId>";
+ protected static final String _5 = "<!--";
+ protected static final String _6 = "</arch>";
+ protected static final String _7 = "</artifactId>";
+ protected static final String _8 = "</build>";
+ protected static final String _9 = "</configuration>";
+ protected static final String _10 = "</environment>";
+ protected static final String _11 = "</environments>";
+ protected static final String _12 = "</groupId>";
+ protected static final String _13 = "</includes>";
+ protected static final String _14 = "</os>";
+ protected static final String _15 = "</parent>";
+ protected static final String _16 = "</plugin>";
+ protected static final String _17 = "</plugins>";
+ protected static final String _18 = "</project>";
+ protected static final String _19 = "</resource>";
+ protected static final String _20 = "</resources>";
+ protected static final String _21 = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
+ protected static final String _22 = "<arch>";
+ protected static final String _23 = "<artifactId>";
+ protected static final String _24 = "<artifactId>target-platform-configuration</artifactId>";
+ protected static final String _25 = "<build>";
+ protected static final String _26 = "<configuration>";
+ protected static final String _27 = "<directory>.</directory>";
+ protected static final String _28 = "<environment>";
+ protected static final String _29 = "<environments>";
+ protected static final String _30 = "<filtering>true</filtering>";
+ protected static final String _31 = "<groupId>";
+ protected static final String _32 = "<groupId>org.eclipse.tycho</groupId>";
+ protected static final String _33 = "<include>about.mappings</include>";
+ protected static final String _34 = "<includes>";
+ protected static final String _35 = "<modelVersion>4.0.0</modelVersion>";
+ protected static final String _36 = "<os>";
+ protected static final String _37 = "<packaging>eclipse-plugin</packaging>";
+ protected static final String _38 = "<parent>";
+ protected static final String _39 = "<plugin>";
+ protected static final String _40 = "<plugins>";
+ protected static final String _41 = "<project";
+ protected static final String _42 = "<relativePath>../../releng/";
+ protected static final String _43 = "<resolver>p2</resolver>";
+ protected static final String _44 = "<resource>";
+ protected static final String _45 = "<resources>";
+ protected static final String _46 = "<version>";
+ protected static final String _47 = "<version>${tycho-version}</version>";
+ protected static final String _48 = "<version>1.0.0-SNAPSHOT</version>";
+ protected static final String _49 = "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"";
+ protected static final String _50 = "xmlns=\"http://maven.apache.org/POM/4.0.0\"";
+ protected static final String _51 = "xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\">";
+ protected final String NL_1 = NL + " ";
+ protected final String NL_2 = NL + " ";
+ protected final String NL_3 = NL + " ";
+ protected final String NL_4 = NL + " ";
+ protected final String NL_5 = NL + " ";
+ protected final String NL_6 = NL + " ";
+ protected final String NL_7 = NL + " ";
+ protected final String _52 = NL + _1 + NL + _41 + NL_2 + _50 + NL_2 + _49 + NL_2 + _51 + NL_1 + _35 + NL + NL_1 + _38 + NL_2 + _31;
+ protected final String _53 = _12 + NL_2 + _23;
+ protected final String _54 = _4 + NL_2 + _48 + NL_2 + _42;
+ protected final String _55 = _3 + NL_1 + _15 + NL + NL_1 + _31;
+ protected final String _56 = _12 + NL_1 + _23;
+ protected final String _57 = _7 + NL_1 + _46;
+ protected final String _58 = _2 + NL_1 + _37 + NL + NL_1 + _25 + NL_2 + _45 + NL_3 + _44 + NL_4 + _27 + NL_4 + _30 + NL_4 + _34 + NL_5 + _33 + NL_4 + _13 + NL_3 + _19 + NL_2 + _20 + NL_2 + _40 + NL_3 + _39 + NL_4 + _32 + NL_4 + _24 + NL_4 + _47 + NL_4 + _26 + NL_5 + _43 + NL_5 + _29 + NL_6 + _28 + NL_7 + _36;
+ protected final String _59 = _14 + NL_7 + _22;
+ protected final String _60 = _6 + NL_6 + _10 + NL_5 + _11 + NL_4 + _9 + NL_3 + _16 + NL_2 + _17 + NL_1 + _8 + NL + NL + _18;
+
+ public String generate(Object argument)
+ {
+ final StringBuilder builder = new StringBuilder();
+ Variant variant = (Variant)argument;
+ String os = variant.getOs();
+ String arch = variant.getArch();
+ JVM jvm = variant.getJVM();
+ String jvmName = jvm.getName();
+ Model model = jvm.getModel();
+ String modelName = model.getName();
+ String fullName = modelName + '.' + jvmName + '.' + os + '.' + arch;
+ String version = jvm.getVersion();
+ builder.append(_21);
+ builder.append(NL);
+ builder.append(_5);
+ builder.append(NL);
+ builder.append(org.eclipse.justj.codegen.model.util.Generator.getCopyright(argument, "", NL));
+ builder.append(_52);
+ builder.append(modelName);
+ builder.append(_53);
+ builder.append(modelName);
+ builder.append(_54);
+ builder.append(modelName);
+ builder.append(_55);
+ builder.append(modelName);
+ builder.append(_56);
+ builder.append(fullName);
+ builder.append(_57);
+ builder.append(version);
+ builder.append(_58);
+ builder.append(os);
+ builder.append(_59);
+ builder.append(arch);
+ builder.append(_60);
+ builder.append(NL);
+ return builder.toString();
+ }
+}
diff --git a/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/fragment/ProjectXML.java b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/fragment/ProjectXML.java
new file mode 100644
index 0000000..a951cda
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/fragment/ProjectXML.java
@@ -0,0 +1,86 @@
+/*
+ * Copyright (c) 2020 Eclipse contributors and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.eclipse.justj.codegen.templates.fragment;
+
+import org.eclipse.justj.codegen.model.*;
+
+public class ProjectXML
+{
+ protected static String nl;
+ public static synchronized ProjectXML create(String lineSeparator)
+ {
+ nl = lineSeparator;
+ ProjectXML result = new ProjectXML();
+ nl = null;
+ return result;
+ }
+
+ public final String NL = nl == null ? (System.getProperties().getProperty("line.separator")) : nl;
+ protected static final String _1 = ".";
+ protected static final String _2 = "</arguments>";
+ protected static final String _3 = "</buildCommand>";
+ protected static final String _4 = "</buildSpec>";
+ protected static final String _5 = "</filter>";
+ protected static final String _6 = "</filteredResources>";
+ protected static final String _7 = "</matcher>";
+ protected static final String _8 = "</name>";
+ protected static final String _9 = "</natures>";
+ protected static final String _10 = "</projectDescription>";
+ protected static final String _11 = "</projects>";
+ protected static final String _12 = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
+ protected static final String _13 = "<arguments>";
+ protected static final String _14 = "<arguments>1.0-projectRelativePath-matches-true-false-target</arguments>";
+ protected static final String _15 = "<buildCommand>";
+ protected static final String _16 = "<buildSpec>";
+ protected static final String _17 = "<comment></comment>";
+ protected static final String _18 = "<filter>";
+ protected static final String _19 = "<filteredResources>";
+ protected static final String _20 = "<id>1396938000000</id>";
+ protected static final String _21 = "<id>org.eclipse.ui.ide.multiFilter</id>";
+ protected static final String _22 = "<matcher>";
+ protected static final String _23 = "<name>";
+ protected static final String _24 = "<name></name>";
+ protected static final String _25 = "<name>org.eclipse.pde.ManifestBuilder</name>";
+ protected static final String _26 = "<nature>org.eclipse.pde.PluginNature</nature>";
+ protected static final String _27 = "<natures>";
+ protected static final String _28 = "<projectDescription>";
+ protected static final String _29 = "<projects>";
+ protected static final String _30 = "<type>10</type>";
+ protected final String NL_1 = NL + "\t";
+ protected final String NL_2 = NL + "\t\t";
+ protected final String NL_3 = NL + "\t\t\t";
+ protected final String NL_4 = NL + "\t\t\t\t";
+ protected final String _31 = _12 + NL + _28 + NL_1 + _23;
+ protected final String _32 = _8 + NL_1 + _17 + NL_1 + _29 + NL_1 + _11 + NL_1 + _16 + NL_2 + _15 + NL_3 + _25 + NL_3 + _13 + NL_3 + _2 + NL_2 + _3 + NL_1 + _4 + NL_1 + _27 + NL_2 + _26 + NL_1 + _9 + NL_1 + _19 + NL_2 + _18 + NL_3 + _20 + NL_3 + _24 + NL_3 + _30 + NL_3 + _22 + NL_4 + _21 + NL_4 + _14 + NL_3 + _7 + NL_2 + _5 + NL_1 + _6 + NL + _10;
+
+ public String generate(Object argument)
+ {
+ final StringBuilder builder = new StringBuilder();
+ Variant variant = (Variant)argument;
+ String os = variant.getOs();
+ String arch = variant.getArch();
+ JVM jvm = variant.getJVM();
+ String jvmName = jvm.getName();
+ Model model = jvm.getModel();
+ String modelName = model.getName();
+ builder.append(_31);
+ builder.append(modelName);
+ builder.append(_1);
+ builder.append(jvmName);
+ builder.append(_1);
+ builder.append(os);
+ builder.append(_1);
+ builder.append(arch);
+ builder.append(_32);
+ builder.append(NL);
+ return builder.toString();
+ }
+}
diff --git a/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/plugin/AboutIni.java b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/plugin/AboutIni.java
new file mode 100644
index 0000000..b9eaeb2
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/plugin/AboutIni.java
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2020 Eclipse contributors and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.eclipse.justj.codegen.templates.plugin;
+
+import org.eclipse.justj.codegen.model.*;
+
+public class AboutIni
+{
+ protected static String nl;
+ public static synchronized AboutIni create(String lineSeparator)
+ {
+ nl = lineSeparator;
+ AboutIni result = new AboutIni();
+ nl = null;
+ return result;
+ }
+
+ public final String NL = nl == null ? (System.getProperties().getProperty("line.separator")) : nl;
+ protected static final String _1 = "#";
+ protected static final String _2 = "# Property \"aboutText\" contains blurb for \"About\" dialog (translated)";
+ protected static final String _3 = "# Property \"appName\" contains name of the application (translated)";
+ protected static final String _4 = "# Property \"featureImage\" contains path to feature image (32x32)";
+ protected static final String _5 = "aboutText=%featureText";
+ protected static final String _6 = "appName=%featureName";
+ protected static final String _7 = "featureImage=";
+ protected final String _8 = "";
+ protected final String _9 = NL + _1 + NL + NL + _2 + NL + _5 + NL + NL + _4 + NL + _7;
+ protected final String _10 = NL + NL + _3 + NL + _6;
+
+ public String generate(Object argument)
+ {
+ final StringBuilder builder = new StringBuilder();
+ JVM jvm = (JVM)argument;
+ Model model = jvm.getModel();
+ String providerImageName = model.getProviderImageName();
+ builder.append(_8);
+ builder.append(org.eclipse.justj.codegen.model.util.Generator.getCopyright(argument, "# ", NL));
+ builder.append(_9);
+ builder.append(providerImageName);
+ builder.append(_10);
+ builder.append(NL);
+ return builder.toString();
+ }
+}
diff --git a/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/plugin/AboutMappings.java b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/plugin/AboutMappings.java
new file mode 100644
index 0000000..3de0582
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/plugin/AboutMappings.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2020 Eclipse contributors and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.eclipse.justj.codegen.templates.plugin;
+
+public class AboutMappings
+{
+ protected static String nl;
+ public static synchronized AboutMappings create(String lineSeparator)
+ {
+ nl = lineSeparator;
+ AboutMappings result = new AboutMappings();
+ nl = null;
+ return result;
+ }
+
+ public final String NL = nl == null ? (System.getProperties().getProperty("line.separator")) : nl;
+ protected static final String _1 = "0=${build.id}";
+ protected static final String _2 = "1=${git.commit}";
+ protected final String _3 = _1 + NL + _2;
+
+ public String generate(Object argument)
+ {
+ final StringBuilder builder = new StringBuilder();
+ builder.append(_3);
+ builder.append(NL);
+ return builder.toString();
+ }
+}
diff --git a/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/plugin/AboutProperties.java b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/plugin/AboutProperties.java
new file mode 100644
index 0000000..a949e32
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/plugin/AboutProperties.java
@@ -0,0 +1,85 @@
+/*
+ * Copyright (c) 2020 Eclipse contributors and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.eclipse.justj.codegen.templates.plugin;
+
+import org.eclipse.justj.codegen.model.*;
+import org.eclipse.justj.codegen.model.util.Generator;
+
+public class AboutProperties
+{
+ protected static String nl;
+ public static synchronized AboutProperties create(String lineSeparator)
+ {
+ nl = lineSeparator;
+ AboutProperties result = new AboutProperties();
+ nl = null;
+ return result;
+ }
+
+ public final String NL = nl == null ? (System.getProperties().getProperty("line.separator")) : nl;
+ protected static final String _1 = " ";
+ protected static final String _2 = "#";
+ protected static final String _3 = "Build: {0}\\n\\";
+ protected static final String _4 = "Commit: {1}\\n\\";
+ protected static final String _5 = "Version: {featureVersion}\\n\\";
+ protected static final String _6 = "\\n";
+ protected static final String _7 = "\\n\\";
+ protected static final String _8 = "copyright = ";
+ protected static final String _9 = "description = Contains the plug-ins and fragments for the ";
+ protected static final String _10 = "featureName = ";
+ protected static final String _11 = "featureText = ";
+ protected static final String _12 = "providerName = Eclipse ";
+ protected final String _13 = "";
+ protected final String _14 = NL + _2 + NL + NL + _12;
+ protected final String _15 = NL + _10;
+ protected final String _16 = NL + _9;
+ protected final String _17 = NL + _8;
+ protected final String _18 = _6 + NL + _10;
+ protected final String _19 = NL + _11;
+ protected final String _20 = _7 + NL + _7 + NL + _5 + NL + _4 + NL + _3 + NL + _7;
+
+ public String generate(Object argument)
+ {
+ final StringBuilder builder = new StringBuilder();
+ JVM jvm = (JVM)argument;
+ String jvmLabel = jvm.getLabel();
+ String aboutTextExtra = jvm.getAboutTextExtra();
+ Model model = jvm.getModel();
+ String modelLabel = model.getLabel();
+ builder.append(_13);
+ builder.append(org.eclipse.justj.codegen.model.util.Generator.getCopyright(argument, "# ", NL));
+ builder.append(_14);
+ builder.append(modelLabel);
+ builder.append(_15);
+ builder.append(modelLabel);
+ builder.append(_1);
+ builder.append(jvmLabel);
+ builder.append(_16);
+ builder.append(jvmLabel);
+ builder.append(_17);
+ builder.append(Generator.getCopyright(argument, "", "\\n\\" + NL));
+ builder.append(_18);
+ builder.append(modelLabel);
+ builder.append(_1);
+ builder.append(jvmLabel);
+ builder.append(_19);
+ builder.append(modelLabel);
+ builder.append(_1);
+ builder.append(jvmLabel);
+ builder.append(_20);
+ builder.append(NL);
+ builder.append(Generator.getCopyright(argument, "", "\\n\\" + NL));
+ builder.append(_7);
+ builder.append(NL);
+ builder.append(Generator.composeLines(aboutTextExtra, "", "\\n\\" + NL));
+ return builder.toString();
+ }
+}
diff --git a/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/plugin/BuildProperties.java b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/plugin/BuildProperties.java
new file mode 100644
index 0000000..7d7f5f9
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/plugin/BuildProperties.java
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2020 Eclipse contributors and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.eclipse.justj.codegen.templates.plugin;
+
+import org.eclipse.justj.codegen.model.*;
+
+public class BuildProperties
+{
+ protected static String nl;
+ public static synchronized BuildProperties create(String lineSeparator)
+ {
+ nl = lineSeparator;
+ BuildProperties result = new BuildProperties();
+ nl = null;
+ return result;
+ }
+
+ public final String NL = nl == null ? (System.getProperties().getProperty("line.separator")) : nl;
+ protected static final String _1 = "#";
+ protected static final String _2 = "about.html,\\";
+ protected static final String _3 = "about.ini,\\";
+ protected static final String _4 = "about.mappings,\\";
+ protected static final String _5 = "about.properties,\\";
+ protected static final String _6 = "bin.includes = META-INF/,\\";
+ protected static final String _7 = "plugin.properties,\\";
+ protected final String NL_1 = NL + " ";
+ protected final String _8 = "";
+ protected final String _9 = NL + _1 + NL + NL + _6 + NL_1 + _2 + NL_1 + _7 + NL_1 + _3 + NL_1 + _4 + NL_1 + _5;
+
+ public String generate(Object argument)
+ {
+ final StringBuilder builder = new StringBuilder();
+ JVM jvm = (JVM)argument;
+ Model model = jvm.getModel();
+ String providerImageName = model.getProviderImageName();
+ builder.append(_8);
+ builder.append(org.eclipse.justj.codegen.model.util.Generator.getCopyright(argument, "# ", NL));
+ builder.append(_9);
+ builder.append(NL_1);
+ builder.append(providerImageName);
+ builder.append(NL);
+ return builder.toString();
+ }
+}
diff --git a/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/plugin/Manifest.java b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/plugin/Manifest.java
new file mode 100644
index 0000000..45d9c9a
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/plugin/Manifest.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright (c) 2020 Eclipse contributors and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.eclipse.justj.codegen.templates.plugin;
+
+import org.eclipse.justj.codegen.model.*;
+
+public class Manifest
+{
+ protected static String nl;
+ public static synchronized Manifest create(String lineSeparator)
+ {
+ nl = lineSeparator;
+ Manifest result = new Manifest();
+ nl = null;
+ return result;
+ }
+
+ public final String NL = nl == null ? (System.getProperties().getProperty("line.separator")) : nl;
+ protected static final String _1 = ".qualifier";
+ protected static final String _2 = ";singleton:=true";
+ protected static final String _3 = "Automatic-Module-Name: ";
+ protected static final String _4 = "Bundle-ClassPath: .";
+ protected static final String _5 = "Bundle-Localization: plugin";
+ protected static final String _6 = "Bundle-ManifestVersion: 2";
+ protected static final String _7 = "Bundle-Name: %pluginName";
+ protected static final String _8 = "Bundle-SymbolicName: ";
+ protected static final String _9 = "Bundle-Vendor: %providerName";
+ protected static final String _10 = "Bundle-Version: ";
+ protected static final String _11 = "Manifest-Version: 1.0";
+ protected final String _12 = _11 + NL + _6 + NL + _8;
+ protected final String _13 = _2 + NL + _10;
+ protected final String _14 = _1 + NL + _4 + NL + _7 + NL + _9 + NL + _5 + NL + _3;
+
+ public String generate(Object argument)
+ {
+ final StringBuilder builder = new StringBuilder();
+ JVM jvm = (JVM)argument;
+ String jvmName = jvm.getName();
+ Model model = jvm.getModel();
+ String modelName = model.getName();
+ String fullName = modelName + '.' + jvmName;
+ String version = jvm.getVersion();
+ builder.append(_12);
+ builder.append(fullName);
+ builder.append(_13);
+ builder.append(version);
+ builder.append(_14);
+ builder.append(fullName);
+ builder.append(NL);
+ return builder.toString();
+ }
+}
diff --git a/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/plugin/P2Inf.java b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/plugin/P2Inf.java
new file mode 100644
index 0000000..cb48be2
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/plugin/P2Inf.java
@@ -0,0 +1,86 @@
+/*
+ * Copyright (c) 2020 Eclipse contributors and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.eclipse.justj.codegen.templates.plugin;
+
+import org.eclipse.justj.codegen.model.*;
+
+public class P2Inf
+{
+ protected static String nl;
+ public static synchronized P2Inf create(String lineSeparator)
+ {
+ nl = lineSeparator;
+ P2Inf result = new P2Inf();
+ nl = null;
+ return result;
+ }
+
+ public final String NL = nl == null ? (System.getProperties().getProperty("line.separator")) : nl;
+ protected static final String _1 = "#";
+ protected static final String _2 = "# Ensure that the applicable implementation fragment gets installed automatically.";
+ protected static final String _3 = ")(!(";
+ protected static final String _4 = ")(osgi.arch=";
+ protected static final String _5 = ".";
+ protected static final String _6 = ".buildtime=true)))";
+ protected static final String _7 = ".filter = (&(osgi.os=";
+ protected static final String _8 = ".name = ";
+ protected static final String _9 = ".namespace = org.eclipse.equinox.p2.iu";
+ protected static final String _10 = ".range = [$version$,$version$]";
+ protected static final String _11 = "requires.";
+ protected final String _12 = "";
+ protected final String _13 = NL + _1 + NL + _2 + NL;
+ protected final String _14 = NL + NL + _11;
+ protected final String _15 = _9 + NL + _11;
+ protected final String _16 = NL + _11;
+ protected final String _17 = _10 + NL + _11;
+
+ public String generate(Object argument)
+ {
+ final StringBuilder builder = new StringBuilder();
+ JVM jvm = (JVM)argument;
+ String jvmName = jvm.getName();
+ Model model = jvm.getModel();
+ String modelName = model.getName();
+ String fullName = modelName + '.' + jvmName;
+ builder.append(_12);
+ builder.append(org.eclipse.justj.codegen.model.util.Generator.getCopyright(argument, "# ", NL));
+ builder.append(_13);
+ int count = 0;
+ for (Variant variant : jvm.getVariants()) {
+ ++count;
+ String os = variant.getOs();
+ String arch = variant.getArch();
+ builder.append(_14);
+ builder.append(count);
+ builder.append(_15);
+ builder.append(count);
+ builder.append(_8);
+ builder.append(fullName);
+ builder.append(_5);
+ builder.append(os);
+ builder.append(_5);
+ builder.append(arch);
+ builder.append(_16);
+ builder.append(count);
+ builder.append(_17);
+ builder.append(count);
+ builder.append(_7);
+ builder.append(os);
+ builder.append(_4);
+ builder.append(arch);
+ builder.append(_3);
+ builder.append(modelName);
+ builder.append(_6);
+ }
+ builder.append(NL);
+ return builder.toString();
+ }
+}
diff --git a/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/plugin/POMXML.java b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/plugin/POMXML.java
new file mode 100644
index 0000000..c2f9477
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/plugin/POMXML.java
@@ -0,0 +1,103 @@
+/*
+ * Copyright (c) 2020 Eclipse contributors and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.eclipse.justj.codegen.templates.plugin;
+
+import org.eclipse.justj.codegen.model.*;
+
+public class POMXML
+{
+ protected static String nl;
+ public static synchronized POMXML create(String lineSeparator)
+ {
+ nl = lineSeparator;
+ POMXML result = new POMXML();
+ nl = null;
+ return result;
+ }
+
+ public final String NL = nl == null ? (System.getProperties().getProperty("line.separator")) : nl;
+ protected static final String _1 = "-->";
+ protected static final String _2 = "-SNAPSHOT</version>";
+ protected static final String _3 = ".parent/plugins</relativePath>";
+ protected static final String _4 = ".plugins</artifactId>";
+ protected static final String _5 = "<!--";
+ protected static final String _6 = "</artifactId>";
+ protected static final String _7 = "</build>";
+ protected static final String _8 = "</groupId>";
+ protected static final String _9 = "</includes>";
+ protected static final String _10 = "</parent>";
+ protected static final String _11 = "</project>";
+ protected static final String _12 = "</resource>";
+ protected static final String _13 = "</resources>";
+ protected static final String _14 = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
+ protected static final String _15 = "<artifactId>";
+ protected static final String _16 = "<build>";
+ protected static final String _17 = "<directory>.</directory>";
+ protected static final String _18 = "<filtering>true</filtering>";
+ protected static final String _19 = "<groupId>";
+ protected static final String _20 = "<include>about.mappings</include>";
+ protected static final String _21 = "<includes>";
+ protected static final String _22 = "<modelVersion>4.0.0</modelVersion>";
+ protected static final String _23 = "<packaging>eclipse-plugin</packaging>";
+ protected static final String _24 = "<parent>";
+ protected static final String _25 = "<project";
+ protected static final String _26 = "<relativePath>../../releng/";
+ protected static final String _27 = "<resource>";
+ protected static final String _28 = "<resources>";
+ protected static final String _29 = "<version>";
+ protected static final String _30 = "<version>1.0.0-SNAPSHOT</version>";
+ protected static final String _31 = "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"";
+ protected static final String _32 = "xmlns=\"http://maven.apache.org/POM/4.0.0\"";
+ protected static final String _33 = "xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\">";
+ protected final String NL_1 = NL + " ";
+ protected final String NL_2 = NL + " ";
+ protected final String NL_3 = NL + " ";
+ protected final String NL_4 = NL + " ";
+ protected final String NL_5 = NL + " ";
+ protected final String _34 = NL + _1 + NL + _25 + NL_2 + _32 + NL_2 + _31 + NL_2 + _33 + NL_1 + _22 + NL + NL_1 + _24 + NL_2 + _19;
+ protected final String _35 = _8 + NL_2 + _15;
+ protected final String _36 = _4 + NL_2 + _30 + NL_2 + _26;
+ protected final String _37 = _3 + NL_1 + _10 + NL + NL_1 + _19;
+ protected final String _38 = _8 + NL_1 + _15;
+ protected final String _39 = _6 + NL_1 + _29;
+ protected final String _40 = _2 + NL_1 + _23 + NL + NL_1 + _16 + NL_2 + _28 + NL_3 + _27 + NL_4 + _17 + NL_4 + _18 + NL_4 + _21 + NL_5 + _20 + NL_4 + _9 + NL_3 + _12 + NL_2 + _13 + NL_1 + _7 + NL + NL + _11;
+
+ public String generate(Object argument)
+ {
+ final StringBuilder builder = new StringBuilder();
+ JVM jvm = (JVM)argument;
+ String jvmName = jvm.getName();
+ Model model = jvm.getModel();
+ String modelName = model.getName();
+ String fullName = modelName + '.' + jvmName;
+ String version = jvm.getVersion();
+ builder.append(_14);
+ builder.append(NL);
+ builder.append(_5);
+ builder.append(NL);
+ builder.append(org.eclipse.justj.codegen.model.util.Generator.getCopyright(argument, "", NL));
+ builder.append(_34);
+ builder.append(modelName);
+ builder.append(_35);
+ builder.append(modelName);
+ builder.append(_36);
+ builder.append(modelName);
+ builder.append(_37);
+ builder.append(modelName);
+ builder.append(_38);
+ builder.append(fullName);
+ builder.append(_39);
+ builder.append(version);
+ builder.append(_40);
+ builder.append(NL);
+ return builder.toString();
+ }
+}
diff --git a/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/plugin/PluginProperties.java b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/plugin/PluginProperties.java
new file mode 100644
index 0000000..5c018e3
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/plugin/PluginProperties.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright (c) 2020 Eclipse contributors and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.eclipse.justj.codegen.templates.plugin;
+
+import org.eclipse.justj.codegen.model.*;
+
+public class PluginProperties
+{
+ protected static String nl;
+ public static synchronized PluginProperties create(String lineSeparator)
+ {
+ nl = lineSeparator;
+ PluginProperties result = new PluginProperties();
+ nl = null;
+ return result;
+ }
+
+ public final String NL = nl == null ? (System.getProperties().getProperty("line.separator")) : nl;
+ protected static final String _1 = " ";
+ protected static final String _2 = "#";
+ protected static final String _3 = "pluginName = ";
+ protected static final String _4 = "providerName = ";
+ protected final String _5 = "";
+ protected final String _6 = NL + _2 + NL + NL + _4;
+ protected final String _7 = NL + _3;
+
+ public String generate(Object argument)
+ {
+ final StringBuilder builder = new StringBuilder();
+ JVM jvm = (JVM)argument;
+ String jvmLabel = jvm.getLabel();
+ Model model = jvm.getModel();
+ String modelLabel = model.getLabel();
+ String provider = model.getProvider();
+ builder.append(_5);
+ builder.append(org.eclipse.justj.codegen.model.util.Generator.getCopyright(argument, "# ", NL));
+ builder.append(_6);
+ builder.append(provider);
+ builder.append(_7);
+ builder.append(modelLabel);
+ builder.append(_1);
+ builder.append(jvmLabel);
+ builder.append(NL);
+ return builder.toString();
+ }
+}
diff --git a/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/plugin/ProjectXML.java b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/plugin/ProjectXML.java
new file mode 100644
index 0000000..ef8d20e
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/plugin/ProjectXML.java
@@ -0,0 +1,79 @@
+/*
+ * Copyright (c) 2020 Eclipse contributors and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.eclipse.justj.codegen.templates.plugin;
+
+import org.eclipse.justj.codegen.model.*;
+
+public class ProjectXML
+{
+ protected static String nl;
+ public static synchronized ProjectXML create(String lineSeparator)
+ {
+ nl = lineSeparator;
+ ProjectXML result = new ProjectXML();
+ nl = null;
+ return result;
+ }
+
+ public final String NL = nl == null ? (System.getProperties().getProperty("line.separator")) : nl;
+ protected static final String _1 = ".";
+ protected static final String _2 = "</arguments>";
+ protected static final String _3 = "</buildCommand>";
+ protected static final String _4 = "</buildSpec>";
+ protected static final String _5 = "</filter>";
+ protected static final String _6 = "</filteredResources>";
+ protected static final String _7 = "</matcher>";
+ protected static final String _8 = "</name>";
+ protected static final String _9 = "</natures>";
+ protected static final String _10 = "</projectDescription>";
+ protected static final String _11 = "</projects>";
+ protected static final String _12 = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
+ protected static final String _13 = "<arguments>";
+ protected static final String _14 = "<arguments>1.0-projectRelativePath-matches-true-false-target</arguments>";
+ protected static final String _15 = "<buildCommand>";
+ protected static final String _16 = "<buildSpec>";
+ protected static final String _17 = "<comment></comment>";
+ protected static final String _18 = "<filter>";
+ protected static final String _19 = "<filteredResources>";
+ protected static final String _20 = "<id>1396938000000</id>";
+ protected static final String _21 = "<id>org.eclipse.ui.ide.multiFilter</id>";
+ protected static final String _22 = "<matcher>";
+ protected static final String _23 = "<name>";
+ protected static final String _24 = "<name></name>";
+ protected static final String _25 = "<name>org.eclipse.pde.ManifestBuilder</name>";
+ protected static final String _26 = "<nature>org.eclipse.pde.PluginNature</nature>";
+ protected static final String _27 = "<natures>";
+ protected static final String _28 = "<projectDescription>";
+ protected static final String _29 = "<projects>";
+ protected static final String _30 = "<type>10</type>";
+ protected final String NL_1 = NL + "\t";
+ protected final String NL_2 = NL + "\t\t";
+ protected final String NL_3 = NL + "\t\t\t";
+ protected final String NL_4 = NL + "\t\t\t\t";
+ protected final String _31 = _12 + NL + _28 + NL_1 + _23;
+ protected final String _32 = _8 + NL_1 + _17 + NL_1 + _29 + NL_1 + _11 + NL_1 + _16 + NL_2 + _15 + NL_3 + _25 + NL_3 + _13 + NL_3 + _2 + NL_2 + _3 + NL_1 + _4 + NL_1 + _27 + NL_2 + _26 + NL_1 + _9 + NL_1 + _19 + NL_2 + _18 + NL_3 + _20 + NL_3 + _24 + NL_3 + _30 + NL_3 + _22 + NL_4 + _21 + NL_4 + _14 + NL_3 + _7 + NL_2 + _5 + NL_1 + _6 + NL + _10;
+
+ public String generate(Object argument)
+ {
+ final StringBuilder builder = new StringBuilder();
+ JVM jvm = (JVM)argument;
+ String jvmName = jvm.getName();
+ Model model = jvm.getModel();
+ String modelName = model.getName();
+ builder.append(_31);
+ builder.append(modelName);
+ builder.append(_1);
+ builder.append(jvmName);
+ builder.append(_32);
+ builder.append(NL);
+ return builder.toString();
+ }
+}
diff --git a/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/releng/parent/POMXML.java b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/releng/parent/POMXML.java
new file mode 100644
index 0000000..f5c7706
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/releng/parent/POMXML.java
@@ -0,0 +1,198 @@
+/*
+ * Copyright (c) 2020 Eclipse contributors and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.eclipse.justj.codegen.templates.releng.parent;
+
+import org.eclipse.justj.codegen.model.*;
+
+public class POMXML
+{
+ protected static String nl;
+ public static synchronized POMXML create(String lineSeparator)
+ {
+ nl = lineSeparator;
+ POMXML result = new POMXML();
+ nl = null;
+ return result;
+ }
+
+ public final String NL = nl == null ? (System.getProperties().getProperty("line.separator")) : nl;
+ protected static final String _1 = "-->";
+ protected static final String _2 = ".buildtime>";
+ protected static final String _3 = ".buildtime>true</";
+ protected static final String _4 = ".parent</artifactId>";
+ protected static final String _5 = ".site</module>";
+ protected static final String _6 = "<";
+ protected static final String _7 = "<!--";
+ protected static final String _8 = "<!--executionEnvironmentDefault>JavaSE-${javaVersion}</executionEnvironmentDefault-->";
+ protected static final String _9 = "</activation>";
+ protected static final String _10 = "</additionalFileSets>";
+ protected static final String _11 = "</build>";
+ protected static final String _12 = "</configuration>";
+ protected static final String _13 = "</dependencies>";
+ protected static final String _14 = "</dependency-resolution>";
+ protected static final String _15 = "</dependency>";
+ protected static final String _16 = "</environment>";
+ protected static final String _17 = "</environments>";
+ protected static final String _18 = "</extraRequirements>";
+ protected static final String _19 = "</fileSet>";
+ protected static final String _20 = "</groupId>";
+ protected static final String _21 = "</includes>";
+ protected static final String _22 = "</modules>";
+ protected static final String _23 = "</plugin>";
+ protected static final String _24 = "</pluginManagement>";
+ protected static final String _25 = "</pluginRepositories>";
+ protected static final String _26 = "</pluginRepository>";
+ protected static final String _27 = "</plugins>";
+ protected static final String _28 = "</profile>";
+ protected static final String _29 = "</profileProperties>";
+ protected static final String _30 = "</profiles>";
+ protected static final String _31 = "</project>";
+ protected static final String _32 = "</properties>";
+ protected static final String _33 = "</property>";
+ protected static final String _34 = "</repositories>";
+ protected static final String _35 = "</repository>";
+ protected static final String _36 = "</requirement>";
+ protected static final String _37 = "</sourceReferences>";
+ protected static final String _38 = "</target>";
+ protected static final String _39 = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
+ protected static final String _40 = "<activation>";
+ protected static final String _41 = "<additionalFileSets>";
+ protected static final String _42 = "<arch>x86_64</arch>";
+ protected static final String _43 = "<artifactId>";
+ protected static final String _44 = "<artifactId>eclipse-jarsigner-plugin</artifactId>";
+ protected static final String _45 = "<artifactId>target-platform-configuration</artifactId>";
+ protected static final String _46 = "<artifactId>tycho-buildtimestamp-jgit</artifactId>";
+ protected static final String _47 = "<artifactId>tycho-maven-plugin</artifactId>";
+ protected static final String _48 = "<artifactId>tycho-p2-plugin</artifactId>";
+ protected static final String _49 = "<artifactId>tycho-p2-publisher-plugin</artifactId>";
+ protected static final String _50 = "<artifactId>tycho-pack200a-plugin</artifactId>";
+ protected static final String _51 = "<artifactId>tycho-pack200b-plugin</artifactId>";
+ protected static final String _52 = "<artifactId>tycho-packaging-plugin</artifactId>";
+ protected static final String _53 = "<artifactId>tycho-source-feature-plugin</artifactId>";
+ protected static final String _54 = "<artifactId>tycho-source-plugin</artifactId>";
+ protected static final String _55 = "<artifactId>tycho-sourceref-jgit</artifactId>";
+ protected static final String _56 = "<build>";
+ protected static final String _57 = "<configuration>";
+ protected static final String _58 = "<dependencies>";
+ protected static final String _59 = "<dependency-resolution>";
+ protected static final String _60 = "<dependency>";
+ protected static final String _61 = "<directory>${project.build.outputDirectory}</directory>";
+ protected static final String _62 = "<environment>";
+ protected static final String _63 = "<environments>";
+ protected static final String _64 = "<extensions>true</extensions>";
+ protected static final String _65 = "<extraRequirements>";
+ protected static final String _66 = "<fileSet>";
+ protected static final String _67 = "<format>'v'yyyyMMdd-HHmm</format>";
+ protected static final String _68 = "<generate>true</generate>";
+ protected static final String _69 = "<groupId>";
+ protected static final String _70 = "<groupId>org.eclipse.cbi.maven.plugins</groupId>";
+ protected static final String _71 = "<groupId>org.eclipse.tycho.extras</groupId>";
+ protected static final String _72 = "<groupId>org.eclipse.tycho</groupId>";
+ protected static final String _73 = "<id>eclipse-cbi-releases</id>";
+ protected static final String _74 = "<id>eclipse-maven-releases</id>";
+ protected static final String _75 = "<id>license-feature</id>";
+ protected static final String _76 = "<id>modules</id>";
+ protected static final String _77 = "<id>org.eclipse.license.feature.group</id>";
+ protected static final String _78 = "<include>about.mappings</include>";
+ protected static final String _79 = "<includePackedArtifacts>true</includePackedArtifacts>";
+ protected static final String _80 = "<includes>";
+ protected static final String _81 = "<jarsigner-version>1.1.7</jarsigner-version>";
+ protected static final String _82 = "<jgit.dirtyWorkingTree>warning</jgit.dirtyWorkingTree>";
+ protected static final String _83 = "<jgit.ignore>pom.xml</jgit.ignore>";
+ protected static final String _84 = "<layout>p2</layout>";
+ protected static final String _85 = "<modelVersion>4.0.0</modelVersion>";
+ protected static final String _86 = "<module>../";
+ protected static final String _87 = "<module>features</module>";
+ protected static final String _88 = "<module>plugins</module>";
+ protected static final String _89 = "<modules>";
+ protected static final String _90 = "<name>MAVEN_BUILD</name>";
+ protected static final String _91 = "<os-jvm-flags/>";
+ protected static final String _92 = "<os>linux</os>";
+ protected static final String _93 = "<os>macosx</os>";
+ protected static final String _94 = "<os>win32</os>";
+ protected static final String _95 = "<packaging>pom</packaging>";
+ protected static final String _96 = "<plugin>";
+ protected static final String _97 = "<pluginManagement>";
+ protected static final String _98 = "<pluginRepositories>";
+ protected static final String _99 = "<pluginRepository>";
+ protected static final String _100 = "<plugins>";
+ protected static final String _101 = "<profile>";
+ protected static final String _102 = "<profileProperties>";
+ protected static final String _103 = "<profiles>";
+ protected static final String _104 = "<project";
+ protected static final String _105 = "<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>";
+ protected static final String _106 = "<properties>";
+ protected static final String _107 = "<property>";
+ protected static final String _108 = "<repositories>";
+ protected static final String _109 = "<repository>";
+ protected static final String _110 = "<requirement>";
+ protected static final String _111 = "<skip>true</skip>";
+ protected static final String _112 = "<sourceReferences>";
+ protected static final String _113 = "<target>";
+ protected static final String _114 = "<timestampProvider>jgit</timestampProvider>";
+ protected static final String _115 = "<tycho-version>1.6.0</tycho-version>";
+ protected static final String _116 = "<tycho.scmUrl>scm:git:https://git.eclipse.org/r/p/justj/org.eclipse.justj.git</tycho.scmUrl>";
+ protected static final String _117 = "<type>p2-installable-unit</type>";
+ protected static final String _118 = "<url>http://download.eclipse.org/cbi/updates/license/</url>";
+ protected static final String _119 = "<url>https://repo.eclipse.org/content/repositories/cbi-releases</url>";
+ protected static final String _120 = "<url>https://repo.eclipse.org/content/repositories/releases</url>";
+ protected static final String _121 = "<value>!false</value>";
+ protected static final String _122 = "<version>${jarsigner-version}</version>";
+ protected static final String _123 = "<version>${tycho-version}</version>";
+ protected static final String _124 = "<version>1.0.0-SNAPSHOT</version>";
+ protected static final String _125 = "<versionRange>0.0.0</versionRange>";
+ protected static final String _126 = "<ws>cocoa</ws>";
+ protected static final String _127 = "<ws>gtk</ws>";
+ protected static final String _128 = "<ws>win32</ws>";
+ protected static final String _129 = "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"";
+ protected static final String _130 = "xmlns=\"http://maven.apache.org/POM/4.0.0\"";
+ protected static final String _131 = "xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\">";
+ protected final String NL_1 = NL + " ";
+ protected final String NL_2 = NL + " ";
+ protected final String NL_3 = NL + " ";
+ protected final String NL_4 = NL + " ";
+ protected final String NL_5 = NL + " ";
+ protected final String NL_6 = NL + " ";
+ protected final String NL_7 = NL + " ";
+ protected final String NL_8 = NL + " ";
+ protected final String NL_9 = NL + " ";
+ protected final String NL_10 = NL + " ";
+ protected final String _132 = NL + _1 + NL + _104 + NL_2 + _130 + NL_2 + _129 + NL_2 + _131 + NL_1 + _85 + NL + NL_1 + _69;
+ protected final String _133 = _20 + NL_1 + _43;
+ protected final String _134 = _4 + NL_1 + _124 + NL_1 + _95 + NL + NL_1 + _106 + NL_2 + _105 + NL_2 + _116 + NL_2 + _115 + NL_2 + _81 + NL_2 + _91 + NL_1 + _32 + NL + NL_1 + _98 + NL_2 + _99 + NL_3 + _74 + NL_3 + _120 + NL_2 + _26 + NL_2 + _99 + NL_3 + _73 + NL_3 + _119 + NL_2 + _26 + NL_1 + _25 + NL + NL_1 + _108 + NL_2 + _109 + NL_3 + _75 + NL_3 + _118 + NL_3 + _84 + NL_2 + _35 + NL_1 + _34 + NL + NL_1 + _56 + NL_2 + _100 + NL_3 + _96 + NL_4 + _72 + NL_4 + _47 + NL_4 + _64 + NL_3 + _23 + NL_3 + _96 + NL_4 + _72 + NL_4 + _49 + NL_4 + _123 + NL_4 + _57 + NL_5 + _111 + NL_4 + _12 + NL_3 + _23 + NL_2 + _27 + NL_2 + _97 + NL_3 + _100 + NL_4 + _96 + NL_5 + _72 + NL_5 + _47 + NL_5 + _123 + NL_5 + _64 + NL_4 + _23 + NL_4 + _96 + NL_5 + _72 + NL_5 + _52 + NL_5 + _123 + NL_5 + _57 + NL_6 + _67 + NL_6 + _112 + NL_7 + _68 + NL_6 + _37 + NL_6 + _114 + NL_6 + _83 + NL_6 + _82 + NL_6 + _41 + NL_7 + _66 + NL_8 + _61 + NL_8 + _80 + NL_9 + _78 + NL_8 + _21 + NL_7 + _19 + NL_6 + _10 + NL_5 + _12 + NL_5 + _58 + NL_6 + _60 + NL_7 + _71 + NL_7 + _55 + NL_7 + _123 + NL_6 + _15 + NL_6 + _60 + NL_7 + _71 + NL_7 + _46 + NL_7 + _123 + NL_6 + _15 + NL_5 + _13 + NL_4 + _23 + NL_5 + _96 + NL_6 + _72 + NL_6 + _45 + NL_6 + _123 + NL_6 + _57 + NL_7 + _113 + NL_7 + _38 + NL + NL_7 + _8 + NL_7 + _79 + NL_7 + _63 + NL_8 + _62 + NL_9 + _94 + NL_9 + _128 + NL_9 + _42 + NL_8 + _16 + NL_8 + _62 + NL_9 + _93 + NL_9 + _126 + NL_9 + _42 + NL_8 + _16 + NL_8 + _62 + NL_9 + _92 + NL_9 + _127 + NL_9 + _42 + NL_8 + _16 + NL_7 + _17 + NL_7 + _59 + NL_8 + _65 + NL_9 + _110 + NL_10 + _117 + NL_10 + _77 + NL_10 + _125 + NL_9 + _36 + NL_8 + _18 + NL_8 + _102 + NL_9 + _6;
+ protected final String _135 = _2 + NL_8 + _29 + NL_7 + _14 + NL_6 + _12 + NL_5 + _23 + NL_4 + _96 + NL_5 + _72 + NL_5 + _54 + NL_5 + _123 + NL_4 + _23 + NL_4 + _96 + NL_5 + _71 + NL_5 + _50 + NL_5 + _123 + NL_4 + _23 + NL_4 + _96 + NL_5 + _70 + NL_5 + _44 + NL_5 + _122 + NL_4 + _23 + NL_4 + _96 + NL_5 + _71 + NL_5 + _51 + NL_5 + _123 + NL_4 + _23 + NL_4 + _96 + NL_5 + _72 + NL_5 + _48 + NL_5 + _123 + NL_4 + _23 + NL_4 + _96 + NL_5 + _71 + NL_5 + _53 + NL_5 + _123 + NL_4 + _23 + NL_3 + _27 + NL_2 + _24 + NL_1 + _11 + NL + NL_1 + _103 + NL_2 + _101 + NL_3 + _76 + NL_3 + _40 + NL_4 + _107 + NL_5 + _90 + NL_5 + _121 + NL_4 + _33 + NL_3 + _9 + NL_3 + _89 + NL_4 + _87 + NL_4 + _88 + NL_4 + _86;
+ protected final String _136 = _5 + NL_3 + _22 + NL_2 + _28 + NL_1 + _30 + NL + NL + _31;
+
+ public String generate(Object argument)
+ {
+ final StringBuilder builder = new StringBuilder();
+ Model model = (Model)argument;
+ String name = model.getName();
+ builder.append(_39);
+ builder.append(NL);
+ builder.append(_7);
+ builder.append(NL);
+ builder.append(org.eclipse.justj.codegen.model.util.Generator.getCopyright(argument, "", NL));
+ builder.append(_132);
+ builder.append(name);
+ builder.append(_133);
+ builder.append(name);
+ builder.append(_134);
+ builder.append(name);
+ builder.append(_3);
+ builder.append(name);
+ builder.append(_135);
+ builder.append(name);
+ builder.append(_136);
+ builder.append(NL);
+ return builder.toString();
+ }
+}
diff --git a/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/releng/parent/ProjectXML.java b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/releng/parent/ProjectXML.java
new file mode 100644
index 0000000..f358824
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/releng/parent/ProjectXML.java
@@ -0,0 +1,68 @@
+/*
+ * Copyright (c) 2020 Eclipse contributors and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.eclipse.justj.codegen.templates.releng.parent;
+
+import org.eclipse.justj.codegen.model.*;
+
+public class ProjectXML
+{
+ protected static String nl;
+ public static synchronized ProjectXML create(String lineSeparator)
+ {
+ nl = lineSeparator;
+ ProjectXML result = new ProjectXML();
+ nl = null;
+ return result;
+ }
+
+ public final String NL = nl == null ? (System.getProperties().getProperty("line.separator")) : nl;
+ protected static final String _1 = ".parent</name>";
+ protected static final String _2 = "</buildSpec>";
+ protected static final String _3 = "</filter>";
+ protected static final String _4 = "</filteredResources>";
+ protected static final String _5 = "</matcher>";
+ protected static final String _6 = "</natures>";
+ protected static final String _7 = "</projectDescription>";
+ protected static final String _8 = "</projects>";
+ protected static final String _9 = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
+ protected static final String _10 = "<arguments>1.0-projectRelativePath-matches-true-false-target</arguments>";
+ protected static final String _11 = "<buildSpec>";
+ protected static final String _12 = "<comment></comment>";
+ protected static final String _13 = "<filter>";
+ protected static final String _14 = "<filteredResources>";
+ protected static final String _15 = "<id>1396938000000</id>";
+ protected static final String _16 = "<id>org.eclipse.ui.ide.multiFilter</id>";
+ protected static final String _17 = "<matcher>";
+ protected static final String _18 = "<name>";
+ protected static final String _19 = "<name></name>";
+ protected static final String _20 = "<natures>";
+ protected static final String _21 = "<projectDescription>";
+ protected static final String _22 = "<projects>";
+ protected static final String _23 = "<type>10</type>";
+ protected final String NL_1 = NL + "\t";
+ protected final String NL_2 = NL + "\t\t";
+ protected final String NL_3 = NL + "\t\t\t";
+ protected final String NL_4 = NL + "\t\t\t\t";
+ protected final String _24 = _9 + NL + _21 + NL_1 + _18;
+ protected final String _25 = _1 + NL_1 + _12 + NL_1 + _22 + NL_1 + _8 + NL_1 + _11 + NL_1 + _2 + NL_1 + _20 + NL_1 + _6 + NL_1 + _14 + NL_2 + _13 + NL_3 + _15 + NL_3 + _19 + NL_3 + _23 + NL_3 + _17 + NL_4 + _16 + NL_4 + _10 + NL_3 + _5 + NL_2 + _3 + NL_1 + _4 + NL + _7;
+
+ public String generate(Object argument)
+ {
+ final StringBuilder builder = new StringBuilder();
+ Model model = (Model)argument;
+ String name = model.getName();
+ builder.append(_24);
+ builder.append(name);
+ builder.append(_25);
+ builder.append(NL);
+ return builder.toString();
+ }
+}
diff --git a/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/releng/parent/features/POMXML.java b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/releng/parent/features/POMXML.java
new file mode 100644
index 0000000..b1b5344
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/releng/parent/features/POMXML.java
@@ -0,0 +1,134 @@
+/*
+ * Copyright (c) 2020 Eclipse contributors and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.eclipse.justj.codegen.templates.releng.parent.features;
+
+import org.eclipse.justj.codegen.model.*;
+
+public class POMXML
+{
+ protected static String nl;
+ public static synchronized POMXML create(String lineSeparator)
+ {
+ nl = lineSeparator;
+ POMXML result = new POMXML();
+ nl = null;
+ return result;
+ }
+
+ public final String NL = nl == null ? (System.getProperties().getProperty("line.separator")) : nl;
+ protected static final String _1 = "-->";
+ protected static final String _2 = "-feature</module>";
+ protected static final String _3 = ".";
+ protected static final String _4 = ".features</artifactId>";
+ protected static final String _5 = ".parent</artifactId>";
+ protected static final String _6 = "<!--";
+ protected static final String _7 = "</activation>";
+ protected static final String _8 = "</build>";
+ protected static final String _9 = "</configuration>";
+ protected static final String _10 = "</execution>";
+ protected static final String _11 = "</executions>";
+ protected static final String _12 = "</goals>";
+ protected static final String _13 = "</groupId>";
+ protected static final String _14 = "</modules>";
+ protected static final String _15 = "</parent>";
+ protected static final String _16 = "</plugin>";
+ protected static final String _17 = "</plugins>";
+ protected static final String _18 = "</profile>";
+ protected static final String _19 = "</profiles>";
+ protected static final String _20 = "</project>";
+ protected static final String _21 = "</property>";
+ protected static final String _22 = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
+ protected static final String _23 = "<activation>";
+ protected static final String _24 = "<artifactId>";
+ protected static final String _25 = "<artifactId>eclipse-jarsigner-plugin</artifactId>";
+ protected static final String _26 = "<artifactId>tycho-p2-plugin</artifactId>";
+ protected static final String _27 = "<attachP2Metadata>false</attachP2Metadata>";
+ protected static final String _28 = "<build>";
+ protected static final String _29 = "<configuration>";
+ protected static final String _30 = "<execution>";
+ protected static final String _31 = "<executions>";
+ protected static final String _32 = "<goal>p2-metadata</goal>";
+ protected static final String _33 = "<goal>sign</goal>";
+ protected static final String _34 = "<goals>";
+ protected static final String _35 = "<groupId>";
+ protected static final String _36 = "<groupId>org.eclipse.cbi.maven.plugins</groupId>";
+ protected static final String _37 = "<groupId>org.eclipse.tycho</groupId>";
+ protected static final String _38 = "<id>attach-p2-metadata</id>";
+ protected static final String _39 = "<id>default-p2-metadata-default</id>";
+ protected static final String _40 = "<id>pack-and-sign</id>";
+ protected static final String _41 = "<id>sign</id>";
+ protected static final String _42 = "<modelVersion>4.0.0</modelVersion>";
+ protected static final String _43 = "<module>../../../features/";
+ protected static final String _44 = "<modules>";
+ protected static final String _45 = "<name>PACK_AND_SIGN</name>";
+ protected static final String _46 = "<packaging>pom</packaging>";
+ protected static final String _47 = "<parent>";
+ protected static final String _48 = "<phase>package</phase>";
+ protected static final String _49 = "<plugin>";
+ protected static final String _50 = "<plugins>";
+ protected static final String _51 = "<profile>";
+ protected static final String _52 = "<profiles>";
+ protected static final String _53 = "<project";
+ protected static final String _54 = "<property>";
+ protected static final String _55 = "<relativePath>..</relativePath>";
+ protected static final String _56 = "<value>true</value>";
+ protected static final String _57 = "<version>1.0.0-SNAPSHOT</version>";
+ protected static final String _58 = "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"";
+ protected static final String _59 = "xmlns=\"http://maven.apache.org/POM/4.0.0\"";
+ protected static final String _60 = "xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\">";
+ protected final String NL_1 = NL + " ";
+ protected final String NL_2 = NL + " ";
+ protected final String NL_3 = NL + " ";
+ protected final String NL_4 = NL + " ";
+ protected final String NL_5 = NL + " ";
+ protected final String NL_6 = NL + " ";
+ protected final String NL_7 = NL + " ";
+ protected final String NL_8 = NL + " ";
+ protected final String NL_9 = NL + " ";
+ protected final String _61 = NL + _1 + NL + _53 + NL_2 + _59 + NL_2 + _58 + NL_2 + _60 + NL_1 + _42 + NL + NL_1 + _47 + NL_2 + _35;
+ protected final String _62 = _13 + NL_2 + _24;
+ protected final String _63 = _5 + NL_2 + _57 + NL_2 + _55 + NL_1 + _15 + NL + NL_1 + _35;
+ protected final String _64 = _13 + NL_1 + _24;
+ protected final String _65 = _4 + NL_1 + _57 + NL_1 + _46 + NL + NL_1 + _44;
+ protected final String _66 = NL_2 + _43;
+ protected final String _67 = NL_1 + _14 + NL + NL_1 + _28 + NL_2 + _50 + NL_3 + _49 + NL_4 + _37 + NL_4 + _26 + NL_4 + _31 + NL_5 + _30 + NL_6 + _39 + NL_6 + _29 + NL_7 + _27 + NL_6 + _9 + NL_5 + _10 + NL_5 + _30 + NL_6 + _38 + NL_6 + _48 + NL_6 + _34 + NL_7 + _32 + NL_6 + _12 + NL_5 + _10 + NL_4 + _11 + NL_3 + _16 + NL_2 + _17 + NL_1 + _8 + NL + NL_1 + _52 + NL_2 + _51 + NL_3 + _40 + NL_3 + _23 + NL_4 + _54 + NL_5 + _45 + NL_5 + _56 + NL_4 + _21 + NL_3 + _7 + NL_3 + _28 + NL_4 + _50 + NL_5 + _49 + NL_6 + _36 + NL_6 + _25 + NL_6 + _31 + NL_7 + _30 + NL_8 + _41 + NL_8 + _34 + NL_9 + _33 + NL_8 + _12 + NL_7 + _10 + NL_6 + _11 + NL_5 + _16 + NL_5 + _49 + NL_6 + _37 + NL_6 + _26 + NL_5 + _16 + NL_4 + _17 + NL_3 + _8 + NL_2 + _18 + NL_1 + _19 + NL + NL + _20;
+
+ public String generate(Object argument)
+ {
+ final StringBuilder builder = new StringBuilder();
+ Model model = (Model)argument;
+ String name = model.getName();
+ builder.append(_22);
+ builder.append(NL);
+ builder.append(_6);
+ builder.append(NL);
+ builder.append(org.eclipse.justj.codegen.model.util.Generator.getCopyright(argument, "", NL));
+ builder.append(_61);
+ builder.append(name);
+ builder.append(_62);
+ builder.append(name);
+ builder.append(_63);
+ builder.append(name);
+ builder.append(_64);
+ builder.append(name);
+ builder.append(_65);
+ for (JVM jvm : model.getJVMs()) {
+ builder.append(_66);
+ builder.append(name);
+ builder.append(_3);
+ builder.append(jvm.getName());
+ builder.append(_2);
+ }
+ builder.append(_67);
+ builder.append(NL);
+ return builder.toString();
+ }
+}
diff --git a/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/releng/parent/plugins/POMXML.java b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/releng/parent/plugins/POMXML.java
new file mode 100644
index 0000000..40f9009
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/releng/parent/plugins/POMXML.java
@@ -0,0 +1,154 @@
+/*
+ * Copyright (c) 2020 Eclipse contributors and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.eclipse.justj.codegen.templates.releng.parent.plugins;
+
+import org.eclipse.justj.codegen.model.*;
+
+public class POMXML
+{
+ protected static String nl;
+ public static synchronized POMXML create(String lineSeparator)
+ {
+ nl = lineSeparator;
+ POMXML result = new POMXML();
+ nl = null;
+ return result;
+ }
+
+ public final String NL = nl == null ? (System.getProperties().getProperty("line.separator")) : nl;
+ protected static final String _1 = "-->";
+ protected static final String _2 = ".";
+ protected static final String _3 = ".parent</artifactId>";
+ protected static final String _4 = ".plugins</artifactId>";
+ protected static final String _5 = "<!--";
+ protected static final String _6 = "</activation>";
+ protected static final String _7 = "</build>";
+ protected static final String _8 = "</configuration>";
+ protected static final String _9 = "</execution>";
+ protected static final String _10 = "</executions>";
+ protected static final String _11 = "</goals>";
+ protected static final String _12 = "</groupId>";
+ protected static final String _13 = "</module>";
+ protected static final String _14 = "</modules>";
+ protected static final String _15 = "</parent>";
+ protected static final String _16 = "</plugin>";
+ protected static final String _17 = "</plugins>";
+ protected static final String _18 = "</profile>";
+ protected static final String _19 = "</profiles>";
+ protected static final String _20 = "</project>";
+ protected static final String _21 = "</property>";
+ protected static final String _22 = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
+ protected static final String _23 = "<activation>";
+ protected static final String _24 = "<artifactId>";
+ protected static final String _25 = "<artifactId>eclipse-jarsigner-plugin</artifactId>";
+ protected static final String _26 = "<artifactId>tycho-p2-plugin</artifactId>";
+ protected static final String _27 = "<artifactId>tycho-pack200a-plugin</artifactId>";
+ protected static final String _28 = "<artifactId>tycho-pack200b-plugin</artifactId>";
+ protected static final String _29 = "<artifactId>tycho-source-plugin</artifactId>";
+ protected static final String _30 = "<build>";
+ protected static final String _31 = "<configuration>";
+ protected static final String _32 = "<defaultP2Metadata>false</defaultP2Metadata>";
+ protected static final String _33 = "<execution>";
+ protected static final String _34 = "<executions>";
+ protected static final String _35 = "<goal>normalize</goal>";
+ protected static final String _36 = "<goal>p2-metadata</goal>";
+ protected static final String _37 = "<goal>pack</goal>";
+ protected static final String _38 = "<goal>plugin-source</goal>";
+ protected static final String _39 = "<goal>sign</goal>";
+ protected static final String _40 = "<goals>";
+ protected static final String _41 = "<groupId>";
+ protected static final String _42 = "<groupId>org.eclipse.cbi.maven.plugins</groupId>";
+ protected static final String _43 = "<groupId>org.eclipse.tycho.extras</groupId>";
+ protected static final String _44 = "<groupId>org.eclipse.tycho</groupId>";
+ protected static final String _45 = "<id>attach-p2-metadata</id>";
+ protected static final String _46 = "<id>attach-source</id>";
+ protected static final String _47 = "<id>pack-and-sign</id>";
+ protected static final String _48 = "<id>pack200-normalize</id>";
+ protected static final String _49 = "<id>pack200-pack</id>";
+ protected static final String _50 = "<id>sign</id>";
+ protected static final String _51 = "<modelVersion>4.0.0</modelVersion>";
+ protected static final String _52 = "<module>../../../plugins/";
+ protected static final String _53 = "<modules>";
+ protected static final String _54 = "<name>PACK_AND_SIGN</name>";
+ protected static final String _55 = "<packaging>pom</packaging>";
+ protected static final String _56 = "<parent>";
+ protected static final String _57 = "<phase>package</phase>";
+ protected static final String _58 = "<plugin>";
+ protected static final String _59 = "<plugins>";
+ protected static final String _60 = "<profile>";
+ protected static final String _61 = "<profiles>";
+ protected static final String _62 = "<project";
+ protected static final String _63 = "<property>";
+ protected static final String _64 = "<relativePath>..</relativePath>";
+ protected static final String _65 = "<value>true</value>";
+ protected static final String _66 = "<version>1.0.0-SNAPSHOT</version>";
+ protected static final String _67 = "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"";
+ protected static final String _68 = "xmlns=\"http://maven.apache.org/POM/4.0.0\"";
+ protected static final String _69 = "xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\">";
+ protected final String NL_1 = NL + " ";
+ protected final String NL_2 = NL + " ";
+ protected final String NL_3 = NL + " ";
+ protected final String NL_4 = NL + " ";
+ protected final String NL_5 = NL + " ";
+ protected final String NL_6 = NL + " ";
+ protected final String NL_7 = NL + " ";
+ protected final String NL_8 = NL + " ";
+ protected final String NL_9 = NL + " ";
+ protected final String _70 = NL + _1 + NL + _62 + NL_2 + _68 + NL_2 + _67 + NL_2 + _69 + NL_1 + _51 + NL + NL_1 + _56 + NL_2 + _41;
+ protected final String _71 = _12 + NL_2 + _24;
+ protected final String _72 = _3 + NL_2 + _66 + NL_2 + _64 + NL_1 + _15 + NL + NL_1 + _41;
+ protected final String _73 = _12 + NL_1 + _24;
+ protected final String _74 = _4 + NL_1 + _66 + NL_1 + _55 + NL + NL_1 + _53;
+ protected final String _75 = NL_2 + _52;
+ protected final String _76 = NL_1 + _14 + NL + NL_1 + _30 + NL_2 + _59 + NL_3 + _58 + NL_4 + _44 + NL_4 + _29 + NL_4 + _34 + NL_5 + _33 + NL_6 + _46 + NL_6 + _40 + NL_7 + _38 + NL_6 + _11 + NL_5 + _9 + NL_4 + _10 + NL_3 + _16 + NL_2 + _17 + NL_1 + _7 + NL + NL_1 + _61 + NL_2 + _60 + NL_3 + _47 + NL_3 + _23 + NL_4 + _63 + NL_5 + _54 + NL_5 + _65 + NL_4 + _21 + NL_3 + _6 + NL_3 + _30 + NL_4 + _59 + NL_5 + _58 + NL_6 + _43 + NL_6 + _27 + NL_6 + _34 + NL_7 + _33 + NL_8 + _48 + NL_8 + _40 + NL_9 + _35 + NL_8 + _11 + NL_7 + _9 + NL_6 + _10 + NL_5 + _16 + NL_5 + _58 + NL_6 + _42 + NL_6 + _25 + NL_6 + _34 + NL_7 + _33 + NL_8 + _50 + NL_8 + _40 + NL_9 + _39 + NL_8 + _11 + NL_7 + _9 + NL_6 + _10 + NL_5 + _16 + NL_5 + _58 + NL_6 + _43 + NL_6 + _28 + NL_6 + _34 + NL_7 + _33 + NL_8 + _49 + NL_8 + _40 + NL_9 + _37 + NL_8 + _11 + NL_7 + _9 + NL_6 + _10 + NL_5 + _16 + NL_5 + _58 + NL_6 + _44 + NL_6 + _26 + NL_6 + _34 + NL_7 + _33 + NL_8 + _45 + NL_8 + _57 + NL_8 + _40 + NL_9 + _36 + NL_8 + _11 + NL_7 + _9 + NL_6 + _10 + NL_6 + _31 + NL_7 + _32 + NL_6 + _8 + NL_5 + _16 + NL_4 + _17 + NL_3 + _7 + NL_2 + _18 + NL_1 + _19 + NL + NL + _20;
+
+ public String generate(Object argument)
+ {
+ final StringBuilder builder = new StringBuilder();
+ Model model = (Model)argument;
+ String name = model.getName();
+ builder.append(_22);
+ builder.append(NL);
+ builder.append(_5);
+ builder.append(NL);
+ builder.append(org.eclipse.justj.codegen.model.util.Generator.getCopyright(argument, "", NL));
+ builder.append(_70);
+ builder.append(name);
+ builder.append(_71);
+ builder.append(name);
+ builder.append(_72);
+ builder.append(name);
+ builder.append(_73);
+ builder.append(name);
+ builder.append(_74);
+ for (JVM jvm : model.getJVMs()) {
+ builder.append(_75);
+ builder.append(name);
+ builder.append(_2);
+ builder.append(jvm.getName());
+ builder.append(_13);
+ for (Variant variant : jvm.getVariants()) {
+ builder.append(_75);
+ builder.append(name);
+ builder.append(_2);
+ builder.append(jvm.getName());
+ builder.append(_2);
+ builder.append(variant.getOs());
+ builder.append(_2);
+ builder.append(variant.getArch());
+ builder.append(_13);
+ }
+ }
+ builder.append(_76);
+ builder.append(NL);
+ return builder.toString();
+ }
+}
diff --git a/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/releng/site/CategoryXML.java b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/releng/site/CategoryXML.java
new file mode 100644
index 0000000..5563c2f
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/releng/site/CategoryXML.java
@@ -0,0 +1,79 @@
+/*
+ * Copyright (c) 2020 Eclipse contributors and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.eclipse.justj.codegen.templates.releng.site;
+
+import org.eclipse.justj.codegen.model.*;
+
+public class CategoryXML
+{
+ protected static String nl;
+ public static synchronized CategoryXML create(String lineSeparator)
+ {
+ nl = lineSeparator;
+ CategoryXML result = new CategoryXML();
+ nl = null;
+ return result;
+ }
+
+ public final String NL = nl == null ? (System.getProperties().getProperty("line.separator")) : nl;
+ protected static final String _1 = "-->";
+ protected static final String _2 = ".";
+ protected static final String _3 = ".category\" label=\"";
+ protected static final String _4 = ".category\"/>";
+ protected static final String _5 = "<!--";
+ protected static final String _6 = "</feature>";
+ protected static final String _7 = "</site>";
+ protected static final String _8 = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
+ protected static final String _9 = "<category name=\"";
+ protected static final String _10 = "<category-def name=\"";
+ protected static final String _11 = "<feature id=\"";
+ protected static final String _12 = "<site>";
+ protected static final String _13 = "\"/>";
+ protected static final String _14 = "\">";
+ protected final String NL_1 = NL + " ";
+ protected final String NL_2 = NL + " ";
+ protected final String _15 = NL + _1 + NL + _12;
+ protected final String _16 = NL_1 + _11;
+ protected final String _17 = _14 + NL_2 + _9;
+ protected final String _18 = _4 + NL_1 + _6;
+ protected final String _19 = NL_1 + _10;
+ protected final String _20 = _13 + NL + _7;
+
+ public String generate(Object argument)
+ {
+ final StringBuilder builder = new StringBuilder();
+ Model model = (Model)argument;
+ String name = model.getName();
+ String label = model.getLabel();
+ builder.append(_8);
+ builder.append(NL);
+ builder.append(_5);
+ builder.append(NL);
+ builder.append(org.eclipse.justj.codegen.model.util.Generator.getCopyright(argument, "", NL));
+ builder.append(_15);
+ for (JVM jvm : model.getJVMs()) {
+ builder.append(_16);
+ builder.append(name);
+ builder.append(_2);
+ builder.append(jvm.getName());
+ builder.append(_17);
+ builder.append(name);
+ builder.append(_18);
+ }
+ builder.append(_19);
+ builder.append(name);
+ builder.append(_3);
+ builder.append(label);
+ builder.append(_20);
+ builder.append(NL);
+ return builder.toString();
+ }
+}
diff --git a/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/releng/site/POMXML.java b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/releng/site/POMXML.java
new file mode 100644
index 0000000..c8105d1
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/releng/site/POMXML.java
@@ -0,0 +1,100 @@
+/*
+ * Copyright (c) 2020 Eclipse contributors and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.eclipse.justj.codegen.templates.releng.site;
+
+import org.eclipse.justj.codegen.model.*;
+
+public class POMXML
+{
+ protected static String nl;
+ public static synchronized POMXML create(String lineSeparator)
+ {
+ nl = lineSeparator;
+ POMXML result = new POMXML();
+ nl = null;
+ return result;
+ }
+
+ public final String NL = nl == null ? (System.getProperties().getProperty("line.separator")) : nl;
+ protected static final String _1 = " Build ${build.id}</repositoryName>";
+ protected static final String _2 = "-->";
+ protected static final String _3 = ".parent</artifactId>";
+ protected static final String _4 = ".parent</relativePath>";
+ protected static final String _5 = ".site</artifactId>";
+ protected static final String _6 = "<!--";
+ protected static final String _7 = "</build>";
+ protected static final String _8 = "</configuration>";
+ protected static final String _9 = "</groupId>";
+ protected static final String _10 = "</parent>";
+ protected static final String _11 = "</plugin>";
+ protected static final String _12 = "</plugins>";
+ protected static final String _13 = "</project>";
+ protected static final String _14 = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
+ protected static final String _15 = "<artifactId>";
+ protected static final String _16 = "<artifactId>tycho-p2-repository-plugin</artifactId>";
+ protected static final String _17 = "<build>";
+ protected static final String _18 = "<configuration>";
+ protected static final String _19 = "<groupId>";
+ protected static final String _20 = "<groupId>org.eclipse.tycho</groupId>";
+ protected static final String _21 = "<modelVersion>4.0.0</modelVersion>";
+ protected static final String _22 = "<packaging>eclipse-repository</packaging>";
+ protected static final String _23 = "<parent>";
+ protected static final String _24 = "<plugin>";
+ protected static final String _25 = "<plugins>";
+ protected static final String _26 = "<project";
+ protected static final String _27 = "<relativePath>../";
+ protected static final String _28 = "<repositoryName>";
+ protected static final String _29 = "<version>${tycho-version}</version>";
+ protected static final String _30 = "<version>1.0.0-SNAPSHOT</version>";
+ protected static final String _31 = "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"";
+ protected static final String _32 = "xmlns=\"http://maven.apache.org/POM/4.0.0\"";
+ protected static final String _33 = "xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\">";
+ protected final String NL_1 = NL + " ";
+ protected final String NL_2 = NL + " ";
+ protected final String NL_3 = NL + " ";
+ protected final String NL_4 = NL + " ";
+ protected final String NL_5 = NL + " ";
+ protected final String _34 = NL + _2 + NL + _26 + NL_2 + _32 + NL_2 + _31 + NL_2 + _33 + NL_1 + _21 + NL + NL_1 + _23 + NL_2 + _19;
+ protected final String _35 = _9 + NL_2 + _15;
+ protected final String _36 = _3 + NL_2 + _30 + NL_2 + _27;
+ protected final String _37 = _4 + NL_1 + _10 + NL + NL_1 + _19;
+ protected final String _38 = _9 + NL_1 + _15;
+ protected final String _39 = _5 + NL_1 + _30 + NL_1 + _22 + NL + NL_1 + _17 + NL_2 + _25 + NL_3 + _24 + NL_4 + _20 + NL_4 + _16 + NL_4 + _29 + NL_4 + _18 + NL_5 + _28;
+ protected final String _40 = _1 + NL_4 + _8 + NL_3 + _11 + NL_2 + _12 + NL_1 + _7 + NL + _13;
+
+ public String generate(Object argument)
+ {
+ final StringBuilder builder = new StringBuilder();
+ Model model = (Model)argument;
+ String name = model.getName();
+ String label = model.getLabel();
+ builder.append(_14);
+ builder.append(NL);
+ builder.append(_6);
+ builder.append(NL);
+ builder.append(org.eclipse.justj.codegen.model.util.Generator.getCopyright(argument, "", NL));
+ builder.append(_34);
+ builder.append(name);
+ builder.append(_35);
+ builder.append(name);
+ builder.append(_36);
+ builder.append(name);
+ builder.append(_37);
+ builder.append(name);
+ builder.append(_38);
+ builder.append(name);
+ builder.append(_39);
+ builder.append(label);
+ builder.append(_40);
+ builder.append(NL);
+ return builder.toString();
+ }
+}
diff --git a/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/releng/site/ProjectXML.java b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/releng/site/ProjectXML.java
new file mode 100644
index 0000000..4f5578f
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/releng/site/ProjectXML.java
@@ -0,0 +1,68 @@
+/*
+ * Copyright (c) 2020 Eclipse contributors and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.eclipse.justj.codegen.templates.releng.site;
+
+import org.eclipse.justj.codegen.model.*;
+
+public class ProjectXML
+{
+ protected static String nl;
+ public static synchronized ProjectXML create(String lineSeparator)
+ {
+ nl = lineSeparator;
+ ProjectXML result = new ProjectXML();
+ nl = null;
+ return result;
+ }
+
+ public final String NL = nl == null ? (System.getProperties().getProperty("line.separator")) : nl;
+ protected static final String _1 = ".site</name>";
+ protected static final String _2 = "</buildSpec>";
+ protected static final String _3 = "</filter>";
+ protected static final String _4 = "</filteredResources>";
+ protected static final String _5 = "</matcher>";
+ protected static final String _6 = "</natures>";
+ protected static final String _7 = "</projectDescription>";
+ protected static final String _8 = "</projects>";
+ protected static final String _9 = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
+ protected static final String _10 = "<arguments>1.0-projectRelativePath-matches-true-false-target</arguments>";
+ protected static final String _11 = "<buildSpec>";
+ protected static final String _12 = "<comment></comment>";
+ protected static final String _13 = "<filter>";
+ protected static final String _14 = "<filteredResources>";
+ protected static final String _15 = "<id>1396938000000</id>";
+ protected static final String _16 = "<id>org.eclipse.ui.ide.multiFilter</id>";
+ protected static final String _17 = "<matcher>";
+ protected static final String _18 = "<name>";
+ protected static final String _19 = "<name></name>";
+ protected static final String _20 = "<natures>";
+ protected static final String _21 = "<projectDescription>";
+ protected static final String _22 = "<projects>";
+ protected static final String _23 = "<type>10</type>";
+ protected final String NL_1 = NL + "\t";
+ protected final String NL_2 = NL + "\t\t";
+ protected final String NL_3 = NL + "\t\t\t";
+ protected final String NL_4 = NL + "\t\t\t\t";
+ protected final String _24 = _9 + NL + _21 + NL_1 + _18;
+ protected final String _25 = _1 + NL_1 + _12 + NL_1 + _22 + NL_1 + _8 + NL_1 + _11 + NL_1 + _2 + NL_1 + _20 + NL_1 + _6 + NL_1 + _14 + NL_2 + _13 + NL_3 + _15 + NL_3 + _19 + NL_3 + _23 + NL_3 + _17 + NL_4 + _16 + NL_4 + _10 + NL_3 + _5 + NL_2 + _3 + NL_1 + _4 + NL + _7;
+
+ public String generate(Object argument)
+ {
+ final StringBuilder builder = new StringBuilder();
+ Model model = (Model)argument;
+ String name = model.getName();
+ builder.append(_24);
+ builder.append(name);
+ builder.append(_25);
+ builder.append(NL);
+ return builder.toString();
+ }
+}
diff --git a/plugins/org.eclipse.justj.codegen/templates/copyright.properties.jetinc b/plugins/org.eclipse.justj.codegen/templates/copyright.properties.jetinc
new file mode 100644
index 0000000..66ef41b
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/templates/copyright.properties.jetinc
@@ -0,0 +1,2 @@
+<%=org.eclipse.justj.codegen.model.util.Generator.getCopyright(argument, "# ", NL)%>
+#
diff --git a/plugins/org.eclipse.justj.codegen/templates/copyright.xml.jetinc b/plugins/org.eclipse.justj.codegen/templates/copyright.xml.jetinc
new file mode 100644
index 0000000..008c667
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/templates/copyright.xml.jetinc
@@ -0,0 +1,3 @@
+<!--
+<%=org.eclipse.justj.codegen.model.util.Generator.getCopyright(argument, "", NL)%>
+-->
\ No newline at end of file
diff --git a/plugins/org.eclipse.justj.codegen/templates/dot.gitignore.jet b/plugins/org.eclipse.justj.codegen/templates/dot.gitignore.jet
new file mode 100644
index 0000000..99801f6
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/templates/dot.gitignore.jet
@@ -0,0 +1,12 @@
+<%--
+Copyright (c) 2020 Eclipse contributors and others.
+
+This program and the accompanying materials
+are made available under the terms of the Eclipse Public License 2.0
+which accompanies this distribution, and is available at
+https://www.eclipse.org/legal/epl-2.0/
+
+SPDX-License-Identifier: EPL-2.0
+--%>
+<%@jet package="org.eclipse.justj.codegen.templates" class="GitIgnore" imports="" builder="StringBuilder builder = new StringBuilder()" minimize="true"%>
+target/
diff --git a/plugins/org.eclipse.justj.codegen/templates/feature/build.properties.jet b/plugins/org.eclipse.justj.codegen/templates/feature/build.properties.jet
new file mode 100644
index 0000000..ede122b
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/templates/feature/build.properties.jet
@@ -0,0 +1,15 @@
+<%--
+Copyright (c) 2020 Eclipse contributors and others.
+
+This program and the accompanying materials
+are made available under the terms of the Eclipse Public License 2.0
+which accompanies this distribution, and is available at
+https://www.eclipse.org/legal/epl-2.0/
+
+SPDX-License-Identifier: EPL-2.0
+--%>
+<%@jet package="org.eclipse.justj.codegen.templates.feature" class="BuildProperties" imports="" builder="StringBuilder builder = new StringBuilder()" minimize="true"%>
+<%@include file="../copyright.properties.jetinc"%>
+
+bin.includes = feature.xml,\
+ feature.properties
diff --git a/plugins/org.eclipse.justj.codegen/templates/feature/dot.project.jet b/plugins/org.eclipse.justj.codegen/templates/feature/dot.project.jet
new file mode 100644
index 0000000..fa8d01c
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/templates/feature/dot.project.jet
@@ -0,0 +1,40 @@
+<%--
+Copyright (c) 2020 Eclipse contributors and others.
+
+This program and the accompanying materials
+are made available under the terms of the Eclipse Public License 2.0
+which accompanies this distribution, and is available at
+https://www.eclipse.org/legal/epl-2.0/
+
+SPDX-License-Identifier: EPL-2.0
+--%>
+<%@jet package="org.eclipse.justj.codegen.templates.feature" class="ProjectXML" imports="org.eclipse.justj.codegen.model.*" builder="StringBuilder builder = new StringBuilder()" minimize="true"%>
+<%JVM jvm = (JVM)argument;
+ String jvmName = jvm.getName();
+ Model model = jvm.getModel();
+ String modelName = model.getName();%>
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name><%=modelName%>.<%=jvmName%>-feature</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.pde.FeatureBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <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.justj.codegen/templates/feature/feature.properties.jet b/plugins/org.eclipse.justj.codegen/templates/feature/feature.properties.jet
new file mode 100644
index 0000000..9741a4f
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/templates/feature/feature.properties.jet
@@ -0,0 +1,22 @@
+<%--
+Copyright (c) 2020 Eclipse contributors and others.
+
+This program and the accompanying materials
+are made available under the terms of the Eclipse Public License 2.0
+which accompanies this distribution, and is available at
+https://www.eclipse.org/legal/epl-2.0/
+
+SPDX-License-Identifier: EPL-2.0
+--%>
+<%@jet package="org.eclipse.justj.codegen.templates.feature" class="FeatureProperties" imports="org.eclipse.justj.codegen.model.* org.eclipse.justj.codegen.model.util.Generator" builder="StringBuilder builder = new StringBuilder()" minimize="true"%>
+<%JVM jvm = (JVM)argument;
+ String jvmLabel = jvm.getLabel();
+ Model model = jvm.getModel();
+ String modelLabel = model.getLabel();
+ String provider = model.getProvider();%>
+<%@include file="../copyright.properties.jetinc"%>
+
+providerName = <%=provider%>
+featureName = <%=modelLabel%> <%=jvmLabel%>
+description = Contains the plug-ins and fragments for the <%=jvmLabel%>
+copyright = <%=Generator.getCopyright(argument, "", "\\n\\" + NL)%>\n
diff --git a/plugins/org.eclipse.justj.codegen/templates/feature/feature.xml.jet b/plugins/org.eclipse.justj.codegen/templates/feature/feature.xml.jet
new file mode 100644
index 0000000..c03fb2f
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/templates/feature/feature.xml.jet
@@ -0,0 +1,60 @@
+<%--
+Copyright (c) 2020 Eclipse contributors and others.
+
+This program and the accompanying materials
+are made available under the terms of the Eclipse Public License 2.0
+which accompanies this distribution, and is available at
+https://www.eclipse.org/legal/epl-2.0/
+
+SPDX-License-Identifier: EPL-2.0
+--%>
+<%@jet package="org.eclipse.justj.codegen.templates.feature" class="FeatureXML" imports="org.eclipse.justj.codegen.model.*" builder="StringBuilder builder = new StringBuilder()" minimize="true"%>
+<%JVM jvm = (JVM)argument;
+ String jvmName = jvm.getName();
+ Model model = jvm.getModel();
+ String modelName = model.getName();
+ String fullName = modelName + '.' + jvmName;
+ String version = jvm.getVersion();%>
+<?xml version="1.0" encoding="UTF-8"?>
+<%@include file="../copyright.xml.jetinc"%>
+<feature
+ id="<%=fullName%>"
+ label="%featureName"
+ version="<%=version%>.qualifier"
+ provider-name="%providerName"
+ license-feature="org.eclipse.license"
+ license-feature-version="0.0.0">
+
+ <description>
+ %description
+ </description>
+
+ <copyright>
+ %copyright
+ </copyright>
+
+ <license url="%licenseURL">
+ %license
+ </license>
+
+ <plugin
+ id="<%=fullName%>"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+<%for (Variant variant : jvm.getVariants()) {
+ String os = variant.getOs();
+ String arch = variant.getArch();%>
+ <plugin
+ id="<%=fullName%>.<%=os%>.<%=arch%>"
+ os="<%=os%>"
+ arch="<%=arch%>"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ fragment="true"/>
+
+<%}%>
+</feature>
diff --git a/plugins/org.eclipse.justj.codegen/templates/feature/pom.xml.jet b/plugins/org.eclipse.justj.codegen/templates/feature/pom.xml.jet
new file mode 100644
index 0000000..c57b0e6
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/templates/feature/pom.xml.jet
@@ -0,0 +1,37 @@
+<%--
+Copyright (c) 2020 Eclipse contributors and others.
+
+This program and the accompanying materials
+are made available under the terms of the Eclipse Public License 2.0
+which accompanies this distribution, and is available at
+https://www.eclipse.org/legal/epl-2.0/
+
+SPDX-License-Identifier: EPL-2.0
+--%>
+<%@jet package="org.eclipse.justj.codegen.templates.feature" class="POMXML" imports="org.eclipse.justj.codegen.model.*" builder="StringBuilder builder = new StringBuilder()" minimize="true"%>
+<%JVM jvm = (JVM)argument;
+ String jvmName = jvm.getName();
+ Model model = jvm.getModel();
+ String modelName = model.getName();
+ String fullName = modelName + '.' + jvmName;
+ String version = jvm.getVersion();%>
+<?xml version="1.0" encoding="UTF-8"?>
+<%@include file="../copyright.xml.jetinc"%>
+<project
+ xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId><%=modelName%></groupId>
+ <artifactId><%=modelName%>.features</artifactId>
+ <version>1.0.0-SNAPSHOT</version>
+ <relativePath>../../releng/<%=modelName%>.parent/features</relativePath>
+ </parent>
+
+ <groupId><%=modelName%>.features</groupId>
+ <artifactId><%=fullName%></artifactId>
+ <version><%=version%>-SNAPSHOT</version>
+ <packaging>eclipse-feature</packaging>
+</project>
diff --git a/plugins/org.eclipse.justj.codegen/templates/fragment/MANIFEST.MF.jet b/plugins/org.eclipse.justj.codegen/templates/fragment/MANIFEST.MF.jet
new file mode 100644
index 0000000..1052edc
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/templates/fragment/MANIFEST.MF.jet
@@ -0,0 +1,30 @@
+<%@jet package="org.eclipse.justj.codegen.templates.fragment" class="Manifest" imports="java.util.Iterator java.util.Map.Entry java.util.Set org.eclipse.justj.codegen.model.* org.eclipse.justj.codegen.model.util.Generator" builder="StringBuilder builder = new StringBuilder()" minimize="true"%>
+<%Variant variant = (Variant)argument;
+ String os = variant.getOs();
+ String arch = variant.getArch();
+ JVM jvm = variant.getJVM();
+ String jvmName = jvm.getName();
+ Model model = jvm.getModel();
+ String modelName = model.getName();
+ String hostName = modelName + '.' + jvmName;
+ String fullName = hostName + '.' + os + '.' + arch;
+ String version = jvm.getVersion();%>
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-SymbolicName: <%=fullName%>;singleton:=true
+Bundle-Version: <%=version%>.qualifier
+Bundle-Localization: fragment
+Bundle-Name: %pluginName
+Bundle-Vendor: %providerName
+Fragment-Host: <%=hostName%>;bundle-version="<%=Generator.getVersionRange(version)%>"
+Eclipse-BundleShape: dir
+Eclipse-PlatformFilter: (& (osgi.os=<%=os%>) (osgi.arch=<%=arch%>))
+Automatic-Module-Name: <%=fullName%>
+Provide-Capability: <%%>
+<%for (Iterator<Entry<String, Set<String>>> it = Generator.getEECapabilities(version).entrySet().iterator(); it.hasNext();) {
+ Entry<String, Set<String>> entry = it.next();%>
+ <%for (Iterator<String> it2 = entry.getValue().iterator(); it2.hasNext();) {
+ String eeVersion = it2.next();%>
+ osgi.ee;osgi.ee="<%=entry.getKey()%>";version:Version="<%=eeVersion%>"<%if (it.hasNext() || it2.hasNext()) {%>,<%}%>
+ <%}%>
+<%}%>
diff --git a/plugins/org.eclipse.justj.codegen/templates/fragment/about.mappings.jet b/plugins/org.eclipse.justj.codegen/templates/fragment/about.mappings.jet
new file mode 100644
index 0000000..90b1f65
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/templates/fragment/about.mappings.jet
@@ -0,0 +1,13 @@
+<%--
+Copyright (c) 2020 Eclipse contributors and others.
+
+This program and the accompanying materials
+are made available under the terms of the Eclipse Public License 2.0
+which accompanies this distribution, and is available at
+https://www.eclipse.org/legal/epl-2.0/
+
+SPDX-License-Identifier: EPL-2.0
+--%>
+<%@jet package="org.eclipse.justj.codegen.templates.fragment" class="AboutMappings" imports="" builder="StringBuilder builder = new StringBuilder()" minimize="true"%>
+0=${build.id}
+1=${git.commit}
diff --git a/plugins/org.eclipse.justj.codegen/templates/fragment/build.properties.jet b/plugins/org.eclipse.justj.codegen/templates/fragment/build.properties.jet
new file mode 100644
index 0000000..8a1ff98
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/templates/fragment/build.properties.jet
@@ -0,0 +1,18 @@
+<%--
+Copyright (c) 2020 Eclipse contributors and others.
+
+This program and the accompanying materials
+are made available under the terms of the Eclipse Public License 2.0
+which accompanies this distribution, and is available at
+https://www.eclipse.org/legal/epl-2.0/
+
+SPDX-License-Identifier: EPL-2.0
+--%>
+<%@jet package="org.eclipse.justj.codegen.templates.fragment" class="BuildProperties" imports="" builder="StringBuilder builder = new StringBuilder()" minimize="true"%>
+<%@include file="../copyright.properties.jetinc"%>
+
+bin.includes = META-INF/,\
+ about.html,\
+ about.mappings,\
+ fragment.properties,\
+ jre/
diff --git a/plugins/org.eclipse.justj.codegen/templates/fragment/dot.gitignore.jet b/plugins/org.eclipse.justj.codegen/templates/fragment/dot.gitignore.jet
new file mode 100644
index 0000000..11ab183
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/templates/fragment/dot.gitignore.jet
@@ -0,0 +1,13 @@
+<%--
+Copyright (c) 2020 Eclipse contributors and others.
+
+This program and the accompanying materials
+are made available under the terms of the Eclipse Public License 2.0
+which accompanies this distribution, and is available at
+https://www.eclipse.org/legal/epl-2.0/
+
+SPDX-License-Identifier: EPL-2.0
+--%>
+<%@jet package="org.eclipse.justj.codegen.templates.fragment" class="GitIgnore" imports="" builder="StringBuilder builder = new StringBuilder()" minimize="true"%>
+*
+!.gitignore
diff --git a/plugins/org.eclipse.justj.codegen/templates/fragment/dot.project.jet b/plugins/org.eclipse.justj.codegen/templates/fragment/dot.project.jet
new file mode 100644
index 0000000..a185b77
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/templates/fragment/dot.project.jet
@@ -0,0 +1,46 @@
+<%--
+Copyright (c) 2020 Eclipse contributors and others.
+
+This program and the accompanying materials
+are made available under the terms of the Eclipse Public License 2.0
+which accompanies this distribution, and is available at
+https://www.eclipse.org/legal/epl-2.0/
+
+SPDX-License-Identifier: EPL-2.0
+--%>
+<%@jet package="org.eclipse.justj.codegen.templates.fragment" class="ProjectXML" imports="org.eclipse.justj.codegen.model.*" builder="StringBuilder builder = new StringBuilder()" minimize="true"%>
+<%Variant variant = (Variant)argument;
+ String os = variant.getOs();
+ String arch = variant.getArch();
+ JVM jvm = variant.getJVM();
+ String jvmName = jvm.getName();
+ Model model = jvm.getModel();
+ String modelName = model.getName();%>
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name><%=modelName%>.<%=jvmName%>.<%=os%>.<%=arch%></name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</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.justj.codegen/templates/fragment/eclipse.inf.jet b/plugins/org.eclipse.justj.codegen/templates/fragment/eclipse.inf.jet
new file mode 100644
index 0000000..13b9d90
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/templates/fragment/eclipse.inf.jet
@@ -0,0 +1,13 @@
+<%--
+Copyright (c) 2020 Eclipse contributors and others.
+
+This program and the accompanying materials
+are made available under the terms of the Eclipse Public License 2.0
+which accompanies this distribution, and is available at
+https://www.eclipse.org/legal/epl-2.0/
+
+SPDX-License-Identifier: EPL-2.0
+--%>
+<%@jet package="org.eclipse.justj.codegen.templates.fragment" class="EclipseInf" imports="" builder="StringBuilder builder = new StringBuilder()" minimize="true"%>
+jarprocessor.exclude.pack = true
+jarprocessor.exclude.children.pack = true
diff --git a/plugins/org.eclipse.justj.codegen/templates/fragment/fragment.properties.jet b/plugins/org.eclipse.justj.codegen/templates/fragment/fragment.properties.jet
new file mode 100644
index 0000000..319e55f
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/templates/fragment/fragment.properties.jet
@@ -0,0 +1,22 @@
+<%--
+Copyright (c) 2020 Eclipse contributors and others.
+
+This program and the accompanying materials
+are made available under the terms of the Eclipse Public License 2.0
+which accompanies this distribution, and is available at
+https://www.eclipse.org/legal/epl-2.0/
+
+SPDX-License-Identifier: EPL-2.0
+--%>
+<%@jet package="org.eclipse.justj.codegen.templates.fragment" class="FragmentProperties" imports="org.eclipse.justj.codegen.model.*" builder="StringBuilder builder = new StringBuilder()" minimize="true"%>
+<%Variant variant = (Variant)argument;
+String variantLabel = variant.getLabel();
+ JVM jvm = variant.getJVM();
+ String jvmLabel = jvm.getLabel();
+ Model model = jvm.getModel();
+ String modelLabel = model.getLabel();
+ String provider = model.getProvider();%>
+<%@include file="../copyright.properties.jetinc"%>
+
+providerName = <%=provider%>
+pluginName = <%=modelLabel%> <%=jvmLabel%> for <%=variantLabel%>
diff --git a/plugins/org.eclipse.justj.codegen/templates/fragment/org.eclipse.pde.prefs.jet b/plugins/org.eclipse.justj.codegen/templates/fragment/org.eclipse.pde.prefs.jet
new file mode 100644
index 0000000..0820a34
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/templates/fragment/org.eclipse.pde.prefs.jet
@@ -0,0 +1,13 @@
+<%--
+Copyright (c) 2020 Eclipse contributors and others.
+
+This program and the accompanying materials
+are made available under the terms of the Eclipse Public License 2.0
+which accompanies this distribution, and is available at
+https://www.eclipse.org/legal/epl-2.0/
+
+SPDX-License-Identifier: EPL-2.0
+--%>
+<%@jet package="org.eclipse.justj.codegen.templates.fragment" class="PDEPrefs" imports="" builder="StringBuilder builder = new StringBuilder()" minimize="true"%>
+eclipse.preferences.version=1
+compilers.incompatible-environment=2
diff --git a/plugins/org.eclipse.justj.codegen/templates/fragment/p2.inf.jet b/plugins/org.eclipse.justj.codegen/templates/fragment/p2.inf.jet
new file mode 100644
index 0000000..6261a30
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/templates/fragment/p2.inf.jet
@@ -0,0 +1,29 @@
+<%--
+Copyright (c) 2020 Eclipse contributors and others.
+
+This program and the accompanying materials
+are made available under the terms of the Eclipse Public License 2.0
+which accompanies this distribution, and is available at
+https://www.eclipse.org/legal/epl-2.0/
+
+SPDX-License-Identifier: EPL-2.0
+--%>
+<%@jet
+ package="org.eclipse.justj.codegen.templates.fragment"
+ class="P2Inf"
+ imports="java.util.* java.util.Iterator org.eclipse.justj.codegen.model.* org.eclipse.justj.codegen.model.util.Generator"
+ builder="StringBuilder builder = new StringBuilder()"
+ minimize="true"%>
+<%Variant variant = (Variant)argument;%>
+<%@include file="../copyright.properties.jetinc"%>
+
+<%Map<String, Set<String>> touchpoints = Generator.getTouchpoints(variant);
+ for (Map.Entry<String, Set<String>> entry : touchpoints.entrySet()) {
+ String phase = entry.getKey();%>
+instructions.<%=phase%> = \
+ <%for (Iterator<String> it = entry.getValue().iterator(); it.hasNext();) {
+ String instruction = it.next();%>
+ <%=instruction%>;<%if (it.hasNext()) {%>\<%}%>
+ <%}%>
+
+<%}%>
\ No newline at end of file
diff --git a/plugins/org.eclipse.justj.codegen/templates/fragment/pom.xml.jet b/plugins/org.eclipse.justj.codegen/templates/fragment/pom.xml.jet
new file mode 100644
index 0000000..64628ad
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/templates/fragment/pom.xml.jet
@@ -0,0 +1,69 @@
+<%--
+Copyright (c) 2020 Eclipse contributors and others.
+
+This program and the accompanying materials
+are made available under the terms of the Eclipse Public License 2.0
+which accompanies this distribution, and is available at
+https://www.eclipse.org/legal/epl-2.0/
+
+SPDX-License-Identifier: EPL-2.0
+--%>
+<%@jet package="org.eclipse.justj.codegen.templates.fragment" class="POMXML" imports="org.eclipse.justj.codegen.model.*" builder="StringBuilder builder = new StringBuilder()" minimize="true"%>
+<%Variant variant = (Variant)argument;
+ String os = variant.getOs();
+ String arch = variant.getArch();
+ JVM jvm = variant.getJVM();
+ String jvmName = jvm.getName();
+ Model model = jvm.getModel();
+ String modelName = model.getName();
+ String fullName = modelName + '.' + jvmName + '.' + os + '.' + arch;
+ String version = jvm.getVersion();%>
+<?xml version="1.0" encoding="UTF-8"?>
+<%@include file="../copyright.xml.jetinc"%>
+<project
+ xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId><%=modelName%></groupId>
+ <artifactId><%=modelName%>.plugins</artifactId>
+ <version>1.0.0-SNAPSHOT</version>
+ <relativePath>../../releng/<%=modelName%>.parent/plugins</relativePath>
+ </parent>
+
+ <groupId><%=modelName%></groupId>
+ <artifactId><%=fullName%></artifactId>
+ <version><%=version%>-SNAPSHOT</version>
+ <packaging>eclipse-plugin</packaging>
+
+ <build>
+ <resources>
+ <resource>
+ <directory>.</directory>
+ <filtering>true</filtering>
+ <includes>
+ <include>about.mappings</include>
+ </includes>
+ </resource>
+ </resources>
+ <plugins>
+ <plugin>
+ <groupId>org.eclipse.tycho</groupId>
+ <artifactId>target-platform-configuration</artifactId>
+ <version>${tycho-version}</version>
+ <configuration>
+ <resolver>p2</resolver>
+ <environments>
+ <environment>
+ <os><%=os%></os>
+ <arch><%=arch%></arch>
+ </environment>
+ </environments>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+
+</project>
diff --git a/plugins/org.eclipse.justj.codegen/templates/plugin/MANIFEST.MF.jet b/plugins/org.eclipse.justj.codegen/templates/plugin/MANIFEST.MF.jet
new file mode 100644
index 0000000..2e5daa1
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/templates/plugin/MANIFEST.MF.jet
@@ -0,0 +1,26 @@
+<%--
+Copyright (c) 2020 Eclipse contributors and others.
+
+This program and the accompanying materials
+are made available under the terms of the Eclipse Public License 2.0
+which accompanies this distribution, and is available at
+https://www.eclipse.org/legal/epl-2.0/
+
+SPDX-License-Identifier: EPL-2.0
+--%>
+<%@jet package="org.eclipse.justj.codegen.templates.plugin" class="Manifest" imports="org.eclipse.justj.codegen.model.*" builder="StringBuilder builder = new StringBuilder()" minimize="true"%>
+<%JVM jvm = (JVM)argument;
+ String jvmName = jvm.getName();
+ Model model = jvm.getModel();
+ String modelName = model.getName();
+ String fullName = modelName + '.' + jvmName;
+ String version = jvm.getVersion();%>
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-SymbolicName: <%=fullName%>;singleton:=true
+Bundle-Version: <%=version%>.qualifier
+Bundle-ClassPath: .
+Bundle-Name: %pluginName
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Automatic-Module-Name: <%=fullName%>
diff --git a/plugins/org.eclipse.justj.codegen/templates/plugin/about.ini.jet b/plugins/org.eclipse.justj.codegen/templates/plugin/about.ini.jet
new file mode 100644
index 0000000..bb2912b
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/templates/plugin/about.ini.jet
@@ -0,0 +1,24 @@
+<%--
+Copyright (c) 2020 Eclipse contributors and others.
+
+This program and the accompanying materials
+are made available under the terms of the Eclipse Public License 2.0
+which accompanies this distribution, and is available at
+https://www.eclipse.org/legal/epl-2.0/
+
+SPDX-License-Identifier: EPL-2.0
+--%>
+<%@jet package="org.eclipse.justj.codegen.templates.plugin" class="AboutIni" imports="org.eclipse.justj.codegen.model.*" builder="StringBuilder builder = new StringBuilder()" minimize="true"%>
+<%JVM jvm = (JVM)argument;
+ Model model = jvm.getModel();
+ String providerImageName = model.getProviderImageName();%>
+<%@include file="../copyright.properties.jetinc"%>
+
+# Property "aboutText" contains blurb for "About" dialog (translated)
+aboutText=%featureText
+
+# Property "featureImage" contains path to feature image (32x32)
+featureImage=<%=providerImageName%>
+
+# Property "appName" contains name of the application (translated)
+appName=%featureName
diff --git a/plugins/org.eclipse.justj.codegen/templates/plugin/about.mappings.jet b/plugins/org.eclipse.justj.codegen/templates/plugin/about.mappings.jet
new file mode 100644
index 0000000..5f3ae40
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/templates/plugin/about.mappings.jet
@@ -0,0 +1,13 @@
+<%--
+Copyright (c) 2020 Eclipse contributors and others.
+
+This program and the accompanying materials
+are made available under the terms of the Eclipse Public License 2.0
+which accompanies this distribution, and is available at
+https://www.eclipse.org/legal/epl-2.0/
+
+SPDX-License-Identifier: EPL-2.0
+--%>
+<%@jet package="org.eclipse.justj.codegen.templates.plugin" class="AboutMappings" imports="" builder="StringBuilder builder = new StringBuilder()" minimize="true"%>
+0=${build.id}
+1=${git.commit}
diff --git a/plugins/org.eclipse.justj.codegen/templates/plugin/about.properties.jet b/plugins/org.eclipse.justj.codegen/templates/plugin/about.properties.jet
new file mode 100644
index 0000000..aac9ae1
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/templates/plugin/about.properties.jet
@@ -0,0 +1,31 @@
+<%--
+Copyright (c) 2020 Eclipse contributors and others.
+
+This program and the accompanying materials
+are made available under the terms of the Eclipse Public License 2.0
+which accompanies this distribution, and is available at
+https://www.eclipse.org/legal/epl-2.0/
+
+SPDX-License-Identifier: EPL-2.0
+--%>
+<%@jet package="org.eclipse.justj.codegen.templates.plugin" class="AboutProperties" imports="org.eclipse.justj.codegen.model.* org.eclipse.justj.codegen.model.util.Generator" builder="StringBuilder builder = new StringBuilder()" minimize="true"%>
+<%JVM jvm = (JVM)argument;
+ String jvmLabel = jvm.getLabel();
+ String aboutTextExtra = jvm.getAboutTextExtra();
+ Model model = jvm.getModel();
+ String modelLabel = model.getLabel();%>
+<%@include file="../copyright.properties.jetinc"%>
+
+providerName = Eclipse <%=modelLabel%>
+featureName = <%=modelLabel%> <%=jvmLabel%>
+description = Contains the plug-ins and fragments for the <%=jvmLabel%>
+copyright = <%=Generator.getCopyright(argument, "", "\\n\\" + NL)%>\n
+featureName = <%=modelLabel%> <%=jvmLabel%>
+featureText = <%=modelLabel%> <%=jvmLabel%>\n\
+\n\
+Version: {featureVersion}\n\
+Commit: {1}\n\
+Build: {0}\n\
+\n\
+<%=Generator.getCopyright(argument, "", "\\n\\" + NL)%>\n\
+<%=Generator.composeLines(aboutTextExtra, "", "\\n\\" + NL)%>
\ No newline at end of file
diff --git a/plugins/org.eclipse.justj.codegen/templates/plugin/build.properties.jet b/plugins/org.eclipse.justj.codegen/templates/plugin/build.properties.jet
new file mode 100644
index 0000000..6b7947d
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/templates/plugin/build.properties.jet
@@ -0,0 +1,23 @@
+<%--
+Copyright (c) 2020 Eclipse contributors and others.
+
+This program and the accompanying materials
+are made available under the terms of the Eclipse Public License 2.0
+which accompanies this distribution, and is available at
+https://www.eclipse.org/legal/epl-2.0/
+
+SPDX-License-Identifier: EPL-2.0
+--%>
+<%@jet package="org.eclipse.justj.codegen.templates.plugin" class="BuildProperties" imports="org.eclipse.justj.codegen.model.*" builder="StringBuilder builder = new StringBuilder()" minimize="true"%>
+<%JVM jvm = (JVM)argument;
+ Model model = jvm.getModel();
+ String providerImageName = model.getProviderImageName();%>
+<%@include file="../copyright.properties.jetinc"%>
+
+bin.includes = META-INF/,\
+ about.html,\
+ plugin.properties,\
+ about.ini,\
+ about.mappings,\
+ about.properties,\
+ <%=providerImageName%>
diff --git a/plugins/org.eclipse.justj.codegen/templates/plugin/dot.project.jet b/plugins/org.eclipse.justj.codegen/templates/plugin/dot.project.jet
new file mode 100644
index 0000000..3b738dd
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/templates/plugin/dot.project.jet
@@ -0,0 +1,43 @@
+<%--
+Copyright (c) 2020 Eclipse contributors and others.
+
+This program and the accompanying materials
+are made available under the terms of the Eclipse Public License 2.0
+which accompanies this distribution, and is available at
+https://www.eclipse.org/legal/epl-2.0/
+
+SPDX-License-Identifier: EPL-2.0
+--%>
+<%@jet package="org.eclipse.justj.codegen.templates.plugin" class="ProjectXML" imports="org.eclipse.justj.codegen.model.*" builder="StringBuilder builder = new StringBuilder()" minimize="true"%>
+<%JVM jvm = (JVM)argument;
+ String jvmName = jvm.getName();
+ Model model = jvm.getModel();
+ String modelName = model.getName();%>
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name><%=modelName%>.<%=jvmName%></name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</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.justj.codegen/templates/plugin/p2.inf.jet b/plugins/org.eclipse.justj.codegen/templates/plugin/p2.inf.jet
new file mode 100644
index 0000000..8a13293
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/templates/plugin/p2.inf.jet
@@ -0,0 +1,30 @@
+<%--
+Copyright (c) 2020 Eclipse contributors and others.
+
+This program and the accompanying materials
+are made available under the terms of the Eclipse Public License 2.0
+which accompanies this distribution, and is available at
+https://www.eclipse.org/legal/epl-2.0/
+
+SPDX-License-Identifier: EPL-2.0
+--%>
+<%@jet package="org.eclipse.justj.codegen.templates.plugin" class="P2Inf" imports="org.eclipse.justj.codegen.model.*" builder="StringBuilder builder = new StringBuilder()" minimize="true"%>
+<%JVM jvm = (JVM)argument;
+ String jvmName = jvm.getName();
+ Model model = jvm.getModel();
+ String modelName = model.getName();
+ String fullName = modelName + '.' + jvmName;%>
+<%@include file="../copyright.properties.jetinc"%>
+# Ensure that the applicable implementation fragment gets installed automatically.
+
+<%int count = 0;
+ for (Variant variant : jvm.getVariants()) {
+ ++count;
+ String os = variant.getOs();
+ String arch = variant.getArch();%>
+
+requires.<%=count%>.namespace = org.eclipse.equinox.p2.iu
+requires.<%=count%>.name = <%=fullName%>.<%=os%>.<%=arch%>
+requires.<%=count%>.range = [$version$,$version$]
+requires.<%=count%>.filter = (&(osgi.os=<%=os%>)(osgi.arch=<%=arch%>)(!(<%=modelName%>.buildtime=true)))
+<%}%>
diff --git a/plugins/org.eclipse.justj.codegen/templates/plugin/plugin.properties.jet b/plugins/org.eclipse.justj.codegen/templates/plugin/plugin.properties.jet
new file mode 100644
index 0000000..1781474
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/templates/plugin/plugin.properties.jet
@@ -0,0 +1,20 @@
+<%--
+Copyright (c) 2020 Eclipse contributors and others.
+
+This program and the accompanying materials
+are made available under the terms of the Eclipse Public License 2.0
+which accompanies this distribution, and is available at
+https://www.eclipse.org/legal/epl-2.0/
+
+SPDX-License-Identifier: EPL-2.0
+--%>
+<%@jet package="org.eclipse.justj.codegen.templates.plugin" class="PluginProperties" imports="org.eclipse.justj.codegen.model.*" builder="StringBuilder builder = new StringBuilder()" minimize="true"%>
+<%JVM jvm = (JVM)argument;
+ String jvmLabel = jvm.getLabel();
+ Model model = jvm.getModel();
+ String modelLabel = model.getLabel();
+ String provider = model.getProvider();%>
+<%@include file="../copyright.properties.jetinc"%>
+
+providerName = <%=provider%>
+pluginName = <%=modelLabel%> <%=jvmLabel%>
diff --git a/plugins/org.eclipse.justj.codegen/templates/plugin/pom.xml.jet b/plugins/org.eclipse.justj.codegen/templates/plugin/pom.xml.jet
new file mode 100644
index 0000000..c1786d7
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/templates/plugin/pom.xml.jet
@@ -0,0 +1,50 @@
+<%--
+Copyright (c) 2020 Eclipse contributors and others.
+
+This program and the accompanying materials
+are made available under the terms of the Eclipse Public License 2.0
+which accompanies this distribution, and is available at
+https://www.eclipse.org/legal/epl-2.0/
+
+SPDX-License-Identifier: EPL-2.0
+--%>
+<%@jet package="org.eclipse.justj.codegen.templates.plugin" class="POMXML" imports="org.eclipse.justj.codegen.model.*" builder="StringBuilder builder = new StringBuilder()" minimize="true"%>
+<%JVM jvm = (JVM)argument;
+ String jvmName = jvm.getName();
+ Model model = jvm.getModel();
+ String modelName = model.getName();
+ String fullName = modelName + '.' + jvmName;
+ String version = jvm.getVersion();%>
+<?xml version="1.0" encoding="UTF-8"?>
+<%@include file="../copyright.xml.jetinc"%>
+<project
+ xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId><%=modelName%></groupId>
+ <artifactId><%=modelName%>.plugins</artifactId>
+ <version>1.0.0-SNAPSHOT</version>
+ <relativePath>../../releng/<%=modelName%>.parent/plugins</relativePath>
+ </parent>
+
+ <groupId><%=modelName%></groupId>
+ <artifactId><%=fullName%></artifactId>
+ <version><%=version%>-SNAPSHOT</version>
+ <packaging>eclipse-plugin</packaging>
+
+ <build>
+ <resources>
+ <resource>
+ <directory>.</directory>
+ <filtering>true</filtering>
+ <includes>
+ <include>about.mappings</include>
+ </includes>
+ </resource>
+ </resources>
+ </build>
+
+</project>
diff --git a/plugins/org.eclipse.justj.codegen/templates/pom.xml.jet b/plugins/org.eclipse.justj.codegen/templates/pom.xml.jet
new file mode 100644
index 0000000..ab85748
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/templates/pom.xml.jet
@@ -0,0 +1,30 @@
+<%--
+Copyright (c) 2020 Eclipse contributors and others.
+
+This program and the accompanying materials
+are made available under the terms of the Eclipse Public License 2.0
+which accompanies this distribution, and is available at
+https://www.eclipse.org/legal/epl-2.0/
+
+SPDX-License-Identifier: EPL-2.0
+--%>
+<%@jet package="org.eclipse.justj.codegen.templates" class="POMXML" imports="org.eclipse.justj.codegen.model.*" builder="StringBuilder builder = new StringBuilder()" minimize="true"%>
+<%Model model = (Model)argument;%>
+<?xml version="1.0" encoding="UTF-8"?>
+<%@include file="copyright.xml.jetinc"%>
+<project
+ xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId><%=model.getName()%></groupId>
+ <artifactId>org.eclipse.justj.root</artifactId>
+ <version>1.0.0-SNAPSHOT</version>
+ <packaging>pom</packaging>
+
+ <modules>
+ <module>releng/<%=model.getName()%>.parent</module>
+ </modules>
+
+</project>
diff --git a/plugins/org.eclipse.justj.codegen/templates/releng/parent/dot.project.jet b/plugins/org.eclipse.justj.codegen/templates/releng/parent/dot.project.jet
new file mode 100644
index 0000000..9fe67e2
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/templates/releng/parent/dot.project.jet
@@ -0,0 +1,35 @@
+<%--
+Copyright (c) 2020 Eclipse contributors and others.
+
+This program and the accompanying materials
+are made available under the terms of the Eclipse Public License 2.0
+which accompanies this distribution, and is available at
+https://www.eclipse.org/legal/epl-2.0/
+
+SPDX-License-Identifier: EPL-2.0
+--%>
+<%@jet package="org.eclipse.justj.codegen.templates.releng.parent" class="ProjectXML" imports="org.eclipse.justj.codegen.model.*" builder="StringBuilder builder = new StringBuilder()" minimize="true"%>
+<%Model model = (Model)argument;
+ String name = model.getName();%>
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name><%=name%>.parent</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ </buildSpec>
+ <natures>
+ </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.justj.codegen/templates/releng/parent/features/pom.xml.jet b/plugins/org.eclipse.justj.codegen/templates/releng/parent/features/pom.xml.jet
new file mode 100644
index 0000000..c9cf059
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/templates/releng/parent/features/pom.xml.jet
@@ -0,0 +1,96 @@
+<%--
+Copyright (c) 2020 Eclipse contributors and others.
+
+This program and the accompanying materials
+are made available under the terms of the Eclipse Public License 2.0
+which accompanies this distribution, and is available at
+https://www.eclipse.org/legal/epl-2.0/
+
+SPDX-License-Identifier: EPL-2.0
+--%>
+<%@jet package="org.eclipse.justj.codegen.templates.releng.parent.features" class="POMXML" imports="org.eclipse.justj.codegen.model.*" builder="StringBuilder builder = new StringBuilder()" minimize="true"%>
+<%Model model = (Model)argument;
+ String name = model.getName();%>
+<?xml version="1.0" encoding="UTF-8"?>
+<%@include file="../../../copyright.xml.jetinc"%>
+<project
+ xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId><%=name%></groupId>
+ <artifactId><%=name%>.parent</artifactId>
+ <version>1.0.0-SNAPSHOT</version>
+ <relativePath>..</relativePath>
+ </parent>
+
+ <groupId><%=name%></groupId>
+ <artifactId><%=name%>.features</artifactId>
+ <version>1.0.0-SNAPSHOT</version>
+ <packaging>pom</packaging>
+
+ <modules>
+<%for (JVM jvm : model.getJVMs()) {%>
+ <module>../../../features/<%=name%>.<%=jvm.getName()%>-feature</module>
+<%}%>
+ </modules>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.eclipse.tycho</groupId>
+ <artifactId>tycho-p2-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>default-p2-metadata-default</id>
+ <configuration>
+ <attachP2Metadata>false</attachP2Metadata>
+ </configuration>
+ </execution>
+ <execution>
+ <id>attach-p2-metadata</id>
+ <phase>package</phase>
+ <goals>
+ <goal>p2-metadata</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+ <profiles>
+ <profile>
+ <id>pack-and-sign</id>
+ <activation>
+ <property>
+ <name>PACK_AND_SIGN</name>
+ <value>true</value>
+ </property>
+ </activation>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.eclipse.cbi.maven.plugins</groupId>
+ <artifactId>eclipse-jarsigner-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>sign</id>
+ <goals>
+ <goal>sign</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.eclipse.tycho</groupId>
+ <artifactId>tycho-p2-plugin</artifactId>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ </profiles>
+
+</project>
diff --git a/plugins/org.eclipse.justj.codegen/templates/releng/parent/plugins/pom.xml.jet b/plugins/org.eclipse.justj.codegen/templates/releng/parent/plugins/pom.xml.jet
new file mode 100644
index 0000000..2216739
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/templates/releng/parent/plugins/pom.xml.jet
@@ -0,0 +1,128 @@
+<%--
+Copyright (c) 2020 Eclipse contributors and others.
+
+This program and the accompanying materials
+are made available under the terms of the Eclipse Public License 2.0
+which accompanies this distribution, and is available at
+https://www.eclipse.org/legal/epl-2.0/
+
+SPDX-License-Identifier: EPL-2.0
+--%>
+<%@jet package="org.eclipse.justj.codegen.templates.releng.parent.plugins" class="POMXML" imports="org.eclipse.justj.codegen.model.*" builder="StringBuilder builder = new StringBuilder()" minimize="true"%>
+<%Model model = (Model)argument;
+ String name = model.getName();%>
+<?xml version="1.0" encoding="UTF-8"?>
+<%@include file="../../../copyright.xml.jetinc"%>
+<project
+ xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId><%=name%></groupId>
+ <artifactId><%=name%>.parent</artifactId>
+ <version>1.0.0-SNAPSHOT</version>
+ <relativePath>..</relativePath>
+ </parent>
+
+ <groupId><%=name%></groupId>
+ <artifactId><%=name%>.plugins</artifactId>
+ <version>1.0.0-SNAPSHOT</version>
+ <packaging>pom</packaging>
+
+ <modules>
+<%for (JVM jvm : model.getJVMs()) {%>
+ <module>../../../plugins/<%=name%>.<%=jvm.getName()%></module>
+ <%for (Variant variant : jvm.getVariants()) {%>
+ <module>../../../plugins/<%=name%>.<%=jvm.getName()%>.<%=variant.getOs()%>.<%=variant.getArch()%></module>
+ <%}%>
+<%}%>
+ </modules>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.eclipse.tycho</groupId>
+ <artifactId>tycho-source-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>attach-source</id>
+ <goals>
+ <goal>plugin-source</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+ <profiles>
+ <profile>
+ <id>pack-and-sign</id>
+ <activation>
+ <property>
+ <name>PACK_AND_SIGN</name>
+ <value>true</value>
+ </property>
+ </activation>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.eclipse.tycho.extras</groupId>
+ <artifactId>tycho-pack200a-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>pack200-normalize</id>
+ <goals>
+ <goal>normalize</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.eclipse.cbi.maven.plugins</groupId>
+ <artifactId>eclipse-jarsigner-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>sign</id>
+ <goals>
+ <goal>sign</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.eclipse.tycho.extras</groupId>
+ <artifactId>tycho-pack200b-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>pack200-pack</id>
+ <goals>
+ <goal>pack</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.eclipse.tycho</groupId>
+ <artifactId>tycho-p2-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>attach-p2-metadata</id>
+ <phase>package</phase>
+ <goals>
+ <goal>p2-metadata</goal>
+ </goals>
+ </execution>
+ </executions>
+ <configuration>
+ <defaultP2Metadata>false</defaultP2Metadata>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ </profiles>
+
+</project>
diff --git a/plugins/org.eclipse.justj.codegen/templates/releng/parent/pom.xml.jet b/plugins/org.eclipse.justj.codegen/templates/releng/parent/pom.xml.jet
new file mode 100644
index 0000000..dfbf6e1
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/templates/releng/parent/pom.xml.jet
@@ -0,0 +1,204 @@
+<%--
+Copyright (c) 2020 Eclipse contributors and others.
+
+This program and the accompanying materials
+are made available under the terms of the Eclipse Public License 2.0
+which accompanies this distribution, and is available at
+https://www.eclipse.org/legal/epl-2.0/
+
+SPDX-License-Identifier: EPL-2.0
+--%>
+<%@jet package="org.eclipse.justj.codegen.templates.releng.parent" class="POMXML" imports="org.eclipse.justj.codegen.model.*" builder="StringBuilder builder = new StringBuilder()" minimize="true"%>
+<%Model model = (Model)argument;
+ String name = model.getName();%>
+<?xml version="1.0" encoding="UTF-8"?>
+<%@include file="../../copyright.xml.jetinc"%>
+<project
+ xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId><%=name%></groupId>
+ <artifactId><%=name%>.parent</artifactId>
+ <version>1.0.0-SNAPSHOT</version>
+ <packaging>pom</packaging>
+
+ <properties>
+ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+ <tycho.scmUrl>scm:git:https://git.eclipse.org/r/p/justj/org.eclipse.justj.git</tycho.scmUrl>
+ <tycho-version>1.6.0</tycho-version>
+ <jarsigner-version>1.1.7</jarsigner-version>
+ <os-jvm-flags/>
+ </properties>
+
+ <pluginRepositories>
+ <pluginRepository>
+ <id>eclipse-maven-releases</id>
+ <url>https://repo.eclipse.org/content/repositories/releases</url>
+ </pluginRepository>
+ <pluginRepository>
+ <id>eclipse-cbi-releases</id>
+ <url>https://repo.eclipse.org/content/repositories/cbi-releases</url>
+ </pluginRepository>
+ </pluginRepositories>
+
+ <repositories>
+ <repository>
+ <id>license-feature</id>
+ <url>http://download.eclipse.org/cbi/updates/license/</url>
+ <layout>p2</layout>
+ </repository>
+ </repositories>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.eclipse.tycho</groupId>
+ <artifactId>tycho-maven-plugin</artifactId>
+ <extensions>true</extensions>
+ </plugin>
+ <plugin>
+ <groupId>org.eclipse.tycho</groupId>
+ <artifactId>tycho-p2-publisher-plugin</artifactId>
+ <version>${tycho-version}</version>
+ <configuration>
+ <skip>true</skip>
+ </configuration>
+ </plugin>
+ </plugins>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.eclipse.tycho</groupId>
+ <artifactId>tycho-maven-plugin</artifactId>
+ <version>${tycho-version}</version>
+ <extensions>true</extensions>
+ </plugin>
+ <plugin>
+ <groupId>org.eclipse.tycho</groupId>
+ <artifactId>tycho-packaging-plugin</artifactId>
+ <version>${tycho-version}</version>
+ <configuration>
+ <format>'v'yyyyMMdd-HHmm</format>
+ <sourceReferences>
+ <generate>true</generate>
+ </sourceReferences>
+ <timestampProvider>jgit</timestampProvider>
+ <jgit.ignore>pom.xml</jgit.ignore>
+ <jgit.dirtyWorkingTree>warning</jgit.dirtyWorkingTree>
+ <additionalFileSets>
+ <fileSet>
+ <directory>${project.build.outputDirectory}</directory>
+ <includes>
+ <include>about.mappings</include>
+ </includes>
+ </fileSet>
+ </additionalFileSets>
+ </configuration>
+ <dependencies>
+ <dependency>
+ <groupId>org.eclipse.tycho.extras</groupId>
+ <artifactId>tycho-sourceref-jgit</artifactId>
+ <version>${tycho-version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.tycho.extras</groupId>
+ <artifactId>tycho-buildtimestamp-jgit</artifactId>
+ <version>${tycho-version}</version>
+ </dependency>
+ </dependencies>
+ </plugin>
+ <plugin>
+ <groupId>org.eclipse.tycho</groupId>
+ <artifactId>target-platform-configuration</artifactId>
+ <version>${tycho-version}</version>
+ <configuration>
+ <target>
+ </target>
+
+ <!--executionEnvironmentDefault>JavaSE-${javaVersion}</executionEnvironmentDefault-->
+ <includePackedArtifacts>true</includePackedArtifacts>
+ <environments>
+ <environment>
+ <os>win32</os>
+ <ws>win32</ws>
+ <arch>x86_64</arch>
+ </environment>
+ <environment>
+ <os>macosx</os>
+ <ws>cocoa</ws>
+ <arch>x86_64</arch>
+ </environment>
+ <environment>
+ <os>linux</os>
+ <ws>gtk</ws>
+ <arch>x86_64</arch>
+ </environment>
+ </environments>
+ <dependency-resolution>
+ <extraRequirements>
+ <requirement>
+ <type>p2-installable-unit</type>
+ <id>org.eclipse.license.feature.group</id>
+ <versionRange>0.0.0</versionRange>
+ </requirement>
+ </extraRequirements>
+ <profileProperties>
+ <<%=name%>.buildtime>true</<%=name%>.buildtime>
+ </profileProperties>
+ </dependency-resolution>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.eclipse.tycho</groupId>
+ <artifactId>tycho-source-plugin</artifactId>
+ <version>${tycho-version}</version>
+ </plugin>
+ <plugin>
+ <groupId>org.eclipse.tycho.extras</groupId>
+ <artifactId>tycho-pack200a-plugin</artifactId>
+ <version>${tycho-version}</version>
+ </plugin>
+ <plugin>
+ <groupId>org.eclipse.cbi.maven.plugins</groupId>
+ <artifactId>eclipse-jarsigner-plugin</artifactId>
+ <version>${jarsigner-version}</version>
+ </plugin>
+ <plugin>
+ <groupId>org.eclipse.tycho.extras</groupId>
+ <artifactId>tycho-pack200b-plugin</artifactId>
+ <version>${tycho-version}</version>
+ </plugin>
+ <plugin>
+ <groupId>org.eclipse.tycho</groupId>
+ <artifactId>tycho-p2-plugin</artifactId>
+ <version>${tycho-version}</version>
+ </plugin>
+ <plugin>
+ <groupId>org.eclipse.tycho.extras</groupId>
+ <artifactId>tycho-source-feature-plugin</artifactId>
+ <version>${tycho-version}</version>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+
+ <profiles>
+ <profile>
+ <id>modules</id>
+ <activation>
+ <property>
+ <name>MAVEN_BUILD</name>
+ <value>!false</value>
+ </property>
+ </activation>
+ <modules>
+ <module>features</module>
+ <module>plugins</module>
+ <module>../<%=name%>.site</module>
+ </modules>
+ </profile>
+ </profiles>
+
+</project>
diff --git a/plugins/org.eclipse.justj.codegen/templates/releng/site/category.xml.jet b/plugins/org.eclipse.justj.codegen/templates/releng/site/category.xml.jet
new file mode 100644
index 0000000..53ed467
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/templates/releng/site/category.xml.jet
@@ -0,0 +1,24 @@
+<%--
+Copyright (c) 2020 Eclipse contributors and others.
+
+This program and the accompanying materials
+are made available under the terms of the Eclipse Public License 2.0
+which accompanies this distribution, and is available at
+https://www.eclipse.org/legal/epl-2.0/
+
+SPDX-License-Identifier: EPL-2.0
+--%>
+<%@jet package="org.eclipse.justj.codegen.templates.releng.site" class="CategoryXML" imports="org.eclipse.justj.codegen.model.*" builder="StringBuilder builder = new StringBuilder()" minimize="true"%>
+<%Model model = (Model)argument;
+ String name = model.getName();
+ String label = model.getLabel();%>
+<?xml version="1.0" encoding="UTF-8"?>
+<%@include file="../../copyright.xml.jetinc"%>
+<site>
+<%for (JVM jvm : model.getJVMs()) {%>
+ <feature id="<%=name%>.<%=jvm.getName()%>">
+ <category name="<%=name%>.category"/>
+ </feature>
+<%}%>
+ <category-def name="<%=name%>.category" label="<%=label%>"/>
+</site>
diff --git a/plugins/org.eclipse.justj.codegen/templates/releng/site/dot.project.jet b/plugins/org.eclipse.justj.codegen/templates/releng/site/dot.project.jet
new file mode 100644
index 0000000..fd80f86
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/templates/releng/site/dot.project.jet
@@ -0,0 +1,35 @@
+<%--
+Copyright (c) 2020 Eclipse contributors and others.
+
+This program and the accompanying materials
+are made available under the terms of the Eclipse Public License 2.0
+which accompanies this distribution, and is available at
+https://www.eclipse.org/legal/epl-2.0/
+
+SPDX-License-Identifier: EPL-2.0
+--%>
+<%@jet package="org.eclipse.justj.codegen.templates.releng.site" class="ProjectXML" imports="org.eclipse.justj.codegen.model.*" builder="StringBuilder builder = new StringBuilder()" minimize="true"%>
+<%Model model = (Model)argument;
+ String name = model.getName();%>
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name><%=name%>.site</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ </buildSpec>
+ <natures>
+ </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.justj.codegen/templates/releng/site/pom.xml.jet b/plugins/org.eclipse.justj.codegen/templates/releng/site/pom.xml.jet
new file mode 100644
index 0000000..60b6068
--- /dev/null
+++ b/plugins/org.eclipse.justj.codegen/templates/releng/site/pom.xml.jet
@@ -0,0 +1,47 @@
+<%--
+Copyright (c) 2020 Eclipse contributors and others.
+
+This program and the accompanying materials
+are made available under the terms of the Eclipse Public License 2.0
+which accompanies this distribution, and is available at
+https://www.eclipse.org/legal/epl-2.0/
+
+SPDX-License-Identifier: EPL-2.0
+--%>
+<%@jet package="org.eclipse.justj.codegen.templates.releng.site" class="POMXML" imports="org.eclipse.justj.codegen.model.*" builder="StringBuilder builder = new StringBuilder()" minimize="true"%>
+<%Model model = (Model)argument;
+ String name = model.getName();
+ String label = model.getLabel();%>
+<?xml version="1.0" encoding="UTF-8"?>
+<%@include file="../../copyright.xml.jetinc"%>
+<project
+ xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId><%=name%></groupId>
+ <artifactId><%=name%>.parent</artifactId>
+ <version>1.0.0-SNAPSHOT</version>
+ <relativePath>../<%=name%>.parent</relativePath>
+ </parent>
+
+ <groupId><%=name%></groupId>
+ <artifactId><%=name%>.site</artifactId>
+ <version>1.0.0-SNAPSHOT</version>
+ <packaging>eclipse-repository</packaging>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.eclipse.tycho</groupId>
+ <artifactId>tycho-p2-repository-plugin</artifactId>
+ <version>${tycho-version}</version>
+ <configuration>
+ <repositoryName><%=label%> Build ${build.id}</repositoryName>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/plugins/org.eclipse.justj.tools/.project b/plugins/org.eclipse.justj.tools/.project
new file mode 100644
index 0000000..0b2eb77
--- /dev/null
+++ b/plugins/org.eclipse.justj.tools/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.justj.tools</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</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.justj.tools/META-INF/MANIFEST.MF b/plugins/org.eclipse.justj.tools/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..43b2e3f
--- /dev/null
+++ b/plugins/org.eclipse.justj.tools/META-INF/MANIFEST.MF
@@ -0,0 +1,9 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-SymbolicName: org.eclipse.justj.tools;singleton:=true
+Bundle-Version: 0.1.0.qualifier
+Bundle-ClassPath: .
+Bundle-Name: %pluginName
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Automatic-Module-Name: org.eclipse.justj.tools
diff --git a/plugins/org.eclipse.justj.tools/about.html b/plugins/org.eclipse.justj.tools/about.html
new file mode 100644
index 0000000..164f781
--- /dev/null
+++ b/plugins/org.eclipse.justj.tools/about.html
@@ -0,0 +1,36 @@
+<!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>November 30, 2017</p>
+ <h3>License</h3>
+
+ <p>
+ The Eclipse Foundation makes available all content in this plug-in
+ ("Content"). Unless otherwise indicated below, the Content
+ is provided to you under the terms and conditions of the Eclipse
+ Public License Version 2.0 ("EPL"). A copy of the EPL is
+ available at <a href="http://www.eclipse.org/legal/epl-2.0">http://www.eclipse.org/legal/epl-2.0</a>.
+ For purposes of the EPL, "Program" 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
+ ("Redistributor") and different terms and conditions may
+ apply to your use of any object code in the Content. Check the
+ Redistributor's license that was provided with the Content. If no such
+ license exists, contact the Redistributor. Unless otherwise indicated
+ below, the terms and conditions of the EPL still apply to any source
+ code in the Content and such source code may be obtained at <a
+ href="http://www.eclipse.org/">http://www.eclipse.org</a>.
+ </p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.justj.tools/about.ini b/plugins/org.eclipse.justj.tools/about.ini
new file mode 100644
index 0000000..ad04b23
--- /dev/null
+++ b/plugins/org.eclipse.justj.tools/about.ini
@@ -0,0 +1,18 @@
+# Copyright (c) 2020 Eclipse contributors and others.
+#
+# This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License 2.0
+# which accompanies this distribution, and is available at
+# https://www.eclipse.org/legal/epl-2.0/
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+
+# Property "aboutText" contains blurb for "About" dialog (translated)
+aboutText=%featureText
+
+# Property "featureImage" contains path to feature image (32x32)
+featureImage=justj32.png
+
+# Property "appName" contains name of the application (translated)
+appName=%featureName
diff --git a/plugins/org.eclipse.justj.tools/about.mappings b/plugins/org.eclipse.justj.tools/about.mappings
new file mode 100644
index 0000000..9c84f0a
--- /dev/null
+++ b/plugins/org.eclipse.justj.tools/about.mappings
@@ -0,0 +1,2 @@
+0=${build.id}
+1=${git.commit}
diff --git a/plugins/org.eclipse.justj.tools/about.properties b/plugins/org.eclipse.justj.tools/about.properties
new file mode 100644
index 0000000..044951b
--- /dev/null
+++ b/plugins/org.eclipse.justj.tools/about.properties
@@ -0,0 +1,38 @@
+# Copyright (c) 2020 Eclipse contributors and others.
+#
+# This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License 2.0
+# which accompanies this distribution, and is available at
+# https://www.eclipse.org/legal/epl-2.0/
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+
+providerName = Eclipse JustJ
+featureName = JustJ Tools
+description = Contains the plug-ins and fragments for the Tools
+copyright = Copyright (c) 2020 Eclipse contributors and others.\n\
+\n\
+This program and the accompanying materials\n\
+are made available under the terms of the Eclipse Public License 2.0\n\
+which accompanies this distribution, and is available at\n\
+https://www.eclipse.org/legal/epl-2.0/\n\
+\n\
+SPDX-License-Identifier: EPL-2.0\n
+featureName = JustJ Tools
+featureText = JustJ Tools\n\
+\n\
+Version: {featureVersion}\n\
+Commit: {1}\n\
+Build: {0}\n\
+\n\
+Copyright (c) 2020 Eclipse contributors and others.\n\
+\n\
+This program and the accompanying materials\n\
+are made available under the terms of the Eclipse Public License 2.0\n\
+which accompanies this distribution, and is available at\n\
+https://www.eclipse.org/legal/epl-2.0/\n\
+\n\
+SPDX-License-Identifier: EPL-2.0\n\
+\n\
+Visit http://www.eclipse.org/justj\n\
diff --git a/plugins/org.eclipse.justj.tools/build.properties b/plugins/org.eclipse.justj.tools/build.properties
new file mode 100644
index 0000000..e699607
--- /dev/null
+++ b/plugins/org.eclipse.justj.tools/build.properties
@@ -0,0 +1,17 @@
+# Copyright (c) 2020 Eclipse contributors and others.
+#
+# This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License 2.0
+# which accompanies this distribution, and is available at
+# https://www.eclipse.org/legal/epl-2.0/
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+
+bin.includes = META-INF/,\
+ about.html,\
+ plugin.properties,\
+ about.ini,\
+ about.mappings,\
+ about.properties,\
+ justj32.png
diff --git a/plugins/org.eclipse.justj.tools/justj32.png b/plugins/org.eclipse.justj.tools/justj32.png
new file mode 100644
index 0000000..b8092a2
--- /dev/null
+++ b/plugins/org.eclipse.justj.tools/justj32.png
Binary files differ
diff --git a/plugins/org.eclipse.justj.tools/plugin.properties b/plugins/org.eclipse.justj.tools/plugin.properties
new file mode 100644
index 0000000..fa13ce2
--- /dev/null
+++ b/plugins/org.eclipse.justj.tools/plugin.properties
@@ -0,0 +1,12 @@
+# Copyright (c) 2020 Eclipse contributors and others.
+#
+# This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License 2.0
+# which accompanies this distribution, and is available at
+# https://www.eclipse.org/legal/epl-2.0/
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+
+providerName = Eclipse JustJ
+pluginName = JustJ Tools
diff --git a/plugins/org.eclipse.justj.tools/pom.xml b/plugins/org.eclipse.justj.tools/pom.xml
new file mode 100644
index 0000000..f2a464f
--- /dev/null
+++ b/plugins/org.eclipse.justj.tools/pom.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Copyright (c) 2020 Eclipse contributors and others.
+
+This program and the accompanying materials
+are made available under the terms of the Eclipse Public License 2.0
+which accompanies this distribution, and is available at
+https://www.eclipse.org/legal/epl-2.0/
+
+SPDX-License-Identifier: EPL-2.0
+-->
+<project
+ xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.eclipse.justj</groupId>
+ <artifactId>org.eclipse.justj.plugins</artifactId>
+ <version>1.0.0-SNAPSHOT</version>
+ <relativePath>../../releng/org.eclipse.justj.tools.parent/plugins</relativePath>
+ </parent>
+
+ <groupId>org.eclipse.justj</groupId>
+ <artifactId>org.eclipse.justj.tools</artifactId>
+ <version>0.1.0-SNAPSHOT</version>
+ <packaging>eclipse-plugin</packaging>
+
+ <build>
+ <resources>
+ <resource>
+ <directory>.</directory>
+ <filtering>true</filtering>
+ <includes>
+ <include>about.mappings</include>
+ </includes>
+ </resource>
+ </resources>
+ </build>
+
+</project>
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..40d3f96
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Copyright (c) 2020 Eclipse contributors and others.
+
+This program and the accompanying materials
+are made available under the terms of the Eclipse Public License 2.0
+which accompanies this distribution, and is available at
+https://www.eclipse.org/legal/epl-2.0/
+
+SPDX-License-Identifier: EPL-2.0
+-->
+<project
+ xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.eclipse.justj</groupId>
+ <artifactId>org.eclipse.justj.root</artifactId>
+ <version>1.0.0-SNAPSHOT</version>
+ <packaging>pom</packaging>
+
+ <modules>
+ <module>releng/org.eclipse.justj.tools.parent</module>
+ </modules>
+
+</project>
diff --git a/releng/org.eclipse.justj.tools.parent/.project b/releng/org.eclipse.justj.tools.parent/.project
new file mode 100644
index 0000000..04b438e
--- /dev/null
+++ b/releng/org.eclipse.justj.tools.parent/.project
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.justj.tools.parent</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ </buildSpec>
+ <natures>
+ </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/releng/org.eclipse.justj.tools.parent/Build JustJ Tools.launch b/releng/org.eclipse.justj.tools.parent/Build JustJ Tools.launch
new file mode 100644
index 0000000..5dd1866
--- /dev/null
+++ b/releng/org.eclipse.justj.tools.parent/Build JustJ Tools.launch
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.ui.externaltools.ProgramLaunchConfigurationType">
+<mapAttribute key="org.eclipse.debug.core.environmentVariables">
+<mapEntry key="JAVA_HOME" value="${maven.build.java.home}"/>
+</mapAttribute>
+<listAttribute key="org.eclipse.debug.ui.favoriteGroups">
+<listEntry value="org.eclipse.ui.externaltools.launchGroup"/>
+</listAttribute>
+<stringAttribute key="org.eclipse.ui.externaltools.ATTR_LAUNCH_CONFIGURATION_BUILD_SCOPE" value="${none}"/>
+<stringAttribute key="org.eclipse.ui.externaltools.ATTR_LOCATION" value="${maven.build.command}"/>
+<stringAttribute key="org.eclipse.ui.externaltools.ATTR_TOOL_ARGUMENTS" value="-D clean verify"/>
+<stringAttribute key="org.eclipse.ui.externaltools.ATTR_WORKING_DIRECTORY" value="${project_loc:/org.eclipse.justj.tools.parent}/../.."/>
+</launchConfiguration>
diff --git a/releng/org.eclipse.justj.tools.parent/features/pom.xml b/releng/org.eclipse.justj.tools.parent/features/pom.xml
new file mode 100644
index 0000000..be5c183
--- /dev/null
+++ b/releng/org.eclipse.justj.tools.parent/features/pom.xml
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Copyright (c) 2020 Eclipse contributors and others.
+
+This program and the accompanying materials
+are made available under the terms of the Eclipse Public License 2.0
+which accompanies this distribution, and is available at
+https://www.eclipse.org/legal/epl-2.0/
+
+SPDX-License-Identifier: EPL-2.0
+-->
+<project
+ xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.eclipse.justj</groupId>
+ <artifactId>org.eclipse.justj.tools.parent</artifactId>
+ <version>1.0.0-SNAPSHOT</version>
+ <relativePath>..</relativePath>
+ </parent>
+
+ <groupId>org.eclipse.justj</groupId>
+ <artifactId>org.eclipse.justj.features</artifactId>
+ <version>1.0.0-SNAPSHOT</version>
+ <packaging>pom</packaging>
+
+ <modules>
+ <module>../../../features/org.eclipse.justj.tools-feature</module>
+ </modules>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.eclipse.tycho</groupId>
+ <artifactId>tycho-p2-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>default-p2-metadata-default</id>
+ <configuration>
+ <attachP2Metadata>false</attachP2Metadata>
+ </configuration>
+ </execution>
+ <execution>
+ <id>attach-p2-metadata</id>
+ <phase>package</phase>
+ <goals>
+ <goal>p2-metadata</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+ <profiles>
+ <profile>
+ <id>pack-and-sign</id>
+ <activation>
+ <property>
+ <name>PACK_AND_SIGN</name>
+ <value>true</value>
+ </property>
+ </activation>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.eclipse.cbi.maven.plugins</groupId>
+ <artifactId>eclipse-jarsigner-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>sign</id>
+ <goals>
+ <goal>sign</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.eclipse.tycho</groupId>
+ <artifactId>tycho-p2-plugin</artifactId>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ </profiles>
+
+</project>
diff --git a/releng/org.eclipse.justj.tools.parent/plugins/pom.xml b/releng/org.eclipse.justj.tools.parent/plugins/pom.xml
new file mode 100644
index 0000000..5478c0b
--- /dev/null
+++ b/releng/org.eclipse.justj.tools.parent/plugins/pom.xml
@@ -0,0 +1,122 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Copyright (c) 2020 Eclipse contributors and others.
+
+This program and the accompanying materials
+are made available under the terms of the Eclipse Public License 2.0
+which accompanies this distribution, and is available at
+https://www.eclipse.org/legal/epl-2.0/
+
+SPDX-License-Identifier: EPL-2.0
+-->
+<project
+ xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.eclipse.justj</groupId>
+ <artifactId>org.eclipse.justj.tools.parent</artifactId>
+ <version>1.0.0-SNAPSHOT</version>
+ <relativePath>..</relativePath>
+ </parent>
+
+ <groupId>org.eclipse.justj</groupId>
+ <artifactId>org.eclipse.justj.plugins</artifactId>
+ <version>1.0.0-SNAPSHOT</version>
+ <packaging>pom</packaging>
+
+ <modules>
+ <module>../../../plugins/org.eclipse.justj.codegen</module>
+ <module>../../../plugins/org.eclipse.justj.codegen.edit</module>
+ <module>../../../plugins/org.eclipse.justj.codegen.editor</module>
+ <module>../../../plugins/org.eclipse.justj.tools</module>
+ </modules>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.eclipse.tycho</groupId>
+ <artifactId>tycho-source-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>attach-source</id>
+ <goals>
+ <goal>plugin-source</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+ <profiles>
+ <profile>
+ <id>pack-and-sign</id>
+ <activation>
+ <property>
+ <name>PACK_AND_SIGN</name>
+ <value>true</value>
+ </property>
+ </activation>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.eclipse.tycho.extras</groupId>
+ <artifactId>tycho-pack200a-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>pack200-normalize</id>
+ <goals>
+ <goal>normalize</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.eclipse.cbi.maven.plugins</groupId>
+ <artifactId>eclipse-jarsigner-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>sign</id>
+ <goals>
+ <goal>sign</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.eclipse.tycho.extras</groupId>
+ <artifactId>tycho-pack200b-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>pack200-pack</id>
+ <goals>
+ <goal>pack</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.eclipse.tycho</groupId>
+ <artifactId>tycho-p2-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>attach-p2-metadata</id>
+ <phase>package</phase>
+ <goals>
+ <goal>p2-metadata</goal>
+ </goals>
+ </execution>
+ </executions>
+ <configuration>
+ <defaultP2Metadata>false</defaultP2Metadata>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ </profiles>
+
+</project>
diff --git a/releng/org.eclipse.justj.tools.parent/pom.xml b/releng/org.eclipse.justj.tools.parent/pom.xml
new file mode 100644
index 0000000..af0c982
--- /dev/null
+++ b/releng/org.eclipse.justj.tools.parent/pom.xml
@@ -0,0 +1,205 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Copyright (c) 2020 Eclipse contributors and others.
+
+This program and the accompanying materials
+are made available under the terms of the Eclipse Public License 2.0
+which accompanies this distribution, and is available at
+https://www.eclipse.org/legal/epl-2.0/
+
+SPDX-License-Identifier: EPL-2.0
+-->
+<project
+ xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.eclipse.justj</groupId>
+ <artifactId>org.eclipse.justj.tools.parent</artifactId>
+ <version>1.0.0-SNAPSHOT</version>
+ <packaging>pom</packaging>
+
+ <properties>
+ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+ <tycho.scmUrl>scm:git:https://git.eclipse.org/r/p/justj/org.eclipse.justj.git</tycho.scmUrl>
+ <tycho-version>1.6.0</tycho-version>
+ <jarsigner-version>1.1.7</jarsigner-version>
+ <os-jvm-flags/>
+ </properties>
+
+ <pluginRepositories>
+ <pluginRepository>
+ <id>eclipse-maven-releases</id>
+ <url>https://repo.eclipse.org/content/repositories/releases</url>
+ </pluginRepository>
+ <pluginRepository>
+ <id>eclipse-cbi-releases</id>
+ <url>https://repo.eclipse.org/content/repositories/cbi-releases</url>
+ </pluginRepository>
+ </pluginRepositories>
+
+ <repositories>
+ <repository>
+ <id>license-feature</id>
+ <url>http://download.eclipse.org/cbi/updates/license/</url>
+ <layout>p2</layout>
+ </repository>
+ <repository>
+ <id>eclipse-2020-06</id>
+ <url>http://download.eclipse.org/releases/2020-06</url>
+ <layout>p2</layout>
+ </repository>
+ </repositories>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.eclipse.tycho</groupId>
+ <artifactId>tycho-maven-plugin</artifactId>
+ <extensions>true</extensions>
+ </plugin>
+ <plugin>
+ <groupId>org.eclipse.tycho</groupId>
+ <artifactId>tycho-p2-publisher-plugin</artifactId>
+ <version>${tycho-version}</version>
+ <configuration>
+ <skip>true</skip>
+ </configuration>
+ </plugin>
+ </plugins>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.eclipse.tycho</groupId>
+ <artifactId>tycho-maven-plugin</artifactId>
+ <version>${tycho-version}</version>
+ <extensions>true</extensions>
+ </plugin>
+ <plugin>
+ <groupId>org.eclipse.tycho</groupId>
+ <artifactId>tycho-packaging-plugin</artifactId>
+ <version>${tycho-version}</version>
+ <configuration>
+ <format>'v'yyyyMMdd-HHmm</format>
+ <sourceReferences>
+ <generate>true</generate>
+ </sourceReferences>
+ <timestampProvider>jgit</timestampProvider>
+ <jgit.ignore>pom.xml</jgit.ignore>
+ <jgit.dirtyWorkingTree>warning</jgit.dirtyWorkingTree>
+ <additionalFileSets>
+ <fileSet>
+ <directory>${project.build.outputDirectory}</directory>
+ <includes>
+ <include>about.mappings</include>
+ </includes>
+ </fileSet>
+ </additionalFileSets>
+ </configuration>
+ <dependencies>
+ <dependency>
+ <groupId>org.eclipse.tycho.extras</groupId>
+ <artifactId>tycho-sourceref-jgit</artifactId>
+ <version>${tycho-version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.tycho.extras</groupId>
+ <artifactId>tycho-buildtimestamp-jgit</artifactId>
+ <version>${tycho-version}</version>
+ </dependency>
+ </dependencies>
+ </plugin>
+ <plugin>
+ <groupId>org.eclipse.tycho</groupId>
+ <artifactId>target-platform-configuration</artifactId>
+ <version>${tycho-version}</version>
+ <configuration>
+ <target>
+ </target>
+
+ <!--executionEnvironmentDefault>JavaSE-${javaVersion}</executionEnvironmentDefault-->
+ <includePackedArtifacts>true</includePackedArtifacts>
+ <environments>
+ <environment>
+ <os>win32</os>
+ <ws>win32</ws>
+ <arch>x86_64</arch>
+ </environment>
+ <environment>
+ <os>macosx</os>
+ <ws>cocoa</ws>
+ <arch>x86_64</arch>
+ </environment>
+ <environment>
+ <os>linux</os>
+ <ws>gtk</ws>
+ <arch>x86_64</arch>
+ </environment>
+ </environments>
+ <dependency-resolution>
+ <extraRequirements>
+ <requirement>
+ <type>p2-installable-unit</type>
+ <id>org.eclipse.license.feature.group</id>
+ <versionRange>0.0.0</versionRange>
+ </requirement>
+ </extraRequirements>
+ <profileProperties>
+ <org.eclipse.justj.buildtime>true</org.eclipse.justj.buildtime>
+ </profileProperties>
+ </dependency-resolution>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.eclipse.tycho</groupId>
+ <artifactId>tycho-source-plugin</artifactId>
+ <version>${tycho-version}</version>
+ </plugin>
+ <plugin>
+ <groupId>org.eclipse.tycho.extras</groupId>
+ <artifactId>tycho-pack200a-plugin</artifactId>
+ <version>${tycho-version}</version>
+ </plugin>
+ <plugin>
+ <groupId>org.eclipse.cbi.maven.plugins</groupId>
+ <artifactId>eclipse-jarsigner-plugin</artifactId>
+ <version>${jarsigner-version}</version>
+ </plugin>
+ <plugin>
+ <groupId>org.eclipse.tycho.extras</groupId>
+ <artifactId>tycho-pack200b-plugin</artifactId>
+ <version>${tycho-version}</version>
+ </plugin>
+ <plugin>
+ <groupId>org.eclipse.tycho</groupId>
+ <artifactId>tycho-p2-plugin</artifactId>
+ <version>${tycho-version}</version>
+ </plugin>
+ <plugin>
+ <groupId>org.eclipse.tycho.extras</groupId>
+ <artifactId>tycho-source-feature-plugin</artifactId>
+ <version>${tycho-version}</version>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+
+ <profiles>
+ <profile>
+ <id>modules</id>
+ <activation>
+ <property>
+ <name>MAVEN_BUILD</name>
+ <value>!false</value>
+ </property>
+ </activation>
+ <modules>
+ <module>features</module>
+ <module>plugins</module>
+ <module>../org.eclipse.justj.tools.site</module>
+ </modules>
+ </profile>
+ </profiles>
+
+</project>
diff --git a/releng/org.eclipse.justj.tools.releng/JustJ.setup b/releng/org.eclipse.justj.tools.releng/JustJ.setup
new file mode 100644
index 0000000..defdffb
--- /dev/null
+++ b/releng/org.eclipse.justj.tools.releng/JustJ.setup
@@ -0,0 +1,469 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<setup:Project
+ xmi:version="2.0"
+ xmlns:xmi="http://www.omg.org/XMI"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:git="http://www.eclipse.org/oomph/setup/git/1.0"
+ xmlns:jdt="http://www.eclipse.org/oomph/setup/jdt/1.0"
+ xmlns:predicates="http://www.eclipse.org/oomph/predicates/1.0"
+ xmlns:setup="http://www.eclipse.org/oomph/setup/1.0"
+ xmlns:setup.p2="http://www.eclipse.org/oomph/setup/p2/1.0"
+ xmlns:setup.targlets="http://www.eclipse.org/oomph/setup/targlets/1.0"
+ xmlns:setup.workingsets="http://www.eclipse.org/oomph/setup/workingsets/1.0"
+ xsi:schemaLocation="http://www.eclipse.org/oomph/setup/git/1.0 http://git.eclipse.org/c/oomph/org.eclipse.oomph.git/plain/setups/models/Git.ecore http://www.eclipse.org/oomph/setup/jdt/1.0 http://git.eclipse.org/c/oomph/org.eclipse.oomph.git/plain/setups/models/JDT.ecore http://www.eclipse.org/oomph/predicates/1.0 http://git.eclipse.org/c/oomph/org.eclipse.oomph.git/plain/setups/models/Predicates.ecore http://www.eclipse.org/oomph/setup/targlets/1.0 http://git.eclipse.org/c/oomph/org.eclipse.oomph.git/plain/setups/models/SetupTarglets.ecore http://www.eclipse.org/oomph/setup/workingsets/1.0 http://git.eclipse.org/c/oomph/org.eclipse.oomph.git/plain/setups/models/SetupWorkingSets.ecore"
+ name="justj"
+ label="JustJ">
+ <setupTask
+ xsi:type="setup:EclipseIniTask"
+ option="-Xmx"
+ value="1024m"
+ vm="true">
+ <description>Set the heap space needed to work with the projects of ${scope.project.label}</description>
+ </setupTask>
+ <setupTask
+ xsi:type="setup:ResourceCreationTask"
+ excludedTriggers="STARTUP MANUAL"
+ content="<?xml version="1.0" encoding="UTF-8"?>
<section name="Workbench">
	<section name="org.eclipse.jdt.internal.ui.packageview.PackageExplorerPart">
		<item value="true" key="group_libraries"/>
		<item value="false" key="linkWithEditor"/>
		<item value="2" key="layout"/>
		<item value="2" key="rootMode"/>
		<item value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#x0D;&#x0A;&lt;packageExplorer configured=&quot;true&quot; group_libraries=&quot;1&quot; layout=&quot;2&quot; linkWithEditor=&quot;0&quot; rootMode=&quot;2&quot; sortWorkingSets=&quot;false&quot; workingSetName=&quot;&quot;&gt;&#x0D;&#x0A;&lt;localWorkingSetManager&gt;&#x0D;&#x0A;&lt;workingSet editPageId=&quot;org.eclipse.jdt.internal.ui.OthersWorkingSet&quot; factoryID=&quot;org.eclipse.ui.internal.WorkingSetFactory&quot; id=&quot;1382792884467_1&quot; label=&quot;Other Projects&quot; name=&quot;Other Projects&quot;/&gt;&#x0D;&#x0A;&lt;/localWorkingSetManager&gt;&#x0D;&#x0A;&lt;activeWorkingSet workingSetName=&quot;Other Projects&quot;/&gt;&#x0D;&#x0A;&lt;allWorkingSets workingSetName=&quot;Other Projects&quot;/&gt;&#x0D;&#x0A;&lt;/packageExplorer&gt;" key="memento"/>
	</section>
</section>
"
+ targetURL="${workspace.location|uri}/.metadata/.plugins/org.eclipse.jdt.ui/dialog_settings.xml"
+ encoding="UTF-8">
+ <description>Initialize JDT's package explorer to show working sets as its root objects</description>
+ </setupTask>
+ <setupTask
+ xsi:type="setup:VariableTask"
+ name="eclipse.target.platform"
+ value="${eclipse.target.platform.latest}"
+ defaultValue="2020-06"
+ storageURI="scope://Workspace"/>
+ <setupTask
+ xsi:type="setup:StringSubstitutionTask"
+ name="maven.build.java.home"
+ value="${jre.location-1.8}">
+ <description>The location used to specify JAVA_HOME in the External Tools Configurations.</description>
+ </setupTask>
+ <setupTask
+ xsi:type="setup:VariableTask"
+ filter="(osgi.os=win32)"
+ type="FILE"
+ name="maven.build.command"
+ defaultValue="mvn.cmd"
+ label="Maven Command">
+ <description>The absolute path location of the mvn command that will execute mvn on your operating system; it is used in the External Tools Configurations. You may leave the default if you don't intend to do Maven builds.</description>
+ </setupTask>
+ <setupTask
+ xsi:type="setup:VariableTask"
+ filter="(!(osgi.os=win32))"
+ type="FILE"
+ name="maven.build.command"
+ defaultValue="mvn"
+ label="Maven Command">
+ <description>The absolute path location of the mvn command that will execute mvn on your operating system; it is used in the External Tools Configurations. You may leave the default if you don't intend to do Maven builds.</description>
+ </setupTask>
+ <setupTask
+ xsi:type="setup:StringSubstitutionTask"
+ name="maven.build.command"
+ value="${maven.build.command}">
+ <description>The location of the mvn command that will execute mvn on your operating system; it is used in the External Tools Configurations.</description>
+ </setupTask>
+ <project name="jres"
+ label="JREs">
+ <setupTask
+ xsi:type="git:GitCloneTask"
+ id="git.clone.justj"
+ remoteURI="justj/justj">
+ <annotation
+ source="http://www.eclipse.org/oomph/setup/InducedChoices">
+ <detail
+ key="inherit">
+ <value>eclipse.git.gerrit.remoteURIs</value>
+ </detail>
+ <detail
+ key="label">
+ <value>${scope.project.label} Git or Gerrit repository</value>
+ </detail>
+ <detail
+ key="target">
+ <value>remoteURI</value>
+ </detail>
+ </annotation>
+ <description>${scope.project.label}</description>
+ </setupTask>
+ <setupTask
+ xsi:type="setup.targlets:TargletTask">
+ <targlet
+ name="JustJ JREs">
+ <requirement
+ name="*"/>
+ <sourceLocator
+ rootFolder="${git.clone.justj.location}"
+ locateNestedProjects="true"/>
+ </targlet>
+ </setupTask>
+ <stream
+ name="master"
+ label="Master"/>
+ </project>
+ <project name="tools"
+ label="Tools">
+ <setupTask
+ xsi:type="setup:CompoundTask"
+ name="User Preferences">
+ <annotation
+ source="http://www.eclipse.org/oomph/setup/UserPreferences">
+ <detail
+ key="/instance/org.eclipse.jdt.ui/cleanup_settings_version">
+ <value>record</value>
+ </detail>
+ <detail
+ key="/instance/org.eclipse.jdt.ui/org.eclipse.jdt.ui.cleanupprofiles">
+ <value>record</value>
+ </detail>
+ <detail
+ key="/instance/org.eclipse.jdt.ui/cleanup_profile">
+ <value>record</value>
+ </detail>
+ <detail
+ key="/instance/org.eclipse.jdt.ui/org.eclipse.jdt.ui.cleanupprofiles.version">
+ <value>record</value>
+ </detail>
+ <detail
+ key="/instance/org.eclipse.wst.xml.core/indentationSize">
+ <value>record</value>
+ </detail>
+ <detail
+ key="/instance/org.eclipse.wst.xml.core/lineWidth">
+ <value>record</value>
+ </detail>
+ <detail
+ key="/instance/org.eclipse.wst.xml.core/indentationChar">
+ <value>record</value>
+ </detail>
+ <detail
+ key="/instance/org.eclipse.pde/compilers.p.deprecated">
+ <value>record</value>
+ </detail>
+ <detail
+ key="/instance/org.eclipse.jdt.core/org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation">
+ <value>record</value>
+ </detail>
+ <detail
+ key="/instance/org.eclipse.jdt.core/org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation">
+ <value>record</value>
+ </detail>
+ <detail
+ key="/instance/org.eclipse.jdt.ui/org.eclipse.jdt.ui.formatterprofiles">
+ <value>record</value>
+ </detail>
+ <detail
+ key="/instance/org.eclipse.jdt.ui/formatter_settings_version">
+ <value>record</value>
+ </detail>
+ <detail
+ key="/instance/org.eclipse.jdt.ui/sp_cleanup.remove_unnecessary_nls_tags">
+ <value>record</value>
+ </detail>
+ <detail
+ key="/instance/org.eclipse.jdt.ui/sp_cleanup.format_source_code">
+ <value>record</value>
+ </detail>
+ <detail
+ key="/instance/org.eclipse.jdt.ui/sp_cleanup.remove_trailing_whitespaces">
+ <value>record</value>
+ </detail>
+ <detail
+ key="/instance/org.eclipse.jdt.ui/editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup">
+ <value>record</value>
+ </detail>
+ <detail
+ key="/instance/org.eclipse.jdt.ui/sp_cleanup.on_save_use_additional_actions">
+ <value>record</value>
+ </detail>
+ <detail
+ key="/instance/org.eclipse.jdt.ui/sp_cleanup.use_blocks">
+ <value>record</value>
+ </detail>
+ </annotation>
+ <setupTask
+ xsi:type="setup:CompoundTask"
+ name="org.eclipse.jdt.core">
+ <setupTask
+ xsi:type="setup:PreferenceTask"
+ key="/instance/org.eclipse.jdt.core/org.eclipse.jdt.core.compiler.problem.invalidJavadoc"
+ value="info"/>
+ <setupTask
+ xsi:type="setup:PreferenceTask"
+ key="/instance/org.eclipse.jdt.core/org.eclipse.jdt.core.compiler.problem.invalidJavadocTags"
+ value="enabled"/>
+ <setupTask
+ xsi:type="setup:PreferenceTask"
+ key="/instance/org.eclipse.jdt.core/org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility"
+ value="private"/>
+ <setupTask
+ xsi:type="setup:PreferenceTask"
+ key="/instance/org.eclipse.jdt.core/org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription"
+ value="no_tag"/>
+ <setupTask
+ xsi:type="setup:PreferenceTask"
+ key="/instance/org.eclipse.jdt.core/org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation"
+ value="warning"/>
+ <setupTask
+ xsi:type="setup:PreferenceTask"
+ key="/instance/org.eclipse.jdt.core/org.eclipse.jdt.core.compiler.problem.redundantNullCheck"
+ value="warning"/>
+ </setupTask>
+ <setupTask
+ xsi:type="setup:CompoundTask"
+ name="org.eclipse.jdt.launching">
+ <setupTask
+ xsi:type="setup:PreferenceTask"
+ key="/instance/org.eclipse.jdt.launching/org.eclipse.jdt.launching.PREF_COMPILER_COMPLIANCE_DOES_NOT_MATCH_JRE"
+ value="ignore"/>
+ <setupTask
+ xsi:type="setup:PreferenceTask"
+ key="/instance/org.eclipse.jdt.launching/org.eclipse.jdt.launching.PREF_STRICTLY_COMPATIBLE_JRE_NOT_AVAILABLE"
+ value="ignore"/>
+ </setupTask>
+ <setupTask
+ xsi:type="setup:CompoundTask"
+ name="org.eclipse.jdt.ui">
+ <setupTask
+ xsi:type="setup:PreferenceTask"
+ key="/instance/org.eclipse.jdt.ui/cleanup_profile"
+ value="_JustJCleanup"/>
+ <setupTask
+ xsi:type="setup:PreferenceTask"
+ key="/instance/org.eclipse.jdt.ui/cleanup_settings_version"
+ value="2"/>
+ <setupTask
+ xsi:type="setup:PreferenceTask"
+ key="/instance/org.eclipse.jdt.ui/editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup"
+ value="true"/>
+ <setupTask
+ xsi:type="setup:PreferenceTask"
+ key="/instance/org.eclipse.jdt.ui/formatter_profile"
+ value="_JustJCodeFormatter"/>
+ <setupTask
+ xsi:type="setup:PreferenceTask"
+ key="/instance/org.eclipse.jdt.ui/formatter_settings_version"
+ value="19"/>
+ <setupTask
+ xsi:type="setup:PreferenceTask"
+ key="/instance/org.eclipse.jdt.ui/org.eclipse.jdt.ui.cleanupprofiles"
+ value="<?xml version="1.0" encoding="UTF-8"?>
<profiles version="2">
<profile kind="CleanUpProfile" name="JustJCleanup" version="2">
<setting id="cleanup.use_autoboxing" value="false"/>
<setting id="cleanup.qualify_static_method_accesses_with_declaring_class" value="false"/>
<setting id="cleanup.always_use_this_for_non_static_method_access" value="false"/>
<setting id="cleanup.organize_imports" value="true"/>
<setting id="cleanup.remove_trailing_whitespaces_ignore_empty" value="false"/>
<setting id="cleanup.lazy_logical_operator" value="false"/>
<setting id="cleanup.use_directly_map_method" value="false"/>
<setting id="cleanup.format_source_code_changes_only" value="false"/>
<setting id="cleanup.qualify_static_field_accesses_with_declaring_class" value="false"/>
<setting id="cleanup.add_generated_serial_version_id" value="false"/>
<setting id="cleanup.remove_redundant_semicolons" value="false"/>
<setting id="cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class" value="true"/>
<setting id="cleanup.remove_redundant_type_arguments" value="false"/>
<setting id="cleanup.remove_unused_imports" value="true"/>
<setting id="cleanup.insert_inferred_type_arguments" value="false"/>
<setting id="cleanup.make_private_fields_final" value="true"/>
<setting id="cleanup.use_lambda" value="true"/>
<setting id="cleanup.simplify_lambda_expression_and_method_ref" value="false"/>
<setting id="cleanup.always_use_blocks" value="true"/>
<setting id="cleanup.use_this_for_non_static_field_access_only_if_necessary" value="true"/>
<setting id="cleanup.sort_members_all" value="false"/>
<setting id="cleanup.remove_trailing_whitespaces_all" value="true"/>
<setting id="cleanup.add_missing_annotations" value="true"/>
<setting id="cleanup.remove_unnecessary_array_creation" value="false"/>
<setting id="cleanup.always_use_this_for_non_static_field_access" value="false"/>
<setting id="cleanup.make_parameters_final" value="false"/>
<setting id="cleanup.sort_members" value="false"/>
<setting id="cleanup.remove_private_constructors" value="true"/>
<setting id="cleanup.always_use_parentheses_in_expressions" value="false"/>
<setting id="cleanup.remove_unused_local_variables" value="false"/>
<setting id="cleanup.convert_to_enhanced_for_loop" value="false"/>
<setting id="cleanup.remove_unused_private_fields" value="true"/>
<setting id="cleanup.remove_redundant_modifiers" value="false"/>
<setting id="cleanup.never_use_blocks" value="false"/>
<setting id="cleanup.number_suffix" value="false"/>
<setting id="cleanup.add_missing_deprecated_annotations" value="true"/>
<setting id="cleanup.use_this_for_non_static_field_access" value="false"/>
<setting id="cleanup.remove_unnecessary_nls_tags" value="true"/>
<setting id="cleanup.qualify_static_member_accesses_through_instances_with_declaring_class" value="true"/>
<setting id="cleanup.add_missing_nls_tags" value="false"/>
<setting id="cleanup.remove_unnecessary_casts" value="true"/>
<setting id="cleanup.use_unboxing" value="false"/>
<setting id="cleanup.use_blocks_only_for_return_and_throw" value="false"/>
<setting id="cleanup.format_source_code" value="true"/>
<setting id="cleanup.convert_functional_interfaces" value="false"/>
<setting id="cleanup.add_default_serial_version_id" value="true"/>
<setting id="cleanup.remove_unused_private_methods" value="true"/>
<setting id="cleanup.remove_trailing_whitespaces" value="true"/>
<setting id="cleanup.make_type_abstract_if_missing_method" value="false"/>
<setting id="cleanup.add_serial_version_id" value="false"/>
<setting id="cleanup.use_this_for_non_static_method_access" value="false"/>
<setting id="cleanup.use_this_for_non_static_method_access_only_if_necessary" value="true"/>
<setting id="cleanup.use_anonymous_class_creation" value="false"/>
<setting id="cleanup.add_missing_override_annotations_interface_methods" value="true"/>
<setting id="cleanup.remove_unused_private_members" value="false"/>
<setting id="cleanup.make_local_variable_final" value="true"/>
<setting id="cleanup.add_missing_methods" value="false"/>
<setting id="cleanup.never_use_parentheses_in_expressions" value="true"/>
<setting id="cleanup.qualify_static_member_accesses_with_declaring_class" value="true"/>
<setting id="cleanup.push_down_negation" value="false"/>
<setting id="cleanup.use_parentheses_in_expressions" value="false"/>
<setting id="cleanup.add_missing_override_annotations" value="true"/>
<setting id="cleanup.use_blocks" value="true"/>
<setting id="cleanup.make_variable_declarations_final" value="false"/>
<setting id="cleanup.correct_indentation" value="false"/>
<setting id="cleanup.use_var" value="false"/>
<setting id="cleanup.remove_unused_private_types" value="true"/>
</profile>
</profiles>
"/>
+ <setupTask
+ xsi:type="setup:PreferenceTask"
+ key="/instance/org.eclipse.jdt.ui/org.eclipse.jdt.ui.cleanupprofiles.version"
+ value="2"/>
+ <setupTask
+ xsi:type="setup:PreferenceTask"
+ key="/instance/org.eclipse.jdt.ui/org.eclipse.jdt.ui.formatterprofiles"
+ value="<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<profiles version="12">
<profile kind="CodeFormatterProfile" name="JustJCodeFormatter" version="19">
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_ellipsis" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_for_statment" value="common_lines"/>
<setting id="org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_logical_operator" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_method_invocation" value="common_lines"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_after_imports" value="2"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_record_declaration" value="common_lines"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_switch_statement" value="common_lines"/>
<setting id="org.eclipse.jdt.core.formatter.comment.format_javadoc_comments" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.indentation.size" value="4"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_enum_constant_declaration" value="common_lines"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_arrow_in_switch_default" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.align_with_spaces" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.disabling_tag" value="@formatter:off"/>
<setting id="org.eclipse.jdt.core.formatter.continuation_indentation" value="2"/>
<setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_before_code_block" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_switch_case_expressions" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_enum_constants" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_imports" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_at_end_of_method_body" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_after_package" value="2"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_if_while_statement" value="common_lines"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.indent_root_tags" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.enabling_tag" value="@formatter:on"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.count_line_length_from_starting_position" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_record_components" value="52"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration" value="84"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_arrow_in_switch_case" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.wrap_before_multiplicative_operator" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations" value="1"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameterized_type_references" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_logical_operator" value="20"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.keep_annotation_declaration_on_one_line" value="one_line_never"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_record_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_enum_constant" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_multiplicative_operator" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_block" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration" value="next_line_shifted"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.align_tags_descriptions_grouped" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.comment.line_length" value="80"/>
<setting id="org.eclipse.jdt.core.formatter.use_on_off_tags" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.keep_method_body_on_one_line" value="one_line_never"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.keep_loop_body_block_on_one_line" value="one_line_never"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_method_declaration" value="next_line"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_abstract_method" value="1"/>
<setting id="org.eclipse.jdt.core.formatter.keep_enum_constant_declaration_on_one_line" value="one_line_never"/>
<setting id="org.eclipse.jdt.core.formatter.align_variable_declarations_on_columns" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.keep_type_declaration_on_one_line" value="one_line_never"/>
<setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_catch_clause" value="common_lines"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_additive_operator" value="20"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_record_constructor" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call" value="52"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_relational_operator" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_multiplicative_operator" value="20"/>
<setting id="org.eclipse.jdt.core.formatter.keep_anonymous_type_declaration_on_one_line" value="one_line_never"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_switch_case_expressions" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.wrap_before_shift_operator" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.keep_record_declaration_on_one_line" value="one_line_never"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_block" value="next_line"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration" value="next_line"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_lambda_body" value="next_line_shifted"/>
<setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_at_end_of_code_block" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.compact_else_if" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_bitwise_operator" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration" value="52"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_type_parameters" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation" value="52"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration" value="84"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_compact_loops" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.keep_simple_for_body_on_same_line" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_relational_operator" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_unary_operator" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer" value="52"/>
<setting id="org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve" value="1"/>
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_annotation" value="common_lines"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_ellipsis" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_additive_operator" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_string_concatenation" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.format_line_comments" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_record_declaration" value="next_line"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.text_block_indentation" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.align_type_members_on_columns" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_assignment" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_module_statements" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_after_code_block" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.comment.align_tags_names_descriptions" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration" value="68"/>
<setting id="org.eclipse.jdt.core.formatter.keep_if_then_body_block_on_one_line" value="one_line_never"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_conditional_expression" value="36"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.align_assignment_statements_on_columns" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration" value="next_line"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_block_in_case" value="next_line"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_arrow_in_switch_default" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_between_different_tags" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_conditional_expression_chain" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.comment.format_header" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression" value="52"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_additive_operator" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_method_declaration" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.join_wrapped_lines" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.wrap_before_conditional_operator" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_shift_operator" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.align_fields_grouping_blank_lines" value="2147483647"/>
<setting id="org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_bitwise_operator" value="20"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration" value="next_line"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_resources_in_try" value="80"/>
<setting id="org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_try_clause" value="common_lines"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.keep_code_block_on_one_line" value="one_line_never"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_record_components" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.tabulation.size" value="2"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_bitwise_operator" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.format_source_code" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_field" value="1"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer" value="2"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_method" value="1"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration" value="36"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_record_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.wrap_before_assignment_operator" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_not_operator" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_switch" value="next_line"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_type_annotation" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.format_html" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_method_delcaration" value="common_lines"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_compact_if" value="20"/>
<setting id="org.eclipse.jdt.core.formatter.keep_lambda_body_block_on_one_line" value="one_line_never"/>
<setting id="org.eclipse.jdt.core.formatter.indent_empty_lines" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_type_arguments" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_unary_operator" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.keep_record_constructor_on_one_line" value="one_line_never"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_record_declaration" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk" value="1"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_label" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_arrow_in_switch_case" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_member_type" value="1"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_logical_operator" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_record_header" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression" value="52"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_record_declaration" value="68"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.wrap_before_bitwise_operator" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.wrap_before_relational_operator" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.format_block_comments" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.indent_tag_description" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_record_constructor" value="next_line"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration" value="52"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_string_concatenation" value="20"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_after_last_class_body_declaration" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_body" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_multiple_fields" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.keep_simple_while_body_on_same_line" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_array_initializer" value="end_of_line"/>
<setting id="org.eclipse.jdt.core.formatter.wrap_before_logical_operator" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_shift_operator" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_between_statement_group_in_switch" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_lambda_declaration" value="common_lines"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_shift_operator" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.keep_simple_do_while_body_on_same_line" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.keep_enum_declaration_on_one_line" value="one_line_never"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_record_components" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_enum_constant" value="next_line"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_type_declaration" value="next_line"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_multiplicative_operator" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_package" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_expressions_in_for_loop_header" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.wrap_before_additive_operator" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.keep_simple_getter_setter_on_one_line" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_string_concatenation" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.join_lines_in_comments" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.indent_parameter_description" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_code_block" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_record_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.tabulation.char" value="space"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_relational_operator" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.wrap_before_string_concatenation" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_between_import_groups" value="1"/>
<setting id="org.eclipse.jdt.core.formatter.lineSplit" value="180"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch" value="insert"/>
</profile>
</profiles>
"/>
+ <setupTask
+ xsi:type="setup:PreferenceTask"
+ key="/instance/org.eclipse.jdt.ui/sp_cleanup.format_source_code"
+ value="true"/>
+ <setupTask
+ xsi:type="setup:PreferenceTask"
+ key="/instance/org.eclipse.jdt.ui/sp_cleanup.on_save_use_additional_actions"
+ value="true"/>
+ <setupTask
+ xsi:type="setup:PreferenceTask"
+ key="/instance/org.eclipse.jdt.ui/sp_cleanup.remove_trailing_whitespaces"
+ value="true"/>
+ <setupTask
+ xsi:type="setup:PreferenceTask"
+ key="/instance/org.eclipse.jdt.ui/sp_cleanup.remove_unnecessary_nls_tags"
+ value="true"/>
+ <setupTask
+ xsi:type="setup:PreferenceTask"
+ key="/instance/org.eclipse.jdt.ui/sp_cleanup.use_blocks"
+ value="true"/>
+ </setupTask>
+ <setupTask
+ xsi:type="setup:CompoundTask"
+ name="org.eclipse.pde">
+ <setupTask
+ xsi:type="setup:PreferenceTask"
+ key="/instance/org.eclipse.pde/compilers.p.deprecated"
+ value="2"/>
+ <setupTask
+ xsi:type="setup:PreferenceTask"
+ key="/instance/org.eclipse.pde/compilers.p.exec-env-too-low"
+ value="2"/>
+ </setupTask>
+ <setupTask
+ xsi:type="setup:CompoundTask"
+ name="org.eclipse.wst.xml.core">
+ <setupTask
+ xsi:type="setup:PreferenceTask"
+ key="/instance/org.eclipse.wst.xml.core/indentationChar"
+ value="space"/>
+ <setupTask
+ xsi:type="setup:PreferenceTask"
+ key="/instance/org.eclipse.wst.xml.core/indentationSize"
+ value="2"/>
+ <setupTask
+ xsi:type="setup:PreferenceTask"
+ key="/instance/org.eclipse.wst.xml.core/lineWidth"
+ value="180"/>
+ </setupTask>
+ </setupTask>
+ <setupTask
+ xsi:type="jdt:JRETask"
+ version="JavaSE-1.8"
+ location="${jre.location-1.8}"
+ name="JRE for JavaSE-1.8">
+ <description>Define the JRE needed to compile and run the Java projects of ${scope.project.label}</description>
+ </setupTask>
+ <setupTask
+ xsi:type="setup.p2:P2Task"
+ label="EMF Tools">
+ <requirement
+ name="org.eclipse.emf.sdk.feature.group"/>
+ <repository
+ url="http://download.eclipse.org/modeling/emf/emf/builds/milestone/latest"/>
+ <description>Install the tools needed in the IDE to work with the source code for ${scope.project.label}</description>
+ </setupTask>
+ <setupTask
+ xsi:type="setup:VariableTask"
+ name="org.eclipse.justj.tools.p2"
+ label="JustJ Tools Repository">
+ <choice
+ value="http://download.eclipse.org/modeling/emf/emf/builds/milestone/latest"
+ label="JustJ Nightly Build Tools Repository"/>
+ <choice
+ value="${git.clone.justj.tools.location|uri}/releng/org.eclipse.justj.tools.site/target/repository"
+ label="JustJ Self-hosted Tools Repository"/>
+ <description>Choose the p2 repository from which to install the JustJ Tools; do not choose the Self-hosted choice until you've done a local Maven build of 'Build JustJ Tools'</description>
+ </setupTask>
+ <setupTask
+ xsi:type="setup.p2:P2Task"
+ label="JustJ Tools">
+ <requirement
+ name="org.eclipse.justj.tools.feature.group"
+ optional="true"/>
+ <repository
+ url="${org.eclipse.justj.tools.p2}"/>
+ </setupTask>
+ <setupTask
+ xsi:type="git:GitCloneTask"
+ id="git.clone.justj.tools"
+ remoteURI="justj/justj.tools">
+ <annotation
+ source="http://www.eclipse.org/oomph/setup/InducedChoices">
+ <detail
+ key="inherit">
+ <value>eclipse.git.gerrit.remoteURIs</value>
+ </detail>
+ <detail
+ key="label">
+ <value>${scope.project.label} Git or Gerrit repository</value>
+ </detail>
+ <detail
+ key="target">
+ <value>remoteURI</value>
+ </detail>
+ </annotation>
+ <description>${scope.project.label}</description>
+ </setupTask>
+ <setupTask
+ xsi:type="setup.targlets:TargletTask">
+ <targlet
+ name="JustJ Tools">
+ <requirement
+ name="*"/>
+ <requirement
+ name="org.eclipse.sdk.feature.group"/>
+ <requirement
+ name="org.eclipse.emf.sdk.feature.group"/>
+ <sourceLocator
+ rootFolder="${git.clone.justj.tools.location}"/>
+ <repositoryList>
+ <repository
+ url="http://download.eclipse.org/modeling/emf/emf/builds/nightly/latest"/>
+ <repository
+ url="http://download.eclipse.org/tools/orbit/downloads/latest-R"/>
+ </repositoryList>
+ </targlet>
+ </setupTask>
+ <setupTask
+ xsi:type="setup.workingsets:WorkingSetTask">
+ <workingSet
+ name="JustJ Tools">
+ <predicate
+ xsi:type="predicates:AndPredicate">
+ <operand
+ xsi:type="predicates:RepositoryPredicate"
+ project="org.eclipse.justj.tools"/>
+ </predicate>
+ </workingSet>
+ </setupTask>
+ <stream
+ name="master"
+ label="Master">
+ <setupTask
+ xsi:type="setup:EclipseIniTask"
+ option="-Doomph.redirection.justj.tools"
+ value="=https://git.eclipse.org/c/justj/justj.tools.git/plain/releng/org.eclipse.justj.tools.releng/JustJ.setup->${git.clone.justj.tools.location|uri}/releng/org.eclipse.justj.tools.releng/JustJ.setup"
+ vm="true">
+ <description>Set an Oomph redirection system property to redirect the logical location of this setup to its physical location in the Git clone.</description>
+ </setupTask>
+ </stream>
+ </project>
+ <project name="website"
+ label="Website">
+ <setupTask
+ xsi:type="git:GitCloneTask"
+ id="git.clone.www.eclipse.org.justj"
+ locationQualifier="www.eclipse.org."
+ remoteURI="www.eclipse.org/justj">
+ <annotation
+ source="http://www.eclipse.org/oomph/setup/InducedChoices">
+ <detail
+ key="inherit">
+ <value>eclipse.git.gerrit.remoteURIs</value>
+ </detail>
+ <detail
+ key="label">
+ <value>${scope.project.label} Git or Gerrit repository</value>
+ </detail>
+ <detail
+ key="target">
+ <value>remoteURI</value>
+ </detail>
+ </annotation>
+ <description>${scope.project.label}</description>
+ </setupTask>
+ <setupTask
+ xsi:type="setup.targlets:TargletTask">
+ <targlet
+ name="JustJ Website">
+ <requirement
+ name="*"/>
+ <sourceLocator
+ rootFolder="${git.clone.www.eclipse.org.justj.location}"
+ locateNestedProjects="true"/>
+ </targlet>
+ </setupTask>
+ <setupTask
+ xsi:type="setup.workingsets:WorkingSetTask"
+ prefix="org.eclipse.justj.website-">
+ <workingSet
+ name="JustJ Website">
+ <predicate
+ xsi:type="predicates:AndPredicate">
+ <operand
+ xsi:type="predicates:RepositoryPredicate"
+ project="www.eclipse.org.justj"/>
+ </predicate>
+ </workingSet>
+ <description>The dynamic working sets for ${scope.project.label}</description>
+ </setupTask>
+ <stream
+ name="master"
+ label="Master"/>
+ </project>
+ <logicalProjectContainer
+ xsi:type="setup:ProjectCatalog"
+ href="index:/org.eclipse.setup#//@projectCatalogs[name='org.eclipse']"/>
+ <description>JustJ provides tools and infrastructure for building JREs.</description>
+</setup:Project>
diff --git a/releng/org.eclipse.justj.tools.site/.project b/releng/org.eclipse.justj.tools.site/.project
new file mode 100644
index 0000000..1bde655
--- /dev/null
+++ b/releng/org.eclipse.justj.tools.site/.project
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.justj.tools.site</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ </buildSpec>
+ <natures>
+ </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/releng/org.eclipse.justj.tools.site/category.xml b/releng/org.eclipse.justj.tools.site/category.xml
new file mode 100644
index 0000000..f1fef57
--- /dev/null
+++ b/releng/org.eclipse.justj.tools.site/category.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Copyright (c) 2020 Eclipse contributors and others.
+
+This program and the accompanying materials
+are made available under the terms of the Eclipse Public License 2.0
+which accompanies this distribution, and is available at
+https://www.eclipse.org/legal/epl-2.0/
+
+SPDX-License-Identifier: EPL-2.0
+-->
+<site>
+ <feature id="org.eclipse.justj.tools">
+ <category name="org.eclipse.justj.category"/>
+ </feature>
+ <category-def name="org.eclipse.justj.category" label="JustJ"/>
+</site>
diff --git a/releng/org.eclipse.justj.tools.site/pom.xml b/releng/org.eclipse.justj.tools.site/pom.xml
new file mode 100644
index 0000000..5ce1b2b
--- /dev/null
+++ b/releng/org.eclipse.justj.tools.site/pom.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Copyright (c) 2020 Eclipse contributors and others.
+
+This program and the accompanying materials
+are made available under the terms of the Eclipse Public License 2.0
+which accompanies this distribution, and is available at
+https://www.eclipse.org/legal/epl-2.0/
+
+SPDX-License-Identifier: EPL-2.0
+-->
+<project
+ xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.eclipse.justj</groupId>
+ <artifactId>org.eclipse.justj.tools.parent</artifactId>
+ <version>1.0.0-SNAPSHOT</version>
+ <relativePath>../org.eclipse.justj.tools.parent</relativePath>
+ </parent>
+
+ <groupId>org.eclipse.justj</groupId>
+ <artifactId>org.eclipse.justj.tools.site</artifactId>
+ <version>1.0.0-SNAPSHOT</version>
+ <packaging>eclipse-repository</packaging>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.eclipse.tycho</groupId>
+ <artifactId>tycho-p2-repository-plugin</artifactId>
+ <version>${tycho-version}</version>
+ <configuration>
+ <repositoryName>JustJ Build ${build.id}</repositoryName>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project>