ImagingTools Core SDK
CJobControllerCompBase.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 <icomp/CComponentBase.h>
7#include <iprm/IParamsSet.h>
8
9// ImtCore includes
10#include <imtbase/IProgressSessionsManager.h>
11#include <imtbase/TModelUpdateBinder.h>
12#include <imthype/IJobQueueManager.h>
13#include <imthype/IJobController.h>
14#include <imthype/CStandardJobOutput.h>
15#include <imtbase/CSimpleReferenceCollection.h>
16
17
18namespace imthype
19{
20
21
22class CJobControllerCompBase: public icomp::CComponentBase, virtual public IJobController
23{
24public:
25 typedef CComponentBase BaseClass;
26
27 I_BEGIN_BASE_COMPONENT(CJobControllerCompBase)
28 I_REGISTER_INTERFACE(IJobController)
29 I_ASSIGN(m_defaultJobTypeIdAttrPtr, "DefaultJobTypeId", "Default job type ID", true, "");
30 I_ASSIGN(m_progressSessionManagerCompPtr, "ProgressSessionManager", "ProgressSessionManager", false, "ProgressSessionManager");
31 I_ASSIGN(m_jobQueueManagerCompPtr, "JobQueueManager", "Job queue manager", false, "JobQueueManager");
32 I_ASSIGN(m_inputCollectionCompPtr, "InputCollection", "Input collection", false, "InputCollection");
33 I_ASSIGN(m_resultCollectionCompPtr, "ResultCollection", "Result collection", false, "ResultCollection");
34 I_ASSIGN(m_jobParamsFactPtr , "JobParams", "Job params factory", false, "JobParams");
35 I_END_COMPONENT;
36
37 CJobControllerCompBase();
38
39 // reimplemented (IJobController)
40 virtual typename IJobController::RequestStatus BeginJob(const QByteArray& jobId, const iprm::IParamsSet* jobParams) override;
41 virtual istd::IChangeableUniquePtr GetJobResult(const QByteArray& jobId) const override;
42 virtual typename IJobController::JobStatus GetJobStatus(const QByteArray& jobId) const override;
43 virtual typename IJobController::RequestStatus CancelJob(const QByteArray& jobId) override;
44 virtual typename IJobController::RequestStatus RemoveJob(const QByteArray& jobId) override;
45
46protected:
47 struct JobInfo
48 {
49 QByteArray queueJobId;
50
51 iprm::IParamsSetUniquePtr paramsPtr;
52 istd::IChangeableUniquePtr resultPtr;
53 typename IJobController::JobStatus status = IJobController::JS_FAILED;
54
55 ibase::IProgressManager* jobProgressManagerPtr = nullptr;
56 std::unique_ptr<ibase::IProgressLogger> progressLoggerPtr;
57
58 imtbase::CSimpleReferenceCollection inputRefCollection;
59
60 CStandardJobOutput jobOutput;
61 };
62 typedef std::shared_ptr<JobInfo> JobInfoPtr;
63
64protected:
65 virtual bool PrepareInputObjects(JobInfo& jobInfo) = 0;
66 virtual bool PrepareResult(JobInfo& jobInfo) = 0;
67
68 // reimplemented (icomp::CComponentBase)
69 void OnComponentCreated() override;
70 void OnComponentDestroyed() override;
71
72protected:
73 I_REF(imtbase::IObjectCollection, m_inputCollectionCompPtr);
74 I_REF(imtbase::IObjectCollection, m_resultCollectionCompPtr);
75
76 QMap<QByteArray, JobInfoPtr> m_jobs;
77 mutable QRecursiveMutex m_mutex;
78
79private:
80 void OnJobQueueChanged(
81 const istd::IChangeable::ChangeSet& changeset, const IJobQueueManager* modelPtr);
82 void OnTaskStatusChanged(const QByteArray& queueJobId, IJobQueueManager::ProcessingStatus taskStatus);
83 void OnTaskProgressChanged(const QByteArray& queueJobId, double progress);
84 QByteArray FindJob(const QByteArray& queueJobId) const;
85
86private:
87 I_ATTR(QByteArray, m_defaultJobTypeIdAttrPtr);
88 I_REF(imtbase::IProgressSessionsManager, m_progressSessionManagerCompPtr);
89 I_REF(IJobQueueManager, m_jobQueueManagerCompPtr);
90 I_FACT(iprm::IParamsSet, m_jobParamsFactPtr);
91
93};
94
95
96} // namespace imtservergql
97
98