3 * Copyright (C) 2002 Jeroen Zwartepoorte
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU Library General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
24 #include "gbf-project.h"
26 G_DEFINE_TYPE (GbfProject
, gbf_project
, G_TYPE_OBJECT
);
29 gbf_project_load (GbfProject
*project
,
33 g_return_if_fail (project
!= NULL
);
34 g_return_if_fail (GBF_IS_PROJECT (project
));
35 g_return_if_fail (path
!= NULL
);
36 g_return_if_fail (error
== NULL
|| *error
== NULL
);
38 GBF_PROJECT_GET_CLASS (project
)->load (project
, path
, error
);
42 gbf_project_probe (GbfProject
*project
,
46 g_return_val_if_fail (project
!= NULL
, FALSE
);
47 g_return_val_if_fail (GBF_IS_PROJECT (project
), FALSE
);
48 g_return_val_if_fail (path
!= NULL
, FALSE
);
49 g_return_val_if_fail (error
== NULL
|| *error
== NULL
, FALSE
);
51 return GBF_PROJECT_GET_CLASS (project
)->probe (project
, path
, error
);
55 gbf_project_refresh (GbfProject
*project
,
58 g_return_if_fail (project
!= NULL
);
59 g_return_if_fail (GBF_IS_PROJECT (project
));
60 g_return_if_fail (error
== NULL
|| *error
== NULL
);
62 GBF_PROJECT_GET_CLASS (project
)->refresh (project
, error
);
65 GbfProjectCapabilities
66 gbf_project_get_capabilities (GbfProject
*project
,
69 g_return_val_if_fail (project
!= NULL
, GBF_PROJECT_CAN_ADD_NONE
);
70 g_return_val_if_fail (GBF_IS_PROJECT (project
), GBF_PROJECT_CAN_ADD_NONE
);
71 g_return_val_if_fail (error
== NULL
|| *error
== NULL
, GBF_PROJECT_CAN_ADD_NONE
);
73 return GBF_PROJECT_GET_CLASS (project
)->get_capabilities (project
, error
);
78 gbf_project_add_group (GbfProject
*project
,
79 const gchar
*parent_id
,
83 g_return_val_if_fail (project
!= NULL
, NULL
);
84 g_return_val_if_fail (GBF_IS_PROJECT (project
), NULL
);
85 g_return_val_if_fail (parent_id
!= NULL
, NULL
);
86 g_return_val_if_fail (name
!= NULL
, NULL
);
87 g_return_val_if_fail (error
== NULL
|| *error
== NULL
, NULL
);
89 return GBF_PROJECT_GET_CLASS (project
)->add_group (project
,
96 gbf_project_remove_group (GbfProject
*project
,
100 g_return_if_fail (project
!= NULL
);
101 g_return_if_fail (GBF_IS_PROJECT (project
));
102 g_return_if_fail (id
!= NULL
);
103 g_return_if_fail (error
== NULL
|| *error
== NULL
);
105 GBF_PROJECT_GET_CLASS (project
)->remove_group (project
, id
, error
);
109 gbf_project_get_group (GbfProject
*project
,
113 g_return_val_if_fail (project
!= NULL
, NULL
);
114 g_return_val_if_fail (GBF_IS_PROJECT (project
), NULL
);
115 g_return_val_if_fail (id
!= NULL
, NULL
);
116 g_return_val_if_fail (error
== NULL
|| *error
== NULL
, NULL
);
118 return GBF_PROJECT_GET_CLASS (project
)->get_group (project
, id
, error
);
122 gbf_project_configure_group (GbfProject
*project
,
126 g_return_val_if_fail (project
!= NULL
, NULL
);
127 g_return_val_if_fail (GBF_IS_PROJECT (project
), NULL
);
128 g_return_val_if_fail (id
!= NULL
, NULL
);
129 g_return_val_if_fail (error
== NULL
|| *error
== NULL
, NULL
);
131 return GBF_PROJECT_GET_CLASS (project
)->configure_group (project
,
137 gbf_project_configure_new_group (GbfProject
*project
,
140 g_return_val_if_fail (project
!= NULL
, NULL
);
141 g_return_val_if_fail (GBF_IS_PROJECT (project
), NULL
);
142 g_return_val_if_fail (error
== NULL
|| *error
== NULL
, NULL
);
144 return GBF_PROJECT_GET_CLASS (project
)->configure_new_group (project
,
150 gbf_project_add_target (GbfProject
*project
,
151 const gchar
*group_id
,
156 g_return_val_if_fail (project
!= NULL
, NULL
);
157 g_return_val_if_fail (GBF_IS_PROJECT (project
), NULL
);
158 g_return_val_if_fail (group_id
!= NULL
, NULL
);
159 g_return_val_if_fail (name
!= NULL
, NULL
);
160 g_return_val_if_fail (type
!= NULL
, NULL
);
161 g_return_val_if_fail (error
== NULL
|| *error
== NULL
, NULL
);
163 return GBF_PROJECT_GET_CLASS (project
)->add_target (project
,
171 gbf_project_remove_target (GbfProject
*project
,
175 g_return_if_fail (project
!= NULL
);
176 g_return_if_fail (GBF_IS_PROJECT (project
));
177 g_return_if_fail (id
!= NULL
);
178 g_return_if_fail (error
== NULL
|| *error
== NULL
);
180 GBF_PROJECT_GET_CLASS (project
)->remove_target (project
, id
, error
);
184 gbf_project_get_target (GbfProject
*project
,
188 g_return_val_if_fail (project
!= NULL
, NULL
);
189 g_return_val_if_fail (GBF_IS_PROJECT (project
), NULL
);
190 g_return_val_if_fail (id
!= NULL
, NULL
);
191 g_return_val_if_fail (error
== NULL
|| *error
== NULL
, NULL
);
193 return GBF_PROJECT_GET_CLASS (project
)->get_target (project
,
199 gbf_project_get_all_targets (GbfProject
*project
,
202 g_return_val_if_fail (project
!= NULL
, NULL
);
203 g_return_val_if_fail (GBF_IS_PROJECT (project
), NULL
);
204 g_return_val_if_fail (error
== NULL
|| *error
== NULL
, NULL
);
206 return GBF_PROJECT_GET_CLASS (project
)->get_all_targets (project
,
211 gbf_project_get_all_groups (GbfProject
*project
,
214 g_return_val_if_fail (project
!= NULL
, NULL
);
215 g_return_val_if_fail (GBF_IS_PROJECT (project
), NULL
);
216 g_return_val_if_fail (error
== NULL
|| *error
== NULL
, NULL
);
218 return GBF_PROJECT_GET_CLASS (project
)->get_all_groups (project
,
223 gbf_project_configure_target (GbfProject
*project
,
227 g_return_val_if_fail (project
!= NULL
, NULL
);
228 g_return_val_if_fail (GBF_IS_PROJECT (project
), NULL
);
229 g_return_val_if_fail (id
!= NULL
, NULL
);
230 g_return_val_if_fail (error
== NULL
|| *error
== NULL
, NULL
);
232 return GBF_PROJECT_GET_CLASS (project
)->configure_target (project
,
237 gbf_project_configure_new_target (GbfProject
*project
,
240 g_return_val_if_fail (project
!= NULL
, NULL
);
241 g_return_val_if_fail (GBF_IS_PROJECT (project
), NULL
);
242 g_return_val_if_fail (error
== NULL
|| *error
== NULL
, NULL
);
244 return GBF_PROJECT_GET_CLASS (project
)->configure_new_target (project
,
250 gbf_project_add_source (GbfProject
*project
,
251 const gchar
*target_id
,
255 g_return_val_if_fail (project
!= NULL
, NULL
);
256 g_return_val_if_fail (GBF_IS_PROJECT (project
), NULL
);
257 g_return_val_if_fail (target_id
!= NULL
, NULL
);
258 g_return_val_if_fail (uri
!= NULL
, NULL
);
259 g_return_val_if_fail (error
== NULL
|| *error
== NULL
, NULL
);
261 return GBF_PROJECT_GET_CLASS (project
)->add_source (project
,
268 gbf_project_remove_source (GbfProject
*project
,
272 g_return_if_fail (project
!= NULL
);
273 g_return_if_fail (GBF_IS_PROJECT (project
));
274 g_return_if_fail (id
!= NULL
);
275 g_return_if_fail (error
== NULL
|| *error
== NULL
);
277 GBF_PROJECT_GET_CLASS (project
)->remove_source (project
, id
, error
);
280 GbfProjectTargetSource
*
281 gbf_project_get_source (GbfProject
*project
,
285 g_return_val_if_fail (project
!= NULL
, NULL
);
286 g_return_val_if_fail (GBF_IS_PROJECT (project
), NULL
);
287 g_return_val_if_fail (id
!= NULL
, NULL
);
288 g_return_val_if_fail (error
== NULL
|| *error
== NULL
, NULL
);
290 return GBF_PROJECT_GET_CLASS (project
)->get_source (project
,
296 gbf_project_get_all_sources (GbfProject
*project
,
299 g_return_val_if_fail (project
!= NULL
, NULL
);
300 g_return_val_if_fail (GBF_IS_PROJECT (project
), NULL
);
301 g_return_val_if_fail (error
== NULL
|| *error
== NULL
, NULL
);
303 return GBF_PROJECT_GET_CLASS (project
)->get_all_sources (project
,
308 gbf_project_configure_source (GbfProject
*project
,
312 g_return_val_if_fail (project
!= NULL
, NULL
);
313 g_return_val_if_fail (GBF_IS_PROJECT (project
), NULL
);
314 g_return_val_if_fail (id
!= NULL
, NULL
);
315 g_return_val_if_fail (error
== NULL
|| *error
== NULL
, NULL
);
317 return GBF_PROJECT_GET_CLASS (project
)->configure_source (project
,
323 gbf_project_configure_new_source (GbfProject
*project
,
326 g_return_val_if_fail (project
!= NULL
, NULL
);
327 g_return_val_if_fail (GBF_IS_PROJECT (project
), NULL
);
328 g_return_val_if_fail (error
== NULL
|| *error
== NULL
, NULL
);
330 return GBF_PROJECT_GET_CLASS (project
)->configure_new_source (project
,
337 gbf_project_configure (GbfProject
*project
, GError
**error
)
339 g_return_val_if_fail (project
!= NULL
, NULL
);
340 g_return_val_if_fail (GBF_IS_PROJECT (project
), NULL
);
341 g_return_val_if_fail (error
== NULL
|| *error
== NULL
, NULL
);
343 return GBF_PROJECT_GET_CLASS (project
)->configure (project
, error
);
347 gbf_project_get_config_modules (GbfProject
*project
, GError
**error
)
349 g_return_val_if_fail (project
!= NULL
, NULL
);
350 g_return_val_if_fail (GBF_IS_PROJECT (project
), NULL
);
352 return GBF_PROJECT_GET_CLASS (project
)->get_config_modules (project
, error
);
356 gbf_project_get_config_packages (GbfProject
*project
,
360 g_return_val_if_fail (project
!= NULL
, NULL
);
361 g_return_val_if_fail (module
!= NULL
, NULL
);
362 g_return_val_if_fail (GBF_IS_PROJECT (project
), NULL
);
364 return GBF_PROJECT_GET_CLASS (project
)->get_config_packages (project
, module
,
370 gbf_project_name_for_type (GbfProject
*project
,
373 g_return_val_if_fail (project
!= NULL
, NULL
);
374 g_return_val_if_fail (GBF_IS_PROJECT (project
), NULL
);
375 g_return_val_if_fail (type
!= NULL
, NULL
);
377 return GBF_PROJECT_GET_CLASS (project
)->name_for_type (project
, type
);
381 gbf_project_mimetype_for_type (GbfProject
*project
,
384 g_return_val_if_fail (project
!= NULL
, NULL
);
385 g_return_val_if_fail (GBF_IS_PROJECT (project
), NULL
);
386 g_return_val_if_fail (type
!= NULL
, NULL
);
388 return GBF_PROJECT_GET_CLASS (project
)->mimetype_for_type (project
, type
);
392 gbf_project_get_types (GbfProject
*project
)
394 g_return_val_if_fail (project
!= NULL
, NULL
);
395 g_return_val_if_fail (GBF_IS_PROJECT (project
), NULL
);
396 g_return_val_if_fail (
397 GBF_PROJECT_GET_CLASS (project
)->get_types
!= NULL
, NULL
);
399 return GBF_PROJECT_GET_CLASS (project
)->get_types (project
);
403 gbf_project_class_init (GbfProjectClass
*klass
)
405 g_signal_new ("project-updated",
406 G_TYPE_FROM_CLASS (klass
),
408 G_STRUCT_OFFSET (GbfProjectClass
, project_updated
),
410 g_cclosure_marshal_VOID__VOID
,
415 gbf_project_init (GbfProject
*project
)
420 gbf_project_error_quark (void)
422 static GQuark quark
= 0;
425 quark
= g_quark_from_string ("gbf-project-quark");
431 gbf_project_group_copy (GbfProjectGroup
*group
)
433 GbfProjectGroup
*new_group
;
436 new_group
= g_new0 (GbfProjectGroup
, 1);
437 new_group
->id
= g_strdup (group
->id
);
438 new_group
->parent_id
= g_strdup (group
->parent_id
);
439 new_group
->name
= g_strdup (group
->name
);
441 for (l
= group
->groups
; l
; l
= l
->next
)
442 new_group
->groups
= g_list_prepend (new_group
->groups
, g_strdup (l
->data
));
443 new_group
->groups
= g_list_reverse (new_group
->groups
);
445 for (l
= group
->targets
; l
; l
= l
->next
)
446 new_group
->targets
= g_list_prepend (new_group
->targets
, g_strdup (l
->data
));
447 new_group
->targets
= g_list_reverse (new_group
->targets
);
453 gbf_project_group_free (GbfProjectGroup
*group
)
456 g_free (group
->parent_id
);
457 g_free (group
->name
);
459 while (group
->groups
) {
460 g_free (group
->groups
->data
);
461 group
->groups
= g_list_delete_link (group
->groups
, group
->groups
);
464 while (group
->targets
) {
465 g_free (group
->targets
->data
);
466 group
->targets
= g_list_delete_link (group
->targets
, group
->targets
);
472 gbf_project_target_copy (GbfProjectTarget
*target
)
474 GbfProjectTarget
*new_target
;
477 new_target
= g_new0 (GbfProjectTarget
, 1);
478 new_target
->id
= g_strdup (target
->id
);
479 new_target
->group_id
= g_strdup (target
->group_id
);
480 new_target
->name
= g_strdup (target
->name
);
481 new_target
->type
= g_strdup (target
->type
);
483 for (l
= target
->sources
; l
; l
= l
->next
)
484 new_target
->sources
= g_list_prepend (new_target
->sources
, g_strdup (l
->data
));
485 new_target
->sources
= g_list_reverse (new_target
->sources
);
491 gbf_project_target_free (GbfProjectTarget
*target
)
494 g_free (target
->group_id
);
495 g_free (target
->name
);
496 g_free (target
->type
);
498 while (target
->sources
) {
499 g_free (target
->sources
->data
);
500 target
->sources
= g_list_delete_link (target
->sources
, target
->sources
);
506 GbfProjectTargetSource
*
507 gbf_project_target_source_copy (GbfProjectTargetSource
*source
)
509 GbfProjectTargetSource
*new_source
;
511 new_source
= g_new0 (GbfProjectTargetSource
, 1);
512 new_source
->id
= g_strdup (source
->id
);
513 new_source
->target_id
= g_strdup (source
->target_id
);
514 new_source
->source_uri
= g_strdup (source
->source_uri
);
520 gbf_project_target_source_free (GbfProjectTargetSource
*source
)
523 g_free (source
->target_id
);
524 g_free (source
->source_uri
);
529 gbf_project_group_get_type (void)
531 static GType our_type
= 0;
534 our_type
= g_boxed_type_register_static ("GbfProjectGroup",
535 (GBoxedCopyFunc
) gbf_project_group_copy
,
536 (GBoxedFreeFunc
) gbf_project_group_free
);
542 gbf_project_target_get_type (void)
544 static GType our_type
= 0;
547 our_type
= g_boxed_type_register_static ("GbfProjectTarget",
548 (GBoxedCopyFunc
) gbf_project_target_copy
,
549 (GBoxedFreeFunc
) gbf_project_target_free
);
555 gbf_project_target_source_get_type (void)
557 static GType our_type
= 0;
560 our_type
= g_boxed_type_register_static ("GbfProjectTargetSource",
561 (GBoxedCopyFunc
) gbf_project_target_source_copy
,
562 (GBoxedFreeFunc
) gbf_project_target_source_free
);