/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package org.autoplot; import org.autoplot.ApplicationModel; import java.awt.Component; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.UnsupportedFlavorException; import java.awt.dnd.DnDConstants; 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.io.IOException; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.JOptionPane; import org.das2.graph.DasCanvasComponent; import org.das2.graph.DasPlot; import org.das2.util.LoggerManager; import org.autoplot.bookmarks.Bookmark; import org.autoplot.bookmarks.BookmarksException; import org.autoplot.dom.Plot; import org.autoplot.dom.PlotElement; import org.autoplot.layout.LayoutConstants; import org.autoplot.datasource.DataSetSelector; import org.xml.sax.SAXException; /** * DropTarget allows URIs to be dropped onto plots of the page. * @author jbf */ public class UriDropTargetListener implements DropTargetListener { private static final Logger logger= LoggerManager.getLogger("autoplot.gui.droptarget"); DataSetSelector dss; ApplicationModel model; public UriDropTargetListener(DataSetSelector dss, ApplicationModel model) { this.model = model; this.dss = dss; } private String getURILinux( DropTargetDropEvent dtde ) { try { DataFlavor nixFileDataFlavor = new DataFlavor("text/uri-list;class=java.lang.String"); if ( dtde.isDataFlavorSupported(nixFileDataFlavor) ) { // assume that we have already accepted the drop. dtde.acceptDrop(DnDConstants.ACTION_NONE); String data = (String)dtde.getTransferable().getTransferData(nixFileDataFlavor); return data; } else { return null; } } catch (UnsupportedFlavorException ex ) { logger.log(Level.SEVERE, ex.getMessage(), ex); return null; } catch (ClassNotFoundException ex) { logger.log(Level.SEVERE, ex.getMessage(), ex); return null; } catch (IOException ex) { logger.log(Level.SEVERE, ex.getMessage(), ex); return null; } } /** * I was hoping we could peek to see if it really was a URI... * TODO: rewrite this. * @param dtde * @return */ private String getURI( DropTargetDropEvent dtde ) { try { boolean haveAcceptedDrop= false; Bookmark item = null; List items = null; if ( logger.isLoggable(Level.FINE) ) { for ( DataFlavor df: dtde.getCurrentDataFlavors() ) { logger.log(Level.FINE, "drop data flavor: {0} {1}", new Object[]{df.getMimeType(), df.getHumanPresentableName()}); } } if (dtde.isDataFlavorSupported(DataFlavor.stringFlavor)) { if ( !haveAcceptedDrop ) { dtde.acceptDrop(DnDConstants.ACTION_COPY); haveAcceptedDrop= true; } String data = ((String) dtde.getTransferable().getTransferData(DataFlavor.stringFlavor)).trim(); if (data.length() > 19 && data.startsWith(" 14 && data.startsWith(" pe = model.dom.getController().getPlotElementsFor(plot); if (pe.size() == 0) { model.showMessage("no plot elements here", "no plot elements", JOptionPane.WARNING_MESSAGE); return; } model.dom.getController().setPlotElement(pe.get(0)); // set the focus dss.setValue(uri); dss.maybePlot(true); } } } }