package org.isatools.isacreator.gs.gui; import org.genomespace.client.DataManagerClient; import org.genomespace.datamanager.core.GSFileMetadata; import org.isatools.isacreator.filechooser.FileBrowserTreeNode; import javax.swing.tree.DefaultMutableTreeNode; import java.util.Collections; import java.util.List; /** * From GS cdk * * User: agbeltran * Date: 05/11/2012 * Time: 12:28 * */ class GSFileMetadataTreeNode extends FileBrowserTreeNode {//DefaultMutableTreeNode { private static int UNINITIALISED = -1; private final GSFileMetadata fileMetadata; private final DataManagerClient dataManagerClient; private int childCount; private final List<String> acceptableExtensions; GSFileMetadataTreeNode(final GSFileMetadata fileMetadata, final DataManagerClient dataManagerClient, final List<String> acceptableExtensions) { super(fileMetadata, fileMetadata.isDirectory(), fileMetadata.isDirectory() ? FileBrowserTreeNode.DIRECTORY : FileBrowserTreeNode.FILE_TYPE); this.fileMetadata = fileMetadata; this.dataManagerClient = dataManagerClient; this.childCount = fileMetadata.isDirectory() ? UNINITIALISED : 0; this.acceptableExtensions = acceptableExtensions; } @Override public boolean isLeaf() { return !fileMetadata.isDirectory(); } @Override public String toString() { return fileMetadata.getName(); } @Override public int getChildCount() { if (childCount != UNINITIALISED) return childCount; initChildCount(); return childCount; } private void initChildCount() { final List<GSFileMetadata> filesMetadata = dataManagerClient.list(fileMetadata).getContents(); childCount = 0; // Warning: The way "childCount" is being updated piecemeal // in this method is essential! Do not change it!! Collections.sort(filesMetadata, new GSFileMetadataComparator()); for (final GSFileMetadata metadata : filesMetadata) { add(new GSFileMetadataTreeNode(metadata, dataManagerClient, acceptableExtensions)); ++childCount; } } public GSFileMetadata getFileMetadata() { return fileMetadata; } public boolean isEnabled() { if (fileMetadata.isDirectory() || acceptableExtensions.isEmpty()) return true; final String extension = getFileExtension(fileMetadata.getName()); for (final String acceptableExtension : acceptableExtensions) { if (extension.equalsIgnoreCase(acceptableExtension)) return true; } return false; } private static String getFileExtension(final String fileName) { final int lastDotPos = fileName.lastIndexOf('.'); return (lastDotPos == -1) ? "" : fileName.substring(lastDotPos + 1); } public boolean childrenHaveBeenInitialised() { return childCount != UNINITIALISED; } }