ImagingTools Core SDK
CMongoDatabaseObjectDelegateCompBase.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// ACF includes
6#include <ilog/TLoggerCompWrap.h>
7#include <iprm/IOptionsList.h>
8
9// ImtCore includes
10#include <imtbase/ICollectionFilter.h>
11#include <imtmongo/IMongoDatabaseObjectDelegate.h>
12#include <imtmongo/IMongoDatabaseEngine.h>
13
14
15namespace imtmongo
16{
17
18
19class CMongoDatabaseObjectDelegateCompBase:
20 public ilog::CLoggerComponentBase,
22{
23public:
24 typedef ilog::CLoggerComponentBase BaseClass;
25
26 I_BEGIN_BASE_COMPONENT(CMongoDatabaseObjectDelegateCompBase)
27 I_REGISTER_INTERFACE(imtmongo::IMongoDatabaseObjectDelegate);
28 I_ASSIGN(m_typesCompPtr, "ObjectTypes", "List of object types supported by the related database collection", false, "ObjectTypes");
29 I_ASSIGN(m_databaseEngineCompPtr, "DatabaseEngine", "Database engine for SQL queries", true, "DatabaseEngine");
30 I_ASSIGN(m_tableNameAttrPtr, "TableName", "Name of the object table", true, "");
31 I_ASSIGN(m_objectIdColumnAttrPtr, "ObjectIdColumn", "Name of the column containing ID of the object", true, "Id");
32 I_ASSIGN(m_objectTypeIdColumnAttrPtr, "ObjectTypeIdColumn", "Name of the column containing type-ID of the object", true, "TypeId");
33 I_ASSIGN(m_separatorObjectIdAttrPtr, "SeparatorObjectId", "Separator of the object ID", false, "SeparatorObjectId");
34 I_END_COMPONENT
35
36 // reimplemented (imtdb::IMongoDatabaseObjectDelegate)
37 virtual const iprm::IOptionsList* GetObjectTypeInfos() const override;
38
39 virtual QByteArray GetObjectTypeId(const QByteArray& objectId) const override;
40
41 virtual bsoncxx::document::view_or_value GetCountQuery(const iprm::IParamsSet* paramsPtr = nullptr) const override;
42
43 virtual bsoncxx::document::view_or_value GetSelectionQuery(
44 const QByteArray& objectId = QByteArray(),
45 int offset = 0,
46 int count = -1,
47 const iprm::IParamsSet* paramsPtr = nullptr) const override;
48
49 virtual bsoncxx::document::view_or_value CreateNewObjectQuery(
50 const QByteArray& typeId,
51 const QByteArray& proposedObjectId,
52 const QString& objectName,
53 const QString& objectDescription,
54 const istd::IChangeable* valuePtr) const = 0;
55
56 virtual bsoncxx::document::view_or_value CreateDeleteObjectQuery(
57 const QByteArray& objectId) const = 0;
58
59 virtual bsoncxx::document::view_or_value CreateUpdateObjectQuery(
60 const QByteArray& objectId,
61 const istd::IChangeable& object,
62 bool useExternDelegate = true) const = 0;
63
64 virtual bsoncxx::document::view_or_value CreateResetQuery(const imtbase::IObjectCollection& collection) const override;
65
66 virtual bsoncxx::document::view_or_value CreateDataMetaInfoQuery(
67 const imtbase::IObjectCollection& collection,
68 const QByteArray& objectId,
69 const idoc::IDocumentMetaInfo* dataMetaInfoPtr) const override;
70
71 virtual bsoncxx::document::view_or_value CreateCollectionItemMetaInfoQuery(
72 const imtbase::IObjectCollection& collection,
73 const QByteArray& objectId,
74 const idoc::IDocumentMetaInfo* collectionItemMetaInfoPtr) const override;
75
76 virtual QByteArray GetObjectIdFromRecord(const bsoncxx::document::view& doc) const override;
77
78 virtual bool CreateObjectInfoFromRecord(
79 const bsoncxx::document::view& doc,
80 idoc::MetaInfoPtr& objectMetaInfoPtr,
81 idoc::MetaInfoPtr& collectionItemMetaInfoPtr) const override;
82
83 virtual istd::IChangeableUniquePtr CreateObjectFromRecord(const bsoncxx::document::view& doc) const override;
84 virtual QVariant GetElementInfoFromRecord(const bsoncxx::document::view& doc, const QString& infoId) const override;
85
86 virtual QByteArray GetObjectIdFromMongoId(QByteArray mid) const override;
87
88 virtual QString GetTableName() const override;
89
90protected:
91 virtual QString GetBaseSelectionQuery() const;
92 virtual idoc::IDocumentMetaInfo* CreateCollectionItemMetaInfo(const QByteArray& typeId) const;
93 virtual idoc::MetaInfoPtr CreateObjectMetaInfo(const QByteArray& typeId) const;
94 virtual bool CreatePaginationQuery(int offset, int count, QByteArray& paginationQuery) const;
95 virtual bool CreateFilterQuery(const iprm::IParamsSet& filterParams, QString& filterQuery) const;
96 virtual bool CreateObjectFilterQuery(const iprm::IParamsSet& filterParams, QString& filterQuery) const;
97 virtual bool CreateTextFilterQuery(const imtbase::ICollectionFilter& collectionFilter, QString& textFilterQuery) const;
98 virtual bool CreateSortQuery(const imtbase::ICollectionFilter& collectionFilter, QString& sortQuery) const;
99
100protected:
101 I_REF(imtmongo::IMongoDatabaseEngine, m_databaseEngineCompPtr);
102 I_REF(iprm::IOptionsList, m_typesCompPtr);
103 I_ATTR(QByteArray, m_tableNameAttrPtr);
104 I_ATTR(QByteArray, m_separatorObjectIdAttrPtr);
105 I_ATTR(QByteArray, m_objectIdColumnAttrPtr);
106 I_ATTR(QByteArray, m_objectTypeIdColumnAttrPtr);
107};
108
109
110} // namespace imtmongo
111
112