Projekt

Allgemein

Profil

Herunterladen als
Herunterladen (6,76 KB) Statistiken
| Zweig: | Revision:
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
}