Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
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.java114
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;
+ }
+ }
}

Back to the top