blob: 434567724098aecad75186a848d091e3df08ee91 [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_MODULE_DESC_H
#define AXIS2_MODULE_DESC_H
/**
* @defgroup axis2_module_desc module description
* @ingroup axis2_desc
* module holds information about a module. This information includes module
* parameters and handler information.
* Modules are available to all services if axis2.xml has a module reference
* entry. Alternatively, a module could be made available to selected services
* by including a module reference entry in services.xml.
* @{
*/
#include <axis2_const.h>
#include <axis2_error.h>
#include <axis2_defines.h>
#include <axis2_env.h>
#include <axis2_allocator.h>
#include <axis2_string.h>
#include <axis2_array_list.h>
#include <axis2_param_container.h>
#include <axis2_flow_container.h>
#include <axis2_param.h>
#include <axis2_op.h>
#include <axis2_conf.h>
#ifdef __cplusplus
extern "C"
{
#endif
/** Type name for struct axis2_module_desc_ops */
typedef struct axis2_module_desc_ops axis2_module_desc_ops_t;
/** Type name for struct axis2_module_desc */
typedef struct axis2_module_desc axis2_module_desc_t;
struct axis2_op;
struct axis2_conf;
/**
* module description ops struct.
* Encapsulator struct for ops of axis2_module_desc.
*/
struct axis2_module_desc_ops
{
/**
* Frees module description.
* @param module_desc pointer to module description
* @param env pointer to environment struct
* @return AXIS2_SUCCESS on success, else AXIS2_FAILURE
*/
axis2_status_t (AXIS2_CALL *
free)(
axis2_module_desc_t *module_desc,
const axis2_env_t *env);
/**
* Gets flow representing in flow.
* @param module_desc pointer to module description
* @param env pointer to environment struct
* @return pointer to flow that represents in flow, returns a reference
* not a cloned copy
*/
axis2_flow_t *(AXIS2_CALL *
get_in_flow)(
const axis2_module_desc_t *module_desc,
const axis2_env_t *env);
/**
* Sets flow representing in flow.
* @param module_desc pointer to module description
* @param env pointer to environment struct
* @param in_flow pointer to flow representing in flow, module assumes
* ownership of flow
* @return AXIS2_SUCCESS on success, else AXIS2_FAILURE
*/
axis2_status_t (AXIS2_CALL *
set_in_flow)(
axis2_module_desc_t *module_desc,
const axis2_env_t *env,
axis2_flow_t *in_flow);
/**
* Gets flow representing out flow.
* @param module_desc pointer to module description
* @param env pointer to environment struct
* @return pointer to flow that represents out flow, returns a reference
* not a cloned copy
*/
axis2_flow_t *(AXIS2_CALL *
get_out_flow)(
const axis2_module_desc_t *module_desc,
const axis2_env_t *env);
/**
* Sets flow representing out flow.
* @param module_desc pointer to module description
* @param env pointer to environment struct
* @param out_flow pointer to flow representing out flow, module assumes
* ownership of flow
* @return AXIS2_SUCCESS on success, else AXIS2_FAILURE
*/
axis2_status_t (AXIS2_CALL *
set_out_flow)(
axis2_module_desc_t *module_desc,
const axis2_env_t *env,
axis2_flow_t *out_flow);
/**
* Gets flow representing fault in flow.
* @param module_desc pointer to module description
* @param env pointer to environment struct
* @return pointer to flow that represents fault in flow, returns a reference
* not a cloned copy
*/
axis2_flow_t *(AXIS2_CALL *
get_fault_in_flow)(
const axis2_module_desc_t *module_desc,
const axis2_env_t *env);
/**
* Sets flow representing fault in flow.
* @param module_desc pointer to module description
* @param env pointer to environment struct
* @param falut_in_flow pointer to flow representing fault in flow,
* module assumes ownership of flow
* @return AXIS2_SUCCESS on success, else AXIS2_FAILURE
*/
axis2_status_t (AXIS2_CALL *
set_fault_in_flow)(
axis2_module_desc_t *module_desc,
const axis2_env_t *env,
axis2_flow_t *falut_in_flow);
/**
* Gets flow representing fault out flow.
* @param module_desc pointer to module description
* @param env pointer to environment struct
* @return pointer to flow that represents fault out flow, returns a
* reference not a cloned copy
*/
axis2_flow_t *(AXIS2_CALL *
get_fault_out_flow)(
const axis2_module_desc_t *module_desc,
const axis2_env_t *env);
/**
* Sets flow representing fault out flow.
* @param module_desc pointer to module description
* @param env pointer to environment struct
* @param fault_out_flow pointer to flow representing fault out flow,
* module assumes ownership of flow
* @return AXIS2_SUCCESS on success, else AXIS2_FAILURE
*/
axis2_status_t (AXIS2_CALL *
set_fault_out_flow)(
axis2_module_desc_t *module_desc,
const axis2_env_t *env,
axis2_flow_t *fault_out_flow);
/**
* Gets module QName.
* @param module_desc pointer to module description
* @param env pointer to environment struct
* @return pointer to QName
*/
const axis2_qname_t *(AXIS2_CALL *
get_qname)(
const axis2_module_desc_t *module_desc,
const axis2_env_t *env);
/**
* Sets module QName.
* @param module_desc pointer to module description
* @param env pointer to environment struct
* @param qname pointer to qname
* @return AXIS2_SUCCESS on success, else AXIS2_FAILURE
*/
axis2_status_t (AXIS2_CALL *
set_qname)(
axis2_module_desc_t *module_desc,
const axis2_env_t *env,
const axis2_qname_t *qname);
/**
* Adds given operation to module.
* @param module_desc pointer to module description
* @param env pointer to environment struct
* @param op pointer to operation, module assumes ownership of operation
* @return AXIS2_SUCCESS on success, else AXIS2_FAILURE
*/
axis2_status_t (AXIS2_CALL *
add_op)(
axis2_module_desc_t *module_desc,
const axis2_env_t *env,
struct axis2_op *op);
/**
* Gets all operations associated with module.
* @param module_desc pointer to module description
* @param env pointer to environment struct
* @return pointer to hash map containing the operations
*/
axis2_hash_t *(AXIS2_CALL *
get_all_ops)(
const axis2_module_desc_t *module_desc,
const axis2_env_t *env);
/**
* Gets parent which is of type configuration.
* @param module_desc pointer to module description
* @param env pointer to environment struct
* @return pointer to configuration, returns a reference not a
* cloned copy
*/
struct axis2_conf *(AXIS2_CALL *
get_parent)(
const axis2_module_desc_t *module_desc,
const axis2_env_t *env);
/**
* Sets parent which is of type configuration.
* @param module_desc pointer to module description
* @param env pointer to environment struct
* @param parent pointer to parent configuration, module does not assume
* the ownership of configuration
* @return AXIS2_SUCCESS on success, else AXIS2_FAILURE
*/
axis2_status_t (AXIS2_CALL *
set_parent)(
axis2_module_desc_t *module_desc,
const axis2_env_t *env,
struct axis2_conf *parent);
/**
* Add parameter
* @param module_desc pointer to module description
* @param env pointer to environment struct
* @param param pointer to parameter struct
* @return AXIS2_SUCCESS on success, else AXIS2_FAILURE
*/
axis2_status_t (AXIS2_CALL *
add_param)(
axis2_module_desc_t *module_desc,
const axis2_env_t *env,
axis2_param_t *param);
/**
* Gets parameter with given name.
* @param module_desc pointer to module description
* @param env pointer to environment struct
* @param name parameter name string
* @return pointer to parameter corresponding to given name
*/
axis2_param_t *(AXIS2_CALL *
get_param)(
const axis2_module_desc_t *module_desc,
const axis2_env_t *env,
const axis2_char_t *name);
/**
* Gets all parameters associated with module.
* @param module_desc pointer to module description
* @param env pointer to environment struct
* @param pointer to array list containing all parameters
*/
axis2_array_list_t *(AXIS2_CALL *
get_all_params)(
const axis2_module_desc_t *module_desc,
const axis2_env_t *env);
/**
* Checks if a given parameter is locked.
* @param module_desc pointer to module description
* @param env pointer to environment struct
* @param param_name parameter name string
* @return AXIS2_TRUE if named parameter is locked, else AXIS2_FALSE
*/
axis2_bool_t (AXIS2_CALL *
is_param_locked)(
const axis2_module_desc_t *module_desc,
const axis2_env_t *env,
const axis2_char_t *param_name);
/**
* Gets module associated with module description.
* @param module_desc pointer to module description
* @param env pointer to environment struct
* @return pointer to module
*/
struct axis2_module *(AXIS2_CALL *
get_module)(
const axis2_module_desc_t *module_desc,
const axis2_env_t *env);
/**
* @param module_desc pointer to module description
* @param env pointer to environment struct
* @param module pointer to module, module description assumes ownership
* of module
* @return AXIS2_SUCCESS on success, else AXIS2_FAILURE
*/
axis2_status_t (AXIS2_CALL *
set_module)(
axis2_module_desc_t *module_desc,
const axis2_env_t *env,
struct axis2_module *module);
};
/**
* module description struct.
*/
struct axis2_module_desc
{
/** operations of module description */
axis2_module_desc_ops_t *ops;
/**
* flow container that encapsulates the flows associated with the
* module
*/
axis2_flow_container_t *flow_container;
/**
* parameter container that stores all the parameters associated with
* the module
*/
axis2_param_container_t *params;
};
/**
* Creates module description struct instance.
* @param env pointer to environment struct
* @return pointer to newly created module description
*/
AXIS2_EXTERN axis2_module_desc_t *AXIS2_CALL
axis2_module_desc_create (
const axis2_env_t *env);
/**
* Creates module description struct instance with given QName.
* @param env pointer to environment struct
* @param qname pointer to QName
* @return pointer to newly created module description
*/
AXIS2_EXTERN axis2_module_desc_t *AXIS2_CALL
axis2_module_desc_create_with_qname(
const axis2_env_t *env,
const axis2_qname_t *qname);
/**
* Frees module description passed as void pointer. This method will cast
* the void pointer parameter into appropriate type and then call module
* description free method on top of that pointer.
* @param module_desc pointer to module description as a void pointer
* @param env pointer to environment struct
* @return AXIS2_SUCCESS on success, else AXIS2_FAILURE
*/
AXIS2_EXTERN axis2_status_t AXIS2_CALL
axis2_module_desc_free_void_arg(
void *module_desc,
const axis2_env_t *env);
/** Frees module description.
@sa axis2_module_desc_ops#free */
#define AXIS2_MODULE_DESC_FREE(module_desc, env) \
((module_desc)->ops->free(module_desc, env))
/** Gets in flow.
@sa axis2_module_desc_ops#get_in_flow */
#define AXIS2_MODULE_DESC_GET_IN_FLOW(module_desc, env) \
((module_desc)->ops->get_in_flow (module_desc, env))
/** Sets in flow.
@sa axis2_module_desc_ops#set_in_flow */
#define AXIS2_MODULE_DESC_SET_IN_FLOW(module_desc, env, in_flow) \
((module_desc)->ops->set_in_flow (module_desc, env, in_flow))
/** Gets out flow.
@sa axis2_module_desc_ops#get_out_flow */
#define AXIS2_MODULE_DESC_GET_OUT_FLOW(module_desc, env) \
((module_desc)->ops->get_out_flow (module_desc, env))
/** Sets out flow.
@sa axis2_module_desc_ops#set_out_flow */
#define AXIS2_MODULE_DESC_SET_OUT_FLOW(module_desc, env, out_flow) \
((module_desc)->ops->set_out_flow (module_desc, env, out_flow))
/** Gets fault in flow.
@sa axis2_module_desc_ops#get_fault_in_flow */
#define AXIS2_MODULE_DESC_GET_FAULT_IN_FLOW(module_desc, env) \
((module_desc)->ops->get_fault_in_flow (module_desc, env))
/** Sets fault in flow.
@sa axis2_module_desc_ops#set_fault_in_flow */
#define AXIS2_MODULE_DESC_SET_FAULT_IN_FLOW(module_desc, env, falut_in_flow) \
((module_desc)->ops->set_fault_in_flow(module_desc , env, falut_in_flow))
/** Gets fault out flow.
@sa axis2_module_desc_ops#get_fault_out_flow */
#define AXIS2_MODULE_DESC_GET_FAULT_OUT_FLOW(module_desc, env) \
((module_desc)->ops->get_fault_out_flow(module_desc , env))
/** Sets fault out flow.
@sa axis2_module_desc_ops#set_fault_out_flow */
#define AXIS2_MODULE_DESC_SET_FAULT_OUT_FLOW(module_desc, env, falut_out_flow) \
((module_desc)->ops->set_fault_out_flow(module_desc , env, falut_out_flow))
/** Gets QName.
@sa axis2_module_desc_ops#get_qname */
#define AXIS2_MODULE_DESC_GET_QNAME(module_desc, env) \
((module_desc)->ops->get_qname(module_desc, env))
/** Sets QName.
@sa axis2_module_desc_ops#set_qname */
#define AXIS2_MODULE_DESC_SET_QNAME(module_desc, env, qname) \
((module_desc)->ops->set_qname(module_desc, env, qname))
/** Adds given operation to list of operations.
@sa axis2_module_desc_ops#add_op */
#define AXIS2_MODULE_DESC_ADD_OP(module_desc, env, op) \
((module_desc)->ops->add_op(module_desc, env, op))
/** Gets list of all operations.
@sa axis2_module_desc_ops#get_all_ops */
#define AXIS2_MODULE_DESC_GET_ALL_OPS(module_desc, env) \
((module_desc)->ops->get_all_ops(module_desc, env))
/** Gets parent.
@sa axis2_module_desc_ops#get_parent */
#define AXIS2_MODULE_DESC_GET_PARENT(module_desc, env) \
((module_desc)->ops->get_parent(module_desc, env))
/** Sets parent.
@sa axis2_module_desc_ops#set_parent */
#define AXIS2_MODULE_DESC_SET_PARENT(module_desc, env, parent) \
((module_desc)->ops->set_parent(module_desc, env, parent))
/** Adds parameter.
@sa axis2_module_desc_ops#add_param */
#define AXIS2_MODULE_DESC_ADD_PARAM(module_desc, env, param) \
((module_desc)->ops->add_param(module_desc, env, param))
/** Gets named parameter.
@sa axis2_module_desc_ops#get_param */
#define AXIS2_MODULE_DESC_GET_PARAM(module_desc, env, name) \
((module_desc)->ops->get_param(module_desc, env, name))
/** Get all parameters.
@sa axis2_module_desc_ops#get_all_params */
#define AXIS2_MODULE_DESC_GET_ALL_PARAMS(module_desc, env) \
((module_desc)->ops->get_all_params(module_desc, env))
/** Checks if named parameter is locked.
@sa axis2_module_desc_ops#is_param_locked */
#define AXIS2_MODULE_DESC_IS_PARAM_LOCKED(module_desc, env, param_name) \
((module_desc)->ops->is_param_locked(module_desc, env, param_name))
/** Gets module associated with module description.
@sa axis2_module_desc_ops#get_module */
#define AXIS2_MODULE_DESC_GET_MODULE(module_desc, env) \
((module_desc)->ops->get_module(module_desc, env))
/** Sets module associated with module description.
@sa axis2_module_desc_ops#set_module */
#define AXIS2_MODULE_DESC_SET_MODULE(module_desc, env, module) \
((module_desc)->ops->set_module(module_desc, env, module))
/** @} */
#ifdef __cplusplus
}
#endif
#endif /* AXIS2_MODULE_DESC_H */