Launching SLC can now use the project classpath (EmbeddedSlcRuntime)
authorMathieu Baudier <mbaudier@argeo.org>
Mon, 2 Jun 2008 16:32:00 +0000 (16:32 +0000)
committerMathieu Baudier <mbaudier@argeo.org>
Mon, 2 Jun 2008 16:32:00 +0000 (16:32 +0000)
git-svn-id: https://svn.argeo.org/slc/trunk@1173 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

eclipse/plugins/org.argeo.slc.ui.launch/META-INF/MANIFEST.MF
eclipse/plugins/org.argeo.slc.ui.launch/src/main/java/org/argeo/slc/ui/launch/DefaultSlcRuntime.java [deleted file]
eclipse/plugins/org.argeo.slc.ui.launch/src/main/java/org/argeo/slc/ui/launch/DeployedSlcRuntime.java [new file with mode: 0644]
eclipse/plugins/org.argeo.slc.ui.launch/src/main/java/org/argeo/slc/ui/launch/EmbeddedSlcRuntime.java [new file with mode: 0644]
eclipse/plugins/org.argeo.slc.ui.launch/src/main/java/org/argeo/slc/ui/launch/SlcRuntime.java
eclipse/plugins/org.argeo.slc.ui.launch/src/main/java/org/argeo/slc/ui/launch/preferences/SlcPreferencePage.java
eclipse/plugins/org.argeo.slc.ui.launch/src/main/java/org/argeo/slc/ui/launch/script/SlcScriptLaunchDelegate.java

index 203abbf0a47f9a934d7560e7277a5fc12832e352..42ad0aba32f900fb44122bca79bf529e5976676c 100644 (file)
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: SLC UI Launch
 Bundle-SymbolicName: org.argeo.slc.ui.launch;singleton:=true
-Bundle-Version: 0.6.0
+Bundle-Version: 0.9.2.SNAPSHOT
 Bundle-Activator: org.argeo.slc.ui.launch.SlcUiLaunchPlugin
 Require-Bundle: org.eclipse.ui,
  org.eclipse.core.runtime,
diff --git a/eclipse/plugins/org.argeo.slc.ui.launch/src/main/java/org/argeo/slc/ui/launch/DefaultSlcRuntime.java b/eclipse/plugins/org.argeo.slc.ui.launch/src/main/java/org/argeo/slc/ui/launch/DefaultSlcRuntime.java
deleted file mode 100644 (file)
index 42e62e8..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-package org.argeo.slc.ui.launch;\r
-\r
-import java.io.File;\r
-import java.io.IOException;\r
-import java.util.List;\r
-import java.util.Vector;\r
-\r
-public class DefaultSlcRuntime implements SlcRuntime {\r
-       private File baseDir;\r
-       private String relLibDir = "lib";\r
-\r
-       public DefaultSlcRuntime(String baseDirPath) {\r
-               try {\r
-                       this.baseDir = new File(baseDirPath).getCanonicalFile();\r
-               } catch (IOException e) {\r
-                       throw new RuntimeException("Cannot get path for " + baseDirPath, e);\r
-               }\r
-       }\r
-\r
-       public String[] getClasspath() {\r
-               List<String> classpath = new Vector<String>();\r
-               File libDir = new File(baseDir.getPath() + File.separator + relLibDir);\r
-               File[] files = libDir.listFiles();\r
-               for (File file : files) {\r
-                       try {\r
-                               classpath.add(file.getCanonicalPath());\r
-                       } catch (IOException e) {\r
-                               throw new RuntimeException("Cannot get path for " + file, e);\r
-                       }\r
-               }\r
-               return classpath.toArray(new String[classpath.size()]);\r
-       }\r
-\r
-       public String getAntHome() {\r
-               return baseDir.getPath();\r
-       }\r
-\r
-       public String getJavaLibraryPath() {\r
-               return baseDir.getPath() + File.separator + "bin";\r
-       }\r
-       \r
-       \r
-}\r
diff --git a/eclipse/plugins/org.argeo.slc.ui.launch/src/main/java/org/argeo/slc/ui/launch/DeployedSlcRuntime.java b/eclipse/plugins/org.argeo.slc.ui.launch/src/main/java/org/argeo/slc/ui/launch/DeployedSlcRuntime.java
new file mode 100644 (file)
index 0000000..e6691ba
--- /dev/null
@@ -0,0 +1,53 @@
+package org.argeo.slc.ui.launch;\r
+\r
+import java.io.File;\r
+import java.io.IOException;\r
+import java.util.List;\r
+import java.util.Vector;\r
+\r
+import org.eclipse.core.runtime.CoreException;\r
+import org.eclipse.jdt.launching.IVMInstall;\r
+import org.eclipse.jdt.launching.JavaRuntime;\r
+\r
+public class DeployedSlcRuntime implements SlcRuntime {\r
+       private File baseDir;\r
+       private String relLibDir = "lib";\r
+\r
+       public DeployedSlcRuntime(String baseDirPath) {\r
+               try {\r
+                       this.baseDir = new File(baseDirPath).getCanonicalFile();\r
+               } catch (IOException e) {\r
+                       throw new RuntimeException("Cannot get path for " + baseDirPath, e);\r
+               }\r
+       }\r
+\r
+       @Override\r
+       public String[] getClasspath() throws CoreException {\r
+               List<String> classpath = new Vector<String>();\r
+               File libDir = new File(baseDir.getPath() + File.separator + relLibDir);\r
+               File[] files = libDir.listFiles();\r
+               for (File file : files) {\r
+                       try {\r
+                               classpath.add(file.getCanonicalPath());\r
+                       } catch (IOException e) {\r
+                               throw new RuntimeException("Cannot get path for " + file, e);\r
+                       }\r
+               }\r
+               return classpath.toArray(new String[classpath.size()]);\r
+       }\r
+\r
+       @Override\r
+       public IVMInstall getVmInstall() throws CoreException {\r
+               return JavaRuntime.getDefaultVMInstall();\r
+       }\r
+\r
+       public String getAntHome() {\r
+               return baseDir.getPath();\r
+       }\r
+\r
+       @Override\r
+       public String getJavaLibraryPath() {\r
+               return baseDir.getPath() + File.separator + "bin";\r
+       }\r
+\r
+}\r
diff --git a/eclipse/plugins/org.argeo.slc.ui.launch/src/main/java/org/argeo/slc/ui/launch/EmbeddedSlcRuntime.java b/eclipse/plugins/org.argeo.slc.ui.launch/src/main/java/org/argeo/slc/ui/launch/EmbeddedSlcRuntime.java
new file mode 100644 (file)
index 0000000..9b3dcd7
--- /dev/null
@@ -0,0 +1,37 @@
+package org.argeo.slc.ui.launch;
+
+import org.argeo.slc.ui.launch.preferences.SlcPreferencePage;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.launching.IVMInstall;
+import org.eclipse.jdt.launching.JavaRuntime;
+
+public class EmbeddedSlcRuntime implements SlcRuntime {
+       private final IJavaProject project;
+
+       public EmbeddedSlcRuntime(IJavaProject project) {
+               this.project = project;
+       }
+
+       @Override
+       public String[] getClasspath() throws CoreException {
+               return JavaRuntime.computeDefaultRuntimeClassPath(project);
+       }
+
+       @Override
+       public String getJavaLibraryPath() {
+               String javaLibPath = SlcUiLaunchPlugin.getDefault()
+                               .getPreferenceStore().getString(
+                                               SlcPreferencePage.PREF_SLC_RUNTIME_LOCATION);
+               if (javaLibPath == null || javaLibPath.equals(""))
+                       return null;
+               else
+                       return javaLibPath;
+       }
+
+       @Override
+       public IVMInstall getVmInstall() throws CoreException {
+               return JavaRuntime.getVMInstall(project);
+       }
+
+}
index 92e846bc7b9d68bf9f8ef4ec87794176932fd7c0..b1cbef67ce85f7b6860510d2aa4a0d7110a70c17 100644 (file)
@@ -1,7 +1,10 @@
 package org.argeo.slc.ui.launch;\r
 \r
+import org.eclipse.core.runtime.CoreException;\r
+import org.eclipse.jdt.launching.IVMInstall;\r
+\r
 public interface SlcRuntime {\r
-       public String[] getClasspath();\r
-       public String getAntHome();\r
+       public String[] getClasspath() throws CoreException;\r
        public String getJavaLibraryPath();\r
+       public IVMInstall getVmInstall() throws CoreException;\r
 }\r
index d2fd3e7a2b5963830e43c4040193c14622fc955f..cc1a013b4e8c38146fed4402a8dd581678bc1fd5 100644 (file)
@@ -12,6 +12,8 @@ public class SlcPreferencePage extends FieldEditorPreferencePage implements
                IWorkbenchPreferencePage {\r
        public final static String PREF_SLC_RUNTIME_LOCATION = SlcUiLaunchPlugin.ID\r
                        + ".slcRuntimeLocation";\r
+       public final static String PREF_EMBEDDED_JAVA_LIBRARY_PATH = SlcUiLaunchPlugin.ID\r
+                       + ".embeddedJavaLibraryPath";\r
 \r
        public SlcPreferencePage() {\r
                IPreferenceStore store = SlcUiLaunchPlugin.getDefault()\r
@@ -24,6 +26,8 @@ public class SlcPreferencePage extends FieldEditorPreferencePage implements
        protected void createFieldEditors() {\r
                addField(new DirectoryFieldEditor(PREF_SLC_RUNTIME_LOCATION,\r
                                "SLC Runtime", getFieldEditorParent()));\r
+               addField(new DirectoryFieldEditor(PREF_EMBEDDED_JAVA_LIBRARY_PATH,\r
+                               "Embedded Java Library Path", getFieldEditorParent()));\r
        }\r
 \r
        public void init(IWorkbench workbench) {\r
index 02a00e05406d8649f470da95e2597c6b6811af7d..7acbb2920204e4f8217797e3a5d6db669cde0201 100644 (file)
@@ -3,6 +3,11 @@ package org.argeo.slc.ui.launch.script;
 import java.util.List;\r
 import java.util.Vector;\r
 \r
+import org.argeo.slc.ui.launch.DeployedSlcRuntime;\r
+import org.argeo.slc.ui.launch.EmbeddedSlcRuntime;\r
+import org.argeo.slc.ui.launch.SlcRuntime;\r
+import org.argeo.slc.ui.launch.SlcUiLaunchPlugin;\r
+import org.argeo.slc.ui.launch.preferences.SlcPreferencePage;\r
 import org.eclipse.core.resources.IFile;\r
 import org.eclipse.core.resources.IProject;\r
 import org.eclipse.core.resources.IResource;\r
@@ -14,19 +19,15 @@ import org.eclipse.debug.core.ILaunch;
 import org.eclipse.debug.core.ILaunchConfiguration;\r
 import org.eclipse.debug.core.ILaunchManager;\r
 import org.eclipse.jdt.core.IJavaProject;\r
+import org.eclipse.jdt.core.IType;\r
+import org.eclipse.jdt.core.JavaCore;\r
+import org.eclipse.jdt.core.JavaModelException;\r
 import org.eclipse.jdt.launching.AbstractJavaLaunchConfigurationDelegate;\r
-import org.eclipse.jdt.launching.IVMInstall;\r
 import org.eclipse.jdt.launching.IVMRunner;\r
-import org.eclipse.jdt.launching.JavaRuntime;\r
 import org.eclipse.jdt.launching.VMRunnerConfiguration;\r
 import org.eclipse.jface.dialogs.ErrorDialog;\r
 import org.eclipse.swt.widgets.Shell;\r
 \r
-import org.argeo.slc.ui.launch.DefaultSlcRuntime;\r
-import org.argeo.slc.ui.launch.SlcRuntime;\r
-import org.argeo.slc.ui.launch.SlcUiLaunchPlugin;\r
-import org.argeo.slc.ui.launch.preferences.SlcPreferencePage;\r
-\r
 public class SlcScriptLaunchDelegate extends\r
                AbstractJavaLaunchConfigurationDelegate {\r
        public static final String ID = "org.argeo.slc.launch.slcScriptLaunchType";\r
@@ -46,54 +47,43 @@ public class SlcScriptLaunchDelegate extends
                System.out.println("Launched " + file.getLocation().toFile());\r
 \r
                // Retrieve SLC Runtime\r
-               String slcRuntimePath = SlcUiLaunchPlugin.getDefault()\r
-                               .getPreferenceStore().getString(\r
-                                               SlcPreferencePage.PREF_SLC_RUNTIME_LOCATION);\r
-               if (slcRuntimePath == null || slcRuntimePath.equals("")) {\r
-                       showError("SLC Runtime path is not set. Set it in Windows > Preferences > SLC");\r
-                       return;\r
-               }\r
-               SlcRuntime deployedSlc = new DefaultSlcRuntime(slcRuntimePath);\r
+               SlcRuntime deployedSlc = null;\r
 \r
                IProject project = file.getProject();\r
-\r
-               IVMInstall vmInstall = null;\r
-               String[] classPath = null;\r
-\r
-               if (project instanceof IJavaProject) {\r
-                       JavaRuntime.getVMInstall((IJavaProject) project);\r
-                       classPath = JavaRuntime\r
-                                       .computeDefaultRuntimeClassPath((IJavaProject) project);\r
+               if (project.getNature("org.eclipse.jdt.core.javanature") != null) {\r
+                       IJavaProject javaProject = JavaCore.create(project);\r
+                       if (checkProjectForEmbedded(javaProject)) {\r
+                               deployedSlc = new EmbeddedSlcRuntime(javaProject);\r
+                       }\r
                }\r
 \r
-               if (vmInstall == null)\r
-                       vmInstall = JavaRuntime.getDefaultVMInstall();\r
-               if (vmInstall != null) {\r
-                       IVMRunner vmRunner = vmInstall.getVMRunner(mode);\r
-                       if (vmRunner != null) {\r
-                               if (classPath == null) {\r
-                                       classPath = deployedSlc.getClasspath();\r
-                               }\r
-\r
-                               if (classPath != null) {\r
-                                       VMRunnerConfiguration vmConfig = new VMRunnerConfiguration(\r
-                                                       ANT_MAIN, classPath);\r
-                                       vmConfig.setVMArguments(getVmArguments(deployedSlc));\r
-                                       vmConfig.setWorkingDirectory(file.getLocation().toFile()\r
-                                                       .getParent());\r
-                                       vmConfig.setProgramArguments(getProgramArguments(\r
-                                                       deployedSlc, file, mode));\r
-                                       vmRunner.run(vmConfig, launch, null);\r
-                               }\r
+               if (deployedSlc == null) {\r
+                       String slcRuntimePath = SlcUiLaunchPlugin.getDefault()\r
+                                       .getPreferenceStore().getString(\r
+                                                       SlcPreferencePage.PREF_SLC_RUNTIME_LOCATION);\r
+                       if (slcRuntimePath == null || slcRuntimePath.equals("")) {\r
+                               showError("SLC Runtime path is not set. Set it in Windows > Preferences > SLC");\r
+                               return;\r
                        }\r
+\r
+                       deployedSlc = new DeployedSlcRuntime(slcRuntimePath);\r
                }\r
 \r
+               IVMRunner vmRunner = deployedSlc.getVmInstall().getVMRunner(mode);\r
+               VMRunnerConfiguration vmConfig = new VMRunnerConfiguration(ANT_MAIN,\r
+                               deployedSlc.getClasspath());\r
+               vmConfig.setVMArguments(getVmArguments(deployedSlc));\r
+               vmConfig.setWorkingDirectory(file.getLocation().toFile().getParent());\r
+               vmConfig.setProgramArguments(getProgramArguments(deployedSlc, file,\r
+                               mode));\r
+               vmRunner.run(vmConfig, launch, null);\r
        }\r
 \r
        private String[] getVmArguments(SlcRuntime deployedSlc) {\r
                List<String> list = new Vector<String>();\r
-               list.add("-Dant.home=" + deployedSlc.getAntHome());\r
-               list.add("-Djava.library.path=" + deployedSlc.getJavaLibraryPath());\r
+               // list.add("-Dant.home=" + deployedSlc.getAntHome());\r
+               if (deployedSlc.getJavaLibraryPath() != null)\r
+                       list.add("-Djava.library.path=" + deployedSlc.getJavaLibraryPath());\r
                return list.toArray(new String[list.size()]);\r
        }\r
 \r
@@ -117,4 +107,17 @@ public class SlcScriptLaunchDelegate extends
                ErrorDialog.openError(shell, "Error", "Cannot launch SLC script",\r
                                status);\r
        }\r
+\r
+       protected boolean checkProjectForEmbedded(IJavaProject project) {\r
+               try {\r
+                       IType antmainType = project.findType(ANT_MAIN);\r
+                       if (antmainType == null)\r
+                               return false;\r
+                       else\r
+                               return true;\r
+               } catch (JavaModelException e) {\r
+                       e.printStackTrace();\r
+                       return false;\r
+               }\r
+       }\r
 }\r