From 8db52c8525d104d8966db4e982609c02a552d15f Mon Sep 17 00:00:00 2001
From: Johannes Eder <eder@fortiss.org>
Date: Mon, 6 Mar 2017 08:37:53 +0000
Subject: [PATCH] Tutorial Mode auto start impl via thread refs 2869

---
 .../kernel/ui/internal/TutorialUIService.java | 51 ++++++++++++++++++-
 1 file changed, 50 insertions(+), 1 deletion(-)

diff --git a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/internal/TutorialUIService.java b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/internal/TutorialUIService.java
index a1a32ec3a..72c2387a4 100644
--- a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/internal/TutorialUIService.java
+++ b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/internal/TutorialUIService.java
@@ -17,6 +17,8 @@ $Id: codetemplates.xml 1 2011-01-01 00:00:01Z hoelzl $
 +--------------------------------------------------------------------------*/
 package org.fortiss.tooling.kernel.ui.internal;
 
+import static org.eclipse.core.runtime.Status.CANCEL_STATUS;
+import static org.eclipse.core.runtime.Status.OK_STATUS;
 import static org.fortiss.tooling.kernel.utils.LoggingUtils.error;
 
 import java.io.File;
@@ -24,17 +26,25 @@ import java.net.MalformedURLException;
 import java.net.URI;
 import java.net.URL;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Optional;
 
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.jface.action.IContributionItem;
+import org.eclipse.swt.widgets.Display;
 import org.eclipse.ui.IEditorInput;
 import org.eclipse.ui.IWorkbenchWindow;
 import org.eclipse.ui.PartInitException;
 import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.progress.UIJob;
 import org.fortiss.tooling.kernel.extension.ITutorialProvider;
 import org.fortiss.tooling.kernel.extension.data.TutorialStepBase;
 import org.fortiss.tooling.kernel.introspection.IIntrospectionDetailsItem;
@@ -59,7 +69,7 @@ import org.osgi.framework.BundleException;
  * @author hoelzl
  * @author $Author: hoelzl $
  * @version $Rev: 18709 $
- * @ConQAT.Rating YELLOW Hash: 3D55FF9743BBA332783A37E078A1465E
+ * @ConQAT.Rating RED Hash: 86CD841209EB95BE385D3201B5137A06
  */
 public final class TutorialUIService implements ITutorialUIService, ITutorialUIWhitelistProvider,
 		IIntrospectiveKernelService {
@@ -134,6 +144,45 @@ public final class TutorialUIService implements ITutorialUIService, ITutorialUIW
 		} catch(MalformedURLException urlEx) {
 			System.err.println("[TUIS] " + urlEx.getMessage());
 		}
+
+		// start tutorial immediately if command line arguments have been given
+		UIJob uiJob = new UIJob(Display.getCurrent(), "TutorialJob") {
+
+			@Override
+			public IStatus runInUIThread(IProgressMonitor monitor) {
+
+				final String getenv = System.getProperty("sun.java.command");
+				List<String> split = Arrays.asList(getenv.split(" "));
+				// search for Tutorial
+				Optional<String> cmdLineArgument =
+						split.stream().filter(s -> s.contains("tutorial")).findFirst();
+
+				if(!cmdLineArgument.isPresent()) {
+					return CANCEL_STATUS;
+				}
+
+				// 'tutorial = <Class name of tutorial root provider>'
+				String cmdLineString = cmdLineArgument.get();
+				String[] split2 = cmdLineString.split("=");
+				String className = split2[split2.length - 1];
+
+				Optional<Entry<Class<? extends ITutorialProvider>, Class<? extends ITutorialUIProvider>>> tutorialProvider =
+						providerMap.entrySet().stream()
+								.filter(c -> c.getKey().toString().contains(className)).findFirst();
+
+				if(!tutorialProvider.isPresent()) {
+					return null;
+				}
+
+				Class<? extends ITutorialProvider> clazz = tutorialProvider.get().getKey();
+				Display.getCurrent().asyncExec(
+						() -> ITutorialService.getInstance().startTutorial(clazz));
+
+				return OK_STATUS;
+			}
+		};
+
+		uiJob.schedule();
 	}
 
 	/** Tests for existence of META-INF sub-directory. */
-- 
GitLab