blob: 4c9b353c05c5f6fdd5fb576de50ce0d8b3726539 [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 <xml_schema_includes.h>
#include <axiom_node.h>
#define XML_SCHEMA_DEFAULT_TARGET_NS "DEFAULT"
typedef struct xml_schema_impl xml_schema_impl_t;
struct xml_schema_impl
{
xml_schema_t schema;
xml_schema_annotated_t *annotated;
xml_schema_types_t obj_type;
axis2_hash_t *ht_super;
xml_schema_form_t *attr_form_default;
xml_schema_form_t *element_form_default;
xml_schema_obj_table_t *attr_groups;
xml_schema_obj_table_t *attrs;
xml_schema_obj_table_t *elements;
xml_schema_obj_table_t *groups;
xml_schema_obj_table_t *notations;
xml_schema_obj_table_t *schema_types;
xml_schema_derivation_method_t *block_default;
xml_schema_derivation_method_t *final_default;
xml_schema_obj_collection_t *includes;
xml_schema_obj_collection_t *items;
axis2_bool_t is_compiled;
axis2_char_t *target_namespace;
axis2_char_t *version;
axis2_hash_t *namespaces_map;
axis2_char_t *schema_ns_prefix;
xml_schema_collection_t *parent;
axiom_node_t *schema_root_node;
};
#define AXIS2_INTF_TO_IMPL(schema) \
((xml_schema_impl_t *) schema)
axis2_status_t AXIS2_CALL
xml_schema_free(
void *schema,
const axis2_env_t *env);
axis2_hash_t *AXIS2_CALL
xml_schema_super_objs(
void *schema,
const axis2_env_t *env);
xml_schema_types_t AXIS2_CALL
xml_schema_get_type(
void *schema,
const axis2_env_t *env);
xml_schema_annotated_t *AXIS2_CALL
xml_schema_get_base_impl(
void *schema,
const axis2_env_t *env);
axis2_char_t *AXIS2_CALL
xml_schema_get_namespace(
void *schema,
const axis2_env_t *env,
axis2_char_t *prefix);
xml_schema_form_t *AXIS2_CALL
xml_schema_get_attr_form_default(
void *schema,
const axis2_env_t *env);
axis2_status_t AXIS2_CALL
xml_schema_set_attr_form_default(
void *schema,
const axis2_env_t *env,
xml_schema_form_t *value);
xml_schema_obj_table_t *AXIS2_CALL
xml_schema_get_attr_groups(
void *schema,
const axis2_env_t *env);
xml_schema_obj_table_t *AXIS2_CALL
xml_schema_get_attrs(
void *schema,
const axis2_env_t *env);
xml_schema_derivation_method_t *AXIS2_CALL
xml_schema_get_block_default(
void *schema,
const axis2_env_t *env);
axis2_status_t AXIS2_CALL
xml_schema_set_block_default(
void *schema,
const axis2_env_t *env,
xml_schema_derivation_method_t *block_default);
xml_schema_form_t *AXIS2_CALL
xml_schema_get_element_form_default(
void *schema,
const axis2_env_t *env);
axis2_status_t AXIS2_CALL
xml_schema_set_element_form_default(
void *schema,
const axis2_env_t *env,
xml_schema_form_t *element_form_default);
xml_schema_obj_table_t *AXIS2_CALL
xml_schema_get_elements(
void *schema,
const axis2_env_t *env);
xml_schema_element_t *AXIS2_CALL
xml_schema_get_element_by_qname(
void *schema,
const axis2_env_t *env,
const axis2_qname_t *qname);
xml_schema_type_t *AXIS2_CALL
xml_schema_get_type_by_qname(
void *schema,
const axis2_env_t *env,
axis2_qname_t *qname);
xml_schema_derivation_method_t *AXIS2_CALL
xml_schema_get_final_default(
void *schema,
const axis2_env_t *env);
axis2_status_t AXIS2_CALL
xml_schema_set_final_default(
void *schema,
const axis2_env_t *env,
xml_schema_derivation_method_t *final_default);
xml_schema_obj_table_t *AXIS2_CALL
xml_schema_get_groups(
void *schema,
const axis2_env_t *env);
xml_schema_obj_collection_t *AXIS2_CALL
xml_schema_get_includes(
void *schema,
const axis2_env_t *env);
axis2_bool_t AXIS2_CALL
xml_schema_is_compiled(
void *schema,
const axis2_env_t *env);
xml_schema_obj_collection_t *AXIS2_CALL
xml_schema_get_items(
void *schema,
const axis2_env_t *env);
xml_schema_obj_table_t *AXIS2_CALL
xml_schema_get_notations(
void *schema,
const axis2_env_t *env);
xml_schema_obj_table_t *AXIS2_CALL
xml_schema_get_schema_types(
void *schema,
const axis2_env_t *env);
axis2_char_t *AXIS2_CALL
xml_schema_get_target_namespace(
void *schema,
const axis2_env_t *env);
axis2_status_t AXIS2_CALL
xml_schema_set_target_namespace(
void *schema,
const axis2_env_t *env,
axis2_char_t *target_namespace);
axis2_char_t *AXIS2_CALL
xml_schema_get_version(
void *schema,
const axis2_env_t *env);
axis2_status_t AXIS2_CALL
xml_schema_compile(
void *schema,
const axis2_env_t *env);
axis2_status_t AXIS2_CALL
xml_schema_write_with_out(
void *schema,
const axis2_env_t *env,
void *outstream);
axis2_status_t AXIS2_CALL
xml_schema_write_with_writer(
void *schema,
void *writer);
/*
static axis2_status_t
serialize_internal(
void *schema,
const axis2_env_t *env,
void *writer);
*/
axis2_hash_t *AXIS2_CALL
xml_schema_get_prefix_to_namespace_map(
void *schema,
const axis2_env_t *env);
axis2_status_t AXIS2_CALL
xml_schema_set_prefix_to_namespace_map(
void *schema,
const axis2_env_t *env,
axis2_hash_t *map);
axis2_status_t AXIS2_CALL
xml_schema_add_type(
void *schema,
const axis2_env_t *env,
xml_schema_type_t *type);
axis2_status_t AXIS2_CALL
xml_schema_set_schema_ns_prefix(
void *schema,
const axis2_env_t *env,
axis2_char_t *ns_prefix);
axis2_char_t* AXIS2_CALL
xml_schema_serialize(
void *schema,
const axis2_env_t *env);
axis2_status_t AXIS2_CALL
xml_schema_set_root_node(
void *schema,
const axis2_env_t *env,
axiom_node_t *root);
AXIS2_EXTERN xml_schema_t * AXIS2_CALL
xml_schema_create(const axis2_env_t *env,
axis2_char_t *namespc,
xml_schema_collection_t *parent)
{
xml_schema_impl_t *schema_impl = NULL;
axis2_status_t status = AXIS2_FAILURE;
schema_impl = AXIS2_MALLOC(env->allocator,
sizeof(xml_schema_impl_t));
if (!schema_impl)
{
AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
return NULL;
}
schema_impl->annotated = NULL;
schema_impl->ht_super = NULL;
schema_impl->obj_type = XML_SCHEMA;
schema_impl->parent = parent;
schema_impl->attr_form_default = NULL;
schema_impl->element_form_default = NULL;
schema_impl->block_default = NULL;
schema_impl->final_default = NULL;
schema_impl->items = NULL;
schema_impl->includes = NULL;
schema_impl->namespaces_map = NULL;
schema_impl->elements = NULL;
schema_impl->attr_groups = NULL;
schema_impl->attrs = NULL;
schema_impl->groups = NULL;
schema_impl->notations = NULL;
schema_impl->schema_types = NULL;
schema_impl->target_namespace = NULL;
schema_impl->schema_ns_prefix = NULL;
schema_impl->schema_root_node = NULL;
if (namespc)
schema_impl->target_namespace = AXIS2_STRDUP(namespc, env);
if (!schema_impl->target_namespace)
{
schema_impl->target_namespace =
AXIS2_STRDUP(XML_SCHEMA_DEFAULT_TARGET_NS, env);
}
schema_impl->schema.ops = AXIS2_MALLOC(env->allocator,
sizeof(xml_schema_ops_t));
if (!schema_impl->schema.ops)
{
AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
xml_schema_free(&(schema_impl->schema), env);
return NULL;
}
schema_impl->schema.ops->free = xml_schema_free;
schema_impl->schema.ops->super_objs = xml_schema_super_objs;
schema_impl->schema.ops->get_type = xml_schema_get_type;
schema_impl->schema.ops->get_base_impl =
xml_schema_get_base_impl;
schema_impl->schema.ops->get_namespace =
xml_schema_get_namespace;
schema_impl->schema.ops->get_attr_form_default =
xml_schema_get_attr_form_default;
schema_impl->schema.ops->set_attr_form_default =
xml_schema_set_attr_form_default;
schema_impl->schema.ops->get_attr_groups =
xml_schema_get_attr_groups;
schema_impl->schema.ops->get_attrs =
xml_schema_get_attrs;
schema_impl->schema.ops->get_block_default =
xml_schema_get_block_default;
schema_impl->schema.ops->set_block_default =
xml_schema_set_block_default;
schema_impl->schema.ops->get_element_form_default =
xml_schema_get_element_form_default;
schema_impl->schema.ops->set_element_form_default =
xml_schema_set_element_form_default;
schema_impl->schema.ops->get_elements =
xml_schema_get_elements;
schema_impl->schema.ops->get_element_by_qname =
xml_schema_get_element_by_qname;
schema_impl->schema.ops->get_type_by_qname =
xml_schema_get_type_by_qname;
schema_impl->schema.ops->get_final_default =
xml_schema_get_final_default;
schema_impl->schema.ops->set_final_default =
xml_schema_set_final_default;
schema_impl->schema.ops->get_groups =
xml_schema_get_groups;
schema_impl->schema.ops->get_includes =
xml_schema_get_includes;
schema_impl->schema.ops->is_compiled =
xml_schema_is_compiled;
schema_impl->schema.ops->get_items =
xml_schema_get_items;
schema_impl->schema.ops->get_notations =
xml_schema_get_notations;
schema_impl->schema.ops->get_schema_types =
xml_schema_get_schema_types;
schema_impl->schema.ops->get_target_namespace =
xml_schema_get_target_namespace;
schema_impl->schema.ops->set_target_namespace =
xml_schema_set_target_namespace;
schema_impl->schema.ops->get_version =
xml_schema_get_version;
schema_impl->schema.ops->compile =
xml_schema_compile;
schema_impl->schema.ops->write_with_out =
xml_schema_write_with_out;
schema_impl->schema.ops->write_with_writer =
xml_schema_write_with_writer;
schema_impl->schema.ops->get_prefix_to_namespace_map =
xml_schema_get_prefix_to_namespace_map;
schema_impl->schema.ops->set_prefix_to_namespace_map =
xml_schema_set_prefix_to_namespace_map;
schema_impl->schema.ops->add_type =
xml_schema_add_type;
schema_impl->schema.ops->set_schema_ns_prefix =
xml_schema_set_schema_ns_prefix;
schema_impl->schema.ops->serialize =
xml_schema_serialize;
schema_impl->schema.ops->set_root_node =
xml_schema_set_root_node;
/************ create objs *******************************/
schema_impl->parent = parent;
schema_impl->attr_form_default = xml_schema_form_create(env,
XML_SCHEMA_FORM_UNQUALIFIED);
schema_impl->element_form_default = xml_schema_form_create(env,
XML_SCHEMA_FORM_UNQUALIFIED);
schema_impl->block_default = xml_schema_derivation_method_create(env,
XML_SCHEMA_CONST_NONE);
schema_impl->final_default = xml_schema_derivation_method_create(env,
XML_SCHEMA_CONST_NONE);
schema_impl->items = xml_schema_obj_collection_create(env);
schema_impl->includes = xml_schema_obj_collection_create(env);
schema_impl->namespaces_map = axis2_hash_make(env);
schema_impl->elements = xml_schema_obj_table_create(env);
schema_impl->attr_groups = xml_schema_obj_table_create(env);
schema_impl->attrs = xml_schema_obj_table_create(env);
schema_impl->groups = xml_schema_obj_table_create(env);
schema_impl->notations = xml_schema_obj_table_create(env);
schema_impl->schema_types = xml_schema_obj_table_create(env);
schema_impl->annotated = xml_schema_annotated_create(env);
schema_impl->ht_super = axis2_hash_make(env);
if (!schema_impl->ht_super)
{
AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
return NULL;
}
axis2_hash_set(schema_impl->ht_super, "XML_SCHEMA",
AXIS2_HASH_KEY_STRING, &(schema_impl->schema));
axis2_hash_set(schema_impl->ht_super, "XML_SCHEMA_ANNOTATED",
AXIS2_HASH_KEY_STRING, schema_impl->annotated);
axis2_hash_set(schema_impl->ht_super, "XML_SCHEMA_OBJ",
AXIS2_HASH_KEY_STRING,
XML_SCHEMA_ANNOTATED_GET_BASE_IMPL(schema_impl->annotated, env));
status = xml_schema_annotated_resolve_methods(
&(schema_impl->schema.base), env, schema_impl->annotated,
xml_schema_super_objs, xml_schema_get_type, xml_schema_free);
return &(schema_impl->schema);
}
axis2_status_t AXIS2_CALL
xml_schema_free(
void *schema,
const axis2_env_t *env)
{
xml_schema_impl_t *schema_impl = NULL;
AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
schema_impl = AXIS2_INTF_TO_IMPL(schema);
if (schema_impl->attr_form_default)
{
XML_SCHEMA_FORM_FREE(schema_impl->attr_form_default, env);
schema_impl->attr_form_default = NULL;
}
if (schema_impl->element_form_default)
{
XML_SCHEMA_FORM_FREE(schema_impl->element_form_default, env);
schema_impl->element_form_default = NULL;
}
if (schema_impl->block_default)
{
XML_SCHEMA_DERIVATION_METHOD_FREE(schema_impl->block_default, env);
schema_impl->block_default = NULL;
}
if (schema_impl->final_default)
{
XML_SCHEMA_DERIVATION_METHOD_FREE(schema_impl->final_default, env);
schema_impl->final_default = NULL;
}
if (schema_impl->elements)
{
axis2_hash_t *ht = NULL;
axis2_hash_index_t *hi = NULL;
ht = XML_SCHEMA_OBJ_TABLE_GET_HASH_TABLE(schema_impl->elements, env);
if (ht)
{
for (hi = axis2_hash_first(ht, env); hi; hi = axis2_hash_next(env, hi))
{
void *val = NULL;
axis2_hash_this(hi, NULL, NULL, &val);
if (val)
{
if (XML_SCHEMA_OBJ_GET_TYPE(val, env) == XML_SCHEMA_ELEMENT)
{
XML_SCHEMA_ELEMENT_FREE(val, env);
val = NULL;
}
}
}
}
XML_SCHEMA_OBJ_TABLE_FREE(schema_impl->elements, env);
schema_impl->elements = NULL;
}
if (schema_impl->ht_super)
{
axis2_hash_free(schema_impl->ht_super, env);
schema_impl->ht_super = NULL;
}
if (schema_impl->annotated)
{
XML_SCHEMA_OBJ_FREE(schema_impl->annotated, env);
schema_impl->annotated = NULL;
}
if ((&(schema_impl->schema))->ops)
{
AXIS2_FREE(env->allocator, (&(schema_impl->schema))->ops);
(&(schema_impl->schema))->ops = NULL;
}
if (schema_impl)
{
AXIS2_FREE(env->allocator, schema_impl);
schema_impl = NULL;
}
return AXIS2_SUCCESS;
}
xml_schema_types_t AXIS2_CALL
xml_schema_get_type(
void *schema,
const axis2_env_t *env)
{
xml_schema_impl_t *schema_impl = NULL;
AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
schema_impl = AXIS2_INTF_TO_IMPL(schema);
return schema_impl->obj_type;
}
axis2_hash_t *AXIS2_CALL
xml_schema_super_objs(
void *schema,
const axis2_env_t *env)
{
xml_schema_impl_t *schema_impl = NULL;
AXIS2_ENV_CHECK(env, NULL);
schema_impl = AXIS2_INTF_TO_IMPL(schema);
return schema_impl->ht_super;
}
xml_schema_annotated_t *AXIS2_CALL
xml_schema_get_base_impl(
void *schema,
const axis2_env_t *env)
{
xml_schema_impl_t *schema_impl = NULL;
AXIS2_ENV_CHECK(env, NULL);
schema_impl = AXIS2_INTF_TO_IMPL(schema);
return schema_impl->annotated;
}
axis2_char_t *AXIS2_CALL
xml_schema_get_namespace(
void *schema,
const axis2_env_t *env,
axis2_char_t *prefix)
{
xml_schema_impl_t *schema_impl = NULL;
axis2_hash_t *ht_super = NULL;
AXIS2_ENV_CHECK(env, NULL);
AXIS2_PARAM_CHECK(env->error, prefix, NULL);
ht_super = XML_SCHEMA_SUPER_OBJS(schema, env);
if (ht_super)
{
schema_impl = AXIS2_INTF_TO_IMPL(axis2_hash_get(ht_super,
"XML_SCHEMA", AXIS2_HASH_KEY_STRING));
if (!schema_impl)
return NULL;
}
if (schema_impl->namespaces_map)
{
void *result = NULL;
result = axis2_hash_get(schema_impl->namespaces_map, prefix,
AXIS2_HASH_KEY_STRING);
if (result)
return (axis2_char_t *)result ;
}
return NULL;
}
xml_schema_form_t *AXIS2_CALL
xml_schema_get_attr_form_default(
void *schema,
const axis2_env_t *env)
{
xml_schema_impl_t *schema_impl = NULL;
axis2_hash_t *ht_super = NULL;
AXIS2_ENV_CHECK(env, NULL);
ht_super = XML_SCHEMA_SUPER_OBJS(schema, env);
if (ht_super)
{
schema_impl = AXIS2_INTF_TO_IMPL(axis2_hash_get(ht_super,
"XML_SCHEMA", AXIS2_HASH_KEY_STRING));
if (!schema_impl)
return NULL;
}
return schema_impl->element_form_default;
}
axis2_status_t AXIS2_CALL
xml_schema_set_attr_form_default(
void *schema,
const axis2_env_t *env,
xml_schema_form_t *value)
{
xml_schema_impl_t *schema_impl = NULL;
axis2_hash_t *ht_super = NULL;
AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
ht_super = XML_SCHEMA_SUPER_OBJS(schema, env);
if (ht_super)
{
schema_impl = AXIS2_INTF_TO_IMPL(axis2_hash_get(ht_super,
"XML_SCHEMA", AXIS2_HASH_KEY_STRING));
if (!schema_impl)
return AXIS2_FAILURE;
}
if (schema_impl->attr_form_default)
{
/** TODO free*/
}
schema_impl->attr_form_default = value;
return AXIS2_SUCCESS;
}
xml_schema_obj_table_t *AXIS2_CALL
xml_schema_get_attr_groups(
void *schema,
const axis2_env_t *env)
{
xml_schema_impl_t *schema_impl = NULL;
axis2_hash_t *ht_super = NULL;
AXIS2_ENV_CHECK(env, NULL);
ht_super = XML_SCHEMA_SUPER_OBJS(schema, env);
if (ht_super)
{
schema_impl = AXIS2_INTF_TO_IMPL(axis2_hash_get(ht_super,
"XML_SCHEMA", AXIS2_HASH_KEY_STRING));
if (!schema_impl)
return NULL;
}
return schema_impl->attr_groups;
}
xml_schema_obj_table_t *AXIS2_CALL
xml_schema_get_attrs(
void *schema,
const axis2_env_t *env)
{
xml_schema_impl_t *schema_impl = NULL;
axis2_hash_t *ht_super = NULL;
AXIS2_ENV_CHECK(env, NULL);
ht_super = XML_SCHEMA_SUPER_OBJS(schema, env);
if (ht_super)
{
schema_impl = AXIS2_INTF_TO_IMPL(axis2_hash_get(ht_super,
"XML_SCHEMA", AXIS2_HASH_KEY_STRING));
if (!schema_impl)
return NULL;
}
return schema_impl->attrs;
}
xml_schema_derivation_method_t *AXIS2_CALL
xml_schema_get_block_default(
void *schema,
const axis2_env_t *env)
{
xml_schema_impl_t *schema_impl = NULL;
axis2_hash_t *ht_super = NULL;
AXIS2_ENV_CHECK(env, NULL);
ht_super = XML_SCHEMA_SUPER_OBJS(schema, env);
if (ht_super)
{
schema_impl = AXIS2_INTF_TO_IMPL(axis2_hash_get(ht_super,
"XML_SCHEMA", AXIS2_HASH_KEY_STRING));
if (!schema_impl)
return NULL;
}
return schema_impl->block_default;
}
axis2_status_t AXIS2_CALL
xml_schema_set_block_default(
void *schema,
const axis2_env_t *env,
xml_schema_derivation_method_t *block_default)
{
xml_schema_impl_t *schema_impl = NULL;
axis2_hash_t *ht_super = NULL;
AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
ht_super = XML_SCHEMA_SUPER_OBJS(schema, env);
if (ht_super)
{
schema_impl = AXIS2_INTF_TO_IMPL(axis2_hash_get(ht_super,
"XML_SCHEMA", AXIS2_HASH_KEY_STRING));
if (!schema_impl)
return AXIS2_FAILURE;
}
if (schema_impl->block_default)
{}
schema_impl->block_default = block_default;
return AXIS2_SUCCESS;
}
xml_schema_form_t *AXIS2_CALL
xml_schema_get_element_form_default(
void *schema,
const axis2_env_t *env)
{
xml_schema_impl_t *schema_impl = NULL;
axis2_hash_t *ht_super = NULL;
AXIS2_ENV_CHECK(env, NULL);
ht_super = XML_SCHEMA_SUPER_OBJS(schema, env);
if (ht_super)
{
schema_impl = AXIS2_INTF_TO_IMPL(axis2_hash_get(ht_super,
"XML_SCHEMA", AXIS2_HASH_KEY_STRING));
if (!schema_impl)
return NULL;
}
return schema_impl->element_form_default;
}
axis2_status_t AXIS2_CALL
xml_schema_set_element_form_default(
void *schema,
const axis2_env_t *env,
xml_schema_form_t *element_form_default)
{
xml_schema_impl_t *schema_impl = NULL;
axis2_hash_t *ht_super = NULL;
AXIS2_PARAM_CHECK(env->error, element_form_default, AXIS2_FAILURE);
ht_super = XML_SCHEMA_SUPER_OBJS(schema, env);
if (ht_super)
{
schema_impl = AXIS2_INTF_TO_IMPL(axis2_hash_get(ht_super,
"XML_SCHEMA", AXIS2_HASH_KEY_STRING));
if (!schema_impl)
return AXIS2_FAILURE;
}
if (schema_impl->element_form_default)
{
XML_SCHEMA_FORM_FREE(schema_impl->element_form_default, env);
schema_impl->element_form_default = NULL;
}
schema_impl->element_form_default = element_form_default;
return AXIS2_SUCCESS;
}
xml_schema_obj_table_t *AXIS2_CALL
xml_schema_get_elements(
void *schema,
const axis2_env_t *env)
{
xml_schema_impl_t *schema_impl = NULL;
axis2_hash_t *ht_super = NULL;
AXIS2_ENV_CHECK(env, NULL);
ht_super = XML_SCHEMA_SUPER_OBJS(schema, env);
if (ht_super)
{
schema_impl = AXIS2_INTF_TO_IMPL(axis2_hash_get(ht_super,
"XML_SCHEMA", AXIS2_HASH_KEY_STRING));
if (!schema_impl)
return NULL;
}
return schema_impl->elements;
}
xml_schema_element_t *AXIS2_CALL
xml_schema_get_element_by_qname(
void *schema,
const axis2_env_t *env,
const axis2_qname_t *qname)
{
xml_schema_impl_t *schema_impl = NULL;
axis2_hash_t *ht_super = NULL;
AXIS2_PARAM_CHECK(env->error, qname, NULL);
ht_super = XML_SCHEMA_SUPER_OBJS(schema, env);
if (ht_super)
{
schema_impl = AXIS2_INTF_TO_IMPL(axis2_hash_get(ht_super,
"XML_SCHEMA", AXIS2_HASH_KEY_STRING));
if (!schema_impl)
return NULL;
}
if (schema_impl->elements)
{
return XML_SCHEMA_OBJ_TABLE_GET_ITEM(
schema_impl->elements, env, qname);
}
return NULL;
}
xml_schema_type_t *AXIS2_CALL
xml_schema_get_type_by_qname(
void *schema,
const axis2_env_t *env,
axis2_qname_t *qname)
{
xml_schema_impl_t *schema_impl = NULL;
axis2_hash_t *ht_super = NULL;
AXIS2_ENV_CHECK(env, NULL);
AXIS2_PARAM_CHECK(env->error, qname, NULL);
ht_super = XML_SCHEMA_SUPER_OBJS(schema, env);
if (ht_super)
{
schema_impl = AXIS2_INTF_TO_IMPL(axis2_hash_get(ht_super,
"XML_SCHEMA", AXIS2_HASH_KEY_STRING));
if (!schema_impl)
return NULL;
}
if (schema_impl->schema_types)
{
return XML_SCHEMA_OBJ_TABLE_GET_ITEM(
schema_impl->schema_types, env, qname);
}
return NULL;
}
xml_schema_derivation_method_t *AXIS2_CALL
xml_schema_get_final_default(
void *schema,
const axis2_env_t *env)
{
xml_schema_impl_t *schema_impl = NULL;
axis2_hash_t *ht_super = NULL;
AXIS2_ENV_CHECK(env, NULL);
ht_super = XML_SCHEMA_SUPER_OBJS(schema, env);
if (!ht_super)
return NULL;
schema_impl = AXIS2_INTF_TO_IMPL(axis2_hash_get(ht_super,
"XML_SCHEMA", AXIS2_HASH_KEY_STRING));
if (!schema_impl)
return NULL;
return schema_impl->final_default;
}
axis2_status_t AXIS2_CALL
xml_schema_set_final_default(
void *schema,
const axis2_env_t *env,
xml_schema_derivation_method_t *final_default)
{
xml_schema_impl_t *schema_impl = NULL;
axis2_hash_t *ht_super = NULL;
AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
ht_super = XML_SCHEMA_SUPER_OBJS(schema, env);
if (!ht_super)
return AXIS2_FAILURE;
schema_impl = AXIS2_INTF_TO_IMPL(axis2_hash_get(ht_super,
"XML_SCHEMA", AXIS2_HASH_KEY_STRING));
if (!schema_impl)
return AXIS2_FAILURE;
if (schema_impl->final_default)
{
/** TODO free */
}
schema_impl->final_default = final_default;
return AXIS2_SUCCESS;
}
xml_schema_obj_table_t *AXIS2_CALL
xml_schema_get_groups(
void *schema,
const axis2_env_t *env)
{
xml_schema_impl_t *schema_impl = NULL;
axis2_hash_t *ht_super = NULL;
AXIS2_ENV_CHECK(env, NULL);
ht_super = XML_SCHEMA_SUPER_OBJS(schema, env);
if (!ht_super)
return NULL;
schema_impl = AXIS2_INTF_TO_IMPL(axis2_hash_get(ht_super,
"XML_SCHEMA", AXIS2_HASH_KEY_STRING));
if (!schema_impl)
return NULL;
return schema_impl->groups;
}
xml_schema_obj_collection_t *AXIS2_CALL
xml_schema_get_includes(void *schema,
const axis2_env_t *env)
{
xml_schema_impl_t *schema_impl = NULL;
axis2_hash_t *ht_super = NULL;
AXIS2_ENV_CHECK(env, NULL);
ht_super = XML_SCHEMA_SUPER_OBJS(schema, env);
if (!ht_super)
return NULL;
schema_impl = AXIS2_INTF_TO_IMPL(axis2_hash_get(ht_super,
"XML_SCHEMA", AXIS2_HASH_KEY_STRING));
if (!schema_impl)
return NULL;
return schema_impl->includes;
}
axis2_bool_t AXIS2_CALL
xml_schema_is_compiled(
void *schema,
const axis2_env_t *env)
{
xml_schema_impl_t *schema_impl = NULL;
axis2_hash_t *ht_super = NULL;
AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
ht_super = XML_SCHEMA_SUPER_OBJS(schema, env);
if (!ht_super)
return AXIS2_FAILURE;
schema_impl = AXIS2_INTF_TO_IMPL(axis2_hash_get(ht_super,
"XML_SCHEMA", AXIS2_HASH_KEY_STRING));
if (!schema_impl)
return AXIS2_FAILURE;
return schema_impl->is_compiled;
}
xml_schema_obj_collection_t *AXIS2_CALL
xml_schema_get_items(
void *schema,
const axis2_env_t *env)
{
xml_schema_impl_t *schema_impl = NULL;
axis2_hash_t *ht_super = NULL;
AXIS2_ENV_CHECK(env, NULL);
ht_super = XML_SCHEMA_SUPER_OBJS(schema, env);
if (!ht_super)
return NULL;
schema_impl = AXIS2_INTF_TO_IMPL(axis2_hash_get(ht_super,
"XML_SCHEMA", AXIS2_HASH_KEY_STRING));
if (!schema_impl)
return NULL;
return schema_impl->items;
}
xml_schema_obj_table_t *AXIS2_CALL
xml_schema_get_notations(
void *schema,
const axis2_env_t *env)
{
xml_schema_impl_t *schema_impl = NULL;
axis2_hash_t *ht_super = NULL;
AXIS2_ENV_CHECK(env, NULL);
ht_super = XML_SCHEMA_SUPER_OBJS(schema, env);
if (!ht_super)
return NULL;
schema_impl = AXIS2_INTF_TO_IMPL(axis2_hash_get(ht_super,
"XML_SCHEMA", AXIS2_HASH_KEY_STRING));
if (!schema_impl)
return NULL;
return schema_impl->notations;
}
xml_schema_obj_table_t *AXIS2_CALL
xml_schema_get_schema_types(
void *schema,
const axis2_env_t *env)
{
xml_schema_impl_t *schema_impl = NULL;
axis2_hash_t *ht_super = NULL;
AXIS2_ENV_CHECK(env, NULL);
ht_super = XML_SCHEMA_SUPER_OBJS(schema, env);
if (!ht_super)
return NULL;
schema_impl = AXIS2_INTF_TO_IMPL(axis2_hash_get(ht_super,
"XML_SCHEMA", AXIS2_HASH_KEY_STRING));
if (!schema_impl)
return NULL;
return schema_impl->schema_types;
}
axis2_char_t *AXIS2_CALL
xml_schema_get_target_namespace(
void *schema,
const axis2_env_t *env)
{
xml_schema_impl_t *schema_impl = NULL;
AXIS2_ENV_CHECK(env, NULL);
schema_impl = AXIS2_INTF_TO_IMPL(schema);
if (!schema_impl)
return NULL;
return schema_impl->target_namespace;
}
axis2_status_t AXIS2_CALL
xml_schema_set_target_namespace(void *schema,
const axis2_env_t *env,
axis2_char_t *target_namespace)
{
xml_schema_impl_t *schema_impl = NULL;
axis2_hash_t *ht_super = NULL;
AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
ht_super = XML_SCHEMA_SUPER_OBJS(schema, env);
if (!ht_super)
return AXIS2_FAILURE;
schema_impl = AXIS2_INTF_TO_IMPL(axis2_hash_get(ht_super,
"XML_SCHEMA", AXIS2_HASH_KEY_STRING));
if (!schema_impl)
return AXIS2_FAILURE;
if (schema_impl->target_namespace)
{
AXIS2_FREE(env->allocator, schema_impl->target_namespace);
schema_impl->target_namespace = NULL;
}
schema_impl->target_namespace = AXIS2_STRDUP(target_namespace, env);
return AXIS2_SUCCESS;
}
axis2_char_t *AXIS2_CALL
xml_schema_get_version(void *schema,
const axis2_env_t *env)
{
xml_schema_impl_t *schema_impl = NULL;
axis2_hash_t *ht_super = NULL;
AXIS2_ENV_CHECK(env, NULL);
ht_super = XML_SCHEMA_SUPER_OBJS(schema, env);
if (!ht_super)
return NULL;
schema_impl = AXIS2_INTF_TO_IMPL(axis2_hash_get(ht_super,
"XML_SCHEMA", AXIS2_HASH_KEY_STRING));
if (!schema_impl)
return NULL;
return schema_impl->version;
}
axis2_status_t AXIS2_CALL
xml_schema_compile(
void *schema,
const axis2_env_t *env)
{
/** TODO */
return AXIS2_SUCCESS;
}
axis2_status_t AXIS2_CALL
xml_schema_write_with_out(
void *schema,
const axis2_env_t *env,
void *outstream)
{
xml_schema_impl_t *schema_impl = NULL;
AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
schema_impl = AXIS2_INTF_TO_IMPL(schema);
/** TODO */
return AXIS2_SUCCESS;
}
axis2_status_t AXIS2_CALL
xml_schema_write_with_writer(
void *schema,
void *writer)
{
/** TODO */
return AXIS2_SUCCESS;
}
/*
static axis2_status_t
serialize_internal(void *schema,
const axis2_env_t *env,
void *writer)
{
xml_schema_impl_t *schema_impl = NULL;
axis2_hash_t *ht_super = NULL;
AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
ht_super = XML_SCHEMA_SUPER_OBJS(schema, env);
schema_impl = AXIS2_INTF_TO_IMPL(axis2_hash_get(ht_super,
"XML_SCHEMA", AXIS2_HASH_KEY_STRING));
return AXIS2_SUCCESS;
}
*/
axis2_hash_t *AXIS2_CALL
xml_schema_get_prefix_to_namespace_map(
void *schema,
const axis2_env_t *env)
{
xml_schema_impl_t *schema_impl = NULL;
AXIS2_ENV_CHECK(env, NULL);
schema_impl = AXIS2_INTF_TO_IMPL(schema);
return schema_impl->namespaces_map;
}
axis2_status_t AXIS2_CALL
xml_schema_set_prefix_to_namespace_map(
void *schema,
const axis2_env_t *env,
axis2_hash_t *map)
{
xml_schema_impl_t *schema_impl = NULL;
AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
AXIS2_PARAM_CHECK(env->error, map, AXIS2_FAILURE);
schema_impl = AXIS2_INTF_TO_IMPL(schema);
if (schema_impl->namespaces_map)
{
/** TODO */
}
schema_impl->namespaces_map = map;
return AXIS2_SUCCESS;
}
axis2_status_t AXIS2_CALL
xml_schema_add_type(
void *schema,
const axis2_env_t *env,
xml_schema_type_t *type)
{
axis2_qname_t *qname = NULL;
xml_schema_impl_t *schema_impl = NULL;
AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
AXIS2_PARAM_CHECK(env->error, type, AXIS2_FAILURE);
schema_impl = AXIS2_INTF_TO_IMPL(schema);
qname = XML_SCHEMA_TYPE_GET_QNAME(type, env);
if (qname && NULL != schema_impl->schema_types)
{
if (XML_SCHEMA_OBJ_TABLE_CONTAINS(schema_impl->schema_types,
env, qname))
{
/* TODO set error */
return AXIS2_FAILURE;
}
XML_SCHEMA_OBJ_TABLE_ADD(schema_impl->schema_types, env, qname,
type);
}
return AXIS2_SUCCESS;
}
axis2_status_t AXIS2_CALL
xml_schema_set_schema_ns_prefix(void *schema,
const axis2_env_t *env,
axis2_char_t *ns_prefix)
{
xml_schema_impl_t *sch_impl = NULL;
AXIS2_PARAM_CHECK(env->error, ns_prefix, AXIS2_FAILURE);
sch_impl = AXIS2_INTF_TO_IMPL(schema);
if (sch_impl->schema_ns_prefix)
{
AXIS2_FREE(env->allocator, sch_impl->schema_ns_prefix);
sch_impl->schema_ns_prefix = NULL;
}
sch_impl->schema_ns_prefix = AXIS2_STRDUP(ns_prefix, env);
return AXIS2_FAILURE;
}
axis2_char_t* AXIS2_CALL
xml_schema_serialize(
void *schema,
const axis2_env_t *env)
{
xml_schema_impl_t *sch_impl = NULL;
axiom_xml_writer_t *writer = NULL;
axiom_output_t *output = NULL;
axis2_char_t *xml_str = NULL;
/** temp method, reimplement after implimenting
the schema serializer */
sch_impl = AXIS2_INTF_TO_IMPL(schema);
if (sch_impl->schema_root_node)
{
writer = axiom_xml_writer_create_for_memory(env, NULL, 0, 0 ,
AXIS2_XML_PARSER_TYPE_BUFFER);
if (!writer)
{
return NULL;
}
output = axiom_output_create(env, writer);
if (!output)
{
return NULL;
}
AXIOM_NODE_SERIALIZE(sch_impl->schema_root_node, env, output);
xml_str = AXIOM_XML_WRITER_GET_XML(writer, env);
AXIOM_OUTPUT_FREE(output, env);
}
return xml_str;
}
axis2_status_t AXIS2_CALL
xml_schema_set_root_node(
void *schema,
const axis2_env_t *env,
axiom_node_t *root)
{
xml_schema_impl_t *sch_impl = NULL;
if (!root)
return AXIS2_FAILURE;
sch_impl = AXIS2_INTF_TO_IMPL(schema);
sch_impl->schema_root_node = root;
return AXIS2_SUCCESS;
}