blob: 157831314e4496972dc1a6f7508dff958bc2ae44 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2013 RCP Vision (http://www.rcp-vision.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:
* Lorenzo Bettini - Initial contribution and API
*******************************************************************************/
package org.eclipse.emf.parsley.wizards;
import java.net.URL;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.ResourceBundle;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.Platform;
import org.eclipse.jface.wizard.Wizard;
import org.eclipse.jface.wizard.WizardPage;
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.IPluginModelFactory;
import org.eclipse.pde.core.plugin.IPluginReference;
import org.eclipse.pde.internal.ui.IHelpContextIds;
import org.eclipse.pde.ui.templates.OptionTemplateSection;
import org.eclipse.pde.ui.templates.PluginReference;
@SuppressWarnings("restriction")
public class TableViewTemplateSection extends OptionTemplateSection {
private static final String KEY_PROJECT_NAME = "packageName";
private static final String KEY_PREFIX_CLASSESNAME = "prefixClassesname";
private static final String KEY_EDITABLE = "editableView";
private static final String MASTERDETAIL_VIEWNAME = "org.eclipse.emf.parsley.view.masterdetail.TableMasterDetailView";
public TableViewTemplateSection() {
setPageCount(1);
createOptions();
}
public String getUsedExtensionPoint() {
return null;
}
public String[] getNewFiles() {
return new String[] { "icons/" };
}
@Override
public String getSectionId() {
return "viewtemplate";
}
@Override
protected URL getInstallURL() {
return EmfParsleyWizardsActivator.getDefault().getBundle().getEntry("/");
}
@Override
protected ResourceBundle getPluginResourceBundle() {
return Platform.getResourceBundle(EmfParsleyWizardsActivator.getDefault().getBundle());
}
public void addPages(Wizard wizard) {
WizardPage page = createPage(0, IHelpContextIds.TEMPLATE_INTRO);
page.setTitle("Table Master Detail Template");
page.setDescription("Creates a Table Master Detail view");
wizard.addPage(page);
markPagesAdded();
}
private void createOptions() {
addOption(KEY_PREFIX_CLASSESNAME, "Prefix classes name", "", 0);
addOption(KEY_EDITABLE, "Is editable", true, 0);
}
protected void updateModel(IProgressMonitor monitor) throws CoreException {
String projectId = project.getDescription().getName();
addOption(KEY_PROJECT_NAME, "Project Name", projectId, 0);
IPluginModelFactory factory = model.getPluginFactory();
IPluginExtension extensionView = createExtensionView(factory);
IPluginExtension extensionMenu = createExtensionMenu(factory);
IPluginBase plugin = model.getPluginBase();
plugin.add(extensionView);
plugin.add(extensionMenu);
}
private IPluginExtension createExtensionMenu(IPluginModelFactory factory)
throws CoreException {
IPluginExtension extensionMenu = createExtension("org.eclipse.ui.menus", true);
IPluginElement elementMenu = factory.createElement(extensionMenu);
elementMenu.setName("menuContribution");
elementMenu.setAttribute("locationURI", "menu:org.eclipse.ui.main.menu");
elementMenu.setAttribute("allPopups", "false");
IPluginElement elementSubMenu = factory.createElement(elementMenu);
elementSubMenu.setName("command");
elementSubMenu.setAttribute("commandId", "org.eclipse.ui.views.showView");
elementSubMenu.setAttribute("label", getStringOption(KEY_PREFIX_CLASSESNAME));
elementSubMenu.setAttribute("tooltip", "Open the Master Detail");
elementSubMenu.setAttribute("style", "push");
IPluginElement elementSubMenuParameter = factory.createElement(elementSubMenu);
elementSubMenuParameter.setName("parameter");
elementSubMenuParameter.setAttribute("name", "org.eclipse.ui.views.showView.viewId");
elementSubMenuParameter.setAttribute("value", getViewId());
extensionMenu.add(elementMenu);
elementMenu.add(elementSubMenu);
elementSubMenu.add(elementSubMenuParameter);
return extensionMenu;
}
private IPluginExtension createExtensionView(IPluginModelFactory factory)
throws CoreException {
IPluginExtension extensionView = createExtension("org.eclipse.ui.views", true);
IPluginElement elementView = factory.createElement(extensionView);
elementView.setName("view");
elementView.setAttribute("id", getViewId());
elementView.setAttribute("name", getStringOption(KEY_PREFIX_CLASSESNAME));
String fullClassName = getAbstractDispatcherPath() + MASTERDETAIL_VIEWNAME;
elementView.setAttribute("class", fullClassName);
elementView.setAttribute("icon", "icons/table.jpg");
extensionView.add(elementView);
return extensionView;
}
private String getAbstractDispatcherPath() {
return getStringOption(KEY_PROJECT_NAME) + ".internal.guice." + getStringOption(KEY_PREFIX_CLASSESNAME) + "ExecutableExtensionFactory:";
}
private String getViewId() {
return getStringOption(KEY_PROJECT_NAME) + "." + getStringOption(KEY_PREFIX_CLASSESNAME);
}
@Override
public IPluginReference[] getDependencies(String schemaVersion) {
List<IPluginReference> result = new ArrayList<IPluginReference>();
result.addAll(Arrays.asList(super.getDependencies(schemaVersion)));
result.add(new PluginReference("org.eclipse.core.runtime", null, 0)); //$NON-NLS-1$
result.add(new PluginReference("org.eclipse.emf.cdo", null, 0)); //$NON-NLS-1$
result.add(new PluginReference("org.eclipse.emf.cdo.net4j", null, 0)); //$NON-NLS-1$
result.add(new PluginReference("org.eclipse.net4j.tcp", null, 0)); //$NON-NLS-1$
result.add(new PluginReference("org.eclipse.xtext", null, 0)); //$NON-NLS-1$
result.add(new PluginReference("org.eclipse.ui.forms", null, 0)); //$NON-NLS-1$
result.add(new PluginReference("org.eclipse.core.databinding.property", null, 0)); //$NON-NLS-1$
result.add(new PluginReference("org.eclipse.emf.parsley", null, 0)); //$NON-NLS-1$
result.add(new PluginReference("org.eclipse.emf.parsley.cdo", null, 0)); //$NON-NLS-1$
return result.toArray(new IPluginReference[result.size()]);
}
}