/*
Copyright (C) 2004 E. Putrycz
All programs in this directory and
subdirectories are published under the GNU General Public License as
described below.
This program 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.
This program 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.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
USA
Further information about the GNU GPL is available at:
http://www.gnu.org/copyleft/gpl.ja.html
*/
package net.sf.jabref;
import java.awt.Component;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.awt.dnd.*;
import java.awt.event.ActionEvent;
import java.io.IOException;
import java.net.URL;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;
import net.sf.jabref.EntryEditor.StoreFieldAction;
/**
* @author Erik Putrycz erik.putrycz-at-nrc-cnrc.gc.ca
*/
public class SimpleUrlDragDrop implements DropTargetListener {
private static Logger logger = Logger.getLogger(SimpleUrlDragDrop.class
.getName());
private FieldEditor editor;
private StoreFieldAction storeFieldAction;
public SimpleUrlDragDrop(FieldEditor _editor,
StoreFieldAction _storeFieldAction) {
editor = _editor;
storeFieldAction = _storeFieldAction;
}
/*
* (non-Javadoc)
*
* @see java.awt.dnd.DropTargetListener#dragEnter(java.awt.dnd.DropTargetDragEvent)
*/
public void dragEnter(DropTargetDragEvent dtde) {
}
/*
* (non-Javadoc)
*
* @see java.awt.dnd.DropTargetListener#dragOver(java.awt.dnd.DropTargetDragEvent)
*/
public void dragOver(DropTargetDragEvent dtde) {
}
/*
* (non-Javadoc)
*
* @see java.awt.dnd.DropTargetListener#dropActionChanged(java.awt.dnd.DropTargetDragEvent)
*/
public void dropActionChanged(DropTargetDragEvent dtde) {
}
/*
* (non-Javadoc)
*
* @see java.awt.dnd.DropTargetListener#dragExit(java.awt.dnd.DropTargetEvent)
*/
public void dragExit(DropTargetEvent dte) {
}
/*
* (non-Javadoc)
*
* @see java.awt.dnd.DropTargetListener#drop(java.awt.dnd.DropTargetDropEvent)
*/
public void drop(DropTargetDropEvent dtde) {
Transferable tsf = dtde.getTransferable();
dtde.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);
//try with an URL
DataFlavor dtURL = null;
try{
dtURL = new DataFlavor("application/x-java-url; class=java.net.URL");
}catch (ClassNotFoundException e){
logger.log(Level.WARNING,
"Class not found for DnD... should not happen", e);
}
try{
URL url = (URL) tsf.getTransferData(dtURL);
//insert URL
editor.setText(url.toString());
storeFieldAction.actionPerformed(new ActionEvent(editor, 0, ""));
return;
}catch (UnsupportedFlavorException nfe){
// if not an URL
JOptionPane.showMessageDialog((Component) editor, Globals
.lang("Operation not supported"), Globals
.lang("Drag and Drop Error"), JOptionPane.ERROR_MESSAGE);
logger.log(Level.WARNING, "Transfer exception", nfe);
}catch (IOException ioex){
logger.log(Level.WARNING, "!should not happen!", ioex);
}
}
}