#include "dataparser.h" #include #include DataParser::DataParser(AssetsManager *assetManager,ProcessingSystem *processingSystem,QObject *parent) : QObject(parent) { this->processingSystem = processingSystem; this->assetsManager = assetManager; clientAnswer = new ClientAnswerParser; clientAnswer->initialize(this); dbAnswer = new DBAnswerParser; dbAnswer->initialize(this); processParser = new ProcessParser; processParser->initialize(processingSystem); mutex = new QMutex; if (!QDir(staticDataFolderName).exists()){ QDir().mkdir(staticDataFolderName); } qDebug() << "ParserThread: " << QThread::currentThreadId(); } QByteArray DataParser::xmlAnswer(QList listTag, QString elemUp1, QString elemUp2) { try { mutex->lock(); /* Открываем файл для Записи*/ QFile file(tempFile); file.open(QIODevice::WriteOnly); /* Создаем объект, с помощью которого осуществляется запись в файл */ QXmlStreamWriter xmlWriter(&file); xmlWriter.setAutoFormatting(true); // Устанавливаем автоформатирование текста xmlWriter.writeStartDocument(); // Запускаем запись в документ if(elemUp1 != "") xmlWriter.writeStartElement(elemUp1); // Записываем тег if(elemUp2 != "") xmlWriter.writeStartElement(elemUp2); // Записываем тег //Записываем все элементы foreach(SXmlAnswerTag tag, listTag) { xmlWriter.writeStartElement(tag.elementName); // Записываем тег // Записываем атрибуты foreach(SAttribute attr, tag.attr) xmlWriter.writeAttribute(attr.name, attr.value); xmlWriter.writeEndElement(); // Закрываем тег } if(elemUp1 != "") xmlWriter.writeEndElement(); // Закрываем тег if(elemUp1 != "") xmlWriter.writeEndElement(); // Закрываем тег /* Завершаем запись в документ*/ xmlWriter.writeEndDocument(); file.close(); // Закрываем файл QByteArray array; array = readTempFile(); mutex->unlock(); return array; } catch(const std::exception& e) { qDebug() << e.what(); return nullptr; } } bool DataParser::loadBlankXML(QString nameFile, QDomDocument *commonDOM) { QFile blankFile(nameFile); if (! blankFile.open(QFile::ReadOnly | QFile::Text)) { qDebug() << "loadBlankXML: Couldn't read the file: " + nameFile; return false; } commonDOM->setContent(blankFile.readAll()); blankFile.close(); return true; } bool DataParser::saveDOMtoXML(QString nameFile, QDomDocument *commonDOM) { QFile xmlOutFile(nameFile); if (!xmlOutFile.open(QFile::WriteOnly | QFile::Text)) { qDebug() << "saveDOMtoXML: Failed to write a file: " + nameFile; return false; } else { QTextStream outFile(&xmlOutFile); commonDOM->save(outFile, 4); xmlOutFile.close(); } return true; } QByteArray DataParser::readTempFile() { QByteArray array; QFile fileR(tempFile); if (!fileR.open(QFile::ReadOnly | QFile::Text)) { QString str = "Не удалось открыть файл"; qDebug() << "xmlAnswer: " << str; } else { array = fileR.readAll(); fileR.close(); } return array; } ClientAnswerParser *DataParser::ClientAnswer() const { return clientAnswer; } DBAnswerParser *DataParser::DbAnswer() const { return dbAnswer; } ProcessParser *DataParser::getProcessParser() const { return processParser; } DataParser::~DataParser() { }