commit e111d9ab43c5ef744f36053450538f37a6fb17f3
Author: Christian Ehringfeld <c.ehringfeld@t-online.de>
Date:   Mon Aug 10 00:38:20 2015 +0200

    validators

diff --git a/EntityManager.pro b/EntityManager.pro
index f1ede1c..4cc3f3c 100644
--- a/EntityManager.pro
+++ b/EntityManager.pro
@@ -36,7 +36,9 @@ src/entity.h \
     src/validators/errormsg.h \
     src/validators/defaultvalidator.h \
     src/validators/validatorfactory.h \
-    src/validators/validatorrule.h
+    src/validators/validatorrule.h \
+    src/validators/requiredvalidator.h \
+    src/validators/numbervalidator.h
 
 SOURCES += \
 src/entity.cpp \
@@ -66,7 +68,9 @@ src/entity.cpp \
     src/validators/errormsg.cpp \
     src/validators/defaultvalidator.cpp \
     src/validators/validatorfactory.cpp \
-    src/validators/validatorrule.cpp
+    src/validators/validatorrule.cpp \
+    src/validators/requiredvalidator.cpp \
+    src/validators/numbervalidator.cpp
 
 CONFIG += c++14
 QMAKE_CXXFLAGS += -std=c++14
diff --git a/samples/example/main.cpp b/samples/example/main.cpp
index e80342f..ae1f0f1 100644
--- a/samples/example/main.cpp
+++ b/samples/example/main.cpp
@@ -112,9 +112,9 @@ int main(int argc, char *argv[]) {
         qWarning() << "-----------------------------";
         qWarning() << "Merge Pupil";
         qWarning() << "-----------------------------";
-        list.at(i)->setBirthday(QDate(2222,12,22));
+        list.at(i)->setBirthday(QDate(2222, 12, 22));
         QSharedPointer<Entity> pupilE = list.at(i).objectCast<Entity>();
-        e->merge(pupilE,true);
+        e->merge(pupilE, true);
         qWarning() << list.at(i)->toString();
     }
     qWarning() << "-----------------------------";
@@ -137,10 +137,7 @@ int main(int argc, char *argv[]) {
     qWarning() << "-----------------------------";
     qWarning() << "Remove Group";
     qWarning() << "-----------------------------";
-    //e->remove(entityGroupFindPtr);
-
-
-
+    e->remove(entityGroupFindPtr);
 
     sqliteproc->sqliteDBMemFile(true, "db.sqlite");
     qWarning() << "Duration:" << t.elapsed();
diff --git a/src/entitymanager.cpp b/src/entitymanager.cpp
index d21842b..bb09c81 100644
--- a/src/entitymanager.cpp
+++ b/src/entitymanager.cpp
@@ -387,7 +387,7 @@ void EntityManager::savePostPersistedRelations(const QSharedPointer<Entity>
             } else if (r.getType() == RelationType::ONE_TO_ONE
                        && !r.getMappedBy().isEmpty()) {
                 auto e =  EntityInstanceFactory::castQVariant(var);
-                    this->save(e, true, false);
+                this->save(e, true, false);
                 auto fkProp = EntityHelper::mappedProperty(r, e);
                 if (fkProp.isValid()) {
                     EntityHelper::addEntityToListProperty(e, entity, fkProp);
@@ -719,6 +719,7 @@ bool EntityManager::create(QSharedPointer<Entity> &entity,
             rc = true;
         }
     }
+    entity->idChanged();
     return rc;
 }
 
diff --git a/src/validators/defaultvalidator.cpp b/src/validators/defaultvalidator.cpp
index e4bbc7d..cccba28 100644
--- a/src/validators/defaultvalidator.cpp
+++ b/src/validators/defaultvalidator.cpp
@@ -1,5 +1,4 @@
 #include "defaultvalidator.h"
-#include "validator.h"
 using namespace CuteEntityManager;
 DefaultValidator::DefaultValidator() : Validator() {
 }
diff --git a/src/validators/defaultvalidator.h b/src/validators/defaultvalidator.h
index 0cf3707..5ffa39a 100644
--- a/src/validators/defaultvalidator.h
+++ b/src/validators/defaultvalidator.h
@@ -2,7 +2,6 @@
 #define DEFAULTVALIDATOR_H
 #include "validator.h"
 namespace CuteEntityManager {
-class ErrorMsg;
 class DefaultValidator : public Validator {
     Q_OBJECT
   public:
diff --git a/src/validators/errormsg.h b/src/validators/errormsg.h
index d5347ab..69f56f0 100644
--- a/src/validators/errormsg.h
+++ b/src/validators/errormsg.h
@@ -3,7 +3,7 @@
 #include <QString>
 namespace CuteEntityManager {
 class ErrorMsg {
-public:
+  public:
     ErrorMsg();
     ~ErrorMsg();
     ErrorMsg(QString param, QString errorMsg, QString propertyName = "");
@@ -17,7 +17,7 @@ public:
     QString getErrorMsg() const;
     void setErrorMsg(const QString &value);
 
-private:
+  private:
     QString param;
     QString propertyName;
     QString errorMsg;
diff --git a/src/validators/numbervalidator.cpp b/src/validators/numbervalidator.cpp
new file mode 100644
index 0000000..2291e2a
--- /dev/null
+++ b/src/validators/numbervalidator.cpp
@@ -0,0 +1,24 @@
+#include "numbervalidator.h"
+using namespace CuteEntityManager;
+NumberValidator::NumberValidator() : Validator() {
+
+}
+
+ErrorMsg NumberValidator::validateParam(QVariant value, Param param) const {
+    bool convert;
+    double converted = value.toDouble(&convert);
+    if (!convert) {
+        return ErrorMsg(param.getName(), "Value could not converted.");
+    }
+    if (param.getName() == "min" && param.getValue().toDouble() > converted) {
+        return ErrorMsg(param.getName(),
+                        "Value must be no less than " + QString::number(param.getValue().toDouble()) +
+                        ".");
+    } else if (param.getName() == "max"
+               && param.getValue().toDouble() < converted) {
+        return ErrorMsg(param.getName(),
+                        "Value must be not greater than " + QString::number(param.getValue().toDouble())
+                        + ".");
+    }
+    return ErrorMsg();
+}
diff --git a/src/validators/numbervalidator.h b/src/validators/numbervalidator.h
new file mode 100644
index 0000000..e1733cd
--- /dev/null
+++ b/src/validators/numbervalidator.h
@@ -0,0 +1,12 @@
+#ifndef NUMBERVALIDATOR_H
+#define NUMBERVALIDATOR_H
+#include "validator.h"
+namespace CuteEntityManager {
+class NumberValidator : public Validator {
+    Q_OBJECT
+  public:
+    NumberValidator();
+    ErrorMsg validateParam(QVariant value, Param param) const final override;
+};
+}
+#endif // NUMBERVALIDATOR_H
diff --git a/src/validators/requiredvalidator.cpp b/src/validators/requiredvalidator.cpp
new file mode 100644
index 0000000..f417015
--- /dev/null
+++ b/src/validators/requiredvalidator.cpp
@@ -0,0 +1,11 @@
+#include "requiredvalidator.h"
+using namespace CuteEntityManager;
+RequiredValidator::RequiredValidator(): Validator() {
+}
+
+ErrorMsg RequiredValidator::validateParam(QVariant value, Param param) const {
+    if (value.isNull()) {
+        return ErrorMsg(param.getName(), "Value is not set");
+    }
+    return ErrorMsg();
+}
diff --git a/src/validators/requiredvalidator.h b/src/validators/requiredvalidator.h
new file mode 100644
index 0000000..4e17dd7
--- /dev/null
+++ b/src/validators/requiredvalidator.h
@@ -0,0 +1,13 @@
+#ifndef REQUIREDVALIDATOR_H
+#define REQUIREDVALIDATOR_H
+#include "validator.h"
+namespace CuteEntityManager {
+class RequiredValidator : public Validator {
+    Q_OBJECT
+  public:
+    RequiredValidator();
+    ErrorMsg validateParam(QVariant value, Param param) const final override;
+};
+}
+
+#endif // REQUIREDVALIDATOR_H
diff --git a/src/validators/validator.cpp b/src/validators/validator.cpp
index c9a0d3f..d9673a0 100644
--- a/src/validators/validator.cpp
+++ b/src/validators/validator.cpp
@@ -18,7 +18,7 @@ const QHash<QString, QString> Validator::builtInValidators() {
 //    hash.insert("size", "SizeValidator");
 //    hash.insert("number", "NumberValidator");
 //    hash.insert("date", "DateValidator");
-//    hash.insert("required", "RequiredValidator");
+    hash.insert("required", "RequiredValidator");
 //    hash.insert("unique", "UniqueValidator");
 //    hash.insert("url", "UrlValidator");
     return hash;
diff --git a/src/validators/validatorfactory.cpp b/src/validators/validatorfactory.cpp
index 7d9390b..6fff2fd 100644
--- a/src/validators/validatorfactory.cpp
+++ b/src/validators/validatorfactory.cpp
@@ -1,5 +1,7 @@
 #include "validatorfactory.h"
 #include "defaultvalidator.h"
+#include "requiredvalidator.h"
+#include "numbervalidator.h"
 using namespace CuteEntityManager;
 
 ValidatorFactory::ValidatorFactory() {
@@ -39,16 +41,16 @@ QSharedPointer<Validator> ValidatorFactory::getValidatorObject(
 
 void ValidatorFactory::registerClasses() {
     if (ValidatorFactory::instance.isEmpty()) {
-        //        Validator::registerClass<CompareValidator>();
+        //        ValidatorFactory::registerClass<CompareValidator>();
         ValidatorFactory::registerClass<DefaultValidator>();
-        //        Validator::registerClass<EmailValidator>();
-        //        Validator::registerClass<ExistValidator>();
-//        Validator::registerClass<ImageValidator>();
-//        Validator::registerClass<SizeValidator>();
-//        Validator::registerClass<NumberValidator>();
-//        Validator::registerClass<DateValidator>();
-//        Validator::registerClass<RequiredValidator>();
-//        Validator::registerClass<UniqueValidator>();
-//        Validator::registerClass<UrlValidator>();
+        //        ValidatorFactory::registerClass<EmailValidator>();
+        //        ValidatorFactory::registerClass<ExistValidator>();
+//        ValidatorFactory::registerClass<ImageValidator>();
+//        ValidatorFactory::registerClass<SizeValidator>();
+        ValidatorFactory::registerClass<NumberValidator>();
+//        ValidatorFactory::registerClass<DateValidator>();
+        ValidatorFactory::registerClass<RequiredValidator>();
+//        ValidatorFactory::registerClass<UniqueValidator>();
+//        ValidatorFactory::registerClass<UrlValidator>();
     }
 }
diff --git a/src/validators/validatorrule.h b/src/validators/validatorrule.h
index 539f076..c2b70b4 100644
--- a/src/validators/validatorrule.h
+++ b/src/validators/validatorrule.h
@@ -25,7 +25,6 @@ class ValidationRule {
     explicit ValidationRule(QString validatorName, QStringList attributeNames,
                             QString paramName1, QVariant paramValue1, QString paramName2,
                             QVariant paramValue2);
-
     ~ValidationRule();
     QString getValidatorName() const;
     void setValidatorName(const QString &value);
