a472dae2846f2b21162939986392b50ae879a8b8
[cascardo/atompub.git] / atom / ctx.c
1 /*
2  *  Copyright (C) 2007  Thadeu Lima de Souza Cascardo <cascardo@holoscopio.com>
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  *  (at your option) any later version.
8  *
9  *  This program is distributed in the hope that it will be useful,
10  *  but 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 along
15  *  with this program; if not, write to the Free Software Foundation, Inc.,
16  *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
17  */
18
19
20 #include <atompub/atom.h>
21
22 #include <glib.h>
23
24 struct _atom_ctx
25 {
26   AtomError *error;
27   gpointer config_data;
28   AtomBackend *backend;
29   GHashTable *bemap;
30 };
31
32 AtomCtx *
33 atom_ctx_new ()
34 {
35   AtomCtx *ctx;
36   ctx = g_slice_new (AtomCtx);
37   ctx->error = NULL;
38   ctx->config_data = NULL;
39   ctx->backend = NULL;
40   ctx->bemap = g_hash_table_new_full (g_str_hash, g_str_equal,
41                                       g_free, g_free);
42   return ctx;
43 }
44
45 void
46 atom_ctx_delete (AtomCtx *ctx)
47 {
48   if (ctx->error)
49     atom_error_delete (ctx->error);
50   if (ctx->backend)
51     atom_backend_delete (ctx->backend);
52   if (ctx->bemap)
53     g_hash_table_destroy (ctx->bemap);
54   g_slice_free (AtomCtx, ctx);
55 }
56
57 void
58 atom_error_set (AtomCtx *ctx, AtomError *error)
59 {
60   if (ctx->error)
61     atom_error_delete (ctx->error);
62   ctx->error = error;
63 }
64
65 AtomError *
66 atom_error_get (AtomCtx *ctx)
67 {
68   return ctx->error;
69 }
70
71 void *
72 atom_config_data (AtomCtx *ctx)
73 {
74   return ctx->config_data;
75 }
76
77 void
78 atom_config_data_set (AtomCtx *ctx, void *data)
79 {
80   ctx->config_data = data;
81 }
82
83 AtomBackend *
84 atom_backend (AtomCtx *ctx)
85 {
86   return ctx->backend;
87 }
88
89 void
90 atom_backend_set (AtomCtx *ctx, AtomBackend *backend)
91 {
92   ctx->backend = backend;
93 }
94
95 void
96 atom_map_backend_requests (AtomCtx *ctx, char **reqs,
97                            AtomEntry **entries, size_t len)
98 {
99   int i;
100   for (i = 0; i < len; i++)
101     {
102       char *key = g_strdup (atom_entry_id (entries[i]));
103       char *val = g_strdup (reqs[i]);
104       g_hash_table_replace (ctx->bemap, key, val);
105     }
106 }