]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - eclipse/plugins/org.argeo.slc.ui.launch/src/main/java/org/argeo/slc/ui/launch/script/SlcScriptLaunchDelegate.java
Improve logging
[gpl/argeo-slc.git] / eclipse / plugins / org.argeo.slc.ui.launch / src / main / java / org / argeo / slc / ui / launch / script / SlcScriptLaunchDelegate.java
index be9fdb43712484c0610de024facf206f934467a5..44c7d7d41f269972dc58de9d4ddf74928ccfd180 100644 (file)
@@ -3,7 +3,6 @@ package org.argeo.slc.ui.launch.script;
 import java.io.IOException;\r
 import java.io.StringReader;\r
 import java.util.List;\r
-import java.util.Map;\r
 import java.util.Properties;\r
 import java.util.Vector;\r
 \r
@@ -14,11 +13,16 @@ import org.argeo.slc.ui.launch.SlcUiLaunchPlugin;
 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
+import org.eclipse.core.resources.ResourcesPlugin;\r
 import org.eclipse.core.runtime.CoreException;\r
+import org.eclipse.core.runtime.IPath;\r
 import org.eclipse.core.runtime.IProgressMonitor;\r
 import org.eclipse.core.runtime.IStatus;\r
+import org.eclipse.core.runtime.Path;\r
 import org.eclipse.core.runtime.Status;\r
+import org.eclipse.core.variables.IStringVariableManager;\r
+import org.eclipse.core.variables.VariablesPlugin;\r
+import org.eclipse.debug.core.DebugPlugin;\r
 import org.eclipse.debug.core.ILaunch;\r
 import org.eclipse.debug.core.ILaunchConfiguration;\r
 import org.eclipse.debug.core.ILaunchManager;\r
@@ -31,38 +35,43 @@ import org.eclipse.jdt.launching.IVMRunner;
 import org.eclipse.jdt.launching.VMRunnerConfiguration;\r
 import org.eclipse.jface.dialogs.ErrorDialog;\r
 import org.eclipse.swt.widgets.Shell;\r
-import org.omg.CORBA.VM_CUSTOM;\r
 \r
 public class SlcScriptLaunchDelegate extends\r
                AbstractJavaLaunchConfigurationDelegate {\r
        public static final String ID = "org.argeo.slc.launch.slcScriptLaunchType";\r
 \r
-       public final static String ATTR_SCRIPT = "script";\r
-       public final static String ATTR_PROPERTIES = "properties";\r
-       public final static String ATTR_RUNTIME = "runtime";\r
-       public final static String ATTR_TARGETS = "targets";\r
-       public final static String ATTR_PRE093 = "pre093";\r
-\r
-       private final static String ANT_MAIN = "org.apache.tools.ant.Main";\r
-       private final static String SLC_MAIN = "org.argeo.slc.cli.SlcMain";\r
+       public final static String ANT_MAIN = "org.apache.tools.ant.Main";\r
+       public final static String SLC_MAIN = "org.argeo.slc.cli.SlcMain";\r
 \r
        public void launch(ILaunchConfiguration configuration, String mode,\r
                        ILaunch launch, IProgressMonitor monitor) throws CoreException {\r
-               IResource[] resources = configuration.getMappedResources();\r
+               if (!saveBeforeLaunch(configuration, mode, monitor))\r
+                       return;\r
 \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
+               String scriptLocation = configuration.getAttribute(\r
+                               SlcScriptUtils.ATTR_SCRIPT, "");\r
+               if (scriptLocation.equals(""))\r
+                       abort("Script has to be provided", null, 1);\r
+\r
+               IStringVariableManager manager = VariablesPlugin.getDefault()\r
+                               .getStringVariableManager();\r
+               scriptLocation = manager.performStringSubstitution(scriptLocation);\r
+               IPath path = new Path(scriptLocation);\r
+               IFile[] files = ResourcesPlugin.getWorkspace().getRoot()\r
+                               .findFilesForLocation(path);\r
 \r
-               boolean pre093 = configuration.getAttribute(ATTR_PRE093, false);\r
+               if (files.length == 0)\r
+                       abort("Coulkd not find related file", null, 1);\r
+\r
+               IFile file = (IFile) files[0];\r
+               DebugPlugin\r
+                               .logMessage("Launching " + file.getLocation().toFile(), null);\r
+\r
+               boolean pre093 = configuration.getAttribute(SlcScriptUtils.ATTR_PRE093,\r
+                               false);\r
 \r
                // Retrieve SLC Runtime\r
-               SlcSystem slcSystem = findSlcSystem(file);\r
+               SlcSystem slcSystem = findSlcSystem(file, pre093);\r
                if (slcSystem == null)\r
                        return;\r
 \r
@@ -73,16 +82,17 @@ public class SlcScriptLaunchDelegate extends
                } else {\r
                        vmConfig = createConfig(slcSystem, file, mode, configuration);\r
                }\r
-               vmRunner.run(vmConfig, launch, null);\r
+               vmRunner.run(vmConfig, launch, monitor);\r
        }\r
 \r
-       protected SlcSystem findSlcSystem(IFile file) throws CoreException {\r
+       protected SlcSystem findSlcSystem(IFile file, boolean pre093)\r
+                       throws CoreException {\r
                SlcSystem slcSystem = null;\r
 \r
                IProject project = file.getProject();\r
                if (project.getNature("org.eclipse.jdt.core.javanature") != null) {\r
                        IJavaProject javaProject = JavaCore.create(project);\r
-                       if (checkProjectForEmbedded(javaProject)) {\r
+                       if (checkProjectForEmbedded(javaProject, pre093)) {\r
                                slcSystem = new EmbeddedSlcSystem(javaProject);\r
                        }\r
                }\r
@@ -102,10 +112,16 @@ public class SlcScriptLaunchDelegate extends
                return slcSystem;\r
        }\r
 \r
-       protected boolean checkProjectForEmbedded(IJavaProject project) {\r
+       protected boolean checkProjectForEmbedded(IJavaProject project,\r
+                       boolean pre093) {\r
                try {\r
-                       IType antmainType = project.findType(ANT_MAIN);\r
-                       if (antmainType == null)\r
+                       IType mainType = null;\r
+                       if (pre093)\r
+                               mainType = project.findType(ANT_MAIN);\r
+                       else\r
+                               mainType = project.findType(SLC_MAIN);\r
+\r
+                       if (mainType == null)\r
                                return false;\r
                        else\r
                                return true;\r
@@ -148,14 +164,16 @@ public class SlcScriptLaunchDelegate extends
                list.add(file.getLocation().toFile().getAbsolutePath());\r
 \r
                // Runtime\r
-               String runtime = configuration.getAttribute(ATTR_RUNTIME, "");\r
+               String runtime = configuration.getAttribute(\r
+                               SlcScriptUtils.ATTR_RUNTIME, "");\r
                if (!runtime.equals("")) {\r
                        list.add("--runtime");\r
                        list.add(runtime);\r
                }\r
 \r
                // Targets\r
-               String targets = configuration.getAttribute(ATTR_RUNTIME, "");\r
+               String targets = configuration.getAttribute(\r
+                               SlcScriptUtils.ATTR_TARGETS, "");\r
                if (!runtime.equals("")) {\r
                        list.add("--targets");\r
                        list.add(targets);\r
@@ -164,7 +182,7 @@ public class SlcScriptLaunchDelegate extends
                // Properties\r
                Properties properties = new Properties();\r
                StringReader reader = new StringReader(configuration.getAttribute(\r
-                               ATTR_PROPERTIES, ""));\r
+                               SlcScriptUtils.ATTR_PROPERTIES, ""));\r
                try {\r
                        properties.load(reader);\r
                } catch (IOException e) {\r
@@ -221,7 +239,7 @@ public class SlcScriptLaunchDelegate extends
        }\r
 \r
        // Utilities\r
-       private void showError(String message) {\r
+       private static void showError(String message) {\r
                Shell shell = SlcUiLaunchPlugin.getDefault().getWorkbench()\r
                                .getActiveWorkbenchWindow().getShell();\r
 \r