You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by na...@apache.org on 2006/09/01 14:00:35 UTC

svn commit: r439282 - in /webservices/axis2/trunk/c/util: include/axis2_properties.h src/properties.c test/unit/util/util_test.c test/unit/util/util_test.h

Author: nandika
Date: Fri Sep  1 05:00:34 2006
New Revision: 439282

URL: http://svn.apache.org/viewvc?rev=439282&view=rev
Log:
adding files in jira 231. thanks to dimuthu

Added:
    webservices/axis2/trunk/c/util/include/axis2_properties.h
    webservices/axis2/trunk/c/util/src/properties.c
Modified:
    webservices/axis2/trunk/c/util/test/unit/util/util_test.c
    webservices/axis2/trunk/c/util/test/unit/util/util_test.h

Added: webservices/axis2/trunk/c/util/include/axis2_properties.h
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/util/include/axis2_properties.h?rev=439282&view=auto
==============================================================================
--- webservices/axis2/trunk/c/util/include/axis2_properties.h (added)
+++ webservices/axis2/trunk/c/util/include/axis2_properties.h Fri Sep  1 05:00:34 2006
@@ -0,0 +1,165 @@
+/*
+ * 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.
+ */
+
+#ifndef AXIS2_PROPERTIES_H
+#define AXIS2_PROPERTIES_H
+
+#include <axis2_utils_defines.h>
+#include <axis2_error.h>
+#include <axis2_env.h>
+#include <axis2_hash.h>
+#include <stdio.h>
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+    
+typedef struct axis2_properties axis2_properties_t;
+typedef struct axis2_properties_ops axis2_properties_ops_t;
+    
+/**
+ * @defgroup axis2_properties properties
+ * @ingroup axis2_util 
+ * @{
+ */
+
+/** 
+ * @brief properties ops struct
+ * Encapsulator struct for ops of axis2_properties_ops
+ */
+AXIS2_DECLARE_DATA struct axis2_properties_ops
+{
+   /**
+    * free w2c_properties.
+    * @param  properties pointer to properties struct
+    * @param  env Environment. MUST NOT be NULL
+    * @return status of the op. AXIS2_SUCCESS on success
+    *     else AXIS2_FAILURE
+    */
+    axis2_status_t (AXIS2_CALL *
+    free) (axis2_properties_t *properties, 
+            const axis2_env_t *env);
+
+   /**
+    * get string value for property with specified key.
+    * @param  properties pointer to properties struct
+    * @param  env Environment. MUST NOT be NULL
+    * @param  key MUST NOT be NULL
+    * @return value of the property
+    */
+    axis2_char_t* (AXIS2_CALL *
+    get_property) (axis2_properties_t *properties,
+                const axis2_env_t *env,
+                axis2_char_t *key);
+   /**
+    * set a property ( key, value) pair.
+    * @param  properties pointer to properties struct
+    * @param  env Environment. MUST NOT be NULL
+    * @param  key Property Key. MUST NOT be NULL
+    * @param  value Property Value
+    * @return status of the op. AXIS2_SUCCESS on success
+    *     else AXIS2_FAILURE
+    */
+    axis2_status_t (AXIS2_CALL *
+    set_property) (axis2_properties_t *properties,
+                 const axis2_env_t *env,
+                 axis2_char_t *key,
+                 axis2_char_t *value);
+   /**
+    * retrieve the hash with all the properties
+    * @param  properties pointer to properties struct
+    * @param  env Environment. MUST NOT be NULL
+    * @return hash (key,value)
+    */
+    axis2_hash_t* (AXIS2_CALL *
+    get_all)( axis2_properties_t *properties,
+                const axis2_env_t *env);
+
+   /**
+    * load properties
+    * @param  properties pointer to properties struct
+    * @param  env Environment. MUST NOT be NULL
+    * @param  input Input Stream. MUST NOT be NULL
+    * @return status of the op. AXIS2_SUCCESS on success
+    *     else AXIS2_FAILURE
+    */
+    axis2_status_t (AXIS2_CALL *
+    load)(axis2_properties_t *properties,
+                 const axis2_env_t *env,
+                 FILE *input);
+  
+   /**
+    * store properties
+    * @param  properties pointer to properties struct
+    * @param  env Environment. MUST NOT be NULL
+    * @param  ouput Output Stream. MUST NOT be NULL
+    * @return status of the op. AXIS2_SUCCESS on success
+    *     else AXIS2_FAILURE
+    */
+    axis2_status_t (AXIS2_CALL *
+    store)(axis2_properties_t *properites,
+                const axis2_env_t *env,
+                FILE *output);
+};
+    
+     
+/** 
+ * @brief
+ */ 
+AXIS2_DECLARE_DATA struct axis2_properties
+{
+   axis2_properties_ops_t *ops;
+};
+
+/**
+ * create new properties
+ * @return properties newly created properties
+ */
+AXIS2_EXTERN axis2_properties_t * AXIS2_CALL
+axis2_properties_create(const axis2_env_t *env);
+
+/*************************** Function macros **********************************/
+
+#define AXIS2_PROPERTIES_FREE(properties, env) \
+      ((properties)->ops->free (properties, env))
+
+#define AXIS2_PROPERTIES_GET_PROPERTY(properties, env, key) \
+      ((properties)->ops->get_property(properties, env, key))  
+
+#define AXIS2_PROPERTIES_SET_PROPERTY(properties, env, key, value) \
+      ((properties)->ops->set_property(properties, env, key, value))  
+
+#define AXIS2_PROPERTIES_GET_ALL(properties, env) \
+      ((properties)->ops->get_all(properties, env))  
+
+#define AXIS2_PROPERTIES_LOAD(properties, env, input) \
+      ((properties)->ops->load(properties, env, input)) 
+
+#define AXIS2_PROPERTIES_STORE(properties, env, output) \
+      ((properties)->ops->store(properties, env, output))
+         
+/*************************** End of function macros ***************************/
+
+
+
+/** @} */
+    
+#ifdef __cplusplus
+}
+#endif
+
+#endif  /* AXIS2_PROPERTIES_H */

Added: webservices/axis2/trunk/c/util/src/properties.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/util/src/properties.c?rev=439282&view=auto
==============================================================================
--- webservices/axis2/trunk/c/util/src/properties.c (added)
+++ webservices/axis2/trunk/c/util/src/properties.c Fri Sep  1 05:00:34 2006
@@ -0,0 +1,392 @@
+/*
+ * 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 <axis2_properties.h>
+#include <axis2_string.h>
+#include <axis2_utils.h>
+
+typedef struct axis2_properties_impl
+{
+    axis2_properties_t properties;
+    axis2_hash_t *prop_hash; 
+}axis2_properties_impl_t;
+
+#define AXIS2_INTF_TO_IMPL(properties) \
+    ((axis2_properties_impl_t *) properties)
+
+axis2_status_t AXIS2_CALL
+axis2_properties_free (axis2_properties_t *properties, 
+                    const axis2_env_t *env); 
+
+axis2_char_t* AXIS2_CALL
+axis2_properties_get_property(axis2_properties_t *properties,
+                            const axis2_env_t *env,
+                            axis2_char_t *key);
+
+axis2_hash_t* AXIS2_CALL
+axis2_properties_get_all(axis2_properties_t *properties,
+                            const axis2_env_t *env);
+
+axis2_status_t AXIS2_CALL
+axis2_properties_set_property(axis2_properties_t *properties,
+                            const axis2_env_t *env,
+                            axis2_char_t *key,
+                            axis2_char_t *value);
+
+axis2_status_t AXIS2_CALL
+axis2_properties_load(axis2_properties_t *properties,
+                            const axis2_env_t *env,
+                            FILE *input);
+
+axis2_status_t AXIS2_CALL
+axis2_properties_store(axis2_properties_t *properties,
+                            const axis2_env_t *env,
+                            FILE *output);
+
+axis2_char_t*
+axis2_properties_read_next ( axis2_char_t* cur );
+
+axis2_char_t*
+axis2_properties_trunk_and_dup( axis2_char_t* start, axis2_char_t* end,
+                                   const axis2_env_t* env );
+
+axis2_char_t*
+axis2_properties_read( FILE* input,
+                             const axis2_env_t* env );
+
+/************************** End of function prototypes ************************/
+
+axis2_properties_t *AXIS2_CALL 
+axis2_properties_create(const axis2_env_t *env)
+{
+    axis2_properties_impl_t *properties_impl = NULL;
+    
+    AXIS2_ENV_CHECK(env, NULL);
+   
+    properties_impl = (axis2_properties_impl_t *) AXIS2_MALLOC(env->allocator, 
+        sizeof(axis2_properties_impl_t));
+   
+    if(NULL == properties_impl)
+    {
+        AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); 
+        return NULL;
+    }
+    properties_impl->prop_hash= axis2_hash_make(env);
+    
+    properties_impl->properties.ops = 
+      AXIS2_MALLOC (env->allocator, sizeof(axis2_properties_ops_t));
+    if(NULL == properties_impl->properties.ops)
+    {
+        axis2_properties_free(&(properties_impl->properties), env);
+      AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+        return NULL;
+    }
+    
+    properties_impl->properties.ops->free =  axis2_properties_free;
+    properties_impl->properties.ops->get_property= axis2_properties_get_property;
+    properties_impl->properties.ops->set_property= axis2_properties_set_property;
+    properties_impl->properties.ops->load= axis2_properties_load;
+    properties_impl->properties.ops->store= axis2_properties_store;
+    properties_impl->properties.ops->get_all= axis2_properties_get_all;
+    return &(properties_impl->properties);
+}
+
+/***************************Function implementation****************************/
+
+axis2_status_t AXIS2_CALL 
+axis2_properties_free (axis2_properties_t *properties, 
+                    const axis2_env_t *env)
+{
+    axis2_properties_impl_t *properties_impl = NULL;
+    axis2_char_t *key = NULL;
+    axis2_char_t *value = NULL;
+    axis2_hash_index_t *hi = NULL;
+
+    AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+    properties_impl = AXIS2_INTF_TO_IMPL(properties);
+    
+    if(properties_impl->prop_hash)
+    {
+        for (hi = axis2_hash_first( properties_impl->prop_hash, env);
+                            hi; hi = axis2_hash_next(env, hi))
+        {
+            axis2_hash_this(hi, (void*)&key, NULL, (void*)&value);
+            if (key)
+                AXIS2_FREE ( env-> allocator, key);
+            if (value)
+                AXIS2_FREE ( env-> allocator, value);
+        }
+        axis2_hash_free( properties_impl->prop_hash, env);
+    }
+    
+    if(properties_impl->properties.ops)
+    {
+        AXIS2_FREE(env->allocator, properties_impl->properties.ops);
+        properties_impl->properties.ops = NULL;
+    }
+    
+    if(properties_impl)
+    {
+        AXIS2_FREE(env->allocator, properties_impl);
+        properties_impl = NULL;
+    }
+    return AXIS2_SUCCESS;
+}
+
+axis2_char_t* AXIS2_CALL
+axis2_properties_get_property(axis2_properties_t *properties,
+                            const axis2_env_t *env,
+                            axis2_char_t *key)
+{
+    axis2_properties_impl_t *properties_impl = NULL;
+
+    AXIS2_ENV_CHECK(env, NULL);
+    AXIS2_PARAM_CHECK(env-> error, key, NULL);
+    
+    properties_impl = AXIS2_INTF_TO_IMPL(properties);
+
+    return axis2_hash_get( properties_impl-> prop_hash,
+            key, AXIS2_HASH_KEY_STRING);
+}
+
+axis2_status_t AXIS2_CALL
+axis2_properties_set_property(axis2_properties_t *properties,
+                            const axis2_env_t *env,
+                            axis2_char_t *key,
+                            axis2_char_t *value)
+{
+    axis2_properties_impl_t *properties_impl = NULL;
+
+    AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+    AXIS2_PARAM_CHECK(env-> error, key, AXIS2_FAILURE);
+    
+    properties_impl = AXIS2_INTF_TO_IMPL(properties);
+
+    axis2_hash_set( properties_impl-> prop_hash, key,
+            AXIS2_HASH_KEY_STRING, value);
+    return AXIS2_SUCCESS;
+}
+
+axis2_hash_t* AXIS2_CALL
+axis2_properties_get_all(axis2_properties_t *properties,
+                            const axis2_env_t *env)
+{
+    axis2_properties_impl_t *properties_impl = NULL;
+    AXIS2_ENV_CHECK(env, NULL);
+    properties_impl = AXIS2_INTF_TO_IMPL(properties);
+
+    return properties_impl-> prop_hash;
+}
+
+axis2_status_t AXIS2_CALL
+axis2_properties_store(axis2_properties_t *properties,
+                            const axis2_env_t *env,
+                            FILE *output)
+{
+    axis2_properties_impl_t *properties_impl = NULL;
+    axis2_hash_index_t *hi = NULL;
+    axis2_char_t *key = NULL;
+    axis2_char_t *value = NULL;
+    
+    AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+    AXIS2_PARAM_CHECK(env-> error, output, AXIS2_FAILURE);
+    properties_impl = AXIS2_INTF_TO_IMPL(properties);
+
+
+    if(properties_impl->prop_hash)
+    {
+        for (hi = axis2_hash_first( properties_impl->prop_hash, env);
+                            hi; hi = axis2_hash_next(env, hi))
+        {
+            axis2_hash_this(hi, (void*)&key, NULL, (void*)&value);
+            if (key)
+            {
+                if (NULL == value)
+                {
+                    value = AXIS2_STRDUP("", env); 
+                }
+                fprintf( output, "%s=%s\n", key, value);
+            }
+        }
+    }
+    return AXIS2_SUCCESS;
+}
+
+axis2_status_t AXIS2_CALL
+axis2_properties_load(axis2_properties_t *properties,
+                            const axis2_env_t *env,
+                            FILE *input)
+{
+    axis2_properties_impl_t *properties_impl = NULL;
+    axis2_char_t *cur = NULL;
+    axis2_char_t *tag = NULL;
+    const int LINE_STARTED = -1;
+    const int LINE_MIDWAY= 0;
+    const int EQUAL_FOUND = 1;
+    const int LINE_HALFWAY= 2;
+    axis2_char_t *key = NULL;
+    axis2_hash_t *prop_hash = NULL;
+    axis2_char_t *buffer = NULL;
+    axis2_char_t loginfo[1024];
+
+    AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+    AXIS2_PARAM_CHECK(env-> error, input, AXIS2_FAILURE);
+
+    properties_impl = AXIS2_INTF_TO_IMPL(properties);
+    prop_hash = properties_impl-> prop_hash;
+
+    buffer = axis2_properties_read(input,env );
+
+    if ( buffer == NULL )
+    {
+        sprintf( loginfo, "error in reading file\n");
+        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+                                            loginfo);
+        AXIS2_FREE ( env-> allocator, buffer );
+        return AXIS2_FAILURE;
+    }
+
+
+    int status = LINE_STARTED;
+    
+    for (cur =axis2_properties_read_next(buffer); *cur ;
+                       cur = axis2_properties_read_next( ++cur) )
+    {
+        if (*cur == '\r' )
+        {
+            *cur='\0';
+        }
+        else if ( *cur != '\0' && *cur != '\n' && status == LINE_STARTED )
+        {
+            tag = cur;
+            status = LINE_MIDWAY;
+        }
+        /* equal found just create a property */
+        else if ( *cur =='=' &&  status == LINE_MIDWAY)
+        {
+            *cur = '\0';
+            if ( status != LINE_MIDWAY )
+            {
+                sprintf( loginfo, "equal apear in wrong place around %s\n",tag);
+                AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+                                            loginfo);
+                AXIS2_FREE ( env-> allocator, buffer );
+                return AXIS2_FAILURE;
+            }
+            status = EQUAL_FOUND;
+            key =  axis2_properties_trunk_and_dup ( tag, cur, env );
+        }
+        /* right next to the equal found */
+        else if ( status == EQUAL_FOUND )
+        {
+            tag = cur;
+            status = LINE_HALFWAY;
+        }
+        
+        else if ( *cur =='\n' )
+        {
+            *cur ='\0';
+            if ( status == LINE_HALFWAY )
+            {
+                 tag =  axis2_properties_trunk_and_dup ( tag, cur, env );
+                 axis2_hash_set( prop_hash,  
+                                  key, AXIS2_HASH_KEY_STRING, tag);
+            }
+            status = LINE_STARTED;
+        }
+    }
+    if (status == LINE_HALFWAY )
+    {
+         *cur ='\0';
+         tag =  axis2_properties_trunk_and_dup ( tag, cur, env );
+         axis2_hash_set( prop_hash,  
+                           key, AXIS2_HASH_KEY_STRING, tag);
+         status = LINE_STARTED;
+    }
+    if ( status != LINE_STARTED )
+    {
+         sprintf( loginfo, "error parsing properties\n");
+         AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+                                            loginfo);
+         AXIS2_FREE ( env-> allocator, buffer );
+         return AXIS2_FAILURE;
+    }
+    AXIS2_FREE ( env-> allocator, buffer );
+    return AXIS2_SUCCESS;
+}
+
+
+axis2_char_t*
+axis2_properties_read_next ( axis2_char_t* cur )
+{
+   /* ignore comment */
+   if ( *cur == '#' )
+   {
+       for ( ;*cur !='\n' && *cur !='\0'; cur ++ );
+   }
+   /* check '\\''\n' case */
+   if ( *cur == '\\' && *(cur+1) == '\n' )
+   {
+       /* ignore two axis2_char_ts */
+       *(cur++) = ' ';
+       *(cur++) = ' ';
+   }
+   return cur;
+}
+
+axis2_char_t*
+axis2_properties_trunk_and_dup( axis2_char_t* start, axis2_char_t* end,
+                                   const axis2_env_t* env )
+{
+    for ( ; *start == ' '; start ++ ); /* remove front spaces */
+    for ( end --; *end == ' '; end -- ); /* remove rear spaces */
+    *(++end ) = '\0';
+    start = (axis2_char_t*)AXIS2_STRDUP ( start, env );
+    return start;
+}
+
+axis2_char_t*
+axis2_properties_read( FILE* input,
+                             const axis2_env_t* env )
+{
+    const int MAX_SIZE=1000;
+    int nread = 0;
+    axis2_char_t* out_stream = NULL;
+    int ncount = 0;
+
+    out_stream = (axis2_char_t*) AXIS2_MALLOC ( env-> allocator,
+                                   sizeof(axis2_char_t)* MAX_SIZE );
+    if (out_stream == NULL )
+    {
+        return NULL;
+    }
+
+    do{
+        nread = fread ( out_stream + ncount, sizeof(axis2_char_t), MAX_SIZE, input);
+        ncount += nread;
+        out_stream = (axis2_char_t*) AXIS2_REALLOC( env-> allocator, out_stream,
+                    sizeof(axis2_char_t)* (MAX_SIZE + ncount ) );
+        if ( out_stream == NULL )
+        {
+            return NULL;
+        }
+    }
+    while ( nread == MAX_SIZE );
+
+    out_stream[ncount] = '\0';
+    return out_stream;
+}
+

Modified: webservices/axis2/trunk/c/util/test/unit/util/util_test.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/util/test/unit/util/util_test.c?rev=439282&r1=439281&r2=439282&view=diff
==============================================================================
--- webservices/axis2/trunk/c/util/test/unit/util/util_test.c (original)
+++ webservices/axis2/trunk/c/util/test/unit/util/util_test.c Fri Sep  1 05:00:34 2006
@@ -41,8 +41,6 @@
     SUITE_ADD_TEST(suite, Testaxis2_uri_get_path); 
     /* Samisa - need to remove this as we run make check before make install
     SUITE_ADD_TEST(suite, Testaxis2_dir_handler_list_dir); */
-    SUITE_ADD_TEST(suite, Test_properties); 
-    SUITE_ADD_TEST(suite, Test_date_time); 
 
     return suite;
 }

Modified: webservices/axis2/trunk/c/util/test/unit/util/util_test.h
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/util/test/unit/util/util_test.h?rev=439282&r1=439281&r2=439282&view=diff
==============================================================================
--- webservices/axis2/trunk/c/util/test/unit/util/util_test.h (original)
+++ webservices/axis2/trunk/c/util/test/unit/util/util_test.h Fri Sep  1 05:00:34 2006
@@ -29,8 +29,6 @@
 #include "util_url_test.h"
 #include "util_string_test.h"
 #include "util_uri_test.h"
-#include "util_properties_test.h"
-#include "util_date_time_test.h"
 
 CuSuite* axis2_utilGetSuite();
 



---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org