private List<Fileable> getChildren(Folder folder, String user, boolean usePwc) { List<Fileable> children = new ArrayList<Fileable>(); for (String id : getIds()) { StoredObject obj = getObject(id); if (obj instanceof Fileable) { Fileable pathObj = (Fileable) obj; if ((null == user || hasReadAccess(user, obj)) && pathObj.getParentIds().contains(folder.getId())) { if (pathObj instanceof VersionedDocument) { DocumentVersion ver; if (usePwc) { ver = ((VersionedDocument) pathObj).getPwc(); if (null == ver) { ver = ((VersionedDocument) pathObj).getLatestVersion(false); } } else { ver = ((VersionedDocument) pathObj).getLatestVersion(false); } children.add(ver); } else if (!(pathObj instanceof DocumentVersion)) { // ignore // DocumentVersion children.add(pathObj); } } } } return children; }
private boolean hasChild(Folder folder, String name) { List<Fileable> children = getChildren(folder); for (Fileable child : children) { if (child.getName().equals(name)) { return true; } } return false; }
private Fileable findObjectWithPathInDescendents( String path, String user, String prefix, Fileable fo) { if (path.equals(prefix)) { return fo; } else if (fo instanceof Folder) { List<Fileable> children = getChildren((Folder) fo); for (Fileable child : children) { String foundPath = prefix.length() == 1 ? prefix + child.getName() : prefix + Filing.PATH_SEPARATOR + child.getName(); if (path.startsWith(foundPath)) { Fileable found = findObjectWithPathInDescendents(path, user, foundPath, child); if (null != found) { return found; // note that there can be multiple folders // with the same prefix like folder1, // folder10 } } } } return null; }