Cutelyst  3.5.0
action.h
1 /*
2  * SPDX-FileCopyrightText: (C) 2013-2022 Daniel Nicoletti <dantti12@gmail.com>
3  * SPDX-License-Identifier: BSD-3-Clause
4  */
5 #ifndef CUTELYST_ACTION_H
6 #define CUTELYST_ACTION_H
7 
8 #include <QtCore/QStringList>
9 #include <QtCore/QMetaMethod>
10 
11 #include <Cutelyst/cutelyst_global.h>
12 #include <Cutelyst/component.h>
13 #include <Cutelyst/context.h>
14 
15 namespace Cutelyst {
16 
17 class Controller;
18 class Dispatcher;
19 class ActionPrivate;
34 class CUTELYST_LIBRARY Action : public Component
35 {
36  Q_OBJECT
37 public:
41  explicit Action(QObject *parent = nullptr);
42  virtual ~Action() override = default;
43 
44  virtual Modifiers modifiers() const override;
45 
51  ParamsMultiMap attributes() const noexcept;
52 
60  QString attribute(const QString &name, const QString &defaultValue = {}) const;
61 
66  void setAttributes(const ParamsMultiMap &attributes);
67 
71  QString className() const;
72 
76  Controller* controller() const;
77 
81  inline bool dispatch(Context *c) { return c->execute(this); }
82 
87  virtual bool match(int numberOfArgs) const noexcept;
88 
99  virtual bool matchCaptures(int numberOfCaptures) const noexcept;
100 
104  QString ns() const noexcept;
105 
111  virtual qint8 numberOfArgs() const noexcept;
112 
117  virtual qint8 numberOfCaptures() const noexcept;
118 
119 protected:
120  friend class Dispatcher;
121  friend class ControllerPrivate;
122 
126  explicit Action(ActionPrivate *ptr, QObject *parent = nullptr);
127 
131  virtual bool doExecute(Context *c) override;
132 
136  void setMethod(const QMetaMethod &method);
137 
141  void setController(Controller *controller);
142 
146  void setupAction(const QVariantHash &args, Application *app);
147 
148 private:
149  Q_DECLARE_PRIVATE(Action)
150 };
151 
154 
155 }
156 
157 #endif // CUTELYST_ACTION_H
bool dispatch(Context *c)
Definition: action.h:81
The Cutelyst Component base class.
Definition: component.h:25
This class represents a Cutelyst Action.
Definition: action.h:34
The Cutelyst Context.
Definition: context.h:38
Cutelyst Controller base class
Definition: controller.h:89
The Cutelyst namespace holds all public Cutelyst API.
Definition: Mainpage.dox:7
bool execute(Component *code)
Definition: context.cpp:411
The Cutelyst Application.
Definition: application.h:42
The Cutelyst Dispatcher.
Definition: dispatcher.h:27