1 package fr.orsay.lri.varna.applications.newGUI;
4 import java.io.FilenameFilter;
5 import java.io.IOException;
6 import java.util.ArrayList;
7 import java.util.Hashtable;
8 import java.util.PriorityQueue;
9 import java.util.TreeSet;
11 import javax.swing.tree.DefaultMutableTreeNode;
12 import javax.swing.tree.DefaultTreeModel;
13 import javax.swing.tree.TreePath;
15 public class VARNAGUITreeModel extends DefaultTreeModel{
17 private TreeSet<String> _folders = new TreeSet<String>();
18 private TreeSet<String> _ids = new TreeSet<String>();
19 private Hashtable<String,TreeSet<VARNAGUIModel>> _criterionToFiles = new Hashtable<String,TreeSet<VARNAGUIModel>>();
20 private Hashtable<String,DefaultMutableTreeNode> _criterionToNodes = new Hashtable<String,DefaultMutableTreeNode>();
21 private ArrayList<DefaultMutableTreeNode> _fileNodes = new ArrayList<DefaultMutableTreeNode>();
23 public enum SORT_MODE{
28 private SORT_MODE _mode = SORT_MODE.PATH;
30 public VARNAGUITreeModel()
32 super(new DefaultMutableTreeNode("Folders"));
36 public void removeFolder(String path)
38 if (_mode==SORT_MODE.PATH)
40 int pos = _folders.headSet(path).size();
41 DefaultMutableTreeNode parent = (DefaultMutableTreeNode) getRoot().getChildAt(pos);
42 parent.removeAllChildren();
44 getRoot().remove(parent);
45 _criterionToNodes.remove(path);
46 _criterionToFiles.remove(path);
48 else if (_mode==SORT_MODE.ID)
50 ArrayList<DefaultMutableTreeNode> toBeRemoved = new ArrayList<DefaultMutableTreeNode>();
51 for(DefaultMutableTreeNode leafNode : _fileNodes)
53 VARNAGUIModel m = (VARNAGUIModel)leafNode.getUserObject();
54 if (m.getFolder().equals(path))
56 toBeRemoved.add(leafNode);
59 for(DefaultMutableTreeNode leafNode : toBeRemoved)
61 _fileNodes.remove(leafNode);
62 DefaultMutableTreeNode parent = (DefaultMutableTreeNode) leafNode.getParent();
63 parent.remove(leafNode);
66 _folders.remove(path);
70 public DefaultMutableTreeNode insertGroupNode(String crit, TreeSet<String> t)
72 DefaultMutableTreeNode groupNode = new DefaultMutableTreeNode(crit);
73 DefaultMutableTreeNode parent = getRoot();
74 int pos = t.headSet(crit).size();
75 parent.insert(groupNode, pos);
80 public void insertLeafNode(DefaultMutableTreeNode parent, VARNAGUIModel m, TreeSet<VARNAGUIModel> t)
82 DefaultMutableTreeNode leafNode = new DefaultMutableTreeNode(m);
83 int pos = t.headSet(m).size();
84 parent.insert(leafNode, pos);
85 _fileNodes.add(leafNode);
88 public DefaultMutableTreeNode addFolder(String path)
90 DefaultMutableTreeNode groupNode = null;
92 if (!_folders.contains(path))
94 System.out.println("Folder: "+path);
95 File dir = new File(path);
96 if (dir.isDirectory())
98 path = dir.getCanonicalPath();
100 if (_mode==SORT_MODE.PATH)
102 System.out.println(" Adding: "+path);
103 groupNode = insertGroupNode(path, _folders);
104 _criterionToNodes.put(path,groupNode);
105 _criterionToFiles.put(path, new TreeSet<VARNAGUIModel>());
107 for(File f:dir.listFiles(_f))
109 addFile(path,f.getCanonicalPath());
113 } catch (IOException e) {
119 private void addFile(String folder, String path)
121 System.out.println(" => "+path);
122 VARNAGUIModel m = new VARNAGUIModel(folder,path);
123 if (_mode==SORT_MODE.PATH)
126 insertLeafNode(_criterionToNodes.get(folder), m, _criterionToFiles.get(folder));
128 else if (_mode==SORT_MODE.ID)
130 String id = m.getID();
131 if (!_criterionToNodes.containsKey(id))
133 _criterionToNodes.put(id, insertGroupNode(id, _ids));
135 insertLeafNode(_criterionToNodes.get(id), m, _criterionToFiles.get(id));
139 public DefaultMutableTreeNode getRoot()
141 return (DefaultMutableTreeNode) super.getRoot();
144 public ArrayList<String> getFolders()
146 ArrayList<String> result = new ArrayList<String>(_folders);
151 FilenameFilter _f = new FilenameFilter(){
152 public boolean accept(File dir, String name) {
153 return name.toLowerCase().endsWith(".dbn")
154 || name.toLowerCase().endsWith(".ct")
155 || name.toLowerCase().endsWith(".bpseq")
156 || name.toLowerCase().endsWith(".rnaml");
159 public FilenameFilter getFileNameFilter()
164 public void setFileNameFilter(FilenameFilter f)