ImagingTools Core SDK
CJobQueueManagerCompBase.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 <QtCore/QObject>
8#include <QtCore/QHash>
9
10// ACF includes
11#include <iprm/IParamsSet.h>
12#include <iprm/IOptionsList.h>
13#include <ilog/TLoggerCompWrap.h>
14
15// ImtCore includes
16#include <imtbase/IObjectCollection.h>
17
18// Acula includes
19#include <imthype/IJobQueueManager.h>
20#include <imthype/IJobTicket.h>
21#include <imthype/IJobStatus.h>
22#include <imthype/CStandardJobOutput.h>
23
24
25namespace imthype
26{
27
28
29class CJobQueueManagerCompBase:
30 public QObject,
31 public ilog::CLoggerComponentBase,
32 virtual public IJobQueueManager
33{
34 Q_OBJECT
35public:
36 typedef ilog::CLoggerComponentBase BaseClass;
37
38 I_BEGIN_BASE_COMPONENT(CJobQueueManagerCompBase);
39 I_REGISTER_INTERFACE(IJobQueueManager);
40 I_ASSIGN(m_jobTicketsCollectionCompPtr, "JobTicketsCollection", "External object collection containing job tickets", true, "JobTicketsCollection");
41 I_END_COMPONENT;
42
43 CJobQueueManagerCompBase();
44
45 // reimplemented (IJobQueueManager)
46 virtual QByteArray GetTaskTypeId(const QByteArray& jobId) const override;
47 virtual QByteArray InsertNewJobIntoQueue(
48 const QByteArray& contextId,
49 const QByteArray& typeId,
51 const iprm::IParamsSet* jobProcessingParamsPtr,
52 const IJobSchedulerParams* schedulerParamsPtr = nullptr,
53 ilog::IMessageConsumer* logPtr = nullptr) override;
54 virtual bool CancelJob(const QByteArray& jobId) override;
55 virtual bool ResumeJob(const QByteArray& jobId) override;
56 virtual bool RemoveJob(const QByteArray& jobId) override;
57 virtual bool GetJobConfiguration(
58 const QByteArray& jobId,
59 ParamsPtr& processingParamsPtr,
60 imtbase::IReferenceCollection& input) const override;
61 virtual ProcessingStatus GetProcessingStatus(const QByteArray& jobId) const override;
62 virtual bool SetProcessingStatus(const QByteArray& jobId, ProcessingStatus status) override;
63 virtual double GetProgress(const QByteArray& jobId) const override;
64 virtual bool SetProgress(const QByteArray & jobId, double progress) override;
65 virtual bool GetJobResult(const QByteArray& jobId, IJobOutput& result) const override;
66 virtual bool SetJobResult(const QByteArray & jobId, const IJobOutput & result) override;
67
68 // reimplemented (imtbase::ICollectionInfo)
69 virtual int GetElementsCount(
70 const iprm::IParamsSet* selectionParamPtr = nullptr,
71 ilog::IMessageConsumer* logPtr = nullptr) const override;
72 virtual Ids GetElementIds(
73 int offset = 0,
74 int count = -1,
75 const iprm::IParamsSet* selectionParamsPtr = nullptr,
76 ilog::IMessageConsumer* logPtr = nullptr) const override;
77 virtual bool GetSubsetInfo(
78 imtbase::ICollectionInfo& subsetInfo,
79 int offset = 0,
80 int count = -1,
81 const iprm::IParamsSet* selectionParamsPtr = nullptr,
82 ilog::IMessageConsumer* logPtr = nullptr) const override;
83 virtual QVariant GetElementInfo(const QByteArray& elementId, int infoType, ilog::IMessageConsumer* logPtr = nullptr) const override;
84 virtual idoc::MetaInfoPtr GetElementMetaInfo(const Id& elementId, ilog::IMessageConsumer* logPtr = nullptr) const override;
85 virtual bool SetElementName(const Id& elementId, const QString& name, ilog::IMessageConsumer* logPtr = nullptr) override;
86 virtual bool SetElementDescription(const Id& elementId, const QString& description, ilog::IMessageConsumer* logPtr = nullptr) override;
87 virtual bool SetElementEnabled(const Id& elementId, bool isEnabled = true, ilog::IMessageConsumer* logPtr = nullptr) override;
88
89protected:
90 IJobTicketSharedPtr GetJobTicket(const QByteArray& jobId) const;
91 IJobStatusSharedPtr GetJobStatus(const QByteArray& jobId) const;
92
93 // reimplemented (icomp::CComponentBase)
94 virtual void OnComponentCreated() override;
95 virtual void OnComponentDestroyed() override;
96
97protected:
98 I_REF(imtbase::IObjectCollection, m_jobTicketsCollectionCompPtr);
99
100 mutable QReadWriteLock m_mutex;
101
102 // Separate storage for job status and progress
103 // This allows lightweight status queries without loading full job tickets
104 mutable QHash<QByteArray, IJobStatusSharedPtr> m_jobStatusMap;
105};
106
107
108} // namespace imthype
109
110