Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIgor Fedorenko2011-03-09 21:14:57 +0000
committerIgor Fedorenko2011-03-09 21:21:18 +0000
commit231506f934435030eb2541d1cfc87bea80e9cd14 (patch)
tree2560e04fee0ca8c05c5f28401fe5ce1635247945 /org.eclipse.m2e.discovery
parentcc82a9117910c60437d81714f88182910fc3311c (diff)
downloadm2e-core-231506f934435030eb2541d1cfc87bea80e9cd14.tar.gz
m2e-core-231506f934435030eb2541d1cfc87bea80e9cd14.tar.xz
m2e-core-231506f934435030eb2541d1cfc87bea80e9cd14.zip
Show p2 installation UI as modal dialog over import wizard
Showing p2 installation UI pages as part of import wizard flow proved to prohibitively difficult without direct support for such use case from p2 ui. Reworked import wizard to use existing MavenDiscoveryInstallWizard synchronously during performFinish wizard. Actual project import is implemented via post-install hook Signed-off-by: Igor Fedorenko <igor@ifedorenko.com>
Diffstat (limited to 'org.eclipse.m2e.discovery')
-rw-r--r--org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/MavenDiscoveryService.java267
-rw-r--r--org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/operation/MavenDiscoveryInstallOperation.java8
-rw-r--r--org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/operation/RestartInstallOperation.java32
-rw-r--r--org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/wizards/DiscoverySelectableIUsPage.java4
-rw-r--r--org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/wizards/MavenDiscoveryInstallWizard.java9
-rw-r--r--org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/wizards/MavenDiscoveryUi.java23
-rw-r--r--org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/wizards/MavenDiscoveryWizard.java2
7 files changed, 77 insertions, 268 deletions
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 292bb3d4..0d9f8fa3 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
@@ -11,16 +11,11 @@
package org.eclipse.m2e.internal.discovery;
-import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
-import java.net.URI;
import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
-import java.util.Set;
import org.apache.maven.execution.MavenExecutionRequest;
import org.apache.maven.plugin.MojoExecution;
@@ -28,37 +23,21 @@ import org.apache.maven.project.MavenProject;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.core.runtime.OperationCanceledException;
import org.eclipse.core.runtime.Status;
-import org.eclipse.core.runtime.SubMonitor;
-import org.eclipse.equinox.internal.p2.core.helpers.ServiceHelper;
import org.eclipse.equinox.internal.p2.discovery.Catalog;
import org.eclipse.equinox.internal.p2.discovery.model.CatalogItem;
-import org.eclipse.equinox.internal.p2.ui.ProvUI;
-import org.eclipse.equinox.internal.p2.ui.ProvUIActivator;
-import org.eclipse.equinox.internal.p2.ui.ProvUIImages;
-import org.eclipse.equinox.internal.p2.ui.ProvUIMessages;
-import org.eclipse.equinox.internal.p2.ui.model.AvailableIUElement;
-import org.eclipse.equinox.internal.p2.ui.model.IUElementListRoot;
-import org.eclipse.equinox.internal.provisional.configurator.Configurator;
+import org.eclipse.equinox.internal.p2.ui.discovery.wizards.Messages;
import org.eclipse.equinox.p2.core.IProvisioningAgent;
import org.eclipse.equinox.p2.engine.IProfile;
import org.eclipse.equinox.p2.engine.IProfileRegistry;
import org.eclipse.equinox.p2.metadata.IInstallableUnit;
-import org.eclipse.equinox.p2.metadata.IVersionedId;
-import org.eclipse.equinox.p2.metadata.VersionedId;
-import org.eclipse.equinox.p2.operations.ProvisioningJob;
-import org.eclipse.equinox.p2.operations.RepositoryTracker;
import org.eclipse.equinox.p2.query.IQuery;
import org.eclipse.equinox.p2.query.IQueryResult;
import org.eclipse.equinox.p2.query.QueryUtil;
-import org.eclipse.equinox.p2.repository.metadata.IMetadataRepository;
-import org.eclipse.equinox.p2.repository.metadata.IMetadataRepositoryManager;
import org.eclipse.equinox.p2.ui.ProvisioningUI;
import org.eclipse.jface.operation.IRunnableContext;
import org.eclipse.jface.operation.IRunnableWithProgress;
-import org.eclipse.jface.wizard.IWizardPage;
+import org.eclipse.jface.window.Window;
import org.eclipse.m2e.core.MavenPlugin;
import org.eclipse.m2e.core.embedder.IMaven;
import org.eclipse.m2e.core.internal.lifecyclemapping.LifecycleMappingFactory;
@@ -76,11 +55,8 @@ import org.eclipse.m2e.core.internal.lifecyclemapping.model.PluginExecutionMetad
import org.eclipse.m2e.core.project.configurator.MojoExecutionKey;
import org.eclipse.m2e.core.ui.internal.wizards.IImportWizardPageFactory;
import org.eclipse.m2e.internal.discovery.operation.MavenDiscoveryInstallOperation;
-import org.eclipse.m2e.internal.discovery.operation.RestartInstallOperation;
-import org.eclipse.m2e.internal.discovery.wizards.DiscoverySelectableIUsPage;
+import org.eclipse.m2e.internal.discovery.wizards.MavenDiscoveryUi;
import org.eclipse.osgi.util.NLS;
-import org.eclipse.ui.progress.IProgressConstants;
-import org.eclipse.ui.progress.IProgressConstants2;
import org.eclipse.ui.statushandlers.StatusManager;
import org.osgi.framework.Bundle;
import org.osgi.framework.ServiceFactory;
@@ -318,50 +294,22 @@ public class MavenDiscoveryService implements IImportWizardPageFactory, IMavenDi
}
}
- public void implement(List<IMavenDiscoveryProposal> proposals, IProgressMonitor monitor) {
- List<CatalogItem> items = toCatalogItems(proposals);
-
- boolean restart = isRestartRequired(proposals, monitor);
- final MavenDiscoveryInstallOperation op = new MavenDiscoveryInstallOperation(items, restart);
+ public boolean implement(List<IMavenDiscoveryProposal> proposals, IRunnableWithProgress postInstallHook,
+ IRunnableContext context) {
try {
- op.run(monitor);
-
- if(restart) {
- ProvisioningUI.getDefaultUI().schedule(op.getOperation().getProvisioningJob(monitor), 0);
- } else {
- ProvisioningJob job = op.getOperation().getProvisioningJob(monitor);
- job.setProperty(IProgressConstants.KEEP_PROPERTY, Boolean.TRUE);
- job.setProperty(IProgressConstants.NO_IMMEDIATE_ERROR_PROMPT_PROPERTY, Boolean.TRUE);
- job.setProperty(IProgressConstants.ICON_PROPERTY, ProvUIImages.getImageDescriptor(ProvUIImages.IMG_PROFILE));
- job.setProperty(IProgressConstants2.SHOW_IN_TASKBAR_ICON_PROPERTY, Boolean.TRUE);
- IStatus status = job.runModal(monitor);
- if(status.isOK()) {
- applyProfileChanges();
- } else {
- StatusManager.getManager().handle(status);
- }
- }
-
+ MavenDiscoveryInstallOperation runner = new MavenDiscoveryInstallOperation(toCatalogItems(proposals),
+ postInstallHook, true);
+ context.run(true, true, runner);
+ int openInstallWizard = MavenDiscoveryUi.openInstallWizard(runner.getOperation(), postInstallHook);
+ return openInstallWizard == Window.OK;
} catch(InvocationTargetException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
+ IStatus status = new Status(IStatus.ERROR, DiscoveryActivator.PLUGIN_ID, NLS.bind(
+ Messages.ConnectorDiscoveryWizard_installProblems, new Object[] {e.getCause().getMessage()}), e.getCause());
+ StatusManager.getManager().handle(status, StatusManager.SHOW | StatusManager.BLOCK | StatusManager.LOG);
+ return false;
} catch(InterruptedException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
-
- private void applyProfileChanges() {
- Configurator configurator = (Configurator) ServiceHelper.getService(ProvUIActivator.getContext(),
- Configurator.class.getName());
- try {
- configurator.applyConfiguration();
- } catch(IOException e) {
- ProvUI.handleException(e, ProvUIMessages.ProvUI_ErrorDuringApplyConfig, StatusManager.LOG | StatusManager.BLOCK);
- } catch(IllegalStateException e) {
- IStatus illegalApplyStatus = new Status(IStatus.WARNING, ProvUIActivator.PLUGIN_ID, 0,
- ProvUIMessages.ProvisioningOperationRunner_CannotApplyChanges, e);
- ProvUI.reportStatus(illegalApplyStatus, StatusManager.LOG | StatusManager.BLOCK);
+ // canceled
+ return false;
}
}
@@ -375,193 +323,10 @@ public class MavenDiscoveryService implements IImportWizardPageFactory, IMavenDi
return items;
}
- public boolean isRestartRequired(List<IMavenDiscoveryProposal> proposals, IProgressMonitor monitor) {
- return MavenDiscovery.requireRestart(toCatalogItems(proposals));
- }
-
public Object getService(Bundle bundle, ServiceRegistration registration) {
return new MavenDiscoveryService(false); // not a factory instance
}
public void ungetService(Bundle bundle, ServiceRegistration registration, Object service) {
}
-
- /* (non-Javadoc)
- * @see org.eclipse.m2e.core.ui.internal.wizards.IImportWizardPageFactory#getPage(java.util.List, org.eclipse.jface.operation.IRunnableContext)
- */
- public IWizardPage getPage(final List<IMavenDiscoveryProposal> proposals, IRunnableContext context)
- throws InvocationTargetException, InterruptedException {
-
- final IWizardPage[] page = new IWizardPage[1];
- if(proposals != null && !proposals.isEmpty()) {
- context.run(false, false, new IRunnableWithProgress() {
-
- public void run(IProgressMonitor monitor) throws InvocationTargetException {
- SubMonitor subMon = SubMonitor.convert(monitor, 11);
- try {
- List<CatalogItem> installableConnectors = new ArrayList<CatalogItem>(proposals.size());
- for(IMavenDiscoveryProposal proposal : proposals) {
- if(proposal instanceof InstallCatalogItemMavenDiscoveryProposal) {
- installableConnectors.add(((InstallCatalogItemMavenDiscoveryProposal) proposal).getCatalogItem());
- }
- }
- addRepositories(installableConnectors, subMon.newChild(10));
- IInstallableUnit[] ius = computeInstallableUnits(installableConnectors, subMon.newChild(1));
- RestartInstallOperation operation = new RestartInstallOperation(ProvisioningUI.getDefaultUI().getSession(),
- Arrays.asList(ius));
-
- IUElementListRoot root = new IUElementListRoot();
- ArrayList<AvailableIUElement> list = new ArrayList<AvailableIUElement>(operation.getIUs().size());
- for(IInstallableUnit iu : operation.getIUs()) {
- AvailableIUElement element = new AvailableIUElement(root, iu, ProvisioningUI.getDefaultUI()
- .getProfileId(), false);
- list.add(element);
- }
- root.setChildren(list.toArray());
- page[0] = new DiscoverySelectableIUsPage(ProvisioningUI.getDefaultUI(), operation, root, ius);
- } catch(CoreException e) {
- throw new InvocationTargetException(e);
- } finally {
- subMon.done();
- }
- }
- });
- }
- return page[0];
- }
-
- /*
- * Compute the InstallableUnits & IMetadataRepository
- */
- private static IInstallableUnit[] computeInstallableUnits(List<CatalogItem> installableConnectors,
- IProgressMonitor progressMonitor) throws CoreException {
- SubMonitor monitor = SubMonitor.convert(progressMonitor);
- try {
- List<IMetadataRepository> repositories = addRepositories(installableConnectors, monitor.newChild(50));
- final List<IInstallableUnit> installableUnits = queryInstallableUnits(installableConnectors,
- monitor.newChild(50), repositories);
-
- return installableUnits.toArray(new IInstallableUnit[installableUnits.size()]);
- } finally {
- monitor.done();
- }
- }
-
- /*
- * Get IUs to install from the specified repository
- */
- private static List<IInstallableUnit> queryInstallableUnits(List<CatalogItem> installableConnectors, IProgressMonitor progressMonitor,
- List<IMetadataRepository> repositories) {
- final List<IInstallableUnit> installableUnits = new ArrayList<IInstallableUnit>(installableConnectors.size());
-
- SubMonitor monitor = SubMonitor.convert(progressMonitor, installableConnectors.size());
- try {
- for(CatalogItem item : installableConnectors) {
- SubMonitor subMon = monitor.newChild(1);
- checkCancelled(monitor);
- URI address = URI.create(item.getSiteUrl());
- // get repository
- IMetadataRepository repository = null;
- for(IMetadataRepository candidate : repositories) {
- if(address.equals(candidate.getLocation())) {
- repository = candidate;
- break;
- }
- }
- if(repository == null) {
- log.warn(NLS.bind(Messages.MavenDiscoveryInstallOperation_missingRepository, item.getName(),
- item.getSiteUrl()));
- // Continue so we gather all the problems before telling the user
- continue;
- }
- // get IUs
- checkCancelled(monitor);
-
- Set<IVersionedId> ids = getDescriptorIds(installableConnectors, repository);
- for(IVersionedId versionedId : ids) {
- IQueryResult<IInstallableUnit> result = repository.query(QueryUtil.createIUQuery(versionedId),
- subMon.newChild(1));
- Set<IInstallableUnit> matches = result.toSet();
- if(matches.size() == 1) {
- installableUnits.addAll(matches);
- } else if(matches.size() == 0) {
- log.warn(NLS.bind(Messages.MavenDiscoveryInstallOperation_missingIU, item.getName(), versionedId.toString()));
- } else {
- // Choose the highest available version
- IInstallableUnit match = null;
- for(IInstallableUnit iu : matches) {
- if(match == null || iu.getVersion().compareTo(match.getVersion()) > 0) {
- match = iu;
- }
- }
- if(match != null) {
- installableUnits.add(match);
- }
- }
- }
- }
- return installableUnits;
- } finally {
- monitor.done();
- }
- }
-
- /*
- * Add the necessary repositories
- */
- private static List<IMetadataRepository> addRepositories(List<CatalogItem> installableConnectors, SubMonitor monitor)
- throws CoreException {
- // tell p2 that it's okay to use these repositories
- Set<URI> repositoryLocations = new HashSet<URI>();
- for(CatalogItem items : installableConnectors) {
- repositoryLocations.add(URI.create(items.getSiteUrl()));
- }
-
- RepositoryTracker repositoryTracker = ProvisioningUI.getDefaultUI().getRepositoryTracker();
- monitor.setWorkRemaining(installableConnectors.size() * 5);
- for(CatalogItem descriptor : installableConnectors) {
- URI uri = URI.create(descriptor.getSiteUrl());
- if(repositoryLocations.add(uri)) {
- checkCancelled(monitor);
- repositoryTracker.addRepository(uri, null, ProvisioningUI.getDefaultUI().getSession());
- }
- monitor.worked(1);
- }
-
- // fetch meta-data for these repositories
- ArrayList<IMetadataRepository> repositories = new ArrayList<IMetadataRepository>();
- monitor.setWorkRemaining(repositories.size());
- IMetadataRepositoryManager manager = (IMetadataRepositoryManager) ProvisioningUI.getDefaultUI().getSession()
- .getProvisioningAgent().getService(IMetadataRepositoryManager.SERVICE_NAME);
- monitor.setTaskName("Contacting repositories");
- for(URI uri : repositoryLocations) {
- checkCancelled(monitor);
- IMetadataRepository repository = manager.loadRepository(uri, new NullProgressMonitor());
- monitor.worked(1);
- repositories.add(repository);
- }
- return repositories;
- }
-
- /*
- * Get the IVersionedId expected to be in the repository
- */
- protected static Set<IVersionedId> getDescriptorIds(List<CatalogItem> installableConnectors,
- IMetadataRepository repository) {
- Set<IVersionedId> ids = new HashSet<IVersionedId>();
- for(CatalogItem item : installableConnectors) {
- if(repository.getLocation().equals(URI.create(item.getSiteUrl()))) {
- for(String id : item.getInstallableUnits()) {
- ids.add(VersionedId.parse(id));
- }
- }
- }
- return ids;
- }
-
- private static void checkCancelled(IProgressMonitor monitor) {
- if(monitor.isCanceled()) {
- throw new OperationCanceledException();
- }
- }
}
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 009b054f..b84c27da 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
@@ -63,8 +63,12 @@ public class MavenDiscoveryInstallOperation implements IRunnableWithProgress {
private RestartInstallOperation operation;
- public MavenDiscoveryInstallOperation(List<CatalogItem> installableConnectors, boolean restart) {
+ private final IRunnableWithProgress postInstallHook;
+
+ public MavenDiscoveryInstallOperation(List<CatalogItem> installableConnectors, IRunnableWithProgress postInstallHook,
+ boolean restart) {
this.installableConnectors = installableConnectors;
+ this.postInstallHook = postInstallHook;
this.restart = restart;
this.session = ProvisioningUI.getDefaultUI().getSession();
}
@@ -236,7 +240,7 @@ 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));
+ RestartInstallOperation op = new RestartInstallOperation(session, Arrays.asList(ius), postInstallHook);
op.setRestartPolicy(requireRestart ? ProvisioningJob.RESTART_ONLY : ProvisioningJob.RESTART_NONE);
IStatus operationStatus = op.resolveModal(mon);
if(operationStatus.getSeverity() > IStatus.WARNING) {
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 5481ddc4..dfa22169 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
@@ -10,6 +10,7 @@
*******************************************************************************/
package org.eclipse.m2e.internal.discovery.operation;
+import java.lang.reflect.InvocationTargetException;
import java.util.Collection;
import org.eclipse.core.runtime.IProgressMonitor;
@@ -19,6 +20,7 @@ import org.eclipse.equinox.p2.operations.InstallOperation;
import org.eclipse.equinox.p2.operations.ProfileModificationJob;
import org.eclipse.equinox.p2.operations.ProvisioningJob;
import org.eclipse.equinox.p2.operations.ProvisioningSession;
+import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.m2e.internal.discovery.startup.UpdateConfigurationStartup;
@@ -29,14 +31,18 @@ public class RestartInstallOperation extends InstallOperation {
private int restartPolicy = ProvisioningJob.RESTART_ONLY;
- private ProvisioningSession session;
+ private final ProvisioningSession session;
- private Collection<IInstallableUnit> toInstall;
+ private final Collection<IInstallableUnit> toInstall;
- public RestartInstallOperation(ProvisioningSession session, Collection<IInstallableUnit> toInstall) {
+ private final IRunnableWithProgress postInstallHook;
+
+ public RestartInstallOperation(ProvisioningSession session, Collection<IInstallableUnit> toInstall,
+ IRunnableWithProgress postInstallHook) {
super(session, toInstall);
this.session = session;
this.toInstall = toInstall;
+ this.postInstallHook = postInstallHook;
}
@Override
@@ -45,7 +51,7 @@ public class RestartInstallOperation extends InstallOperation {
if(job != null && job instanceof ProfileModificationJob) {
((ProfileModificationJob) job).setRestartPolicy(restartPolicy);
UpdateMavenConfigurationProvisioningJob ucJob = new UpdateMavenConfigurationProvisioningJob(((ProfileModificationJob) job),
- session);
+ session, postInstallHook);
return ucJob;
}
return job;
@@ -71,14 +77,30 @@ public class RestartInstallOperation extends InstallOperation {
private ProfileModificationJob job;
- public UpdateMavenConfigurationProvisioningJob(ProfileModificationJob job, ProvisioningSession session) {
+ private final IRunnableWithProgress postInstallHook;
+
+ public UpdateMavenConfigurationProvisioningJob(ProfileModificationJob job, ProvisioningSession session, IRunnableWithProgress postInstallHook) {
super(job.getName(), session, job.getProfileId(), null, null);
this.job = job;
+ this.postInstallHook = postInstallHook;
}
@Override
public IStatus runModal(IProgressMonitor monitor) {
+ // install
IStatus status = job.run(monitor);
+
+ if (status.isOK() && postInstallHook != null) {
+ try {
+ postInstallHook.run(monitor);
+ } catch(InvocationTargetException e) {
+ // XXX log
+ } catch(InterruptedException e) {
+ // XXX log
+ // still offer restart if import failed?
+ }
+ }
+
if(status.isOK()) {
// If the installation doesn't require a restart, launch the reconfiguration now.
if(getRestartPolicy() == ProvisioningJob.RESTART_NONE) {
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
index 6b8e4743..ed3bd04d 100644
--- 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
@@ -87,7 +87,7 @@ public class DiscoverySelectableIUsPage extends ResolutionStatusPage implements
public DiscoverySelectableIUsPage(ProvisioningUI ui, RestartInstallOperation operation, IUElementListRoot root,
IInstallableUnit[] ius) {
- super("IUSelectionPage", ui, new MavenDiscoveryInstallWizard(ui, operation, operation.getIUs(), null)); //$NON-NLS-1$
+ super("IUSelectionPage", ui, new MavenDiscoveryInstallWizard(ui, operation, operation.getIUs(), null, null)); //$NON-NLS-1$
this.initialSelections = ius;
this.root = root;
this.operation = operation;
@@ -451,7 +451,7 @@ public class DiscoverySelectableIUsPage extends ResolutionStatusPage implements
private AcceptLicensesWizardPage nextPage;
public InstallPage(ProvisioningUI ui, IUElementListRoot root, RestartInstallOperation operation) {
- super(ui, new MavenDiscoveryInstallWizard(ui, operation, operation.getIUs(), null), root, operation);
+ super(ui, new MavenDiscoveryInstallWizard(ui, operation, operation.getIUs(), null, null), root, operation);
this.operation = operation;
}
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 5e29f4e1..4cbc2e88 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,6 +21,7 @@ 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;
/*
@@ -30,10 +31,13 @@ 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) {
+ Collection<IInstallableUnit> initialSelections, LoadMetadataRepositoryJob job,
+ IRunnableWithProgress postInstallHook) {
super(ui, operation, initialSelections, job);
+ this.postInstallHook = postInstallHook;
}
/* (non-Javadoc)
@@ -41,7 +45,8 @@ public class MavenDiscoveryInstallWizard extends PreselectedIUInstallWizard {
*/
@Override
protected ProfileChangeOperation getProfileChangeOperation(Object[] elements) {
- RestartInstallOperation op = new RestartInstallOperation(ui.getSession(), ElementUtils.elementsToIUs(elements));
+ RestartInstallOperation op = new RestartInstallOperation(ui.getSession(), ElementUtils.elementsToIUs(elements),
+ postInstallHook);
op.setRestartPolicy(((RestartInstallOperation) operation).getRestartPolicy());
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 f357076c..d398bcad 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
@@ -23,6 +23,7 @@ import org.eclipse.equinox.internal.p2.ui.dialogs.ProvisioningWizardDialog;
import org.eclipse.equinox.internal.p2.ui.discovery.wizards.Messages;
import org.eclipse.equinox.p2.ui.ProvisioningUI;
import org.eclipse.jface.operation.IRunnableContext;
+import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.jface.wizard.WizardDialog;
import org.eclipse.m2e.internal.discovery.DiscoveryActivator;
import org.eclipse.m2e.internal.discovery.operation.MavenDiscoveryInstallOperation;
@@ -38,17 +39,28 @@ import org.eclipse.ui.statushandlers.StatusManager;
*
* Copied from org.eclipse.equinox.internal.p2.ui.discovery.DiscoveryUi
*/
+@SuppressWarnings("restriction")
public abstract class MavenDiscoveryUi {
private MavenDiscoveryUi() {
// don't allow clients to instantiate
}
- public static boolean install(List<CatalogItem> descriptors, IRunnableContext context) {
+ /**
+ * Installs specified
+ *
+ * @param descriptors is the list of catalog items to install
+ * @param postInstallHook additional operation to perform after installation has completed and before restart, can be
+ * null
+ * @param context
+ * @return
+ */
+ public static boolean install(List<CatalogItem> descriptors, IRunnableWithProgress postInstallHook,
+ IRunnableContext context) {
try {
- MavenDiscoveryInstallOperation runner = new MavenDiscoveryInstallOperation(descriptors, true);
+ MavenDiscoveryInstallOperation runner = new MavenDiscoveryInstallOperation(descriptors, postInstallHook, true);
context.run(true, true, runner);
- openInstallWizard(runner.getOperation());
+ openInstallWizard(runner.getOperation(), postInstallHook);
} catch (InvocationTargetException e) {
IStatus status = new Status(IStatus.ERROR, DiscoveryActivator.PLUGIN_ID, NLS.bind(
Messages.ConnectorDiscoveryWizard_installProblems, new Object[] {e.getCause().getMessage()}), e.getCause());
@@ -61,8 +73,9 @@ public abstract class MavenDiscoveryUi {
return true;
}
- public static int openInstallWizard(RestartInstallOperation operation) {
- MavenDiscoveryInstallWizard wizard = new MavenDiscoveryInstallWizard(ProvisioningUI.getDefaultUI(), operation, operation.getIUs(), null);
+ public static int openInstallWizard(RestartInstallOperation operation, IRunnableWithProgress postInstallHook) {
+ MavenDiscoveryInstallWizard wizard = new MavenDiscoveryInstallWizard(ProvisioningUI.getDefaultUI(), operation,
+ operation.getIUs(), null, postInstallHook);
WizardDialog dialog = new ProvisioningWizardDialog(ProvUI.getDefaultParentShell(), wizard);
dialog.create();
PlatformUI.getWorkbench().getHelpSystem().setHelp(dialog.getShell(), IProvHelpContextIds.INSTALL_WIZARD);
diff --git a/org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/wizards/MavenDiscoveryWizard.java b/org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/wizards/MavenDiscoveryWizard.java
index ba29c815..28c6b034 100644
--- a/org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/wizards/MavenDiscoveryWizard.java
+++ b/org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/wizards/MavenDiscoveryWizard.java
@@ -34,6 +34,6 @@ public class MavenDiscoveryWizard extends DiscoveryWizard {
@Override
public boolean performFinish() {
- return MavenDiscoveryUi.install(getCatalogPage().getInstallableConnectors(), getContainer());
+ return MavenDiscoveryUi.install(getCatalogPage().getInstallableConnectors(), null, getContainer());
}
}

Back to the top