📄 dump3.java
字号:
/**
* DuMP3 version morpheus_0.2.9 - a duplicate/similar file finder in Java<BR>
* Copyright 2005 Alexander Grässer<BR>
* All Rights Reserved, http://dump3.sourceforge.net/<BR>
* <BR>
* This file is part of DuMP3.<BR>
* <BR>
* DuMP3 is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software
* Foundation; either version 2 of the License, or (at your option) any later version.<BR>
* <BR>
* DuMP3 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.<BR>
* <BR>
* You should have received a copy of the GNU General Public License along with DuMP3; if not, write to the Free Software Foundation, Inc., 51 Franklin St,
* Fifth Floor, Boston, MA 02110-1301 USA
*/
package net.za.grasser.duplicate;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Observable;
import java.util.Observer;
import java.util.Set;
import net.za.grasser.duplicate.compare.Comparer;
import net.za.grasser.duplicate.file.DirectoryInfo;
import net.za.grasser.duplicate.file.DirectoryReader;
import net.za.grasser.duplicate.file.ExtensionCount;
import net.za.grasser.duplicate.file.FingerprintFile;
import net.za.grasser.duplicate.file.WildcardFilter;
import net.za.grasser.duplicate.fingerprint.AbstractFingerprint;
import net.za.grasser.duplicate.fingerprint.FingerprintFactory;
import net.za.grasser.duplicate.gui.*;
import net.za.grasser.duplicate.gui.display.DoubleDisplay;
import net.za.grasser.duplicate.gui.display.DoubleDisplayFactory;
import net.za.grasser.duplicate.gui.info.DoubleInfo;
import net.za.grasser.duplicate.persist.DatabaseFactory;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
import org.eclipse.jface.viewers.AbstractTreeViewer;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CTabFolder;
import org.eclipse.swt.custom.CTabItem;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.FormAttachment;
import org.eclipse.swt.layout.FormData;
import org.eclipse.swt.layout.FormLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.ProgressBar;
import org.eclipse.swt.widgets.Sash;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.ToolBar;
import org.eclipse.swt.widgets.ToolItem;
import org.eclipse.swt.widgets.TreeColumn;
import com.cloudgarden.resource.SWTResourceManager;
/**
* This code was edited or generated using CloudGarden's Jigloo SWT/Swing GUI Builder, which is free for non-commercial use. If Jigloo is being used
* commercially (ie, by a corporation, company or business for any purpose whatever) then you should purchase a license for each developer using Jigloo. Please
* visit www.cloudgarden.com for details. Use of Jigloo implies acceptance of these licensing terms. A COMMERCIAL LICENSE HAS NOT BEEN PURCHASED FOR THIS
* MACHINE, SO JIGLOO OR THIS CODE CANNOT BE USED LEGALLY FOR ANY CORPORATE OR COMMERCIAL PURPOSE.
*
* @author <a href="http://sourceforge.net/sendmessage.php?touser=733840">pyropunk at sourceforge dot net</a>
* @version $Revision: 1.54 $
*/
public class DuMP3 extends org.eclipse.swt.widgets.Composite implements Observer {
static {
Configure.load();
PropertyConfigurator.configure("./log4j.properties");
log = Logger.getLogger(DuMP3.class);
}
/**
* <code>VERSION</code> DuMP3 -
*/
private static final String VERSION = "morpheus_0.2.9";
/**
* <code>log</code> DuMP3 -
*/
private static Logger log;
/**
* <code>display</code> DuMP3 -
*/
private static Display display = null;
/**
* <code>tableViewer5</code> DuMP3 -
*/
private TableViewer tableViewer5;
/**
* <code>composite5topImage</code> DuMP3 -
*/
private Composite composite5topImage;
/**
* <code>composite5bottomImage</code> DuMP3 -
*/
private Composite composite5bottomImage;
/**
* <code>composite5right</code> DuMP3 -
*/
Composite composite5right;
/**
* <code>trashDir</code> DuMP3 - save current move directory
*/
String trashDir = "";
/**
* This method should return an instance of this class which does NOT initialize it's GUI elements. This method is ONLY required by Jigloo if the superclass
* of this class is abstract or non-public. It is not needed in any other situation.
*
* @param parent
* @param style
* @return instance of this class which does NOT initialize it's GUI elements
*/
public static Object getGUIBuilderInstance(final org.eclipse.swt.widgets.Composite parent, final int style) {
return new DuMP3(parent, style, Boolean.FALSE);
}
/**
* Auto-generated main method to display this org.eclipse.swt.widgets.Composite inside a new Shell.
*
* @param args
*/
public static void main(final String[] args) {
log.debug("DuMP3 version " + VERSION + " started");
final SplashScreen s = new SplashScreen(0);
s.showSplash();
display = Display.getDefault();
log.debug("display created");
final Shell shell = new Shell(display);
log.debug("shell created");
final DuMP3 inst = new DuMP3(shell, SWT.NULL);
log.debug("dump3 instance created");
final Point size = inst.getSize();
shell.setLayout(new FillLayout());
shell.setText("DuMP3 - the ultimate duplicate finder");
shell.setImage(SWTResourceManager.getImage("icons/main.ico"));
shell.layout();
if (size.x == 0 && size.y == 0) {
inst.pack();
shell.pack();
} else {
final Rectangle shellBounds = shell.computeTrim(0, 0, size.x, size.y);
shell.setSize(shellBounds.width, shellBounds.height);
}
log.debug("shell configured");
shell.open();
log.debug("shell open");
s.hideSplash();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
log.debug("done");
DatabaseFactory.getDatabase().close();
log.debug("exit");
// make sure all swing components are closed.
System.exit(0);
}
{
// Register as a resource user - SWTResourceManager will
// handle the obtaining and disposing of resources
SWTResourceManager.registerResourceUser(this);
}
/**
* <code>treeViewer3</code> DuMP3 -
*/
TreeViewer treeViewer3;
/**
* <code>composite5</code> DuMP3 -
*/
Composite composite5;
/**
* <code>sash5</code> DuMP3 -
*/
Sash sash5;
/**
* <code>sash5right</code> DuMP3 -
*/
Sash sash5right;
/**
* <code>lblVersion</code> DuMP3 - version display bottom right
*/
private Label lblVersion;
/**
* <code>toolItemLMove</code> DuMP3 -
*/
ToolItem toolItemLMove;
/**
* <code>toolItemLDelete</code> DuMP3 -
*/
ToolItem toolItemLDelete;
/**
* <code>toolItemLTrash</code> DuMP3 -
*/
ToolItem toolItemLTrash;
/**
* <code>toolItemRTrash</code> DuMP3 -
*/
ToolItem toolItemRTrash;
/**
* <code>toolItemRMove</code> DuMP3 -
*/
ToolItem toolItemRMove;
/**
* <code>toolItemRDelete</code> DuMP3 -
*/
ToolItem toolItemRDelete;
/**
* <code>toolBarLeft</code> DuMP3 -
*/
private ToolBar toolBarLeft;
/**
* <code>toolBarRight</code> DuMP3 -
*/
private ToolBar toolBarRight;
/**
* <code>fileList</code> DuMP3 - file list
*/
private final List<File> fileList = Collections.synchronizedList(new ArrayList<File>());
/**
* <code>typeMap</code> DuMP3 - temporary file type list while collecting
*/
private final Map<String, ExtensionCount> typeMap = Collections.synchronizedMap(new HashMap<String, ExtensionCount>());
/**
* <code>typeList</code> DuMP3 - displayed file type list
*/
private final List<ExtensionCount> typeList = Collections.synchronizedList(new ArrayList<ExtensionCount>());
/**
* <code>duplicateList</code> DuMP3 - list of duplicates found
*/
final List<FingerprintFile> duplicateList = Collections.synchronizedList(new ArrayList<FingerprintFile>());
/**
* <code>selectedTypeList</code> DuMP3 - selected file types
*/
private final List<ExtensionCount> selectedTypeList = Collections.synchronizedList(new ArrayList<ExtensionCount>());
/**
* <code>prints</code> DuMP3 - fingerprint list
*/
private final Set<Class< ? extends AbstractFingerprint>> prints = Collections.synchronizedSet(new HashSet<Class< ? extends AbstractFingerprint>>());
/**
* <code>tableViewer3</code> DuMP3 -
*/
TableViewer tableViewer3;
/**
* <code>btnRem2</code> DuMP3 -
*/
private Button btnRem2;
/**
* <code>btnAdd2</code> DuMP3 -
*/
private Button btnAdd2;
/**
* <code>tableViewer2</code> DuMP3 -
*/
private TableViewer tableViewer2;
/**
* <code>tableViewer4</code> DuMP3 -
*/
private TableViewer tableViewer4;
/**
* <code>tableViewer1</code> DuMP3 -
*/
TableViewer tableViewer1;
/**
* <code>composite2</code> DuMP3 -
*/
private Composite composite2;
/**
* <code>composite3</code> DuMP3 -
*/
private Composite composite3;
/**
* <code>buttonBar</code> DuMP3 -
*/
private Composite buttonBar;
/**
* <code>btnRem1</code> DuMP3 -
*/
private Button btnRem1;
/**
* <code>cTabItem3</code> DuMP3 -
*/
CTabItem cTabItem3;
/**
* <code>lblStatus</code> DuMP3 -
*/
Label lblStatus;
/**
* <code>cTabItem5</code> DuMP3 -
*/
CTabItem cTabItem5;
/**
* <code>cTabItem6</code> DuMP3 -
*/
private CTabItem cTabItem6;
/**
* <code>cTabItem4</code> DuMP3 -
*/
private CTabItem cTabItem4;
/**
* <code>cTabItem2</code> DuMP3 -
*/
CTabItem cTabItem2;
/**
* <code>btnAdd1</code> DuMP3 -
*/
private Button btnAdd1;
/**
* <code>treeViewer1left</code> DuMP3 -
*/
private TreeViewer treeViewer1left;
/**
* <code>treeViewer1right</code> DuMP3 -
*/
private TreeViewer treeViewer1right;
/**
* <code>composite1</code> DuMP3 -
*/
private Composite composite1;
/**
* <code>cTabItem1</code> DuMP3 -
*/
private CTabItem cTabItem1;
/**
* <code>ctfMainTab</code> DuMP3 -
*/
CTabFolder ctfMainTab;
/**
* <code>btnNext</code> DuMP3 -
*/
Button btnNext;
/**
* <code>btnBack</code> DuMP3 -
*/
Button btnBack;
/**
* <code>progressBar</code> DuMP3 -
*/
ProgressBar progressBar;
/**
* <code>typeThreadsStarted</code> DuMP3 -
*/
private int typeThreadsStarted = 0;
/**
* <code>progress</code> DuMP3 - finer control over the progress bar
*/
double progress = 0.0;
/**
* <code>readers</code> DuMP3 -
*/
private final List<DirectoryReader> readers = new ArrayList<DirectoryReader>();
/**
* <code>prevLeft</code> DuMP3 -
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -