package open.dolphin.order; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.Transferable; import java.awt.datatransfer.UnsupportedFlavorException; import java.io.IOException; import java.util.List; import javax.swing.JComponent; import javax.swing.JTable; import javax.swing.TransferHandler; import open.dolphin.infomodel.RegisteredDiagnosisModel; import open.dolphin.table.ListTableModel; /** * RegisteredDiagnosisTransferHandler * * @author Minagawa,Kazushi * */ public final class RegisteredDiagnosisTransferHandler extends TransferHandler { private final DataFlavor registeredDiagnosisFlavor = RegisteredDiagnosisTransferable.registeredDiagnosisFlavor; private JTable sourceTable; private boolean shouldRemove; private RegisteredDiagnosisModel dragItem; public RegisteredDiagnosisTransferHandler() { } @Override protected Transferable createTransferable(JComponent c) { sourceTable = (JTable) c; ListTableModel<RegisteredDiagnosisModel> tableModel = (ListTableModel<RegisteredDiagnosisModel>) sourceTable.getModel(); int fromIndex = sourceTable.getSelectedRow(); dragItem = tableModel.getObject(fromIndex); return dragItem != null ? new RegisteredDiagnosisTransferable(dragItem) : null; } @Override public int getSourceActions(JComponent c) { return MOVE; } @Override public boolean importData(TransferHandler.TransferSupport support) { if (!canImport(support)) { return false; } try { JTable.DropLocation dl = (JTable.DropLocation)support.getDropLocation(); int toIndex = dl.getRow(); if (dl.isInsertRow() && toIndex>-1) { Transferable t = support.getTransferable(); RegisteredDiagnosisModel dropItem = (RegisteredDiagnosisModel) t.getTransferData(registeredDiagnosisFlavor); JTable dropTable = (JTable) support.getComponent(); ListTableModel<RegisteredDiagnosisModel> tableModel = (ListTableModel<RegisteredDiagnosisModel>) dropTable.getModel(); shouldRemove = dropTable == sourceTable; if (toIndex<tableModel.getObjectCount()) { tableModel.addObject(toIndex, dropItem); } else { tableModel.addObject(dropItem); } return true; } } catch (UnsupportedFlavorException | IOException ioe) { ioe.printStackTrace(System.err); } return false; } @Override protected void exportDone(JComponent c, Transferable data, int action) { if (action == MOVE && shouldRemove && dragItem!=null) { ListTableModel<RegisteredDiagnosisModel> tableModel = (ListTableModel<RegisteredDiagnosisModel>)sourceTable.getModel(); List<RegisteredDiagnosisModel> list = tableModel.getDataProvider(); for (int i = 0; i < list.size(); i++) { RegisteredDiagnosisModel r = list.get(i); if (r==dragItem) { list.remove(i); tableModel.fireTableDataChanged(); break; } } } shouldRemove = false; dragItem = null; } @Override public boolean canImport(TransferHandler.TransferSupport support) { return (support.isDrop() && support.isDataFlavorSupported(registeredDiagnosisFlavor)); } }