Advertisement
geirby

init_json_settings_by_cpp_template

Aug 5th, 2021 (edited)
242
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.27 KB | None | 0 0
  1. /* Template class for initialization different settings structs
  2. *  Ability to using in client class JS like syntax:
  3. *  auto settings = new ConceptSettings();
  4. *  qDebug() << settings.visibility.name << settings.visibility.status;
  5. */
  6.  
  7. #include "conceptsettings.hpp"
  8. //template QJsonObject ConceptSettings::saveJSettings<Sets>(Sets& );
  9. //template QJsonObject ConceptSettings::saveJSettings<VisibilitySettings>(VisibilitySettings& );
  10.  
  11. ConceptSettings::ConceptSettings(QJsonDocument cfconfJson)
  12. {
  13.   this->paramsJson = cfconfJson;
  14. }
  15.  
  16. ConceptSettings::ConceptSettings(QVariant& cfconfJson) : jsonRaw(fromJson(cfconfJson.toByteArray()))
  17. {
  18.     this->sets                  = this->loadSettings<Sets>();
  19.     this->visibility            = this->loadSettings<VisibilitySettings>();
  20.     this->labels                = this->loadSettings<Lables>();
  21.     this->general_settings      = this->loadSettings<GeneralSettings>();
  22.     this->export_format         = this->loadExportSettings<ExportFormat>();
  23.  
  24.     //DDE_DBG(cfconfJson);
  25.  
  26.     if(this->jsonRaw.isEmpty())
  27.         this->emptyJson = true;
  28. }
  29.  
  30. template<class U>
  31. U ConceptSettings::getSettings()
  32. {
  33.     U obj;
  34.     return obj;
  35. };
  36.  
  37. template<class T>
  38. T ConceptSettings::loadSettings()
  39. {
  40.     T obj;
  41.  
  42.     for(auto type : obj.types)
  43.     {
  44.         if(obj.mapSets[type])
  45.         {
  46.             *obj.mapSets[type] = this->jsonRaw[obj.name][type].toArray();
  47.         }
  48.     }
  49.     return obj;
  50. };
  51.  
  52.  
  53. template<class T>
  54. T ConceptSettings::loadExportSettings()
  55. {
  56.     T obj;
  57.     for(auto arr : this->jsonRaw[obj.name].toArray())
  58.     {
  59.         for(auto type : obj.types)
  60.         {
  61.             if(!arr.toObject()[type].toArray().isEmpty())
  62.             {
  63.                 obj.mapSets[type] = new QJsonArray(arr.toObject()[type].toArray());
  64.             }
  65.              obj.mapSchemas.insert(arr.toObject()["TYPE"].toString(), obj.mapSets);
  66.         }
  67.     }
  68.     return obj;
  69. };
  70.  
  71. template<typename T>
  72. QJsonObject ConceptSettings::saveJSettings(T& obj)
  73. {
  74.     QJsonObject json, jobj;
  75.     for(auto type : obj.types)
  76.     {
  77.          if(obj.mapSets[type])
  78.             json.insert(type, *obj.mapSets[type]);
  79.     }
  80.  
  81.     return json;
  82. };
  83.  
  84. QString ConceptSettings::toJsonStr()
  85. {
  86.     QJsonObject jset;
  87.     jset.insert(this->sets.name, this->saveJSettings<Sets>(this->sets));
  88.     jset.insert(this->visibility.name, this->saveJSettings<VisibilitySettings>(this->visibility));
  89.     jset.insert(this->labels.name, this->saveJSettings<Lables>(this->labels));
  90.  
  91.     return QJsonDocument(jset).toJson();
  92. }
  93.  
  94. void ConceptSettings::setValue(QString type, QString name, QString value)
  95. {
  96.     this->settings[type][name] = value;
  97. }
  98.  
  99. void ConceptSettings::setValue(QString type, QString name, QJsonArray value)
  100. {
  101.    this->settingsArr[type][name] = value;
  102. }
  103.  
  104. QJsonDocument* ConceptSettings::saveJsonFromArr()
  105. {
  106.     QJsonObject json;
  107.     QMapIterator<QString, QMap<QString, QJsonValue>> i(this->settingsArr);
  108.     while (i.hasNext()) {
  109.         i.next();
  110.         QJsonObject jsonb;
  111.         QMapIterator<QString, QJsonValue> ii(i.value());
  112.         while (ii.hasNext()) {
  113.             ii.next();
  114.             jsonb.insert(ii.key(), ii.value());
  115.         }
  116.         json.insert(i.key(), jsonb);
  117.     }
  118.     QJsonDocument* doc = new QJsonDocument(json);
  119.     return doc;
  120. }
  121.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement