axiom_element.h

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

Generated on Wed Dec 20 20:34:49 2006 for Axis2/C by  doxygen 1.5.1