ImagingTools Core SDK
CMongoDatabaseObjectCollectionComp.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/QReadWriteLock>
7
8// ACF includes
9#include <ilog/TLoggerCompWrap.h>
10#include <iprm/COptionsManager.h>
11
12// ImtCore includes
13#include <imtbase/IObjectCollection.h>
14#include <imtbase/IObjectCollectionIterator.h>
15#include <imtbase/CObjectCollection.h>
16#include <imtbase/ICollectionDataController.h>
17#include <imtbase/IMetaInfoCreator.h>
18#include <imtbase/TModelUpdateBinder.h>
19
20#include <imtdb/IDatabaseLoginSettings.h>
21
22#include <imtmongo/IMongoDatabaseEngine.h>
23#include <imtmongo/IMongoDatabaseObjectDelegate.h>
24#include <imtbase/IOperationContext.h>
25
26
27namespace imtmongo
28{
29
30
35 public QObject,
36 virtual public imtbase::IObjectCollection,
37 public ilog::CLoggerComponentBase
38{
39 Q_OBJECT
40public:
41 typedef ilog::CLoggerComponentBase BaseClass;
42
43 I_BEGIN_COMPONENT(CMongoDatabaseObjectCollectionComp);
44 I_REGISTER_INTERFACE(imtbase::IObjectCollection);
45 I_REGISTER_INTERFACE(imtbase::IObjectCollectionInfo);
46 I_REGISTER_INTERFACE(imtbase::ICollectionInfo);
47 I_ASSIGN(m_objectCollectionFactoryCompPtr, "ObjectCollectionFactory", "Factory used for object collection creation", false, "ObjectCollectionFactory");
48 I_ASSIGN(m_mongoDatabaseEngineCompPtr, "DatabaseEngine", "Database engine used for low level SQL quering", true, "DatabaseEngine");
49 I_ASSIGN(m_objectDelegateCompPtr, "ObjectDelegate", "Database object delegate used for creation of C++ objects from the SQL record", true, "ObjectDelegate");
50 I_ASSIGN(m_metaInfoCreatorCompPtr, "MetaInfoCreator", "Meta-info creator", false, "MetaInfoCreator");
51 I_ASSIGN(m_filterParamsCompPtr, "FilteringParams", "Parameter using for the filterering the table", false, "FilteringParams");
52 I_ASSIGN(m_databaseAccessSettingsCompPtr, "DatabaseAccessSettings", "Database access settings", false, "DatabaseAccessSettings");
53 I_ASSIGN(m_collectionDataControllerCompPtr, "CollectionDataController", "Data export/import controller for the collection", false, "DataController");
54 I_ASSIGN(m_collectionNameAttrPtr, "CollectionName", "The collection name", true, "CollectionName");
55 I_END_COMPONENT;
56
58
59 // reimplemented (imtbase::IObjectCollection)
60 virtual const imtbase::IRevisionController* GetRevisionController() const override;
61 virtual const imtbase::ICollectionDataController* GetDataController() const override;
62 virtual int GetOperationFlags(const QByteArray& objectId = QByteArray()) const override;
63 virtual QByteArray InsertNewObject(
64 const QByteArray& typeId,
65 const QString& name,
66 const QString& description,
67 DataPtr defaultValuePtr = DataPtr(),
68 const QByteArray& proposedObjectId = QByteArray(),
69 const idoc::IDocumentMetaInfo* dataMetaInfoPtr = nullptr,
70 const idoc::IDocumentMetaInfo* elementMetaInfoPtr = nullptr,
71 const imtbase::IOperationContext* operationContextPtr = nullptr) override;
72 virtual bool RemoveElement(const Id& elementId,
73 const imtbase::IOperationContext* operationContextPtr = nullptr) override;
74 virtual const istd::IChangeable* GetObjectPtr(const QByteArray& objectId) const override;
75 virtual bool GetObjectData(const QByteArray& objectId, DataPtr& dataPtr) const override;
76 virtual bool SetObjectData(const Id& objectId, const istd::IChangeable& object,
77 CompatibilityMode mode = CM_WITHOUT_REFS,
78 const imtbase::IOperationContext* operationContextPtr = nullptr) override;
79 virtual imtbase::IObjectCollectionUniquePtr CreateSubCollection(int offset = 0, int count = -1, const iprm::IParamsSet* selectionParamsPtr = nullptr) const override;
80
81 // reimplemented (IObjectCollectionInfo)
82 virtual const iprm::IOptionsList* GetObjectTypesInfo() const override;
83 virtual Id GetObjectTypeId(const QByteArray& objectId) const override;
84 virtual idoc::MetaInfoPtr GetDataMetaInfo(const Id& objectId) const override;
85
86 // reimplemented (ICollectionInfo)
87 virtual int GetElementsCount(
88 const iprm::IParamsSet* selectionParamPtr = nullptr) const override;
89 virtual Ids GetElementIds(
90 int offset = 0,
91 int count = -1,
92 const iprm::IParamsSet* selectionParamsPtr = nullptr) const override;
93 virtual bool GetSubsetInfo(
94 imtbase::ICollectionInfo& subsetInfo,
95 int offset = 0,
96 int count = -1,
97 const iprm::IParamsSet* selectionParamsPtr = nullptr) const override;
98 virtual imtbase::IObjectCollectionIterator* CreateObjectCollectionIterator(
99 int offset = 0,
100 int count = -1,
101 const iprm::IParamsSet* selectionParamsPtr = nullptr) const;
102 virtual QVariant GetElementInfo(const QByteArray& elementId, int infoType) const override;
103 virtual idoc::MetaInfoPtr GetElementMetaInfo(const Id& elementId) const override;
104 virtual bool SetElementName(const Id& objectId, const QString& name) override;
105 virtual bool SetElementDescription(const Id& objectId, const QString& description) override;
106 virtual bool SetElementEnabled(const Id& elementId, bool isEnabled = true) override;
107
108 // reimplemented (istd::IChangeable)
109 virtual bool ResetData(CompatibilityMode mode = CM_WITHOUT_REFS) override;
110
111protected:
112
113 QByteArray GetCollectionName() const;
114
115 mongocxx::cursor GetObjectRecord(const QByteArray& objectId) const;
116
117 void OnFilterParamsChanged(const istd::IChangeable::ChangeSet& changeSet, const iprm::IParamsSet* filterParamsPtr);
118 void OnDatabaseAccessChanged(const istd::IChangeable::ChangeSet& changeSet, const imtdb::IDatabaseLoginSettings* databaseAccessSettingsPtr);
119
120 // reimplemented (icomp::CComponentBase)
121 virtual void OnComponentCreated() override;
122 virtual void OnComponentDestroyed() override;
123
124protected:
125 I_REF(imtmongo::IMongoDatabaseEngine, m_mongoDatabaseEngineCompPtr);
126
127private:
128 I_FACT(imtbase::IObjectCollection, m_objectCollectionFactoryCompPtr);
129 I_REF(imtmongo::IMongoDatabaseObjectDelegate, m_objectDelegateCompPtr);
130 I_REF(imtbase::IMetaInfoCreator, m_metaInfoCreatorCompPtr);
131 I_REF(iprm::IParamsSet, m_filterParamsCompPtr);
132 I_REF(imtdb::IDatabaseLoginSettings, m_databaseAccessSettingsCompPtr);
133 I_REF(imtbase::ICollectionDataController, m_collectionDataControllerCompPtr);
134 I_ATTR(QByteArray, m_collectionNameAttrPtr);
135
138
139 bool m_isInitialized;
140};
141
142
143} // namespace imtmongo
144
145
Configuration interface for database connection credentials and parameters.