ImagingTools Core SDK
TSdlBasedMetaInfoDelegate.h
1// SPDX-License-Identifier: LGPL-2.1-or-later OR GPL-2.0-or-later OR GPL-3.0-or-later OR LicenseRef-ImtCore-Commercial
2#pragma once
3
4
5// Qt includes
6#include<QtCore/QJsonDocument>
7#include<QtCore/QJsonObject>
8
9// ACF includes
10#include <imod/TModelWrap.h>
11#include <idoc/CStandardDocumentMetaInfo.h>
12
13// ImtCore includes
14#include <imtdb/IJsonBasedMetaInfoDelegate.h>
15
16
17namespace imtdbgql
18{
19
20
21template<class MetaInfoRepresentation>
22class TSdlBasedMetaInfoDelegate: virtual public imtdb::IJsonBasedMetaInfoDelegate
23{
24public:
25 virtual bool ToJsonRepresentation(const idoc::IDocumentMetaInfo& metaInfo, QByteArray& json, const QByteArray& typeId) const override;
26 virtual bool FromJsonRepresentation(const QByteArray& json, idoc::IDocumentMetaInfo& metaInfo, const QByteArray& typeId) const override;
27
28protected:
29 virtual bool FillRepresentation(MetaInfoRepresentation& metaInfoRepresentation, const idoc::IDocumentMetaInfo& metaInfo, const QByteArray& typeId) const = 0;
30 virtual bool FillMetaInfo(idoc::IDocumentMetaInfo& metaInfo, const MetaInfoRepresentation& metaInfoRepresentation, const QByteArray& typeId) const = 0;
31};
32
33
34template<class MetaInfoRepresentation>
35bool TSdlBasedMetaInfoDelegate<MetaInfoRepresentation>::ToJsonRepresentation(const idoc::IDocumentMetaInfo& metaInfo, QByteArray& json, const QByteArray& typeId) const
36{
37 MetaInfoRepresentation representation;
38 if (FillRepresentation(representation, metaInfo, typeId)){
39 QJsonObject object;
40
41 if (representation.WriteToJsonObject(object)){
42 QJsonDocument document(object);
43 json = document.toJson(QJsonDocument::Compact);
44
45 return !json.isEmpty();
46 }
47 }
48
49 return false;
50}
51
52
53template<class MetaInfoRepresentation>
54bool TSdlBasedMetaInfoDelegate<MetaInfoRepresentation>::FromJsonRepresentation(const QByteArray& json, idoc::IDocumentMetaInfo& metaInfo, const QByteArray& typeId) const
55{
56 QJsonDocument document;
57 QJsonParseError error;
58 document = document.fromJson(json, &error);
59 if (document.isObject() && error.error == QJsonParseError::NoError){
60 QJsonObject object = document.object();
61 MetaInfoRepresentation representation;
62 if (representation.ReadFromJsonObject(object)){
63 if (FillMetaInfo(metaInfo, representation, typeId)){
64 return true;
65 }
66 }
67 }
68
69 return false;
70}
71
72
73
74} // namespace imtdbgql
75
76
Converts document metadata to/from JSON representation.