#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); docsAnswer = new DocsAnswerParser; processParser = new ProcessParser; processParser->initialize(processingSystem); mutex = new QMutex; 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; } } 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; } DocsAnswerParser *DataParser::getDocsAnswerParser() const { return docsAnswer; } DataParser::~DataParser() { delete clientAnswer; delete dbAnswer; delete docsAnswer; delete processParser; delete mutex; }