Bug 354145 - Provide a Tycho plugin for code generation
- add plugin to ability run diagram generation from maven build
Change-Id: I53d5afc9c1fea117a1ec5d628c0d7433053ec8f6
Signed-off-by: skovalsky <kovalsky@montages.com>
diff --git a/extra/org.eclipse.gmf.tooling.codegen.maven/.classpath b/extra/org.eclipse.gmf.tooling.codegen.maven/.classpath
new file mode 100644
index 0000000..dfca853
--- /dev/null
+++ b/extra/org.eclipse.gmf.tooling.codegen.maven/.classpath
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" output="target/classes" path="src/main/java">
+ <attributes>
+ <attribute name="optional" value="true"/>
+ <attribute name="maven.pomderived" value="true"/>
+ </attributes>
+ </classpathentry>
+ <classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
+ <attributes>
+ <attribute name="maven.pomderived" value="true"/>
+ </attributes>
+ </classpathentry>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5">
+ <attributes>
+ <attribute name="maven.pomderived" value="true"/>
+ </attributes>
+ </classpathentry>
+ <classpathentry kind="src" output="target/test-classes" path="src/test/java">
+ <attributes>
+ <attribute name="optional" value="true"/>
+ <attribute name="maven.pomderived" value="true"/>
+ </attributes>
+ </classpathentry>
+ <classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/extra/org.eclipse.gmf.tooling.codegen.maven/.gitignore b/extra/org.eclipse.gmf.tooling.codegen.maven/.gitignore
new file mode 100644
index 0000000..b83d222
--- /dev/null
+++ b/extra/org.eclipse.gmf.tooling.codegen.maven/.gitignore
@@ -0,0 +1 @@
+/target/
diff --git a/extra/org.eclipse.gmf.tooling.codegen.maven/.project b/extra/org.eclipse.gmf.tooling.codegen.maven/.project
new file mode 100644
index 0000000..ccc12c8
--- /dev/null
+++ b/extra/org.eclipse.gmf.tooling.codegen.maven/.project
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.gmf.tooling.codegen.maven</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.m2e.core.maven2Builder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.eclipse.m2e.core.maven2Nature</nature>
+ </natures>
+</projectDescription>
diff --git a/extra/org.eclipse.gmf.tooling.codegen.maven/.settings/org.eclipse.jdt.core.prefs b/extra/org.eclipse.gmf.tooling.codegen.maven/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..45a6e0e
--- /dev/null
+++ b/extra/org.eclipse.gmf.tooling.codegen.maven/.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.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/extra/org.eclipse.gmf.tooling.codegen.maven/.settings/org.eclipse.m2e.core.prefs b/extra/org.eclipse.gmf.tooling.codegen.maven/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/extra/org.eclipse.gmf.tooling.codegen.maven/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/extra/org.eclipse.gmf.tooling.codegen.maven/pom.xml b/extra/org.eclipse.gmf.tooling.codegen.maven/pom.xml
new file mode 100644
index 0000000..50c52ad
--- /dev/null
+++ b/extra/org.eclipse.gmf.tooling.codegen.maven/pom.xml
@@ -0,0 +1,128 @@
+<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.gmf-tooling</groupId>
+ <artifactId>generate-maven-plugin</artifactId>
+ <version>0.0.10-SNAPSHOT</version>
+ <packaging>maven-plugin</packaging>
+
+ <name>GMFT Generate Maven Plugin</name>
+
+ <parent>
+ <groupId>org.eclipse.gmf-tooling</groupId>
+ <artifactId>extra</artifactId>
+ <version>3.0.0-SNAPSHOT</version>
+ <relativePath>../</relativePath>
+ </parent>
+
+ <properties>
+ <surefire-version>2.17</surefire-version>
+ <plexusVersion>1.5.5</plexusVersion>
+ <maven-version>3.0</maven-version>
+ <plexusUtilsVersion>3.0.7</plexusUtilsVersion>
+ </properties>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-component-metadata</artifactId>
+ <version>${plexusVersion}</version>
+ <executions>
+ <execution>
+ <goals>
+ <goal>generate-metadata</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-plugin-plugin</artifactId>
+ <version>${maven-version}</version>
+ <executions>
+ <execution>
+ <id>default-descriptor</id>
+ <goals>
+ <goal>descriptor</goal>
+ </goals>
+ <phase>process-classes</phase>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+
+ <dependencies>
+ <dependency>
+ <groupId>org.eclipse.gmf-tooling.plugins</groupId>
+ <artifactId>org.eclipse.gmf.tooling.codegen.launcher</artifactId>
+ <version>1.0.0-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-plugin-api</artifactId>
+ <version>${maven-version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.plugin-tools</groupId>
+ <artifactId>maven-plugin-annotations</artifactId>
+ <version>${maven-version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-utils</artifactId>
+ <version>${plexusUtilsVersion}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.tycho</groupId>
+ <artifactId>tycho-core</artifactId>
+ <version>${tycho-version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.tycho</groupId>
+ <artifactId>sisu-equinox-launching</artifactId>
+ <version>${tycho-version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.eclipse.tycho</groupId>
+ <artifactId>org.eclipse.tycho.surefire.osgibooter</artifactId>
+ <version>${tycho-version}</version>
+ <scope>runtime</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>*</groupId>
+ <artifactId>*</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.surefire</groupId>
+ <artifactId>surefire-api</artifactId>
+ <version>${surefire-version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.tycho</groupId>
+ <artifactId>tycho-p2-facade</artifactId>
+ <version>${tycho-version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.surefire</groupId>
+ <artifactId>maven-surefire-common</artifactId>
+ <version>${surefire-version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.mockito</groupId>
+ <artifactId>mockito-core</artifactId>
+ <version>1.8.4</version>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.tycho</groupId>
+ <artifactId>tycho-testing-harness</artifactId>
+ <version>${tycho-version}</version>
+ </dependency>
+ </dependencies>
+</project>
diff --git a/extra/org.eclipse.gmf.tooling.codegen.maven/src/main/java/org/eclipse/gmf/tooling/codegen/maven/CodegenEquinoxInstallationFactory.java b/extra/org.eclipse.gmf.tooling.codegen.maven/src/main/java/org/eclipse/gmf/tooling/codegen/maven/CodegenEquinoxInstallationFactory.java
new file mode 100644
index 0000000..606ec18
--- /dev/null
+++ b/extra/org.eclipse.gmf.tooling.codegen.maven/src/main/java/org/eclipse/gmf/tooling/codegen/maven/CodegenEquinoxInstallationFactory.java
@@ -0,0 +1,18 @@
+/**
+ * Copyright (c) 2015 Montages AG
+ *
+ * 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
+ */
+package org.eclipse.gmf.tooling.codegen.maven;
+
+import org.codehaus.plexus.component.annotations.Component;
+import org.eclipse.sisu.equinox.launching.EquinoxInstallationFactory;
+import org.eclipse.sisu.equinox.launching.internal.DefaultEquinoxInstallationFactory;
+
+@Component(role=EquinoxInstallationFactory.class)
+public class CodegenEquinoxInstallationFactory extends DefaultEquinoxInstallationFactory {
+
+}
diff --git a/extra/org.eclipse.gmf.tooling.codegen.maven/src/main/java/org/eclipse/gmf/tooling/codegen/maven/GenerateDependencyResolverLocator.java b/extra/org.eclipse.gmf.tooling.codegen.maven/src/main/java/org/eclipse/gmf/tooling/codegen/maven/GenerateDependencyResolverLocator.java
new file mode 100644
index 0000000..96af708
--- /dev/null
+++ b/extra/org.eclipse.gmf.tooling.codegen.maven/src/main/java/org/eclipse/gmf/tooling/codegen/maven/GenerateDependencyResolverLocator.java
@@ -0,0 +1,17 @@
+/**
+ * Copyright (c) 2015 Montages AG
+ *
+ * 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
+ */
+package org.eclipse.gmf.tooling.codegen.maven;
+
+import org.codehaus.plexus.component.annotations.Component;
+import org.eclipse.tycho.core.resolver.DefaultDependencyResolverFactory;
+
+@Component(role=DefaultDependencyResolverFactory.class)
+public class GenerateDependencyResolverLocator extends DefaultDependencyResolverFactory {
+
+}
diff --git a/extra/org.eclipse.gmf.tooling.codegen.maven/src/main/java/org/eclipse/gmf/tooling/codegen/maven/GenerateEquinoxLauncher.java b/extra/org.eclipse.gmf.tooling.codegen.maven/src/main/java/org/eclipse/gmf/tooling/codegen/maven/GenerateEquinoxLauncher.java
new file mode 100644
index 0000000..80d18ea
--- /dev/null
+++ b/extra/org.eclipse.gmf.tooling.codegen.maven/src/main/java/org/eclipse/gmf/tooling/codegen/maven/GenerateEquinoxLauncher.java
@@ -0,0 +1,18 @@
+/**
+ * Copyright (c) 2015 Montages AG
+ *
+ * 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
+ */
+package org.eclipse.gmf.tooling.codegen.maven;
+
+import org.codehaus.plexus.component.annotations.Component;
+import org.eclipse.sisu.equinox.launching.EquinoxLauncher;
+import org.eclipse.sisu.equinox.launching.internal.DefaultEquinoxLauncher;
+
+@Component(role=EquinoxLauncher.class)
+public class GenerateEquinoxLauncher extends DefaultEquinoxLauncher {
+
+}
diff --git a/extra/org.eclipse.gmf.tooling.codegen.maven/src/main/java/org/eclipse/gmf/tooling/codegen/maven/GenerateToolchainProvider.java b/extra/org.eclipse.gmf.tooling.codegen.maven/src/main/java/org/eclipse/gmf/tooling/codegen/maven/GenerateToolchainProvider.java
new file mode 100644
index 0000000..cef2aa3
--- /dev/null
+++ b/extra/org.eclipse.gmf.tooling.codegen.maven/src/main/java/org/eclipse/gmf/tooling/codegen/maven/GenerateToolchainProvider.java
@@ -0,0 +1,17 @@
+/**
+ * Copyright (c) 2015 Montages AG
+ *
+ * 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
+ */
+package org.eclipse.gmf.tooling.codegen.maven;
+
+import org.codehaus.plexus.component.annotations.Component;
+import org.eclipse.tycho.core.maven.ToolchainProvider;
+
+@Component(role=ToolchainProvider.class)
+public class GenerateToolchainProvider extends ToolchainProvider {
+
+}
\ No newline at end of file
diff --git a/extra/org.eclipse.gmf.tooling.codegen.maven/src/main/java/org/eclipse/gmf/tooling/codegen/maven/MavenGenerator.java b/extra/org.eclipse.gmf.tooling.codegen.maven/src/main/java/org/eclipse/gmf/tooling/codegen/maven/MavenGenerator.java
new file mode 100644
index 0000000..859728d
--- /dev/null
+++ b/extra/org.eclipse.gmf.tooling.codegen.maven/src/main/java/org/eclipse/gmf/tooling/codegen/maven/MavenGenerator.java
@@ -0,0 +1,318 @@
+/**
+ * Copyright (c) 2015 Montages AG
+ *
+ * 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
+ *
+ * Inspired by org.eclipse.tycho.surefire.TestMojo
+ */
+package org.eclipse.gmf.tooling.codegen.maven;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Properties;
+
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.model.Dependency;
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugins.annotations.Component;
+import org.apache.maven.plugins.annotations.LifecyclePhase;
+import org.apache.maven.plugins.annotations.Mojo;
+import org.apache.maven.plugins.annotations.Parameter;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.toolchain.Toolchain;
+import org.apache.maven.toolchain.ToolchainManager;
+import org.eclipse.gmf.tooling.codegen.launcher.GMFLauncherConstants;
+import org.eclipse.sisu.equinox.launching.BundleStartLevel;
+import org.eclipse.sisu.equinox.launching.DefaultEquinoxInstallationDescription;
+import org.eclipse.sisu.equinox.launching.EquinoxInstallation;
+import org.eclipse.sisu.equinox.launching.EquinoxInstallationDescription;
+import org.eclipse.sisu.equinox.launching.EquinoxInstallationFactory;
+import org.eclipse.sisu.equinox.launching.EquinoxLauncher;
+import org.eclipse.sisu.equinox.launching.internal.EquinoxLaunchConfiguration;
+import org.eclipse.tycho.ArtifactDescriptor;
+import org.eclipse.tycho.ArtifactType;
+import org.eclipse.tycho.ReactorProject;
+import org.eclipse.tycho.artifacts.DependencyArtifacts;
+import org.eclipse.tycho.core.DependencyResolver;
+import org.eclipse.tycho.core.DependencyResolverConfiguration;
+import org.eclipse.tycho.core.TargetPlatformConfiguration;
+import org.eclipse.tycho.core.TychoConstants;
+import org.eclipse.tycho.core.maven.ToolchainProvider;
+import org.eclipse.tycho.core.maven.ToolchainProvider.JDKUsage;
+import org.eclipse.tycho.core.osgitools.DefaultReactorProject;
+import org.eclipse.tycho.core.resolver.DefaultDependencyResolverFactory;
+import org.eclipse.tycho.core.resolver.shared.OptionalResolutionAction;
+import org.eclipse.tycho.core.resolver.shared.PlatformPropertiesUtils;
+import org.eclipse.tycho.core.utils.TychoProjectUtils;
+
+@Mojo(name = "generate", defaultPhase=LifecyclePhase.GENERATE_SOURCES, requiresProject=true)
+public class MavenGenerator extends AbstractMojo {
+
+ public static final String SEPARATOR = File.separator;
+
+ @Parameter(property = "session", readonly = true, required = true)
+ private MavenSession session;
+
+ @Parameter(defaultValue = "SYSTEM")
+ private JDKUsage useJDK;
+
+ @Parameter
+ private BundleStartLevel defaultStartLevel;
+
+ @Parameter(required = true)
+ private String gmfgen;
+
+ @Parameter(defaultValue = "${basedir}")
+ private String output;
+
+ @Parameter
+ private File[] relatedProjects;
+
+ @Parameter
+ private File formatter;
+
+ @Parameter
+ private String customEmitter;
+
+ @Parameter
+ private String customEmitterBundle;
+
+ @Parameter(property = "project", readonly = true)
+ private MavenProject project;
+
+ @Parameter(defaultValue = "${basedir}/../target/work")
+ private File work;
+
+ @Parameter(defaultValue = "${basedir}/../target/osgi/")
+ private File osgiDataDirectory;
+
+ @Component
+ private ToolchainManager toolchainManager;
+
+ @Component
+ private ToolchainProvider toolchainProvider;
+
+ @Component
+ private EquinoxInstallationFactory installationFactory;
+
+ @Component
+ private DefaultDependencyResolverFactory dependencyResolverLocator;
+
+ @Parameter
+ private Dependency[] dependencies;
+
+ @Component
+ private EquinoxLauncher launcher;
+
+ public void execute() throws MojoExecutionException {
+ checkOverlapPath(work, project.getBasedir(), "Work dir", "Project dir");
+ checkOverlapPath(osgiDataDirectory, project.getBasedir(), "OSGi dir", "Project dir");
+
+ checkOverlapPath(work, output, "Work dir", "Path to generated plugin");
+ checkOverlapPath(osgiDataDirectory, output, "OSGi dir", "Path to generated plugin");
+
+ EquinoxInstallation gmfGenerationInstallation = createGMFGenerationIntallation();
+ EquinoxLaunchConfiguration cli = new EquinoxLaunchConfiguration(gmfGenerationInstallation);
+
+ String executable = null;
+ Toolchain tc = getToolchain();
+ if (tc != null) {
+ executable = tc.findTool("java");
+ }
+ cli.setJvmExecutable(executable);
+ cli.setWorkingDirectory(project.getBasedir());
+
+ Properties properties = (Properties) project.getContextValue(TychoConstants.CTX_MERGED_PROPERTIES);
+ cli.addVMArguments("-Dosgi.os=" + PlatformPropertiesUtils.getOS(properties), //
+ "-Dosgi.ws=" + PlatformPropertiesUtils.getWS(properties), //
+ "-Dosgi.arch=" + PlatformPropertiesUtils.getArch(properties));
+
+ cli.addProgramArguments("-data", osgiDataDirectory.getAbsolutePath(), //
+ "-install", gmfGenerationInstallation.getLocation().getAbsolutePath(), //
+ "-application", "org.eclipse.gmf.tooling.codegen.launcher.GMFGenerateApplication",
+ "-configuration", gmfGenerationInstallation.getConfigurationLocation().getAbsolutePath());
+
+ String workDirPath = work.getAbsolutePath();
+ StringBuilder tempFile = new StringBuilder(workDirPath);
+ if (!workDirPath.endsWith(SEPARATOR)) {
+ tempFile.append(SEPARATOR);
+ }
+ tempFile.append("gmflauncher.properties");
+ String tempFilePath = tempFile.toString();
+ prepareGeneratePropertyFile(tempFilePath);
+
+ cli.addProgramArguments(GMFLauncherConstants.KEY_GENERATION_PROPERTIES, tempFilePath);
+
+ int result = launcher.execute(cli, 0);
+
+ if (result != 0) {
+ throw new MojoExecutionException("Generation error");
+ }
+ }
+
+ protected Toolchain getToolchain() throws MojoExecutionException {
+ if (JDKUsage.SYSTEM.equals(useJDK)) {
+ if (toolchainManager != null) {
+ return toolchainManager.getToolchainFromBuildContext("jdk", session);
+ }
+ return null;
+ }
+ String profileName = TychoProjectUtils.getExecutionEnvironmentConfiguration(project).getProfileName();
+ Toolchain toolChain = toolchainProvider.findMatchingJavaToolChain(session, profileName);
+ if (toolChain == null) {
+ throw new MojoExecutionException("useJDK = BREE configured, but no toolchain of type 'jdk' with id '"
+ + profileName + "' found. See http://maven.apache.org/guides/mini/guide-using-toolchains.html");
+ }
+ return toolChain;
+ }
+
+ EquinoxInstallation createGMFGenerationIntallation() throws MojoExecutionException {
+ DependencyResolver platformResolver = dependencyResolverLocator.lookupDependencyResolver(project);
+ final List<Dependency> extraDependencies = getExtraDependencies();
+ List<ReactorProject> reactorProjects = getReactorProjects();
+
+ final DependencyResolverConfiguration resolverConfiguration = new DependencyResolverConfiguration() {
+ @Override
+ public OptionalResolutionAction getOptionalResolutionAction() {
+ return OptionalResolutionAction.IGNORE;
+ }
+
+ @Override
+ public List<Dependency> getExtraRequirements() {
+ return extraDependencies;
+ }
+ };
+
+ DependencyArtifacts generateRuntimeArtifacts = platformResolver.resolveDependencies(session, project, null,
+ reactorProjects, resolverConfiguration);
+
+ if (generateRuntimeArtifacts == null) {
+ throw new MojoExecutionException("Cannot determinate build target platform location -- code not generated");
+ }
+
+ work.mkdirs();
+
+ EquinoxInstallationDescription generateAppDescr = new DefaultEquinoxInstallationDescription();
+ generateAppDescr.setDefaultBundleStartLevel(defaultStartLevel);
+ generateAppDescr.addBundlesToExplode(new LinkedList<String>());
+ generateAppDescr.addFrameworkExtensions(new LinkedList<File>());
+ for (ArtifactDescriptor artifact : generateRuntimeArtifacts.getArtifacts(ArtifactType.TYPE_ECLIPSE_PLUGIN)) {
+
+ ReactorProject otherProject = artifact.getMavenProject();
+ if (otherProject != null) {
+ if (otherProject.sameProject(project)) {
+ generateAppDescr.addBundle(artifact.getKey(), project.getBasedir());
+ continue;
+ }
+ File file = otherProject.getArtifact(artifact.getClassifier());
+ if (file != null) {
+ generateAppDescr.addBundle(artifact.getKey(), file);
+ continue;
+ }
+ }
+ generateAppDescr.addBundle(artifact);
+ }
+
+ return installationFactory.createInstallation(generateAppDescr, work);
+ }
+
+ private List<Dependency> getExtraDependencies() {
+ final List<Dependency> dependencies = new ArrayList<Dependency>();
+ if (this.dependencies != null) {
+ dependencies.addAll(Arrays.asList(this.dependencies));
+ }
+ TargetPlatformConfiguration configuration = TychoProjectUtils.getTargetPlatformConfiguration(project);
+ dependencies.addAll(configuration.getDependencyResolverConfiguration().getExtraRequirements());
+ dependencies.add(newBundleDependency("org.eclipse.osgi"));
+ dependencies.add(newBundleDependency(EquinoxInstallationDescription.EQUINOX_LAUNCHER));
+ dependencies.add(newBundleDependency("org.eclipse.core.runtime"));
+ dependencies.add(newBundleDependency("org.eclipse.gmf.tooling.codegen.launcher"));
+ return dependencies;
+ }
+
+ protected Dependency newBundleDependency(String bundleId) {
+ Dependency ideapp = new Dependency();
+ ideapp.setArtifactId(bundleId);
+ ideapp.setType(ArtifactType.TYPE_ECLIPSE_PLUGIN);
+ return ideapp;
+ }
+
+ private List<ReactorProject> getReactorProjects() {
+ return DefaultReactorProject.adapt(session);
+ }
+
+ private void checkOverlapPath(File containerDir, File overlapDir, String containerName, String overlapDirName) throws MojoExecutionException {
+ checkOverlapPath(containerDir, overlapDir.getAbsolutePath(), containerName, overlapDirName);
+ }
+
+ private void checkOverlapPath(File containerDir, String overlapDirPath, String containerName, String overlapDirName) throws MojoExecutionException {
+ String containerDirPath = containerDir.getAbsolutePath();
+ if (containerDirPath.startsWith(overlapDirPath)) {
+ throw new MojoExecutionException(containerDir + ":" + containerDir + " cannot be located in:" + overlapDirName +":"+ overlapDirPath);
+ }
+ }
+
+ public void prepareGeneratePropertyFile(String tempFile) throws MojoExecutionException {
+ Properties prop = new Properties();
+ OutputStream outputStrem = null;
+
+ try {
+ File outputFile = new File(tempFile);
+ outputStrem = new FileOutputStream(outputFile);
+
+ // set the properties value
+ prop.setProperty(GMFLauncherConstants.PROPERTY_GMFGEN_MODEL, gmfgen);
+ prop.setProperty(GMFLauncherConstants.PROPERTY_GENERATE_PROJECT_LOCATION, output);
+ prop.setProperty(GMFLauncherConstants.PROPERTY_GMFGEN_PROJECT_LOCATION, project.getBasedir().getAbsolutePath());
+
+ if (relatedProjects != null && relatedProjects.length > 0) {
+ StringBuilder sb = new StringBuilder(relatedProjects[0].getAbsolutePath());
+ for (int i = 1; i < relatedProjects.length; i++) {
+ sb.append(',');
+ sb.append(relatedProjects[i].getAbsolutePath());
+ }
+ prop.setProperty(GMFLauncherConstants.PROPERTY_RELATED_PROJECTS, sb.toString());
+ }
+
+ if (formatter.exists()) {
+ prop.setProperty(GMFLauncherConstants.PROPERTY_FORMATTER, formatter.getAbsolutePath());
+ }
+
+ if (customEmitterBundle != null && !customEmitterBundle.isEmpty()
+ && customEmitter != null && !customEmitter.isEmpty()) {
+ prop.setProperty(GMFLauncherConstants.PROPERTY_CUSTOM_EMITTER, customEmitter);
+ prop.setProperty(GMFLauncherConstants.PROPERTY_CUSTOM_EMITTER_BUNDLE, customEmitterBundle);
+ }
+
+ prop.setProperty(GMFLauncherConstants.PROPERTY_TRACE, new Boolean(getLog().isDebugEnabled()).toString());
+
+ prop.store(outputStrem, null);
+
+ } catch (FileNotFoundException e) {
+ throw new MojoExecutionException(e.getMessage());
+ } catch (IOException e) {
+ throw new MojoExecutionException(e.getMessage());
+ } finally {
+ if (outputStrem != null) {
+ try {
+ outputStrem.close();
+ } catch (IOException e) {
+ throw new MojoExecutionException(e.getMessage());
+ }
+ }
+
+ }
+ }
+}
\ No newline at end of file
diff --git a/extra/pom.xml b/extra/pom.xml
new file mode 100644
index 0000000..b4ad4a5
--- /dev/null
+++ b/extra/pom.xml
@@ -0,0 +1,27 @@
+<!--
+ * Copyright (c) 2012 Montages AG
+ * 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
+ *
+-->
+<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.gmf-tooling</groupId>
+ <artifactId>extra</artifactId>
+ <packaging>pom</packaging>
+
+ <parent>
+ <groupId>org.eclipse.gmf-tooling</groupId>
+ <artifactId>parent</artifactId>
+ <version>3.0.0-SNAPSHOT</version>
+ <relativePath>../</relativePath>
+ </parent>
+
+ <modules>
+ <module>org.eclipse.gmf.tooling.codegen.maven</module>
+ </modules>
+
+</project>
diff --git a/pom.xml b/pom.xml
index 35bb109..f32fb7c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -36,6 +36,7 @@
<module>plugins</module>
<!-- <module>gwt-plugins</module> -->
<module>examples</module>
+ <module>extra</module>
<module>doc</module>
<module>features</module>
<module>tests</module>
diff --git a/repository/rename-metadata.sh b/repository/rename-metadata.sh
new file mode 100755
index 0000000..c42b499
--- /dev/null
+++ b/repository/rename-metadata.sh
@@ -0,0 +1,18 @@
+#!/bin/bash
+#
+#mvn install -DperformRelease=true -DcreateChecksum=true
+
+metadata="$1"
+metadata_local="$1"
+
+#remove old sum
+rm -f "$metadata_local.md5"
+rm -f "$metadata_local.sha1"
+
+empty=""
+metadata="${metadata/-local.xml/$empty}".xml
+
+#create new sum
+mv "$metadata_local" "$metadata"
+md5sum "$metadata" > "$metadata".md5
+sha1sum "$metadata" > "$metadata".sha1