Revision e8d1537c
Von Christian Ehringfeld vor fast 9 Jahren hinzugefügt
src/entity.cpp | ||
---|---|---|
*/
|
||
|
||
#include "entity.h"
|
||
|
||
#include "entityhelper.h"
|
||
using namespace CuteEntityManager;
|
||
|
||
Entity::Entity(QObject *parent) : QObject(parent) {
|
||
... | ... | |
|
||
QString Entity::toString() const {
|
||
QString r = "";
|
||
r.append(this->getClassname());
|
||
r.append(EntityHelper::getClassName(this));
|
||
r.append(": {");
|
||
auto properties = this->getMetaProperties();
|
||
auto properties = EntityHelper::getMetaProperties(this);
|
||
for (auto var = properties.constBegin(); var != properties.constEnd(); ++var) {
|
||
QString val = "";
|
||
auto value = var.value().read(this);
|
||
... | ... | |
|
||
QString Entity::slimToString() const {
|
||
QString r = "";
|
||
r.append(this->getClassname());
|
||
r.append(EntityHelper::getClassName(this));
|
||
r.append(": {");
|
||
r.append("id: ") + this->getId() + "}";
|
||
return r;
|
||
... | ... | |
return QHash<QString, Relation>();
|
||
}
|
||
|
||
const QHash<QString, Relation> Entity::getNonInheritedRelations() const {
|
||
auto relations = this->getRelations();
|
||
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());
|
||
}
|
||
++iterator;
|
||
}
|
||
delete superObject;
|
||
superObject = nullptr;
|
||
}
|
||
return relations;
|
||
}
|
||
|
||
const QStringList Entity::getTransientAttributes() const {
|
||
return QStringList();
|
||
}
|
||
... | ... | |
return "id";
|
||
}
|
||
|
||
const QList<const QMetaObject *> Entity::superClasses(bool
|
||
stopAtSingleTableInheritance) const {
|
||
QList<const QMetaObject *> classes = QList<const QMetaObject *>();
|
||
auto superMetaObject = this->metaObject()->superClass();
|
||
if (this->getInheritanceStrategy() == InheritanceStrategy::JOINED_TABLE) {
|
||
Entity *e = nullptr;
|
||
while (superMetaObject && QString(superMetaObject->className()) !=
|
||
QString("CuteEntityManager::Entity")) {
|
||
e = EntityInstanceFactory::createInstance(superMetaObject->className());
|
||
if (e) {
|
||
classes.append(superMetaObject);
|
||
superMetaObject = superMetaObject->superClass();
|
||
InheritanceStrategy s = e->getInheritanceStrategy();
|
||
delete e;
|
||
e = nullptr;
|
||
if (stopAtSingleTableInheritance && s == InheritanceStrategy::PER_CLASS_TABLE) {
|
||
break;
|
||
}
|
||
} else {
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
return classes;
|
||
}
|
||
|
||
const QHash<QString, QMetaProperty> Entity::getMetaProperties() const {
|
||
return Entity::getMetaProperties(this->metaObject());
|
||
}
|
||
|
||
const QHash<QString, QMetaProperty> Entity::getSuperMetaProperties() const {
|
||
auto superMetaObjectPropertyMap = QHash<QString, QMetaProperty>();
|
||
auto superMeta = this->metaObject()->superClass();
|
||
if (QString(superMeta->className()) != QString("CuteEntityManager::Entity")
|
||
&& this->getInheritanceStrategy() == InheritanceStrategy::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;
|
||
}
|
||
|
||
const QHash<QString, QMetaProperty> Entity::getMetaProperties(
|
||
const QMetaObject *object) {
|
||
auto h = QHash<QString, QMetaProperty>();
|
||
for (int var = 0; var < object->propertyCount(); ++var) {
|
||
QMetaProperty m = object->property(var);
|
||
if (m.isValid() && m.name() != QString("objectName")) {
|
||
h.insert(m.name(), m);
|
||
}
|
||
}
|
||
return h;
|
||
}
|
||
|
||
const QHash<QString, QMetaProperty> Entity::getInheritedMetaProperties() const {
|
||
auto classes = this->superClasses();
|
||
auto wholeProperties = QHash<QString, QMetaProperty>();
|
||
for (int var = classes.size() - 1; var >= 0; --var) {
|
||
auto metaObject = classes.at(var);
|
||
auto properties = Entity::getMetaProperties(metaObject);
|
||
auto iterator = properties.constBegin();
|
||
while (iterator != properties.constEnd()) {
|
||
wholeProperties.insert(iterator.key(), iterator.value());
|
||
++iterator;
|
||
}
|
||
}
|
||
return wholeProperties;
|
||
}
|
||
|
||
const QHash<Relation, QMetaProperty> Entity::getRelationProperties() const {
|
||
auto h = QHash<Relation, QMetaProperty>();
|
||
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()))) {
|
||
h.insert(relations.value(m.name()), m);
|
||
}
|
||
}
|
||
return h;
|
||
}
|
||
|
||
const char *Entity::getClassname() const {
|
||
return this->metaObject()->className();
|
||
}
|
||
|
||
QVariant Entity::getProperty(const QString &name) const {
|
||
if (!name.isEmpty()) {
|
||
return QObject::property(name.toLatin1().constData());
|
Auch abrufbar als: Unified diff
entityhelper class