DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
CreateDatabaseWidget.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: no.
5
7#include <QFileDialog>
8#include <QMessageBox>
11#include "dbe/StyleUtility.hpp"
15#include "conffwk/Schema.hpp"
16#include "dbe/Exceptions.hpp"
17#include "dbe/FileInfo.hpp"
18#include "dbe/messenger.hpp"
19
20using namespace dunedaq::conffwk;
21
22dbe::CreateDatabaseWidget::CreateDatabaseWidget(QWidget* parent, bool Include, const QString& CreateDir)
23 : QWidget(parent)
24 , DirToCreate(CreateDir)
25 , CreateToInclude(Include)
26{
27 setupUi(this);
28
29 connect(SchemaButton, SIGNAL(clicked()), this, SLOT(DefineSchema()), Qt::UniqueConnection);
30 connect(SelectButton, SIGNAL(clicked()), this, SLOT(DefineDatabaseFile()), Qt::UniqueConnection);
31
32 if (!CreateToInclude) {
33 connect(CreateDatabaseButton, SIGNAL(clicked()), this, SLOT(CreateDatabaseFileLoad()), Qt::UniqueConnection);
34 connect(
35 CreateNoLoadDatabaseButton, SIGNAL(clicked()), this, SLOT(CreateDatabaseFileNoLoad()), Qt::UniqueConnection);
36 } else {
37 connect(CreateDatabaseButton, SIGNAL(clicked()), this, SLOT(CreateDatabaseFileInclude()), Qt::UniqueConnection);
38 CreateDatabaseButton->setText("Create Database File");
39 CreateNoLoadDatabaseButton->hide();
40 }
41
42 m_instructions->setText("Select schema files and define new database file. Database must contain at least one schema "
43 "file, other includes may be added later via a File info window.");
44 CreateDatabaseButton->setDisabled(true);
45 CreateNoLoadDatabaseButton->setDisabled(true);
46
47 DatabaseName->setReadOnly(true);
48}
49
50void
52{
53 auto fd =
54 new QFileDialog(this, tr("Select Schema File"), FileInfo::get_schema_path(), tr("XML schema files (*.schema.xml)"));
55 fd->setFileMode(QFileDialog::ExistingFile);
56 fd->setViewMode(QFileDialog::Detail);
57 fd->setAcceptMode(QFileDialog::AcceptOpen);
58 fd->setSidebarUrls(FileInfo::get_path_urls());
59 if (!(fd->exec() == QDialog::Accepted)) {
60 return;
61 }
62 FileInfo::set_schema_path(fd->directory().path());
63
64 auto files = fd->selectedFiles();
65 for (auto file : files) {
66 QFileInfo SchemaFile = QFileInfo(file);
67 if (!SchemaFile.isFile()) {
68 m_instructions->setPalette(StyleUtility::AlertStatusBarPallete);
69 m_instructions->setText(QString("The file is not accessible. Check before usage"));
70 } else {
71 if (SchemaFile.fileName().contains("schema")) {
72 schema_list->addItem(FileInfo::prune_path(file));
73 } else {
74 m_instructions->setPalette(StyleUtility::AlertStatusBarPallete);
75 m_instructions->setText(QString("The file %1 is not a schema file").arg(SchemaFile.absoluteFilePath()));
76 }
77 }
78 }
79
80 if (schema_list->count() > 0 && !DatabaseName->text().isEmpty()) {
81 CreateDatabaseButton->setEnabled(true);
82 CreateNoLoadDatabaseButton->setEnabled(true);
83 }
84}
85
86void
88{
89 QString Dir;
90
91 QString path = FileInfo::get_data_path().append("/NewDatabaseFile.data.xml");
92
93 auto fd = new QFileDialog(this, tr("Select new DB File"), path, tr("XML data files (*.data.xml)"));
94 fd->setFileMode(QFileDialog::AnyFile);
95 fd->setViewMode(QFileDialog::Detail);
96 fd->setAcceptMode(QFileDialog::AcceptSave);
97 fd->setSidebarUrls(FileInfo::get_path_urls());
98 if (!(fd->exec() == QDialog::Accepted)) {
99 return;
100 }
101 FileInfo::set_data_path(fd->directory().path());
102 auto files = fd->selectedFiles();
103
104 DatabaseFile = QFileInfo(files.at(0));
105
106 DatabaseName->setText(DatabaseFile.absoluteFilePath());
107
108 if (schema_list->count() > 0) {
109 CreateDatabaseButton->setEnabled(true);
110 CreateNoLoadDatabaseButton->setEnabled(true);
111 }
112}
113
114std::list<std::string>
116{
117 std::list<std::string> includes;
118
119 for (int row = 0; row < schema_list->count(); ++row) {
120 auto item = schema_list->item(row)->text();
121 includes.push_back(item.toStdString());
122 }
123 return includes;
124}
125
126bool
128{
129 Configuration db("oksconflibs");
130 try {
131 const std::string DatabaseName = DatabaseFile.absoluteFilePath().toStdString();
132 db.create(DatabaseName, get_includes());
133 db.commit();
134 } catch (dunedaq::conffwk::Exception const& ex) {
135 FAIL("Database creation failure", dbe::config::errors::parse(ex).c_str());
136 return false;
137 }
138
139 QMessageBox::information(
140 0, tr("DBE"), QString::fromStdString("The Database was created.\n" + extra_text), QMessageBox::Ok);
141 return true;
142}
143void
145{
146 if (create_database_file("Now the DB will be loaded into the Editor!\n")) {
147 emit CanLoadDatabase(DatabaseFile.absoluteFilePath());
148 close();
149 }
150}
151
152void
159
160void
162{
163 if (create_database_file("")) {
164 emit CanIncludeDatabase(DatabaseFile.absoluteFilePath());
165 close();
166 }
167}
void CanLoadDatabase(const QString &DatabasePath)
std::list< std::string > get_includes()
void CanIncludeDatabase(const QString &DatabasePath)
bool create_database_file(std::string extra_text)
CreateDatabaseWidget(QWidget *parent=nullptr, bool Include=false, const QString &CreateDir=QString())
static QList< QUrl > get_path_urls()
Definition FileInfo.cpp:108
static QString prune_path(QString file)
Definition FileInfo.cpp:66
static void set_schema_path(const QString &path)
Definition FileInfo.hpp:41
static QString get_data_path()
Definition FileInfo.hpp:40
static QString get_schema_path()
Definition FileInfo.hpp:39
static void set_data_path(const QString &path)
Definition FileInfo.hpp:42
static QPalette AlertStatusBarPallete
Defines base class for cache of template objects.
void create(const std::string &at, const std::string &class_name, const std::string &id, ConfigObject &object)
Create new object by class name and object id.
void commit(const std::string &log_message="")
Commit database changes.
conffwk entry point
#define FAIL(...)
std::string const parse(ers::Issue const &)