/*
* Created on May 31, 2005
*
*/
package cytoscape.editor.event;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.awt.dnd.DragGestureListener;
import javax.swing.JComponent;
import javax.swing.TransferHandler;
import cytoscape.editor.CytoscapeEditorManager;
import cytoscape.editor.impl.BasicCytoShapeEntity;
import cytoscape.logger.CyLogger;
/**
* transfer handler for shapes that are dragged from the palette onto the canvas.
* Creates appropriate data flavor and transferrable.
* part of drag/drop editor framework.
*
* @author Allan Kuchinsky
* @version 1.0
* @see cytoscape.editor.GraphicalEntity
* @see cytoscape.editor.impl.BasicCytoShapeEntity
*
*/
public class BasicCytoShapeTransferHandler extends TransferHandler {
// MLC 09/14/06:
private static final long serialVersionUID = 778042405547689517L;
DataFlavor basicCytoShapeFlavor;
DragGestureListener _cytoShape;
/**
* @return Returns the _attributeName.
*/
public String get_attributeName() {
return _attributeName;
}
/**
* @return Returns the _attributeValue.
*/
public String get_attributeValue() {
return _attributeValue;
}
String _attributeName;
String _attributeValue;
Object[] _args;
/**
* creates a DataFlavor for the BasicCytoShapeEntity class
*
*/
public BasicCytoShapeTransferHandler() {
try {
basicCytoShapeFlavor = new DataFlavor(BasicCytoShapeEntity.class, "BasicCytoShapeEntity");
} catch (Exception e) {
CyLogger.getLogger(BasicCytoShapeTransferHandler.class).warn("Unable to create data flavor for BasicCytoShapeEntity",e);
}
}
/**
* creates a DataFlavor and sets instance variables for a BasicCytoShapeEntity that is
* added to the palette
* @param cytoShape shape that is added to the palette
* @param args arbitrary list of arguments that can be passed in
*/
public BasicCytoShapeTransferHandler(BasicCytoShapeEntity cytoShape, Object[] args) {
try {
basicCytoShapeFlavor = new DataFlavor(BasicCytoShapeEntity.class, "BasicCytoShapeEntity");
} catch (Exception e) {
CyLogger.getLogger(BasicCytoShapeTransferHandler.class).warn("Unable to create data flavor for BasicCytoShapeEntity",e);
}
_cytoShape = cytoShape;
_args = args;
_attributeName = cytoShape.getAttributeName();
_attributeValue = cytoShape.getAttributeValue();
}
/**
* @return Returns the _args.
*/
public Object[] get_args() {
return _args;
}
/**
* sets the _args instance variable
* @param _args The _args to set.
*/
public void set_args(Object[] _args) {
this._args = _args;
}
/**
* DOCUMENT ME!
*
* @param c DOCUMENT ME!
* @param t DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public boolean importData(JComponent c, Transferable t) {
CytoscapeEditorManager.log("importing data from transferable " + t);
if (canImport(c, t.getTransferDataFlavors())) {
}
return false;
}
// AJK: 11/13/05 BEGIN
/**
* DOCUMENT ME!
*
* @param val DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public String exportString(Object val) {
if (val instanceof BasicCytoShapeEntity) {
return ((BasicCytoShapeEntity) val).getTitle();
} else {
return null;
}
}
// AJK: 11/13/05 END
/**
* DOCUMENT ME!
*
* @param c DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public Transferable createTransferable(JComponent c) {
return new BasicCytoShapeTransferable(c);
}
/**
* DOCUMENT ME!
*
* @param c DOCUMENT ME!
* @param flavors DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public boolean canImport(JComponent c, DataFlavor[] flavors) {
for (int i = 0; i < flavors.length; i++) {
if (basicCytoShapeFlavor.equals(flavors[i])) {
return true;
}
}
return false;
}
/**
* packages the BasicCytoShapeEntity for transfer upon a drag/drop operation
* @author Allan Kuchinsky
* @version 1.0
*
*
*/
class BasicCytoShapeTransferable implements Transferable {
private BasicCytoShapeEntity _cytoShape;
BasicCytoShapeTransferable(JComponent obj) {
if (obj instanceof BasicCytoShapeEntity) {
_cytoShape = (BasicCytoShapeEntity) obj;
_attributeName = _cytoShape.getAttributeName();
_attributeValue = _cytoShape.getAttributeValue();
}
}
public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException {
if (!isDataFlavorSupported(flavor)) {
throw new UnsupportedFlavorException(flavor);
}
return exportString(_cytoShape);
}
public DataFlavor[] getTransferDataFlavors() {
return new DataFlavor[] { basicCytoShapeFlavor };
}
public boolean isDataFlavorSupported(DataFlavor flavor) {
return basicCytoShapeFlavor.equals(flavor);
}
}
/**
* @return Returns the _cytoShape.
*/
public DragGestureListener get_cytoShape() {
return _cytoShape;
}
/**
* sets the instance variable for a BasicCytoShapeEntity
* @param shape The _cytoShape to set.
*/
public void set_cytoShape(DragGestureListener shape) {
_cytoShape = shape;
}
}