mev-4.0.01/source/org/tigr/microarray/mev/file/FileTreePane.java

Code
Comments
Other
Rev Date Author Line
2 26 Feb 07 jari 1 /*
2 26 Feb 07 jari 2 Copyright @ 1999-2004, The Institute for Genomic Research (TIGR).
2 26 Feb 07 jari 3 All rights reserved.
2 26 Feb 07 jari 4  */
2 26 Feb 07 jari 5
2 26 Feb 07 jari 6 /*
2 26 Feb 07 jari 7  * $RCSfile: FileTreePane.java,v $
2 26 Feb 07 jari 8  * $Revision: 1.5 $
2 26 Feb 07 jari 9  * $Date: 2005/03/10 15:39:39 $
2 26 Feb 07 jari 10  * $Author: braistedj $
2 26 Feb 07 jari 11  * $State: Exp $
2 26 Feb 07 jari 12  */
2 26 Feb 07 jari 13
2 26 Feb 07 jari 14 package org.tigr.microarray.mev.file;
2 26 Feb 07 jari 15
2 26 Feb 07 jari 16 import java.awt.BorderLayout;
2 26 Feb 07 jari 17 import java.awt.Color;
2 26 Feb 07 jari 18 import java.awt.Component;
2 26 Feb 07 jari 19 import java.awt.Graphics;
2 26 Feb 07 jari 20 import java.awt.Toolkit;
2 26 Feb 07 jari 21 import java.io.File;
2 26 Feb 07 jari 22 import java.util.Hashtable;
2 26 Feb 07 jari 23 import java.util.StringTokenizer;
2 26 Feb 07 jari 24 import java.util.Vector;
2 26 Feb 07 jari 25
2 26 Feb 07 jari 26 import javax.swing.Icon;
2 26 Feb 07 jari 27 import javax.swing.ImageIcon;
2 26 Feb 07 jari 28 import javax.swing.JFrame;
2 26 Feb 07 jari 29 import javax.swing.JLabel;
2 26 Feb 07 jari 30 import javax.swing.JList;
2 26 Feb 07 jari 31 import javax.swing.JOptionPane;
2 26 Feb 07 jari 32 import javax.swing.JPanel;
2 26 Feb 07 jari 33 import javax.swing.JScrollPane;
2 26 Feb 07 jari 34 import javax.swing.JTree;
2 26 Feb 07 jari 35 import javax.swing.UIManager;
2 26 Feb 07 jari 36 import javax.swing.event.ListSelectionEvent;
2 26 Feb 07 jari 37 import javax.swing.event.ListSelectionListener;
2 26 Feb 07 jari 38 import javax.swing.event.TreeExpansionEvent;
2 26 Feb 07 jari 39 import javax.swing.event.TreeExpansionListener;
2 26 Feb 07 jari 40 import javax.swing.event.TreeSelectionEvent;
2 26 Feb 07 jari 41 import javax.swing.event.TreeSelectionListener;
2 26 Feb 07 jari 42 import javax.swing.tree.DefaultMutableTreeNode;
2 26 Feb 07 jari 43 import javax.swing.tree.DefaultTreeModel;
2 26 Feb 07 jari 44 import javax.swing.tree.TreeCellRenderer;
2 26 Feb 07 jari 45 import javax.swing.tree.TreePath;
2 26 Feb 07 jari 46 import javax.swing.tree.TreeSelectionModel;
2 26 Feb 07 jari 47
2 26 Feb 07 jari 48
2 26 Feb 07 jari 49 public class FileTreePane extends JPanel {
2 26 Feb 07 jari 50     
2 26 Feb 07 jari 51     public final static ImageIcon ICON_COMPUTER = new ImageIcon(Toolkit.getDefaultToolkit().getImage(FileTreePane.class.getClassLoader().getResource("org/tigr/images/PCIcon.gif")));
2 26 Feb 07 jari 52     public final static ImageIcon ICON_DISK = new ImageIcon(Toolkit.getDefaultToolkit().getImage(FileTreePane.class.getClassLoader().getResource("org/tigr/images/disk.gif")));
2 26 Feb 07 jari 53     public final static ImageIcon ICON_FOLDER = new ImageIcon(Toolkit.getDefaultToolkit().getImage(FileTreePane.class.getClassLoader().getResource("org/tigr/images/Directory.gif")));
2 26 Feb 07 jari 54     public final static ImageIcon ICON_EXPANDEDFOLDER = new ImageIcon(Toolkit.getDefaultToolkit().getImage(FileTreePane.class.getClassLoader().getResource("org/tigr/images/expandedfolder.gif")));
2 26 Feb 07 jari 55     
2 26 Feb 07 jari 56     // hacked to work around directory problem
2 26 Feb 07 jari 57     public final static String WINDOWS = "windows";
2 26 Feb 07 jari 58     public final static String LINUX = "linux";
2 26 Feb 07 jari 59     public final static String MAC = "mac";
2 26 Feb 07 jari 60     private String os = System.getProperty("os.name");
2 26 Feb 07 jari 61     public char DIRECTORY_DIV;
2 26 Feb 07 jari 62     public String DIRECTORY_DIV_S;
2 26 Feb 07 jari 63     // end pc
2 26 Feb 07 jari 64     
2 26 Feb 07 jari 65     
2 26 Feb 07 jari 66     protected JTree m_tree;
2 26 Feb 07 jari 67     protected DefaultTreeModel m_model;
2 26 Feb 07 jari 68     protected JList fileList;
2 26 Feb 07 jari 69     private Vector rightListContent;
2 26 Feb 07 jari 70     private Vector leftListContent;
2 26 Feb 07 jari 71     
2 26 Feb 07 jari 72     protected String fPath;
2 26 Feb 07 jari 73     protected String selectedSingleFile;
2 26 Feb 07 jari 74     protected Vector selectedFilesVec;
2 26 Feb 07 jari 75     protected int selectedCount;
2 26 Feb 07 jari 76     protected Vector listeners = new Vector();
2 26 Feb 07 jari 77     protected String dataPath;
2 26 Feb 07 jari 78     protected DefaultMutableTreeNode top;
2 26 Feb 07 jari 79     
2 26 Feb 07 jari 80     public final static int NODE_COLLAPSED = 0;
2 26 Feb 07 jari 81     public final static int NODE_EXPANDED = 1;
2 26 Feb 07 jari 82     public final static int NODE_SELECTED = 2;
2 26 Feb 07 jari 83     
2 26 Feb 07 jari 84     // pc
2 26 Feb 07 jari 85     public FileTreePane() {
2 26 Feb 07 jari 86         
2 26 Feb 07 jari 87         String sep = System.getProperty("file.separator");
2 26 Feb 07 jari 88         DIRECTORY_DIV = sep.toCharArray()[0];
2 26 Feb 07 jari 89         DIRECTORY_DIV_S = sep;
2 26 Feb 07 jari 90         JPanel fillerPane = new JPanel();
2 26 Feb 07 jari 91         top = new DefaultMutableTreeNode(new IconData(ICON_COMPUTER, null, "Computer"));
2 26 Feb 07 jari 92         DefaultMutableTreeNode node;
2 26 Feb 07 jari 93         File[] roots = File.listRoots();
2 26 Feb 07 jari 94         
2 26 Feb 07 jari 95         for (int k = 0; k < roots.length; k++) {
2 26 Feb 07 jari 96             node = new DefaultMutableTreeNode(new IconData(ICON_DISK, null, new FileNode(roots[k])));
2 26 Feb 07 jari 97             top.add(node);
2 26 Feb 07 jari 98             node.add( new DefaultMutableTreeNode(new Boolean(true)));
2 26 Feb 07 jari 99         }
2 26 Feb 07 jari 100         
2 26 Feb 07 jari 101         m_model = new DefaultTreeModel(top);
2 26 Feb 07 jari 102         m_tree = new JTree(m_model);
2 26 Feb 07 jari 103         m_tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
2 26 Feb 07 jari 104         m_tree.putClientProperty("JTree.lineStyle", "Angled");
2 26 Feb 07 jari 105         TreeCellRenderer renderer = new IconCellRenderer();
2 26 Feb 07 jari 106         m_tree.setCellRenderer(renderer);
2 26 Feb 07 jari 107         m_tree.addTreeExpansionListener(new EventHandler());
2 26 Feb 07 jari 108         m_tree.addTreeSelectionListener(new EventHandler());
2 26 Feb 07 jari 109         m_tree.setShowsRootHandles(true);
2 26 Feb 07 jari 110         m_tree.setEditable(false);
2 26 Feb 07 jari 111         
2 26 Feb 07 jari 112         JScrollPane s = new JScrollPane();
2 26 Feb 07 jari 113         s.getViewport().add(m_tree);
2 26 Feb 07 jari 114         setLayout(new BorderLayout());
2 26 Feb 07 jari 115         add(s, BorderLayout.CENTER);
2 26 Feb 07 jari 116     }
2 26 Feb 07 jari 117     
2 26 Feb 07 jari 118     public FileTreePane(String dataPath) {
2 26 Feb 07 jari 119         this.dataPath = dataPath;
2 26 Feb 07 jari 120         String sep = System.getProperty("file.separator");
2 26 Feb 07 jari 121         
2 26 Feb 07 jari 122         DIRECTORY_DIV = sep.toCharArray()[0];
2 26 Feb 07 jari 123         DIRECTORY_DIV_S = sep;
2 26 Feb 07 jari 124         JPanel fillerPane = new JPanel();
2 26 Feb 07 jari 125         
2 26 Feb 07 jari 126         top = new DefaultMutableTreeNode(new IconData(ICON_COMPUTER, null, "Computer"));
2 26 Feb 07 jari 127         DefaultMutableTreeNode node;
2 26 Feb 07 jari 128         File[] roots = File.listRoots();
2 26 Feb 07 jari 129         
2 26 Feb 07 jari 130         for (int k = 0; k < roots.length; k++) {
2 26 Feb 07 jari 131             node = new DefaultMutableTreeNode(new IconData(ICON_DISK, null, new FileNode(roots[k])));
2 26 Feb 07 jari 132             top.add(node);
2 26 Feb 07 jari 133             node.add( new DefaultMutableTreeNode(new Boolean(true)));
2 26 Feb 07 jari 134         }
2 26 Feb 07 jari 135         
2 26 Feb 07 jari 136         m_model = new DefaultTreeModel(top);
2 26 Feb 07 jari 137         m_tree = new JTree(m_model);
2 26 Feb 07 jari 138         m_tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
2 26 Feb 07 jari 139         m_tree.putClientProperty("JTree.lineStyle", "Angled");
2 26 Feb 07 jari 140         TreeCellRenderer renderer = new IconCellRenderer();
2 26 Feb 07 jari 141         m_tree.setCellRenderer(renderer);
2 26 Feb 07 jari 142         m_tree.addTreeExpansionListener(new EventHandler());
2 26 Feb 07 jari 143         m_tree.addTreeSelectionListener(new EventHandler());
2 26 Feb 07 jari 144         m_tree.setShowsRootHandles(true);
2 26 Feb 07 jari 145         m_tree.setEditable(false);
2 26 Feb 07 jari 146         
2 26 Feb 07 jari 147         JScrollPane s = new JScrollPane();
2 26 Feb 07 jari 148         s.getViewport().add(m_tree);
2 26 Feb 07 jari 149         
2 26 Feb 07 jari 150         setLayout(new BorderLayout());
2 26 Feb 07 jari 151         add(s, BorderLayout.CENTER);
2 26 Feb 07 jari 152     }
2 26 Feb 07 jari 153     
2 26 Feb 07 jari 154     public String getSelection() {
2 26 Feb 07 jari 155         return fPath;
2 26 Feb 07 jari 156     }
2 26 Feb 07 jari 157     
2 26 Feb 07 jari 158     public void openDataPath(){
2 26 Feb 07 jari 159         if(dataPath == null)
2 26 Feb 07 jari 160             return;
2 26 Feb 07 jari 161         File file = new File(dataPath);
2 26 Feb 07 jari 162         if(file.exists() && file.isDirectory()){
2 26 Feb 07 jari 163             openPath(top, dataPath, System.getProperty("file.separator"));
2 26 Feb 07 jari 164         }
2 26 Feb 07 jari 165     }
2 26 Feb 07 jari 166     
2 26 Feb 07 jari 167     /*
2 26 Feb 07 jari 168     private boolean openPath(DefaultMutableTreeNode root, String dataPath, String sep) {
2 26 Feb 07 jari 169         this.fPath = dataPath;
2 26 Feb 07 jari 170         TreePath path = new TreePath(root);
2 26 Feb 07 jari 171         StringTokenizer stok = new StringTokenizer(dataPath, sep);
2 26 Feb 07 jari 172         String [] nodes = new String[stok.countTokens()];
2 26 Feb 07 jari 173         String drive = stok.nextToken()+sep;
2 26 Feb 07 jari 174         DefaultMutableTreeNode subRoot = null;
2 26 Feb 07 jari 175         int childCount = root.getChildCount();
2 26 Feb 07 jari 176         DefaultMutableTreeNode tempNode = null;
2 26 Feb 07 jari 177         FileNode tempFileNode = null;
2 26 Feb 07 jari 178         int cumul = 0;
2 26 Feb 07 jari 179         
2 26 Feb 07 jari 180         int driveNum = 0;
2 26 Feb 07 jari 181         for(int i = 0; i < childCount; i++){
2 26 Feb 07 jari 182             tempNode = (DefaultMutableTreeNode)root.getChildAt(i);
2 26 Feb 07 jari 183             tempFileNode = getFileNode(tempNode);
2 26 Feb 07 jari 184             if(drive.equalsIgnoreCase(tempFileNode.toString())){
2 26 Feb 07 jari 185                 subRoot = (DefaultMutableTreeNode)root.getChildAt(i);
2 26 Feb 07 jari 186                 driveNum = i;
2 26 Feb 07 jari 187                 cumul = i;
2 26 Feb 07 jari 188                 break;
2 26 Feb 07 jari 189             }
2 26 Feb 07 jari 190         }
2 26 Feb 07 jari 191         
2 26 Feb 07 jari 192         if(subRoot == null){
2 26 Feb 07 jari 193             return false;
2 26 Feb 07 jari 194         }
2 26 Feb 07 jari 195         
2 26 Feb 07 jari 196         path = path.pathByAddingChild(subRoot);
2 26 Feb 07 jari 197         //   synchronized(this.m_tree){
2 26 Feb 07 jari 198         this.m_tree.expandPath(path);
2 26 Feb 07 jari 199         this.m_tree.validate();
2 26 Feb 07 jari 200         //   }
2 26 Feb 07 jari 201         String nodeName;
2 26 Feb 07 jari 202         boolean stop = false;
2 26 Feb 07 jari 203         int i;
2 26 Feb 07 jari 204         while(!stop && stok.hasMoreTokens()){
2 26 Feb 07 jari 205             childCount = subRoot.getChildCount();
2 26 Feb 07 jari 206             nodeName = stok.nextToken();
2 26 Feb 07 jari 207             for(i = 0; i < childCount; i++){
2 26 Feb 07 jari 208                 tempNode = (DefaultMutableTreeNode)subRoot.getChildAt(i);
2 26 Feb 07 jari 209                 tempFileNode = getFileNode(tempNode);
2 26 Feb 07 jari 210                 if(tempFileNode == null){
2 26 Feb 07 jari 211                     stop = true;
2 26 Feb 07 jari 212                     break;
2 26 Feb 07 jari 213                 }
2 26 Feb 07 jari 214                 if(nodeName.equalsIgnoreCase(tempFileNode.toString())){
2 26 Feb 07 jari 215                     buildOffNode(tempFileNode, subRoot);
2 26 Feb 07 jari 216                     path = path.pathByAddingChild(tempNode);
2 26 Feb 07 jari 217                     this.fPath += tempNode.toString()+sep;
2 26 Feb 07 jari 218                     
2 26 Feb 07 jari 219                     this.m_tree.expandPath(path);  //****THIS EXPANDs
2 26 Feb 07 jari 220                     subRoot = (DefaultMutableTreeNode)subRoot.getChildAt(i);
2 26 Feb 07 jari 221                     this.repaint();
2 26 Feb 07 jari 222                     break;
2 26 Feb 07 jari 223                 }
2 26 Feb 07 jari 224             }
2 26 Feb 07 jari 225             
2 26 Feb 07 jari 226         }
2 26 Feb 07 jari 227         this.m_tree.makeVisible(path);
2 26 Feb 07 jari 228         this.m_tree.scrollPathToVisible(path);
2 26 Feb 07 jari 229         this.m_tree.setSelectionPath(path);
2 26 Feb 07 jari 230         this.m_tree.validate();
2 26 Feb 07 jari 231         
2 26 Feb 07 jari 232         return true;
2 26 Feb 07 jari 233     }
2 26 Feb 07 jari 234     */
2 26 Feb 07 jari 235     
2 26 Feb 07 jari 236     //from build for Mac
2 26 Feb 07 jari 237    private boolean openPath(DefaultMutableTreeNode root, String dataPath, String sep) {
2 26 Feb 07 jari 238         this.fPath = dataPath;
2 26 Feb 07 jari 239         TreePath path = new TreePath(root);
2 26 Feb 07 jari 240         StringTokenizer stok = new StringTokenizer(dataPath, sep);
2 26 Feb 07 jari 241         //StringSplitter stok = new StringSplitter(sep.toCharArray()[0]);
2 26 Feb 07 jari 242        // stok.init(dataPath);
2 26 Feb 07 jari 243         
2 26 Feb 07 jari 244         String [] nodes = new String[stok.countTokens()];
2 26 Feb 07 jari 245         String drive = stok.nextToken()+sep;
2 26 Feb 07 jari 246
2 26 Feb 07 jari 247         DefaultMutableTreeNode subRoot = null;
2 26 Feb 07 jari 248         int childCount = root.getChildCount();
2 26 Feb 07 jari 249
2 26 Feb 07 jari 250         DefaultMutableTreeNode tempNode = null;
2 26 Feb 07 jari 251         FileNode tempFileNode = null;
2 26 Feb 07 jari 252         int cumul = 0;
2 26 Feb 07 jari 253         
2 26 Feb 07 jari 254         //to handle platforms where drive is specified by "/"  
2 26 Feb 07 jari 255         if(!sep.equals("/")) {
2 26 Feb 07 jari 256             int driveNum = 0;
2 26 Feb 07 jari 257             for(int i = 0; i < childCount; i++){
2 26 Feb 07 jari 258                 tempNode = (DefaultMutableTreeNode)root.getChildAt(i);
2 26 Feb 07 jari 259                 tempFileNode = getFileNode(tempNode);
2 26 Feb 07 jari 260                 if(drive.equalsIgnoreCase(tempFileNode.toString())){
2 26 Feb 07 jari 261                     subRoot = (DefaultMutableTreeNode)root.getChildAt(i);
2 26 Feb 07 jari 262                     driveNum = i;
2 26 Feb 07 jari 263                     cumul = i;
2 26 Feb 07 jari 264                     break;
2 26 Feb 07 jari 265                 }
2 26 Feb 07 jari 266             }
2 26 Feb 07 jari 267         } else {
2 26 Feb 07 jari 268             //mac or linux need to reset stok and set subroot to "/"
2 26 Feb 07 jari 269             subRoot = (DefaultMutableTreeNode)root.getChildAt(0);
2 26 Feb 07 jari 270             //reset stok to pick up first directory
2 26 Feb 07 jari 271             stok = new StringTokenizer(dataPath, sep);
2 26 Feb 07 jari 272             //stok = new StringSplitter(sep.toCharArray()[0]);
2 26 Feb 07 jari 273             //stok.init(dataPath);
2 26 Feb 07 jari 274         }
2 26 Feb 07 jari 275         
2 26 Feb 07 jari 276         if(subRoot == null){
2 26 Feb 07 jari 277             return false;
2 26 Feb 07 jari 278         }
2 26 Feb 07 jari 279         
2 26 Feb 07 jari 280         path = path.pathByAddingChild(subRoot);
2 26 Feb 07 jari 281         //   synchronized(this.m_tree){
2 26 Feb 07 jari 282         this.m_tree.expandPath(path);
2 26 Feb 07 jari 283         this.m_tree.validate();
2 26 Feb 07 jari 284         //   }
2 26 Feb 07 jari 285         String nodeName;
2 26 Feb 07 jari 286         boolean stop = false;
2 26 Feb 07 jari 287         int i;
2 26 Feb 07 jari 288         while(!stop && stok.hasMoreTokens()){
2 26 Feb 07 jari 289             childCount = subRoot.getChildCount();
2 26 Feb 07 jari 290             nodeName = stok.nextToken();
2 26 Feb 07 jari 291             for(i = 0; i < childCount; i++){
2 26 Feb 07 jari 292                 tempNode = (DefaultMutableTreeNode)subRoot.getChildAt(i);
2 26 Feb 07 jari 293                 tempFileNode = getFileNode(tempNode);
2 26 Feb 07 jari 294                 if(tempFileNode == null){
2 26 Feb 07 jari 295                     stop = true;
2 26 Feb 07 jari 296                     break;
2 26 Feb 07 jari 297                 }
2 26 Feb 07 jari 298                 if(nodeName.equalsIgnoreCase(tempFileNode.toString())){
2 26 Feb 07 jari 299                     buildOffNode(tempFileNode, subRoot);
2 26 Feb 07 jari 300                     path = path.pathByAddingChild(tempNode);
2 26 Feb 07 jari 301                     this.fPath += tempNode.toString()+sep;
2 26 Feb 07 jari 302                     
2 26 Feb 07 jari 303                     this.m_tree.expandPath(path);  //****THIS EXPANDs
2 26 Feb 07 jari 304                     subRoot = (DefaultMutableTreeNode)subRoot.getChildAt(i);
2 26 Feb 07 jari 305                     this.repaint();
2 26 Feb 07 jari 306                     break;
2 26 Feb 07 jari 307                 }
2 26 Feb 07 jari 308             }
2 26 Feb 07 jari 309             
2 26 Feb 07 jari 310         }
2 26 Feb 07 jari 311         this.m_tree.makeVisible(path);
2 26 Feb 07 jari 312         this.m_tree.scrollPathToVisible(path);
2 26 Feb 07 jari 313         this.m_tree.setSelectionPath(path);
2 26 Feb 07 jari 314         this.m_tree.validate();
2 26 Feb 07 jari 315         
2 26 Feb 07 jari 316         return true;
2 26 Feb 07 jari 317     }
2 26 Feb 07 jari 318     
2 26 Feb 07 jari 319     
2 26 Feb 07 jari 320     private void buildOffNode(FileNode tempFileNode, DefaultMutableTreeNode subRoot){
2 26 Feb 07 jari 321         File[] files = (new File(tempFileNode.toString())).listFiles();
2 26 Feb 07 jari 322         if (files == null) return;
2 26 Feb 07 jari 323         
2 26 Feb 07 jari 324         Vector v = new Vector();
2 26 Feb 07 jari 325         
2 26 Feb 07 jari 326         for (int k=0; k<files.length; k++) {
2 26 Feb 07 jari 327             File f = files[k];
2 26 Feb 07 jari 328             if (!(f.isDirectory())) continue;
2 26 Feb 07 jari 329             FileNode newNode = new FileNode(f);
2 26 Feb 07 jari 330             boolean isAdded = false;
2 26 Feb 07 jari 331             for (int i=0; i<v.size(); i++) {
2 26 Feb 07 jari 332                 FileNode nd = (FileNode)v.elementAt(i);
2 26 Feb 07 jari 333                 if (newNode.compareTo(nd) < 0) {
2 26 Feb 07 jari 334                     v.insertElementAt(newNode, i);
2 26 Feb 07 jari 335                     isAdded = true;
2 26 Feb 07 jari 336                     break;
2 26 Feb 07 jari 337                 }
2 26 Feb 07 jari 338             }
2 26 Feb 07 jari 339             if (!isAdded) v.addElement(newNode);
2 26 Feb 07 jari 340         }
2 26 Feb 07 jari 341         
2 26 Feb 07 jari 342         for (int i=0; i<v.size(); i++) {
2 26 Feb 07 jari 343             FileNode nd = (FileNode)v.elementAt(i);
2 26 Feb 07 jari 344             IconData idata = new IconData(FileTreePane.ICON_FOLDER, FileTreePane.ICON_EXPANDEDFOLDER, nd);
2 26 Feb 07 jari 345             DefaultMutableTreeNode node = new DefaultMutableTreeNode(idata);
2 26 Feb 07 jari 346             subRoot.add(node);
2 26 Feb 07 jari 347             if (nd.hasSubDirs()) subRoot.add(new DefaultMutableTreeNode(new Boolean(true)));
2 26 Feb 07 jari 348         }
2 26 Feb 07 jari 349     }
2 26 Feb 07 jari 350     
2 26 Feb 07 jari 351     private DefaultMutableTreeNode getTreeNode(TreePath path) {
2 26 Feb 07 jari 352         return (DefaultMutableTreeNode) (path.getLastPathComponent());
2 26 Feb 07 jari 353     }
2 26 Feb 07 jari 354     
2 26 Feb 07 jari 355     private FileNode getFileNode(DefaultMutableTreeNode node) {
2 26 Feb 07 jari 356         
2 26 Feb 07 jari 357         if (node == null) return null;
2 26 Feb 07 jari 358         Object obj = node.getUserObject();
2 26 Feb 07 jari 359         
2 26 Feb 07 jari 360         if (obj instanceof IconData)
2 26 Feb 07 jari 361             obj = ((IconData) obj).getObject();
2 26 Feb 07 jari 362         
2 26 Feb 07 jari 363         if (obj instanceof FileNode) return (FileNode) obj;
2 26 Feb 07 jari 364         
2 26 Feb 07 jari 365         else return null;
2 26 Feb 07 jari 366     }
2 26 Feb 07 jari 367     
2 26 Feb 07 jari 368     
2 26 Feb 07 jari 369     
2 26 Feb 07 jari 370     public Vector getFileNameList(String directoryPath) {
2 26 Feb 07 jari 371         if (directoryPath == null) {
2 26 Feb 07 jari 372             return null;
2 26 Feb 07 jari 373         }
2 26 Feb 07 jari 374         FileBrowser fBrowser = new FileBrowser(fPath);
2 26 Feb 07 jari 375         Vector retrievedFileNames = fBrowser.getFileNamesVec();
2 26 Feb 07 jari 376         return retrievedFileNames;
2 26 Feb 07 jari 377     }
2 26 Feb 07 jari 378     
2 26 Feb 07 jari 379     
2 26 Feb 07 jari 380     
2 26 Feb 07 jari 381     public void addFileTreePaneListener(FileTreePaneListener listener) {
2 26 Feb 07 jari 382         listeners.addElement(listener);
2 26 Feb 07 jari 383     }
2 26 Feb 07 jari 384     
2 26 Feb 07 jari 385     
2 26 Feb 07 jari 386     
2 26 Feb 07 jari 387     public void removeFileTreePaneListener(FileTreePaneListener listener) {
2 26 Feb 07 jari 388         listeners.removeElement(listener);
2 26 Feb 07 jari 389     }
2 26 Feb 07 jari 390     
2 26 Feb 07 jari 391     
2 26 Feb 07 jari 392     
2 26 Feb 07 jari 393     public void fireEvent(FileTreePaneEvent event, int eventType) {
2 26 Feb 07 jari 394         Vector targets = (Vector) listeners.clone();
2 26 Feb 07 jari 395         for (int i = 0; i < targets.size(); i++) {
2 26 Feb 07 jari 396             FileTreePaneListener listener = (FileTreePaneListener) targets.elementAt(i);
2 26 Feb 07 jari 397             
2 26 Feb 07 jari 398             switch (eventType) {
2 26 Feb 07 jari 399                 case (FileTreePane.NODE_COLLAPSED):
2 26 Feb 07 jari 400                     listener.nodeCollapsed(event);
2 26 Feb 07 jari 401                     break;
2 26 Feb 07 jari 402                 case (FileTreePane.NODE_EXPANDED):
2 26 Feb 07 jari 403                     listener.nodeExpanded(event);
2 26 Feb 07 jari 404                     break;
2 26 Feb 07 jari 405                 case (FileTreePane.NODE_SELECTED):
2 26 Feb 07 jari 406                     listener.nodeSelected(event);
2 26 Feb 07 jari 407                     break;
2 26 Feb 07 jari 408             }
2 26 Feb 07 jari 409         }
2 26 Feb 07 jari 410     }
2 26 Feb 07 jari 411     
2 26 Feb 07 jari 412     
2 26 Feb 07 jari 413     public static void main(String[] args) {
2 26 Feb 07 jari 414         FileTreePane ftp = new FileTreePane("C:\\MyProjects\\MeV_2_3_Devel\\Data");
2 26 Feb 07 jari 415         JFrame frame = new JFrame("FileTreePane");
2 26 Feb 07 jari 416         frame.getContentPane().add(ftp);
2 26 Feb 07 jari 417         frame.setSize(600, 600);
2 26 Feb 07 jari 418         frame.setLocation(150, 150);
2 26 Feb 07 jari 419         frame.setVisible(true);
2 26 Feb 07 jari 420         
2 26 Feb 07 jari 421     }
2 26 Feb 07 jari 422     
2 26 Feb 07 jari 423     
2 26 Feb 07 jari 424     
2 26 Feb 07 jari 425         /*
2 26 Feb 07 jari 426         //
2 26 Feb 07 jari 427         //  FileTreePane - Internal Classes
2 26 Feb 07 jari 428         //
2 26 Feb 07 jari 429          */
2 26 Feb 07 jari 430     
2 26 Feb 07 jari 431     
2 26 Feb 07 jari 432     private class FileNode {
2 26 Feb 07 jari 433         
2 26 Feb 07 jari 434         protected File m_file;
2 26 Feb 07 jari 435         
2 26 Feb 07 jari 436         public FileNode(File file) {
2 26 Feb 07 jari 437             m_file = file;
2 26 Feb 07 jari 438         }
2 26 Feb 07 jari 439         
2 26 Feb 07 jari 440         public File getFile() {
2 26 Feb 07 jari 441             return m_file;
2 26 Feb 07 jari 442         }
2 26 Feb 07 jari 443         
2 26 Feb 07 jari 444         public String toString() {
2 26 Feb 07 jari 445             return m_file.getName().length() > 0 ? m_file.getName() : m_file.getPath();
2 26 Feb 07 jari 446         }
2 26 Feb 07 jari 447         
2 26 Feb 07 jari 448         public boolean expand(DefaultMutableTreeNode parent) {
2 26 Feb 07 jari 449             DefaultMutableTreeNode flag = (DefaultMutableTreeNode)parent.getFirstChild();
2 26 Feb 07 jari 450             if (flag==null) return false; //No flag
2 26 Feb 07 jari 451             Object obj = flag.getUserObject();
2 26 Feb 07 jari 452             if (!(obj instanceof Boolean)) return false; // Already expanded
2 26 Feb 07 jari 453             parent.removeAllChildren(); // Remove Flag
2 26 Feb 07 jari 454             
2 26 Feb 07 jari 455             File[] files = listFiles();
2 26 Feb 07 jari 456             if (files == null) return true;
2 26 Feb 07 jari 457             
2 26 Feb 07 jari 458             Vector v = new Vector();
2 26 Feb 07 jari 459             
2 26 Feb 07 jari 460             for (int k=0; k<files.length; k++) {
2 26 Feb 07 jari 461                 File f = files[k];
2 26 Feb 07 jari 462                 if (!(f.isDirectory())) continue;
2 26 Feb 07 jari 463                 FileNode newNode = new FileNode(f);
2 26 Feb 07 jari 464                 boolean isAdded = false;
2 26 Feb 07 jari 465                 for (int i=0; i<v.size(); i++) {
2 26 Feb 07 jari 466                     FileNode nd = (FileNode)v.elementAt(i);
2 26 Feb 07 jari 467                     if (newNode.compareTo(nd) < 0) {
2 26 Feb 07 jari 468                         v.insertElementAt(newNode, i);
2 26 Feb 07 jari 469                         isAdded = true;
2 26 Feb 07 jari 470                         break;
2 26 Feb 07 jari 471                     }
2 26 Feb 07 jari 472                 }
2 26 Feb 07 jari 473                 if (!isAdded) v.addElement(newNode);
2 26 Feb 07 jari 474             }
2 26 Feb 07 jari 475             
2 26 Feb 07 jari 476             for (int i=0; i<v.size(); i++) {
2 26 Feb 07 jari 477                 
2 26 Feb 07 jari 478                 FileNode nd = (FileNode)v.elementAt(i);
2 26 Feb 07 jari 479                 IconData idata = new IconData(FileTreePane.ICON_FOLDER, FileTreePane.ICON_EXPANDEDFOLDER, nd);
2 26 Feb 07 jari 480                 DefaultMutableTreeNode node = new DefaultMutableTreeNode(idata);
2 26 Feb 07 jari 481                 parent.add(node);
2 26 Feb 07 jari 482                 if (nd.hasSubDirs()) node.add(new DefaultMutableTreeNode(new Boolean(true)));
2 26 Feb 07 jari 483             }
2 26 Feb 07 jari 484             
2 26 Feb 07 jari 485             return true;
2 26 Feb 07 jari 486         }
2 26 Feb 07 jari 487         
2 26 Feb 07 jari 488         
2 26 Feb 07 jari 489         
2 26 Feb 07 jari 490         public boolean hasSubDirs() {
2 26 Feb 07 jari 491             
2 26 Feb 07 jari 492             File[] files = listFiles();
2 26 Feb 07 jari 493             
2 26 Feb 07 jari 494             if (files == null) return false;
2 26 Feb 07 jari 495             
2 26 Feb 07 jari 496             for (int k=0; k<files.length; k++) {
2 26 Feb 07 jari 497                 if (files[k].isDirectory()) return true;
2 26 Feb 07 jari 498             }
2 26 Feb 07 jari 499             return false;
2 26 Feb 07 jari 500         }
2 26 Feb 07 jari 501         
2 26 Feb 07 jari 502         
2 26 Feb 07 jari 503         public int compareTo(FileNode toCompare) {
2 26 Feb 07 jari 504             return m_file.getName().compareToIgnoreCase(toCompare.m_file.getName());
2 26 Feb 07 jari 505         }
2 26 Feb 07 jari 506         
2 26 Feb 07 jari 507         protected File[] listFiles() {
2 26 Feb 07 jari 508             
2 26 Feb 07 jari 509             if (!m_file.isDirectory()) return null;
2 26 Feb 07 jari 510             try {
2 26 Feb 07 jari 511                 return m_file.listFiles();
2 26 Feb 07 jari 512             } catch (Exception ex) {
2 26 Feb 07 jari 513                 JOptionPane.showMessageDialog(null, "Error reading directory " + m_file.getAbsolutePath(), "Warning", JOptionPane.WARNING_MESSAGE);
2 26 Feb 07 jari 514                 return null;
2 26 Feb 07 jari 515             }
2 26 Feb 07 jari 516         }
2 26 Feb 07 jari 517     }
2 26 Feb 07 jari 518     
2 26 Feb 07 jari 519     
2 26 Feb 07 jari 520     
2 26 Feb 07 jari 521     private class EventHandler implements ListSelectionListener, TreeExpansionListener, TreeSelectionListener {
2 26 Feb 07 jari 522         
2 26 Feb 07 jari 523         
2 26 Feb 07 jari 524         
2 26 Feb 07 jari 525         // From ListSelectionListener
2 26 Feb 07 jari 526         
2 26 Feb 07 jari 527         
2 26 Feb 07 jari 528         
2 26 Feb 07 jari 529         public void valueChanged(ListSelectionEvent listSelectionEvent) {
2 26 Feb 07 jari 530             selectedFilesVec = new Vector();
2 26 Feb 07 jari 531             selectedCount = fileList.getSelectedValues().length;
2 26 Feb 07 jari 532             for (int i = 0; i <= selectedCount-1; i++) {
2 26 Feb 07 jari 533                 selectedFilesVec.add(i, (String) (fileList.getSelectedValues())[i]);
2 26 Feb 07 jari 534             }
2 26 Feb 07 jari 535             selectedSingleFile = (String) (fileList.getSelectedValue());
2 26 Feb 07 jari 536             
2 26 Feb 07 jari 537             fPath = (String) (fileList.getSelectedValue());
2 26 Feb 07 jari 538         }
2 26 Feb 07 jari 539         
2 26 Feb 07 jari 540         
2 26 Feb 07 jari 541         
2 26 Feb 07 jari 542         // From TreeExpansionListener
2 26 Feb 07 jari 543         
2 26 Feb 07 jari 544         
2 26 Feb 07 jari 545         
2 26 Feb 07 jari 546         public void treeExpanded(TreeExpansionEvent event) {
2 26 Feb 07 jari 547
2 26 Feb 07 jari 548             final DefaultMutableTreeNode node = getTreeNode(event.getPath());
2 26 Feb 07 jari 549             
2 26 Feb 07 jari 550             final FileNode fnode = getFileNode(node);
2 26 Feb 07 jari 551
2 26 Feb 07 jari 552             if ((fnode != null) && fnode.expand(node)) {
2 26 Feb 07 jari 553                 m_model.reload(node);
2 26 Feb 07 jari 554             }
2 26 Feb 07 jari 555             
2 26 Feb 07 jari 556             fireEvent(new FileTreePaneEvent(event, null), FileTreePane.NODE_EXPANDED);
2 26 Feb 07 jari 557         }
2 26 Feb 07 jari 558         
2 26 Feb 07 jari 559         
2 26 Feb 07 jari 560         
2 26 Feb 07 jari 561         public void treeCollapsed(TreeExpansionEvent event) {
2 26 Feb 07 jari 562             fireEvent(new FileTreePaneEvent(event, null), FileTreePane.NODE_COLLAPSED);
2 26 Feb 07 jari 563         }
2 26 Feb 07 jari 564         
2 26 Feb 07 jari 565         
2 26 Feb 07 jari 566         
2 26 Feb 07 jari 567         // From TreeSelectionListener
2 26 Feb 07 jari 568         
2 26 Feb 07 jari 569         
2 26 Feb 07 jari 570         
2 26 Feb 07 jari 571         public void valueChanged(TreeSelectionEvent event) {
2 26 Feb 07 jari 572
2 26 Feb 07 jari 573             DefaultMutableTreeNode node = getTreeNode(event.getPath());
2 26 Feb 07 jari 574             
2 26 Feb 07 jari 575             FileNode fnode = getFileNode(node);
2 26 Feb 07 jari 576
2 26 Feb 07 jari 577             if (fnode != null) {
2 26 Feb 07 jari 578                 fPath = fnode.getFile().getAbsolutePath();
2 26 Feb 07 jari 579                 
2 26 Feb 07 jari 580                 if (fPath.charAt(fPath.length()-1) != DIRECTORY_DIV) {
2 26 Feb 07 jari 581                     fPath += DIRECTORY_DIV;
2 26 Feb 07 jari 582                 }
2 26 Feb 07 jari 583                 Vector fileNameVector = getFileNameList(fPath);
2 26 Feb 07 jari 584                 Hashtable hash = new Hashtable();
2 26 Feb 07 jari 585                 hash.put("Path", fPath);
2 26 Feb 07 jari 586                 if (! (fileNameVector == null)) {
2 26 Feb 07 jari 587                     hash.put("Filenames", fileNameVector);
2 26 Feb 07 jari 588                 }
2 26 Feb 07 jari 589                 fireEvent(new FileTreePaneEvent(event, hash), FileTreePane.NODE_SELECTED);
2 26 Feb 07 jari 590             } else {
2 26 Feb 07 jari 591                 Hashtable hash = new Hashtable();
2 26 Feb 07 jari 592                 hash.put("Path", "");
2 26 Feb 07 jari 593                 fireEvent(new FileTreePaneEvent(event, null), FileTreePane.NODE_SELECTED);
2 26 Feb 07 jari 594             }
2 26 Feb 07 jari 595             
2 26 Feb 07 jari 596         }
2 26 Feb 07 jari 597         
2 26 Feb 07 jari 598     }
2 26 Feb 07 jari 599     
2 26 Feb 07 jari 600     
2 26 Feb 07 jari 601     
2 26 Feb 07 jari 602     private class IconData {
2 26 Feb 07 jari 603         
2 26 Feb 07 jari 604         protected Icon m_icon;
2 26 Feb 07 jari 605         protected Icon m_expandedIcon;
2 26 Feb 07 jari 606         protected Object m_data;
2 26 Feb 07 jari 607         
2 26 Feb 07 jari 608         public IconData(Icon icon, Object data) {
2 26 Feb 07 jari 609             m_icon = icon;
2 26 Feb 07 jari 610             m_expandedIcon = null;
2 26 Feb 07 jari 611             m_data = data;
2 26 Feb 07 jari 612         }
2 26 Feb 07 jari 613         
2 26 Feb 07 jari 614         public IconData(Icon icon, Icon expandedIcon, Object data) {
2 26 Feb 07 jari 615             m_icon = icon;
2 26 Feb 07 jari 616             m_expandedIcon = expandedIcon;
2 26 Feb 07 jari 617             m_data = data;
2 26 Feb 07 jari 618         }
2 26 Feb 07 jari 619         
2 26 Feb 07 jari 620         
2 26 Feb 07 jari 621         
2 26 Feb 07 jari 622         public Icon getIcon() {
2 26 Feb 07 jari 623             return m_icon;
2 26 Feb 07 jari 624         }
2 26 Feb 07 jari 625         
2 26 Feb 07 jari 626         
2 26 Feb 07 jari 627         
2 26 Feb 07 jari 628         public Icon getExpandedIcon() {
2 26 Feb 07 jari 629             return m_expandedIcon!=null ? m_expandedIcon : m_icon;
2 26 Feb 07 jari 630         }
2 26 Feb 07 jari 631         
2 26 Feb 07 jari 632         
2 26 Feb 07 jari 633         
2 26 Feb 07 jari 634         public Object getObject() {
2 26 Feb 07 jari 635             return m_data;
2 26 Feb 07 jari 636         }
2 26 Feb 07 jari 637         
2 26 Feb 07 jari 638         
2 26 Feb 07 jari 639         public String toString() {
2 26 Feb 07 jari 640             return m_data.toString();
2 26 Feb 07 jari 641         }
2 26 Feb 07 jari 642     }
2 26 Feb 07 jari 643     
2 26 Feb 07 jari 644     
2 26 Feb 07 jari 645     
2 26 Feb 07 jari 646     private class IconCellRenderer extends JLabel implements TreeCellRenderer {
2 26 Feb 07 jari 647         
2 26 Feb 07 jari 648         protected Color m_textSelectionColor;
2 26 Feb 07 jari 649         protected Color m_textNonSelectionColor;
2 26 Feb 07 jari 650         protected Color m_bkSelectionColor;
2 26 Feb 07 jari 651         protected Color m_bkNonSelectionColor;
2 26 Feb 07 jari 652         protected Color m_borderSelectionColor;
2 26 Feb 07 jari 653         protected boolean m_selected;
2 26 Feb 07 jari 654         
2 26 Feb 07 jari 655         public IconCellRenderer() {
2 26 Feb 07 jari 656             super();
2 26 Feb 07 jari 657             m_textSelectionColor = UIManager.getColor("Tree.selectionForeground");
2 26 Feb 07 jari 658             m_textNonSelectionColor = UIManager.getColor("Tree.textForeground");
2 26 Feb 07 jari 659             m_bkSelectionColor = UIManager.getColor("Tree.selectionBackground");
2 26 Feb 07 jari 660             m_bkNonSelectionColor = UIManager.getColor("Tree.textBackground");
2 26 Feb 07 jari 661             m_borderSelectionColor = UIManager.getColor("Tree.selectionBorderColor");
2 26 Feb 07 jari 662             setOpaque(false);
2 26 Feb 07 jari 663         }
2 26 Feb 07 jari 664         
2 26 Feb 07 jari 665         
2 26 Feb 07 jari 666         
2 26 Feb 07 jari 667         public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) {
2 26 Feb 07 jari 668             
2 26 Feb 07 jari 669             DefaultMutableTreeNode node = (DefaultMutableTreeNode)value;
2 26 Feb 07 jari 670             Object obj = node.getUserObject();
2 26 Feb 07 jari 671             setText(obj.toString());
2 26 Feb 07 jari 672             if (obj instanceof Boolean)
2 26 Feb 07 jari 673                 setText("Retrieving data...");
2 26 Feb 07 jari 674             
2 26 Feb 07 jari 675             if (obj instanceof IconData) {
2 26 Feb 07 jari 676                 IconData idata = (IconData)obj;
2 26 Feb 07 jari 677                 
2 26 Feb 07 jari 678                 if (expanded)
2 26 Feb 07 jari 679                     setIcon(idata.getExpandedIcon());
2 26 Feb 07 jari 680                 
2 26 Feb 07 jari 681                 else
2 26 Feb 07 jari 682                     setIcon(idata.getIcon());
2 26 Feb 07 jari 683             } else {
2 26 Feb 07 jari 684                 setIcon(null);
2 26 Feb 07 jari 685             }
2 26 Feb 07 jari 686             
2 26 Feb 07 jari 687             setFont(tree.getFont());
2 26 Feb 07 jari 688             setForeground(sel ? m_textSelectionColor : m_textNonSelectionColor);
2 26 Feb 07 jari 689             setBackground(sel ? m_bkSelectionColor : m_bkNonSelectionColor);
2 26 Feb 07 jari 690             m_selected = sel;
2 26 Feb 07 jari 691             
2 26 Feb 07 jari 692             return this;
2 26 Feb 07 jari 693         }
2 26 Feb 07 jari 694         
2 26 Feb 07 jari 695         
2 26 Feb 07 jari 696         
2 26 Feb 07 jari 697         public void paintComponent(Graphics g) {
2 26 Feb 07 jari 698             
2 26 Feb 07 jari 699             Color bColor = getBackground();
2 26 Feb 07 jari 700             Icon icon = getIcon();
2 26 Feb 07 jari 701             g.setColor(bColor);
2 26 Feb 07 jari 702             
2 26 Feb 07 jari 703             int offset = 0;
2 26 Feb 07 jari 704             if(icon != null && getText() != null) {
2 26 Feb 07 jari 705                 offset = (icon.getIconWidth() + getIconTextGap());
2 26 Feb 07 jari 706             }
2 26 Feb 07 jari 707             
2 26 Feb 07 jari 708             g.fillRect(offset, 0, getWidth() - 1 - offset,
2 26 Feb 07 jari 709             getHeight() - 1);
2 26 Feb 07 jari 710             
2 26 Feb 07 jari 711             if (m_selected) {
2 26 Feb 07 jari 712                 g.setColor(m_borderSelectionColor);
2 26 Feb 07 jari 713                 g.drawRect(offset, 0, getWidth()-1-offset, getHeight()-1);
2 26 Feb 07 jari 714             }
2 26 Feb 07 jari 715             super.paintComponent(g);
2 26 Feb 07 jari 716         }
2 26 Feb 07 jari 717     }
2 26 Feb 07 jari 718         
2 26 Feb 07 jari 719     private class FileBrowser {
2 26 Feb 07 jari 720         
2 26 Feb 07 jari 721         private String workingFullDir;
2 26 Feb 07 jari 722         private String workingDir;
2 26 Feb 07 jari 723         private Vector filesVec;
2 26 Feb 07 jari 724         private File dir;
2 26 Feb 07 jari 725         private File subDir;
2 26 Feb 07 jari 726         
2 26 Feb 07 jari 727         public FileBrowser(String directory) {
2 26 Feb 07 jari 728             setDirectory(directory);
2 26 Feb 07 jari 729         }
2 26 Feb 07 jari 730         
2 26 Feb 07 jari 731         public void setDirectory(String directory) {
2 26 Feb 07 jari 732             
2 26 Feb 07 jari 733             workingFullDir = directory;        
2 26 Feb 07 jari 734             dir = new File(directory);
2 26 Feb 07 jari 735             workingDir = dir.getAbsolutePath();
2 26 Feb 07 jari 736             
2 26 Feb 07 jari 737             if (! dir.isDirectory()) {
2 26 Feb 07 jari 738                 workingDir = workingDir.substring(0, workingDir.lastIndexOf(DIRECTORY_DIV));
2 26 Feb 07 jari 739             } else {
2 26 Feb 07 jari 740                 filterFiles();                
2 26 Feb 07 jari 741             }            
2 26 Feb 07 jari 742         }
2 26 Feb 07 jari 743         
2 26 Feb 07 jari 744         public void filterFiles() {
2 26 Feb 07 jari 745             File checkFile;
2 26 Feb 07 jari 746             String[] available;
2 26 Feb 07 jari 747             filesVec = new Vector();
2 26 Feb 07 jari 748
2 26 Feb 07 jari 749             if (dir == null) 
2 26 Feb 07 jari 750                 return;
2 26 Feb 07 jari 751              
2 26 Feb 07 jari 752             available = dir.list();
2 26 Feb 07 jari 753             
2 26 Feb 07 jari 754             if (workingDir == null) 
2 26 Feb 07 jari 755                 workingDir = dir.getAbsolutePath();
2 26 Feb 07 jari 756
2 26 Feb 07 jari 757             for (int i = 0; i < available.length; i++) {
2 26 Feb 07 jari 758                 checkFile = new File(dir, available[i]);
2 26 Feb 07 jari 759                 if (checkFile.isFile()) {
2 26 Feb 07 jari 760                     filesVec.addElement(workingDir + ((workingDir.endsWith(DIRECTORY_DIV_S) ? "" : DIRECTORY_DIV_S)) + available[i]);
2 26 Feb 07 jari 761                 }
2 26 Feb 07 jari 762             }
2 26 Feb 07 jari 763         }
2 26 Feb 07 jari 764         
2 26 Feb 07 jari 765         
2 26 Feb 07 jari 766         public Vector getFileNamesVec() {
2 26 Feb 07 jari 767             return filesVec;
2 26 Feb 07 jari 768         }
2 26 Feb 07 jari 769         
2 26 Feb 07 jari 770         
2 26 Feb 07 jari 771         public int getFileCounts() {
2 26 Feb 07 jari 772             return filesVec.size();
2 26 Feb 07 jari 773         }
2 26 Feb 07 jari 774         
2 26 Feb 07 jari 775                 
2 26 Feb 07 jari 776         public String getAbsolutePath() {
2 26 Feb 07 jari 777             return workingDir;
2 26 Feb 07 jari 778         }
2 26 Feb 07 jari 779         
2 26 Feb 07 jari 780         
2 26 Feb 07 jari 781         public String creatSubDir(String sub) {            
2 26 Feb 07 jari 782             subDir = new File(workingFullDir + DIRECTORY_DIV + sub + DIRECTORY_DIV);
2 26 Feb 07 jari 783             return workingFullDir + DIRECTORY_DIV + sub + DIRECTORY_DIV;            
2 26 Feb 07 jari 784         }
2 26 Feb 07 jari 785         
2 26 Feb 07 jari 786         
2 26 Feb 07 jari 787         public String getExtension(File f) {            
2 26 Feb 07 jari 788             String ext = null;            
2 26 Feb 07 jari 789             String s = f.getName();            
2 26 Feb 07 jari 790             int i = s.lastIndexOf('.');
2 26 Feb 07 jari 791             
2 26 Feb 07 jari 792             if (i > 0 &&  i < s.length() - 1) {   
2 26 Feb 07 jari 793                 ext = s.substring(i+1).toLowerCase();
2 26 Feb 07 jari 794             }
2 26 Feb 07 jari 795             return ext;
2 26 Feb 07 jari 796         }
2 26 Feb 07 jari 797     }    
2 26 Feb 07 jari 798 }