diff options
Diffstat (limited to 'org.eclipse.m2e.discovery/src')
9 files changed, 437 insertions, 61 deletions
diff --git a/org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/InstallCatalogItemMappingLabelProvider.java b/org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/InstallCatalogItemMappingLabelProvider.java new file mode 100644 index 00000000..49ae0bcb --- /dev/null +++ b/org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/InstallCatalogItemMappingLabelProvider.java @@ -0,0 +1,51 @@ +/******************************************************************************* + * Copyright (c) 2008 Sonatype, Inc. + * 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 + *******************************************************************************/ + +package org.eclipse.m2e.internal.discovery; + +import org.eclipse.core.runtime.IAdapterFactory; +import org.eclipse.m2e.core.ui.internal.lifecyclemapping.ILifecycleMappingLabelProvider; + + +@SuppressWarnings({"restriction", "unchecked", "rawtypes"}) +public class InstallCatalogItemMappingLabelProvider implements ILifecycleMappingLabelProvider, IAdapterFactory { + + private final InstallCatalogItemMavenDiscoveryProposal proposal; + + /** + * Factory instance constructor + */ + public InstallCatalogItemMappingLabelProvider() { + this(null); + } + + public InstallCatalogItemMappingLabelProvider(InstallCatalogItemMavenDiscoveryProposal proposal) { + this.proposal = proposal; + } + + public String getMavenText() { + return ""; //$NON-NLS-1$ + } + + public String getEclipseMappingText() { + return "INSTALL " + proposal.getCatalogItem().getName(); + } + + public Object getAdapter(Object adaptableObject, Class adapterType) { + if(adapterType.isAssignableFrom(ILifecycleMappingLabelProvider.class) + && adaptableObject instanceof InstallCatalogItemMavenDiscoveryProposal) { + return new InstallCatalogItemMappingLabelProvider((InstallCatalogItemMavenDiscoveryProposal) adaptableObject); + } + return null; + } + + public Class[] getAdapterList() { + return new Class[] {ILifecycleMappingLabelProvider.class}; + } + +} diff --git a/org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/InstallCatalogItemMavenDiscoveryProposal.java b/org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/InstallCatalogItemMavenDiscoveryProposal.java new file mode 100644 index 00000000..9e6c3797 --- /dev/null +++ b/org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/InstallCatalogItemMavenDiscoveryProposal.java @@ -0,0 +1,60 @@ +/******************************************************************************* + * Copyright (c) 2008 Sonatype, Inc. + * 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 + *******************************************************************************/ + +package org.eclipse.m2e.internal.discovery; + +import org.eclipse.equinox.internal.p2.discovery.model.CatalogItem; +import org.eclipse.m2e.core.internal.lifecycle.discovery.IMavenDiscoveryProposal; + + +/** + * InstallIUMavenDiscoveryProposal + * + * @author igor + */ +@SuppressWarnings("restriction") +public class InstallCatalogItemMavenDiscoveryProposal implements IMavenDiscoveryProposal { + + private final CatalogItem item; + + public InstallCatalogItemMavenDiscoveryProposal(CatalogItem item) { + this.item = item; + } + + public CatalogItem getCatalogItem() { + return item; + } + + @Override + public String toString() { + return item.getDescription(); + } + + @Override + public int hashCode() { + int hash = item.getSiteUrl().hashCode(); + hash = 17 * hash + item.getInstallableUnits().hashCode(); + return hash; + } + + @Override + public boolean equals(Object obj) { + if(obj == this) { + return true; + } + + if(!(obj instanceof InstallCatalogItemMavenDiscoveryProposal)) { + return false; + } + + InstallCatalogItemMavenDiscoveryProposal other = (InstallCatalogItemMavenDiscoveryProposal) obj; + + return item.getSiteUrl().equals(other.item.getSiteUrl()) + && item.getInstallableUnits().equals(other.item.getInstallableUnits()); + } +} diff --git a/org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/MavenDiscovery.java b/org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/MavenDiscovery.java index e77995a8..3fb0aca7 100644 --- a/org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/MavenDiscovery.java +++ b/org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/MavenDiscovery.java @@ -11,26 +11,38 @@ package org.eclipse.m2e.internal.discovery; +import java.io.FileNotFoundException; +import java.io.InputStream; +import java.net.URL; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.List; -import org.apache.maven.plugin.MojoExecution; +import org.codehaus.plexus.util.IOUtil; import org.eclipse.equinox.internal.p2.discovery.Catalog; import org.eclipse.equinox.internal.p2.discovery.DiscoveryCore; import org.eclipse.equinox.internal.p2.discovery.compatibility.RemoteBundleDiscoveryStrategy; +import org.eclipse.equinox.internal.p2.discovery.model.CatalogItem; import org.eclipse.equinox.internal.p2.discovery.model.Tag; import org.eclipse.jface.wizard.WizardDialog; +import org.eclipse.m2e.core.internal.lifecycle.LifecycleMappingFactory; +import org.eclipse.m2e.core.internal.lifecycle.model.LifecycleMappingMetadataSource; +import org.eclipse.m2e.core.project.configurator.MojoExecutionKey; import org.eclipse.m2e.internal.discovery.wizards.MavenCatalogConfiguration; +import org.eclipse.m2e.internal.discovery.wizards.MavenCatalogViewer; import org.eclipse.m2e.internal.discovery.wizards.MavenDiscoveryWizard; +import org.eclipse.osgi.util.NLS; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.internal.Workbench; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; @SuppressWarnings("restriction") public class MavenDiscovery { + private static final Logger log = LoggerFactory.getLogger(MavenDiscovery.class); public static final Tag NO_RESTART_TAG = new Tag("norestart", "norestart"); //$NON-NLS-1$//$NON-NLS-2$ @@ -48,7 +60,7 @@ public class MavenDiscovery { launchWizard(shell, Collections.EMPTY_LIST, Collections.EMPTY_LIST, Collections.EMPTY_LIST, Collections.EMPTY_LIST); } - public static void launchWizard(final Collection<String> packagingTypes, final Collection<MojoExecution> mojos, + public static void launchWizard(final Collection<String> packagingTypes, final Collection<MojoExecutionKey> mojos, final Collection<String> lifecycleIds, final Collection<String> configuratorIds) { final Display display = Workbench.getInstance().getDisplay(); display.asyncExec(new Runnable() { @@ -58,16 +70,9 @@ public class MavenDiscovery { }); } - public static void launchWizard(Shell shell, Collection<String> packagingTypes, Collection<MojoExecution> mojos, + public static void launchWizard(Shell shell, Collection<String> packagingTypes, Collection<MojoExecutionKey> mojos, Collection<String> lifecycleIds, Collection<String> configuratorIds) { - Catalog catalog = new Catalog(); - catalog.setEnvironment(DiscoveryCore.createEnvironment()); - catalog.setVerifyUpdateSiteAvailability(false); - - // look for remote descriptor - RemoteBundleDiscoveryStrategy remoteDiscoveryStrategy = new RemoteBundleDiscoveryStrategy(); - remoteDiscoveryStrategy.setDirectoryUrl(PATH); - catalog.getDiscoveryStrategies().add(remoteDiscoveryStrategy); + Catalog catalog = getCatalog(); // Build the list of tags to show in the Wizard header List<Tag> tags = new ArrayList<Tag>(3); @@ -99,4 +104,45 @@ public class MavenDiscovery { WizardDialog dialog = new WizardDialog(shell, wizard); dialog.open(); } + + public static Catalog getCatalog() { + Catalog catalog = new Catalog(); + catalog.setEnvironment(DiscoveryCore.createEnvironment()); + catalog.setVerifyUpdateSiteAvailability(false); + + // look for remote descriptor + RemoteBundleDiscoveryStrategy remoteDiscoveryStrategy = new RemoteBundleDiscoveryStrategy(); + remoteDiscoveryStrategy.setDirectoryUrl(PATH); + catalog.getDiscoveryStrategies().add(remoteDiscoveryStrategy); + return catalog; + } + + public static LifecycleMappingMetadataSource getLifecycleMappingMetadataSource(CatalogItem ci) { + try { + URL url = MavenCatalogViewer.getLifecycleMappingMetadataSourceURL(ci); + InputStream is = url.openStream(); + try { + return LifecycleMappingFactory.createLifecycleMappingMetadataSource(is); + } finally { + IOUtil.close(is); + } + } catch(FileNotFoundException e) { + log.warn("CatalogItem {} does not contain lifecycle mapping metadata", ci.getId()); //$NON-NLS-1$ + } catch(Exception e) { + log.warn(NLS.bind(Messages.MavenCatalogViewer_Error_loading_lifecycle, ci.getId()), e); + } + return null; + } + + /* + * Restart is required when one or more CatalogItem lacks the norestart tag. + */ + public static boolean requireRestart(Iterable<CatalogItem> catalogItems) { + for(CatalogItem item : catalogItems) { + if(!item.hasTag(NO_RESTART_TAG)) { + return true; + } + } + return false; + } } 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 new file mode 100644 index 00000000..a5a34a47 --- /dev/null +++ b/org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/MavenDiscoveryService.java @@ -0,0 +1,239 @@ +/******************************************************************************* + * Copyright (c) 2011 Sonatype, Inc. + * 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: + * Sonatype, Inc. - initial API and implementation + *******************************************************************************/ + +package org.eclipse.m2e.internal.discovery; + +import java.lang.reflect.InvocationTargetException; +import java.util.ArrayList; +import java.util.IdentityHashMap; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +import org.apache.maven.execution.MavenExecutionRequest; +import org.apache.maven.plugin.MojoExecution; +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.equinox.internal.p2.discovery.Catalog; +import org.eclipse.equinox.internal.p2.discovery.model.CatalogItem; +import org.eclipse.m2e.core.MavenPlugin; +import org.eclipse.m2e.core.embedder.IMaven; +import org.eclipse.m2e.core.internal.lifecycle.LifecycleMappingFactory; +import org.eclipse.m2e.core.internal.lifecycle.LifecycleMappingResult; +import org.eclipse.m2e.core.internal.lifecycle.MappingMetadataSource; +import org.eclipse.m2e.core.internal.lifecycle.discovery.ILifecycleMappingElementKey; +import org.eclipse.m2e.core.internal.lifecycle.discovery.IMavenDiscoveryProposal; +import org.eclipse.m2e.core.internal.lifecycle.discovery.IMavenDisovery; +import org.eclipse.m2e.core.internal.lifecycle.discovery.MojoExecutionMappingConfiguration; +import org.eclipse.m2e.core.internal.lifecycle.discovery.PackagingTypeMappingConfiguration; +import org.eclipse.m2e.core.internal.lifecycle.model.LifecycleMappingMetadata; +import org.eclipse.m2e.core.internal.lifecycle.model.LifecycleMappingMetadataSource; +import org.eclipse.m2e.core.internal.lifecycle.model.PluginExecutionMetadata; +import org.eclipse.m2e.core.project.configurator.MojoExecutionKey; +import org.eclipse.m2e.internal.discovery.operation.MavenDiscoveryInstallOperation; +import org.osgi.framework.Bundle; +import org.osgi.framework.ServiceFactory; +import org.osgi.framework.ServiceRegistration; + + +@SuppressWarnings({"restriction", "rawtypes"}) +public class MavenDiscoveryService implements IMavenDisovery, ServiceFactory { + + private final boolean factory; + + //private Catalog catalog; + + private IdentityHashMap<CatalogItem, LifecycleMappingMetadataSource> items; + + public MavenDiscoveryService() { + this(true); + } + + public MavenDiscoveryService(boolean factory) { + this.factory = factory; + } + + public Map<ILifecycleMappingElementKey, List<IMavenDiscoveryProposal>> discover(MavenProject mavenProject, + List<MojoExecution> mojoExecutions, List<IMavenDiscoveryProposal> preselected, IProgressMonitor monitor) + throws CoreException { + + if(items == null) { + items = new IdentityHashMap<CatalogItem, LifecycleMappingMetadataSource>(); + + Catalog catalog = MavenDiscovery.getCatalog(); + IStatus status = catalog.performDiscovery(monitor); + + if(!status.isOK()) { + // XXX log and/or throw something heavy at the caller + return null; + } + + for(CatalogItem item : catalog.getItems()) { + LifecycleMappingMetadataSource metadataSource = MavenDiscovery.getLifecycleMappingMetadataSource(item); + if(metadataSource != null) { + addCatalogItem(item, metadataSource); + } + } + } + + Map<ILifecycleMappingElementKey, List<IMavenDiscoveryProposal>> proposals = new LinkedHashMap<ILifecycleMappingElementKey, List<IMavenDiscoveryProposal>>(); + + MavenPlugin mavenPlugin = MavenPlugin.getDefault(); + IMaven maven = mavenPlugin.getMaven(); + + MavenExecutionRequest request = maven.createExecutionRequest(monitor); // TODO this ignores workspace dependencies + + List<CatalogItem> selectedItems = toCatalogItems(preselected); + List<LifecycleMappingMetadataSource> selectedSources = toMetadataSources(preselected); + + for(Map.Entry<CatalogItem, LifecycleMappingMetadataSource> itemEntry : items.entrySet()) { + CatalogItem item = itemEntry.getKey(); + LifecycleMappingMetadataSource src = itemEntry.getValue(); + + boolean preselectItem = false; + for(CatalogItem selectedItem : selectedItems) { + if(selectedItem.getSiteUrl().equals(item.getSiteUrl()) + && selectedItem.getInstallableUnits().equals(item.getInstallableUnits())) { + preselectItem = true; + break; + } + } + + if(src != null) { + src.setSource(item); + + LifecycleMappingResult mappingResult = new LifecycleMappingResult(); + + List<LifecycleMappingMetadataSource> sources = new ArrayList<LifecycleMappingMetadataSource>(selectedSources); + if(!preselectItem) { + sources.add(src); + } + + List<MappingMetadataSource> metadataSources = LifecycleMappingFactory.getProjectMetadataSources(request, + mavenProject, sources, monitor); + + LifecycleMappingFactory.calculateEffectiveLifecycleMappingMetadata(mappingResult, metadataSources, + mavenProject, mojoExecutions); + + LifecycleMappingMetadata lifecycleMappingMetadata = mappingResult.getLifecycleMappingMetadata(); + if(lifecycleMappingMetadata != null) { + IMavenDiscoveryProposal proposal = getProposal(lifecycleMappingMetadata.getSource()); + if(proposal != null) { + put(proposals, new PackagingTypeMappingConfiguration.Key(mavenProject.getPackaging()), proposal); + } + } + + for(Map.Entry<MojoExecutionKey, List<PluginExecutionMetadata>> entry : mappingResult.getMojoExecutionMapping() + .entrySet()) { + if(entry.getValue() != null) { + for(PluginExecutionMetadata executionMapping : entry.getValue()) { + IMavenDiscoveryProposal proposal = getProposal(executionMapping.getSource()); + if(proposal != null) { + put(proposals, new MojoExecutionMappingConfiguration.Key(entry.getKey()), proposal); + } + // TODO match eclipse extensions provided by the catalog item + // User Story. + // Project pom.xml explicitly specifies lifecycle mapping strategy implementation, + // but the implementation is not currently installed. As a user I expect m2e to search + // marketplace for the implementation and offer installation if available + } + } + } + } + } + + return proposals; + } + + public void addCatalogItem(CatalogItem item, LifecycleMappingMetadataSource metadataSource) { + if(items == null) { + // for tests + items = new IdentityHashMap<CatalogItem, LifecycleMappingMetadataSource>(); + } + items.put(item, metadataSource); + } + + private IMavenDiscoveryProposal getProposal(LifecycleMappingMetadataSource src) { + if(src == null) { + return null; + } + if(src.getSource() instanceof CatalogItem) { + return new InstallCatalogItemMavenDiscoveryProposal((CatalogItem) src.getSource()); + } + return null; + } + + private List<LifecycleMappingMetadataSource> toMetadataSources(List<IMavenDiscoveryProposal> proposals) { + List<LifecycleMappingMetadataSource> sources = new ArrayList<LifecycleMappingMetadataSource>(); + for(IMavenDiscoveryProposal proposal : proposals) { + if(proposal instanceof InstallCatalogItemMavenDiscoveryProposal) { + CatalogItem catalogItem = ((InstallCatalogItemMavenDiscoveryProposal) proposal).getCatalogItem(); + LifecycleMappingMetadataSource source = MavenDiscovery.getLifecycleMappingMetadataSource(catalogItem); + source.setSource(catalogItem); + sources.add(source); + } + } + return sources; + } + + private void put(Map<ILifecycleMappingElementKey, List<IMavenDiscoveryProposal>> allproposals, + ILifecycleMappingElementKey requirement, IMavenDiscoveryProposal proposal) { + + List<IMavenDiscoveryProposal> proposals = allproposals.get(requirement); + if(proposals == null) { + proposals = new ArrayList<IMavenDiscoveryProposal>(); + allproposals.put(requirement, proposals); + } + + if(!proposals.contains(proposal)) { + proposals.add(proposal); + } + } + + public void implement(List<IMavenDiscoveryProposal> proposals, IProgressMonitor monitor) { + List<CatalogItem> items = toCatalogItems(proposals); + + MavenDiscoveryInstallOperation op = new MavenDiscoveryInstallOperation(items, false); + try { + op.run(monitor); + } catch(InvocationTargetException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch(InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + private List<CatalogItem> toCatalogItems(List<IMavenDiscoveryProposal> proposals) { + List<CatalogItem> items = new ArrayList<CatalogItem>(); + for(IMavenDiscoveryProposal proposal : proposals) { + if(proposal instanceof InstallCatalogItemMavenDiscoveryProposal) { + items.add(((InstallCatalogItemMavenDiscoveryProposal) proposal).getCatalogItem()); + } + } + 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) { + } + +} diff --git a/org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/markers/DiscoveryWizardProposal.java b/org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/markers/DiscoveryWizardProposal.java index e04bf4a7..ec41ed73 100644 --- a/org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/markers/DiscoveryWizardProposal.java +++ b/org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/markers/DiscoveryWizardProposal.java @@ -15,14 +15,13 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; -import org.apache.maven.model.Plugin; -import org.apache.maven.plugin.MojoExecution; import org.eclipse.core.resources.IMarker; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.m2e.core.core.IMavenConstants; +import org.eclipse.m2e.core.project.configurator.MojoExecutionKey; import org.eclipse.m2e.internal.discovery.MavenDiscovery; import org.eclipse.m2e.internal.discovery.MavenDiscoveryIcons; import org.eclipse.m2e.internal.discovery.Messages; @@ -76,7 +75,7 @@ public class DiscoveryWizardProposal extends WorkbenchMarkerResolution { public void run(IMarker[] markers, IProgressMonitor monitor) { List<String> lifecycleIds = new ArrayList<String>(); List<String> packagingTypes = new ArrayList<String>(); - List<MojoExecution> mojos = new ArrayList<MojoExecution>(); + List<MojoExecutionKey> mojos = new ArrayList<MojoExecutionKey>(); List<String> configuratorIds = new ArrayList<String>(); for(IMarker marker : markers) { String type = marker.getAttribute(IMavenConstants.MARKER_ATTR_EDITOR_HINT, null); @@ -93,7 +92,7 @@ public class DiscoveryWizardProposal extends WorkbenchMarkerResolution { MavenDiscovery.launchWizard(packagingTypes, mojos, lifecycleIds, configuratorIds); } - private MojoExecution getMojoExecution(IMarker marker) { + private MojoExecutionKey getMojoExecution(IMarker marker) { // TODO Which of these are actually required? String groupId = marker.getAttribute(IMavenConstants.MARKER_ATTR_GROUP_ID, null); String artifactId = marker.getAttribute(IMavenConstants.MARKER_ATTR_ARTIFACT_ID, null); @@ -102,13 +101,7 @@ public class DiscoveryWizardProposal extends WorkbenchMarkerResolution { String goal = marker.getAttribute(IMavenConstants.MARKER_ATTR_GOAL, null); String lifecyclePhase = marker.getAttribute(IMavenConstants.MARKER_ATTR_LIFECYCLE_PHASE, null); if(goal != null && executionId != null && artifactId != null && groupId != null) { - Plugin plugin = new Plugin(); - plugin.setArtifactId(artifactId); - plugin.setGroupId(groupId); - plugin.setVersion(version); - MojoExecution mojoExecution = new MojoExecution(plugin, goal, executionId); - mojoExecution.setLifecyclePhase(lifecyclePhase); - return mojoExecution; + return new MojoExecutionKey(groupId, artifactId, version, goal, lifecyclePhase, executionId); } return null; } 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 29725ce7..fca24091 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 @@ -25,6 +25,8 @@ import org.eclipse.equinox.internal.p2.ui.discovery.operations.DiscoveryInstallO import org.eclipse.equinox.p2.metadata.IInstallableUnit; import org.eclipse.equinox.p2.operations.ProvisioningJob; import org.eclipse.equinox.p2.operations.ProvisioningSession; +import org.eclipse.equinox.p2.query.IQuery; +import org.eclipse.equinox.p2.query.QueryUtil; import org.eclipse.equinox.p2.ui.ProvisioningUI; import org.eclipse.m2e.internal.discovery.MavenDiscovery; import org.eclipse.m2e.internal.discovery.Messages; @@ -41,9 +43,13 @@ public class MavenDiscoveryInstallOperation extends DiscoveryInstallOperation { private List<CatalogItem> installableConnectors; private ProvisioningSession session; - public MavenDiscoveryInstallOperation(List<CatalogItem> installableConnectors) { + + private final boolean restart; + + public MavenDiscoveryInstallOperation(List<CatalogItem> installableConnectors, boolean restart) { super(installableConnectors); this.installableConnectors = installableConnectors; + this.restart = restart; this.session = ProvisioningUI.getDefaultUI().getSession(); } @@ -57,7 +63,7 @@ public class MavenDiscoveryInstallOperation extends DiscoveryInstallOperation { checkCancelled(monitor); final RestartInstallOperation installOperation = createAndResolve(monitor.newChild(50), ius, new URI[0], - requireRestart(installableConnectors)); + restart && MavenDiscovery.requireRestart(installableConnectors)); checkCancelled(monitor); @@ -77,18 +83,6 @@ public class MavenDiscoveryInstallOperation extends DiscoveryInstallOperation { } /* - * Restart is required when one or more CatalogItem lacks the norestart tag. - */ - public static boolean requireRestart(Iterable<CatalogItem> catalogItems) { - for(CatalogItem item : catalogItems) { - if(!item.hasTag(MavenDiscovery.NO_RESTART_TAG)) { - return true; - } - } - return false; - } - - /* * Create a RestartInstallOperation and resolve */ private RestartInstallOperation createAndResolve(IProgressMonitor monitor, final IInstallableUnit[] ius, @@ -113,4 +107,9 @@ public class MavenDiscoveryInstallOperation extends DiscoveryInstallOperation { throw new OperationCanceledException(); } } + + @Override + protected IQuery<IInstallableUnit> createInstalledIUsQuery() { + return QueryUtil.createIUAnyQuery(); + } } diff --git a/org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/wizards/MavenCatalogConfiguration.java b/org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/wizards/MavenCatalogConfiguration.java index 6a6201a5..e0232ce3 100644 --- a/org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/wizards/MavenCatalogConfiguration.java +++ b/org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/wizards/MavenCatalogConfiguration.java @@ -15,8 +15,8 @@ import java.util.Collection; import java.util.HashSet; import java.util.Set; -import org.apache.maven.plugin.MojoExecution; import org.eclipse.equinox.internal.p2.ui.discovery.wizards.CatalogConfiguration; +import org.eclipse.m2e.core.project.configurator.MojoExecutionKey; @SuppressWarnings("restriction") @@ -24,7 +24,7 @@ public class MavenCatalogConfiguration extends CatalogConfiguration { private Set<String> selectedPackagingTypes; - private Set<MojoExecution> selectedMojos; + private Set<MojoExecutionKey> selectedMojos; private Set<String> selectedLifecycleIds; @@ -38,7 +38,7 @@ public class MavenCatalogConfiguration extends CatalogConfiguration { return selectedConfiguratorIds; } - public Collection<MojoExecution> getSelectedMojos() { + public Collection<MojoExecutionKey> getSelectedMojos() { return selectedMojos; } @@ -60,9 +60,9 @@ public class MavenCatalogConfiguration extends CatalogConfiguration { /* * Set the mojos that should be selected in the UI */ - public void setSelectedMojos(Collection<MojoExecution> mojos) { + public void setSelectedMojos(Collection<MojoExecutionKey> mojos) { if(selectedMojos == null) { - selectedMojos = new HashSet<MojoExecution>(mojos); + selectedMojos = new HashSet<MojoExecutionKey>(mojos); } else { selectedMojos.addAll(mojos); } diff --git a/org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/wizards/MavenCatalogViewer.java b/org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/wizards/MavenCatalogViewer.java index 2929989c..4257a6c7 100644 --- a/org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/wizards/MavenCatalogViewer.java +++ b/org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/wizards/MavenCatalogViewer.java @@ -14,7 +14,6 @@ package org.eclipse.m2e.internal.discovery.wizards; import java.net.URL; import java.util.Collection; -import org.apache.maven.plugin.MojoExecution; import org.eclipse.equinox.internal.p2.discovery.Catalog; import org.eclipse.equinox.internal.p2.discovery.model.CatalogItem; import org.eclipse.equinox.internal.p2.discovery.model.Tag; @@ -22,20 +21,18 @@ import org.eclipse.equinox.internal.p2.ui.discovery.wizards.CatalogConfiguration import org.eclipse.equinox.internal.p2.ui.discovery.wizards.CatalogViewer; import org.eclipse.jface.operation.IRunnableContext; import org.eclipse.jface.window.IShellProvider; -import org.eclipse.m2e.core.internal.lifecycle.LifecycleMappingFactory; import org.eclipse.m2e.core.internal.lifecycle.model.LifecycleMappingMetadata; import org.eclipse.m2e.core.internal.lifecycle.model.LifecycleMappingMetadataSource; import org.eclipse.m2e.core.internal.lifecycle.model.PluginExecutionMetadata; +import org.eclipse.m2e.core.project.configurator.MojoExecutionKey; import org.eclipse.m2e.internal.discovery.MavenDiscovery; -import org.eclipse.m2e.internal.discovery.Messages; -import org.eclipse.osgi.util.NLS; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @SuppressWarnings("restriction") public class MavenCatalogViewer extends CatalogViewer { - private static final Logger log = LoggerFactory.getLogger(MavenCatalogViewer.class); + public static final Logger log = LoggerFactory.getLogger(MavenCatalogViewer.class); private static final String CONFIGURATOR_PREFIX = "configurator:"; //$NON-NLS-1$ @@ -56,7 +53,7 @@ public class MavenCatalogViewer extends CatalogViewer { final MavenCatalogConfiguration config = (MavenCatalogConfiguration) getConfiguration(); final Collection<String> selectedPackagingTypes = config.getSelectedPackagingTypes(); - final Collection<MojoExecution> selectedMojos = config.getSelectedMojos(); + final Collection<MojoExecutionKey> selectedMojos = config.getSelectedMojos(); final Collection<String> selectedLifecycleIds = config.getSelectedLifecycleIds(); final Collection<String> selectedConfiguratorIds = config.getSelectedConfiguratorIds(); @@ -66,7 +63,7 @@ public class MavenCatalogViewer extends CatalogViewer { for(CatalogItem ci : getCatalog().getItems()) { boolean selected = false; - LifecycleMappingMetadataSource src = getLifecycleMappingMetadataSource(ci); + LifecycleMappingMetadataSource src = MavenDiscovery.getLifecycleMappingMetadataSource(ci); if(src != null) { for(String packagingType : selectedPackagingTypes) { if(hasPackaging(src, packagingType)) { @@ -78,7 +75,7 @@ public class MavenCatalogViewer extends CatalogViewer { if(selected) { continue; } - for(MojoExecution mojoExecution : selectedMojos) { + for(MojoExecutionKey mojoExecution : selectedMojos) { if(matchesFilter(src, mojoExecution)) { selected = true; select(ci); @@ -119,7 +116,7 @@ public class MavenCatalogViewer extends CatalogViewer { ci.addTag(MavenDiscovery.APPLICABLE_TAG); } - private static boolean matchesFilter(LifecycleMappingMetadataSource src, MojoExecution mojoExecution) { + private static boolean matchesFilter(LifecycleMappingMetadataSource src, MojoExecutionKey mojoExecution) { for(PluginExecutionMetadata p : src.getPluginExecutions()) { if(p.getFilter().match(mojoExecution)) { return true; @@ -128,16 +125,7 @@ public class MavenCatalogViewer extends CatalogViewer { return false; } - private LifecycleMappingMetadataSource getLifecycleMappingMetadataSource(CatalogItem ci) { - try { - return LifecycleMappingFactory.createLifecycleMappingMetadataSource(getLifecycleMappingMetadataSourceURL(ci)); - } catch(Exception e) { - log.warn(NLS.bind(Messages.MavenCatalogViewer_Error_loading_lifecycle, ci.getId()), e); - return null; - } - } - - private static URL getLifecycleMappingMetadataSourceURL(CatalogItem ci) { + public static URL getLifecycleMappingMetadataSourceURL(CatalogItem ci) { return ci.getSource().getResource(PATH + ci.getId() + EXT); } 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 f55dc509..b7e56449 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 @@ -50,7 +50,7 @@ public abstract class MavenDiscoveryUi { public static boolean install(List<CatalogItem> descriptors, IRunnableContext context) { try { - IRunnableWithProgress runner = new MavenDiscoveryInstallOperation(descriptors); + IRunnableWithProgress runner = new MavenDiscoveryInstallOperation(descriptors, true); context.run(true, true, runner); } catch (InvocationTargetException e) { IStatus status = new Status(IStatus.ERROR, DiscoveryActivator.PLUGIN_ID, NLS.bind( |