package com.hackerdude.apps.sqlide.plugins.tableedit; import java.awt.datatransfer.Transferable; import java.awt.datatransfer.UnsupportedFlavorException; import java.awt.dnd.DnDConstants; 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.ArrayList; import java.util.Enumeration; import java.util.Iterator; import javax.swing.JTable; import com.hackerdude.apps.sqlide.pluginapi.NodeIDEBase; import com.hackerdude.apps.sqlide.pluginapi.NodeIDECategory; import com.hackerdude.apps.sqlide.pluginapi.NodeIDEItem; import com.hackerdude.apps.sqlide.plugins.browser.browsejdbc.CategoryColumnsNode; import com.hackerdude.apps.sqlide.plugins.browser.browsejdbc.ItemTableColumnNode; /** * Table Column Editor. * * * @author David Martinez * @version 1.0 */ public class TableColumnsEditor extends JTable implements DropTargetListener { FieldCollectionModel dbColumnsModel; public TableColumnsEditor(FieldCollectionModel model) { super(model); dbColumnsModel = model; } /** * a drop has occurred * */ public void drop (DropTargetDropEvent event) { ArrayList alColumns = new ArrayList(); try { Transferable transferable = event.getTransferable(); // we accept NodeIDEItems if ( transferable.isDataFlavorSupported(NodeIDECategory.localDataFlavor()) ){ event.acceptDrop(DnDConstants.ACTION_MOVE); NodeIDEBase item = (NodeIDEBase)transferable.getTransferData(NodeIDEItem.localDataFlavor()); if ( item instanceof CategoryColumnsNode ) { CategoryColumnsNode columns = (CategoryColumnsNode)item; Enumeration columnsEnum = columns.children(); while ( columnsEnum.hasMoreElements() ) { Object element = columnsEnum.nextElement(); if ( element instanceof ItemTableColumnNode ) { ItemTableColumnNode node = (ItemTableColumnNode)element; alColumns.add(node); } } } else if (item instanceof ItemTableColumnNode ) { alColumns.add(item); } addToModel(alColumns); event.getDropTargetContext().dropComplete(true); this.grabFocus(); } else{ event.rejectDrop(); } } catch (IOException exception) { exception.printStackTrace(); System.err.println( "Exception" + exception.getMessage()); event.rejectDrop(); } catch (UnsupportedFlavorException ufException ) { ufException.printStackTrace(); System.err.println( "Exception" + ufException.getMessage()); event.rejectDrop(); } addToModel(alColumns); } public void addToModel(ArrayList al) { Iterator it = al.iterator(); while (it.hasNext()) { ItemTableColumnNode node = (ItemTableColumnNode)it.next(); TableField newField = new TableField(); newField.fieldName = node.getColumnName(); newField.fieldType = new TableFieldType(node.getColumnType()); newField.fieldLen = new Integer(node.getColumnSize()); dbColumnsModel.insertField(newField); } } /** * is invoked when you are exit the DropSite without dropping * */ public void dragExit (DropTargetEvent event) { System.out.println( "dragExit"); } /** * is invoked if the use modifies the current drop gesture * */ public void dropActionChanged ( DropTargetDragEvent event ) { } /** * is invoked when a drag operation is going on * */ public void dragOver (DropTargetDragEvent event) { System.out.println( "dragOver"); } /** * is invoked when you are dragging over the DropSite * */ public void dragEnter (DropTargetDragEvent event) { // debug messages for diagnostics System.out.println( "dragEnter"); event.acceptDrag(DnDConstants.ACTION_COPY_OR_MOVE); } }