blob: 355302a09fbc98a0dbcc609e262c3e2ec45560dd [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2006, 2013 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
* Sopot Cela - ongoing enhancements
* Lars Vogel - ongoing enhancements
* Wim Jongman - ongoing enhancements
* Steven Spungin - ongoing enhancements, Bug 438591
*******************************************************************************/
package org.eclipse.e4.internal.tools.wizards.project;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.net.URL;
import java.util.ArrayList;
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 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.advanced.MAdvancedFactory;
import org.eclipse.e4.ui.model.application.ui.advanced.MPerspective;
import org.eclipse.e4.ui.model.application.ui.advanced.MPerspectiveStack;
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.jface.wizard.Wizard;
import org.eclipse.pde.core.build.IBuildEntry;
import org.eclipse.pde.core.plugin.IMatchRules;
import org.eclipse.pde.core.plugin.IPluginElement;
import org.eclipse.pde.core.plugin.IPluginExtension;
import org.eclipse.pde.core.plugin.IPluginModelBase;
import org.eclipse.pde.core.plugin.IPluginReference;
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.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.pde.ui.IBundleContentWizard;
import org.eclipse.pde.ui.IFieldData;
import org.eclipse.pde.ui.templates.PluginReference;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.IWorkingSet;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.part.FileEditorInput;
import org.osgi.framework.Bundle;
import org.osgi.framework.Version;
/**
* @author jin.liu (jin.liu@soyatec.com)
*/
public class E4NewProjectWizard extends NewPluginProjectWizard {
private static final String PLUGIN_XML = "plugin.xml";
private static final String MODEL_EDITOR_ID = "org.eclipse.e4.tools.emf.editor3x.e4wbm";
private static final String APPLICATION_MODEL = "Application.e4xmi";
private PluginFieldData fPluginData;
private NewApplicationWizardPage fApplicationPage;
private IProjectProvider fProjectProvider;
private PluginContentPage fContentPage;
private boolean isMinimalist;
public E4NewProjectWizard() {
fPluginData = new PluginFieldData();
}
@Override
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);
}
@Override
@SuppressWarnings("restriction")
public boolean performFinish() {
try {
fMainPage.updateData();
fContentPage.updateData();
IDialogSettings settings = getDialogSettings();
if (settings != null) {
fMainPage.saveSettings(settings);
fContentPage.saveSettings(settings);
}
// Create the project
getContainer().run(
false,
true,
new NewProjectCreationOperation(fPluginData,
fProjectProvider, new ContentWizard()) {
private WorkspacePluginModelBase model;
@Override
protected void setPluginLibraries(
WorkspacePluginModelBase model)
throws CoreException {
this.model = model;
super.setPluginLibraries(model);
}
});
// Add Project to working set
IWorkingSet[] workingSets = fMainPage.getSelectedWorkingSets();
if (workingSets.length > 0)
getWorkbench().getWorkingSetManager().addToWorkingSets(
fProjectProvider.getProject(), workingSets);
this.createProductsExtension(fProjectProvider.getProject());
this.createApplicationResources(fProjectProvider.getProject(),
new NullProgressMonitor());
// Add the resources to build.properties
adjustBuildPropertiesFile(fProjectProvider.getProject());
// Open the model editor
openEditorForApplicationModel();
return true;
} catch (InvocationTargetException e) {
PDEPlugin.logException(e);
} catch (InterruptedException e) {
} catch (CoreException e) {
PDEPlugin.logException(e);
}
return false;
}
/**
* Opens the model editor after the project was created.
*
* @throws PartInitException
*/
private void openEditorForApplicationModel() throws PartInitException {
IFile file = fProjectProvider.getProject().getFile(APPLICATION_MODEL);
if (file != null) {
FileEditorInput input = new FileEditorInput(file);
IWorkbenchWindow window = PlatformUI.getWorkbench()
.getActiveWorkbenchWindow();
IWorkbenchPage page = window.getActivePage();
page.openEditor(input, MODEL_EDITOR_ID);
}
}
/**
* Adds other resources to the build.properties file.
*
* @param project
* @throws CoreException
*/
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);
e.addToken(APPLICATION_MODEL);
// Event though an icons directory is always created
// it seems appropriate to only add it if it contains
// some content
if (!isMinimalist) {
e.addToken("icons/");
}
Map<String, String> map = fApplicationPage.getData();
String cssEntry = map
.get(NewApplicationWizardPage.APPLICATION_CSS_PROPERTY);
if (cssEntry != null) {
e.addToken(cssEntry);
}
model.save();
}
}
/**
* create products extension detail
*
* @param project
*/
@SuppressWarnings("restriction")
public void createProductsExtension(IProject project) {
Map<String, String> map = fApplicationPage.getData();
if (map == null
|| map.get(NewApplicationWizardPage.PRODUCT_NAME) == null)
return;
WorkspacePluginModelBase fmodel = new WorkspaceBundlePluginModel(
project.getFile(ICoreConstants.BUNDLE_FILENAME_DESCRIPTOR),
project.getFile(ICoreConstants.PLUGIN_FILENAME_DESCRIPTOR));
IPluginExtension extension = fmodel.getFactory().createExtension();
try {
String productName = map.get(NewApplicationWizardPage.PRODUCT_NAME);
String applicationName = map
.get(NewApplicationWizardPage.APPLICATION);
String cssValue = map
.get(NewApplicationWizardPage.APPLICATION_CSS_PROPERTY);
if (cssValue != null) {
cssValue = "platform:/plugin/" + fPluginData.getId() + "/"
+ cssValue;
map.put(NewApplicationWizardPage.APPLICATION_CSS_PROPERTY,
cssValue);
}
if ("TRUE".equals(map.get(NewApplicationWizardPage.generateLifecycle))){
String lifeCycleValue = map
.get(NewApplicationWizardPage.generateLifecycleName);
if (lifeCycleValue != null && lifeCycleValue.isEmpty() == false) {
lifeCycleValue = "bundleclass://" + fPluginData.getId() + "/"
+ fPluginData.getId().toLowerCase() + "." + lifeCycleValue;
map.put(NewApplicationWizardPage.LIFECYCLE_URI_PROPERTY,
lifeCycleValue);
}
}
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)
|| entry.getKey().equals(
NewApplicationWizardPage.richSample)
|| entry.getKey().equals(
NewApplicationWizardPage.generateLifecycle)
|| entry.getKey().equals(
NewApplicationWizardPage.generateLifecycleName)
|| entry.getKey()
.equals(NewApplicationWizardPage.CLEAR_PERSISTED_STATE)) {
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);
fmodel.save();
} catch (CoreException e) {
PDEPlugin.logException(e);
}
}
/**
* create products extension detail
*
* @param project
*/
@SuppressWarnings("restriction")
public void createApplicationResources(IProject project,
IProgressMonitor monitor) {
Map<String, String> map = fApplicationPage.getData();
isMinimalist = !map.get(NewApplicationWizardPage.richSample)
.equalsIgnoreCase("TRUE");
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 = fPluginData.getId();
// BEGIN Generate E4Lifecycle class with annotations
boolean lifeCycleCreated = "TRUE".equals(map.get(NewApplicationWizardPage.generateLifecycle));
if (lifeCycleCreated){
String classname = fPluginData.getId() + "." + map.get(NewApplicationWizardPage.generateLifecycleName);
LifeCycleClassCodeGenerator fGenerator = new LifeCycleClassCodeGenerator(project, classname, fPluginData, false, getContainer());
try {
fGenerator.generate(new NullProgressMonitor());
} catch (CoreException e2) {
e2.printStackTrace();
}
}
// END Generate E4Lifecycle class with annotations
// If there's no Activator or LifeCycle created we create default package
if (!fPluginData.doGenerateClass() && !lifeCycleCreated) {
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();
}
createApplicationModel(project, pluginName, fragment);
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);
}
}
String template_id = "common";
Set<String> binaryExtentions = new HashSet<String>();
binaryExtentions.add(".gif");
binaryExtentions.add(".png");
Map<String, String> keys = new HashMap<String, String>();
keys.put("projectName", pluginName);
keys.put("productFileName",
map.get(NewApplicationWizardPage.PRODUCT_NAME));
String elementName = fragment.getElementName();
keys.put("packageName", (elementName.equals("") ? "" : elementName
+ ".")
+ "handlers");
keys.put("packageName2", (elementName.equals("") ? "" : elementName
+ ".")
+ "parts");
keys.put(
"programArgs",
"true".equalsIgnoreCase(map
.get(NewApplicationWizardPage.CLEAR_PERSISTED_STATE)) ? "-clearPersistedState"
: "");
try {
URL corePath = ResourceLocator.getProjectTemplateFiles(template_id);
IRunnableWithProgress op = new TemplateOperation(corePath, project,
keys, binaryExtentions, isMinimalist);
getContainer().run(false, true, op);
} catch (Exception e) {
PDEPlugin.logException(e);
}
if (!isMinimalist) {
try {
URL corePath = ResourceLocator.getProjectTemplateFiles("src");
IRunnableWithProgress op = new TemplateOperation(corePath,
(IContainer) fragment.getResource(), keys,
binaryExtentions, isMinimalist);
getContainer().run(false, true, op);
} catch (Exception e) {
PDEPlugin.logException(e);
}
}
}
private void createApplicationModel(IProject project, String pluginName,
IPackageFragment fragment) {
Map<String, String> map = fApplicationPage.getData();
boolean isMinimalist = !map.get(NewApplicationWizardPage.richSample)
.equalsIgnoreCase("TRUE");
if (APPLICATION_MODEL != null && APPLICATION_MODEL.trim().length() > 0) {
// Create a resource set
//
ResourceSet resourceSet = new ResourceSetImpl();
// Get the URI of the model file.
//
URI fileURI = URI.createPlatformResourceURI(project.getName() + "/"
+ APPLICATION_MODEL, 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.handler.model");
addon.setContributionURI("bundleclass://org.eclipse.e4.ui.workbench/org.eclipse.e4.ui.internal.workbench.addons.HandlerProcessingAddon");
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);
addon = MApplicationFactory.INSTANCE.createAddon();
addon.setElementId("org.eclipse.e4.ui.workbench.bindings.model");
addon.setContributionURI("bundleclass://org.eclipse.e4.ui.workbench.swt/org.eclipse.e4.ui.workbench.swt.util.BindingProcessingAddon");
application.getAddons().add(addon);
MTrimmedWindow mainWindow = MBasicFactory.INSTANCE
.createTrimmedWindow();
application.getChildren().add(mainWindow);
mainWindow.setLabel(pluginName);
mainWindow.setWidth(500);
mainWindow.setHeight(400);
resource.getContents().add((EObject) application);
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);
if (!isMinimalist) {
// Create Quit command
MCommand quitCommand = createCommand(
"org.eclipse.ui.file.exit", "quitCommand",
"QuitHandler", "M1+Q", 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);
MMenu menu = MMenuFactory.INSTANCE.createMenu();
mainWindow.setMainMenu(menu);
menu.setElementId("menu:org.eclipse.ui.main.menu");
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.png");
menuItemOpen.setCommand(openCommand);
MHandledMenuItem menuItemSave = MMenuFactory.INSTANCE
.createHandledMenuItem();
fileMenuItem.getChildren().add(menuItemSave);
menuItemSave.setLabel("Save");
menuItemSave.setIconURI("platform:/plugin/" + pluginName
+ "/icons/save_edit.png");
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);
}
// PerspectiveStack
MPerspectiveStack perspectiveStack = MAdvancedFactory.INSTANCE
.createPerspectiveStack();
mainWindow.getChildren().add(perspectiveStack);
MPerspective perspective = MAdvancedFactory.INSTANCE
.createPerspective();
perspectiveStack.getChildren().add(perspective);
{
// Part Container
MPartSashContainer partSashContainer = MBasicFactory.INSTANCE
.createPartSashContainer();
perspective.getChildren().add(partSashContainer);
MPartStack partStack = MBasicFactory.INSTANCE
.createPartStack();
partSashContainer.getChildren().add(partStack);
MPart part = MBasicFactory.INSTANCE.createPart();
partStack.getChildren().add(part);
part.setLabel("Sample Part");
part.setContributionURI("bundleclass://" + pluginName + "/"
+ fragment.getElementName() + ".parts"
+ ".SamplePart");
}
// WindowTrim
MTrimBar trimBar = MBasicFactory.INSTANCE.createTrimBar();
mainWindow.getTrimBars().add(trimBar);
MToolBar toolBar = MMenuFactory.INSTANCE.createToolBar();
toolBar.setElementId("toolbar:org.eclipse.ui.main.toolbar");
trimBar.getChildren().add(toolBar);
MHandledToolItem toolItemOpen = MMenuFactory.INSTANCE
.createHandledToolItem();
toolBar.getChildren().add(toolItemOpen);
toolItemOpen.setIconURI("platform:/plugin/" + pluginName
+ "/icons/sample.png");
toolItemOpen.setCommand(openCommand);
MHandledToolItem toolItemSave = MMenuFactory.INSTANCE
.createHandledToolItem();
toolBar.getChildren().add(toolItemSave);
toolItemSave.setIconURI("platform:/plugin/" + pluginName
+ "/icons/save_edit.png");
toolItemSave.setCommand(saveCommand);
}
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);
}
}
}
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 handler for command
MHandler handler = MCommandsFactory.INSTANCE.createHandler();
handler.setCommand(command);
String elementName = fragment.getElementName();
handler.setContributionURI("bundleclass://" + projectName + "/"
+ (elementName.equals("") ? "" : elementName + ".")
+ "handlers." + className);
handler.setElementId(projectName + ".handler." + name);
application.getHandlers().add(handler);
// create binding for the command
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(parent, monitor);
}
if (!container.exists() && container instanceof IFolder) {
IFolder folder = (IFolder) container;
folder.create(true, true, monitor);
}
}
@Override
public String getPluginId() {
return fPluginData.getId();
}
@Override
public String getPluginVersion() {
return fPluginData.getVersion();
}
private class ContentWizard extends Wizard implements IBundleContentWizard {
String[] dependencies = new String[] { "javax.inject",
"org.eclipse.core.runtime", "org.eclipse.swt",
"org.eclipse.e4.ui.model.workbench", "org.eclipse.jface",
"org.eclipse.e4.ui.services", "org.eclipse.e4.ui.workbench",
"org.eclipse.e4.core.di", "org.eclipse.e4.ui.di",
"org.eclipse.e4.core.contexts", };
public void init(IFieldData data) {
}
public IPluginReference[] getDependencies(String schemaVersion) {
ArrayList<IPluginReference> result = new ArrayList<IPluginReference>(
dependencies.length);
for (String dependency : dependencies) {
Bundle bundle = Platform.getBundle(dependency);
String versionString = "0.0.0";
if (dependency != null) {
Version version = bundle.getVersion();
versionString = version.getMajor() + "."
+ version.getMinor() + "." + version.getMicro();
}
result.add(new PluginReference(dependency, versionString,
IMatchRules.GREATER_OR_EQUAL));
}
return result.toArray(new IPluginReference[0]);
}
public String[] getNewFiles() {
return new String[0];
}
public boolean performFinish(IProject project, IPluginModelBase model,
IProgressMonitor monitor) {
return true;
}
public String[] getImportPackages() {
return new String[] { };
}
@Override
public boolean performFinish() {
return true;
}
}
}