Skip to content

Configuration Utility

Jan Tagscherer edited this page Nov 30, 2015 · 2 revisions

Konfiguration von Kronos

Konstanten und globale Konfigurationen die sich zur Laufzeit nicht ändern sollten in eine externe Konfigurationsdatei ausgelagert werden. Für den Zugriff auf derartige Daten stellt das Configuration Utility eine Schnittstelle bereit.

Konfigurationsdatei

Die aktuelle Konfiguration wird in der Datei res/configuration.json festgelegt. Die Daten sollen hierzu in einer sinnvollen Hierarchie abgelegt werden, die durch eine JSON-Objekt-Hierarchie abgebildet wird.

Eine beispielhafte Konfigurationsdatei sieht folgendermaßen aus:

{
  "globe": {
    "radius": 0.5,
    "label": "earth"
  },
  "visualizations": {
    "volume": {
      "earlyRayTermination": true
    }
  }
}

Schnittstelle

Um Werte aus der Konfigurationsdatei zu nutzen, muss das Configuration Utility importiert werden:

#include <Utils/Config/Configuration.hpp>

Daraufhin kann die folgende Schnittstelle verwendet werden:

bool Configuration::getInstance().hasKey(QString key);

QString Configuration::getInstance().getString(QString key);
bool Configuration::getInstance().getBoolean(QString key);
int Configuration::getInstance().getInteger(QString key);
double Configuration::getInstance().getDouble(QString key);
float Configuration::getInstance().getFloat(QString key);

Der Parameter key ist hierbei der Pfad durch die Objekthierarchie in der JSON-Datei zum jeweiligen Konfigurationsdatum, getrennt durch Punkte.

Beispiel

Da dies wahrscheinlich der einzig gelesene Abschnitt ist weil er die Überschrift "Beispiel" trägt wird hier kurz gezeigt, wie auf die Daten in der obigen JSON-Datei zugegriffen werden kann:

Configuration::getInstance().hasKey("globe.radius"); // true
Configuration::getInstance().getString("globe.label"); // QString("earth")
Configuration::getInstance().getDouble("globe.radius"); // 0.5
Configuration::getInstance().getBoolean("visualizations.volume.earlyRayTermination"); // true

Obwohl die JSON-Datei nur einmalig beim Programmstart eingelesen wird und der Zugriff auf Daten danach relativ effizient über eine QMap erfolgt sollten die obigen Methoden dennoch eher verwendet werden, um die Konfigurationsdaten nur einmal zu holen und dann in lokale Variablen zu speichern.