mirror of
https://gitea.msk.dinamika-avia.ru/Constanta-Design/RRJServer.git
synced 2026-03-28 19:55:48 +03:00
139 lines
3.3 KiB
C++
139 lines
3.3 KiB
C++
#include "dataparser.h"
|
||
|
||
#include <QFile>
|
||
#include <QDomDocument>
|
||
|
||
DataParser::DataParser(ProcessingSystem *processingSystem,QObject *parent) :
|
||
QObject(parent)
|
||
{
|
||
qDebug() << "DataParser init thread ID " << QThread::currentThreadId();
|
||
|
||
this->processingSystem = processingSystem;
|
||
|
||
clientAnswer = new ClientAnswerParser;
|
||
clientAnswer->initialize(this);
|
||
|
||
dbAnswer = new DBAnswerParser;
|
||
dbAnswer->initialize(this);
|
||
|
||
docsAnswer = new DocsAnswerParser;
|
||
|
||
processParser = new ProcessParser;
|
||
processParser->initialize(processingSystem);
|
||
|
||
mutex = new QMutex;
|
||
}
|
||
|
||
|
||
|
||
QByteArray DataParser::xmlAnswer(QList<SXmlAnswerTag> 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;
|
||
}
|
||
|
||
|