blob: 425e22c204ee8a63bf8d68a0cd3317ce555d544d [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 "php.h"
#include "php_axis2.h"
#include <axis2_om_node.h>
#include <axis2_om_element.h>
#include <axis2_allocator.h>
#include <axis2_env.h>
zend_function_entry php_axis2_om_element_class_functions[]=
{
PHP_FALIAS(findNamespace , axis2_om_element_find_namespace, NULL)
PHP_FALIAS(declareNamespace , axis2_om_element_declare_namespace, NULL)
PHP_FALIAS(findNamespaceWithQname , axis2_om_element_find_namespace_with_qname, NULL)
PHP_FALIAS(addAttribute , axis2_om_element_add_attribute, NULL)
PHP_FALIAS(getAttribute , axis2_om_element_get_attribute, NULL)
PHP_FALIAS(findDeclaredNamespace , axis2_om_element_find_declared_namespace, NULL)
PHP_FALIAS(getLocalname , axis2_om_element_get_localname, NULL)
PHP_FALIAS(getNamespace , axis2_om_element_get_namespace, NULL)
PHP_FALIAS(setNamespace , axis2_om_element_set_namespace, NULL)
PHP_FALIAS(setLocalname , axis2_om_element_set_localname, NULL)
PHP_ME(om_element, __construct, NULL, ZEND_ACC_PUBLIC)
{NULL, NULL, NULL}
};
PHP_METHOD(om_element, __construct)
{
axis2_object_ptr intern = NULL;
axis2_object_ptr intern_parent = NULL;
axis2_object_ptr intern_ns = NULL;
om_node_ptr node_obj = NULL;
om_node_ptr node_obj_parent = NULL;
om_object_ptr om_obj_ns = NULL;
zval *object = NULL;
zval *object_parent = NULL;
zval *object_ns = NULL;
axis2_env_t *env = NULL;
char *lname = NULL;
int lname_len = 0;
char *n = NULL;
axis2_om_element_t *om_element = NULL;
axis2_om_node_t *node = NULL;
axis2_om_node_t *node_parent = NULL;
axis2_om_namespace_t *ns = NULL;
if(zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC,
getThis(), "OO!sO!",&object, axis2_om_element_class_entry, &object_parent,
axis2_om_node_class_entry, &lname, &lname_len,
&object_ns, axis2_om_namespace_class_entry) == FAILURE)
{
php_std_error_handling();
return;
}
env = php_axis2_get_env();
intern = (axis2_object_ptr)zend_object_store_get_object(object TSRMLS_CC);
node_obj = (om_node_ptr)emalloc(sizeof(om_node_t));
node_obj->builder = NULL;
node_obj->doc = NULL;
node_obj->node_type = OM_ELEMENT;
if(object_parent)
{
AXIS2_GET_OBJ(node_obj_parent, object_parent, om_node_ptr, intern_parent);
if(node_obj_parent && node_obj_parent->ptr)
node_parent = (axis2_om_node_t *)(node_obj_parent->ptr);
}
if(object_ns)
{
AXIS2_GET_OBJ(om_obj_ns, object_ns, om_object_ptr, intern_ns);
if(om_obj_ns && om_obj_ns->ptr)
ns = (axis2_om_namespace_t *)(om_obj_ns->ptr);
}
om_element = axis2_om_element_create(&env, node_parent, lname, ns, &node);
node_obj->ptr = node;
intern->obj_type = OM_NODE_OBJ;
intern->ptr = node_obj;
}
PHP_FUNCTION(axis2_om_element_get_localname)
{
axis2_object_ptr intern = NULL;
om_node_ptr node_obj = NULL;
zval *object = NULL;
axis2_env_t *env = NULL;
char *localname = NULL;
axis2_om_element_t *om_element = NULL;
axis2_om_node_t *node = NULL;
AXIS2_GET_THIS(object);
env = php_axis2_get_env();
AXIS2_GET_OBJ(node_obj, object, om_node_ptr, intern);
node = (axis2_om_node_t*)(node_obj->ptr);
om_element = (axis2_om_element_t*)AXIS2_OM_NODE_GET_DATA_ELEMENT(node , &env);
localname = AXIS2_OM_ELEMENT_GET_LOCALNAME(om_element, &env);
if(localname)
{
RETURN_STRING(localname, 1);
}
RETURN_NULL();
}
PHP_FUNCTION(axis2_om_element_get_namespace)
{
axis2_object_ptr intern = NULL;
om_node_ptr node_obj = NULL;
zval *object = NULL;
zval *object_ns = NULL;
axis2_env_t *env = NULL;
axis2_om_element_t *om_element = NULL;
axis2_om_node_t *node = NULL;
axis2_om_namespace_t *ns = NULL;
AXIS2_GET_THIS(object);
env = php_axis2_get_env();
AXIS2_GET_OBJ(node_obj, object, om_node_ptr, intern);
node = (axis2_om_node_t*)(node_obj->ptr);
om_element = (axis2_om_element_t*)AXIS2_OM_NODE_GET_DATA_ELEMENT(node , &env);
ns = AXIS2_OM_ELEMENT_GET_NAMESPACE(om_element, &env);
if(ns)
{
object_ns = php_axis2_create_om_object(ns, OM_OBJ, axis2_om_namespace_class_entry TSRMLS_CC);
RETURN_ZVAL(object_ns, NULL, NULL);
}
RETURN_NULL();
}
PHP_FUNCTION(axis2_om_element_get_attribute)
{
axis2_object_ptr intern = NULL;
axis2_object_ptr intern_qname = NULL;
om_node_ptr node_obj = NULL;
om_object_ptr qname_obj = NULL;
zval *object = NULL;
zval *object_attr = NULL;
zval *object_qname = NULL;
axis2_env_t *env = NULL;
axis2_om_element_t *om_element = NULL;
axis2_om_node_t *node = NULL;
axis2_om_attribute_t *attr = NULL;
axis2_qname_t *qname = NULL;
if(zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC,
getThis(), "OO",&object, axis2_om_element_class_entry, &object_qname,
axis2_qname_class_entry) == FAILURE)
{
php_std_error_handling();
return;
}
env = php_axis2_get_env();
AXIS2_GET_OBJ(node_obj, object, om_node_ptr, intern);
AXIS2_GET_OBJ(qname_obj, object_qname, om_object_ptr, intern_qname);
node = (axis2_om_node_t*)(node_obj->ptr);
om_element = (axis2_om_element_t*)AXIS2_OM_NODE_GET_DATA_ELEMENT(node , &env);
qname = (axis2_qname_t *)(qname_obj->ptr);
attr = AXIS2_OM_ELEMENT_GET_ATTRIBUTE(om_element, &env, qname);
if(attr)
{
object_attr = php_axis2_create_om_object(attr, OM_OBJ, axis2_om_attribute_class_entry TSRMLS_CC);
RETURN_ZVAL(object_attr, NULL, NULL);
}
RETURN_NULL();
}
PHP_FUNCTION(axis2_om_element_add_attribute)
{
axis2_object_ptr intern = NULL;
axis2_object_ptr intern_attr = NULL;
om_node_ptr node_obj = NULL;
om_object_ptr attr_obj = NULL;
zval *object = NULL;
zval *object_attr = NULL;
axis2_env_t *env = NULL;
axis2_om_element_t *om_element = NULL;
axis2_om_node_t *node = NULL;
axis2_om_attribute_t *attr = NULL;
if(zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC,
getThis(), "OO",&object, axis2_om_element_class_entry, &object_attr,
axis2_om_attribute_class_entry) == FAILURE)
{
php_std_error_handling();
return;
}
env = php_axis2_get_env();
AXIS2_GET_OBJ(node_obj, object, om_node_ptr, intern);
AXIS2_GET_OBJ(attr_obj, object_attr, om_object_ptr, intern_attr);
node = (axis2_om_node_t*)(node_obj->ptr);
om_element = (axis2_om_element_t*)AXIS2_OM_NODE_GET_DATA_ELEMENT(node , &env);
attr = (axis2_om_attribute_t *)(attr_obj->ptr);
if(attr)
{
AXIS2_OM_ELEMENT_ADD_ATTRIBUTE(om_element, &env, attr, node);
}
}
PHP_FUNCTION(axis2_om_element_set_namespace)
{
axis2_object_ptr intern = NULL;
axis2_object_ptr intern_ns = NULL;
om_node_ptr node_obj = NULL;
om_object_ptr om_obj = NULL;
zval *object = NULL;
zval *object_ns = NULL;
axis2_env_t *env = NULL;
axis2_om_element_t *om_element = NULL;
axis2_om_node_t *node = NULL;
axis2_om_namespace_t *ns = NULL;
if(zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC,
getThis(), "OO",&object, axis2_om_element_class_entry, &object_ns,
axis2_om_namespace_class_entry) == FAILURE)
{
php_std_error_handling();
return;
}
env = php_axis2_get_env();
AXIS2_GET_OBJ(node_obj, object, om_node_ptr, intern);
AXIS2_GET_OBJ(om_obj, object_ns , om_object_ptr, intern_ns);
node = (axis2_om_node_t*)(node_obj->ptr);
om_element = (axis2_om_element_t*)AXIS2_OM_NODE_GET_DATA_ELEMENT(node , &env);
ns = (axis2_om_namespace_t *)(om_obj->ptr);
if(ns)
{
AXIS2_OM_ELEMENT_SET_NAMESPACE(om_element, &env, ns, node);
}
}
PHP_FUNCTION(axis2_om_element_set_localname)
{
axis2_object_ptr intern = NULL;
om_node_ptr node_obj = NULL;
zval *object = NULL;
char *localname = NULL;
int lnamelen = 0;
axis2_env_t *env = NULL;
axis2_om_element_t *om_element = NULL;
axis2_om_node_t *node = NULL;
if(zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC,
getThis(), "Os",&object, axis2_om_element_class_entry, &localname,
&lnamelen) == FAILURE)
{
php_std_error_handling();
return;
}
env = php_axis2_get_env();
AXIS2_GET_OBJ(node_obj, object, om_node_ptr, intern);
node = (axis2_om_node_t*)(node_obj->ptr);
om_element = (axis2_om_element_t*)AXIS2_OM_NODE_GET_DATA_ELEMENT(node , &env);
if(om_element)
{
AXIS2_OM_ELEMENT_SET_LOCALNAME(om_element, &env, localname);
}
}
PHP_FUNCTION(axis2_om_element_find_namespace){}
PHP_FUNCTION(axis2_om_element_declare_namespace){}
PHP_FUNCTION(axis2_om_element_find_namespace_with_qname){}
PHP_FUNCTION(axis2_om_element_find_declared_namespace){}