Bug #283170: Multiple CXF installations
diff --git a/bundles/org.eclipse.jst.ws.cxf.core/src/org/eclipse/jst/ws/internal/cxf/core/utils/LaunchUtils.java b/bundles/org.eclipse.jst.ws.cxf.core/src/org/eclipse/jst/ws/internal/cxf/core/utils/LaunchUtils.java
index 968dfc4..8f34451 100644
--- a/bundles/org.eclipse.jst.ws.cxf.core/src/org/eclipse/jst/ws/internal/cxf/core/utils/LaunchUtils.java
+++ b/bundles/org.eclipse.jst.ws.cxf.core/src/org/eclipse/jst/ws/internal/cxf/core/utils/LaunchUtils.java
@@ -27,7 +27,7 @@
 import org.eclipse.jdt.launching.JavaRuntime;
 import org.eclipse.jdt.launching.VMRunnerConfiguration;
 import org.eclipse.jst.ws.internal.cxf.core.CXFCorePlugin;
-import org.eclipse.jst.ws.internal.cxf.core.model.CXFContext;
+import org.eclipse.jst.ws.internal.cxf.core.model.CXFInstall;
 import org.eclipse.ui.IWorkbench;
 import org.eclipse.ui.IWorkbenchPage;
 import org.eclipse.ui.IWorkbenchWindow;
@@ -78,13 +78,15 @@
         return status;
     }
 
-    public static void launch(IJavaProject javaProject, String className, String[] programArgs)
-    throws CoreException {
+    public static void launch(IJavaProject javaProject, String className, String[] programArgs) throws CoreException {
         IVMInstall vmInstall = JavaRuntime.getVMInstall(javaProject);
         if (vmInstall == null) {
             vmInstall = JavaRuntime.getDefaultVMInstall();
         }
 
+        String installedVersion = CXFCorePlugin.getDefault().getCXFRuntimeVersion(javaProject.getProject());
+        CXFInstall cxfInstall = CXFCorePlugin.getDefault().getJava2WSContext().getInstallations().get(installedVersion);
+
         IVMRunner vmRunner = vmInstall.getVMRunner(ILaunchManager.RUN_MODE);
         String[] runtimeClasspath = JavaRuntime.computeDefaultRuntimeClassPath(javaProject);
         VMRunnerConfiguration vmRunnerConfiguration = new VMRunnerConfiguration(className, runtimeClasspath);
@@ -95,7 +97,7 @@
             IVMInstall2 install2 = (IVMInstall2) vmInstall;
             if (install2.getJavaVersion().compareTo(JavaCore.VERSION_1_6) > 0) {
                 vmRunnerConfiguration.setVMArguments(new String[] { "-Djava.endorsed.dirs=" //$NON-NLS-1$
-                        + CXFCorePlugin.getDefault().getJava2WSContext().getDefaultRuntimeLocation() });
+                        + cxfInstall.getLocation() });
             }
         }
 
@@ -113,19 +115,19 @@
         IProcess[] processes = launch.getProcesses();
 
         String outputStream = processes[0].getStreamsProxy().getOutputStreamMonitor().getContents();
-        logStream(outputStream);
+        logStream(outputStream, cxfInstall);
         String errorStream = processes[0].getStreamsProxy().getErrorStreamMonitor().getContents();
-        logStream(errorStream);
+        logStream(errorStream, cxfInstall);
 
         logErrorStreamContents(errorStream, className);
     }
 
-    private static void logStream(String outputStream) {
+    private static void logStream(String outputStream, CXFInstall cxfInstall) {
         if (!PlatformUI.isWorkbenchRunning()) {
             return;
         }
         try {
-            MessageConsole cxfConsole = getCXFConsole();
+            MessageConsole cxfConsole = getCXFConsole(cxfInstall);
             IWorkbench workbench = PlatformUI.getWorkbench();
             IWorkbenchWindow workbenchWindow = workbench.getActiveWorkbenchWindow();
             if (workbenchWindow != null) {
@@ -144,19 +146,18 @@
         }
     }
 
-    private static MessageConsole getCXFConsole() {
+    private static MessageConsole getCXFConsole(CXFInstall cxfInstall) {
         ConsolePlugin consolePlugin = ConsolePlugin.getDefault();
         IConsoleManager consoleManager = consolePlugin.getConsoleManager();
         IConsole[] existingConsoles = consoleManager.getConsoles();
-        CXFContext context = CXFCorePlugin.getDefault().getJava2WSContext();
         for (int i = 0; i < existingConsoles.length; i++) {
-            if (existingConsoles[i].getName().equals(context.getDefaultRuntimeType() + " "
-                    + context.getDefaultRuntimeVersion())) {
+            if (existingConsoles[i].getName().equals(cxfInstall.getType() + " "
+                    + cxfInstall.getVersion())) {
                 return (MessageConsole) existingConsoles[i];
             }
         }
-        MessageConsole cxfConsole = new MessageConsole(context.getDefaultRuntimeType() + " "
-                + context.getDefaultRuntimeVersion(),
+        MessageConsole cxfConsole = new MessageConsole(cxfInstall.getType() + " "
+                + cxfInstall.getVersion(),
                 CXFCorePlugin.imageDescriptorFromPlugin(CXFCorePlugin.PLUGIN_ID,
                 "icons/view16/console_view.gif")); //$NON-NLS-1$
         consoleManager.addConsoles(new IConsole[]{cxfConsole});
diff --git a/bundles/org.eclipse.jst.ws.cxf.ui/src/org/eclipse/jst/ws/internal/cxf/ui/CXFUIMessages.java b/bundles/org.eclipse.jst.ws.cxf.ui/src/org/eclipse/jst/ws/internal/cxf/ui/CXFUIMessages.java
index 7bde138..9a1e548 100644
--- a/bundles/org.eclipse.jst.ws.cxf.ui/src/org/eclipse/jst/ws/internal/cxf/ui/CXFUIMessages.java
+++ b/bundles/org.eclipse.jst.ws.cxf.ui/src/org/eclipse/jst/ws/internal/cxf/ui/CXFUIMessages.java
@@ -28,7 +28,10 @@
     public static String CXF_RUNTIME_PREFERENCE_PAGE_DESCRIPTION_LABEL;
     public static String CXF_RUNTIME_PREFERENCE_PAGE_VERSION_COLUMN_NAME;
     public static String CXF_RUNTIME_PREFERENCE_PAGE_LOCATION_COLUMN_NAME;
-    public static String CXF_RUNTIME_PREFERENCE_PAGE_LOCATION_TYPE_NAME;
+    public static String CXF_RUNTIME_PREFERENCE_PAGE_TYPE_COLUMN_NAME;
+
+    public static String CXF_RUNTIME_PREFERENCE_PAGE_ENTER_TYPE_NAME;
+    public static String CXF_RUNTIME_PREFERENCE_PAGE_INVALID_TYPE_NAME;
 
     public static String CXF_PROPERTY_PAGE_RUNTIME_LABEL;
     public static String CXF_CONFIGURE_INSTALLED_RUNTIMES_LABEL;
diff --git a/bundles/org.eclipse.jst.ws.cxf.ui/src/org/eclipse/jst/ws/internal/cxf/ui/CXFUImessages.properties b/bundles/org.eclipse.jst.ws.cxf.ui/src/org/eclipse/jst/ws/internal/cxf/ui/CXFUImessages.properties
index beeeee8..bf95fc3 100644
--- a/bundles/org.eclipse.jst.ws.cxf.ui/src/org/eclipse/jst/ws/internal/cxf/ui/CXFUImessages.properties
+++ b/bundles/org.eclipse.jst.ws.cxf.ui/src/org/eclipse/jst/ws/internal/cxf/ui/CXFUImessages.properties
@@ -24,8 +24,9 @@
 CXF_RUNTIME_PREFERENCE_PAGE_DESCRIPTION_LABEL=Add, remove or edit CXF runtimes. By default, the checked CXF runtime is added to the build path of a project when installing the CXF facet.
 CXF_RUNTIME_PREFERENCE_PAGE_VERSION_COLUMN_NAME=Version
 CXF_RUNTIME_PREFERENCE_PAGE_LOCATION_COLUMN_NAME=Location
-CXF_RUNTIME_PREFERENCE_PAGE_LOCATION_TYPE_NAME=Type
-
+CXF_RUNTIME_PREFERENCE_PAGE_TYPE_COLUMN_NAME=Type
+CXF_RUNTIME_PREFERENCE_PAGE_ENTER_TYPE_NAME=Enter type name
+CXF_RUNTIME_PREFERENCE_PAGE_INVALID_TYPE_NAME=Invalid type name: {0}
 CXF_PROPERTY_PAGE_RUNTIME_LABEL=CXF runtime:
 CXF_CONFIGURE_INSTALLED_RUNTIMES_LABEL=<A>Configure installed runtimes</A>
 
diff --git a/bundles/org.eclipse.jst.ws.cxf.ui/src/org/eclipse/jst/ws/internal/cxf/ui/preferences/CXFRuntimePreferencePage.java b/bundles/org.eclipse.jst.ws.cxf.ui/src/org/eclipse/jst/ws/internal/cxf/ui/preferences/CXFRuntimePreferencePage.java
index bd8a9be..c38f3c5 100644
--- a/bundles/org.eclipse.jst.ws.cxf.ui/src/org/eclipse/jst/ws/internal/cxf/ui/preferences/CXFRuntimePreferencePage.java
+++ b/bundles/org.eclipse.jst.ws.cxf.ui/src/org/eclipse/jst/ws/internal/cxf/ui/preferences/CXFRuntimePreferencePage.java
@@ -260,7 +260,7 @@
         });
 
         TableColumn typeColumn = typeViewerColumn.getColumn();
-        typeColumn.setText(CXFUIMessages.CXF_RUNTIME_PREFERENCE_PAGE_LOCATION_TYPE_NAME);
+        typeColumn.setText(CXFUIMessages.CXF_RUNTIME_PREFERENCE_PAGE_TYPE_COLUMN_NAME);
         typeColumn.pack();
 
         columnWeightData = new ColumnWeightData(50, 100, true);
diff --git a/bundles/org.eclipse.jst.ws.cxf.ui/src/org/eclipse/jst/ws/internal/cxf/ui/wizards/CXFFacetInstallWizardPage.java b/bundles/org.eclipse.jst.ws.cxf.ui/src/org/eclipse/jst/ws/internal/cxf/ui/wizards/CXFFacetInstallWizardPage.java
index 7725dd6..10d266e 100644
--- a/bundles/org.eclipse.jst.ws.cxf.ui/src/org/eclipse/jst/ws/internal/cxf/ui/wizards/CXFFacetInstallWizardPage.java
+++ b/bundles/org.eclipse.jst.ws.cxf.ui/src/org/eclipse/jst/ws/internal/cxf/ui/wizards/CXFFacetInstallWizardPage.java
@@ -56,9 +56,11 @@
     public void transferStateToConfig() {
         StructuredSelection structuredSelection = (StructuredSelection) installationsComboViewer.getSelection();
         CXFInstall selectedInstall = (CXFInstall) structuredSelection.getFirstElement();
-        dataModel.setDefaultRuntimeVersion(selectedInstall.getVersion());
-        dataModel.setDefaultRuntimeLocation(selectedInstall.getLocation());
-        dataModel.setDefaultRuntimeType(selectedInstall.getType());
+        if (selectedInstall != null) {
+            dataModel.setDefaultRuntimeVersion(selectedInstall.getVersion());
+            dataModel.setDefaultRuntimeLocation(selectedInstall.getLocation());
+            dataModel.setDefaultRuntimeType(selectedInstall.getType());
+        }
     }
 
     public void createControl(Composite parent) {
@@ -134,6 +136,9 @@
         CXFInstall defaultInstall = cxfContext.getInstallations().get(intalledVersion);
         if (defaultInstall != null) {
             installationsComboViewer.setSelection(new StructuredSelection(defaultInstall), true);
+            setPageComplete(true);
+        } else {
+            setPageComplete(false);
         }
     }
 }
diff --git a/bundles/org.eclipse.jst.ws.cxf.ui/src/org/eclipse/jst/ws/internal/cxf/ui/wizards/CXFInstallWizardPage.java b/bundles/org.eclipse.jst.ws.cxf.ui/src/org/eclipse/jst/ws/internal/cxf/ui/wizards/CXFInstallWizardPage.java
index 644ba9c..3c78ddd 100644
--- a/bundles/org.eclipse.jst.ws.cxf.ui/src/org/eclipse/jst/ws/internal/cxf/ui/wizards/CXFInstallWizardPage.java
+++ b/bundles/org.eclipse.jst.ws.cxf.ui/src/org/eclipse/jst/ws/internal/cxf/ui/wizards/CXFInstallWizardPage.java
@@ -20,9 +20,6 @@
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.IWorkspace;
-import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IStatus;
@@ -234,20 +231,16 @@
 
     private IStatus validateTypeName(String typeName) {
         if (typeName.trim().length() == 0) {
-            CXF_TYPE_STATUS = new Status(Status.ERROR, CXFUIPlugin.PLUGIN_ID, "Enter Type Name");
+            CXF_TYPE_STATUS = new Status(Status.ERROR, CXFUIPlugin.PLUGIN_ID, CXFUIMessages.CXF_RUNTIME_PREFERENCE_PAGE_ENTER_TYPE_NAME);
         } else {
             CXF_TYPE_STATUS = OK_STATUS;
         }
-        IWorkspace workspace = ResourcesPlugin.getWorkspace();
-        IStatus result = workspace.validateName(typeName, IResource.FOLDER);
-        if (!result.isOK()) {
-            return result;
+        if (!typeName.matches("[a-zA-Z0-9_\\-\\s]+")) {
+            CXF_TYPE_STATUS = new Status(Status.ERROR, CXFUIPlugin.PLUGIN_ID,
+                    CXFUIMessages.bind(CXFUIMessages.CXF_RUNTIME_PREFERENCE_PAGE_INVALID_TYPE_NAME, typeName));
+        } else {
+            CXF_TYPE_STATUS = OK_STATUS;
         }
-        //        if (!typeName.matches("[a-zA-Z0-9_\\-\\s]")) {
-        //            CXF_TYPE_STATUS = new Status(Status.ERROR, CXFUIPlugin.PLUGIN_ID, "Invalid type name");
-        //        } else {
-        //            CXF_TYPE_STATUS = OK_STATUS;
-        //        }
         return CXF_TYPE_STATUS;
     }
 
@@ -323,9 +316,9 @@
         CXFPersistentContext context = CXFCorePlugin.getDefault().getJava2WSContext();
         Map<String, CXFInstall> installs = context.getInstallations();
         CXFInstall install = CXFFactory.eINSTANCE.createCXFInstall();
-        install.setVersion(cxfVersionText.getText());
-        install.setLocation(cxfHomeDirText.getText());
-        install.setType(cxfTypeText.getText());
+        install.setVersion(cxfVersionText.getText().trim());
+        install.setLocation(cxfHomeDirText.getText().trim());
+        install.setType(cxfTypeText.getText().trim());
         installs.put(cxfRuntimeVersion, install);
         context.setInstallations(installs);
         if (isUpdateRequired(install)) {