2014-01-10 1 views
0

Есть ли простой способ заменить существующий узел другим узлом в 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(), который работает с упорядочением.

Как вы считаете, существует какой-то другой/более простой подход для решения этой проблемы?

ответ

0

К сожалению, новые узлы JCR 2.0 всегда добавляются в конце, и использование javax.jcr.Node.reorder(...) - единственный способ изменить положение дочернего узла в списке родительских списков. Это неудобно сказать, но я подозреваю, что такие методы добавили бы слишком большую сложность в уже запущенный API.

+0

Привет, Randall, вероятно, вы имеете в виду метод orderBefore (java.lang.String srcChildRelPath, java.lang.String destChildRelPath) в javax.jcr.Node. Может быть, было бы неплохо иметь хотя бы метод для получения следующего или предыдущего узла для данного узла. Выполнение этого в настоящее время путем перемещения всех узлов, как показано на шаге 1, может быть очень медленным. – mkuzela

+0

Да, я имею в виду orderBefore. –