ImagingTools Core SDK
TMessageDatabaseDelegateComp.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 <QtSql/QSqlRecord>
7
8// ACF includes
9#include <istd/CCrcCalculator.h>
10#include <istd/TDelPtr.h>
11#include <ilog/CMessage.h>
12#include <iprm/IParamsSet.h>
13#include <iprm/ITextParam.h>
14
15
16namespace imtdb
17{
18
19
20template <class BaseDelegate>
21class TMessageDatabaseDelegateComp: public BaseDelegate
22{
23public:
24 typedef BaseDelegate BaseClass;
25
26 I_BEGIN_COMPONENT(TMessageDatabaseDelegateComp)
27 I_END_COMPONENT
28
29 // reimplemented (imtdb::ISqlDatabaseObjectDelegate)
30 virtual istd::IChangeableUniquePtr CreateObjectFromRecord(
31 const QSqlRecord& record,
32 const iprm::IParamsSet* paramsPtr = nullptr) const override;
33 virtual bool CreateObjectFilterQuery(const iprm::IParamsSet& filterParams, QString& filterQuery) const override;
34};
35
36
37// public methods
38
39// reimplemented (imtdb::ISqlDatabaseObjectDelegate)
40
41template <class BaseDelegate>
42istd::IChangeableUniquePtr TMessageDatabaseDelegateComp<BaseDelegate>::CreateObjectFromRecord(
43 const QSqlRecord& record,
44 const iprm::IParamsSet* /*paramsPtr*/) const
45{
46 if (!this->m_databaseEngineCompPtr.IsValid()){
47 return nullptr;
48 }
49
50 if (!this->m_documentFactoriesCompPtr.IsValid()){
51 return nullptr;
52 }
53
54 istd::IChangeableUniquePtr documentPtr;
55 documentPtr.SetPtr(new ilog::CMessage());
56 if (!documentPtr.IsValid()){
57 return nullptr;
58 }
59
60 if (record.contains("Document")){
61 QByteArray documentContent = record.value(qPrintable("Document")).toByteArray();
62
63 if (BaseDelegate::ReadDataFromMemory("MessageInfo", documentContent, *documentPtr)){
64 return documentPtr;
65 }
66 }
67
68 return nullptr;
69}
70
71
72template <class BaseDelegate>
73bool TMessageDatabaseDelegateComp<BaseDelegate>::CreateObjectFilterQuery(const iprm::IParamsSet& filterParams, QString& filterQuery) const
74{
75 const iprm::IParamsSet* categoryParamsSetPtr = dynamic_cast<const iprm::IParamsSet*>(filterParams.GetParameter("Category"));
76 if (categoryParamsSetPtr != nullptr){
77 iprm::IParamsSet::Ids paramIds = categoryParamsSetPtr->GetParamIds();
78
79 if (!paramIds.isEmpty()){
80#if QT_VERSION < 0x060000
81 QByteArrayList idsList(paramIds.toList());
82#else
83 QByteArrayList idsList(paramIds.cbegin(), paramIds.cend());
84#endif
85 for (int i = 0; i < idsList.size(); i++){
86 const QByteArray& key = idsList[i];
87
88 const iprm::ITextParam* textParamPtr = dynamic_cast<const iprm::ITextParam*>(categoryParamsSetPtr->GetParameter(key));
89 if (textParamPtr == nullptr){
90 return false;
91 }
92
93 QString value = textParamPtr->GetText();
94 if (key == "VerboseFilter" && value == "false"){
95 if (!filterQuery.isEmpty()){
96 filterQuery += " AND ";
97 }
98 filterQuery += QString("json_extract(\"Document\",'$.Category') != 0");
99 }
100 else if (key == "InfoFilter" && value == "false"){
101 if (!filterQuery.isEmpty()){
102 filterQuery += " AND ";
103 }
104 filterQuery += QString("json_extract(\"Document\",'$.Category') != 1");
105 }
106 else if (key == "WarningFilter" && value == "false"){
107 if (!filterQuery.isEmpty()){
108 filterQuery += " AND ";
109 }
110 filterQuery += QString("json_extract(\"Document\",'$.Category') != 2");
111 }
112 else if (key == "ErrorFilter" && value == "false"){
113 if (!filterQuery.isEmpty()){
114 filterQuery += " AND ";
115 }
116 filterQuery += QString("json_extract(\"Document\",'$.Category') != 3");
117 }
118 else if (key == "CriticalFilter" && value == "false"){
119 if (!filterQuery.isEmpty()){
120 filterQuery += " AND ";
121 }
122 filterQuery += QString("json_extract(\"Document\",'$.Category') != 4");
123 }
124 }
125 }
126 }
127
128 const iprm::IParamsSet* sourceParamsSetPtr = dynamic_cast<const iprm::IParamsSet*>(filterParams.GetParameter("Source"));
129 if (sourceParamsSetPtr != nullptr){
130 iprm::IParamsSet::Ids paramIds = sourceParamsSetPtr->GetParamIds();
131
132 if (!paramIds.isEmpty()){
133#if QT_VERSION < 0x060000
134 QByteArrayList idsList(paramIds.toList());
135#else
136 QByteArrayList idsList(paramIds.cbegin(), paramIds.cend());
137#endif
138 for (int i = 0; i < idsList.size(); i++){
139 const QByteArray& key = idsList[i];
140
141 const iprm::ITextParam* textParamPtr = dynamic_cast<const iprm::ITextParam*>(sourceParamsSetPtr->GetParameter(key));
142 if (textParamPtr == nullptr){
143 return false;
144 }
145
146 QString value = textParamPtr->GetText();
147 if (value == "false"){
148 if (!filterQuery.isEmpty()){
149 filterQuery += " AND ";
150 }
151 filterQuery += QString("json_extract(\"Document\",'$.Source') != '%1'").arg(qPrintable(key));
152 }
153 }
154 }
155 }
156
157 return true;
158}
159
160
161} // namespace imtdb
162
163
Database Abstraction Layer (ORM Framework) for ImtCore applications.