From 4b1798f0cdf87361869e7cf2b341acacd056c410 Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Wed, 5 Apr 2017 15:04:00 +0200 Subject: Moved cpp code into src directory --- framework/src/actions/actionhandler.h | 112 ++++++++++++++++++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 framework/src/actions/actionhandler.h (limited to 'framework/src/actions/actionhandler.h') diff --git a/framework/src/actions/actionhandler.h b/framework/src/actions/actionhandler.h new file mode 100644 index 00000000..fbaedad1 --- /dev/null +++ b/framework/src/actions/actionhandler.h @@ -0,0 +1,112 @@ +/* + Copyright (c) 2016 Christian Mollekopf + + This library is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published by + the Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + This library is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public + License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to the + Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + 02110-1301, USA. +*/ +#pragma once + +#include +#include +#include +#include + +#include "actionresult.h" +#include "context.h" + +namespace Kube { + +class ActionHandler : public QObject +{ + Q_OBJECT + Q_PROPERTY(QByteArray actionId READ actionId WRITE setActionId) + +public: + ActionHandler(QObject *parent = 0); + virtual ~ActionHandler(); + + virtual bool isActionReady(Context *context); + + virtual ActionResult execute(Context *context); + + void setActionId(const QByteArray &); + QByteArray actionId() const; + + void setRequiredProperties(const QSet &requiredProperties); + QSet requiredProperties() const; + +private: + QByteArray mActionId; + QSet mRequiredProperties; +}; + +template +class ActionHandlerBase : public ActionHandler +{ +public: + ActionHandlerBase(const QByteArray &actionId) + : ActionHandler{} + { + setActionId(actionId); + } + + bool isActionReady(Context *c) Q_DECL_OVERRIDE + { + auto wrapper = ContextType{*c}; + return isActionReady(wrapper); + } + + ActionResult execute(Context *c) Q_DECL_OVERRIDE + { + ActionResult result; + auto wrapper = ContextType{*c}; + execute(wrapper) + .template then([=](const KAsync::Error &error) { + auto modifyableResult = result; + if (error) { + qWarning() << "Job failed: " << error.errorCode << error.errorMessage; + modifyableResult.setError(1); + } + modifyableResult.setDone(); + }).exec(); + return result; + } +protected: + + virtual bool isActionReady(ContextType &) { return true; } + virtual KAsync::Job execute(ContextType &) = 0; +}; + +class ActionHandlerHelper : public ActionHandler +{ +public: + typedef std::function IsReadyFunction; + typedef std::function Handler; + typedef std::function(Context *)> JobHandler; + + ActionHandlerHelper(const Handler &); + ActionHandlerHelper(const IsReadyFunction &, const Handler &); + ActionHandlerHelper(const QByteArray &actionId, const IsReadyFunction &, const Handler &); + ActionHandlerHelper(const QByteArray &actionId, const IsReadyFunction &, const JobHandler &); + + bool isActionReady(Context *) Q_DECL_OVERRIDE; + ActionResult execute(Context *) Q_DECL_OVERRIDE; +private: + const IsReadyFunction isReadyFunction; + const Handler handlerFunction; + const JobHandler jobHandlerFunction; +}; + +} -- cgit v1.2.3