blob: 64cdee097d80fea07ddd42204cbfb932042e3c7a [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_seq_property_mgr.h>
#include "sandesha2_permanent_seq_property_mgr.h"
#include "sandesha2_permanent_bean_mgr.h"
#include <sandesha2_constants.h>
#include <sandesha2_error.h>
#include <sandesha2_utils.h>
#include <sandesha2_seq_property_mgr.h>
#include <axutil_log.h>
#include <axutil_hash.h>
#include <axutil_thread.h>
#include <axutil_property.h>
#include <axutil_types.h>
/**
* @brief Sandesha Permanent Sequence Property Manager Struct Impl
* Sandesha Permanent Sequence Property Manager
*/
typedef struct sandesha2_permanent_seq_property_mgr
{
sandesha2_seq_property_mgr_t seq_prop_mgr;
sandesha2_permanent_bean_mgr_t *bean_mgr;
axutil_array_list_t *values;
} sandesha2_permanent_seq_property_mgr_t;
#define SANDESHA2_INTF_TO_IMPL(seq_property_mgr) \
((sandesha2_permanent_seq_property_mgr_t *) seq_property_mgr)
static int
sandesha2_seq_property_find_callback(
void *not_used,
int argc,
char **argv,
char **col_name)
{
int i = 0;
sandesha2_seq_property_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_seq_property_bean_create(env);
for(i = 0; i < argc; i++)
{
if(0 == axutil_strcmp(col_name[i], "seq_id"))
sandesha2_seq_property_bean_set_seq_id(bean, env, argv[i]);
if(0 == axutil_strcmp(col_name[i], "name"))
if(argv[i])
sandesha2_seq_property_bean_set_name(bean, env, argv[i]);
if(0 == axutil_strcmp(col_name[i], "value"))
if(argv[i])
sandesha2_seq_property_bean_set_value(bean, env, argv[i]);
}
axutil_array_list_add(data_list, env, bean);
return 0;
}
static int
sandesha2_seq_property_retrieve_callback(
void *not_used,
int argc,
char **argv,
char **col_name)
{
int i = 0;
sandesha2_bean_mgr_args_t *args = NULL;
const axutil_env_t *env = NULL;
sandesha2_seq_property_bean_t *bean = NULL;
args = (sandesha2_bean_mgr_args_t *) not_used;
if(args)
{
args->data = NULL;
}
env = args->env;
if(argc < 1)
{
args->data = NULL;
return 0;
}
bean = (sandesha2_seq_property_bean_t *) args->data;
if(!bean)
{
bean = sandesha2_seq_property_bean_create(env);
args->data = bean;
}
for(i = 0; i < argc; i++)
{
if(0 == axutil_strcmp(col_name[i], "seq_id"))
sandesha2_seq_property_bean_set_seq_id(bean, env, argv[i]);
if(0 == axutil_strcmp(col_name[i], "name"))
if(argv[i])
sandesha2_seq_property_bean_set_name(bean, env, argv[i]);
if(0 == axutil_strcmp(col_name[i], "value"))
if(argv[i])
sandesha2_seq_property_bean_set_value(bean, env, argv[i]);
}
return 0;
}
void AXIS2_CALL
sandesha2_permanent_seq_property_mgr_free(
sandesha2_seq_property_mgr_t *seq_prop_mgr,
const axutil_env_t *env);
axis2_bool_t AXIS2_CALL
sandesha2_permanent_seq_property_mgr_insert(
sandesha2_seq_property_mgr_t *seq_prop_mgr,
const axutil_env_t *env,
sandesha2_seq_property_bean_t *bean);
axis2_bool_t AXIS2_CALL
sandesha2_permanent_seq_property_mgr_remove(
sandesha2_seq_property_mgr_t *seq_prop_mgr,
const axutil_env_t *env,
axis2_char_t *seq_id,
axis2_char_t *name);
sandesha2_seq_property_bean_t *AXIS2_CALL
sandesha2_permanent_seq_property_mgr_retrieve(
sandesha2_seq_property_mgr_t *seq_prop_mgr,
const axutil_env_t *env,
const axis2_char_t *seq_id,
const axis2_char_t *name);
axis2_bool_t AXIS2_CALL
sandesha2_permanent_seq_property_mgr_update(
sandesha2_seq_property_mgr_t *seq_prop_mgr,
const axutil_env_t *env,
sandesha2_seq_property_bean_t *bean);
axutil_array_list_t *AXIS2_CALL
sandesha2_permanent_seq_property_mgr_find(
sandesha2_seq_property_mgr_t *seq_prop_mgr,
const axutil_env_t *env,
sandesha2_seq_property_bean_t *bean);
sandesha2_seq_property_bean_t *AXIS2_CALL
sandesha2_permanent_seq_property_mgr_find_unique(
sandesha2_seq_property_mgr_t *seq_prop_mgr,
const axutil_env_t *env,
sandesha2_seq_property_bean_t *bean);
axutil_array_list_t *AXIS2_CALL
sandesha2_permanent_seq_property_mgr_retrieve_all(
sandesha2_seq_property_mgr_t *seq_prop_mgr,
const axutil_env_t *env);
static axis2_char_t *
sandesha2_permanent_seq_property_mgr_get_id_with_bean(
const axutil_env_t *env,
sandesha2_seq_property_bean_t *bean);
static axis2_char_t *
sandesha2_permanent_seq_property_mgr_get_id_with_seq_id_and_name(
const axutil_env_t *env,
const axis2_char_t *seq_id,
const axis2_char_t *name);
static const sandesha2_seq_property_mgr_ops_t seq_property_mgr_ops =
{
sandesha2_permanent_seq_property_mgr_free,
sandesha2_permanent_seq_property_mgr_insert,
sandesha2_permanent_seq_property_mgr_remove,
sandesha2_permanent_seq_property_mgr_retrieve,
sandesha2_permanent_seq_property_mgr_update,
sandesha2_permanent_seq_property_mgr_find,
sandesha2_permanent_seq_property_mgr_find_unique,
sandesha2_permanent_seq_property_mgr_retrieve_all
};
AXIS2_EXTERN sandesha2_seq_property_mgr_t * AXIS2_CALL
sandesha2_permanent_seq_property_mgr_create(
const axutil_env_t *env,
axis2_char_t *dbname)
{
sandesha2_permanent_seq_property_mgr_t *seq_prop_mgr_impl = NULL;
seq_prop_mgr_impl = AXIS2_MALLOC(env->allocator,
sizeof(sandesha2_permanent_seq_property_mgr_t));
seq_prop_mgr_impl->values = NULL;
seq_prop_mgr_impl->bean_mgr = sandesha2_permanent_bean_mgr_create(env,
dbname, SANDESHA2_BEAN_MAP_SEQ_PROPERTY);
seq_prop_mgr_impl->seq_prop_mgr.ops = seq_property_mgr_ops;
return &(seq_prop_mgr_impl->seq_prop_mgr);
}
void AXIS2_CALL
sandesha2_permanent_seq_property_mgr_free(
sandesha2_seq_property_mgr_t *seq_prop_mgr,
const axutil_env_t *env)
{
sandesha2_permanent_seq_property_mgr_t *seq_prop_mgr_impl = NULL;
seq_prop_mgr_impl = SANDESHA2_INTF_TO_IMPL(seq_prop_mgr);
if(seq_prop_mgr_impl->values)
{
axutil_array_list_free(seq_prop_mgr_impl->values, env);
seq_prop_mgr_impl->values = NULL;
}
if(seq_prop_mgr_impl->bean_mgr)
{
sandesha2_permanent_bean_mgr_free(seq_prop_mgr_impl->bean_mgr, env);
seq_prop_mgr_impl->bean_mgr = NULL;
}
if(seq_prop_mgr_impl)
{
AXIS2_FREE(env->allocator, seq_prop_mgr_impl);
seq_prop_mgr_impl = NULL;
}
}
axis2_bool_t AXIS2_CALL
sandesha2_permanent_seq_property_mgr_insert(
sandesha2_seq_property_mgr_t *seq_prop_mgr,
const axutil_env_t *env,
sandesha2_seq_property_bean_t *bean)
{
axis2_char_t sql_insert[1024];
axis2_bool_t ret = AXIS2_FALSE;
sandesha2_permanent_seq_property_mgr_t *seq_prop_mgr_impl = NULL;
axis2_char_t *id = NULL;
axis2_char_t *seq_id = NULL;
axis2_char_t *name = NULL;
axis2_char_t *value = NULL;
AXIS2_PARAM_CHECK(env->error, bean, AXIS2_FALSE);
id = sandesha2_permanent_seq_property_mgr_get_id_with_bean(env, bean);
seq_id = sandesha2_seq_property_bean_get_seq_id(bean, env);
name = sandesha2_seq_property_bean_get_name(bean, env);
value = sandesha2_seq_property_bean_get_value(bean, env);
seq_prop_mgr_impl = SANDESHA2_INTF_TO_IMPL(seq_prop_mgr);
sprintf(sql_insert, "insert into seq_property(id, seq_id, name, value) "\
"values('%s', '%s', '%s', '%s')", id, seq_id, name, value);
if(id)
AXIS2_FREE(env->allocator, id);
ret = sandesha2_permanent_bean_mgr_insert(seq_prop_mgr_impl->bean_mgr, env,
sql_insert);
return ret;
}
axis2_bool_t AXIS2_CALL
sandesha2_permanent_seq_property_mgr_remove(
sandesha2_seq_property_mgr_t *seq_prop_mgr,
const axutil_env_t *env,
axis2_char_t *seq_id,
axis2_char_t *name)
{
axis2_char_t *key = NULL;
axis2_char_t sql_remove[256];
axis2_status_t status = AXIS2_FAILURE;
sandesha2_permanent_seq_property_mgr_t *seq_prop_mgr_impl = NULL;
AXIS2_PARAM_CHECK(env->error, seq_id, AXIS2_FALSE);
AXIS2_PARAM_CHECK(env->error, name, AXIS2_FALSE);
seq_prop_mgr_impl = SANDESHA2_INTF_TO_IMPL(seq_prop_mgr);
key = sandesha2_permanent_seq_property_mgr_get_id_with_seq_id_and_name(env,
seq_id, name);
sprintf(sql_remove, "delete from seq_property where id='%s'", key);
status = sandesha2_permanent_bean_mgr_remove(seq_prop_mgr_impl->bean_mgr, env,
sql_remove);
AXIS2_FREE(env->allocator, key);
return status;
}
sandesha2_seq_property_bean_t *AXIS2_CALL
sandesha2_permanent_seq_property_mgr_retrieve(
sandesha2_seq_property_mgr_t *seq_prop_mgr,
const axutil_env_t *env,
const axis2_char_t *seq_id,
const axis2_char_t *name)
{
axis2_char_t *key = NULL;
axis2_char_t sql_retrieve[1024];
sandesha2_seq_property_bean_t *ret = NULL;
sandesha2_permanent_seq_property_mgr_t *seq_prop_mgr_impl = NULL;
AXIS2_PARAM_CHECK(env->error, seq_id, AXIS2_FALSE);
AXIS2_PARAM_CHECK(env->error, name, AXIS2_FALSE);
seq_prop_mgr_impl = SANDESHA2_INTF_TO_IMPL(seq_prop_mgr);
key = sandesha2_permanent_seq_property_mgr_get_id_with_seq_id_and_name(env,
seq_id, name);
sprintf(sql_retrieve, "select seq_id, name, value from seq_property "\
"where id='%s'", key);
ret = (sandesha2_seq_property_bean_t *) sandesha2_permanent_bean_mgr_retrieve(
seq_prop_mgr_impl->bean_mgr, env, sandesha2_seq_property_retrieve_callback,
sql_retrieve);
AXIS2_FREE(env->allocator, key);
return ret;
}
axis2_bool_t AXIS2_CALL
sandesha2_permanent_seq_property_mgr_update(
sandesha2_seq_property_mgr_t *seq_prop_mgr,
const axutil_env_t *env,
sandesha2_seq_property_bean_t *bean)
{
axis2_char_t sql_update[1024];
axis2_bool_t ret = AXIS2_FALSE;
axis2_char_t *id = NULL;
sandesha2_permanent_seq_property_mgr_t *seq_prop_mgr_impl = NULL;
axis2_char_t *seq_id = NULL;
axis2_char_t *name = NULL;
axis2_char_t *value = NULL;
AXIS2_PARAM_CHECK(env->error, bean, AXIS2_FALSE);
id = sandesha2_permanent_seq_property_mgr_get_id_with_bean(env, bean);
seq_id = sandesha2_seq_property_bean_get_seq_id(bean, env);
name = sandesha2_seq_property_bean_get_name(bean, env);
value = sandesha2_seq_property_bean_get_value(bean, env);
seq_prop_mgr_impl = SANDESHA2_INTF_TO_IMPL(seq_prop_mgr);
sprintf(sql_update, "update seq_property set seq_id='%s', name='%s',"\
"value='%s' where id='%s'", seq_id, name, value, id);
if(id)
AXIS2_FREE(env->allocator, id);
ret = sandesha2_permanent_bean_mgr_update(seq_prop_mgr_impl->bean_mgr, env,
sql_update);
return ret;
}
axutil_array_list_t *AXIS2_CALL
sandesha2_permanent_seq_property_mgr_find(
sandesha2_seq_property_mgr_t *seq_prop_mgr,
const axutil_env_t *env,
sandesha2_seq_property_bean_t *bean)
{
axis2_bool_t add_where = AXIS2_FALSE;
axis2_char_t sql_find[1024];
axis2_char_t *seq_id = NULL;
axis2_char_t *name = NULL;
axis2_char_t *value = NULL;
axutil_array_list_t *find_list = NULL;
sandesha2_permanent_seq_property_mgr_t *seq_prop_mgr_impl = NULL;
seq_prop_mgr_impl = SANDESHA2_INTF_TO_IMPL(seq_prop_mgr);
if(bean)
{
seq_id = sandesha2_seq_property_bean_get_seq_id(bean, env);
name = sandesha2_seq_property_bean_get_name(bean, env);
value = sandesha2_seq_property_bean_get_value(bean, env);
}
sprintf(sql_find, "select seq_id, name,value from seq_property");
if(seq_id)
{
sprintf(sql_find + axutil_strlen(sql_find),
" where seq_id='%s'", seq_id);
add_where = AXIS2_TRUE;
}
if(name)
{
if(!add_where)
{
add_where = AXIS2_TRUE;
sprintf(sql_find + axutil_strlen(sql_find),
" where name='%s'", name);
}
else
sprintf(sql_find + axutil_strlen(sql_find),
" and name='%s'", name);
}
if(value)
{
if(!add_where)
{
add_where = AXIS2_TRUE;
sprintf(sql_find + axutil_strlen(sql_find),
" where value='%s'", value);
}
else
sprintf(sql_find + axutil_strlen(sql_find),
" and value='%s'", value);
}
sprintf(sql_find + axutil_strlen(sql_find), ";");
find_list = sandesha2_permanent_bean_mgr_find(seq_prop_mgr_impl->bean_mgr,
env, sandesha2_seq_property_find_callback, sql_find);
return find_list;
}
sandesha2_seq_property_bean_t *AXIS2_CALL
sandesha2_permanent_seq_property_mgr_find_unique(
sandesha2_seq_property_mgr_t *seq_prop_mgr,
const axutil_env_t *env,
sandesha2_seq_property_bean_t *bean)
{
int size = 0;
sandesha2_seq_property_bean_t *result = NULL;
axutil_array_list_t *find_list = NULL;
AXIS2_PARAM_CHECK(env->error, bean, AXIS2_FALSE);
find_list = sandesha2_permanent_seq_property_mgr_find(seq_prop_mgr, env,
bean);
if(find_list)
size = axutil_array_list_size(find_list, env);
if(size == 1)
result = (sandesha2_seq_property_bean_t *) axutil_array_list_get(
find_list, env, 0);
if(find_list)
axutil_array_list_free(find_list, env);
return result;
}
axutil_array_list_t *AXIS2_CALL
sandesha2_permanent_seq_property_mgr_retrieve_all(
sandesha2_seq_property_mgr_t *seq_prop_mgr,
const axutil_env_t *env)
{
sandesha2_permanent_seq_property_mgr_t *seq_prop_mgr_impl = NULL;
seq_prop_mgr_impl = SANDESHA2_INTF_TO_IMPL(seq_prop_mgr);
return sandesha2_seq_property_mgr_find(seq_prop_mgr, env, NULL);
}
static axis2_char_t *
sandesha2_permanent_seq_property_mgr_get_id_with_seq_id_and_name(
const axutil_env_t *env,
const axis2_char_t *seq_id,
const axis2_char_t *name)
{
axis2_char_t *id = NULL;
id = axutil_strcat(env, seq_id, ":", name, NULL);
return id;
}
static axis2_char_t *
sandesha2_permanent_seq_property_mgr_get_id_with_bean(
const axutil_env_t *env,
sandesha2_seq_property_bean_t *bean)
{
axis2_char_t *seq_id = NULL;
axis2_char_t *name = NULL;
axis2_char_t *id = NULL;
seq_id = sandesha2_seq_property_bean_get_seq_id(bean, env);
name = sandesha2_seq_property_bean_get_name(bean, env);
id = axutil_strcat(env, seq_id, ":", name, NULL);
return id;
}