Coverage Report

Created: 2025-07-12 06:30

/src/tinysparql/src/libtinysparql/tracker-serializer.c
Line
Count
Source (jump to first uncovered line)
1
/*
2
 * Copyright (C) 2020, Red Hat, Inc
3
 *
4
 * This library is free software; you can redistribute it and/or
5
 * modify it under the terms of the GNU Lesser General Public
6
 * License as published by the Free Software Foundation; either
7
 * version 2.1 of the License, or (at your option) any later version.
8
 *
9
 * This library 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 GNU
12
 * Lesser General Public License for more details.
13
 *
14
 * You should have received a copy of the GNU Lesser General Public
15
 * License along with this library; if not, write to the
16
 * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17
 * Boston, MA  02110-1301, USA.
18
 *
19
 * Author: Carlos Garnacho <carlosg@gnome.org>
20
 */
21
22
#include "config.h"
23
24
#include "tracker-serializer.h"
25
#include "tracker-serializer-json.h"
26
#include "tracker-serializer-json-ld.h"
27
#include "tracker-serializer-trig.h"
28
#include "tracker-serializer-turtle.h"
29
#include "tracker-serializer-xml.h"
30
31
#include "tracker-private.h"
32
33
enum {
34
  PROP_0,
35
  PROP_CURSOR,
36
  PROP_NAMESPACE_MANAGER,
37
  N_PROPS
38
};
39
40
static GParamSpec *props[N_PROPS];
41
42
typedef struct _TrackerSerializerPrivate TrackerSerializerPrivate;
43
44
struct _TrackerSerializerPrivate
45
{
46
  TrackerSparqlCursor *cursor;
47
  TrackerNamespaceManager *namespaces;
48
};
49
50
G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (TrackerSerializer, tracker_serializer,
51
                                     G_TYPE_INPUT_STREAM)
52
53
static void
54
tracker_serializer_finalize (GObject *object)
55
0
{
56
0
  TrackerSerializer *serializer = TRACKER_SERIALIZER (object);
57
0
  TrackerSerializerPrivate *priv =
58
0
    tracker_serializer_get_instance_private (serializer);
59
60
0
  g_object_unref (priv->cursor);
61
0
  g_object_unref (priv->namespaces);
62
63
0
  G_OBJECT_CLASS (tracker_serializer_parent_class)->finalize (object);
64
0
}
65
static void
66
tracker_serializer_set_property (GObject      *object,
67
                                 guint         prop_id,
68
                                 const GValue *value,
69
                                 GParamSpec   *pspec)
70
0
{
71
0
  TrackerSerializer *serializer = TRACKER_SERIALIZER (object);
72
0
  TrackerSerializerPrivate *priv =
73
0
    tracker_serializer_get_instance_private (serializer);
74
75
0
  switch (prop_id) {
76
0
  case PROP_CURSOR:
77
0
    priv->cursor = g_value_dup_object (value);
78
0
    break;
79
0
  case PROP_NAMESPACE_MANAGER:
80
0
    priv->namespaces = g_value_dup_object (value);
81
0
    break;
82
0
  default:
83
0
    G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
84
0
    break;
85
0
  }
86
0
}
87
88
static void
89
tracker_serializer_class_init (TrackerSerializerClass *klass)
90
0
{
91
0
  GObjectClass *object_class = G_OBJECT_CLASS (klass);
92
93
0
  object_class->finalize = tracker_serializer_finalize;
94
0
  object_class->set_property = tracker_serializer_set_property;
95
96
0
  props[PROP_CURSOR] =
97
0
    g_param_spec_object ("cursor",
98
0
                         "cursor",
99
0
                         "cursor",
100
0
                         TRACKER_TYPE_SPARQL_CURSOR,
101
0
                         G_PARAM_CONSTRUCT_ONLY |
102
0
                         G_PARAM_STATIC_STRINGS |
103
0
                         G_PARAM_WRITABLE);
104
0
  props[PROP_NAMESPACE_MANAGER] =
105
0
    g_param_spec_object ("namespace-manager",
106
0
                         "Namespace Manager",
107
0
                         "Namespace Manager",
108
0
                         TRACKER_TYPE_NAMESPACE_MANAGER,
109
0
                         G_PARAM_CONSTRUCT_ONLY |
110
0
                         G_PARAM_STATIC_STRINGS |
111
0
                         G_PARAM_WRITABLE);
112
113
0
  g_object_class_install_properties (object_class, N_PROPS, props);
114
0
}
115
116
static void
117
tracker_serializer_init (TrackerSerializer *serializer)
118
0
{
119
0
}
120
121
GInputStream *
122
tracker_serializer_new (TrackerSparqlCursor     *cursor,
123
                        TrackerNamespaceManager *namespaces,
124
                        TrackerSerializerFormat  format)
125
0
{
126
0
  GType type;
127
128
0
  g_return_val_if_fail (TRACKER_IS_SPARQL_CURSOR (cursor), NULL);
129
130
0
  switch (format) {
131
0
  case TRACKER_SERIALIZER_FORMAT_JSON:
132
0
    type = TRACKER_TYPE_SERIALIZER_JSON;
133
0
    break;
134
0
  case TRACKER_SERIALIZER_FORMAT_XML:
135
0
    type = TRACKER_TYPE_SERIALIZER_XML;
136
0
    break;
137
0
  case TRACKER_SERIALIZER_FORMAT_TTL:
138
0
    type = TRACKER_TYPE_SERIALIZER_TURTLE;
139
0
    break;
140
0
  case TRACKER_SERIALIZER_FORMAT_TRIG:
141
0
    type = TRACKER_TYPE_SERIALIZER_TRIG;
142
0
    break;
143
0
  case TRACKER_SERIALIZER_FORMAT_JSON_LD:
144
0
    type = TRACKER_TYPE_SERIALIZER_JSON_LD;
145
0
    break;
146
0
  default:
147
0
    g_warn_if_reached ();
148
0
    return NULL;
149
0
  }
150
151
0
  return g_object_new (type,
152
0
                       "cursor", cursor,
153
0
                       "namespace-manager", namespaces,
154
0
                       NULL);
155
0
}
156
157
TrackerSparqlCursor *
158
tracker_serializer_get_cursor (TrackerSerializer *serializer)
159
0
{
160
0
  TrackerSerializerPrivate *priv =
161
0
    tracker_serializer_get_instance_private (serializer);
162
163
0
  g_return_val_if_fail (TRACKER_IS_SERIALIZER (serializer), NULL);
164
165
0
  return priv->cursor;
166
0
}
167
168
TrackerNamespaceManager *
169
tracker_serializer_get_namespaces (TrackerSerializer *serializer)
170
0
{
171
0
  TrackerSerializerPrivate *priv =
172
0
    tracker_serializer_get_instance_private (serializer);
173
174
0
  g_return_val_if_fail (TRACKER_IS_SERIALIZER (serializer), NULL);
175
176
0
  return priv->namespaces;
177
0
}