| /* |
| * 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_wsdl_extensible_component.h> |
| |
| /** |
| * @brief Wsdl extensible component struct impl |
| * Wsdl extensible component |
| */ |
| typedef struct axis2_wsdl_extensible_component_impl |
| { |
| axis2_wsdl_extensible_component_t extensible_component; |
| |
| /** |
| * Field features |
| */ |
| axis2_linked_list_t *features; |
| |
| /** |
| * Field properties |
| */ |
| axis2_linked_list_t *properties; |
| |
| } axis2_wsdl_extensible_component_impl_t; |
| |
| #define AXIS2_INTF_TO_IMPL(extensible_component) \ |
| ((axis2_wsdl_extensible_component_impl_t *)extensible_component) |
| |
| /************************* Function prototypes ********************************/ |
| |
| axis2_status_t AXIS2_CALL |
| axis2_wsdl_extensible_component_free ( |
| axis2_wsdl_extensible_component_t *extensible_component, |
| axis2_env_t **env); |
| |
| axis2_status_t AXIS2_CALL |
| axis2_wsdl_extensible_component_add_feature( |
| axis2_wsdl_extensible_component_t *extensible_component, |
| axis2_env_t **env, |
| axis2_wsdl_feature_t *wsdl_feature); |
| |
| axis2_linked_list_t *AXIS2_CALL |
| axis2_wsdl_extensible_component_get_features( |
| axis2_wsdl_extensible_component_t *extensible_component, |
| axis2_env_t **env); |
| |
| axis2_status_t AXIS2_CALL |
| axis2_wsdl_extensible_component_add_property( |
| axis2_wsdl_extensible_component_t *extensible_component, |
| axis2_env_t **env, |
| axis2_wsdl_property_t *wsdl_property); |
| |
| axis2_linked_list_t *AXIS2_CALL |
| axis2_wsdl_extensible_component_get_properties( |
| axis2_wsdl_extensible_component_t *extensible_component, |
| axis2_env_t **env); |
| |
| /************************** End of function prototypes ************************/ |
| |
| axis2_wsdl_extensible_component_t * AXIS2_CALL |
| axis2_wsdl_extensible_component_create (axis2_env_t **env) |
| { |
| axis2_wsdl_extensible_component_impl_t *extensible_component_impl = NULL; |
| |
| AXIS2_ENV_CHECK(env, NULL); |
| |
| extensible_component_impl = (axis2_wsdl_extensible_component_impl_t *) |
| AXIS2_MALLOC((*env)->allocator, sizeof(axis2_wsdl_extensible_component_impl_t)); |
| |
| |
| if(NULL == extensible_component_impl) |
| { |
| AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); |
| return NULL; |
| } |
| |
| extensible_component_impl->extensible_component.ops = NULL; |
| extensible_component_impl->properties = NULL; |
| extensible_component_impl->features = NULL; |
| extensible_component_impl->extensible_component.wsdl_component = NULL; |
| |
| extensible_component_impl->features = axis2_linked_list_create(env); |
| if(NULL == extensible_component_impl->features) |
| { |
| axis2_wsdl_extensible_component_free(&(extensible_component_impl-> |
| extensible_component), env); |
| AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); |
| return NULL; |
| } |
| |
| extensible_component_impl->properties = axis2_linked_list_create(env); |
| if(NULL == extensible_component_impl->properties) |
| { |
| axis2_wsdl_extensible_component_free(&(extensible_component_impl-> |
| extensible_component), env); |
| AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); |
| return NULL; |
| } |
| |
| extensible_component_impl->extensible_component.wsdl_component = |
| axis2_wsdl_component_create(env); |
| if(NULL == extensible_component_impl->extensible_component.wsdl_component) |
| { |
| axis2_wsdl_extensible_component_free(&(extensible_component_impl-> |
| extensible_component), env); |
| AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); |
| return NULL; |
| } |
| |
| |
| extensible_component_impl->extensible_component.ops = |
| AXIS2_MALLOC ((*env)->allocator, sizeof(axis2_wsdl_extensible_component_ops_t)); |
| if(NULL == extensible_component_impl->extensible_component.ops) |
| { |
| axis2_wsdl_extensible_component_free(&(extensible_component_impl-> |
| extensible_component), env); |
| AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); |
| return NULL; |
| } |
| |
| extensible_component_impl->extensible_component.ops->free = |
| axis2_wsdl_extensible_component_free; |
| extensible_component_impl->extensible_component.ops->add_feature = |
| axis2_wsdl_extensible_component_add_feature; |
| extensible_component_impl->extensible_component.ops->get_features = |
| axis2_wsdl_extensible_component_get_features; |
| extensible_component_impl->extensible_component.ops->add_property = |
| axis2_wsdl_extensible_component_add_property; |
| extensible_component_impl->extensible_component.ops->get_properties = |
| axis2_wsdl_extensible_component_get_properties; |
| |
| |
| return &(extensible_component_impl->extensible_component); |
| } |
| |
| /***************************Function implementation****************************/ |
| |
| axis2_status_t AXIS2_CALL |
| axis2_wsdl_extensible_component_free ( |
| axis2_wsdl_extensible_component_t *extensible_component, |
| axis2_env_t **env) |
| { |
| axis2_wsdl_extensible_component_impl_t *extensible_component_impl = NULL; |
| |
| AXIS2_ENV_CHECK(env, AXIS2_FAILURE); |
| |
| extensible_component_impl = AXIS2_INTF_TO_IMPL(extensible_component); |
| |
| if(NULL != extensible_component->ops) |
| { |
| AXIS2_FREE((*env)->allocator, extensible_component->ops); |
| extensible_component->ops = NULL; |
| } |
| |
| if(NULL != extensible_component_impl->features) |
| { |
| void *val = NULL; |
| int i = 0; |
| for (i = 0; i < AXIS2_LINKED_LIST_SIZE(extensible_component_impl->features, env); i++) |
| { |
| axis2_wsdl_feature_t *feature = NULL; |
| feature = AXIS2_LINKED_LIST_GET(extensible_component_impl->features, env, i); |
| |
| feature = (axis2_wsdl_feature_t *) val; |
| if (feature) |
| AXIS2_WSDL_FEATURE_FREE (feature, env); |
| |
| val = NULL; |
| feature = NULL; |
| |
| } |
| AXIS2_LINKED_LIST_FREE(extensible_component_impl->features, env); |
| extensible_component_impl->features = NULL; |
| } |
| |
| if(NULL != extensible_component_impl->properties) |
| { |
| void *val = NULL; |
| int i = 0; |
| for (i = 0; i < AXIS2_LINKED_LIST_SIZE(extensible_component_impl->properties, env); i++) |
| { |
| axis2_wsdl_property_t *property = NULL; |
| property = AXIS2_LINKED_LIST_GET(extensible_component_impl->properties, env, i); |
| |
| property = (axis2_wsdl_property_t *) val; |
| if (property) |
| AXIS2_WSDL_PROPERTY_FREE(property, env); |
| |
| val = NULL; |
| property = NULL; |
| |
| } |
| AXIS2_LINKED_LIST_FREE(extensible_component_impl->properties, env); |
| extensible_component_impl->properties = NULL; |
| } |
| |
| if(NULL != extensible_component->wsdl_component) |
| { |
| AXIS2_WSDL_COMPONENT_FREE(extensible_component->wsdl_component, env); |
| extensible_component->wsdl_component = NULL; |
| } |
| |
| if(extensible_component_impl) |
| AXIS2_FREE((*env)->allocator, extensible_component_impl); |
| extensible_component_impl = NULL; |
| |
| return AXIS2_SUCCESS; |
| } |
| |
| axis2_status_t AXIS2_CALL |
| axis2_wsdl_extensible_component_add_feature( |
| axis2_wsdl_extensible_component_t *extensible_component, |
| axis2_env_t **env, |
| axis2_wsdl_feature_t *wsdl_feature) |
| { |
| axis2_wsdl_extensible_component_impl_t *extensible_component_impl = NULL; |
| |
| AXIS2_ENV_CHECK(env, AXIS2_FAILURE); |
| AXIS2_PARAM_CHECK((*env)->error, wsdl_feature, AXIS2_FAILURE); |
| |
| extensible_component_impl = AXIS2_INTF_TO_IMPL(extensible_component); |
| |
| if (NULL == extensible_component_impl->features) |
| { |
| extensible_component_impl->features = axis2_linked_list_create(env); |
| if(!extensible_component_impl->features) |
| return AXIS2_FAILURE; |
| } |
| |
| return AXIS2_LINKED_LIST_ADD(extensible_component_impl->features, env, wsdl_feature); |
| } |
| |
| axis2_linked_list_t *AXIS2_CALL |
| axis2_wsdl_extensible_component_get_features( |
| axis2_wsdl_extensible_component_t *extensible_component, |
| axis2_env_t **env) |
| { |
| AXIS2_ENV_CHECK(env, NULL); |
| |
| return AXIS2_INTF_TO_IMPL(extensible_component)->features; |
| } |
| |
| axis2_status_t AXIS2_CALL |
| axis2_wsdl_extensible_component_add_property( |
| axis2_wsdl_extensible_component_t *extensible_component, |
| axis2_env_t **env, |
| axis2_wsdl_property_t *wsdl_property) |
| { |
| axis2_wsdl_extensible_component_impl_t *extensible_component_impl = NULL; |
| |
| AXIS2_ENV_CHECK(env, AXIS2_FAILURE); |
| AXIS2_PARAM_CHECK((*env)->error, wsdl_property, AXIS2_FAILURE); |
| |
| extensible_component_impl = AXIS2_INTF_TO_IMPL(extensible_component); |
| |
| if (NULL == extensible_component_impl->properties) |
| { |
| extensible_component_impl->properties = axis2_linked_list_create(env); |
| if(!extensible_component_impl->properties) |
| return AXIS2_FAILURE; |
| } |
| |
| return AXIS2_LINKED_LIST_ADD(extensible_component_impl->features, env, wsdl_property); |
| } |
| |
| axis2_linked_list_t *AXIS2_CALL |
| axis2_wsdl_extensible_component_get_properties( |
| axis2_wsdl_extensible_component_t *extensible_component, |
| axis2_env_t **env) |
| { |
| AXIS2_ENV_CHECK(env, NULL); |
| |
| return AXIS2_INTF_TO_IMPL(extensible_component)->properties; |
| } |