Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_meta_data_validator.cc
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2009 Cyrille Berger <cberger@cberger.net>
3 *
4 * SPDX-License-Identifier: LGPL-2.1-or-later
5 */
6
8
10#include "kis_meta_data_value.h"
11#include "kis_meta_data_entry.h"
14
15using namespace KisMetaData;
16
17//------------------- Validator::Reason -------------------//
18
19struct Q_DECL_HIDDEN Validator::Reason::Private {
20 Type type;
21};
22
23Validator::Reason::Reason(Type _type) : d(new Private)
24{
25 d->type = _type;
26}
27
28Validator::Reason::Reason(const Validator::Reason& _rhs) : d(new Private(*_rhs.d))
29{
30}
31
33{
34 *d = *_rhs.d;
35 return *this;
36}
37
39{
40 delete d;
41}
42
44{
45 return d->type;
46}
47
48//------------------- Validator -------------------//
49
50struct Q_DECL_HIDDEN Validator::Private {
51 Private() : countValidEntries(0) {
52 }
54 QMap<QString, Reason> invalidEntries;
55 const Store* store;
56};
57
58Validator::Validator(const Store* store) : d(new Private)
59{
60 d->store = store;
61 revalidate();
62}
63
65{
66 delete d;
67}
68
70{
71 QList<Entry> entries = d->store->entries();
72 d->countValidEntries = 0;
73 d->invalidEntries.clear();
74 Q_FOREACH (const Entry& entry, entries) {
75 const TypeInfo* typeInfo = entry.schema()->propertyType(entry.name());
76 if (typeInfo) {
77 if (typeInfo->hasCorrectType(entry.value())) {
78 if (typeInfo->hasCorrectValue(entry.value())) {
79 ++d->countValidEntries;
80 } else {
81 d->invalidEntries[entry.qualifiedName()] = Reason(Reason::INVALID_VALUE);
82 }
83 } else {
84 d->invalidEntries[entry.qualifiedName()] = Reason(Reason::INVALID_TYPE);
85 }
86 } else {
87 d->invalidEntries[entry.qualifiedName()] = Reason(Reason::UNKNOWN_ENTRY);
88 }
89 }
90}
91
93{
94 return d->invalidEntries.size();
95}
97{
98 return d->countValidEntries;
99}
100const QMap<QString, Validator::Reason>& Validator::invalidEntries() const
101{
102 return d->invalidEntries;
103}
104
105
QString name() const
const KisMetaData::Value & value() const
const KisMetaData::Schema * schema() const
QString qualifiedName() const
const TypeInfo * propertyType(const QString &_propertyName) const
bool hasCorrectType(const Value &value) const
bool hasCorrectValue(const Value &value) const
Reason(Type type=UNKNOWN_REASON)
const QMap< QString, Reason > & invalidEntries() const
int countValidEntries() const
const Store * store
QMap< QString, Reason > invalidEntries