| /* |
| * 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_OM_DOCUMENT_H |
| #define AXIS2_OM_DOCUMENT_H |
| |
| #include <axis2_env.h> |
| #include <axis2_om_node.h> |
| #include <axis2_defines.h> |
| #include <axis2_om_output.h> |
| |
| #ifdef __cplusplus |
| extern "C" |
| { |
| #endif |
| |
| |
| /** |
| * @file axis2_om_document.h |
| * @brief om_document represents an XML document |
| */ |
| |
| #define CHAR_SET_ENCODING "UTF-8" |
| #define XML_VERSION "1.0" |
| |
| struct axis2_om_document; |
| struct axis2_om_document_ops; |
| struct axis2_om_stax_builder; |
| |
| /** |
| * @defgroup axis2_om_document OM Document |
| * @ingroup axis2_om |
| * @{ |
| */ |
| |
| /** |
| * @brief OM document ops struct |
| * Encapsulator struct for ops of axis2_om_document_t |
| */ |
| AXIS2_DECLARE_DATA typedef struct axis2_om_document_ops |
| { |
| |
| /** |
| * Free document struct |
| * @param document pointer to axis2_om_document_t struct to be freed |
| * @param env Environment. MUST NOT be NULL |
| * @return satus of the op. AXIS2_SUCCESS on success else AXIS2_FAILURE. |
| */ |
| axis2_status_t (AXIS2_CALL *free) (struct axis2_om_document *document, |
| axis2_env_t **env); |
| |
| /** Free documents xml tree. When this function is called the entire |
| * xml structure is freed |
| * @param document pointer |
| * @param env environment. Must not be null |
| */ |
| axis2_status_t (AXIS2_CALL *free_om_nodes)(struct axis2_om_document *document, |
| axis2_env_t **env); |
| |
| /** |
| * Builds the next node if the builder is not finished with input xml stream |
| * @param document document whose next node is to be built. cannot be NULL |
| * @param env Environment. MUST NOT be NULL. |
| * @return pointer to the next node. NULL on error. |
| */ |
| axis2_om_node_t* (AXIS2_CALL *build_next) (struct axis2_om_document *document, |
| axis2_env_t **env); |
| |
| /** |
| * adds the child node to the document. To the back of the children list. |
| * child is added as a child of current last child |
| * @param document document to add the child. cannot be NULL. |
| * @param envi Environment. MUST NOT be NULL. |
| * @param child child node to be added. cannot be NULL. |
| * @return satus of the op. AXIS2_SUCCESS on success else AXIS2_FAILURE. |
| */ |
| axis2_status_t (AXIS2_CALL *add_child)(struct axis2_om_document * document, |
| axis2_env_t **env, |
| axis2_om_node_t * child); |
| |
| /** |
| * Gets the root element of the document. |
| * @param document document to return the root of |
| * @param env Environment. MUST NOT be NULL. |
| * @return returns a pointer to the root node. If no root present, |
| * this method tries to build the root. Returns NULL on error. |
| */ |
| axis2_om_node_t* (AXIS2_CALL *get_root_element)(struct axis2_om_document *document, |
| axis2_env_t **env); |
| |
| /** |
| * set the root element of the document. IF a root node is already exist,it is freed |
| * before setting to root element |
| * @param document document struct to return the root of |
| * @param env Environment. MUST NOT be NULL. |
| * @return returns status code AXIS2_SUCCESS on success ,AXIS2_FAILURE on error. |
| */ |
| |
| axis2_status_t (AXIS2_CALL *set_root_element)(struct axis2_om_document *document, |
| axis2_env_t **env, |
| axis2_om_node_t *om_node); |
| /** |
| * This method builds the rest of the xml input stream from current position till |
| * the root element is completed . |
| *@param document pointer to axis2_om_document_t struct to be built. |
| *@param env environment MUST NOT be NULL. |
| */ |
| axis2_om_node_t* (AXIS2_CALL *build_all)(struct axis2_om_document *document, |
| axis2_env_t **env); |
| /** |
| * get builder |
| * @return builder , returns NULL if a builder is not associated with |
| * document |
| */ |
| struct axis2_om_stax_builder* (AXIS2_CALL *get_builder) |
| (struct axis2_om_document *document, |
| axis2_env_t **env); |
| /** |
| * @param om_document |
| * @return status code AXIS2_SUCCESS on success , otherwise AXIS2_FAILURE |
| */ |
| axis2_status_t (AXIS2_CALL *serialize)(struct axis2_om_document *document, |
| axis2_env_t **env, |
| axis2_om_output_t *om_output); |
| |
| } axis2_om_document_ops_t; |
| |
| /** |
| * \brief OM document struct |
| * Handles the XML document in OM |
| */ |
| typedef struct axis2_om_document |
| { |
| /** ops of document struct */ |
| axis2_om_document_ops_t *ops; |
| |
| } axis2_om_document_t; |
| |
| /** |
| * creates an axis2_om_document_t struct |
| * @param env Environment. MUST NOT be NULL. |
| * @param root pointer to document's root node. Optional, can be NULL |
| * @param builder pointer to axis2_om_stax_builder |
| * @return pointer to the newly created document. |
| */ |
| AXIS2_DECLARE(axis2_om_document_t *) |
| axis2_om_document_create (axis2_env_t **env, |
| axis2_om_node_t * root, |
| struct axis2_om_stax_builder *builder); |
| |
| /** frees given document */ |
| #define AXIS2_OM_DOCUMENT_FREE(document,env) \ |
| ((document)->ops->free(document,env)) |
| |
| /** adds a child to document */ |
| #define AXIS2_OM_DOCUMENT_ADD_CHILD(document,env, child) \ |
| ((document)->ops->add_child(document,env,child)) |
| |
| /** builds next node of document */ |
| #define AXIS2_OM_DOCUMENT_BUILD_NEXT(document,env) \ |
| ((document)->ops->build_next(document,env)) |
| |
| /** gets the root eleemnt of given document */ |
| #define AXIS2_OM_DOCUMENT_GET_ROOT_ELEMENT(document,env) \ |
| ((document)->ops->get_root_element(document,env)) |
| /** sets the root node */ |
| #define AXIS2_OM_DOCUMENT_SET_ROOT_ELEMENT(document,env,om_node) \ |
| ((document)->ops->set_root_element(document,env,om_node)) |
| |
| /** build till the root node is complete */ |
| #define AXIS2_OM_DOCUMENT_BUILD_ALL(document,env) \ |
| ((document)->ops->build_all(document,env)) |
| |
| /** returns the builder */ |
| #define AXIS2_OM_DOCUMENT_GET_BUILDER(document, env) \ |
| ((document)->ops->get_builder(document, env)) |
| |
| /** serialize opertation */ |
| #define AXIS2_OM_DOCUMENT_SERIALIZE(document, env, om_output) \ |
| ((document)->ops->serialize(document, env, om_output)) |
| |
| #define AXIS2_OM_DOCUMENT_FREE_OM_NODES(document, env) \ |
| ((document)->ops->free_om_nodes(document, env)) |
| |
| /** @} */ |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #endif /* AXIS2_OM_DOCUMENT_H */ |