2008-12-27 06:35:53 -05:00
|
|
|
|
2014-04-19 02:30:29 -04:00
|
|
|
package net.filebot.ui.analyze;
|
2008-12-27 06:35:53 -05:00
|
|
|
|
|
|
|
|
|
|
|
import java.io.File;
|
|
|
|
import java.util.ArrayList;
|
2009-01-24 19:08:57 -05:00
|
|
|
import java.util.Collections;
|
|
|
|
import java.util.Comparator;
|
|
|
|
import java.util.HashMap;
|
2008-12-27 06:35:53 -05:00
|
|
|
import java.util.Iterator;
|
|
|
|
import java.util.List;
|
2009-01-24 19:08:57 -05:00
|
|
|
import java.util.Map;
|
2008-12-27 06:35:53 -05:00
|
|
|
|
|
|
|
import javax.swing.BorderFactory;
|
|
|
|
import javax.swing.JScrollPane;
|
|
|
|
import javax.swing.tree.DefaultTreeModel;
|
|
|
|
import javax.swing.tree.TreeModel;
|
|
|
|
|
|
|
|
import net.miginfocom.swing.MigLayout;
|
2014-04-19 02:30:29 -04:00
|
|
|
import net.filebot.ui.analyze.FileTree.FolderNode;
|
|
|
|
import net.filebot.ui.transfer.DefaultTransferHandler;
|
|
|
|
import net.filebot.util.FileUtilities;
|
|
|
|
import net.filebot.util.ui.LoadingOverlayPane;
|
2008-12-27 06:35:53 -05:00
|
|
|
|
|
|
|
|
2012-02-26 11:57:00 -05:00
|
|
|
class TypeTool extends Tool<TreeModel> {
|
2008-12-27 06:35:53 -05:00
|
|
|
|
|
|
|
private FileTree tree = new FileTree();
|
|
|
|
|
|
|
|
|
|
|
|
public TypeTool() {
|
|
|
|
super("Types");
|
|
|
|
|
|
|
|
setLayout(new MigLayout("insets 0, fill"));
|
|
|
|
|
2008-12-28 15:04:13 -05:00
|
|
|
JScrollPane treeScrollPane = new JScrollPane(tree);
|
|
|
|
treeScrollPane.setBorder(BorderFactory.createEmptyBorder());
|
2009-02-15 16:11:03 -05:00
|
|
|
|
2012-02-26 11:57:00 -05:00
|
|
|
add(new LoadingOverlayPane(treeScrollPane, this), "grow");
|
2008-12-27 06:35:53 -05:00
|
|
|
|
|
|
|
tree.setTransferHandler(new DefaultTransferHandler(null, new FileTreeExportHandler()));
|
|
|
|
tree.setDragEnabled(true);
|
|
|
|
}
|
|
|
|
|
2012-02-26 11:57:00 -05:00
|
|
|
|
2008-12-27 06:35:53 -05:00
|
|
|
@Override
|
2009-01-11 16:23:03 -05:00
|
|
|
protected TreeModel createModelInBackground(FolderNode sourceModel) throws InterruptedException {
|
2009-01-24 19:08:57 -05:00
|
|
|
Map<String, List<File>> map = new HashMap<String, List<File>>();
|
2008-12-27 06:35:53 -05:00
|
|
|
|
2009-01-11 16:23:03 -05:00
|
|
|
for (Iterator<File> iterator = sourceModel.fileIterator(); iterator.hasNext();) {
|
2008-12-27 06:35:53 -05:00
|
|
|
File file = iterator.next();
|
|
|
|
|
2012-09-17 11:22:23 -04:00
|
|
|
String extension = FileUtilities.getExtension(file);
|
|
|
|
if (extension != null) {
|
|
|
|
extension = extension.toLowerCase();
|
|
|
|
}
|
2008-12-27 06:35:53 -05:00
|
|
|
|
2012-09-17 11:22:23 -04:00
|
|
|
List<File> files = map.get(extension);
|
2008-12-27 06:35:53 -05:00
|
|
|
if (files == null) {
|
|
|
|
files = new ArrayList<File>(50);
|
|
|
|
map.put(extension, files);
|
|
|
|
}
|
|
|
|
|
|
|
|
files.add(file);
|
|
|
|
}
|
|
|
|
|
2009-01-24 19:08:57 -05:00
|
|
|
List<String> keys = new ArrayList<String>(map.keySet());
|
|
|
|
|
|
|
|
// sort strings like always, handle null as empty string
|
|
|
|
Collections.sort(keys, new Comparator<String>() {
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public int compare(String s1, String s2) {
|
|
|
|
return ((s1 != null) ? s1 : "").compareTo((s2 != null) ? s2 : "");
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
// create tree model
|
2008-12-27 06:35:53 -05:00
|
|
|
FolderNode root = new FolderNode();
|
|
|
|
|
2009-01-24 19:08:57 -05:00
|
|
|
for (String key : keys) {
|
|
|
|
root.add(createStatisticsNode(key, map.get(key)));
|
2009-01-11 16:23:03 -05:00
|
|
|
|
|
|
|
// unwind thread, if we have been cancelled
|
|
|
|
if (Thread.interrupted()) {
|
|
|
|
throw new InterruptedException();
|
|
|
|
}
|
2008-12-27 06:35:53 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
return new DefaultTreeModel(root);
|
|
|
|
}
|
|
|
|
|
2012-02-26 11:57:00 -05:00
|
|
|
|
2008-12-27 06:35:53 -05:00
|
|
|
@Override
|
|
|
|
protected void setModel(TreeModel model) {
|
|
|
|
tree.setModel(model);
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|