commit dcb097f9aa949da52ce98c6dd356d939003a9d1a
Author: Christian Ehringfeld <c.ehringfeld@t-online.de>
Date:   Wed Aug 12 00:52:08 2015 +0200

    validator stuff

diff --git a/samples/validators/main.cpp b/samples/validators/main.cpp
index f8281a1..ece7120 100644
--- a/samples/validators/main.cpp
+++ b/samples/validators/main.cpp
@@ -45,7 +45,7 @@ int main(int argc, char *argv[]) {
      */
 
     QSharedPointer<Entity> p1 = QSharedPointer<Person>(new Person("Thomas", "B",
-                                Person::Gender::MALE, "", QString(), QString(), QDate(1971, 7, 13), 0));
+                                Person::Gender::MALE, "", QString(), QString(), QDate(), 0));
     QSharedPointer<Entity> p2 = QSharedPointer<Person>(new Person("Teresa", "Conrad",
                                Person::Gender::FEMALE, "", QString(), QString(), QDate(2016, 7, 13), 0));
     QSharedPointer<Entity> p3 = QSharedPointer<Person>(new Person("Heinz", "Dunst",
diff --git a/src/validators/emailvalidator.cpp b/src/validators/emailvalidator.cpp
index 3b1c464..4d37754 100644
--- a/src/validators/emailvalidator.cpp
+++ b/src/validators/emailvalidator.cpp
@@ -8,15 +8,18 @@ EmailValidator::EmailValidator() : Validator() {
 ErrorMsg EmailValidator::validateParam(QVariant value, Param param) const {
     QRegularExpression exp = QRegularExpression();
     QString val = value.toString();
-    if (param.getName() == "full") {
-        exp.setPattern(this->getFullPattern());
-    } else {
-        exp.setPattern(this->getPattern());
+    if (!val.isEmpty()) {
+        if (param.getName() == "full") {
+            exp.setPattern(this->getFullPattern());
+        } else {
+            exp.setPattern(this->getPattern());
+        }
+        if (exp.match(val).hasMatch()) {
+            return ErrorMsg();
+        }
+        return ErrorMsg(param.getName(), "<property> is not a valid email address.");
     }
-    if (exp.match(val).hasMatch()) {
-        return ErrorMsg();
-    }
-    return ErrorMsg(param.getName(), "<property> is not a valid email address.");
+    return ErrorMsg();
 }
 
 QString EmailValidator::getPattern() const {
diff --git a/src/validators/filevalidator.cpp b/src/validators/filevalidator.cpp
index 19edca6..529864d 100644
--- a/src/validators/filevalidator.cpp
+++ b/src/validators/filevalidator.cpp
@@ -14,21 +14,24 @@ FileValidator::FileValidator() : Validator() {
  * @return
  */
 ErrorMsg FileValidator::validateParam(QVariant value, Param param) const {
-    QFileInfo file = QFileInfo(value.toString());
-    if (param.getName() == "mimeTypes") {
-        return this->validateMIMEType(file, param);
-    } else if (param.getName() == "extensions") {
-        return this->validateExtension(file, param);
-    } else if (param.getName() == "minSize"
-               && file.size() < param.getValue().toLongLong()) {
-        return ErrorMsg(param.getName(),
-                        "The file <property> is too small. Its size cannot be smaller than " +
-                        param.getValue().toString() + " bytes.");
+    QString fileName = value.toString();
+    if (!fileName.isEmpty()) {
+        QFileInfo file = QFileInfo(value.toString());
+        if (param.getName() == "mimeTypes") {
+            return this->validateMIMEType(file, param);
+        } else if (param.getName() == "extensions") {
+            return this->validateExtension(file, param);
+        } else if (param.getName() == "minSize"
+                   && file.size() < param.getValue().toLongLong()) {
+            return ErrorMsg(param.getName(),
+                            "The file <property> is too small. Its size cannot be smaller than " +
+                            param.getValue().toString() + " bytes.");
 
-    } else if (param.getName() == "maxSize") {
-        return ErrorMsg(param.getName(),
-                        "The file <property> is too big. Its size cannot exceed " +
-                        param.getValue().toString() + " bytes.");
+        } else if (param.getName() == "maxSize") {
+            return ErrorMsg(param.getName(),
+                            "The file <property> is too big. Its size cannot exceed " +
+                            param.getValue().toString() + " bytes.");
+        }
     }
     return ErrorMsg();
 }
diff --git a/src/validators/patternvalidator.cpp b/src/validators/patternvalidator.cpp
index 538d7ba..b907b33 100644
--- a/src/validators/patternvalidator.cpp
+++ b/src/validators/patternvalidator.cpp
@@ -5,15 +5,18 @@ PatternValidator::PatternValidator() : Validator() {
 }
 
 ErrorMsg PatternValidator::validateParam(QVariant value, Param param) const {
-    QRegularExpression regExp = QRegularExpression();
-    if (param.getName().isEmpty()) {
-        regExp.setPattern(param.getValue().toString());
-    } else {
-        regExp.setPattern(param.getName());
+    if (!value.toString().isEmpty()) {
+        QRegularExpression regExp = QRegularExpression();
+        if (param.getName().isEmpty()) {
+            regExp.setPattern(param.getValue().toString());
+        } else {
+            regExp.setPattern(param.getName());
+        }
+        if (regExp.match(value.toString()).hasMatch()) {
+            return ErrorMsg();
+        }
+        return ErrorMsg(param.getName(), "<property> not matches the pattern.");
     }
-    if (regExp.match(value.toString()).hasMatch()) {
-        return ErrorMsg();
-    }
-    return ErrorMsg(param.getName(), "<property> not matches the pattern.");
+    return ErrorMsg();
 }
 
diff --git a/src/validators/urlvalidator.cpp b/src/validators/urlvalidator.cpp
index 5a6cae7..d2f5ce1 100644
--- a/src/validators/urlvalidator.cpp
+++ b/src/validators/urlvalidator.cpp
@@ -7,7 +7,7 @@ UrlValidator::UrlValidator() : Validator() {
 
 ErrorMsg UrlValidator::validateParam(QVariant value, Param param) const {
     QString val = value.toString();
-    if (val.size() < 2000) {
+    if (!val.isEmpty() && val.size() < 2000) {
         if (param.getName() == "defaultScheme" && !param.getValue().isNull()) {
             val = param.getValue().toString() + "://" + val;
         }
