blob: a41693e118f9590b8ac8b8c579bdd12bcbc00169 [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_CONF_CTX_H
#define AXIS2_CONF_CTX_H
/**
* @defgroup axis2_conf_ctx configuration context
* @ingroup axis2_context
* configuration context is the holder for all the state information
* related to configuration. It holds all the service group context, service
* context and operation context that exists within an engine instance.
* An engine instance has only one configuration context associated with it
* (Singleton pattern).
* @{
*/
/**
* @file axis2_conf_ctx.h
*/
#include <axis2_defines.h>
#include <axis2_hash.h>
#include <axis2_env.h>
#include <axis2_ctx.h>
#include <axis2_svc_grp_ctx.h>
#ifdef __cplusplus
extern "C"
{
#endif
/** Type name for struct axis2_conf_ctx_ops */
typedef struct axis2_conf_ctx_ops axis2_conf_ctx_ops_t;
/** Type name for struct axis2_conf_ctx */
typedef struct axis2_conf_ctx axis2_conf_ctx_t;
struct axis2_conf;
/**
* configuration context ops struct.
* Encapsulator struct for ops of axis2_conf_ctx.
*/
struct axis2_conf_ctx_ops
{
/**
* Sets the configuration associated with the engine instance.
* @param conf_ctx pointer to configuration context
* @param env pointer to environment struct
* @param conf pointer to configuration
* @return AXIS2_SUCCESS on success, else AXIS2_FAILURE
*/
axis2_status_t (AXIS2_CALL *
set_conf)(
axis2_conf_ctx_t *conf_ctx,
const axis2_env_t *env,
struct axis2_conf *conf);
/**
* Gets the base struct, which is of type context
* @param conf_ctx pointer to configuration context
* @param env pointer to environment struct
* @return pointer to context struct, returns a reference not a cloned
* copy
*/
axis2_ctx_t *(AXIS2_CALL *
get_base)(
const axis2_conf_ctx_t *conf_ctx,
const axis2_env_t *env);
/**
* Gets the configuration of the engine.
* @param conf_ctx pointer to configuration context
* @param env pointer to environment struct
* @return pointer to configuration struct, returns a reference not a
* cloned copy
*/
axis2_conf_t *(AXIS2_CALL *
get_conf)(
const axis2_conf_ctx_t *conf_ctx,
const axis2_env_t *env);
/**
* Gets the hash map of operation context instances.
* @param conf_ctx pointer to configuration context
* @param env pointer to environment struct
* @return pointer to hash map containing all operation contexts
*/
axis2_hash_t *(AXIS2_CALL *
get_op_ctx_map)(
const axis2_conf_ctx_t *conf_ctx,
const axis2_env_t *env);
/**
* Gets the hash map of service context instances.
* @param conf_ctx pointer to configuration context
* @param env pointer to environment struct
* @return pointer to hash map containing all service contexts
*/
axis2_hash_t *(AXIS2_CALL *
get_svc_ctx_map)(
const axis2_conf_ctx_t *conf_ctx,
const axis2_env_t *env);
/**
* Gets the hash map of service group context instances.
* @param conf_ctx pointer to configuration context
* @param env pointer to environment struct
* @return pointer to hash map containing all service group contexts
*/
axis2_hash_t *(AXIS2_CALL *
get_svc_grp_ctx_map)(
const axis2_conf_ctx_t *conf_ctx,
const axis2_env_t *env);
/**
* Registers an operation context with the given message ID.
* @param conf_ctx pointer to configuration context
* @param env pointer to environment struct
* @param message_id message id related to the operation context
* @param op_ctx pointer to operation context, conf context assumes
* ownership of the operation context
* @return AXIS2_SUCCESS on success, else AXIS2_FAILURE
*/
axis2_status_t (AXIS2_CALL *
register_op_ctx)(
axis2_conf_ctx_t *conf_ctx,
const axis2_env_t *env,
const axis2_char_t *message_id,
axis2_op_ctx_t *op_ctx);
/**
* Gets operation context corresponding to the given message ID.
* @param conf_ctx pointer to configuration context
* @param env pointer to environment struct
* @param message_id message ID related to the operation to be retrieved
* @return pointer to operation context related to the given message ID
*/
axis2_op_ctx_t *(AXIS2_CALL *
get_op_ctx)(
const axis2_conf_ctx_t *conf_ctx,
const axis2_env_t *env,
const axis2_char_t *message_id);
/**
* Registers a service context with the given service ID.
* @param conf_ctx pointer t configuration context
* @param env pointer to environment struct
* @param svc_id ID of the service to be added
* @param svc_ctx pointer to service context
* @return AXIS2_SUCCESS on success, else AXIS2_FAILURE
*/
axis2_status_t (AXIS2_CALL *
register_svc_ctx)(
axis2_conf_ctx_t *conf_ctx,
const axis2_env_t *env,
const axis2_char_t *svc_id,
axis2_svc_ctx_t *svc_ctx);
/**
* Gets service context with the given service ID
* @param conf_ctx pointer to configuration context
* @param env pointer to environment struct
* @param svc_id service ID
* @return pointer to service context with the given service ID
*/
struct axis2_svc_ctx *(AXIS2_CALL *
get_svc_ctx)(
const axis2_conf_ctx_t *conf_ctx,
const axis2_env_t *env,
const axis2_char_t *svc_id);
/**
* Registers a service group context with the given service group ID.
* @param conf_ctx pointer to configuration context
* @param env pointer to environment struct
* @param svc_grp_id service group id
* @param svc_grp_ctx pointer to service group context
* @return AXIS2_SUCCESS on success, else AXIS2_FAILURE
*/
axis2_status_t (AXIS2_CALL *
register_svc_grp_ctx)(
axis2_conf_ctx_t *conf_ctx,
const axis2_env_t *env,
const axis2_char_t *svc_grp_id,
axis2_svc_grp_ctx_t *svc_grp_ctx);
/**
* Gets service group with the given service group ID.
* @param conf_ctx pointer to configuration context
* @param env pointer to environment struct
* @param svc_grp_id service group id
* @return pointer to service group context with the given ID
*/
axis2_svc_grp_ctx_t *(AXIS2_CALL *
get_svc_grp_ctx)(
const axis2_conf_ctx_t *conf_ctx,
const axis2_env_t *env,
const axis2_char_t *svc_grp_id);
/**
* Gets the root working directory. It is in this directory that the
* axis2.xml configuration file is located. The services and modules
* sub folders too are located in this directory.
* @param conf_ctx pointer to configuration context
* @param env pointer to environment struct
* @return pointer to string containing the root folder name
*/
const axis2_char_t *(AXIS2_CALL *
get_root_dir)(
const axis2_conf_ctx_t *conf_ctx,
const axis2_env_t *env);
/**
* Sets the root working directory. It is in this directory that the
* axis2.xml configuration file is located. The services and modules
* sub folders too are located in this directory.
* @param conf_ctx pointer to configuration context
* @param env pointer to environment struct
* @param path string containing the path of root directory
* @return AXIS2_SUCCESS on success, else AXIS2_FAILURE
*/
axis2_status_t (AXIS2_CALL *
set_root_dir)(
axis2_conf_ctx_t *conf_ctx,
const axis2_env_t *env,
const axis2_char_t *path);
/**
* Initializes the configuration context. Within this function, it would
* initialize all the service group context, service context and
* operation context instances stored within configuration context.
* @param conf_ctx pointer to configuration context
* @param env pointer to environment struct
* @param conf pointer to configuration struct
* @return AXIS2_SUCCESS on success, else AXIS2_FAILURE
*/
axis2_status_t (AXIS2_CALL *
init)(
axis2_conf_ctx_t *conf_ctx,
const axis2_env_t *env,
axis2_conf_t *conf);
/**
* Frees configuration context struct.
* @param conf_ctx pointer to configuration context
* @param env pointer to environment struct
* @return AXIS2_SUCCESS on success, else AXIS2_FAILURE
*/
axis2_status_t (AXIS2_CALL *
free)(
axis2_conf_ctx_t *conf_ctx,
const axis2_env_t *env);
/**
* This method fills the context hierarchy (service group, service and
* operation contexts that is) for the service and operation found in
* the given message context. If the context hierarchy is not already
* built it will create the contexts and build the context hierarchy.
* @param conf_ctx pointer to configuration context
* @param env pointer to environment struct
* @param msg_ctx pointer to message context with service and operation
* for which the context hierarchy is to be built set
* @return pointer to the service group context, which is the root of
* the context hierarchy for given service and operation
*/
axis2_svc_grp_ctx_t *(AXIS2_CALL *
fill_ctxs)(
axis2_conf_ctx_t *conf_ctx,
const axis2_env_t *env,
axis2_msg_ctx_t *msg_ctx);
};
/**
* configuration context struct.
*/
struct axis2_conf_ctx
{
/** operations configuration context struct */
axis2_conf_ctx_ops_t *ops;
};
/**
* Creates a configuration context struct instance.
* @param env pointer to environment struct
* @param conf pointer to configuration, configuration context assumes
* ownership of the configuration
* @return pointer to newly created configuration context
*/
AXIS2_EXTERN axis2_conf_ctx_t *AXIS2_CALL
axis2_conf_ctx_create(
const axis2_env_t *env,
struct axis2_conf *conf);
/** Sets the configuration.
@sa axis2_conf_ctx_ops#set_conf */
#define AXIS2_CONF_CTX_SET_CONF(conf_ctx, env, conf) \
((conf_ctx)->ops->set_conf(conf_ctx, env, conf))
/** Gets base which is of type context.
@sa axis2_conf_ctx_ops#get_base */
#define AXIS2_CONF_CTX_GET_BASE(conf_ctx, env) \
((conf_ctx)->ops->get_base(conf_ctx, env))
/** Gets the configuration.
@sa axis2_conf_ctx_ops#get_conf */
#define AXIS2_CONF_CTX_GET_CONF(conf_ctx, env) \
((conf_ctx)->ops->get_conf(conf_ctx, env))
/** Gets the operation context map.
@sa axis2_conf_ctx_ops#get_op_ctx_map */
#define AXIS2_CONF_CTX_GET_OP_CTX_MAP(conf_ctx, env) \
((conf_ctx)->ops->get_op_ctx_map(conf_ctx, env))
/** Gets the service context map.
@sa axis2_conf_ctx_ops#get_svc_ctx_map */
#define AXIS2_CONF_CTX_GET_SVC_CTX_MAP(conf_ctx, env) \
((conf_ctx)->ops->get_svc_ctx_map(conf_ctx, env))
/** Gets the service group context map.
@sa axis2_conf_ctx_ops#get_svc_grp_ctx_map */
#define AXIS2_CONF_CTX_GET_SVC_GRP_CTX_MAP(conf_ctx, env) \
((conf_ctx)->ops->get_svc_grp_ctx_map(conf_ctx, env))
/** Registers the operation context with given message ID.
@sa axis2_conf_ctx_ops#register_op_ctx */
#define AXIS2_CONF_CTX_REGISTER_OP_CTX(conf_ctx, env, message_id, op_ctx) \
((conf_ctx)->ops->register_op_ctx(conf_ctx, env, message_id, op_ctx))
/** Gets the operation context with given message ID.
@sa axis2_conf_ctx_ops#get_op_ctx */
#define AXIS2_CONF_CTX_GET_OP_CTX(conf_ctx, env, message_id) \
((conf_ctx)->ops->get_op_ctx(conf_ctx, env, message_id))
/** Registers the service context with given service ID.
@sa axis2_conf_ctx_ops#register_svc_ctx */
#define AXIS2_CONF_CTX_REGISTER_SVC_CTX(conf_ctx, env, svc_id, svc_ctx) \
((conf_ctx)->ops->register_svc_ctx(conf_ctx, env, svc_id, svc_ctx))
/** Gets the service context with given service ID.
@sa axis2_conf_ctx_ops#get_svc_ctx */
#define AXIS2_CONF_CTX_GET_SVC_CTX(conf_ctx, env, svc_id) \
((conf_ctx)->ops->get_svc_ctx(conf_ctx, env, svc_id))
/** Registers the service group context with given service group ID.
@sa axis2_conf_ctx_ops#register_svc_grp_ctx */
#define AXIS2_CONF_CTX_REGISTER_SVC_GRP_CTX(conf_ctx, env, svc_grp_id, svc_grp_ctx) \
((conf_ctx)->ops->register_svc_grp_ctx(conf_ctx, env, svc_grp_id, svc_grp_ctx))
/** Gets the service group context with given service group ID.
@sa axis2_conf_ctx_ops#get_svc_grp_ctx */
#define AXIS2_CONF_CTX_GET_SVC_GRP_CTX(conf_ctx, env, svc_grp_id) \
((conf_ctx)->ops->get_svc_grp_ctx(conf_ctx, env, svc_grp_id))
/** Gets the root directory.
@sa axis2_conf_ctx_ops#get_root_dir */
#define AXIS2_CONF_CTX_GET_ROOT_DIR(conf_ctx, env) \
((conf_ctx)->ops->get_root_dir(conf_ctx, env))
/** Sets the root directory.
@sa axis2_conf_ctx_ops#set_root_dir */
#define AXIS2_CONF_CTX_SET_ROOT_DIR(conf_ctx, env, path) \
((conf_ctx)->ops->set_root_dir(conf_ctx, env, path))
/** Initializes the configuration context.
@sa axis2_conf_ctx_ops#init */
#define AXIS2_CONF_CTX_INIT(conf_ctx, env, conf) \
((conf_ctx)->ops->init(conf_ctx, env, conf))
/** Frees the configuration context.
@sa axis2_conf_ctx_ops#free */
#define AXIS2_CONF_CTX_FREE(conf_ctx, env) \
((conf_ctx)->ops->free(conf_ctx, env))
/** Fill context hierarchy related to the service and operation set in message
context.
@sa axis2_conf_ctx_ops#fill_ctxs */
#define AXIS2_CONF_CTX_FILL_CTXS(conf_ctx, env, msg_ctx) \
((conf_ctx)->ops->fill_ctxs(conf_ctx, env, msg_ctx))
/** @} */
#ifdef __cplusplus
}
#endif
#endif /* AXIS2_CONF_CTX_H */