blob: 51a58ee105a88607427df49138a470b78743ba88 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2017 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.team.internal.ui.wizards;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.Adapters;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Platform;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.wizard.IWizard;
import org.eclipse.team.internal.ui.TeamUIPlugin;
import org.eclipse.team.ui.IConfigurationWizard;
import org.eclipse.team.ui.IConfigurationWizardExtension;
import org.eclipse.ui.IPluginContribution;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.model.IWorkbenchAdapter;
import org.eclipse.ui.model.WorkbenchAdapter;
/**
* ConfigurationWizardElement represents an item in the configuration wizard table,
* declared by an extension to the configurationWizards extension point.
*/
public class ConfigurationWizardElement extends WorkbenchAdapter implements IAdaptable, IPluginContribution {
private String id;
private String name;
private ImageDescriptor imageDescriptor;
private IConfigurationElement configurationElement;
/**
* Creates a new instance of this class
*
* @param name the name of the element
*/
public ConfigurationWizardElement(String name) {
this.name = name;
}
/**
* Create an the instance of the object described by the configuration
* element. That is, create the instance of the class the isv supplied in
* the extension point.
* @return the instance of the configuration wizard of type {@link IConfigurationWizard}
*
* @throws CoreException if an error occurs creating the extension
*/
public Object createExecutableExtension() throws CoreException {
return TeamUIPlugin.createExtension(configurationElement, ConfigureProjectWizard.ATT_CLASS);
}
/**
* Creates the instance of the wizard and initializes with the given input.
* @param projects the projects being shared by this wizard
* @return the wizard instance of type {@link IConfigurationWizard}
* @throws CoreException if an error occurs creating the extension
*/
public IWizard createExecutableExtension(IProject[] projects) throws CoreException {
IWorkbench workbench = PlatformUI.getWorkbench();
IConfigurationWizard wizard = (IConfigurationWizard)createExecutableExtension();
IConfigurationWizardExtension extension = Adapters.adapt(wizard, IConfigurationWizardExtension.class);
if (extension == null) {
if (projects.length == 1) {
wizard.init(workbench, projects[0]);
} else {
// Dispose of the created wizard, just in case
try {
wizard.dispose();
} catch (RuntimeException e) {
// If a general exception occurred here, log it and continue
TeamUIPlugin.log(IStatus.ERROR, "An internal error occurred", e); //$NON-NLS-1$
}
IWizard multiWizard = new ConfigureMultipleProjectsWizard(projects, this);
return multiWizard;
}
} else {
extension.init(workbench, projects);
}
return wizard;
}
/*
* Method declared on IAdaptable.
*/
@SuppressWarnings("unchecked")
@Override
public <T> T getAdapter(Class<T> adapter) {
if (adapter == IWorkbenchAdapter.class) {
return (T) this;
}
return Platform.getAdapterManager().getAdapter(this, adapter);
}
/**
* Returns the configuration element
*
* @return the configuration element
*/
public IConfigurationElement getConfigurationElement() {
return configurationElement;
}
/**
* Returns the image for the given element
*
* @param element the element to get the image for
* @return the image for the given element
*/
@Override
public ImageDescriptor getImageDescriptor(Object element) {
return imageDescriptor;
}
/**
* Returns the label for the given element
*
* @param element the element to get the label for
* @return the label for the given element
*/
@Override
public String getLabel(Object element) {
return name;
}
/**
* Returns the id as specified in the extension.
*
* @return java.lang.String
*/
public String getID() {
return id;
}
/**
* Returns the image for this element.
*
* @return the image for this element
*/
public ImageDescriptor getImageDescriptor() {
return imageDescriptor;
}
/**
* Set the configuration element
*
* @param newConfigurationElement the new configuration element
*/
public void setConfigurationElement(IConfigurationElement newConfigurationElement) {
configurationElement = newConfigurationElement;
}
/**
* Set the description parameter of this element
*
* @param value the new description
*/
public void setDescription(String value) {
// Not used
}
/**
* Sets the id parameter of this element
*
* @param value the new ID
*/
public void setID(String value) {
id = value;
}
/**
* Sets the image for this element.
*
* @param value the new image
*/
public void setImageDescriptor(ImageDescriptor value) {
imageDescriptor = value;
}
@Override
public String getLocalId() {
return configurationElement.getAttribute(ConfigureProjectWizard.ATT_ID);
}
@Override
public String getPluginId() {
return configurationElement.getNamespaceIdentifier();
}
/**
* Return whether the wizard created for this element has pages.
* Unfortunately, the only way to find this out is to create the wizard.
* @param projects the projects being shared
* @return whether the resulting wizard has pages
*/
public boolean wizardHasPages(IProject[] projects) {
try {
IWizard wizard = createExecutableExtension(projects);
try {
wizard.addPages();
return (wizard.getPageCount() > 0);
} finally {
wizard.dispose();
}
} catch (CoreException e) {
TeamUIPlugin.log(e);
} catch (RuntimeException e) {
// If a general exception occurred here, log it and continue
TeamUIPlugin.log(IStatus.ERROR, "An internal error occurred", e); //$NON-NLS-1$
}
return false;
}
}