--- /dev/null
+<?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
--- /dev/null
+<?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
--- /dev/null
+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
--- /dev/null
+source.. = src/main/java/\r
+output.. = target/classes/\r
+bin.includes = META-INF/,\\r
+ .,\\r
+ plugin.xml,\\r
+ icons/\r
--- /dev/null
+<?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
--- /dev/null
+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
--- /dev/null
+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
--- /dev/null
+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
--- /dev/null
+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
--- /dev/null
+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
--- /dev/null
+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
--- /dev/null
+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
--- /dev/null
+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
--- /dev/null
+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