blob: b2b756471c7358e1aca6abe0ef5c75b9b7031939 [file] [log] [blame]
/*
* 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_ATTRIBUTE_H
#define AXIS2_OM_ATTRIBUTE_H
/**
* @file axis2_om_attribute.h
* @brief om attribute struct represents an xml attribute
*/
#include <axis2_env.h>
#include <axis2_qname.h>
#include <axis2_om_namespace.h>
#include <axis2_om_output.h>
#ifdef __cplusplus
extern "C"
{
#endif
struct axis2_om_attribute;
struct axis2_om_attribute_ops;
/**
* @defgroup axis2_om_attribute OM Attribute
* @ingroup axis2_om
* @{
*/
/**
* \brief OM attribute operations struct
* operations Encapsulator struct for axis2_om_attribute
*/
AXIS2_DECLARE_DATA typedef struct axis2_om_attribute_ops
{
/**
* Free an axis2_om_attribute struct
* @param om_attribute pointer to attribute struct to be freed
* @param env Environment. MUST NOT be NULL
* @return satus of the operation. AXIS2_SUCCESS on success
* else AXIS2_FAILURE
*/
axis2_status_t
(AXIS2_CALL *free)(struct axis2_om_attribute *om_attribute,
axis2_env_t **env);
/**
* Creates and returns a qname struct for this attribute
* @param om_attribute pointer to attribute struct
* for which the qname is to be returned
* @param env Environment. MUST NOT be NULL
* @return returns qname for given attribute.NULL on error
*/
axis2_qname_t * (AXIS2_CALL *get_qname)
(struct axis2_om_attribute *om_attribute,
axis2_env_t **env);
/**
* Serialize operation
* @param om_attribute pointer to attribute struct to be serialized
* @param env Environment. MUST NOT be NULL,
* @param om_output OM output handler to be used in serializing
* @return satus of the operation. AXIS2_SUCCESS on success else AXIS2_FAILURE.
*/
int (AXIS2_CALL *serialize)(struct axis2_om_attribute *om_attribute,
axis2_env_t **env,
axis2_om_output_t *om_output);
/** returns the localname of this attribute
*@param om_attribute pointer to attribute struct
*@param env environment. MUST NOT not be NULL.
*@return localname returns NULL on error.
*/
axis2_char_t* (AXIS2_CALL *get_localname)(
struct axis2_om_attribute *om_attribute,
axis2_env_t **env);
/**
* returns value of this attribute
*@param om_attribute pointer to om_attribute struct
*@param env environment N not be null
*@return value , null on error
*/
axis2_char_t* (AXIS2_CALL *get_value)
(struct axis2_om_attribute *om_attribute,
axis2_env_t **env);
/**
* returns namespace of this attribute
*@param om_attribute
*@param env environment MUST NOT be NULL
*@return a pointer to om_namespace struct , returns NULL on error.
*/
axis2_om_namespace_t* (AXIS2_CALL *get_namespace)
(struct axis2_om_attribute *om_attribute,
axis2_env_t **env);
/** sets the localname of the attribute
*@param om_attribute pointer to om attribute struct.
*@param env environment, MUST NOT be null.
*@param localname localname that should be set for this attribute
*@return status code AXIS2_SUCCESS on success and AXIS2_FAILURE on error.
*/
axis2_status_t (AXIS2_CALL *set_localname)
(struct axis2_om_attribute *om_attribute,
axis2_env_t **env,
const axis2_char_t *localname);
/** set the attribute value
*@param om_attribute a pointer to om_attribute struct.
*@param env environment, MUST NOT be NULL.
*@param value value that should be set for this attribute
*@return status code, AXIS2_SUCCESS on success and AXIS2_FAILURE on error.
*/
axis2_status_t (AXIS2_CALL *set_value)
(struct axis2_om_attribute *om_attribute,
axis2_env_t **env,
const axis2_char_t *value);
/** set namespace of the attribute
*@param om_attribute a pointer to om_attribute struct
*@param env environment, MUST NOT be NULL.
*@param om_namespace a pointer to om_namespace struct that should be set
* for this attribute
*@return status code, AXIS2_SUCCESS on success and AXIS2_FAILURE on error.
*/
axis2_status_t (AXIS2_CALL *set_namespace)
(struct axis2_om_attribute *om_attribute,
axis2_env_t **env,
axis2_om_namespace_t *om_namespace);
} axis2_om_attribute_ops_t;
/**
* \brief OM attribute struct
* Handles the XML attribute in OM
*/
typedef struct axis2_om_attribute
{
/** operations of attribute struct */
axis2_om_attribute_ops_t *ops;
} axis2_om_attribute_t;
/**
* creates an om_attribute struct
* @param env Environment. MUST NOT be NULL
* @param localname localname of the attribute, should not be a null value.
* @param value normalized attribute value. cannot be NULL
* @param ns namespace, if any, of the attribute. Optional, can be NULL
* @return a pointer to newly created attribute struct, returns NULL on error with
* error code set in environment's error.
*/
AXIS2_DECLARE(axis2_om_attribute_t *)
axis2_om_attribute_create (axis2_env_t **env,
const axis2_char_t *localname,
const axis2_char_t *value,
axis2_om_namespace_t *ns);
/******************** Macros **************************************************/
/** free given attribute */
#define AXIS2_OM_ATTRIBUTE_FREE(om_attribute, env) \
((om_attribute)->ops->free(om_attribute, env))
/** get qname of given attribute */
#define AXIS2_OM_ATTRIBUTE_GET_QNAME(om_attribute,env) \
((om_attribute)->ops->get_qname(om_attribute, env))
/** serialize given attribute */
#define AXIS2_OM_ATTRIBUTE_SERIALIZE(om_attribute, env, om_ouput) \
((om_attribute)->ops->serialize(om_attribute, env, om_output))
/** get namespace of an the attribute */
#define AXIS2_OM_ATTRIBUTE_GET_NAMESPACE(om_attribute, env) \
((om_attribute)->ops->get_namespace(om_attribute, env))
/** get attribute localname */
#define AXIS2_OM_ATTRIBUTE_GET_LOCALNAME(om_attribute, env) \
((om_attribute)->ops->get_localname(om_attribute, env))
/** grt value of attribute */
#define AXIS2_OM_ATTRIBUTE_GET_VALUE(om_attribute, env) \
((om_attribute)->ops->get_value(om_attribute, env))
/** set namespace for this attribute */
#define AXIS2_OM_ATTRIBUTE_SET_NAMESPACE(om_attribute, env,ns) \
((om_attribute)->ops->set_namespace(om_attribute, env,ns))
/** set localname for this attribute */
#define AXIS2_OM_ATTRIBUTE_SET_LOCALNAME(om_attribute, env,localname) \
((om_attribute)->ops->set_localname(om_attribute, env,localname))
/** set attribue value */
#define AXIS2_OM_ATTRIBUTE_SET_VALUE(om_attribute, env,value) \
((om_attribute)->ops->set_value(om_attribute, env,value))
/** @} */
#ifdef __cplusplus
}
#endif
#endif /* AXIS2_OM_ATTRIBUTE_H */