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;
|
|
|
|
|
|
|
|
public class DiskTableModel extends AbstractTableModel
|
|
|
|
{
|
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
|
|
|
|
2016-12-12 08:31:58 +00:00
|
|
|
public 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
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2016-12-15 00:01:42 +00:00
|
|
|
public DiskDetails getDiskDetails (int rowIndex)
|
|
|
|
{
|
|
|
|
return lines.get (rowIndex).diskDetails;
|
|
|
|
}
|
|
|
|
|
2016-12-09 11:31:03 +00:00
|
|
|
@Override
|
|
|
|
public String getColumnName (int column)
|
|
|
|
{
|
|
|
|
return headers[column];
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public int getRowCount ()
|
|
|
|
{
|
|
|
|
return lines.size ();
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public int getColumnCount ()
|
|
|
|
{
|
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
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public Class<?> getColumnClass (int columnIndex)
|
|
|
|
{
|
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
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public Object getValueAt (int rowIndex, int columnIndex)
|
|
|
|
{
|
|
|
|
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:
|
2016-12-11 05:18:04 +00:00
|
|
|
return line.type;
|
2016-12-10 07:36:44 +00:00
|
|
|
case 3:
|
2016-12-11 05:18:04 +00:00
|
|
|
return line.size;
|
2016-12-10 07:36:44 +00:00
|
|
|
case 4:
|
2016-12-11 05:18:04 +00:00
|
|
|
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 "???";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2016-12-13 03:36:26 +00:00
|
|
|
public String getCSV (int rowIndex)
|
|
|
|
{
|
|
|
|
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);
|
|
|
|
}
|
|
|
|
|
|
|
|
void updateChecksum (int rowIndex)
|
|
|
|
{
|
|
|
|
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
|
|
|
}
|
|
|
|
|
2016-12-09 11:31:03 +00:00
|
|
|
class TableLine
|
|
|
|
{
|
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;
|
2016-12-11 05:18:04 +00:00
|
|
|
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 ();
|
2016-12-11 05:18:04 +00:00
|
|
|
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
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|