163 lines
5.3 KiB
C++
Executable File
163 lines
5.3 KiB
C++
Executable File
/**
|
|
* @RDE_HEADER@
|
|
* Evaluations - Criterium Create / Edit Dialog
|
|
* $Id$
|
|
* $HeadURL$
|
|
* $Author$
|
|
*
|
|
* Created by Hanna E. Rathje, SLSE, 2017-11-01
|
|
*/
|
|
|
|
#include "evl_edit_dialog.h"
|
|
#include "ui_evl_edit_dialog.h"
|
|
|
|
#include <LtsSession/lts_session.h>
|
|
#include <LtsSession/lts_session_data.h>
|
|
#include <Evaluations/evl_translation.h>
|
|
#include <PluginInterfaces/gui_plugin_interface.h>
|
|
#include <FileManagement/flm_translation.h>
|
|
|
|
#include <QJsonObject>
|
|
#include <QJsonDocument>
|
|
|
|
namespace Evaluations
|
|
{
|
|
CriteriumEditDialog::CriteriumEditDialog(QWidget *parent)
|
|
: LtsWidgets::LtsDialog(parent, LtsWidgets::ButtonCombination::OkCancel)
|
|
, m_requestHelper(new LtsUtils::RequestHelper(this))
|
|
, m_ui(new Ui::CriteriumEditDialog)
|
|
, m_logger(getLogger("CriteriumEditDialog"))
|
|
{
|
|
DEBUG_LOG(m_logger) << "CriteriumEditDialog ctor";
|
|
|
|
m_ui->setupUi(this);
|
|
|
|
m_uiRequirements->addRequirement({ m_ui->lblName, [this]() { return !m_ui->leName->text().isEmpty(); } });
|
|
}
|
|
|
|
CriteriumEditDialog::~CriteriumEditDialog()
|
|
{
|
|
delete m_ui;
|
|
}
|
|
|
|
void CriteriumEditDialog::retranslate()
|
|
{
|
|
translate(m_ui, m_dtc->evaluationCriterium(m_criteriumId), tr("Criterium"));
|
|
}
|
|
|
|
bool CriteriumEditDialog::init(int criteriumId,
|
|
LtsSession::LtsSession *session,
|
|
const std::shared_ptr<Interface::Dtc> &dtc,
|
|
const std::shared_ptr<Interface::Ftc> &ftc,
|
|
const std::shared_ptr<OperatorManagement::ForeignGuiComboboxInterface> &opmCbxDtc)
|
|
{
|
|
DEBUG_LOG(m_logger) << "CriteriumEditDialog::init";
|
|
m_criteriumId = criteriumId;
|
|
m_dtc = dtc;
|
|
m_ftc = ftc;
|
|
m_session = session;
|
|
|
|
opmCbxDtc->fillOperatorComboBox(m_ui->cbxOperators);
|
|
|
|
if (m_criteriumId > 0) //edit
|
|
{
|
|
Evaluations::EvaluationCriterium eval = m_dtc->evaluationCriterium(m_criteriumId);
|
|
m_ui->leName->setText(QString::fromStdString(eval.name()));
|
|
m_ui->teDesc->setText(QString::fromStdString(eval.description()));
|
|
|
|
m_ui->cbxOperators->setCurrentIndex(m_ui->cbxOperators->findData(eval.operatorId()));
|
|
}
|
|
else
|
|
{
|
|
m_ui->cbxOperators->setCurrentIndex(m_ui->cbxOperators->findData(LtsSessionData::LtsSessionData::getInstance()->getOperatorId()));
|
|
}
|
|
|
|
m_ui->leName->setFocus();
|
|
|
|
// Save/Load from Library Button
|
|
m_buttonBox->connectLibraryButton(this, &CriteriumEditDialog::onImportButtonClicked,
|
|
&CriteriumEditDialog::onExportButtonClicked);
|
|
|
|
if (!m_session->getForeignGuiInterface<FileManagement::ForeignGuiInterface>(m_flmGui))
|
|
m_buttonBox->setButtonEnabled(LtsWidgets::DialogButton::Library, false);
|
|
|
|
return true;
|
|
}
|
|
|
|
bool CriteriumEditDialog::apply()
|
|
{
|
|
// prepare request
|
|
EvlCriteriumModifyRequest req;
|
|
req.id(m_criteriumId);
|
|
req.name(m_ui->leName->text().toStdString());
|
|
req.description(m_ui->teDesc->toPlainText().toStdString());
|
|
req.operatorId(m_ui->cbxOperators->currentData().toInt());
|
|
|
|
return m_requestHelper->startSingleRequest([this, req]()
|
|
{
|
|
return m_ftc->evlCriteriumModifyRequest(req, this);
|
|
});
|
|
}
|
|
|
|
QByteArray CriteriumEditDialog::UiToJson()
|
|
{
|
|
QJsonObject obj;
|
|
obj[QStringLiteral("XmlType")] = FileManagement::toString(FileManagement::XmlType::EVLCriteriumEdit);
|
|
obj[QStringLiteral("Name")] = m_ui->leName->text();
|
|
obj[QStringLiteral("Description")] = m_ui->teDesc->toPlainText();
|
|
obj[QStringLiteral("OperatorId")] = m_ui->cbxOperators->currentData().toInt();
|
|
|
|
return QJsonDocument(obj).toJson(QJsonDocument::Compact);
|
|
} // end UiToJson
|
|
|
|
void CriteriumEditDialog::jsonToUi(const QByteArray &content)
|
|
{
|
|
// TODO: check for json error ...
|
|
const QJsonDocument doc(QJsonDocument::fromJson(content));
|
|
const QJsonObject obj(doc.object());
|
|
|
|
QString name = obj[QStringLiteral("Name")].toString();
|
|
QString description = obj[QStringLiteral("Description")].toString();;
|
|
int operatorId = obj[QStringLiteral("OperatorId")].toInt();
|
|
|
|
m_ui->leName->setText(name);
|
|
m_ui->teDesc->setText(description);
|
|
m_ui->cbxOperators->setCurrentIndex(m_ui->cbxOperators->findData(operatorId));
|
|
} // end jsonToUi
|
|
|
|
void CriteriumEditDialog::onExportButtonClicked()
|
|
{
|
|
QByteArray byteArray = UiToJson();
|
|
|
|
int fileId = m_flmGui->saveFileContent(this, FileManagement::FileType::Xml, m_session->exerciseId(), byteArray);
|
|
if (fileId > 0)
|
|
DEBUG_LOG(m_logger) << "Saved file with id = " << fileId;
|
|
else
|
|
ERROR_LOG(m_logger) << "Could not save file in library ";
|
|
}
|
|
|
|
void CriteriumEditDialog::onImportButtonClicked()
|
|
{
|
|
QByteArray content;
|
|
int fileId = m_flmGui->loadFileContent(this, content, {FileManagement::FileType::Xml}, m_session->exerciseId(), FileManagement::toString(FileManagement::XmlType::EVLCriteriumEdit));
|
|
if (fileId > 0)
|
|
{
|
|
if (!m_flmGui->isXmlType(content, FileManagement::toString(FileManagement::XmlType::EVLCriteriumEdit)))
|
|
{
|
|
QHash<LtsWidgets::Button, QString> texts({{LtsWidgets::Button::Yes, tr("Ok")}});
|
|
LtsWidgets::LtsMessageDialog::showMessage(this,
|
|
tr("Invalid xml file content"),
|
|
windowTitle(),
|
|
LtsWidgets::Behaviour::Modal,
|
|
LtsWidgets::Button::Yes,
|
|
texts);
|
|
}
|
|
else
|
|
{
|
|
jsonToUi(content);
|
|
}
|
|
}
|
|
} // end onImportButtonClicked
|
|
|
|
} // namespace Evaluations
|