/** {@inheritDoc} */
 @Override
 protected void exportDone(JComponent source, Transferable data, int action) {
   try {
     CargoLabel label = (CargoLabel) data.getTransferData(DefaultTransferHandler.flavor);
     if (source.getParent() instanceof CargoPanel) {
       TradeRouteInputPanel.this.cargoPanel.remove(label);
       int[] indices = TradeRouteInputPanel.this.stopList.getSelectedIndices();
       for (int stopIndex : indices) {
         TradeRouteStop stop = TradeRouteInputPanel.this.stopListModel.get(stopIndex);
         List<GoodsType> cargo = new ArrayList<>(stop.getCargo());
         for (int index = 0; index < cargo.size(); index++) {
           if (cargo.get(index) == label.getType()) {
             cargo.remove(index);
             break;
           }
         }
         stop.setCargo(cargo);
       }
       TradeRouteInputPanel.this.stopList.revalidate();
       TradeRouteInputPanel.this.stopList.repaint();
       TradeRouteInputPanel.this.cargoPanel.revalidate();
       TradeRouteInputPanel.this.cargoPanel.repaint();
     }
   } catch (IOException | UnsupportedFlavorException ex) {
     logger.log(Level.WARNING, "CargoHandler export", ex);
   }
 }
 /** Add any stops selected in the destination selector. */
 private void addSelectedStops() {
   int startIndex = -1;
   int endIndex = -1;
   int sel = this.destinationSelector.getSelectedIndex();
   if (sel == 0) { // All colonies + Europe
     startIndex = 1;
     endIndex = this.destinationSelector.getItemCount();
   } else { // just one place
     startIndex = sel;
     endIndex = startIndex + 1;
   }
   List<GoodsType> cargo = new ArrayList<>();
   for (Component comp : cargoPanel.getComponents()) {
     CargoLabel label = (CargoLabel) comp;
     cargo.add(label.getType());
   }
   int maxIndex = this.stopList.getMaxSelectionIndex();
   for (int i = startIndex; i < endIndex; i++) {
     String id = this.destinationSelector.getItemAt(i);
     FreeColGameObject fcgo = getGame().getFreeColGameObject(id);
     if (fcgo instanceof Location) {
       TradeRouteStop stop = new TradeRouteStop(getGame(), (Location) fcgo);
       stop.setCargo(cargo);
       if (maxIndex < 0) {
         this.stopListModel.addElement(stop);
       } else {
         maxIndex++;
         this.stopListModel.add(maxIndex, stop);
       }
     }
   }
 }
 /** {@inheritDoc} */
 @Override
 public boolean importData(JComponent target, Transferable data) {
   if (!canImport(target, data.getTransferDataFlavors())) return false;
   try {
     CargoLabel label = (CargoLabel) data.getTransferData(DefaultTransferHandler.flavor);
     if (target instanceof CargoPanel) {
       CargoLabel newLabel = new CargoLabel(label.getType());
       TradeRouteInputPanel.this.cargoPanel.add(newLabel);
       TradeRouteInputPanel.this.cargoPanel.revalidate();
       int[] indices = TradeRouteInputPanel.this.stopList.getSelectedIndices();
       for (int index : indices) {
         TradeRouteStop stop = TradeRouteInputPanel.this.stopListModel.get(index);
         stop.addCargo(label.getType());
       }
       TradeRouteInputPanel.this.stopList.revalidate();
       TradeRouteInputPanel.this.stopList.repaint();
     }
     return true;
   } catch (IOException | UnsupportedFlavorException ex) {
     logger.log(Level.WARNING, "CargoHandler import", ex);
   }
   return false;
 }