| /* |
| * 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" |
| |
| zend_function_entry php_axis2_om_node_class_functions[] = |
| { |
| PHP_FALIAS(addChild , axis2_om_node_add_child, NULL) |
| PHP_FALIAS(detach , axis2_om_node_detach, NULL) |
| PHP_FALIAS(insertSiblingAfter , axis2_om_node_insert_sibling_after, NULL) |
| PHP_FALIAS(insertSiblingBefore , axis2_om_node_insert_sibling_before, NULL) |
| PHP_FALIAS(setParent , axis2_om_node_set_parent, NULL) |
| PHP_FALIAS(serialize , axis2_om_node_serialize, NULL) |
| PHP_FALIAS(getParent , axis2_om_node_get_parent, NULL) |
| PHP_FALIAS(getFirstChild , axis2_om_node_get_first_child, NULL) |
| PHP_FALIAS(getLastChild , axis2_om_node_get_last_child, NULL) |
| PHP_FALIAS(getPreviousSibling , axis2_om_node_get_previous_sibling, NULL) |
| PHP_FALIAS(getNextSibling , axis2_om_node_get_next_sibling, NULL) |
| PHP_FALIAS(getNodeType , axis2_om_node_get_node_type, NULL) |
| PHP_FALIAS(isComplete , axis2_om_node_get_build_status, NULL) |
| PHP_ME(om_node, __construct, NULL, ZEND_ACC_PRIVATE) |
| { NULL, NULL, NULL} |
| }; |
| /* |
| static zend_class_entry* php_axis2_get_class_type(int node_type) |
| { |
| zend_class_entry *ce = NULL; |
| switch(node_type) |
| { |
| case OM_ELEMENT: |
| ce = axis2_om_element_class_entry; |
| break; |
| case OM_TEXT: |
| ce = axis2_om_text_class_entry; |
| break; |
| case OM_PI: |
| ce = axis2_om_pi_class_entry; |
| break; |
| case OM_COMMENT: |
| ce = axis2_om_comment_class_entry; |
| break; |
| default: |
| ce = NULL; |
| break; |
| } |
| return ce; |
| } |
| */ |
| PHP_METHOD(om_node, __construct) |
| { |
| |
| } |
| |
| /* {{{ proto void Axis2OMNode::addChild */ |
| PHP_FUNCTION(axis2_om_node_add_child) |
| { |
| axis2_object_ptr intern = NULL; |
| axis2_object_ptr intern_child = NULL; |
| |
| zval *object = NULL; |
| zval *obj_child = NULL; |
| |
| om_node_ptr node_obj = NULL; |
| om_node_ptr node_obj_child = NULL; |
| |
| axis2_om_node_t *om_node = NULL; |
| axis2_om_node_t *child = NULL; |
| axis2_env_t *env = NULL; |
| |
| if(zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, |
| getThis(), "OO",&object, axis2_om_node_class_entry ,&obj_child,axis2_om_node_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(node_obj_child, obj_child, om_node_ptr, intern_child); |
| |
| om_node = (axis2_om_node_t *)(node_obj->ptr); |
| child = (axis2_om_node_t *)(node_obj_child->ptr); |
| /* this should be fixed */ |
| AXIS2_OM_NODE_ADD_CHILD(child, &env, om_node); |
| |
| } |
| /* }}} */ |
| |
| PHP_FUNCTION(axis2_om_node_detach) |
| { |
| axis2_object_ptr intern = NULL; |
| zval *object = NULL; |
| om_node_ptr node_obj = NULL; |
| axis2_om_node_t *om_node = NULL; |
| axis2_env_t *env = NULL; |
| |
| if(zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, |
| getThis(), "OO",&object, axis2_om_node_class_entry ) == FAILURE) |
| { |
| php_std_error_handling(); |
| return; |
| } |
| |
| env = php_axis2_get_env(); |
| |
| AXIS2_GET_OBJ(node_obj, object, om_node_ptr, intern); |
| om_node = (axis2_om_node_t *)(node_obj->ptr); |
| AXIS2_OM_NODE_DETACH(om_node, &env); |
| } |
| |
| PHP_FUNCTION(axis2_om_node_set_parent) |
| { |
| axis2_object_ptr intern = NULL; |
| axis2_object_ptr intern_parent = NULL; |
| |
| zval *object = NULL; |
| zval *obj_parent = NULL; |
| |
| om_node_ptr node_obj = NULL; |
| om_node_ptr node_obj_parent = NULL; |
| |
| axis2_om_node_t *om_node = NULL; |
| axis2_om_node_t *parent = NULL; |
| axis2_env_t *env = NULL; |
| |
| if(zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, |
| getThis(), "OO",&object, axis2_om_node_class_entry ,&obj_parent,axis2_om_node_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(node_obj_parent, obj_parent, om_node_ptr, intern_parent); |
| |
| om_node = (axis2_om_node_t *)(node_obj->ptr); |
| parent = (axis2_om_node_t *)(node_obj_parent->ptr); |
| AXIS2_OM_NODE_SET_PARENT(om_node, &env, parent); |
| } |
| |
| PHP_FUNCTION(axis2_om_node_get_node_type) |
| { |
| axis2_object_ptr intern = NULL; |
| zval *object = NULL; |
| om_node_ptr node_obj = NULL; |
| axis2_env_t *env = NULL; |
| axis2_om_node_t *om_node = NULL; |
| int node_type = 0; |
| |
| env = php_axis2_get_env(); |
| AXIS2_GET_THIS(object); |
| |
| AXIS2_GET_OBJ(node_obj, object, om_node_ptr, intern); |
| |
| om_node = (axis2_om_node_t *)(node_obj->ptr); |
| node_type = AXIS2_OM_NODE_GET_NODE_TYPE(om_node, &env); |
| RETURN_LONG(node_type); |
| } |
| |
| PHP_FUNCTION(axis2_om_node_get_build_status) |
| { |
| axis2_object_ptr intern = NULL; |
| zval *object = NULL; |
| om_node_ptr node_obj = NULL; |
| axis2_env_t *env = NULL; |
| axis2_om_node_t *om_node = NULL; |
| axis2_bool_t status = AXIS2_FALSE; |
| |
| env = php_axis2_get_env(); |
| AXIS2_GET_THIS(object); |
| AXIS2_GET_OBJ(node_obj, object, om_node_ptr, intern); |
| |
| om_node = (axis2_om_node_t *)(node_obj->ptr); |
| status = AXIS2_OM_NODE_GET_BUILD_STATUS(om_node, &env); |
| RETURN_BOOL(status); |
| } |
| |
| PHP_FUNCTION(axis2_om_node_get_parent) |
| { |
| zend_class_entry *parent_ce = NULL; |
| axis2_object_ptr intern = NULL; |
| axis2_object_ptr intern_parent = NULL; |
| |
| zval *object = NULL; |
| zval *obj_parent = NULL; |
| |
| om_node_ptr node_obj = NULL; |
| |
| axis2_om_node_t *om_node = NULL; |
| axis2_om_node_t *parent = NULL; |
| axis2_env_t *env = NULL; |
| int parent_node_type = 0; |
| |
| env = php_axis2_get_env(); |
| |
| AXIS2_GET_THIS(object); |
| |
| AXIS2_GET_OBJ(node_obj, object, om_node_ptr, intern); |
| |
| om_node = (axis2_om_node_t *)(node_obj->ptr); |
| parent = AXIS2_OM_NODE_GET_PARENT(om_node, &env); |
| if(parent) |
| { |
| parent_node_type = AXIS2_OM_NODE_GET_NODE_TYPE(parent, &env); |
| parent_ce = php_axis2_get_class_type(parent_node_type); |
| obj_parent = php_axis2_create_om_node_object(parent, |
| parent_node_type, parent_ce TSRMLS_CC); |
| RETURN_ZVAL(obj_parent, NULL, NULL); |
| } |
| RETURN_NULL(); |
| } |
| PHP_FUNCTION(axis2_om_node_get_first_child) |
| { |
| zend_class_entry *child_ce = NULL; |
| axis2_object_ptr intern = NULL; |
| axis2_object_ptr intern_child = NULL; |
| |
| zval *object = NULL; |
| zval *obj_child = NULL; |
| |
| om_node_ptr node_obj = NULL; |
| |
| axis2_om_node_t *om_node = NULL; |
| axis2_om_node_t *child = NULL; |
| axis2_env_t *env = NULL; |
| int child_node_type = 0; |
| axis2_om_element_t *e = NULL; |
| |
| env = php_axis2_get_env(); |
| |
| AXIS2_GET_THIS(object); |
| |
| AXIS2_GET_OBJ(node_obj, object, om_node_ptr, intern); |
| |
| om_node = (axis2_om_node_t *)(node_obj->ptr); |
| |
| child = AXIS2_OM_NODE_GET_FIRST_CHILD(om_node, &env); |
| if(child) |
| { |
| child_node_type = AXIS2_OM_NODE_GET_NODE_TYPE(child, &env); |
| child_ce = php_axis2_get_class_type(child_node_type); |
| obj_child = php_axis2_create_om_node_object(child, |
| child_node_type, child_ce TSRMLS_CC); |
| RETURN_ZVAL(obj_child, NULL, NULL); |
| |
| } |
| RETURN_NULL(); |
| |
| } |
| |
| PHP_FUNCTION(axis2_om_node_get_last_child) |
| { |
| zend_class_entry *child_ce = NULL; |
| axis2_object_ptr intern = NULL; |
| axis2_object_ptr intern_child = NULL; |
| |
| zval *object = NULL; |
| zval *obj_child = NULL; |
| |
| om_node_ptr node_obj = NULL; |
| |
| axis2_om_node_t *om_node = NULL; |
| axis2_om_node_t *child = NULL; |
| axis2_env_t *env = NULL; |
| int child_node_type = 0; |
| |
| env = php_axis2_get_env(); |
| |
| AXIS2_GET_THIS(object); |
| |
| AXIS2_GET_OBJ(node_obj, object, om_node_ptr, intern); |
| |
| om_node = (axis2_om_node_t *)(node_obj->ptr); |
| child = AXIS2_OM_NODE_GET_LAST_CHILD(om_node, &env); |
| if(child) |
| { |
| child_node_type = AXIS2_OM_NODE_GET_NODE_TYPE(child, &env); |
| child_ce = php_axis2_get_class_type(child_node_type); |
| obj_child = php_axis2_create_om_node_object(child, |
| child_node_type, child_ce TSRMLS_CC); |
| RETURN_ZVAL(obj_child, NULL, NULL); |
| } |
| RETURN_NULL(); |
| } |
| |
| PHP_FUNCTION(axis2_om_node_get_previous_sibling) |
| { |
| zend_class_entry *sibling_ce = NULL; |
| axis2_object_ptr intern = NULL; |
| axis2_object_ptr intern_sibling = NULL; |
| |
| zval *object = NULL; |
| zval *obj_sibling = NULL; |
| |
| om_node_ptr node_obj = NULL; |
| |
| axis2_om_node_t *om_node = NULL; |
| axis2_om_node_t *sibling = NULL; |
| axis2_env_t *env = NULL; |
| int sibling_node_type = 0; |
| |
| env = php_axis2_get_env(); |
| |
| AXIS2_GET_THIS(object); |
| |
| AXIS2_GET_OBJ(node_obj, object, om_node_ptr, intern); |
| |
| om_node = (axis2_om_node_t *)(node_obj->ptr); |
| sibling = AXIS2_OM_NODE_GET_PREVIOUS_SIBLING(om_node, &env); |
| if(sibling) |
| { |
| sibling_node_type = AXIS2_OM_NODE_GET_NODE_TYPE(sibling, &env); |
| sibling_ce = php_axis2_get_class_type(sibling_node_type); |
| obj_sibling = php_axis2_create_om_node_object(sibling, |
| sibling_node_type, sibling_ce TSRMLS_CC); |
| RETURN_ZVAL(obj_sibling, NULL, NULL); |
| } |
| RETURN_NULL(); |
| } |
| |
| PHP_FUNCTION(axis2_om_node_get_next_sibling) |
| { |
| zend_class_entry *sibling_ce = NULL; |
| axis2_object_ptr intern = NULL; |
| axis2_object_ptr intern_sibling = NULL; |
| |
| zval *object = NULL; |
| zval *obj_sibling = NULL; |
| |
| om_node_ptr node_obj = NULL; |
| |
| axis2_om_node_t *om_node = NULL; |
| axis2_om_node_t *sibling = NULL; |
| axis2_env_t *env = NULL; |
| int sibling_node_type = 0; |
| |
| env = php_axis2_get_env(); |
| |
| AXIS2_GET_THIS(object); |
| |
| AXIS2_GET_OBJ(node_obj, object, om_node_ptr, intern); |
| |
| om_node = (axis2_om_node_t *)(node_obj->ptr); |
| sibling = AXIS2_OM_NODE_GET_NEXT_SIBLING(om_node, &env); |
| if(sibling) |
| { |
| sibling_node_type = AXIS2_OM_NODE_GET_NODE_TYPE(sibling, &env); |
| sibling_ce = php_axis2_get_class_type(sibling_node_type); |
| obj_sibling = php_axis2_create_om_node_object(sibling, |
| sibling_node_type, sibling_ce TSRMLS_CC); |
| RETURN_ZVAL(obj_sibling, NULL, NULL); |
| } |
| RETURN_NULL(); |
| } |
| PHP_FUNCTION(axis2_om_node_serialize) |
| { |
| axis2_object_ptr intern = NULL; |
| axis2_object_ptr intern_output = NULL; |
| |
| zval *object = NULL; |
| zval *object_output = NULL; |
| |
| om_node_ptr node_obj = NULL; |
| om_object_ptr om_obj_output = NULL; |
| |
| axis2_om_output_t *output = NULL; |
| axis2_om_node_t *node = NULL; |
| axis2_env_t *env = NULL; |
| |
| if(zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, |
| getThis(), "OO",&object, axis2_om_node_class_entry, |
| &object_output , axis2_om_output_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_output, object_output, om_object_ptr, intern_output); |
| |
| node = (axis2_om_node_t *)(node_obj->ptr); |
| output = (axis2_om_output_t *)(om_obj_output->ptr); |
| |
| AXIS2_OM_NODE_SERIALIZE(node, &env, output); |
| } |
| PHP_FUNCTION(axis2_om_node_insert_sibling_after) |
| { |
| php_printf("not implemented yet"); |
| } |
| PHP_FUNCTION(axis2_om_node_insert_sibling_before) |
| { |
| php_printf("not implemented yet"); |
| } |
| |
| |
| |