From 880bff02c65b7423db050fe5008585de95f70c6e Mon Sep 17 00:00:00 2001
From: Gennady Pospelov <g.pospelov@fz-juelich.de>
Date: Wed, 13 Apr 2016 13:50:02 +0200
Subject: [PATCH] JobItem duration sec.msec is added to the list of properties

---
 GUI/coregui/Models/JobItem.cpp      | 14 ++++++++++++++
 GUI/coregui/Models/JobItem.h        |  3 +++
 GUI/coregui/Models/JobQueueData.cpp | 17 +----------------
 GUI/coregui/Models/JobQueueData.h   |  2 --
 GUI/coregui/Models/JobRunner.cpp    |  8 ++++++++
 GUI/coregui/Models/JobRunner.h      |  3 +++
 6 files changed, 29 insertions(+), 18 deletions(-)

diff --git a/GUI/coregui/Models/JobItem.cpp b/GUI/coregui/Models/JobItem.cpp
index 6d61407d1a1..76425ee540a 100644
--- a/GUI/coregui/Models/JobItem.cpp
+++ b/GUI/coregui/Models/JobItem.cpp
@@ -24,6 +24,7 @@
 #include "JobResultsPresenter.h"
 #include "SimulationOptionsItem.h"
 #include "GUIHelpers.h"
+#include <QDateTime>
 #include <QDebug>
 
 const QString JobItem::P_IDENTIFIER = "Identifier";
@@ -33,6 +34,7 @@ const QString JobItem::P_WITH_FITTING = "With Fitting";
 const QString JobItem::P_STATUS = "Status";
 const QString JobItem::P_BEGIN_TIME = "Begin Time";
 const QString JobItem::P_END_TIME = "End Time";
+const QString JobItem::P_DURATION = "Duration";
 const QString JobItem::P_COMMENTS = "Comments";
 const QString JobItem::P_PROGRESS = "Progress";
 const QString JobItem::T_SAMPLE = "Sample Tag";
@@ -58,6 +60,11 @@ JobItem::JobItem()
 
     addProperty(P_BEGIN_TIME, QString())->setEditable(false);
     addProperty(P_END_TIME, QString())->setEditable(false);
+
+    SessionItem *durationItem = addProperty(P_DURATION, QString());
+    durationItem->setEditable(false);
+    durationItem->setToolTip(QStringLiteral("Duration of DWBA simulation in sec.msec format"));
+
     addProperty(P_COMMENTS, QString())->setVisible(false);
     addProperty(P_PROGRESS, 0)->setVisible(false);
 
@@ -162,6 +169,13 @@ void JobItem::setEndTime(const QString &end_time)
     setItemValue(P_END_TIME, end_time);
 }
 
+void JobItem::setDuration(int duration)
+{
+    QString str;
+    str.sprintf("%6.3f", duration/1000.);
+    setItemValue(P_DURATION, str.simplified());
+}
+
 QString JobItem::getComments() const
 {
     return getItemValue(P_COMMENTS).toString();
diff --git a/GUI/coregui/Models/JobItem.h b/GUI/coregui/Models/JobItem.h
index 6e2302c7488..5572086342e 100644
--- a/GUI/coregui/Models/JobItem.h
+++ b/GUI/coregui/Models/JobItem.h
@@ -37,6 +37,7 @@ public:
     static const QString P_STATUS;
     static const QString P_BEGIN_TIME;
     static const QString P_END_TIME;
+    static const QString P_DURATION;
     static const QString P_COMMENTS;
     static const QString P_PROGRESS;
     static const QString T_SAMPLE;
@@ -66,6 +67,8 @@ public:
 
     void setEndTime(const QString &end_time);
 
+    void setDuration(int duration);
+
     QString getComments() const;
     void setComments(const QString &comments);
 
diff --git a/GUI/coregui/Models/JobQueueData.cpp b/GUI/coregui/Models/JobQueueData.cpp
index 7766217c234..2ae18b0bc85 100644
--- a/GUI/coregui/Models/JobQueueData.cpp
+++ b/GUI/coregui/Models/JobQueueData.cpp
@@ -78,22 +78,6 @@ bool JobQueueData::hasUnfinishedJobs()
     return m_simulations.size();
 }
 
-//void JobQueueData::setResults(JobItem *jobItem, const GISASSimulation *simulation)
-//{
-//    if(!simulation)
-//        throw GUIHelpers::Error("NJobItem::setResults() -> Error. Null simulation.");
-
-//    jobItem->setResults(simulation);
-////    IntensityDataItem *intensityItem = jobItem->getIntensityDataItem();
-
-////    if(!intensityItem) {
-////        intensityItem = static_cast<IntensityDataItem *>(m_jobModel->insertNewItem(Constants::IntensityDataType, m_jobModel->indexOfItem(jobItem)));
-////    }
-////    intensityItem->setNameFromProposed(jobItem->itemName());
-//////    intensityItem->setOutputData(simulation->getDetectorIntensity());
-////    intensityItem->setResults(simulation);
-//}
-
 void JobQueueData::runJob(const QString &identifier)
 {
     qDebug() << "JobQueueData::runJob(const QString &identifier)";
@@ -207,6 +191,7 @@ void JobQueueData::onFinishedJob()
 
     QString end_time = QDateTime::currentDateTime().toString("yyyy.MM.dd hh:mm:ss");
     jobItem->setEndTime(end_time);
+    jobItem->setDuration(runner->getSimulationDuration());
 
 
     // propagating status of runner
diff --git a/GUI/coregui/Models/JobQueueData.h b/GUI/coregui/Models/JobQueueData.h
index 11836f5f9e9..6f940688aaa 100644
--- a/GUI/coregui/Models/JobQueueData.h
+++ b/GUI/coregui/Models/JobQueueData.h
@@ -43,8 +43,6 @@ public:
 
     bool hasUnfinishedJobs();
 
-//    void setResults(JobItem *jobItem, const GISASSimulation *simulation);
-
 signals:
     void globalProgress(int);
     void focusRequest(const QString &identifier);
diff --git a/GUI/coregui/Models/JobRunner.cpp b/GUI/coregui/Models/JobRunner.cpp
index 727776c5876..e76324b73e7 100644
--- a/GUI/coregui/Models/JobRunner.cpp
+++ b/GUI/coregui/Models/JobRunner.cpp
@@ -21,6 +21,7 @@
 #include "item_constants.h"
 #include <functional>
 #include <QTimer>
+#include <QDateTime>
 #include <QDebug>
 
 
@@ -30,6 +31,7 @@ JobRunner::JobRunner(QString identifier, GISASSimulation *simulation)
     , m_progress(0)
     , m_job_status(Constants::STATUS_IDLE)
     , m_terminate_request_flag(false)
+    , m_simulation_duration(0)
 {
 
 }
@@ -50,6 +52,7 @@ void JobRunner::start()
 {
     qDebug() << "JobRunner::start() " << m_simulation;
     m_terminate_request_flag = false;
+    m_simulation_duration = 0;
     emit started();
 
     if(m_simulation) {
@@ -61,9 +64,14 @@ void JobRunner::start()
         m_job_status = Constants::STATUS_RUNNING;
 
         try {
+            QDateTime beginTime = QDateTime::currentDateTime();
             m_simulation->runSimulation();
             if(m_job_status != Constants::STATUS_CANCELED)
                 m_job_status = Constants::STATUS_COMPLETED;
+
+            QDateTime endTime = QDateTime::currentDateTime();
+            m_simulation_duration = beginTime.msecsTo(endTime);
+
         }
         catch(const std::exception &ex)
         {
diff --git a/GUI/coregui/Models/JobRunner.h b/GUI/coregui/Models/JobRunner.h
index 46c44323c1e..eea8c01068d 100644
--- a/GUI/coregui/Models/JobRunner.h
+++ b/GUI/coregui/Models/JobRunner.h
@@ -45,6 +45,8 @@ public:
 
     QString getFailureMessage() const { return m_failure_message; }
 
+    int getSimulationDuration() const { return m_simulation_duration; }
+
 signals:
     void started();
     void finished();
@@ -65,6 +67,7 @@ private:
 
     bool m_terminate_request_flag;
     QString m_failure_message;
+    int m_simulation_duration;
 };
 
 
-- 
GitLab