diff --git a/src/main/java/edu/harvard/iq/dataverse/DatasetPage.java b/src/main/java/edu/harvard/iq/dataverse/DatasetPage.java index f24d3f52035..097a9c6468e 100644 --- a/src/main/java/edu/harvard/iq/dataverse/DatasetPage.java +++ b/src/main/java/edu/harvard/iq/dataverse/DatasetPage.java @@ -1682,7 +1682,7 @@ public TreeNode getFilesTreeRoot() { } private void initFilesTree() { - filesTreeRoot = createFolderTreeNode("root", null, null); + filesTreeRoot = createFolderTreeNode("root", null); TreeNode currentNode = filesTreeRoot; // this is a temporary map, that we keep while we are building // the tree - in order to have direct access to the ancestor tree @@ -1699,12 +1699,10 @@ private void initFilesTree() { filesTreeRoot.getChildren().add(createFileTreeNode(fileMetadata, filesTreeRoot)); } else { if (folderMap.containsKey(folder)) { - /*if (currentNode.getData().getFolderPath().equals(folder)) {*/ + // We have already created this node; and since all the FileMetadatas + // are sorted by folder-then-label, it is safe to assume this is + // still the "current node": currentNode.getChildren().add(createFileTreeNode(fileMetadata, currentNode)); - /*} else { - // error! shouldn't happen! - logger.severe("filemetadatas out of sorted order (should be sorted by folder-label)"); - }*/ } else { // no node for this folder yet - need to create! @@ -1719,13 +1717,11 @@ private void initFilesTree() { } if (folderMap.containsKey(folderPath)) { - logger.fine("folder " + folderPath + " already exists;"); // jump directly to that ancestor folder node: currentNode = folderMap.get(folderPath); } else { // create a new folder node: - logger.fine("creating folder " + folderPath); - currentNode = createFolderTreeNode(subfolders[level], folderPath, currentNode); + currentNode = createFolderTreeNode(subfolders[level], currentNode); folderMap.put(folderPath, currentNode); // all the folders, except for the top-level root node // are collapsed by default: @@ -1735,7 +1731,7 @@ private void initFilesTree() { level++; } currentNode.getChildren().add(createFileTreeNode(fileMetadata, currentNode)); - // As soon as we find the first folder containing files, we want + // As soon as we reach the first folder containing files, we want // to have all the other folders collapsed by default: if (expandFolders) { expandFolders = false; @@ -1748,31 +1744,29 @@ private void initFilesTree() { } - private DefaultTreeNode createFolderTreeNode(String name, String path, TreeNode parent) { - - FileTreeNodeData data = new FileTreeNodeData(); - - data.setIsFolder(true); - data.setFolderName(name); - data.setFolderPath(path); - - - DefaultTreeNode folderNode = new DefaultTreeNode(data, parent); - + private DefaultTreeNode createFolderTreeNode(String name, TreeNode parent) { + // For a tree node representing a folder, we use its name, as a String, + // as the node data payload. (meaning, in the xhtml the folder name can + // be shown as simply "#{node}". + // If we ever want to have more information shown for folders in the + // tree view (for example, we could show the number of files and sub-folders + // in each folder next to the name), we will have to define a custom class + // and use it instead of the string in the DefaultTreeNode constructor + // below: + DefaultTreeNode folderNode = new DefaultTreeNode(name, parent); return folderNode; } private DefaultTreeNode createFileTreeNode(FileMetadata fileMetadata, TreeNode parent) { - FileTreeNodeData data = new FileTreeNodeData(); - - data.setIsFolder(false); - data.setFileName(fileMetadata.getLabel()); - data.setFileSize(fileMetadata.getDataFile().getFriendlySize()); - data.setDataFileId(fileMetadata.getDataFile().getId()); - data.setDataFileGlobalId(fileMetadata.getDataFile().getGlobalId().asString()); - data.setFileClass(datafileService.getFileClass(fileMetadata.getDataFile())); + // For a tree node representing a DataFile, we pack the entire FileMetadata + // object into the node, as its "data" payload. + // Note that we are using a custom node type ("customFileNode"), defined + // in the page xhtml. + // If we ever want to have customized nodes that display different types + // of information for different types of files (tab. files would be a + // natural case), more custom nodes could be defined. - DefaultTreeNode fileNode = new DefaultTreeNode("customFileNode", data, parent); + DefaultTreeNode fileNode = new DefaultTreeNode("customFileNode", fileMetadata, parent); return fileNode; } @@ -4711,91 +4705,4 @@ public void archiveVersion(Long id) { } } } - - public class FileTreeNodeData { - - private boolean isFolder = false; - - public boolean isFile() { - return !isFolder; - } - - public boolean isFolder() { - return isFolder; - } - - public void setIsFolder(boolean isFolder) { - this.isFolder = isFolder; - } - - private Long dataFileId = null; - - public void setDataFileId(Long dataFileId) { - this.dataFileId = dataFileId; - } - - public Long getDataFileId() { - return dataFileId; - } - - private String dataFileGlobalId = null; - - public void setDataFileGlobalId(String dataFileGlobalId) { - this.dataFileGlobalId = dataFileGlobalId; - } - - public String getDataFileGlobalId() { - return dataFileGlobalId; - } - - private String fileClass = null; - - public String getFileClass() { - return fileClass; - } - - public void setFileClass(String fileClass) { - this.fileClass = fileClass; - } - - private String fileName = null; - - public String getFileName() { - return fileName; - } - - public void setFileName(String fileName) { - this.fileName = fileName; - } - - private String fileSize = null; - - public String getFileSize() { - return fileSize; - } - - public void setFileSize(String fileSize) { - this.fileSize = fileSize; - } - - private String folderName = null; - - public String getFolderName() { - return folderName; - } - - public void setFolderName(String folderName) { - this.folderName = folderName; - } - - private String folderPath = null; - - public String getFolderPath() { - return folderPath; - } - - public void setFolderPath(String folderPath) { - this.folderPath = folderPath; - } - } } diff --git a/src/main/webapp/filesFragment.xhtml b/src/main/webapp/filesFragment.xhtml index 8fd31b336f3..93235879cea 100644 --- a/src/main/webapp/filesFragment.xhtml +++ b/src/main/webapp/filesFragment.xhtml @@ -436,24 +436,28 @@ var="node"> - + + - - - - - #{node.fileName} + + + + + + + + #{node.label} - - - #{node.fileName} + + + #{node.label} - (#{node.fileSize}) + (#{node.dataFile.friendlySize})