summaryrefslogtreecommitdiffstats
path: root/src/ConfigBase.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/ConfigBase.cpp')
-rw-r--r--src/ConfigBase.cpp207
1 files changed, 0 insertions, 207 deletions
diff --git a/src/ConfigBase.cpp b/src/ConfigBase.cpp
deleted file mode 100644
index ce4bcc0..0000000
--- a/src/ConfigBase.cpp
+++ /dev/null
@@ -1,207 +0,0 @@
-#include "CRSMConfig.hpp"
-
-#include <QFile>
-
-void ConfigBase::addConfigValue(QString name, ConfigValueBase* value)
-{
- configValues[name] = value;
-}
-
-void ConfigBase::setConfigValue(const QString &name, const QString &value)
-{
- ConfigValueBase& configValue = getConfigValue(name);
- configValue.setValue(Util::unescape(value));
-}
-
-QString ConfigBase::getConfigValueLine(const QString &name)
-{
- if(configValues.contains(name))
- {
- ConfigValueBase& value = *configValues[name];
- switch(value.type())
- {
- case ConfigValueType::Map:
- {
- QString ret;
- const QMap<QString, QString>& values = (dynamic_cast<ConfigValueMap*>(&value))->getValues();
- foreach(const QString& mapKey, values.keys())
- {
- ret += name + "[" + Util::escape(mapKey, '\\', "]") + "]" + " = " + Util::escape(values.value(mapKey)) + "\n";
- }
- return ret;
- break;
- }
- case ConfigValueType::List:
- {
- QString ret;
- foreach(const QString& val, (dynamic_cast<ConfigValueList*>(&value))->getValues())
- {
- ret += name + " += " + Util::escape(val) + "\n";
- }
- return ret;
- break;
- }
- default:
- return name + " = " + Util::escape(value.value()) + "\n";
- }
- }
- else
- {
- throw ConfigException("Unknown config value \"" + name.toStdString() + "\"");
- }
-}
-
-void ConfigBase::addConfigListEntry(const QString &name, const QString &value)
-{
- ConfigValueBase& configValue = getConfigValue(name);
- if(configValue.type() != ConfigValueType::List)
- {
- throw ConfigException("Cannot add a list entry to a non-list-config value \"" + name.toStdString() + "\"");
- }
- ((ConfigValueList*)&configValue)->append(Util::unescape(value));
-}
-
-void ConfigBase::removeConfigMapListEntry(const QString &name, const QString &value)
-{
- ConfigValueBase& configValue = getConfigValue(name);
- if(configValue.type() == ConfigValueType::List)
- {
- ((ConfigValueList*)&configValue)->remove(Util::unescape(value));
- }
- else if(configValue.type() == ConfigValueType::Map)
- {
- ((ConfigValueMap*)&configValue)->remove(Util::unescape(value));
- }
- else
- {
- throw ConfigException("Cannot remove a list entry from a value which is neither a list nor a map \"" + name.toStdString() + "\"");
- }
-}
-
-void ConfigBase::setConfigMapValue(const QString &name, const QString &key, const QString &value)
-{
- ConfigValueBase& configValue = getConfigValue(name);
- if(configValue.type() != ConfigValueType::Map)
- {
- throw ConfigException("Cannot set a map value on a non-map-config value \"" + name.toStdString() + "\"");
- }
- ((ConfigValueMap*)&configValue)->setKeyValue(Util::unescape(key), Util::unescape(value));
-}
-
-ConfigValueBase& ConfigBase::getConfigValue(const QString& name)
-{
- if(!configValues.contains(name))
- {
- throw ConfigException("Unknown config value \"" + name.toStdString() + "\"");
- }
- else
- {
- return *configValues[name];
- }
-}
-
-QString ConfigBase::read(const QString &fileName, bool writeDefault)
-{
- curFileName = fileName;
- QString ret = "";
-
- QFile config(fileName);
- if(!config.exists())
- {
- if(writeDefault)
- {
- if(write(fileName))
- {
- return fileName + ": The config-file did not exist, a new one with default values has been created.\n";
- }
- else
- {
- return fileName + ": The config-file did not exist, a new one could not be created.\n";
- }
- }
- else
- {
- return ret;
- }
- }
- else if(config.open(QIODevice::ReadOnly | QIODevice::Text))
- {
- QString line;
- for(size_t lineNr = 1; !config.atEnd(); ++lineNr)
- {
- try
- {
- line = config.readLine().trimmed();
- if(!line.isEmpty())
- {
- setConfigLine(line);
- }
- }
- catch(ConfigException e)
- {
- ret += fileName + ":" + QString::number(lineNr) + ": " + e.what() + "\n";
- }
- }
- }
- else
- {
- return fileName + ": The config-file could not be read.\n";
- }
-
- return ret;
-}
-
-bool ConfigBase::write(QString fileName)
-{
- if(fileName.isEmpty())
- {
- fileName = curFileName;
- }
- if(fileName.isEmpty())
- {
- return false;
- }
- QFile config(fileName);
- if(config.open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Truncate))
- {
- foreach(const QString& key, configValues.keys())
- {
- config.write(getConfigValueLine(key).toUtf8());
- }
-
- return true;
- }
- else
- {
- return false;
- }
-}
-
-void ConfigBase::setConfigLine(const QString &line)
-{
- static QRegExp valueExp(R"(^([^=]+)=(.*)$)");
- static QRegExp listExp(R"(^([^=]+)\+=(.*)$)");
- static QRegExp listMapRemoveExp(R"(^([^=]+)\-=(.*)$)");
- static QRegExp mapExp(R"(^([^\[]+)\[((?:[^\]\\]|\\\]|\\\\)+)\]\s*=\s*(.*)$)");
-
- if(listExp.exactMatch(line))
- {
- addConfigListEntry(listExp.cap(1).trimmed(), listExp.cap(2).trimmed());
- }
- else if(listMapRemoveExp.exactMatch(line))
- {
- removeConfigMapListEntry(listMapRemoveExp.cap(1).trimmed(), listMapRemoveExp.cap(2).trimmed());
- }
- else if(mapExp.exactMatch(line))
- {
- setConfigMapValue(mapExp.cap(1).trimmed(), mapExp.cap(2).trimmed(), mapExp.cap(3).trimmed());
- }
- else if(valueExp.exactMatch(line))
- {
- setConfigValue(valueExp.cap(1).trimmed(), valueExp.cap(2).trimmed());
- }
- else
- {
- throw ConfigException("Syntax error: unkown syntax");
- }
-}