有没有简单的方法如何替换(有序)JCR 2.0中的现有节点?

时间:2014-01-10 09:33:45

标签: jcr modeshape

是否有一些简单的方法如何用JCR 2.0中的另一个节点替换现有节点?

由于节点的排序,目前我正在执行以下步骤:

步骤1:找到我想要替换的现有节点之后的兄弟节点:

        if (preserveOrdering) {
        NodeIterator iter = parent.getNodes();
        boolean found = false;
        while (iter.hasNext()) {
            if (tempNode.equals(iter.nextNode())) {
                found = true;
                if (iter.hasNext()) {
                    tempNodeSibling = iter.nextNode();
                    break;
                }
            }
        }
        assert found;
    }

第2步:删除现有节点:

tempNode.remove();

第3步:  创建新节点(我正在做克隆,但可能使用node.addNode()方法, 新节点附加到子节点列表的末尾):

workspace.clone(workspace.getName(), existingNodePath, tempNodePath, false);

第4步:  在旧的tempNode兄弟节点之前移动新节点(在第一步中重新编号)

parent.orderBefore(tempNodeName, tempNodeSibling.getName());

所有这些步骤对我来说都非常麻烦。但我无法在JCR API中找到更好的方法。主要是因为订单只有一个orderBefore()方法。

您是否认为有一些不同/更简单的方法可以解决这个问题?

1 个答案:

答案 0 :(得分:0)

不幸的是,对于JCR 2.0,总是在最后添加新节点,并且使用javax.jcr.Node.reorder(...)是更改父节点子节点中子节点位置的唯一方法。至少可以说是不方便,但我怀疑添加这些方法会给已经很复杂的API增加太多的复杂性。