package org.argeo.eclipse.ui.jcr; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import javax.jcr.Node; import javax.jcr.RepositoryException; import javax.jcr.Session; import org.argeo.eclipse.ui.EclipseUiException; import org.argeo.jcr.JcrUtils; /** Simple JCR node content provider taking a list of String as base path. */ public class SimpleNodeContentProvider extends AbstractNodeContentProvider { private static final long serialVersionUID = -8245193308831384269L; private final List basePaths; private Boolean mkdirs = false; public SimpleNodeContentProvider(Session session, String... basePaths) { this(session, Arrays.asList(basePaths)); } public SimpleNodeContentProvider(Session session, List basePaths) { super(session); this.basePaths = basePaths; } @Override protected Boolean isBasePath(String path) { if (basePaths.contains(path)) return true; return super.isBasePath(path); } public Object[] getElements(Object inputElement) { try { List baseNodes = new ArrayList(); for (String basePath : basePaths) if (mkdirs && !getSession().itemExists(basePath)) baseNodes.add(JcrUtils.mkdirs(getSession(), basePath)); else baseNodes.add(getSession().getNode(basePath)); return baseNodes.toArray(); } catch (RepositoryException e) { throw new EclipseUiException("Cannot get base nodes for " + basePaths, e); } } public List getBasePaths() { return basePaths; } public void setMkdirs(Boolean mkdirs) { this.mkdirs = mkdirs; } }