blob: cf3b191d34f0904f8e1a4c45e0fed15556ccb4ca [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2008 IBM Corporation 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:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.pde.internal.ui.editor.plugin;
import java.io.File;
import java.io.IOException;
import java.util.Locale;
import java.util.zip.ZipFile;
import org.eclipse.core.filesystem.EFS;
import org.eclipse.core.filesystem.IFileStore;
import org.eclipse.core.resources.*;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.preferences.IEclipsePreferences;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.osgi.service.resolver.BaseDescription;
import org.eclipse.osgi.service.resolver.BundleDescription;
import org.eclipse.pde.core.IBaseModel;
import org.eclipse.pde.core.IIdentifiable;
import org.eclipse.pde.core.build.*;
import org.eclipse.pde.core.plugin.*;
import org.eclipse.pde.internal.core.*;
import org.eclipse.pde.internal.core.build.IBuildObject;
import org.eclipse.pde.internal.core.ibundle.IBundlePluginModelProvider;
import org.eclipse.pde.internal.core.plugin.*;
import org.eclipse.pde.internal.core.util.CoreUtility;
import org.eclipse.pde.internal.ui.*;
import org.eclipse.pde.internal.ui.editor.*;
import org.eclipse.pde.internal.ui.editor.build.*;
import org.eclipse.pde.internal.ui.editor.context.InputContext;
import org.eclipse.pde.internal.ui.editor.context.InputContextManager;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.*;
import org.eclipse.ui.ide.FileStoreEditorInput;
import org.eclipse.ui.part.FileEditorInput;
import org.eclipse.ui.views.properties.IPropertySheetPage;
import org.osgi.service.prefs.BackingStoreException;
public class ManifestEditor extends PDELauncherFormEditor implements IShowEditorInput {
private static int BUILD_INDEX = 5;
private static boolean SHOW_SOURCE;
private boolean fEquinox = true;
private boolean fShowExtensions = true;
private IEclipsePreferences fPrefs;
private PluginExportAction fExportAction;
private ILauncherFormPageHelper fLauncherHelper;
/* (non-Javadoc)
* @see org.eclipse.pde.internal.ui.editor.PDEFormEditor#getEditorID()
*/
protected String getEditorID() {
return IPDEUIConstants.MANIFEST_EDITOR_ID;
}
public static IEditorPart openPluginEditor(String id) {
return openPluginEditor(PluginRegistry.findModel(id));
}
public static IEditorPart openPluginEditor(IPluginModelBase model) {
if (model == null) {
Display.getDefault().beep();
return null;
}
return openPluginEditor(model, false);
}
public static IEditorPart openPluginEditor(IPluginModelBase model, boolean source) {
return open(model.getPluginBase(), source);
}
public static IEditorPart open(Object object, boolean source) {
SHOW_SOURCE = source;
if (object instanceof IPluginObject) {
ISharedPluginModel model = ((IPluginObject) object).getModel();
if (model instanceof IBundlePluginModelProvider)
model = ((IBundlePluginModelProvider) model).getBundlePluginModel();
if (model instanceof IPluginModelBase) {
String filename = ((IPluginModelBase) model).isFragmentModel() ? ICoreConstants.FRAGMENT_FILENAME_DESCRIPTOR : ICoreConstants.PLUGIN_FILENAME_DESCRIPTOR;
if (!(object instanceof IPluginExtension) && !(object instanceof IPluginExtensionPoint)) {
String installLocation = model.getInstallLocation();
if (installLocation == null)
return null;
File file = new File(installLocation);
if (file.isFile()) {
if (CoreUtility.jarContainsResource(file, ICoreConstants.BUNDLE_FILENAME_DESCRIPTOR, false)) {
filename = ICoreConstants.BUNDLE_FILENAME_DESCRIPTOR;
}
} else if (new File(file, ICoreConstants.BUNDLE_FILENAME_DESCRIPTOR).exists()) {
filename = ICoreConstants.BUNDLE_FILENAME_DESCRIPTOR;
}
}
IResource resource = model.getUnderlyingResource();
if (resource == null)
return openExternalPlugin(new File(model.getInstallLocation()), filename);
return openWorkspacePlugin(resource.getProject().getFile(filename));
}
}
if (object instanceof BaseDescription) {
BundleDescription desc = ((BaseDescription) object).getSupplier();
String id = desc.getSymbolicName();
String version = desc.getVersion().toString();
ModelEntry entry = PluginRegistry.findEntry(id);
IPluginModelBase[] models = entry.getActiveModels();
for (int i = 0; i < models.length; i++) {
IPluginModelBase model = models[i];
if (version.equals(model.getPluginBase().getVersion()))
return open(model.getPluginBase(), true);
}
}
return null;
}
private static IEditorPart openWorkspacePlugin(IFile pluginFile) {
return openEditor(new FileEditorInput(pluginFile));
}
private static IEditorPart openExternalPlugin(File location, String filename) {
IEditorInput input = null;
if (location.isFile()) {
try {
ZipFile zipFile = new ZipFile(location);
if (zipFile.getEntry(filename) != null)
input = new JarEntryEditorInput(new JarEntryFile(zipFile, filename));
} catch (IOException e) {
}
} else {
File file = new File(location, filename);
if (file.exists()) {
IFileStore store;
try {
store = EFS.getStore(file.toURI());
input = new FileStoreEditorInput(store);
} catch (CoreException e) {
}
}
}
return openEditor(input);
}
public static IEditorPart openEditor(IEditorInput input) {
if (input != null) {
try {
return PDEPlugin.getActivePage().openEditor(input, IPDEUIConstants.MANIFEST_EDITOR_ID);
} catch (PartInitException e) {
PDEPlugin.logException(e);
}
}
return null;
}
protected void createResourceContexts(InputContextManager manager, IFileEditorInput input) {
IFile file = input.getFile();
IContainer container = file.getParent();
IFile manifestFile = null;
IFile buildFile = null;
IFile pluginFile = null;
boolean fragment = false;
String name = file.getName().toLowerCase(Locale.ENGLISH);
if (name.equals("manifest.mf")) { //$NON-NLS-1$
if (container instanceof IFolder)
container = container.getParent();
manifestFile = file;
buildFile = container.getFile(ICoreConstants.BUILD_PROPERTIES_PATH);
pluginFile = createPluginFile(container);
} else if (name.equals("plugin.xml") || name.equals("fragment.xml")) { //$NON-NLS-1$ //$NON-NLS-2$
pluginFile = file;
fragment = name.equals("fragment.xml"); //$NON-NLS-1$
buildFile = container.getFile(ICoreConstants.BUILD_PROPERTIES_PATH);
manifestFile = container.getFile(ICoreConstants.MANIFEST_PATH);
}
if (manifestFile.exists()) {
IEditorInput in = new FileEditorInput(manifestFile);
manager.putContext(in, new BundleInputContext(this, in, file == manifestFile));
}
if (pluginFile.exists()) {
FileEditorInput in = new FileEditorInput(pluginFile);
manager.putContext(in, new PluginInputContext(this, in, file == pluginFile, fragment));
}
if (buildFile.exists()) {
FileEditorInput in = new FileEditorInput(buildFile);
manager.putContext(in, new BuildInputContext(this, in, false));
}
manager.monitorFile(manifestFile);
manager.monitorFile(pluginFile);
manager.monitorFile(buildFile);
fPrefs = new ProjectScope(container.getProject()).getNode(PDECore.PLUGIN_ID);
if (fPrefs != null) {
fShowExtensions = fPrefs.getBoolean(ICoreConstants.EXTENSIONS_PROPERTY, true);
fEquinox = fPrefs.getBoolean(ICoreConstants.EQUINOX_PROPERTY, true);
}
}
protected InputContextManager createInputContextManager() {
PluginInputContextManager manager = new PluginInputContextManager(this);
manager.setUndoManager(new PluginUndoManager(this));
return manager;
}
public void monitoredFileAdded(IFile file) {
if (fInputContextManager == null)
return;
String name = file.getName();
if (name.equalsIgnoreCase("MANIFEST.MF")) { //$NON-NLS-1$
if (!fInputContextManager.hasContext(BundleInputContext.CONTEXT_ID)) {
IEditorInput in = new FileEditorInput(file);
fInputContextManager.putContext(in, new BundleInputContext(this, in, false));
}
} else if (name.equalsIgnoreCase("plugin.xml")) { //$NON-NLS-1$
if (!fInputContextManager.hasContext(PluginInputContext.CONTEXT_ID)) {
IEditorInput in = new FileEditorInput(file);
fInputContextManager.putContext(in, new PluginInputContext(this, in, false, false));
}
} else if (name.equalsIgnoreCase("fragment.xml")) { //$NON-NLS-1$
if (!fInputContextManager.hasContext(PluginInputContext.CONTEXT_ID)) {
IEditorInput in = new FileEditorInput(file);
fInputContextManager.putContext(in, new PluginInputContext(this, in, false, true));
}
} else if (name.equalsIgnoreCase("build.properties")) { //$NON-NLS-1$
if (!fInputContextManager.hasContext(BuildInputContext.CONTEXT_ID)) {
IEditorInput in = new FileEditorInput(file);
fInputContextManager.putContext(in, new BuildInputContext(this, in, false));
}
}
}
public void ensurePluginContextPresence() {
if (fInputContextManager.hasContext(PluginInputContext.CONTEXT_ID))
return;
IProject project = fInputContextManager.getCommonProject();
String name = (fInputContextManager.getAggregateModel() instanceof IFragmentModel) ? ICoreConstants.FRAGMENT_FILENAME_DESCRIPTOR : ICoreConstants.PLUGIN_FILENAME_DESCRIPTOR;
IFile file = project.getFile(name);
WorkspacePluginModelBase model;
if (name.equals("fragment.xml")) //$NON-NLS-1$
model = new WorkspaceFragmentModel(file, false);
else
model = new WorkspacePluginModel(file, false);
IPluginBase pluginBase = model.getPluginBase(true);
try {
pluginBase.setSchemaVersion(TargetPlatformHelper.getSchemaVersion());
} catch (CoreException e) {
}
model.save();
IEditorInput in = new FileEditorInput(file);
fInputContextManager.putContext(in, new PluginInputContext(this, in, false, false));
updateBuildProperties(name);
}
private void updateBuildProperties(String filename) {
try {
InputContext context = fInputContextManager.findContext(BuildInputContext.CONTEXT_ID);
if (context != null) {
IBuildModel buildModel = (IBuildModel) context.getModel();
IBuild build = buildModel.getBuild();
IBuildEntry entry = build.getEntry("bin.includes"); //$NON-NLS-1$
if (entry == null) {
entry = buildModel.getFactory().createEntry("bin.includes"); //$NON-NLS-1$
build.add(entry);
}
if (!entry.contains(filename))
entry.addToken(filename);
}
} catch (CoreException e) {
}
}
public boolean monitoredFileRemoved(IFile file) {
//TODO may need to check with the user if there
//are unsaved changes in the model for the
//file that just got removed under us.
return true;
}
public void editorContextAdded(InputContext context) {
addSourcePage(context.getId());
try {
if (context.getId().equals(BuildInputContext.CONTEXT_ID))
addPage(BUILD_INDEX, new BuildPage(this));
else {
updateFirstThreePages();
}
} catch (PartInitException e) {
PDEPlugin.logException(e);
}
}
public void contextRemoved(InputContext context) {
close(true);
}
private void updateFirstThreePages() {
try {
int index = getActivePage();
removePage(0);
removePage(0);
removePage(0);
addPage(0, new RuntimePage(this));
addPage(0, new DependenciesPage(this));
addPage(0, new OverviewPage(this));
setActivePage(index);
} catch (PartInitException e) {
PDEPlugin.logException(e);
}
}
protected void createSystemFileContexts(InputContextManager manager, FileStoreEditorInput input) {
File file = new File(input.getURI());
File manifestFile = null;
File buildFile = null;
File pluginFile = null;
String name = file.getName().toLowerCase(Locale.ENGLISH);
if (name.equals("manifest.mf")) { //$NON-NLS-1$
manifestFile = file;
File dir = file.getParentFile().getParentFile();
buildFile = new File(dir, "build.properties"); //$NON-NLS-1$
pluginFile = createPluginFile(dir);
} else if (name.equals("build.properties")) { //$NON-NLS-1$
buildFile = file;
File dir = file.getParentFile();
pluginFile = createPluginFile(dir);
manifestFile = new File(dir, ICoreConstants.BUNDLE_FILENAME_DESCRIPTOR);
} else if (name.equals("plugin.xml") || name.equals("fragment.xml")) { //$NON-NLS-1$ //$NON-NLS-2$
pluginFile = file;
File dir = file.getParentFile();
buildFile = new File(dir, ICoreConstants.BUILD_FILENAME_DESCRIPTOR);
manifestFile = new File(dir, ICoreConstants.BUNDLE_FILENAME_DESCRIPTOR);
}
try {
if (manifestFile.exists()) {
IFileStore store = EFS.getStore(manifestFile.toURI());
IEditorInput in = new FileStoreEditorInput(store);
manager.putContext(in, new BundleInputContext(this, in, file == manifestFile));
}
if (pluginFile.exists()) {
IFileStore store = EFS.getStore(pluginFile.toURI());
IEditorInput in = new FileStoreEditorInput(store);
manager.putContext(in, new PluginInputContext(this, in, file == pluginFile, name.equals("fragment.xml"))); //$NON-NLS-1$
}
if (buildFile.exists()) {
IFileStore store = EFS.getStore(buildFile.toURI());
IEditorInput in = new FileStoreEditorInput(store);
manager.putContext(in, new BuildInputContext(this, in, file == buildFile));
}
} catch (CoreException e) {
PDEPlugin.logException(e);
}
}
private File createPluginFile(File dir) {
File pluginFile = new File(dir, ICoreConstants.PLUGIN_FILENAME_DESCRIPTOR);
if (!pluginFile.exists())
pluginFile = new File(dir, ICoreConstants.FRAGMENT_FILENAME_DESCRIPTOR);
return pluginFile;
}
private IFile createPluginFile(IContainer container) {
IFile pluginFile = container.getFile(ICoreConstants.PLUGIN_PATH);
if (!pluginFile.exists())
pluginFile = container.getFile(ICoreConstants.FRAGMENT_PATH);
return pluginFile;
}
protected void createStorageContexts(InputContextManager manager, IStorageEditorInput input) {
if (input instanceof JarEntryEditorInput) {
createJarEntryContexts(manager, (JarEntryEditorInput) input);
return;
}
String name = input.getName().toLowerCase(Locale.ENGLISH);
if (name.startsWith("manifest.mf")) { //$NON-NLS-1$
manager.putContext(input, new BundleInputContext(this, input, true));
} else if (name.startsWith("build.properties")) { //$NON-NLS-1$
manager.putContext(input, new BuildInputContext(this, input, true));
} else if (name.startsWith("plugin.xml")) { //$NON-NLS-1$
manager.putContext(input, new PluginInputContext(this, input, true, false));
} else if (name.startsWith("fragment.xml")) { //$NON-NLS-1$
manager.putContext(input, new PluginInputContext(this, input, true, true));
}
}
protected void createJarEntryContexts(InputContextManager manager, JarEntryEditorInput input) {
IStorage storage = input.getStorage();
ZipFile zip = (ZipFile) storage.getAdapter(ZipFile.class);
try {
if (zip == null)
return;
if (zip.getEntry(ICoreConstants.BUNDLE_FILENAME_DESCRIPTOR) != null) {
input = new JarEntryEditorInput(new JarEntryFile(zip, ICoreConstants.BUNDLE_FILENAME_DESCRIPTOR));
manager.putContext(input, new BundleInputContext(this, input, storage.getName().equals("MANIFEST.MF"))); //$NON-NLS-1$
}
if (zip.getEntry(ICoreConstants.PLUGIN_FILENAME_DESCRIPTOR) != null) {
input = new JarEntryEditorInput(new JarEntryFile(zip, ICoreConstants.PLUGIN_FILENAME_DESCRIPTOR));
manager.putContext(input, new PluginInputContext(this, input, storage.getName().equals("plugin.xml"), false)); //$NON-NLS-1$
} else if (zip.getEntry(ICoreConstants.FRAGMENT_FILENAME_DESCRIPTOR) != null) {
input = new JarEntryEditorInput(new JarEntryFile(zip, ICoreConstants.FRAGMENT_FILENAME_DESCRIPTOR));
manager.putContext(input, new PluginInputContext(this, input, storage.getName().equals("fragment.xml"), true)); //$NON-NLS-1$
}
if (zip.getEntry(ICoreConstants.BUILD_FILENAME_DESCRIPTOR) != null) {
input = new JarEntryEditorInput(new JarEntryFile(zip, ICoreConstants.BUILD_FILENAME_DESCRIPTOR));
manager.putContext(input, new BuildInputContext(this, input, storage.getName().equals("build.properties"))); //$NON-NLS-1$
}
} finally {
try {
if (zip != null)
zip.close();
} catch (IOException e) {
}
}
}
protected void addEditorPages() {
try {
addPage(new OverviewPage(this));
addPage(new DependenciesPage(this));
addPage(new RuntimePage(this));
if (showExtensionTabs()) {
addExtensionTabs();
}
if (fInputContextManager.hasContext(BuildInputContext.CONTEXT_ID))
addPage(new BuildPage(this));
} catch (PartInitException e) {
PDEPlugin.logException(e);
}
addSourcePage(BundleInputContext.CONTEXT_ID);
addSourcePage(PluginInputContext.CONTEXT_ID);
addSourcePage(BuildInputContext.CONTEXT_ID);
}
/**
* @param pageID
* @return
*/
private boolean isSourcePageID(String pageID) {
// Determine whether the page ID is a source page ID
if (pageID == null) {
return false;
} else if (pageID.equals(BuildInputContext.CONTEXT_ID)) {
// build.properites
return true;
} else if (pageID.equals(PluginInputContext.CONTEXT_ID)) {
// plugin.xml
return true;
} else if (pageID.equals(BundleInputContext.CONTEXT_ID)) {
// MANIFEST.MF
return true;
}
return false;
}
/* (non-Javadoc)
* @see org.eclipse.pde.internal.ui.editor.PDEFormEditor#computeInitialPageId()
*/
protected String computeInitialPageId() {
// Used by plug-in search view to open query results, etc.
if (SHOW_SOURCE) {
SHOW_SOURCE = false;
return getPrimarySourceInputContextID();
}
// Retrieve the initial page
String firstPageId = super.computeInitialPageId();
// If none is defined, return the default
// If the initial page is a source page ID (e.g. build.properties,
// MANIFEST.MF, plugin.xml), then return the page ID belonging to the
// input context or file used to open this editor
if (firstPageId == null) {
return OverviewPage.PAGE_ID;
} else if (isSourcePageID(firstPageId)) {
return getPrimarySourceInputContextID();
}
return firstPageId;
}
/* (non-Javadoc)
* @see org.eclipse.pde.internal.ui.editor.PDEFormEditor#getPropertyEditorPageKey(org.eclipse.ui.IFileEditorInput)
*/
protected String getPropertyEditorPageKey(IFileEditorInput input) {
// We are using the project itself to persist the editor page key property
// The value persists even after the editor is closed
// The project is used rather than the file in this case because the
// manifest editor has 3 input files and only one build.properties,
// one MANIFEST.MF and one plugin.xml should exist for each project.
// We also want the last editor page to be shared between the two
// input contexts. The build.properties file has its own editor.
IFile file = input.getFile();
IProject project = file.getProject();
// Ensure the project is defined
if (project == null) {
// Check the file for the key
return super.getPropertyEditorPageKey(input);
}
// Get the persistent editor page key from the project
try {
return project.getPersistentProperty(IPDEUIConstants.PROPERTY_MANIFEST_EDITOR_PAGE_KEY);
} catch (CoreException e) {
// Check the file for the key
return super.getPropertyEditorPageKey(input);
}
}
/* (non-Javadoc)
* @see org.eclipse.pde.internal.ui.editor.PDEFormEditor#setPropertyEditorPageKey(org.eclipse.ui.IFileEditorInput, java.lang.String)
*/
protected void setPropertyEditorPageKey(IFileEditorInput input, String pageId) {
// We are using the project itself to persist the editor page key property
// The value persists even after the editor is closed
// The project is used rather than the file in this case because the
// manifest editor has 3 input files and only one build.properties,
// one MANIFEST.MF and one plugin.xml should exist for each project.
// We also want the last editor page to be shared between the two
// input contexts. The build.properties file has its own editor.
IFile file = input.getFile();
IProject project = file.getProject();
// Ensure the project is defined
if (project == null) {
// Set the key on the file
super.setPropertyEditorPageKey(input, pageId);
return;
}
// Set the editor page ID as a persistent property on the project
try {
project.setPersistentProperty(IPDEUIConstants.PROPERTY_MANIFEST_EDITOR_PAGE_KEY, pageId);
} catch (CoreException e) {
// Set the key on the file
super.setPropertyEditorPageKey(input, pageId);
return;
}
}
/**
* @return
*/
private String getPrimarySourceInputContextID() {
// Get the input context used to open this editor
InputContext primary = fInputContextManager.getPrimaryContext();
// Ensure it is defined
if (primary == null) {
return null;
}
// Return its ID
return primary.getId();
}
/* (non-Javadoc)
* @see org.eclipse.pde.internal.ui.neweditor.MultiSourceEditor#createXMLSourcePage(org.eclipse.pde.internal.ui.neweditor.PDEFormEditor, java.lang.String, java.lang.String)
*/
protected PDESourcePage createSourcePage(PDEFormEditor editor, String title, String name, String contextId) {
if (contextId.equals(PluginInputContext.CONTEXT_ID))
return new ManifestSourcePage(editor, title, name);
if (contextId.equals(BuildInputContext.CONTEXT_ID))
return new BuildSourcePage(editor, title, name);
if (contextId.equals(BundleInputContext.CONTEXT_ID))
return new BundleSourcePage(editor, title, name);
return super.createSourcePage(editor, title, name, contextId);
}
protected ISortableContentOutlinePage createContentOutline() {
return new ManifestOutlinePage(this);
}
public Object getAdapter(Class key) {
//No property sheet needed - block super
if (key.equals(IPropertySheetPage.class)) {
return null;
}
return super.getAdapter(key);
}
public String getTitle() {
IPluginModelBase model = (IPluginModelBase) getAggregateModel();
if (model == null || !model.isValid())
return super.getTitle();
String text = getTitleText(model.getPluginBase());
if (text == null)
return super.getTitle();
return model.getResourceString(text);
}
public String getTitleProperty() {
IPreferenceStore store = PDEPlugin.getDefault().getPreferenceStore();
String pref = store.getString(IPreferenceConstants.PROP_SHOW_OBJECTS);
if (pref != null && pref.equals(IPreferenceConstants.VALUE_USE_NAMES))
return IPluginObject.P_NAME;
return IIdentifiable.P_ID;
}
private String getTitleText(IPluginBase pluginBase) {
IPreferenceStore store = PDEPlugin.getDefault().getPreferenceStore();
String pref = store.getString(IPreferenceConstants.PROP_SHOW_OBJECTS);
if (pref != null && pref.equals(IPreferenceConstants.VALUE_USE_NAMES))
return pluginBase.getName();
return pluginBase.getId();
}
/* (non-Javadoc)
* @see org.eclipse.pde.internal.ui.editor.PDEFormEditor#getInputContext(java.lang.Object)
*/
protected InputContext getInputContext(Object object) {
InputContext context = null;
if (object instanceof IFile) {
String name = ((IFile) object).getName();
if (name.equals("plugin.xml") || name.equals("fragment.xml")) //$NON-NLS-1$ //$NON-NLS-2$
context = fInputContextManager.findContext(PluginInputContext.CONTEXT_ID);
else if (name.equals("MANIFEST.MF")) //$NON-NLS-1$
context = fInputContextManager.findContext(BundleInputContext.CONTEXT_ID);
else if (name.equals("build.properties")) //$NON-NLS-1$
context = fInputContextManager.findContext(BuildInputContext.CONTEXT_ID);
} else if (object instanceof IBuildObject) {
context = fInputContextManager.findContext(BuildInputContext.CONTEXT_ID);
} else if (object instanceof IPluginExtensionPoint || object instanceof IPluginExtension) {
context = fInputContextManager.findContext(PluginInputContext.CONTEXT_ID);
} else {
context = fInputContextManager.findContext(BundleInputContext.CONTEXT_ID);
if (context == null)
context = fInputContextManager.findContext(PluginInputContext.CONTEXT_ID);
}
return context;
}
/* (non-Javadoc)
* @see org.eclipse.ui.IShowEditorInput#showEditorInput(org.eclipse.ui.IEditorInput)
*/
public void showEditorInput(IEditorInput editorInput) {
String name = editorInput.getName();
String id = getActivePageInstance().getId();
if (name.equals("build.properties")) { //$NON-NLS-1$
if (!BuildInputContext.CONTEXT_ID.equals(id))
setActivePage(SHOW_SOURCE ? BuildInputContext.CONTEXT_ID : BuildPage.PAGE_ID);
} else if (name.equals("plugin.xml") || name.equals("fragment.xml")) { //$NON-NLS-1$ //$NON-NLS-2$
if (!PluginInputContext.CONTEXT_ID.equals(id)) {
if (SHOW_SOURCE) {
setActivePage(PluginInputContext.CONTEXT_ID);
} else if (fInputContextManager.hasContext(BundleInputContext.CONTEXT_ID)) {
setActivePage(ExtensionsPage.PAGE_ID);
} else {
setActivePage(OverviewPage.PAGE_ID);
}
}
} else if (!BundleInputContext.CONTEXT_ID.equals(id)) {
setActivePage(SHOW_SOURCE ? BundleInputContext.CONTEXT_ID : OverviewPage.PAGE_ID);
}
}
public boolean showExtensionTabs() {
if (fInputContextManager.hasContext(PluginInputContext.CONTEXT_ID))
return true;
IBaseModel model = getAggregateModel();
return fShowExtensions && model != null && model.isEditable();
}
public boolean isEquinox() {
return fEquinox;
}
protected void addExtensionTabs() throws PartInitException {
addPage(3, new ExtensionPointsPage(this));
addPage(3, new ExtensionsPage(this));
}
protected void setShowExtensions(boolean show) throws BackingStoreException {
if (fPrefs != null) {
fPrefs.putBoolean(ICoreConstants.EXTENSIONS_PROPERTY, show);
fPrefs.flush();
}
fShowExtensions = show;
}
public void contributeToToolbar(IToolBarManager manager) {
contributeLaunchersToToolbar(manager);
manager.add(getExportAction());
}
private PluginExportAction getExportAction() {
if (fExportAction == null) {
fExportAction = new PluginExportAction(this);
fExportAction.setToolTipText(PDEUIMessages.PluginEditor_exportTooltip);
fExportAction.setImageDescriptor(PDEPluginImages.DESC_EXPORT_PLUGIN_TOOL);
}
return fExportAction;
}
protected ILauncherFormPageHelper getLauncherHelper() {
if (fLauncherHelper == null)
fLauncherHelper = new PluginLauncherFormPageHelper(this);
return fLauncherHelper;
}
}