ImagingTools Core SDK
CSqlDatabaseObjectCollectionComp.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#include <QtSql/QtSql>
8
9// ACF includes
10#include <ilog/TLoggerCompWrap.h>
11#include <iprm/COptionsManager.h>
12#include <iprm/IEnableableParam.h>
13
14// ImtCore includes
15#include <imtdb/ISqlDatabaseObjectCollection.h>
16#include <imtbase/IObjectCollectionIterator.h>
17#include <imtbase/ICollectionDataController.h>
18#include <imtbase/IMetaInfoCreator.h>
19#include <imtbase/TModelUpdateBinder.h>
20#include <imtdb/IDatabaseEngine.h>
21#include <imtdb/ISqlDatabaseObjectDelegate.h>
22#include <imtdb/IDatabaseLoginSettings.h>
23
24
25namespace imtdb
26{
27
28
33 public QObject,
34 public ilog::CLoggerComponentBase,
36{
37 Q_OBJECT
38public:
39 typedef ilog::CLoggerComponentBase BaseClass;
40
41 I_BEGIN_COMPONENT(CSqlDatabaseObjectCollectionComp);
42 I_REGISTER_INTERFACE(imtdb::ISqlDatabaseObjectCollection);
43 I_REGISTER_INTERFACE(imtbase::IObjectCollection);
44 I_REGISTER_INTERFACE(imtbase::IObjectCollectionInfo);
45 I_REGISTER_INTERFACE(imtbase::ICollectionInfo);
46 I_ASSIGN(m_objectCollectionFactoryCompPtr, "ObjectCollectionFactory", "Factory used for object collection creation", false, "ObjectCollectionFactory");
47 I_ASSIGN(m_dbEngineCompPtr, "DatabaseEngine", "Database engine used for low level SQL quering", true, "DatabaseEngine");
48 I_ASSIGN(m_objectDelegateCompPtr, "ObjectDelegate", "Database object delegate used for creation of C++ objects from the SQL record", true, "ObjectDelegate");
49 I_ASSIGN(m_metaInfoCreatorCompPtr, "MetaInfoCreator", "Meta-info creator", false, "MetaInfoCreator");
50 I_ASSIGN(m_databaseAccessSettingsCompPtr, "DatabaseAccessSettings", "Database access settings", false, "DatabaseAccessSettings");
51 I_ASSIGN(m_collectionDataControllerCompPtr, "CollectionDataController", "Data export/import controller for the collection", false, "DataController");
52 I_END_COMPONENT;
53
55
56 // reimplemented (ISqlDatabaseObjectCollection)
57 virtual QByteArray GetDatabaseId() const override;
58 virtual bool AreInternalTransactionsEnabled() const override;
59 virtual bool SetInternalTransactionsEnabled(bool isEnabled) override;
60
61 // reimplemented (imtbase::IObjectCollection)
62 virtual const imtbase::IRevisionController* GetRevisionController() const override;
63 virtual const imtbase::ICollectionDataController* GetDataController() const override;
64 virtual int GetOperationFlags(const QByteArray& objectId = QByteArray()) const override;
65 virtual QByteArray InsertNewObject(
66 const QByteArray& typeId,
67 const QString& name,
68 const QString& description,
69 const istd::IChangeable* defaultValuePtr = nullptr,
70 const QByteArray& proposedObjectId = QByteArray(),
71 const idoc::IDocumentMetaInfo* dataMetaInfoPtr = nullptr,
72 const idoc::IDocumentMetaInfo* elementMetaInfoPtr = nullptr,
73 const imtbase::IOperationContext* operationContextPtr = nullptr) override;
74 virtual bool RemoveElements(const Ids& elementIds, const imtbase::IOperationContext* operationContextPtr = nullptr) override;
75 virtual bool RemoveElementSet(
76 const iprm::IParamsSet* selectionParamsPtr = nullptr,
77 const imtbase::IOperationContext* operationContextPtr = nullptr) override;
78 virtual bool RestoreObjects(
79 const Ids& objectIds,
80 const imtbase::IOperationContext* operationContextPtr = nullptr) override;
81 virtual bool RestoreObjectSet(
82 const iprm::IParamsSet* selectionParamsPtr = nullptr,
83 const imtbase::IOperationContext* operationContextPtr = nullptr) override;
84 virtual const istd::IChangeable* GetObjectPtr(const QByteArray& objectId) const override;
85 virtual bool GetObjectData(const QByteArray& objectId, DataPtr& dataPtr, const iprm::IParamsSet* dataConfigurationPtr = nullptr) const override;
86 virtual bool SetObjectData(
87 const Id& objectId,
88 const istd::IChangeable& object,
89 CompatibilityMode mode = CM_WITHOUT_REFS,
90 const imtbase::IOperationContext* operationContextPtr = nullptr) override;
91 virtual imtbase::IObjectCollectionUniquePtr CreateSubCollection(
92 int offset = 0,
93 int count = -1,
94 const iprm::IParamsSet* selectionParamsPtr = nullptr) const override;
95 virtual imtbase::IObjectCollectionIterator* CreateObjectCollectionIterator(
96 const QByteArray& objectId = QByteArray(),
97 int offset = 0,
98 int count = -1,
99 const iprm::IParamsSet* selectionParamsPtr = nullptr) const override;
100
101 // reimplemented (IObjectCollectionInfo)
102 virtual const iprm::IOptionsList* GetObjectTypesInfo() const override;
103 virtual Id GetObjectTypeId(const QByteArray& objectId) const override;
104 virtual idoc::MetaInfoPtr GetDataMetaInfo(const Id& objectId) const override;
105
106 // reimplemented (ICollectionInfo)
107 virtual int GetElementsCount(
108 const iprm::IParamsSet* selectionParamPtr = nullptr,
109 ilog::IMessageConsumer* logPtr = nullptr) const override;
110 virtual Ids GetElementIds(
111 int offset = 0,
112 int count = -1,
113 const iprm::IParamsSet* selectionParamsPtr = nullptr,
114 ilog::IMessageConsumer* logPtr = nullptr) const override;
115 virtual bool GetSubsetInfo(
116 imtbase::ICollectionInfo& subsetInfo,
117 int offset = 0,
118 int count = -1,
119 const iprm::IParamsSet* selectionParamsPtr = nullptr,
120 ilog::IMessageConsumer* logPtr = nullptr) const override;
121 virtual QVariant GetElementInfo(const QByteArray& elementId, int infoType, ilog::IMessageConsumer* logPtr = nullptr) const override;
122 virtual idoc::MetaInfoPtr GetElementMetaInfo(const Id& elementId, ilog::IMessageConsumer* logPtr = nullptr) const override;
123 virtual bool SetElementName(const Id& elementId, const QString& name, ilog::IMessageConsumer* logPtr = nullptr) override;
124 virtual bool SetElementDescription(const Id& elementId, const QString& description, ilog::IMessageConsumer* logPtr = nullptr) override;
125 virtual bool SetElementEnabled(const Id& elementId, bool isEnabled = true, ilog::IMessageConsumer* logPtr = nullptr) override;
126
127 // reimplemented (istd::IChangeable)
128 virtual bool ResetData(CompatibilityMode mode = CM_WITHOUT_REFS) override;
129
130protected:
131 virtual bool IsObjectTypeSupported(const QByteArray& typeId) const;
132 virtual bool ExecuteTransaction(const QByteArray& sqlQuery) const;
133 virtual bool ExecuteTransaction(const QByteArray& sqlQuery, const QVariantMap& bindValues) const;
134 QSqlRecord GetObjectRecord(const QByteArray& objectId) const;
135 void OnDatabaseAccessChanged(
136 const istd::IChangeable::ChangeSet& changeSet,
137 const imtdb::IDatabaseLoginSettings* databaseAccessSettingsPtr);
138
139 // reimplemented (icomp::CComponentBase)
140 virtual void OnComponentCreated() override;
141 virtual void OnComponentDestroyed() override;
142
143private:
144 void AddOperationContextToChangeSet(const imtbase::IOperationContext& operationContext, istd::IChangeable::ChangeSet& changeSet) const;
145
146protected:
147 I_REF(IDatabaseEngine, m_dbEngineCompPtr);
148
149private:
150 I_FACT(imtbase::IObjectCollection, m_objectCollectionFactoryCompPtr);
151 I_REF(ISqlDatabaseObjectDelegate, m_objectDelegateCompPtr);
152 I_REF(imtbase::IMetaInfoCreator, m_metaInfoCreatorCompPtr);
153 I_REF(imtdb::IDatabaseLoginSettings, m_databaseAccessSettingsCompPtr);
154 I_REF(imtbase::ICollectionDataController, m_collectionDataControllerCompPtr);
155
157
158 bool m_isInitialized;
159
160 mutable QRecursiveMutex m_transactionDisableCountersMutex;
161 QMap<Qt::HANDLE, int> m_transactionDisableCounters;
162};
163
164
165} // namespace imtdb
166
167
Core database engine interface for low-level SQL execution and transaction management.
Configuration interface for database connection credentials and parameters.
SQL-specific extension of IObjectCollection for database-backed object collections.
Database Abstraction Layer (ORM Framework) for ImtCore applications.