X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=srcjar%2Ffr%2Forsay%2Flri%2Fvarna%2Fapplications%2FnewGUI%2FVARNAGUITreeModel.java;fp=srcjar%2Ffr%2Forsay%2Flri%2Fvarna%2Fapplications%2FnewGUI%2FVARNAGUITreeModel.java;h=e307543a76c28268e195ebce5da3f47b27f382a7;hb=ec8f3cedf60fb1feed6d34de6b49f6bfa78b9dd8;hp=0000000000000000000000000000000000000000;hpb=056dad85a910551cc95e44d451a61f6b8c4dd35d;p=jalview.git diff --git a/srcjar/fr/orsay/lri/varna/applications/newGUI/VARNAGUITreeModel.java b/srcjar/fr/orsay/lri/varna/applications/newGUI/VARNAGUITreeModel.java new file mode 100644 index 0000000..e307543 --- /dev/null +++ b/srcjar/fr/orsay/lri/varna/applications/newGUI/VARNAGUITreeModel.java @@ -0,0 +1,169 @@ +package fr.orsay.lri.varna.applications.newGUI; + +import java.io.File; +import java.io.FilenameFilter; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Hashtable; +import java.util.PriorityQueue; +import java.util.TreeSet; + +import javax.swing.tree.DefaultMutableTreeNode; +import javax.swing.tree.DefaultTreeModel; +import javax.swing.tree.TreePath; + +public class VARNAGUITreeModel extends DefaultTreeModel{ + + private TreeSet _folders = new TreeSet(); + private TreeSet _ids = new TreeSet(); + private Hashtable> _criterionToFiles = new Hashtable>(); + private Hashtable _criterionToNodes = new Hashtable(); + private ArrayList _fileNodes = new ArrayList(); + + public enum SORT_MODE{ + PATH, + ID + } + + private SORT_MODE _mode = SORT_MODE.PATH; + + public VARNAGUITreeModel() + { + super(new DefaultMutableTreeNode("Folders")); + } + + + public void removeFolder(String path) + { + if (_mode==SORT_MODE.PATH) + { + int pos = _folders.headSet(path).size(); + DefaultMutableTreeNode parent = (DefaultMutableTreeNode) getRoot().getChildAt(pos); + parent.removeAllChildren(); + reload(parent); + getRoot().remove(parent); + _criterionToNodes.remove(path); + _criterionToFiles.remove(path); + } + else if (_mode==SORT_MODE.ID) + { + ArrayList toBeRemoved = new ArrayList(); + for(DefaultMutableTreeNode leafNode : _fileNodes) + { + VARNAGUIModel m = (VARNAGUIModel)leafNode.getUserObject(); + if (m.getFolder().equals(path)) + { + toBeRemoved.add(leafNode); + } + } + for(DefaultMutableTreeNode leafNode : toBeRemoved) + { + _fileNodes.remove(leafNode); + DefaultMutableTreeNode parent = (DefaultMutableTreeNode) leafNode.getParent(); + parent.remove(leafNode); + } + } + _folders.remove(path); + } + + + public DefaultMutableTreeNode insertGroupNode(String crit, TreeSet t) + { + DefaultMutableTreeNode groupNode = new DefaultMutableTreeNode(crit); + DefaultMutableTreeNode parent = getRoot(); + int pos = t.headSet(crit).size(); + parent.insert(groupNode, pos); + reload(groupNode); + return groupNode; + } + + public void insertLeafNode(DefaultMutableTreeNode parent, VARNAGUIModel m, TreeSet t) + { + DefaultMutableTreeNode leafNode = new DefaultMutableTreeNode(m); + int pos = t.headSet(m).size(); + parent.insert(leafNode, pos); + _fileNodes.add(leafNode); + } + + public DefaultMutableTreeNode addFolder(String path) + { + DefaultMutableTreeNode groupNode = null; + try { + if (!_folders.contains(path)) + { + System.out.println("Folder: "+path); + File dir = new File(path); + if (dir.isDirectory()) + { + path = dir.getCanonicalPath(); + _folders.add(path); + if (_mode==SORT_MODE.PATH) + { + System.out.println(" Adding: "+path); + groupNode = insertGroupNode(path, _folders); + _criterionToNodes.put(path,groupNode); + _criterionToFiles.put(path, new TreeSet()); + } + for(File f:dir.listFiles(_f)) + { + addFile(path,f.getCanonicalPath()); + } + } + } + } catch (IOException e) { + e.printStackTrace(); + } + return groupNode; + } + + private void addFile(String folder, String path) + { + System.out.println(" => "+path); + VARNAGUIModel m = new VARNAGUIModel(folder,path); + if (_mode==SORT_MODE.PATH) + { + addFolder(folder); + insertLeafNode(_criterionToNodes.get(folder), m, _criterionToFiles.get(folder)); + } + else if (_mode==SORT_MODE.ID) + { + String id = m.getID(); + if (!_criterionToNodes.containsKey(id)) + { + _criterionToNodes.put(id, insertGroupNode(id, _ids)); + } + insertLeafNode(_criterionToNodes.get(id), m, _criterionToFiles.get(id)); + } + } + + public DefaultMutableTreeNode getRoot() + { + return (DefaultMutableTreeNode) super.getRoot(); + } + + public ArrayList getFolders() + { + ArrayList result = new ArrayList(_folders); + return result; + } + + + FilenameFilter _f = new FilenameFilter(){ + public boolean accept(File dir, String name) { + return name.toLowerCase().endsWith(".dbn") + || name.toLowerCase().endsWith(".ct") + || name.toLowerCase().endsWith(".bpseq") + || name.toLowerCase().endsWith(".rnaml"); + }}; + + public FilenameFilter getFileNameFilter() + { + return _f; + } + + public void setFileNameFilter(FilenameFilter f) + { + _f = f; + } + +}