com.mecatran.otp.gwt.client.view.PlannerWidgetImpl.java Source code

Java tutorial

Introduction

Here is the source code for com.mecatran.otp.gwt.client.view.PlannerWidgetImpl.java

Source

/* -------------------------------------------------------------------------
OpenTripPlanner GWT Client
Copyright (C) 2015 Mecatran - info@mecatran.com
    
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
    
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.
    
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
   ------------------------------------------------------------------------- */
package com.mecatran.otp.gwt.client.view;

import java.util.Date;
import java.util.Map;
import java.util.Set;

import com.google.gwt.dom.client.Style.Overflow;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.DeckLayoutPanel;
import com.google.gwt.user.client.ui.DockLayoutPanel.Direction;
import com.google.gwt.user.client.ui.SplitLayoutPanel;
import com.google.gwt.user.client.ui.Widget;
import com.mecatran.otp.gwt.client.model.AlertBean;
import com.mecatran.otp.gwt.client.model.ItineraryBean;
import com.mecatran.otp.gwt.client.model.LocationBean;
import com.mecatran.otp.gwt.client.model.ModeCapabilitiesBean;
import com.mecatran.otp.gwt.client.model.POIBean;
import com.mecatran.otp.gwt.client.model.PlanRequestBean;
import com.mecatran.otp.gwt.client.model.TransportMode;
import com.mecatran.otp.gwt.client.model.Wgs84BoundsBean;
import com.mecatran.otp.gwt.client.model.Wgs84LatLonBean;
import com.mecatran.otp.gwt.client.proxies.GeocoderProxy;
import com.mecatran.otp.gwt.client.proxies.POISource;
import com.mecatran.otp.gwt.client.view.ItineraryWidget.ItineraryListener;
import com.mecatran.otp.gwt.client.view.PlannerMapWidget.MapListener;
import com.mecatran.otp.gwt.client.view.PrintWidget.PrintWidgetListener;

/**
 * This default implementation implement a screen widget.
 * 
 */
public class PlannerWidgetImpl extends Composite
        implements PlannerWidget, PrintWidgetListener, ItineraryListener, MapListener {

    private PlannerFormWidget plannerFormWidget;
    private PlannerMapWidget plannerMapWidget;
    private AlertStackWidget alertStackWidget;
    private ItineraryStackWidget itineraryStackWidget;
    private LeftPanelWidget leftPanelWidget;
    private ItineraryWidget selectedItineraryWidget;

    private SplitLayoutPanel screenWidget;
    private DeckLayoutPanel rootPanel;

    private PlannerWidgetListener plannerWidgetListener;
    private PrintWidgetListener printWidgetListener;

    public PlannerWidgetImpl() {
        rootPanel = new DeckLayoutPanel();

        // Screen interaction widget
        screenWidget = new SplitLayoutPanel() {
            @Override
            public void onResize() {
                super.onResize();
                if (plannerMapWidget != null)
                    plannerMapWidget.updateSize();
            }
        };
        screenWidget.setSize("100%", "100%");
        selectedItineraryWidget = null;

        plannerMapWidget = new OpenLayersPlannerMapWidget();
        plannerMapWidget.setMapListener(this);
        plannerFormWidget = new PlannerFormWidget();
        plannerFormWidget.setPlannerWidget(this);
        itineraryStackWidget = new ItineraryStackWidget();
        alertStackWidget = new AlertStackWidget();

        // Firefox/Opera hack: no scroll panel...
        boolean useScrollPanel = false;
        leftPanelWidget = new LeftPanelWidget(plannerFormWidget, itineraryStackWidget, alertStackWidget,
                useScrollPanel);
        screenWidget.insert(leftPanelWidget, Direction.WEST, 300, null);
        if (!useScrollPanel) {
            leftPanelWidget.getElement().getParentElement().getStyle().setOverflow(Overflow.AUTO);
        }
        screenWidget.insert(plannerMapWidget.getAsWidget(), Direction.CENTER, 0, null);
        rootPanel.add(screenWidget);
        rootPanel.showWidget(screenWidget);
        rootPanel.setSize("100%", "100%");

        initWidget(rootPanel);
    }

    @Override
    public void setModeCapabilities(ModeCapabilitiesBean modeCapabilities) {
        plannerFormWidget.setModeCapabilities(modeCapabilities);
    }

    @Override
    public void onItineraryCloseButtonClicked(ItineraryWidget itineraryWidget) {
        itineraryStackWidget.removeItineraryWidget(itineraryWidget);
        plannerWidgetListener.onItineraryRemoved(itineraryWidget.getItinerary());
        plannerWidgetListener.onItineraryHover(null);
        if (itineraryWidget == selectedItineraryWidget) {
            plannerMapWidget.showItineraryOnMap(null);
            selectedItineraryWidget = null;
        }
    }

    @Override
    public void onItineraryPinButtonClicked(ItineraryWidget itineraryWidget, boolean pinned) {
        itineraryWidget.setPinned(pinned);
        plannerWidgetListener.onItineraryPinned(itineraryWidget.getItinerary(), itineraryWidget.isPinned());
    }

    @Override
    public void onItineraryPrintButtonClicked(ItineraryWidget itineraryWidget) {
        plannerWidgetListener.onItineraryPrintRequest(itineraryWidget.getItinerary());
    }

    @Override
    public void onItineraryClicked(ItineraryWidget itineraryWidget) {
        selectItinerary(itineraryWidget);
    }

    @Override
    public void onItineraryHover(ItineraryWidget itineraryWidget, boolean start) {
        if (start)
            plannerWidgetListener.onItineraryHover(itineraryWidget.getItinerary());
        else
            plannerWidgetListener.onItineraryHover(null);
    }

    @Override
    public void onItineraryStepClicked(String instructionsHtml, Wgs84LatLonBean location) {
        plannerMapWidget.highlightItineraryStep(instructionsHtml, location);
    }

    @Override
    public void onStartPointSelected(Wgs84LatLonBean position) {
        plannerWidgetListener.onStartPointSelected(position);
    }

    @Override
    public void onEndPointSelected(Wgs84LatLonBean position) {
        plannerWidgetListener.onEndPointSelected(position);
    }

    @Override
    public Widget getAsWidget() {
        return this;
    }

    @Override
    public void setPlannerWidgetListener(PlannerWidgetListener plannerWidgetListener) {
        this.plannerWidgetListener = plannerWidgetListener;
        plannerFormWidget.setPlannerWidgetListener(plannerWidgetListener);
    }

    @Override
    public void setGeocoderProxy(GeocoderProxy geocoderProxy) {
        plannerFormWidget.setGeocoderProxy(geocoderProxy);
    }

    @Override
    public void setBounds(Wgs84BoundsBean bounds) {
        plannerMapWidget.setBounds(bounds);
    }

    @Override
    public void addItinerary(ItineraryBean itinerary, boolean autoSelect) {
        ItineraryWidget itineraryWidget = new ItineraryWidget(itinerary, this);
        itineraryStackWidget.addItineraryWidget(itineraryWidget);
        if (autoSelect)
            selectItinerary(itineraryWidget);
    }

    @Override
    public void clearItineraries() {
        itineraryStackWidget.removeAllUnpinned();
    }

    @Override
    public void showItineraryOnMap(ItineraryBean itinerary, boolean preview) {
        if (preview)
            plannerMapWidget.previewItineraryOnMap(itinerary);
        else
            plannerMapWidget.showItineraryOnMap(itinerary);
    }

    @Override
    public void unselectItinerary() {
        if (selectedItineraryWidget != null) {
            selectedItineraryWidget.setSelected(false);
            selectedItineraryWidget = null;
            plannerMapWidget.showItineraryOnMap(null);
        }
    }

    @Override
    public void showError(String errorMessage) {
        Window.alert(errorMessage);
    }

    @Override
    public void setBusy(boolean busy) {
        plannerFormWidget.setBusy(busy);
    }

    @Override
    public void setStartLocation(LocationBean location, boolean autoPan) {
        plannerFormWidget.setStartLocation(location);
        plannerMapWidget.updateDeparturePosition(location.getLocation(), autoPan);
    }

    @Override
    public void setEndLocation(LocationBean location, boolean autoPan) {
        plannerFormWidget.setEndLocation(location);
        plannerMapWidget.updateArrivalPosition(location.getLocation(), autoPan);
    }

    @Override
    public void previewLocation(LocationBean location) {
        plannerMapWidget.previewLocation(location);
    }

    @Override
    public void setDateDeparture(boolean dateDeparture) {
        plannerFormWidget.setDateDeparture(dateDeparture);
    }

    @Override
    public void setDate(Date date) {
        plannerFormWidget.setDateTime(date);
    }

    @Override
    public void setModes(Set<TransportMode> modes) {
        plannerFormWidget.setModes(modes);
    }

    @Override
    public void setWheelchairAccessible(boolean wheelchairAccessible) {
        plannerFormWidget.setWheelchairAccessible(wheelchairAccessible);
    }

    @Override
    public void focusDeparture() {
        unselectItinerary();
        plannerMapWidget.focusDeparture();
    }

    @Override
    public void focusArrival() {
        unselectItinerary();
        plannerMapWidget.focusArrival();
    }

    @Override
    public PlanRequestBean getPlanRequestBean() {
        return plannerFormWidget.getPlanRequestBean();
    }

    @Override
    public void publishGeneralAlert(AlertBean alert) {
        AlertWidget alertWidget = new AlertWidget(alert);
        alertWidget.setStyleName("general-alert");
        alertStackWidget.addAlert(alertWidget);
    }

    @Override
    public void updatePOIs(POISource source, Map<String, POIBean> pois) {
        plannerMapWidget.updatePOIs(source, pois);
    }

    @Override
    public void switchMapBackground(Set<TransportMode> modes) {
        plannerMapWidget.switchMapBackground(modes);
    }

    private void selectItinerary(ItineraryWidget itineraryWidget) {
        if (itineraryWidget == selectedItineraryWidget)
            return;
        if (selectedItineraryWidget != null) {
            selectedItineraryWidget.setSelected(false);
        }
        selectedItineraryWidget = itineraryWidget;
        selectedItineraryWidget.setSelected(true);
        plannerWidgetListener.onItinerarySelected(itineraryWidget.getItinerary());
    }

    @Override
    public void onPrintDone() {
        // Delegate
        rootPanel.showWidget(screenWidget);
        printWidgetListener.onPrintDone();
    }

}