diff --git a/bundles/org.eclipse.tools.templates.core/.classpath b/bundles/org.eclipse.tools.templates.core/.classpath
new file mode 100644
index 00000000000..eca7bdba8f0
--- /dev/null
+++ b/bundles/org.eclipse.tools.templates.core/.classpath
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/bundles/org.eclipse.tools.templates.core/.project b/bundles/org.eclipse.tools.templates.core/.project
new file mode 100644
index 00000000000..2fe6c3c8f09
--- /dev/null
+++ b/bundles/org.eclipse.tools.templates.core/.project
@@ -0,0 +1,28 @@
+
+
+ org.eclipse.tools.templates.core
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.eclipse.pde.ManifestBuilder
+
+
+
+
+ org.eclipse.pde.SchemaBuilder
+
+
+
+
+
+ org.eclipse.pde.PluginNature
+ org.eclipse.jdt.core.javanature
+
+
diff --git a/bundles/org.eclipse.tools.templates.core/.settings/org.eclipse.jdt.core.prefs b/bundles/org.eclipse.tools.templates.core/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 00000000000..0c68a61dca8
--- /dev/null
+++ b/bundles/org.eclipse.tools.templates.core/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.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.source=1.8
diff --git a/bundles/org.eclipse.tools.templates.core/META-INF/MANIFEST.MF b/bundles/org.eclipse.tools.templates.core/META-INF/MANIFEST.MF
new file mode 100644
index 00000000000..f8c30c945e6
--- /dev/null
+++ b/bundles/org.eclipse.tools.templates.core/META-INF/MANIFEST.MF
@@ -0,0 +1,12 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Templates Core
+Bundle-SymbolicName: org.eclipse.tools.templates.core
+Bundle-Version: 1.0.0.qualifier
+Bundle-Activator: org.eclipse.tools.templates.core.internal.Activator
+Bundle-Vendor: Eclipse CDT
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.core.resources
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-ActivationPolicy: lazy
+Export-Package: org.eclipse.tools.templates.core
diff --git a/bundles/org.eclipse.tools.templates.core/about.html b/bundles/org.eclipse.tools.templates.core/about.html
new file mode 100644
index 00000000000..d7c511887d6
--- /dev/null
+++ b/bundles/org.eclipse.tools.templates.core/about.html
@@ -0,0 +1,24 @@
+
+
+About
+
+
+About This Content
+
+June 22, 2007
+License
+
+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 1.0 ("EPL"). A copy of the EPL is available
+at http://www.eclipse.org/legal/epl-v10.html.
+For purposes of the EPL, "Program" will mean the Content.
+
+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 http://www.eclipse.org.
+
+
\ No newline at end of file
diff --git a/bundles/org.eclipse.tools.templates.core/build.properties b/bundles/org.eclipse.tools.templates.core/build.properties
new file mode 100644
index 00000000000..17daa5b49ca
--- /dev/null
+++ b/bundles/org.eclipse.tools.templates.core/build.properties
@@ -0,0 +1,5 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .,\
+ about.html
diff --git a/bundles/org.eclipse.tools.templates.core/pom.xml b/bundles/org.eclipse.tools.templates.core/pom.xml
new file mode 100644
index 00000000000..f4a128f2b7b
--- /dev/null
+++ b/bundles/org.eclipse.tools.templates.core/pom.xml
@@ -0,0 +1,37 @@
+
+
+ 4.0.0
+
+
+ org.eclipse.tools.templates
+ parent
+ 1.0.0-SNAPSHOT
+ ../../pom.xml
+
+
+ 1.0.0-SNAPSHOT
+ org.eclipse.tools.templates.core
+ eclipse-plugin
+
+
+
+
+ org.eclipse.tycho
+ tycho-source-plugin
+ ${tycho-version}
+
+
+ plugin-source
+ none
+
+
+ attach-source
+ none
+
+
+
+
+
+
diff --git a/bundles/org.eclipse.tools.templates.core/src/org/eclipse/tools/templates/core/IGenerator.java b/bundles/org.eclipse.tools.templates.core/src/org/eclipse/tools/templates/core/IGenerator.java
new file mode 100644
index 00000000000..9a904fc4bf4
--- /dev/null
+++ b/bundles/org.eclipse.tools.templates.core/src/org/eclipse/tools/templates/core/IGenerator.java
@@ -0,0 +1,22 @@
+/*******************************************************************************
+ * Copyright (c) 2016 QNX Software Systems and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *******************************************************************************/
+package org.eclipse.tools.templates.core;
+
+import java.util.Map;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+
+public interface IGenerator {
+
+ void generate(Map model, IProgressMonitor monitor) throws CoreException;
+
+ IFile[] getFilesToOpen();
+
+}
diff --git a/bundles/org.eclipse.tools.templates.core/src/org/eclipse/tools/templates/core/internal/Activator.java b/bundles/org.eclipse.tools.templates.core/src/org/eclipse/tools/templates/core/internal/Activator.java
new file mode 100644
index 00000000000..d54b70a4716
--- /dev/null
+++ b/bundles/org.eclipse.tools.templates.core/src/org/eclipse/tools/templates/core/internal/Activator.java
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * Copyright (c) 2016 QNX Software Systems and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *******************************************************************************/
+package org.eclipse.tools.templates.core.internal;
+
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+
+public class Activator implements BundleActivator {
+
+ private static BundleContext context;
+
+ static BundleContext getContext() {
+ return context;
+ }
+
+ @Override
+ public void start(BundleContext bundleContext) throws Exception {
+ Activator.context = bundleContext;
+ }
+
+ @Override
+ public void stop(BundleContext bundleContext) throws Exception {
+ Activator.context = null;
+ }
+
+}
diff --git a/bundles/org.eclipse.tools.templates.freemarker/META-INF/MANIFEST.MF b/bundles/org.eclipse.tools.templates.freemarker/META-INF/MANIFEST.MF
index 2a4f99788b0..7b62b334b19 100644
--- a/bundles/org.eclipse.tools.templates.freemarker/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.tools.templates.freemarker/META-INF/MANIFEST.MF
@@ -6,7 +6,8 @@ Bundle-Version: 1.0.0.qualifier
Bundle-Activator: org.eclipse.tools.templates.freemarker.internal.Activator
Require-Bundle: org.eclipse.core.runtime,
org.eclipse.core.resources,
- org.freemarker;visibility:=reexport
+ org.freemarker;visibility:=reexport,
+ org.eclipse.tools.templates.core;bundle-version="1.0.0";visibility:=reexport
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Bundle-ActivationPolicy: lazy
Export-Package: org.eclipse.tools.templates.freemarker
diff --git a/bundles/org.eclipse.tools.templates.freemarker/src/org/eclipse/tools/templates/freemarker/FMGenerator.java b/bundles/org.eclipse.tools.templates.freemarker/src/org/eclipse/tools/templates/freemarker/FMGenerator.java
index adf5e4f2133..11cf6e3a353 100644
--- a/bundles/org.eclipse.tools.templates.freemarker/src/org/eclipse/tools/templates/freemarker/FMGenerator.java
+++ b/bundles/org.eclipse.tools.templates.freemarker/src/org/eclipse/tools/templates/freemarker/FMGenerator.java
@@ -41,7 +41,9 @@ import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.Status;
+import org.eclipse.tools.templates.core.IGenerator;
import org.eclipse.tools.templates.freemarker.internal.Activator;
+import org.eclipse.tools.templates.freemarker.internal.Messages;
import org.osgi.framework.Bundle;
import freemarker.cache.TemplateLoader;
@@ -49,32 +51,30 @@ import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
-public abstract class FMGenerator implements TemplateLoader {
+public abstract class FMGenerator implements IGenerator, TemplateLoader {
private final Configuration templateConfig;
- private String manifestPath;
+ private final String manifestPath;
private TemplateManifest manifest;
private List filesToOpen = new ArrayList<>();
- protected FMGenerator() {
+ protected FMGenerator(String manifestPath) {
templateConfig = new Configuration(Configuration.VERSION_2_3_22);
templateConfig.setTemplateLoader(this);
- }
-
- public abstract Bundle getSourceBundle();
-
- public void setTemplateManifestPath(String manifestPath) {
this.manifestPath = manifestPath;
}
- public TemplateManifest getManifest() {
- return manifest;
- }
-
+ protected abstract Bundle getSourceBundle();
+
protected Class extends TemplateManifest> getManifestClass() {
return TemplateManifest.class;
}
+ protected TemplateManifest getManifest() {
+ return manifest;
+ }
+
+ @Override
public void generate(Map model, IProgressMonitor monitor) throws CoreException {
// If no manifest, just return
if (manifestPath == null) {
@@ -90,7 +90,7 @@ public abstract class FMGenerator implements TemplateLoader {
Unmarshaller unmarshaller = xmlContext.createUnmarshaller();
manifest = (TemplateManifest) unmarshaller.unmarshal(new StringReader(writer.toString()));
} catch (JAXBException e) {
- throw new CoreException(new Status(IStatus.ERROR, Activator.getId(), "Loading template manifest", e));
+ throw new CoreException(new Status(IStatus.ERROR, Activator.getId(), Messages.FMGenerator_0, e));
}
// generate files
@@ -116,7 +116,7 @@ public abstract class FMGenerator implements TemplateLoader {
}
} catch (IOException e) {
throw new CoreException(new Status(IStatus.ERROR, Activator.getId(),
- "Reading file " + fileTemplate.getSrc(), e));
+ String.format(Messages.FMGenerator_1, fileTemplate.getSrc()), e));
}
}
@@ -138,17 +138,17 @@ public abstract class FMGenerator implements TemplateLoader {
}
}
- public void loadFile(String templateFile, Object model, Writer out) throws CoreException {
+ protected void loadFile(String templateFile, Map model, Writer out) throws CoreException {
try {
Template template = templateConfig.getTemplate(templateFile);
template.process(model, out);
} catch (IOException | TemplateException e) {
throw new CoreException(
- new Status(IStatus.ERROR, Activator.getId(), "Processing template " + templateFile, e));
+ new Status(IStatus.ERROR, Activator.getId(), String.format(Messages.FMGenerator_2, templateFile), e));
}
}
- public void generateFile(String templateFile, final Object model, final IFile outputFile, IProgressMonitor monitor)
+ public void generateFile(String templateFile, Map model, final IFile outputFile, IProgressMonitor monitor)
throws CoreException {
try (StringWriter writer = new StringWriter()) {
loadFile(templateFile, model, writer);
@@ -162,11 +162,11 @@ public abstract class FMGenerator implements TemplateLoader {
}
}
} catch (IOException e) {
- throw new CoreException(new Status(IStatus.ERROR, Activator.getId(), "Generating file " + templateFile, e));
+ throw new CoreException(new Status(IStatus.ERROR, Activator.getId(), String.format(Messages.FMGenerator_3, templateFile), e));
}
}
- public static void createParent(IResource child, IProgressMonitor monitor) throws CoreException {
+ protected static void createParent(IResource child, IProgressMonitor monitor) throws CoreException {
if (child == null)
return;
@@ -180,9 +180,10 @@ public abstract class FMGenerator implements TemplateLoader {
parent.create(true, true, monitor);
}
+ @Override
public IFile[] getFilesToOpen() {
- // TODO Auto-generated method stub
- return null;
+ // TODO
+ return new IFile[0];
}
@Override
diff --git a/bundles/org.eclipse.tools.templates.freemarker/src/org/eclipse/tools/templates/freemarker/FMProjectGenerator.java b/bundles/org.eclipse.tools.templates.freemarker/src/org/eclipse/tools/templates/freemarker/FMProjectGenerator.java
index 6032e0af999..f925b4defae 100644
--- a/bundles/org.eclipse.tools.templates.freemarker/src/org/eclipse/tools/templates/freemarker/FMProjectGenerator.java
+++ b/bundles/org.eclipse.tools.templates.freemarker/src/org/eclipse/tools/templates/freemarker/FMProjectGenerator.java
@@ -24,6 +24,10 @@ public abstract class FMProjectGenerator extends FMGenerator {
private IProject[] referencedProjects;
private IProject project;
+
+ public FMProjectGenerator(String manifestPath) {
+ super(manifestPath);
+ }
protected abstract void initProjectDescription(IProjectDescription description) throws CoreException;
diff --git a/bundles/org.eclipse.tools.templates.freemarker/src/org/eclipse/tools/templates/freemarker/internal/Messages.java b/bundles/org.eclipse.tools.templates.freemarker/src/org/eclipse/tools/templates/freemarker/internal/Messages.java
new file mode 100644
index 00000000000..3675f3ff359
--- /dev/null
+++ b/bundles/org.eclipse.tools.templates.freemarker/src/org/eclipse/tools/templates/freemarker/internal/Messages.java
@@ -0,0 +1,25 @@
+/*******************************************************************************
+ * Copyright (c) 2016 QNX Software Systems and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *******************************************************************************/
+package org.eclipse.tools.templates.freemarker.internal;
+
+import org.eclipse.osgi.util.NLS;
+
+public class Messages extends NLS {
+ private static final String BUNDLE_NAME = "org.eclipse.tools.templates.freemarker.internal.messages"; //$NON-NLS-1$
+ public static String FMGenerator_0;
+ public static String FMGenerator_1;
+ public static String FMGenerator_2;
+ public static String FMGenerator_3;
+ static {
+ // initialize resource bundle
+ NLS.initializeMessages(BUNDLE_NAME, Messages.class);
+ }
+
+ private Messages() {
+ }
+}
diff --git a/bundles/org.eclipse.tools.templates.freemarker/src/org/eclipse/tools/templates/freemarker/internal/messages.properties b/bundles/org.eclipse.tools.templates.freemarker/src/org/eclipse/tools/templates/freemarker/internal/messages.properties
new file mode 100644
index 00000000000..6618fb961f9
--- /dev/null
+++ b/bundles/org.eclipse.tools.templates.freemarker/src/org/eclipse/tools/templates/freemarker/internal/messages.properties
@@ -0,0 +1,4 @@
+FMGenerator_0=Loading template manifest
+FMGenerator_1=Reading file %s
+FMGenerator_2=Processing template %s
+FMGenerator_3=Generating file %s
diff --git a/bundles/org.eclipse.tools.templates.ui/META-INF/MANIFEST.MF b/bundles/org.eclipse.tools.templates.ui/META-INF/MANIFEST.MF
index 75b48580da4..d489defeb40 100644
--- a/bundles/org.eclipse.tools.templates.ui/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.tools.templates.ui/META-INF/MANIFEST.MF
@@ -7,7 +7,8 @@ Bundle-Activator: org.eclipse.tools.templates.ui.internal.Activator
Require-Bundle: org.eclipse.ui,
org.eclipse.core.runtime,
org.eclipse.ui.ide,
- org.eclipse.core.resources
+ org.eclipse.core.resources,
+ org.eclipse.tools.templates.core;bundle-version="1.0.0";visibility:=reexport
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Bundle-ActivationPolicy: lazy
Export-Package: org.eclipse.tools.templates.ui
diff --git a/bundles/org.eclipse.tools.templates.ui/src/org/eclipse/tools/templates/ui/TemplateSelectionPage.java b/bundles/org.eclipse.tools.templates.ui/src/org/eclipse/tools/templates/ui/TemplateSelectionPage.java
index a6f6ab6ed60..fd02ca7df49 100644
--- a/bundles/org.eclipse.tools.templates.ui/src/org/eclipse/tools/templates/ui/TemplateSelectionPage.java
+++ b/bundles/org.eclipse.tools.templates.ui/src/org/eclipse/tools/templates/ui/TemplateSelectionPage.java
@@ -30,6 +30,7 @@ import org.eclipse.tools.templates.ui.internal.Template;
import org.eclipse.tools.templates.ui.internal.TemplateExtension;
import org.eclipse.tools.templates.ui.internal.TemplateTable;
import org.eclipse.ui.IWorkbenchWizard;
+import org.eclipse.ui.wizards.newresource.BasicNewResourceWizard;
public class TemplateSelectionPage extends WizardPage {
@@ -99,6 +100,8 @@ public class TemplateSelectionPage extends WizardPage {
if (template != null) {
try {
IWorkbenchWizard nextWizard = template.getWizard();
+ BasicNewResourceWizard oldWizard = (BasicNewResourceWizard) getWizard();
+ nextWizard.init(oldWizard.getWorkbench(), oldWizard.getSelection());
nextWizard.addPages();
return nextWizard.getPages()[0];
} catch (CoreException e) {
diff --git a/bundles/org.eclipse.tools.templates.ui/src/org/eclipse/tools/templates/ui/TemplateWizard.java b/bundles/org.eclipse.tools.templates.ui/src/org/eclipse/tools/templates/ui/TemplateWizard.java
new file mode 100644
index 00000000000..a7d73182f07
--- /dev/null
+++ b/bundles/org.eclipse.tools.templates.ui/src/org/eclipse/tools/templates/ui/TemplateWizard.java
@@ -0,0 +1,75 @@
+/*******************************************************************************
+ * Copyright (c) 2016 QNX Software Systems and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *******************************************************************************/
+package org.eclipse.tools.templates.ui;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.jobs.ISchedulingRule;
+import org.eclipse.tools.templates.core.IGenerator;
+import org.eclipse.tools.templates.ui.internal.Activator;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.actions.WorkspaceModifyOperation;
+import org.eclipse.ui.ide.IDE;
+import org.eclipse.ui.wizards.newresource.BasicNewResourceWizard;
+
+public abstract class TemplateWizard extends BasicNewResourceWizard {
+
+ protected abstract IGenerator getGenerator();
+
+ protected void populateModel(Map model) {
+ // nothing by default
+ }
+
+ @Override
+ public boolean performFinish() {
+ IGenerator generator = getGenerator();
+ Map model = new HashMap<>();
+ populateModel(model);
+
+ try {
+ getContainer().run(true, true, new WorkspaceModifyOperation() {
+ @Override
+ protected void execute(IProgressMonitor monitor)
+ throws CoreException, InvocationTargetException, InterruptedException {
+ monitor.beginTask("Generating project", 1); //$NON-NLS-1$
+ generator.generate(model, monitor);
+ monitor.done();
+ getWorkbench().getDisplay().asyncExec(new Runnable() {
+ @Override
+ public void run() {
+ try {
+ IWorkbenchPage activePage = getWorkbench().getActiveWorkbenchWindow().getActivePage();
+ for (IFile file : generator.getFilesToOpen()) {
+ IDE.openEditor(activePage, file);
+ }
+ } catch (PartInitException e) {
+ Activator.log(e);
+ }
+ }
+ });
+ }
+
+ @Override
+ public ISchedulingRule getRule() {
+ return ResourcesPlugin.getWorkspace().getRoot();
+ }
+ });
+ } catch (InterruptedException | InvocationTargetException e) {
+ throw new RuntimeException(e);
+ }
+ return true;
+ }
+
+}
diff --git a/pom.xml b/pom.xml
index 1bf00d4bcc3..5ef5011f18a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -60,6 +60,7 @@
+ bundles/org.eclipse.tools.templates.core
bundles/org.eclipse.tools.templates.freemarker
bundles/org.eclipse.tools.templates.ui