/******************************************************************************* * Copyright (c) 2006, 2012 Soyatec(http://www.soyatec.com) and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Soyatec - initial API and implementation * IBM Corporation - ongoing enhancements *******************************************************************************/ package at.bestsolution.efxclipse.tooling.pde.e4.project; import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.net.URL; import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Set; import java.util.TreeSet; 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.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.Platform; import org.eclipse.e4.ui.model.application.MAddon; import org.eclipse.e4.ui.model.application.MApplication; import org.eclipse.e4.ui.model.application.MApplicationFactory; import org.eclipse.e4.ui.model.application.commands.MBindingContext; import org.eclipse.e4.ui.model.application.commands.MBindingTable; import org.eclipse.e4.ui.model.application.commands.MCommand; import org.eclipse.e4.ui.model.application.commands.MCommandsFactory; import org.eclipse.e4.ui.model.application.commands.MHandler; import org.eclipse.e4.ui.model.application.commands.MKeyBinding; import org.eclipse.e4.ui.model.application.ui.basic.MBasicFactory; import org.eclipse.e4.ui.model.application.ui.basic.MPart; import org.eclipse.e4.ui.model.application.ui.basic.MPartSashContainer; import org.eclipse.e4.ui.model.application.ui.basic.MPartStack; import org.eclipse.e4.ui.model.application.ui.basic.MTrimBar; import org.eclipse.e4.ui.model.application.ui.basic.MTrimmedWindow; import org.eclipse.e4.ui.model.application.ui.menu.MHandledMenuItem; import org.eclipse.e4.ui.model.application.ui.menu.MHandledToolItem; import org.eclipse.e4.ui.model.application.ui.menu.MMenu; import org.eclipse.e4.ui.model.application.ui.menu.MMenuFactory; import org.eclipse.e4.ui.model.application.ui.menu.MToolBar; import org.eclipse.emf.common.util.URI; 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.jdt.core.IJavaProject; import org.eclipse.jdt.core.IPackageFragment; import org.eclipse.jdt.core.IPackageFragmentRoot; import org.eclipse.jdt.core.JavaCore; import org.eclipse.jdt.core.JavaModelException; import org.eclipse.jface.dialogs.IDialogSettings; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.pde.core.build.IBuildEntry; import org.eclipse.pde.core.plugin.IPluginBase; import org.eclipse.pde.core.plugin.IPluginElement; import org.eclipse.pde.core.plugin.IPluginExtension; import org.eclipse.pde.core.plugin.IPluginImport; import org.eclipse.pde.internal.core.ICoreConstants; import org.eclipse.pde.internal.core.build.WorkspaceBuildModel; import org.eclipse.pde.internal.core.bundle.WorkspaceBundlePluginModel; import org.eclipse.pde.internal.core.bundle.WorkspaceBundlePluginModelBase; import org.eclipse.pde.internal.core.ibundle.IBundle; import org.eclipse.pde.internal.core.plugin.WorkspacePluginModelBase; import org.eclipse.pde.internal.core.project.PDEProject; import org.eclipse.pde.internal.core.util.CoreUtility; import org.eclipse.pde.internal.ui.PDEPlugin; import org.eclipse.pde.internal.ui.PDEUIMessages; import org.eclipse.pde.internal.ui.wizards.IProjectProvider; import org.eclipse.pde.internal.ui.wizards.plugin.NewPluginProjectWizard; import org.eclipse.pde.internal.ui.wizards.plugin.NewProjectCreationOperation; import org.eclipse.pde.internal.ui.wizards.plugin.PluginFieldData; import org.eclipse.ui.IWorkingSet; import org.osgi.framework.Bundle; import org.osgi.framework.Constants; import org.osgi.framework.Version; /** * @author jin.liu (jin.liu@soyatec.com) */ @SuppressWarnings("restriction") public class E4NewProjectWizard extends NewPluginProjectWizard { private PluginFieldData fPluginData; private NewApplicationWizardPage fApplicationPage; private IProjectProvider fProjectProvider; private PluginContentPage fContentPage; public E4NewProjectWizard() { fPluginData = new PluginFieldData(); } public void addPages() { fMainPage = new E4NewProjectWizardPage("main", fPluginData, false, getSelection()); //$NON-NLS-1$ fMainPage.setTitle(PDEUIMessages.NewProjectWizard_MainPage_title); fMainPage.setDescription(PDEUIMessages.NewProjectWizard_MainPage_desc); String pname = getDefaultValue(DEF_PROJECT_NAME); if (pname != null) fMainPage.setInitialProjectName(pname); addPage(fMainPage); fProjectProvider = new IProjectProvider() { public String getProjectName() { return fMainPage.getProjectName(); } public IProject getProject() { return fMainPage.getProjectHandle(); } public IPath getLocationPath() { return fMainPage.getLocationPath(); } }; fContentPage = new PluginContentPage("page2", fProjectProvider, fMainPage, fPluginData); //$NON-NLS-1$ fApplicationPage = new NewApplicationWizardPage(fProjectProvider, fPluginData); addPage(fContentPage); addPage(fApplicationPage); } public boolean performFinish() { try { fMainPage.updateData(); fContentPage.updateData(); IDialogSettings settings = getDialogSettings(); if (settings != null) { fMainPage.saveSettings(settings); fContentPage.saveSettings(settings); } getContainer().run(false, true, new NewProjectCreationOperation(fPluginData, fProjectProvider, null) { private WorkspacePluginModelBase model; @Override protected void adjustManifests(IProgressMonitor monitor, IProject project, IPluginBase bundle) throws CoreException { super.adjustManifests(monitor, project, bundle); IPluginBase pluginBase = model.getPluginBase(); String[] dependencyId = new String[] { "javax.inject", "at.bestsolution.efxclipse.runtime.application", "at.bestsolution.efxclipse.runtime.workbench", "org.eclipse.e4.ui.model.workbench", "org.eclipse.e4.core.services", "org.eclipse.e4.core.di", "org.eclipse.e4.ui.di", "org.eclipse.e4.core.di.extensions", "at.bestsolution.efxclipse.runtime.theme", "at.bestsolution.efxclipse.runtime.di", "org.eclipse.e4.core.contexts", "at.bestsolution.efxclipse.runtime.databinding", "org.eclipse.core.databinding", "org.eclipse.core.databinding.observable", "org.eclipse.core.databinding.property", "org.eclipse.e4.ui.workbench", "org.eclipse.equinox.common", "org.eclipse.e4.ui.services" }; for (String id : dependencyId) { Bundle dependency = Platform.getBundle(id); IPluginImport iimport = model.getPluginFactory().createImport(); iimport.setId(id); if (dependency != null) { Version version = dependency.getVersion(); String versionString = version.getMajor() + "." + version.getMinor() + "." + version.getMicro(); iimport.setVersion(versionString); } pluginBase.add(iimport); } IBundle iBundle = ((WorkspaceBundlePluginModelBase) model).getBundleModel().getBundle(); TreeSet<String> imports = new TreeSet<String>(Arrays.asList(getImports())); iBundle.setHeader(Constants.IMPORT_PACKAGE, iBundle.getHeader(Constants.IMPORT_PACKAGE) + "," + getCommaValuesFromPackagesSet(imports, "2.0.0")); } @Override protected void setPluginLibraries(WorkspacePluginModelBase model) throws CoreException { this.model = model; super.setPluginLibraries(model); } }); IWorkingSet[] workingSets = fMainPage.getSelectedWorkingSets(); if (workingSets.length > 0) getWorkbench().getWorkingSetManager().addToWorkingSets(fProjectProvider.getProject(), workingSets); WorkspacePluginModelBase fmodel = new WorkspaceBundlePluginModel(fProjectProvider.getProject().getFile(ICoreConstants.BUNDLE_FILENAME_DESCRIPTOR), fProjectProvider.getProject().getFile(ICoreConstants.PLUGIN_FILENAME_DESCRIPTOR)); this.createProductsExtension(fmodel); this.createThemeExtension(fmodel); fmodel.save(); this.createApplicationResources(fProjectProvider.getProject(), new NullProgressMonitor()); // Add the product sources adjustBuildPropertiesFile(fProjectProvider.getProject()); return true; } catch (InvocationTargetException e) { PDEPlugin.logException(e); } catch (InterruptedException e) { } catch (CoreException e) { PDEPlugin.logException(e); } return false; } private String[] getImports() { return new String[] { "javafx.animation;version=\"2.0.0\"", "javafx.application;version=\"2.0.0\"", "javafx.beans;version=\"2.0.0\"", "javafx.beans.binding;version=\"2.0.0\"", "javafx.beans.property;version=\"2.0.0\"", "javafx.beans.value;version=\"2.0.0\"", "javafx.collections;version=\"2.0.0\"", "javafx.concurrent;version=\"2.0.0\"", "javafx.embed.swing;version=\"2.0.0\"", "javafx.event;version=\"2.0.0\"", "javafx.fxml;version=\"2.0.0\"", "javafx.geometry;version=\"2.0.0\"", "javafx.scene;version=\"2.0.0\"", "javafx.scene.chart;version=\"2.0.0\"", "javafx.scene.control;version=\"2.0.0\"", "javafx.scene.control.cell;version=\"2.0.0\"", "javafx.scene.effect;version=\"2.0.0\"", "javafx.scene.image;version=\"2.0.0\"", "javafx.scene.input;version=\"2.0.0\"", "javafx.scene.layout;version=\"2.0.0\"", "javafx.scene.media;version=\"2.0.0\"", "javafx.scene.paint;version=\"2.0.0\"", "javafx.scene.shape;version=\"2.0.0\"", "javafx.scene.text;version=\"2.0.0\"", "javafx.scene.transform;version=\"2.0.0\"", "javafx.scene.web;version=\"2.0.0\"", "javafx.stage;version=\"2.0.0\"", "javafx.util;version=\"2.0.0\"" }; } private void adjustBuildPropertiesFile(IProject project) throws CoreException { IFile file = PDEProject.getBuildProperties(project); if (file.exists()) { WorkspaceBuildModel model = new WorkspaceBuildModel(file); IBuildEntry e = model.getBuild().getEntry(IBuildEntry.BIN_INCLUDES); e.addToken("plugin.xml"); Map<String, String> map = fApplicationPage.getData(); String cssEntry = map.get(NewApplicationWizardPage.APPLICATION_CSS_PROPERTY); if (cssEntry != null) { e.addToken(cssEntry); } String xmiPath = map.get(NewApplicationWizardPage.APPLICATION_XMI_PROPERTY); if (xmiPath != null) { e.addToken(xmiPath); } model.save(); } } private void createThemeExtension(WorkspacePluginModelBase fmodel) { try { IPluginExtension extension = fmodel.getFactory().createExtension(); extension.setPoint("at.bestsolution.efxclipse.runtime.theme"); IPluginElement themeElement = fmodel.getFactory().createElement(extension); themeElement.setName("theme"); themeElement.setAttribute("basestylesheet", "css/default.css"); themeElement.setAttribute("id", "default.theme"); extension.add(themeElement); fmodel.getPluginBase().add(extension); } catch (CoreException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * create products extension detail * * @param project */ public void createProductsExtension(WorkspacePluginModelBase fmodel) { Map<String, String> map = fApplicationPage.getData(); if (map == null || map.get(NewApplicationWizardPage.PRODUCT_NAME) == null) return; IPluginExtension extension = fmodel.getFactory().createExtension(); try { String productName = map.get(NewApplicationWizardPage.PRODUCT_NAME); String applicationName = map.get(NewApplicationWizardPage.APPLICATION); String xmiPath = map.get(NewApplicationWizardPage.APPLICATION_XMI_PROPERTY); if (xmiPath != null) { xmiPath = productName + "/" + xmiPath; map.put(NewApplicationWizardPage.APPLICATION_XMI_PROPERTY, xmiPath); } String cssValue = map.get(NewApplicationWizardPage.APPLICATION_CSS_PROPERTY); if (cssValue != null) { cssValue = "platform:/plugin/" + productName + "/" + cssValue; map.put(NewApplicationWizardPage.APPLICATION_CSS_PROPERTY, cssValue); } extension.setPoint("org.eclipse.core.runtime.products"); extension.setId("product"); IPluginElement productElement = fmodel.getFactory().createElement(extension); productElement.setName("product"); if (applicationName != null) { productElement.setAttribute("application", applicationName); } else { productElement.setAttribute("application", NewApplicationWizardPage.E4_APPLICATION); } productElement.setAttribute("name", productName); Set<Entry<String, String>> set = map.entrySet(); if (set != null) { Iterator<Entry<String, String>> it = set.iterator(); if (it != null) { while (it.hasNext()) { Entry<String, String> entry = it.next(); String value = entry.getValue(); if (value == null || value.trim().length() == 0) { continue; } if (entry.getKey().equals(NewApplicationWizardPage.PRODUCT_NAME) || entry.getKey().equals(NewApplicationWizardPage.APPLICATION)) { continue; } IPluginElement element = fmodel.getFactory().createElement(productElement); element.setName("property"); element.setAttribute("name", entry.getKey()); element.setAttribute("value", value); productElement.add(element); } } } extension.add(productElement); fmodel.getPluginBase().add(extension); } catch (CoreException e) { PDEPlugin.logException(e); } } /** * create products extension detail * * @param project */ public void createApplicationResources(IProject project, IProgressMonitor monitor) { Map<String, String> map = fApplicationPage.getData(); if (map == null || map.get(NewApplicationWizardPage.PRODUCT_NAME) == null) return; // If the project has invalid characters, the plug-in name would replace // them with underscores, product name does the same String pluginName = map.get(NewApplicationWizardPage.PRODUCT_NAME); String xmiPath = map.get(NewApplicationWizardPage.APPLICATION_XMI_PROPERTY); // If there's no Activator created we create default package if (!fPluginData.doGenerateClass()) { String packageName = fPluginData.getId(); IPath path = new Path(packageName.replace('.', '/')); if (fPluginData.getSourceFolderName().trim().length() > 0) path = new Path(fPluginData.getSourceFolderName()).append(path); try { CoreUtility.createFolder(project.getFolder(path)); } catch (CoreException e) { // TODO Auto-generated catch block e.printStackTrace(); } } IJavaProject javaProject = JavaCore.create(project); IPackageFragment fragment = null; try { for (IPackageFragment element : javaProject.getPackageFragments()) { if (element.getKind() == IPackageFragmentRoot.K_SOURCE) { fragment = element; } } } catch (JavaModelException e1) { e1.printStackTrace(); } if (xmiPath != null && xmiPath.trim().length() > 0) { // Create a resource set // ResourceSet resourceSet = new ResourceSetImpl(); // Get the URI of the model file. // URI fileURI = URI.createPlatformResourceURI(project.getName() + "/" + xmiPath, true); // Create a resource for this file. // Resource resource = resourceSet.createResource(fileURI); MApplication application = MApplicationFactory.INSTANCE.createApplication(); application.setElementId("org.eclipse.e4.ide.application"); MAddon addon = MApplicationFactory.INSTANCE.createAddon(); addon.setElementId("org.eclipse.e4.core.commands.service"); addon.setContributionURI("bundleclass://org.eclipse.e4.core.commands/org.eclipse.e4.core.commands.CommandServiceAddon"); application.getAddons().add(addon); addon = MApplicationFactory.INSTANCE.createAddon(); addon.setElementId("org.eclipse.e4.ui.contexts.service"); addon.setContributionURI("bundleclass://org.eclipse.e4.ui.services/org.eclipse.e4.ui.services.ContextServiceAddon"); application.getAddons().add(addon); addon = MApplicationFactory.INSTANCE.createAddon(); addon.setElementId("org.eclipse.e4.ui.bindings.service"); addon.setContributionURI("bundleclass://org.eclipse.e4.ui.bindings/org.eclipse.e4.ui.bindings.BindingServiceAddon"); application.getAddons().add(addon); addon = MApplicationFactory.INSTANCE.createAddon(); addon.setElementId("org.eclipse.e4.ui.workbench.commands.model"); addon.setContributionURI("bundleclass://org.eclipse.e4.ui.workbench/org.eclipse.e4.ui.internal.workbench.addons.CommandProcessingAddon"); application.getAddons().add(addon); addon = MApplicationFactory.INSTANCE.createAddon(); addon.setElementId("org.eclipse.e4.ui.workbench.contexts.model"); addon.setContributionURI("bundleclass://org.eclipse.e4.ui.workbench/org.eclipse.e4.ui.internal.workbench.addons.ContextProcessingAddon"); application.getAddons().add(addon); MBindingContext rootContext = MCommandsFactory.INSTANCE.createBindingContext(); rootContext.setElementId("org.eclipse.ui.contexts.dialogAndWindow"); rootContext.setName("In Dialog and Windows"); MBindingContext childContext = MCommandsFactory.INSTANCE.createBindingContext(); childContext.setElementId("org.eclipse.ui.contexts.window"); childContext.setName("In Windows"); rootContext.getChildren().add(childContext); childContext = MCommandsFactory.INSTANCE.createBindingContext(); childContext.setElementId("org.eclipse.ui.contexts.dialog"); childContext.setName("In Dialogs"); rootContext.getChildren().add(childContext); application.getRootContext().add(rootContext); application.getBindingContexts().add(rootContext); resource.getContents().add((EObject) application); MCommand openCommand = createCommand("media.open", "openMedia", "OpenHandler", "M1+O", pluginName, fragment, application); MCommand refreshCommand = createCommand("media.refresh", "refreshMedia", "RefreshHandler", "M1+O", pluginName, fragment, application); //// MCommand openCommand = createCommand(pluginName + ".open", "openCommand", "OpenHandler", "M1+O", pluginName, fragment, application); //// //// MCommand saveCommand = createCommand("org.eclipse.ui.file.save", "saveCommand", "SaveHandler", "M1+S", pluginName, fragment, application); //// // MCommand aboutCommand = createCommand("org.eclipse.ui.help.aboutAction", "aboutCommand", "AboutHandler", "M1+A", pluginName, fragment, application); MTrimmedWindow mainWindow = MBasicFactory.INSTANCE.createTrimmedWindow(); mainWindow.getTags().add("decoration#"+fragment.getElementName().replace('.', '/')+"/decoration/TopArea.fxml"); application.getChildren().add(mainWindow); { mainWindow.setLabel(pluginName); mainWindow.setX(0); mainWindow.setY(0); mainWindow.setWidth(500); mainWindow.setHeight(400); // // Menu // { // MMenu menu = MMenuFactory.INSTANCE.createMenu(); // mainWindow.setMainMenu(menu); // menu.setElementId("org.efxclipse.e4.mainmenu"); // // MMenu fileMenuItem = MMenuFactory.INSTANCE.createMenu(); // menu.getChildren().add(fileMenuItem); // fileMenuItem.setLabel("File"); // { //// MHandledMenuItem menuItemOpen = MMenuFactory.INSTANCE.createHandledMenuItem(); //// fileMenuItem.getChildren().add(menuItemOpen); //// menuItemOpen.setLabel("Open"); //// menuItemOpen.setIconURI("platform:/plugin/" + pluginName + "/icons/sample.gif"); //// menuItemOpen.setCommand(openCommand); //// //// MHandledMenuItem menuItemSave = MMenuFactory.INSTANCE.createHandledMenuItem(); //// fileMenuItem.getChildren().add(menuItemSave); //// menuItemSave.setLabel("Save"); //// menuItemSave.setIconURI("platform:/plugin/" + pluginName + "/icons/save_edit.gif"); //// menuItemSave.setCommand(saveCommand); // // MHandledMenuItem menuItemQuit = MMenuFactory.INSTANCE.createHandledMenuItem(); // fileMenuItem.getChildren().add(menuItemQuit); // menuItemQuit.setLabel("Quit"); // menuItemQuit.setCommand(quitCommand); // } // MMenu helpMenuItem = MMenuFactory.INSTANCE.createMenu(); // menu.getChildren().add(helpMenuItem); // helpMenuItem.setLabel("Help"); // { // MHandledMenuItem menuItemAbout = MMenuFactory.INSTANCE.createHandledMenuItem(); // helpMenuItem.getChildren().add(menuItemAbout); // menuItemAbout.setLabel("About"); // menuItemAbout.setCommand(aboutCommand); // } // } // Top-Sash { MPartSashContainer sash = MBasicFactory.INSTANCE.createPartSashContainer(); sash.setHorizontal(true); // Create a left part { MPart part = MBasicFactory.INSTANCE.createPart(); part.setContributionURI("bundleclass://" + pluginName + "/" + fragment.getElementName() + ".parts.MediaListPart"); sash.getChildren().add(part); } // Create a right a stack { MPartStack stack = MBasicFactory.INSTANCE.createPartStack(); stack.setElementId("content.stack"); sash.getChildren().add(stack); } mainWindow.getChildren().add(sash); } // WindowTrim { MTrimBar trimBar = MBasicFactory.INSTANCE.createTrimBar(); mainWindow.getTrimBars().add(trimBar); MToolBar toolBar = MMenuFactory.INSTANCE.createToolBar(); toolBar.setElementId("org.efxclipse.e4.maintoolbar"); trimBar.getChildren().add(toolBar); MHandledToolItem toolItemOpen = MMenuFactory.INSTANCE.createHandledToolItem(); toolBar.getChildren().add(toolItemOpen); toolItemOpen.setIconURI("platform:/plugin/" + pluginName + "/icons/edit-image-face-show.png"); toolItemOpen.setCommand(openCommand); MHandledToolItem toolItemSave = MMenuFactory.INSTANCE.createHandledToolItem(); toolBar.getChildren().add(toolItemSave); toolItemSave.setIconURI("platform:/plugin/" + pluginName + "/icons/system-reboot.png"); toolItemSave.setCommand(refreshCommand); } } Map<Object, Object> options = new HashMap<Object, Object>(); options.put(XMLResource.OPTION_ENCODING, "UTF-8"); try { resource.save(options); } catch (IOException e) { PDEPlugin.logException(e); } } String cssPath = map.get(NewApplicationWizardPage.APPLICATION_CSS_PROPERTY); if (cssPath != null && cssPath.trim().length() > 0) { IFile file = project.getFile(cssPath); try { prepareFolder(file.getParent(), monitor); URL corePath = ResourceLocator.getProjectTemplateFiles("css/default.css"); file.create(corePath.openStream(), true, monitor); } catch (Exception e) { PDEPlugin.logException(e); } } // IFolder folder = project.getFolder("icons"); // try { // folder.create(true, true, monitor); // Bundle bundle = Platform // .getBundle("org.eclipse.e4.tools.ui.designer"); // // for (String fileName : new String[] { "sample.gif", "save_edit.gif" // }) { // URL sampleUrl = bundle.getEntry("resources/icons/" + fileName); // sampleUrl = FileLocator.resolve(sampleUrl); // InputStream inputStream = sampleUrl.openStream(); // IFile file = folder.getFile(fileName); // file.create(inputStream, true, monitor); // } // } catch (Exception e) { // PDEPlugin.logException(e); // } String template_id = "common"; Set<String> binaryExtentions = new HashSet<String>(); binaryExtentions.add(".gif"); binaryExtentions.add(".png"); binaryExtentions.add(".jpg"); binaryExtentions.add(".flv"); Map<String, String> keys = new HashMap<String, String>(); keys.put("projectName", pluginName); keys.put("packageName", fragment.getElementName() + ".handlers"); keys.put("packageName_parts", fragment.getElementName() + ".parts"); keys.put("packageName_model", fragment.getElementName() + ".model"); keys.put("packageName_decoration", fragment.getElementName() + ".decoration"); try { URL corePath = ResourceLocator.getProjectTemplateFiles(template_id); IRunnableWithProgress op = new TemplateOperation(corePath, project, keys, binaryExtentions); getContainer().run(false, true, op); } catch (Exception e) { PDEPlugin.logException(e); } try { URL corePath = ResourceLocator.getProjectTemplateFiles("src"); IRunnableWithProgress op = new TemplateOperation(corePath, (IContainer) fragment.getResource(), keys, binaryExtentions); getContainer().run(false, true, op); } catch (Exception e) { PDEPlugin.logException(e); } } private MCommand createCommand(String commandId, String name, String className, String keyBinding, String projectName, IPackageFragment fragment, MApplication application) { MCommand command = MCommandsFactory.INSTANCE.createCommand(); command.setCommandName(name); command.setElementId(commandId); application.getCommands().add(command); { // Create Quit handler for command MHandler quitHandler = MCommandsFactory.INSTANCE.createHandler(); quitHandler.setCommand(command); quitHandler.setContributionURI("bundleclass://" + projectName + "/" + fragment.getElementName() + ".handlers." + className); application.getHandlers().add(quitHandler); MKeyBinding binding = MCommandsFactory.INSTANCE.createKeyBinding(); binding.setKeySequence(keyBinding); binding.setCommand(command); List<MBindingTable> tables = application.getBindingTables(); if (tables.size() == 0) { MBindingContext rootContext = null; if (application.getRootContext().size() > 0) { rootContext = application.getRootContext().get(0); } else { rootContext = MCommandsFactory.INSTANCE.createBindingContext(); rootContext.setElementId("org.eclipse.ui.contexts.dialogAndWindow"); rootContext.setName("In Dialog and Windows"); application.getRootContext().add(rootContext); } MBindingTable table = MCommandsFactory.INSTANCE.createBindingTable(); table.setBindingContext(rootContext); tables.add(table); } tables.get(0).getBindings().add(binding); } return command; } private void prepareFolder(IContainer container, IProgressMonitor monitor) throws CoreException { IContainer parent = container.getParent(); if (parent instanceof IFolder) { prepareFolder((IFolder) parent, monitor); } if (!container.exists() && container instanceof IFolder) { IFolder folder = (IFolder) container; folder.create(true, true, monitor); } } public String getPluginId() { return fPluginData.getId(); } public String getPluginVersion() { return fPluginData.getVersion(); } }