/*
* Copyright (C) 2004 Sun Microsystems, Inc. All rights reserved. Use is
* subject to license terms.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the Lesser GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
* USA.
*/
import javax.swing.table.AbstractTableModel;
import java.io.File;
/**
* JDIC API demo class.
* <p>
* A redefined TableModel class.
*/
public class MyTableModel extends AbstractTableModel {
// Object columnNames[] = {"Name", "Size", "Type", "Modified"};
Object columnNamesFile[] = {"Name", "Size", "Type", "Modified"};
// ===
// For Windows "My Computer" node only.
// ===
Object columnNamesMyComputer[] = {"Name", "Type", "Size", "FreeSpace"};
// Object columnNames[] = getColumnNames();
Object columnNames[] = columnNamesFile;
Object data[][] = getTableData();
public int getRowCount() {
return (data == null) ? 0 : data.length;
}
public int getColumnCount() {
return columnNames.length;
}
public String getColumnName(int col) {
return columnNames[col].toString();
}
public Class getColumnClass(int column) {
return getValueAt(0, column).getClass();
}
public Object getValueAt(int row, int col) {
return data[row][col];
}
public void setValueAt(Object value, int row, int col) {
data[row][col] = value;
fireTableCellUpdated(row, col);
}
// Make the table uneditable.
public boolean isCellEditable(int row, int column) {
return false;
}
// ===
// For Windows "My Computer" node only.
// ===
public void setColumnNames() {
columnNames = getColumnNames();
}
public void setTableData() {
data = getTableData();
}
// Gets the column names
private Object[] getColumnNames() {
MyTreeNode selectedTreeNode = FileExplorer.selectedTreeNode;
if (selectedTreeNode == null) {
return null;
}
File selectedDir = (File) selectedTreeNode.getUserObject();
if (selectedDir.equals(new File(FileExplorer.MY_COMPUTER_FOLDER_PATH))) {
return columnNamesMyComputer;
} else {
return columnNamesFile;
}
}
// Gets the table data from the left tree.
private Object[][] getTableData() {
MyTreeNode selectedTreeNode = FileExplorer.selectedTreeNode;
if (selectedTreeNode == null) {
return null;
}
File selectedDir = (File) selectedTreeNode.getUserObject();
// ===
// For Windows "My Computer" node only.
// ===
if (selectedDir.equals(new File(FileExplorer.MY_COMPUTER_FOLDER_PATH))) {
File[] drivers = MyUtility.getRoots();
int driverNum = drivers.length;
Object data[][] = new Object[driverNum][columnNames.length];
// Remove A: drive from the initial list of drives, since whenever the
// JTree is repaint, it tries to read floppy drive A:\.
int firstDriverNum = 0;
if (drivers[firstDriverNum].getPath().toLowerCase().startsWith("a:")) {
firstDriverNum = 1;
}
int curDriverNum = 0;
for (int i = firstDriverNum; i < driverNum; i++) {
data[curDriverNum][0] = new DiskObject(drivers[i].getAbsolutePath(),
DiskObject.TYPE_DRIVER);
data[curDriverNum][1] = "";
data[curDriverNum][2] = " " + DiskObject.TYPE_DRIVER;
data[curDriverNum][3] = (new java.util.Date(drivers[i].lastModified())).toString();
curDriverNum++;
}
return data;
} else {
File[] files = selectedDir.listFiles();
// The selected dir or driver might have no children.
if (files == null) {
return null;
}
int fileNum = files.length;
Object data[][] = new Object[fileNum][columnNames.length];
int curFileNum = 0;
// Filter out the files and put ahead of the directories.
for (int i = 0; i < fileNum; i++) {
File file = files[i];
if (!file.isDirectory()) {
data[curFileNum][0] = new DiskObject(file.getName(),
DiskObject.TYPE_FILE);
data[curFileNum][1] = MyUtility.length2KB(file.length());
data[curFileNum][2] = " " + DiskObject.TYPE_FILE;
data[curFileNum][3] = (new java.util.Date(file.lastModified())).toString();
curFileNum++;
}
}
for (int i = 0; i < fileNum; i++) {
File file = files[i];
if (file.isDirectory()) {
data[curFileNum][0] = new DiskObject(file.getName(),
DiskObject.TYPE_FOLDER);
data[curFileNum][1] = "";
data[curFileNum][2] = " " + DiskObject.TYPE_FOLDER;
data[curFileNum][3] = (new java.util.Date(file.lastModified())).toString();
curFileNum++;
}
}
return data;
}
}
}