Package org.onebusaway.webapp.gwt.tripplanner_library.view

Source Code of org.onebusaway.webapp.gwt.tripplanner_library.view.TripPlanResultTablePresenter

/**
* Copyright (C) 2011 Brian Ferris <bdferris@onebusaway.org>
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*         http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.onebusaway.webapp.gwt.tripplanner_library.view;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.onebusaway.transit_data.model.tripplanning.ItineraryBean;
import org.onebusaway.transit_data.model.tripplanning.LegBean;
import org.onebusaway.webapp.gwt.common.model.ModelListener;
import org.onebusaway.webapp.gwt.tripplanner_library.model.TripPlanModel;
import org.onebusaway.webapp.gwt.tripplanner_library.resources.TripPlannerCssResource;
import org.onebusaway.webapp.gwt.tripplanner_library.resources.TripPlannerResources;

import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.i18n.client.DateTimeFormat;
import com.google.gwt.maps.client.MapWidget;
import com.google.gwt.maps.client.overlay.Overlay;
import com.google.gwt.resources.client.DataResource;
import com.google.gwt.user.client.ui.Anchor;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.Grid;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.Widget;

public class TripPlanResultTablePresenter implements
    ModelListener<TripPlanModel> {

  private static TripPlannerCssResource _css = TripPlannerResources.INSTANCE.getCss();

  private DateTimeFormat _timeFormat = DateTimeFormat.getShortTimeFormat();

  private SingleTripPresenter _singleTripPresenter = new SingleTripPresenter();

  private TripBeanMapPresenter _tripMapPresenter = new TripBeanMapPresenter();

  private FlowPanel _panel = new FlowPanel();

  private MapWidget _map;

  private List<Overlay> _overlays = new ArrayList<Overlay>();

  private TripPlanModel _model;

  public TripPlanResultTablePresenter() {
    _panel.addStyleName(_css.tripPlanResultsTable());
    _panel.add(_singleTripPresenter.getWidget());
  }

  public void setMapWidget(MapWidget map) {
    _map = map;
    _tripMapPresenter.setMapWidget(_map);
  }

  public Widget getWidget() {
    return _panel;
  }

  public void clear() {
    _panel.setVisible(false);
    _panel.clear();
    for (Overlay overlay : _overlays)
      _map.removeOverlay(overlay);
  }

  public void handleUpdate(TripPlanModel model) {

    _model = model;
    _panel.clear();
    _panel.setVisible(true);

    List<ItineraryBean> trips = model.getTrips();
    int selectedIndex = model.getSelectedIndex();

    Grid grid = new Grid(trips.size(), 4);
    _panel.add(grid);

    for (int index = 0; index < trips.size(); index++) {
      ItineraryBean trip = trips.get(index);
      Date start = new Date(trip.getStartTime());
      Date end = new Date(trip.getEndTime());

      String timeStartAndEndLabel = _timeFormat.format(start) + " - "
          + _timeFormat.format(end);
      String durationLabel = TripBeanSupport.getDurationLabel(end.getTime()
          - start.getTime());
      Widget tripTypeWidget = getTripTypeWidget(trip);

      ClickHandlerImpl handler = new ClickHandlerImpl(index);

      Anchor anchor = new Anchor(Integer.toString(index + 1) + ":");
      anchor.addClickHandler(handler);

      grid.setWidget(index, 0, anchor);
      grid.setText(index, 1, timeStartAndEndLabel);
      grid.setText(index, 2, durationLabel);
      grid.setWidget(index, 3, tripTypeWidget);

      if (index == selectedIndex) {
        displayTrip(trip, index);
        grid.getRowFormatter().addStyleName(index, "Selected");
      }

      _panel.add(_singleTripPresenter.getWidget());
    }
  }

  private Widget getTripTypeWidget(ItineraryBean trip) {

    FlowPanel panel = new FlowPanel();
    TripPlannerResources resources = TripPlannerResources.INSTANCE;

    for (LegBean segment : trip.getLegs()) {
      if( segment.getMode().equals("walk") ) {
        if (segment.getDistance() > 400) {
          DataResource walkIcon = resources.getWalkTripTypeIcon();
          Image image = new Image(walkIcon.getUrl());
          panel.add(image);
        }
      }
      else if( segment.getMode().equals("transit")) {
        DataResource busIcon = resources.getBusTripTypeIcon();
        Image image = new Image(busIcon.getUrl());
        panel.add(image);
      }
    }

    return panel;
  }

  private void displayTrip(ItineraryBean trip, int index) {

    _singleTripPresenter.displayTrip(trip, index + 1, "your destination");

    for (Overlay overlay : _overlays)
      _map.removeOverlay(overlay);
    _overlays.clear();
    _tripMapPresenter.displayTrip(trip, _overlays);
  }

  public void onFailure(Throwable ex) {
    System.err.println("error in directions handler");
    ex.printStackTrace();
  }

  /*****************************************************************************
   *
   ****************************************************************************/

  private class ClickHandlerImpl implements ClickHandler {

    private int _index;

    public ClickHandlerImpl(int index) {
      _index = index;
    }

    public void onClick(ClickEvent arg0) {
      if (_model != null)
        _model.setSelectedIndex(_index);
    }
  }
}
TOP

Related Classes of org.onebusaway.webapp.gwt.tripplanner_library.view.TripPlanResultTablePresenter

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.