import java.awt.Button;
import java.awt.Frame;
import java.awt.List;
import java.awt.Toolkit;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.StringSelection;
import java.awt.datatransfer.Transferable;
import java.awt.dnd.DropTarget;
import java.awt.dnd.DropTargetDragEvent;
import java.awt.dnd.DropTargetDropEvent;
import java.awt.dnd.DropTargetEvent;
import java.awt.dnd.DropTargetListener;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.security.MessageDigest;
public class MD5sumForm extends WindowAdapter implements ActionListener
{
private static RecordList fileList = new MD5sumForm.RecordList();
private static final String msg = "Drag file(s) here to get MD5";
public static void main(String[] args)
{
Frame window = new Frame();
window.setSize(400, 350);
window.setLayout(null);
window.setLocation(480, 320);
window.setResizable(false);
window.setTitle("MD5sum - By Wafly");
window.add(fileList);
final Button emptyBtn = new Button("Empty");
emptyBtn.setSize(100, 20);
emptyBtn.setLocation(280, 315);
window.add(emptyBtn);
MD5sumForm evi = new MD5sumForm();
window.addWindowListener(evi);
emptyBtn.addActionListener(evi);
window.setVisible(true);
}
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
public void actionPerformed(ActionEvent actionevent)
{
fileList.removeAll();
fileList.add(msg);
}
private static void addFile(String filePath) {
if (filePath == null || filePath.trim().length() == 0)
return;
if (new File(filePath).exists())
{
try {
MessageDigest messagedigest = MessageDigest.getInstance("MD5");
InputStream fis = new FileInputStream(filePath);
byte[] buffer = new byte[1024];
int numRead = 0;
while ((numRead = fis.read(buffer)) > 0)
messagedigest.update(buffer, 0, numRead);
fis.close();
byte bytes[] = messagedigest.digest();
StringBuffer stringbuffer = new StringBuffer(2 * bytes.length);
char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
int k = bytes.length;
for (int l = 0; l < k; l++)
{
stringbuffer.append(hexDigits[(bytes[l] & 0xf0) >> 4]);
stringbuffer.append(hexDigits[bytes[l] & 0xf]);
}
fileList.add(stringbuffer + " - " + filePath);
} catch (Exception e) {
fileList.add("-------------------------------- - " + filePath);
}
}
}
private static class RecordList extends List implements DropTargetListener,KeyListener,ItemListener {
private static final long serialVersionUID = 1L;
private int lastSelectItemID = -1;
public RecordList()
{
setSize(360, 250);
setLocation(20, 50);
setMultipleMode(true);
new DropTarget(this, this);
addKeyListener(this);
addItemListener(this);
add(msg);
}
private boolean isCTRLdown=false;
private boolean isShiftDown=false;
public void dragEnter(DropTargetDragEvent event) { }
public void dragExit(DropTargetEvent event) { }
public void dragOver(DropTargetDragEvent event) { }
public void dropActionChanged(DropTargetDragEvent event) { }
public void keyTyped(KeyEvent keyevent) { }
public void drop(DropTargetDropEvent event)
{
if(getItemCount()>0 && msg.equals(getItem(0)))
remove(0);
event.acceptDrop(1);
Transferable transferable = event.getTransferable();
DataFlavor[] flavors = transferable.getTransferDataFlavors();
for (int i = 0; i < flavors.length; i++)
{
DataFlavor d = flavors[i];
try {
if (d.equals(DataFlavor.javaFileListFlavor))
{
java.util.List fileList = (java.util.List) transferable.getTransferData(d);
for (int j=0; j<fileList.size(); j++)
addFile(((File)fileList.get(j)).getAbsolutePath());
}
} catch (Exception e) { }
}
}
public void keyPressed(KeyEvent keyevent) {
switch(keyevent.getKeyCode())
{
case KeyEvent.VK_CONTROL:
isCTRLdown=true;
break;
case KeyEvent.VK_SHIFT:
isShiftDown=true;
break;
case KeyEvent.VK_C:
if(isCTRLdown)
{
StringBuffer icsb = new StringBuffer();
String[] items = getSelectedItems();
for(int i=0; i<items.length; i++)
icsb.append(items[i]).append("\n");
StringSelection stsel = new StringSelection(icsb.toString());
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(stsel, stsel);
}
break;
case KeyEvent.VK_A:
if(isCTRLdown)
{
for(int i=0; i<getItemCount(); i++)
select(i);
}
break;
case KeyEvent.VK_DELETE:
int[] selectedIndexes = getSelectedIndexes();
for(int i=selectedIndexes.length-1; i>=0; i--)
remove(selectedIndexes[i]);
if(getItemCount()==0)
add(msg);
break;
}
}
public void keyReleased(KeyEvent keyevent) {
switch(keyevent.getKeyCode())
{
case KeyEvent.VK_CONTROL:
isCTRLdown=false;
break;
case KeyEvent.VK_SHIFT:
isShiftDown=false;
break;
}
}
public void itemStateChanged(ItemEvent itemevent) {
boolean hasOperation = false;
int currID=Integer.parseInt(itemevent.getItem().toString());
if(lastSelectItemID>-1 && isShiftDown)
{
for(int i=0; i<=getItemCount(); i++)
{
if((currID>lastSelectItemID && (i<lastSelectItemID || i>currID))
|| (currID<lastSelectItemID && (i>lastSelectItemID || i<currID)))
deselect(i);
else
select(i);
}
hasOperation=true;
}
else if(isCTRLdown)
{
hasOperation=true;
if(itemevent.getStateChange()==ItemEvent.SELECTED)
lastSelectItemID=currID;
}
if(!hasOperation)
{
for(int i=0; i<getItemCount(); i++)
{
if(i==currID)
select(i);
else
deselect(i);
}
lastSelectItemID=currID;
}
}
}
}