Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision fc14f551

Von Christian Ehringfeld vor mehr als 8 Jahren hinzugefügt

  • ID fc14f551e996109011e521ef59bbc91226977cbe
  • Vorgänger 74364e5e
  • Nachfolger 554f7bc0

validator stuff

Unterschiede anzeigen:

EntityManager.pro
src/validators/param.h \
src/validators/errormsg.h \
src/validators/defaultvalidator.h \
src/validators/validatorfactory.h
src/validators/validatorfactory.h \
src/validators/validatorrule.h
SOURCES += \
src/entity.cpp \
......
src/validators/param.cpp \
src/validators/errormsg.cpp \
src/validators/defaultvalidator.cpp \
src/validators/validatorfactory.cpp
src/validators/validatorfactory.cpp \
src/validators/validatorrule.cpp
CONFIG += c++14
QMAKE_CXXFLAGS += -std=c++14
samples/example/main.cpp
q.setDistinct(true);
q.appendOrderBy(OrderBy(QString("birthday"), Direction::SORT_DESC));
q.setLimit(10);
QList<QSharedPointer<Pupil>> list = e->find<Pupil>(q, true,false);
QList<QSharedPointer<Pupil>> list = e->find<Pupil>(q, true);
for (int i = 0; i < list.size(); ++i) {
// qWarning() << "-----------------------------";
// qWarning() << "Merge Pupil";
// qWarning() << "-----------------------------";
// list.at(i)->setBirthday(QDate(2222,12,22));
// QSharedPointer<Entity> pupilE = list.at(i).objectCast<Entity>();
// e->merge(pupilE,true);
qWarning() << list.at(i)->toString();
}
qWarning() << "-----------------------------";
......
qWarning() << "Remove Group";
qWarning() << "-----------------------------";
e->remove(entityGroupFindPtr);
sqliteproc->sqliteDBMemFile(true, "db.sqlite");
qWarning() << "Duration:" << t.elapsed();
delete sqliteproc;
src/entity.cpp
r.append("id: ") + this->getId() + "}";
return r;
}
QList<ErrorMsg> Entity::getErrors() const {
return errors;
}
void Entity::setErrors(const QList<ErrorMsg> &value) {
errors = value;
}
Entity::~Entity() {
}
QList<ValidationRule> Entity::validationRules() const {
return QList<ValidationRule>();
}
QString Entity::getTablename() const {
return QString(this->metaObject()->className()).toLower();
}
......
emit idChanged();
}
}
bool Entity::hasErrors() const {
return !this->errors.isEmpty();
}
src/entity.h
#include <QStack>
#include <QQueue>
#include "entityinstancefactory.h"
#include "validators/validatorrule.h"
#include "validators/errormsg.h"
namespace CuteEntityManager {
/**
......
public:
virtual QString toString() const;
virtual ~Entity();
virtual QList<ValidationRule> validationRules() const;
virtual QString getTablename() const;
virtual const QHash<QString, Relation> getRelations() const;
virtual const QStringList getTransientAttributes() const;
......
qint64 getId() const;
void setId(const qint64 &value);
protected:
bool hasErrors() const;
QList<ErrorMsg> getErrors() const;
void setErrors(const QList<ErrorMsg> &value);
protected:
explicit Entity (QObject *parent = 0);
virtual QString slimToString() const;
QList<ErrorMsg> errors;
qint64 id;
};
}
src/entitymanager.cpp
#include "entitymanager.h"
#include "enums/databasetype.h"
#include "databasemigration.h"
#include "validators/validatorfactory.h"
#include "validators/validator.h"
#include "validators/validatorrule.h"
using namespace CuteEntityManager;
QStringList EntityManager::connectionNames = QStringList();
......
return rc;
}
bool EntityManager::validate(QSharedPointer<Entity> &entity) {
QList<ValidationRule> rules = entity->validationRules();
QList<ErrorMsg> list = QList<ErrorMsg>();
for (int i = 0; i < rules.size(); ++i) {
ValidationRule rule = rules.at(i);
QSharedPointer<Validator> validator = ValidatorFactory::getValidatorObject(
rule.getValidatorName());
if (validator) {
for (int var = 0; var < rule.getAttributes().size(); ++var) {
QString attr = rule.getAttributes().at(var);
list.append(validator->validate(entity->getProperty(attr), rule.getParams()));
}
}
}
entity->setErrors(list);
return !entity->hasErrors();
}
QString EntityManager::createConnection() {
QStringList l = EntityManager::getConnectionNames();
QString conName = "";
......
* @return
*/
bool EntityManager::create(QList<QSharedPointer<Entity> > entities,
const bool persistRelations) {
const bool persistRelations, const bool validate) {
bool ok = true;
foreach (QSharedPointer<Entity> ent, entities) {
ok = this->create(ent, persistRelations);
ok = this->create(ent, persistRelations, validate);
if (!ok) {
break;
}
......
}
bool EntityManager::create(QSharedPointer<Entity> &entity,
const bool persistRelations, const bool checkDuplicate) {
const bool persistRelations, const bool checkDuplicate, const bool validate) {
bool rc = false;
if (this->checkTable(entity) && !(checkDuplicate && this->count(entity) > 0)) {
if (this->checkTable(entity) && ((validate && this->validate(entity))
|| !validate) && !(checkDuplicate && this->count(entity) > 0)) {
if (persistRelations) {
this->savePrePersistedRelations(entity);
}
......
return rc;
}
bool EntityManager::merge(QSharedPointer<Entity> &entity, bool withRelations) {
bool EntityManager::merge(QSharedPointer<Entity> &entity, bool withRelations,
const bool validate) {
bool ok = false;
if (entity->getId() > -1) {
if (entity->getId() > -1 && ((validate && this->validate(entity))
|| !validate)) {
if (withRelations) {
this->savePrePersistedRelations(entity);
}
src/entitymanager.h
#include "queryinterpreter.h"
#include "cache.h"
#include "querybuilder.h"
#include "validators/errormsg.h"
namespace CuteEntityManager {
class Logger;
......
QSharedPointer<Entity> &entity,
bool ignoreID = false);
bool create(QList<QSharedPointer<Entity>> entities,
const bool persistRelations = true);
const bool persistRelations = true, const bool validate = true);
bool create(QSharedPointer<Entity> &entity, const bool persistRelations = true,
const bool checkDuplicate = false);
const bool checkDuplicate = false, const bool validate = true);
bool save(QSharedPointer<Entity> &entity, const bool persistRelations = true);
qint64 findId(QSharedPointer<Entity> &entity);
bool merge(QSharedPointer<Entity> &entity, bool withRelations = true);
bool merge(QSharedPointer<Entity> &entity, bool withRelations = true,
const bool validate = true);
bool remove(QSharedPointer<Entity> &entity);
bool removeAll(QString tblname);
bool createTable(const QSharedPointer<Entity> &entity,
......
QList<QHash<QString, QVariant> > selectByQuery(Query &query);
QList<QHash<QString, QVariant> > selectBySql(const QString &sql);
qint8 count(Query &query);
bool validate(QSharedPointer<Entity> &entity);
public:
EntityManager(QSqlDatabase database, bool logQueries = false);
src/validators/validatorfactory.cpp
#include "validatorfactory.h"
#include "defaultvalidator.h"
using namespace CuteEntityManager;
ValidatorFactory::ValidatorFactory() {
}
QHash<QByteArray, ValidatorFactory::Constructor> ValidatorFactory::instance =
QHash<QByteArray, ValidatorFactory::Constructor>();
QHash<QString, QSharedPointer<Validator>> ValidatorFactory::validatorInstances =
QHash<QString, QSharedPointer<Validator>>();
Validator *ValidatorFactory::createValidator(QString shortname) {
Validator *ValidatorFactory::createValidator(const QString &shortname) {
if (Validator::builtInValidators().contains(shortname)) {
return ValidatorFactory::createObject(shortname.toLatin1());
return ValidatorFactory::createObject(Validator::builtInValidators().value(
shortname).toLatin1());
}
return nullptr;
}
Validator *ValidatorFactory::createObject(const QByteArray &className) {
Constructor constructor = ValidatorFactory::instance.value(className);
if ( constructor == nullptr ) {
return nullptr;
}
return (*constructor)();
}
QSharedPointer<Validator> ValidatorFactory::getValidatorObject(
const QString &shortname) {
if (!ValidatorFactory::validatorInstances.contains(shortname)) {
ValidatorFactory::validatorInstances.insert(shortname,
QSharedPointer<Validator>(ValidatorFactory::createValidator(shortname)));
}
return ValidatorFactory::validatorInstances.value(shortname);
}
void ValidatorFactory::registerClasses() {
if (ValidatorFactory::instance.isEmpty()) {
// Validator::registerClass<CompareValidator>();
// Validator::registerClass<CompareValidator>();
ValidatorFactory::registerClass<DefaultValidator>();
// Validator::registerClass<EmailValidator>();
// Validator::registerClass<ExistValidator>();
// Validator::registerClass<EmailValidator>();
// Validator::registerClass<ExistValidator>();
// Validator::registerClass<ImageValidator>();
// Validator::registerClass<SizeValidator>();
// Validator::registerClass<NumberValidator>();
src/validators/validatorfactory.h
#define VALIDATORFACTORY_H
#include <QString>
#include <QHash>
#include <QSharedPointer>
namespace CuteEntityManager {
class Validator;
class ValidatorFactory {
public:
static void registerClasses();
static Validator *createValidator(QString shortname);
static Validator *createValidator(const QString &shortname);
template<typename T>
static void registerClass() {
if (!ValidatorFactory::instance.contains(
......
}
}
static Validator *createObject( const QByteArray &className) {
Constructor constructor = ValidatorFactory::instance.value(className);
if ( constructor == nullptr ) {
return nullptr;
}
return (*constructor)();
}
static Validator *createObject( const QByteArray &className);
static QSharedPointer<Validator> getValidatorObject(const QString &shortname);
typedef Validator *(*Constructor)();
template<typename T>
static Validator *constructorHelper() {
return new T();
}
static QHash<QByteArray, Constructor> instance;
static QHash<QString, QSharedPointer<Validator>> validatorInstances;
protected:
ValidatorFactory();
src/validators/validatorrule.cpp
#include "validatorrule.h"
using namespace CuteEntityManager;
ValidationRule::ValidationRule() {
}
ValidationRule::ValidationRule(QString validatorName,
QString attributeName, QList<Param> params) {
this->validatorName = validatorName;
this->attributes = QStringList(attributeName);
this->params = params;
}
ValidationRule::ValidationRule(QString validatorName,
QString attributeName, Param param) {
this->validatorName = validatorName;
this->attributes = QStringList(attributeName);
if (!param.getName().isEmpty()) {
this->params.append(param);
}
}
ValidationRule::ValidationRule(QString validatorName,
QStringList attributeNames, QList<Param> params) {
this->validatorName = validatorName;
this->attributes = attributeNames;
this->params = params;
}
ValidationRule::ValidationRule(QString validatorName,
QStringList attributeNames, Param param) {
this->validatorName = validatorName;
this->attributes = attributeNames;
if (!param.getName().isEmpty()) {
this->params.append(param);
}
}
ValidationRule::ValidationRule(QString validatorName, QString attributeName,
QString paramName, QString paramValue) {
this->validatorName = validatorName;
this->attributes = QStringList(attributeName);
this->params.append(Param(paramName, paramValue));
}
ValidationRule::ValidationRule(QString validatorName, QString attributeName,
QString paramName1, QVariant paramValue1, QString paramName2,
QVariant paramValue2) {
this->validatorName = validatorName;
this->attributes = QStringList(attributeName);
params.append(Param(paramName1, paramValue1));
params.append(Param(paramName2, paramValue2));
}
ValidationRule::ValidationRule(QString validatorName,
QStringList attributeNames,
QString paramName, QVariant paramValue) {
this->validatorName = validatorName;
this->attributes = attributeNames;
this->params.append(Param(paramName, paramValue));
}
ValidationRule::ValidationRule(QString validatorName,
QStringList attributeNames,
QString paramName1, QVariant paramValue1, QString paramName2,
QVariant paramValue2) {
this->validatorName = validatorName;
this->attributes = attributeNames;
params.append(Param(paramName1, paramValue1));
params.append(Param(paramName2, paramValue2));
}
ValidationRule::~ValidationRule() {
}
QString ValidationRule::getValidatorName() const {
return validatorName;
}
void ValidationRule::setValidatorName(const QString &value) {
validatorName = value;
}
QStringList ValidationRule::getAttributes() const {
return attributes;
}
void ValidationRule::setAttributes(const QStringList &value) {
attributes = value;
}
QList<Param> ValidationRule::getParams() const {
return params;
}
void ValidationRule::setParams(const QList<Param> &value) {
params = value;
}
src/validators/validatorrule.h
#ifndef VALIDATORATTRIBUTE_H
#define VALIDATORATTRIBUTE_H
#include <QString>
#include <QStringList>
#include "param.h"
namespace CuteEntityManager {
class ValidationRule {
public:
ValidationRule();
explicit ValidationRule(QString validatorName, QString attributeName,
QList<Param> params = QList<Param>());
explicit ValidationRule(QString validatorName, QString attributeName,
Param param);
explicit ValidationRule(QString validatorName, QStringList attributeNames,
QList<Param> params = QList<Param>());
explicit ValidationRule(QString validatorName, QStringList attributeNames,
Param param);
explicit ValidationRule(QString validatorName, QString attributeName,
QString paramName, QString paramValue);
explicit ValidationRule(QString validatorName, QString attributeName,
QString paramName1, QVariant paramValue1, QString paramName2,
QVariant paramValue2);
explicit ValidationRule(QString validatorName, QStringList attributeNames,
QString paramName, QVariant paramValue = QVariant());
explicit ValidationRule(QString validatorName, QStringList attributeNames,
QString paramName1, QVariant paramValue1, QString paramName2,
QVariant paramValue2);
~ValidationRule();
QString getValidatorName() const;
void setValidatorName(const QString &value);
QStringList getAttributes() const;
void setAttributes(const QStringList &value);
QList<Param> getParams() const;
void setParams(const QList<Param> &value);
private:
QString validatorName;
QStringList attributes;
QList<Param> params;
};
}
#endif // VALIDATORATTRIBUTE_H

Auch abrufbar als: Unified diff