Add TaskChain to allow execution of a single (known) EASE script

Change-Id: I4690de1fa2d8e330f38b58497c42a2d573fafdad
diff --git a/org.eclipse.tea.ease/META-INF/MANIFEST.MF b/org.eclipse.tea.ease/META-INF/MANIFEST.MF
index ff59f16..c5aaa84 100644
--- a/org.eclipse.tea.ease/META-INF/MANIFEST.MF
+++ b/org.eclipse.tea.ease/META-INF/MANIFEST.MF
@@ -19,5 +19,7 @@
  com.google.guava
 Bundle-ActivationPolicy: lazy
 Service-Component: OSGI-INF/org.eclipse.tea.ease.internal.ListEaseScripts.xml,
- OSGI-INF/org.eclipse.tea.ease.internal.menu.EaseScriptProvider.xml
+ OSGI-INF/org.eclipse.tea.ease.internal.menu.EaseScriptProvider.xml,
+ OSGI-INF/org.eclipse.tea.ease.chains.TaskChainRunEaseScript.xml,
+ OSGI-INF/org.eclipse.tea.ease.config.EaseScriptConfig.xml
 Export-Package: org.eclipse.tea.ease
diff --git a/org.eclipse.tea.ease/OSGI-INF/org.eclipse.tea.ease.chains.TaskChainRunEaseScript.xml b/org.eclipse.tea.ease/OSGI-INF/org.eclipse.tea.ease.chains.TaskChainRunEaseScript.xml
new file mode 100644
index 0000000..7940219
--- /dev/null
+++ b/org.eclipse.tea.ease/OSGI-INF/org.eclipse.tea.ease.chains.TaskChainRunEaseScript.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="org.eclipse.tea.ease.chains.TaskChainRunEaseScript">
+   <service>
+      <provide interface="org.eclipse.tea.core.services.TaskChain"/>
+   </service>
+   <implementation class="org.eclipse.tea.ease.chains.TaskChainRunEaseScript"/>
+</scr:component>
\ No newline at end of file
diff --git a/org.eclipse.tea.ease/OSGI-INF/org.eclipse.tea.ease.config.EaseScriptConfig.xml b/org.eclipse.tea.ease/OSGI-INF/org.eclipse.tea.ease.config.EaseScriptConfig.xml
new file mode 100644
index 0000000..916af03
--- /dev/null
+++ b/org.eclipse.tea.ease/OSGI-INF/org.eclipse.tea.ease.config.EaseScriptConfig.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="org.eclipse.tea.ease.config.EaseScriptConfig">
+   <service>
+      <provide interface="org.eclipse.tea.core.services.TaskingConfigurationExtension"/>
+   </service>
+   <implementation class="org.eclipse.tea.ease.config.EaseScriptConfig"/>
+</scr:component>
\ No newline at end of file
diff --git a/org.eclipse.tea.ease/src/org/eclipse/tea/ease/EaseScriptTask.java b/org.eclipse.tea.ease/src/org/eclipse/tea/ease/EaseScriptTask.java
index 0a75065..f080321 100644
--- a/org.eclipse.tea.ease/src/org/eclipse/tea/ease/EaseScriptTask.java
+++ b/org.eclipse.tea.ease/src/org/eclipse/tea/ease/EaseScriptTask.java
@@ -39,6 +39,15 @@
 		final IScriptService scriptService = PlatformUI.getWorkbench().getService(IScriptService.class);
 		final IRepositoryService repoService = PlatformUI.getWorkbench().getService(IRepositoryService.class);
 
+		log.info("Waiting for script locations to load");
+		repoService.update(true);
+		while (repoService.getScripts().isEmpty()) {
+			Thread.sleep(100);
+		}
+		// we have NO way of knowing whether things are fully loaded... :|
+		Thread.sleep(500);
+		log.info("...loaded");
+
 		IScript s = repoService.getScript(script);
 		if (s == null) {
 			throw new RuntimeException("no script named " + script);
diff --git a/org.eclipse.tea.ease/src/org/eclipse/tea/ease/chains/TaskChainRunEaseScript.java b/org.eclipse.tea.ease/src/org/eclipse/tea/ease/chains/TaskChainRunEaseScript.java
new file mode 100644
index 0000000..ee8143d
--- /dev/null
+++ b/org.eclipse.tea.ease/src/org/eclipse/tea/ease/chains/TaskChainRunEaseScript.java
@@ -0,0 +1,23 @@
+/*
+ * Copyright (c) SSI Schaefer IT Solutions
+ */
+package org.eclipse.tea.ease.chains;
+
+import org.eclipse.tea.core.TaskExecutionContext;
+import org.eclipse.tea.core.annotations.TaskChainContextInit;
+import org.eclipse.tea.core.services.TaskChain;
+import org.eclipse.tea.core.services.TaskChain.TaskChainId;
+import org.eclipse.tea.ease.EaseScriptTask;
+import org.eclipse.tea.ease.config.EaseScriptConfig;
+import org.osgi.service.component.annotations.Component;
+
+@TaskChainId(description = "Run the named EASE script", alias = "TaskChainRunEaseScript")
+@Component
+public class TaskChainRunEaseScript implements TaskChain {
+
+	@TaskChainContextInit
+	public void init(TaskExecutionContext c, EaseScriptConfig cfg) {
+		c.addTask(new EaseScriptTask(cfg.easeScript));
+	}
+
+}
diff --git a/org.eclipse.tea.ease/src/org/eclipse/tea/ease/config/EaseScriptConfig.java b/org.eclipse.tea.ease/src/org/eclipse/tea/ease/config/EaseScriptConfig.java
new file mode 100644
index 0000000..f77f0b2
--- /dev/null
+++ b/org.eclipse.tea.ease/src/org/eclipse/tea/ease/config/EaseScriptConfig.java
@@ -0,0 +1,17 @@
+/*
+ * Copyright (c) SSI Schaefer IT Solutions
+ */
+package org.eclipse.tea.ease.config;
+
+import org.eclipse.tea.core.services.TaskingConfigurationExtension;
+import org.eclipse.tea.core.services.TaskingConfigurationExtension.TaskingConfig;
+import org.osgi.service.component.annotations.Component;
+
+@TaskingConfig(description = "EASE Script Configuration")
+@Component
+public class EaseScriptConfig implements TaskingConfigurationExtension {
+
+	@TaskingConfigProperty(description = "Name of the EASE script to start", headlessOnly = true)
+	public String easeScript;
+
+}
diff --git a/org.eclipse.tea.ease/src/org/eclipse/tea/ease/internal/ListEaseScripts.java b/org.eclipse.tea.ease/src/org/eclipse/tea/ease/internal/ListEaseScripts.java
index a689fdf..522be20 100644
--- a/org.eclipse.tea.ease/src/org/eclipse/tea/ease/internal/ListEaseScripts.java
+++ b/org.eclipse.tea.ease/src/org/eclipse/tea/ease/internal/ListEaseScripts.java
@@ -38,9 +38,18 @@
 
 	public static final class ListScripts {
 		@Execute
-		public void list(TaskingLog log) {
+		public void list(TaskingLog log) throws Exception {
 			final IRepositoryService repo = PlatformUI.getWorkbench().getService(IRepositoryService.class);
 
+			log.info("Waiting for script locations to load");
+			repo.update(true);
+			while (repo.getScripts().isEmpty()) {
+				Thread.sleep(100);
+			}
+			// we have NO way of knowing whether things are fully loaded... :|
+			Thread.sleep(500);
+			log.info("...loaded");
+
 			for (IScript script : repo.getScripts()) {
 				log.info(script.getPath().toString());
 			}
diff --git a/org.eclipse.tea.library.build.lcdsl/src/org/eclipse/tea/library/build/lcdsl/tasks/chains/TaskChainLcDslLaunch.java b/org.eclipse.tea.library.build.lcdsl/src/org/eclipse/tea/library/build/lcdsl/tasks/chains/TaskChainLcDslLaunch.java
index b88d530..0786a54 100644
--- a/org.eclipse.tea.library.build.lcdsl/src/org/eclipse/tea/library/build/lcdsl/tasks/chains/TaskChainLcDslLaunch.java
+++ b/org.eclipse.tea.library.build.lcdsl/src/org/eclipse/tea/library/build/lcdsl/tasks/chains/TaskChainLcDslLaunch.java
@@ -14,7 +14,6 @@
 import org.eclipse.tea.core.annotations.TaskChainContextInit;
 import org.eclipse.tea.core.services.TaskChain;
 import org.eclipse.tea.core.services.TaskChain.TaskChainId;
-import org.eclipse.tea.core.services.TaskingLog;
 import org.eclipse.tea.library.build.lcdsl.tasks.TaskLcDslLaunch;
 import org.eclipse.tea.library.build.lcdsl.tasks.config.LcDslLaunchConfig;
 import org.osgi.service.component.annotations.Component;
@@ -24,7 +23,7 @@
 public class TaskChainLcDslLaunch implements TaskChain {
 
 	@TaskChainContextInit
-	public void init(TaskExecutionContext c, LcDslLaunchConfig cfg, TaskingLog log) {
+	public void init(TaskExecutionContext c, LcDslLaunchConfig cfg) {
 		c.addTask(new TaskLcDslLaunch(cfg.launchConfig, true));
 	}
 
diff --git a/org.eclipse.tea.library.build.lcdsl/src/org/eclipse/tea/library/build/lcdsl/tasks/config/LcDslLaunchConfig.java b/org.eclipse.tea.library.build.lcdsl/src/org/eclipse/tea/library/build/lcdsl/tasks/config/LcDslLaunchConfig.java
index 4081f7d..ccbd5f2 100644
--- a/org.eclipse.tea.library.build.lcdsl/src/org/eclipse/tea/library/build/lcdsl/tasks/config/LcDslLaunchConfig.java
+++ b/org.eclipse.tea.library.build.lcdsl/src/org/eclipse/tea/library/build/lcdsl/tasks/config/LcDslLaunchConfig.java
@@ -14,7 +14,7 @@
 import org.eclipse.tea.core.services.TaskingConfigurationExtension.TaskingConfig;
 import org.osgi.service.component.annotations.Component;
 
-@TaskingConfig(description = "TEA Core Configuration")
+@TaskingConfig(description = "LcDSL Launch Configuration")
 @Component
 public class LcDslLaunchConfig implements TaskingConfigurationExtension {