diff options
Diffstat (limited to 'org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/MavenDiscoveryService.java')
-rw-r--r-- | org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/MavenDiscoveryService.java | 114 |
1 files changed, 111 insertions, 3 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 5f299fe6..7369c408 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,6 +11,7 @@ package org.eclipse.m2e.internal.discovery; +import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.LinkedHashMap; @@ -23,8 +24,24 @@ 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.Status; +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.dialogs.InstallWizardPage; +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.p2.metadata.IInstallableUnit; +import org.eclipse.equinox.p2.operations.ProvisioningJob; +import org.eclipse.equinox.p2.ui.AcceptLicensesWizardPage; +import org.eclipse.equinox.p2.ui.ProvisioningUI; +import org.eclipse.jface.operation.IRunnableContext; +import org.eclipse.jface.wizard.IWizardPage; import org.eclipse.m2e.core.MavenPlugin; import org.eclipse.m2e.core.embedder.IMaven; import org.eclipse.m2e.core.internal.lifecyclemapping.LifecycleMappingFactory; @@ -32,21 +49,27 @@ import org.eclipse.m2e.core.internal.lifecyclemapping.LifecycleMappingResult; import org.eclipse.m2e.core.internal.lifecyclemapping.MappingMetadataSource; import org.eclipse.m2e.core.internal.lifecyclemapping.discovery.ILifecycleMappingElementKey; import org.eclipse.m2e.core.internal.lifecyclemapping.discovery.IMavenDiscoveryProposal; -import org.eclipse.m2e.core.internal.lifecyclemapping.discovery.IMavenDisovery; +import org.eclipse.m2e.core.internal.lifecyclemapping.discovery.IMavenDiscovery; import org.eclipse.m2e.core.internal.lifecyclemapping.discovery.MojoExecutionMappingConfiguration; import org.eclipse.m2e.core.internal.lifecyclemapping.discovery.PackagingTypeMappingConfiguration; import org.eclipse.m2e.core.internal.lifecyclemapping.model.LifecycleMappingMetadata; import org.eclipse.m2e.core.internal.lifecyclemapping.model.LifecycleMappingMetadataSource; import org.eclipse.m2e.core.internal.lifecyclemapping.model.PluginExecutionMetadata; 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.MavenDiscoveryInstallWizard; +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; import org.osgi.framework.ServiceRegistration; @SuppressWarnings({"restriction", "rawtypes"}) -public class MavenDiscoveryService implements IMavenDisovery, ServiceFactory { +public class MavenDiscoveryService implements IImportWizardPageFactory, IMavenDiscovery, ServiceFactory { public static class CatalogItemCacheEntry { private final CatalogItem item; @@ -216,9 +239,27 @@ public class MavenDiscoveryService implements IMavenDisovery, ServiceFactory { public void implement(List<IMavenDiscoveryProposal> proposals, IProgressMonitor monitor) { List<CatalogItem> items = toCatalogItems(proposals); - MavenDiscoveryInstallOperation op = new MavenDiscoveryInstallOperation(items, false); + boolean restart = isRestartRequired(proposals, monitor); + final MavenDiscoveryInstallOperation op = new MavenDiscoveryInstallOperation(items, restart); 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); + } + } + } catch(InvocationTargetException e) { // TODO Auto-generated catch block e.printStackTrace(); @@ -228,6 +269,20 @@ public class MavenDiscoveryService implements IMavenDisovery, ServiceFactory { } } + 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); + } + } + private List<CatalogItem> toCatalogItems(List<IMavenDiscoveryProposal> proposals) { List<CatalogItem> items = new ArrayList<CatalogItem>(); for(IMavenDiscoveryProposal proposal : proposals) { @@ -249,4 +304,57 @@ public class MavenDiscoveryService implements IMavenDisovery, ServiceFactory { 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(List<IMavenDiscoveryProposal> proposals, IRunnableContext context) + throws InvocationTargetException, InterruptedException { + + if(proposals != null && !proposals.isEmpty()) { + List<CatalogItem> installableConnectors = new ArrayList<CatalogItem>(proposals.size()); + for(IMavenDiscoveryProposal proposal : proposals) { + if(proposal instanceof InstallCatalogItemMavenDiscoveryProposal) { + installableConnectors.add(((InstallCatalogItemMavenDiscoveryProposal) proposal).getCatalogItem()); + } + } + if(installableConnectors.size() > 0) { + MavenDiscoveryInstallOperation op = new MavenDiscoveryInstallOperation(installableConnectors, + MavenDiscovery.requireRestart(installableConnectors)); + context.run(true, true, op); + + RestartInstallOperation operation = op.getOperation(); + 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()); + + return new InstallPage(ProvisioningUI.getDefaultUI(), root, operation); + } + } + return null; + } + + 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), 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; + } + } } |