[libgovirt] proxy: Reimplement deprecated API using newer API



commit 23bb59e459177c3928c53a607c5082a3b7c0257b
Author: Christophe Fergeau <cfergeau redhat com>
Date:   Fri Jul 24 13:58:09 2015 +0200

    proxy: Reimplement deprecated API using newer API
    
    ovirt_proxy_fetch_vms{_async,}/ovirt_proxy_get_vms/ovirt_proxy_lookup_vm
    can be reimplemented using the newer OvirtApi API.
    
    While these methods are deprecated, using non-deprecated API to
    implement them rather than duplicating the code from the non-deprecated
    APIs should be an improvement from a maintainability point of view.

 govirt/ovirt-proxy-deprecated.c |  141 ++++++++++++++++++--------------------
 govirt/ovirt-proxy-private.h    |    1 -
 govirt/ovirt-proxy.c            |    5 --
 3 files changed, 67 insertions(+), 80 deletions(-)
---
diff --git a/govirt/ovirt-proxy-deprecated.c b/govirt/ovirt-proxy-deprecated.c
index 0e8f9a0..34394bc 100644
--- a/govirt/ovirt-proxy-deprecated.c
+++ b/govirt/ovirt-proxy-deprecated.c
@@ -28,57 +28,54 @@
 
 #include <rest/rest-xml-node.h>
 
-
-static gboolean
-ovirt_proxy_parse_vms_xml(OvirtProxy *proxy, RestXmlNode *root, GError **error)
-{
-    OvirtCollection *collection;
-    GHashTable *resources;
-
-    collection = ovirt_collection_new_from_xml(root, OVIRT_TYPE_COLLECTION, "vms",
-                                               OVIRT_TYPE_VM, "vm", error);
-    if (collection == NULL) {
-        return FALSE;
-    }
-
-    resources = ovirt_collection_get_resources(collection);
-
-    if (proxy->priv->vms != NULL) {
-        g_hash_table_unref(proxy->priv->vms);
-        proxy->priv->vms = NULL;
-    }
-    if (resources != NULL) {
-        proxy->priv->vms = g_hash_table_ref(resources);
-    }
-
-    return TRUE;
-}
-
-
 gboolean ovirt_proxy_fetch_vms(OvirtProxy *proxy, GError **error)
 {
-    RestXmlNode *vms_node;
-
-    g_return_val_if_fail(OVIRT_IS_PROXY(proxy), FALSE);
+    OvirtCollection *vms;
+    OvirtApi *api;
 
-    vms_node = ovirt_proxy_get_collection_xml(proxy, "/ovirt-engine/api/vms", error);
-    if (vms_node == NULL)
+    api = ovirt_proxy_fetch_api(proxy, error);
+    if (api == NULL)
         return FALSE;
 
-    ovirt_proxy_parse_vms_xml(proxy, vms_node, error);
-
-    rest_xml_node_unref(vms_node);
+    vms = ovirt_api_get_vms(api);
+    if (vms == NULL)
+        return FALSE;
 
-    return TRUE;
+    return ovirt_collection_fetch(vms, proxy, error);
 }
 
 
-static gboolean fetch_vms_async_cb(OvirtProxy* proxy,
-                                   RestXmlNode *root_node,
-                                   gpointer user_data,
-                                   GError **error)
+typedef struct {
+    GCancellable *cancellable;
+    GAsyncReadyCallback callback;
+    gpointer user_data;
+} ApiAsyncData;
+
+static void fetch_api_async_cb(GObject *source_object,
+                               GAsyncResult *result,
+                               gpointer user_data)
 {
-    return ovirt_proxy_parse_vms_xml(proxy, root_node, error);
+    ApiAsyncData *data = user_data;
+    OvirtProxy *proxy = OVIRT_PROXY(source_object);
+    OvirtApi *api;
+    GError *error = NULL;
+
+    api = ovirt_proxy_fetch_api_finish(proxy, result, &error);
+    if (api == NULL) {
+        g_simple_async_report_error_in_idle(source_object,
+                                            data->callback, data->user_data,
+                                            OVIRT_ERROR, OVIRT_ERROR_FAILED,
+                                            "Could not fetch API endpoint");
+    } else {
+        OvirtCollection *vms;
+
+        vms = ovirt_api_get_vms(api);
+        g_return_if_fail(vms != NULL);
+
+        ovirt_collection_fetch_async(vms, proxy, data->cancellable,
+                                     data->callback, data->user_data);
+    }
+    g_free(data);
 }
 
 /**
@@ -92,22 +89,31 @@ void ovirt_proxy_fetch_vms_async(OvirtProxy *proxy,
                                  GAsyncReadyCallback callback,
                                  gpointer user_data)
 {
-    GSimpleAsyncResult *result;
+    OvirtApi *api;
+    OvirtCollection *vms;
 
     g_return_if_fail(OVIRT_IS_PROXY(proxy));
     g_return_if_fail((cancellable == NULL) || G_IS_CANCELLABLE(cancellable));
 
-    result = g_simple_async_result_new (G_OBJECT(proxy), callback,
-                                        user_data,
-                                        /* Not using the _async function
-                                         * name as is customary as this
-                                         * would trigger a deprecation
-                                         * warning */
-                                        fetch_vms_async_cb);
-    ovirt_proxy_get_collection_xml_async(proxy, "/ovirt-engine/api/vms", result, cancellable,
-                                         fetch_vms_async_cb, NULL, NULL);
+    api = ovirt_proxy_get_api(proxy);
+    if (api == NULL) {
+        ApiAsyncData *data = g_new0(ApiAsyncData, 1);
+        data->cancellable = cancellable;
+        data->callback = callback;
+        data->user_data = user_data;
+        ovirt_proxy_fetch_api_async(proxy, cancellable,
+                                    fetch_api_async_cb, data);
+        return;
+    }
+
+    vms = ovirt_api_get_vms(api);
+    g_return_if_fail(vms != NULL);
+
+    return ovirt_collection_fetch_async(vms, proxy, cancellable,
+                                        callback, user_data);
 }
 
+
 /**
  * ovirt_proxy_fetch_vms_finish:
  * @proxy: a #OvirtProxy
@@ -124,20 +130,14 @@ ovirt_proxy_fetch_vms_finish(OvirtProxy *proxy,
                              GError **err)
 {
     g_return_val_if_fail(OVIRT_IS_PROXY(proxy), NULL);
-    g_return_val_if_fail(g_simple_async_result_is_valid(result, G_OBJECT(proxy),
-                                                        fetch_vms_async_cb),
-                         NULL);
 
     if (g_simple_async_result_propagate_error(G_SIMPLE_ASYNC_RESULT(result), err))
         return NULL;
 
-    if (proxy->priv->vms != NULL) {
-        return g_hash_table_get_values(proxy->priv->vms);
-    }
-
-    return NULL;
+    return ovirt_proxy_get_vms_internal(proxy);
 }
 
+
 /**
  * ovirt_proxy_lookup_vm:
  * @proxy: a #OvirtProxy
@@ -152,22 +152,21 @@ ovirt_proxy_fetch_vms_finish(OvirtProxy *proxy,
  */
 OvirtVm *ovirt_proxy_lookup_vm(OvirtProxy *proxy, const char *vm_name)
 {
-    OvirtVm *vm;
+    OvirtApi *api;
+    OvirtCollection *vm_collection;
 
     g_return_val_if_fail(OVIRT_IS_PROXY(proxy), NULL);
     g_return_val_if_fail(vm_name != NULL, NULL);
 
-    if (proxy->priv->vms == NULL) {
+    api = ovirt_proxy_get_api(proxy);
+    if (api == NULL)
         return NULL;
-    }
 
-    vm = g_hash_table_lookup(proxy->priv->vms, vm_name);
-
-    if (vm == NULL) {
+    vm_collection = ovirt_api_get_vms(api);
+    if (vm_collection == NULL)
         return NULL;
-    }
 
-    return g_object_ref(vm);
+    return OVIRT_VM(ovirt_collection_lookup_resource(vm_collection, vm_name));
 }
 
 
@@ -186,11 +185,5 @@ OvirtVm *ovirt_proxy_lookup_vm(OvirtProxy *proxy, const char *vm_name)
  */
 GList *ovirt_proxy_get_vms(OvirtProxy *proxy)
 {
-    g_return_val_if_fail(OVIRT_IS_PROXY(proxy), NULL);
-
-    if (proxy->priv->vms != NULL) {
-        return g_hash_table_get_values(proxy->priv->vms);
-    }
-
-    return NULL;
+    return ovirt_proxy_get_vms_internal(proxy);
 }
diff --git a/govirt/ovirt-proxy-private.h b/govirt/ovirt-proxy-private.h
index 45c84b0..19c9763 100644
--- a/govirt/ovirt-proxy-private.h
+++ b/govirt/ovirt-proxy-private.h
@@ -32,7 +32,6 @@
 G_BEGIN_DECLS
 
 struct _OvirtProxyPrivate {
-    GHashTable *vms;
     char *tmp_ca_file;
     gboolean admin_mode;
     OvirtApi *api;
diff --git a/govirt/ovirt-proxy.c b/govirt/ovirt-proxy.c
index 7241f11..fedaf81 100644
--- a/govirt/ovirt-proxy.c
+++ b/govirt/ovirt-proxy.c
@@ -770,11 +770,6 @@ ovirt_proxy_dispose(GObject *obj)
 {
     OvirtProxy *proxy = OVIRT_PROXY(obj);
 
-    if (proxy->priv->vms) {
-        g_hash_table_unref(proxy->priv->vms);
-        proxy->priv->vms = NULL;
-    }
-
     if (proxy->priv->cookie_jar) {
         g_object_unref(G_OBJECT(proxy->priv->cookie_jar));
         proxy->priv->cookie_jar = NULL;


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]