7#include <QtCore/QMutex>
8#include <QtCore/QThread>
9#include <QtCore/QReadWriteLock>
10#include <QtCore/QFileInfo>
13#include <istd/TSmartPtr.h>
14#include <iser/ISerializable.h>
15#include <imod/TModelWrap.h>
16#include <ilog/TLoggerCompWrap.h>
17#include <idoc/CStandardDocumentMetaInfo.h>
18#include <ifile/IFileNameParam.h>
19#include <ifile/IFilePersistence.h>
20#include <ifile/IFileResourceTypeConstraints.h>
21#include <iauth/IRightsProvider.h>
24#include <imtbase/IMetaInfoCreator.h>
25#include <imtbase/IRevisionController.h>
26#include <imtbase/ICollectionDataController.h>
27#include <imtbase/CObjectCollectionMetaInfo.h>
28#include <imtrepo/IFileCollectionInfo.h>
29#include <imtrepo/IFileObjectCollection.h>
30#include <imtrepo/CFileCollectionItem.h>
41 public ilog::CLoggerComponentBase,
43 virtual public imtbase::IObjectCollection::IDataFactory
48 typedef ilog::CLoggerComponentBase BaseClass;
53 I_REGISTER_INTERFACE(IObjectCollection);
54 I_ASSIGN(m_repositoryPathCompPtr,
"RepositoryPath",
"Path to the file collection folder",
false,
"RepositoryPath");
55 I_ASSIGN(m_resourceTypesCompPtr,
"ResourceTypes",
"List of supported resource types",
false,
"ResourceTypes");
56 I_ASSIGN(m_revisionAttrPtr,
"RepositoryRevision",
"Revision number of the whole repository",
true, 0);
57 I_ASSIGN(m_isCalculateCheckSumAttrPtr,
"IsCalculateCheckSum",
"Calculate check sums for the file",
true,
true);
58 I_ASSIGN_MULTI_0(m_objectPersistenceListCompPtr,
"ObjectPersistenceList",
"List of persistence components used for data object loading",
false);
59 I_ASSIGN_MULTI_0(m_resourceFileTypesCompPtr,
"FileTypeInfos",
"List of file type infos for corresponding resource type",
false);
60 I_ASSIGN_MULTI_0(m_metaInfoCreatorListCompPtr,
"MetaInfoCreatorList",
"List of meta-info creators related to the object types",
false);
61 I_ASSIGN_MULTI_0(m_objectFactoryListCompPtr,
"ObjectFactoryList",
"List of factories used for data object instance creation",
false);
62 I_ASSIGN(m_documentInfoCollectionCompPtr,
"DocumentInfoCollection",
"Collection's table of contents",
true,
"DocumentInfoCollection");
63 I_ASSIGN(m_infoItemTypeIdAttrPtr,
"InfoTypeId",
"Type-ID of the file info item",
true,
"FileItemInfo");
70 virtual const ifile::IFileResourceTypeConstraints* GetFileTypeConstraints()
const override;
71 virtual bool GetFileInfo(
const QByteArray& objectId,
IFileCollectionItem& item)
const override;
72 virtual QString GetCollectionRootFolder()
const override;
73 virtual int GetRepositoryRevision()
const override;
77 virtual QString GetFile(
const QByteArray& objectId,
const QString& targetFilePath = QString())
const override;
78 virtual QByteArray InsertFile(
79 const QString& filePath,
80 const QByteArray& objectTypeId = QByteArray(),
81 const QString& objectName = QString(),
82 const QString& objectDescription = QString(),
83 const QByteArray& proposedObjectId = QByteArray(),
84 const idoc::IDocumentMetaInfo* dataMetaInfoPtr =
nullptr,
85 const idoc::IDocumentMetaInfo* collectionItemMetaInfoPtr =
nullptr)
override;
86 virtual bool UpdateFile(
const QString& filePath,
const QByteArray& objectId)
override;
91 virtual int GetOperationFlags(
const QByteArray& objectId = QByteArray())
const override;
92 virtual QByteArray InsertNewObject(
93 const QByteArray& typeId,
95 const QString& description,
96 const istd::IChangeable* defaultValuePtr =
nullptr,
97 const QByteArray& proposedObjectId = QByteArray(),
98 const idoc::IDocumentMetaInfo* dataMetaInfoPtr =
nullptr,
99 const idoc::IDocumentMetaInfo* elementMetaInfoPtr =
nullptr,
102 virtual bool RemoveElementSet(
103 const iprm::IParamsSet* selectionParamsPtr =
nullptr,
105 virtual bool RestoreObjects(
106 const Ids& objectIds,
108 virtual bool RestoreObjectSet(
109 const iprm::IParamsSet* selectionParamsPtr =
nullptr,
111 virtual const istd::IChangeable* GetObjectPtr(
const QByteArray& objectId)
const override;
112 virtual bool GetObjectData(
const QByteArray& objectId, DataPtr& dataPtr,
const iprm::IParamsSet* dataConfigurationPtr =
nullptr)
const override;
113 virtual bool SetObjectData(
const QByteArray& objectId,
const istd::IChangeable&
object, CompatibilityMode mode = CM_WITHOUT_REFS,
const imtbase::IOperationContext* operationContextPtr =
nullptr)
override;
114 virtual imtbase::IObjectCollectionUniquePtr CreateSubCollection(
int offset = 0,
int count = -1,
const iprm::IParamsSet* selectionParamsPtr =
nullptr)
const override;
116 const QByteArray& objectId = QByteArray(),
119 const iprm::IParamsSet* selectionParamsPtr =
nullptr)
const override;
122 virtual const iprm::IOptionsList* GetObjectTypesInfo()
const override;
123 virtual Id GetObjectTypeId(
const QByteArray& objectId)
const override;
124 virtual idoc::MetaInfoPtr GetDataMetaInfo(
const Id& objectId)
const override;
127 virtual int GetElementsCount(
128 const iprm::IParamsSet* selectionParamPtr =
nullptr,
129 ilog::IMessageConsumer* logPtr =
nullptr)
const override;
130 virtual Ids GetElementIds(
133 const iprm::IParamsSet* selectionParamsPtr =
nullptr,
134 ilog::IMessageConsumer* logPtr =
nullptr)
const override;
135 virtual bool GetSubsetInfo(
139 const iprm::IParamsSet* selectionParamsPtr =
nullptr,
140 ilog::IMessageConsumer* logPtr =
nullptr)
const override;
141 virtual QVariant GetElementInfo(
const QByteArray& elementId,
int infoType, ilog::IMessageConsumer* logPtr =
nullptr)
const override;
142 virtual idoc::MetaInfoPtr GetElementMetaInfo(
const Id& elementId, ilog::IMessageConsumer* logPtr =
nullptr)
const override;
143 virtual bool SetElementName(
const Id& elementId,
const QString& name, ilog::IMessageConsumer* logPtr =
nullptr)
override;
144 virtual bool SetElementDescription(
const Id& elementId,
const QString& description, ilog::IMessageConsumer* logPtr =
nullptr)
override;
145 virtual bool SetElementEnabled(
const Id& elementId,
bool isEnabled =
true, ilog::IMessageConsumer* logPtr =
nullptr)
override;
148 virtual istd::IChangeableUniquePtr CreateInstance(
const QByteArray& keyId =
"")
const override;
149 virtual istd::IFactoryInfo::KeyList GetFactoryKeys()
const override;
152 class ResourceTypeConstraints:
public ifile::IFileResourceTypeConstraints
155 ResourceTypeConstraints();
159 virtual const ifile::IFileTypeInfo* GetFileTypeInfo(
int resourceTypeIndex)
const override;
162 virtual int GetOptionsFlags()
const override;
163 virtual int GetOptionsCount()
const override;
164 virtual QString GetOptionName(
int index)
const override;
165 virtual QString GetOptionDescription(
int index)
const override;
166 virtual QByteArray GetOptionId(
int index)
const override;
167 virtual bool IsOptionEnabled(
int index)
const override;
173 typedef imod::TModelWrap<ResourceTypeConstraints> ResourceTypeConstraintsModel;
176 const ifile::IFilePersistence* GetObjectPersistence(
const QByteArray& typeId)
const;
178 QString CreateWorkingDir()
const;
179 QString GetWorkingExt(
180 const ifile::IFilePersistence* persistencePtr,
181 const istd::IChangeable* dataObjectPtr,
182 const QString& fileName);
192 virtual istd::IChangeableUniquePtr
CreateObjectFromFile(
const QString& filePath,
const QByteArray& typeId)
const;
203 virtual idoc::MetaInfoPtr
CreateItemMetaInfo(
const QString& dataObjectFilePath,
const QByteArray& typeId)
const;
209 const QString& localFilePath,
210 const QString& resourceName,
211 const QByteArray& typeId,
212 ilog::IMessageConsumer* messageConsumerPtr)
const;
213 virtual QString CalculateTargetFilePath(
214 const QString& filePath,
215 const QString& objectName,
216 const QByteArray& typeId)
const;
217 virtual QString CalculateTargetFilePath(
218 const QString& targetFolderPath,
219 const QString& localFilePath)
const;
220 bool FinishInsertFileTransaction(
221 const QString& workingPath,
222 const QString& repositoryPath,
223 const QByteArray& fileId,
227 virtual void OnComponentCreated()
override;
228 virtual void OnComponentDestroyed()
override;
234 I_ATTR(
int, m_revisionAttrPtr);
239 I_ATTR(
bool, m_isCalculateCheckSumAttrPtr);
251 I_REF(ifile::IFileNameParam, m_repositoryPathCompPtr);
256 I_REF(iprm::IOptionsList, m_resourceTypesCompPtr);
261 I_MULTIREF(ifile::IFilePersistence, m_objectPersistenceListCompPtr);
266 I_MULTIREF(ifile::IFileTypeInfo, m_resourceFileTypesCompPtr);
276 I_MULTIFACT(istd::IChangeable, m_objectFactoryListCompPtr);
286 I_ATTR(QByteArray, m_infoItemTypeIdAttrPtr);
289 typedef QMap<QByteArray, DataPtr> ObjectCache;
290 mutable ObjectCache m_objectCache;
291 mutable QReadWriteLock m_objectCacheLock;
293 typedef QMap<QByteArray, const imtbase::IMetaInfoCreator*> MetaInfoCreatorMap;
294 MetaInfoCreatorMap m_metaInfoCreatorMap;
bool IsPathInsideRepository(const QString &filePath) const
ResourceTypeConstraintsModel m_resourceTypeConstraints
virtual QString CalculateFolderPathInRepository(const QString &localFilePath, const QString &resourceName, const QByteArray &typeId, ilog::IMessageConsumer *messageConsumerPtr) const
virtual istd::IChangeableUniquePtr CreateObjectFromFile(const QString &filePath, const QByteArray &typeId) const
virtual istd::IChangeableUniquePtr CreateDataObject(const QByteArray &typeId) const
virtual idoc::MetaInfoPtr CreateItemMetaInfo(const QString &dataObjectFilePath, const QByteArray &typeId) const