29 using BusyHandler = std::function<WorkflowControl (
const QSharedPointer<WorkflowRequest>&,
const QSharedPointer<WorkflowRequest>&)>;
32 const std::function<QSharedPointer<WorkflowController>(
const QSharedPointer<WorkflowContext>& pContext)> mGeneratorController;
33 const std::function<QSharedPointer<WorkflowContext>()> mGeneratorContext;
34 const BusyHandler mBusyHandler;
37 QSharedPointer<WorkflowController> mController;
38 QSharedPointer<WorkflowContext> mContext;
40 template<
typename Controller,
typename Context,
typename ... Args>
41 static auto getGenerator(Args&& ... pArgs)
43 const auto& controller = [](
const QSharedPointer<WorkflowContext>& pContext){
44 return QSharedPointer<Controller>::create(pContext.staticCast<Context>());
47 const auto& context = [pArgs ...]()
mutable {
48 return QSharedPointer<Context>::create(std::forward<Args>(pArgs) ...);
51 return qMakePair(controller, context);
55 template<
typename Controller,
typename Context,
typename Request =
WorkflowRequest,
typename ... Args>
56 static QSharedPointer<WorkflowRequest>
create(Args&& ... pArgs)
58 auto [controller, context] = getGenerator<Controller, Context, Args...>(std::forward<Args>(pArgs) ...);
59 return QSharedPointer<Request>::create(controller, context);
63 template<
typename Controller,
typename Context,
typename Request =
WorkflowRequest,
typename ... Args>
64 static QSharedPointer<WorkflowRequest>
createHandler(
const BusyHandler& pBusyHandler, Args&& ... pArgs)
66 return createHandler<Controller, Context, Request, Args...>(pBusyHandler, QVariant(), std::forward<Args>(pArgs) ...);
70 template<
typename Controller,
typename Context,
typename Request =
WorkflowRequest,
typename ... Args>
71 static QSharedPointer<WorkflowRequest>
createHandler(
const QVariant& pData, Args&& ... pArgs)
73 return createHandler<Controller, Context, Request, Args...>(BusyHandler(), pData, std::forward<Args>(pArgs) ...);
77 template<
typename Controller,
typename Context,
typename Request =
WorkflowRequest,
typename ... Args>
78 static QSharedPointer<WorkflowRequest>
createHandler(
const BusyHandler& pBusyHandler,
const QVariant& pData, Args&& ... pArgs)
80 auto [controller, context] = getGenerator<Controller, Context, Args...>(std::forward<Args>(pArgs) ...);
81 return QSharedPointer<Request>::create(controller, context, pBusyHandler, pData);
85 WorkflowRequest(
const std::function<QSharedPointer<WorkflowController>(
const QSharedPointer<WorkflowContext>& pContext)>& pGeneratorController,
86 const std::function<QSharedPointer<WorkflowContext>()>& pGeneratorContext,
87 const BusyHandler& pHandler = BusyHandler(),
88 const QVariant& pData = QVariant());
93 [[nodiscard]] QSharedPointer<WorkflowController>
getController()
const;
94 [[nodiscard]] QSharedPointer<WorkflowContext>
getContext()
const;
95 [[nodiscard]] QVariant
getData()
const;
96 [[nodiscard]] WorkflowControl
handleBusyWorkflow(
const QSharedPointer<WorkflowRequest>& pActiveWorkflow,
const QSharedPointer<WorkflowRequest>& pWaitingWorkflow)
const;
#define defineEnumType(enumName,...)
Definition: EnumHelper.h:90
Definition: WorkflowController.h:24
Definition: WorkflowRequest.h:26
Action getAction() const
Definition: WorkflowRequest.cpp:43
void initialize()
Definition: WorkflowRequest.cpp:28
static QSharedPointer< WorkflowRequest > createHandler(const BusyHandler &pBusyHandler, const QVariant &pData, Args &&... pArgs)
Definition: WorkflowRequest.h:78
QSharedPointer< WorkflowContext > getContext() const
Definition: WorkflowRequest.cpp:55
WorkflowRequest(const std::function< QSharedPointer< WorkflowController >(const QSharedPointer< WorkflowContext > &pContext)> &pGeneratorController, const std::function< QSharedPointer< WorkflowContext >()> &pGeneratorContext, const BusyHandler &pHandler=BusyHandler(), const QVariant &pData=QVariant())
QSharedPointer< WorkflowController > getController() const
Definition: WorkflowRequest.cpp:49
static QSharedPointer< WorkflowRequest > create(Args &&... pArgs)
Definition: WorkflowRequest.h:56
QVariant getData() const
Definition: WorkflowRequest.cpp:61
bool isInitialized() const
Definition: WorkflowRequest.cpp:37
static QSharedPointer< WorkflowRequest > createHandler(const BusyHandler &pBusyHandler, Args &&... pArgs)
Definition: WorkflowRequest.h:64
WorkflowControl handleBusyWorkflow(const QSharedPointer< WorkflowRequest > &pActiveWorkflow, const QSharedPointer< WorkflowRequest > &pWaitingWorkflow) const
Definition: WorkflowRequest.cpp:67
static QSharedPointer< WorkflowRequest > createHandler(const QVariant &pData, Args &&... pArgs)
Definition: WorkflowRequest.h:71
Implementation of GeneralAuthenticate response APDUs.
Definition: CommandApdu.h:16