ImagingTools Core SDK
CCompositeObjectPersistenceComp.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 <ifile/IFilePersistence.h>
8
9// ImtCore includes
10#include <imtbase/IObjectCollection.h>
11#include <imtfile/IFileCompression.h>
12
13
14namespace imtbase
15{
16
17
18class CCompositeObjectPersistenceComp:
19 public ilog::CLoggerComponentBase,
20 virtual public ifile::IFilePersistence
21{
22public:
23 typedef ilog::CLoggerComponentBase BaseClass;
24
25 enum WorkingMode
26 {
30 WM_DEFAULT,
31
35 WM_IGNORE_ERRORS
36 };
37
38 I_BEGIN_COMPONENT(CCompositeObjectPersistenceComp);
39 I_REGISTER_INTERFACE(ifile::IFilePersistence);
40 I_REGISTER_INTERFACE(ifile::IFileTypeInfo);
41 I_ASSIGN(m_fileCompressionCompPtr, "FileCompressor", "File compressor", false, "FileCompressor");
42 I_ASSIGN_MULTI_0(m_objectTypeIdsAttrPtr, "ObjectTypeIds", "List of type-IDs for corresponding persistences", true);
43 I_ASSIGN_MULTI_0(m_objectPresistencesCompPtr, "ObjectPersistences", "List of registered persistence according to the specified type-IDs", true);
44 I_ASSIGN(m_workingModeAttrPtr, "WorkingMode", "Working mode.\n0 - Default processing\n1 - Ignore processing errors", true, WM_IGNORE_ERRORS);
45 I_END_COMPONENT;
46
47 // reimplemented (ifile::IFilePersistence)
48 virtual bool IsOperationSupported(
49 const istd::IChangeable* dataObjectPtr,
50 const QString* filePathPtr = NULL,
51 int flags = -1,
52 bool beQuiet = true) const override;
53 virtual OperationState LoadFromFile(istd::IChangeable& data,
54 const QString& filePath = QString(),
55 ibase::IProgressManager* progressManagerPtr = NULL) const override;
56 virtual OperationState SaveToFile(const istd::IChangeable& data,
57 const QString& filePath = QString(),
58 ibase::IProgressManager* progressManagerPtr = NULL) const override;
59
60 // reimplemented (ifile::IFileTypeInfo)
61 virtual bool GetFileExtensions(QStringList& result, const istd::IChangeable* dataObjectPtr = NULL, int flags = -1, bool doAppend = false) const override;
62 virtual QString GetTypeDescription(const QString* extensionPtr = NULL) const override;
63
64protected:
65 struct BundleElementInfo
66 {
67 QString fileName;
68 QByteArray id;
69 QByteArray typeId;
70 QString name;
71 QString description;
72 };
73
74protected:
75 const ifile::IFilePersistence* GetFilePersistenceForTypeId(const QByteArray& typeId) const;
76 virtual bool SerializeBundleMetaInfo(QVector<BundleElementInfo>& contentMetaInfo, iser::IArchive& archive) const;
77
78 virtual bool LoadAdditionalData(istd::IChangeable& data, const QString& path) const;
79 virtual bool SaveAdditionalData(const istd::IChangeable& data, const QString& path) const;
80
81private:
82 I_REF(imtfile::IFileCompression, m_fileCompressionCompPtr);
83 I_MULTIATTR(QByteArray, m_objectTypeIdsAttrPtr);
84 I_MULTIREF(ifile::IFilePersistence, m_objectPresistencesCompPtr);
85 I_ATTR(bool, m_workingModeAttrPtr);
86};
87
88
89} // namespace imtbase
90
91