Added: webservices/savan/trunk/c/src/storage/service/service_storage_mgr.c
URL: 
http://svn.apache.org/viewvc/webservices/savan/trunk/c/src/storage/service/service_storage_mgr.c?rev=749877&view=auto
==============================================================================
--- webservices/savan/trunk/c/src/storage/service/service_storage_mgr.c (added)
+++ webservices/savan/trunk/c/src/storage/service/service_storage_mgr.c Wed Mar 
 4 01:53:01 2009
@@ -0,0 +1,852 @@
+/*
+ * Copyright 2004,2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ 
+#include <savan_storage_mgr.h>
+#include <axutil_log.h>
+#include <axutil_hash.h>
+#include <axutil_property.h>
+#include <axutil_types.h>
+#include <axutil_file_handler.h>
+#include <platforms/axutil_platform_auto_sense.h>
+#include <savan_constants.h>
+#include <savan_util.h>
+#include <savan_error.h>
+#include <axis2_svc_client.h>
+
+/**
+ * Savan service based storage manager communicate with the savan subscription 
manager service for
+ * resources subscriber and topic.
+ *
+ */
+/** 
+ * @brief Savan Permanent Storage Manager Struct Impl
+ *   Savan Permanent Storage Manager 
+ */
+typedef struct savan_service_storage_mgr
+{
+    savan_storage_mgr_t storage_mgr;
+    axis2_char_t *subs_mgr_url;
+    axis2_conf_t *conf;
+} savan_service_storage_mgr_t;
+
+typedef AXIS2_DECLARE_DATA struct savan_service_storage_mgr_args
+{
+    const axutil_env_t *env;
+    void *data;
+} savan_service_storage_mgr_args_t;
+
+#define SAVAN_INTF_TO_IMPL(trans) ((savan_service_storage_mgr_t *) trans)
+
+static axis2_status_t
+savan_service_storage_mgr_add_subscriber_to_subs_mgr(
+    const axutil_env_t *env,
+    savan_subscriber_t *subscriber,
+    axis2_char_t *subs_mgr_url);
+
+static axiom_node_t *
+savan_service_storage_mgr_build_add_subscriber_om_payload(
+    const axutil_env_t *env,
+    savan_subscriber_t *subscriber);
+
+static axutil_array_list_t *
+savan_service_storage_mgr_process_subscriber_list_node(
+    const axutil_env_t *env,
+    axiom_node_t *subs_list_node);
+
+static savan_subscriber_t *AXIS2_CALL
+savan_service_storage_mgr_process_savan_specific_subscriber_node(
+    const axutil_env_t *env,
+    axiom_node_t *subs_node);
+
+static axiom_node_t *
+savan_service_storage_mgr_build_subscriber_request_om_payload(
+    const axutil_env_t *env,
+    const axis2_char_t *subs_id);
+
+static axiom_node_t *
+savan_service_storage_mgr_build_subscribers_request_om_payload(
+    const axutil_env_t *env,
+    const axis2_char_t *topic);
+
+static axiom_node_t *
+savan_service_storage_mgr_build_topics_request_om_payload(
+    const axutil_env_t *env);
+
+static axutil_array_list_t *
+savan_service_storage_mgr_process_topic_list_node(
+    const axutil_env_t *env,
+    axiom_node_t *topic_list_node);
+
+AXIS2_EXTERN void AXIS2_CALL
+savan_service_storage_mgr_free(
+    savan_storage_mgr_t *storage_mgr,
+    const axutil_env_t *env);
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+savan_service_storage_mgr_insert_subscriber(
+    savan_storage_mgr_t *storage_mgr,
+    const axutil_env_t *env,
+    savan_subscriber_t *subscriber);
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+savan_service_storage_mgr_update_subscriber(
+    savan_storage_mgr_t *storage_mgr,
+    const axutil_env_t *env,
+    savan_subscriber_t *subscriber);
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+savan_service_storage_mgr_remove_subscriber(
+    savan_storage_mgr_t *storage_mgr,
+    const axutil_env_t *env,
+    const axis2_char_t *subscriber_id);
+
+AXIS2_EXTERN savan_subscriber_t *AXIS2_CALL
+savan_service_storage_mgr_retrieve_subscriber(
+    savan_storage_mgr_t *storage_mgr,
+    const axutil_env_t *env,
+    const axis2_char_t *subcriber_id);
+
+AXIS2_EXTERN axutil_array_list_t * AXIS2_CALL
+savan_service_storage_mgr_retrieve_all_subscribers(
+    savan_storage_mgr_t *storage_mgr,
+    const axutil_env_t *env,
+    const axis2_char_t *filter);
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+savan_service_storage_mgr_insert_topic(
+    savan_storage_mgr_t *storage_mgr,
+    const axutil_env_t *env,
+    const axis2_char_t *topic_name,
+    const axis2_char_t *topic_url);
+
+static const savan_storage_mgr_ops_t storage_mgr_ops = 
+{
+    savan_service_storage_mgr_free,
+    savan_service_storage_mgr_insert_subscriber,
+    savan_service_storage_mgr_update_subscriber,
+    savan_service_storage_mgr_remove_subscriber,
+    savan_service_storage_mgr_retrieve_subscriber,
+    savan_service_storage_mgr_retrieve_all_subscribers,
+    savan_service_storage_mgr_insert_topic
+};
+
+AXIS2_EXTERN savan_storage_mgr_t * AXIS2_CALL
+savan_storage_mgr_create(
+    const axutil_env_t *env,
+    axis2_conf_t *conf)
+{
+    savan_service_storage_mgr_t *storage_mgr_impl = NULL;
+    
+    storage_mgr_impl = AXIS2_MALLOC(env->allocator, 
sizeof(savan_service_storage_mgr_t));
+    if (!storage_mgr_impl)
+    {
+        AXIS2_HANDLE_ERROR(env, SAVAN_ERROR_STORAGE_MANAGER_CREATION_FAILED, 
AXIS2_FAILURE);
+        return NULL;
+    }
+
+    memset ((void *) storage_mgr_impl, 0, sizeof(savan_service_storage_mgr_t));
+
+    storage_mgr_impl->subs_mgr_url = axutil_strdup(env, 
savan_util_get_resource_connection_string(env, conf));
+    storage_mgr_impl->conf = conf;
+    storage_mgr_impl->storage_mgr.ops = &storage_mgr_ops;
+
+    return (savan_storage_mgr_t *) storage_mgr_impl;
+}
+
+AXIS2_EXTERN void AXIS2_CALL
+savan_service_storage_mgr_free(
+    savan_storage_mgr_t *storage_mgr,
+    const axutil_env_t *env)
+{
+    savan_service_storage_mgr_t *storage_mgr_impl = NULL;
+    storage_mgr_impl = SAVAN_INTF_TO_IMPL(storage_mgr);
+
+    AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[savan] 
Entry:savan_service_storage_mgr_free");
+
+    if(storage_mgr_impl->subs_mgr_url)
+    {
+        AXIS2_FREE(env->allocator, storage_mgr_impl->subs_mgr_url);
+        storage_mgr_impl->subs_mgr_url = NULL;
+    }
+
+    storage_mgr_impl->conf = NULL;
+
+    if(storage_mgr_impl)
+    {
+        AXIS2_FREE(env->allocator, storage_mgr_impl);
+        storage_mgr_impl = NULL;
+    }
+
+    AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[savan] 
Exit:savan_service_storage_mgr_free");
+}
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+savan_service_storage_mgr_insert_subscriber(
+    savan_storage_mgr_t *storage_mgr,
+    const axutil_env_t *env,
+    savan_subscriber_t *subscriber)
+{
+    axis2_status_t status = AXIS2_FAILURE;
+    savan_service_storage_mgr_t *storage_mgr_impl = NULL;
+    storage_mgr_impl = SAVAN_INTF_TO_IMPL(storage_mgr);
+
+    status = savan_service_storage_mgr_add_subscriber_to_subs_mgr(env, 
subscriber, 
+            storage_mgr_impl->subs_mgr_url);
+
+    AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, 
+            "[savan] Exit:savan_service_storage_mgr_insert_subscriber");
+    return status;
+}
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+savan_service_storage_mgr_update_subscriber(
+    savan_storage_mgr_t *storage_mgr,
+    const axutil_env_t *env,
+    savan_subscriber_t *subscriber)
+{
+    savan_service_storage_mgr_t *storage_mgr_impl = NULL;
+    storage_mgr_impl = SAVAN_INTF_TO_IMPL(storage_mgr);
+
+    AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, 
+            "[savan] Entry:savan_service_storage_mgr_update_subscriber");
+
+    AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, 
+            "[savan] Entry:savan_service_storage_mgr_update_subscriber");
+    return AXIS2_SUCCESS;
+}
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+savan_service_storage_mgr_remove_subscriber(
+    savan_storage_mgr_t *storage_mgr,
+    const axutil_env_t *env,
+    const axis2_char_t *subscriber_id)
+{
+    savan_service_storage_mgr_t *storage_mgr_impl = NULL;
+    storage_mgr_impl = SAVAN_INTF_TO_IMPL(storage_mgr);
+
+    AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, 
+            "[savan] Entry:savan_service_storage_mgr_remove_subscriber");
+
+    
+    AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, 
+            "[savan] Exit:savan_service_storage_mgr_remove_subscriber");
+    return AXIS2_SUCCESS;
+}
+
+AXIS2_EXTERN savan_subscriber_t *AXIS2_CALL
+savan_service_storage_mgr_retrieve_subscriber(
+    savan_storage_mgr_t *storage_mgr,
+    const axutil_env_t *env,
+    const axis2_char_t *subs_id)
+{
+    axis2_endpoint_ref_t* endpoint_ref = NULL;
+    axis2_options_t *options = NULL;
+    axis2_svc_client_t* svc_client = NULL;
+    axiom_node_t *payload = NULL;
+    axiom_node_t *ret_node = NULL;
+    savan_subscriber_t *subscriber = NULL;
+
+    savan_service_storage_mgr_t *storage_mgr_impl = NULL;
+    storage_mgr_impl = SAVAN_INTF_TO_IMPL(storage_mgr);
+
+    AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, 
+        "[savan] Entry:savan_service_storage_mgr_retrieve_subscriber");
+
+    svc_client = (axis2_svc_client_t *) savan_util_get_svc_client(env);
+    options = (axis2_options_t *) axis2_svc_client_get_options(svc_client, 
env);
+    endpoint_ref = axis2_endpoint_ref_create(env, 
storage_mgr_impl->subs_mgr_url);
+    axis2_options_set_to(options, env, endpoint_ref);
+    
+    payload = 
savan_service_storage_mgr_build_subscriber_request_om_payload(env, subs_id);
+    ret_node = axis2_svc_client_send_receive(svc_client, env, payload);
+    if (ret_node)
+    {
+        subscriber = 
savan_service_storage_mgr_process_savan_specific_subscriber_node(env, ret_node);
+    }
+    else
+    {
+        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan] Stub invoke FAILED: 
Error code:"
+            " %d :: %s", env->error->error_number, 
AXIS2_ERROR_GET_MESSAGE(env->error));
+    }
+
+    AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, 
+            "[savan] Exit:savan_service_storage_mgr_retrieve_subscriber");
+    return subscriber;
+}
+
+AXIS2_EXTERN axutil_array_list_t * AXIS2_CALL
+savan_service_storage_mgr_retrieve_all_subscribers(
+    savan_storage_mgr_t *storage_mgr,
+    const axutil_env_t *env,
+    const axis2_char_t *filter)
+{
+    savan_service_storage_mgr_t *storage_mgr_impl = NULL;
+    storage_mgr_impl = SAVAN_INTF_TO_IMPL(storage_mgr);
+    
+    axis2_endpoint_ref_t* endpoint_ref = NULL;
+    axis2_options_t *options = NULL;
+    axis2_svc_client_t* svc_client = NULL;
+    axiom_node_t *payload = NULL;
+    axiom_node_t *ret_node = NULL;
+    axutil_array_list_t *subscriber_list = NULL;
+
+    AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, 
+            "[savan] 
Entry:savan_service_storage_mgr_retrieve_all_subscribers");
+    
+    svc_client = (axis2_svc_client_t *) savan_util_get_svc_client(env);
+    options = (axis2_options_t *)axis2_svc_client_get_options(svc_client, env);
+    endpoint_ref = axis2_endpoint_ref_create(env, 
storage_mgr_impl->subs_mgr_url);
+    axis2_options_set_to(options, env, endpoint_ref);
+    
+    payload = 
savan_service_storage_mgr_build_subscribers_request_om_payload(env, filter);
+    ret_node = axis2_svc_client_send_receive(svc_client, env, payload);
+    if (ret_node)
+    {
+        subscriber_list = 
savan_service_storage_mgr_process_subscriber_list_node(env, ret_node);
+    }
+    else
+    {
+        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan] Stub invoke FAILED: 
Error code:"
+            " %d :: %s", env->error->error_number, 
AXIS2_ERROR_GET_MESSAGE(env->error));
+    }
+
+    AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, 
+            "[savan] Exit:savan_service_storage_mgr_retrieve_all_subscribers");
+    return subscriber_list;
+}
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+savan_service_storage_mgr_insert_topic(
+    savan_storage_mgr_t *storage_mgr,
+    const axutil_env_t *env,
+    const axis2_char_t *topic_name,
+    const axis2_char_t *topic_url)
+{
+    savan_service_storage_mgr_t *storage_mgr_impl = NULL;
+    storage_mgr_impl = SAVAN_INTF_TO_IMPL(storage_mgr);
+
+    AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, 
+            "[savan] Entry:savan_service_storage_mgr_insert_topic");
+
+    AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, 
+            "[savan] Exit:savan_service_storage_mgr_insert_topic");
+    return AXIS2_SUCCESS;
+}
+
+
+/*static axis2_status_t
+remove_subscriber_from_subs_mgr(
+    const axutil_env_t *env,
+    savan_subscriber_t *subscriber,
+    axis2_char_t *subs_mgr_url)
+{
+    const axis2_char_t *address = NULL;
+    axis2_endpoint_ref_t* endpoint_ref = NULL;
+    axis2_options_t *options = NULL;
+    axis2_svc_client_t* svc_client = NULL;
+    axiom_node_t *payload = NULL;
+
+    svc_client = (axis2_svc_client_t *) savan_util_get_svc_client(env);
+    options = (axis2_options_t *) axis2_svc_client_get_options(svc_client, 
env);
+    address = subs_mgr_url;
+    endpoint_ref = axis2_endpoint_ref_create(env, address);
+    axis2_options_set_to(options, env, endpoint_ref);
+    axis2_options_set_action(options, env,
+        "http://ws.apache.org/axis2/c/subscription/remove_subscriber";);
+
+    payload = build_remove_subscriber_om_payload(env, subscriber);
+    // Send request
+    axis2_svc_client_send_robust(svc_client, env, payload);
+    if(svc_client)
+        axis2_svc_client_free(svc_client, env);
+
+    return AXIS2_SUCCESS;
+}*/
+
+axutil_array_list_t *AXIS2_CALL
+savan_service_storage_mgr_get_topic_list_from_subs_mgr(
+    const axutil_env_t *env,
+    axis2_char_t *subs_mgr_url,
+    void *s_client)
+{
+    axis2_endpoint_ref_t* endpoint_ref = NULL;
+    axis2_options_t *options = NULL;
+    axis2_svc_client_t* svc_client = NULL;
+    axiom_node_t *payload = NULL;
+    axiom_node_t *ret_node = NULL;
+    axutil_array_list_t *topic_list = NULL;
+
+    AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, 
+        "[savan] 
Entry:savan_service_storage_mgr_get_topic_list_from_subs_mgr");
+
+    if(!s_client)
+    {
+        svc_client = (axis2_svc_client_t *) savan_util_get_svc_client(env);
+    }
+    else
+    {
+        svc_client = (axis2_svc_client_t *) s_client;
+    }
+    options = (axis2_options_t *) axis2_svc_client_get_options(svc_client, 
env);
+    endpoint_ref = axis2_endpoint_ref_create(env, subs_mgr_url);
+    axis2_options_set_to(options, env, endpoint_ref);
+    
+    payload = savan_service_storage_mgr_build_topics_request_om_payload(env);
+    ret_node = axis2_svc_client_send_receive(svc_client, env, payload);
+    if (ret_node)
+    {
+        topic_list = savan_service_storage_mgr_process_topic_list_node(env, 
ret_node);
+    }
+    else
+    {
+        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, 
+            "[savan] Stub invoke FAILED: Error code:"
+            " %d :: %s", env->error->error_number,
+            AXIS2_ERROR_GET_MESSAGE(env->error));
+    }
+    if(!s_client && svc_client)
+    {
+        /*axis2_svc_client_free(svc_client, env);*/
+    }
+    AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, 
+        "[savan] Exit:savan_service_storage_mgr_get_topic_list_from_subs_mgr");
+    return topic_list;
+}
+
+static axis2_status_t
+savan_service_storage_mgr_add_subscriber_to_subs_mgr(
+    const axutil_env_t *env,
+    savan_subscriber_t *subscriber,
+    axis2_char_t *subs_mgr_url)
+{
+    const axis2_char_t *address = NULL;
+    axis2_endpoint_ref_t* endpoint_ref = NULL;
+    axis2_options_t *options = NULL;
+    axis2_svc_client_t* svc_client = NULL;
+    axiom_node_t *payload = NULL;
+
+    svc_client = (axis2_svc_client_t *) savan_util_get_svc_client(env);
+    options = (axis2_options_t *) axis2_svc_client_get_options(svc_client, 
env);
+    address = subs_mgr_url;
+    endpoint_ref = axis2_endpoint_ref_create(env, address);
+    axis2_options_set_to(options, env, endpoint_ref);
+    axis2_options_set_action(options, env, SAVAN_SUBS_MGR_ADD_SUBSCRIBER_URL);
+
+    payload = savan_service_storage_mgr_build_add_subscriber_om_payload(env, 
subscriber);
+    /* Send request */
+    axis2_svc_client_send_robust(svc_client, env, payload);
+    if(svc_client)
+    {
+        axis2_svc_client_free(svc_client, env);
+    }
+
+    return AXIS2_SUCCESS;
+}
+
+static axiom_node_t *
+savan_service_storage_mgr_build_add_subscriber_om_payload(
+    const axutil_env_t *env,
+    savan_subscriber_t *subscriber)
+{
+    axiom_node_t *add_node = NULL;
+    axiom_element_t* add_ele = NULL;
+    axiom_namespace_t *ns = NULL;
+    axiom_namespace_t *ns1 = NULL;
+    axiom_node_t *sub_node = NULL;
+    axiom_node_t *id_node = NULL;
+    axiom_node_t *endto_node = NULL;
+    axiom_node_t *delivery_node = NULL;
+    axiom_node_t *notify_node = NULL;
+    axiom_node_t *filter_node = NULL;
+    axiom_node_t *expires_node = NULL;
+    axiom_element_t* sub_elem = NULL;
+    axiom_element_t* id_elem = NULL;
+    axiom_element_t* endto_elem = NULL;
+    axiom_element_t* delivery_elem = NULL;
+    axiom_element_t* notify_elem = NULL;
+    axiom_element_t* filter_elem = NULL;
+    axiom_element_t* expires_elem = NULL;
+    const axis2_char_t *endto = NULL;
+    const axis2_char_t *notify = NULL;
+    axis2_char_t *filter = NULL;
+    const axis2_char_t *expires = NULL;
+    axis2_char_t *topic_name = NULL;
+    axis2_char_t *id = NULL;
+       axis2_endpoint_ref_t *notify_ref = NULL;
+    axis2_endpoint_ref_t *endto_ref = savan_subscriber_get_end_to(subscriber, 
env);
+
+    if(endto_ref)
+    {
+        endto = axis2_endpoint_ref_get_address(endto_ref, env);
+    }
+
+    notify_ref = savan_subscriber_get_notify_to(subscriber, env);
+    if(notify_ref)
+    {
+        notify = axis2_endpoint_ref_get_address(notify_ref, env);
+    }
+
+    filter = savan_subscriber_get_filter(subscriber, env); 
+    expires = savan_subscriber_get_expires(subscriber, env); 
+    id = savan_subscriber_get_id(subscriber, env);
+
+    ns = axiom_namespace_create (env, EVENTING_NAMESPACE, EVENTING_NS_PREFIX);
+    ns1 = axiom_namespace_create (env, SAVAN_NAMESPACE, SAVAN_NS_PREFIX);
+    add_ele = axiom_element_create(env, NULL, ELEM_NAME_ADD_SUBSCRIBER, ns1, 
&add_node);
+    
+    /* create the id element */
+    if(id)
+    {
+        id_elem = axiom_element_create(env, add_node, ELEM_NAME_ID, ns1, 
&id_node);
+            axiom_element_set_text(id_elem, env, id, id_node);
+    }
+
+    /* create the subscriber element */
+    sub_elem = axiom_element_create(env, add_node, ELEM_NAME_SUBSCRIBE, ns, 
&sub_node);
+    
+    /* EndTo element */
+    endto_elem = axiom_element_create(env, sub_node, ELEM_NAME_ENDTO, ns, 
&endto_node);
+    axiom_element_set_text(endto_elem, env, endto, endto_node);
+    
+    /* Delivery element */
+    delivery_elem = axiom_element_create(env, sub_node, ELEM_NAME_DELIVERY, 
ns, &delivery_node);
+        
+    notify_elem = axiom_element_create(env, delivery_node, ELEM_NAME_NOTIFYTO, 
ns, &notify_node);
+    axiom_element_set_text(notify_elem, env, notify, notify_node);
+    
+    /* Expires element */
+    expires_elem = axiom_element_create(env, sub_node, ELEM_NAME_EXPIRES, ns, 
&expires_node);
+    axiom_element_set_text(expires_elem, env, expires, expires_node);
+
+    /* Filter element */
+    filter_elem = axiom_element_create(env, sub_node, ELEM_NAME_FILTER, ns, 
&filter_node);
+    axiom_element_set_text(filter_elem, env, filter, filter_node);
+    
+    return add_node;
+}
+
+static axutil_array_list_t *
+savan_service_storage_mgr_process_subscriber_list_node(
+    const axutil_env_t *env,
+    axiom_node_t *subs_list_node)
+{
+    axiom_element_t *subs_list_element = NULL;
+    axiom_children_qname_iterator_t *subs_iter = NULL;
+    axutil_qname_t *qname = NULL;
+    axutil_array_list_t *subscriber_list = NULL;
+    axis2_status_t status = AXIS2_SUCCESS;
+
+    AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, 
+        "[savan] 
Entry:savan_service_storage_mgr_process_subscriber_list_node");
+    subs_list_element = axiom_node_get_data_element(subs_list_node, env); 
+         
+    /* Get Subscriber elements from subscriber list */
+    qname = axutil_qname_create(env, ELEM_NAME_SUBSCRIBER, SAVAN_NAMESPACE, 
NULL);
+    subs_iter = axiom_element_get_children_with_qname(subs_list_element, env,
+        qname, subs_list_node);
+    axutil_qname_free(qname, env);
+    if(!subs_iter)
+    {
+        AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "[savan] Subscribers list is 
empty");
+        return NULL;
+    }
+
+    if(axiom_children_qname_iterator_has_next(subs_iter, env))
+    {
+        subscriber_list = axutil_array_list_create(env, 0);
+    }
+
+    while(axiom_children_qname_iterator_has_next(subs_iter, env))
+    {
+        savan_subscriber_t *subscriber = NULL;
+        axiom_node_t *subs_node = NULL;
+     
+        subs_node = axiom_children_qname_iterator_next(subs_iter, env);
+        if(subs_node) /* Iterate Savan specific subscriber elements */
+        {
+            /* Now read Savan specific Subscribe element */
+            subscriber = 
savan_service_storage_mgr_process_savan_specific_subscriber_node(env, 
subs_node);
+            if(!subscriber)
+            {
+                AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, 
+                        "[savan] Failed process Savan specific Subscriber 
element");
+                status = axutil_error_get_status_code(env->error);
+                return NULL;
+
+            }
+
+            axutil_array_list_add(subscriber_list, env, subscriber);
+        }
+    }
+
+    AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, 
+            "[savan] savan_service_storage_mgr_process_subscriber_list_node");
+    return subscriber_list;
+}
+
+static savan_subscriber_t *AXIS2_CALL
+savan_service_storage_mgr_process_savan_specific_subscriber_node(
+    const axutil_env_t *env,
+    axiom_node_t *subs_node)
+{
+    axiom_element_t *subs_elem = NULL;
+    axiom_node_t *sub_node = NULL;
+    axiom_element_t *sub_elem = NULL;
+    axutil_qname_t *qname = NULL;
+    axiom_node_t *id_node = NULL;
+    axiom_element_t *id_elem = NULL;
+    axis2_char_t *id = NULL;
+    axiom_node_t *topic_node = NULL;
+    axiom_element_t *topic_elem = NULL;
+    savan_subscriber_t *subscriber = NULL;
+    axis2_status_t status = AXIS2_SUCCESS;
+
+    AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, 
+            "[savan] 
Entry:savan_service_storage_mgr_process_savan_specific_subscriber_node");
+
+    AXIS2_PARAM_CHECK(env->error, subs_node, AXIS2_FAILURE);
+
+    subscriber = savan_subscriber_create(env);
+    if (!subscriber)
+    {
+        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan] Failed to create a 
subscriber instance");
+        AXIS2_ERROR_SET(env->error, SAVAN_ERROR_FAILED_TO_CREATE_SUBSCRIBER, 
AXIS2_FAILURE);
+        return NULL;
+    }
+
+    subs_elem = axiom_node_get_data_element(subs_node, env); 
+
+    /* Id */
+    qname = axutil_qname_create(env, ELEM_NAME_ID, SAVAN_NAMESPACE, NULL);
+    id_elem = axiom_element_get_first_child_with_qname(subs_elem, env, qname, 
subs_node, &id_node);
+    axutil_qname_free(qname, env);
+    id = axiom_element_get_text(id_elem, env, id_node);
+    savan_subscriber_set_id(subscriber, env, id);
+    AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "[savan] Received subscriber 
id:%s", id);
+    
+    /* Topic */
+    qname = axutil_qname_create(env, ELEM_NAME_TOPIC, SAVAN_NAMESPACE, NULL);
+    topic_elem = axiom_element_get_first_child_with_qname(subs_elem, env, 
qname, subs_node, &topic_node);
+    axutil_qname_free(qname, env);
+    if(topic_elem)
+    {
+        /*axis2_char_t *topic_url = NULL;
+
+        topic_url = axiom_element_get_text(topic_elem, env, topic_node);
+        savan_subscriber_set_topic_url(subscriber, env, topic_url);*/
+        /* Until design is finalized don't store the topic(event source) */
+        /*status = savan_util_populate_topic(env, topic_url, conf);
+        if(status != AXIS2_SUCCESS)
+        {
+            AXIS2_ERROR_SET(env->error, SAVAN_ERROR_COULD_NOT_POPULATE_TOPIC, 
AXIS2_FAILURE);
+            AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan] Could not 
populate topic");
+            return NULL;
+        }*/
+
+        /*AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "[savan] Received subscriber 
topic:%s", topic_url);*/
+    }
+
+    qname = axutil_qname_create(env, ELEM_NAME_SUBSCRIBE, EVENTING_NAMESPACE, 
NULL);
+    sub_elem = axiom_element_get_first_child_with_qname(subs_elem, env, qname, 
subs_node, &sub_node);
+    axutil_qname_free(qname, env);
+    
+    if(sub_node)
+    {
+        /* Now read each sub element of Subscribe element */
+        status = savan_util_process_subscriber_node(env, sub_node, sub_elem, 
subscriber);
+        if(AXIS2_SUCCESS != status)
+        {
+            AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan] Parsing 
subscriber node failed");
+            AXIS2_ERROR_SET(env->error, 
SAVAN_ERROR_PARSING_SUBSCRIBER_NODE_FAILED, AXIS2_FAILURE);
+            return NULL;
+        }
+    }
+
+    AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, 
+            "[savan] 
Exit:savan_service_storage_mgr_process_savan_specific_subscriber_node");
+    return subscriber;
+}
+
+static axiom_node_t *
+savan_service_storage_mgr_build_subscriber_request_om_payload(
+    const axutil_env_t *env,
+    const axis2_char_t *subs_id)
+{
+    axiom_node_t *om_node = NULL;
+    axiom_element_t* om_ele = NULL;
+    axiom_node_t* subs_id_om_node = NULL;
+    axiom_element_t * subs_id_om_ele = NULL;
+    axiom_namespace_t *ns1 = NULL;
+    axis2_char_t *om_str = NULL;
+
+    ns1 = axiom_namespace_create (env, SAVAN_NAMESPACE, SAVAN_NS_PREFIX);
+    om_ele = axiom_element_create(env, NULL, ELEM_NAME_GET_SUBSCRIBER, ns1, 
&om_node);
+    subs_id_om_ele = axiom_element_create(env, om_node, 
ELEM_NAME_SUBSCRIBER_ID, ns1, 
+        &subs_id_om_node);
+    axiom_element_set_text(subs_id_om_ele, env, subs_id, subs_id_om_node);
+
+    om_str = axiom_node_to_string(om_node, env);
+    if (om_str)
+    {
+        AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "Sending OM : %s", om_str);
+        AXIS2_FREE(env->allocator, om_str);
+        om_str =  NULL;
+    }
+    return om_node;
+}
+
+static axiom_node_t *
+savan_service_storage_mgr_build_subscribers_request_om_payload(
+    const axutil_env_t *env,
+    const axis2_char_t *topic)
+{
+    axiom_node_t *om_node = NULL;
+    axiom_element_t* om_ele = NULL;
+    axiom_node_t* topic_om_node = NULL;
+    axiom_element_t * topic_om_ele = NULL;
+    axiom_namespace_t *ns1 = NULL;
+    axis2_char_t *om_str = NULL;
+
+    ns1 = axiom_namespace_create (env, SAVAN_NAMESPACE, SAVAN_NS_PREFIX);
+    om_ele = axiom_element_create(env, NULL, ELEM_NAME_GET_SUBSCRIBER_LIST, 
ns1, &om_node);
+    topic_om_ele = axiom_element_create(env, om_node, ELEM_NAME_TOPIC, ns1, 
+        &topic_om_node);
+    axiom_element_set_text(topic_om_ele, env, topic, topic_om_node);
+
+    om_str = axiom_node_to_string(om_node, env);
+    if (om_str)
+    {
+        AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "Sending OM : %s", om_str);
+        AXIS2_FREE(env->allocator, om_str);
+        om_str =  NULL;
+    }
+    return om_node;
+}
+
+/*static axiom_node_t *
+build_remove_subscriber_om_payload(
+    const axutil_env_t *env,
+    savan_subscriber_t *subscriber)
+{
+    axiom_node_t *remove_node = NULL;
+    axiom_element_t* remove_ele = NULL;
+    axiom_namespace_t *ns = NULL;
+    axiom_namespace_t *ns1 = NULL;
+    axiom_node_t *id_node = NULL;
+    axiom_node_t *topic_node = NULL;
+    axiom_element_t* id_elem = NULL;
+    axiom_element_t* topic_elem = NULL;
+    axis2_char_t *topic = NULL;
+    axis2_char_t *id = NULL;
+
+    id = savan_subscriber_get_id(subscriber, env);
+
+    ns = axiom_namespace_create (env, EVENTING_NAMESPACE, EVENTING_NS_PREFIX);
+    ns1 = axiom_namespace_create (env, SAVAN_NAMESPACE, SAVAN_NS_PREFIX);
+    remove_ele = axiom_element_create(env, NULL, ELEM_NAME_REMOVE_SUBSCRIBER, 
+        ns1, &remove_node);
+    
+    // create the id element
+    if(id)
+    {
+        id_elem = axiom_element_create(env, remove_node, ELEM_NAME_ID, ns1, 
&id_node);
+            axiom_element_set_text(id_elem, env, id, id_node);
+    }
+    // create the topic element
+    topic_elem = axiom_element_create(env, remove_node, ELEM_NAME_TOPIC, ns1, 
&topic_node);
+    topic = savan_subscriber_get_topic(subscriber, env);
+    if(topic)
+        axiom_element_set_text(topic_elem, env, topic, topic_node);
+    
+    return remove_node;
+}*/
+
+static axiom_node_t *
+savan_service_storage_mgr_build_topics_request_om_payload(
+    const axutil_env_t *env)
+{
+    axiom_node_t *om_node = NULL;
+    axiom_element_t* om_ele = NULL;
+    axiom_namespace_t *ns1 = NULL;
+    axis2_char_t *om_str = NULL;
+
+    ns1 = axiom_namespace_create (env, SAVAN_NAMESPACE, SAVAN_NS_PREFIX);
+    om_ele = axiom_element_create(env, NULL, ELEM_NAME_GET_TOPIC_LIST, ns1, 
&om_node);
+    om_str = axiom_node_to_string(om_node, env);
+    if (om_str)
+    {
+        AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, 
+            "[savan] Sending topics_request_om_payload: %s", om_str);
+        AXIS2_FREE(env->allocator, om_str);
+        om_str =  NULL;
+    }
+    return om_node;
+}
+
+static axutil_array_list_t *
+savan_service_storage_mgr_process_topic_list_node(
+    const axutil_env_t *env,
+    axiom_node_t *topic_list_node)
+{
+    axiom_element_t *topic_list_element = NULL;
+    axiom_children_qname_iterator_t *topic_iter = NULL;
+    axutil_qname_t *qname = NULL;
+    axutil_array_list_t *topic_list = NULL;
+
+    AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, 
+            "[savan] Entry:savan_service_storage_mgr_process_topic_list_node");
+
+    topic_list_element = axiom_node_get_data_element(topic_list_node, env); 
+         
+    /* Get topic elements from topic list */
+    qname = axutil_qname_create(env, ELEM_NAME_TOPIC, SAVAN_NAMESPACE, NULL);
+    topic_iter = axiom_element_get_children_with_qname(topic_list_element, 
env, qname, 
+            topic_list_node);
+
+    axutil_qname_free(qname, env);
+    if(!topic_iter)
+    {
+        AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "[savan] Topic list is empty");
+        return NULL;
+    }
+
+    if(axiom_children_qname_iterator_has_next(topic_iter, env))
+    {
+        topic_list = axutil_array_list_create(env, 0);
+    }
+
+    while(axiom_children_qname_iterator_has_next(topic_iter, env))
+    {
+        axiom_node_t *topic_node = NULL;
+        axiom_element_t *topic_elem = NULL;
+        axis2_char_t *topic_url_str = NULL;
+
+        topic_node = axiom_children_qname_iterator_next(topic_iter, env);
+        if(topic_node)
+        {
+            topic_elem = axiom_node_get_data_element(topic_node, env);
+            topic_url_str = axiom_element_get_text(topic_elem, env, 
topic_node);
+            axutil_array_list_add(topic_list, env, axutil_strdup(env, 
topic_url_str));
+            AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "topic_url_str:%s", 
topic_url_str);
+        }
+    }
+
+    AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, 
+            "[savan] Exit:savan_service_storage_mgr_process_topic_list_node");
+    return topic_list;
+}
+
+

Added: webservices/savan/trunk/c/src/storage/sqlite/Makefile.am
URL: 
http://svn.apache.org/viewvc/webservices/savan/trunk/c/src/storage/sqlite/Makefile.am?rev=749877&view=auto
==============================================================================
--- webservices/savan/trunk/c/src/storage/sqlite/Makefile.am (added)
+++ webservices/savan/trunk/c/src/storage/sqlite/Makefile.am Wed Mar  4 
01:53:01 2009
@@ -0,0 +1,15 @@
+noinst_LTLIBRARIES = libsavan_storage.la
+
+libsavan_storage_la_SOURCES = storage_mgr.c sqlite3.c
+
+libsavan_storage_la_LIBADD = ../common/libsavan_common_storage.la
+
+INCLUDES = -I$(top_builddir)/include \
+                       -I$(top_builddir)/include/savan \
+                       -I. \
+                       @AXIS2INC@ \
+                       @AXIOMINC@ \
+                       @NEETHIINC@ \
+                       @UTILINC@
+
+EXTRA_DIST=


Reply via email to