Есть ли простой способ заменить существующий узел другим узлом в JCR 2.0?Есть ли простой способ, как заменить (упорядоченный) существующий узел в 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 собрата (remebered на первом этапе)
parent.orderBefore(tempNodeName, tempNodeSibling.getName());
Все эти шаги выглядят мне довольно громоздкими. Но я не могу найти в JCR API лучше. В основном потому, что существует только один метод orderBefore(), который работает с упорядочением.
Как вы считаете, существует какой-то другой/более простой подход для решения этой проблемы?
Привет, Randall, вероятно, вы имеете в виду метод orderBefore (java.lang.String srcChildRelPath, java.lang.String destChildRelPath) в javax.jcr.Node. Может быть, было бы неплохо иметь хотя бы метод для получения следующего или предыдущего узла для данного узла. Выполнение этого в настоящее время путем перемещения всех узлов, как показано на шаге 1, может быть очень медленным. – mkuzela
Да, я имею в виду orderBefore. –