/**
   * Get the lastest border wait times from the database.
   *
   * @param view
   * @param result
   */
  private void getBorderWaits(BorderWaitView view, List<GenericRow> result) {
    ArrayList<BorderWaitItem> northboundBorderWaitItems = new ArrayList<BorderWaitItem>();
    ArrayList<BorderWaitItem> southboundBorderWaitItems = new ArrayList<BorderWaitItem>();
    BorderWaitItem item;

    int numResults = result.size();

    for (int i = 0; i < numResults; i++) {
      item = new BorderWaitItem();

      String direction = result.get(i).getString(BorderWaitColumns.BORDER_WAIT_DIRECTION);
      int route = result.get(i).getInt(BorderWaitColumns.BORDER_WAIT_ROUTE);

      item.setTitle(result.get(i).getString(BorderWaitColumns.BORDER_WAIT_TITLE));
      item.setLane(result.get(i).getString(BorderWaitColumns.BORDER_WAIT_LANE));
      item.setUpdated(result.get(i).getString(BorderWaitColumns.BORDER_WAIT_UPDATED));
      item.setWait(result.get(i).getInt(BorderWaitColumns.BORDER_WAIT_TIME));

      if (direction.equalsIgnoreCase("northbound")) {
        item.setRouteIcon(USRouteIcon.get(route));
        northboundBorderWaitItems.add(item);
      } else {
        item.setRouteIcon(CanadaRouteIcon.get(route));
        southboundBorderWaitItems.add(item);
      }
    }

    view.hideProgressIndicator();
    view.renderNorthbound(northboundBorderWaitItems);
    view.renderSouthbound(southboundBorderWaitItems);
    view.refresh();
  }
  @Override
  public void start(AcceptsOneWidget panel, EventBus eventBus) {
    this.eventBus = eventBus;
    dbService = clientFactory.getDbService();
    phoneGap = clientFactory.getPhoneGap();
    view.setPresenter(this);
    view.getNorthboundPullHeader().setHTML("pull down");
    view.getSouthboundPullHeader().setHTML("pull down");

    PullArrowStandardHandler headerHandler =
        new PullArrowStandardHandler(view.getNorthboundPullHeader(), view.getNorthboundPullPanel());

    headerHandler.setErrorText("Error");
    headerHandler.setLoadingText("Loading");
    headerHandler.setNormalText("pull down");
    headerHandler.setPulledText("release to load");
    headerHandler.setPullActionHandler(
        new PullActionHandler() {

          @Override
          public void onPullAction(final AsyncCallback<Void> callback) {

            new Timer() {

              @Override
              public void run() {
                createBorderWaitList(view);
                view.refresh();
                callback.onSuccess(null);
              }
            }.schedule(1);
          }
        });

    PullArrowStandardHandler headerHandler2 =
        new PullArrowStandardHandler(view.getSouthboundPullHeader(), view.getSouthboundPullPanel());

    headerHandler2.setErrorText("Error");
    headerHandler2.setLoadingText("Loading");
    headerHandler2.setNormalText("pull down");
    headerHandler2.setPulledText("release to load");
    headerHandler2.setPullActionHandler(
        new PullActionHandler() {

          @Override
          public void onPullAction(final AsyncCallback<Void> callback) {

            new Timer() {

              @Override
              public void run() {
                createBorderWaitList(view);
                view.refresh();
                callback.onSuccess(null);
              }
            }.schedule(1);
          }
        });

    view.setNorthboundHeaderPullHandler(headerHandler);
    view.setSouthboundHeaderPullHandler(headerHandler2);

    buildRouteIcons();
    createBorderWaitList(view);
    panel.setWidget(view);
  }
 @Override
 public void onStop() {
   view.setPresenter(null);
 }