Line data Source code
1 : /// Including QT Headers
2 : #include<QFileDialog>
3 : #include<QMessageBox>
4 : /// Including DBE
5 : #include"dbe/CreateDatabaseWidget.hpp"
6 : #include"dbe/StyleUtility.hpp"
7 : /// Including config headers
8 : #include "conffwk/ConfigObject.hpp"
9 : #include "conffwk/Configuration.hpp"
10 : #include "conffwk/Schema.hpp"
11 : #include "dbe/Exceptions.hpp"
12 : #include "dbe/messenger.hpp"
13 :
14 : using namespace dunedaq::conffwk;
15 :
16 0 : dbe::CreateDatabaseWidget::CreateDatabaseWidget ( QWidget * parent, bool Include,
17 0 : const QString & CreateDir )
18 : : QWidget ( parent ),
19 0 : StatusBar ( nullptr ),
20 0 : DirToCreate ( CreateDir ),
21 0 : CreateToInclude ( Include )
22 : {
23 0 : setupUi ( this );
24 :
25 0 : connect ( SchemaButton, SIGNAL ( clicked() ), this, SLOT ( DefineSchema() ),
26 : Qt::UniqueConnection );
27 0 : connect ( SelectButton, SIGNAL ( clicked() ), this, SLOT ( DefineDatabaseFile() ),
28 : Qt::UniqueConnection );
29 :
30 0 : if ( !CreateToInclude )
31 : {
32 0 : connect ( CreateDatabaseButton, SIGNAL ( clicked() ), this,
33 : SLOT ( CreateDatabaseFileLoad() ),
34 : Qt::UniqueConnection );
35 0 : connect ( CreateNoLoadDatabaseButton, SIGNAL ( clicked() ), this,
36 : SLOT ( CreateDatabaseFileNoLoad() ), Qt::UniqueConnection );
37 : }
38 : else
39 : {
40 0 : connect ( CreateDatabaseButton, SIGNAL ( clicked() ), this,
41 : SLOT ( CreateDatabaseFileInclude() ), Qt::UniqueConnection );
42 0 : CreateDatabaseButton->setText ( "Create Database File" );
43 0 : CreateNoLoadDatabaseButton->hide();
44 : }
45 :
46 0 : StatusBar = new QStatusBar ( StatusFrame );
47 0 : StatusBar->setSizeGripEnabled ( false );
48 0 : StatusFrame->setFrameStyle ( QFrame::NoFrame );
49 0 : StatusLayout->addWidget ( StatusBar );
50 :
51 0 : StatusBar->setAutoFillBackground ( true );
52 0 : StatusBar->showMessage ( "Select schema files and define new database file!" );
53 0 : CreateDatabaseButton->setDisabled ( true );
54 0 : CreateNoLoadDatabaseButton->setDisabled ( true );
55 :
56 0 : DatabaseName->setReadOnly ( true );
57 0 : }
58 :
59 0 : void dbe::CreateDatabaseWidget::DefineSchema()
60 : {
61 0 : QString SchemaFilePath = QFileDialog::getOpenFileName ( this, tr ( "Open Schema File" ),
62 0 : DirToCreate.append("./"),
63 0 : tr ( "XML files (*.xml)" ) );
64 0 : QFileInfo SchemaFile = QFileInfo ( SchemaFilePath );
65 :
66 0 : if ( !SchemaFile.isFile() )
67 : {
68 0 : StatusBar->setPalette ( StyleUtility::AlertStatusBarPallete );
69 0 : StatusBar->showMessage ( QString ( "The file is not accessible. Check before usage" ) );
70 : }
71 : else
72 : {
73 0 : if ( SchemaFile.fileName().contains ( "schema" ) ) SchemaCombo->addItem (
74 0 : SchemaFile.absoluteFilePath() );
75 : else
76 : {
77 0 : StatusBar->setPalette ( StyleUtility::AlertStatusBarPallete );
78 0 : StatusBar->showMessage (
79 0 : QString ( "The file %1 is not a schema file" ).arg ( SchemaFile.absoluteFilePath() ) );
80 : }
81 : }
82 0 : }
83 :
84 0 : void dbe::CreateDatabaseWidget::DefineDatabaseFile()
85 : {
86 0 : QString Dir;
87 :
88 0 : if ( DirToCreate.isEmpty() )
89 : {
90 0 : Dir = QString ( "./NewDatabaseFile.data.xml" );
91 : }
92 : else
93 : {
94 0 : Dir = DirToCreate.append ( "/NewDatabaseFile.data.xml" );
95 : }
96 :
97 0 : QString DatabaseFilePath = QFileDialog::getSaveFileName ( this,
98 0 : tr ( "Save to Database File" ),
99 : Dir,
100 0 : tr ( "XML files (*.xml)" ) );
101 0 : DatabaseFile = QFileInfo ( DatabaseFilePath );
102 :
103 0 : DatabaseName->setText ( DatabaseFile.absoluteFilePath() );
104 0 : CreateDatabaseButton->setEnabled ( true );
105 0 : CreateNoLoadDatabaseButton->setEnabled ( true );
106 0 : }
107 :
108 0 : void dbe::CreateDatabaseWidget::CreateDatabaseFileLoad()
109 : {
110 0 : Configuration db ( "oksconflibs" );
111 :
112 0 : try
113 : {
114 0 : std::list<std::string> Includes;
115 :
116 0 : for ( int i = 0; i < SchemaCombo->count(); ++i )
117 : {
118 0 : QString Item = SchemaCombo->itemText ( i );
119 0 : Includes.push_back ( Item.toStdString() );
120 0 : }
121 :
122 0 : const std::string DatabaseName = DatabaseFile.absoluteFilePath().toStdString();
123 0 : db.create ( DatabaseName, Includes );
124 0 : db.commit();
125 :
126 0 : QMessageBox::information (
127 0 : 0, tr ( "DBE" ),
128 0 : QString ( "Database was created.\nNow the DB will be loaded into the Editor!\n" ),
129 : QMessageBox::Ok );
130 0 : emit CanLoadDatabase ( DatabaseFile.absoluteFilePath() );
131 0 : close();
132 0 : }
133 0 : catch ( dunedaq::conffwk::Exception const & ex )
134 : {
135 0 : FAIL ( "Database creation failure", dbe::config::errors::parse ( ex ).c_str() );
136 0 : }
137 0 : }
138 :
139 0 : void dbe::CreateDatabaseWidget::CreateDatabaseFileNoLoad()
140 : {
141 0 : Configuration db ( "oksconflibs" );
142 :
143 0 : try
144 : {
145 0 : std::list<std::string> Includes;
146 :
147 0 : for ( int i = 0; i < SchemaCombo->count(); ++i )
148 : {
149 0 : QString Item = SchemaCombo->itemText ( i );
150 0 : Includes.push_back ( Item.toStdString() );
151 0 : }
152 :
153 0 : const std::string DatabaseName = DatabaseFile.absoluteFilePath().toStdString();
154 0 : db.create ( DatabaseName, Includes );
155 0 : db.commit();
156 :
157 0 : QMessageBox::information ( 0, tr ( "DBE" ), QString ( "The Database was created.\n" ),
158 : QMessageBox::Ok );
159 0 : close();
160 0 : }
161 0 : catch ( dunedaq::conffwk::Exception const & ex )
162 : {
163 0 : FAIL ( "Database creation failure", dbe::config::errors::parse ( ex ).c_str() );
164 0 : }
165 0 : }
166 :
167 0 : void dbe::CreateDatabaseWidget::CreateDatabaseFileInclude()
168 : {
169 0 : Configuration db ( "oksconflibs" );
170 :
171 0 : try
172 : {
173 0 : std::list<std::string> Includes;
174 :
175 0 : for ( int i = 0; i < SchemaCombo->count(); ++i )
176 : {
177 0 : QString Item = SchemaCombo->itemText ( i );
178 0 : Includes.push_back ( Item.toStdString() );
179 0 : }
180 :
181 0 : const std::string DatabaseName = DatabaseFile.absoluteFilePath().toStdString();
182 0 : db.create ( DatabaseName, Includes );
183 0 : db.commit();
184 :
185 0 : QMessageBox::information ( 0, tr ( "DBE" ), QString ( "The Database was created.\n" ),
186 : QMessageBox::Ok );
187 0 : emit CanIncludeDatabase ( DatabaseFile.absoluteFilePath() );
188 0 : close();
189 0 : }
190 0 : catch ( dunedaq::conffwk::Exception const & ex )
191 : {
192 0 : FAIL ( "Database creation error", dbe::config::errors::parse ( ex ).c_str() );
193 0 : }
194 0 : }
|