private TreeNode recursiveRemove()

in dbus-java/src/main/java/org/freedesktop/dbus/messages/ObjectTree.java [126:159]


    private TreeNode recursiveRemove(TreeNode _current, String _path) {
        String[] elements = _path.split("/", 2);
        if (elements[0].equals(_current.name)) {
            // this is us or a parent node
            if (1 == elements.length || "".equals(elements[1])) {
                // this is us
                _current.object = null;
                _current.data = null;
                if (_current.down != null ) {
                    // This node has a child node so it needs to be kept
                    return _current;
                }
                return _current.right;
            }

            if (_current.down != null) {
                // recurse down
                _current.down = recursiveRemove(_current.down, elements[1]);
                if (_current.down == null && _current.data == null) {
                    // This node has no children anymore and is not exported itself so it can be removed
                    return _current.right;
                }
            }
            return _current;
        } else if (_current.right == null) {
            return _current;
        } else if (0 > _current.right.name.compareTo(elements[0])) {
            return _current;
        } else {
            // recurse right
            _current.right = recursiveRemove(_current.right, _path);
            return _current;
        }
    }