1 /* libcomps - C alternative to yum.comps library
2  * Copyright (C) 2013 Jindrich Luza
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation; either version 2 of the License, or
7  * any later version.
8  *
9  * This program is distributed in the hope that it will be useful, but
10  * WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to  Free Software
16  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301,
17  * USA
18  */
19 
20 #ifndef COMPS_DOCGROUP_H
21 #define COMPS_DOCGROUP_H
22 
23 #include "comps_utils.h"
24 #include "comps_obj.h"
25 #include "comps_objdict.h"
26 #include "comps_objlist.h"
27 #include "comps_docpackage.h"
28 #include "comps_validate.h"
29 #include "comps_radix.h"
30 #include "comps_default.h"
31 
32 #include <stddef.h>
33 #include <assert.h>
34 
35 /** \file comps_docgroup.h
36  * \brief COMPS_DocGroup header file
37  * @see COMPS_DocGroup_prop_setters
38  * @see COMPS_DocGroup_prop_getters
39  * @see COMPS_DocGroup_list_setters
40  * @see COMPS_DocGroup_list_getters
41  *
42  * COMPS_DocGroup object support union operation. Read more about
43  * @link doc_unioning Libcomps objects unioning
44  * @endlink
45  *
46  */
47 
48 /** COMPS_Object derivate representing group element in comps.xml file */
49 typedef struct {
50     COMPS_Object_HEAD;
51     COMPS_ObjDict *properties;
52     /**< properties of group */
53     COMPS_ObjDict *name_by_lang;
54     /**< language localization of name attribute */
55     COMPS_ObjDict *desc_by_lang;
56     /**< language localization of description attribute */
57     COMPS_ObjList *packages;
58     /**< list of packages in group */
59 } COMPS_DocGroup;
60 
61 //HEAD_COMPS_CREATE_u(docgroup, COMPS_DocGroup)  /*comps_utils.h macro*/
62 //HEAD_COMPS_COPY_u(docgroup, COMPS_DocGroup)  /*comps_utils.h macro*/
63 //HEAD_COMPS_DESTROY_u(docgroup, COMPS_DocGroup)  /*comps_utils.h macro*/
64 
65 /**
66  * \defgroup COMPS_DocGroup_prop_setters COMPS_DocGroup properties setters
67  * @{
68  **/
69 /** COMPS_DocGroup id setter
70  * @param obj COMPS_DocGroup object
71  * @param id COMPS_Str object representing id
72  * \warning setter doesn't increment reference counter of id object
73  */
74 HEAD_COMPS_STRPROP_SETTER(group, COMPS_DocGroup, id) /*comps_utils.h macro*/
75 
76 /** COMPS_DocGroup name setter
77  * @param obj COMPS_DocGroup object
78  * @param name COMPS_Str object representing name
79  * \warning setter doesn't increment reference counter of name object
80  */
81 HEAD_COMPS_STRPROP_SETTER(group, COMPS_DocGroup, name) /*comps_utils.h macro*/
82 
83 /** COMPS_DocGroup description setter
84  * @param obj COMPS_DocGroup object
85  * @param desc COMPS_Str object representing description
86  * \warning setter doesn't increment reference counter of desc object
87  */
88 HEAD_COMPS_STRPROP_SETTER(group, COMPS_DocGroup, desc) /*comps_utils.h macro*/
89 
90 /** COMPS_DocGroup default setter
91  * @param obj COMPS_DocGroup object
92  * @param def COMPS_Num object representing def
93  * \warning setter doesn't increment reference counter of def object
94  */
95 HEAD_COMPS_NUMPROP_SETTER(group, COMPS_DocGroup, def) /*comps_utils.h macro*/
96 
97 /** COMPS_DocGroup uservisible setter
98  * @param obj COMPS_DocGroup object
99  * @param uservisible COMPS_NUm object representing uservisible
100  * \warning setter doesn't increment reference counter of uservisible object
101  */
102 HEAD_COMPS_NUMPROP_SETTER(group, COMPS_DocGroup, uservisible) /*comps_utils.h macro*/
103 
104 /** COMPS_DocGroup biarchonly setter
105  * @param obj COMPS_DocGroup object
106  * @param uservisible COMPS_NUm object representing biarchonly
107  * \warning setter doesn't increment reference counter of biarchonly object
108  */
109 HEAD_COMPS_NUMPROP_SETTER(group, COMPS_DocGroup, biarchonly) /*comps_utils.h macro*/
110 
111 /** COMPS_DocGroup display_order setter
112  * @param obj COMPS_DocGroup object
113  * @param display_order COMPS_Num object representing display_order
114  * \warning setter doesn't increment reference counter of display_order object
115  */
116 HEAD_COMPS_NUMPROP_SETTER(group, COMPS_DocGroup, display_order) /*comps_utils.h macro*/
117 
118 /** COMPS_DocGroup langonly setter
119  * @param obj COMPS_DocGroup object
120  * @param langonly COMPS_Str object representing langonly
121  * \warning setter doesn't increment reference counter of langonly object
122  */
123 HEAD_COMPS_STRPROP_SETTER(group, COMPS_DocGroup, langonly) /*comps_utils.h macro*/
124 /**@}*/
125 
126 /**
127  * \defgroup COMPS_DocGroup_prop_getters COMPS_DocGroup properties getters
128  * @{
129  **/
130 
131 /** COMPS_DocGroup id getter
132  * @param obj COMPS_DocGroup object
133  * @return COMPS_Str object representing group id with incremented
134  * reference count
135  */
136 HEAD_COMPS_PROP_GETTER(group, COMPS_DocGroup, id) /*comps_utils.h macro*/
137 HEAD_COMPS_PROP_GETTER_OBJ(group, id) /*comps_utils.h macro*/
138 
139 /** COMPS_DocGroup name getter
140  * @param obj COMPS_DocGroup object
141  * @return COMPS_Str object representing group name with incremented
142  * reference count
143  */
144 HEAD_COMPS_PROP_GETTER(group, COMPS_DocGroup, name) /*comps_utils.h macro*/
145 
146 /** COMPS_DocGroup description getter
147  * @param obj COMPS_DocGroup object
148  * @return COMPS_Str object representing group description with incremented
149  * reference count
150  */
151 HEAD_COMPS_PROP_GETTER(group, COMPS_DocGroup, desc) /*comps_utils.h macro*/
152 
153 /** COMPS_DocGroup default getter
154  * @param obj COMPS_DocGroup object
155  * @return COMPS_Num object representing group default with incremented
156  * reference count
157  */
158 HEAD_COMPS_PROP_GETTER(group, COMPS_DocGroup, def) /*comps_utils.h macro*/
159 
160 /** COMPS_DocGroup uservisible getter
161  * @param obj COMPS_DocGroup object
162  * @return COMPS_Num object representing group uservisible with incremented
163  * reference count
164  */
165 HEAD_COMPS_PROP_GETTER(group, COMPS_DocGroup, uservisible) /*comps_utils.h macro*/
166 
167 /** COMPS_DocGroup biarchonly getter
168  * @param obj COMPS_DocGroup object
169  * @return COMPS_Num object representing group biarchonly with incremented
170  * reference count
171  */
172 HEAD_COMPS_PROP_GETTER(group, COMPS_DocGroup, biarchonly) /*comps_utils.h macro*/
173 
174 /** COMPS_DocGroup display_order getter
175  * @param obj COMPS_DocGroup object
176  * @return COMPS_Num object representing group display_order with incremented
177  * reference count
178  */
179 HEAD_COMPS_PROP_GETTER(group, COMPS_DocGroup, display_order) /*comps_utils.h macro*/
180 
181 /** COMPS_DocGroup langonly getter
182  * @param obj COMPS_DocGroup object
183  * @return COMPS_Str object representing group langonly with incremented
184  * reference count
185  */
186 HEAD_COMPS_PROP_GETTER(group, COMPS_DocGroup, langonly) /*comps_utils.h macro*/
187 /**@}*/
188 
189 /**
190  * \defgroup COMPS_DocGroup_list_getters COMPS_DocGroup list getters
191  * @{
192  **/
193 
194 /** COMPS_DocGroup package list getter
195  * @param obj COMPS_DocGroup object
196  * @return COMPS_ObjList with packages in group. Reference of list isn't
197  * incremented
198  */
199 HEAD_COMPS_DOCOBJ_GETOBJLIST(docgroup, COMPS_DocGroup, packages, packages)
200 /**@}*/
201 
202 /**
203  * \defgroup COMPS_DocGroup_list_setters COMPS_DocGroup list setters
204  * @{
205  **/
206 
207 /** COMPS_DocGroup packages list setter
208  * @param obj COMPS_DocGroup object
209  * @param list COMPS_ObjList object with group_ids items
210  * \warning existing packages list object reference count will be decremented.
211  * Setter doesn't provides any additional items type checking
212  */
213 HEAD_COMPS_DOCOBJ_SETOBJLIST(docgroup, COMPS_DocGroup, packages, packages)
214 /**@}*/
215 
216 HEAD_COMPS_DOCOBJ_GETARCHES(docgroup, COMPS_DocGroup)
217 HEAD_COMPS_DOCOBJ_SETARCHES(docgroup, COMPS_DocGroup)
218 
219 signed char comps_docgroup_cmp_u(COMPS_Object *group1, COMPS_Object *group2);
220 char __comps_docgroup_idcmp(void *g1, void *g2);
221 
222 /** add package to packages list in group
223  * @param cat COMPS_DocGroup object
224  * @param package COMPS_DocGroupPackage object
225  * \warning COMPS_DocGroupPackage reference counter isn't incremented
226  */
227 void comps_docgroup_add_package(COMPS_DocGroup *group,
228                                 COMPS_DocGroupPackage *package);
229 
230 /** return list of packages matching name and type
231  * name or type could be NULL and then doens't affect search filter. Search
232  * doesn't support any asterisk or dot notation like in regular expression
233  * @param group COMPS_DocGroup object
234  * @param name package name
235  * @param type package type
236  * @return list of filtered packages
237  */
238 COMPS_ObjList* comps_docgroup_get_packages(COMPS_DocGroup *group, char *name,
239                                        COMPS_PackageType type);
240 
241 /** union two groups into one and return new COMPS_DocGroup object
242  * @param g1 COMPS_DocGroup object
243  * @param g2 COMPS_DocGroup object
244  * @return new COMPS_DocGroup object
245  */
246 COMPS_DocGroup* comps_docgroup_union(COMPS_DocGroup *g1, COMPS_DocGroup *g2);
247 
248 /** intersect two groups into one and return new COMPS_DocGroup object
249  * @param c1 COMPS_DocGroup object
250  * @param c2 COMPS_DocGroup object
251  * @return new COMPS_DocGroup object
252  */
253 COMPS_DocGroup* comps_docgroup_intersect(COMPS_DocGroup *g1,
254                                          COMPS_DocGroup *g2);
255 
256 signed char comps_docgroup_xml(COMPS_DocGroup *group, xmlTextWriterPtr writer,
257                                COMPS_Log *log, COMPS_XMLOptions *xml_options,
258                                COMPS_DefaultsOptions *def_options);
259 
260 COMPS_DocGroup* comps_docgroup_arch_filter(COMPS_DocGroup *source,
261                                            COMPS_ObjList *arches);
262 
263 extern COMPS_ObjectInfo COMPS_DocGroup_ObjInfo;
264 extern COMPS_ValRuleGeneric* COMPS_DocGroup_ValidateRules[];
265 
266 #endif
267