commit b5d490c7ffae80a203df59fd4f5bf60d5dac2803
Author: Christian Ehringfeld <c.ehringfeld@t-online.de>
Date:   Sat Jul 18 17:39:08 2015 +0200

    fix

diff --git a/samples/example/models/enums.h b/samples/example/models/enums.h
deleted file mode 100644
index bbb6b8c..0000000
--- a/samples/example/models/enums.h
+++ /dev/null
@@ -1,23 +0,0 @@
-#ifndef ENUMS_H
-#define ENUMS_H
-#include <QObject>
-struct Enums {
-    Q_GADGET
-  public:
-    enum ContactCategory {EMAIL_CONTACT, MOBILE_CONTACT, LANDLINE_CONTACT, MESSENGER_CONTACT, EXTRA1_CONTACT, EXTRA2_CONTACT, EXTRA3_CONTACT, EXTRA4_CONTACT, EXTRA5_CONTACT, EXTRA6_CONTACT} ;
-    Q_ENUM(ContactCategory)
-    enum class Orientation {LANDSCAPE_ORIENTATION, PORTRAIT_ORIENTATION, LANDSCAPE_180_ORIENTATION, PORTRAIT_180_ORIENTATION};
-    Q_ENUM(Orientation)
-    enum class NameOrder {FIRST_FAMILY_NAME_ORDER, FAMILY_FIRST_NAME_ORDER};
-    Q_ENUM(NameOrder)
-    enum class DataFieldPosition {TOP_LEFT_DATA = 0, TOP_DATA = 1, TOP_RIGHT_DATA = 2, UPPER_LEFT_DATA = 3, UPPER_DATA = 4, UPPER_RIGHT_DATA = 5, LOWER_LEFT_DATA = 6, LOWER_DATA = 7, LOWER_RIGHT_DATA = 8, BOTTOM_LEFT_DATA = 9, BOTTOM_DATA = 10, BOTTOM_RIGHT_DATA = 11, CENTER_DATA = 12};
-    Q_ENUM(DataFieldPosition)
-    enum class IconPosition {TOP_LEFT_ICON, TOP_RIGHT_ICON, BOTTOM_LEFT_ICON, BOTTOM_RIGHT_ICON, CENTER_ICON, TOP_ICON, BOTTOM_ICON, LEFT_ICON, RIGHT_ICON};
-    Q_ENUM(IconPosition)
-    enum class ShadowPosition {TOP_LEFT_SHADOW, TOP_RIGHT_SHADOW, BOTTOM_LEFT_SHADOW, BOTTOM_RIGHT_SHADOW, INVALID_SHADOW};
-    Q_ENUM(ShadowPosition)
-    enum class Gender {MALE, FEMALE, UNKNOWNGENDER};
-    Q_ENUM(Gender)
-};
-
-#endif // ENUMS_H
diff --git a/src/entity.cpp b/src/entity.cpp
index 6b06e02..d8c7b5a 100644
--- a/src/entity.cpp
+++ b/src/entity.cpp
@@ -23,7 +23,15 @@ Entity::Entity(QObject *parent) : QObject(parent) {
 }
 
 QString Entity::toString() const {
-    return this->getTablename() + ":" + QString::number(this->id);
+    QString r = "";
+    r.append(this->getClassname());
+    r.append(": {");
+    auto properties = this->getMetaProperties();
+    for (auto var = properties.constBegin(); var != properties.constEnd(); ++var) {
+        r.append(var.key() + ": " + var.value().read(this).toString() + ", ");
+    }
+    r.append("}");
+    return r;
 }
 
 Entity::~Entity() {
@@ -164,13 +172,17 @@ const char *Entity::getClassname() const {
     return this->metaObject()->className();
 }
 
-QVariant Entity::property(const QString &name) const {
+QVariant Entity::getProperty(const QString &name) const {
     if (!name.isEmpty()) {
         return QObject::property(name.toLatin1().constData());
     }
     return QVariant();
 }
 
+bool Entity::setProperty(const QString &name, const QVariant &value) {
+    return QObject::setProperty(name.toLatin1().constData(), value);
+}
+
 qint64 Entity::getId() const {
     return id;
 }
diff --git a/src/entity.h b/src/entity.h
index 4b980bc..99c851f 100644
--- a/src/entity.h
+++ b/src/entity.h
@@ -63,7 +63,8 @@ class Entity : public QObject {
     const QHash<Relation, QMetaProperty> getRelationProperties() const;
     const char *getClassname() const;
 
-    QVariant property(const QString &name) const;
+    QVariant getProperty(const QString &name) const;
+    bool setProperty(const QString &name, const QVariant &value);
 
     qint64 getId() const;
     void setId(const qint64 &value);
diff --git a/src/entitymanager.cpp b/src/entitymanager.cpp
index c688f16..52255a3 100644
--- a/src/entitymanager.cpp
+++ b/src/entitymanager.cpp
@@ -111,7 +111,7 @@ QSharedPointer<Schema> EntityManager::getSchema() const {
 }
 
 void EntityManager::refresh(QSharedPointer<Entity> &entity) {
-    entity = this->findById(entity->property(
+    entity = this->findById(entity->getProperty(
                                 entity->getPrimaryKey()).toLongLong(),
                             QString(entity->getClassname()));
 }
@@ -235,7 +235,7 @@ void EntityManager::oneToOne(const QSharedPointer<Entity> &entity,
                           e->getTablename(),
                           this->schema->getQueryBuilder()->generateColumnNameID(
                               r.getMappedBy()),
-                          entity->property(entity->getPrimaryKey()).toLongLong(), 1);
+                          entity->getProperty(entity->getPrimaryKey()).toLongLong(), 1);
         auto listMap = this->convertQueryResult(q);
         auto entities = this->convert(listMap, e->getClassname(), refresh);
         if (!entities.isEmpty()) {
@@ -274,7 +274,7 @@ void EntityManager::addEntityToListProperty(const QSharedPointer<Entity>
 void EntityManager::setProperty(const QSharedPointer<Entity> &entiy,
                                 QSharedPointer<Entity> value,
                                 const QMetaProperty &property) const {
-    if (value && value->property(value->getPrimaryKey()).toLongLong()
+    if (value && value->getProperty(value->getPrimaryKey()).toLongLong()
             > -1) {
         property.write(entiy.data(), QVariant(value));
     }
@@ -325,13 +325,13 @@ void EntityManager::persistMappedByRelation(const QList<QSharedPointer<Entity> >
     q = builder->manyToManyInsert(tblName,
                                   builder->generateManyToManyColumnName(entity),
                                   builder->generateManyToManyColumnName(ptr));
-    q.bindValue(0, entity->getId());
+    q.bindValue(0, entity->getProperty(entity->getPrimaryKey()));
     auto prop = this->mappedProperty(r, ptr);
     QSharedPointer<Entity> item;
     for (int var = 0; var < saved.size(); ++var) {
         item = list.at(var);
-        if (ptr->property(ptr->getPrimaryKey()).toLongLong() > -1) {
-            q.bindValue(1, ptr->property(ptr->getPrimaryKey()));
+        if (item->getProperty(item->getPrimaryKey()).toLongLong() > -1) {
+            q.bindValue(1, item->getProperty(ptr->getPrimaryKey()));
             q.exec();
             if (prop.isReadable()) {
                 this->addEntityToListProperty(entity, ptr, prop);
@@ -373,9 +373,9 @@ QMetaProperty EntityManager::mappedProperty(const Relation &r,
 bool EntityManager::shouldBeSaved(QSharedPointer<Entity> &entity,
                                   const Relation &r) {
     return entity && (r.getCascadeType().contains(ALL)
-                      || (entity->property(entity->getPrimaryKey()) > -1
+                      || (entity->getProperty(entity->getPrimaryKey()) > -1
                           && r.getCascadeType().contains(MERGE))
-                      || (entity->property(entity->getPrimaryKey()) <= -1
+                      || (entity->getProperty(entity->getPrimaryKey()) <= -1
                           && r.getCascadeType().contains(PERSIST)));
 }
 
@@ -469,7 +469,7 @@ void EntityManager::removeManyToManyEntityList(const QSharedPointer<Entity> &e,
             if (this->schema->getTables().contains(tblName)) {
                 QSqlQuery q = builder->manyToManyDelete(
                                   tblName, builder->generateManyToManyColumnName(e),
-                                  e->property(e->getPrimaryKey()).toLongLong());
+                                  e->getProperty(e->getPrimaryKey()).toLongLong());
                 bool refresh = r.getCascadeType().contains(REFRESH)
                                || r.getCascadeType().contains(ALL);
                 bool remove = r.getCascadeType().contains(REMOVE)
@@ -518,7 +518,7 @@ void EntityManager::persistManyToMany(const QSharedPointer<Entity> &entity,
             if (this->schema->getTables().contains(tblName)) {
                 QSqlQuery q = builder->manyToManyDelete(
                                   tblName, builder->generateManyToManyColumnName(entity),
-                                  entity->property(entity->getPrimaryKey()).toLongLong());
+                                  entity->getProperty(entity->getPrimaryKey()).toLongLong());
                 if (this->db->transaction(q)) {
                     auto nList = EntityInstanceFactory::castQVariantList(property);
                     this->persistMappedByRelation(nList, q, entity, ptr, r, tblName);
@@ -550,7 +550,7 @@ void EntityManager::manyToMany(const QSharedPointer<Entity> &entity,
         if (this->schema->getTables().contains(tblName)) {
             QSqlQuery q = builder->manyToMany(tblName,
                                               builder->generateManyToManyColumnName(entity),
-                                              entity->property(entity->getPrimaryKey()).toLongLong(),
+                                              entity->getProperty(entity->getPrimaryKey()).toLongLong(),
                                               builder->generateManyToManyColumnName(secEntityPtr),
                                               secEntityPtr->getTablename());
             auto listMap = this->convertQueryResult(q);
@@ -605,8 +605,7 @@ bool EntityManager::create(QSharedPointer<Entity> &entity,
                 break;
             }
             if (first) {
-                entity->setProperty(
-                    entity->getPrimaryKey().toLatin1().constData(), query.lastInsertId());
+                entity->setProperty(entity->getPrimaryKey(), query.lastInsertId());
                 first = false;
             }
         }
@@ -735,7 +734,7 @@ void EntityManager::resolveRelations(const QSharedPointer<Entity> &entity,
 
 bool EntityManager::save(QSharedPointer<Entity> &entity,
                          const bool persistRelations) {
-    if (entity->property(entity->getPrimaryKey()) > -1) {
+    if (entity->getProperty(entity->getPrimaryKey()) > -1) {
         return this->merge(entity, persistRelations);
     } else {
         return this->create(entity, persistRelations);
diff --git a/src/querybuilder.cpp b/src/querybuilder.cpp
index 15f69ad..287c9b7 100644
--- a/src/querybuilder.cpp
+++ b/src/querybuilder.cpp
@@ -581,7 +581,7 @@ QList<QSqlQuery> QueryBuilder::remove(const QSharedPointer<Entity> &entity)
 const {
     QList<QSqlQuery> queries = QList<QSqlQuery>();
     queries.append(this->remove(entity->getTablename(),
-                                entity->property(entity->getPrimaryKey()).toLongLong()));
+                                entity->getProperty(entity->getPrimaryKey()).toLongLong()));
     if (entity->getInheritanceStrategy() != PER_CLASS_TABLE
             && entity->isInheritanceCascaded()) {
         auto classes = entity->superClasses(true);
@@ -590,7 +590,7 @@ const {
             auto instance = EntityInstanceFactory::createInstance(item->className());
             if (instance) {
                 queries.append(this->remove(instance->getTablename(),
-                                            entity->property(entity->getPrimaryKey()).toLongLong()));
+                                            entity->getProperty(entity->getPrimaryKey()).toLongLong()));
                 delete instance;
                 instance = 0;
             }
@@ -719,7 +719,7 @@ QSqlQuery QueryBuilder::manyToMany(const QString &tableName,
                       foreignKey) + " WHERE " + this->schema->quoteColumnName(
                       attribute) + "=:id;";
     q.prepare(sql);
-    q.bindValue(":id", id);
+    q.bindValue(":id", QVariant(id));
     return q;
 }
 
@@ -944,9 +944,9 @@ QHash<QString, QVariant> QueryBuilder::getManyToOneAttributes(
 void QueryBuilder::insertRelationId(const Entity *e,
                                     QHash<QString, QVariant> &map,
                                     QString relName) const {
-    if (e && e->property(e->getPrimaryKey()).toLongLong() > -1) {
+    if (e && e->getProperty(e->getPrimaryKey()).toLongLong() > -1) {
         map.insert(this->generateColumnNameID(relName),
-                   e->property(e->getPrimaryKey()));
+                   e->getProperty(e->getPrimaryKey()));
     }
 }
 
