/** * 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); } } }