DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
SchemaRelationshipEditor.cpp
Go to the documentation of this file.
1// DUNE DAQ modification notice:
2// This file has been modified from the original ATLAS dbe source for the DUNE DAQ project.
3// Fork baseline commit: dbe-02-12-17 (2022-05-12).
4// Renamed since fork: yes (from src/SchemaEditor/SchemaRelationshipEditor.cpp to
5// apps/SchemaEditor/SchemaRelationshipEditor.cpp).
6
7#include <QMessageBox>
11#include "ui_SchemaRelationshipEditor.h"
12
13using namespace dunedaq::oks;
14
16
18 OksRelationship* Relationship,
19 QWidget* parent)
20 : QWidget(parent)
22 , SchemaRelationship(Relationship)
23 , SchemaClass(Class)
24 , UsedNew(false)
25 , GraphScene(false)
26{
27 QWidget::setAttribute(Qt::WA_DeleteOnClose);
28
30
31 ui->setupUi(this);
32 auto title = SchemaClass->get_name() + "::" + SchemaRelationship->get_name();
33 setWindowTitle(QString("Relationship Editor : %1").arg(title.c_str()));
36}
37
39 : QWidget(parent)
41 , SchemaRelationship(nullptr)
42 , SchemaClass(Class)
43 , UsedNew(true)
44 , GraphScene(false)
45{
46 QWidget::setAttribute(Qt::WA_DeleteOnClose);
47 ui->setupUi(this);
48 m_writable = true;
49 setWindowTitle(QString("Relationship Editor : %1 New Relationship").arg(SchemaClass->get_name().c_str()));
52}
53
54dbse::SchemaRelationshipEditor::SchemaRelationshipEditor(OksClass* Class, QString ClassType, QWidget* parent)
55 : QWidget(parent)
57 , SchemaRelationship(nullptr)
58 , SchemaClass(Class)
59 , UsedNew(true)
60 , GraphScene(true)
61{
62 QWidget::setAttribute(Qt::WA_DeleteOnClose);
63 m_writable = true;
64 ui->setupUi(this);
65 setWindowTitle(QString("Relationship Editor : %1 New Relationship").arg(SchemaClass->get_name().c_str()));
68 ui->RelationshipTypeComboBox->setCurrentIndex(ui->RelationshipTypeComboBox->findData(ClassType, Qt::DisplayRole));
69}
70void
72{
73 if (!UsedNew && ClassName.toStdString() == SchemaClass->get_name()) {
74 if (SchemaClass->find_direct_relationship(SchemaRelationship->get_name()) == nullptr) {
75 QWidget::close();
76 } else {
77 FillInfo();
78 }
79 }
80}
81
82void
84{
85 auto name = SchemaClass->get_name() + "::" + SchemaRelationship->get_name();
86 setObjectName(QString::fromStdString(name));
87 ui->RelationshipNameLineEdit->setText(QString::fromStdString(SchemaRelationship->get_name()));
88 ui->RelationshipTypeComboBox->setCurrentIndex(
89 ui->RelationshipTypeComboBox->findData(QString::fromStdString(SchemaRelationship->get_type()), Qt::DisplayRole));
90 ui->RelationshipDescriptionTextEdit->setPlainText(QString::fromStdString(SchemaRelationship->get_description()));
91
92 if (SchemaRelationship->get_is_composite()) {
93 ui->IsCompositeCombo->setCurrentIndex(0);
94 } else {
95 ui->IsCompositeCombo->setCurrentIndex(1);
96 }
97
98 if (SchemaRelationship->get_is_exclusive()) {
99 ui->IsExclusiveCombo->setCurrentIndex(0);
100 } else {
101 ui->IsExclusiveCombo->setCurrentIndex(1);
102 }
103
104 if (SchemaRelationship->get_is_dependent()) {
105 ui->IsDependentCombo->setCurrentIndex(0);
106 } else {
107 ui->IsDependentCombo->setCurrentIndex(1);
108 }
109
110 if (SchemaRelationship->get_low_cardinality_constraint() == OksRelationship::CardinalityConstraint::Zero)
111 ui->LowCcCombo->setCurrentIndex(0);
112 else if (SchemaRelationship->get_low_cardinality_constraint() == OksRelationship::CardinalityConstraint::One) {
113 ui->LowCcCombo->setCurrentIndex(1);
114 } else {
115 ui->LowCcCombo->setCurrentIndex(2);
116 }
117
118 if (SchemaRelationship->get_high_cardinality_constraint() == OksRelationship::CardinalityConstraint::Zero)
119 ui->HighCcCombo->setCurrentIndex(0);
120 else if (SchemaRelationship->get_high_cardinality_constraint() == OksRelationship::CardinalityConstraint::One) {
121 ui->HighCcCombo->setCurrentIndex(1);
122 } else {
123 ui->HighCcCombo->setCurrentIndex(2);
124 }
125}
126
127void
129{
130 if (event->key() == Qt::Key_Escape) {
131 close();
132 }
133 QWidget::keyPressEvent(event);
134}
135
136void
138{
139 QStringList ClassList;
141 ui->RelationshipTypeComboBox->addItems(ClassList);
142 auto name = SchemaClass->get_name() + "::";
143 setObjectName(QString::fromStdString(name));
144
145 if (!m_writable) {
146 ui->RelationshipTypeComboBox->setEnabled(false);
147 ui->IsCompositeCombo->setEnabled(false);
148 ui->IsExclusiveCombo->setEnabled(false);
149 ui->IsDependentCombo->setEnabled(false);
150 ui->LowCcCombo->setEnabled(false);
151 ui->HighCcCombo->setEnabled(false);
152 ui->RelationshipDescriptionTextEdit->setEnabled(false);
153 ui->RelationshipNameLineEdit->setEnabled(false);
154 }
155
156 if (!UsedNew) {
157 FillInfo();
158 }
159}
160
161void
163{
164 if (m_writable) {
165 connect(ui->buttonBox, SIGNAL(accepted()), this, SLOT(ProxySlot()));
166 } else {
167 connect(ui->buttonBox, SIGNAL(accepted()), this, SLOT(close()));
168 }
169 connect(ui->buttonBox, SIGNAL(rejected()), this, SLOT(close()));
170 connect(&KernelWrapper::GetInstance(), SIGNAL(ClassCreated(QString)), this, SLOT(UpdateClassCombo()));
171 connect(&KernelWrapper::GetInstance(), SIGNAL(ClassUpdated(QString)), this, SLOT(ClassUpdated(QString)));
172}
173
174void
176{
177 bool changed = false;
178 QString RelationshipName = ui->RelationshipNameLineEdit->text();
179 QString RelationshipType = ui->RelationshipTypeComboBox->currentText();
180 QString RelationshipDescription = ui->RelationshipDescriptionTextEdit->toPlainText();
181
182 bool IsComposite;
183
184 if (ui->IsCompositeCombo->currentIndex() == 0) {
185 IsComposite = true;
186 } else {
187 IsComposite = false;
188 }
189
190 bool IsExclusive;
191
192 if (ui->IsExclusiveCombo->currentIndex() == 0) {
193 IsExclusive = true;
194 } else {
195 IsExclusive = false;
196 }
197
198 bool IsDependent;
199
200 if (ui->IsDependentCombo->currentIndex() == 0) {
201 IsDependent = true;
202 } else {
203 IsDependent = false;
204 }
205
206 OksRelationship::CardinalityConstraint RelationshipHighCardinality;
207 OksRelationship::CardinalityConstraint RelationshipLowCardinality;
208
209 if (ui->HighCcCombo->currentIndex() == 0)
210 RelationshipHighCardinality = OksRelationship::CardinalityConstraint::Zero;
211 else if (ui->HighCcCombo->currentIndex() == 1)
212 RelationshipHighCardinality = OksRelationship::CardinalityConstraint::One;
213 else {
214 RelationshipHighCardinality = OksRelationship::CardinalityConstraint::Many;
215 }
216
217 if (ui->LowCcCombo->currentIndex() == 0)
218 RelationshipLowCardinality = OksRelationship::CardinalityConstraint::Zero;
219 else if (ui->LowCcCombo->currentIndex() == 1)
220 RelationshipLowCardinality = OksRelationship::CardinalityConstraint::One;
221 else {
222 RelationshipLowCardinality = OksRelationship::CardinalityConstraint::Many;
223 }
224
225 if (RelationshipName != QString::fromStdString(SchemaRelationship->get_name())) {
227 SchemaClass, SchemaRelationship, RelationshipName.toStdString());
228 changed = true;
229 }
230
231 if (RelationshipType != QString::fromStdString(SchemaRelationship->get_type())) {
233 SchemaClass, SchemaRelationship, RelationshipType.toStdString());
234 changed = true;
235 }
236
237 if (RelationshipDescription != QString::fromStdString(SchemaRelationship->get_description())) {
239 SchemaClass, SchemaRelationship, RelationshipDescription.toStdString());
240 changed = true;
241 }
242
243 if (SchemaRelationship->get_is_composite() != IsComposite) {
245 changed = true;
246 }
247
248 if (SchemaRelationship->get_is_exclusive() != IsExclusive) {
250 changed = true;
251 }
252
253 if (SchemaRelationship->get_is_dependent() != IsDependent) {
255 changed = true;
256 }
257
258 if (RelationshipHighCardinality != SchemaRelationship->get_high_cardinality_constraint()) {
260 SchemaClass, SchemaRelationship, RelationshipHighCardinality);
261 changed = true;
262 }
263
264 if (RelationshipLowCardinality != SchemaRelationship->get_low_cardinality_constraint()) {
266 SchemaClass, SchemaRelationship, RelationshipLowCardinality);
267 changed = true;
268 }
269
270 if (changed) {
271 emit RebuildModel();
272 }
273
274 close();
275}
276
277void
279{
280 if (ui->RelationshipNameLineEdit->text().isEmpty()) {
281 QMessageBox::warning(0, "Schema editor", QString("Please Provide a name for the relationship !"));
282 return;
283 }
284
285 QString RelationshipName = ui->RelationshipNameLineEdit->text();
286 QString RelationshipType = ui->RelationshipTypeComboBox->currentText();
287 QString RelationshipDescription = ui->RelationshipDescriptionTextEdit->toPlainText();
288
289 bool IsComposite;
290
291 if (ui->IsCompositeCombo->currentIndex() == 0) {
292 IsComposite = true;
293 } else {
294 IsComposite = false;
295 }
296
297 bool IsExclusive;
298
299 if (ui->IsExclusiveCombo->currentIndex() == 0) {
300 IsExclusive = true;
301 } else {
302 IsExclusive = false;
303 }
304
305 bool IsDependent;
306
307 if (ui->IsDependentCombo->currentIndex() == 0) {
308 IsDependent = true;
309 } else {
310 IsDependent = false;
311 }
312
313 OksRelationship::CardinalityConstraint RelationshipHighCardinality;
314 OksRelationship::CardinalityConstraint RelationshipLowCardinality;
315
316 if (ui->HighCcCombo->currentIndex() == 0)
317 RelationshipHighCardinality = OksRelationship::CardinalityConstraint::Zero;
318 else if (ui->HighCcCombo->currentIndex() == 1)
319 RelationshipHighCardinality = OksRelationship::CardinalityConstraint::One;
320 else {
321 RelationshipHighCardinality = OksRelationship::CardinalityConstraint::Many;
322 }
323
324 if (ui->LowCcCombo->currentIndex() == 0)
325 RelationshipLowCardinality = OksRelationship::CardinalityConstraint::Zero;
326 else if (ui->LowCcCombo->currentIndex() == 1)
327 RelationshipLowCardinality = OksRelationship::CardinalityConstraint::One;
328 else {
329 RelationshipLowCardinality = OksRelationship::CardinalityConstraint::Many;
330 }
331
333 RelationshipName.toStdString(),
334 RelationshipDescription.toStdString(),
335 RelationshipType.toStdString(),
336 IsComposite,
337 IsExclusive,
338 IsDependent,
339 RelationshipLowCardinality,
340 RelationshipHighCardinality);
341 emit RebuildModel();
342
343 if (GraphScene)
345 QString::fromStdString(SchemaClass->get_name()), ui->RelationshipTypeComboBox->currentText(), RelationshipName);
346
347 close();
348}
349
350void
352{
353 if (UsedNew) {
355 } else {
356 ParseToSave();
357 }
358}
359
360void
362{
363 QStringList ClassList;
365 ui->RelationshipTypeComboBox->clear();
366 ui->RelationshipTypeComboBox->addItems(ClassList);
367 ui->RelationshipTypeComboBox->setCurrentIndex(
368 ui->RelationshipTypeComboBox->findData(QString::fromStdString(SchemaRelationship->get_type()), Qt::DisplayRole));
369}
void PushSetIsCompositeRelationshipCommand(dunedaq::oks::OksClass *Class, dunedaq::oks::OksRelationship *Relationship, bool Value)
void GetClassListString(QStringList &ClassListString) const
static KernelWrapper & GetInstance()
void PushSetHighCcRelationshipCommand(dunedaq::oks::OksClass *Class, dunedaq::oks::OksRelationship *Relationship, dunedaq::oks::OksRelationship::CardinalityConstraint NewCardinality)
void PushSetIsDependentRelationshipCommand(dunedaq::oks::OksClass *Class, dunedaq::oks::OksRelationship *Relationship, bool Value)
void PushAddRelationship(dunedaq::oks::OksClass *Class, std::string Name, std::string Description, std::string Type, bool Composite, bool Exclusive, bool Dependent, dunedaq::oks::OksRelationship::CardinalityConstraint LowCc, dunedaq::oks::OksRelationship::CardinalityConstraint HighCc)
void PushSetIsExclusiveRelationshipCommand(dunedaq::oks::OksClass *Class, dunedaq::oks::OksRelationship *Relationship, bool Value)
void PushSetClassTypeRelationshipCommand(dunedaq::oks::OksClass *Class, dunedaq::oks::OksRelationship *Relationship, std::string ClassType)
void PushSetLowCcRelationshipCommand(dunedaq::oks::OksClass *Class, dunedaq::oks::OksRelationship *Relationship, dunedaq::oks::OksRelationship::CardinalityConstraint NewCardinality)
bool IsFileWritable(const std::string &FileName) const
void PushSetDescriptionRelationshipCommand(dunedaq::oks::OksClass *Class, dunedaq::oks::OksRelationship *Relationship, std::string Description)
void PushSetNameRelationshipCommand(dunedaq::oks::OksClass *Class, dunedaq::oks::OksRelationship *Relationship, std::string Name)
Relationship commands.
dbse::Ui::SchemaRelationshipEditor * ui
void MakeGraphConnection(QString ClassName1, QString ClassName2, QString RelationshipName)
SchemaRelationshipEditor(dunedaq::oks::OksClass *Class, dunedaq::oks::OksRelationship *Relationship, QWidget *parent=nullptr)
void keyPressEvent(QKeyEvent *event) override
dunedaq::oks::OksRelationship * SchemaRelationship
The OKS class.
Definition class.hpp:223
const std::string & get_name() const noexcept
Definition class.hpp:374
OksFile * get_file() const noexcept
Definition class.hpp:352
const std::string & get_full_file_name() const
Definition file.hpp:528
const std::string & get_name() const noexcept