#pragma once #include "JDefines.h" #include "JTerminal.h" #include "JSys.h" #include "JFile.h" namespace Incart::Common { class JConfig { protected: static QVariantMap& Rgs() { // набор системных регистров static QVariantMap map; return map; } public: static QVariant getRg(QString key) { // нельзя прочитать несуществующий регистр if(!Rgs().contains(key)) { JTerminal(JCL_RED) << __PRETTY_FUNCTION__ << "parameter" << key << "absent"; JSys::abort(); } return Rgs()[key]; } static void addRg(QString key, const QVariantMap& jsonMap) { // нельзя добавлять существующий регистр if(Rgs().contains(key)) { JTerminal(JCL_RED) << __PRETTY_FUNCTION__ << "parameter" << key << "is already defined"; JSys::abort(); } Rgs()[key] = jsonMap[key]; JTerminal() << __PRETTY_FUNCTION__ << key << "=" << Rgs()[key]; } static void addRg(QString key, QVariant z) { // нельзя добавлять существующий регистр if(Rgs().contains(key)) { JTerminal(JCL_RED) << __PRETTY_FUNCTION__ << "parameter" << key << "is already defined"; JSys::abort(); } Rgs()[key] = z; JTerminal() << __PRETTY_FUNCTION__ << key << "=" << Rgs()[key]; } static void addRgs(QVariantMap& map) { // набор системных регистров for (QString key : map.keys()) { addRg(key, map[key]); } } static void priRgs() { // набор системных регистров for( QString key : Rgs().keys() ) { JTerminal() << key << "=" << Rgs()[key]; } } static void addRgs(int argc, char *argv[]) { // добавить аргументы программной строки в качестве регистров for( int i = 0; i < argc; i++ ) { QString key = "argc" + QString::number(i); addRg(key,QString(argv[i])); } } static QString& getDataFile(QString fname) { static QString full_fname; full_fname = JConfig::getRg("PatchToData").toString() + fname; return full_fname; } static bool load_config_file(QString key) { QString fname = JConfig::getRg("PatchToData").toString() + JConfig::getRg(key).toString(); return load_config_absfile(fname); } static bool load_config_absfile(QString fname) { if (!JFile::isFile(fname)) { JTerminal(JCL_RED) << __PRETTY_FUNCTION__ << "no file" << fname; return false; } QVariantMap jsonMap = JFile::readJsonMapFromFile(fname); JConfig::addRgs(jsonMap); return true; } static QList& getListOfMaps(QVariantList vlist) { static QList list; list.clear(); for( QVariant v : vlist ) { QVariantMap map(v.toMap()); list.append(map); } return list; } static QMap& getMapId(QVariantList vlist) { // создать map по id из списка объектов static QMap maps; maps.clear(); for( QVariant v : vlist ) { QVariantMap map(v.toMap()); int id = map["id"].toInt(); if( maps.contains(id) ) { JTerminal(JCL_RED) << __PRETTY_FUNCTION__ << "id is exists" << id; JSys::abort(); } JTerminal(JCL_GREEN) << __PRETTY_FUNCTION__ << id; maps[id] = map; } return maps; } static QList& getListNames(QVariantList vlist) { // создать list по name из списка объектов static QStringList names; names.clear(); for(QVariant v : vlist) { QVariantMap map(v.toMap()); names.append( map["name"].toString() ); } JTerminal(JCL_GREEN) << __PRETTY_FUNCTION__ << names; return names; } }; } // namespace Incart::Common