| package org.eclipse.update.internal.ui.wizards; |
| |
| import java.lang.reflect.*; |
| |
| import org.eclipse.core.runtime.*; |
| import org.eclipse.jface.dialogs.*; |
| import org.eclipse.jface.dialogs.Dialog; |
| import org.eclipse.jface.operation.*; |
| import org.eclipse.jface.viewers.*; |
| import org.eclipse.jface.wizard.*; |
| import org.eclipse.swt.*; |
| import org.eclipse.swt.graphics.*; |
| import org.eclipse.swt.layout.*; |
| import org.eclipse.swt.widgets.*; |
| import org.eclipse.update.core.*; |
| import org.eclipse.update.core.model.*; |
| import org.eclipse.update.internal.ui.*; |
| import org.eclipse.update.operations.*; |
| |
| |
| public class ReplaceFeatureVersionWizardPage extends WizardPage { |
| |
| private IFeature currentFeature; |
| private IFeature[] features; |
| private TableViewer tableViewer; |
| |
| public ReplaceFeatureVersionWizardPage(IFeature currentFeature, IFeature[] features) { |
| super("SwapFeature"); //$NON-NLS-1$ |
| setTitle(UpdateUI.getString("ReplaceFeatureVersionWizardPage.title")); //$NON-NLS-1$ |
| setDescription(UpdateUI.getString("ReplaceFeatureVersionWizardPage.desc")); //$NON-NLS-1$ |
| this.currentFeature = currentFeature; |
| this.features = features; |
| } |
| |
| public void createControl(Composite parent) { |
| Composite tableContainer = new Composite(parent, SWT.NONE); |
| GridLayout layout = new GridLayout(); |
| layout.marginHeight = layout.marginWidth = 0; |
| tableContainer.setLayout(layout); |
| |
| Label label = new Label(tableContainer, SWT.NONE); |
| label.setText(UpdateUI.getString("ReplaceFeatureVersionWizardPage.label")); //$NON-NLS-1$ |
| |
| Table table = new Table(tableContainer, SWT.BORDER | SWT.SINGLE | SWT.V_SCROLL); |
| table.setLayoutData(new GridData(GridData.FILL_BOTH)); |
| |
| tableViewer = new TableViewer(table); |
| tableViewer.setLabelProvider(new LabelProvider() { |
| public Image getImage(Object element) { |
| UpdateLabelProvider provider = |
| UpdateUI.getDefault().getLabelProvider(); |
| return provider.get(UpdateUIImages.DESC_UNCONF_FEATURE_OBJ, 0); |
| } |
| public String getText(Object element) { |
| IFeature feature = (IFeature) element; |
| return feature.getLabel() + " " + feature.getVersionedIdentifier().getVersion().toString(); //$NON-NLS-1$ |
| } |
| }); |
| |
| tableViewer.setContentProvider(new IStructuredContentProvider() { |
| public Object[] getElements(Object element) { |
| return features; |
| } |
| public void dispose() { |
| } |
| public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { |
| } |
| }); |
| |
| tableViewer.setSorter(new ViewerSorter() { |
| public int compare(Viewer viewer, Object e1, Object e2) { |
| PluginVersionIdentifier v1 = ((IFeature)e1).getVersionedIdentifier().getVersion(); |
| PluginVersionIdentifier v2 = ((IFeature)e2).getVersionedIdentifier().getVersion(); |
| return v1.isGreaterOrEqualTo(v2) ? -1 : 1; |
| } |
| }); |
| |
| tableViewer.addFilter(new ViewerFilter() { |
| public boolean select(Viewer viewer, Object parentElement, Object element) { |
| String version = |
| ((IFeature) element).getVersionedIdentifier().getVersion().toString(); |
| return !version.equals( |
| currentFeature.getVersionedIdentifier().getVersion().toString()); |
| } |
| }); |
| |
| tableViewer.addSelectionChangedListener(new ISelectionChangedListener() { |
| public void selectionChanged(SelectionChangedEvent event) { |
| IStructuredSelection ssel = (IStructuredSelection)tableViewer.getSelection(); |
| if (ssel == null) |
| return; |
| IFeature chosenFeature = (IFeature)ssel.getFirstElement(); |
| IStatus validationStatus = |
| OperationsManager.getValidator().validatePendingReplaceVersion(currentFeature, chosenFeature); |
| setPageComplete(validationStatus == null || validationStatus.getCode() == IStatus.WARNING); |
| |
| if (validationStatus == null) { |
| setErrorMessage(null); |
| } else if (validationStatus.getCode() == IStatus.WARNING) { |
| setErrorMessage(null); |
| setMessage(validationStatus.getMessage(), IMessageProvider.WARNING); |
| } else { |
| setErrorMessage(validationStatus.getMessage()); |
| } |
| } |
| }); |
| |
| tableViewer.setInput(currentFeature); |
| tableViewer.getTable().select(0); |
| setControl(tableContainer); |
| |
| Dialog.applyDialogFont(tableContainer); |
| } |
| |
| public boolean performFinish() { |
| IStructuredSelection ssel = (IStructuredSelection)tableViewer.getSelection(); |
| IFeature chosenFeature = (IFeature)ssel.getFirstElement(); |
| |
| return swap(currentFeature, chosenFeature); |
| } |
| |
| private boolean swap(final IFeature currentFeature, final IFeature anotherFeature) { |
| // IStatus status = |
| // OperationsManager.getValidator().validatePendingReplaceVersion(currentFeature, anotherFeature); |
| // if (status != null) { |
| // ErrorDialog.openError( |
| // UpdateUI.getActiveWorkbenchShell(), |
| // null, |
| // null, |
| // status); |
| // return false; |
| // } |
| |
| IRunnableWithProgress operation = new IRunnableWithProgress() { |
| public void run(IProgressMonitor monitor) |
| throws InvocationTargetException { |
| IOperation revertOperation = |
| OperationsManager |
| .getOperationFactory() |
| .createReplaceFeatureVersionOperation(currentFeature, anotherFeature); |
| try { |
| boolean restartNeeded = revertOperation.execute(monitor, null); |
| UpdateUI.requestRestart(restartNeeded); |
| } catch (CoreException e) { |
| throw new InvocationTargetException(e); |
| } finally { |
| monitor.done(); |
| } |
| } |
| }; |
| try { |
| getContainer().run(false, true, operation); |
| return true; |
| } catch (InvocationTargetException e) { |
| Throwable targetException = e.getTargetException(); |
| if (targetException instanceof InstallAbortedException) { |
| return true; |
| } else { |
| UpdateUI.logException(e); |
| } |
| return false; |
| } catch (InterruptedException e) { |
| return false; |
| } |
| } |
| |
| } |