6#include <QtCore/QReadWriteLock>
9#include <istd/TComposedFactory.h>
10#include <icomp/CComponentBase.h>
11#include <istd/TDelPtr.h>
12#include <istd/TPointerVector.h>
13#include <imod/TSingleModelObserverBase.h>
16#include <imtbase/IObjectCollection.h>
28 public icomp::CComponentBase,
29 public imod::TSingleModelObserverBase<istd::IChangeable>,
33 typedef icomp::CComponentBase BaseClass;
34 typedef imod::TSingleModelObserverBase<istd::IChangeable> BaseClass2;
40 I_ASSIGN(m_objectCollectionCompPtr,
"ObjectCollection",
"Base collection containing real data",
true,
"ObjectCollection");
41 I_ASSIGN_TO(m_objectCollectionModelCompPtr, m_objectCollectionCompPtr,
true);
42 I_ASSIGN(m_metaInfoCacheLimitAttrPtr,
"MetaInfoCacheLimit",
"Maximal count of filter combinations stored in the ring buffer (meta info cache)",
true, 1000);
43 I_ASSIGN(m_objectCacheLimitAttrPtr,
"ObjectCacheLimit",
"Maximal count of the data objects in the ring buffer (cache)",
true, 100);
49 virtual void OnComponentCreated()
override;
50 virtual void OnComponentDestroyed()
override;
53 virtual void OnUpdate(
const istd::IChangeable::ChangeSet& changeSet)
override;
58 virtual int GetOperationFlags(
const Id& objectId = Id())
const override;
59 virtual Id InsertNewObject(
60 const QByteArray& typeId,
62 const QString& description,
63 const istd::IChangeable* defaultValuePtr =
nullptr,
64 const Id& proposedElementId = Id(),
65 const idoc::IDocumentMetaInfo* dataMetaInfoPtr =
nullptr,
66 const idoc::IDocumentMetaInfo* elementMetaInfoPtr =
nullptr,
68 virtual bool RemoveElements(
const Ids& elementIds,
const IOperationContext* operationContextPtr =
nullptr)
override;
69 virtual bool RemoveElementSet(
70 const iprm::IParamsSet* selectionParamsPtr =
nullptr,
72 virtual bool RestoreObjects(
75 virtual bool RestoreObjectSet(
76 const iprm::IParamsSet* selectionParamsPtr =
nullptr,
78 virtual const istd::IChangeable* GetObjectPtr(
const Id& objectId)
const override;
79 virtual bool GetObjectData(
const Id& objectId, DataPtr& dataPtr,
const iprm::IParamsSet* dataConfigurationPtr =
nullptr)
const override;
80 virtual bool SetObjectData(
const Id& objectId,
const istd::IChangeable&
object, CompatibilityMode mode = CM_WITHOUT_REFS,
const IOperationContext* operationContextPtr =
nullptr)
override;
81 virtual IObjectCollectionUniquePtr CreateSubCollection(
int offset,
int count,
const iprm::IParamsSet *selectionParamsPtr)
const override;
83 const QByteArray& objectId = QByteArray(),
86 const iprm::IParamsSet* selectionParamsPtr =
nullptr)
const override;
89 virtual const iprm::IOptionsList* GetObjectTypesInfo()
const override;
90 virtual QByteArray GetObjectTypeId(
const Id& objectId)
const override;
91 virtual idoc::MetaInfoPtr GetDataMetaInfo(
const Id& objectId)
const override;
94 virtual int GetElementsCount(
95 const iprm::IParamsSet* selectionParamsPtr =
nullptr,
96 ilog::IMessageConsumer* logPtr =
nullptr)
const override;
97 virtual Ids GetElementIds(
100 const iprm::IParamsSet* selectionParamsPtr =
nullptr,
101 ilog::IMessageConsumer* logPtr =
nullptr)
const override;
102 virtual bool GetSubsetInfo(
106 const iprm::IParamsSet* selectionParamsPtr =
nullptr,
107 ilog::IMessageConsumer* logPtr =
nullptr)
const override;
108 virtual QVariant GetElementInfo(
const Id& elementId,
int infoType, ilog::IMessageConsumer* logPtr =
nullptr)
const override;
109 virtual idoc::MetaInfoPtr GetElementMetaInfo(
const Id& elementId, ilog::IMessageConsumer* logPtr =
nullptr)
const override;
110 virtual bool SetElementName(
const Id& elementId,
const QString& name, ilog::IMessageConsumer* logPtr =
nullptr)
override;
111 virtual bool SetElementDescription(
const Id& elementId,
const QString& description, ilog::IMessageConsumer* logPtr =
nullptr)
override;
112 virtual bool SetElementEnabled(
const Id& elementId,
bool isEnabled =
true, ilog::IMessageConsumer* logPtr =
nullptr)
override;
115 struct FilteredCollection
117 FilteredCollection(
int aOffset,
int aCount,
const QByteArray& aSelectionParamsData, IObjectCollectionUniquePtr&& aCachePtr)
120 selectionParamsData(aSelectionParamsData),
121 cachePtr(std::move(aCachePtr))
126 QByteArray selectionParamsData;
127 imtbase::IObjectCollectionUniquePtr cachePtr;
130 FilteredCollection* GetFilteredCollection(
133 const iprm::IParamsSet* selectionParamsPtr =
nullptr)
const;
136 void RemoveOldestObjectFromCache()
const;
140 I_REF(imod::IModel, m_objectCollectionModelCompPtr);
141 I_ATTR(
int, m_metaInfoCacheLimitAttrPtr);
142 I_ATTR(
int, m_objectCacheLimitAttrPtr);
144 mutable istd::TPointerVector<FilteredCollection> m_cachedCollections;
148 istd::IChangeableSharedPtr dataPtr;
149 qint64 timestamp = 0;
152 typedef QMap<QByteArray, CacheItem> CacheItemMap;
153 mutable CacheItemMap m_cacheItems;
155 int m_operationFlags;
156 mutable QReadWriteLock m_lock;