1/*
2 * Copyright 2014, Haiku, Inc. All Rights Reserved.
3 * Distributed under the terms of the MIT License.
4 */
5#ifndef _PACKAGE__COMMIT_TRANSACTION_RESULT_H_
6#define _PACKAGE__COMMIT_TRANSACTION_RESULT_H_
7
8
9#include <ObjectList.h>
10#include <String.h>
11
12
13class BMessage;
14
15
16namespace BPackageKit {
17
18
19enum BTransactionError {
20	B_TRANSACTION_OK = 0,
21	B_TRANSACTION_NO_MEMORY,
22	B_TRANSACTION_INTERNAL_ERROR,
23	B_TRANSACTION_INSTALLATION_LOCATION_BUSY,
24	B_TRANSACTION_CHANGE_COUNT_MISMATCH,
25	B_TRANSACTION_BAD_REQUEST,
26	B_TRANSACTION_NO_SUCH_PACKAGE,
27	B_TRANSACTION_PACKAGE_ALREADY_EXISTS,
28	B_TRANSACTION_FAILED_TO_GET_ENTRY_PATH,
29	B_TRANSACTION_FAILED_TO_OPEN_DIRECTORY,
30	B_TRANSACTION_FAILED_TO_CREATE_DIRECTORY,
31	B_TRANSACTION_FAILED_TO_REMOVE_DIRECTORY,
32	B_TRANSACTION_FAILED_TO_MOVE_DIRECTORY,
33	B_TRANSACTION_FAILED_TO_WRITE_ACTIVATION_FILE,
34	B_TRANSACTION_FAILED_TO_READ_PACKAGE_FILE,
35	B_TRANSACTION_FAILED_TO_EXTRACT_PACKAGE_FILE,
36	B_TRANSACTION_FAILED_TO_OPEN_FILE,
37	B_TRANSACTION_FAILED_TO_MOVE_FILE,
38	B_TRANSACTION_FAILED_TO_COPY_FILE,
39	B_TRANSACTION_FAILED_TO_WRITE_FILE_ATTRIBUTE,
40	B_TRANSACTION_FAILED_TO_ACCESS_ENTRY,
41	B_TRANSACTION_FAILED_TO_ADD_GROUP,
42	B_TRANSACTION_FAILED_TO_ADD_USER,
43	B_TRANSACTION_FAILED_TO_ADD_USER_TO_GROUP,
44	B_TRANSACTION_FAILED_TO_CHANGE_PACKAGE_ACTIVATION,
45};
46
47
48class BTransactionIssue {
49public:
50			enum BType {
51				B_WRITABLE_FILE_TYPE_MISMATCH,
52				B_WRITABLE_FILE_NO_PACKAGE_ATTRIBUTE,
53				B_WRITABLE_FILE_OLD_ORIGINAL_FILE_MISSING,
54				B_WRITABLE_FILE_OLD_ORIGINAL_FILE_TYPE_MISMATCH,
55				B_WRITABLE_FILE_COMPARISON_FAILED,
56				B_WRITABLE_FILE_NOT_EQUAL,
57				B_WRITABLE_SYMLINK_COMPARISON_FAILED,
58				B_WRITABLE_SYMLINK_NOT_EQUAL,
59				B_POST_INSTALL_SCRIPT_NOT_FOUND,
60				B_STARTING_POST_INSTALL_SCRIPT_FAILED,
61				B_POST_INSTALL_SCRIPT_FAILED,
62				B_PRE_UNINSTALL_SCRIPT_NOT_FOUND,
63				B_STARTING_PRE_UNINSTALL_SCRIPT_FAILED,
64				B_PRE_UNINSTALL_SCRIPT_FAILED,
65			};
66
67public:
68								BTransactionIssue();
69								BTransactionIssue(BType type,
70									const BString& packageName,
71									const BString& path1, const BString& path2,
72 									status_t systemError, int exitCode);
73								BTransactionIssue(
74									const BTransactionIssue& other);
75								~BTransactionIssue();
76
77			BType				Type() const;
78			const BString&		PackageName() const;
79			const BString&		Path1() const;
80			const BString&		Path2() const;
81			status_t			SystemError() const;
82			int					ExitCode() const;
83
84			BString				ToString() const;
85
86			status_t			AddToMessage(BMessage& message) const;
87			status_t			ExtractFromMessage(const BMessage& message);
88
89			BTransactionIssue&	operator=(const BTransactionIssue& other);
90
91private:
92			BType				fType;
93			BString				fPackageName;
94			BString				fPath1;
95			BString				fPath2;
96 			status_t			fSystemError;
97			int					fExitCode;
98};
99
100
101class BCommitTransactionResult {
102public:
103								BCommitTransactionResult();
104								BCommitTransactionResult(
105									BTransactionError error);
106								BCommitTransactionResult(
107									const BCommitTransactionResult& other);
108								~BCommitTransactionResult();
109
110			void				Unset();
111
112			int32				CountIssues() const;
113			const BTransactionIssue* IssueAt(int32 index) const;
114			bool				AddIssue(const BTransactionIssue& issue);
115
116			BTransactionError	Error() const;
117			void				SetError(BTransactionError error);
118
119			status_t			SystemError() const;
120			void				SetSystemError(status_t error);
121
122			const BString&		ErrorPackage() const;
123									// may be empty, even on error
124			void				SetErrorPackage(const BString& packageName);
125
126			BString				FullErrorMessage() const;
127
128			const BString&		Path1() const;
129			void				SetPath1(const BString& path);
130
131			const BString&		Path2() const;
132			void				SetPath2(const BString& path);
133
134			const BString&		Path3() const;
135			void				SetPath3(const BString& path);
136
137			const BString&		String1() const;
138			void				SetString1(const BString& string);
139
140			const BString&		String2() const;
141			void				SetString2(const BString& string);
142
143			const BString&		OldStateDirectory() const;
144			void				SetOldStateDirectory(const BString& directory);
145
146			status_t			AddToMessage(BMessage& message) const;
147			status_t			ExtractFromMessage(const BMessage& message);
148
149			BCommitTransactionResult& operator=(
150									const BCommitTransactionResult& other);
151
152private:
153			typedef BObjectList<BTransactionIssue> IssueList;
154
155private:
156			BTransactionError	fError;
157			status_t			fSystemError;
158			BString				fErrorPackage;
159			BString				fPath1;
160			BString				fPath2;
161			BString				fString1;
162			BString				fString2;
163			BString				fOldStateDirectory;
164			IssueList			fIssues;
165};
166
167
168}	// namespace BPackageKit
169
170
171#endif	// _PACKAGE__COMMIT_TRANSACTION_RESULT_H_
172