From 76ad70a8ad910a2aa4b93a2fab976c6869194932 Mon Sep 17 00:00:00 2001 From: Florian Hoelzl <hoelzl@fortiss.org> Date: Mon, 2 May 2016 11:48:56 +0000 Subject: [PATCH] Fixed exception thrown at the second start of the same tutorial. Now tutorial provider is instantiated at start of tutorial. refs 2567 --- .../kernel/extension/ITutorialProvider.java | 3 -- .../kernel/internal/TutorialService.java | 41 +++++++++++-------- .../kernel/service/ITutorialService.java | 8 ++-- 3 files changed, 27 insertions(+), 25 deletions(-) diff --git a/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/extension/ITutorialProvider.java b/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/extension/ITutorialProvider.java index f04beac90..4cc9c96f1 100644 --- a/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/extension/ITutorialProvider.java +++ b/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/extension/ITutorialProvider.java @@ -29,9 +29,6 @@ import org.fortiss.tooling.kernel.extension.data.TutorialStep; * @ConQAT.Rating RED Hash: */ public interface ITutorialProvider { - /** Returns the description of the tutorial. */ - public String getDescription(); - /** Returns the root element of this tutorial. */ public EObject getRootElement(); diff --git a/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/TutorialService.java b/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/TutorialService.java index 65f6b599f..e05d70180 100644 --- a/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/TutorialService.java +++ b/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/TutorialService.java @@ -17,11 +17,10 @@ $Id: codetemplates.xml 1 2011-01-01 00:00:01Z hoelzl $ +--------------------------------------------------------------------------*/ package org.fortiss.tooling.kernel.internal; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; +import java.util.HashMap; +import java.util.Map; -import org.conqat.lib.commons.collections.UnmodifiableList; +import org.conqat.lib.commons.collections.UnmodifiableMap; import org.eclipse.emf.ecore.EObject; import org.fortiss.tooling.kernel.extension.ITutorialProvider; import org.fortiss.tooling.kernel.extension.ITutorialWhitelistProvider; @@ -40,7 +39,7 @@ import org.fortiss.tooling.kernel.service.ITutorialService; public final class TutorialService implements ITutorialService, ITutorialWhitelistProvider { /** The collection of all defined tutorials. */ - private List<ITutorialProvider> allTutorials = new ArrayList<>(); + private Map<String, Class<? extends ITutorialProvider>> allTutorials = new HashMap<>(); /** The active tutorial. */ private ITutorialProvider activeTutorial = null; @@ -67,32 +66,38 @@ public final class TutorialService implements ITutorialService, ITutorialWhiteli /** {@inheritDoc} */ @Override - public Collection<ITutorialProvider> getAllTutorialProviders() { - return new UnmodifiableList<>(allTutorials); + public Map<String, Class<? extends ITutorialProvider>> getAllTutorialProviders() { + return new UnmodifiableMap<String, Class<? extends ITutorialProvider>>(allTutorials); } /** {@inheritDoc} */ @Override - public void registerTutorial(ITutorialProvider provider) { - if(!allTutorials.contains(provider)) { - allTutorials.add(provider); - } + public void registerTutorial(String name, Class<? extends ITutorialProvider> provider) { + allTutorials.put(name, provider); } /** {@inheritDoc} */ @Override - public void startTutorial(ITutorialProvider provider) { - activeTutorial = provider; - activeStep = activeTutorial.getInitialStep(); - - IPersistencyService.INSTANCE.addDummyEObjectAsTopLevelElement(activeTutorial - .getRootElement()); - System.out.println("start tutorial for provider: " + activeTutorial.getClass().getName()); + public void startTutorial(String name) { + if(!allTutorials.containsKey(name)) { + return; + } + try { + activeTutorial = allTutorials.get(name).newInstance(); + activeStep = activeTutorial.getInitialStep(); + EObject root = activeTutorial.getRootElement(); + IPersistencyService.INSTANCE.addDummyEObjectAsTopLevelElement(root); + } catch(InstantiationException e) { + e.printStackTrace(); + } catch(IllegalAccessException e) { + e.printStackTrace(); + } } /** {@inheritDoc} */ @Override public void stopTutorial() { + IPersistencyService.INSTANCE.removeDummyTopLevelElement(activeTutorial.getRootElement()); activeStep = null; activeTutorial = null; } diff --git a/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/service/ITutorialService.java b/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/service/ITutorialService.java index 2b90ce4e5..744f3a78b 100644 --- a/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/service/ITutorialService.java +++ b/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/service/ITutorialService.java @@ -17,7 +17,7 @@ $Id: codetemplates.xml 1 2011-01-01 00:00:01Z hoelzl $ +--------------------------------------------------------------------------*/ package org.fortiss.tooling.kernel.service; -import java.util.Collection; +import java.util.Map; import org.fortiss.tooling.kernel.extension.ITutorialProvider; import org.fortiss.tooling.kernel.extension.data.TutorialStep; @@ -44,7 +44,7 @@ public interface ITutorialService { public ITutorialProvider getActiveTutorial(); /** Starts the given tutorial. */ - public void startTutorial(ITutorialProvider provider); + public void startTutorial(String name); /** Stops the current tutorial. */ public void stopTutorial(); @@ -53,8 +53,8 @@ public interface ITutorialService { public TutorialStep getActiveTutorialStep(); /** Returns all registered tutorial providers. */ - public Collection<ITutorialProvider> getAllTutorialProviders(); + public Map<String, Class<? extends ITutorialProvider>> getAllTutorialProviders(); /** Programmatically register a tutorial provider. */ - public void registerTutorial(ITutorialProvider provider); + public void registerTutorial(String name, Class<? extends ITutorialProvider> provider); } -- GitLab