Revision cbfd2b95
Von Christian Ehringfeld vor etwa 8 Jahren hinzugefügt
| samples/example/main.cpp | ||
|---|---|---|
|
CreateFakeModelData::fillGroup(gPtr.data());
|
||
|
gPtr->setName("9b");
|
||
|
QSharedPointer<Entity> groupPtr = gPtr.objectCast<Entity>();
|
||
|
QSharedPointer<Person> mainTeacher = QSharedPointer<Person>(new Person("Max",
|
||
|
"Mustermann", Person::Gender::MALE));
|
||
|
QSharedPointer<Person> mainTeacher = QSharedPointer<Person>(new Person("Julia",
|
||
|
"Musterfrau", Person::Gender::MALE));
|
||
|
gPtr->setMainTeacher(mainTeacher);
|
||
|
//Persons will also persisted
|
||
|
if (e->count(groupPtr->getTablename()) <= 0) {
|
||
| samples/example/models/person.h | ||
|---|---|---|
|
class Person: public Entity {
|
||
|
Q_OBJECT
|
||
|
EM_MACRO(Person)
|
||
|
Q_ENUMS(Gender)
|
||
|
Q_ENUMS(NameOrder)
|
||
|
Q_PROPERTY(QString firstName READ getFirstName WRITE setFirstName)
|
||
|
Q_PROPERTY(QString familyName READ getFamilyName WRITE setFamilyName)
|
||
|
Q_PROPERTY(QString namePrefix READ getNamePrefix WRITE setNamePrefix)
|
||
| samples/example/models/pupil.cpp | ||
|---|---|---|
|
void Pupil::setLegalGuardianNote(const QString &value) {
|
||
|
legalGuardianNote = value;
|
||
|
}
|
||
|
|
||
|
const QHash<QString, Relation> Pupil::getRelations() const {
|
||
|
auto hash = Person::getRelations();
|
||
|
hash.insert("groups", CuteEntityManager::Relation("groups",
|
||
|
RelationType::MANY_TO_MANY));
|
||
|
return hash;
|
||
|
}
|
||
| samples/example/models/pupil.h | ||
|---|---|---|
|
|
||
|
QString getLegalGuardianNote() const;
|
||
|
void setLegalGuardianNote(const QString &value);
|
||
|
virtual const QHash<QString, CuteEntityManager::Relation> getRelations() const override;
|
||
|
|
||
|
QString getForm() const;
|
||
|
void setForm(const QString &value);
|
||
| src/entity.cpp | ||
|---|---|---|
|
this->errors = value;
|
||
|
}
|
||
|
|
||
|
void Entity::setProperty(const QSharedPointer<Entity> &e, const QSharedPointer<Entity> &value, const QMetaProperty &property) {
|
||
|
void Entity::setProperty(const QSharedPointer<Entity> &e, QSharedPointer<Entity> &value, const QMetaProperty &property) {
|
||
|
property.write(e.data(), QVariant::fromValue(value));
|
||
|
}
|
||
|
|
||
| src/entity.h | ||
|---|---|---|
|
#include "relation.h"
|
||
|
#include "validators/validatorrule.h"
|
||
|
#include "validators/errormsg.h"
|
||
|
#include <QDebug>
|
||
|
namespace CuteEntityManager {
|
||
|
|
||
|
/**
|
||
| ... | ... | |
|
virtual void setListProperty(const QSharedPointer<Entity> &e,QList<QSharedPointer<Entity>> &entList, const QMetaProperty &property) override { \
|
||
|
QList<QSharedPointer<type>> list = *reinterpret_cast<QList<QSharedPointer<type>>*>(&entList); \
|
||
|
property.write(e.data(), QVariant::fromValue(list)); \
|
||
|
} \
|
||
|
virtual void setFoundProperty(const QSharedPointer<Entity> &e,QSharedPointer<Entity> &value, const QMetaProperty &property) override { \
|
||
|
QSharedPointer<type> en = *reinterpret_cast<QSharedPointer<type>*>(&value); \
|
||
|
QVariant var; \
|
||
|
var.setValue<QSharedPointer<type>>(en); \
|
||
|
property.write(e.data(), var); \
|
||
|
}
|
||
|
|
||
|
public:
|
||
| ... | ... | |
|
void setErrors(const QList<ErrorMsg> &value);
|
||
|
virtual void setListProperty(const QSharedPointer<Entity> &e, QList<QSharedPointer<Entity>> &entList,
|
||
|
const QMetaProperty &property) = 0;
|
||
|
virtual void setProperty(const QSharedPointer<Entity> &e, const QSharedPointer<Entity> &value, const QMetaProperty &property);
|
||
|
virtual void setProperty(const QSharedPointer<Entity> &e, QSharedPointer<Entity> &value, const QMetaProperty &property);
|
||
|
virtual void setFoundProperty(const QSharedPointer<Entity> &e, QSharedPointer<Entity> &value, const QMetaProperty &property) = 0;
|
||
|
|
||
|
protected:
|
||
|
explicit Entity (QObject *parent = 0);
|
||
| src/entityhelper.cpp | ||
|---|---|---|
|
}
|
||
|
}
|
||
|
|
||
|
void EntityHelper::setFoundProperty(const QSharedPointer<Entity> &entity,
|
||
|
QSharedPointer<Entity> value,
|
||
|
const QMetaProperty &property) {
|
||
|
if (value && value->getProperty(value->getPrimaryKey()).toLongLong()
|
||
|
> -1) {
|
||
|
auto i = EntityInstanceFactory::createInstance(EntityInstanceFactory::extractEntityType(property.typeName()));
|
||
|
if(i) {
|
||
|
i->setFoundProperty(entity, value, property);
|
||
|
delete i;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void EntityHelper::setListProperty(const QSharedPointer<Entity> &entity,
|
||
|
QList<QSharedPointer<Entity>> &value, const QMetaProperty &property) {
|
||
|
auto i = EntityInstanceFactory::createInstance(EntityInstanceFactory::extractEntityType(property.typeName()));
|
||
| src/entityhelper.h | ||
|---|---|---|
|
static void setProperty(const QSharedPointer<Entity> &entity,
|
||
|
QSharedPointer<Entity> value,
|
||
|
const QMetaProperty &property);
|
||
|
static void setFoundProperty(const QSharedPointer<Entity> &entity,
|
||
|
QSharedPointer<Entity> value,
|
||
|
const QMetaProperty &property);
|
||
|
static void setListProperty(const QSharedPointer<Entity> &entity,
|
||
|
QList<QSharedPointer<Entity>> &value,
|
||
|
const QMetaProperty &property);
|
||
| src/entitymanager.cpp | ||
|---|---|---|
|
&& (ptr = this->cache.get(convertedId, className)))) {
|
||
|
ptr = this->findById(convertedId, className);
|
||
|
}
|
||
|
EntityHelper::setProperty(entity,ptr,attr->getMetaProperty());
|
||
|
EntityHelper::setFoundProperty(entity,ptr,attr->getMetaProperty());
|
||
|
}
|
||
|
}
|
||
|
|
||
| ... | ... | |
|
auto entities = this->convert(listMap, EntityHelper::getClassname(e.data()));
|
||
|
if (!entities.isEmpty()) {
|
||
|
QSharedPointer<Entity> ptr = entities.at(0);
|
||
|
EntityHelper::setProperty(entity, ptr, attr->getMetaProperty());
|
||
|
EntityHelper::setFoundProperty(entity, ptr, attr->getMetaProperty());
|
||
|
}
|
||
|
}
|
||
|
}
|
||
| ... | ... | |
|
auto ptr = QSharedPointer<Entity>(EntityInstanceFactory::createInstance(
|
||
|
EntityInstanceFactory::extractEntityType(QString(property.typeName()))));
|
||
|
auto builder = this->schema->getQueryBuilder();
|
||
|
QString tblName = builder->generateManyToManyTableName(entity, ptr, r);
|
||
|
QString tblName = builder->generateManyToManyTableName(ptr, entity, r);
|
||
|
if (this->schema->containsTable(tblName)) {
|
||
|
bool ok = newItem;
|
||
|
QSqlQuery q;
|
||
| src/querybuilder.cpp | ||
|---|---|---|
|
return map;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @todo Fix TableName Generation with Inheritence
|
||
|
* @brief QueryBuilder::generateManyToManyTableName
|
||
|
* @param firstEntity
|
||
|
* @param secondEntity
|
||
|
* @param r
|
||
|
* @return
|
||
|
*/
|
||
|
QString QueryBuilder::generateManyToManyTableName(const QSharedPointer<Entity>
|
||
|
&firstEntity,
|
||
|
const QSharedPointer<Entity> &secondEntity, const Relation &r) const {
|
||
Auch abrufbar als: Unified diff
...