/******************************************************************************* * Copyright (c) 2014 Open Door Logistics (www.opendoorlogistics.com) * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Lesser Public License v3 * which accompanies this distribution, and is available at http://www.gnu.org/licenses/lgpl.txt ******************************************************************************/ package com.opendoorlogistics.components.scheduleeditor; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.StringSelection; import java.awt.datatransfer.Transferable; import javax.swing.JComponent; import javax.swing.JTable; import javax.swing.TransferHandler; import com.opendoorlogistics.components.scheduleeditor.data.AbstractResource; import com.opendoorlogistics.components.scheduleeditor.data.EditorData; import com.opendoorlogistics.components.scheduleeditor.data.beans.Task; public class TaskTransferHandler extends TransferHandler { private final TaskMover dataProvider; public TaskTransferHandler(TaskMover dataProvider) { this.dataProvider = dataProvider; } @Override public boolean canImport(TransferHandler.TransferSupport info) { // Check for String flavor if (!info.isDataFlavorSupported(DataFlavor.stringFlavor)) { return false; } return true; } @Override protected Transferable createTransferable(JComponent c) { StringBuilder builder = new StringBuilder(); if(TasksTable.class.isInstance(c)){ TasksTable list = (TasksTable) c; int []indices = list.getSelectedRows(); for (int i = 0; i < indices.length; i++) { if(i>0){ builder.append(System.lineSeparator()); } builder.append(list.getStopId(indices[i])); } } else if (ResourcesList.class.isInstance(c)){ ResourcesList list = (ResourcesList)c; AbstractResource vehicle = list.getSelectedValue(); if(vehicle!=null){ EditorData data = dataProvider.getData(); if(data!=null){ Task []stops = data.getTasksByResource(vehicle.getId()); if(stops!=null){ for(Task stop:stops){ if(builder.length()>0){ builder.append(System.lineSeparator()); } builder.append(stop.getId()); } } } } } if(builder.length()>0){ return new StringSelection(builder.toString()); } return null; } @Override public int getSourceActions(JComponent c) { return TransferHandler.COPY_OR_MOVE; } @Override public boolean importData(TransferHandler.TransferSupport info) { if (!info.isDrop()) { return false; } // Get the string that is being dropped. Transferable t = info.getTransferable(); String[] stopIds = getStopIds(t); if(stopIds==null){ return false; } if(info.getComponent()!=null ){ // get the list we're dropping onto if(TasksTable.class.isInstance(info.getComponent())){ TasksTable stopsList = (TasksTable) info.getComponent(); // get the drop position in this list JTable.DropLocation dl = (JTable.DropLocation) info.getDropLocation(); int index = dl.getRow(); if(index==-1){ // after the end of the list.. index = stopsList.getModel().getRowCount(); } return dataProvider.moveStop(stopIds,stopsList.getVehicleId(), index); } else if (ResourcesList.class.isInstance(info.getComponent())){ ResourcesList list =(ResourcesList)info.getComponent(); AbstractResource selected = list.getSelectedValue(); if(selected!=null){ return dataProvider.moveStop(stopIds,selected.getId(), 0); } } } return false; } static String[] getStopIds(Transferable t) { String data; try { data = (String) t.getTransferData(DataFlavor.stringFlavor); } catch (Exception e) { return null; } if (data == null) { return null; } String[] stopIds = data.split(System.lineSeparator()); return stopIds; } }