axiom_element.h

00001 /*
00002  * Copyright 2004,2005 The Apache Software Foundation.
00003  *
00004  * Licensed under the Apache License, Version 2.0 (the "License");
00005  * you may not use this file except in compliance with the License.
00006  * You may obtain a copy of the License at
00007  *
00008  *      http://www.apache.org/licenses/LICENSE-2.0
00009  *
00010  * Unless required by applicable law or agreed to in writing, software
00011  * distributed under the License is distributed on an "AS IS" BASIS,
00012  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
00013  * See the License for the specific language governing permissions and
00014  * limitations under the License.
00015  */
00016 
00017 #ifndef AXIOM_ELEMENT_H
00018 #define AXIOM_ELEMENT_H
00019 
00020 #include <axiom_namespace.h>
00021 #include <axiom_attribute.h>
00022 #include <axiom_output.h>
00023 #include <axiom_node.h>
00024 #include <axiom_children_iterator.h>
00025 #include <axiom_children_qname_iterator.h>
00026 #include <axiom_child_element_iterator.h>
00027 #include <axis2_hash.h>
00028 #include <axis2_utils.h>
00029 
00030 #ifdef __cplusplus
00031 extern "C"
00032 {
00033 #endif
00034 
00035     typedef struct axiom_element axiom_element_t;
00036     typedef struct axiom_element_ops axiom_element_ops_t;
00037 
00049 AXIS2_DECLARE_DATA   struct axiom_element_ops
00050     {
00051        /*
00052         * Find a namespace in the scope of the document.
00053         * Start to find from the given node and go up the hierarchy.
00054         * @param om_element pointer to om_element_struct contained in
00055         *        node , 
00056         * @param env Environment. MUST NOT be NULL.
00057         * @param node node containing an instance of an AXIOM element,cannot be NULL.
00058         * @param uri namespace uri..
00059         * @param prefix namespace prefix. can be NULL.
00060         * @return pointer to the namespace, if found, else NULL. On error, returns 
00061         *           NULL and sets error code in environment,s error
00062         */
00063         axiom_namespace_t* (AXIS2_CALL *
00064         find_namespace)(axiom_element_t *om_element,
00065                         const axis2_env_t *env,
00066                         axiom_node_t *node,
00067                         const axis2_char_t *uri,
00068                         const axis2_char_t *prefix);
00078         axis2_status_t (AXIS2_CALL *
00079         declare_namespace)(axiom_element_t *om_element,
00080                            const axis2_env_t *env,
00081                            axiom_node_t *node,
00082                            axiom_namespace_t * ns);
00093          axiom_namespace_t *(AXIS2_CALL *
00094          find_namespace_with_qname)(axiom_element_t *om_element,
00095                                     const axis2_env_t *env,
00096                                     axiom_node_t *node,
00097                                     axis2_qname_t *qname);
00098 
00107          axis2_status_t (AXIS2_CALL *
00108          add_attribute)(axiom_element_t *om_element,
00109                         const axis2_env_t *env,
00110                         axiom_attribute_t *attribute,
00111                         axiom_node_t *node);
00112 
00121          axiom_attribute_t *(AXIS2_CALL *
00122          get_attribute) (axiom_element_t *om_element,
00123                          const axis2_env_t *env,
00124                          axis2_qname_t * qname);
00125                          
00134          axis2_char_t *(AXIS2_CALL *
00135          get_attribute_value) (axiom_element_t *om_element,
00136                                const axis2_env_t *env,
00137                                axis2_qname_t * qname);                         
00138         
00145          axis2_status_t (AXIS2_CALL *
00146          free) (axiom_element_t *element,
00147                 const axis2_env_t *env);
00148 
00156         axis2_status_t (AXIS2_CALL *
00157         serialize_start_part)(axiom_element_t *om_element,
00158                               const axis2_env_t *env,
00159                               axiom_output_t * om_output,
00160                               axiom_node_t *ele_node);
00161 
00170         axis2_status_t (AXIS2_CALL *
00171         serialize_end_part)(axiom_element_t *om_element,
00172                             const axis2_env_t *env,
00173                             axiom_output_t * om_output);
00183         axiom_namespace_t* (AXIS2_CALL *
00184         find_declared_namespace)(axiom_element_t *om_element,
00185                                  const axis2_env_t *env,
00186                                  const axis2_char_t *uri,
00187                                  const axis2_char_t *prefix);
00188                                                              
00189                                                         
00196         axis2_char_t* (AXIS2_CALL *
00197         get_localname)(axiom_element_t *om_element,
00198                        const axis2_env_t *env);
00207         axis2_status_t (AXIS2_CALL *
00208         set_localname)(axiom_element_t *om_element,
00209                        const axis2_env_t *env,
00210                        const axis2_char_t *localname);
00219         axiom_namespace_t *(AXIS2_CALL *
00220         get_namespace)(axiom_element_t *om_element,
00221                        const axis2_env_t *env,
00222                        axiom_node_t *ele_node);
00231         axis2_status_t (AXIS2_CALL *
00232         set_namespace)(axiom_element_t *om_element,
00233                        const axis2_env_t *env,
00234                        axiom_namespace_t *ns,
00235                        axiom_node_t *node);
00243         axis2_hash_t* (AXIS2_CALL *
00244         get_all_attributes)(axiom_element_t *om_element,
00245                             const axis2_env_t *env);
00253         axis2_hash_t* (AXIS2_CALL *
00254         get_namespaces)(axiom_element_t *om_element,
00255                         const axis2_env_t *env);
00263         axis2_qname_t* (AXIS2_CALL *
00264         get_qname)(axiom_element_t *om_element,
00265                    const axis2_env_t *env,
00266                    axiom_node_t *ele_node);
00267         
00272         axiom_children_iterator_t*(AXIS2_CALL *
00273         get_children)(axiom_element_t *om_element,
00274                       const axis2_env_t *env,
00275                      axiom_node_t *element_node);
00276                                       
00288         axiom_children_qname_iterator_t *(AXIS2_CALL *
00289         get_children_with_qname)(axiom_element_t *om_element,
00290                                  const axis2_env_t *env,
00291                                  axis2_qname_t *element_qname,
00292                                  axiom_node_t* element_node);
00297         axiom_element_t* (AXIS2_CALL *
00298         get_first_child_with_qname)(axiom_element_t *om_element,
00299                                      const axis2_env_t *env,
00300                                      axis2_qname_t *element_qname,
00301                                      axiom_node_t* element_node,
00302                                      axiom_node_t **child_node);                       
00313         axis2_status_t (AXIS2_CALL *
00314         remove_attribute)(axiom_element_t *om_element,
00315                           const axis2_env_t *env,
00316                           axiom_attribute_t *om_attribute); 
00322         axis2_status_t (AXIS2_CALL *
00323         set_text)(axiom_element_t *om_element,
00324                   const axis2_env_t *env,
00325                   const axis2_char_t *text,
00326                   axiom_node_t *element_node); 
00333         axis2_char_t* (AXIS2_CALL *
00334         get_text)(
00335                 axiom_element_t *om_element,
00336                 const axis2_env_t *env,
00337                 axiom_node_t *element_node);
00338     
00344         axiom_element_t* (AXIS2_CALL *
00345         get_first_element)(
00346                 axiom_element_t *om_element,
00347                 const axis2_env_t *env,
00348                 axiom_node_t *element_node,
00349                 axiom_node_t **first_element_node);  
00355         axis2_char_t* (AXIS2_CALL *
00356         to_string)(
00357                 axiom_element_t *om_element,
00358             const axis2_env_t *env,
00359             axiom_node_t *element_node);
00368          axiom_child_element_iterator_t* (AXIS2_CALL *
00369          get_child_elements)(
00370                 axiom_element_t *om_element,
00371                 const axis2_env_t *env,
00372                 axiom_node_t *element_node);                                                                            
00383          axis2_status_t (AXIS2_CALL *
00384          build)(axiom_element_t *om_element,
00385                 const axis2_env_t *env,
00386                 axiom_node_t *element_node);
00387                 
00394          axiom_namespace_t* (AXIS2_CALL *
00395          get_default_namespace)(
00396                 axiom_element_t *om_element,
00397                 const axis2_env_t *env,
00398                 axiom_node_t *element_node);
00399                                 
00407          axiom_namespace_t* (AXIS2_CALL *
00408          declare_default_namespace)(
00409                 axiom_element_t *om_element,
00410                 const axis2_env_t *env,
00411                 axis2_char_t *uri);
00412                 
00422          axiom_namespace_t* (AXIS2_CALL *
00423          find_namespace_uri)(
00424                 axiom_element_t *om_element,
00425                 const axis2_env_t *env,
00426                 axis2_char_t *prefix,
00427                 axiom_node_t *element_node);  
00435          axis2_status_t (AXIS2_CALL *
00436          set_namespace_with_no_find_in_current_scope)(
00437                 axiom_element_t *om_element,
00438                 const axis2_env_t *env,
00439                 axiom_namespace_t *om_ns); 
00440                 
00445          axis2_hash_t* (AXIS2_CALL *
00446          extract_attributes)(
00447                 axiom_element_t *om_element,
00448                 const axis2_env_t *env,
00449                 axiom_node_t *ele_node);
00450                 
00451          axis2_char_t* (AXIS2_CALL*
00452          get_attribute_value_by_name)(
00453                 axiom_element_t *om_ele,
00454                 const axis2_env_t *env,
00455                 axis2_char_t *attr_name);
00456                 
00457     };
00458 
00459     
00464     struct axiom_element
00465     {
00467         axiom_element_ops_t *ops;
00468 
00469     };
00470 
00482     AXIS2_EXTERN axiom_element_t * AXIS2_CALL
00483     axiom_element_create (const axis2_env_t *env,
00484                              axiom_node_t *parent,
00485                              const axis2_char_t *localname,
00486                              axiom_namespace_t *ns,
00487                              axiom_node_t **node);
00488 
00499     AXIS2_EXTERN axiom_element_t * AXIS2_CALL 
00500     axiom_element_create_with_qname (const axis2_env_t *env,
00501                                         axiom_node_t *parent,
00502                                         const axis2_qname_t *qname,
00503                                         axiom_node_t ** node);
00504 
00506 #define AXIOM_ELEMENT_FIND_NAMESPACE(om_element,env,om_node, uri, prefix) \
00507         ((om_element)->ops->find_namespace (om_element, env,om_node, uri, prefix))
00508         
00510 #define AXIOM_ELEMENT_DECLARE_NAMESPACE(om_element, env , om_node, ns) \
00511         ((om_element)->ops->declare_namespace (om_element, env, om_node, ns))
00512 
00514 #define AXIOM_ELEMENT_FIND_NAMESPACE_WITH_QNAME (om_element, env, om_node, qname) \
00515         ((om_element)->ops->find_namespace_with_qname (om_element, environment, om_node, qname))
00516         
00518 #define AXIOM_ELEMENT_ADD_ATTRIBUTE(om_element, env, attribute, element_node) \
00519         ((om_element)->ops->add_attribute(om_element , env, attribute, element_node))
00520         
00522 #define AXIOM_ELEMENT_GET_ATTRIBUTE(om_element, env, qname) \
00523         ((om_element)->ops->get_attribute(om_element, env, qname))
00524         
00526 #define AXIOM_ELEMENT_FREE(om_element, env) \
00527         ((om_element)->ops->free(om_element, env))
00528         
00530 #define AXIOM_ELEMENT_SERIALIZE_START_PART(om_element, env, om_output, ele_node) \
00531         ((om_element)->ops->serialize_start_part(om_element, env, om_output, ele_node))
00532         
00534 #define AXIOM_ELEMENT_SERIALIZE_END_PART(om_element, env, om_output) \
00535         ((om_element)->ops->serialize_end_part(om_element, env, om_output))
00536 
00537 #define AXIOM_ELEMENT_GET_LOCALNAME(om_element, env)\
00538         ((om_element)->ops->get_localname(om_element,env))
00539 
00540 #define AXIOM_ELEMENT_GET_NAMESPACE(om_element, env, ele_node) \
00541         ((om_element)->ops->get_namespace(om_element, env, ele_node))
00542 
00543 #define AXIOM_ELEMENT_SET_LOCALNAME(om_element, env, localname) \
00544         ((om_element)->ops->set_localname(om_element, env, localname))
00545 
00546 #define AXIOM_ELEMENT_SET_NAMESPACE(om_element, env, ns , node) \
00547         ((om_element)->ops->set_namespace(om_element, env, ns, node))
00548 
00549 #define AXIOM_ELEMENT_FIND_DECLARED_NAMESPACE(om_element, env, uri, prefix) \
00550         ((om_element)->ops->find_declared_namespace(om_element, env, uri, prefix))        
00551         
00552 #define AXIOM_ELEMENT_GET_QNAME(om_element, env, ele_node) \
00553         ((om_element)->ops->get_qname(om_element, env, ele_node))
00554 
00555 #define AXIOM_ELEMENT_GET_ALL_ATTRIBUTES(om_element, env) \
00556         ((om_element)->ops->get_all_attributes(om_element, env))
00557 
00558 #define AXIOM_ELEMENT_GET_NAMESPACES(om_element, env) \
00559         ((om_element)->ops->get_namespaces(om_element, env)) 
00560         
00561 #define AXIOM_ELEMENT_GET_CHILDREN(om_element, env, element_node) \
00562         ((om_element)->ops->get_children(om_element, env, element_node))
00563 
00564 #define AXIOM_ELEMENT_GET_CHILDREN_WITH_QNAME(om_element, env, \
00565             element_qname, element_node) \
00566         ((om_element)->ops->get_children_with_qname(om_element,\
00567             env, element_qname, element_node))
00568 
00569 #define AXIOM_ELEMENT_GET_FIRST_CHILD_WITH_QNAME(om_element, env,\
00570             element_qname, element_node , child_node) \
00571         ((om_element)->ops->get_first_child_with_qname(om_element, env, \
00572             element_qname, element_node, child_node))
00573 
00574 #define AXIOM_ELEMENT_REMOVE_ATTRIBUTE(om_element, env, om_attribute) \
00575         ((om_element)->ops->remove_attribute(om_element, env, om_attribute))
00576 
00577 #define AXIOM_ELEMENT_GET_FIRST_ELEMENT(om_element, env, element_node, first_node) \
00578         ((om_element)->ops->get_first_element(om_element, env, element_node, first_node))
00579 
00580 #define AXIOM_ELEMENT_GET_TEXT(om_element, env, element_node) \
00581         ((om_element)->ops->get_text(om_element, env, element_node))
00582 
00583 #define AXIOM_ELEMENT_SET_TEXT(om_element, env, text, element_node) \
00584         ((om_element)->ops->set_text(om_element, env, text, element_node))
00585 
00586 #define AXIOM_ELEMENT_TO_STRING(om_element, env, element_node) \
00587         ((om_element)->ops->to_string(om_element, env, element_node)) 
00588                
00589 #define AXIOM_ELEMENT_GET_CHILD_ELEMENTS(om_element, env, element_node) \
00590         ((om_element)->ops->get_child_elements(om_element, env, element_node))
00591 
00592 #define AXIOM_ELEMENT_BUILD(om_element, env, element_node) \
00593         ((om_element)->ops->build(om_element, env, element_node))
00594         
00595 #define AXIOM_ELEMENT_GET_DEFAULT_NAMESPACE(om_element, env, element_node) \
00596         ((om_element)->ops->get_default_namespace(om_element, env, element_node))
00597         
00598 #define AXIOM_ELEMENT_DECLARE_DEFAULT_NAMESPACE(om_element, env, uri) \
00599         ((om_element)->ops->declare_default_namespace(om_element, env, uri))
00600         
00601 #define AXIOM_ELEMENT_FIND_NAMESPACE_URI(om_element, env, prefix, element_node) \
00602         ((om_element)->ops->find_namespace_uri(om_element, env, prefix, element_node))
00603         
00604 #define AXIOM_ELEMENT_GET_ATTRIBUTE_VALUE(om_element, env, qname) \
00605         ((om_element)->ops->get_attribute_value(om_element, env, qname))
00606 
00607 #define AXIOM_ELEMENT_GET_ATTRIBUTE_VALUE_BY_NAME(om_element, env, attr_name) \
00608         ((om_element)->ops->get_attribute_value_by_name(om_element, env, attr_name))
00609         
00610                 
00611 #define AXIOM_ELEMENT_SET_NAMESPACE_WITH_NO_FIND_IN_CURRENT_SCOPE(om_element, env, om_ns) \
00612         ((om_element)->ops->set_namespace_with_no_find_in_current_scope(om_element, env, om_ns))
00613                
00614 #define AXIOM_ELEMENT_EXTRACT_ATTRIBUTES(om_element, env, ele_node) \
00615         ((om_element)->ops->extract_attributes(om_element, env, ele_node))
00616         
00617 
00618                                                       
00622 #ifdef __cplusplus
00623 }
00624 #endif
00625 
00626 #endif    /* AXIOM_ELEMENT_H */

Generated on Thu Aug 31 17:32:35 2006 for Axis2/C by  doxygen 1.4.6