private IFolder prepareCreateFolderChild()

in eclipse/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/model/JcrNode.java [1522:1555]


    private IFolder prepareCreateFolderChild(final String childNodeName)
            throws CoreException {
        // 0) find base folder for creating new subfolders
        List<String> parentNames = new LinkedList<>();
        JcrNode node = JcrNode.this;
        while(!(node.resource instanceof IFolder) && !(node instanceof SyncDir)) {
            parentNames.add(0, node.getJcrPathName());
            node = node.getParent();
        }
        if (!(node.resource instanceof IFolder)) {
            throw new CoreException(new Status(IStatus.ERROR, Activator.PLUGIN_ID, "Could not find base folder for creating child. (1) Expected a folder at "+node.resource));
        }
        IFolder folder = (IFolder) node.resource;
        parentNames.add(childNodeName);
        for (Iterator<String> it = parentNames.iterator(); it .hasNext();) {
            String aParentName = it.next();
            String encodedParentName = DirNode.encode(aParentName);
            IResource member = folder.findMember(encodedParentName);
            if (member!=null && !(member instanceof IFolder)) {
                throw new CoreException(new Status(IStatus.ERROR, Activator.PLUGIN_ID, "Could not find base folder for creating child. (2) Expected a folder at "+member));
            }
            if (member!=null && member.exists()) {
                folder = (IFolder) member;
                it.remove();
                continue;
            }
            folder = folder.getFolder(encodedParentName);
            if (!folder.exists()) {
                folder.create(true, true, new NullProgressMonitor());
            }
        }
        
        return folder;
    }