// Copyright 2012 Google Inc. All Rights Reserved. // // 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 com.google.collide.client; import com.google.collide.client.communication.FrontendApi; import com.google.collide.client.communication.MessageFilter; import com.google.collide.client.communication.PushChannel; import com.google.collide.client.search.awesomebox.AwesomeBoxModel; import com.google.collide.client.search.awesomebox.host.AwesomeBoxComponentHostModel; import com.google.collide.client.status.StatusManager; import com.google.collide.client.util.UserActivityManager; import com.google.collide.client.util.WindowUnloadingController; import com.google.collide.client.util.dom.eventcapture.KeyBindings; import com.google.common.annotations.VisibleForTesting; import com.google.gwt.core.client.GWT; import com.google.gwt.core.client.GWT.UncaughtExceptionHandler; /** * Application context object that exposes getters for our PushChannel and our Event Bus. * */ public class AppContext { // This is static final for now, but could be more flexible later. public static final String GWT_ROOT = "gwt_root"; public static AppContext create() { return new AppContext(); } private final KeyBindings keyBindings; /** * Object for making calls to the frontend api. */ private final FrontendApi frontendApi; private final Resources resources = GWT.create(Resources.class); /** * For directly handling messages/data sent to the client from the frontend. */ private final MessageFilter messageFilter; private final StatusManager statusManager; private final UncaughtExceptionHandler uncaughtExceptionHandler; private final AwesomeBoxModel awesomeBoxModel; private final AwesomeBoxComponentHostModel awesomeBoxComponentHostModel; private final UserActivityManager userActivityManager; private final WindowUnloadingController windowUnloadingController; private final PushChannel pushChannel; @VisibleForTesting public AppContext() { // Things that depend on nothing this.keyBindings = new KeyBindings(); this.statusManager = new StatusManager(); this.messageFilter = new MessageFilter(); this.awesomeBoxModel = new AwesomeBoxModel(); this.awesomeBoxComponentHostModel = new AwesomeBoxComponentHostModel(); this.userActivityManager = new UserActivityManager(); this.windowUnloadingController = new WindowUnloadingController(); // Things that depend on message filter/frontendApi/statusManager this.pushChannel = PushChannel.create(messageFilter, statusManager); this.frontendApi = FrontendApi.create(pushChannel, statusManager); this.uncaughtExceptionHandler = new ExceptionHandler(messageFilter, frontendApi, statusManager); } public KeyBindings getKeyBindings() { return keyBindings; } public AwesomeBoxModel getAwesomeBoxModel() { return awesomeBoxModel; } public AwesomeBoxComponentHostModel getAwesomeBoxComponentHostModel() { return awesomeBoxComponentHostModel; } public UserActivityManager getUserActivityManager() { return userActivityManager; } /** * @return the frontendRequester */ public FrontendApi getFrontendApi() { return frontendApi; } /** * @return the messageFilter */ public MessageFilter getMessageFilter() { return messageFilter; } /** * @return the push channel API */ public PushChannel getPushChannel() { return pushChannel; } /** * @return the resources */ public Resources getResources() { return resources; } public StatusManager getStatusManager() { return statusManager; } /** * @return the uncaught exception handler for the app. */ public UncaughtExceptionHandler getUncaughtExceptionHandler() { return uncaughtExceptionHandler; } /** * @return the {@link WindowUnloadingController} for the app. */ public WindowUnloadingController getWindowUnloadingController() { return windowUnloadingController; } }