6#include <QtCore/QThread>
7#include <QtCore/QQueue>
10#include <iprm/IEnableableParam.h>
11#include <imod/TModelWrap.h>
12#include <imod/TSingleModelObserverBase.h>
13#include <icomp/CComponentBase.h>
16#include <imtlog/IEventFilter.h>
17#include <imtlog/IEventProvider.h>
18#include <imtlog/IMessageFilterParams.h>
19#include <imtbase/ITimeRangeProvider.h>
20#include <imtlog/CWorkerBase.h>
27class CRepresentationControllerCompBase:
29 public icomp::CComponentBase,
30 protected imod::TSingleModelObserverBase<imtbase::ITimeRangeProvider>,
31 virtual public iprm::IEnableableParam
35 typedef CComponentBase BaseClass;
37 I_BEGIN_BASE_COMPONENT(CRepresentationControllerCompBase)
38 I_REGISTER_INTERFACE(imod::IObserver);
39 I_REGISTER_INTERFACE(iprm::IEnableableParam);
40 I_ASSIGN(m_eventProviderCompPtr,
"EventProvider",
"Event provider",
true,
"EventProvider");
41 I_ASSIGN_TO(m_eventProviderModelCompPtr, m_eventProviderCompPtr,
true);
42 I_ASSIGN(m_timeRangeProviderCompPtr,
"TimeRangeProvider",
"TimeRangeProvider",
false,
"TimeRangeProvider");
43 I_ASSIGN_TO(m_timeRangeProviderModelCompPtr, m_timeRangeProviderCompPtr,
true);
44 I_ASSIGN(m_representationCompPtr,
"RepresentationData",
"Representation data model",
true,
"RepresentationData");
45 I_ASSIGN(m_eventFilterCompPtr,
"EventFilter",
"Event filter",
false,
"EventFilter");
46 I_ASSIGN(m_messageFilterParamsCompPtr,
"MessageFilterParams",
"Message filter params",
false,
"MessageFilterParams");
47 I_ASSIGN(m_representationFactPtr,
"RepresentationFactory",
"Factory used for creation of the working instance",
true,
"RepresentationFactory");
50 CRepresentationControllerCompBase();
53 virtual bool IsEnabled()
const override;
54 virtual bool IsEnablingAllowed()
const override;
55 virtual bool SetEnabled(
bool isEnabled =
true)
override;
58 virtual bool Serialize(iser::IArchive& archive)
override;
61 virtual void BuildRepresentation(
62 istd::IChangeable& representation,
63 imtlog::IEventProvider::EventContainerPtr containerPtr,
64 const imtbase::CTimeRange& timeRange)
const = 0;
67 virtual void OnUpdate(
const istd::IChangeable::ChangeSet& changeSet)
override;
70 virtual void OnComponentCreated()
override;
71 virtual void OnComponentDestroyed()
override;
74 I_REF(imtlog::IEventProvider, m_eventProviderCompPtr);
75 I_REF(imod::IModel, m_eventProviderModelCompPtr);
76 I_REF(imtbase::ITimeRangeProvider, m_timeRangeProviderCompPtr);
77 I_REF(imod::IModel, m_timeRangeProviderModelCompPtr);
78 I_REF(istd::IChangeable, m_representationCompPtr);
79 I_REF(imtlog::IEventFilter, m_eventFilterCompPtr);
80 I_REF(imtlog::IMessageFilterParams, m_messageFilterParamsCompPtr);
81 I_FACT(istd::IChangeable, m_representationFactPtr);
84 void EmitRepresentationCreated();
87 void OnRepresentationCreated();
90 typedef icomp::IComponentSharedPtr RepresentationCompPtr;
92 class EventProviderObserver:
public imod::TSingleModelObserverBase<imtlog::IEventProvider>
95 EventProviderObserver(CRepresentationControllerCompBase& parent);
99 virtual void OnUpdate(
const istd::IChangeable::ChangeSet& changeSet)
override;
101 CRepresentationControllerCompBase& m_parent;
104 class Worker:
public QThread
107 Worker(CRepresentationControllerCompBase& parent);
110 virtual void run()
override;
113 CRepresentationControllerCompBase& m_parent;
117 EventProviderObserver m_eventProviderObserver;
120 QQueue<imtbase::CTimeRange> m_workerQueue;
121 QMutex m_workerQueueMutex;
122 QQueue<RepresentationCompPtr> m_representationQueue;
123 QMutex m_representationQueueMutex;