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();
 }