DetailedApplicationController.cpp
Go to the documentation of this file.
1 /*
2  * This file is part of ArmarX.
3  *
4  * Copyright (C) 2011-2016, High Performance Humanoid Technologies (H2T), Karlsruhe Institute of Technology (KIT), all rights reserved.
5  *
6  * ArmarX is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License version 2 as
8  * published by the Free Software Foundation.
9  *
10  * ArmarX is distributed in the hope that it will be useful, but
11  * WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program. If not, see <http://www.gnu.org/licenses/>.
17  *
18  * @package ArmarXCore::core
19  * @author Cedric Seehausen (usdnr at kit dot edu)
20  * @date 2016
21  * @copyright http://www.gnu.org/licenses/gpl-2.0.txt
22  * GNU General Public License
23  */
24 
26 #include "ScenarioListController.h"
27 
33 #include <QDesktopServices>
34 #include <QUrl>
35 #include <QMessageBox>
36 #include <string>
37 #include <stdlib.h>
38 
39 
40 using namespace ScenarioManager;
41 using namespace Controller;
42 using namespace Exec;
43 using namespace Data_Structure;
44 
45 DetailedApplicationController::DetailedApplicationController(ExecutorPtr executor, QObject* parent) : QObject(parent), executor(executor), showingStartable(false)
46 {
47  QObject::connect(&propertyAdderView, SIGNAL(create(std::string, std::string)),
48  this, SLOT(setProperty(std::string, std::string)));
49 
50  QObject::connect(&iceEnvVariableAddView, SIGNAL(create(std::string, std::string)),
51  this, SLOT(setIceEnvVariable(std::string, std::string)));
52 }
53 
55 {
56 }
57 
59 {
60  view = ptr;
61 }
62 
64 {
65  if (application.get() == nullptr)
66  {
67  return;
68  }
69  showingStartable = true;
70  currentApplication = application;
71  currentScenario = ScenarioPtr();
72 
73  executor->loadAndSetCachedProperties(application, Parser::IceParser::getCacheDir(), false, false);
74  application->load();
75  view->setVisible(true);
76  view->showApplicationInstance(application, item);
77 }
78 
80 {
81  if (application.get() == nullptr)
82  {
83  return;
84  }
85  showingStartable = false;
86  currentApplication = ApplicationInstancePtr();
87  currentScenario = ScenarioPtr();
89  executor->loadAndSetCachedProperties(app, Parser::IceParser::getCacheDir());
90 
91  view->setVisible(true);
92  view->showApplication(app);
93 }
94 
96 {
97  if (scenario.get() == nullptr)
98  {
99  return;
100  }
101  showingStartable = true;
102  currentApplication = ApplicationInstancePtr();
103  currentScenario = scenario;
104 
105  view->setVisible(true);
106  view->showScenario(scenario);
107 }
108 
110 {
111  if (package.get() == nullptr)
112  {
113  return;
114  }
115  showingStartable = false;
116  currentApplication = ApplicationInstancePtr();
117  currentScenario = ScenarioPtr();
118  view->showPackage(package);
119 }
120 
122 {
123  if (showingStartable)
124  {
125  std::string url = "file://";
126  if (currentApplication.get() != nullptr)
127  {
128  url.append(currentApplication->getConfigPath());
129  }
130  else if (currentScenario.get() != nullptr)
131  {
132  url.append(currentScenario->getGlobalConfigPath());
133  }
134  QDesktopServices::openUrl(QUrl(url.c_str()));
135  }
136 }
137 
138 void DetailedApplicationController::setProperty(std::string name, std::string value)
139 {
140  if (showingStartable)
141  {
142  if (currentApplication.get() != nullptr)
143  {
144  currentApplication->addProperty(name, value);
145  currentApplication->save();
146  showApplicationInstance(currentApplication, nullptr);
147  }
148  else if (currentScenario.get() != nullptr)
149  {
150  currentScenario->getGlobalConfig()->defineOptionalProperty<std::string>(name, "::NOT_DEFINED::", "Custom Property");
151  currentScenario->getGlobalConfig()->getProperties()->setProperty(name, value);
152  currentScenario->save();
153  showScenario(currentScenario);
154  }
155  }
156 }
157 
158 void DetailedApplicationController::setIceEnvVariable(std::string name, std::string value)
159 {
160  if (currentScenario.get() != nullptr)
161  {
162  currentScenario->addIceEnviromentVariable(name, value);
163  currentScenario->save();
164  showScenario(currentScenario);
165  }
166 }
167 
169 {
170  if (showingStartable)
171  {
172  if (currentApplication.get() != nullptr)
173  {
174  executor->startApplication(currentApplication);
175  }
176  else if (currentScenario.get() != nullptr)
177  {
178  try
179  {
180  startScenario(currentScenario);
181  }
182  catch (IceGrid::ServerStartException& ex)
183  {
184  showWarningDialog("Ice had an launching error. Please make sure your remote launch settings are correct");
185  }
186  }
187  }
188 }
189 
190 void DetailedApplicationController::startScenario(ScenarioPtr scenario)
191 {
192 
193  StatusManager statusManager;
195  ScenarioListController::StartScenario(scenario, mode, executor, iceAdmin);
196 
197  // StatusManager statusManager;
198  // StopStrategyFactory stopStrategyFactory;
199 
200  // if (scenario->getScenarioDeploymentType() == ScenarioDeploymentType::Local)
201  // {
202  // executor->setStarter(StarterFactory::getFactory()->getStarter(), scenario);
203  // executor->setStopStrategy(executor->getDefaultStopStrategy(), scenario);
204  // executor->startScenario(scenario);
205  // }
206  // else
207  // {
208  // executor->setStarter(StarterFactory::getFactory()->getIceStarter(iceAdmin), scenario);
209  // executor->setStopStrategy(stopStrategyFactory.getKillStrategy(StopperFactory::getFactory()->getIceStopper(iceAdmin)), scenario);
210  // if (executor->isScenarioDeployed(scenario))
211  // {
212  // try
213  // {
214  // executor->startScenario(scenario).get();
215  // }
216  // catch (IceGrid::ServerStartException& ex)
217  // {
218  // showWarningDialog("Ice had an launching error. Please make sure your remote launch settings are correct");
219  // }
220  // }
221  // else
222  // {
223  // try
224  // {
225  // executor->deployScenario(scenario).get();
226  // }
227  // catch (IceGrid::DeploymentException& ex)
228  // {
229  // showWarningDialog(QString::fromStdString(ex.reason));
230  // }
231  // }
232  // }
233 }
234 
235 
237 {
238  if (showingStartable)
239  {
240  if (currentApplication.get() != nullptr)
241  {
242  executor->stopApplication(currentApplication);
243  }
244  else if (currentScenario.get() != nullptr)
245  {
246  if (currentScenario->getScenarioDeploymentType() == ScenarioDeploymentType::Local)
247  {
248  executor->stopScenario(currentScenario);
249  }
250  else
251  {
252  executor->removeScenario(currentScenario);
253  }
254  }
255  }
256 }
257 
259 {
260  if (showingStartable)
261  {
262  if (currentApplication.get() != nullptr)
263  {
264  currentApplication->save();
265  executor->restartApplication(currentApplication);
266  }
267  else if (currentScenario.get() != nullptr)
268  {
269  currentScenario->save();
270  try
271  {
272  executor->restartScenario(currentScenario);
273  }
274  catch (IceGrid::ServerStartException& ex)
275  {
276  showWarningDialog("Ice had an launching error. Please make sure your remote launch settings are correct");
277  }
278  }
279  }
280 }
281 
283 {
284 
285 }
286 
288 {
289  propertyAdderView.exec();
290 }
291 
293 {
294  iceEnvVariableAddView.exec();
295 }
296 
297 void DetailedApplicationController::showWarningDialog(QString message)
298 {
299  QMessageBox box;
300  box.setText(message);
301  box.exec();
302 }
303 
304 void DetailedApplicationController::setIceAdmin(IceGrid::AdminPrx iceAdmin)
305 {
306  this->iceAdmin = iceAdmin;
307 }
ScenarioItem
TreeItem representing data contained in a Scenario or an Application.
Definition: scenarioitem.h:38
ScenarioManager::Data_Structure::ScenarioPtr
std::shared_ptr< Scenario > ScenarioPtr
Definition: Scenario.h:36
iceparser.h
Scenario.h
ScenarioManager::Controller::DetailedApplicationController::~DetailedApplicationController
~DetailedApplicationController() override
Destructor.
Definition: DetailedApplicationController.cpp:54
ScenarioManager::Data_Structure::ApplicationPtr
std::shared_ptr< Application > ApplicationPtr
Definition: Application.h:119
DetailedApplicationView::showApplication
void showApplication(ScenarioManager::Data_Structure::ApplicationPtr application)
Show an Application.
Definition: detailedapplicationview.cpp:109
LocalStart
@ LocalStart
Definition: scenariolistview.h:46
StopperFactory.h
ScenarioManager::Controller::DetailedApplicationController::DetailedApplicationController
DetailedApplicationController(Exec::ExecutorPtr executor, QObject *parent=0)
Constructor that optionally sets the parent object.
Definition: DetailedApplicationController.cpp:45
message
message(STATUS "Boost-Library-Dir: " "${Boost_LIBRARY_DIRS}") message(STATUS "Boost-LIBRARIES
Definition: CMakeLists.txt:8
ScenarioManager::Exec::ExecutorPtr
std::shared_ptr< Executor > ExecutorPtr
Definition: Executor.h:171
ScenarioManager::Controller::DetailedApplicationController::save
void save()
Saves the configuration of the current ApplicationInstance to the config file.
Definition: DetailedApplicationController.cpp:258
ScenarioManager::Controller::DetailedApplicationController::setProperty
void setProperty(std::string name, std::string value)
Sets a property of the current ApplicationInstance.
Definition: DetailedApplicationController.cpp:138
ApplicationInstancePtr
std::shared_ptr< ScenarioManager::Data_Structure::ApplicationInstance > ApplicationInstancePtr
Definition: StopStrategy.h:7
ScenarioManager::Controller::DetailedApplicationController::setIceEnvVariable
void setIceEnvVariable(std::string name, std::string value)
Definition: DetailedApplicationController.cpp:158
ScenarioManager::Controller::DetailedApplicationController::showPackage
void showPackage(Data_Structure::PackagePtr package)
Shows a Package in the DetailedApplicationView.
Definition: DetailedApplicationController.cpp:109
ScenarioManager::Controller::ScenarioListController::StartScenario
static bool StartScenario(ScenarioManager::Data_Structure::ScenarioPtr scenario, ScenarioStartModes mode, Exec::ExecutorPtr executor, IceGrid::AdminPrx iceAdmin)
Definition: ScenarioListController.cpp:858
ScenarioManager::Controller::DetailedApplicationController::showPropertyAddView
void showPropertyAddView()
Definition: DetailedApplicationController.cpp:287
ScenarioManager::Data_Structure::Application
Class containing data about an application Provides methods to get and set the date contained in the ...
Definition: Application.h:45
cxxopts::value
std::shared_ptr< Value > value()
Definition: cxxopts.hpp:926
ScenarioStartModes
ScenarioStartModes
Definition: scenariolistview.h:44
ScenarioManager::Controller::DetailedApplicationController::showIceEnvVariableAddView
void showIceEnvVariableAddView()
Definition: DetailedApplicationController.cpp:292
ScenarioManager::Data_Structure::PackagePtr
std::shared_ptr< Package > PackagePtr
Definition: Package.h:121
ScenarioManager::Controller::DetailedApplicationController::deleteProperty
void deleteProperty(std::string name)
Deletes a property off the configuration file of the current ApplicationInstance.
Definition: DetailedApplicationController.cpp:282
ScenarioManager::Controller::DetailedApplicationController::setDetailedApplicationView
void setDetailedApplicationView(DetailedApplicationView *ptr)
Sets the view this controller manages.
Definition: DetailedApplicationController.cpp:58
ScenarioManager::Controller::DetailedApplicationController::showApplication
void showApplication(Data_Structure::ApplicationPtr application)
Shows an Application in the DetailedApplicationView.
Definition: DetailedApplicationController.cpp:79
ScenarioManager::Controller::DetailedApplicationController::setIceAdmin
void setIceAdmin(IceGrid::AdminPrx iceAdmin)
Set an IceAdmin for the controller.
Definition: DetailedApplicationController.cpp:304
DetailedApplicationView::showScenario
void showScenario(ScenarioManager::Data_Structure::ScenarioPtr scenario)
Show a Scenario.
Definition: detailedapplicationview.cpp:409
ScenarioManager::StatusManager
Definition: StatusManager.h:7
ScenarioManager::Data_Structure::Local
@ Local
Definition: Scenario.h:53
ScenarioManager::Parser::IceParser::getCacheDir
static std::string getCacheDir()
Definition: iceparser.cpp:304
DetailedApplicationView::showApplicationInstance
void showApplicationInstance(ScenarioManager::Data_Structure::ApplicationInstancePtr appInstance, ScenarioItem *item)
Show an ApplicationInstance.
Definition: detailedapplicationview.cpp:200
ScenarioManager
Definition: Application.cpp:166
StopStrategyFactory.h
DetailedApplicationView::showPackage
void showPackage(ScenarioManager::Data_Structure::PackagePtr package)
Show a Package.
Definition: detailedapplicationview.cpp:622
ScenarioManager::Controller::DetailedApplicationController::showInStandardEditor
void showInStandardEditor()
Shows the configuration of the current ApplicationInstance in the standard editor.
Definition: DetailedApplicationController.cpp:121
ScenarioListController.h
ScenarioManager::Controller::DetailedApplicationController::stop
void stop()
Stops the current ApplicationInstance.
Definition: DetailedApplicationController.cpp:236
DetailedApplicationController.h
StarterFactory.h
DetailedApplicationView
View that shows detailed information about a Scenario, Package or Application. Shows status and param...
Definition: detailedapplicationview.h:49
ScenarioManager::Controller::DetailedApplicationController::start
void start()
Starts the current ApplicationInstance.
Definition: DetailedApplicationController.cpp:168
ScenarioManager::Controller::DetailedApplicationController::showScenario
void showScenario(Data_Structure::ScenarioPtr scenario)
Shows a Scenario in the DetailedApplicationView.
Definition: DetailedApplicationController.cpp:95
ScenarioManager::Controller::DetailedApplicationController::showApplicationInstance
void showApplicationInstance(Data_Structure::ApplicationInstancePtr application, ScenarioItem *item)
Shows an ApplicationInstance in the DetailedApplicationView.
Definition: DetailedApplicationController.cpp:63