Bug 493737 - put code generator p2 site under git.

This is a squash of multiple commits:

* This Eclipse project contains minimal changes from the original p2 site [1]
* Add gitignore file from [2]
* Whitelist .project and .launch in .gitignore
* Rename update site project
* Add lyo.tools.codegenerator.ui project
* Add lyo.tools.codegenerator.feature project
* Update the project names and IDs
* Also update index.html for the update site as modern browsers
  forbid XSL manupulations due to remote exec via JS.

[1]: https://github.com/jadelkhoury/lyo.codegen
[2]: https://github.com/github/gitignore/blob/master/Global/Eclipse.gitignore

Change-Id: I40617cf284911eb8c3aca67b369a89e36f96087a
Signed-off-by: Andrii Berezovskyi <andriib@kth.se>
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..7d57c7d
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,50 @@
+###############################
+# Eclipse
+# exceptions: .project, .launch
+###############################
+
+.metadata
+bin/
+tmp/
+*.tmp
+*.bak
+*.swp
+*~.nib
+local.properties
+.settings/
+.loadpath
+.recommenders
+
+# External tool builders
+.externalToolBuilders/
+
+
+# PyDev specific (Python IDE for Eclipse)
+*.pydevproject
+
+# CDT-specific (C/C++ Development Tooling)
+.cproject
+
+# JDT-specific (Eclipse Java Development Tools)
+.classpath
+
+# Java annotation processor (APT)
+.factorypath
+
+# PDT-specific (PHP Development Tools)
+.buildpath
+
+# sbteclipse plugin
+.target
+
+# Tern plugin
+.tern-project
+
+# TeXlipse plugin
+.texlipse
+
+# STS (Spring Tool Suite)
+.springBeans
+
+# Code Recommenders
+.recommenders/
diff --git a/org.eclipse.lyo.tools.codegenerator.feature/.project b/org.eclipse.lyo.tools.codegenerator.feature/.project
new file mode 100644
index 0000000..2328448
--- /dev/null
+++ b/org.eclipse.lyo.tools.codegenerator.feature/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.lyo.tools.codegenerator.feature</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.pde.FeatureBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.FeatureNature</nature>
+	</natures>
+</projectDescription>
diff --git a/org.eclipse.lyo.tools.codegenerator.feature/build.properties b/org.eclipse.lyo.tools.codegenerator.feature/build.properties
new file mode 100644
index 0000000..64f93a9
--- /dev/null
+++ b/org.eclipse.lyo.tools.codegenerator.feature/build.properties
@@ -0,0 +1 @@
+bin.includes = feature.xml
diff --git a/org.eclipse.lyo.tools.codegenerator.feature/feature.xml b/org.eclipse.lyo.tools.codegenerator.feature/feature.xml
new file mode 100644
index 0000000..209e41f
--- /dev/null
+++ b/org.eclipse.lyo.tools.codegenerator.feature/feature.xml
@@ -0,0 +1,112 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.lyo.tools.codegenerator.feature"
+      label="Lyo Code Generator"
+      version="1.0.0.qualifier"
+      provider-name="Lyo">
+
+   <description url="http://www.example.com/description">
+      The Lyo code generator generates a OSLC4J-compliant adapter,
+based on an EMF model.
+   </description>
+
+   <copyright url="http://www.example.com/copyright">
+      Copyright (c) 2012 IBM Corporation and others.
+All rights reserved. This program and the accompanying materials
+are made available under the terms of the Eclipse Public License
+v1.0 and Eclipse Distribution License v. 1.0 which accompanies
+this distribution.
+The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
+and the Eclipse Distribution License is available at http://www.eclipse.org/org/documents/edl-v10.php.
+   </copyright>
+
+   <license url="http://www.example.com/license">
+      Eclipse Foundation Software User Agreement
+
+April 9, 2014
+Usage Of Content
+
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY &quot;CONTENT&quot;). USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW. BY USING THE CONTENT, YOU AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW. IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.
+Applicable Licenses
+
+Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0 (&quot;EPL&quot;). A copy of the EPL is provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html. For purposes of the EPL, &quot;Program&quot; will mean the Content.
+
+Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).
+
+    Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content. Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).
+    Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java™ ARchive) in a directory named &quot;plugins&quot;.
+    A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material. Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;. Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins and/or Fragments associated with that Feature.
+    Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.
+
+The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;). Abouts and Feature Licenses may be located in any directory of a Download or Module including, but not limited to the following locations:
+
+    The top-level (root) directory
+    Plug-in and Fragment directories
+    Inside Plug-ins and Fragments packaged as JARs
+    Sub-directories of the directory named &quot;src&quot; of certain Plug-ins
+    Feature directories
+
+Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the installation process. If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or inform you where you can locate them. Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature. Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in that directory.
+
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS. SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):
+
+    Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)
+    Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)
+    Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)
+    Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)
+    Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)
+
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License is provided, please contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.
+Use of Provisioning Technology
+
+The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to install, extend and update Eclipse-based products. Information about packaging Installable Software is available at http://eclipse.org/equinox/p2/repository_packaging.html (&quot;Specification&quot;).
+
+You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:
+
+    A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based product.
+    During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be accessed and copied to the Target Machine.
+    Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.
+
+Cryptography
+
+Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to another country, of encryption software. BEFORE using any encryption software, please check the country&apos;s laws, regulations and policies concerning the import, possession, or use, and re-export of encryption software, to see if this is permitted.
+
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.
+   </license>
+
+   <plugin
+         id="org.eclipse.lyo.oslc4j.adaptormodel"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.lyo.oslc4j.codegenerator"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.lyo.tools.adaptormodel.edit"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.lyo.tools.adaptormodel.editor"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.lyo.tools.codegenerator.ui"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/org.eclipse.lyo.tools.codegenerator.ui/.project b/org.eclipse.lyo.tools.codegenerator.ui/.project
new file mode 100644
index 0000000..1c6ba1f
--- /dev/null
+++ b/org.eclipse.lyo.tools.codegenerator.ui/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.lyo.tools.codegenerator.ui</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.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/org.eclipse.lyo.tools.codegenerator.ui/META-INF/MANIFEST.MF b/org.eclipse.lyo.tools.codegenerator.ui/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..508f584
--- /dev/null
+++ b/org.eclipse.lyo.tools.codegenerator.ui/META-INF/MANIFEST.MF
@@ -0,0 +1,20 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Acceleo Codegenerator Module IDE Plug-in
+Bundle-SymbolicName: org.eclipse.lyo.tools.codegenerator.ui;singleton:=true
+Bundle-Version: 1.0.0.qualifier
+Bundle-Activator: org.eclipse.lyo.tools.codegenerator.ui.Activator
+Bundle-Vendor: Eclipse Modeling Project
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.core.runtime,
+ org.eclipse.core.resources, 
+ org.eclipse.lyo.oslc4j.codegenerator,
+ org.eclipse.emf.ecore,
+ org.eclipse.emf.ecore.xmi,
+ org.eclipse.ocl,
+ org.eclipse.ocl.ecore,
+ org.eclipse.acceleo.model,
+ org.eclipse.acceleo.engine
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Bundle-ActivationPolicy: lazy
+Eclipse-LazyStart: true
diff --git a/org.eclipse.lyo.tools.codegenerator.ui/build.properties b/org.eclipse.lyo.tools.codegenerator.ui/build.properties
new file mode 100644
index 0000000..d0a0e71
--- /dev/null
+++ b/org.eclipse.lyo.tools.codegenerator.ui/build.properties
@@ -0,0 +1,7 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               plugin.xml,\
+               icons/
+
diff --git a/org.eclipse.lyo.tools.codegenerator.ui/icons/default.gif b/org.eclipse.lyo.tools.codegenerator.ui/icons/default.gif
new file mode 100644
index 0000000..6a04c49
--- /dev/null
+++ b/org.eclipse.lyo.tools.codegenerator.ui/icons/default.gif
Binary files differ
diff --git a/org.eclipse.lyo.tools.codegenerator.ui/plugin.xml b/org.eclipse.lyo.tools.codegenerator.ui/plugin.xml
new file mode 100644
index 0000000..8ce604b
--- /dev/null
+++ b/org.eclipse.lyo.tools.codegenerator.ui/plugin.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.2"?>
+<plugin>
+   <extension point="org.eclipse.ui.popupMenus">
+      <objectContribution
+            adaptable="true"
+            objectClass="org.eclipse.core.resources.IFile"
+            nameFilter="*.*"
+            id="org.eclipse.lyo.tools.codegenerator.ui.popupMenus.contribution.IFile">
+         <menu id="org.eclipse.acceleo.module.menu" label="Acceleo Model Code Generator" path="additionsAcceleo">
+               <groupMarker name="acceleo"/> 
+         </menu>
+         <action
+               class="org.eclipse.lyo.tools.codegenerator.ui.popupMenus.AcceleoGenerateCodegeneratorAction"
+               enablesFor="+"
+               id="org.eclipse.lyo.tools.codegenerator.ui.popupMenus.AcceleoGenerateCodegeneratorAction"
+               icon="icons/default.gif"
+               label="Generate Java Code from Model"
+               menubarPath="org.eclipse.acceleo.module.menu/acceleo"/>
+      </objectContribution>
+   </extension>
+</plugin>
diff --git a/org.eclipse.lyo.tools.codegenerator.ui/src/org/eclipse/lyo/tools/codegenerator/ui/Activator.java b/org.eclipse.lyo.tools.codegenerator.ui/src/org/eclipse/lyo/tools/codegenerator/ui/Activator.java
new file mode 100644
index 0000000..0ff2fc5
--- /dev/null
+++ b/org.eclipse.lyo.tools.codegenerator.ui/src/org/eclipse/lyo/tools/codegenerator/ui/Activator.java
@@ -0,0 +1,66 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2012 Obeo.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Obeo - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.lyo.tools.codegenerator.ui;
+
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle.
+ */
+public class Activator extends AbstractUIPlugin {
+
+	/**
+	 * The plug-in ID.
+	 */
+	public static final String PLUGIN_ID = "org.eclipse.lyo.tools.codegenerator.ui";
+
+	/**
+	 * The shared instance.
+	 */
+	private static Activator plugin;
+	
+	/**
+	 * The constructor.
+	 */
+	public Activator() {
+	}
+
+	/**{@inheritDoc}
+	 *
+	 * @see org.eclipse.core.runtime.Plugin#start(org.osgi.framework.BundleContext)
+	 * @generated
+	 */
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+		plugin = this;
+	}
+
+	/**{@inheritDoc}
+	 *
+	 * @see org.eclipse.core.runtime.Plugin#stop(org.osgi.framework.BundleContext)
+	 * @generated
+	 */
+	public void stop(BundleContext context) throws Exception {
+		plugin = null;
+		super.stop(context);
+	}
+
+	/**
+	 * Returns the shared instance.
+	 *
+	 * @return the shared instance
+	 */
+	public static Activator getDefault() {
+		return plugin;
+	}
+
+}
diff --git a/org.eclipse.lyo.tools.codegenerator.ui/src/org/eclipse/lyo/tools/codegenerator/ui/common/GenerateAll.java b/org.eclipse.lyo.tools.codegenerator.ui/src/org/eclipse/lyo/tools/codegenerator/ui/common/GenerateAll.java
new file mode 100644
index 0000000..cd45c36
--- /dev/null
+++ b/org.eclipse.lyo.tools.codegenerator.ui/src/org/eclipse/lyo/tools/codegenerator/ui/common/GenerateAll.java
@@ -0,0 +1,154 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2012 Obeo.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Obeo - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.lyo.tools.codegenerator.ui.common;
+
+import java.io.IOException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.List;
+
+import org.eclipse.emf.common.util.BasicMonitor;
+import org.eclipse.acceleo.engine.utils.AcceleoLaunchingUtil;
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.emf.common.util.URI;
+import org.osgi.framework.Bundle;
+
+
+/**
+ * Main entry point of the 'Codegenerator' generation module.
+ */
+public class GenerateAll {
+
+	/**
+	 * The model URI.
+	 */
+	private URI modelURI;
+
+	/**
+	 * The output folder.
+	 */
+	private IContainer targetFolder;
+
+	/**
+	 * The other arguments.
+	 */
+	List<? extends Object> arguments;
+
+	/**
+	 * Constructor.
+	 * 
+	 * @param modelURI
+	 *            is the URI of the model.
+	 * @param targetFolder
+	 *            is the output folder
+	 * @param arguments
+	 *            are the other arguments
+	 * @throws IOException
+	 *             Thrown when the output cannot be saved.
+	 * @generated
+	 */
+	public GenerateAll(URI modelURI, IContainer targetFolder, List<? extends Object> arguments) {
+		this.modelURI = modelURI;
+		this.targetFolder = targetFolder;
+		this.arguments = arguments;
+	}
+
+	/**
+	 * Launches the generation.
+	 *
+	 * @param monitor
+	 *            This will be used to display progress information to the user.
+	 * @throws IOException
+	 *             Thrown when the output cannot be saved.
+	 * @generated
+	 */
+	public void doGenerate(IProgressMonitor monitor) throws IOException {
+		if (!targetFolder.getLocation().toFile().exists()) {
+			targetFolder.getLocation().toFile().mkdirs();
+		}
+		
+		// final URI template0 = getTemplateURI("org.eclipse.lyo.oslc4j.codegenerator", new Path("/org/eclipse/lyo/oslc4j/codegenerator/main/generate.emtl"));
+		// org.eclipse.lyo.oslc4j.codegenerator.main.Generate gen0 = new org.eclipse.lyo.oslc4j.codegenerator.main.Generate(modelURI, targetFolder.getLocation().toFile(), arguments) {
+		//	protected URI createTemplateURI(String entry) {
+		//		return template0;
+		//	}
+		//};
+		//gen0.doGenerate(BasicMonitor.toMonitor(monitor));
+		monitor.subTask("Loading...");
+		org.eclipse.lyo.oslc4j.codegenerator.main.Generate gen0 = new org.eclipse.lyo.oslc4j.codegenerator.main.Generate(modelURI, targetFolder.getLocation().toFile(), arguments);
+		monitor.worked(1);
+		String generationID = AcceleoLaunchingUtil.computeUIProjectID(
+				"org.eclipse.lyo.oslc4j.codegenerator",
+				"org.eclipse.lyo.oslc4j.codegenerator.main.Generate",
+				modelURI.toString(),
+				targetFolder.getFullPath().toString(),
+				new ArrayList<String>());
+		gen0.setGenerationID(generationID);
+		gen0.doGenerate(BasicMonitor.toMonitor(monitor));
+			
+		
+	}
+	
+	/**
+	 * Finds the template in the plug-in. Returns the template plug-in URI.
+	 * 
+	 * @param bundleID
+	 *            is the plug-in ID
+	 * @param relativePath
+	 *            is the relative path of the template in the plug-in
+	 * @return the template URI
+	 * @throws IOException
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	private URI getTemplateURI(String bundleID, IPath relativePath) throws IOException {
+		Bundle bundle = Platform.getBundle(bundleID);
+		if (bundle == null) {
+			// no need to go any further
+			return URI.createPlatformResourceURI(new Path(bundleID).append(relativePath).toString(), false);
+		}
+		URL url = bundle.getEntry(relativePath.toString());
+		if (url == null && relativePath.segmentCount() > 1) {
+			Enumeration<URL> entries = bundle.findEntries("/", "*.emtl", true);
+			if (entries != null) {
+				String[] segmentsRelativePath = relativePath.segments();
+				while (url == null && entries.hasMoreElements()) {
+					URL entry = entries.nextElement();
+					IPath path = new Path(entry.getPath());
+					if (path.segmentCount() > relativePath.segmentCount()) {
+						path = path.removeFirstSegments(path.segmentCount() - relativePath.segmentCount());
+					}
+					String[] segmentsPath = path.segments();
+					boolean equals = segmentsPath.length == segmentsRelativePath.length;
+					for (int i = 0; equals && i < segmentsPath.length; i++) {
+						equals = segmentsPath[i].equals(segmentsRelativePath[i]);
+					}
+					if (equals) {
+						url = bundle.getEntry(entry.getPath());
+					}
+				}
+			}
+		}
+		URI result;
+		if (url != null) {
+			result = URI.createPlatformPluginURI(new Path(bundleID).append(new Path(url.getPath())).toString(), false);
+		} else {
+			result = URI.createPlatformResourceURI(new Path(bundleID).append(relativePath).toString(), false);
+		}
+		return result;
+	}
+
+}
diff --git a/org.eclipse.lyo.tools.codegenerator.ui/src/org/eclipse/lyo/tools/codegenerator/ui/popupMenus/AcceleoGenerateCodegeneratorAction.java b/org.eclipse.lyo.tools.codegenerator.ui/src/org/eclipse/lyo/tools/codegenerator/ui/popupMenus/AcceleoGenerateCodegeneratorAction.java
new file mode 100644
index 0000000..94758dd
--- /dev/null
+++ b/org.eclipse.lyo.tools.codegenerator.ui/src/org/eclipse/lyo/tools/codegenerator/ui/popupMenus/AcceleoGenerateCodegeneratorAction.java
@@ -0,0 +1,112 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2012 Obeo.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Obeo - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.lyo.tools.codegenerator.ui.popupMenus;
+
+import java.io.IOException;
+import java.lang.reflect.InvocationTargetException;
+import java.util.Iterator;
+import java.util.List;
+import java.util.ArrayList;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.operation.IRunnableWithProgress;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.lyo.tools.codegenerator.ui.Activator;
+import org.eclipse.lyo.tools.codegenerator.ui.common.GenerateAll;
+import org.eclipse.ui.IActionDelegate;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.actions.ActionDelegate;
+
+/**
+ * Codegenerator code generation.
+ */
+public class AcceleoGenerateCodegeneratorAction extends ActionDelegate implements IActionDelegate {
+	
+	/**
+	 * Selected model files.
+	 */
+	protected List<IFile> files;
+
+	/**{@inheritDoc}
+	 *
+	 * @see org.eclipse.ui.actions.ActionDelegate#selectionChanged(org.eclipse.jface.action.IAction, org.eclipse.jface.viewers.ISelection)
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	public void selectionChanged(IAction action, ISelection selection) {
+		if (selection instanceof IStructuredSelection) {
+			files = ((IStructuredSelection) selection).toList();
+		}
+	}
+
+	/**{@inheritDoc}
+	 *
+	 * @see org.eclipse.ui.actions.ActionDelegate#run(org.eclipse.jface.action.IAction)
+	 * @generated
+	 */
+	public void run(IAction action) {
+		if (files != null) {
+			IRunnableWithProgress operation = new IRunnableWithProgress() {
+				public void run(IProgressMonitor monitor) {
+					try {
+						Iterator<IFile> filesIt = files.iterator();
+						while (filesIt.hasNext()) {
+							IFile model = (IFile)filesIt.next();
+							URI modelURI = URI.createPlatformResourceURI(model.getFullPath().toString(), true);
+							try {
+								IContainer target = model.getProject();
+								GenerateAll generator = new GenerateAll(modelURI, target, getArguments());
+								generator.doGenerate(monitor);
+							} catch (IOException e) {
+								IStatus status = new Status(IStatus.ERROR, Activator.PLUGIN_ID, e.getMessage(), e);
+								Activator.getDefault().getLog().log(status);
+							} finally {
+								model.getProject().refreshLocal(IResource.DEPTH_INFINITE, monitor);
+							}
+						}
+					} catch (CoreException e) {
+						IStatus status = new Status(IStatus.ERROR, Activator.PLUGIN_ID, e.getMessage(), e);
+						Activator.getDefault().getLog().log(status);
+					}
+				}
+			};
+			try {
+				PlatformUI.getWorkbench().getProgressService().run(true, true, operation);
+			} catch (InvocationTargetException e) {
+				IStatus status = new Status(IStatus.ERROR, Activator.PLUGIN_ID, e.getMessage(), e);
+				Activator.getDefault().getLog().log(status);
+			} catch (InterruptedException e) {
+				IStatus status = new Status(IStatus.ERROR, Activator.PLUGIN_ID, e.getMessage(), e);
+				Activator.getDefault().getLog().log(status);
+			}
+		}
+	}
+
+	/**
+	 * Computes the arguments of the generator.
+	 * 
+	 * @return the arguments
+	 * @generated
+	 */
+	protected List<? extends Object> getArguments() {
+		return new ArrayList<String>();
+	}
+
+}
\ No newline at end of file
diff --git a/org.eclipse.lyo.tools.updatesite/.gitignore b/org.eclipse.lyo.tools.updatesite/.gitignore
new file mode 100644
index 0000000..e9adb10
--- /dev/null
+++ b/org.eclipse.lyo.tools.updatesite/.gitignore
@@ -0,0 +1,2 @@
+*.jar
+output/
diff --git a/org.eclipse.lyo.tools.updatesite/.project b/org.eclipse.lyo.tools.updatesite/.project
new file mode 100644
index 0000000..b264afd
--- /dev/null
+++ b/org.eclipse.lyo.tools.updatesite/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.lyo.tools.updatesite</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.pde.UpdateSiteBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.UpdateSiteNature</nature>
+	</natures>
+</projectDescription>
diff --git a/org.eclipse.lyo.tools.updatesite/index.html b/org.eclipse.lyo.tools.updatesite/index.html
new file mode 100644
index 0000000..a42a213
--- /dev/null
+++ b/org.eclipse.lyo.tools.updatesite/index.html
@@ -0,0 +1,15 @@
+<!DOCTYPE HTML>
+<html lang="en-US">
+    <head>
+        <meta charset="UTF-8">
+        <meta http-equiv="refresh" content="1;url=site.xml">
+        <script type="text/javascript">
+            window.location.href = "site.xml"
+        </script>
+        <title>Page Redirection</title>
+    </head>
+    <body>
+        <!-- Note: don't tell people to `click` the link, just tell them that it is a link. -->
+        If you are not redirected automatically, follow the <a href='site.xml'>link to site.xml</a>
+    </body>
+</html>
\ No newline at end of file
diff --git a/org.eclipse.lyo.tools.updatesite/site.xml b/org.eclipse.lyo.tools.updatesite/site.xml
new file mode 100644
index 0000000..f2f0166
--- /dev/null
+++ b/org.eclipse.lyo.tools.updatesite/site.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?xml-stylesheet type="text/xsl" href="web/site.xsl"?>
+<site>
+   <feature url="features/org.eclipse.lyo.tools.codegenerator.feature_1.0.0.201605181758.jar" id="org.eclipse.lyo.tools.codegenerator.feature" version="1.0.0.201605181758">
+      <category name="org.eclipse.lyo.tools.category"/>
+   </feature>
+   <category-def name="org.eclipse.lyo.tools.category" label="Eclipse Lyo Tools"/>
+</site>
diff --git a/org.eclipse.lyo.tools.updatesite/web/site.css b/org.eclipse.lyo.tools.updatesite/web/site.css
new file mode 100644
index 0000000..62c6f9f
--- /dev/null
+++ b/org.eclipse.lyo.tools.updatesite/web/site.css
@@ -0,0 +1,12 @@
+<STYLE type="text/css">
+td.spacer {padding-bottom: 10px; padding-top: 10px;}
+.title { font-family: sans-serif; color: #99AACC;}
+.bodyText { font-family: sans-serif; font-size: 9pt; color:#000000;  }
+.sub-header { font-family: sans-serif; font-style: normal; font-weight: bold; font-size: 9pt; color: white;}
+.log-text {font-family: sans-serif; font-style: normal; font-weight: lighter; font-size: 8pt; color:black;}
+.big-header { font-family: sans-serif; font-style: normal; font-weight: bold; font-size: 9pt; color: white; border-top:10px solid white;}
+.light-row {background:#FFFFFF}
+.dark-row {background:#EEEEFF}
+.header {background:#99AADD}
+#indent {word-wrap : break-word;width :300px;text-indent:10px;}
+</STYLE>
diff --git a/org.eclipse.lyo.tools.updatesite/web/site.xsl b/org.eclipse.lyo.tools.updatesite/web/site.xsl
new file mode 100644
index 0000000..3e14ae6
--- /dev/null
+++ b/org.eclipse.lyo.tools.updatesite/web/site.xsl
@@ -0,0 +1,214 @@
+<xsl:stylesheet version = '1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:msxsl="urn:schemas-microsoft-com:xslt">
+<xsl:output method="html" encoding="UTF-8"/>
+<xsl:key name="cat" match="category" use="@name"/>
+<xsl:template match="/">
+<xsl:for-each select="site">
+	<html>
+	<head>
+	<title>org.eclipse.lyo.tools.updatesite</title>
+	<style>@import url("web/site.css");</style>
+	</head>
+	<body>
+	<h1 class="title">org.eclipse.lyo.tools.updatesite</h1>
+	<p class="bodyText"><xsl:value-of select="description"/></p>
+	<table width="100%" border="0" cellspacing="1" cellpadding="2">
+	<xsl:for-each select="category-def">
+		<xsl:sort select="@label" order="ascending" case-order="upper-first"/>
+		<xsl:sort select="@name" order="ascending" case-order="upper-first"/>
+	<xsl:if test="count(key('cat',@name)) != 0">
+			<tr class="header">
+				<td class="sub-header" width="30%">
+					<xsl:value-of select="@name"/>
+				</td>
+				<td class="sub-header" width="70%">
+					<xsl:value-of select="@label"/>
+				</td>
+			</tr>
+			<xsl:for-each select="key('cat',@name)">
+			<xsl:sort select="ancestor::feature//@version" order="ascending"/>
+			<xsl:sort select="ancestor::feature//@id" order="ascending" case-order="upper-first"/>
+			<tr>
+				<xsl:choose>
+				<xsl:when test="(position() mod 2 = 1)">
+					<xsl:attribute name="class">dark-row</xsl:attribute>
+				</xsl:when>
+				<xsl:otherwise>
+					<xsl:attribute name="class">light-row</xsl:attribute>
+				</xsl:otherwise>
+				</xsl:choose>
+				<td class="log-text" id="indent">
+						<xsl:choose>
+						<xsl:when test="ancestor::feature//@label">
+							<a href="{ancestor::feature//@url}"><xsl:value-of select="ancestor::feature//@label"/></a>
+							<br/>
+							<div id="indent">
+							(<xsl:value-of select="ancestor::feature//@id"/> - <xsl:value-of select="ancestor::feature//@version"/>)
+							</div>
+						</xsl:when>
+						<xsl:otherwise>
+						<a href="{ancestor::feature//@url}"><xsl:value-of select="ancestor::feature//@id"/> - <xsl:value-of select="ancestor::feature//@version"/></a>
+						</xsl:otherwise>
+						</xsl:choose>
+						<br />
+				</td>
+				<td>
+					<table>
+						<xsl:if test="ancestor::feature//@os">
+							<tr><td class="log-text" id="indent">Operating Systems:</td>
+							<td class="log-text" id="indent"><xsl:value-of select="ancestor::feature//@os"/></td>
+							</tr>
+						</xsl:if>
+						<xsl:if test="ancestor::feature//@ws">
+							<tr><td class="log-text" id="indent">Windows Systems:</td>
+							<td class="log-text" id="indent"><xsl:value-of select="ancestor::feature//@ws"/></td>
+							</tr>
+						</xsl:if>
+						<xsl:if test="ancestor::feature//@nl">
+							<tr><td class="log-text" id="indent">Languages:</td>
+							<td class="log-text" id="indent"><xsl:value-of select="ancestor::feature//@nl"/></td>
+							</tr>
+						</xsl:if>
+						<xsl:if test="ancestor::feature//@arch">
+							<tr><td class="log-text" id="indent">Architecture:</td>
+							<td class="log-text" id="indent"><xsl:value-of select="ancestor::feature//@arch"/></td>
+							</tr>
+						</xsl:if>
+					</table>
+				</td>
+			</tr>
+			</xsl:for-each>
+			<tr><td class="spacer"><br/></td><td class="spacer"><br/></td></tr>
+		</xsl:if>
+	</xsl:for-each>
+	<xsl:if test="count(feature)  &gt; count(feature/category)">
+	<tr class="header">
+		<td class="sub-header" colspan="2">
+		Uncategorized
+		</td>
+	</tr>
+	</xsl:if>
+	<xsl:choose>
+	<xsl:when test="function-available('msxsl:node-set')">
+	   <xsl:variable name="rtf-nodes">
+		<xsl:for-each select="feature[not(category)]">
+			<xsl:sort select="@id" order="ascending" case-order="upper-first"/>
+			<xsl:sort select="@version" order="ascending" />
+			<xsl:value-of select="."/>
+			<xsl:copy-of select="." />
+		</xsl:for-each>
+	   </xsl:variable>
+	   <xsl:variable name="myNodeSet" select="msxsl:node-set($rtf-nodes)/*"/>
+	<xsl:for-each select="$myNodeSet">
+	<tr>
+		<xsl:choose>
+		<xsl:when test="position() mod 2 = 1">
+		<xsl:attribute name="class">dark-row</xsl:attribute>
+		</xsl:when>
+		<xsl:otherwise>
+		<xsl:attribute name="class">light-row</xsl:attribute>
+		</xsl:otherwise>
+		</xsl:choose>
+		<td class="log-text" id="indent">
+			<xsl:choose>
+			<xsl:when test="@label">
+				<a href="{@url}"><xsl:value-of select="@label"/></a>
+				<br />
+				<div id="indent">
+				(<xsl:value-of select="@id"/> - <xsl:value-of select="@version"/>)
+				</div>
+			</xsl:when>
+			<xsl:otherwise>
+				<a href="{@url}"><xsl:value-of select="@id"/> - <xsl:value-of select="@version"/></a>
+			</xsl:otherwise>
+			</xsl:choose>
+			<br /><br />
+		</td>
+		<td>
+			<table>
+				<xsl:if test="@os">
+					<tr><td class="log-text" id="indent">Operating Systems:</td>
+					<td class="log-text" id="indent"><xsl:value-of select="@os"/></td>
+					</tr>
+				</xsl:if>
+				<xsl:if test="@ws">
+					<tr><td class="log-text" id="indent">Windows Systems:</td>
+					<td class="log-text" id="indent"><xsl:value-of select="@ws"/></td>
+					</tr>
+				</xsl:if>
+				<xsl:if test="@nl">
+					<tr><td class="log-text" id="indent">Languages:</td>
+					<td class="log-text" id="indent"><xsl:value-of select="@nl"/></td>
+					</tr>
+				</xsl:if>
+				<xsl:if test="@arch">
+					<tr><td class="log-text" id="indent">Architecture:</td>
+					<td class="log-text" id="indent"><xsl:value-of select="@arch"/></td>
+					</tr>
+				</xsl:if>
+			</table>
+		</td>
+	</tr>
+	</xsl:for-each>
+	</xsl:when>
+	<xsl:otherwise>
+	<xsl:for-each select="feature[not(category)]">
+	<xsl:sort select="@id" order="ascending" case-order="upper-first"/>
+	<xsl:sort select="@version" order="ascending" />
+	<tr>
+		<xsl:choose>
+		<xsl:when test="count(preceding-sibling::feature[not(category)]) mod 2 = 1">
+		<xsl:attribute name="class">dark-row</xsl:attribute>
+		</xsl:when>
+		<xsl:otherwise>
+		<xsl:attribute name="class">light-row</xsl:attribute>
+		</xsl:otherwise>
+		</xsl:choose>
+		<td class="log-text" id="indent">
+			<xsl:choose>
+			<xsl:when test="@label">
+				<a href="{@url}"><xsl:value-of select="@label"/></a>
+				<br />
+				<div id="indent">
+				(<xsl:value-of select="@id"/> - <xsl:value-of select="@version"/>)
+				</div>
+			</xsl:when>
+			<xsl:otherwise>
+				<a href="{@url}"><xsl:value-of select="@id"/> - <xsl:value-of select="@version"/></a>
+			</xsl:otherwise>
+			</xsl:choose>
+			<br /><br />
+		</td>
+		<td>
+			<table>
+				<xsl:if test="@os">
+					<tr><td class="log-text" id="indent">Operating Systems:</td>
+					<td class="log-text" id="indent"><xsl:value-of select="@os"/></td>
+					</tr>
+				</xsl:if>
+				<xsl:if test="@ws">
+					<tr><td class="log-text" id="indent">Windows Systems:</td>
+					<td class="log-text" id="indent"><xsl:value-of select="@ws"/></td>
+					</tr>
+				</xsl:if>
+				<xsl:if test="@nl">
+					<tr><td class="log-text" id="indent">Languages:</td>
+					<td class="log-text" id="indent"><xsl:value-of select="@nl"/></td>
+					</tr>
+				</xsl:if>
+				<xsl:if test="@arch">
+					<tr><td class="log-text" id="indent">Architecture:</td>
+					<td class="log-text" id="indent"><xsl:value-of select="@arch"/></td>
+					</tr>
+				</xsl:if>
+			</table>
+		</td>
+	</tr>
+	</xsl:for-each>
+	</xsl:otherwise>
+	</xsl:choose>
+	</table>
+	</body>
+	</html>
+</xsl:for-each>
+</xsl:template>
+</xsl:stylesheet>