#include "mainwindow.h" #include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); _model = new QStandardItemModel(0,1,this); ui->treeView->setModel(_model); hideWidgets(); } MainWindow::~MainWindow() { delete ui; } void MainWindow::readFile() { _model->clear(); QStandardItem *root = new QStandardItem("root:Root"); _model->appendRow(root); QDomDocument document; //load file QFile file(_fileName); if(file.open(QIODevice::ReadOnly | QIODevice::Text)) { document.setContent(&file); file.close(); } //read xml file QDomElement xmlroot = document.firstChildElement(); QDomNodeList Databases = xmlroot.elementsByTagName("Database"); for (int i = 0; i < Databases.count(); ++i) { QDomElement database= Databases.at(i).toElement(); _DBElementVector.append(database); _DBNameVector.append(database.attribute("name")); QStandardItem *databaseItem = new QStandardItem(QString("DB : %1").arg(database.attribute("name"))); //read tables QDomNodeList tables = database.elementsByTagName("Table"); for (int t = 0; t < tables.count(); ++t) { QDomElement table = tables.at(t).toElement(); QStandardItem *tableItem = new QStandardItem(QString("TBL : %1").arg(table.attribute("name"))); //read Field // QDomNodeList fields = table.elementsByTagName("Field"); // for (int f = 0; f < fields.count(); ++f) // { // QDomElement field = fields.at(f).toElement(); // QStandardItem *fieldItem = new QStandardItem(QString("FLD : %1").arg(field.attribute("name"))); //// "Name: "+field.attribute("name") + "; Type: " + field.attribute("type") + "; Allow Null: " + field.attribute("null") + "; Is Forign key:" + field.attribute("isforeignkey")); // tableItem->appendRow(fieldItem); // } databaseItem->appendRow(tableItem); } root->appendRow(databaseItem); } _xmlDoc = document; } void MainWindow::on_actionOpen_triggered() { _fileName = QFileDialog::getOpenFileName(this, tr("Open XML file"), "/home/", tr("Address XML (*.xml);;All Files (*)")); this->_xmlReader =new XMLReader(_fileName); readFile(); } MainWindow::eElementType MainWindow::getElementType(QModelIndex indInput) { auto dataSptd = indInput.data().toString().split(" : "); if(dataSptd.at(0) == "root") return MainWindow::eElementType::root; else if(dataSptd.at(0) == "DB") return MainWindow::eElementType::database; else if(dataSptd.at(0) == "TBL") return MainWindow::eElementType::table; else if(dataSptd.at(0) == "FLD") return MainWindow::eElementType::field; else return MainWindow::eElementType::unknown; } void MainWindow::on_treeView_doubleClicked(const QModelIndex &index) { //hideWidgets(); auto type = getElementType(index); switch (type) { case MainWindow::eElementType::root: { break; } case MainWindow::eElementType::database: { break; } case MainWindow::eElementType::table : { auto database = index.parent(); _lastDBElement.clear(); for (int i = 0; i < _xmlDoc.firstChild().childNodes().count(); ++i) { if(_xmlDoc.firstChild().childNodes().at(i).toElement().attribute("name") == database.data().toString().split(" : ").at(1)) { _lastDBElement = _xmlDoc.firstChild().childNodes().at(i).toElement(); break; } } _xmlReader->getDBTableList(_lastDBElement.attribute("name")); for (int i = 0; i < _lastDBElement.childNodes().count(); ++i) { auto tblItem = _lastDBElement.childNodes().at(i); auto elem = tblItem.toElement(); if(elem.attribute("name") == index.data().toString().split(" : ").at(1)) { _fieldElemensVector.clear(); _lastTableElement = elem; _fieldElemensVector = _xmlReader->getFieldElements(elem.attribute("name")); qDebug() << _fieldElemensVector.count(); qDebug() << elem.attribute("name"); qDebug() << _lastTableElement.attribute("name"); } } ui->pushButton->setText("Create Init"); ui->pushButton->show(); break; } } } void MainWindow::on_pushButton_clicked() { qDebug() << _lastTableElement.attribute("name"); hideWidgets(); if(_xmlInitDataDoc.isNull()) { //create root element _rootInitData = _xmlInitDataDoc.createElement("Root"); _xmlInitDataDoc.appendChild(_rootInitData); } if(! hasDatabaseChild(_rootInitData,_lastDBElement.attribute("name"))) { //create database element _lastDBElementInitData = _xmlInitDataDoc.createElement("Database"); _lastDBElementInitData.setAttribute("name",_lastDBElement.attribute("name")); _rootInitData.appendChild(_lastDBElementInitData); } else { auto dbs = _rootInitData.elementsByTagName("Database"); for (int i = 0; i < dbs.count(); ++i) { if(dbs.at(i).toElement().attribute("name") == _lastDBElement.attribute("name")) { _lastDBElementInitData = dbs.at(i).toElement(); break; } } } qDebug() << _lastTableElement.attribute("name"); if(!hasTableChild(_lastDBElementInitData,_lastTableElement.attribute("name"))) { _lastTableElementInitData = _xmlInitDataDoc.createElement("Table"); qDebug()<<_lastTableElement.attribute("name"); _lastTableElementInitData.setAttribute("name", _lastTableElement.attribute("name")); _lastDBElementInitData.appendChild(_lastTableElementInitData); } else { auto tbls = _lastDBElementInitData.elementsByTagName("Table"); for (int i = 0; i < tbls.count(); ++i) { if(tbls.at(i).toElement().attribute("name") == _lastTableElement.attribute("name")) { _lastTableElementInitData = tbls.at(i).toElement(); break; } } } _lastEntityElementInitData = _xmlInitDataDoc.createElement("entity"); _lastTableElementInitData.appendChild(_lastEntityElementInitData); _fieldIndex = 0; initUI(); } void MainWindow::initUI() { hideWidgets(); ui->label_3->setText("put data into line Edit."); ui->label_3->show(); auto fieldElement = _fieldElemensVector.at(_fieldIndex).toElement(); ui->label_4->setText(fieldElement.attribute("name")); ui->label_4->show(); // if(fieldElement.attribute("type").toLower().contains("varchar")) // { // ui->label_2->show(); // ui->comboBox->itemData(0); // ui->comboBox->show(); // } ui->lineEdit->clear(); ui->lineEdit->show(); ui->label->show(); if(_fieldIndex < _fieldElemensVector.count()-1) { ui->pushButton_3->setText("Next Field"); ui->pushButton_3->show(); } else if(_fieldIndex == _fieldElemensVector.count() - 1) { ui->pushButton_3->setText("Done"); ui->pushButton_3->show(); } } bool MainWindow::hasDatabaseChild(QDomElement xmlRoot, QString DBName) { auto dbs = xmlRoot.elementsByTagName("Database"); for (int i = 0; i < dbs.count(); ++i) { if(dbs.at(i).toElement().attribute("name") == DBName) return true; } return false; } bool MainWindow::hasTableChild(QDomElement database, QString tableName) { auto tbls = database.elementsByTagName("Table"); for (int i = 0; i < tbls.count(); ++i) { if(tbls.at(i).toElement().attribute("name") == tableName) return true; } return false; } void MainWindow::hideWidgets() { ui->label->hide(); ui->label_2->hide(); // ui->label_3->hide(); ui->label_4->hide(); ui->pushButton->hide(); ui->pushButton_2->hide(); ui->pushButton_3->hide(); ui->lineEdit->hide(); ui->comboBox->hide(); } void MainWindow::on_pushButton_3_clicked() { auto sourceField = _fieldElemensVector.at(_fieldIndex).toElement(); _lastFieldElementInitData = _xmlInitDataDoc.createElement("Field"); _lastFieldElementInitData.setAttribute("name", sourceField.attribute("name")); _lastFieldElementInitData.setAttribute("type", sourceField.attribute("type")); _lastFieldElementInitData.setAttribute("value",ui->lineEdit->text()); _lastEntityElementInitData.appendChild(_lastFieldElementInitData); _fieldIndex++; if(_fieldIndex < _fieldElemensVector.count()) { initUI(); } else { hideWidgets(); } } void MainWindow::writeFile() { _fileName = QFileDialog::getSaveFileName(this); QFile savefile(_fileName); if(!savefile.open(QIODevice::WriteOnly | QIODevice::Text)) { qDebug()<< "Ops! can not create file"; } QTextStream stream(&savefile); stream<<_xmlInitDataDoc.toString(); savefile.close(); } void MainWindow::on_actionSave_triggered() { writeFile(); }