private Iterator overwriteTarget()

in src/main/java/org/apache/sling/pipes/internal/MovePipe.java [64:94]


    private Iterator<Resource> overwriteTarget(Resource input, Resource target) throws RepositoryException {
        logger.info("overwriting {}", target.getPath());
        Session session = resolver.adaptTo(Session.class);
        if (!isDryRun() && session != null) {
            Resource parent = target.getParent();
            String targetPath = target.getPath();
            Node targetParent = session.getItem(targetPath).getParent();
            if (targetParent.getPrimaryNodeType().hasOrderableChildNodes()) {
                String oldNodeName = target.getName();
                String targetPathNewNode = targetPath + UUID.randomUUID();
                String newNodeName = targetPathNewNode.substring(targetPathNewNode.lastIndexOf("/") + 1);
                session.move(input.getPath(), targetPathNewNode);
                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);
                if (parent != null) {
                    return Collections.singleton(parent.getChild(oldNodeName)).iterator();
                }
            } else {
                session.removeItem(targetPath);
                session.move(input.getPath(), targetPath);
                if (parent != null) {
                    return Collections.singleton(parent.getChild(input.getName())).iterator();
                }
            }
        }
        return EMPTY_ITERATOR;
    }