Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPascal Rapicault2011-01-14 19:47:39 +0000
committerPascal Rapicault2011-01-14 19:47:39 +0000
commit3ca9be7b7413a39ee93ba7a8107a77e20441a9dd (patch)
treeb45f81a316b1ff73e054f854ef6e9b00e82b6b8e /org.eclipse.m2e.discovery/src
parentf0a415be7b68ec1b475127ca3288de7889755431 (diff)
downloadm2e-core-3ca9be7b7413a39ee93ba7a8107a77e20441a9dd.tar.gz
m2e-core-3ca9be7b7413a39ee93ba7a8107a77e20441a9dd.tar.xz
m2e-core-3ca9be7b7413a39ee93ba7a8107a77e20441a9dd.zip
Add discovery UI
Diffstat (limited to 'org.eclipse.m2e.discovery/src')
-rw-r--r--org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/MavenDiscovery.java90
-rw-r--r--org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/MavenDiscoveryIcons.java57
-rw-r--r--org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/Messages.java47
-rw-r--r--org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/handlers/MavenDiscoveryHandler.java30
-rw-r--r--org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/markers/DiscoveryWizardProposal.java36
-rw-r--r--org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/markers/MavenDiscoveryMarkerResolutionGenerator.java37
-rw-r--r--org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/messages.properties17
-rw-r--r--org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/wizards/MavenCatalogConfiguration.java38
-rw-r--r--org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/wizards/MavenCatalogPage.java37
-rw-r--r--org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/wizards/MavenCatalogViewer.java114
-rw-r--r--org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/wizards/MavenDiscoveryWizard.java34
11 files changed, 537 insertions, 0 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
new file mode 100644
index 00000000..f8a02144
--- /dev/null
+++ b/org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/MavenDiscovery.java
@@ -0,0 +1,90 @@
+/*******************************************************************************
+ * 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.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import org.apache.maven.plugin.MojoExecution;
+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.Tag;
+import org.eclipse.jface.wizard.WizardDialog;
+import org.eclipse.m2e.internal.discovery.wizards.MavenCatalogConfiguration;
+import org.eclipse.m2e.internal.discovery.wizards.MavenDiscoveryWizard;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.internal.Workbench;
+
+
+@SuppressWarnings("restriction")
+public class MavenDiscovery {
+
+ public static final Tag APPLICABLE_TAG = new Tag("applicable", Messages.MavenDiscovery_Wizard_Applicable_Tag); //$NON-NLS-1$
+
+ private static final Tag EXTRAS_TAG = new Tag("extras", Messages.MavenDiscovery_Wizard_ExtrasTag); //$NON-NLS-1$
+
+ private static final Tag LIFECYCLES_TAG = new Tag("lifecycles", Messages.MavenDiscovery_Wizard_LifecyclesTag); //$NON-NLS-1$
+
+ private static final Tag MAVEN_TAG = new Tag("maven", Messages.MavenDiscovery_Wizard_MavenTag); //$NON-NLS-1$
+
+ 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, Collection<MojoExecution> mojos) {
+ final Display display = Workbench.getInstance().getDisplay();
+ display.asyncExec(new Runnable() {
+ public void run() {
+ launchWizard(display.getActiveShell(), packagingTypes);
+ }
+ });
+ }
+
+ public static void launchWizard(Shell shell, Collection<String> packagingTypes) {
+ 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);
+
+ // Build the list of tags to show in the Wizard header
+ List<Tag> tags = new ArrayList<Tag>(3);
+ if(!packagingTypes.isEmpty()) {
+ tags.add(APPLICABLE_TAG);
+ }
+ tags.add(EXTRAS_TAG);
+ tags.add(LIFECYCLES_TAG);
+ tags.add(MAVEN_TAG);
+ catalog.setTags(tags);
+
+ // Create configuration for the catalog
+ MavenCatalogConfiguration configuration = new MavenCatalogConfiguration();
+ configuration.setShowTagFilter(true);
+ if(!packagingTypes.isEmpty()) {
+ tags = new ArrayList<Tag>(1);
+ tags.add(APPLICABLE_TAG);
+ configuration.setSelectedTags(tags);
+ } else {
+ configuration.setSelectedTags(tags);
+ }
+ configuration.setShowInstalledFilter(false);
+ configuration.setSelectedPackagingTypes(packagingTypes);
+
+ MavenDiscoveryWizard wizard = new MavenDiscoveryWizard(catalog, configuration);
+ WizardDialog dialog = new WizardDialog(shell, wizard);
+ dialog.open();
+ }
+}
diff --git a/org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/MavenDiscoveryIcons.java b/org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/MavenDiscoveryIcons.java
new file mode 100644
index 00000000..4f200525
--- /dev/null
+++ b/org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/MavenDiscoveryIcons.java
@@ -0,0 +1,57 @@
+/*******************************************************************************
+ * 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.net.MalformedURLException;
+import java.net.URL;
+
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.resource.ImageRegistry;
+import org.eclipse.swt.graphics.Image;
+
+
+public class MavenDiscoveryIcons {
+
+ public static final String PLUGIN_ID = "org.eclipse.m2e.discovery"; //$NON-NLS-1$
+
+ private static final URL baseURL = Platform.getBundle(PLUGIN_ID).getEntry("/icons/"); //$NON-NLS-1$
+
+ private static ImageRegistry imageRegistry;
+
+ public static final ImageDescriptor WIZARD_BANNER = create("banner.gif"); //$NON-NLS-1$
+
+ private static ImageDescriptor create(String string) {
+ try {
+ return ImageDescriptor.createFromURL(new URL(baseURL, string));
+ } catch(MalformedURLException e) {
+ return ImageDescriptor.getMissingImageDescriptor();
+ }
+ }
+
+ public static Image getImage(ImageDescriptor descriptor) {
+ ImageRegistry imageRegistry = getImageRegistry();
+ Image image = imageRegistry.get(String.valueOf(descriptor.hashCode()));
+ if(image == null) {
+ image = descriptor.createImage(true);
+ imageRegistry.put(String.valueOf(descriptor.hashCode()), image);
+ }
+ return image;
+ }
+
+ private static ImageRegistry getImageRegistry() {
+ if(imageRegistry == null) {
+ imageRegistry = new ImageRegistry();
+ }
+ return imageRegistry;
+ }
+}
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
new file mode 100644
index 00000000..f60984c2
--- /dev/null
+++ b/org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/Messages.java
@@ -0,0 +1,47 @@
+/*******************************************************************************
+ * 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 org.eclipse.osgi.util.NLS;
+
+
+public class Messages extends NLS {
+ private static final String BUNDLE_NAME = "org.eclipse.m2e.internal.discovery.messages"; //$NON-NLS-1$
+
+ public static String DiscoveryWizardProposal_Label;
+
+ public static String MavenCatalogPage_Descripton;
+
+ public static String MavenCatalogPage_Title;
+
+ public static String MavenCatalogViewer_Error_loading_lifecycle;
+
+ public static String MavenCatalogViewer_Missing_packaging_type;
+
+ public static String MavenDiscoveryWizard_Title;
+
+ public static String MavenDiscovery_Wizard_Applicable_Tag;
+
+ public static String MavenDiscovery_Wizard_ExtrasTag;
+
+ public static String MavenDiscovery_Wizard_LifecyclesTag;
+
+ public static String MavenDiscovery_Wizard_MavenTag;
+
+ static {
+ // initialize resource bundle
+ NLS.initializeMessages(BUNDLE_NAME, Messages.class);
+ }
+
+ private Messages() {
+ }
+}
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
new file mode 100644
index 00000000..933caa95
--- /dev/null
+++ b/org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/handlers/MavenDiscoveryHandler.java
@@ -0,0 +1,30 @@
+/*******************************************************************************
+ * 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.handlers;
+
+import java.util.Collections;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.m2e.internal.discovery.MavenDiscovery;
+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);
+ 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
new file mode 100644
index 00000000..5dd2c3fd
--- /dev/null
+++ b/org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/markers/DiscoveryWizardProposal.java
@@ -0,0 +1,36 @@
+/*******************************************************************************
+ * 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.markers;
+
+import java.util.Arrays;
+import java.util.Collections;
+
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.m2e.core.core.IMavenConstants;
+import org.eclipse.m2e.internal.discovery.MavenDiscovery;
+import org.eclipse.m2e.internal.discovery.Messages;
+import org.eclipse.ui.IMarkerResolution;
+
+
+class DiscoveryWizardProposal implements IMarkerResolution {
+
+ static final DiscoveryWizardProposal PROPOSAL = new DiscoveryWizardProposal();
+
+ public String getLabel() {
+ return Messages.DiscoveryWizardProposal_Label;
+ }
+
+ public void run(IMarker marker) {
+ String packaging = marker.getAttribute(IMavenConstants.MARKER_ATTR_PACKAGING, null);
+ if (packaging != null)
+ MavenDiscovery.launchWizard(Arrays.asList(new String[] {packaging}), Collections.EMPTY_LIST);
+ }
+} \ No newline at end of file
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
new file mode 100644
index 00000000..8e278c5a
--- /dev/null
+++ b/org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/markers/MavenDiscoveryMarkerResolutionGenerator.java
@@ -0,0 +1,37 @@
+/*******************************************************************************
+ * 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.markers;
+
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.m2e.core.core.IMavenConstants;
+import org.eclipse.ui.IMarkerResolution;
+import org.eclipse.ui.IMarkerResolutionGenerator;
+import org.eclipse.ui.IMarkerResolutionGenerator2;
+
+
+public class MavenDiscoveryMarkerResolutionGenerator implements IMarkerResolutionGenerator, IMarkerResolutionGenerator2 {
+
+ public boolean hasResolutions(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);
+ }
+
+ 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};
+ }
+ return new IMarkerResolution[0];
+ }
+}
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
new file mode 100644
index 00000000..e7b3665f
--- /dev/null
+++ b/org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/messages.properties
@@ -0,0 +1,17 @@
+#
+# 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
+#
+DiscoveryWizardProposal_Label=Discover new m2e add-ons
+MavenCatalogPage_Descripton=Select updates and add-ons 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 m2e add-ons
+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}.
+MavenDiscoveryWizard_Title=M2e store
+MavenDiscovery_Wizard_Applicable_Tag=Applicable
+MavenDiscovery_Wizard_ExtrasTag=Extras
+MavenDiscovery_Wizard_LifecyclesTag=Lifecycles
+MavenDiscovery_Wizard_MavenTag=Maven
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
new file mode 100644
index 00000000..a837d664
--- /dev/null
+++ b/org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/wizards/MavenCatalogConfiguration.java
@@ -0,0 +1,38 @@
+/*******************************************************************************
+ * 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.wizards;
+
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.eclipse.equinox.internal.p2.ui.discovery.wizards.CatalogConfiguration;
+
+
+@SuppressWarnings("restriction")
+public class MavenCatalogConfiguration extends CatalogConfiguration {
+
+ private Set<String> selectedPackagingTypes;
+
+ public Collection<String> getSelectedPackagingTypes() {
+ return selectedPackagingTypes;
+ }
+
+ // IDs for catalog items which should be selected when the wizard is presented
+ public void setSelectedPackagingTypes(Collection<String> packagingTypes) {
+ if(selectedPackagingTypes == null) {
+ selectedPackagingTypes = new HashSet<String>(packagingTypes);
+ } else {
+ selectedPackagingTypes.addAll(packagingTypes);
+ }
+ }
+}
diff --git a/org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/wizards/MavenCatalogPage.java b/org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/wizards/MavenCatalogPage.java
new file mode 100644
index 00000000..c902dda0
--- /dev/null
+++ b/org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/wizards/MavenCatalogPage.java
@@ -0,0 +1,37 @@
+/*******************************************************************************
+ * 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.wizards;
+
+import org.eclipse.equinox.internal.p2.discovery.Catalog;
+import org.eclipse.equinox.internal.p2.ui.discovery.wizards.CatalogPage;
+import org.eclipse.equinox.internal.p2.ui.discovery.wizards.CatalogViewer;
+import org.eclipse.m2e.internal.discovery.Messages;
+import org.eclipse.swt.widgets.Composite;
+
+
+@SuppressWarnings("restriction")
+public class MavenCatalogPage extends CatalogPage {
+
+ public MavenCatalogPage(Catalog catalog) {
+ super(catalog);
+ setTitle(Messages.MavenCatalogPage_Title);
+ setDescription(Messages.MavenCatalogPage_Descripton);
+ }
+
+ protected CatalogViewer doCreateViewer(Composite parent) {
+ MavenCatalogViewer viewer = new MavenCatalogViewer(getCatalog(), this, getContainer(), getWizard()
+ .getConfiguration());
+ viewer.setMinimumHeight(MINIMUM_HEIGHT);
+ viewer.createControl(parent);
+ return viewer;
+ }
+}
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
new file mode 100644
index 00000000..2179cdab
--- /dev/null
+++ b/org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/wizards/MavenCatalogViewer.java
@@ -0,0 +1,114 @@
+/*******************************************************************************
+ * 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.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.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.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.core.MavenLogger;
+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.internal.discovery.MavenDiscovery;
+import org.eclipse.m2e.internal.discovery.Messages;
+import org.eclipse.osgi.util.NLS;
+
+
+@SuppressWarnings("restriction")
+public class MavenCatalogViewer extends CatalogViewer {
+
+ private static final String PATH = "lifecycle/"; //$NON-NLS-1$
+
+ private static final String EXT = ".xml"; //$NON-NLS-1$
+
+ private static final String ID = "org.eclipse.m2e.discovery"; //$NON-NLS-1$
+
+ public MavenCatalogViewer(Catalog catalog, IShellProvider shellProvider, IRunnableContext context,
+ CatalogConfiguration configuration) {
+ super(catalog, shellProvider, context, configuration);
+ }
+
+ @Override
+ protected void postDiscovery() {
+ super.postDiscovery();
+
+ final MavenCatalogConfiguration config = (MavenCatalogConfiguration) getConfiguration();
+ final Collection<String> selectedPackagingTypes = config.getSelectedPackagingTypes();
+
+ shellProvider.getShell().getDisplay().syncExec(new Runnable() {
+ @SuppressWarnings("synthetic-access")
+ public void run() {
+ Map<String, Set<CatalogItem>> map = new HashMap<String, Set<CatalogItem>>();
+
+ 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);
+ }
+ }
+ }
+
+ // 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(CatalogItem ci : type.getValue()) {
+ modifySelection(ci, true);
+ ci.addTag(MavenDiscovery.APPLICABLE_TAG);
+ }
+ }
+ }
+ });
+ }
+
+ private static LifecycleMappingMetadataSource getLifecycleMappingMetadataSource(CatalogItem ci) {
+ try {
+ return LifecycleMappingFactory.createLifecycleMappingMetadataSource(getLifecycleMappingMetadataSourceURL(ci));
+ } catch(Exception e) {
+ MavenLogger.log(new Status(IStatus.WARNING, ID, NLS.bind(Messages.MavenCatalogViewer_Error_loading_lifecycle,
+ ci.getId()), e));
+ return null;
+ }
+ }
+
+ private static URL getLifecycleMappingMetadataSourceURL(CatalogItem ci) {
+ return ci.getSource().getResource(PATH + ci.getId() + EXT);
+ }
+
+ private static boolean hasPackaging(LifecycleMappingMetadataSource lifecycleMappingMetadataSource,
+ String packagingType) {
+ for(LifecycleMappingMetadata lifecycleMappingMetadata : lifecycleMappingMetadataSource.getLifecycleMappings()) {
+ if(packagingType.equals(lifecycleMappingMetadata.getPackagingType())) {
+ return true;
+ }
+ }
+ return false;
+ }
+}
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
new file mode 100644
index 00000000..346e0ba2
--- /dev/null
+++ b/org.eclipse.m2e.discovery/src/org/eclipse/m2e/internal/discovery/wizards/MavenDiscoveryWizard.java
@@ -0,0 +1,34 @@
+/*******************************************************************************
+ * 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.wizards;
+
+import org.eclipse.equinox.internal.p2.discovery.Catalog;
+import org.eclipse.equinox.internal.p2.ui.discovery.wizards.CatalogPage;
+import org.eclipse.equinox.internal.p2.ui.discovery.wizards.DiscoveryWizard;
+import org.eclipse.m2e.internal.discovery.MavenDiscoveryIcons;
+import org.eclipse.m2e.internal.discovery.Messages;
+
+
+@SuppressWarnings("restriction")
+public class MavenDiscoveryWizard extends DiscoveryWizard {
+
+ public MavenDiscoveryWizard(Catalog catalog, MavenCatalogConfiguration configuration) {
+ super(catalog, configuration);
+ setWindowTitle(Messages.MavenDiscoveryWizard_Title);
+ setDefaultPageImageDescriptor(MavenDiscoveryIcons.WIZARD_BANNER);
+ }
+
+ @Override
+ protected CatalogPage doCreateCatalogPage() {
+ return new MavenCatalogPage(getCatalog());
+ }
+}

Back to the top