Author: damitha
Date: Thu Oct 30 19:46:32 2008
New Revision: 709329

URL: http://svn.apache.org/viewvc?rev=709329&view=rev
Log:
Code refactoring Savan/C. There were lot of code duplicates. Fixed them

Modified:
    webservices/savan/trunk/c/include/savan_util.h
    webservices/savan/trunk/c/src/client/savan_client.c
    webservices/savan/trunk/c/src/core/savan_sub_processor.c
    webservices/savan/trunk/c/src/subs_mgr/services.xml
    webservices/savan/trunk/c/src/subs_mgr/subs_mgr.c
    webservices/savan/trunk/c/src/util/savan_util.c

Modified: webservices/savan/trunk/c/include/savan_util.h
URL: 
http://svn.apache.org/viewvc/webservices/savan/trunk/c/include/savan_util.h?rev=709329&r1=709328&r2=709329&view=diff
==============================================================================
--- webservices/savan/trunk/c/include/savan_util.h (original)
+++ webservices/savan/trunk/c/include/savan_util.h Thu Oct 30 19:46:32 2008
@@ -29,6 +29,8 @@
 #include <savan_constants.h>
 #include <savan_subscriber.h>
 #include <savan_sub_processor.h>
+#include <axiom_node.h>
+#include <axiom_element.h>
 
 #ifdef __cplusplus
 extern "C"
@@ -314,6 +316,20 @@
     savan_util_get_svc_client(
         const axutil_env_t *env);
 
+    AXIS2_EXTERN axis2_status_t AXIS2_CALL
+    savan_util_process_subscriber_node(
+        const axutil_env_t *env,
+        axiom_node_t *sub_node,
+        axiom_element_t *sub_elem,
+        savan_subscriber_t *subscriber,
+        axis2_conf_t *conf);
+
+    AXIS2_EXTERN axiom_node_t * AXIS2_CALL
+    savan_util_create_subscriber_node(
+        const axutil_env_t *env,
+        savan_subscriber_t *subscriber,
+        axiom_node_t *parent_node);
+
 /** @} */
 #ifdef __cplusplus
 }

Modified: webservices/savan/trunk/c/src/client/savan_client.c
URL: 
http://svn.apache.org/viewvc/webservices/savan/trunk/c/src/client/savan_client.c?rev=709329&r1=709328&r2=709329&view=diff
==============================================================================
--- webservices/savan/trunk/c/src/client/savan_client.c (original)
+++ webservices/savan/trunk/c/src/client/savan_client.c Thu Oct 30 19:46:32 2008
@@ -21,7 +21,9 @@
 #include <axis2_addr.h>
 
 #include <savan_client.h>
+#include <savan_util.h>
 #include <savan_constants.h>
+#include <savan_subscriber.h>
 
 struct savan_client_t
 {
@@ -49,8 +51,6 @@
     axiom_node_t *response_node,
     const axutil_env_t *env);
 
-/******************************************************************************/
-
 AXIS2_EXTERN savan_client_t * AXIS2_CALL
 savan_client_create(
     const axutil_env_t *env)
@@ -72,8 +72,6 @@
     return client;
 }
 
-/******************************************************************************/
-
 AXIS2_EXTERN axis2_status_t AXIS2_CALL
 savan_client_subscribe(
     savan_client_t *client,
@@ -83,33 +81,22 @@
 {
     axis2_options_t *wsa_options = NULL;
     const axis2_char_t *old_action = NULL;
-    axiom_namespace_t *ns = NULL;
     axiom_node_t *reply = NULL;
     axiom_node_t *sub_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* 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;
+    axiom_element_t *body_elem = NULL;
+    axis2_char_t *sub_id = NULL;
+    axis2_char_t *sub_url = NULL;
+    axis2_char_t *sub_elem_local_name = NULL;
+    savan_subscriber_t *subscriber = NULL;
     axis2_char_t *endto = NULL;
     axis2_char_t *notify = NULL;
     axis2_char_t *filter = NULL;
     axis2_char_t *filter_dialect = NULL;
     axis2_char_t *expires = NULL;
-    axiom_element_t *body_elem = NULL;
-    axis2_char_t *sub_id = NULL;
-    axis2_char_t *sub_url = NULL;
-    axis2_char_t *sub_elem_local_name = NULL;
-       axiom_attribute_t *dialect = NULL;
+    axis2_status_t status = AXIS2_SUCCESS;
+    axis2_endpoint_ref_t *endpoint_ref = NULL;
 
-    AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, 
-        "[savan] Start:savan_client_subscribe");
+    AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "[savan] 
Entry:savan_client_subscribe");
     
     /* set wsa action as Subscribe. remember the old action */
     wsa_options = (axis2_options_t*)axis2_svc_client_get_options(svc_client, 
env);
@@ -122,46 +109,25 @@
     filter = axutil_hash_get(options, SAVAN_OP_KEY_FILTER, 
AXIS2_HASH_KEY_STRING);
     filter_dialect = axutil_hash_get(options, SAVAN_OP_KEY_FILTER_DIALECT, 
AXIS2_HASH_KEY_STRING);
     expires = axutil_hash_get(options, SAVAN_OP_KEY_EXPIRES, 
AXIS2_HASH_KEY_STRING);
-    
-    /* create the body of the Subscribe request */
-    ns = axiom_namespace_create (env, EVENTING_NAMESPACE, EVENTING_NS_PREFIX);
-    sub_elem = axiom_element_create(env, NULL, 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);
-
-       if(filter_dialect == NULL) 
-       {
-               dialect = axiom_attribute_create(env, 
-                       "Dialect", DEFAULT_FILTER_DIALECT, NULL);
-       }
-       else
-       {
-               dialect = axiom_attribute_create(env,
-                       "Dialect", filter_dialect, NULL);
-       }
 
-       axiom_element_add_attribute(filter_elem, env, dialect ,filter_node);
-    
+    subscriber = savan_subscriber_create(env);
+    endpoint_ref = axis2_endpoint_ref_create(env, endto);
+    savan_subscriber_set_end_to(subscriber, env, endpoint_ref);
+    endpoint_ref = axis2_endpoint_ref_create(env, notify);
+    savan_subscriber_set_notify_to(subscriber, env, endpoint_ref);
+    savan_subscriber_set_filter(subscriber, env, filter);
+    savan_subscriber_set_filter_dialect(subscriber, env, filter_dialect);
+    savan_subscriber_set_expires(subscriber, env, expires);
+    /* Create the Subscriber node */
+    sub_node = savan_util_create_subscriber_node(env, subscriber, NULL);
+    if(!sub_node)
+    {
+        status = axutil_error_get_status_code(env->error);
+        savan_subscriber_free(subscriber, env);
+        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan] Could not create the 
subscriber node");
+        return status;
+    }
+
     /* send the Subscription and wait for the response */
     reply = axis2_svc_client_send_receive(svc_client, env, sub_node);
     
@@ -170,9 +136,10 @@
     
     if (!reply)
     {
-        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan] Failed to send 
subscription "
-            "request. Error: %d Reason: %s", env->error->error_number,
-            AXIS2_ERROR_GET_MESSAGE(env->error));
+        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, 
+                "[savan] Failed to send subscription request. Error: %d 
Reason: %s", 
+                env->error->error_number,
+        AXIS2_ERROR_GET_MESSAGE(env->error));
         return AXIS2_FAILURE;
     }
 
@@ -185,7 +152,7 @@
     /* Check whether we have received a SubscribeResponse */
     sub_elem_local_name = axiom_element_get_localname(body_elem, env);
 
-    if (axutil_strcmp(ELEM_NAME_SUB_RESPONSE, sub_elem_local_name) != 0)
+    if (axutil_strcmp(ELEM_NAME_SUB_RESPONSE, sub_elem_local_name))
     {
         AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan] Subscription failed");
         return AXIS2_FAILURE;
@@ -197,14 +164,10 @@
     sub_url = savan_client_get_sub_url_from_response(body_elem, reply, env);
     client->sub_url = axutil_strdup(env, sub_url);
 
-    AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, 
-        "[savan] End:savan_client_subscribe");
+    AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "[savan] 
Exit:savan_client_subscribe");
     return AXIS2_SUCCESS;
 }
 
-
-/******************************************************************************/
-
 AXIS2_EXTERN axis2_status_t AXIS2_CALL
 savan_client_renew(
     savan_client_t *client,
@@ -263,8 +226,6 @@
     return status;
 }
 
-/******************************************************************************/
-
 AXIS2_EXTERN axis2_status_t AXIS2_CALL
 savan_client_unsubscribe(
     savan_client_t *client,
@@ -313,8 +274,6 @@
     return status;
 }
 
-/******************************************************************************/
-
 AXIS2_EXTERN axis2_char_t * AXIS2_CALL
 savan_client_get_status(
     savan_client_t *client,
@@ -388,7 +347,6 @@
     return expires;
 }
 
-/*****************************************************************************/
 AXIS2_EXTERN axis2_char_t * AXIS2_CALL
 savan_client_get_sub_id(
     savan_client_t *client)
@@ -403,8 +361,6 @@
     return client->sub_url;
 }
 
-/*****************************************************************************/
-
 axis2_status_t AXIS2_CALL
 savan_client_add_sub_id_to_soap_header(
     savan_client_t *client,
@@ -415,8 +371,6 @@
     axiom_node_t *id_node = NULL;
     axiom_element_t *id_elem = NULL;
 
-    AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
-
     /* Create a node with the subscription id and attach it as a soap header
      * to the service client */
 
@@ -438,8 +392,6 @@
 
 }
 
-/******************************************************************************/
-
 axis2_char_t * AXIS2_CALL
 savan_client_get_sub_id_from_response(
     axiom_element_t *response_elem, 

Modified: webservices/savan/trunk/c/src/core/savan_sub_processor.c
URL: 
http://svn.apache.org/viewvc/webservices/savan/trunk/c/src/core/savan_sub_processor.c?rev=709329&r1=709328&r2=709329&view=diff
==============================================================================
--- webservices/savan/trunk/c/src/core/savan_sub_processor.c (original)
+++ webservices/savan/trunk/c/src/core/savan_sub_processor.c Thu Oct 30 
19:46:32 2008
@@ -89,6 +89,7 @@
     savan_subscriber_t *subscriber = NULL;
     axis2_char_t *expires = NULL;
     axis2_char_t *id = NULL;
+    axis2_status_t status = AXIS2_SUCCESS;
     
     AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[savan] 
Entry:savan_sub_processor_subscribe");
     
@@ -98,7 +99,8 @@
     {
         AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan] Failed to create a 
subscriber"); 
         AXIS2_ERROR_SET(env->error, SAVAN_ERROR_FAILED_TO_CREATE_SUBSCRIBER, 
AXIS2_FAILURE);
-        return AXIS2_FAILURE;
+        status = axutil_error_get_status_code(env->error);
+        return status;
     }    
     /* Set the expiry time on the subscription */
     /* TODO : For now we are ignoring the Expiry sent by the client. Add 
support
@@ -118,17 +120,19 @@
         * the list.
      */
 
-       if (savan_sub_processor_validate_subscription(subscriber, env, msg_ctx)
-                                                  == AXIS2_FAILURE)
-       {       
+       if (AXIS2_SUCCESS != (status = 
savan_sub_processor_validate_subscription(subscriber, env, 
+                msg_ctx)))
+       {
+        savan_subscriber_free(subscriber, env);
        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, 
                 "[savan] Encountered a subscription validation fault.");
-               return AXIS2_FAILURE;
+               return status;
        }
 
-    if(savan_util_add_subscriber(env, msg_ctx, subscriber) == AXIS2_FAILURE)
+    if(AXIS2_SUCCESS != (status = savan_util_add_subscriber(env, msg_ctx, 
subscriber)))
        {
-               return AXIS2_FAILURE;
+        savan_subscriber_free(subscriber, env);
+               return status;
        }
     
     AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[savan] 
Exit:savan_sub_processor_subscribe");
@@ -256,46 +260,31 @@
     const axutil_env_t *env,
     axis2_msg_ctx_t *msg_ctx)
 {
+    axis2_conf_ctx_t *conf_ctx = NULL;
+    axis2_conf_t *conf = NULL;
+    axis2_status_t status = AXIS2_SUCCESS;
     savan_subscriber_t *subscriber = NULL;
     axis2_char_t *sub_id = NULL;
     axiom_soap_envelope_t *envelope = NULL;
     axiom_soap_body_t *body = NULL;
     axutil_qname_t *qname = NULL;
-    
     axiom_node_t *body_node = NULL;
     axiom_node_t *sub_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 *body_elem = NULL;
     axiom_element_t *sub_elem = NULL;
-    axiom_element_t *endto_elem = NULL;
-    axiom_element_t *delivery_elem = NULL;
-    axiom_element_t *notify_elem = NULL;
-    axiom_element_t *expires_elem = NULL;
-    axiom_element_t *filter_elem = NULL;
-    
-    axis2_char_t *endto = NULL;
-    axis2_char_t *notify = NULL;
-    axis2_char_t *expires = NULL;
-    axis2_char_t *filter = NULL;
-    axis2_char_t *filter_dialect = NULL;
     axis2_char_t *topic = NULL;
-    
-    axis2_endpoint_ref_t *endto_epr = NULL;
-    axis2_endpoint_ref_t *notify_epr = NULL;
     axis2_endpoint_ref_t *topic_epr = NULL;
     
     AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, 
             "[savan] Entry:savan_sub_processor_create_subscriber_from_msg");
-    
+   
+    conf_ctx = axis2_msg_ctx_get_conf_ctx(msg_ctx, env);
+    conf = axis2_conf_ctx_get_conf(conf_ctx, env);
     subscriber = savan_subscriber_create(env);
     if (!subscriber)
     {
-        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan] Failed to create a 
subscriber instance"); 
+        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan] Failed to create a 
subscriber instance");
+        axutil_error_set_status_code(env->error, AXIS2_FAILURE);
         return NULL;
     }
     
@@ -313,6 +302,7 @@
     if (!envelope)
     {
         AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan] Failed to extract the 
soap envelop"); 
+        axutil_error_set_status_code(env->error, AXIS2_FAILURE);
         return NULL;
     }
     
@@ -320,6 +310,7 @@
     if (!body)
     {
         AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan] Failed to extract the 
soap body"); 
+        axutil_error_set_status_code(env->error, AXIS2_FAILURE);
         return NULL;
     }
     
@@ -334,98 +325,29 @@
     axutil_qname_free(qname, env);
     
     /* Now read each sub element of Subscribe element */
-    if(sub_elem)
+    status = savan_util_process_subscriber_node(env, sub_node, sub_elem, 
subscriber, conf);
+    if(AXIS2_SUCCESS != status)
+    {
+        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan] Parsing subscriber 
node failed");
+        axutil_error_set_status_code(env->error, AXIS2_FAILURE);
+        return NULL;
+    }
+
+    topic_epr = axis2_msg_ctx_get_to(msg_ctx, env);
+    if(topic_epr)
+    {
+        topic = (axis2_char_t *)axis2_endpoint_ref_get_address(topic_epr,
+                                                               env);
+    }
+
+    if(topic)
     {
-        /* EndTo */
-        qname = axutil_qname_create(env, ELEM_NAME_ENDTO, EVENTING_NAMESPACE, 
NULL);
-        endto_elem = axiom_element_get_first_child_with_qname(sub_elem, env, 
qname,
-                                                              sub_node, 
&endto_node);
-        axutil_qname_free(qname, env);
-       
-        if(endto_elem)
-        {
-            endto = axiom_element_get_text(endto_elem, env, endto_node);
-            if(endto)
-            {
-                endto_epr = axis2_endpoint_ref_create(env, endto);
-                savan_subscriber_set_end_to(subscriber, env, endto_epr);
-            }
-        }
-        
-        /* Get Delivery element and read NotifyTo */
-        qname = axutil_qname_create(env, ELEM_NAME_DELIVERY, 
EVENTING_NAMESPACE, NULL);
-        delivery_elem = axiom_element_get_first_child_with_qname(sub_elem, 
env, qname,
-                                                                 sub_node, 
&delivery_node);
-        axutil_qname_free(qname, env);
-        if(delivery_elem)
-        {
-            qname = axutil_qname_create(env, ELEM_NAME_NOTIFYTO, 
EVENTING_NAMESPACE, NULL);
-            notify_elem = 
axiom_element_get_first_child_with_qname(delivery_elem, env, qname,
-                                                                   
delivery_node, &notify_node);
-            axutil_qname_free(qname, env);
-            if(notify_elem)
-            {
-                notify = axiom_element_get_text(notify_elem, env, notify_node);
-                if(notify)
-                {
-                    notify_epr = axis2_endpoint_ref_create(env, notify);
-                    savan_subscriber_set_notify_to(subscriber, env, 
notify_epr);
-                }
-            }
-        } 
-        /* Expires */
-        qname = axutil_qname_create(env, ELEM_NAME_EXPIRES, 
EVENTING_NAMESPACE, NULL);
-        expires_elem = axiom_element_get_first_child_with_qname(sub_elem, env, 
qname,
-                                                                sub_node, 
&expires_node);
-        axutil_qname_free(qname, env);
-        if(expires_elem)
-        {
-            expires = axiom_element_get_text(expires_elem, env, expires_node);
-            if(expires)
-                savan_subscriber_set_expires(subscriber, env, expires);
-        }
-        
-        /* Filter */
-        qname = axutil_qname_create(env, ELEM_NAME_FILTER, EVENTING_NAMESPACE, 
NULL);
-        filter_elem = axiom_element_get_first_child_with_qname(sub_elem, env, 
-                                                               qname,
-                                                               sub_node, 
-                                                               &filter_node);
-        axutil_qname_free(qname, env);
-        if(filter_elem)
-        {
-            qname = axutil_qname_create(env, SAVAN_FILTER_DIALECT, NULL, NULL);
-            filter = axiom_element_get_text(filter_elem, env, filter_node);
-            filter_dialect = axiom_element_get_attribute_value(filter_elem,
-                                                               env, qname);
-            axutil_qname_free(qname, env);
-            if(filter_dialect)
-            {
-                savan_subscriber_set_filter_dialect(subscriber, env, 
-                                                    filter_dialect);
-            }
-
-            if(filter)
-            {
-                savan_subscriber_set_filter(subscriber, env, filter);
-            }
-        }
-        
-        topic_epr = axis2_msg_ctx_get_to(msg_ctx, env);
-        if(topic_epr)
-        {
-            topic = (axis2_char_t *)axis2_endpoint_ref_get_address(topic_epr,
-                                                                   env);
-        }
-
-        if(topic)
-        {
-            savan_subscriber_set_topic(subscriber, env, topic);
-        }
+        savan_subscriber_set_topic(subscriber, env, topic);
     }
 
     AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, 
         "[savan] Exit:savan_sub_processor_create_subscriber_from_msg");
+    axutil_error_set_status_code(env->error, AXIS2_SUCCESS);
     return subscriber;    
 }
 

Modified: webservices/savan/trunk/c/src/subs_mgr/services.xml
URL: 
http://svn.apache.org/viewvc/webservices/savan/trunk/c/src/subs_mgr/services.xml?rev=709329&r1=709328&r2=709329&view=diff
==============================================================================
--- webservices/savan/trunk/c/src/subs_mgr/services.xml (original)
+++ webservices/savan/trunk/c/src/subs_mgr/services.xml Thu Oct 30 19:46:32 2008
@@ -23,11 +23,6 @@
    </operation>
    <operation name="get_topic_list">
            <parameter name="wsamapping" 
>http://ws.apache.org/axis2/c/subscription/get_topic_list</parameter>
-           <parameter name="ganglia_heartbeat" 
locked="xsd:false">http://localhost:9090/axis2/services/ganglia_heartbeat</parameter>
-           <parameter name="ganglia_discovery" 
locked="xsd:false">http://localhost:9090/axis2/services/ganglia_discovery</parameter>
-           <parameter name="ganglia_power" 
locked="xsd:false">http://localhost:9090/axis2/services/ganglia_power</parameter>
-           <parameter name="ganglia_load" 
locked="xsd:false">http://localhost:9090/axis2/services/ganglia_load</parameter>
-           <parameter name="syslog" 
locked="xsd:false">http://localhost:9090/axis2/services/syslog</parameter>
            <parameter name="publisher" 
locked="xsd:false">http://localhost:9090/axis2/services/publisher</parameter>
    </operation>
 

Modified: webservices/savan/trunk/c/src/subs_mgr/subs_mgr.c
URL: 
http://svn.apache.org/viewvc/webservices/savan/trunk/c/src/subs_mgr/subs_mgr.c?rev=709329&r1=709328&r2=709329&view=diff
==============================================================================
--- webservices/savan/trunk/c/src/subs_mgr/subs_mgr.c (original)
+++ webservices/savan/trunk/c/src/subs_mgr/subs_mgr.c Thu Oct 30 19:46:32 2008
@@ -66,15 +66,16 @@
     axis2_char_t *expires = NULL;
     axis2_char_t *filter = NULL;
 
-    AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, 
-        "[savan] Start:savan_subs_mgr_add_subscriber");
+    AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "[savan] 
Start:savan_subs_mgr_add_subscriber");
+
     conf_ctx = axis2_msg_ctx_get_conf_ctx(msg_ctx, env);
     conf = axis2_conf_ctx_get_conf(conf_ctx, env);
     subscriber = savan_subscriber_create(env);
     if(add_sub_node)
-        add_sub_elem = (axiom_element_t*)axiom_node_get_data_element(
-            add_sub_node, env);
-    
+    {
+        add_sub_elem = 
(axiom_element_t*)axiom_node_get_data_element(add_sub_node, env);
+    }
+
     AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, 
         "[savan] node:%s", axiom_node_to_string(add_sub_node, env));
     /*Get topic element from node */
@@ -443,8 +444,7 @@
     axis2_char_t sql_retrieve[256];
     int i = 0, size = 0;
 
-    AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, 
-        "Start:savan_subs_mgr_get_subscriber_list");
+    AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[savan] 
Entry:savan_subs_mgr_get_subscriber_list");
     /* Expected request format is :-
      * <ns1:get_subscriber_list xmlns:ns1="http://ws.apache.org/savan";>
      *      <Topic>topic_url</Topic>
@@ -460,10 +460,8 @@
     conf = axis2_conf_ctx_get_conf(conf_ctx, env);
     if (!node) /* 'get_subscriber_list' node */
     {
-        AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SVC_SKEL_INPUT_OM_NODE_NULL, 
-            AXIS2_FAILURE);
-        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, 
-                        "[savan]axiom node is null, unable to continue");
+        AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SVC_SKEL_INPUT_OM_NODE_NULL, 
AXIS2_FAILURE);
+        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan] Axiom node is null, 
unable to continue");
         return NULL;
     }
 
@@ -473,7 +471,7 @@
         AXIS2_ERROR_SET(env->error, 
             AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, AXIS2_FAILURE);
         AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, 
-                        "[savan]topic parent node is null, unable to 
continue");
+                        "[savan] topic parent node is null, unable to 
continue");
         return NULL;
     }
 
@@ -482,7 +480,7 @@
     {
         AXIS2_ERROR_SET(env->error, 
             AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, AXIS2_FAILURE);
-        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan]invalid XML in 
request");
+        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan] Invalid XML in 
request");
         return NULL;
     }
 
@@ -494,7 +492,7 @@
         {
             topic_url = (axis2_char_t *)axiom_text_get_value(topic_text, env);
             topic = savan_util_get_topic_name_from_topic_url(env, topic_url);
-            AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "[savan]Requested 
Topic:%s", topic);
+            AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "[savan] Requested 
Topic:%s", topic);
         }
     }
     else
@@ -526,103 +524,24 @@
         {
             for(i = 0; i < size; i++)
             {
-                savan_subscriber_t * subscriber = 
axutil_array_list_get(subs_store, 
-                    env, i);
+                axiom_node_t *sub_node = NULL;
+                savan_subscriber_t * subscriber = 
axutil_array_list_get(subs_store, env, i);
 
                 if (subscriber)
                 {
-                    axiom_node_t *topic_node = NULL;
-                    axiom_node_t *sub_node = NULL;
-                    axiom_node_t *endto_node = NULL;
-                    axiom_node_t *id_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* topic_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;
-                    const axis2_char_t *filter = NULL;
-                    const axis2_char_t *expires = NULL;
-                    axis2_char_t *id = NULL;
-                    axis2_char_t *topic_url_l = NULL;
-                    axis2_char_t *topic_l = NULL;
-                    axis2_endpoint_ref_t *endto_ref = NULL;
-                    axis2_endpoint_ref_t *notify_ref = NULL;
-
-                    /* Check whether the subscriber has subscribed for the 
topic. 
-                     * If so create the topic element */
-                    topic_elem = axiom_element_create(env, subs_list_node, 
-                        ELEM_NAME_TOPIC, ns1, &topic_node);
-                    topic_url_l = savan_subscriber_get_topic(subscriber, env);
-                    if(topic_url_l)
+                    sub_node = savan_util_create_subscriber_node(env, 
subscriber, subs_list_node);
+                    if(!sub_node)
                     {
-                        topic_l = 
savan_util_get_topic_name_from_topic_url(env, 
-                            topic_url_l);
+                        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, 
+                                "[savan] Creating subscriber node failed");
+                        return NULL;
                     }
-
-                    if(0 == axutil_strcmp(topic, topic_l))
-                    {
-                        AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, 
-                        "[savan]Subscribers not empty for topic :%s", 
topic_url);
-                        axiom_element_set_text(topic_elem, env, topic_url_l, 
topic_node); 
-                    }
-                    else
-                        continue;
-                    endto_ref = savan_subscriber_get_end_to(subscriber, env);
-                    endto = axis2_endpoint_ref_get_address(endto_ref, env);
-                    notify_ref = savan_subscriber_get_notify_to(subscriber, 
env);
-                    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);
-
-
-                    /* create the subscriber element */
-
-                    sub_elem = axiom_element_create(env, subs_list_node, 
-                        ELEM_NAME_SUBSCRIBE, ns, &sub_node);
-
-                    /* Id element */
-                    id_elem = axiom_element_create(env, sub_node, 
ELEM_NAME_ID, ns1,
-                        &id_node);
-                    axiom_element_set_text(id_elem, env, id, id_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, &endto_node);
-                    axiom_element_set_text(filter_elem, env, filter, 
filter_node);
                 }
             }
         }
     }
  
-    AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, 
-        "End:savan_subs_mgr_get_subscriber_list");
+    AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[savan] 
Exit:savan_subs_mgr_get_subscriber_list");
     return subs_list_node;
 }
 

Modified: webservices/savan/trunk/c/src/util/savan_util.c
URL: 
http://svn.apache.org/viewvc/webservices/savan/trunk/c/src/util/savan_util.c?rev=709329&r1=709328&r2=709329&view=diff
==============================================================================
--- webservices/savan/trunk/c/src/util/savan_util.c (original)
+++ webservices/savan/trunk/c/src/util/savan_util.c Thu Oct 30 19:46:32 2008
@@ -24,6 +24,8 @@
 #include <axiom_soap.h>
 #include <axiom_soap_const.h>
 #include <axiom_soap_envelope.h>
+#include <axiom_element.h>
+#include <axiom_node.h>
 
 #include <savan_util.h>
 #include <savan_msg_recv.h>
@@ -1431,3 +1433,219 @@
     return value;
 }
 
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+savan_util_process_subscriber_node(
+    const axutil_env_t *env,
+    axiom_node_t *sub_node,
+    axiom_element_t *sub_elem,
+    savan_subscriber_t *subscriber,
+    axis2_conf_t *conf)
+{
+    axutil_qname_t *qname = 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 *endto_elem = NULL;
+    axiom_element_t *delivery_elem = NULL;
+    axiom_element_t *notify_elem = NULL;
+    axiom_element_t *expires_elem = NULL;
+    axiom_element_t *filter_elem = NULL;
+    
+    axis2_char_t *endto = NULL;
+    axis2_char_t *notify = NULL;
+    axis2_char_t *expires = NULL;
+    axis2_char_t *filter = NULL;
+    axis2_char_t *filter_dialect = NULL;
+    
+    axis2_endpoint_ref_t *endto_epr = NULL;
+    axis2_endpoint_ref_t *topic_epr = NULL;
+    axis2_endpoint_ref_t *notify_epr = NULL;
+
+    axis2_status_t status = AXIS2_SUCCESS;
+
+    AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[savan] 
Entry:savan_util_process_subscriber_node");
+
+    if(sub_elem)
+    {
+        /* EndTo */
+        qname = axutil_qname_create(env, ELEM_NAME_ENDTO, EVENTING_NAMESPACE, 
NULL);
+        endto_elem = axiom_element_get_first_child_with_qname(sub_elem, env, 
qname, sub_node, 
+                &endto_node);
+        axutil_qname_free(qname, env);
+       
+        if(endto_elem)
+        {
+            endto = axiom_element_get_text(endto_elem, env, endto_node);
+            if(endto)
+            {
+                endto_epr = axis2_endpoint_ref_create(env, endto);
+                savan_subscriber_set_end_to(subscriber, env, endto_epr);
+            }
+        }
+        
+        /* Get Delivery element and read NotifyTo */
+        qname = axutil_qname_create(env, ELEM_NAME_DELIVERY, 
EVENTING_NAMESPACE, NULL);
+        delivery_elem = axiom_element_get_first_child_with_qname(sub_elem, 
env, qname, sub_node, 
+                &delivery_node);
+
+        axutil_qname_free(qname, env);
+        if(delivery_elem)
+        {
+            qname = axutil_qname_create(env, ELEM_NAME_NOTIFYTO, 
EVENTING_NAMESPACE, NULL);
+            notify_elem = 
axiom_element_get_first_child_with_qname(delivery_elem, env, qname,
+                                                                   
delivery_node, &notify_node);
+            axutil_qname_free(qname, env);
+            if(notify_elem)
+            {
+                notify = axiom_element_get_text(notify_elem, env, notify_node);
+                if(notify)
+                {
+                    notify_epr = axis2_endpoint_ref_create(env, notify);
+                    savan_subscriber_set_notify_to(subscriber, env, 
notify_epr);
+                }
+            }
+        }
+
+        /* Expires */
+        qname = axutil_qname_create(env, ELEM_NAME_EXPIRES, 
EVENTING_NAMESPACE, NULL);
+        expires_elem = axiom_element_get_first_child_with_qname(sub_elem, env, 
qname,
+                                                                sub_node, 
&expires_node);
+        axutil_qname_free(qname, env);
+        if(expires_elem)
+        {
+            expires = axiom_element_get_text(expires_elem, env, expires_node);
+            if(expires)
+            {
+                savan_subscriber_set_expires(subscriber, env, expires);
+            }
+        }
+        
+        /* Filter */
+        qname = axutil_qname_create(env, ELEM_NAME_FILTER, EVENTING_NAMESPACE, 
NULL);
+        filter_elem = axiom_element_get_first_child_with_qname(sub_elem, env, 
+                                                               qname,
+                                                               sub_node, 
+                                                               &filter_node);
+        axutil_qname_free(qname, env);
+        if(filter_elem)
+        {
+            qname = axutil_qname_create(env, SAVAN_FILTER_DIALECT, NULL, NULL);
+            filter = axiom_element_get_text(filter_elem, env, filter_node);
+            filter_dialect = axiom_element_get_attribute_value(filter_elem,
+                                                               env, qname);
+            axutil_qname_free(qname, env);
+            if(filter_dialect)
+            {
+                savan_subscriber_set_filter_dialect(subscriber, env, 
+                                                    filter_dialect);
+            }
+
+            if(filter)
+            {
+                savan_subscriber_set_filter(subscriber, env, filter);
+            }
+        }
+
+        if(endto)
+        {
+            topic_epr = axis2_endpoint_ref_create(env, endto);
+        }
+
+        if(topic_epr)
+        {
+            axis2_char_t *topic = NULL;
+            topic = (axis2_char_t *) axis2_endpoint_ref_get_address(topic_epr, 
env);
+            printf("topic:%s\n",  topic);
+            if(topic)
+            {
+                savan_subscriber_set_topic(subscriber, env, topic);
+            }
+        }
+    }
+
+    AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[savan] 
Exit:savan_util_process_subscriber_node");
+    return status;
+}
+
+AXIS2_EXTERN axiom_node_t * AXIS2_CALL
+savan_util_create_subscriber_node(
+    const axutil_env_t *env,
+    savan_subscriber_t *subscriber,
+    axiom_node_t *parent_node)
+{
+       axiom_attribute_t *dialect = NULL;
+    axiom_namespace_t *ns = NULL;
+    axiom_node_t *sub_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* 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;
+    axis2_char_t *endto = NULL;
+    axis2_char_t *notify = NULL;
+    axis2_char_t *filter = NULL;
+    axis2_char_t *filter_dialect = NULL;
+    axis2_char_t *expires = NULL;
+    axis2_endpoint_ref_t *endpoint_ref = NULL;
+
+    AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[savan] 
Entry:savan_util_create_subscriber_node");
+    if(!subscriber)
+    {
+        axutil_error_set_status_code(env->error, AXIS2_FAILURE);
+        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan] Subscriber structure 
passed is NULL");
+        return NULL;
+    }
+
+    endpoint_ref = savan_subscriber_get_end_to(subscriber, env);
+    endto = (axis2_char_t *) axis2_endpoint_ref_get_address(endpoint_ref, env);
+    endpoint_ref = savan_subscriber_get_notify_to(subscriber, env);
+    notify = (axis2_char_t *) axis2_endpoint_ref_get_address(endpoint_ref, 
env);
+    filter = savan_subscriber_get_filter(subscriber, env);
+    filter_dialect = savan_subscriber_get_filter_dialect(subscriber, env);
+    expires = savan_subscriber_get_expires(subscriber, env);
+
+    /* create the body of the Subscribe request */
+    ns = axiom_namespace_create (env, EVENTING_NAMESPACE, EVENTING_NS_PREFIX);
+    sub_elem = axiom_element_create(env, parent_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);
+
+       if(!filter_dialect) 
+       {
+               dialect = axiom_attribute_create(env, "Dialect", 
DEFAULT_FILTER_DIALECT, NULL);
+       }
+       else
+       {
+               dialect = axiom_attribute_create(env, "Dialect", 
filter_dialect, NULL);
+       }
+
+       axiom_element_add_attribute(filter_elem, env, dialect ,filter_node);
+
+    AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[savan] 
Exit:savan_util_create_subscriber_node");
+    return sub_node;
+}
+


Reply via email to