21 #include "realfactory.h"
22 #include "configurationnode.h"
23 #include "configurationparameters.h"
24 #include "parametersfileloadersaver.h"
25 #include "parametersettable.h"
26 #include "configurationexceptions.h"
33 QMap<QString, ConfigurationParameters::FileFormat>& ConfigurationParameters::getFormatsMap()
35 static QMap<QString, ConfigurationParameters::FileFormat> formatsMap;
40 QMap<QString, QString>& ConfigurationParameters::getFileExtensionsMap()
42 static QMap<QString, QString> fileExtensionsMap;
44 return fileExtensionsMap;
50 QMap<QString, FileFormat>::iterator it = getFormatsMap().find(format);
51 if (it != getFormatsMap().end()) {
56 if (defaultExtension.isEmpty()) {
57 defaultExtension = format;
61 FileFormat f(format, fileLoaderSaver, defaultExtension);
64 getFormatsMap().insert(format, f);
65 getFileExtensionsMap().insert(defaultExtension, format);
73 m_getObjectFromGroupRecursionLevel(0),
74 m_objectsToConfigure(),
75 m_dontForgetGroupObjectAssociations(false),
83 m_getObjectFromGroupRecursionLevel(0),
84 m_objectsToConfigure(),
85 m_dontForgetGroupObjectAssociations(false),
89 copyTree(other.m_root.get());
95 if (m_getObjectFromGroupRecursionLevel != 0) {
100 if (&other ==
this) {
105 copyTree(other.m_root.get());
108 m_factory->clearObservers();
109 m_factory->addObservers(other.m_factory->getObservers());
121 return m_root->isCaseSensitive();
131 return m_root->getNode(group)->getChildrenList();
137 QRegExp filter(QString(
"^") + QRegExp::escape(prefix), (
isCaseSensitive() ? Qt::CaseSensitive : Qt::CaseInsensitive));
144 return m_root->getNode(group)->getFilteredChildrenList(filter);
154 for (QStringList::iterator it = splittedPath.begin(); it != splittedPath.end(); it++) {
155 lastNode = lastNode->
addNode(*it);
165 return m_root->getNode(groupParent)->deleteNode(groupName);
174 return m_root->getNode(groupParent)->renameNode(groupName, newGroupName);
201 return m_root->setObjectForNode(groupPath,
object);
206 return m_root->getValue(path, alsoMatchParents);
211 return m_root->setValue(path, value);
216 return m_root->setValue(path,
object);
221 return m_root->getNode(group)->getParametersList();
227 QRegExp filter(QString(
"^") + QRegExp::escape(prefix), (
isCaseSensitive() ? Qt::CaseSensitive : Qt::CaseInsensitive));
234 return m_root->getNode(group)->getFilteredParametersList(filter);
239 m_dontForgetGroupObjectAssociations =
true;
244 m_dontForgetGroupObjectAssociations =
false;
250 QQueue<ConfigurationNode *> nodeQueue;
251 nodeQueue.enqueue(m_root.get());
254 while (!nodeQueue.isEmpty()) {
260 #if QT_VERSION_CHECK > 0x450000
264 nodeQueue.append( an );
276 QMap<ParameterSettable *, QString> objectsMap;
277 QQueue<ConfigurationNode *> nodeQueue;
278 nodeQueue.enqueue(m_root.get());
281 while (!nodeQueue.isEmpty()) {
286 if (
object.
object != NULL) {
295 fullname.remove( 0, 1 );
297 objectsMap[
object.object] = fullname;
301 #if QT_VERSION_CHECK > 0x450000
305 nodeQueue.append( an );
312 nodeQueue.enqueue(m_root.get());
315 while (!nodeQueue.isEmpty()) {
322 for (QStringList::iterator it = params.begin(); it != params.end(); it++) {
327 if (objectsMap.contains(obj)) {
328 curNode->
setValue(*it, objectsMap[obj]);
330 curNode->
setValue(*it, QString(
""));
335 #if QT_VERSION_CHECK > 0x450000
339 nodeQueue.append( an );
348 if (format.isEmpty()) {
349 format = formatFromFilenameExtension(filename);
351 if (format.isNull()) {
357 QMap<QString, FileFormat>::iterator it = getFormatsMap().find(format);
360 if (it == getFormatsMap().end()) {
364 return it->fileLoaderSaver->load( filename, *
this, keepOld );
373 if (format.isEmpty()) {
374 format = formatFromFilenameExtension(filename);
376 if (format.isNull()) {
382 QMap<QString, FileFormat>::iterator it = getFormatsMap().find(format);
385 if (it == getFormatsMap().end()) {
389 return it->fileLoaderSaver->save( filename, *
this, append );
395 for (
int i = m_getObjectFromGroupRecursionLevel; i >= 0; i--) {
396 if (m_resourcesUserPerRecursionLevel[i].hasResource(resourceName)) {
397 return &(m_resourcesUserPerRecursionLevel[i]);
406 m_resourcesUserPerRecursionLevel.last().shareResourcesWith(resourcesUser);
411 m_factory->addObserver(observer);
415 m_factory->addObservers( params.m_factory->getObservers() );
418 QString ConfigurationParameters::formatFromFilenameExtension(QString filename)
const
420 QFileInfo info(filename);
422 QMap<QString, QString>::const_iterator it = getFileExtensionsMap().find(info.suffix());
423 if (it == getFileExtensionsMap().end()) {
430 void ConfigurationParameters::copyTree(
const ConfigurationNode *root)
433 m_root.reset(
new ConfigurationNode(NULL, root->getName(), root->isCaseSensitive()));
436 copyNode(root, m_root.get());
439 void ConfigurationParameters::copyNode(
const ConfigurationNode *source, ConfigurationNode *target)
442 QStringList params = source->getParametersList();
443 for (QStringList::const_iterator it = params.begin(); it != params.end(); it++) {
444 target->addParameter(*it);
445 target->setValue(*it, source->getValue(*it));
451 QStringList children = source->getChildrenList();
452 for (QStringList::const_iterator it = children.begin(); it != children.end(); it++) {
453 target->addNode(*it);
454 copyNode(source->getNode(*it), target->getNode(*it));
458 bool ConfigurationParameters::setObjectFromGroupStatusToCreating(QString group)
460 if (m_getObjectFromGroupRecursionLevel == 0) {
463 return m_root->setObjectForNode(group, NULL, CreatingObject);
466 bool ConfigurationParameters::setObjectFromGroupStatusToCreatedNotConfigured(QString group, ParameterSettable *
object)
468 if (m_getObjectFromGroupRecursionLevel == 0) {
471 return m_root->setObjectForNode(group,
object, ObjectCreatedNotConfigured);
474 bool ConfigurationParameters::setObjectFromGroupStatusToConfiguring(QString group)
476 if (m_getObjectFromGroupRecursionLevel == 0) {
479 return m_root->setObjectForNode(group, NULL, ConfiguringObject);
482 bool ConfigurationParameters::setObjectFromGroupStatusToCreatingAndConfiguring(QString group)
484 if (m_getObjectFromGroupRecursionLevel == 0) {
487 return m_root->setObjectForNode(group, NULL, CreatingAndConfiguringObject);
490 bool ConfigurationParameters::setObjectFromGroupStatusToCreatedAndConfigured(QString group, ParameterSettable *
object)
492 if (m_getObjectFromGroupRecursionLevel == 0) {
495 return m_root->setObjectForNode(group,
object, ObjectCreatedAndConfigured);