File indexing completed on 2024-05-12 15:59:17
0001 /* 0002 * SPDX-FileCopyrightText: 2009 Cyrille Berger <cberger@cberger.net> 0003 * 0004 * SPDX-License-Identifier: LGPL-2.1-or-later 0005 */ 0006 0007 #include "kis_meta_data_validator.h" 0008 0009 #include "kis_meta_data_store.h" 0010 #include "kis_meta_data_value.h" 0011 #include "kis_meta_data_entry.h" 0012 #include "kis_meta_data_schema.h" 0013 #include "kis_meta_data_type_info.h" 0014 0015 using namespace KisMetaData; 0016 0017 //------------------- Validator::Reason -------------------// 0018 0019 struct Q_DECL_HIDDEN Validator::Reason::Private { 0020 Type type; 0021 }; 0022 0023 Validator::Reason::Reason(Type _type) : d(new Private) 0024 { 0025 d->type = _type; 0026 } 0027 0028 Validator::Reason::Reason(const Validator::Reason& _rhs) : d(new Private(*_rhs.d)) 0029 { 0030 } 0031 0032 Validator::Reason& Validator::Reason::operator=(const Validator::Reason & _rhs) 0033 { 0034 *d = *_rhs.d; 0035 return *this; 0036 } 0037 0038 Validator::Reason::~Reason() 0039 { 0040 delete d; 0041 } 0042 0043 Validator::Reason::Type Validator::Reason::type() const 0044 { 0045 return d->type; 0046 } 0047 0048 //------------------- Validator -------------------// 0049 0050 struct Q_DECL_HIDDEN Validator::Private { 0051 Private() : countValidEntries(0) { 0052 } 0053 int countValidEntries; 0054 QMap<QString, Reason> invalidEntries; 0055 const Store* store; 0056 }; 0057 0058 Validator::Validator(const Store* store) : d(new Private) 0059 { 0060 d->store = store; 0061 revalidate(); 0062 } 0063 0064 Validator::~Validator() 0065 { 0066 delete d; 0067 } 0068 0069 void Validator::revalidate() 0070 { 0071 QList<Entry> entries = d->store->entries(); 0072 d->countValidEntries = 0; 0073 d->invalidEntries.clear(); 0074 Q_FOREACH (const Entry& entry, entries) { 0075 const TypeInfo* typeInfo = entry.schema()->propertyType(entry.name()); 0076 if (typeInfo) { 0077 if (typeInfo->hasCorrectType(entry.value())) { 0078 if (typeInfo->hasCorrectValue(entry.value())) { 0079 ++d->countValidEntries; 0080 } else { 0081 d->invalidEntries[entry.qualifiedName()] = Reason(Reason::INVALID_VALUE); 0082 } 0083 } else { 0084 d->invalidEntries[entry.qualifiedName()] = Reason(Reason::INVALID_TYPE); 0085 } 0086 } else { 0087 d->invalidEntries[entry.qualifiedName()] = Reason(Reason::UNKNOWN_ENTRY); 0088 } 0089 } 0090 } 0091 0092 int Validator::countInvalidEntries() const 0093 { 0094 return d->invalidEntries.size(); 0095 } 0096 int Validator::countValidEntries() const 0097 { 0098 return d->countValidEntries; 0099 } 0100 const QMap<QString, Validator::Reason>& Validator::invalidEntries() const 0101 { 0102 return d->invalidEntries; 0103 } 0104 0105