xref: /haiku/headers/os/package/PackageInfo.h (revision c80809a3ab0b0a2ce53ea861a2b00ace24ff452d)
1 /*
2  * Copyright 2011, Haiku, Inc.
3  * Distributed under the terms of the MIT License.
4  */
5 #ifndef _PACKAGE__PACKAGE_INFO_H_
6 #define _PACKAGE__PACKAGE_INFO_H_
7 
8 
9 #include <ObjectList.h>
10 #include <String.h>
11 
12 #include <package/PackageArchitecture.h>
13 #include <package/PackageFlags.h>
14 #include <package/PackageInfoAttributes.h>
15 #include <package/PackageResolvable.h>
16 #include <package/PackageResolvableExpression.h>
17 #include <package/PackageVersion.h>
18 
19 
20 class BEntry;
21 
22 
23 namespace BPackageKit {
24 
25 
26 /*
27  * Keeps a list of package info elements (e.g. name, version, vendor, ...) which
28  * will be converted to package attributes when creating a package. Usually,
29  * these elements have been parsed from a ".PackageInfo"-file.
30  * Alternatively, the package reader populates a BPackageInfo object by
31  * collecting package attributes from an existing package.
32  */
33 class BPackageInfo {
34 public:
35 			struct ParseErrorListener {
36 				virtual	~ParseErrorListener();
37 				virtual void OnError(const BString& msg, int line, int col) = 0;
38 			};
39 
40 public:
41 								BPackageInfo();
42 								~BPackageInfo();
43 
44 			status_t			ReadFromConfigFile(
45 									const BEntry& packageInfoEntry,
46 									ParseErrorListener* listener = NULL);
47 			status_t			ReadFromConfigString(
48 									const BString& packageInfoString,
49 									ParseErrorListener* listener = NULL);
50 
51 			status_t			InitCheck() const;
52 
53 			const BString&		Name() const;
54 			const BString&		Summary() const;
55 			const BString&		Description() const;
56 			const BString&		Vendor() const;
57 			const BString&		Packager() const;
58 			const BString&		Checksum() const;
59 
60 			uint32				Flags() const;
61 
62 			BPackageArchitecture	Architecture() const;
63 
64 			const BPackageVersion&	Version() const;
65 
66 			const BObjectList<BString>&	CopyrightList() const;
67 			const BObjectList<BString>&	LicenseList() const;
68 
69 			const BObjectList<BPackageResolvable>&	ProvidesList() const;
70 			const BObjectList<BPackageResolvableExpression>&
71 								RequiresList() const;
72 			const BObjectList<BPackageResolvableExpression>&
73 								SupplementsList() const;
74 			const BObjectList<BPackageResolvableExpression>&
75 								ConflictsList() const;
76 			const BObjectList<BPackageResolvableExpression>&
77 								FreshensList() const;
78 			const BObjectList<BString>&	ReplacesList() const;
79 
80 			void				SetName(const BString& name);
81 			void				SetSummary(const BString& summary);
82 			void				SetDescription(const BString& description);
83 			void				SetVendor(const BString& vendor);
84 			void				SetPackager(const BString& packager);
85 			void				SetChecksum(const BString& checksum);
86 
87 			void				SetFlags(uint32 flags);
88 
89 			void				SetArchitecture(
90 									BPackageArchitecture architecture);
91 
92 			void				SetVersion(const BPackageVersion& version);
93 
94 			void				ClearCopyrightList();
95 			status_t			AddCopyright(const BString& copyright);
96 
97 			void				ClearLicenseList();
98 			status_t			AddLicense(const BString& license);
99 
100 			void				ClearProvidesList();
101 			status_t			AddProvides(const BPackageResolvable& provides);
102 
103 			void				ClearRequiresList();
104 			status_t			AddRequires(
105 									const BPackageResolvableExpression& expr);
106 
107 			void				ClearSupplementsList();
108 			status_t			AddSupplements(
109 									const BPackageResolvableExpression& expr);
110 
111 			void				ClearConflictsList();
112 			status_t			AddConflicts(
113 									const BPackageResolvableExpression& expr);
114 
115 			void				ClearFreshensList();
116 			status_t			AddFreshens(
117 									const BPackageResolvableExpression& expr);
118 
119 			void				ClearReplacesList();
120 			status_t			AddReplaces(const BString& replaces);
121 
122 			void				Clear();
123 
124 public:
125 	static	status_t			GetArchitectureByName(const BString& name,
126 									BPackageArchitecture& _architecture);
127 
128 	static	const char*			kElementNames[];
129 	static	const char*			kArchitectureNames[];
130 
131 private:
132 			class Parser;
133 
134 private:
135 			BString				fName;
136 			BString				fSummary;
137 			BString				fDescription;
138 			BString				fVendor;
139 			BString				fPackager;
140 
141 			uint32				fFlags;
142 
143 			BPackageArchitecture	fArchitecture;
144 
145 			BPackageVersion		fVersion;
146 
147 			BObjectList<BString>	fCopyrightList;
148 			BObjectList<BString>	fLicenseList;
149 
150 			BObjectList<BPackageResolvable>	fProvidesList;
151 
152 			BObjectList<BPackageResolvableExpression>	fRequiresList;
153 			BObjectList<BPackageResolvableExpression>	fSupplementsList;
154 
155 			BObjectList<BPackageResolvableExpression>	fConflictsList;
156 
157 			BObjectList<BPackageResolvableExpression>	fFreshensList;
158 
159 			BObjectList<BString>	fReplacesList;
160 
161 			BString				fChecksum;
162 };
163 
164 
165 }	// namespace BPackageKit
166 
167 
168 #endif	// _PACKAGE__PACKAGE_INFO_H_
169