Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_meta_data_schema_registry.cc
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2007, 2009 Cyrille Berger <cberger@cberger.net>
3 *
4 * SPDX-License-Identifier: LGPL-2.1-or-later
5 */
6
8
9#include <QGlobalStatic>
10#include <QString>
11
12#include <KoResourcePaths.h>
13
14#include "kis_debug.h"
16
17using namespace KisMetaData;
18
19// ---- Schema Registry ---- //
20
21struct Q_DECL_HIDDEN SchemaRegistry::Private {
22 QHash<QString, Schema*> uri2Schema;
23 QHash<QString, Schema*> prefix2Schema;
24};
25
27
29{
30 return s_instance;
31}
32
33SchemaRegistry::SchemaRegistry()
34 : d(new Private)
35{
36 KoResourcePaths::addAssetType("metadata_schema", "data", "/metadata/schemas/");
37
38 QStringList schemasFilenames = KoResourcePaths::findAllAssets("metadata_schema", "*.schema");
39
40 Q_FOREACH (const QString& fileName, schemasFilenames) {
41 Schema* schema = new Schema();
42 schema->d->load(fileName);
43 if (schemaFromUri(schema->uri())) {
44 errMetaData << "Schema already exist uri: " << schema->uri();
45 delete schema;
46 } else if (schemaFromPrefix(schema->prefix())) {
47 errMetaData << "Schema already exist prefix: " << schema->prefix();
48 delete schema;
49 } else {
50 d->uri2Schema[schema->uri()] = schema;
51 d->prefix2Schema[schema->prefix()] = schema;
52 }
53 }
54
55 // DEPRECATED WRITE A SCHEMA FOR EACH OF THEM
57 create(Schema::IPTCSchemaUri, "Iptc4xmpCore");
59}
60
65
66
67const Schema* SchemaRegistry::schemaFromUri(const QString & uri) const
68{
69 return d->uri2Schema[uri];
70}
71
72const Schema* SchemaRegistry::schemaFromPrefix(const QString & prefix) const
73{
74 return d->prefix2Schema[prefix];
75}
76
77const Schema* SchemaRegistry::create(const QString & uri, const QString & prefix)
78{
79 // First search for the schema
80 const Schema* schema = schemaFromUri(uri);
81 if (schema) {
82 return schema;
83 }
84 // Second search for the prefix
85 schema = schemaFromPrefix(prefix);
86 if (schema) {
87 return 0; // A schema with the same prefix already exist
88 }
89 // The schema doesn't exist yet, create it
90 Schema* nschema = new Schema(uri, prefix);
91 d->uri2Schema[uri] = nschema;
92 d->prefix2Schema[prefix] = nschema;
93 return nschema;
94}
95
Q_GLOBAL_STATIC(KisStoragePluginRegistry, s_instance)
PythonPluginManager * instance
const Schema * schemaFromPrefix(const QString &prefix) const
const Schema * schemaFromUri(const QString &uri) const
const KisMetaData::Schema * create(const QString &uri, const QString &prefix)
static const QString PhotoshopSchemaUri
static const QString IPTCSchemaUri
static const QString MakerNoteSchemaUri
static void addAssetType(const QString &type, const char *basetype, const QString &relativeName, bool priority=true)
static QStringList findAllAssets(const QString &type, const QString &filter=QString(), SearchOptions options=NoSearchOptions)
#define errMetaData
Definition kis_debug.h:123
QHash< QString, Schema * > prefix2Schema
QHash< QString, Schema * > uri2Schema