package org.isatools.isacreator.gs.gui;
import org.genomespace.client.DataManagerClient;
import org.genomespace.datamanager.core.GSDirectoryListing;
import org.genomespace.datamanager.core.GSFileMetadata;
import org.isatools.isacreator.filechooser.FileSystemTreeCellRenderer;
import javax.swing.*;
import javax.swing.tree.DefaultTreeCellRenderer;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreeModel;
import javax.swing.tree.TreeSelectionModel;
import java.awt.*;
import java.util.*;
import java.util.List;
/**
* Created by the ISATeam.
* Date: 05/11/2012
* Time: 12:38
*
* From GS code
*/
public class GSTree extends JTree {
GSTree(final DataManagerClient dataManagerClient, final List<String> acceptableExtensions) {
super(createTopAndFirstTier(dataManagerClient, acceptableExtensions));
setShowsRootHandles(true);
getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
setCellRenderer(new FileSystemTreeCellRenderer());
}
GSTree(final DataManagerClient dataManagerClient) {
this(dataManagerClient, new ArrayList<String>());
}
private static TreeModel createTopAndFirstTier(
final DataManagerClient dataManagerClient,
final List<String> acceptableExtensions)
{
final GSDirectoryListing dirListing = dataManagerClient.listDefaultDirectory();
final Vector<GSFileMetadata> filesMetadata = new Vector(dirListing.getContents());
Collections.sort(filesMetadata, new GSFileMetadataComparator());
final RootTreeNode top =
new RootTreeNode(dirListing.getDirectory(), dataManagerClient);
final Iterator<GSFileMetadata> iter = filesMetadata.iterator();
while (iter.hasNext()) {
final GSFileMetadata metadata = iter.next();
top.add(new GSFileMetadataTreeNode(metadata, dataManagerClient,
acceptableExtensions));
}
return new DefaultTreeModel(top);
}
static final class MyTreeCellRenderer extends DefaultTreeCellRenderer {
@Override
public Component getTreeCellRendererComponent(final JTree tree, final Object value,
final boolean sel,
final boolean expanded,
final boolean leaf, final int row,
final boolean hasFocus)
{
if (value instanceof GSFileMetadataTreeNode) {
final GSFileMetadataTreeNode fileMetaTreeNode =
(GSFileMetadataTreeNode)value;
if (fileMetaTreeNode.isEnabled()) {
setTextSelectionColor(Color.BLACK);
setTextNonSelectionColor(Color.BLACK);
} else {
setTextSelectionColor(Color.GRAY);
setTextNonSelectionColor(Color.GRAY);
}
}
super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus);
return this;
}
}
}