dmolony-DiskBrowser/src/com/bytezone/diskbrowser/duplicates/DiskTableModel.java

171 lines
5.8 KiB
Java
Raw Permalink Normal View History

2016-12-09 11:31:03 +00:00
package com.bytezone.diskbrowser.duplicates;
import java.util.ArrayList;
import java.util.List;
import javax.swing.table.AbstractTableModel;
2020-02-08 09:54:50 +00:00
// -----------------------------------------------------------------------------------//
class DiskTableModel extends AbstractTableModel
// -----------------------------------------------------------------------------------//
2016-12-09 11:31:03 +00:00
{
2016-12-10 07:36:44 +00:00
static final String[] headers =
2016-12-15 00:01:42 +00:00
{ "Path", "Name", "Type", "Size", "# names", "Checksum", "# checksums" };
2016-12-09 11:31:03 +00:00
2020-02-02 10:17:49 +00:00
private final List<TableLine> lines = new ArrayList<> ();
2016-12-15 00:01:42 +00:00
private final RootFolderData rootFolderData;
2016-12-09 11:31:03 +00:00
2020-02-08 09:54:50 +00:00
// ---------------------------------------------------------------------------------//
DiskTableModel (RootFolderData rootFolderData)
// ---------------------------------------------------------------------------------//
2016-12-09 11:31:03 +00:00
{
2016-12-15 00:01:42 +00:00
this.rootFolderData = rootFolderData;
2016-12-09 11:31:03 +00:00
2016-12-15 00:01:42 +00:00
for (String key : rootFolderData.fileNameMap.keySet ())
2016-12-09 11:31:03 +00:00
{
2016-12-15 00:01:42 +00:00
DiskDetails original = rootFolderData.fileNameMap.get (key);
lines.add (new TableLine (original, rootFolderData));
2016-12-10 07:36:44 +00:00
for (DiskDetails duplicate : original.getDuplicateNames ())
2016-12-15 00:01:42 +00:00
lines.add (new TableLine (duplicate, rootFolderData));
2016-12-09 11:31:03 +00:00
}
}
2020-02-08 09:54:50 +00:00
// ---------------------------------------------------------------------------------//
2016-12-15 00:01:42 +00:00
public DiskDetails getDiskDetails (int rowIndex)
2020-02-08 09:54:50 +00:00
// ---------------------------------------------------------------------------------//
2016-12-15 00:01:42 +00:00
{
return lines.get (rowIndex).diskDetails;
}
2020-02-08 09:54:50 +00:00
// ---------------------------------------------------------------------------------//
2016-12-09 11:31:03 +00:00
@Override
public String getColumnName (int column)
2020-02-08 09:54:50 +00:00
// ---------------------------------------------------------------------------------//
2016-12-09 11:31:03 +00:00
{
return headers[column];
}
2020-02-08 09:54:50 +00:00
// ---------------------------------------------------------------------------------//
2016-12-09 11:31:03 +00:00
@Override
public int getRowCount ()
2020-02-08 09:54:50 +00:00
// ---------------------------------------------------------------------------------//
2016-12-09 11:31:03 +00:00
{
return lines.size ();
}
2020-02-08 09:54:50 +00:00
// ---------------------------------------------------------------------------------//
2016-12-09 11:31:03 +00:00
@Override
public int getColumnCount ()
2020-02-08 09:54:50 +00:00
// ---------------------------------------------------------------------------------//
2016-12-09 11:31:03 +00:00
{
2016-12-15 00:01:42 +00:00
if (rootFolderData.doChecksums)
return headers.length;
else
return headers.length - 1;
2016-12-09 11:31:03 +00:00
}
2020-02-08 09:54:50 +00:00
// ---------------------------------------------------------------------------------//
2016-12-09 11:31:03 +00:00
@Override
public Class<?> getColumnClass (int columnIndex)
2020-02-08 09:54:50 +00:00
// ---------------------------------------------------------------------------------//
2016-12-09 11:31:03 +00:00
{
2016-12-10 07:36:44 +00:00
return lines.isEmpty () ? Object.class : getValueAt (0, columnIndex).getClass ();
2016-12-09 11:31:03 +00:00
}
2020-02-08 09:54:50 +00:00
// ---------------------------------------------------------------------------------//
2016-12-09 11:31:03 +00:00
@Override
public Object getValueAt (int rowIndex, int columnIndex)
2020-02-08 09:54:50 +00:00
// ---------------------------------------------------------------------------------//
2016-12-09 11:31:03 +00:00
{
TableLine line = lines.get (rowIndex);
switch (columnIndex)
{
case 0:
2016-12-10 07:36:44 +00:00
return line.path;
2016-12-09 11:31:03 +00:00
case 1:
2016-12-16 01:19:59 +00:00
return line.fileName;
2016-12-09 11:31:03 +00:00
case 2:
return line.type;
2016-12-10 07:36:44 +00:00
case 3:
return line.size;
2016-12-10 07:36:44 +00:00
case 4:
return line.duplicateNames;
case 5:
2016-12-09 11:31:03 +00:00
return line.checksum;
2016-12-15 00:01:42 +00:00
case 6:
return line.duplicateChecksums;
2016-12-09 11:31:03 +00:00
default:
return "???";
}
}
2020-02-08 09:54:50 +00:00
// ---------------------------------------------------------------------------------//
2016-12-13 03:36:26 +00:00
public String getCSV (int rowIndex)
2020-02-08 09:54:50 +00:00
// ---------------------------------------------------------------------------------//
2016-12-13 03:36:26 +00:00
{
TableLine line = lines.get (rowIndex);
return String.format ("\"%s\",\"%s\",%s,%d,%s,%s,%d%n", line.path, line.shortName,
line.type, line.size, line.duplicateNames, line.duplicateChecksums,
line.checksum);
}
2020-02-08 09:54:50 +00:00
// ---------------------------------------------------------------------------------//
2016-12-13 03:36:26 +00:00
void updateChecksum (int rowIndex)
2020-02-08 09:54:50 +00:00
// ---------------------------------------------------------------------------------//
2016-12-13 03:36:26 +00:00
{
TableLine line = lines.get (rowIndex);
line.checksum = line.diskDetails.calculateChecksum ();
2016-12-15 00:01:42 +00:00
fireTableCellUpdated (rowIndex, 5);
2016-12-13 03:36:26 +00:00
}
2020-02-08 09:54:50 +00:00
// ---------------------------------------------------------------------------------//
2016-12-09 11:31:03 +00:00
class TableLine
2020-02-08 09:54:50 +00:00
// ---------------------------------------------------------------------------------//
2016-12-09 11:31:03 +00:00
{
2016-12-10 07:36:44 +00:00
private final String shortName;
2016-12-16 01:19:59 +00:00
private final String fileName;
2016-12-10 07:36:44 +00:00
private final String path;
2016-12-13 03:36:26 +00:00
private long checksum;
2016-12-10 07:36:44 +00:00
private final int duplicateNames;
private final int duplicateChecksums;
final DiskDetails diskDetails;
private final String type;
private final long size;
2016-12-09 11:31:03 +00:00
2016-12-15 00:01:42 +00:00
public TableLine (DiskDetails diskDetails, RootFolderData rootFolderData)
2016-12-09 11:31:03 +00:00
{
this.diskDetails = diskDetails;
2016-12-10 07:36:44 +00:00
shortName = diskDetails.getShortName ();
2016-12-16 01:19:59 +00:00
fileName = diskDetails.getFileName ();
2016-12-10 07:36:44 +00:00
checksum = diskDetails.getChecksum ();
2016-12-16 20:45:08 +00:00
// type = Utility.getSuffix (shortName);
type = diskDetails.getType ();
size = diskDetails.getFile ().length ();
2016-12-10 07:36:44 +00:00
String rootName = diskDetails.getRootName ();
path = rootName.substring (0, rootName.length () - shortName.length ());
2016-12-15 00:01:42 +00:00
if (rootFolderData.doChecksums)
if (diskDetails.isDuplicateChecksum ())
{
DiskDetails original =
rootFolderData.checksumMap.get (diskDetails.getChecksum ());
duplicateChecksums = original.getDuplicateChecksums ().size () + 1;
}
else
duplicateChecksums = diskDetails.getDuplicateChecksums ().size () + 1;
2016-12-10 07:36:44 +00:00
else
2016-12-15 00:01:42 +00:00
duplicateChecksums = 0;
2016-12-10 07:36:44 +00:00
if (diskDetails.isDuplicateName ())
{
2016-12-15 00:01:42 +00:00
DiskDetails original =
rootFolderData.fileNameMap.get (diskDetails.getShortName ());
2016-12-10 07:36:44 +00:00
duplicateNames = original.getDuplicateNames ().size () + 1;
}
else
duplicateNames = diskDetails.getDuplicateNames ().size () + 1;
2016-12-09 11:31:03 +00:00
}
}
}