| /* |
| * 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_om_node.h> |
| #include <axis2_om_element.h> |
| #include <axis2_om_text.h> |
| #include <axis2_om_comment.h> |
| #include <axis2_om_processing_instruction.h> |
| #include <axis2_om_doctype.h> |
| #include <axis2_om_document.h> |
| #include <axis2_om_stax_builder.h> |
| |
| |
| /*************************** function prototypes ******************************************/ |
| |
| axis2_status_t AXIS2_CALL |
| axis2_om_node_free_tree (axis2_om_node_t * om_node, |
| axis2_env_t **env); |
| |
| |
| axis2_status_t AXIS2_CALL |
| axis2_om_node_add_child (axis2_om_node_t *om_node, |
| axis2_env_t **env, |
| axis2_om_node_t * child); |
| |
| axis2_om_node_t * AXIS2_CALL |
| axis2_om_node_detach (axis2_om_node_t *om_node, |
| axis2_env_t **env); |
| |
| |
| axis2_status_t AXIS2_CALL |
| axis2_om_node_set_parent (axis2_om_node_t * om_node, |
| axis2_env_t **env, |
| axis2_om_node_t * parent); |
| |
| axis2_status_t AXIS2_CALL |
| axis2_om_node_insert_sibling_after (axis2_om_node_t *om_node, |
| axis2_env_t **env, |
| axis2_om_node_t *node_to_insert); |
| |
| axis2_status_t AXIS2_CALL |
| axis2_om_node_insert_sibling_before (axis2_om_node_t *om_node, |
| axis2_env_t **env, |
| axis2_om_node_t *node_to_insert); |
| |
| |
| axis2_om_node_t * AXIS2_CALL |
| axis2_om_node_iterator_get_first_child(axis2_om_node_t *om_node, |
| axis2_env_t **env); |
| |
| |
| |
| axis2_om_node_t * AXIS2_CALL |
| axis2_om_node_iterator_get_next_child (axis2_om_node_t *om_node, |
| axis2_env_t **env); |
| |
| axis2_status_t AXIS2_CALL |
| axis2_om_node_serialize (axis2_om_node_t * om_node, |
| axis2_env_t **env, |
| axis2_om_output_t * om_output); |
| |
| |
| /****************************** accessor mutator *********************************************/ |
| axis2_om_node_t* AXIS2_CALL |
| axis2_om_node_get_parent(axis2_om_node_t *om_node, |
| axis2_env_t **env); |
| |
| axis2_om_node_t* AXIS2_CALL |
| axis2_om_node_get_first_child(axis2_om_node_t *om_node, |
| axis2_env_t **env); |
| |
| axis2_om_node_t* AXIS2_CALL |
| axis2_om_node_get_last_child(axis2_om_node_t *om_node, |
| axis2_env_t **env); |
| |
| axis2_om_node_t* AXIS2_CALL |
| axis2_om_node_get_previous_sibling(axis2_om_node_t *om_node, |
| axis2_env_t **env); |
| |
| axis2_om_node_t* AXIS2_CALL |
| axis2_om_node_get_next_sibling(axis2_om_node_t *om_node, |
| axis2_env_t **env); |
| |
| axis2_om_types_t AXIS2_CALL |
| axis2_om_node_get_node_type(axis2_om_node_t *om_node, |
| axis2_env_t **env); |
| |
| void* AXIS2_CALL |
| axis2_om_node_get_data_element(axis2_om_node_t *om_node, |
| axis2_env_t **env); |
| |
| axis2_status_t AXIS2_CALL |
| axis2_om_node_set_first_child(axis2_om_node_t *om_node, |
| axis2_env_t **env, |
| axis2_om_node_t *first_child); |
| |
| axis2_status_t AXIS2_CALL |
| axis2_om_node_set_last_child(axis2_om_node_t *om_node, |
| axis2_env_t **env, |
| axis2_om_node_t *last_child); |
| |
| axis2_status_t AXIS2_CALL |
| axis2_om_node_set_previous_sibling(axis2_om_node_t *om_node, |
| axis2_env_t **env, |
| axis2_om_node_t *prev_sibling); |
| |
| axis2_status_t AXIS2_CALL |
| axis2_om_node_set_next_sibling(axis2_om_node_t *om_node, |
| axis2_env_t **env, |
| axis2_om_node_t *next_sibling); |
| |
| axis2_status_t AXIS2_CALL |
| axis2_om_node_set_node_type(axis2_om_node_t *om_node, |
| axis2_env_t **env, |
| axis2_om_types_t type); |
| |
| axis2_status_t AXIS2_CALL |
| axis2_om_node_set_data_element(axis2_om_node_t *om_node, |
| axis2_env_t **env, |
| void* data_element); |
| |
| |
| axis2_bool_t AXIS2_CALL |
| axis2_om_node_get_build_status(axis2_om_node_t *om_node, |
| axis2_env_t **env); |
| |
| axis2_status_t AXIS2_CALL |
| axis2_om_node_set_build_status(axis2_om_node_t *om_node, |
| axis2_env_t **env, |
| axis2_bool_t done); |
| axis2_status_t AXIS2_CALL |
| axis2_om_node_set_document(axis2_om_node_t *om_node, |
| axis2_env_t **env, |
| struct axis2_om_document *om_doc); |
| |
| axis2_status_t AXIS2_CALL |
| axis2_om_node_set_builder(axis2_om_node_t *om_node, |
| axis2_env_t **env, |
| axis2_om_stax_builder_t *builder); |
| |
| struct axis2_om_document* AXIS2_CALL |
| axis2_om_node_get_document(axis2_om_node_t *om_node, |
| axis2_env_t **env); |
| |
| axis2_om_node_t* AXIS2_CALL |
| axis2_om_node_build_next(axis2_om_node_t *om_node, |
| axis2_env_t **env); |
| |
| |
| /************************************************************************************/ |
| |
| typedef struct axis2_om_node_impl |
| { |
| axis2_om_node_t om_node; |
| |
| /** document only availble if build through builder */ |
| struct axis2_om_document *om_doc; |
| |
| axis2_om_stax_builder_t *builder; |
| /** parent node */ |
| axis2_om_node_t *parent; |
| /** previous sibling */ |
| axis2_om_node_t *prev_sibling; |
| /** next sibling */ |
| axis2_om_node_t *next_sibling; |
| /** first child */ |
| axis2_om_node_t *first_child; |
| /** last child */ |
| axis2_om_node_t *last_child; |
| /** node type, indicates the type stored in data_element */ |
| axis2_om_types_t node_type; |
| /** done true means that this node is completely built , false otherwise */ |
| int done; |
| |
| /** instances of an om struct, whose type is defined by node type */ |
| void *data_element; |
| |
| }axis2_om_node_impl_t; |
| |
| |
| /****************************** Macro ***************************************/ |
| |
| #define AXIS2_INTF_TO_IMPL(node) ((axis2_om_node_impl_t *)node) |
| |
| |
| |
| /*****************************************************************************/ |
| AXIS2_DECLARE(axis2_om_node_t *) |
| axis2_om_node_create (axis2_env_t **env) |
| { |
| axis2_om_node_impl_t *node = NULL; |
| AXIS2_ENV_CHECK(env,NULL); |
| |
| |
| node = (axis2_om_node_impl_t *) AXIS2_MALLOC ((*env)->allocator, |
| sizeof (axis2_om_node_impl_t)); |
| if (!node) |
| { |
| (*env)->error->error_number = AXIS2_ERROR_NO_MEMORY; |
| return NULL; |
| } |
| node->om_node.ops = (axis2_om_node_ops_t *) AXIS2_MALLOC |
| ((*env)->allocator,sizeof (axis2_om_node_ops_t)); |
| |
| if (!(node->om_node.ops)) |
| { |
| AXIS2_FREE ((*env)->allocator, node); |
| AXIS2_ERROR_SET_ERROR_NUMBER((*env)->error, AXIS2_ERROR_NO_MEMORY); |
| AXIS2_ERROR_SET_STATUS_CODE((*env)->error, AXIS2_FAILURE); |
| return NULL; |
| } |
| |
| node->first_child = NULL; |
| node->last_child = NULL; |
| node->next_sibling = NULL; |
| node->prev_sibling = NULL; |
| node->parent = NULL; |
| node->node_type = AXIS2_OM_INVALID; |
| node->done = AXIS2_FALSE; |
| node->data_element = NULL; |
| node->om_doc = NULL; |
| node->builder = NULL; |
| |
| /* assign fucn pointers */ |
| node->om_node.ops->add_child = axis2_om_node_add_child; |
| node->om_node.ops->free = axis2_om_node_free_tree; |
| node->om_node.ops->detach = axis2_om_node_detach; |
| |
| node->om_node.ops->insert_sibling_after = axis2_om_node_insert_sibling_after; |
| node->om_node.ops->insert_sibling_before = axis2_om_node_insert_sibling_before; |
| node->om_node.ops->set_parent = axis2_om_node_set_parent; |
| node->om_node.ops->serialize = axis2_om_node_serialize; |
| |
| node->om_node.ops->get_first_child = axis2_om_node_get_first_child; |
| node->om_node.ops->get_last_child = axis2_om_node_get_last_child; |
| node->om_node.ops->get_next_sibling = axis2_om_node_get_next_sibling; |
| node->om_node.ops->get_previous_sibling = axis2_om_node_get_previous_sibling; |
| node->om_node.ops->get_parent = axis2_om_node_get_parent ; |
| node->om_node.ops->get_node_type = axis2_om_node_get_node_type; |
| node->om_node.ops->get_build_status = axis2_om_node_get_build_status; |
| node->om_node.ops->get_data_element = axis2_om_node_get_data_element; |
| |
| |
| node->om_node.ops->set_data_element = axis2_om_node_set_data_element; |
| node->om_node.ops->set_first_child = axis2_om_node_set_parent; |
| node->om_node.ops->set_last_child = axis2_om_node_set_last_child; |
| node->om_node.ops->set_previous_sibling = axis2_om_node_set_previous_sibling; |
| node->om_node.ops->set_next_sibling = axis2_om_node_set_next_sibling; |
| node->om_node.ops->set_first_child = axis2_om_node_set_first_child; |
| node->om_node.ops->set_last_child = axis2_om_node_set_last_child; |
| node->om_node.ops->set_node_type = axis2_om_node_set_node_type; |
| node->om_node.ops->set_build_status = axis2_om_node_set_build_status; |
| |
| node->om_node.ops->get_document = axis2_om_node_get_document; |
| node->om_node.ops->set_document = axis2_om_node_set_document; |
| node->om_node.ops->set_builder = axis2_om_node_set_builder; |
| |
| node->om_node.ops->build_next = axis2_om_node_build_next; |
| |
| return &(node->om_node); |
| } |
| |
| /** |
| * This free fucntion will free an om_element and all the children contained in it |
| * before calling this function |
| */ |
| |
| axis2_status_t AXIS2_CALL axis2_om_node_free_tree(axis2_om_node_t *om_node, |
| axis2_env_t **env) |
| { |
| axis2_om_node_impl_t *node_impl = NULL; |
| axis2_om_node_t *child_node = NULL; |
| AXIS2_ENV_CHECK(env,AXIS2_FAILURE); |
| |
| node_impl = AXIS2_INTF_TO_IMPL(om_node); |
| |
| if (node_impl->first_child) |
| { |
| while (node_impl->first_child) |
| { |
| child_node = AXIS2_OM_NODE_DETACH (node_impl->first_child, env); |
| AXIS2_OM_NODE_FREE_TREE ( child_node , env); |
| } |
| } |
| |
| switch (node_impl->node_type) |
| { |
| case AXIS2_OM_ELEMENT: |
| |
| AXIS2_OM_ELEMENT_FREE((axis2_om_element_t*)(node_impl->data_element), env); |
| break; |
| |
| case AXIS2_OM_COMMENT: |
| AXIS2_OM_COMMENT_FREE((axis2_om_comment_t*)(node_impl->data_element), env); |
| break; |
| case AXIS2_OM_DOCTYPE: |
| /*AXIS2_OM_DOCTYPE_FREE((axis2_om_doctype_t*)(node_impl->data_element), env);*/ |
| break; |
| case AXIS2_OM_PROCESSING_INSTRUCTION: |
| AXIS2_OM_PROCESSING_INSTRUCTION_FREE( |
| (axis2_om_processing_instruction_t*)(node_impl->data_element), env); |
| break; |
| case AXIS2_OM_TEXT: |
| AXIS2_OM_TEXT_FREE((axis2_om_text_t*)(node_impl->data_element),env); |
| break; |
| |
| default: |
| break; |
| } |
| |
| AXIS2_FREE ((*env)->allocator, om_node->ops); |
| AXIS2_FREE ((*env)->allocator, AXIS2_INTF_TO_IMPL(om_node)); |
| |
| |
| return AXIS2_SUCCESS; |
| } |
| |
| axis2_status_t AXIS2_CALL |
| axis2_om_node_add_child (axis2_om_node_t *om_node, |
| axis2_env_t **env, |
| axis2_om_node_t *child) |
| { |
| AXIS2_ENV_CHECK(env,AXIS2_FAILURE); |
| AXIS2_PARAM_CHECK((*env)->error, child, AXIS2_FAILURE); |
| |
| if (AXIS2_INTF_TO_IMPL(om_node)->first_child == NULL) |
| { |
| AXIS2_INTF_TO_IMPL(om_node)->first_child = child; |
| } |
| else |
| { |
| axis2_om_node_t *last_sib = NULL; |
| last_sib = AXIS2_INTF_TO_IMPL(om_node)->last_child; |
| if(last_sib) |
| AXIS2_INTF_TO_IMPL(last_sib)->next_sibling = child; |
| AXIS2_INTF_TO_IMPL(child)->prev_sibling = last_sib; |
| } |
| |
| AXIS2_INTF_TO_IMPL(child)->parent = om_node; |
| AXIS2_INTF_TO_IMPL(om_node)->last_child = child; |
| return AXIS2_SUCCESS; |
| } |
| |
| axis2_om_node_t* AXIS2_CALL |
| axis2_om_node_detach (axis2_om_node_t *om_node, |
| axis2_env_t **env) |
| { |
| axis2_om_node_t *parent = NULL; |
| |
| |
| AXIS2_ENV_CHECK(env, NULL); |
| |
| parent = AXIS2_INTF_TO_IMPL(om_node)->parent; |
| |
| AXIS2_PARAM_CHECK((*env)->error,parent,NULL); |
| |
| |
| if (!(AXIS2_INTF_TO_IMPL(om_node)->prev_sibling)) |
| { |
| AXIS2_INTF_TO_IMPL(parent)->first_child = |
| AXIS2_INTF_TO_IMPL(om_node)->next_sibling; |
| } |
| else |
| { |
| axis2_om_node_t *prev_sib = NULL; |
| prev_sib = AXIS2_INTF_TO_IMPL(om_node)->prev_sibling; |
| if(prev_sib) |
| { AXIS2_INTF_TO_IMPL(prev_sib)->next_sibling = |
| AXIS2_INTF_TO_IMPL(om_node)->next_sibling; |
| } |
| } |
| if (AXIS2_INTF_TO_IMPL(om_node)->next_sibling) |
| { |
| axis2_om_node_t *next_sibling = NULL; |
| next_sibling = AXIS2_INTF_TO_IMPL(om_node)->next_sibling; |
| if(next_sibling) |
| AXIS2_INTF_TO_IMPL(next_sibling)->prev_sibling = |
| AXIS2_INTF_TO_IMPL(om_node)->prev_sibling; |
| } |
| |
| AXIS2_INTF_TO_IMPL(om_node)->parent = NULL; |
| return om_node; |
| |
| } |
| |
| axis2_status_t AXIS2_CALL |
| axis2_om_node_set_parent (axis2_om_node_t *om_node, |
| axis2_env_t **env, |
| axis2_om_node_t * parent) |
| { |
| |
| AXIS2_ENV_CHECK(env,AXIS2_FAILURE); |
| AXIS2_PARAM_CHECK((*env)->error, parent, AXIS2_FAILURE); |
| |
| if(!parent) |
| { |
| |
| AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_INVALID_NULL_PARAM, |
| AXIS2_FAILURE); |
| return AXIS2_FAILURE; |
| } |
| |
| |
| if (parent == AXIS2_INTF_TO_IMPL(om_node)->parent) |
| { /* same parent already exist */ |
| return AXIS2_SUCCESS; |
| } |
| /* if a new parent is assigned in place of existing |
| * one first the node should be detached |
| */ |
| if((AXIS2_INTF_TO_IMPL(om_node)->parent)) |
| { |
| axis2_om_node_detach(om_node,env); |
| } |
| AXIS2_INTF_TO_IMPL(om_node)->parent = parent; |
| return AXIS2_SUCCESS; |
| } |
| |
| |
| /** |
| * This will insert a sibling just after the current information item |
| * @param node the node in consideration |
| * @param nodeto_insert the node that will be inserted |
| */ |
| |
| axis2_status_t AXIS2_CALL |
| axis2_om_node_insert_sibling_after (axis2_om_node_t * om_node, |
| axis2_env_t **env, |
| axis2_om_node_t * node_to_insert) |
| { |
| axis2_om_node_t *next_sib = NULL; |
| AXIS2_ENV_CHECK(env, AXIS2_FAILURE); |
| AXIS2_PARAM_CHECK((*env)->error, node_to_insert, AXIS2_FAILURE); |
| |
| AXIS2_INTF_TO_IMPL(node_to_insert)->parent = |
| AXIS2_INTF_TO_IMPL(om_node)->parent; |
| AXIS2_INTF_TO_IMPL(node_to_insert)->prev_sibling = om_node; |
| |
| next_sib = AXIS2_INTF_TO_IMPL(om_node)->next_sibling; |
| |
| if(next_sib) |
| { |
| AXIS2_INTF_TO_IMPL(next_sib)->prev_sibling = node_to_insert; |
| } |
| |
| AXIS2_INTF_TO_IMPL(node_to_insert)->next_sibling = |
| AXIS2_INTF_TO_IMPL(om_node)->next_sibling; |
| AXIS2_INTF_TO_IMPL(om_node)->next_sibling = node_to_insert; |
| return AXIS2_SUCCESS; |
| } |
| |
| axis2_status_t AXIS2_CALL |
| axis2_om_node_insert_sibling_before (axis2_om_node_t *om_node, |
| axis2_env_t **env, |
| axis2_om_node_t * node_to_insert) |
| { |
| axis2_om_node_t *prev_sibling = NULL; |
| |
| AXIS2_ENV_CHECK(env, AXIS2_FAILURE); |
| AXIS2_PARAM_CHECK((*env)->error, node_to_insert, AXIS2_FAILURE); |
| |
| AXIS2_INTF_TO_IMPL(node_to_insert)->parent = |
| AXIS2_INTF_TO_IMPL(om_node)->parent ; |
| |
| AXIS2_INTF_TO_IMPL(node_to_insert)->prev_sibling = |
| AXIS2_INTF_TO_IMPL(om_node)->prev_sibling; |
| AXIS2_INTF_TO_IMPL(node_to_insert)->next_sibling = om_node; |
| prev_sibling = AXIS2_INTF_TO_IMPL(om_node)->prev_sibling; |
| if (!prev_sibling) |
| { |
| axis2_om_node_t *parent = AXIS2_INTF_TO_IMPL(om_node)->parent; |
| AXIS2_INTF_TO_IMPL(parent)->first_child = node_to_insert; |
| } |
| else |
| { |
| axis2_om_node_t *prev_sibling = AXIS2_INTF_TO_IMPL(om_node)->prev_sibling; |
| if(prev_sibling) |
| AXIS2_INTF_TO_IMPL(prev_sibling)->next_sibling = node_to_insert; |
| } |
| AXIS2_INTF_TO_IMPL(om_node)->prev_sibling = node_to_insert; |
| return AXIS2_SUCCESS; |
| } |
| |
| axis2_status_t AXIS2_CALL |
| axis2_om_node_serialize (axis2_om_node_t *om_node, |
| axis2_env_t **env, |
| axis2_om_output_t *om_output) |
| { |
| |
| int status = AXIS2_SUCCESS; |
| AXIS2_ENV_CHECK(env, AXIS2_FAILURE); |
| AXIS2_PARAM_CHECK((*env)->error,om_output,AXIS2_FAILURE); |
| |
| |
| switch (AXIS2_INTF_TO_IMPL(om_node)->node_type) |
| { |
| case AXIS2_OM_ELEMENT: |
| status = AXIS2_OM_ELEMENT_SERIALIZE_START_PART( |
| (axis2_om_element_t *)(AXIS2_INTF_TO_IMPL(om_node)->data_element), |
| env, |
| om_output); |
| |
| if (status != AXIS2_SUCCESS) |
| return status; |
| break; |
| case AXIS2_OM_TEXT: |
| status = AXIS2_OM_TEXT_SERIALIZE ( |
| (axis2_om_text_t*)(AXIS2_INTF_TO_IMPL(om_node)->data_element), |
| env, om_output); |
| if(status != AXIS2_SUCCESS) |
| return status; |
| break; |
| case AXIS2_OM_COMMENT: |
| status = AXIS2_OM_COMMENT_SERIALIZE( |
| (axis2_om_comment_t*)(AXIS2_INTF_TO_IMPL(om_node)->data_element), |
| env, om_output); |
| if( status != AXIS2_SUCCESS) |
| return status; |
| |
| break; |
| |
| case AXIS2_OM_DOCTYPE: |
| status = AXIS2_OM_DOCTYPE_SERIALIZE( |
| (axis2_om_doctype_t*)(AXIS2_INTF_TO_IMPL(om_node)->data_element), |
| env, om_output); |
| if( status != AXIS2_SUCCESS) |
| return status; |
| break; |
| |
| case AXIS2_OM_PROCESSING_INSTRUCTION: |
| status = AXIS2_OM_PROCESSING_INSTRUCTION_SERIALIZE( |
| (axis2_om_processing_instruction_t*) |
| (AXIS2_INTF_TO_IMPL(om_node)->data_element), env, om_output); |
| if( status != AXIS2_SUCCESS) |
| return status; |
| break; |
| |
| default: |
| break; |
| } |
| |
| /* serialize children of this node */ |
| if(AXIS2_INTF_TO_IMPL(om_node)->first_child) |
| status = axis2_om_node_serialize(AXIS2_INTF_TO_IMPL(om_node)->first_child, env, om_output); |
| |
| switch (AXIS2_INTF_TO_IMPL(om_node)->node_type) |
| { |
| case AXIS2_OM_ELEMENT: |
| status = AXIS2_OM_ELEMENT_SERIALIZE_END_PART ((axis2_om_element_t *) |
| (AXIS2_INTF_TO_IMPL(om_node)->data_element), |
| env, om_output); |
| if (status != AXIS2_SUCCESS) |
| return status; |
| break; |
| |
| default: |
| break; |
| } |
| /* serialize next sibling */ |
| if(AXIS2_INTF_TO_IMPL(om_node)->next_sibling) |
| status = axis2_om_node_serialize(AXIS2_INTF_TO_IMPL(om_node)->next_sibling, env, om_output); |
| |
| |
| return status; |
| |
| } |
| |
| axis2_om_node_t* AXIS2_CALL |
| axis2_om_node_get_parent(axis2_om_node_t *om_node, |
| axis2_env_t **env) |
| { |
| |
| AXIS2_ENV_CHECK(env, NULL); |
| return AXIS2_INTF_TO_IMPL(om_node)->parent; |
| |
| } |
| axis2_om_node_t* AXIS2_CALL |
| axis2_om_node_get_first_child(axis2_om_node_t *om_node, |
| axis2_env_t **env) |
| { |
| axis2_om_node_impl_t *om_node_impl = NULL; |
| int token = 0; |
| AXIS2_ENV_CHECK(env, NULL); |
| om_node_impl = AXIS2_INTF_TO_IMPL(om_node); |
| /**********************************************************/ |
| while(!(om_node_impl->first_child) && !(om_node_impl->done) |
| && om_node_impl->builder) |
| { |
| token = AXIS2_OM_STAX_BUILDER_NEXT_WITH_TOKEN(om_node_impl->builder, env); |
| if(token == -1) |
| break; |
| } |
| /**********************************************************/ |
| return om_node_impl->first_child; |
| } |
| |
| axis2_om_node_t* AXIS2_CALL |
| axis2_om_node_get_last_child(axis2_om_node_t *om_node, |
| axis2_env_t **env) |
| { |
| AXIS2_ENV_CHECK(env, NULL); |
| return AXIS2_INTF_TO_IMPL(om_node)->last_child; |
| |
| } |
| |
| axis2_om_node_t* AXIS2_CALL |
| axis2_om_node_get_previous_sibling(axis2_om_node_t *om_node, |
| axis2_env_t **env) |
| { |
| AXIS2_ENV_CHECK(env, NULL); |
| return AXIS2_INTF_TO_IMPL(om_node)->prev_sibling; |
| } |
| |
| axis2_om_node_t* AXIS2_CALL |
| axis2_om_node_get_next_sibling(axis2_om_node_t *om_node, |
| axis2_env_t **env) |
| { |
| axis2_om_node_impl_t *om_node_impl = NULL; |
| int token = 0; |
| AXIS2_ENV_CHECK(env, NULL); |
| om_node_impl = AXIS2_INTF_TO_IMPL(om_node); |
| /*****************************************************/ |
| while(!(om_node_impl->next_sibling) && om_node_impl->parent && |
| om_node_impl->builder && !(AXIS2_OM_NODE_GET_BUILD_STATUS(om_node_impl->parent, env))) |
| { |
| token = AXIS2_OM_STAX_BUILDER_NEXT_WITH_TOKEN(om_node_impl->builder, env); |
| if(token == -1) |
| break; |
| } |
| /*******************************************************/ |
| return om_node_impl->next_sibling; |
| } |
| |
| axis2_om_types_t AXIS2_CALL |
| axis2_om_node_get_node_type(axis2_om_node_t *om_node, |
| axis2_env_t **env) |
| { |
| AXIS2_ENV_CHECK(env, AXIS2_OM_INVALID); |
| return AXIS2_INTF_TO_IMPL(om_node)->node_type; |
| } |
| |
| void* AXIS2_CALL |
| axis2_om_node_get_data_element(axis2_om_node_t *om_node, |
| axis2_env_t **env) |
| { |
| AXIS2_ENV_CHECK(env, NULL); |
| return AXIS2_INTF_TO_IMPL(om_node)->data_element; |
| } |
| |
| axis2_status_t AXIS2_CALL |
| axis2_om_node_set_first_child(axis2_om_node_t *om_node,axis2_env_t **env, |
| axis2_om_node_t *first_child) |
| { |
| AXIS2_ENV_CHECK(env, AXIS2_FAILURE); |
| AXIS2_PARAM_CHECK((*env)->error, first_child, AXIS2_FAILURE); |
| |
| AXIS2_INTF_TO_IMPL(om_node)->first_child = first_child; |
| return AXIS2_SUCCESS; |
| } |
| |
| axis2_status_t AXIS2_CALL |
| axis2_om_node_set_last_child(axis2_om_node_t *om_node,axis2_env_t **env, |
| axis2_om_node_t *last_child) |
| { |
| |
| AXIS2_ENV_CHECK(env, AXIS2_FAILURE); |
| AXIS2_PARAM_CHECK((*env)->error, last_child, AXIS2_FAILURE); |
| |
| AXIS2_INTF_TO_IMPL(om_node)->last_child = last_child; |
| return AXIS2_SUCCESS; |
| } |
| axis2_status_t AXIS2_CALL |
| axis2_om_node_set_previous_sibling(axis2_om_node_t *om_node, |
| axis2_env_t **env, |
| axis2_om_node_t *prev_sibling) |
| { |
| |
| AXIS2_ENV_CHECK(env, AXIS2_FAILURE); |
| AXIS2_PARAM_CHECK((*env)->error, prev_sibling, AXIS2_FAILURE); |
| |
| AXIS2_INTF_TO_IMPL(om_node)->prev_sibling = prev_sibling; |
| return AXIS2_SUCCESS; |
| } |
| axis2_status_t AXIS2_CALL |
| axis2_om_node_set_next_sibling(axis2_om_node_t *om_node, |
| axis2_env_t **env, |
| axis2_om_node_t *next_sibling) |
| { |
| AXIS2_ENV_CHECK(env, AXIS2_FAILURE); |
| AXIS2_PARAM_CHECK((*env)->error, next_sibling, AXIS2_FAILURE); |
| AXIS2_INTF_TO_IMPL(om_node)->next_sibling = next_sibling; |
| return AXIS2_SUCCESS; |
| } |
| |
| axis2_status_t AXIS2_CALL |
| axis2_om_node_set_node_type(axis2_om_node_t *om_node, |
| axis2_env_t **env, |
| axis2_om_types_t type) |
| { |
| |
| AXIS2_ENV_CHECK(env, AXIS2_FAILURE); |
| AXIS2_INTF_TO_IMPL(om_node)->node_type = type; |
| return AXIS2_SUCCESS; |
| } |
| |
| axis2_status_t AXIS2_CALL |
| axis2_om_node_set_data_element(axis2_om_node_t *om_node, |
| axis2_env_t **env, |
| void* data_element) |
| { |
| AXIS2_ENV_CHECK(env, AXIS2_FAILURE); |
| AXIS2_PARAM_CHECK((*env)->error, data_element, AXIS2_FAILURE); |
| AXIS2_INTF_TO_IMPL(om_node)->data_element = data_element; |
| return AXIS2_SUCCESS; |
| } |
| |
| axis2_bool_t AXIS2_CALL |
| axis2_om_node_get_build_status(axis2_om_node_t *om_node, |
| axis2_env_t **env) |
| { |
| /* on error what value should be returned ?...*/ |
| AXIS2_ENV_CHECK(env, AXIS2_FAILURE); |
| return AXIS2_INTF_TO_IMPL(om_node)->done; |
| |
| } |
| |
| axis2_status_t AXIS2_CALL |
| axis2_om_node_set_build_status(axis2_om_node_t *om_node, |
| axis2_env_t **env, |
| axis2_bool_t done) |
| { |
| AXIS2_ENV_CHECK(env, AXIS2_FAILURE); |
| AXIS2_INTF_TO_IMPL(om_node)->done = done; |
| return AXIS2_SUCCESS; |
| } |
| |
| axis2_status_t AXIS2_CALL |
| axis2_om_node_set_document(axis2_om_node_t *om_node, |
| axis2_env_t **env, |
| struct axis2_om_document *om_doc) |
| { |
| AXIS2_ENV_CHECK(env, AXIS2_FAILURE); |
| AXIS2_PARAM_CHECK((*env)->error, om_doc, AXIS2_FAILURE); |
| AXIS2_INTF_TO_IMPL(om_node)->om_doc = om_doc; |
| return AXIS2_SUCCESS; |
| } |
| |
| struct axis2_om_document* AXIS2_CALL |
| axis2_om_node_get_document(axis2_om_node_t *om_node, |
| axis2_env_t **env) |
| { |
| AXIS2_ENV_CHECK(env, NULL); |
| return AXIS2_INTF_TO_IMPL(om_node)->om_doc; |
| } |
| |
| axis2_om_node_t* AXIS2_CALL |
| axis2_om_node_build_next(axis2_om_node_t *om_node, |
| axis2_env_t **env) |
| { |
| axis2_om_stax_builder_t *builder = NULL; |
| axis2_om_node_impl_t *om_node_impl = NULL; |
| AXIS2_ENV_CHECK(env, NULL); |
| |
| om_node_impl = AXIS2_INTF_TO_IMPL(om_node); |
| builder = om_node_impl->builder; |
| if(!builder) |
| return NULL; |
| return AXIS2_OM_STAX_BUILDER_NEXT(om_node_impl->builder, env); |
| } |
| |
| axis2_status_t AXIS2_CALL |
| axis2_om_node_set_builder(axis2_om_node_t *om_node, |
| axis2_env_t **env, |
| axis2_om_stax_builder_t* builder) |
| { |
| AXIS2_ENV_CHECK(env, AXIS2_FAILURE); |
| AXIS2_PARAM_CHECK((*env)->error, builder, AXIS2_FAILURE); |
| AXIS2_INTF_TO_IMPL(om_node)->builder = builder; |
| return AXIS2_SUCCESS; |
| |
| } |
| |