summaryrefslogtreecommitdiffstats
path: root/axiom/src/om/axiom_element_internal.h
blob: adbce79c37332c5dab49c5d03e41851dcc1097ea (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
/*
 * 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_ELEMENT_INTERNAL_H_
#define AXIOM_ELEMENT_INTERNAL_H_

/** @defgroup axiom AXIOM (Axis Object Model)
 * @ingroup axis2
 * @{
 */

/** @} */

#include <axiom_element.h>

#ifdef __cplusplus
extern "C"
{
#endif

    /**
     * @defgroup axiom_element element
     * @ingroup axiom
     * @{
     */

    /**
     * Collect all the namespaces with distinct prefixes in the parents of the given element.
     * Effectively this is the set of namespaces declared above this element that are inscope at
     * this element and might be used by it or its children.
     * @param om_element pointer to om_element
     * @param env environment MUST not be NULL
     * @param om_node pointer to this element node
     * @returns pointer to hash of relevant namespaces
     */
    axutil_hash_t * AXIS2_CALL
    axiom_element_gather_parent_namespaces(
        axiom_element_t * om_element,
        const axutil_env_t * env,
        axiom_node_t * om_node);

    /**
     * Examines the subtree beginning at the provided element for each element or attribute,
     * if it refers to a namespace declared in a parent of the subtree root element, if not already
     * declared, redeclares that namespace at the level of the subtree root and removes
     * it from the set of parent inscope_namespaces. inscope_namespaces contains all the parent
     * namespaces which should be redeclared at some point.
     * @param om_element pointer to om_element
     * @param env environment MUST not be NULL
     * @param om_node pointer to this element node
     * @param inscope_namespaces pointer to hash of parent namespaces
     */
    void AXIS2_CALL
    axiom_element_redeclare_parent_namespaces(
        axiom_element_t * om_element,
        const axutil_env_t * env,
        axiom_node_t * om_node,
        axutil_hash_t *inscope_namespaces);

    /**
     * If the provided namespace used by the provided element is one of the namespaces from the
     * parent of the root element, redeclares that namespace at the root element and removes it
     * from the hash of parent namespaces
     * @param om_element pointer to om_element
     * @param env environment MUST not be NULL
     * @param om_node pointer to this element node
     * @param ns pointer to namespace to redeclare
     * @param inscope_namespaces pointer to hash of parent namespaces
     */
    void AXIS2_CALL
    axiom_element_use_parent_namespace(
        axiom_element_t * om_element,
        const axutil_env_t * env,
        axiom_node_t * om_node,
        axiom_namespace_t *ns,
        axutil_hash_t *inscope_namespaces);

    /**
     * retrieves the default namespace of this element
     * @param om_element pointer to om element
     * @param env axutil_environment MUST Not be NULL
     * @param element_node corresponding om element node of this om element
     * @returns pointer to default namespace if available , NULL otherwise
     */
    axiom_namespace_t *AXIS2_CALL
    axiom_element_get_default_namespace(
        axiom_element_t * om_element,
        const axutil_env_t * env,
        axiom_node_t * element_node);

    /**
     * Serializes the start part of the given element
     * @param element element to be serialized.
     * @param env Environment. MUST NOT be NULL.
     * @param om_output AXIOM output handler to be used in serializing
     * @return status of the operation. AXIS2_SUCCESS on success else AXIS2_FAILURE
     */
    axis2_status_t AXIS2_CALL
    axiom_element_serialize_start_part(
        axiom_element_t * om_element,
        const axutil_env_t * env,
        axiom_output_t * om_output,
        axiom_node_t * ele_node);

    /**
     * Serializes the end part of the given element. serialize_start_part must
     *     have been called before calling this method.
     * @param om_element pointer to om_element
     * @param env environment MUST not be NULL
     * @param om_node pointer to this element node
     * @param om_output AXIOM output handler to be used in serializing
     * @return status of the operation. AXIS2_SUCCESS on success else AXIS2_FAILURE
     */
    axis2_status_t AXIS2_CALL
    axiom_element_serialize_end_part(
        axiom_element_t * om_element,
        const axutil_env_t * env,
        axiom_output_t * om_output);

    /**
     * Set whether the element is empty or not
     * @param om_element pointer to om_element
     * @param env environment MUST not be NULL
     * @param is_empty AXIS2_TRUE if empty AXIS2_FALSE if not empty
     * @return VOID
     */
    void AXIS2_CALL
    axiom_element_set_is_empty(
        axiom_element_t * om_element,
        const axutil_env_t * env,
        axis2_bool_t is_empty);

#endif /* AXIOM_ELEMENT_INTERNAL_H_ */