1/*
2 Copyright (c) 2006 Volker Krause <vkrause@kde.org>
3
4 This library is free software; you can redistribute it and/or modify it
5 under the terms of the GNU Library General Public License as published by
6 the Free Software Foundation; either version 2 of the License, or (at your
7 option) any later version.
8
9 This library is distributed in the hope that it will be useful, but WITHOUT
10 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
12 License for more details.
13
14 You should have received a copy of the GNU Library General Public License
15 along with this library; see the file COPYING.LIB. If not, write to the
16 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
17 02110-1301, USA.
18*/
19
20#ifndef AKONADI_TRANSACTIONJOBS_H
21#define AKONADI_TRANSACTIONJOBS_H
22
23#include "akonadi_export.h"
24
25#include <akonadi/job.h>
26
27namespace Akonadi {
28
29class TransactionBeginJobPrivate;
30class TransactionRollbackJobPrivate;
31class TransactionCommitJobPrivate;
32
33/**
34 * @short Job that begins a session-global transaction.
35 *
36 * Sometimes you want to execute a sequence of commands in
37 * an atomic way, so that either all commands or none shall
38 * be executed. The TransactionBeginJob, TransactionCommitJob and
39 * TransactionRollbackJob provide these functionality for the
40 * Akonadi Job classes.
41 *
42 * @note This will only have an effect when used as a subjob or with a Session.
43 *
44 * @author Volker Krause <vkrause@kde.org>
45 */
46class AKONADI_EXPORT TransactionBeginJob : public Job
47{
48 Q_OBJECT
49
50public:
51 /**
52 * Creates a new transaction begin job.
53 *
54 * @param parent The parent job or Session, must not be 0.
55 */
56 explicit TransactionBeginJob(QObject *parent);
57
58 /**
59 * Destroys the transaction begin job.
60 */
61 ~TransactionBeginJob();
62
63protected:
64 virtual void doStart();
65
66private:
67 Q_DECLARE_PRIVATE(TransactionBeginJob)
68};
69
70/**
71 * @short Job that aborts a session-global transaction.
72 *
73 * If a job inside a TransactionBeginJob has been failed,
74 * the TransactionRollbackJob can be used to rollback all changes done by these
75 * jobs.
76 *
77 * @note This will only have an effect when used as a subjob or with a Session.
78 *
79 * @author Volker Krause <vkrause@kde.org>
80 */
81class AKONADI_EXPORT TransactionRollbackJob : public Job
82{
83 Q_OBJECT
84
85public:
86 /**
87 * Creates a new transaction rollback job.
88 * The parent must be the same parent as for the TransactionBeginJob.
89 *
90 * @param parent The parent job or Session, must not be 0.
91 */
92 explicit TransactionRollbackJob(QObject *parent);
93
94 /**
95 * Destroys the transaction rollback job.
96 */
97 ~TransactionRollbackJob();
98
99protected:
100 virtual void doStart();
101
102private:
103 Q_DECLARE_PRIVATE(TransactionRollbackJob)
104};
105
106/**
107 * @short Job that commits a session-global transaction.
108 *
109 * This job commits all changes of this transaction.
110 *
111 * @author Volker Krause <vkrause@kde.org>
112 */
113class AKONADI_EXPORT TransactionCommitJob : public Job
114{
115 Q_OBJECT
116
117public:
118 /**
119 * Creates a new transaction commit job.
120 * The parent must be the same parent as for the TransactionBeginJob.
121 *
122 * @param parent The parent job or Session, must not be 0.
123 */
124 explicit TransactionCommitJob(QObject *parent);
125
126 /**
127 * Destroys the transaction commit job.
128 */
129 ~TransactionCommitJob();
130
131protected:
132 virtual void doStart();
133
134private:
135 Q_DECLARE_PRIVATE(TransactionCommitJob)
136};
137
138}
139
140#endif
141