From 453d2ce45869f58d3bbc80ea7a0abf42aa13d548 Mon Sep 17 00:00:00 2001
From: Cedric Seehausen <usdnr@student.kit.edu>
Date: Wed, 17 May 2017 11:44:30 +0200
Subject: [PATCH] Fixed stopping behaviour of ice scenarios

---
 .../ScenarioManagerWidgetController.cpp       |  1 +
 .../controller/ScenarioListController.cpp     | 42 +++++++++++--------
 2 files changed, 25 insertions(+), 18 deletions(-)

diff --git a/source/ArmarXGui/gui-plugins/ScenarioManager/ScenarioManagerWidgetController.cpp b/source/ArmarXGui/gui-plugins/ScenarioManager/ScenarioManagerWidgetController.cpp
index 363625a8..ba530f10 100644
--- a/source/ArmarXGui/gui-plugins/ScenarioManager/ScenarioManagerWidgetController.cpp
+++ b/source/ArmarXGui/gui-plugins/ScenarioManager/ScenarioManagerWidgetController.cpp
@@ -279,6 +279,7 @@ void ScenarioManagerWidgetController::reparsePackages()
             if (statusManager.isIceScenario(scenario))
             {
                 executor->setStarter(StarterFactory::getFactory()->getIceStarter(getArmarXManager()->getIceManager()->getIceGridSession()->getAdmin()), scenario);
+                executor->setStopStrategy(stopStrategyFactory.getStopStrategy(StopperFactory::getFactory()->getIceStopper(getArmarXManager()->getIceManager()->getIceGridSession()->getAdmin())), scenario);
             }
         }
 
diff --git a/source/ArmarXGui/gui-plugins/ScenarioManager/controller/ScenarioListController.cpp b/source/ArmarXGui/gui-plugins/ScenarioManager/controller/ScenarioListController.cpp
index 1559c75d..2347f548 100644
--- a/source/ArmarXGui/gui-plugins/ScenarioManager/controller/ScenarioListController.cpp
+++ b/source/ArmarXGui/gui-plugins/ScenarioManager/controller/ScenarioListController.cpp
@@ -118,15 +118,12 @@ void ScenarioListController::stop(int row, int column, QModelIndex parent)
     {
         ScenarioPtr scenario = item->getScenario();
         StatusManager statusManager;
-        StopStrategyFactory stopStrategyFactory;
         if (statusManager.isIceScenario(scenario))
         {
-            executor->setStopStrategy(stopStrategyFactory.getStopStrategy(StopperFactory::getFactory()->getIceStopper(iceAdmin)), scenario);
             executor->removeScenario(scenario);
         }
         else
         {
-            executor->setStopStrategy(executor->getDefaultStopStrategy(), scenario);
             executor->stopScenario(scenario);
         }
     }
@@ -173,33 +170,37 @@ void ScenarioListController::startScenario(ScenarioItem* scenarioItem, ScenarioS
 {
     ScenarioPtr scenario = scenarioItem->getScenario();
     StatusManager statusManager;
+    StopStrategyFactory stopStrategyFactory;
+
     if (mode == LocalStart)
     {
-        if (statusManager.isIceScenario(scenario))
+        if (statusManager.isIceScenario(scenario) && scenario->getStatus() != ApplicationStatus::Stopped)
         {
-            if (scenario->getStatus() != ApplicationStatus::Stopped)
+            QMessageBox::StandardButton reply;
+            reply = QMessageBox::question(nullptr, "", "The Scenario is currently running via Ice do you want to remove it ?", QMessageBox::Yes | QMessageBox::No);
+            if (reply == QMessageBox::No)
             {
-                QMessageBox::StandardButton reply;
-                reply = QMessageBox::question(nullptr, "", "The Scenario is currently running via Ice do you want to remove it ?", QMessageBox::Yes | QMessageBox::No);
-                if (reply == QMessageBox::No)
-                {
-                    return;
-                }
-                else
-                {
-                    executor->setStarter(StarterFactory::getFactory()->getIceStarter(iceAdmin), scenario);
-                    statusManager.setIceScenario(scenario, false);
-                    executor->removeScenario(scenario);
-                }
+                return;
+            }
+            else
+            {
+                executor->setStarter(StarterFactory::getFactory()->getIceStarter(iceAdmin), scenario);
+                executor->setStopStrategy(stopStrategyFactory.getStopStrategy(StopperFactory::getFactory()->getIceStopper(iceAdmin)), scenario);
+
+                statusManager.setIceScenario(scenario, true);
+                executor->removeScenario(scenario);
+                return;
             }
         }
         executor->setStarter(StarterFactory::getFactory()->getStarter(), scenario);
+        executor->setStopStrategy(executor->getDefaultStopStrategy(), scenario);
+
         statusManager.setIceScenario(scenario, false);
         executor->startScenario(scenario);
     }
     else
     {
-        if (scenario->getStatus() != ApplicationStatus::Stopped)
+        if (!statusManager.isIceScenario(scenario) && scenario->getStatus() != ApplicationStatus::Stopped)
         {
             QMessageBox::StandardButton reply;
             reply = QMessageBox::question(nullptr, "", "The Scenario is currently running locally do you want to stop it ?", QMessageBox::Yes | QMessageBox::No);
@@ -210,10 +211,15 @@ void ScenarioListController::startScenario(ScenarioItem* scenarioItem, ScenarioS
             else
             {
                 executor->setStarter(StarterFactory::getFactory()->getStarter(), scenario);
+                executor->setStopStrategy(executor->getDefaultStopStrategy(), scenario);
+
                 executor->stopScenario(scenario);
+                return;
             }
         }
         executor->setStarter(StarterFactory::getFactory()->getIceStarter(iceAdmin), scenario);
+        executor->setStopStrategy(stopStrategyFactory.getStopStrategy(StopperFactory::getFactory()->getIceStopper(iceAdmin)), scenario);
+
         statusManager.setIceScenario(scenario, true);
         executor->deployScenario(scenario);
     }
-- 
GitLab