diff --git a/LibServer/Systems/processingsystem.cpp b/LibServer/Systems/processingsystem.cpp index 43a499b..4a3a084 100644 --- a/LibServer/Systems/processingsystem.cpp +++ b/LibServer/Systems/processingsystem.cpp @@ -231,12 +231,15 @@ void ProcessingSystem::processingClientDeAutorization(QString login) void ProcessingSystem::processingCFIUpdate(QByteArray array) { cfiController->updateCfiXML(array); - cfiController->lockAccessToCfiXML(); - cfiController->unLockAccessToCfiXML(); + + cfiController->lockAccessToCfiXML(); QByteArray result; QString path = updateController->getPathAdditionalFile(cfiListFileName); Tools::loadFileXMLtoByteArray(path,result); + + cfiController->unLockAccessToCfiXML(); + commonClientServer->sendXmlAnswer(result); } diff --git a/LibServer/cficontroller/cficontroller.cpp b/LibServer/cficontroller/cficontroller.cpp index 5deeb6f..3a8a6a1 100644 --- a/LibServer/cficontroller/cficontroller.cpp +++ b/LibServer/cficontroller/cficontroller.cpp @@ -71,7 +71,7 @@ bool CfiController::updateCfiXML(const QByteArray &array) if(!parsingCfiXML_DOM(docCfiListDOM_New, mapCfiObjects_New)) return false; - if(!merge2map(mapCfiObjects_Orig, mapCfiObjects_New)) + if(!merge2map_single(mapCfiObjects_Orig, mapCfiObjects_New)) return false; return saveNewCfiListFile(mapCfiObjects_Orig); @@ -140,6 +140,7 @@ bool CfiController::parsingCfiXML_DOM(QDomDocument &domDoc, QMap &mapCfiObjects_orig, QMap &mapCfiObjects_new) +bool CfiController::merge2map_commonList(QMap &mapCfiObjects_orig, QMap &mapCfiObjects_new) { //Проверка на удаление for(CfiObject cfiObj : mapCfiObjects_orig) @@ -248,6 +249,64 @@ bool CfiController::merge2map(QMap &mapCfiObjects_orig, QMap return true; } +bool CfiController::merge2map_single(QMap &mapCfiObjects_orig, QMap &mapCfiObjects_new) +{ + //Замена, Добавление, Удаление + for(CfiObject cfiObj : mapCfiObjects_new) + { + QString status = cfiObj.getStatus(); + QString guid = cfiObj.getGuid(); + + if(status == "new") + { + if(mapCfiObjects_orig.contains(guid)) + {//Такой есть! + QString msg = "CfiController: [status - new] guid cfiObj already exists!"; + qDebug() << msg; + Logger::instance().log(msg, LogLevel::DEBUG); + } + else + { + cfiObj.setStatus("accepted"); + cfiObj.resetStatusInDomElement(); + mapCfiObjects_orig.insert(guid, cfiObj); + } + } + else if(status == "deleted") + { + if(mapCfiObjects_orig.contains(guid)) + { + mapCfiObjects_orig.take(guid); + } + else + { + QString msg = "CfiController: [status - deleted] guid cfiObj does not exist!"; + qDebug() << msg; + Logger::instance().log(msg, LogLevel::DEBUG); + } + } + else if(status == "edited") + { + if(mapCfiObjects_orig.contains(guid)) + { + mapCfiObjects_orig.take(guid); + + cfiObj.setStatus("accepted"); + cfiObj.resetStatusInDomElement(); + mapCfiObjects_orig.insert(guid, cfiObj); + } + else + { + QString msg = "CfiController: [status - edited] guid cfiObj does not exist!"; + qDebug() << msg; + Logger::instance().log(msg, LogLevel::DEBUG); + } + } + } + + return true; +} + bool CfiController::saveNewCfiListFile(QMap &mapCfiObjects) { QDomDocument commonDOM; diff --git a/LibServer/cficontroller/cficontroller.h b/LibServer/cficontroller/cficontroller.h index 4596668..20043e6 100644 --- a/LibServer/cficontroller/cficontroller.h +++ b/LibServer/cficontroller/cficontroller.h @@ -13,6 +13,7 @@ class CfiController : public QObject public: explicit CfiController(UpdateController* updateController, QObject *parent = nullptr); ~CfiController(); + public: void lockAccessToCfiXML(); void unLockAccessToCfiXML(); @@ -36,7 +37,9 @@ private: bool parsingCfiXML_DOM(QDomDocument& domDoc, QMap& mapCfiObjects); - bool merge2map(QMap& mapCfiObjects_orig, QMap& mapCfiObjects_new); + bool merge2map_commonList(QMap& mapCfiObjects_orig, QMap& mapCfiObjects_new); + + bool merge2map_single(QMap& mapCfiObjects_orig, QMap& mapCfiObjects_new); bool saveNewCfiListFile(QMap& mapCfiObjects); diff --git a/LibServer/cficontroller/cfiobject.cpp b/LibServer/cficontroller/cfiobject.cpp index cd4fcee..b4cbc6d 100644 --- a/LibServer/cficontroller/cfiobject.cpp +++ b/LibServer/cficontroller/cfiobject.cpp @@ -89,3 +89,18 @@ void CfiObject::resetIsChangedInDomElement() { domElement.setAttribute("isChanged", "False"); } + +void CfiObject::resetStatusInDomElement() +{ + domElement.setAttribute("status", "accepted"); +} + +QString CfiObject::getStatus() const +{ + return status; +} + +void CfiObject::setStatus(const QString &value) +{ + status = value; +} diff --git a/LibServer/cficontroller/cfiobject.h b/LibServer/cficontroller/cfiobject.h index 89d08e6..8fb472b 100644 --- a/LibServer/cficontroller/cfiobject.h +++ b/LibServer/cficontroller/cfiobject.h @@ -67,9 +67,14 @@ public: void setDomElement(const QDomElement &value); void resetIsChangedInDomElement(); + void resetStatusInDomElement(); + + QString getStatus() const; + void setStatus(const QString &value); private: QString guid; + QString status; bool isChanged; QString cfiName; QString cfi;