001    /*
002     * $Id: FileSystemModel.java,v 1.3 2005/10/26 11:44:30 kleopatra Exp $
003     *
004     * Copyright 2004 Sun Microsystems, Inc., 4150 Network Circle,
005     * Santa Clara, California 95054, U.S.A. All rights reserved.
006     *
007     * This library is free software; you can redistribute it and/or
008     * modify it under the terms of the GNU Lesser General Public
009     * License as published by the Free Software Foundation; either
010     * version 2.1 of the License, or (at your option) any later version.
011     * 
012     * This library is distributed in the hope that it will be useful,
013     * but WITHOUT ANY WARRANTY; without even the implied warranty of
014     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
015     * Lesser General Public License for more details.
016     * 
017     * You should have received a copy of the GNU Lesser General Public
018     * License along with this library; if not, write to the Free Software
019     * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
020     */
021    
022    package org.jdesktop.swingx.treetable;
023    
024    import java.io.File;
025    import java.util.logging.Level;
026    import java.util.logging.Logger;
027    
028    import javax.swing.tree.TreeNode;
029    
030    /**
031     * FileSystemModel
032     *
033     * @author Ramesh Gupta
034     */
035    public class FileSystemModel extends DefaultTreeTableModel {
036        private static final Logger LOG = Logger.getLogger(FileSystemModel.class
037                .getName());
038        protected boolean asksAllowsChildren;
039    
040        public FileSystemModel() {
041        this(new FileNode(new File(File.separator)));
042        }
043    
044        public FileSystemModel(TreeNode root) {
045        this(root, false);
046        }
047    
048        public FileSystemModel(TreeNode root, boolean asksAllowsChildren) {
049        super(root);
050        this.asksAllowsChildren = asksAllowsChildren;
051        }
052    
053        public Object getChild(Object parent, int index) {
054        try {
055            return ((FileNode)parent).getChildren().get(index);
056        }
057        catch (Exception ex) {
058            return super.getChild(parent, index);
059        }
060        }
061    
062        public int getChildCount(Object parent) {
063        try {
064            return ((FileNode)parent).getChildren().size();
065        }
066        catch (Exception ex) {
067            return super.getChildCount(parent);
068        }
069        }
070    
071        public int getColumnCount() {
072        /**@todo Implement this org.jdesktopx.swing.treetable.TreeTableModel abstract method*/
073        return 4;
074        }
075    
076        public String getColumnName(int column) {
077            switch(column) {
078        case 0:
079            return "Name";
080        case 1:
081            return "Size";
082        case 2:
083            return "Directory";
084        case 3:
085            return "Modification Date";
086        default:
087            return "Column " + column;
088            }
089        }
090    
091        public Object getValueAt(Object node, int column) {
092        final File file = ((FileNode)node).getFile();
093        try {
094            switch(column) {
095            case 0:
096            return file.getName();
097            case 1:
098            return file.isFile() ? new Integer((int)file.length()) : ZERO;
099            case 2:
100            return new Boolean(!file.isFile());
101            case 3:
102            return new java.util.Date(file.lastModified());
103            }
104        }
105        catch  (Exception ex) {
106                    LOG.log(Level.WARNING, "Problem accessing file", ex);
107    
108        }
109    
110        return null;
111        }
112    
113        // The the returned file length for directories.
114        private static final Integer ZERO = new Integer(0);
115    }