public void actionPerformed(ActionEvent e) {
   try {
     String scannedDestination = ((JTextField) e.getSource()).getText().toUpperCase();
     validateDestinationScan(scannedDestination);
     DefaultListModel listModel = (DefaultListModel) destinationsList.getModel();
     int lastPosition = listModel.getSize();
     int seedsCount = 0;
     // todo: do we have to worry about more trays than required..?
     for (int i = 0; i < seedPlates.length; i++) {
       if (seedPlates[i].getSeedPlateBarcode() != null
           && SCANNED.equals(seedPlates[i].getStatus())
           && !isContainedInList(seedPlates[i].getSeedPlateBarcode(), failedPlatesList)) {
         seedsCount++;
       }
     }
     if (lastPosition >= seedsCount) {
       throw new ChippingManagerException(DESTINATIONS_LIMIT_EXCEEDED);
     }
     addDestination(scannedDestination);
   } catch (Throwable cmException) {
     logger.error("Unable to scan destination ", cmException);
     JOptionPane.showMessageDialog(
         new JFrame(),
         cmException.getMessage(),
         TITLE_CHIPPING_MANAGER,
         JOptionPane.WARNING_MESSAGE);
   }
   scanDestination.setText(BLANK);
 }
 private int findDestinationListIndex(
     DefaultListModel destinationsListModel,
     int[] destinationsLoadCount,
     int destinationsListIndex,
     int i) {
   if (seedPlates[i].getSeedPlateBarcode() != null) {
     if (destinationsListIndex == destinationsListModel.getSize()) {
       for (int k = 0; k < destinationsListModel.getSize(); k++) {
         if (destinationsLoadCount[k] < MAX_NUMBER_IN_SEED_DESTINATION) {
           destinationsListIndex = k;
           break;
         }
       }
     }
   }
   return destinationsListIndex;
 }
 public void validateUnloadPlatesDialog() throws ChippingManagerException {
   StringBuffer stBuff = new StringBuffer(CORRECT_ERRORS_TO_CONTINUE);
   DefaultListModel destinationListModel = (DefaultListModel) destinationsList.getModel();
   int numberOfDestinations = destinationListModel.getSize();
   // Get the number of seed plates
   int seedPlatesCount = numberOfValidSeedPlates();
   String destinationsMessage =
       seedChipperGUIController
           .getSeedChipperController()
           .validateDestinations(numberOfDestinations, seedPlatesCount);
   if (destinationsMessage != null) {
     stBuff.append("\n- " + destinationsMessage);
   }
   if (userIDComboBox.getSelectedIndex() == 0) {
     stBuff.append("\n- " + USER_NAME_NOT_SELECTED + "\n");
   }
   if (!stBuff.toString().equals(CORRECT_ERRORS_TO_CONTINUE)) {
     throw new ChippingManagerException(stBuff.toString());
   }
 }
 public void unloadPlates() throws ChippingManagerException {
   seedChipperGUIController.getSeedChipperController().validateChangePriorToSave();
   //        List<Plate> platesToUnload = getFailedChiplates();
   DefaultListModel destinationsListModel = (DefaultListModel) destinationsList.getModel();
   int[] destinationsLoadCount = new int[destinationsListModel.getSize()];
   // Assign destinations to the seed plates
   int destinationsListIndex = 0;
   updateSeedPlateStatus();
   updateChipPlateStatus();
   // Set the respective locations in the seed plates
   for (int i = 0; i < seedPlates.length; i++) {
     // todo: unload criteria to be refactored to plate object....
     if (SCANNED.equals(seedPlates[i].getStatus()) && seedPlates[i].getPrescanStatus() != null) {
       destinationsListIndex =
           findDestinationListIndex(
               destinationsListModel, destinationsLoadCount, destinationsListIndex, i);
       // Decide the destination
       String seedPlateDestination =
           destinationsListModel.getElementAt(destinationsListIndex).toString();
       logger.info(
           "assigning seed  plates to plate "
               + seedPlates[i].getDeckNest()
               + " ->> "
               + seedPlateDestination);
       seedPlates[i].setStorageLocation(seedPlateDestination);
       destinationsLoadCount[destinationsListIndex]++;
       destinationsListIndex++;
       seedPlates[i].setPrescanStatus(CHIPPED);
     }
   }
   seedChipperGUIController
       .getSeedChipperController()
       .unloadChipperRun(userIDComboBox.getSelectedItem().toString());
   //
   // seedChipperGUIController.getSeedChipperController().syncPrescannedPlatesList(platesToUnload,
   // seedPlates, chipPlates);
   seedChipperGUIController.drawDeck();
   seedChipperGUIController.drawRunsOnDeck();
   logger.info("Plates unloaded to seed store");
   this.dispose();
 }
 public void addDestination(String scannedDestination) {
   DefaultListModel listModel = (DefaultListModel) destinationsList.getModel();
   int lastPosition = listModel.getSize();
   listModel.add(lastPosition, scannedDestination);
 }
 public void addToUnloadPlatesList(String scannerInput) {
   DefaultListModel listModel = (DefaultListModel) failedPlatesList.getModel();
   int lastPosition = listModel.getSize();
   listModel.add(lastPosition, scannerInput);
 }