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