[libgovirt] Add OvirtCdrom::file property
- From: Christophe Fergeau <teuf src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libgovirt] Add OvirtCdrom::file property
- Date: Mon, 2 Sep 2013 15:46:32 +0000 (UTC)
commit 57291353ba6bc3bf7f903281217c9c1863b0c692
Author: Christophe Fergeau <cfergeau redhat com>
Date: Tue Aug 27 17:17:52 2013 +0200
Add OvirtCdrom::file property
govirt/ovirt-cdrom.c | 110 +++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 109 insertions(+), 1 deletions(-)
---
diff --git a/govirt/ovirt-cdrom.c b/govirt/ovirt-cdrom.c
index 3fe7dd9..664d452 100644
--- a/govirt/ovirt-cdrom.c
+++ b/govirt/ovirt-cdrom.c
@@ -27,16 +27,124 @@
(G_TYPE_INSTANCE_GET_PRIVATE((obj), OVIRT_TYPE_CDROM, OvirtCdromPrivate))
struct _OvirtCdromPrivate {
- gboolean unused;
+ char *file;
};
G_DEFINE_TYPE(OvirtCdrom, ovirt_cdrom, OVIRT_TYPE_RESOURCE);
+
+enum {
+ PROP_0,
+ PROP_FILE
+};
+
+
+static void ovirt_cdrom_get_property(GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ OvirtCdrom *cdrom = OVIRT_CDROM(object);
+
+ switch (prop_id) {
+ case PROP_FILE:
+ g_value_set_string(value, cdrom->priv->file);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
+ break;
+ }
+}
+
+
+static void ovirt_cdrom_set_property(GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ OvirtCdrom *cdrom = OVIRT_CDROM(object);
+
+ switch (prop_id) {
+ case PROP_FILE:
+ cdrom->priv->file = g_value_dup_string(value);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
+ break;
+ }
+}
+
+
+static void ovirt_cdrom_finalize(GObject *object)
+{
+ OvirtCdrom *cdrom = OVIRT_CDROM(object);
+
+ g_free(cdrom->priv->file);
+
+ G_OBJECT_CLASS(ovirt_cdrom_parent_class)->finalize(object);
+}
+
+
+static gboolean ovirt_cdrom_refresh_from_xml(OvirtCdrom *cdrom,
+ RestXmlNode *node)
+{
+ RestXmlNode *file_node;
+ const char *file;
+ const char *file_key = g_intern_string("file");
+
+ file_node = g_hash_table_lookup(node->children, file_key);
+ if (file_node == NULL)
+ return FALSE;
+ file = rest_xml_node_get_attr(file_node, "id");
+ cdrom->priv->file = g_strdup(file);
+
+ return TRUE;
+}
+
+
+static gboolean ovirt_cdrom_init_from_xml(OvirtResource *resource,
+ RestXmlNode *node,
+ GError **error)
+{
+ gboolean parsed_ok;
+ OvirtResourceClass *parent_class;
+
+ parsed_ok = ovirt_cdrom_refresh_from_xml(OVIRT_CDROM(resource), node);
+ if (!parsed_ok) {
+ return FALSE;
+ }
+ parent_class = OVIRT_RESOURCE_CLASS(ovirt_cdrom_parent_class);
+
+ return parent_class->init_from_xml(resource, node, error);
+}
+
+
static void ovirt_cdrom_class_init(OvirtCdromClass *klass)
{
+ GObjectClass *object_class = G_OBJECT_CLASS(klass);
+ OvirtResourceClass *resource_class = OVIRT_RESOURCE_CLASS(klass);
+ GParamSpec *param_spec;
+
g_type_class_add_private(klass, sizeof(OvirtCdromPrivate));
+
+ resource_class->init_from_xml = ovirt_cdrom_init_from_xml;
+ object_class->finalize = ovirt_cdrom_finalize;
+ object_class->get_property = ovirt_cdrom_get_property;
+ object_class->set_property = ovirt_cdrom_set_property;
+
+ param_spec = g_param_spec_string("file",
+ "File",
+ "Name of the CD image",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS);
+ g_object_class_install_property(object_class,
+ PROP_FILE,
+ param_spec);
}
+
static void ovirt_cdrom_init(OvirtCdrom *cdrom)
{
cdrom->priv = OVIRT_CDROM_GET_PRIVATE(cdrom);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]