package models.filestore; import java.util.Collections; import java.util.List; import java.util.Map; import javax.jcr.nodetype.NodeType; import org.jcrom.AbstractJcrEntity; import org.jcrom.annotations.JcrChildNode; import org.jcrom.annotations.JcrIdentifier; import org.jcrom.annotations.JcrNode; import org.jcrom.annotations.JcrParentNode; import com.google.common.collect.ImmutableSortedMap; @JcrNode( nodeType = NodeType.NT_UNSTRUCTURED, mixinTypes = { NodeType.MIX_CREATED, NodeType.MIX_REFERENCEABLE, NodeType.MIX_LAST_MODIFIED }, classNameProperty = "className") public class Folder extends AbstractJcrEntity implements Child<Folder> { private static final long serialVersionUID = 1L; @JcrIdentifier private String id; @JcrParentNode private Folder parent; @JcrChildNode(lazy=true) private List<Folder> folders; @JcrChildNode(lazy=true) private List<File> files; public Folder() {} public Folder(Folder parent, String name) { this.parent = parent; this.setName(name); } @Override public String getId() { return id; } public Map<String, Folder> getFolders() { return getImmutableMap(folders); } public Map<String, File> getFiles() { return getImmutableMap(files); } protected <T extends AbstractJcrEntity> Map<String, T> getImmutableMap(List<T> entities) { if (entities == null) return Collections.emptyMap(); final ImmutableSortedMap.Builder<String, T> b = ImmutableSortedMap.<String, T>naturalOrder(); for (T entity : entities) b.put(entity.getName(), entity); return b.build(); } @Override public Folder getParent() { return parent; } @Override public String toString() { return String.format("%s [%s]", getPath(), getId()); } }