commit be2e950073b175c0e08fb4b7f34251d0ab482e05
Author: Christian Ehringfeld <c.ehringfeld@t-online.de>
Date:   Tue Dec 29 21:17:47 2015 +0100

    attribute resolver integration

diff --git a/src/attributeresolver.cpp b/src/attributeresolver.cpp
index 3cac19f..035c5e3 100644
--- a/src/attributeresolver.cpp
+++ b/src/attributeresolver.cpp
@@ -60,8 +60,6 @@ Attribute *AttributeResolver::resolveManyToManyAttribute(const QSharedPointer<En
     if(foreignBaseObj != target.data()) {
         delete foreignBaseObj;
     }
-
-    qDebug() << "RESOLVE";
     return attrObj;
 }
 
diff --git a/src/entityinstancefactory.cpp b/src/entityinstancefactory.cpp
index ccc6b19..1a77cb4 100644
--- a/src/entityinstancefactory.cpp
+++ b/src/entityinstancefactory.cpp
@@ -154,3 +154,9 @@ QStringList EntityInstanceFactory::getRegisteredClasses() {
     }
     return registered;
 }
+
+Entity *EntityInstanceFactory::createInstance(Attribute *&attr) {
+    return EntityInstanceFactory::createInstance(
+               EntityInstanceFactory::extractEntityType(
+                   attr->getMetaProperty().typeName()));
+}
diff --git a/src/entityinstancefactory.h b/src/entityinstancefactory.h
index 030943b..bf626fc 100644
--- a/src/entityinstancefactory.h
+++ b/src/entityinstancefactory.h
@@ -18,6 +18,7 @@
 #include <QString>
 #include <QVariant>
 #include <QHash>
+#include "attribute.h"
 namespace CuteEntityManager {
 class Entity;
 class EntityInstanceFactory {
@@ -43,6 +44,8 @@ class EntityInstanceFactory {
     static Entity *createInstance() {
         return EntityInstanceFactory::createInstance(qMetaTypeId<T>());
     }
+    static Entity *createInstance(Attribute *&attr);
+
 
     //http://www.mimec.org/node/350
     template<typename T>
diff --git a/src/entitymanager.cpp b/src/entitymanager.cpp
index 3e4f660..d9754a7 100644
--- a/src/entitymanager.cpp
+++ b/src/entitymanager.cpp
@@ -446,61 +446,55 @@ QSharedPointer<Entity> EntityManager::findById(const qint64 &id,
 
 void EntityManager::manyToOne(const QSharedPointer<Entity> &entity,
                               const QVariant &id,
-                              const QMetaProperty &property, const bool refresh) {
+                              Attribute *&attr, const bool refresh) {
     qint64 convertedId = -1;
     bool ok = false;
     if ((convertedId = id.toLongLong(&ok)) && ok && convertedId > -1) {
-        QString className = EntityInstanceFactory::extractEntityType(
-                                property.typeName());
+        QString className = attr->getRelatedClass()->className();
         QSharedPointer<Entity> ptr = QSharedPointer<Entity>();
         if (refresh || !(this->cache.contains(convertedId, className)
                          && (ptr = this->cache.get(convertedId, className)))) {
             ptr = this->findById(convertedId, className);
         }
-        EntityHelper::setProperty(entity, ptr, property);
+        EntityHelper::setProperty(entity, ptr, attr->getMetaProperty());
     }
 }
 
 void EntityManager::oneToMany(const QSharedPointer<Entity> &entity,
-                              const Relation &r,
-                              const QMetaProperty &property, const bool refresh) {
+                              Attribute *&attr, const bool refresh) {
     if (entity.data() && entity->getId() > -1) {
-        auto e = QSharedPointer<Entity>(EntityInstanceFactory::createInstance(
-                                            EntityInstanceFactory::extractEntityType(
-                                                property.typeName())));
+        auto e = QSharedPointer<Entity>(EntityInstanceFactory::createInstance(attr));
         if (e) {
-            QSqlQuery q = this->schema->getQueryBuilder()->oneToMany(e->getTablename(),
-                          this->schema->getQueryBuilder()->generateColumnNameID(r.getMappedBy()),
-                          entity->getId());
+            QSqlQuery q = this->schema->getQueryBuilder()->oneToMany(attr->getTableName(),
+                          attr->getColumnName(), entity->getId());
             auto listMap = this->convertQueryResult(q);
             auto entities = this->convert(listMap, EntityHelper::getClassname(e.data()),
                                           refresh);
-            EntityHelper::setListProperty(entity, entities, property);
+            EntityHelper::setListProperty(entity, entities, attr->getMetaProperty());
         }
     }
 }
 
 
 void EntityManager::oneToOne(const QSharedPointer<Entity> &entity,
-                             const Relation &r, const QMetaProperty &property, const bool refresh,
+                             Attribute *&attr, const bool refresh,
                              const QVariant &id) {
-    if (r.getMappedBy().isEmpty()) {
-        this->manyToOne(entity, id, property);
+    if (attr->getRelation().getMappedBy().isEmpty()) {
+        this->manyToOne(entity, id, attr);
     } else {
-        auto e = QSharedPointer<Entity>(EntityInstanceFactory::createInstance(
-                                            EntityInstanceFactory::extractEntityType(property.typeName())));
+        auto e = QSharedPointer<Entity>(EntityInstanceFactory::createInstance(attr));
         if (e) {
             QSqlQuery q = this->schema->getQueryBuilder()->oneToMany(
                               e->getTablename(),
                               this->schema->getQueryBuilder()->generateColumnNameID(
-                                  r.getMappedBy()),
+                                  attr->getRelation().getMappedBy()),
                               entity->getProperty(entity->getPrimaryKey()).toLongLong(), 1);
             auto listMap = this->convertQueryResult(q);
             auto entities = this->convert(listMap, EntityHelper::getClassname(e.data()),
                                           refresh);
             if (!entities.isEmpty()) {
                 QSharedPointer<Entity> ptr = entities.at(0);
-                EntityHelper::setProperty(entity, ptr, property);
+                EntityHelper::setProperty(entity, ptr, attr->getMetaProperty());
             }
         }
     }
@@ -843,7 +837,7 @@ void EntityManager::manyToMany(const QSharedPointer<Entity> &entity,
                 }
             }
         } else {
-            this->missingManyToManyTable(attr->getTableName(), entity, attr->getRelation());
+            this->missingManyToManyTable(attr->getConjunctedTable(), entity, attr->getRelation());
         }
     }
 }
@@ -923,17 +917,17 @@ void EntityManager::resolveRelations(const QSharedPointer<Entity> &entity,
         switch (r.getType()) {
         case RelationType::MANY_TO_ONE:
             if (map.contains(colName)) {
-                this->manyToOne(entity, map.value(colName), property, refresh);
+                this->manyToOne(entity, map.value(colName), attr, refresh);
             }
             break;
         case RelationType::MANY_TO_MANY:
             this->manyToMany(entity, attr, refresh);
             break;
         case RelationType::ONE_TO_MANY:
-            this->oneToMany(entity, r, property, refresh);
+            this->oneToMany(entity, attr, refresh);
             break;
         case RelationType::ONE_TO_ONE:
-            this->oneToOne(entity, r, property, refresh, map.value(colName));
+            this->oneToOne(entity, attr, refresh, map.value(colName));
             break;
         }
     }
diff --git a/src/entitymanager.h b/src/entitymanager.h
index cb3d9d6..e234c74 100644
--- a/src/entitymanager.h
+++ b/src/entitymanager.h
@@ -298,13 +298,11 @@ protected:
                           const QHash<QString, QVariant> &map, const bool refresh = false);
     QHash<QString, QVariant> findByPk(qint64 id, const QSharedPointer<Entity> &e);
     void manyToOne(const QSharedPointer<Entity> &entity, const QVariant &id,
-                   const QMetaProperty &property, const bool refresh = false);
-    void oneToMany(const QSharedPointer<Entity> &entity, const Relation &r,
-                   const QMetaProperty &property, const bool refresh = false);
+                   Attribute *&attr, const bool refresh = false);
+    void oneToMany(const QSharedPointer<Entity> &entity, Attribute *&attr, const bool refresh = false);
     void manyToMany(const QSharedPointer<Entity> &entity, Attribute *&attr,
                     const bool refresh = false);
-    void oneToOne(const QSharedPointer<Entity> &entity, const Relation &r,
-                  const QMetaProperty &property, const bool refresh = false,
+    void oneToOne(const QSharedPointer<Entity> &entity, Attribute *&attr, const bool refresh = false,
                   const QVariant &id = "");
     void persistManyToMany(const QSharedPointer<Entity> &entity, const Relation &r,
                            QVariant &property, QList<Entity *> &mergedObjects,
