| |
| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You 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 AXIOM_NODE_H |
| #define AXIOM_NODE_H |
| |
| /** |
| * @defgroup axiom AXIOM project |
| * @{ |
| * @} |
| */ |
| |
| /** |
| * @defgroup axiom_om AXIOM |
| * @ingroup axiom |
| * @{ |
| * @} |
| */ |
| |
| /** |
| * @file axiom_node.h |
| * @brief defines axiom_node struct |
| */ |
| #include <axutil_env.h> |
| #include <axutil_utils.h> |
| |
| #ifdef __cplusplus |
| extern "C" |
| { |
| #endif |
| |
| typedef struct axiom_node axiom_node_t; |
| struct axiom_output; |
| struct axiom_document; |
| struct axiom_stax_builder; |
| |
| /** |
| * @defgroup axiom_node node |
| * @ingroup axiom_om |
| * @{ |
| */ |
| |
| /** |
| * @brief AXIOM types |
| */ |
| typedef enum axiom_types_t |
| { |
| |
| /** Invalid node type */ |
| AXIOM_INVALID = 0, |
| |
| /** AXIOM document type */ |
| AXIOM_DOCUMENT, |
| |
| /** AXIOM element type */ |
| AXIOM_ELEMENT, |
| |
| /** AXIOM doctype type */ |
| AXIOM_DOCTYPE, |
| |
| /** AXIOM comment type */ |
| AXIOM_COMMENT, |
| |
| /** AXIOM attribute type */ |
| AXIOM_ATTRIBUTE, |
| |
| /** AXIOM namespace type */ |
| AXIOM_NAMESPACE, |
| |
| /** AXIOM processing instruction type */ |
| AXIOM_PROCESSING_INSTRUCTION, |
| |
| /** AXIOM text type */ |
| AXIOM_TEXT, |
| |
| /** AXIOM data source, represent a serialized XML fragment with a stream */ |
| AXIOM_DATA_SOURCE |
| } axiom_types_t; |
| |
| /** |
| * Creates a node struct. |
| * @param env Environment. MUST NOT be NULL, . |
| * @return a pointer to newly created node struct. NULL on error. |
| */ |
| AXIS2_EXTERN axiom_node_t *AXIS2_CALL |
| axiom_node_create( |
| const axutil_env_t * env); |
| |
| /** |
| * Creates a node struct from a character buffer. |
| * @param env Environment. MUST NOT be NULL, . |
| * @param buffer string. buffer to make the node |
| * @return a pointer to newly created node struct. NULL on error. |
| */ |
| AXIS2_EXTERN axiom_node_t* AXIS2_CALL |
| axiom_node_create_from_buffer( |
| const axutil_env_t * env, |
| axis2_char_t *buffer); |
| |
| |
| /** |
| * Frees an om node and all of its children. Please note that the attached |
| * data_element will also be freed along with the node. If the node is |
| * still attached to a parent, it will be detached first, then freed. |
| * @param om_node node to be freed. |
| * @param env Environment. MUST NOT be NULL, . |
| * @return satus of the op. AXIS2_SUCCESS on success else AXIS2_FAILURE |
| */ |
| AXIS2_EXTERN void AXIS2_CALL |
| axiom_node_free_tree( |
| axiom_node_t * om_node, |
| const axutil_env_t * env); |
| |
| /** |
| * Adds given node as child to parent. child should not have a parent |
| * if child has a parent it will be detached from existing parent |
| * @param om_node parent node. cannot be NULL. |
| * @param env Environment. MUST NOT be NULL, . |
| * @param child child node. |
| * @return satus of the op. AXIS2_SUCCESS on success else AXIS2_FAILURE |
| */ |
| AXIS2_EXTERN axis2_status_t AXIS2_CALL |
| axiom_node_add_child( |
| axiom_node_t * om_node, |
| const axutil_env_t * env, |
| axiom_node_t * child); |
| |
| /** |
| * Detaches given node from the parent and reset the links. Will recreate "namespace defined in |
| * the parent and used in detached node" within detached node itself |
| * @param om_node node to be detached, cannot be NULL. |
| * @param env Environment. MUST NOT be NULL, . |
| * @return a pointer to detached node,returns NULL on error |
| */ |
| AXIS2_EXTERN axiom_node_t *AXIS2_CALL |
| axiom_node_detach( |
| axiom_node_t * om_node, |
| const axutil_env_t * env); |
| |
| /** |
| * Detaches given node from the parent and reset the links. will not adjust the namespace as |
| * in the case of axiom_node_detach. |
| * @param om_node node to be detached, cannot be NULL. |
| * @param env Environment. MUST NOT be NULL, . |
| * @return a pointer to detached node,returns NULL on error |
| */ |
| AXIS2_EXTERN axiom_node_t *AXIS2_CALL |
| axiom_node_detach_without_namespaces( |
| axiom_node_t * om_node, |
| const axutil_env_t * env); |
| |
| /** |
| * Inserts a sibling node after the given node |
| * @param om_node node to whom the sibling to be inserted. , cannot be NULL. |
| * @param env Environment. MUST NOT be NULL, . |
| * @param node_to_insert the node to be inserted. , cannot be NULL. |
| * @return satus of the op. AXIS2_SUCCESS on success else AXIS2_FAILURE |
| */ |
| AXIS2_EXTERN axis2_status_t AXIS2_CALL |
| axiom_node_insert_sibling_after( |
| axiom_node_t * om_node, |
| const axutil_env_t * env, |
| axiom_node_t * node_to_insert); |
| |
| /** |
| * Inserts a sibling node before the given current node |
| * @param om_node node to whom the sibling to be inserted. , cannot be NULL. |
| * @param env Environment. MUST NOT be NULL, . |
| * @param node_to_insert the node to be inserted. , cannot be NULL. |
| * @return satus of the op. AXIS2_SUCCESS on success else AXIS2_FAILURE |
| */ |
| AXIS2_EXTERN axis2_status_t AXIS2_CALL |
| axiom_node_insert_sibling_before( |
| axiom_node_t * om_node, |
| const axutil_env_t * env, |
| axiom_node_t * node_to_insert); |
| |
| /** |
| * Serializes the given node. This op makes the node go |
| * through its children and serialize them in order. |
| * @param om_node node to be serialized. cannot be NULL. |
| * @param env Environment .MUST NOT be NULL. |
| * @param om_output AXIOM output handler to be used in serializing |
| * @return satus of the op. AXIS2_SUCCESS on success else AXIS2_FAILURE |
| */ |
| AXIS2_EXTERN axis2_status_t AXIS2_CALL |
| axiom_node_serialize( |
| axiom_node_t * om_node, |
| const axutil_env_t * env, |
| struct axiom_output *om_output); |
| |
| /** get parent of om_node |
| *@om_node node |
| *@param env environment |
| *@return pointer to parent node of om_node, return NULL if no parent exists or |
| * when an error occured. |
| */ |
| |
| AXIS2_EXTERN axiom_node_t *AXIS2_CALL |
| axiom_node_get_parent( |
| axiom_node_t * om_node, |
| const axutil_env_t * env); |
| |
| /** |
| * get the first child of om_node |
| * @param om_node node |
| * @param env environment must not be null. |
| * @returns pointer to first child node , NULL is returned on error with |
| * error code set in environments error |
| */ |
| AXIS2_EXTERN axiom_node_t *AXIS2_CALL |
| axiom_node_get_first_child( |
| axiom_node_t * om_node, |
| const axutil_env_t * env); |
| |
| /**get the first AXIOM_ELEMENT in om_node |
| * @param om_node node |
| * @param env environment must not be null |
| * @returns pointer to first child om element, NULL is returned on error |
| * with error code set in environments error. |
| */ |
| AXIS2_EXTERN axiom_node_t *AXIS2_CALL |
| axiom_node_get_first_element( |
| axiom_node_t * om_node, |
| const axutil_env_t * env); |
| |
| /** |
| * get the last child |
| * @param om_node node |
| * @param env environment, MUST NOT be NULL |
| * @return pointer to last child of this node , return NULL on error. |
| */ |
| AXIS2_EXTERN axiom_node_t *AXIS2_CALL |
| axiom_node_get_last_child( |
| axiom_node_t * om_node, |
| const axutil_env_t * env); |
| |
| /** |
| * get the previous sibling |
| * @param om_node om_node struct |
| * @param env environment , must node be null |
| * @returns a pointer to previous sibling , NULL if a previous sibling does not exits |
| * (happens when this node is the first child of a node ) |
| */ |
| AXIS2_EXTERN axiom_node_t *AXIS2_CALL |
| axiom_node_get_previous_sibling( |
| axiom_node_t * om_node, |
| const axutil_env_t * env); |
| |
| /** |
| * get the previous sibling of type AXIOM_ELEMENT |
| * @param om_node om_node struct |
| * @param env environment , must node be null |
| * @returns a pointer to previous sibling , NULL if a previous sibling does not exits |
| * (happens when this node is the first element of a node ) |
| */ |
| AXIS2_EXTERN axiom_node_t *AXIS2_CALL |
| axiom_node_get_previous_sibling_element( |
| axiom_node_t * om_node, |
| const axutil_env_t * env); |
| |
| /** |
| * get next sibling |
| * @param om_node om_node struct |
| * @param env environment, MUST NOT be NULL. |
| * @return next sibling of this node. |
| */ |
| AXIS2_EXTERN axiom_node_t *AXIS2_CALL |
| axiom_node_get_next_sibling( |
| axiom_node_t * om_node, |
| const axutil_env_t * env); |
| |
| /** |
| * get next sibling of type AXIOM_ELEMENT |
| * @param om_node om_node struct |
| * @param env environment, MUST NOT be NULL. |
| * @return next sibling of this node. |
| */ |
| AXIS2_EXTERN axiom_node_t *AXIS2_CALL |
| axiom_node_get_next_sibling_element( |
| axiom_node_t * om_node, |
| const axutil_env_t * env); |
| |
| /** |
| * get the node type of this element |
| * Node type can be one of AXIOM_ELEMENT, AXIOM_COMMENT, AXIOM_TEXT |
| * AXIOM_DOCTYPE, AXIOM_PROCESSING_INSTRUCTION |
| * @param om_node node of which node type is required |
| * @param env environment |
| * @return node type |
| */ |
| AXIS2_EXTERN axiom_types_t AXIS2_CALL |
| axiom_node_get_node_type( |
| axiom_node_t * om_node, |
| const axutil_env_t * env); |
| |
| /** |
| * get the struct contained in the node |
| * IF the node is on type AXIOM_ELEMENT , this method returns |
| * a pointer to axiom_element_t struct contained |
| * @param om_node node |
| * @param env environment, MUST NOT be NULL. |
| * @returns pointer to struct contained in the node |
| * returns NULL if no struct is contained |
| */ |
| AXIS2_EXTERN void *AXIS2_CALL |
| axiom_node_get_data_element( |
| axiom_node_t * om_node, |
| const axutil_env_t * env); |
| |
| /** |
| * Indicates whether parser has parsed this information item completely or not |
| * @param om_node om_node struct |
| * @param env environment, MUST NOT be NULL. |
| * @returns AXIS2_TRUE if node is completly build, |
| * AXIS2_FALSE if node is not completed |
| */ |
| AXIS2_EXTERN axis2_bool_t AXIS2_CALL |
| axiom_node_is_complete( |
| axiom_node_t * om_node, |
| const axutil_env_t * env); |
| |
| /** |
| * returns the associated document, |
| * only valid if built using builder and for a node of type |
| * AXIOM_ELEMENT |
| * returns null if no document is available |
| * @param om_node |
| * @param env environment, MUST NOT be NULL. |
| * |
| * @return the OM document of the node |
| */ |
| AXIS2_EXTERN struct axiom_document *AXIS2_CALL |
| axiom_node_get_document( |
| axiom_node_t * om_node, |
| const axutil_env_t * env); |
| |
| /** |
| * |
| * @param om_node pointer to the OM node struct |
| * @param env environment, MUST NOT be NULL |
| * |
| * @return the string representation of the node |
| */ |
| AXIS2_EXTERN axis2_char_t *AXIS2_CALL |
| axiom_node_to_string( |
| axiom_node_t * om_node, |
| const axutil_env_t * env); |
| |
| /** |
| * |
| * @param om_node pointer to the OM node struct |
| * @param env environment, MUST NOT be NULL |
| * @param om_output the serialized output will be placed here |
| * |
| * @return AXIS2_SUCCESS on success else AXIS2_FAILURE |
| */ |
| AXIS2_EXTERN axis2_status_t AXIS2_CALL |
| axiom_node_serialize_sub_tree( |
| axiom_node_t * om_node, |
| const axutil_env_t * env, |
| struct axiom_output *om_output); |
| |
| /** |
| * |
| * @param om_node pointer to the OM node struct |
| * @param env environment, MUST NOT be NULL |
| * |
| * @return the tree as a string |
| */ |
| AXIS2_EXTERN axis2_char_t *AXIS2_CALL |
| axiom_node_sub_tree_to_string( |
| axiom_node_t * om_node, |
| const axutil_env_t * env); |
| |
| /** |
| * Convert the node to string, treating the binary contents, if any, |
| * as non-optimized content. |
| * @param om_node pointer to the OM node struct |
| * @param env environment, MUST NOT be NULL |
| * |
| * @return the none optimized string |
| */ |
| AXIS2_EXTERN axis2_char_t *AXIS2_CALL |
| axiom_node_to_string_non_optimized( |
| axiom_node_t * om_node, |
| const axutil_env_t * env); |
| |
| /** |
| * Adds nodeElemSibling to nodeElem as a sibling. It can be used to generates a multipart envelop payload. |
| * @param env pointer to environment struct |
| * @param nodeElem pointer to first part, element to has sibling added |
| * @param nodeElemSibling pointer to second part, sibling to be added |
| * |
| * @return axiom_node_t pointer to param nodeElem pointer with sibling added |
| */ |
| AXIS2_EXTERN axiom_node_t * AXIS2_CALL |
| axiom_node_add_sibling( |
| const axutil_env_t *env, |
| axiom_node_t *nodeElem, |
| axiom_node_t *nodeElemSibling); |
| |
| |
| /** @} */ |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #endif /* AXIOM_NODE_H */ |