diff options
Diffstat (limited to 'org.eclipse.m2e.discovery/src')
8 files changed, 128 insertions, 92 deletions
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 04652ab4..38b624a1 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 @@ -13,6 +13,7 @@ package org.eclipse.m2e.internal.discovery; import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; import java.util.List; import org.apache.maven.plugin.MojoExecution; @@ -41,16 +42,22 @@ public class MavenDiscovery { private static final String PATH = "http://download.eclipse.org/technology/m2e/discovery/directory.xml"; //$NON-NLS-1$ - public static void launchWizard(final Collection<String> packagingTypes, final Collection<MojoExecution> mojos) { + public static void launchWizard(Shell shell) { + 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, + final Collection<String> lifecycleIds, final Collection<String> configuratorIds) { final Display display = Workbench.getInstance().getDisplay(); display.asyncExec(new Runnable() { public void run() { - launchWizard(display.getActiveShell(), packagingTypes, mojos); + launchWizard(display.getActiveShell(), packagingTypes, mojos, lifecycleIds, configuratorIds); } }); } - public static void launchWizard(Shell shell, Collection<String> packagingTypes, Collection<MojoExecution> mojos) { + public static void launchWizard(Shell shell, Collection<String> packagingTypes, Collection<MojoExecution> mojos, + Collection<String> lifecycleIds, Collection<String> configuratorIds) { Catalog catalog = new Catalog(); catalog.setEnvironment(DiscoveryCore.createEnvironment()); catalog.setVerifyUpdateSiteAvailability(false); @@ -62,7 +69,7 @@ public class MavenDiscovery { // Build the list of tags to show in the Wizard header List<Tag> tags = new ArrayList<Tag>(3); - if(!packagingTypes.isEmpty()) { + if(!packagingTypes.isEmpty() || !mojos.isEmpty() || !configuratorIds.isEmpty() || !lifecycleIds.isEmpty()) { tags.add(APPLICABLE_TAG); } tags.add(EXTRAS_TAG); @@ -73,7 +80,7 @@ public class MavenDiscovery { // Create configuration for the catalog MavenCatalogConfiguration configuration = new MavenCatalogConfiguration(); configuration.setShowTagFilter(true); - if(!packagingTypes.isEmpty()) { + if(!packagingTypes.isEmpty() || !mojos.isEmpty() || !configuratorIds.isEmpty() || !lifecycleIds.isEmpty()) { tags = new ArrayList<Tag>(1); tags.add(APPLICABLE_TAG); configuration.setSelectedTags(tags); @@ -83,6 +90,8 @@ public class MavenDiscovery { configuration.setShowInstalledFilter(false); configuration.setSelectedPackagingTypes(packagingTypes); configuration.setSelectedMojos(mojos); + configuration.setSelectedLifecycleIds(lifecycleIds); + configuration.setSelectedConfigurators(configuratorIds); MavenDiscoveryWizard wizard = new MavenDiscoveryWizard(catalog, configuration); WizardDialog dialog = new WizardDialog(shell, wizard); diff --git a/org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/Messages.java b/org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/Messages.java index 7935a359..c4c8ba59 100644 --- a/org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/Messages.java +++ b/org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/Messages.java @@ -29,10 +29,6 @@ public class Messages extends NLS { public static String MavenCatalogViewer_Error_loading_lifecycle; - public static String MavenCatalogViewer_Missing_mojo_execution; - - public static String MavenCatalogViewer_Missing_packaging_type; - public static String MavenDiscoveryWizard_Title; public static String MavenDiscovery_Wizard_Applicable_Tag; diff --git a/org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/handlers/MavenDiscoveryHandler.java b/org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/handlers/MavenDiscoveryHandler.java index 36cf6455..bb488d30 100644 --- a/org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/handlers/MavenDiscoveryHandler.java +++ b/org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/handlers/MavenDiscoveryHandler.java @@ -11,8 +11,6 @@ package org.eclipse.m2e.internal.discovery.handlers; -import java.util.Collections; - import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; @@ -22,10 +20,8 @@ import org.eclipse.ui.handlers.HandlerUtil; public class MavenDiscoveryHandler extends AbstractHandler { - @SuppressWarnings("unchecked") public Object execute(ExecutionEvent event) throws ExecutionException { - MavenDiscovery.launchWizard(HandlerUtil.getActiveWorkbenchWindowChecked(event).getShell(), Collections.EMPTY_LIST, - Collections.EMPTY_LIST); + MavenDiscovery.launchWizard(HandlerUtil.getActiveWorkbenchWindowChecked(event).getShell()); return null; } } 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 4c253f6f..f9b8a05f 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 @@ -12,7 +12,6 @@ package org.eclipse.m2e.internal.discovery.markers; import java.util.ArrayList; -import java.util.Arrays; import java.util.Collections; import java.util.List; @@ -29,18 +28,27 @@ import org.eclipse.ui.views.markers.WorkbenchMarkerResolution; class DiscoveryWizardProposal extends WorkbenchMarkerResolution { - static final DiscoveryWizardProposal PROPOSAL = new DiscoveryWizardProposal(); + private IMarker marker; + + public DiscoveryWizardProposal(IMarker marker) { + this.marker = marker; + } @SuppressWarnings("unchecked") public void run(IMarker marker) { String type = marker.getAttribute(IMavenConstants.MARKER_ATTR_EDITOR_HINT, null); if(IMavenConstants.EDITOR_HINT_UNKNOWN_PACKAGING.equals(type)) { - MavenDiscovery.launchWizard(Arrays.asList(new String[] {getPackageType(marker)}), Collections.EMPTY_LIST); + MavenDiscovery.launchWizard(Collections.singleton(getPackageType(marker)), Collections.EMPTY_LIST, + Collections.EMPTY_LIST, Collections.EMPTY_LIST); } else if(IMavenConstants.EDITOR_HINT_NOT_COVERED_MOJO_EXECUTION.equals(type)) { MavenDiscovery - .launchWizard(Collections.EMPTY_LIST, Arrays.asList(new MojoExecution[] {getMojoExecution(marker)})); + .launchWizard(Collections.EMPTY_LIST, Collections.singleton(getMojoExecution(marker)), Collections.EMPTY_LIST, Collections.EMPTY_LIST); + } else if(IMavenConstants.EDITOR_HINT_UNKNOWN_LIFECYCLE_ID.equals(type)) { + MavenDiscovery.launchWizard(Collections.EMPTY_LIST, Collections.EMPTY_LIST, + Collections.singleton(getLifecycleId(marker)), Collections.EMPTY_LIST); + } else if(IMavenConstants.EDITOR_HINT_MISSING_CONFIGURATOR.equals(type)) { + MavenDiscovery.launchWizard(Collections.EMPTY_LIST, Collections.EMPTY_LIST, Collections.EMPTY_LIST, Collections.singleton(getConfiguratorId(marker))); } - } public String getDescription() { @@ -53,17 +61,23 @@ class DiscoveryWizardProposal extends WorkbenchMarkerResolution { @Override 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<String> configuratorIds = new ArrayList<String>(); for(IMarker marker : markers) { String type = marker.getAttribute(IMavenConstants.MARKER_ATTR_EDITOR_HINT, null); if(IMavenConstants.EDITOR_HINT_UNKNOWN_PACKAGING.equals(type)) { packagingTypes.add(getPackageType(marker)); } else if(IMavenConstants.EDITOR_HINT_NOT_COVERED_MOJO_EXECUTION.equals(type)) { mojos.add(getMojoExecution(marker)); + } else if(IMavenConstants.EDITOR_HINT_UNKNOWN_LIFECYCLE_ID.equals(type)) { + lifecycleIds.add(getLifecycleId(marker)); + } else if(IMavenConstants.EDITOR_HINT_MISSING_CONFIGURATOR.equals(type)) { + configuratorIds.add(getConfiguratorId(marker)); } } - MavenDiscovery.launchWizard(packagingTypes, mojos); + MavenDiscovery.launchWizard(packagingTypes, mojos, lifecycleIds, configuratorIds); } private MojoExecution getMojoExecution(IMarker marker) { @@ -90,11 +104,19 @@ class DiscoveryWizardProposal extends WorkbenchMarkerResolution { return marker.getAttribute(IMavenConstants.MARKER_ATTR_PACKAGING, null); } + private String getLifecycleId(IMarker marker) { + return marker.getAttribute(IMavenConstants.MARKER_ATTR_LIFECYCLE_PHASE, null); + } + + private String getConfiguratorId(IMarker marker) { + return marker.getAttribute(IMavenConstants.MARKER_ATTR_CONFIGURATOR_ID, null); + } + @Override public IMarker[] findOtherMarkers(IMarker[] markers) { List<IMarker> handled = new ArrayList<IMarker>(); for(IMarker marker : markers) { - if(MavenDiscoveryMarkerResolutionGenerator.canResolve(marker)) { + if(marker != this.marker && MavenDiscoveryMarkerResolutionGenerator.canResolve(marker)) { handled.add(marker); } } diff --git a/org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/markers/MavenDiscoveryMarkerResolutionGenerator.java b/org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/markers/MavenDiscoveryMarkerResolutionGenerator.java index 6242c9f2..76633e0c 100644 --- a/org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/markers/MavenDiscoveryMarkerResolutionGenerator.java +++ b/org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/markers/MavenDiscoveryMarkerResolutionGenerator.java @@ -25,11 +25,8 @@ public class MavenDiscoveryMarkerResolutionGenerator implements IMarkerResolutio } public IMarkerResolution[] getResolutions(IMarker marker) { - String type = marker.getAttribute(IMavenConstants.MARKER_ATTR_EDITOR_HINT, null); - if(IMavenConstants.EDITOR_HINT_UNKNOWN_PACKAGING.equals(type)) { - return new IMarkerResolution[] {DiscoveryWizardProposal.PROPOSAL}; - } else if(IMavenConstants.EDITOR_HINT_NOT_COVERED_MOJO_EXECUTION.equals(type)) { - return new IMarkerResolution[] {DiscoveryWizardProposal.PROPOSAL}; + if(canResolve(marker)) { + return new IMarkerResolution[] {new DiscoveryWizardProposal(marker)}; } return new IMarkerResolution[0]; } @@ -37,6 +34,8 @@ public class MavenDiscoveryMarkerResolutionGenerator implements IMarkerResolutio public static boolean canResolve(IMarker marker) { String type = marker.getAttribute(IMavenConstants.MARKER_ATTR_EDITOR_HINT, null); return IMavenConstants.EDITOR_HINT_UNKNOWN_PACKAGING.equals(type) - || IMavenConstants.EDITOR_HINT_NOT_COVERED_MOJO_EXECUTION.equals(type); + || IMavenConstants.EDITOR_HINT_MISSING_CONFIGURATOR.equals(type) + || IMavenConstants.EDITOR_HINT_NOT_COVERED_MOJO_EXECUTION.equals(type) + || IMavenConstants.EDITOR_HINT_UNKNOWN_LIFECYCLE_ID.equals(type); } } diff --git a/org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/messages.properties b/org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/messages.properties index b109c9f1..df0f7757 100644 --- a/org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/messages.properties +++ b/org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/messages.properties @@ -10,8 +10,6 @@ DiscoveryWizardProposal_Label=Discover new maven plugin connectors MavenCatalogPage_Descripton=Select updates and extensions to install. Press Finish to proceed with installation.\nPress the information button to see a detailed overview and a link to more information. MavenCatalogPage_Title=Install Maven Plugins MavenCatalogViewer_Error_loading_lifecycle=An error occurred loading lifecycle data for catalog item: {0} -MavenCatalogViewer_Missing_packaging_type=No relevant CatalogItem found for packaging type: {0} -MavenCatalogViewer_Missing_mojo_execution=No relevant CatalogItem found for MojoExecution {0} {1} {2} {3} MavenDiscoveryWizard_Title=Maven Discovery MavenDiscovery_Wizard_Applicable_Tag=Applicable MavenDiscovery_Wizard_ExtrasTag=Extras 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 3af0ea3f..6a6201a5 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 @@ -26,6 +26,18 @@ public class MavenCatalogConfiguration extends CatalogConfiguration { private Set<MojoExecution> selectedMojos; + private Set<String> selectedLifecycleIds; + + private Set<String> selectedConfiguratorIds; + + public Collection<String> getSelectedLifecycleIds() { + return selectedLifecycleIds; + } + + public Collection<String> getSelectedConfiguratorIds() { + return selectedConfiguratorIds; + } + public Collection<MojoExecution> getSelectedMojos() { return selectedMojos; } @@ -55,4 +67,20 @@ public class MavenCatalogConfiguration extends CatalogConfiguration { selectedMojos.addAll(mojos); } } + + public void setSelectedLifecycleIds(Collection<String> lifecycleIds) { + if(selectedLifecycleIds == null) { + selectedLifecycleIds = new HashSet<String>(lifecycleIds); + } else { + selectedLifecycleIds.addAll(lifecycleIds); + } + } + + public void setSelectedConfigurators(Collection<String> configuratorIds) { + if(selectedConfiguratorIds == null) { + selectedConfiguratorIds = new HashSet<String>(configuratorIds); + } else { + selectedConfiguratorIds.addAll(configuratorIds); + } + } } 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 84239ba3..07c3267c 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 @@ -13,17 +13,13 @@ package org.eclipse.m2e.internal.discovery.wizards; import java.net.URL; import java.util.Collection; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Set; import org.apache.maven.plugin.MojoExecution; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; 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; 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; @@ -42,12 +38,14 @@ import org.eclipse.osgi.util.NLS; @SuppressWarnings("restriction") public class MavenCatalogViewer extends CatalogViewer { + private static final String CONFIGURATOR_PREFIX = "configurator:"; //$NON-NLS-1$ + + private static final String LIFECYCLE_PREFIX = "lifecycle:"; //$NON-NLS-1$ + private static final String PATH = "lifecycle/"; //$NON-NLS-1$ private static final String EXT = ".xml"; //$NON-NLS-1$ - private Map<CatalogItem, LifecycleMappingMetadataSource> lifecycleCache = new HashMap<CatalogItem, LifecycleMappingMetadataSource>(); - public MavenCatalogViewer(Catalog catalog, IShellProvider shellProvider, IRunnableContext context, CatalogConfiguration configuration) { super(catalog, shellProvider, context, configuration); @@ -60,90 +58,80 @@ public class MavenCatalogViewer extends CatalogViewer { final MavenCatalogConfiguration config = (MavenCatalogConfiguration) getConfiguration(); final Collection<String> selectedPackagingTypes = config.getSelectedPackagingTypes(); final Collection<MojoExecution> selectedMojos = config.getSelectedMojos(); + final Collection<String> selectedLifecycleIds = config.getSelectedLifecycleIds(); + final Collection<String> selectedConfiguratorIds = config.getSelectedConfiguratorIds(); shellProvider.getShell().getDisplay().syncExec(new Runnable() { @SuppressWarnings("synthetic-access") public void run() { - Map<String, Set<CatalogItem>> map = new HashMap<String, Set<CatalogItem>>(selectedPackagingTypes.size()); - - for(String packagingType : selectedPackagingTypes) { - map.put(packagingType, new HashSet<CatalogItem>()); - for(CatalogItem ci : getCatalog().getItems()) { - LifecycleMappingMetadataSource src = getLifecycleMappingMetadataSource(ci); - if(src != null && hasPackaging(src, packagingType)) { - Set<CatalogItem> items = map.get(packagingType); - items.add(ci); + for (CatalogItem ci : getCatalog().getItems()) { + boolean selected = false; + + LifecycleMappingMetadataSource src = getLifecycleMappingMetadataSource(ci); + if (src != null) { + for (String packagingType : selectedPackagingTypes) { + if(hasPackaging(src, packagingType)) { + selected = true; + select(ci); + break; + } } - } - } - - Map<MojoExecution, Set<CatalogItem>> mojoMap = new HashMap<MojoExecution, Set<CatalogItem>>(selectedMojos - .size()); - // Mojo - for(MojoExecution mojoExecution : selectedMojos) { - mojoMap.put(mojoExecution, new HashSet<CatalogItem>()); - for(CatalogItem ci : getCatalog().getItems()) { - LifecycleMappingMetadataSource src = getLifecycleMappingMetadataSource(ci); - if(src != null && matchesFilter(src, mojoExecution)) { - mojoMap.get(mojoExecution).add(ci); + if (selected) { + continue; + } + for(MojoExecution mojoExecution : selectedMojos) { + if (matchesFilter(src, mojoExecution)) { + selected = true; + select(ci); + break; + } + } + if (selected) { + continue; } } - } - // Select relevant CatalogItems - // TODO Make selection smarter - for(Entry<String, Set<CatalogItem>> type : map.entrySet()) { - if(type.getValue().isEmpty()) { - MavenLogger.log(NLS.bind(Messages.MavenCatalogViewer_Missing_packaging_type, type.getKey())); + for(String configuratorId : selectedConfiguratorIds) { + Tag configuratorIdTag = new Tag(CONFIGURATOR_PREFIX + configuratorId, CONFIGURATOR_PREFIX + configuratorId); + if (ci.hasTag(configuratorIdTag)) { + selected = true; + select(ci); + break; + } } - for(CatalogItem ci : type.getValue()) { - modifySelection(ci, true); - ci.addTag(MavenDiscovery.APPLICABLE_TAG); + if (selected) { + continue; } - } - for(Entry<MojoExecution, Set<CatalogItem>> type : mojoMap.entrySet()) { - if(type.getValue().isEmpty()) { - MavenLogger.log(NLS.bind(Messages.MavenCatalogViewer_Missing_mojo_execution, new String[] { - type.getKey().getGroupId(), type.getKey().getArtifactId(), type.getKey().getExecutionId(), - type.getKey().getGoal()})); - } - for(CatalogItem ci : type.getValue()) { - modifySelection(ci, true); - ci.addTag(MavenDiscovery.APPLICABLE_TAG); + for(String lifecycleId : selectedLifecycleIds) { + Tag lifecycleIdTag = new Tag(LIFECYCLE_PREFIX + lifecycleId, LIFECYCLE_PREFIX + lifecycleId); + if (ci.hasTag(lifecycleIdTag)) { + select(ci); + break; + } } } } }); } + private void select(CatalogItem ci) { + modifySelection(ci, true); + ci.addTag(MavenDiscovery.APPLICABLE_TAG); + } + private static boolean matchesFilter(LifecycleMappingMetadataSource src, MojoExecution mojoExecution) { for(PluginExecutionMetadata p : src.getPluginExecutions()) { if(p.getFilter().match(mojoExecution)) { return true; } } - for(LifecycleMappingMetadata m : src.getLifecycleMappings()) { - for(PluginExecutionMetadata p : m.getPluginExecutions()) { - if(p.getFilter().match(mojoExecution)) { - return true; - } - } - } return false; } private LifecycleMappingMetadataSource getLifecycleMappingMetadataSource(CatalogItem ci) { try { - if(lifecycleCache.get(ci) != null) { - return lifecycleCache.get(ci); - } - LifecycleMappingMetadataSource source = LifecycleMappingFactory - .createLifecycleMappingMetadataSource(getLifecycleMappingMetadataSourceURL(ci)); - if(source != null) { - lifecycleCache.put(ci, source); - } - return source; + return LifecycleMappingFactory.createLifecycleMappingMetadataSource(getLifecycleMappingMetadataSourceURL(ci)); } catch(Exception e) { MavenLogger.log(new Status(IStatus.WARNING, MavenDiscoveryIcons.PLUGIN_ID, NLS.bind( Messages.MavenCatalogViewer_Error_loading_lifecycle, |