Herunterladen als
root/src/entity.cpp @ 9e62667d
81c23b56 | Christian Ehringfeld | /*
|
|
4d58ef6a | Christian Ehringfeld | * Copyright (C) 2015 Christian Ehringfeld <c.ehringfeld@t-online.de>
|
|
*
|
|||
* This program 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.
|
|||
*
|
|||
* This program 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 General Public License
|
|||
* for more details.
|
|||
*
|
|||
* You should have received a copy of the GNU Lesser General Public License
|
|||
* along with this program; if not, see <http://www.gnu.org/licenses/>.
|
|||
*/
|
|||
81c23b56 | Christian Ehringfeld | ||
#include "entity.h"
|
|||
9cf4747e | Christian Ehringfeld | using namespace CuteEntityManager;
|
|
81c23b56 | Christian Ehringfeld | ||
9d05e414 | Christian Ehringfeld | Entity::Entity(QObject *parent) : QObject(parent) {
|
|
2c49732b | Christian Ehringfeld | this->id = -1;
|
|
81c23b56 | Christian Ehringfeld | }
|
|
2e43da3f | Christian Ehringfeld | QString Entity::toString() const {
|
|
b5d490c7 | Christian Ehringfeld | QString r = "";
|
|
r.append(this->getClassname());
|
|||
r.append(": {");
|
|||
auto properties = this->getMetaProperties();
|
|||
for (auto var = properties.constBegin(); var != properties.constEnd(); ++var) {
|
|||
6c58eb3f | Christian Ehringfeld | QString val = "";
|
|
auto value = var.value().read(this);
|
|||
if (var.value().isEnumType()) {
|
|||
val = var.value().enumerator().valueToKey(var.value().read(this).toInt());
|
|||
} else if (value.canConvert<QList<QVariant>>()) {
|
|||
auto list = value.toList();
|
|||
val.append("[");
|
|||
for (int var = 0; var < list.size(); ++var) {
|
|||
val = list.at(var).toString();
|
|||
}
|
|||
val.append("]");
|
|||
} else {
|
|||
val = value.toString();
|
|||
}
|
|||
r.append(var.key() + ": " + val + ", ");
|
|||
b5d490c7 | Christian Ehringfeld | }
|
|
r.append("}");
|
|||
return r;
|
|||
9d05e414 | Christian Ehringfeld | }
|
|
6c58eb3f | Christian Ehringfeld | QString Entity::slimToString() const {
|
|
QString r = "";
|
|||
r.append(this->getClassname());
|
|||
r.append(": {");
|
|||
r.append("id: ") + this->getId() + "}";
|
|||
return r;
|
|||
}
|
|||
81c23b56 | Christian Ehringfeld | Entity::~Entity() {
|
|
ba800d6d | Christian Ehringfeld | ||
81c23b56 | Christian Ehringfeld | }
|
|
2e43da3f | Christian Ehringfeld | QString Entity::getTablename() const {
|
|
2075db87 | Christian Ehringfeld | return QString(this->metaObject()->className()).toLower();
|
|
caea9141 | Christian Ehringfeld | }
|
|
7e233492 | Christian Ehringfeld | ||
a06633f7 | Christian Ehringfeld | const QHash<QString, Relation> Entity::getRelations() const {
|
|
24425325 | Christian Ehringfeld | return QHash<QString, Relation>();
|
|
24c5480c | Christian Ehringfeld | }
|
|
f5087482 | Christian Ehringfeld | const QHash<QString, Relation> Entity::getNonInheritedRelations() const {
|
|
47f9301a | Christian Ehringfeld | auto relations = this->getRelations();
|
|
f5087482 | Christian Ehringfeld | auto superObject = EntityInstanceFactory::newSuperClassInstance(this);
|
|
if (superObject) {
|
|||
auto superRelations = superObject->getRelations();
|
|||
auto iterator = superRelations.constBegin();
|
|||
while (iterator != relations.constEnd()) {
|
|||
if (relations.contains(iterator.key())) {
|
|||
relations.remove(iterator.key());
|
|||
47f9301a | Christian Ehringfeld | }
|
|
f5087482 | Christian Ehringfeld | ++iterator;
|
|
47f9301a | Christian Ehringfeld | }
|
|
f5087482 | Christian Ehringfeld | delete superObject;
|
|
35cf13b7 | Christian Ehringfeld | superObject = nullptr;
|
|
f5087482 | Christian Ehringfeld | }
|
|
return relations;
|
|||
47f9301a | Christian Ehringfeld | }
|
|
a06633f7 | Christian Ehringfeld | const QStringList Entity::getTransientAttributes() const {
|
|
7e233492 | Christian Ehringfeld | return QStringList();
|
|
}
|
|||
24c5480c | Christian Ehringfeld | ||
a06633f7 | Christian Ehringfeld | const QStringList Entity::getBLOBColumns() const {
|
|
24c5480c | Christian Ehringfeld | return QStringList();
|
|
}
|
|||
2e43da3f | Christian Ehringfeld | InheritanceStrategy Entity::getInheritanceStrategy() const {
|
|
1a3b37ba | Christian Ehringfeld | return JOINED_TABLE;
|
|
}
|
|||
da3ce9cf | Christian Ehringfeld | bool Entity::isInheritanceCascaded() const {
|
|
return true;
|
|||
}
|
|||
2e43da3f | Christian Ehringfeld | QString Entity::getPrimaryKey() const {
|
|
24c5480c | Christian Ehringfeld | return "id";
|
|
}
|
|||
813205af | Christian Ehringfeld | ||
da3ce9cf | Christian Ehringfeld | const QList<const QMetaObject *> Entity::superClasses(bool
|
|
f5087482 | Christian Ehringfeld | stopAtSingleTableInheritance) const {
|
|
da3ce9cf | Christian Ehringfeld | QList<const QMetaObject *> classes = QList<const QMetaObject *>();
|
|
2e43da3f | Christian Ehringfeld | auto superMetaObject = this->metaObject()->superClass();
|
|
if (this->getInheritanceStrategy() == JOINED_TABLE) {
|
|||
35cf13b7 | Christian Ehringfeld | Entity *e = nullptr;
|
|
while (superMetaObject && QString(superMetaObject->className()) !=
|
|||
ac8aede7 | Christian Ehringfeld | QString("CuteEntityManager::Entity")) {
|
|
f5087482 | Christian Ehringfeld | e = EntityInstanceFactory::createInstance(superMetaObject->className());
|
|
if (e) {
|
|||
da3ce9cf | Christian Ehringfeld | classes.append(superMetaObject);
|
|
f5087482 | Christian Ehringfeld | superMetaObject = superMetaObject->superClass();
|
|
quint8 s = e->getInheritanceStrategy();
|
|||
delete e;
|
|||
35cf13b7 | Christian Ehringfeld | e = nullptr;
|
|
f5087482 | Christian Ehringfeld | if (stopAtSingleTableInheritance && s == PER_CLASS_TABLE) {
|
|
break;
|
|||
}
|
|||
} else {
|
|||
break;
|
|||
}
|
|||
2e43da3f | Christian Ehringfeld | }
|
|
}
|
|||
return classes;
|
|||
}
|
|||
a06633f7 | Christian Ehringfeld | const QHash<QString, QMetaProperty> Entity::getMetaProperties() const {
|
|
2e43da3f | Christian Ehringfeld | return Entity::getMetaProperties(this->metaObject());
|
|
}
|
|||
f5087482 | Christian Ehringfeld | const QHash<QString, QMetaProperty> Entity::getSuperMetaProperties() const {
|
|
47f9301a | Christian Ehringfeld | auto superMetaObjectPropertyMap = QHash<QString, QMetaProperty>();
|
|
auto superMeta = this->metaObject()->superClass();
|
|||
f5087482 | Christian Ehringfeld | if (QString(superMeta->className()) != QString("CuteEntityManager::Entity")
|
|
47f9301a | Christian Ehringfeld | && this->getInheritanceStrategy() == JOINED_TABLE) {
|
|
for (int var = 0; var < superMeta->propertyCount(); ++var) {
|
|||
QMetaProperty prop = superMeta->property(var);
|
|||
if (prop.isReadable() && prop.isWritable()) {
|
|||
superMetaObjectPropertyMap.insert(QString(prop.name()), prop);
|
|||
}
|
|||
}
|
|||
}
|
|||
return superMetaObjectPropertyMap;
|
|||
}
|
|||
f5087482 | Christian Ehringfeld | const QHash<QString, QMetaProperty> Entity::getMetaProperties(
|
|
const QMetaObject *object) {
|
|||
a06633f7 | Christian Ehringfeld | auto h = QHash<QString, QMetaProperty>();
|
|
2e43da3f | Christian Ehringfeld | for (int var = 0; var < object->propertyCount(); ++var) {
|
|
QMetaProperty m = object->property(var);
|
|||
a06633f7 | Christian Ehringfeld | if (m.isValid() && m.name() != QString("objectName")) {
|
|
h.insert(m.name(), m);
|
|||
}
|
|||
}
|
|||
return h;
|
|||
}
|
|||
2e43da3f | Christian Ehringfeld | const QHash<QString, QMetaProperty> Entity::getInheritedMetaProperties() const {
|
|
auto classes = this->superClasses();
|
|||
auto wholeProperties = QHash<QString, QMetaProperty>();
|
|||
da3ce9cf | Christian Ehringfeld | for (int var = classes.size() - 1; var >= 0; --var) {
|
|
auto metaObject = classes.at(var);
|
|||
2e43da3f | Christian Ehringfeld | auto properties = Entity::getMetaProperties(metaObject);
|
|
auto iterator = properties.constBegin();
|
|||
while (iterator != properties.constEnd()) {
|
|||
f5087482 | Christian Ehringfeld | wholeProperties.insert(iterator.key(), iterator.value());
|
|
2e43da3f | Christian Ehringfeld | ++iterator;
|
|
}
|
|||
}
|
|||
return wholeProperties;
|
|||
}
|
|||
2d9fab10 | Christian Ehringfeld | const QHash<Relation, QMetaProperty> Entity::getRelationProperties() const {
|
|
auto h = QHash<Relation, QMetaProperty>();
|
|||
a06633f7 | Christian Ehringfeld | auto relations = this->getRelations();
|
|
for (int var = 0; var < this->metaObject()->propertyCount(); ++var) {
|
|||
QMetaProperty m = this->metaObject()->property(var);
|
|||
if (m.isValid() && relations.contains(QString(m.name()))) {
|
|||
2d9fab10 | Christian Ehringfeld | h.insert(relations.value(m.name()), m);
|
|
f4e3904b | Christian Ehringfeld | }
|
|
}
|
|||
return h;
|
|||
}
|
|||
const char *Entity::getClassname() const {
|
|||
return this->metaObject()->className();
|
|||
}
|
|||
b5d490c7 | Christian Ehringfeld | QVariant Entity::getProperty(const QString &name) const {
|
|
abb9e8c5 | Christian Ehringfeld | if (!name.isEmpty()) {
|
|
return QObject::property(name.toLatin1().constData());
|
|||
}
|
|||
return QVariant();
|
|||
da3ce9cf | Christian Ehringfeld | }
|
|
b5d490c7 | Christian Ehringfeld | bool Entity::setProperty(const QString &name, const QVariant &value) {
|
|
return QObject::setProperty(name.toLatin1().constData(), value);
|
|||
}
|
|||
813205af | Christian Ehringfeld | qint64 Entity::getId() const {
|
|
586bb527 | Christian Ehringfeld | return id;
|
|
}
|
|||
813205af | Christian Ehringfeld | void Entity::setId(const qint64 &value) {
|
|
a06633f7 | Christian Ehringfeld | if (value != this->id) {
|
|
a205e8a9 | Christian Ehringfeld | id = value;
|
|
emit idChanged();
|
|||
}
|
|||
586bb527 | Christian Ehringfeld | }
|