2007-12-23 14:28:04 -05:00
|
|
|
|
|
|
|
package net.sourceforge.filebot.ui.panel.sfv;
|
|
|
|
|
|
|
|
|
|
|
|
import java.beans.PropertyChangeEvent;
|
|
|
|
import java.beans.PropertyChangeListener;
|
|
|
|
import java.io.File;
|
|
|
|
import java.io.PrintStream;
|
|
|
|
import java.text.SimpleDateFormat;
|
|
|
|
import java.util.Date;
|
|
|
|
import java.util.Map;
|
2008-02-23 16:33:09 -05:00
|
|
|
import java.util.logging.Level;
|
|
|
|
import java.util.logging.Logger;
|
2007-12-23 14:28:04 -05:00
|
|
|
|
|
|
|
import javax.swing.JTable;
|
|
|
|
import javax.swing.ListSelectionModel;
|
|
|
|
import javax.swing.table.TableColumn;
|
|
|
|
import javax.swing.table.TableModel;
|
|
|
|
|
2008-02-27 19:39:49 -05:00
|
|
|
import net.sourceforge.filebot.FileFormat;
|
2007-12-23 14:28:04 -05:00
|
|
|
import net.sourceforge.filebot.ui.panel.sfv.renderer.ChecksumTableCellRenderer;
|
|
|
|
import net.sourceforge.filebot.ui.panel.sfv.renderer.StateIconTableCellRenderer;
|
|
|
|
import net.sourceforge.filebot.ui.panel.sfv.renderer.TextTableCellRenderer;
|
2007-12-26 11:48:28 -05:00
|
|
|
import net.sourceforge.filebot.ui.transfer.DefaultTransferHandler;
|
|
|
|
import net.sourceforge.filebot.ui.transfer.ExportHandler;
|
|
|
|
import net.sourceforge.filebot.ui.transfer.ImportHandler;
|
|
|
|
import net.sourceforge.filebot.ui.transfer.Saveable;
|
|
|
|
import net.sourceforge.filebot.ui.transfer.SaveableExportHandler;
|
|
|
|
import net.sourceforge.filebot.ui.transfer.TransferablePolicyImportHandler;
|
2008-03-16 10:00:10 -04:00
|
|
|
import net.sourceforge.filebot.ui.transfer.TransferablePolicySupport;
|
2008-03-15 21:05:06 -04:00
|
|
|
import net.sourceforge.filebot.ui.transferablepolicies.BackgroundFileTransferablePolicy;
|
2007-12-23 14:28:04 -05:00
|
|
|
import net.sourceforge.filebot.ui.transferablepolicies.NullTransferablePolicy;
|
|
|
|
import net.sourceforge.filebot.ui.transferablepolicies.TransferablePolicy;
|
|
|
|
|
|
|
|
|
2008-03-16 14:23:12 -04:00
|
|
|
class SfvTable extends JTable implements TransferablePolicySupport, Saveable {
|
2007-12-23 14:28:04 -05:00
|
|
|
|
|
|
|
private TransferablePolicy transferablePolicy = new NullTransferablePolicy();
|
|
|
|
|
|
|
|
|
|
|
|
public SfvTable() {
|
|
|
|
final SfvTableModel model = (SfvTableModel) getModel();
|
|
|
|
model.addPropertyChangeListener(repaintListener);
|
|
|
|
|
|
|
|
setFillsViewportHeight(true);
|
|
|
|
|
|
|
|
transferablePolicy = new SfvTransferablePolicy(model);
|
|
|
|
|
|
|
|
setModel(model);
|
|
|
|
setAutoCreateRowSorter(true);
|
|
|
|
setAutoCreateColumnsFromModel(true);
|
|
|
|
setAutoResizeMode(AUTO_RESIZE_SUBSEQUENT_COLUMNS);
|
|
|
|
|
|
|
|
setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
|
|
|
|
|
|
|
|
setRowHeight(20);
|
|
|
|
|
2007-12-26 11:48:28 -05:00
|
|
|
ImportHandler importHandler = new TransferablePolicyImportHandler(this);
|
|
|
|
ExportHandler exportHandler = new SaveableExportHandler(this);
|
|
|
|
|
|
|
|
setTransferHandler(new DefaultTransferHandler(importHandler, exportHandler));
|
|
|
|
setDragEnabled(true);
|
2007-12-23 14:28:04 -05:00
|
|
|
|
|
|
|
setDefaultRenderer(ChecksumRow.State.class, new StateIconTableCellRenderer());
|
|
|
|
setDefaultRenderer(String.class, new TextTableCellRenderer());
|
|
|
|
setDefaultRenderer(Checksum.class, new ChecksumTableCellRenderer());
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
protected TableModel createDefaultDataModel() {
|
|
|
|
return new SfvTableModel();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void createDefaultColumnsFromModel() {
|
|
|
|
super.createDefaultColumnsFromModel();
|
|
|
|
|
|
|
|
for (int i = 0; i < getColumnCount(); i++) {
|
|
|
|
TableColumn column = getColumnModel().getColumn(i);
|
|
|
|
if (i == 0) {
|
|
|
|
column.setPreferredWidth(45);
|
|
|
|
} else if (i == 1) {
|
|
|
|
column.setPreferredWidth(400);
|
|
|
|
} else if (i >= 2) {
|
|
|
|
column.setPreferredWidth(150);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public void clear() {
|
2008-03-15 21:05:06 -04:00
|
|
|
((BackgroundFileTransferablePolicy<?>) getTransferablePolicy()).cancelAll();
|
|
|
|
|
2007-12-23 14:28:04 -05:00
|
|
|
((SfvTableModel) getModel()).clear();
|
|
|
|
}
|
|
|
|
|
|
|
|
private PropertyChangeListener repaintListener = new PropertyChangeListener() {
|
|
|
|
|
|
|
|
public void propertyChange(PropertyChangeEvent evt) {
|
|
|
|
repaint();
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
public TransferablePolicy getTransferablePolicy() {
|
|
|
|
return transferablePolicy;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public void setTransferablePolicy(TransferablePolicy transferablePolicy) {
|
|
|
|
this.transferablePolicy = transferablePolicy;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public String getDefaultFileName() {
|
|
|
|
SfvTableModel model = (SfvTableModel) getModel();
|
|
|
|
File columnRoot = model.getChecksumColumnRoot(0);
|
|
|
|
|
|
|
|
String name = "";
|
|
|
|
|
|
|
|
if (columnRoot != null)
|
2008-03-19 18:14:38 -04:00
|
|
|
name = FileFormat.getNameWithoutExtension(columnRoot);
|
2007-12-23 14:28:04 -05:00
|
|
|
|
|
|
|
if (name.isEmpty())
|
|
|
|
name = "name";
|
|
|
|
|
|
|
|
return name + ".sfv";
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public boolean isSaveable() {
|
|
|
|
return getModel().getRowCount() > 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public void removeRows(int... rowIndices) {
|
|
|
|
SfvTableModel model = (SfvTableModel) getModel();
|
|
|
|
model.removeRows(rowIndices);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public void save(File file, int checksumColumnIndex) {
|
|
|
|
try {
|
|
|
|
PrintStream out = new PrintStream(file);
|
|
|
|
|
|
|
|
SfvTableModel model = (SfvTableModel) getModel();
|
|
|
|
File columnRoot = model.getChecksumColumnRoot(checksumColumnIndex);
|
|
|
|
|
|
|
|
if (columnRoot != null) {
|
|
|
|
SimpleDateFormat date = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
|
SimpleDateFormat time = new SimpleDateFormat("HH:mm:ss");
|
|
|
|
|
|
|
|
Date now = new Date();
|
|
|
|
out.println("; Generated by FileBot on " + date.format(now) + " at " + time.format(now));
|
|
|
|
out.println(";");
|
|
|
|
out.println(";");
|
|
|
|
|
|
|
|
Map<String, Checksum> checksumMap = model.getChecksumColumn(columnRoot);
|
|
|
|
|
|
|
|
for (String name : checksumMap.keySet()) {
|
|
|
|
out.println(name + " " + checksumMap.get(name).getChecksumString());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
out.close();
|
2008-03-20 21:45:21 -04:00
|
|
|
} catch (Exception e) {
|
2008-02-23 16:33:09 -05:00
|
|
|
// should not happen
|
2008-03-15 21:05:06 -04:00
|
|
|
Logger.getLogger(Logger.GLOBAL_LOGGER_NAME).log(Level.SEVERE, e.toString(), e);
|
2007-12-23 14:28:04 -05:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public void save(File file) {
|
|
|
|
save(file, 0);
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|