Import launch plugin
authorMathieu Baudier <mbaudier@argeo.org>
Thu, 29 Nov 2007 22:10:58 +0000 (22:10 +0000)
committerMathieu Baudier <mbaudier@argeo.org>
Thu, 29 Nov 2007 22:10:58 +0000 (22:10 +0000)
git-svn-id: https://svn.argeo.org/slc/trunk@797 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

15 files changed:
eclipse/plugins/org.argeo.slc.ui.launch/.classpath [new file with mode: 0644]
eclipse/plugins/org.argeo.slc.ui.launch/.project [new file with mode: 0644]
eclipse/plugins/org.argeo.slc.ui.launch/META-INF/MANIFEST.MF [new file with mode: 0644]
eclipse/plugins/org.argeo.slc.ui.launch/build.properties [new file with mode: 0644]
eclipse/plugins/org.argeo.slc.ui.launch/icons/slcScriptLaunch.gif [new file with mode: 0644]
eclipse/plugins/org.argeo.slc.ui.launch/plugin.xml [new file with mode: 0644]
eclipse/plugins/org.argeo.slc.ui.launch/src/main/java/org/argeo/slc/ui/launch/DefaultSlcRuntime.java [new file with mode: 0644]
eclipse/plugins/org.argeo.slc.ui.launch/src/main/java/org/argeo/slc/ui/launch/SlcPerspectiveFactory.java [new file with mode: 0644]
eclipse/plugins/org.argeo.slc.ui.launch/src/main/java/org/argeo/slc/ui/launch/SlcRuntime.java [new file with mode: 0644]
eclipse/plugins/org.argeo.slc.ui.launch/src/main/java/org/argeo/slc/ui/launch/SlcUiLaunchPlugin.java [new file with mode: 0644]
eclipse/plugins/org.argeo.slc.ui.launch/src/main/java/org/argeo/slc/ui/launch/preferences/SlcPreferencePage.java [new file with mode: 0644]
eclipse/plugins/org.argeo.slc.ui.launch/src/main/java/org/argeo/slc/ui/launch/script/SlcScriptLaunchConfigurationTab.java [new file with mode: 0644]
eclipse/plugins/org.argeo.slc.ui.launch/src/main/java/org/argeo/slc/ui/launch/script/SlcScriptLaunchConfigurationTabGroup.java [new file with mode: 0644]
eclipse/plugins/org.argeo.slc.ui.launch/src/main/java/org/argeo/slc/ui/launch/script/SlcScriptLaunchDelegate.java [new file with mode: 0644]
eclipse/plugins/org.argeo.slc.ui.launch/src/main/java/org/argeo/slc/ui/launch/script/SlcScriptLaunchShortcut.java [new file with mode: 0644]

diff --git a/eclipse/plugins/org.argeo.slc.ui.launch/.classpath b/eclipse/plugins/org.argeo.slc.ui.launch/.classpath
new file mode 100644 (file)
index 0000000..9aad730
--- /dev/null
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<classpath>\r
+       <classpathentry kind="src" path="src/main/java"/>\r
+       <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>\r
+       <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>\r
+       <classpathentry kind="output" path="target/classes"/>\r
+</classpath>\r
diff --git a/eclipse/plugins/org.argeo.slc.ui.launch/.project b/eclipse/plugins/org.argeo.slc.ui.launch/.project
new file mode 100644 (file)
index 0000000..e42a77a
--- /dev/null
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<projectDescription>\r
+       <name>org.argeo.slc.ui.launch</name>\r
+       <comment></comment>\r
+       <projects>\r
+       </projects>\r
+       <buildSpec>\r
+               <buildCommand>\r
+                       <name>org.eclipse.jdt.core.javabuilder</name>\r
+                       <arguments>\r
+                       </arguments>\r
+               </buildCommand>\r
+               <buildCommand>\r
+                       <name>org.eclipse.pde.ManifestBuilder</name>\r
+                       <arguments>\r
+                       </arguments>\r
+               </buildCommand>\r
+               <buildCommand>\r
+                       <name>org.eclipse.pde.SchemaBuilder</name>\r
+                       <arguments>\r
+                       </arguments>\r
+               </buildCommand>\r
+       </buildSpec>\r
+       <natures>\r
+               <nature>org.eclipse.pde.PluginNature</nature>\r
+               <nature>org.eclipse.jdt.core.javanature</nature>\r
+       </natures>\r
+</projectDescription>\r
diff --git a/eclipse/plugins/org.argeo.slc.ui.launch/META-INF/MANIFEST.MF b/eclipse/plugins/org.argeo.slc.ui.launch/META-INF/MANIFEST.MF
new file mode 100644 (file)
index 0000000..c7f6413
--- /dev/null
@@ -0,0 +1,14 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: SLC UI Launch
+Bundle-SymbolicName: org.argeo.slc.ui.launch;singleton:=true
+Bundle-Version: 0.5.0
+Bundle-Activator: org.argeo.slc.ui.launch.SlcUiLaunchPlugin
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.core.runtime,
+ org.eclipse.debug.core,
+ org.eclipse.jdt.launching,
+ org.eclipse.debug.ui,
+ org.eclipse.jdt.core,
+ org.eclipse.ui.console
+Eclipse-LazyStart: true
diff --git a/eclipse/plugins/org.argeo.slc.ui.launch/build.properties b/eclipse/plugins/org.argeo.slc.ui.launch/build.properties
new file mode 100644 (file)
index 0000000..a992b52
--- /dev/null
@@ -0,0 +1,6 @@
+source.. = src/main/java/\r
+output.. = target/classes/\r
+bin.includes = META-INF/,\\r
+               .,\\r
+               plugin.xml,\\r
+               icons/\r
diff --git a/eclipse/plugins/org.argeo.slc.ui.launch/icons/slcScriptLaunch.gif b/eclipse/plugins/org.argeo.slc.ui.launch/icons/slcScriptLaunch.gif
new file mode 100644 (file)
index 0000000..b8ca14a
Binary files /dev/null and b/eclipse/plugins/org.argeo.slc.ui.launch/icons/slcScriptLaunch.gif differ
diff --git a/eclipse/plugins/org.argeo.slc.ui.launch/plugin.xml b/eclipse/plugins/org.argeo.slc.ui.launch/plugin.xml
new file mode 100644 (file)
index 0000000..6dc3226
--- /dev/null
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<?eclipse version="3.2"?>\r
+<plugin>\r
+<extension point = "org.eclipse.debug.core.launchConfigurationTypes">\r
+   <launchConfigurationType\r
+          id="org.argeo.slc.launch.slcScriptLaunchType"\r
+          name="SLC Script"\r
+          delegate="org.argeo.slc.ui.launch.script.SlcScriptLaunchDelegate"\r
+          modes= "run, debug">\r
+   </launchConfigurationType>\r
+</extension>\r
+<extension\r
+      point="org.eclipse.debug.ui.launchShortcuts">\r
+   <shortcut\r
+         class="org.argeo.slc.ui.launch.script.SlcScriptLaunchShortcut"\r
+         icon="icons/slcScriptLaunch.gif"\r
+         id="org.argeo.slc.ui.launch.slcScriptLaunchShortcut"\r
+         label="SLC script"\r
+         modes="run,debug">\r
+    \r
+        <contextualLaunch>\r
+           <enablement>\r
+             <with variable="selection">\r
+                <count value="1"/>\r
+               <iterate>\r
+               <or>\r
+                   <test property="org.eclipse.debug.ui.matchesPattern" value="*.xml"/>\r
+                   </or>\r
+                </iterate>\r
+             </with>\r
+           </enablement>\r
+                </contextualLaunch>\r
+       \r
+   </shortcut>\r
+</extension>\r
+<extension\r
+      point="org.eclipse.debug.ui.launchConfigurationTabGroups">\r
+   <launchConfigurationTabGroup\r
+         class="org.argeo.slc.ui.launch.script.SlcScriptLaunchConfigurationTabGroup"\r
+         id="org.argeo.slc.ui.launch.slcScriptLaunchConfigurationTabGroup1"\r
+         type="org.argeo.slc.launch.slcScriptLaunchType">\r
+   </launchConfigurationTabGroup>\r
+</extension>\r
+\r
+<!-- See http://www.eclipseplugincentral.com/PNphpBB2-printview-t-4335-start-0.html -->\r
+<extension point="org.eclipse.core.runtime.adapters">\r
+<factory adaptableType="org.eclipse.core.resources.IResource" class="">\r
+<adapter type="org.eclipse.debug.ui.actions.ILaunchable "/>\r
+</factory>\r
+</extension>\r
+<extension\r
+      point="org.eclipse.ui.preferencePages">\r
+   <page\r
+         class="org.argeo.slc.ui.launch.preferences.SlcPreferencePage"\r
+         id="org.argeo.slc.ui.slcPreferencePage"\r
+         name="SLC">\r
+   </page>\r
+</extension>\r
+<extension\r
+      point="org.eclipse.debug.ui.launchConfigurationTypeImages">\r
+   <launchConfigurationTypeImage\r
+         configTypeID="org.argeo.slc.launch.slcScriptLaunchType"\r
+         icon="icons/slcScriptLaunch.gif"\r
+         id="org.argeo.slc.launch.slcScriptLaunchTypeImage">\r
+   </launchConfigurationTypeImage>\r
+</extension>\r
+<extension\r
+      point="org.eclipse.ui.perspectives">\r
+   <perspective\r
+         class="org.argeo.slc.ui.launch.SlcPerspectiveFactory"\r
+         icon="icons/slcScriptLaunch.gif"\r
+         id="org.argeo.slc.ui.slcPerspective"\r
+         name="SLC">\r
+   </perspective>\r
+</extension> \r
+</plugin>\r
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
new file mode 100644 (file)
index 0000000..42e62e8
--- /dev/null
@@ -0,0 +1,43 @@
+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/SlcPerspectiveFactory.java b/eclipse/plugins/org.argeo.slc.ui.launch/src/main/java/org/argeo/slc/ui/launch/SlcPerspectiveFactory.java
new file mode 100644 (file)
index 0000000..483d1eb
--- /dev/null
@@ -0,0 +1,26 @@
+package org.argeo.slc.ui.launch;\r
+\r
+import org.eclipse.ui.IFolderLayout;\r
+import org.eclipse.ui.IPageLayout;\r
+import org.eclipse.ui.IPerspectiveFactory;\r
+import org.eclipse.ui.console.IConsoleConstants;\r
+\r
+public class SlcPerspectiveFactory implements IPerspectiveFactory {\r
+\r
+       public void createInitialLayout(IPageLayout layout) {\r
+               // Get the editor area.\r
+               String editorArea = layout.getEditorArea();\r
+\r
+               IFolderLayout topLeft = layout.createFolder("topLeft", IPageLayout.LEFT, 0.25f,\r
+                       editorArea);\r
+               topLeft.addView(IPageLayout.ID_RES_NAV);\r
+\r
+               IFolderLayout bottom = layout.createFolder("bottom", IPageLayout.BOTTOM, 0.66f,\r
+                               editorArea);\r
+               bottom.addView(IConsoleConstants.ID_CONSOLE_VIEW);\r
+               bottom.addView(IPageLayout.ID_TASK_LIST);\r
+               \r
+               layout.addActionSet("org.eclipse.debug.ui.launchActionSet");\r
+       }\r
+\r
+}\r
diff --git a/eclipse/plugins/org.argeo.slc.ui.launch/src/main/java/org/argeo/slc/ui/launch/SlcRuntime.java b/eclipse/plugins/org.argeo.slc.ui.launch/src/main/java/org/argeo/slc/ui/launch/SlcRuntime.java
new file mode 100644 (file)
index 0000000..92e846b
--- /dev/null
@@ -0,0 +1,7 @@
+package org.argeo.slc.ui.launch;\r
+\r
+public interface SlcRuntime {\r
+       public String[] getClasspath();\r
+       public String getAntHome();\r
+       public String getJavaLibraryPath();\r
+}\r
diff --git a/eclipse/plugins/org.argeo.slc.ui.launch/src/main/java/org/argeo/slc/ui/launch/SlcUiLaunchPlugin.java b/eclipse/plugins/org.argeo.slc.ui.launch/src/main/java/org/argeo/slc/ui/launch/SlcUiLaunchPlugin.java
new file mode 100644 (file)
index 0000000..1e1706c
--- /dev/null
@@ -0,0 +1,44 @@
+package org.argeo.slc.ui.launch;\r
+\r
+import org.eclipse.ui.plugin.AbstractUIPlugin;\r
+import org.osgi.framework.BundleContext;\r
+\r
+/**\r
+ * The activator class controls the plug-in life cycle\r
+ */\r
+public class SlcUiLaunchPlugin extends AbstractUIPlugin {\r
+\r
+       // The plug-in ID\r
+       public static final String ID = "org.argeo.slc.ui.launch";\r
+\r
+       // The shared instance\r
+       private static SlcUiLaunchPlugin plugin;\r
+\r
+       /**\r
+        * The constructor\r
+        */\r
+       public SlcUiLaunchPlugin() {\r
+       }\r
+\r
+       @Override\r
+       public void start(BundleContext context) throws Exception {\r
+               super.start(context);\r
+               plugin = this;\r
+       }\r
+\r
+       @Override\r
+       public void stop(BundleContext context) throws Exception {\r
+               plugin = null;\r
+               super.stop(context);\r
+       }\r
+\r
+       /**\r
+        * Returns the shared instance\r
+        * \r
+        * @return the shared instance\r
+        */\r
+       public static SlcUiLaunchPlugin getDefault() {\r
+               return plugin;\r
+       }\r
+\r
+}\r
diff --git a/eclipse/plugins/org.argeo.slc.ui.launch/src/main/java/org/argeo/slc/ui/launch/preferences/SlcPreferencePage.java b/eclipse/plugins/org.argeo.slc.ui.launch/src/main/java/org/argeo/slc/ui/launch/preferences/SlcPreferencePage.java
new file mode 100644 (file)
index 0000000..d2fd3e7
--- /dev/null
@@ -0,0 +1,32 @@
+package org.argeo.slc.ui.launch.preferences;\r
+\r
+import org.eclipse.jface.preference.DirectoryFieldEditor;\r
+import org.eclipse.jface.preference.FieldEditorPreferencePage;\r
+import org.eclipse.jface.preference.IPreferenceStore;\r
+import org.eclipse.ui.IWorkbench;\r
+import org.eclipse.ui.IWorkbenchPreferencePage;\r
+\r
+import org.argeo.slc.ui.launch.SlcUiLaunchPlugin;\r
+\r
+public class SlcPreferencePage extends FieldEditorPreferencePage implements\r
+               IWorkbenchPreferencePage {\r
+       public final static String PREF_SLC_RUNTIME_LOCATION = SlcUiLaunchPlugin.ID\r
+                       + ".slcRuntimeLocation";\r
+\r
+       public SlcPreferencePage() {\r
+               IPreferenceStore store = SlcUiLaunchPlugin.getDefault()\r
+                               .getPreferenceStore();\r
+               setPreferenceStore(store);\r
+               setDescription("Argeo SLC Preferences");\r
+       }\r
+\r
+       @Override\r
+       protected void createFieldEditors() {\r
+               addField(new DirectoryFieldEditor(PREF_SLC_RUNTIME_LOCATION,\r
+                               "SLC Runtime", getFieldEditorParent()));\r
+       }\r
+\r
+       public void init(IWorkbench workbench) {\r
+       }\r
+\r
+}\r
diff --git a/eclipse/plugins/org.argeo.slc.ui.launch/src/main/java/org/argeo/slc/ui/launch/script/SlcScriptLaunchConfigurationTab.java b/eclipse/plugins/org.argeo.slc.ui.launch/src/main/java/org/argeo/slc/ui/launch/script/SlcScriptLaunchConfigurationTab.java
new file mode 100644 (file)
index 0000000..ce1c2f1
--- /dev/null
@@ -0,0 +1,46 @@
+package org.argeo.slc.ui.launch.script;\r
+\r
+import org.eclipse.core.resources.IFile;\r
+import org.eclipse.core.runtime.CoreException;\r
+import org.eclipse.debug.core.ILaunchConfiguration;\r
+import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;\r
+import org.eclipse.debug.ui.AbstractLaunchConfigurationTab;\r
+import org.eclipse.swt.SWT;\r
+import org.eclipse.swt.widgets.Composite;\r
+import org.eclipse.swt.widgets.Label;\r
+\r
+public class SlcScriptLaunchConfigurationTab extends\r
+               AbstractLaunchConfigurationTab {\r
+\r
+       private IFile script;\r
+       \r
+       public void createControl(Composite parent) {\r
+               Composite body = new Composite(parent,SWT.NONE);\r
+               new Label(parent, SWT.LEAD).setText("Script location");\r
+               if (script != null) {\r
+                       new Label(parent, SWT.LEAD).setText(script.getLocation().toFile()\r
+                                       .getAbsolutePath());\r
+               }\r
+               setControl(body);\r
+       }\r
+\r
+       public String getName() {\r
+               return "SLC";\r
+       }\r
+\r
+       public void initializeFrom(ILaunchConfiguration configuration) {\r
+               try {\r
+                       script = (IFile) configuration.getMappedResources()[0];\r
+               } catch (CoreException e) {\r
+                       throw new RuntimeException("Cannot initialize tab", e);\r
+               }\r
+\r
+       }\r
+\r
+       public void performApply(ILaunchConfigurationWorkingCopy configuration) {\r
+       }\r
+\r
+       public void setDefaults(ILaunchConfigurationWorkingCopy configuration) {\r
+       }\r
+\r
+}\r
diff --git a/eclipse/plugins/org.argeo.slc.ui.launch/src/main/java/org/argeo/slc/ui/launch/script/SlcScriptLaunchConfigurationTabGroup.java b/eclipse/plugins/org.argeo.slc.ui.launch/src/main/java/org/argeo/slc/ui/launch/script/SlcScriptLaunchConfigurationTabGroup.java
new file mode 100644 (file)
index 0000000..c50c8c9
--- /dev/null
@@ -0,0 +1,16 @@
+package org.argeo.slc.ui.launch.script;\r
+\r
+import org.eclipse.debug.ui.AbstractLaunchConfigurationTabGroup;\r
+import org.eclipse.debug.ui.CommonTab;\r
+import org.eclipse.debug.ui.ILaunchConfigurationDialog;\r
+import org.eclipse.debug.ui.ILaunchConfigurationTab;\r
+\r
+public class SlcScriptLaunchConfigurationTabGroup extends\r
+               AbstractLaunchConfigurationTabGroup {\r
+\r
+       public void createTabs(ILaunchConfigurationDialog dialog, String mode) {\r
+               ILaunchConfigurationTab[] tabs = new ILaunchConfigurationTab[] {\r
+                               new SlcScriptLaunchConfigurationTab(), new CommonTab() };\r
+               setTabs(tabs);\r
+       }\r
+}\r
diff --git a/eclipse/plugins/org.argeo.slc.ui.launch/src/main/java/org/argeo/slc/ui/launch/script/SlcScriptLaunchDelegate.java b/eclipse/plugins/org.argeo.slc.ui.launch/src/main/java/org/argeo/slc/ui/launch/script/SlcScriptLaunchDelegate.java
new file mode 100644 (file)
index 0000000..02a00e0
--- /dev/null
@@ -0,0 +1,120 @@
+package org.argeo.slc.ui.launch.script;\r
+\r
+import java.util.List;\r
+import java.util.Vector;\r
+\r
+import org.eclipse.core.resources.IFile;\r
+import org.eclipse.core.resources.IProject;\r
+import org.eclipse.core.resources.IResource;\r
+import org.eclipse.core.runtime.CoreException;\r
+import org.eclipse.core.runtime.IProgressMonitor;\r
+import org.eclipse.core.runtime.IStatus;\r
+import org.eclipse.core.runtime.Status;\r
+import org.eclipse.debug.core.ILaunch;\r
+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.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
+\r
+       private final static String ANT_MAIN = "org.apache.tools.ant.Main";\r
+\r
+       public void launch(ILaunchConfiguration configuration, String mode,\r
+                       ILaunch launch, IProgressMonitor monitor) throws CoreException {\r
+               IResource[] resources = configuration.getMappedResources();\r
+               if (resources.length != 1) {\r
+                       throw new RuntimeException("Can only launch one script.");\r
+               }\r
+               if (!(resources[0] instanceof IFile)) {\r
+                       throw new RuntimeException("Can only launch file.");\r
+               }\r
+               IFile file = (IFile) resources[0];\r
+               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
+\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
+               }\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
+                       }\r
+               }\r
+\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
+               return list.toArray(new String[list.size()]);\r
+       }\r
+\r
+       private String[] getProgramArguments(SlcRuntime deployedSlc, IFile file,\r
+                       String mode) {\r
+               List<String> list = new Vector<String>();\r
+               list.add("-f");\r
+               list.add(file.getLocation().toFile().getAbsolutePath());\r
+               if (mode.equals(ILaunchManager.DEBUG_MODE)) {\r
+                       list.add("-d");\r
+               }\r
+               return list.toArray(new String[list.size()]);\r
+       }\r
+\r
+       private void showError(String message) {\r
+               Shell shell = SlcUiLaunchPlugin.getDefault().getWorkbench()\r
+                               .getActiveWorkbenchWindow().getShell();\r
+\r
+               IStatus status = new Status(IStatus.ERROR, SlcUiLaunchPlugin.ID,\r
+                               message);\r
+               ErrorDialog.openError(shell, "Error", "Cannot launch SLC script",\r
+                               status);\r
+       }\r
+}\r
diff --git a/eclipse/plugins/org.argeo.slc.ui.launch/src/main/java/org/argeo/slc/ui/launch/script/SlcScriptLaunchShortcut.java b/eclipse/plugins/org.argeo.slc.ui.launch/src/main/java/org/argeo/slc/ui/launch/script/SlcScriptLaunchShortcut.java
new file mode 100644 (file)
index 0000000..b25d303
--- /dev/null
@@ -0,0 +1,59 @@
+package org.argeo.slc.ui.launch.script;\r
+\r
+import org.eclipse.core.resources.IFile;\r
+import org.eclipse.core.resources.IProject;\r
+import org.eclipse.core.runtime.CoreException;\r
+import org.eclipse.core.runtime.IPath;\r
+import org.eclipse.debug.core.DebugPlugin;\r
+import org.eclipse.debug.core.ILaunchConfiguration;\r
+import org.eclipse.debug.core.ILaunchConfigurationType;\r
+import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;\r
+import org.eclipse.debug.core.ILaunchManager;\r
+import org.eclipse.debug.ui.ILaunchShortcut;\r
+import org.eclipse.jface.viewers.ISelection;\r
+import org.eclipse.jface.viewers.IStructuredSelection;\r
+import org.eclipse.ui.IEditorPart;\r
+\r
+public class SlcScriptLaunchShortcut implements ILaunchShortcut {\r
+\r
+       public void launch(ISelection selection, String mode) {\r
+               try {\r
+                       if (!(selection instanceof IStructuredSelection)) {\r
+                               throw new RuntimeException("Unknown selection "\r
+                                               + selection.getClass());\r
+                       }\r
+                       IStructuredSelection sSelection = (IStructuredSelection) selection;\r
+                       if (sSelection.size() != 1) {\r
+                               throw new RuntimeException("Can only launch one SLC script.");\r
+                       }\r
+                       Object obj = sSelection.iterator().next();\r
+                       if (!(obj instanceof IFile)) {\r
+                               throw new RuntimeException("Can only launch files.");\r
+                       }\r
+                       IFile file = ((IFile) obj);\r
+                       IProject project = file.getProject();\r
+                       IPath relativePath = file.getProjectRelativePath();\r
+                       String name = "["+project.getName() + "] - " + relativePath.toString();\r
+                       name = name.replace('/', '_');// otherwise not properly saved\r
+\r
+                       System.out.println(name);\r
+\r
+                       ILaunchManager manager = DebugPlugin.getDefault()\r
+                                       .getLaunchManager();\r
+                       ILaunchConfigurationType type = manager\r
+                                       .getLaunchConfigurationType(SlcScriptLaunchDelegate.ID);\r
+                       ILaunchConfigurationWorkingCopy wc = type.newInstance(null, name);\r
+                       wc.setMappedResources(new IFile[] { file });\r
+                       ILaunchConfiguration config = wc.doSave();\r
+                       config.launch(mode, null);\r
+               } catch (CoreException e) {\r
+                       e.printStackTrace();\r
+               }\r
+\r
+       }\r
+\r
+       public void launch(IEditorPart editor, String mode) {\r
+               // not (yet) implemented\r
+       }\r
+\r
+}\r