package __TOP_LEVEL_PACKAGE__.__SEGMENT_PACKAGE__; import __TOP_LEVEL_PACKAGE__.client.managed.activity.*; import __TOP_LEVEL_PACKAGE__.client.managed.request.ApplicationRequestFactory; import __TOP_LEVEL_PACKAGE__.client.scaffold.gae.GaeHelper; import __TOP_LEVEL_PACKAGE__.client.scaffold.place.*; import __TOP_LEVEL_PACKAGE__.client.scaffold.request.RequestEvent; import com.google.gwt.activity.shared.*; import com.google.gwt.core.client.GWT; import com.google.gwt.dom.client.Document; import com.google.gwt.dom.client.Element; import com.google.gwt.event.shared.EventBus; import com.google.gwt.logging.client.LogConfiguration; import com.google.gwt.place.shared.*; import com.google.web.bindery.requestfactory.shared.LoggingRequest; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.HasConstrainedValue; import com.google.gwt.user.client.ui.RootLayoutPanel; import com.google.inject.Inject; import com.google.web.bindery.requestfactory.gwt.client.RequestFactoryLogHandler; import java.util.ArrayList; import java.util.logging.Level; import java.util.logging.Logger; __GAE_IMPORT__ /** * Application for browsing entities. */ public class ScaffoldDesktopApp extends ScaffoldApp { private static final Logger LOGGER = Logger.getLogger(Scaffold.class.getName()); private final ScaffoldDesktopShell shell; private final ApplicationRequestFactory requestFactory; private final EventBus eventBus; private final PlaceController placeController; private final PlaceHistoryFactory placeHistoryFactory; private final ApplicationMasterActivities applicationMasterActivities; private final ApplicationDetailsActivities applicationDetailsActivities; @Inject public ScaffoldDesktopApp(ScaffoldDesktopShell shell, ApplicationRequestFactory requestFactory, EventBus eventBus, PlaceController placeController, PlaceHistoryFactory placeHistoryFactory, ApplicationMasterActivities applicationMasterActivities, ApplicationDetailsActivities applicationDetailsActivities, GaeHelper gaeHelper) { this.shell = shell; this.requestFactory = requestFactory; this.eventBus = eventBus; this.placeController = placeController; this.placeHistoryFactory = placeHistoryFactory; this.applicationMasterActivities = applicationMasterActivities; this.applicationDetailsActivities = applicationDetailsActivities; } public void run() { /* Add handlers, setup activities */ init(); /* Hide the loading message */ Element loading = Document.get().getElementById("loading"); loading.getParentElement().removeChild(loading); /* And show the user the shell */ RootLayoutPanel.get().add(shell); } private void init() { GWT.setUncaughtExceptionHandler(new GWT.UncaughtExceptionHandler() { public void onUncaughtException(Throwable e) { Window.alert("Error: " + e.getMessage()); LOGGER.log(Level.SEVERE, e.getMessage(), e); } }); if (LogConfiguration.loggingIsEnabled()) { // Add remote logging handler RequestFactoryLogHandler.LoggingRequestProvider provider = new RequestFactoryLogHandler.LoggingRequestProvider() { public LoggingRequest getLoggingRequest() { return requestFactory.loggingRequest(); } }; Logger.getLogger("").addHandler(new RequestFactoryLogHandler(provider, Level.WARNING, new ArrayList<String>())); } RequestEvent.register(eventBus, new RequestEvent.Handler() { // Only show loading status if a request isn't serviced in 250ms. private static final int LOADING_TIMEOUT = 250; public void onRequestEvent(RequestEvent requestEvent) { if (requestEvent.getState() == RequestEvent.State.SENT) { shell.getMole().showDelayed(LOADING_TIMEOUT); } else { shell.getMole().hide(); } } }); CachingActivityMapper cached = new CachingActivityMapper(applicationMasterActivities); ProxyPlaceToListPlace proxyPlaceToListPlace = new ProxyPlaceToListPlace(); ActivityMapper masterActivityMap = new FilteredActivityMapper(proxyPlaceToListPlace, cached); final ActivityManager masterActivityManager = new ActivityManager(masterActivityMap, eventBus); masterActivityManager.setDisplay(shell.getMasterPanel()); ProxyListPlacePicker proxyListPlacePicker = new ProxyListPlacePicker(placeController, proxyPlaceToListPlace); HasConstrainedValue<ProxyListPlace> listPlacePickerView = shell.getPlacesBox(); listPlacePickerView.setAcceptableValues(getTopPlaces()); proxyListPlacePicker.register(eventBus, listPlacePickerView); final ActivityManager detailsActivityManager = new ActivityManager(applicationDetailsActivities, eventBus); detailsActivityManager.setDisplay(shell.getDetailsPanel()); /* Browser history integration */ ScaffoldPlaceHistoryMapper mapper = GWT.create(ScaffoldPlaceHistoryMapper.class); mapper.setFactory(placeHistoryFactory); PlaceHistoryHandler placeHistoryHandler = new PlaceHistoryHandler(mapper); if (getTopPlaces().iterator().hasNext()) { ProxyListPlace defaultPlace = getTopPlaces().iterator().next(); placeHistoryHandler.register(placeController, eventBus, defaultPlace); placeHistoryHandler.handleCurrentHistory(); } } }