Cutelyst  3.5.0
context.h
1 /*
2  * SPDX-FileCopyrightText: (C) 2013-2022 Daniel Nicoletti <dantti12@gmail.com>
3  * SPDX-License-Identifier: BSD-3-Clause
4  */
5 #ifndef CUTELYST_CONTEXT_H
6 #define CUTELYST_CONTEXT_H
7 
8 #include <QtCore/QObject>
9 #include <QtCore/QVariant>
10 #include <QtCore/QUrl>
11 #include <QtCore/QStringList>
12 #include <QtCore/QStack>
13 
14 #include <Cutelyst/async.h>
15 #include <Cutelyst/request.h>
16 #include <Cutelyst/cutelyst_global.h>
17 
18 namespace Cutelyst {
19 
20 class Action;
21 class Application;
22 class Component;
23 class Engine;
24 class Response;
25 class Dispatcher;
26 class Controller;
27 class View;
28 class Stats;
29 class Plugin;
30 class ContextPrivate;
31 
38 class CUTELYST_LIBRARY Context : public QObject
39 {
40  Q_OBJECT
41  Q_PROPERTY(Action* action READ action CONSTANT)
42  Q_PROPERTY(QString actionName READ actionName CONSTANT)
43  Q_PROPERTY(QString ns READ ns CONSTANT)
44  Q_PROPERTY(QString namespace READ ns CONSTANT)
45  Q_PROPERTY(Request *req READ request CONSTANT)
46  Q_PROPERTY(Request *request READ request CONSTANT)
47  Q_PROPERTY(Controller *controller READ controller CONSTANT)
48  Q_PROPERTY(QString controllerName READ controllerName CONSTANT)
49  Q_PROPERTY(QVariantMap config READ config CONSTANT)
50  Q_PROPERTY(bool state READ state CONSTANT)
51 public:
57  Context(Application *app);
58  virtual ~Context();
59 
63  bool error() const noexcept;
64 
68  void error(const QString &error);
69 
73  QStringList errors() const noexcept;
74 
78  bool state() const noexcept;
79 
84  void setState(bool state) noexcept;
85 
89  Engine *engine() const noexcept;
90 
94  Application *app() const noexcept;
95 
99  Response *response() const noexcept;
100 
104  Response *res() const noexcept;
105 
109  Action *action() const noexcept;
110 
114  QString actionName() const noexcept;
115 
123  QString ns() const noexcept;
124 
129  Request *request() const noexcept;
130 
134  Request *req() const noexcept;
135 
139  Dispatcher *dispatcher() const noexcept;
140 
144  QString controllerName() const;
145 
149  Controller *controller() const noexcept;
150 
155  Controller *controller(const QString &name) const;
156 
160  View *view(const QString &name = QString()) const;
161 
167  View *customView() const noexcept;
168 
180  bool setCustomView(const QString &name);
181 
203  void stash(const QVariantHash &unite);
204 
216  QVariantHash &stash();
217 
221  QVariant stash(const QString &key) const;
222 
226  QVariant stash(const QString &key, const QVariant &defaultValue) const;
227 
233  QVariant stashTake(const QString &key);
234 
239  bool stashRemove(const QString &key);
240 
244  void setStash(const QString &key, const QVariant &value);
245 
249  void setStash(const QString &key, const ParamsMultiMap &map);
250 
254  QStack<Component *> stack() const noexcept;
255 
267  QUrl uriFor(const QString &path = QString(),
268  const QStringList &args = QStringList(),
269  const ParamsMultiMap &queryValues = ParamsMultiMap()) const;
270 
281  inline QUrl uriFor(const QString &path,
282  const ParamsMultiMap &queryValues) const;
283 
293  QUrl uriFor(Action *action,
294  const QStringList &captures = QStringList(),
295  const QStringList &args = QStringList(),
296  const ParamsMultiMap &queryValues = ParamsMultiMap()) const;
297 
303  inline QUrl uriFor(Action *action,
304  const ParamsMultiMap &queryValues) const;
305 
329  QUrl uriForAction(const QString &path,
330  const QStringList &captures = QStringList(),
331  const QStringList &args = QStringList(),
332  const ParamsMultiMap &queryValues = ParamsMultiMap()) const;
333 
337  inline QUrl uriForAction(const QString &path,
338  const ParamsMultiMap &queryValues) const;
339 
344  bool detached() const noexcept;
345 
351  void detach(Action *action = nullptr);
352 
368  void detachAsync() noexcept;
369 
377  void attachAsync();
378 
397  bool forward(Component *component);
398 
417  bool forward(const QString &action);
418 
422  Action *getAction(const QString &action, const QString &ns = QString()) const;
423 
427  QVector<Action *> getActions(const QString &action, const QString &ns = QString()) const;
428 
432  QVector<Plugin *> plugins() const;
433 
437  template <typename T>
438  T plugin()
439  {
440  const auto pluginsConst = plugins();
441  for (Plugin *plugin : pluginsConst) {
442  auto p = qobject_cast<T>(plugin);
443  if (p) {
444  return p;
445  }
446  }
447  return nullptr;
448  }
449 
453  bool execute(Component *code);
454 
462  QLocale locale() const noexcept;
463 
478  void setLocale(const QLocale &locale);
479 
483  QVariant config(const QString &key, const QVariant &defaultValue = {}) const;
484 
488  QVariantMap config() const noexcept;
489 
503  QString translate(const char *context, const char *sourceText, const char *disambiguation = nullptr, int n = -1) const;
504 
505 public Q_SLOTS:
510  void finalize();
511 
512 protected:
516  Context(ContextPrivate *priv);
517 
518  friend class Application;
519  friend class Action;
520  friend class ActionChain;
521  friend class DispatchType;
522  friend class Plugin;
523  friend class Engine;
524  friend class Controller;
525  friend class Async;
526  ContextPrivate *d_ptr;
527 
528 private:
529  Q_DECLARE_PRIVATE(Context)
530 };
531 
532 inline QUrl Context::uriFor(const QString &path, const ParamsMultiMap &queryValues) const
533 { return uriFor(path, QStringList(), queryValues); }
534 
535 inline QUrl Context::uriFor(Action *action, const ParamsMultiMap &queryValues) const
536 { return uriFor(action, QStringList(), QStringList(), queryValues); }
537 
538 inline QUrl Context::uriForAction(const QString &path, const ParamsMultiMap &queryValues) const
539 { return uriForAction(path, QStringList(), QStringList(), queryValues); }
540 
541 }
542 
543 Q_DECLARE_METATYPE(Cutelyst::Context *)
544 
545 #endif // CUTELYST_CONTEXT_H
QUrl uriFor(const QString &path=QString(), const QStringList &args=QStringList(), const ParamsMultiMap &queryValues=ParamsMultiMap()) const
Definition: context.cpp:230
QMultiMap< QString, QString > ParamsMultiMap
The Cutelyst Component base class.
Definition: component.h:25
This class represents a Cutelyst Action.
Definition: action.h:34
QUrl uriForAction(const QString &path, const QStringList &captures=QStringList(), const QStringList &args=QStringList(), const ParamsMultiMap &queryValues=ParamsMultiMap()) const
Definition: context.cpp:312
The Cutelyst Context.
Definition: context.h:38
Cutelyst Controller base class
Definition: controller.h:89
T plugin()
Returns the registered plugin that casts to the template type T.
Definition: context.h:438
The Cutelyst namespace holds all public Cutelyst API.
Definition: Mainpage.dox:7
Cutelyst View abstract view component
Definition: view.h:21
The Cutelyst Application.
Definition: application.h:42
The Cutelyst Engine
Definition: engine.h:20
The Cutelyst Dispatcher.
Definition: dispatcher.h:27