Revision 75cecd67
Von Christian Ehringfeld vor mehr als 8 Jahren hinzugefügt
samples/example/models/address.h | ||
---|---|---|
class Pupil;
|
||
class Address: public CuteEntityManager::Entity {
|
||
Q_OBJECT
|
||
EM_MACRO(Address)
|
||
|
||
Q_PROPERTY(QString label READ getLabel WRITE setLabel)
|
||
Q_PROPERTY(QString street READ getStreet WRITE setStreet)
|
samples/example/models/contact.h | ||
---|---|---|
class Pupil;
|
||
class Contact: public CuteEntityManager::Entity {
|
||
Q_OBJECT
|
||
EM_MACRO(Contact)
|
||
|
||
Q_PROPERTY(QString content READ getContent WRITE setContent)
|
||
Q_PROPERTY(Category category READ getCategory WRITE setCategory)
|
samples/example/models/group.h | ||
---|---|---|
|
||
class Group: public CuteEntityManager::Entity {
|
||
Q_OBJECT
|
||
EM_MACRO(Group)
|
||
Q_PROPERTY(QList<QSharedPointer<Pupil>> pupils READ getPupils WRITE setPupils)
|
||
Q_PROPERTY(QList<QSharedPointer<Person>> persons READ getPersons WRITE
|
||
setPersons)
|
samples/example/models/person.h | ||
---|---|---|
|
||
class Person: public Entity {
|
||
Q_OBJECT
|
||
EM_MACRO(Person)
|
||
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.h | ||
---|---|---|
|
||
class Pupil : public Person {
|
||
Q_OBJECT
|
||
EM_MACRO(Pupil)
|
||
Q_PROPERTY(QString legalGuardianNote READ getLegalGuardianNote WRITE
|
||
setLegalGuardianNote)
|
||
public:
|
samples/simple/article.h | ||
---|---|---|
|
||
class Article : public CuteEntityManager::Entity {
|
||
Q_OBJECT
|
||
EM_MACRO(Article)
|
||
Q_PROPERTY(double price READ getPrice WRITE setPrice)
|
||
Q_PROPERTY(QString name READ getName WRITE setName)
|
||
private:
|
samples/validators/address.h | ||
---|---|---|
class Pupil;
|
||
class Address: public CuteEntityManager::Entity {
|
||
Q_OBJECT
|
||
EM_MACRO(Address)
|
||
Q_PROPERTY(QString label READ getLabel WRITE setLabel)
|
||
Q_PROPERTY(QString street READ getStreet WRITE setStreet)
|
||
Q_PROPERTY(QString postcode READ getPostcode WRITE setPostcode)
|
samples/validators/person.h | ||
---|---|---|
|
||
class Person: public Entity {
|
||
Q_OBJECT
|
||
EM_MACRO(Person)
|
||
Q_PROPERTY(QString firstName READ getFirstName WRITE setFirstName)
|
||
Q_PROPERTY(QString familyName READ getFamilyName WRITE setFamilyName)
|
||
Q_PROPERTY(QString namePrefix READ getNamePrefix WRITE setNamePrefix)
|
src/databasemigration.h | ||
---|---|---|
namespace CuteEntityManager {
|
||
class DatabaseMigration : public Entity {
|
||
Q_OBJECT
|
||
EM_MACRO(DatabaseMigration)
|
||
Q_PROPERTY(QString version READ getVersion WRITE setVersion)
|
||
Q_PROPERTY(QDateTime applyTime READ getApplyTime WRITE setApplyTime)
|
||
|
src/entity.h | ||
---|---|---|
#include "relation.h"
|
||
#include "validators/validatorrule.h"
|
||
#include "validators/errormsg.h"
|
||
#include <QDebug>
|
||
namespace CuteEntityManager {
|
||
|
||
/**
|
||
... | ... | |
signals:
|
||
void idChanged();
|
||
|
||
#define EM_LIST_MACRO(type) \
|
||
virtual void setListProperty(QList<QSharedPointer<Entity>> &entList, const QMetaProperty &property) { \
|
||
#define EM_MACRO(type) \
|
||
virtual void setAsListProperty(const QSharedPointer<Entity> &e,QList<QSharedPointer<Entity>> &entList, const QMetaProperty &property) override { \
|
||
QList<QSharedPointer<type>> list = *reinterpret_cast<QList<QSharedPointer<type>>*>(&entList); \
|
||
QVariant var; \
|
||
var.setValue<QList<QSharedPointer<type>>>(list); \
|
||
property.write(this, var); \
|
||
property.write(e.data(), var); \
|
||
}
|
||
|
||
//#define EM_PROPERTY(type,attribute,getter,setter)
|
||
... | ... | |
|
||
//#define EM_LIST_PROPERTY(type,attribute,getter,setter)
|
||
// Q_PROPERTY(QList<QSharedPointer<type>> attribute READ getter WRITE setter)
|
||
// EM_LIST_MACRO(type)
|
||
// EM_MACRO(type)
|
||
|
||
|
||
|
||
... | ... | |
QList<ErrorMsg> getErrors() const;
|
||
QString getErrorsAsString() const;
|
||
void setErrors(const QList<ErrorMsg> &value);
|
||
virtual void setListProperty(QList<QSharedPointer<Entity>> &entList,
|
||
const QMetaProperty &property) {
|
||
Q_UNUSED(entList);
|
||
Q_UNUSED(property);
|
||
}
|
||
virtual void setAsListProperty(const QSharedPointer<Entity> &e, QList<QSharedPointer<Entity>> &entList, const QMetaProperty &property) = 0;
|
||
|
||
protected:
|
||
explicit Entity (QObject *parent = 0);
|
src/entityhelper.cpp | ||
---|---|---|
void EntityHelper::setListProperty(const QSharedPointer<Entity> &entity,
|
||
QList<QSharedPointer<Entity>> &list,
|
||
const QMetaProperty &property) {
|
||
QVariant var;
|
||
var.setValue<QList<QSharedPointer<Entity>>>(list);
|
||
entity->setProperty(property.name(),var);
|
||
if(!list.isEmpty()) {
|
||
auto instance = EntityInstanceFactory::createInstance(list.at(0)->getClassname());
|
||
instance->setAsListProperty(entity, list, property);
|
||
}
|
||
property.reset(entity.data());
|
||
}
|
||
|
||
void EntityHelper::addEntityToListProperty(const QSharedPointer<Entity>
|
||
... | ... | |
var) : QList<QSharedPointer<Entity>>());
|
||
if (!list.contains(add)) {
|
||
list.append(add);
|
||
entity->setListProperty(list,property);
|
||
EntityHelper::setListProperty(entity, list, property);
|
||
}
|
||
}
|
||
|
||
... | ... | |
break;
|
||
}
|
||
}
|
||
entity->setListProperty(list,property);
|
||
EntityHelper::setListProperty(entity, list, property);
|
||
}
|
||
}
|
||
|
||
... | ... | |
if (var.canConvert<QList<QVariant>>()) {
|
||
auto list = EntityInstanceFactory::castQVariantList(var);
|
||
list.clear();
|
||
entity->setListProperty(list,property);
|
||
EntityHelper::setListProperty(entity, list, property);
|
||
}
|
||
}
|
||
|
src/entitymanager.cpp | ||
---|---|---|
QSqlQuery q = this->queryInterpreter->build(query);
|
||
auto listMap = this->convertQueryResult(q);
|
||
auto entities = this->convert(listMap, EntityHelper::getClassname(e.data()));
|
||
entity->setListProperty(entities,attr->getMetaProperty());
|
||
EntityHelper::setListProperty(entity,entities,attr->getMetaProperty());
|
||
}
|
||
}
|
||
}
|
tests/models.h | ||
---|---|---|
Q_PROPERTY(QList<QSharedPointer<Group>> groups READ getGroups WRITE setGroups)
|
||
Q_PROPERTY(QList<QSharedPointer<Group>> maintainedGroups READ
|
||
getMaintainedGroups WRITE setMaintainedGroups)
|
||
EM_LIST_MACRO(Group)
|
||
EM_MACRO(Person)
|
||
// EM_LIST_PROPERTY(Group,groups,getGroups,setGroups)
|
||
// EM_LIST_PROPERTY(Group,maintainedGroups,getMaintainedGroups,setMaintainedGroups)
|
||
|
||
... | ... | |
Q_PROPERTY(QString department READ getDepartment WRITE setDepartment)
|
||
Q_PROPERTY(quint64 persNumber READ getPersNumber WRITE setPersNumber)
|
||
Q_PROPERTY(bool manager READ isManager WRITE setManager)
|
||
EM_MACRO(Employee)
|
||
public:
|
||
Employee() : Person() { }
|
||
Employee(quint64 persNumber, QString firstName, QString familyName,
|
||
... | ... | |
Q_PROPERTY(bool active READ isActive WRITE setActive)
|
||
Q_PROPERTY(QList<QSharedPointer<Employee>> workers READ getWorkers WRITE
|
||
setWorkers)
|
||
EM_LIST_MACRO(Employee)
|
||
EM_MACRO(WorkerGroup)
|
||
|
||
public:
|
||
WorkerGroup() : Entity() { }
|
||
... | ... | |
Q_PROPERTY(QString name READ getName WRITE setName)
|
||
Q_PROPERTY(QSharedPointer<Person> leader READ getLeader WRITE
|
||
setLeader)
|
||
EM_LIST_MACRO(Person)
|
||
EM_MACRO(Group)
|
||
|
||
public:
|
||
Q_INVOKABLE Group();
|
||
... | ... | |
Q_OBJECT
|
||
Q_PROPERTY(double price READ getPrice WRITE setPrice)
|
||
Q_PROPERTY(QString name READ getName WRITE setName)
|
||
EM_MACRO(Article)
|
||
private:
|
||
double price;
|
||
QString name;
|
Auch abrufbar als: Unified diff
hmm