npeltier commented on a change in pull request #10: SLING-8648 URL: https://github.com/apache/sling-org-apache-sling-pipes/pull/10#discussion_r316580657
########## File path: src/main/java/org/apache/sling/pipes/internal/MovePipe.java ########## @@ -63,23 +67,38 @@ public boolean modifiesContent() { try { Session session = resolver.adaptTo(Session.class); if (session.itemExists(targetPath)){ - if (overwriteTarget && !isDryRun()) { - logger.debug("overwriting {}", targetPath); + if (overwriteTarget || orderBefore && !isDryRun()) { + Resource target = resolver.getResource(targetPath); + Resource parent = target.getParent(); Node targetParent = session.getItem(targetPath).getParent(); - if (targetParent.getPrimaryNodeType().hasOrderableChildNodes()) { - String targetPathNewNode = targetPath + UUID.randomUUID() ; - session.move(resource.getPath(), targetPathNewNode); - String newNodeName = targetPathNewNode.substring(targetPathNewNode.lastIndexOf("/") + 1); - String oldNodeName = targetPath.substring(targetPath.lastIndexOf("/") + 1); - targetParent.orderBefore(newNodeName, oldNodeName); - session.removeItem(targetPath); - // Need to use JackrabbitNode.rename() here, since session.move(targetPathNewNode, targetPath) - // would move the new node back to the end of its siblings list - JackrabbitNode newNode = (JackrabbitNode) session.getNode(targetPathNewNode); - newNode.rename(oldNodeName); + String targetPathNewNode = targetPath + UUID.randomUUID(); + String newNodeName = targetPathNewNode.substring(targetPathNewNode.lastIndexOf("/") + 1); + String oldNodeName = targetPath.substring(targetPath.lastIndexOf("/") + 1); + if (orderBefore) { + logger.debug("ordering {} before {}", resource.getPath(), targetPath); + if (targetParent.getPrimaryNodeType().hasOrderableChildNodes()) { + String targetNodeName = ResourceUtil.createUniqueChildName(parent, resource.getName()); + String targetNodePath = targetParent.getPath() + SLASH + targetNodeName; + session.move(resource.getPath(), targetNodePath); + targetParent.orderBefore(targetNodeName, oldNodeName); + output = Collections.singleton(parent.getChild(targetNodeName)).iterator(); + } else { + logger.warn("parent resource {} doesn't support ordering", target.getPath()); + } } else { - session.removeItem(targetPath); - session.move(resource.getPath(), targetPath); + logger.debug("overwriting {}", targetPath); + if (targetParent.getPrimaryNodeType().hasOrderableChildNodes()) { + session.move(resource.getPath(), targetPathNewNode); + targetParent.orderBefore(newNodeName, oldNodeName); Review comment: why orderBefore? aren't we in the case where there is no "orderBefore" configured? ---------------------------------------------------------------- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org With regards, Apache Git Services