commit ec6a9500750fce573d6d3cf1e21a0077678178f5
Author: Christian Ehringfeld <c.ehringfeld@t-online.de>
Date:   Mon Aug 10 23:30:06 2015 +0200

    validators

diff --git a/EntityManager.pro b/EntityManager.pro
index 4cc3f3c..1a75aaa 100644
--- a/EntityManager.pro
+++ b/EntityManager.pro
@@ -38,7 +38,15 @@ src/entity.h \
     src/validators/validatorfactory.h \
     src/validators/validatorrule.h \
     src/validators/requiredvalidator.h \
-    src/validators/numbervalidator.h
+    src/validators/numbervalidator.h \
+    src/validators/urlvalidator.h \
+    src/validators/comparevalidator.h \
+    src/validators/datevalidator.h \
+    src/validators/emailvalidator.h \
+    src/validators/existvalidator.h \
+    src/validators/filevalidator.h \
+    src/validators/imagevalidator.h \
+    src/validators/uniquevalidator.h
 
 SOURCES += \
 src/entity.cpp \
@@ -70,7 +78,15 @@ src/entity.cpp \
     src/validators/validatorfactory.cpp \
     src/validators/validatorrule.cpp \
     src/validators/requiredvalidator.cpp \
-    src/validators/numbervalidator.cpp
+    src/validators/numbervalidator.cpp \
+    src/validators/urlvalidator.cpp \
+    src/validators/comparevalidator.cpp \
+    src/validators/datevalidator.cpp \
+    src/validators/emailvalidator.cpp \
+    src/validators/existvalidator.cpp \
+    src/validators/filevalidator.cpp \
+    src/validators/imagevalidator.cpp \
+    src/validators/uniquevalidator.cpp
 
 CONFIG += c++14
 QMAKE_CXXFLAGS += -std=c++14
diff --git a/src/validators/comparevalidator.cpp b/src/validators/comparevalidator.cpp
new file mode 100644
index 0000000..e6f923a
--- /dev/null
+++ b/src/validators/comparevalidator.cpp
@@ -0,0 +1,11 @@
+#include "comparevalidator.h"
+
+using namespace CuteEntityManager;
+CompareValidator::CompareValidator() : Validator() {
+
+}
+
+ErrorMsg CompareValidator::validateParam(QVariant value, Param param) const {
+
+}
+
diff --git a/src/validators/comparevalidator.h b/src/validators/comparevalidator.h
new file mode 100644
index 0000000..064a5df
--- /dev/null
+++ b/src/validators/comparevalidator.h
@@ -0,0 +1,13 @@
+#ifndef COMPAREVALIDATOR_H
+#define COMPAREVALIDATOR_H
+#include "validator.h"
+namespace CuteEntityManager {
+class CompareValidator : public Validator {
+    Q_OBJECT
+  public:
+    CompareValidator();
+    ErrorMsg validateParam(QVariant value, Param param) const final override;
+};
+}
+
+#endif // COMPAREVALIDATOR_H
diff --git a/src/validators/datevalidator.cpp b/src/validators/datevalidator.cpp
new file mode 100644
index 0000000..63a69ce
--- /dev/null
+++ b/src/validators/datevalidator.cpp
@@ -0,0 +1,11 @@
+#include "datevalidator.h"
+
+using namespace CuteEntityManager;
+DateValidator::DateValidator() : Validator() {
+
+}
+
+ErrorMsg DateValidator::validateParam(QVariant value, Param param) const {
+
+}
+
diff --git a/src/validators/datevalidator.h b/src/validators/datevalidator.h
new file mode 100644
index 0000000..c98119d
--- /dev/null
+++ b/src/validators/datevalidator.h
@@ -0,0 +1,13 @@
+#ifndef DATEVALIDATOR_H
+#define DATEVALIDATOR_H
+#include "validator.h"
+namespace CuteEntityManager {
+class DateValidator : public Validator {
+    Q_OBJECT
+  public:
+    DateValidator();
+    ErrorMsg validateParam(QVariant value, Param param) const final override;
+};
+}
+
+#endif // DATEVALIDATOR_H
diff --git a/src/validators/emailvalidator.cpp b/src/validators/emailvalidator.cpp
new file mode 100644
index 0000000..4bfc028
--- /dev/null
+++ b/src/validators/emailvalidator.cpp
@@ -0,0 +1,11 @@
+#include "emailvalidator.h"
+
+using namespace CuteEntityManager;
+EmailValidator::EmailValidator() : Validator() {
+
+}
+
+ErrorMsg EmailValidator::validateParam(QVariant value, Param param) const {
+
+}
+
diff --git a/src/validators/emailvalidator.h b/src/validators/emailvalidator.h
new file mode 100644
index 0000000..2d93386
--- /dev/null
+++ b/src/validators/emailvalidator.h
@@ -0,0 +1,12 @@
+#ifndef EMAILVALIDATOR_H
+#define EMAILVALIDATOR_H
+#include "validator.h"
+namespace CuteEntityManager {
+class EmailValidator : public Validator {
+    Q_OBJECT
+  public:
+    EmailValidator();
+    ErrorMsg validateParam(QVariant value, Param param) const final override;
+};
+}
+#endif // EMAILVALIDATOR_H
diff --git a/src/validators/existvalidator.cpp b/src/validators/existvalidator.cpp
new file mode 100644
index 0000000..6af93fa
--- /dev/null
+++ b/src/validators/existvalidator.cpp
@@ -0,0 +1,10 @@
+#include "existvalidator.h"
+using namespace CuteEntityManager;
+ExistValidator::ExistValidator() : Validator() {
+
+}
+
+ErrorMsg ExistValidator::validateParam(QVariant value, Param param) const {
+
+}
+
diff --git a/src/validators/existvalidator.h b/src/validators/existvalidator.h
new file mode 100644
index 0000000..1aaccef
--- /dev/null
+++ b/src/validators/existvalidator.h
@@ -0,0 +1,12 @@
+#ifndef EXISTVALIDATOR_H
+#define EXISTVALIDATOR_H
+#include "validator.h"
+namespace CuteEntityManager {
+class ExistValidator : public Validator {
+    Q_OBJECT
+  public:
+    ExistValidator();
+    ErrorMsg validateParam(QVariant value, Param param) const final override;
+};
+}
+#endif // EXISTVALIDATOR_H
diff --git a/src/validators/filevalidator.cpp b/src/validators/filevalidator.cpp
new file mode 100644
index 0000000..ae20d90
--- /dev/null
+++ b/src/validators/filevalidator.cpp
@@ -0,0 +1,11 @@
+#include "filevalidator.h"
+
+using namespace CuteEntityManager;
+FileValidator::FileValidator() : Validator() {
+
+}
+
+ErrorMsg FileValidator::validateParam(QVariant value, Param param) const {
+
+}
+
diff --git a/src/validators/filevalidator.h b/src/validators/filevalidator.h
new file mode 100644
index 0000000..a4e2603
--- /dev/null
+++ b/src/validators/filevalidator.h
@@ -0,0 +1,12 @@
+#ifndef FILEVALIDATOR_H
+#define FILEVALIDATOR_H
+#include "validator.h"
+namespace CuteEntityManager {
+class FileValidator : public Validator {
+    Q_OBJECT
+  public:
+    FileValidator();
+    virtual ErrorMsg validateParam(QVariant value, Param param) const override;
+};
+}
+#endif // FILEVALIDATOR_H
diff --git a/src/validators/imagevalidator.cpp b/src/validators/imagevalidator.cpp
new file mode 100644
index 0000000..2dee1cd
--- /dev/null
+++ b/src/validators/imagevalidator.cpp
@@ -0,0 +1,10 @@
+#include "imagevalidator.h"
+
+using namespace CuteEntityManager;
+ImageValidator::ImageValidator() : FileValidator() {
+
+}
+
+ErrorMsg ImageValidator::validateParam(QVariant value, Param param) const {
+
+}
diff --git a/src/validators/imagevalidator.h b/src/validators/imagevalidator.h
new file mode 100644
index 0000000..52b8129
--- /dev/null
+++ b/src/validators/imagevalidator.h
@@ -0,0 +1,15 @@
+#ifndef IMAGEVALIDATOR_H
+#define IMAGEVALIDATOR_H
+
+
+#include "filevalidator.h"
+namespace CuteEntityManager {
+class ImageValidator : public FileValidator {
+    Q_OBJECT
+  public:
+    ImageValidator();
+    ErrorMsg validateParam(QVariant value, Param param) const final override;
+};
+}
+
+#endif // IMAGEVALIDATOR_H
diff --git a/src/validators/uniquevalidator.cpp b/src/validators/uniquevalidator.cpp
new file mode 100644
index 0000000..63379a7
--- /dev/null
+++ b/src/validators/uniquevalidator.cpp
@@ -0,0 +1,10 @@
+#include "uniquevalidator.h"
+
+using namespace CuteEntityManager;
+UniqueValidator::UniqueValidator() {
+
+}
+
+ErrorMsg UniqueValidator::validateParam(QVariant value, Param param) const {
+
+}
diff --git a/src/validators/uniquevalidator.h b/src/validators/uniquevalidator.h
new file mode 100644
index 0000000..a1936af
--- /dev/null
+++ b/src/validators/uniquevalidator.h
@@ -0,0 +1,12 @@
+#ifndef UNIQUEVALIDATOR_H
+#define UNIQUEVALIDATOR_H
+#include "validator.h"
+namespace CuteEntityManager {
+class UniqueValidator : public Validator {
+    Q_OBJECT
+  public:
+    UniqueValidator();
+    ErrorMsg validateParam(QVariant value, Param param) const final override;
+};
+}
+#endif // UNIQUEVALIDATOR_H
diff --git a/src/validators/urlvalidator.cpp b/src/validators/urlvalidator.cpp
new file mode 100644
index 0000000..aa0185c
--- /dev/null
+++ b/src/validators/urlvalidator.cpp
@@ -0,0 +1,56 @@
+#include "urlvalidator.h"
+using namespace CuteEntityManager;
+#include <QRegularExpression>
+UrlValidator::UrlValidator() : Validator() {
+
+}
+
+ErrorMsg UrlValidator::validateParam(QVariant value, Param param) const {
+    QString val = value.toString();
+    if (val.size() < 2000) {
+        if (param.getName() == "defaultScheme" && !param.getValue().isNull()) {
+            val = param.getValue().toString() + "://" + val;
+        }
+        QString pattern = "";
+        if (this->pattern.indexOf("{schemes}") != -1) {
+            QString replacement = "(";
+            bool first = true;
+            for (int i = 0; i < this->validSchemes.size(); ++i) {
+                if (first) {
+                    first = false;
+                } else {
+                    replacement += "|";
+                }
+                replacement += this->validSchemes.at(i);
+            }
+            replacement += ")";
+            pattern = this->getPattern().replace("{schemes}", replacement);
+        } else {
+            pattern = this->pattern;
+        }
+        QRegularExpression regExp = QRegularExpression(pattern);
+        if (regExp.match(val).hasMatch()) {
+            return ErrorMsg();
+        } else {
+            return ErrorMsg(param.getName(), "Value is not a valid URL.");
+        }
+    }
+    return ErrorMsg();
+}
+
+QStringList UrlValidator::getValidSchemes() const {
+    return validSchemes;
+}
+
+void UrlValidator::setValidSchemes(const QStringList &value) {
+    validSchemes = value;
+}
+QString UrlValidator::getPattern() const {
+    return pattern;
+}
+
+void UrlValidator::setPattern(const QString &value) {
+    pattern = value;
+}
+
+
diff --git a/src/validators/urlvalidator.h b/src/validators/urlvalidator.h
new file mode 100644
index 0000000..a2fdf3a
--- /dev/null
+++ b/src/validators/urlvalidator.h
@@ -0,0 +1,24 @@
+#ifndef URLVALIDATOR_H
+#define URLVALIDATOR_H
+
+#include "validator.h"
+namespace CuteEntityManager {
+class UrlValidator : public Validator {
+    Q_OBJECT
+  public:
+    UrlValidator();
+    ErrorMsg validateParam(QVariant value, Param param) const final override;
+    QStringList getValidSchemes() const;
+    void setValidSchemes(const QStringList &value);
+
+    QString getPattern() const;
+    void setPattern(const QString &value);
+
+  protected:
+    QString pattern =
+        QStringLiteral("/^{schemes}:\\/\\/(([A-Z0-9][A-Z0-9_-]*)(\\.[A-Z0-9][A-Z0-9_-]*)+)/i");
+    QStringList validSchemes = {"http", "https"};
+};
+}
+
+#endif // URLVALIDATOR_H
diff --git a/src/validators/validator.cpp b/src/validators/validator.cpp
index 2d09746..ae8b61b 100644
--- a/src/validators/validator.cpp
+++ b/src/validators/validator.cpp
@@ -10,17 +10,17 @@ Validator::~Validator() {
 
 const QHash<QString, QString> Validator::builtInValidators() {
     QHash<QString, QString> hash = QHash<QString, QString>();
-//    hash.insert("compare", "CompareValidator");
+    hash.insert("compare", "CompareValidator");
     hash.insert("default", "DefaultValidator");
-//    hash.insert("email", "EmailValidator");
-//    hash.insert("exist", "ExistValidator");
-//    hash.insert("image", "ImageValidator");
-//    hash.insert("size", "SizeValidator");
+    hash.insert("email", "EmailValidator");
+    hash.insert("exist", "ExistValidator");
+    hash.insert("file", "FileValidator");
+    hash.insert("image", "ImageValidator");
     hash.insert("number", "NumberValidator");
-//    hash.insert("date", "DateValidator");
+    hash.insert("date", "DateValidator");
     hash.insert("required", "RequiredValidator");
-//    hash.insert("unique", "UniqueValidator");
-//    hash.insert("url", "UrlValidator");
+    hash.insert("unique", "UniqueValidator");
+    hash.insert("url", "UrlValidator");
     return hash;
 }
 
diff --git a/src/validators/validatorfactory.cpp b/src/validators/validatorfactory.cpp
index 6fff2fd..51ddd1d 100644
--- a/src/validators/validatorfactory.cpp
+++ b/src/validators/validatorfactory.cpp
@@ -2,6 +2,15 @@
 #include "defaultvalidator.h"
 #include "requiredvalidator.h"
 #include "numbervalidator.h"
+#include "comparevalidator.h"
+#include "emailvalidator.h"
+#include "existvalidator.h"
+#include "filevalidator.h"
+#include "imagevalidator.h"
+#include "datevalidator.h"
+#include "requiredvalidator.h"
+#include "urlvalidator.h"
+#include "uniquevalidator.h"
 using namespace CuteEntityManager;
 
 ValidatorFactory::ValidatorFactory() {
@@ -41,16 +50,16 @@ QSharedPointer<Validator> ValidatorFactory::getValidatorObject(
 
 void ValidatorFactory::registerClasses() {
     if (ValidatorFactory::instance.isEmpty()) {
-        //        ValidatorFactory::registerClass<CompareValidator>();
+        ValidatorFactory::registerClass<CompareValidator>();
         ValidatorFactory::registerClass<DefaultValidator>();
-        //        ValidatorFactory::registerClass<EmailValidator>();
-        //        ValidatorFactory::registerClass<ExistValidator>();
-//        ValidatorFactory::registerClass<ImageValidator>();
-//        ValidatorFactory::registerClass<SizeValidator>();
+        ValidatorFactory::registerClass<EmailValidator>();
+        ValidatorFactory::registerClass<ExistValidator>();
+        ValidatorFactory::registerClass<FileValidator>();
+        ValidatorFactory::registerClass<ImageValidator>();
         ValidatorFactory::registerClass<NumberValidator>();
-//        ValidatorFactory::registerClass<DateValidator>();
+        ValidatorFactory::registerClass<DateValidator>();
         ValidatorFactory::registerClass<RequiredValidator>();
-//        ValidatorFactory::registerClass<UniqueValidator>();
-//        ValidatorFactory::registerClass<UrlValidator>();
+        ValidatorFactory::registerClass<UniqueValidator>();
+        ValidatorFactory::registerClass<UrlValidator>();
     }
 }
diff --git a/src/validators/validatorrule.cpp b/src/validators/validatorrule.cpp
index e1d9fe8..c315453 100644
--- a/src/validators/validatorrule.cpp
+++ b/src/validators/validatorrule.cpp
@@ -94,7 +94,3 @@ QList<Param> ValidationRule::getParams() const {
 void ValidationRule::setParams(const QList<Param> &value) {
     params = value;
 }
-
-
-
-
