/**
   * Performs actions after specific Route is selected.
   *
   * @param ae - Route Object Tag value (String)
   */
  public void selectRouteAction(ItemEvent ae) {
    Item item = (Item) ((JComboBox) ae.getSource()).getSelectedItem();
    String routeTag = item.getId();
    Vector<Item> busDirectionItems = null;
    mainView.enableRefresh(false);

    try {
      busDirectionItems = mainModel.getBusDirectionItems(routeTag);

      if (busDirectionItems.size() > 0) {
        // Clear Out Bus Stops Table
        mainView.clearStops();

        // Populate Directions Combobox
        updateMapDirections(busDirectionItems);

        // Populate Directions Hash Map
        mainModel.setDirectionsMap(routeTag);

        // Draw Route on map
        drawMapRoute(routeTag);
      } else {
        mainView.enableRouteDirections(false);
      }
    } catch (ServiceUnavailableException e) {
      mainView.notifyAndExit(MainView.NEXTBUS_SERVICE_UNAVAILABLE);
    } catch (NullPointerException npe) {
      resetAll();
      // npe.printStackTrace();
    }
  }
  /**
   * Accepts Item Vector List of all the Bus Directions. Populates Bus Directions ComboBox with
   * provided Bus Directions List.
   *
   * @param busDirectionItems Item Vector List
   */
  private void updateMapDirections(Vector<Item> busDirectionItems) {
    mainView.clearDirections();
    mainView.enableRouteDirections(true);
    mainView.enableRefresh(true);

    Iterator<Item> itr = busDirectionItems.iterator();
    while (itr.hasNext()) {
      mainView.addRouteDirectionItem((Item) itr.next());
    }
  }
  /** Action performed when Search By Address Radio Button is selected */
  public void rdBusRouteAction() {
    resetAll();
    mainView.enableAddressSearch(false);
    mainView.enableRouteDirections(false);
    mainView.enableRoute(true);
    mainView.enableRefresh(false);
    mainView.updateStatus(MainView.DEFAULT_STATUS);

    String[] tableColumns = BUS_ROUTE_COLUMNS;
    mainView.setTableColumns(tableColumns);
  }
  /** Action performed when Search By Address Radio Button is selected */
  public void rdSearchAddressAction() {
    resetAll();

    mainView.enableRoute(false);
    mainView.enableRouteDirections(false);
    mainView.enableAddressSearch(true);
    mainView.enableRefresh(false);
    mainView.updateStatus(MainView.DEFAULT_STATUS);

    String[] tableColumns = SEARCH_ADDRESS_COLUMNS;
    mainView.setTableColumns(tableColumns);
  }
 /** Clears Bus Route and Stop information from Map and Table */
 private void resetAll() {
   mainView.clearStops();
   mainView.clearDirections();
   mainView.enableRouteDirections(false);
   mainView.resetMapViewer();
 }