/* * Copyright (c) 2016 Washington State Department of Transportation * * 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 3 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, see <http://www.gnu.org/licenses/> * */ package gov.wa.wsdot.mobile.client; import com.google.gwt.core.client.GWT; import com.google.gwt.place.shared.PlaceController; import com.google.web.bindery.event.shared.EventBus; import com.google.web.bindery.event.shared.SimpleEventBus; import com.googlecode.gwtphonegap.client.PhoneGap; import gov.wa.wsdot.mobile.client.activities.about.AboutView; import gov.wa.wsdot.mobile.client.activities.about.AboutViewGwtImpl; import gov.wa.wsdot.mobile.client.activities.alert.AlertView; import gov.wa.wsdot.mobile.client.activities.alert.AlertViewGwtImpl; import gov.wa.wsdot.mobile.client.activities.amtrakcascades.AmtrakCascadesView; import gov.wa.wsdot.mobile.client.activities.amtrakcascades.AmtrakCascadesViewGwtImpl; import gov.wa.wsdot.mobile.client.activities.amtrakcascades.schedules.AmtrakCascadesSchedulesView; import gov.wa.wsdot.mobile.client.activities.amtrakcascades.schedules.AmtrakCascadesSchedulesViewGwtImpl; import gov.wa.wsdot.mobile.client.activities.amtrakcascades.schedules.details.AmtrakCascadesSchedulesDetailsView; import gov.wa.wsdot.mobile.client.activities.amtrakcascades.schedules.details.AmtrakCascadesSchedulesDetailsViewGwtImpl; import gov.wa.wsdot.mobile.client.activities.borderwait.BorderWaitView; import gov.wa.wsdot.mobile.client.activities.borderwait.BorderWaitViewGwtImpl; import gov.wa.wsdot.mobile.client.activities.callout.CalloutView; import gov.wa.wsdot.mobile.client.activities.callout.CalloutViewGwtImpl; import gov.wa.wsdot.mobile.client.activities.camera.CameraView; import gov.wa.wsdot.mobile.client.activities.camera.CameraViewGwtImpl; import gov.wa.wsdot.mobile.client.activities.ferries.FerriesView; import gov.wa.wsdot.mobile.client.activities.ferries.FerriesViewGwtImpl; import gov.wa.wsdot.mobile.client.activities.ferries.schedules.FerriesRouteSchedulesView; import gov.wa.wsdot.mobile.client.activities.ferries.schedules.FerriesRouteSchedulesViewGwtImpl; import gov.wa.wsdot.mobile.client.activities.ferries.schedules.departures.FerriesRouteDeparturesView; import gov.wa.wsdot.mobile.client.activities.ferries.schedules.departures.FerriesRouteDeparturesViewGwtImpl; import gov.wa.wsdot.mobile.client.activities.ferries.schedules.sailings.FerriesRouteAlertDetailsView; import gov.wa.wsdot.mobile.client.activities.ferries.schedules.sailings.FerriesRouteAlertDetailsViewGwtImpl; import gov.wa.wsdot.mobile.client.activities.ferries.schedules.sailings.FerriesRouteSailingsView; import gov.wa.wsdot.mobile.client.activities.ferries.schedules.sailings.FerriesRouteSailingsViewGwtImpl; import gov.wa.wsdot.mobile.client.activities.ferries.vesselwatch.VesselWatchMapView; import gov.wa.wsdot.mobile.client.activities.ferries.vesselwatch.VesselWatchMapViewGwtImpl; import gov.wa.wsdot.mobile.client.activities.ferries.vesselwatch.location.GoToFerriesLocationView; import gov.wa.wsdot.mobile.client.activities.ferries.vesselwatch.location.GoToFerriesLocationViewGwtImpl; import gov.wa.wsdot.mobile.client.activities.ferries.vesselwatch.vesseldetails.VesselDetailsView; import gov.wa.wsdot.mobile.client.activities.ferries.vesselwatch.vesseldetails.VesselDetailsViewGwtImpl; import gov.wa.wsdot.mobile.client.activities.home.HomeView; import gov.wa.wsdot.mobile.client.activities.home.HomeViewGwtImpl; import gov.wa.wsdot.mobile.client.activities.mountainpasses.MountainPassDetailsView; import gov.wa.wsdot.mobile.client.activities.mountainpasses.MountainPassDetailsViewGwtImpl; import gov.wa.wsdot.mobile.client.activities.mountainpasses.MountainPassesView; import gov.wa.wsdot.mobile.client.activities.mountainpasses.MountainPassesViewGwtImpl; import gov.wa.wsdot.mobile.client.activities.socialmedia.SocialMediaView; import gov.wa.wsdot.mobile.client.activities.socialmedia.SocialMediaViewGwtImpl; import gov.wa.wsdot.mobile.client.activities.socialmedia.blogger.BlogDetailsView; import gov.wa.wsdot.mobile.client.activities.socialmedia.blogger.BlogDetailsViewGwtImpl; import gov.wa.wsdot.mobile.client.activities.socialmedia.blogger.BlogView; import gov.wa.wsdot.mobile.client.activities.socialmedia.blogger.BlogViewGwtImpl; import gov.wa.wsdot.mobile.client.activities.socialmedia.facebook.FacebookView; import gov.wa.wsdot.mobile.client.activities.socialmedia.facebook.FacebookViewGwtImpl; import gov.wa.wsdot.mobile.client.activities.socialmedia.news.NewsDetailsView; import gov.wa.wsdot.mobile.client.activities.socialmedia.news.NewsDetailsViewGwtImpl; import gov.wa.wsdot.mobile.client.activities.socialmedia.news.NewsView; import gov.wa.wsdot.mobile.client.activities.socialmedia.news.NewsViewGwtImpl; import gov.wa.wsdot.mobile.client.activities.socialmedia.twitter.TwitterView; import gov.wa.wsdot.mobile.client.activities.socialmedia.twitter.TwitterViewGwtImpl; import gov.wa.wsdot.mobile.client.activities.socialmedia.youtube.YouTubeDetailsView; import gov.wa.wsdot.mobile.client.activities.socialmedia.youtube.YouTubeDetailsViewGwtImpl; import gov.wa.wsdot.mobile.client.activities.socialmedia.youtube.YouTubeView; import gov.wa.wsdot.mobile.client.activities.socialmedia.youtube.YouTubeViewGwtImpl; import gov.wa.wsdot.mobile.client.activities.tollrates.TollRatesView; import gov.wa.wsdot.mobile.client.activities.tollrates.TollRatesViewGwtImpl; import gov.wa.wsdot.mobile.client.activities.trafficmap.TrafficMapView; import gov.wa.wsdot.mobile.client.activities.trafficmap.TrafficMapViewGwtImpl; import gov.wa.wsdot.mobile.client.activities.trafficmap.menu.TrafficMenuView; import gov.wa.wsdot.mobile.client.activities.trafficmap.menu.TrafficMenuViewGwtImpl; import gov.wa.wsdot.mobile.client.activities.trafficmap.menu.expresslanes.SeattleExpressLanesView; import gov.wa.wsdot.mobile.client.activities.trafficmap.menu.expresslanes.SeattleExpressLanesViewGwtImpl; import gov.wa.wsdot.mobile.client.activities.trafficmap.menu.location.GoToLocationView; import gov.wa.wsdot.mobile.client.activities.trafficmap.menu.location.GoToLocationViewGwtImpl; import gov.wa.wsdot.mobile.client.activities.trafficmap.menu.traveltimes.TravelTimeDetailsView; import gov.wa.wsdot.mobile.client.activities.trafficmap.menu.traveltimes.TravelTimeDetailsViewGwtImpl; import gov.wa.wsdot.mobile.client.activities.trafficmap.menu.traveltimes.TravelTimesView; import gov.wa.wsdot.mobile.client.activities.trafficmap.menu.traveltimes.TravelTimesViewGwtImpl; import gov.wa.wsdot.mobile.client.activities.trafficmap.restarea.RestAreaView; import gov.wa.wsdot.mobile.client.activities.trafficmap.restarea.RestAreaViewGwtImpl; import gov.wa.wsdot.mobile.client.activities.trafficmap.trafficincidents.TrafficAlertsView; import gov.wa.wsdot.mobile.client.activities.trafficmap.trafficincidents.TrafficAlertsViewGwtImpl; import gov.wa.wsdot.mobile.client.plugins.accessibility.Accessibility; import gov.wa.wsdot.mobile.client.plugins.analytics.Analytics; import gov.wa.wsdot.mobile.client.service.WSDOTDataService; public class ClientFactoryImpl implements ClientFactory { private EventBus eventBus; private PlaceController placeController; private HomeView homeView; private WSDOTDataService dbService; private AboutViewGwtImpl aboutView; private FerriesViewGwtImpl ferriesView; private SocialMediaViewGwtImpl socialMediaView; private MountainPassesViewGwtImpl mountainPassesView; private MountainPassDetailsViewGwtImpl mountainPassDetailsView; private TrafficMapViewGwtImpl trafficMapView; private RestAreaViewGwtImpl restAreaView; private TollRatesViewGwtImpl tollRatesView; private BorderWaitViewGwtImpl borderWaitView; private TravelTimesViewGwtImpl travelTimesView; private TrafficMenuView trafficMenuView; private GoToLocationViewGwtImpl goToLocationView; private BlogViewGwtImpl blogView; private FacebookViewGwtImpl facebookView; private TwitterViewGwtImpl twitterView; private YouTubeViewGwtImpl youTubeView; private NewsViewGwtImpl newsView; private NewsDetailsViewGwtImpl newsDetailsView; private FerriesRouteSchedulesViewGwtImpl ferriesRouteSchedulesView; private FerriesRouteSailingsViewGwtImpl ferriesRouteSailingsView; private FerriesRouteDeparturesViewGwtImpl ferriesRouteDeparturesView; private CameraViewGwtImpl cameraView; private AlertViewGwtImpl alertView; private PhoneGap phoneGap; private SeattleExpressLanesViewGwtImpl seattleExpressLanesView; private TrafficAlertsViewGwtImpl seattleTrafficAlertsView; private GoToFerriesLocationViewGwtImpl ferriesGoToLocationView; private VesselWatchMapViewGwtImpl vesselWatchMapView; private VesselDetailsViewGwtImpl vesselDetailsView; private BlogDetailsViewGwtImpl blogDetailsView; private YouTubeDetailsViewGwtImpl youTubeDetailsView; private TravelTimeDetailsViewGwtImpl travelTimeDetailsView; private FerriesRouteAlertDetailsViewGwtImpl ferriesRouteAlertDetailsView; private AmtrakCascadesViewGwtImpl amtrakCascadesView; private AmtrakCascadesSchedulesViewGwtImpl amtrakCascadesSchedulesView; private AmtrakCascadesSchedulesDetailsViewGwtImpl amtrakCascadesDeparturesView; private CalloutViewGwtImpl calloutView; private Analytics analytics; private Accessibility accessibility; public ClientFactoryImpl() { eventBus = new SimpleEventBus(); placeController = new PlaceController(eventBus); homeView = new HomeViewGwtImpl(); dbService = GWT.create(WSDOTDataService.class); } @Override public HomeView getHomeView() { /** * Instantiating a new View is a temporary measure until * I can figure out why Views which use tabs throw NPEs * on a device configuration change. */ homeView = new HomeViewGwtImpl(); return homeView; } @Override public EventBus getEventBus() { return eventBus; } @Override public PlaceController getPlaceController() { return placeController; } @Override public WSDOTDataService getDbService() { return dbService; } public void setPhoneGap(PhoneGap phoneGap) { this.phoneGap = phoneGap; } @Override public PhoneGap getPhoneGap() { return phoneGap; } public void setAnalytics(Analytics analytics) { this.analytics = analytics; } @Override public Analytics getAnalytics() { return analytics; } @Override public AboutView getAboutView() { if (aboutView == null) { aboutView = new AboutViewGwtImpl(); } return aboutView; } @Override public FerriesView getFerriesView() { if (ferriesView == null) { ferriesView = new FerriesViewGwtImpl(); } return ferriesView; } @Override public SocialMediaView getSocialMediaView() { if (socialMediaView == null) { socialMediaView = new SocialMediaViewGwtImpl(); } return socialMediaView; } @Override public MountainPassesView getMountainPassesView() { if (mountainPassesView == null) { mountainPassesView = new MountainPassesViewGwtImpl(); } return mountainPassesView; } @Override public MountainPassDetailsView getMountainPassDetailsView() { /** * Because we are modifying the layout of the view by removing tabs * if there is no weather forecast or cameras we need to re-create * it each time. Otherwise we try and reference tabs which no longer * exist in the layout. */ mountainPassDetailsView = new MountainPassDetailsViewGwtImpl(); return mountainPassDetailsView; } @Override public TrafficMapView getTrafficMapView() { if (trafficMapView == null) { trafficMapView = new TrafficMapViewGwtImpl(); } return trafficMapView; } @Override public RestAreaView getRestAreaView() { if (restAreaView == null) { restAreaView = new RestAreaViewGwtImpl(); } return restAreaView; } @Override public TrafficMenuView getTrafficMenuView() { if (trafficMenuView == null) { trafficMenuView = new TrafficMenuViewGwtImpl(); } return trafficMenuView; } @Override public TollRatesView getTollRatesView() { /** * Instantiating a new View is a temporary measure until * I can figure out why Views which use tabs throw NPEs * on a device configuration change. */ tollRatesView = new TollRatesViewGwtImpl(); return tollRatesView; } @Override public BorderWaitView getBorderWaitView() { /** * Instantiating a new View is a temporary measure until * I can figure out why Views which use tabs throw NPEs * on a device configuration change. */ borderWaitView = new BorderWaitViewGwtImpl(); return borderWaitView; } @Override public TravelTimesView getTravelTimesView() { if (travelTimesView == null) { travelTimesView = new TravelTimesViewGwtImpl(); } return travelTimesView; } @Override public GoToLocationView getGoToLocationView() { if (goToLocationView == null) { goToLocationView = new GoToLocationViewGwtImpl(); } return goToLocationView; } @Override public BlogView getBlogView() { if (blogView == null) { blogView = new BlogViewGwtImpl(); } return blogView; } @Override public FacebookView getFacebookView() { if (facebookView == null) { facebookView = new FacebookViewGwtImpl(); } return facebookView; } @Override public TwitterView getTwitterView() { if (twitterView == null) { twitterView = new TwitterViewGwtImpl(); } return twitterView; } @Override public YouTubeView getYouTubeView() { if (youTubeView == null) { youTubeView = new YouTubeViewGwtImpl(); } return youTubeView; } @Override public NewsView getNewsView() { if (newsView == null) { newsView = new NewsViewGwtImpl(); } return newsView; } @Override public NewsDetailsView getNewsDetailsView() { if (newsDetailsView == null) { newsDetailsView = new NewsDetailsViewGwtImpl(); } return newsDetailsView; } @Override public FerriesRouteSchedulesView getFerriesRouteSchedulesView() { if (ferriesRouteSchedulesView == null) { ferriesRouteSchedulesView = new FerriesRouteSchedulesViewGwtImpl(); } return ferriesRouteSchedulesView; } @Override public FerriesRouteSailingsView getFerriesRouteSailingsView() { /** * Instantiating a new View is a temporary measure until * I can figure out why Views which use tabs throw NPEs * on a device configuration change. */ ferriesRouteSailingsView = new FerriesRouteSailingsViewGwtImpl(); return ferriesRouteSailingsView; } @Override public FerriesRouteDeparturesView getFerriesRouteDeparturesView() { ferriesRouteDeparturesView = new FerriesRouteDeparturesViewGwtImpl(); return ferriesRouteDeparturesView; } @Override public CameraView getCameraView() { /** * Because we are modifying the layout of the view by removing tabs * if there is no video component we need to re-create * it each time. Otherwise we try and reference tabs which no longer * exist in the layout. */ cameraView = new CameraViewGwtImpl(); return cameraView; } @Override public AlertView getAlertView() { if (alertView == null) { alertView = new AlertViewGwtImpl(); } return alertView; } @Override public SeattleExpressLanesView getSeattleExpressLanesView() { if (seattleExpressLanesView == null) { seattleExpressLanesView = new SeattleExpressLanesViewGwtImpl(); } return seattleExpressLanesView; } @Override public TrafficAlertsView getTrafficAlertsView() { if (seattleTrafficAlertsView == null) { seattleTrafficAlertsView = new TrafficAlertsViewGwtImpl(); } return seattleTrafficAlertsView; } @Override public GoToFerriesLocationView getFerriesGoToLocationView() { if (ferriesGoToLocationView == null) { ferriesGoToLocationView = new GoToFerriesLocationViewGwtImpl(); } return ferriesGoToLocationView; } @Override public VesselWatchMapView getVesselWatchMapView() { if (vesselWatchMapView == null) { vesselWatchMapView = new VesselWatchMapViewGwtImpl(); } return vesselWatchMapView; } @Override public VesselDetailsView getVesselDetailsView() { if (vesselDetailsView == null) { vesselDetailsView = new VesselDetailsViewGwtImpl(); } return vesselDetailsView; } @Override public BlogDetailsView getBlogDetailsView() { if (blogDetailsView == null) { blogDetailsView = new BlogDetailsViewGwtImpl(); } return blogDetailsView; } @Override public YouTubeDetailsView getYouTubeDetailsView() { if (youTubeDetailsView == null) { youTubeDetailsView = new YouTubeDetailsViewGwtImpl(); } return youTubeDetailsView; } @Override public TravelTimeDetailsView getTravelTimeDetailsView() { if (travelTimeDetailsView == null) { travelTimeDetailsView = new TravelTimeDetailsViewGwtImpl(); } return travelTimeDetailsView; } @Override public FerriesRouteAlertDetailsView getFerriesRouteAlertDetailsView() { if (ferriesRouteAlertDetailsView == null) { ferriesRouteAlertDetailsView = new FerriesRouteAlertDetailsViewGwtImpl(); } return ferriesRouteAlertDetailsView; } @Override public AmtrakCascadesView getAmtrakCascadesView() { if (amtrakCascadesView == null) { amtrakCascadesView = new AmtrakCascadesViewGwtImpl(); } return amtrakCascadesView; } @Override public AmtrakCascadesSchedulesView getAmtrakCascadesSchedulesView() { if (amtrakCascadesSchedulesView == null) { amtrakCascadesSchedulesView = new AmtrakCascadesSchedulesViewGwtImpl(); } return amtrakCascadesSchedulesView; } @Override public AmtrakCascadesSchedulesDetailsView getAmtrakCascadesDeparturesView() { amtrakCascadesDeparturesView = new AmtrakCascadesSchedulesDetailsViewGwtImpl(); return amtrakCascadesDeparturesView; } @Override public CalloutView getCalloutView() { if (calloutView == null) { calloutView = new CalloutViewGwtImpl(); } return calloutView; } public void setAccessibility(Accessibility accessibility){ this.accessibility = accessibility; } @Override public Accessibility getAccessibility() { return accessibility; } }