432436 use runtime name to identify runtimes WIP

Change-Id: Ic2c2f210065775805418e37b47df00b83237f35f
Signed-off-by: Igor Fedorenko <igor@ifedorenko.com>
diff --git a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/embedder/MavenRuntime.java b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/embedder/MavenRuntime.java
index 3f03aa0..c4bad9a 100644
--- a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/embedder/MavenRuntime.java
+++ b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/embedder/MavenRuntime.java
@@ -33,6 +33,9 @@
   public abstract void createLauncherConfiguration(IMavenLauncherConfiguration collector, IProgressMonitor monitor)
       throws CoreException;
 
+  /**
+   * @since 1.5
+   */
   public abstract String getName();
 
   public abstract String getLocation();
diff --git a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/embedder/MavenRuntimeManager.java b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/embedder/MavenRuntimeManager.java
index 73f38e5..437c427 100644
--- a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/embedder/MavenRuntimeManager.java
+++ b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/embedder/MavenRuntimeManager.java
@@ -78,7 +78,7 @@
       return getEmbeddedRuntime();
     }
     MavenRuntime runtime = getRuntimeByName(selected);
-    return runtime != null ? runtime : getEmbeddedRuntime();
+    return runtime != null && runtime.isAvailable() ? runtime : getEmbeddedRuntime();
   }
 
   private MavenEmbeddedRuntime getEmbeddedRuntime() {
diff --git a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/launch/MavenEmbeddedRuntime.java b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/launch/MavenEmbeddedRuntime.java
index afb2e2e..6668e3f 100644
--- a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/launch/MavenEmbeddedRuntime.java
+++ b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/launch/MavenEmbeddedRuntime.java
@@ -221,7 +221,7 @@
     StringBuilder sb = new StringBuilder();
     sb.append("Embedded (").append(getVersion()); //$NON-NLS-1$
     if(embedder != null) {
-      String version = (String) embedder.getHeaders().get(Constants.BUNDLE_VERSION);
+      String version = embedder.getHeaders().get(Constants.BUNDLE_VERSION);
       sb.append('/').append(version);
     }
     sb.append(')');
diff --git a/org.eclipse.m2e.launching/src/org/eclipse/m2e/internal/launch/MavenLaunchUtils.java b/org.eclipse.m2e.launching/src/org/eclipse/m2e/internal/launch/MavenLaunchUtils.java
index 0768fab..7b3c231 100644
--- a/org.eclipse.m2e.launching/src/org/eclipse/m2e/internal/launch/MavenLaunchUtils.java
+++ b/org.eclipse.m2e.launching/src/org/eclipse/m2e/internal/launch/MavenLaunchUtils.java
@@ -52,11 +52,11 @@
 
   public static MavenRuntime getMavenRuntime(ILaunchConfiguration configuration) throws CoreException {
     MavenRuntimeManager runtimeManager = MavenPlugin.getMavenRuntimeManager();
-    String location = configuration.getAttribute(MavenLaunchConstants.ATTR_RUNTIME, ""); //$NON-NLS-1$
-    MavenRuntime runtime = runtimeManager.getRuntime(location);
+    String name = configuration.getAttribute(MavenLaunchConstants.ATTR_RUNTIME, ""); //$NON-NLS-1$
+    MavenRuntime runtime = runtimeManager.getRuntimeByName(name);
     if(runtime == null) {
       throw new CoreException(new Status(IStatus.ERROR, MavenLaunchConstants.PLUGIN_ID, -1, //
-          NLS.bind(Messages.MavenLaunchUtils_error_no_maven_install, location), null));
+          NLS.bind(Messages.MavenLaunchUtils_error_no_maven_install, name), null));
     }
     return runtime;
   }
diff --git a/org.eclipse.m2e.launching/src/org/eclipse/m2e/ui/internal/launch/MavenRuntimeSelector.java b/org.eclipse.m2e.launching/src/org/eclipse/m2e/ui/internal/launch/MavenRuntimeSelector.java
index 8e21849..fe8aafc 100644
--- a/org.eclipse.m2e.launching/src/org/eclipse/m2e/ui/internal/launch/MavenRuntimeSelector.java
+++ b/org.eclipse.m2e.launching/src/org/eclipse/m2e/ui/internal/launch/MavenRuntimeSelector.java
@@ -17,6 +17,8 @@
 import org.eclipse.debug.core.ILaunchConfiguration;
 import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
 import org.eclipse.jface.viewers.ComboViewer;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.ILabelProviderListener;
 import org.eclipse.jface.viewers.ISelectionChangedListener;
 import org.eclipse.jface.viewers.IStructuredContentProvider;
 import org.eclipse.jface.viewers.IStructuredSelection;
@@ -25,6 +27,7 @@
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.SelectionAdapter;
 import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Button;
@@ -36,16 +39,18 @@
 import org.eclipse.m2e.core.MavenPlugin;
 import org.eclipse.m2e.core.embedder.MavenRuntime;
 import org.eclipse.m2e.core.embedder.MavenRuntimeManager;
+import org.eclipse.m2e.core.internal.launch.AbstractMavenRuntime;
 
 
 /**
  * @since 1.4
  */
+@SuppressWarnings("restriction")
 public class MavenRuntimeSelector extends Composite {
 
   ComboViewer runtimeComboViewer;
 
-  private MavenRuntimeManager runtimeManager;
+  private static final MavenRuntimeManager runtimeManager = MavenPlugin.getMavenRuntimeManager();
 
   public MavenRuntimeSelector(final Composite mainComposite) {
     super(mainComposite, SWT.NONE);
@@ -74,11 +79,33 @@
       }
 
     });
+    runtimeComboViewer.setLabelProvider(new ILabelProvider() {
+
+      public void removeListener(ILabelProviderListener listener) {
+      }
+
+      public boolean isLabelProperty(Object element, String property) {
+        return false;
+      }
+
+      public void dispose() {
+      }
+
+      public void addListener(ILabelProviderListener listener) {
+      }
+
+      public String getText(Object element) {
+        AbstractMavenRuntime runtime = (AbstractMavenRuntime) element;
+        return runtime.isLegacy() ? runtime.toString() : runtime.getName();
+      }
+
+      public Image getImage(Object element) {
+        return null;
+      }
+    });
 
     try {
-      runtimeManager = MavenPlugin.getMavenRuntimeManager();
-      runtimeComboViewer.setInput(runtimeManager.getMavenRuntimes());
-      runtimeComboViewer.setSelection(new StructuredSelection(runtimeManager.getDefaultRuntime()));
+      setInput();
     } catch(NullPointerException e) {
       // ignore, this only happens inside windowbuilder
     }
@@ -90,13 +117,16 @@
       public void widgetSelected(SelectionEvent e) {
         PreferencesUtil.createPreferenceDialogOn(mainComposite.getShell(),
             "org.eclipse.m2e.core.preferences.MavenInstallationsPreferencePage", null, null).open(); //$NON-NLS-1$
-        MavenRuntimeManager runtimeManager = MavenPlugin.getMavenRuntimeManager();
-        runtimeComboViewer.setInput(runtimeManager.getMavenRuntimes());
-        runtimeComboViewer.setSelection(new StructuredSelection(runtimeManager.getDefaultRuntime()));
+        setInput();
       }
     });
   }
 
+  protected void setInput() {
+    runtimeComboViewer.setInput(runtimeManager.getMavenRuntimes());
+    runtimeComboViewer.setSelection(new StructuredSelection(runtimeManager.getDefaultRuntime()));
+  }
+
   public void setSelectRuntime(MavenRuntime runtime) {
     this.runtimeComboViewer.setSelection(new StructuredSelection(runtime));
   }
@@ -111,13 +141,13 @@
   }
 
   public void initializeFrom(ILaunchConfiguration configuration) {
-    String location = "";
+    String name = "";
     try {
-      location = configuration.getAttribute(MavenLaunchConstants.ATTR_RUNTIME, ""); //$NON-NLS-1$
+      name = configuration.getAttribute(MavenLaunchConstants.ATTR_RUNTIME, ""); //$NON-NLS-1$
     } catch(CoreException ex) {
       // TODO log
     }
-    MavenRuntime runtime = runtimeManager.getRuntime(location);
+    MavenRuntime runtime = runtimeManager.getRuntimeByName(name);
     if(runtime != null) {
       setSelectRuntime(runtime);
     }
@@ -125,6 +155,6 @@
 
   public void performApply(ILaunchConfigurationWorkingCopy configuration) {
     MavenRuntime runtime = getSelectedRuntime();
-    configuration.setAttribute(MavenLaunchConstants.ATTR_RUNTIME, runtime.getLocation());
+    configuration.setAttribute(MavenLaunchConstants.ATTR_RUNTIME, runtime.getName());
   }
 }