/************************************************************************** ** ** This file is part of Nut project. ** https://github.com/HamedMasafi/Nut ** ** Nut is free software: you can redistribute it and/or modify ** it under the terms of the GNU Lesser General Public License as published by ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** ** Nut is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU Lesser General Public License for more details. ** ** You should have received a copy of the GNU Lesser General Public License ** along with Nut. If not, see . ** **************************************************************************/ #include "databasemodel.h" #include "tablemodel.h" #include NUT_BEGIN_NAMESPACE DatabaseModel::DatabaseModel() : QList(), _versionMajor(0), _versionMinor(0) { } DatabaseModel::DatabaseModel(const DatabaseModel &other) : QList(other), _versionMajor(0), _versionMinor(0) { } TableModel *DatabaseModel::model(QString tableName) const { for(int i = 0; i < size(); i++){ TableModel *s = at(i); if(s->name() == tableName) return s; } return 0; } TableModel *DatabaseModel::modelByClass(QString className) const { for(int i = 0; i < size(); i++){ TableModel *s = at(i); if(s->className() == className) return s; } return 0; } bool DatabaseModel::operator ==(const DatabaseModel &other) const { if(size() != other.size()) return false; for(int i = 0; i < size(); i++){ TableModel *mine = at(i); TableModel *others = other.model(mine->name()); if(!others) return false; if(*mine != *others) return false; } return true; } QJsonObject DatabaseModel::toJson() const { QJsonObject obj; // obj.insert(QT_STRINGIFY(versionMajor), QJsonValue(_versionMajor)); // obj.insert(QT_STRINGIFY(versionMinor), QJsonValue(_versionMinor)); for(int i = 0; i < size(); i++){ TableModel *s = at(i); obj.insert(s->name(), s->toJson()); } return obj; } RelationModel *DatabaseModel::relationByClassNames(QString masterClassName, QString childClassName) { TableModel *childTable = modelByClass(childClassName); if(!childTable) return 0; foreach (RelationModel *rel, childTable->foregionKeys()) if(rel->className == masterClassName) return rel; return 0; } RelationModel *DatabaseModel::relationByTableNames(QString masterTableName, QString childTableName) { TableModel *childTable = model(childTableName); if(!childTable) return 0; foreach (RelationModel *rel, childTable->foregionKeys()) if(rel->table->name() == masterTableName) return rel; return 0; } DatabaseModel DatabaseModel::fromJson(QJsonObject &json) { DatabaseModel model; // model.setVersionMajor(json.value(QT_STRINGIFY(versionMajor)).toInt()); // model.setVersionMinor(json.value(QT_STRINGIFY(versionMinor)).toInt()); foreach (QString key, json.keys()) { if(!json.value(key).isObject()) continue; TableModel *sch = new TableModel(json.value(key).toObject(), key); model.append(sch); } return model; } int DatabaseModel::versionMajor() const { return _versionMajor; } void DatabaseModel::setVersionMajor(int versionMajor) { _versionMajor = versionMajor; } int DatabaseModel::versionMinor() const { return _versionMinor; } void DatabaseModel::setVersionMinor(int versionMinor) { _versionMinor = versionMinor; } bool DatabaseModel::remove(QString tableName) { for(int i = 0; i < size(); i++){ TableModel *s = at(i); if(s->name() == tableName){ removeAt(i); return true; } } return false; } NUT_END_NAMESPACE