blob: 2f4b9049798ef51559a9b65405f78206f30ff56f [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.
*/
#include "sandesha2_permanent_create_seq_mgr.h"
#include "sandesha2_permanent_bean_mgr.h"
#include <sandesha2_constants.h>
#include <sandesha2_create_seq_mgr.h>
#include <sandesha2_error.h>
#include <axutil_log.h>
#include <axutil_hash.h>
#include <axutil_thread.h>
#include <axutil_property.h>
#include <axutil_types.h>
#include <stdio.h>
/**
* @brief Sandesha2 Permanent Create Sequence Manager Struct Impl
* Sandesha2 Permanent Create Sequence Manager
*/
typedef struct sandesha2_permanent_create_seq_mgr
{
sandesha2_create_seq_mgr_t seq_mgr;
sandesha2_permanent_bean_mgr_t *bean_mgr;
}sandesha2_permanent_create_seq_mgr_t;
#define SANDESHA2_INTF_TO_IMPL(seq_mgr) \
((sandesha2_permanent_create_seq_mgr_t *) seq_mgr)
static int
sandesha2_create_seq_find_callback(
void *not_used,
int argc,
char **argv,
char **col_name)
{
int i = 0;
sandesha2_create_seq_bean_t *bean = NULL;
sandesha2_bean_mgr_args_t *args = (sandesha2_bean_mgr_args_t *) not_used;
const axutil_env_t *env = args->env;
axutil_array_list_t *data_list = (axutil_array_list_t *) args->data;
if(argc < 1)
{
args->data = NULL;
return 0;
}
if(!data_list)
{
data_list = axutil_array_list_create(env, 0);
args->data = data_list;
}
bean = sandesha2_create_seq_bean_create(env);
for(i = 0; i < argc; i++)
{
if(0 == axutil_strcmp(col_name[i], "create_seq_msg_id"))
sandesha2_create_seq_bean_set_create_seq_msg_id(bean, env, argv[i]);
if(0 == axutil_strcmp(col_name[i], "internal_seq_id"))
if(argv[i])
sandesha2_create_seq_bean_set_internal_sequence_id(bean, env, argv[i]);
if(0 == axutil_strcmp(col_name[i], "seq_id"))
if(argv[i])
sandesha2_create_seq_bean_set_outgoing_sequence_id(bean, env, argv[i]);
if(0 == axutil_strcmp(col_name[i], "create_seq_msg_store_key"))
if(argv[i])
sandesha2_create_seq_bean_set_create_seq_msg_store_key(bean, env,
argv[i]);
if(0 == axutil_strcmp(col_name[i], "ref_msg_store_key"))
if(argv[i])
sandesha2_create_seq_bean_set_ref_msg_store_key(bean, env, argv[i]);
}
axutil_array_list_add(data_list, env, bean);
return 0;
}
static int
sandesha2_create_seq_retrieve_callback(
void *not_used,
int argc,
char **argv,
char **col_name)
{
int i = 0;
sandesha2_bean_mgr_args_t *args = (sandesha2_bean_mgr_args_t *) not_used;
const axutil_env_t *env = args->env;
sandesha2_create_seq_bean_t *bean = (sandesha2_create_seq_bean_t *) args->data;
if(argc < 1)
{
args->data = NULL;
return 0;
}
if(!bean)
{
bean = sandesha2_create_seq_bean_create(env);
args->data = bean;
}
for(i = 0; i < argc; i++)
{
if(!axutil_strcmp(col_name[i], "create_seq_msg_id"))
{
sandesha2_create_seq_bean_set_create_seq_msg_id(bean, env, argv[i]);
}
if(!axutil_strcmp(col_name[i], "internal_seq_id"))
{
if(argv[i])
{
sandesha2_create_seq_bean_set_internal_sequence_id(bean, env, argv[i]);
}
}
if(!axutil_strcmp(col_name[i], "seq_id"))
{
if(argv[i])
{
sandesha2_create_seq_bean_set_outgoing_sequence_id(bean, env, argv[i]);
}
}
if(!axutil_strcmp(col_name[i], "create_seq_msg_store_key"))
{
if(argv[i])
{
sandesha2_create_seq_bean_set_create_seq_msg_store_key(bean, env, argv[i]);
}
}
if(!axutil_strcmp(col_name[i], "ref_msg_store_key"))
{
if(argv[i])
{
sandesha2_create_seq_bean_set_ref_msg_store_key(bean, env, argv[i]);
}
}
}
return 0;
}
static void AXIS2_CALL
sandesha2_permanent_create_seq_mgr_free(
sandesha2_create_seq_mgr_t *seq_mgr,
const axutil_env_t *envv);
static axis2_bool_t AXIS2_CALL
sandesha2_permanent_create_seq_mgr_insert(
sandesha2_create_seq_mgr_t *seq_mgr,
const axutil_env_t *env,
sandesha2_create_seq_bean_t *bean);
static axis2_bool_t AXIS2_CALL
sandesha2_permanent_create_seq_mgr_remove(
sandesha2_create_seq_mgr_t *seq_mgr,
const axutil_env_t *env,
axis2_char_t *msg_id);
static sandesha2_create_seq_bean_t *AXIS2_CALL
sandesha2_permanent_create_seq_mgr_retrieve(
sandesha2_create_seq_mgr_t *seq_mgr,
const axutil_env_t *env,
axis2_char_t *msg_id);
static axis2_bool_t AXIS2_CALL
sandesha2_permanent_create_seq_mgr_update(
sandesha2_create_seq_mgr_t *seq_mgr,
const axutil_env_t *env,
sandesha2_create_seq_bean_t *bean);
static axutil_array_list_t *AXIS2_CALL
sandesha2_permanent_create_seq_mgr_find(
sandesha2_create_seq_mgr_t *seq_mgr,
const axutil_env_t *env,
sandesha2_create_seq_bean_t *bean);
static sandesha2_create_seq_bean_t *AXIS2_CALL
sandesha2_permanent_create_seq_mgr_find_unique(
sandesha2_create_seq_mgr_t *seq_mgr,
const axutil_env_t *env,
sandesha2_create_seq_bean_t *bean);
static const sandesha2_create_seq_mgr_ops_t create_seq_mgr_ops =
{
sandesha2_permanent_create_seq_mgr_free,
sandesha2_permanent_create_seq_mgr_insert,
sandesha2_permanent_create_seq_mgr_remove,
sandesha2_permanent_create_seq_mgr_retrieve,
sandesha2_permanent_create_seq_mgr_update,
sandesha2_permanent_create_seq_mgr_find,
sandesha2_permanent_create_seq_mgr_find_unique
};
AXIS2_EXTERN sandesha2_create_seq_mgr_t * AXIS2_CALL
sandesha2_permanent_create_seq_mgr_create(
const axutil_env_t *env,
axis2_char_t *dbname)
{
sandesha2_permanent_create_seq_mgr_t *seq_mgr_impl = NULL;
seq_mgr_impl = AXIS2_MALLOC(env->allocator,
sizeof(sandesha2_permanent_create_seq_mgr_t));
seq_mgr_impl->bean_mgr = sandesha2_permanent_bean_mgr_create(env,
dbname, SANDESHA2_BEAN_MAP_CREATE_SEQUENCE);
seq_mgr_impl->seq_mgr.ops = create_seq_mgr_ops;
return &(seq_mgr_impl->seq_mgr);
}
static void AXIS2_CALL
sandesha2_permanent_create_seq_mgr_free(
sandesha2_create_seq_mgr_t *seq_mgr,
const axutil_env_t *env)
{
sandesha2_permanent_create_seq_mgr_t *seq_mgr_impl = NULL;
seq_mgr_impl = SANDESHA2_INTF_TO_IMPL(seq_mgr);
if(seq_mgr_impl->bean_mgr)
{
sandesha2_permanent_bean_mgr_free(seq_mgr_impl->bean_mgr, env);
seq_mgr_impl->bean_mgr = NULL;
}
if(seq_mgr_impl)
{
AXIS2_FREE(env->allocator, seq_mgr_impl);
seq_mgr_impl = NULL;
}
}
static axis2_bool_t AXIS2_CALL
sandesha2_permanent_create_seq_mgr_insert(
sandesha2_create_seq_mgr_t *seq_mgr,
const axutil_env_t *env,
sandesha2_create_seq_bean_t *bean)
{
sandesha2_permanent_create_seq_mgr_t *seq_mgr_impl = NULL;
axis2_bool_t ret = AXIS2_FALSE;
axis2_char_t sql_insert[1024];
axis2_char_t *create_seq_msg_id = NULL;
axis2_char_t *internal_seq_id = NULL;
axis2_char_t *seq_id = NULL;
axis2_char_t *create_seq_msg_store_key = NULL;
axis2_char_t *ref_msg_store_key = NULL;
AXIS2_PARAM_CHECK(env->error, bean, AXIS2_FALSE);
create_seq_msg_id = sandesha2_create_seq_bean_get_create_seq_msg_id(
bean, env);
internal_seq_id = sandesha2_create_seq_bean_get_internal_sequence_id(bean, env);
seq_id = sandesha2_create_seq_bean_get_rms_sequence_id(bean, env);
create_seq_msg_store_key = sandesha2_create_seq_bean_get_create_seq_msg_store_key(bean, env);
ref_msg_store_key = sandesha2_create_seq_bean_get_ref_msg_store_key(bean, env);
seq_mgr_impl = SANDESHA2_INTF_TO_IMPL(seq_mgr);
sprintf(sql_insert, "insert into create_seq(create_seq_msg_id, "\
"internal_seq_id, seq_id, create_seq_msg_store_key, ref_msg_store_key) "\
"values('%s', '%s', '%s', '%s', '%s');", create_seq_msg_id,
internal_seq_id, seq_id, create_seq_msg_store_key, ref_msg_store_key);
ret = sandesha2_permanent_bean_mgr_insert(seq_mgr_impl->bean_mgr, env,
sql_insert);
return ret;
}
static axis2_bool_t AXIS2_CALL
sandesha2_permanent_create_seq_mgr_remove(
sandesha2_create_seq_mgr_t *seq_mgr,
const axutil_env_t *env,
axis2_char_t *msg_id)
{
sandesha2_permanent_create_seq_mgr_t *seq_mgr_impl = NULL;
axis2_char_t sql_remove[256];
AXIS2_PARAM_CHECK(env->error, msg_id, AXIS2_FALSE);
seq_mgr_impl = SANDESHA2_INTF_TO_IMPL(seq_mgr);
sprintf(sql_remove, "delete from create_seq where create_seq_msg_id='%s';",
msg_id);
return sandesha2_permanent_bean_mgr_remove(seq_mgr_impl->bean_mgr, env,
sql_remove);
}
static sandesha2_create_seq_bean_t *AXIS2_CALL
sandesha2_permanent_create_seq_mgr_retrieve(
sandesha2_create_seq_mgr_t *seq_mgr,
const axutil_env_t *env,
axis2_char_t *msg_id)
{
axis2_char_t sql_retrieve[256];
sandesha2_permanent_create_seq_mgr_t *seq_mgr_impl = NULL;
AXIS2_PARAM_CHECK(env->error, msg_id, AXIS2_FALSE);
seq_mgr_impl = SANDESHA2_INTF_TO_IMPL(seq_mgr);
sprintf(sql_retrieve, "select create_seq_msg_id, internal_seq_id,"\
"seq_id, create_seq_msg_store_key, ref_msg_store_key from create_seq "\
"where create_seq_msg_id='%s';", msg_id);
return (sandesha2_create_seq_bean_t *) sandesha2_permanent_bean_mgr_retrieve(
seq_mgr_impl->bean_mgr, env, sandesha2_create_seq_retrieve_callback,
sql_retrieve);
}
static axis2_bool_t AXIS2_CALL
sandesha2_permanent_create_seq_mgr_update(
sandesha2_create_seq_mgr_t *seq_mgr,
const axutil_env_t *env,
sandesha2_create_seq_bean_t *bean)
{
sandesha2_permanent_create_seq_mgr_t *seq_mgr_impl = NULL;
axis2_char_t sql_update[1024];
axis2_bool_t ret = AXIS2_FALSE;
axis2_char_t *create_seq_msg_id = NULL;
axis2_char_t *internal_seq_id = NULL;
axis2_char_t *create_seq_msg_store_key = NULL;
axis2_char_t *seq_id = NULL;
axis2_char_t *ref_msg_store_key = NULL;
AXIS2_PARAM_CHECK(env->error, bean, AXIS2_FALSE);
create_seq_msg_id = sandesha2_create_seq_bean_get_create_seq_msg_id(
bean, env);
internal_seq_id = sandesha2_create_seq_bean_get_internal_sequence_id(bean, env);
seq_id = sandesha2_create_seq_bean_get_rms_sequence_id(bean, env);
create_seq_msg_store_key = sandesha2_create_seq_bean_get_create_seq_msg_store_key(bean, env);
ref_msg_store_key = sandesha2_create_seq_bean_get_ref_msg_store_key(bean, env);
seq_mgr_impl = SANDESHA2_INTF_TO_IMPL(seq_mgr);
sprintf(sql_update, "update create_seq set internal_seq_id='%s', seq_id='%s'"\
",create_seq_msg_store_key='%s', ref_msg_store_key='%s' where "\
"create_seq_msg_id='%s';", internal_seq_id, seq_id,
create_seq_msg_store_key, ref_msg_store_key, create_seq_msg_id);
ret = sandesha2_permanent_bean_mgr_update(seq_mgr_impl->bean_mgr, env, sql_update);
return ret;
}
static axutil_array_list_t *AXIS2_CALL
sandesha2_permanent_create_seq_mgr_find(
sandesha2_create_seq_mgr_t *seq_mgr,
const axutil_env_t *env,
sandesha2_create_seq_bean_t *bean)
{
axis2_bool_t add_where = AXIS2_FALSE;
axis2_char_t sql_find[1024];
axis2_char_t *create_seq_msg_id = NULL;
axis2_char_t *internal_seq_id = NULL;
axis2_char_t *seq_id = NULL;
axutil_array_list_t *find_list = NULL;
sandesha2_permanent_create_seq_mgr_t *seq_mgr_impl = NULL;
seq_mgr_impl = SANDESHA2_INTF_TO_IMPL(seq_mgr);
if(bean)
{
create_seq_msg_id = sandesha2_create_seq_bean_get_create_seq_msg_id(
bean, env);
internal_seq_id = sandesha2_create_seq_bean_get_internal_sequence_id(bean, env);
seq_id = sandesha2_create_seq_bean_get_rms_sequence_id(bean, env);
}
sprintf(sql_find, "select create_seq_msg_id,internal_seq_id,"\
"seq_id,create_seq_msg_store_key, ref_msg_store_key from create_seq");
if(create_seq_msg_id)
{
sprintf(sql_find + axutil_strlen(sql_find),
" where create_seq_msg_id='%s'", create_seq_msg_id);
add_where = AXIS2_TRUE;
}
if(seq_id)
{
if(!add_where)
{
add_where = AXIS2_TRUE;
sprintf(sql_find + axutil_strlen(sql_find),
" where seq_id='%s'", seq_id);
}
else
sprintf(sql_find + axutil_strlen(sql_find),
" and seq_id='%s'", seq_id);
}
if(internal_seq_id)
{
if(!add_where)
{
add_where = AXIS2_TRUE;
sprintf(sql_find + axutil_strlen(sql_find),
" where internal_seq_id='%s'", internal_seq_id);
}
else
sprintf(sql_find + axutil_strlen(sql_find),
" and internal_seq_id='%s'", internal_seq_id);
}
sprintf(sql_find + axutil_strlen(sql_find), ";");
find_list = sandesha2_permanent_bean_mgr_find(seq_mgr_impl->bean_mgr, env,
sandesha2_create_seq_find_callback, sql_find);
return find_list;
}
static sandesha2_create_seq_bean_t *AXIS2_CALL
sandesha2_permanent_create_seq_mgr_find_unique(
sandesha2_create_seq_mgr_t *seq_mgr,
const axutil_env_t *env,
sandesha2_create_seq_bean_t *bean)
{
int size = 0;
sandesha2_create_seq_bean_t *result = NULL;
axutil_array_list_t *find_list = NULL;
AXIS2_PARAM_CHECK(env->error, bean, AXIS2_FALSE);
find_list = sandesha2_permanent_create_seq_mgr_find(seq_mgr, env, bean);
if(find_list)
size = axutil_array_list_size(find_list, env);
if(size == 1)
result = (sandesha2_create_seq_bean_t *) axutil_array_list_get(
find_list, env, 0);
if(find_list)
axutil_array_list_free(find_list, env);
return result;
}