diff options
9 files changed, 86 insertions, 490 deletions
diff --git a/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/wizards/IImportWizardPageFactory.java b/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/wizards/IImportWizardPageFactory.java index fd524418..d332c372 100644 --- a/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/wizards/IImportWizardPageFactory.java +++ b/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/wizards/IImportWizardPageFactory.java @@ -8,6 +8,7 @@ package org.eclipse.m2e.core.ui.internal.wizards; +import java.util.Collection; import java.util.List; import org.eclipse.jface.operation.IRunnableContext; @@ -22,6 +23,6 @@ public interface IImportWizardPageFactory { * Returns true if postInstallHook has been scheduled for execution and false otherwise */ public boolean implement(List<IMavenDiscoveryProposal> proposals, IRunnableWithProgress postInstallHook, - IRunnableContext context); + IRunnableContext context, Collection<String> projectsToConfigure); } diff --git a/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/wizards/MavenImportWizard.java b/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/wizards/MavenImportWizard.java index 445c85da..b414c04e 100644 --- a/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/wizards/MavenImportWizard.java +++ b/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/wizards/MavenImportWizard.java @@ -14,9 +14,11 @@ package org.eclipse.m2e.core.ui.internal.wizards; import java.lang.reflect.InvocationTargetException; import java.util.Collection; import java.util.Collections; +import java.util.HashSet; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.Set; import org.apache.maven.plugin.MojoExecution; import org.apache.maven.project.MavenProject; @@ -131,7 +133,13 @@ public class MavenImportWizard extends AbstractMavenProjectWizard implements IIm IImportWizardPageFactory discovery = getPageFactory(); if(discovery != null && proposals != null && !proposals.isEmpty()) { - doImport = !discovery.implement(proposals, importOperation, getContainer()); + Set<String> projectsToConfigure = new HashSet<String>(); + for(MavenProjectInfo projectInfo : projects) { + if(projectInfo.getModel() != null) { + projectsToConfigure.add(importConfiguration.getProjectName(projectInfo.getModel())); + } + } + doImport = !discovery.implement(proposals, importOperation, getContainer(), projectsToConfigure); } if(doImport) { diff --git a/org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/MavenDiscoveryService.java b/org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/MavenDiscoveryService.java index 60c392ec..39e8a437 100644 --- a/org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/MavenDiscoveryService.java +++ b/org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/MavenDiscoveryService.java @@ -13,6 +13,7 @@ package org.eclipse.m2e.internal.discovery; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; +import java.util.Collection; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -299,12 +300,12 @@ public class MavenDiscoveryService implements IImportWizardPageFactory, IMavenDi } public boolean implement(List<IMavenDiscoveryProposal> proposals, IRunnableWithProgress postInstallHook, - IRunnableContext context) { + IRunnableContext context, Collection<String> projectsToConfigure) { try { MavenDiscoveryInstallOperation runner = new MavenDiscoveryInstallOperation(toCatalogItems(proposals), - postInstallHook, true); + postInstallHook, true, projectsToConfigure); context.run(true, true, runner); - int openInstallWizard = MavenDiscoveryUi.openInstallWizard(runner.getOperation(), postInstallHook); + int openInstallWizard = MavenDiscoveryUi.openInstallWizard(runner.getOperation(), true); return openInstallWizard == Window.OK; } catch(InvocationTargetException e) { IStatus status = new Status(IStatus.ERROR, DiscoveryActivator.PLUGIN_ID, NLS.bind( diff --git a/org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/operation/MavenDiscoveryInstallOperation.java b/org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/operation/MavenDiscoveryInstallOperation.java index b84c27da..324bf8c8 100644 --- a/org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/operation/MavenDiscoveryInstallOperation.java +++ b/org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/operation/MavenDiscoveryInstallOperation.java @@ -14,6 +14,7 @@ import java.lang.reflect.InvocationTargetException; import java.net.URI; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -65,12 +66,20 @@ public class MavenDiscoveryInstallOperation implements IRunnableWithProgress { private final IRunnableWithProgress postInstallHook; + private Collection<String> projectsToConfigure; + public MavenDiscoveryInstallOperation(List<CatalogItem> installableConnectors, IRunnableWithProgress postInstallHook, boolean restart) { + this(installableConnectors, postInstallHook, restart, null); + } + + public MavenDiscoveryInstallOperation(List<CatalogItem> installableConnectors, IRunnableWithProgress postInstallHook, + boolean restart, Collection<String> projectsToConfigure) { this.installableConnectors = installableConnectors; this.postInstallHook = postInstallHook; this.restart = restart; this.session = ProvisioningUI.getDefaultUI().getSession(); + this.projectsToConfigure = projectsToConfigure; } public void run(IProgressMonitor progressMonitor) throws InvocationTargetException, InterruptedException { @@ -240,8 +249,8 @@ public class MavenDiscoveryInstallOperation implements IRunnableWithProgress { URI[] repositories, boolean requireRestart) throws CoreException { SubMonitor mon = SubMonitor.convert(monitor, ius.length); try { - RestartInstallOperation op = new RestartInstallOperation(session, Arrays.asList(ius), postInstallHook); - op.setRestartPolicy(requireRestart ? ProvisioningJob.RESTART_ONLY : ProvisioningJob.RESTART_NONE); + RestartInstallOperation op = new RestartInstallOperation(session, Arrays.asList(ius), postInstallHook, + projectsToConfigure, requireRestart ? ProvisioningJob.RESTART_ONLY : ProvisioningJob.RESTART_NONE); IStatus operationStatus = op.resolveModal(mon); if(operationStatus.getSeverity() > IStatus.WARNING) { throw new CoreException(operationStatus); diff --git a/org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/operation/RestartInstallOperation.java b/org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/operation/RestartInstallOperation.java index d700e08c..91b336e5 100644 --- a/org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/operation/RestartInstallOperation.java +++ b/org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/operation/RestartInstallOperation.java @@ -31,7 +31,7 @@ import org.eclipse.m2e.internal.discovery.startup.UpdateConfigurationStartup; */ public class RestartInstallOperation extends InstallOperation { - private int restartPolicy = ProvisioningJob.RESTART_ONLY; + private int restartPolicy; private final ProvisioningSession session; @@ -39,12 +39,21 @@ public class RestartInstallOperation extends InstallOperation { private final IRunnableWithProgress postInstallHook; + private Collection<String> projectsToConfigure; + public RestartInstallOperation(ProvisioningSession session, Collection<IInstallableUnit> toInstall, IRunnableWithProgress postInstallHook) { + this(session, toInstall, postInstallHook, null, ProvisioningJob.RESTART_ONLY); + } + + public RestartInstallOperation(ProvisioningSession session, Collection<IInstallableUnit> toInstall, + IRunnableWithProgress postInstallHook, Collection<String> projectsToConfigure, int restartPolicy) { super(session, toInstall); this.session = session; this.toInstall = toInstall; this.postInstallHook = postInstallHook; + this.projectsToConfigure = projectsToConfigure; + this.restartPolicy = restartPolicy; } @Override @@ -52,8 +61,8 @@ public class RestartInstallOperation extends InstallOperation { ProvisioningJob job = super.getProvisioningJob(monitor); if(job != null && job instanceof ProfileModificationJob) { ((ProfileModificationJob) job).setRestartPolicy(restartPolicy); - UpdateMavenConfigurationProvisioningJob ucJob = new UpdateMavenConfigurationProvisioningJob(((ProfileModificationJob) job), - session, postInstallHook); + UpdateMavenConfigurationProvisioningJob ucJob = new UpdateMavenConfigurationProvisioningJob( + ((ProfileModificationJob) job), session, postInstallHook, projectsToConfigure); return ucJob; } return job; @@ -72,6 +81,13 @@ public class RestartInstallOperation extends InstallOperation { } /* + * Creates a shallow copy of this operation changing IUs to install. + */ + public RestartInstallOperation copy(Collection<IInstallableUnit> toInstall) { + return new RestartInstallOperation(session, toInstall, postInstallHook, projectsToConfigure, restartPolicy); + } + + /* * The ProfileModificationJob is wrapped to allow us to know when the job finishes successfully so we can * ensure that early startup for update configuration is enabled. */ @@ -81,10 +97,14 @@ public class RestartInstallOperation extends InstallOperation { private final IRunnableWithProgress postInstallHook; - public UpdateMavenConfigurationProvisioningJob(ProfileModificationJob job, ProvisioningSession session, IRunnableWithProgress postInstallHook) { + private Collection<String> projectsToConfigure; + + public UpdateMavenConfigurationProvisioningJob(ProfileModificationJob job, ProvisioningSession session, + IRunnableWithProgress postInstallHook, Collection<String> projectsToConfigure) { super(job.getName(), session, job.getProfileId(), null, null); this.job = job; this.postInstallHook = postInstallHook; + this.projectsToConfigure = projectsToConfigure; } @Override @@ -108,7 +128,7 @@ public class RestartInstallOperation extends InstallOperation { if(getRestartPolicy() == ProvisioningJob.RESTART_NONE) { UpdateConfigurationStartup.updateConfiguration(); } else { - UpdateConfigurationStartup.enableStartup(); + UpdateConfigurationStartup.enableStartup(projectsToConfigure); } } return status; diff --git a/org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/startup/UpdateConfigurationStartup.java b/org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/startup/UpdateConfigurationStartup.java index 7c11d19c..e64cc46c 100644 --- a/org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/startup/UpdateConfigurationStartup.java +++ b/org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/startup/UpdateConfigurationStartup.java @@ -13,7 +13,9 @@ package org.eclipse.m2e.internal.discovery.startup; import java.util.ArrayList; import java.util.Collection; +import java.util.HashSet; import java.util.List; +import java.util.Set; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; @@ -54,6 +56,22 @@ public class UpdateConfigurationStartup implements IStartup { } /* + * Enable early startup for this bundle, also add the list of projects to those that should be configured + */ + public static void enableStartup(Collection<String> knownProjects) { + if(knownProjects != null) { + Set<String> projects = new HashSet<String>(knownProjects); + for(IProject project : getMarkedProjects()) { + projects.add(project.getName()); + } + saveProjects(projects); + } else { + saveMarkedProjects(); + } + addEarlyStartup(); + } + + /* * Disables the early startup for this bundle */ public static void disableStartup() { @@ -152,6 +170,17 @@ public class UpdateConfigurationStartup implements IStartup { DiscoveryActivator.getDefault().getPreferenceStore().putValue(PROJECT_PREF, sb.toString()); } + /* + * Save a list of projects which have configuration markers + */ + public static void saveProjects(Collection<String> projects) { + StringBuilder sb = new StringBuilder(); + for(String project : projects) { + sb.append(project).append(IPreferenceConstants.SEPARATOR); + } + DiscoveryActivator.getDefault().getPreferenceStore().putValue(PROJECT_PREF, sb.toString()); + } + private static Collection<IProject> getMarkedProjects() { List<IProject> projects = new ArrayList<IProject>(); MultiStatus status = new MultiStatus(DiscoveryActivator.PLUGIN_ID, 0, diff --git a/org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/wizards/DiscoverySelectableIUsPage.java b/org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/wizards/DiscoverySelectableIUsPage.java deleted file mode 100644 index ed3bd04d..00000000 --- a/org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/wizards/DiscoverySelectableIUsPage.java +++ /dev/null @@ -1,467 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2008, 2009 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 - * EclipseSource - ongoing development - * Sonatype, Inc. - ongoing development - *******************************************************************************/ -package org.eclipse.m2e.internal.discovery.wizards; - -import java.util.ArrayList; - -import org.eclipse.core.runtime.IStatus; -import org.eclipse.equinox.internal.p2.ui.ProvUI; -import org.eclipse.equinox.internal.p2.ui.ProvUIMessages; -import org.eclipse.equinox.internal.p2.ui.dialogs.CopyUtils; -import org.eclipse.equinox.internal.p2.ui.dialogs.ILayoutConstants; -import org.eclipse.equinox.internal.p2.ui.dialogs.IResolutionErrorReportingPage; -import org.eclipse.equinox.internal.p2.ui.dialogs.IUDetailsGroup; -import org.eclipse.equinox.internal.p2.ui.dialogs.InstallWizardPage; -import org.eclipse.equinox.internal.p2.ui.dialogs.ResolutionStatusPage; -import org.eclipse.equinox.internal.p2.ui.model.AvailableIUElement; -import org.eclipse.equinox.internal.p2.ui.model.ElementUtils; -import org.eclipse.equinox.internal.p2.ui.model.IUElementListRoot; -import org.eclipse.equinox.internal.p2.ui.viewers.IUColumnConfig; -import org.eclipse.equinox.internal.p2.ui.viewers.IUComparator; -import org.eclipse.equinox.internal.p2.ui.viewers.IUDetailsLabelProvider; -import org.eclipse.equinox.internal.p2.ui.viewers.ProvElementComparer; -import org.eclipse.equinox.internal.p2.ui.viewers.ProvElementContentProvider; -import org.eclipse.equinox.p2.metadata.IInstallableUnit; -import org.eclipse.equinox.p2.operations.ProfileChangeOperation; -import org.eclipse.equinox.p2.ui.AcceptLicensesWizardPage; -import org.eclipse.equinox.p2.ui.Policy; -import org.eclipse.equinox.p2.ui.ProvisioningUI; -import org.eclipse.jface.dialogs.Dialog; -import org.eclipse.jface.dialogs.IDialogConstants; -import org.eclipse.jface.viewers.CheckStateChangedEvent; -import org.eclipse.jface.viewers.CheckboxTableViewer; -import org.eclipse.jface.viewers.ICheckStateListener; -import org.eclipse.jface.viewers.ISelectionChangedListener; -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.jface.viewers.SelectionChangedEvent; -import org.eclipse.jface.wizard.IWizardPage; -import org.eclipse.m2e.internal.discovery.operation.RestartInstallOperation; -import org.eclipse.swt.SWT; -import org.eclipse.swt.custom.SashForm; -import org.eclipse.swt.layout.FillLayout; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Button; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.Display; -import org.eclipse.swt.widgets.Event; -import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.Listener; -import org.eclipse.swt.widgets.Table; -import org.eclipse.swt.widgets.TableColumn; - - -/* - * modified from org.eclipse.equinox.internal.p2.ui.dialogs.SelectableIUsPage - */ -@SuppressWarnings("restriction") -public class DiscoverySelectableIUsPage extends ResolutionStatusPage implements IResolutionErrorReportingPage { - - private static final String DIALOG_SETTINGS_SECTION = "SelectableIUsPage"; //$NON-NLS-1$ - private RestartInstallOperation operation; - - private Object[] planSelections; - - private IWizardPage previousPage; - - IUElementListRoot root; - Object[] initialSelections; - CheckboxTableViewer tableViewer; - IUDetailsGroup iuDetailsGroup; - ProvElementContentProvider contentProvider; - IUDetailsLabelProvider labelProvider; - protected Display display; - protected Policy policy; - SashForm sashForm; - - public DiscoverySelectableIUsPage(ProvisioningUI ui, RestartInstallOperation operation, IUElementListRoot root, - IInstallableUnit[] ius) { - super("IUSelectionPage", ui, new MavenDiscoveryInstallWizard(ui, operation, operation.getIUs(), null, null)); //$NON-NLS-1$ - this.initialSelections = ius; - this.root = root; - this.operation = operation; - setTitle(ProvUIMessages.InstallWizardPage_Title); - setDescription(ProvUIMessages.PreselectedIUInstallWizard_Description); - initializeResolutionModelElements(this.initialSelections); - ((MavenDiscoveryInstallWizard) getProvisioningWizard()).setMainPage(this); - ((MavenDiscoveryInstallWizard) getProvisioningWizard()).setResolutionResultsPage(createResolutionPage()); - updateStatus(root, operation); - } - - /* - * (non-Javadoc) - * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite) - */ - public void createControl(Composite parent) { - display = parent.getDisplay(); - sashForm = new SashForm(parent, SWT.VERTICAL); - FillLayout layout = new FillLayout(); - sashForm.setLayout(layout); - GridData data = new GridData(GridData.FILL_BOTH); - sashForm.setLayoutData(data); - initializeDialogUnits(sashForm); - - Composite composite = new Composite(sashForm, SWT.NONE); - GridLayout gridLayout = new GridLayout(); - gridLayout.marginWidth = 0; - gridLayout.marginHeight = 0; - composite.setLayout(gridLayout); - - tableViewer = createTableViewer(composite); - data = new GridData(GridData.FILL_BOTH); - data.heightHint = convertHeightInCharsToPixels(ILayoutConstants.DEFAULT_TABLE_HEIGHT); - data.widthHint = convertWidthInCharsToPixels(ILayoutConstants.DEFAULT_TABLE_WIDTH); - Table table = tableViewer.getTable(); - table.setLayoutData(data); - table.setHeaderVisible(true); - activateCopy(table); - IUColumnConfig[] columns = getColumnConfig(); - for (int i = 0; i < columns.length; i++) { - TableColumn tc = new TableColumn(table, SWT.LEFT, i); - tc.setResizable(true); - tc.setText(columns[i].getColumnTitle()); - tc.setWidth(columns[i].getWidthInPixels(table)); - } - - tableViewer.addSelectionChangedListener(new ISelectionChangedListener() { - public void selectionChanged(SelectionChangedEvent event) { - setDetailText(operation); - } - }); - - tableViewer.addCheckStateListener(new ICheckStateListener() { - public void checkStateChanged(CheckStateChangedEvent event) { - updateSelection(); - } - }); - - // Filters and sorters before establishing content, so we don't refresh unnecessarily. - IUComparator comparator = new IUComparator(IUComparator.IU_NAME); - comparator.useColumnConfig(ProvUI.getIUColumnConfig()); - tableViewer.setComparator(comparator); - tableViewer.setComparer(new ProvElementComparer()); - - contentProvider = new ProvElementContentProvider(); - tableViewer.setContentProvider(contentProvider); - labelProvider = new IUDetailsLabelProvider(null, ProvUI.getIUColumnConfig(), getShell()); - tableViewer.setLabelProvider(labelProvider); - tableViewer.setInput(root); - setInitialCheckState(); - - // Select and Deselect All buttons - createSelectButtons(composite); - - // The text area shows a description of the selected IU, or error detail if applicable. - iuDetailsGroup = new IUDetailsGroup(sashForm, tableViewer, convertWidthInCharsToPixels(ILayoutConstants.DEFAULT_TABLE_WIDTH), true); - - updateStatus(root, operation); - setControl(sashForm); - sashForm.setWeights(getSashWeights()); - Dialog.applyDialogFont(sashForm); - } - - private void createSelectButtons(Composite parent) { - Composite buttonParent = new Composite(parent, SWT.NONE); - GridLayout gridLayout = new GridLayout(); - gridLayout.numColumns = 3; - gridLayout.marginWidth = 0; - gridLayout.horizontalSpacing = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING); - buttonParent.setLayout(gridLayout); - GridData data = new GridData(SWT.FILL, SWT.DEFAULT, true, false); - buttonParent.setLayoutData(data); - - Button selectAll = new Button(buttonParent, SWT.PUSH); - selectAll.setText(ProvUIMessages.SelectableIUsPage_Select_All); - setButtonLayoutData(selectAll); - selectAll.addListener(SWT.Selection, new Listener() { - public void handleEvent(Event event) { - tableViewer.setAllChecked(true); - updateSelection(); - } - }); - - Button deselectAll = new Button(buttonParent, SWT.PUSH); - deselectAll.setText(ProvUIMessages.SelectableIUsPage_Deselect_All); - setButtonLayoutData(deselectAll); - deselectAll.addListener(SWT.Selection, new Listener() { - public void handleEvent(Event event) { - tableViewer.setAllChecked(false); - updateSelection(); - } - }); - - // dummy to take extra space - Label dummy = new Label(buttonParent, SWT.NONE); - data = new GridData(SWT.FILL, SWT.FILL, true, true); - dummy.setLayoutData(data); - - // separator underneath - Label sep = new Label(buttonParent, SWT.HORIZONTAL | SWT.SEPARATOR); - data = new GridData(SWT.FILL, SWT.DEFAULT, true, false); - data.horizontalSpan = 3; - sep.setLayoutData(data); - } - - protected CheckboxTableViewer createTableViewer(Composite parent) { - // The viewer allows selection of IU's for browsing the details, - // and checking to include in the provisioning operation. - CheckboxTableViewer v = CheckboxTableViewer.newCheckList(parent, SWT.BORDER | SWT.FULL_SELECTION | SWT.MULTI); - return v; - } - - public Object[] getCheckedIUElements() { - if (tableViewer == null) - return initialSelections; - return tableViewer.getCheckedElements(); - } - - public Object[] getSelectedIUElements() { - return ((IStructuredSelection) tableViewer.getSelection()).toArray(); - } - - protected Object[] getSelectedElements() { - return ((IStructuredSelection) tableViewer.getSelection()).toArray(); - } - - protected IInstallableUnit[] elementsToIUs(Object[] elements) { - IInstallableUnit[] theIUs = new IInstallableUnit[elements.length]; - for (int i = 0; i < elements.length; i++) { - theIUs[i] = ProvUI.getAdapter(elements[i], IInstallableUnit.class); - } - return theIUs; - } - - protected void setInitialCheckState() { - if (initialSelections != null) - tableViewer.setCheckedElements(initialSelections); - } - - /* - * Overridden so that we don't call getNextPage(). - * We use getNextPage() to start resolving the operation so - * we only want to do that when the next button is pressed. - * - * (non-Javadoc) - * @see org.eclipse.jface.wizard.WizardPage#canFlipToNextPage() - */ - public boolean canFlipToNextPage() { - return isPageComplete(); - } - - protected String getClipboardText(Control control) { - StringBuffer buffer = new StringBuffer(); - Object[] elements = getSelectedElements(); - for (int i = 0; i < elements.length; i++) { - if (i > 0) - buffer.append(CopyUtils.NEWLINE); - buffer.append(labelProvider.getClipboardText(elements[i], CopyUtils.DELIMITER)); - } - return buffer.toString(); - } - - protected IInstallableUnit getSelectedIU() { - java.util.List<IInstallableUnit> units = ElementUtils.elementsToIUs(getSelectedElements()); - if (units.size() == 0) - return null; - return units.get(0); - } - - protected IUDetailsGroup getDetailsGroup() { - return iuDetailsGroup; - } - - protected boolean isCreated() { - return tableViewer != null; - } - - /* - * (non-Javadoc) - * @see org.eclipse.equinox.internal.p2.ui.dialogs.ResolutionStatusPage#updateCaches(org.eclipse.equinox.internal.p2.ui.model.IUElementListRoot, org.eclipse.equinox.p2.operations.ProfileChangeOperation) - */ - protected void updateCaches(IUElementListRoot newRoot, ProfileChangeOperation op) { - //resolvedOperation = op; - if (newRoot != null && root != newRoot) { - root = newRoot; - if (tableViewer != null) - tableViewer.setInput(newRoot); - } - - } - - /* (non-Javadoc) - * @see org.eclipse.equinox.internal.p2.ui.dialogs.ISelectableIUsPage#setCheckedElements(java.lang.Object[]) - */ - public void setCheckedElements(Object[] elements) { - if (tableViewer == null) - initialSelections = elements; - else - tableViewer.setCheckedElements(elements); - } - - protected SashForm getSashForm() { - return sashForm; - } - - protected String getDialogSettingsName() { - return getWizard().getClass().getName() + "." + DIALOG_SETTINGS_SECTION; //$NON-NLS-1$ - } - - protected int getColumnWidth(int index) { - return tableViewer.getTable().getColumn(index).getWidth(); - } - - void updateSelection() { - setPageComplete(tableViewer.getCheckedElements().length == 0 || operation.getResolutionResult().isOK()); - getProvisioningWizard().operationSelectionsChanged(this); - } - - private void setDetailText(ProfileChangeOperation resolvedOperation) { - String detail = null; - IInstallableUnit selectedIU = getSelectedIU(); - IUDetailsGroup detailsGroup = getDetailsGroup(); - - // We either haven't resolved, or we failed to resolve and reported some error - // while doing so. - if(resolvedOperation == null || !resolvedOperation.hasResolved() - || getProvisioningWizard().statusOverridesOperation()) { - // See if the wizard status knows something more about it. - IStatus currentStatus = getProvisioningWizard().getCurrentStatus(); - if(!currentStatus.isOK()) { - detail = currentStatus.getMessage(); - detailsGroup.enablePropertyLink(false); - } else if(selectedIU != null) { - detail = getIUDescription(selectedIU); - detailsGroup.enablePropertyLink(true); - } else { - detail = ""; //$NON-NLS-1$ - detailsGroup.enablePropertyLink(false); - } - detailsGroup.setDetailText(detail); - return; - } - - // An IU is selected and we have resolved. Look for information about the specific IU. - if(selectedIU != null) { - detail = resolvedOperation.getResolutionDetails(selectedIU); - if(detail != null) { - detailsGroup.enablePropertyLink(false); - detailsGroup.setDetailText(detail); - return; - } - // No specific error about this IU. Show the overall error if it is in error. - if(resolvedOperation.getResolutionResult().getSeverity() == IStatus.ERROR) { - detail = resolvedOperation.getResolutionDetails(); - if(detail != null) { - detailsGroup.enablePropertyLink(false); - detailsGroup.setDetailText(detail); - return; - } - } - - // The overall status is not an error, or else there was no explanatory text for an error. - // We may as well just show info about this iu. - detailsGroup.enablePropertyLink(true); - detailsGroup.setDetailText(getIUDescription(selectedIU)); - return; - } - - //No IU is selected, give the overall report - detail = resolvedOperation.getResolutionDetails(); - detailsGroup.enablePropertyLink(false); - if(detail == null) - detail = ""; //$NON-NLS-1$ - detailsGroup.setDetailText(detail); - } - - public IWizardPage getNextPage() { - // If we are moving from the main page or error page, we may need to resolve before - // advancing. - // Do we need to resolve? - if(operation == null - || (operation != null && ((MavenDiscoveryInstallWizard) getProvisioningWizard()).shouldRecomputePlan(this))) { - getProvisioningWizard().recomputePlan(getContainer()); - } else { - // the selections have not changed from an IU point of view, but we want - // to reinitialize the resolution model elements to ensure they are up to - // date. - initializeResolutionModelElements(planSelections); - } - IStatus status = operation.getResolutionResult(); - if(status == null || status.getSeverity() == IStatus.ERROR) { - return this; - } else if(status.getSeverity() == IStatus.CANCEL) { - return this; - } else { - IWizardPage page = createResolutionPage(); - page.setWizard(getWizard()); - return page; - } - } - - public IWizardPage getPreviousPage() { - if(previousPage != null) { - return previousPage; - } - - if(getWizard() == null) { - return null; - } - - return getWizard().getPreviousPage(this); - } - - public void setPreviousPage(IWizardPage page) { - previousPage = page; - } - - private InstallPage createResolutionPage() { - return new InstallPage(getProvisioningUI(), root, operation); - } - - protected void initializeResolutionModelElements(Object[] selectedElements) { - root = new IUElementListRoot(); - ArrayList<AvailableIUElement> list = new ArrayList<AvailableIUElement>(selectedElements.length); - ArrayList<AvailableIUElement> selected = new ArrayList<AvailableIUElement>(selectedElements.length); - for(int i = 0; i < selectedElements.length; i++ ) { - IInstallableUnit iu = ElementUtils.getIU(selectedElements[i]); - if(iu != null) { - AvailableIUElement element = new AvailableIUElement(root, iu, operation.getProfileId(), false); - list.add(element); - selected.add(element); - } - } - root.setChildren(list.toArray()); - planSelections = selected.toArray(); - } - - private static class InstallPage extends InstallWizardPage { - private RestartInstallOperation operation; - - private AcceptLicensesWizardPage nextPage; - - public InstallPage(ProvisioningUI ui, IUElementListRoot root, RestartInstallOperation operation) { - super(ui, new MavenDiscoveryInstallWizard(ui, operation, operation.getIUs(), null, null), root, operation); - this.operation = operation; - } - - public IWizardPage getNextPage() { - if(nextPage == null) { - nextPage = new AcceptLicensesWizardPage(ProvisioningUI.getDefaultUI().getLicenseManager(), operation.getIUs() - .toArray(new IInstallableUnit[operation.getIUs().size()]), operation); - nextPage.setWizard(getWizard()); - } - return nextPage; - } - } -} diff --git a/org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/wizards/MavenDiscoveryInstallWizard.java b/org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/wizards/MavenDiscoveryInstallWizard.java index 4cbc2e88..1ce2616b 100644 --- a/org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/wizards/MavenDiscoveryInstallWizard.java +++ b/org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/wizards/MavenDiscoveryInstallWizard.java @@ -21,7 +21,6 @@ import org.eclipse.equinox.p2.metadata.IInstallableUnit; import org.eclipse.equinox.p2.operations.ProfileChangeOperation; import org.eclipse.equinox.p2.ui.LoadMetadataRepositoryJob; import org.eclipse.equinox.p2.ui.ProvisioningUI; -import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.m2e.internal.discovery.operation.RestartInstallOperation; /* @@ -31,13 +30,10 @@ import org.eclipse.m2e.internal.discovery.operation.RestartInstallOperation; public class MavenDiscoveryInstallWizard extends PreselectedIUInstallWizard { private boolean waitingForOtherJobs; - private final IRunnableWithProgress postInstallHook; public MavenDiscoveryInstallWizard(ProvisioningUI ui, RestartInstallOperation operation, - Collection<IInstallableUnit> initialSelections, LoadMetadataRepositoryJob job, - IRunnableWithProgress postInstallHook) { + Collection<IInstallableUnit> initialSelections, LoadMetadataRepositoryJob job) { super(ui, operation, initialSelections, job); - this.postInstallHook = postInstallHook; } /* (non-Javadoc) @@ -45,9 +41,7 @@ public class MavenDiscoveryInstallWizard extends PreselectedIUInstallWizard { */ @Override protected ProfileChangeOperation getProfileChangeOperation(Object[] elements) { - RestartInstallOperation op = new RestartInstallOperation(ui.getSession(), ElementUtils.elementsToIUs(elements), - postInstallHook); - op.setRestartPolicy(((RestartInstallOperation) operation).getRestartPolicy()); + RestartInstallOperation op = ((RestartInstallOperation) operation).copy(ElementUtils.elementsToIUs(elements)); op.setProfileId(getProfileId()); return op; } diff --git a/org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/wizards/MavenDiscoveryUi.java b/org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/wizards/MavenDiscoveryUi.java index d398bcad..f622a086 100644 --- a/org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/wizards/MavenDiscoveryUi.java +++ b/org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/wizards/MavenDiscoveryUi.java @@ -60,7 +60,7 @@ public abstract class MavenDiscoveryUi { try { MavenDiscoveryInstallOperation runner = new MavenDiscoveryInstallOperation(descriptors, postInstallHook, true); context.run(true, true, runner); - openInstallWizard(runner.getOperation(), postInstallHook); + openInstallWizard(runner.getOperation(), false); } catch (InvocationTargetException e) { IStatus status = new Status(IStatus.ERROR, DiscoveryActivator.PLUGIN_ID, NLS.bind( Messages.ConnectorDiscoveryWizard_installProblems, new Object[] {e.getCause().getMessage()}), e.getCause()); @@ -73,12 +73,13 @@ public abstract class MavenDiscoveryUi { return true; } - public static int openInstallWizard(RestartInstallOperation operation, IRunnableWithProgress postInstallHook) { + public static int openInstallWizard(RestartInstallOperation operation, boolean blockOnOpen) { MavenDiscoveryInstallWizard wizard = new MavenDiscoveryInstallWizard(ProvisioningUI.getDefaultUI(), operation, - operation.getIUs(), null, postInstallHook); + operation.getIUs(), null); WizardDialog dialog = new ProvisioningWizardDialog(ProvUI.getDefaultParentShell(), wizard); dialog.create(); PlatformUI.getWorkbench().getHelpSystem().setHelp(dialog.getShell(), IProvHelpContextIds.INSTALL_WIZARD); + dialog.setBlockOnOpen(blockOnOpen); return dialog.open(); } } |