Merge branch 'master' into bug1562

This commit is contained in:
Axel Uhl committed 2015-01-16 13:09:16 +01:00
commit a550ed4c77
43 files changed
+1147 -297

No files matched your search

@@ -8,19 +8,21 @@ import com.sap.sailing.gwt.autoplay.client.app.AutoPlayAppClientFactory;
import com.sap.sailing.gwt.autoplay.client.app.AutoPlayAppHistoryMapper;
import com.sap.sailing.gwt.common.client.SharedResources;
import com.sap.sailing.gwt.ui.client.RemoteServiceMappingConstants;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sse.gwt.client.EntryPointHelper;
import com.sap.sse.gwt.client.mvp.AbstractEntryPoint;
import com.sap.sse.gwt.client.mvp.AbstractMvpEntryPoint;
public class AutoPlayEntryPoint extends AbstractEntryPoint {
public class AutoPlayEntryPoint extends AbstractMvpEntryPoint<StringMessages> {
public void onModuleLoad() {
@Override
public void doOnModuleLoad() {
AutoPlayAppClientFactory clientFactory = GWT.create(AutoPlayAppClientFactory.class);
EntryPointHelper.registerASyncService((ServiceDefTarget) clientFactory.getSailingService(), RemoteServiceMappingConstants.sailingServiceRemotePath);
EntryPointHelper.registerASyncService((ServiceDefTarget) clientFactory.getMediaService(), RemoteServiceMappingConstants.mediaServiceRemotePath);
AutoPlayAppHistoryMapper applicationHistoryMapper = GWT.create(AutoPlayAppHistoryMapper.class);
onModuleLoad(clientFactory, applicationHistoryMapper, new AutoPlayAppActivityMapper(clientFactory));
initMvp(clientFactory, applicationHistoryMapper, new AutoPlayAppActivityMapper(clientFactory));
SharedResources.INSTANCE.mediaCss().ensureInjected();
SharedResources.INSTANCE.mainCss().ensureInjected();
@@ -28,4 +30,9 @@ public class AutoPlayEntryPoint extends AbstractEntryPoint {
StyleInjector.injectAtEnd("@media (min-width: 25em) { "+SharedResources.INSTANCE.mediumCss().getText()+"}");
StyleInjector.injectAtEnd("@media (min-width: 50em) { "+SharedResources.INSTANCE.largeCss().getText()+"}");
}
@Override
protected StringMessages createStringMessages() {
return GWT.create(StringMessages.class);
}
}
@@ -3,25 +3,17 @@ package com.sap.sailing.gwt.autoplay.client.app;
import com.google.gwt.core.client.GWT;
import com.google.gwt.place.shared.Place;
import com.google.gwt.place.shared.PlaceController;
import com.google.gwt.user.client.rpc.ServiceDefTarget;
import com.google.web.bindery.event.shared.EventBus;
import com.sap.sailing.gwt.autoplay.client.place.start.StartPlace;
import com.sap.sailing.gwt.ui.client.MediaService;
import com.sap.sailing.gwt.ui.client.MediaServiceAsync;
import com.sap.sailing.gwt.ui.client.SailingService;
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
import com.sap.sse.gwt.client.EntryPointHelper;
import com.sap.sse.gwt.client.mvp.ClientFactoryImpl;
import com.sap.sse.security.ui.client.UserManagementService;
import com.sap.sse.security.ui.client.UserManagementServiceAsync;
import com.sap.sse.security.ui.client.UserService;
import com.sap.sse.security.ui.client.SecureClientFactoryImpl;
public abstract class AbstractApplicationClientFactory extends ClientFactoryImpl implements AutoPlayAppClientFactory {
public abstract class AbstractApplicationClientFactory extends SecureClientFactoryImpl implements AutoPlayAppClientFactory {
private final SailingServiceAsync sailingService;
private final MediaServiceAsync mediaService;
private final UserManagementServiceAsync userManagementService;
private final UserService userService;
private final PlaceNavigator navigator;
public AbstractApplicationClientFactory(ApplicationTopLevelView root, EventBus eventBus, PlaceController placeController) {
@@ -29,10 +21,6 @@ public abstract class AbstractApplicationClientFactory extends ClientFactoryImpl
navigator = new PlaceNavigatorImpl(placeController);
sailingService = GWT.create(SailingService.class);
mediaService = GWT.create(MediaService.class);
userManagementService = GWT.create(UserManagementService.class);
EntryPointHelper.registerASyncService((ServiceDefTarget) getUserManagementService(),
com.sap.sse.security.ui.client.RemoteServiceMappingConstants.userManagementServiceRemotePath);
userService = new UserService(userManagementService);
}
@Override
@@ -54,15 +42,4 @@ public abstract class AbstractApplicationClientFactory extends ClientFactoryImpl
public PlaceNavigator getPlaceNavigator() {
return navigator;
}
@Override
public UserManagementServiceAsync getUserManagementService() {
return userManagementService;
}
@Override
public UserService getUserService() {
return userService;
}
}
@@ -7,6 +7,9 @@ import com.google.gwt.user.client.ui.AcceptsOneWidget;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.SimplePanel;
import com.google.gwt.user.client.ui.Widget;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sse.gwt.client.DefaultErrorReporter;
import com.sap.sse.gwt.client.ErrorReporter;
/**
* This is the top-level view of the autoplay application. Every time another presenter wants to reveal itself,
@@ -18,6 +21,8 @@ public class DesktopApplicationView extends Composite implements ApplicationTopL
private static DesktopApplicationViewUiBinder uiBinder = GWT.create(DesktopApplicationViewUiBinder.class);
private static ErrorReporter errorReporter = new DefaultErrorReporter<StringMessages>(StringMessages.INSTANCE);
@UiField
SimplePanel mainContentPanel;
@@ -33,4 +38,9 @@ public class DesktopApplicationView extends Composite implements ApplicationTopL
@Override
public void showLoading(boolean visible) {
}
@Override
public ErrorReporter getErrorReporter() {
return errorReporter;
}
}
@@ -10,12 +10,11 @@ import com.google.gwt.user.client.ui.AcceptsOneWidget;
import com.google.gwt.user.client.ui.RootLayoutPanel;
import com.sap.sailing.gwt.ui.raceboard.RaceBoardViewConfiguration;
import com.sap.sailing.gwt.ui.shared.EventDTO;
import com.sap.sse.gwt.client.ErrorReporter;
import com.sap.sse.gwt.client.mvp.ErrorView;
import com.sap.sse.gwt.client.useragent.UserAgentDetails;
import com.sap.sse.gwt.shared.GwtHttpRequestUtils;
public class PlayerActivity extends AbstractActivity implements ErrorReporter {
public class PlayerActivity extends AbstractActivity {
private final PlayerClientFactory clientFactory;
private final PlayerPlace playerPlace;
private AutoPlayController autoPlayController;
@@ -47,7 +46,7 @@ public class PlayerActivity extends AbstractActivity implements ErrorReporter {
RootLayoutPanel.get().add(view.asWidget());
autoPlayController = new AutoPlayController(clientFactory.getSailingService(), clientFactory
.getMediaService(), clientFactory.getUserService(), PlayerActivity.this, playerPlace
.getMediaService(), clientFactory.getUserService(), clientFactory.getErrorReporter(), playerPlace
.isFullscreen(), /* leaderboardGroupName */"", playerPlace.getLeaderboardIdAsNameString(),
playerPlace.getLeaderboardZoom(), userAgent, delayToLiveMillis, showRaceDetails,
readRaceboardConfiguration, view);
@@ -85,24 +84,4 @@ public class PlayerActivity extends AbstractActivity implements ErrorReporter {
ErrorView view = clientFactory.createErrorView(errorMessage, errorReason);
panel.setWidget(view.asWidget());
}
@Override
public void reportError(String message) {
Window.alert(message);
}
@Override
public void reportError(String message, boolean silentMode) {
if (silentMode) {
Window.setStatus(message);
} else {
reportError(message);
}
}
@Override
public void reportPersistentInformation(String message) {
Window.setStatus(message);
}
}
@@ -83,6 +83,7 @@ public class DesktopStartView extends Composite implements StartView {
}
initWidget(uiBinder.createAndBindUi(this));
this.ensureDebugId("AutoPlayStartView");
leaderboardAutoZoomBox.setValue(true);
leaderboardZoomBox.setEnabled(false);
@@ -9,32 +9,36 @@ import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.AcceptsOneWidget;
import com.sap.sailing.gwt.ui.shared.EventDTO;
import com.sap.sse.gwt.client.async.MarkedAsyncCallback;
import com.sap.sse.gwt.client.event.LocaleChangeEvent;
import com.sap.sse.gwt.client.event.LocaleChangeEventHandler;
public class StartActivity extends AbstractActivity {
private final StartClientFactory clientFactory;
public static final String LOAD_EVENTS_DATA_CATEGORY = "loadEventsData";
public StartActivity(StartPlace place, StartClientFactory clientFactory) {
this.clientFactory = clientFactory;
}
@Override
public void start(final AcceptsOneWidget panel, EventBus eventBus) {
clientFactory.getSailingService().getEvents(new AsyncCallback<List<EventDTO>>() {
clientFactory.getSailingService().getEvents(new MarkedAsyncCallback<List<EventDTO>>(new AsyncCallback<List<EventDTO>>() {
@Override
public void onSuccess(List<EventDTO> result) {
final StartView view = clientFactory.createStartView();
panel.setWidget(view.asWidget());
view.asWidget().ensureDebugId("AutoPlayStartView");
view.setEvents(result);
}
@Override
public void onFailure(Throwable caught) {
}
});
}, LOAD_EVENTS_DATA_CATEGORY));
eventBus.addHandler(LocaleChangeEvent.TYPE, new LocaleChangeEventHandler() {
@Override
@@ -8,16 +8,17 @@ import com.sap.sailing.gwt.home.client.app.ApplicationActivityMapper;
import com.sap.sailing.gwt.home.client.app.ApplicationClientFactory;
import com.sap.sailing.gwt.home.client.app.ApplicationHistoryMapper;
import com.sap.sailing.gwt.ui.client.RemoteServiceMappingConstants;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sse.gwt.client.EntryPointHelper;
import com.sap.sse.gwt.client.mvp.AbstractEntryPoint;
import com.sap.sse.gwt.client.mvp.AbstractMvpEntryPoint;
public class HomeEntryPoint extends AbstractEntryPoint {
public void onModuleLoad() {
public class HomeEntryPoint extends AbstractMvpEntryPoint<StringMessages> {
@Override
public void doOnModuleLoad() {
ApplicationClientFactory clientFactory = GWT.create(ApplicationClientFactory.class);
EntryPointHelper.registerASyncService((ServiceDefTarget) clientFactory.getSailingService(), RemoteServiceMappingConstants.sailingServiceRemotePath);
ApplicationHistoryMapper applicationHistoryMapper = GWT.create(ApplicationHistoryMapper.class);
onModuleLoad(clientFactory, applicationHistoryMapper, new ApplicationActivityMapper(clientFactory));
initMvp(clientFactory, applicationHistoryMapper, new ApplicationActivityMapper(clientFactory));
SharedResources.INSTANCE.mediaCss().ensureInjected();
SharedResources.INSTANCE.mainCss().ensureInjected();
@@ -25,4 +26,9 @@ public class HomeEntryPoint extends AbstractEntryPoint {
StyleInjector.injectAtEnd("@media (min-width: 25em) { "+SharedResources.INSTANCE.mediumCss().getText()+"}");
StyleInjector.injectAtEnd("@media (min-width: 50em) { "+SharedResources.INSTANCE.largeCss().getText()+"}");
}
@Override
protected StringMessages createStringMessages() {
return GWT.create(StringMessages.class);
}
}
@@ -3,36 +3,25 @@ package com.sap.sailing.gwt.home.client.app;
import com.google.gwt.core.client.GWT;
import com.google.gwt.place.shared.Place;
import com.google.gwt.place.shared.PlaceController;
import com.google.gwt.user.client.rpc.ServiceDefTarget;
import com.google.web.bindery.event.shared.EventBus;
import com.sap.sailing.gwt.home.client.place.start.StartPlace;
import com.sap.sailing.gwt.ui.client.MediaService;
import com.sap.sailing.gwt.ui.client.MediaServiceAsync;
import com.sap.sailing.gwt.ui.client.SailingService;
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
import com.sap.sse.gwt.client.EntryPointHelper;
import com.sap.sse.gwt.client.mvp.ClientFactoryImpl;
import com.sap.sse.security.ui.client.UserManagementService;
import com.sap.sse.security.ui.client.UserManagementServiceAsync;
import com.sap.sse.security.ui.client.UserService;
import com.sap.sse.security.ui.client.SecureClientFactoryImpl;
public abstract class AbstractApplicationClientFactory extends ClientFactoryImpl implements ApplicationClientFactory {
public abstract class AbstractApplicationClientFactory extends SecureClientFactoryImpl implements ApplicationClientFactory {
private final SailingServiceAsync sailingService;
private final MediaServiceAsync mediaService;
private final HomePlacesNavigator navigator;
private final UserManagementServiceAsync userManagementService;
private final UserService userService;
public AbstractApplicationClientFactory(ApplicationTopLevelView root, EventBus eventBus, PlaceController placeController) {
super(root, eventBus, placeController);
navigator = new HomePlacesNavigator(placeController);
sailingService = GWT.create(SailingService.class);
mediaService = GWT.create(MediaService.class);
userManagementService = GWT.create(UserManagementService.class);
EntryPointHelper.registerASyncService((ServiceDefTarget) getUserManagementService(),
com.sap.sse.security.ui.client.RemoteServiceMappingConstants.userManagementServiceRemotePath);
userService = new UserService(userManagementService);
}
@Override
@@ -54,14 +43,4 @@ public abstract class AbstractApplicationClientFactory extends ClientFactoryImpl
public HomePlacesNavigator getHomePlacesNavigator() {
return navigator;
}
@Override
public UserManagementServiceAsync getUserManagementService() {
return userManagementService;
}
@Override
public UserService getUserService() {
return userService;
}
}
@@ -11,6 +11,9 @@ import com.google.gwt.user.client.ui.SimplePanel;
import com.google.gwt.user.client.ui.Widget;
import com.sap.sailing.gwt.home.client.shared.footer.Footer;
import com.sap.sailing.gwt.home.client.shared.header.Header;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sse.gwt.client.DefaultErrorReporter;
import com.sap.sse.gwt.client.ErrorReporter;
/**
* This is the top-level view of the application. Every time another presenter wants to reveal itself,
@@ -22,6 +25,8 @@ public class SmartphoneApplicationView extends Composite implements ApplicationT
private static ApplicationMobileViewUiBinder uiBinder = GWT.create(ApplicationMobileViewUiBinder.class);
private static ErrorReporter errorReporter = new DefaultErrorReporter<StringMessages>(StringMessages.INSTANCE);
@UiField(provided=true)
Header headerPanel;
@@ -47,4 +52,9 @@ public class SmartphoneApplicationView extends Composite implements ApplicationT
public void showLoading(boolean visibile) {
loadingMessage.getStyle().setVisibility(visibile ? Visibility.VISIBLE : Visibility.HIDDEN);
}
@Override
public ErrorReporter getErrorReporter() {
return errorReporter;
}
}
@@ -9,6 +9,9 @@ import com.google.gwt.user.client.ui.SimplePanel;
import com.google.gwt.user.client.ui.Widget;
import com.sap.sailing.gwt.home.client.shared.footer.Footer;
import com.sap.sailing.gwt.home.client.shared.header.Header;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sse.gwt.client.DefaultErrorReporter;
import com.sap.sse.gwt.client.ErrorReporter;
/**
* This is the top-level view of the application. Every time another presenter wants to reveal itself,
@@ -20,6 +23,8 @@ public class TabletAndDesktopApplicationView extends Composite implements Applic
private static TabletAndDesktopApplicationViewUiBinder uiBinder = GWT.create(TabletAndDesktopApplicationViewUiBinder.class);
private static ErrorReporter errorReporter = new DefaultErrorReporter<StringMessages>(StringMessages.INSTANCE);
@UiField(provided=true)
Header headerPanel;
@@ -43,4 +48,10 @@ public class TabletAndDesktopApplicationView extends Composite implements Applic
@Override
public void showLoading(boolean visible) {
}
@Override
public ErrorReporter getErrorReporter() {
return errorReporter;
}
}
@@ -52,18 +52,26 @@ public class EventActivity extends AbstractActivity {
panel.setWidget(new Placeholder());
final long clientTimeWhenRequestWasSent = System.currentTimeMillis();
UUID eventUUID = UUID.fromString(eventPlace.getEventUuidAsString());
clientFactory.getSailingService().getEventById(eventUUID, true, new AsyncCallback<EventDTO>() {
@Override
public void onSuccess(final EventDTO event) {
loadRegattaStructureAndCreateEventView(panel, clientTimeWhenRequestWasSent, event);
}
try {
final UUID eventUUID = UUID.fromString(eventPlace.getEventUuidAsString());
clientFactory.getSailingService().getEventById(eventUUID, true, new AsyncCallback<EventDTO>() {
@Override
public void onSuccess(final EventDTO event) {
if(event != null) {
loadRegattaStructureAndCreateEventView(panel, clientTimeWhenRequestWasSent, event);
} else {
createErrorView("No such event with UUID " + eventUUID, null, panel);
}
}
@Override
public void onFailure(Throwable caught) {
createErrorView("Error while loading the event with service getEventById()", caught, panel);
}
});
@Override
public void onFailure(Throwable caught) {
createErrorView("Error while loading the event with service getEventById()", caught, panel);
}
});
} catch (IllegalArgumentException e) {
createErrorView("Could not parse a valid UUID from the parameter 'eventID'.", null, panel);
}
}
private void loadRegattaStructureAndCreateEventView(final AcceptsOneWidget panel, final long clientTimeWhenRequestWasSent, final EventDTO event) {
@@ -23,7 +23,6 @@ import com.sap.sailing.gwt.ui.leaderboard.LeaderboardSettingsFactory;
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardUrlSettings;
import com.sap.sailing.gwt.ui.shared.EventDTO;
import com.sap.sse.common.Util;
import com.sap.sse.gwt.client.ErrorReporter;
import com.sap.sse.gwt.client.async.AsyncActionsExecutor;
import com.sap.sse.gwt.client.async.MarkedAsyncCallback;
import com.sap.sse.gwt.client.mvp.ErrorView;
@@ -33,7 +32,7 @@ import com.sap.sse.gwt.client.player.Timer.PlayStates;
import com.sap.sse.gwt.client.useragent.UserAgentDetails;
import com.sap.sse.gwt.shared.GwtHttpRequestUtils;
public class RegattaActivity extends AbstractActivity implements ErrorReporter {
public class RegattaActivity extends AbstractActivity {
private final RegattaClientFactory clientFactory;
private final RegattaPlace regattaPlace;
private final Timer timerForClientServerOffset;
@@ -112,7 +111,7 @@ public class RegattaActivity extends AbstractActivity implements ErrorReporter {
Window.setTitle(regattaPlace.getTitle(event.getName(), leaderboardDisplayName));
analyticsView.createRegattaAnalyticsViewer(clientFactory.getSailingService(), new AsyncActionsExecutor(),
timer, leaderboardSettings, preselectedRace, "leaderboardGroupName", leaderboardName, this,
timer, leaderboardSettings, preselectedRace, "leaderboardGroupName", leaderboardName, clientFactory.getErrorReporter(),
userAgent, showRaceDetails, autoExpandLastRaceColumn, showOverallLeaderboard);
panel.setWidget(analyticsView.asWidget());
@@ -213,24 +212,4 @@ public class RegattaActivity extends AbstractActivity implements ErrorReporter {
int width = Window.getClientWidth();
return width <= 720;
}
@Override
public void reportError(String message) {
Window.alert(message);
}
@Override
public void reportError(String message, boolean silentMode) {
if (silentMode) {
Window.setStatus(message);
} else {
reportError(message);
}
}
@Override
public void reportPersistentInformation(String message) {
Window.setStatus(message);
}
}
@@ -23,7 +23,6 @@ import com.sap.sailing.gwt.ui.leaderboard.LeaderboardSettingsFactory;
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardUrlSettings;
import com.sap.sailing.gwt.ui.shared.EventDTO;
import com.sap.sse.common.Util;
import com.sap.sse.gwt.client.ErrorReporter;
import com.sap.sse.gwt.client.async.AsyncActionsExecutor;
import com.sap.sse.gwt.client.async.MarkedAsyncCallback;
import com.sap.sse.gwt.client.mvp.ErrorView;
@@ -33,7 +32,7 @@ import com.sap.sse.gwt.client.player.Timer.PlayStates;
import com.sap.sse.gwt.client.useragent.UserAgentDetails;
import com.sap.sse.gwt.shared.GwtHttpRequestUtils;
public class SeriesActivity extends AbstractActivity implements ErrorReporter {
public class SeriesActivity extends AbstractActivity {
private final SeriesClientFactory clientFactory;
private final SeriesPlace seriesPlace;
private final Timer timerForClientServerOffset;
@@ -113,7 +112,7 @@ public class SeriesActivity extends AbstractActivity implements ErrorReporter {
Window.setTitle(seriesPlace.getTitle(event.getName(), leaderboardDisplayName));
analyticsView.createSeriesAnalyticsViewer(clientFactory.getSailingService(), new AsyncActionsExecutor(),
timer, leaderboardSettings, null, preselectedRace, "leaderboardGroupName", leaderboardName, this,
timer, leaderboardSettings, null, preselectedRace, "leaderboardGroupName", leaderboardName, clientFactory.getErrorReporter(),
userAgent, showRaceDetails, autoExpandLastRaceColumn, showSeriesLeaderboards);
panel.setWidget(analyticsView.asWidget());
@@ -214,24 +213,4 @@ public class SeriesActivity extends AbstractActivity implements ErrorReporter {
int width = Window.getClientWidth();
return width <= 720;
}
@Override
public void reportError(String message) {
Window.alert(message);
}
@Override
public void reportError(String message, boolean silentMode) {
if (silentMode) {
Window.setStatus(message);
} else {
reportError(message);
}
}
@Override
public void reportPersistentInformation(String message) {
Window.setStatus(message);
}
}
@@ -19,8 +19,6 @@ import com.sap.sailing.gwt.ui.client.MediaServiceAsync;
import com.sap.sailing.gwt.ui.client.RegattaRefresher;
import com.sap.sailing.gwt.ui.client.RegattasDisplayer;
import com.sap.sailing.gwt.ui.client.RemoteServiceMappingConstants;
import com.sap.sailing.gwt.ui.client.SailingService;
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
import com.sap.sailing.gwt.ui.masterdataimport.MasterDataImportPanel;
import com.sap.sailing.gwt.ui.shared.BetterDateTimeBox;
import com.sap.sailing.gwt.ui.shared.LeaderboardGroupDTO;
@@ -40,19 +38,17 @@ public class AdminConsoleEntryPoint extends AbstractSailingEntryPoint implements
private Set<LeaderboardsDisplayer> leaderboardsDisplayers;
private Set<LeaderboardGroupsDisplayer> leaderboardGroupsDisplayers;
private final SailingServiceAsync sailingService = GWT.create(SailingService.class);
private final MediaServiceAsync mediaService = GWT.create(MediaService.class);
@Override
protected void doOnModuleLoad() {
super.doOnModuleLoad();
EntryPointHelper.registerASyncService((ServiceDefTarget) sailingService, RemoteServiceMappingConstants.sailingServiceRemotePath);
EntryPointHelper.registerASyncService((ServiceDefTarget) mediaService, RemoteServiceMappingConstants.mediaServiceRemotePath);
createUI();
}
private void createUI() {
AdminConsolePanel panel = new AdminConsolePanel(getUserService(), sailingService, persistentAlertLabel,
AdminConsolePanel panel = new AdminConsolePanel(getUserService(), sailingService,
getStringMessages().releaseNotes(), "/release_notes_admin.html", /* error reporter */ this, SecurityStylesheetResources.INSTANCE.css());
BetterDateTimeBox.initialize();
regattasDisplayers = new HashSet<>();
@@ -1,9 +1,20 @@
package com.sap.sailing.gwt.ui.client;
import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.rpc.ServiceDefTarget;
import com.sap.sse.gwt.client.EntryPointHelper;
import com.sap.sse.security.ui.client.AbstractSecureEntryPoint;
public abstract class AbstractSailingEntryPoint extends AbstractSecureEntryPoint<StringMessages> {
protected final SailingServiceAsync sailingService = GWT.create(SailingService.class);
@Override
protected void doOnModuleLoad() {
super.doOnModuleLoad();
EntryPointHelper.registerASyncService((ServiceDefTarget) sailingService, RemoteServiceMappingConstants.sailingServiceRemotePath);
}
@Override
protected StringMessages createStringMessages() {
return GWT.create(StringMessages.class);
@@ -18,8 +18,6 @@ import com.sap.sailing.gwt.ui.client.AbstractSailingEntryPoint;
import com.sap.sailing.gwt.ui.client.GlobalNavigationPanel;
import com.sap.sailing.gwt.ui.client.LogoAndTitlePanel;
import com.sap.sailing.gwt.ui.client.RemoteServiceMappingConstants;
import com.sap.sailing.gwt.ui.client.SailingService;
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
import com.sap.sailing.gwt.ui.client.shared.components.SettingsDialog;
import com.sap.sailing.gwt.ui.datamining.execution.SimpleQueryRunner;
import com.sap.sailing.gwt.ui.datamining.presentation.BenchmarkResultsPanel;
@@ -30,8 +28,6 @@ import com.sap.sse.gwt.client.EntryPointHelper;
import com.sap.sse.gwt.shared.GwtHttpRequestUtils;
public class DataMiningEntryPoint extends AbstractSailingEntryPoint {
private final SailingServiceAsync sailingService = GWT.create(SailingService.class);
private static DataMiningResources resources = GWT.create(DataMiningResources.class);
private final DataMiningServiceAsync dataMiningService = GWT.create(DataMiningService.class);
@@ -40,7 +36,6 @@ public class DataMiningEntryPoint extends AbstractSailingEntryPoint {
protected void doOnModuleLoad() {
super.doOnModuleLoad();
EntryPointHelper.registerASyncService((ServiceDefTarget) sailingService, RemoteServiceMappingConstants.sailingServiceRemotePath);
EntryPointHelper.registerASyncService((ServiceDefTarget) dataMiningService, RemoteServiceMappingConstants.dataMiningServiceRemotePath);
RootLayoutPanel rootPanel = RootLayoutPanel.get();
@@ -7,11 +7,9 @@ import java.util.Map;
import java.util.UUID;
import java.util.logging.Logger;
import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.rpc.ServiceDefTarget;
import com.google.gwt.user.client.ui.DockLayoutPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.RootLayoutPanel;
@@ -26,14 +24,10 @@ import com.sap.sailing.domain.common.dto.AbstractLeaderboardDTO;
import com.sap.sailing.gwt.ui.client.AbstractSailingEntryPoint;
import com.sap.sailing.gwt.ui.client.GlobalNavigationPanel;
import com.sap.sailing.gwt.ui.client.LogoAndTitlePanel;
import com.sap.sailing.gwt.ui.client.RemoteServiceMappingConstants;
import com.sap.sailing.gwt.ui.client.SailingService;
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardSettings.RaceColumnSelectionStrategies;
import com.sap.sailing.gwt.ui.shared.EventDTO;
import com.sap.sse.common.Util;
import com.sap.sse.gwt.client.EntryPointHelper;
import com.sap.sse.gwt.client.async.AsyncActionsExecutor;
import com.sap.sse.gwt.client.async.MarkedAsyncCallback;
import com.sap.sse.gwt.client.dialog.DataEntryDialog;
@@ -52,12 +46,9 @@ public class LeaderboardEntryPoint extends AbstractSailingEntryPoint {
private GlobalNavigationPanel globalNavigationPanel;
private EventDTO event;
private final SailingServiceAsync sailingService = GWT.create(SailingService.class);
@Override
protected void doOnModuleLoad() {
super.doOnModuleLoad();
EntryPointHelper.registerASyncService((ServiceDefTarget) sailingService, RemoteServiceMappingConstants.sailingServiceRemotePath);
final boolean showRaceDetails = GwtHttpRequestUtils.getBooleanParameter(LeaderboardUrlSettings.PARAM_SHOW_RACE_DETAILS, false /* default*/);
final boolean embedded = GwtHttpRequestUtils.getBooleanParameter(LeaderboardUrlSettings.PARAM_EMBEDDED, false /* default*/);
final boolean hideToolbar = GwtHttpRequestUtils.getBooleanParameter(LeaderboardUrlSettings.PARAM_HIDE_TOOLBAR, false /* default*/);
@@ -2,30 +2,20 @@ package com.sap.sailing.gwt.ui.leaderboardedit;
import java.util.List;
import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.rpc.ServiceDefTarget;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.RootPanel;
import com.sap.sailing.gwt.ui.client.AbstractSailingEntryPoint;
import com.sap.sailing.gwt.ui.client.LogoAndTitlePanel;
import com.sap.sailing.gwt.ui.client.RemoteServiceMappingConstants;
import com.sap.sailing.gwt.ui.client.SailingService;
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
import com.sap.sse.gwt.client.EntryPointHelper;
import com.sap.sse.gwt.client.async.AsyncActionsExecutor;
import com.sap.sse.gwt.client.async.MarkedAsyncCallback;
public class LeaderboardEditPage extends AbstractSailingEntryPoint {
private final SailingServiceAsync sailingService = GWT.create(SailingService.class);
@Override
protected void doOnModuleLoad() {
super.doOnModuleLoad();
EntryPointHelper.registerASyncService((ServiceDefTarget) sailingService, RemoteServiceMappingConstants.sailingServiceRemotePath);
sailingService.getLeaderboardNames(new MarkedAsyncCallback<List<String>>(
new AsyncCallback<List<String>>() {
@Override
@@ -4,31 +4,21 @@ import java.util.HashSet;
import java.util.List;
import java.util.Set;
import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.rpc.ServiceDefTarget;
import com.google.gwt.user.client.ui.RootLayoutPanel;
import com.sap.sailing.gwt.ui.client.AbstractSailingEntryPoint;
import com.sap.sailing.gwt.ui.client.RegattaRefresher;
import com.sap.sailing.gwt.ui.client.RegattasDisplayer;
import com.sap.sailing.gwt.ui.client.RemoteServiceMappingConstants;
import com.sap.sailing.gwt.ui.client.SailingService;
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
import com.sap.sailing.gwt.ui.shared.RegattaDTO;
import com.sap.sse.gwt.client.EntryPointHelper;
public class PolarSheetsEntryPoint extends AbstractSailingEntryPoint implements RegattaRefresher {
private Set<RegattasDisplayer> regattaDisplayers;
private final SailingServiceAsync sailingService = GWT.create(SailingService.class);
@Override
protected void doOnModuleLoad() {
super.doOnModuleLoad();
EntryPointHelper.registerASyncService((ServiceDefTarget) sailingService, RemoteServiceMappingConstants.sailingServiceRemotePath);
regattaDisplayers = new HashSet<RegattasDisplayer>();
createUI();
fillRegattas();
@@ -29,8 +29,6 @@ import com.sap.sailing.gwt.ui.client.ParallelExecutionHolder;
import com.sap.sailing.gwt.ui.client.RaceSelectionModel;
import com.sap.sailing.gwt.ui.client.RaceTimesInfoProvider;
import com.sap.sailing.gwt.ui.client.RemoteServiceMappingConstants;
import com.sap.sailing.gwt.ui.client.SailingService;
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
import com.sap.sailing.gwt.ui.shared.EventDTO;
import com.sap.sailing.gwt.ui.shared.LeaderboardGroupDTO;
import com.sap.sailing.gwt.ui.shared.RegattaDTO;
@@ -57,14 +55,12 @@ public class RaceBoardEntryPoint extends AbstractSailingEntryPoint {
private UUID eventId;
private RaceBoardViewConfiguration raceboardViewConfig;
private final SailingServiceAsync sailingService = GWT.create(SailingService.class);
private final MediaServiceAsync mediaService = GWT.create(MediaService.class);
@Override
protected void doOnModuleLoad() {
super.doOnModuleLoad();
EntryPointHelper.registerASyncService((ServiceDefTarget) sailingService, RemoteServiceMappingConstants.sailingServiceRemotePath);
EntryPointHelper.registerASyncService((ServiceDefTarget) mediaService, RemoteServiceMappingConstants.mediaServiceRemotePath);
// read mandatory parameters
@@ -4,12 +4,10 @@ import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.ServiceDefTarget;
import com.google.gwt.user.client.ui.DockLayoutPanel;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.Panel;
@@ -18,12 +16,8 @@ import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.ScrollPanel;
import com.sap.sailing.gwt.ui.client.AbstractSailingEntryPoint;
import com.sap.sailing.gwt.ui.client.LogoAndTitlePanel;
import com.sap.sailing.gwt.ui.client.RemoteServiceMappingConstants;
import com.sap.sailing.gwt.ui.client.SailingService;
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
import com.sap.sailing.gwt.ui.regattaoverview.RegattaRaceStatesComponent.EntryHandler;
import com.sap.sailing.gwt.ui.shared.RegattaOverviewEntryDTO;
import com.sap.sse.gwt.client.EntryPointHelper;
import com.sap.sse.gwt.client.URLEncoder;
public class RegattaOverviewEntryPoint extends AbstractSailingEntryPoint {
@@ -38,14 +32,10 @@ public class RegattaOverviewEntryPoint extends AbstractSailingEntryPoint {
private RaceDetailPanel detailPanel;
private RegattaOverviewPanel regattaPanel;
private final SailingServiceAsync sailingService = GWT.create(SailingService.class);
@Override
public void doOnModuleLoad() {
super.doOnModuleLoad();
EntryPointHelper.registerASyncService((ServiceDefTarget) sailingService, RemoteServiceMappingConstants.sailingServiceRemotePath);
RootLayoutPanel rootPanel = RootLayoutPanel.get();
containerPanel = new DockLayoutPanel(Unit.PX);
rootPanel.add(containerPanel);
@@ -1,11 +1,9 @@
package com.sap.sailing.gwt.ui.spectator;
import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.rpc.ServiceDefTarget;
import com.google.gwt.user.client.ui.Anchor;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.RootPanel;
@@ -14,13 +12,9 @@ import com.sap.sailing.gwt.ui.client.AbstractSailingEntryPoint;
import com.sap.sailing.gwt.ui.client.GlobalNavigationPanel;
import com.sap.sailing.gwt.ui.client.LogoAndTitlePanel;
import com.sap.sailing.gwt.ui.client.RegattaRefresher;
import com.sap.sailing.gwt.ui.client.RemoteServiceMappingConstants;
import com.sap.sailing.gwt.ui.client.SailingService;
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
import com.sap.sailing.gwt.ui.client.shared.panels.SimpleWelcomeWidget;
import com.sap.sailing.gwt.ui.raceboard.RaceBoardViewConfiguration;
import com.sap.sailing.gwt.ui.shared.LeaderboardGroupDTO;
import com.sap.sse.gwt.client.EntryPointHelper;
import com.sap.sse.gwt.shared.GwtHttpRequestUtils;
/**
@@ -29,14 +23,11 @@ import com.sap.sse.gwt.shared.GwtHttpRequestUtils;
*
*/
public class SpectatorEntryPoint extends AbstractSailingEntryPoint implements RegattaRefresher {
private final SailingServiceAsync sailingService = GWT.create(SailingService.class);
@Override
protected void doOnModuleLoad() {
super.doOnModuleLoad();
EntryPointHelper.registerASyncService((ServiceDefTarget) sailingService, RemoteServiceMappingConstants.sailingServiceRemotePath);
String groupParamValue = Window.Location.getParameter("leaderboardGroupName");
String viewModeParamValue = Window.Location.getParameter("viewMode");
final boolean canReplayDuringLiveRaces = GwtHttpRequestUtils.getBooleanParameter(
@@ -0,0 +1,67 @@
package com.sap.sailing.selenium.pages.autoplay;
import java.io.UnsupportedEncodingException;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import com.sap.sailing.selenium.core.BySeleniumId;
import com.sap.sailing.selenium.core.FindBy;
import com.sap.sailing.selenium.pages.HostPage;
import com.sap.sailing.selenium.test.autoplay.AutoPlayConfiguration;
/**
* <p>The page object representing the autoplay startpage.</p>
*
* @author
* C5163874
*/
public class AutoPlayPage extends HostPage {
private static final String PAGE_TITLE = "SAP Sailing Analytics AutoPlay"; //$NON-NLS-1$
@FindBy(how = BySeleniumId.class, using = "AutoPlayStartView")
private WebElement autoPlayStartView;
/**
* <p>Goes to the autoplay page and returns the representing page object.</p>
*
* @param driver
* The web driver to use.
* @param root
* The context root of the application.
* @return
* The page object for the administration console.
* @throws UnsupportedEncodingException
*/
public static AutoPlayPage goToPage(WebDriver driver, String root) {
driver.get(root + "gwt/AutoPlay.html?" + getGWTCodeServer()); //$NON-NLS-1$
return new AutoPlayPage(driver);
}
private AutoPlayPage(WebDriver driver) {
super(driver);
}
public AutoPlayConfiguration getAutoPlayConfiguration() {
return new AutoPlayConfiguration(this.driver, autoPlayStartView);
}
@Override
protected void initElements() {
super.initElements();
// Wait for the initial loading of the data
waitForAjaxRequestsExecuted("loadEventsData", 1);
}
/**
* <p>Verifies that the current page is the autoplay page by checking the title of the page.</p>
*/
@Override
protected void verify() {
if (!PAGE_TITLE.equals(this.driver.getTitle())) {
throw new IllegalStateException("This is not the autoplay page: " + this.driver.getTitle()); //$NON-NLS-1$
}
}
}
@@ -0,0 +1,14 @@
package com.sap.sailing.selenium.test.autoplay;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import com.sap.sailing.selenium.pages.PageArea;
public class AutoPlayConfiguration extends PageArea {
public AutoPlayConfiguration(WebDriver driver, WebElement element) {
super(driver, element);
}
}
@@ -0,0 +1,27 @@
package com.sap.sailing.selenium.test.autoplay;
import static org.junit.Assert.assertNotNull;
import org.junit.Before;
import org.junit.Test;
import com.sap.sailing.selenium.pages.autoplay.AutoPlayPage;
import com.sap.sailing.selenium.test.AbstractSeleniumTest;
public class TestAutoPlay extends AbstractSeleniumTest {
@Override
@Before
public void setUp() {
clearState(getContextRoot());
super.setUp();
}
@Test
public void testAutoPlayStartup() {
AutoPlayPage page = AutoPlayPage.goToPage(getWebDriver(), getContextRoot());
AutoPlayConfiguration autoPlayConfiguration = page.getAutoPlayConfiguration();
assertNotNull(autoPlayConfiguration);
}
}
@@ -12,7 +12,6 @@ import com.google.gwt.user.client.ui.Anchor;
import com.google.gwt.user.client.ui.DockLayoutPanel;
import com.google.gwt.user.client.ui.DockPanel;
import com.google.gwt.user.client.ui.HasHorizontalAlignment;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.ScrollPanel;
import com.google.gwt.user.client.ui.TabLayoutPanel;
import com.google.gwt.user.client.ui.Widget;
@@ -132,7 +131,7 @@ public class AdminConsolePanel extends DockLayoutPanel {
}
public AdminConsolePanel(UserService userService, BuildVersionRetriever buildVersionRetriever,
Label persistentAlertLabel, String releaseNotesAnchorLabel, String releaseNotesURL,
String releaseNotesAnchorLabel, String releaseNotesURL,
ErrorReporter errorReporter, LoginPanelCss loginPanelCss) {
super(Unit.EM);
this.userService = userService;
@@ -164,7 +163,7 @@ public class AdminConsolePanel extends DockLayoutPanel {
informationPanel.setSize("100%", "95%");
informationPanel.setSpacing(10);
informationPanel.add(new LoginPanel(loginPanelCss, getUserService()), DockPanel.WEST);
informationPanel.add(persistentAlertLabel, DockPanel.CENTER);
informationPanel.add(errorReporter.getPersistentInformationWidget(), DockPanel.CENTER);
SystemInformationPanel sysinfoPanel = new SystemInformationPanel(buildVersionRetriever, errorReporter);
sysinfoPanel.ensureDebugId("SystemInformation");
final Anchor releaseNotesLink = new Anchor(new SafeHtmlBuilder().appendEscaped(releaseNotesAnchorLabel).toSafeHtml(), releaseNotesURL);
@@ -3,18 +3,12 @@ package com.sap.sse.gwt.client;
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.core.client.GWT;
import com.google.gwt.debug.client.DebugInfo;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.logical.shared.AttachEvent;
import com.google.gwt.event.logical.shared.AttachEvent.Handler;
import com.google.gwt.resources.client.TextResource;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.DialogBox;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.TabLayoutPanel;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
import com.sap.sse.gwt.client.async.MarkedAsyncCallback;
import com.sap.sse.gwt.client.async.PendingAjaxCallMarker;
import com.sap.sse.gwt.client.useragent.UserAgentDetails;
@@ -22,15 +16,15 @@ import com.sap.sse.gwt.shared.DebugConstants;
public abstract class AbstractEntryPoint<S extends StringMessages> implements EntryPoint, ErrorReporter, WindowSizeDetector {
protected UserAgentDetails userAgent;
private DialogBox errorDialogBox;
private HTML serverResponseLabel;
private Button dialogCloseButton;
private S stringMessages;
protected Label persistentAlertLabel;
private ErrorReporter errorReporter;
@Override
public final void onModuleLoad() {
this.stringMessages = createStringMessages();
this.errorReporter = new DefaultErrorReporter<StringMessages>(stringMessages);
this.userAgent = new UserAgentDetails(Window.Navigator.getUserAgent());
if (DebugInfo.isDebugIdEnabled()) {
PendingAjaxCallBundle bundle = GWT.create(PendingAjaxCallBundle.class);
TextResource script = bundle.ajaxSemaphoreJS();
@@ -50,12 +44,7 @@ public abstract class AbstractEntryPoint<S extends StringMessages> implements En
*/
protected abstract S createStringMessages();
protected void doOnModuleLoad() {
userAgent = new UserAgentDetails(Window.Navigator.getUserAgent());
errorDialogBox = createErrorDialog(); /* TODO: Make this more generic (e.g. make it support all kinds of messages) */
persistentAlertLabel = new Label("");
persistentAlertLabel.setStyleName("global-alert-message");
}
protected abstract void doOnModuleLoad();
/**
* Sets the size of the tab panel when the tab panel is attached to the DOM
@@ -72,25 +61,22 @@ public abstract class AbstractEntryPoint<S extends StringMessages> implements En
@Override
public void reportError(String message) {
errorDialogBox.setText(message);
serverResponseLabel.addStyleName("serverResponseLabelError"); //$NON-NLS-1$
serverResponseLabel.setHTML(getStringMessages().serverError());
errorDialogBox.center();
dialogCloseButton.setFocus(true);
errorReporter.reportError(message);
}
@Override
public void reportError(String message, boolean silentMode) {
if (silentMode) {
Window.setStatus(message);
} else {
reportError(message);
}
errorReporter.reportError(message, silentMode);
}
@Override
public void reportPersistentInformation(String message) {
persistentAlertLabel.setText(message);
errorReporter.reportPersistentInformation(message);
}
@Override
public Widget getPersistentInformationWidget() {
return errorReporter.getPersistentInformationWidget();
}
@Override
@@ -99,33 +85,6 @@ public abstract class AbstractEntryPoint<S extends StringMessages> implements En
return width <= 720;
}
private DialogBox createErrorDialog() {
// Create the popup dialog box
final DialogBox myErrorDialogBox = new DialogBox();
myErrorDialogBox.setText(getStringMessages().remoteProcedureCall());
myErrorDialogBox.setAnimationEnabled(true);
dialogCloseButton = new Button(getStringMessages().close());
// We can set the id of a widget by accessing its Element
dialogCloseButton.getElement().setId("closeButton"); //$NON-NLS-1$
final Label textToServerLabel = new Label();
serverResponseLabel = new HTML();
VerticalPanel dialogVPanel = new VerticalPanel();
dialogVPanel.add(new HTML("<b>"+stringMessages.errorCommunicatingWithServer()+"</b>")); //$NON-NLS-1$
dialogVPanel.add(textToServerLabel);
dialogVPanel.add(new HTML("<br><b>"+stringMessages.serverReplies()+"</b>")); //$NON-NLS-1$
dialogVPanel.add(serverResponseLabel);
dialogVPanel.setHorizontalAlignment(VerticalPanel.ALIGN_RIGHT);
dialogVPanel.add(dialogCloseButton);
myErrorDialogBox.setWidget(dialogVPanel);
// Add a handler to close the DialogBox
dialogCloseButton.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
myErrorDialogBox.hide();
}
});
return myErrorDialogBox;
}
protected S getStringMessages() {
return stringMessages;
}
@@ -0,0 +1,84 @@
package com.sap.sse.gwt.client;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.DialogBox;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
public class DefaultErrorReporter<S extends StringMessages> implements ErrorReporter {
private DialogBox errorDialogBox;
private HTML serverResponseLabel;
private Button dialogCloseButton;
private S stringMessages;
protected Label persistentAlertLabel;
public DefaultErrorReporter(S stringMessages) {
this.stringMessages = stringMessages;
/* TODO: Make this more generic (e.g. make it support all kinds of messages) */
errorDialogBox = createErrorDialog();
persistentAlertLabel = new Label("");
persistentAlertLabel.setStyleName("global-alert-message");
}
@Override
public void reportError(String message) {
errorDialogBox.setText(message);
serverResponseLabel.addStyleName("serverResponseLabelError"); //$NON-NLS-1$
serverResponseLabel.setHTML(stringMessages.serverError());
errorDialogBox.center();
dialogCloseButton.setFocus(true);
}
@Override
public void reportError(String message, boolean silentMode) {
if (silentMode) {
Window.setStatus(message);
} else {
reportError(message);
}
}
@Override
public void reportPersistentInformation(String message) {
persistentAlertLabel.setText(message);
}
@Override
public Widget getPersistentInformationWidget() {
return persistentAlertLabel;
}
private DialogBox createErrorDialog() {
// Create the popup dialog box
final DialogBox myErrorDialogBox = new DialogBox();
myErrorDialogBox.setText(stringMessages.remoteProcedureCall());
myErrorDialogBox.setAnimationEnabled(true);
dialogCloseButton = new Button(stringMessages.close());
// We can set the id of a widget by accessing its Element
dialogCloseButton.getElement().setId("closeButton"); //$NON-NLS-1$
final Label textToServerLabel = new Label();
serverResponseLabel = new HTML();
VerticalPanel dialogVPanel = new VerticalPanel();
dialogVPanel.add(new HTML("<b>"+stringMessages.errorCommunicatingWithServer()+"</b>")); //$NON-NLS-1$
dialogVPanel.add(textToServerLabel);
dialogVPanel.add(new HTML("<br><b>"+stringMessages.serverReplies()+"</b>")); //$NON-NLS-1$
dialogVPanel.add(serverResponseLabel);
dialogVPanel.setHorizontalAlignment(VerticalPanel.ALIGN_RIGHT);
dialogVPanel.add(dialogCloseButton);
myErrorDialogBox.setWidget(dialogVPanel);
// Add a handler to close the DialogBox
dialogCloseButton.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
myErrorDialogBox.hide();
}
});
return myErrorDialogBox;
}
}
@@ -1,7 +1,11 @@
package com.sap.sse.gwt.client;
import com.google.gwt.user.client.ui.Widget;
public interface ErrorReporter {
void reportError(String message);
void reportError(String message, boolean silentMode);
void reportPersistentInformation(String message);
Widget getPersistentInformationWidget();
}
@@ -3,28 +3,19 @@ package com.sap.sse.gwt.client;
import com.google.gwt.i18n.client.Messages;
/**
* Defines the text strings for i18n that are used by the SSE GWT bundle. This bundle
* Defines the text strings for i18n that are used by the SSE GWT bundle.
* @author Axel Uhl (D043530)
*
*/
public interface StringMessages extends Messages {
String save();
String remove();
String cancel();
String add();
String edit();
String serverError();
String serverError();
String close();
String remoteProcedureCall();
String serverReplies();
String errorCommunicatingWithServer();
}
@@ -8,6 +8,8 @@ import com.google.gwt.place.shared.PlaceHistoryHandler;
import com.google.gwt.place.shared.PlaceHistoryMapper;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.web.bindery.event.shared.EventBus;
import com.sap.sse.gwt.client.AbstractEntryPoint;
import com.sap.sse.gwt.client.StringMessages;
import com.sap.sse.gwt.client.mvp.impl.ActivityMapperRegistry;
/**
@@ -18,8 +20,9 @@ import com.sap.sse.gwt.client.mvp.impl.ActivityMapperRegistry;
* @author Axel Uhl (d043530)
*
*/
public abstract class AbstractEntryPoint implements EntryPoint {
public abstract class AbstractMvpEntryPoint<S extends StringMessages> extends AbstractEntryPoint<S> {
/**
* Initializes the application with a {@link PlaceHistoryHandler} using as a {@link PlaceHistoryMapper} what it gets
* by passing <code>placeHistoryMapperClass</code> to a {@link GWT#create(Class)} call. An {@link ActivityManager}
@@ -36,7 +39,7 @@ public abstract class AbstractEntryPoint implements EntryPoint {
* @param activityMappers
* used for a composite activity mapper; the first mapper to provide an activity for a place gets its way
*/
public void onModuleLoad(ClientFactory clientFactory, PlaceHistoryMapper historyMapper, ActivityMapper... activityMappers) {
public void initMvp(ClientFactory clientFactory, PlaceHistoryMapper historyMapper, ActivityMapper... activityMappers) {
// Start ActivityManager for the main widget with our ActivityMapper
ActivityMapperRegistry activityMapperRegistry = new ActivityMapperRegistry();
for (ActivityMapper activityMapper : activityMappers) {
@@ -5,6 +5,7 @@ import com.google.gwt.place.shared.PlaceController;
import com.google.gwt.user.client.ui.AcceptsOneWidget;
import com.google.gwt.user.client.ui.Widget;
import com.google.web.bindery.event.shared.EventBus;
import com.sap.sse.gwt.client.ErrorReporter;
/**
* Provides GWT modules a way to bind specific configurations for which event bus
@@ -24,6 +25,8 @@ import com.google.web.bindery.event.shared.EventBus;
*
*/
public interface ClientFactory {
ErrorReporter getErrorReporter();
EventBus getEventBus();
PlaceController getPlaceController();
@@ -5,6 +5,7 @@ import com.google.gwt.place.shared.PlaceController;
import com.google.gwt.user.client.ui.AcceptsOneWidget;
import com.google.gwt.user.client.ui.Widget;
import com.google.web.bindery.event.shared.EventBus;
import com.sap.sse.gwt.client.ErrorReporter;
/**
* Applications can use this as a default implementation of the {@link ClientFactory} interface
@@ -32,6 +33,11 @@ public abstract class ClientFactoryImpl implements ClientFactory {
this.placeController = placeController;
}
@Override
public ErrorReporter getErrorReporter() {
return root.getErrorReporter();
}
@Override
public EventBus getEventBus() {
return eventBus;
@@ -2,9 +2,12 @@ package com.sap.sse.gwt.client.mvp;
import com.google.gwt.user.client.ui.AcceptsOneWidget;
import com.google.gwt.user.client.ui.Widget;
import com.sap.sse.gwt.client.ErrorReporter;
public interface TopLevelView {
AcceptsOneWidget getContent();
Widget asWidget();
ErrorReporter getErrorReporter();
}
@@ -4,6 +4,8 @@ import com.google.gwt.place.shared.Place;
import com.google.gwt.user.client.ui.AcceptsOneWidget;
import com.google.gwt.user.client.ui.SimplePanel;
import com.google.gwt.user.client.ui.Widget;
import com.sap.sse.gwt.client.DefaultErrorReporter;
import com.sap.sse.gwt.client.ErrorReporter;
import com.sap.sse.gwt.client.mvp.ClientFactoryImpl;
import com.sap.sse.gwt.client.mvp.TopLevelView;
import com.sap.sse.gwt.client.mvp.example.goodbye.GoodbyeView;
@@ -29,7 +31,12 @@ public class AppClientFactoryImpl extends ClientFactoryImpl implements AppClient
public Widget asWidget() {
return root;
}
@Override
public ErrorReporter getErrorReporter() {
return new DefaultErrorReporter<TextMessages>(TextMessages.INSTANCE);
}
});
}
@@ -1,18 +1,20 @@
package com.sap.sse.gwt.client.mvp.example;
import com.google.gwt.core.client.GWT;
import com.sap.sse.gwt.client.mvp.AbstractEntryPoint;
import com.sap.sse.gwt.client.StringMessages;
import com.sap.sse.gwt.client.mvp.AbstractMvpEntryPoint;
/**
* Entry point classes define <code>onModuleLoad()</code>.
* 1. Call <code>AbstractMvpEntryPoint.doOnModuleLoad()</code>.
* 1. Call <code>AbstractMvpEntryPoint.onModuleLoad()</code>.
*
* @author Axel Uhl (d043530)
*/
public class ExampleEntryPoint extends AbstractEntryPoint {
/**
* This is the entry point method.
*/
public void onModuleLoad() {
public class ExampleEntryPoint<S extends StringMessages> extends AbstractMvpEntryPoint<S> {
@Override
protected void doOnModuleLoad() {
// There are two typical ways in which to tell the concrete views to use, based on a responsive pattern:
// 1) Use deferred binding in the GWT module's .gwt.xml flie, as in:
//
@@ -29,6 +31,12 @@ public class ExampleEntryPoint extends AbstractEntryPoint {
// clientFactory = new MyThisAndThatClientFactory();
// }
AppPlaceHistoryMapper historyMapper = GWT.create(AppPlaceHistoryMapper.class);
onModuleLoad(clientFactory, historyMapper, new AppActivityMapper(clientFactory));
initMvp(clientFactory, historyMapper, new AppActivityMapper(clientFactory));
}
@Override
protected S createStringMessages() {
return GWT.create(StringMessages.class);
}
}
@@ -0,0 +1,14 @@
package com.sap.sse.gwt.client.mvp.example;
import com.google.gwt.core.client.GWT;
import com.sap.sse.gwt.client.StringMessages;
/**
* String messages for the MVP sample app
* @author Frank
*
*/
public interface TextMessages extends StringMessages {
public static final TextMessages INSTANCE = GWT.create(TextMessages.class);
}
@@ -0,0 +1,10 @@
save=Save
remove=Remove
cancel=Cancel
add=Add
edit=Edit
close=Close
serverError=An error occurred while attempting to contact the server. Please check your network connection and try again.
remoteProcedureCall=Remote Procedure Call
serverReplies=Server replies
errorCommunicatingWithServer=Error communicating with server
@@ -1,9 +1,6 @@
package com.sap.sse.security.ui.client;
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.rpc.ServiceDefTarget;
import com.sap.sse.gwt.client.EntryPointHelper;
import com.sap.sse.gwt.client.StringMessages;
/**
@@ -15,23 +12,21 @@ import com.sap.sse.gwt.client.StringMessages;
* @author Axel Uhl (D043530)
*
*/
public abstract class AbstractSecureEntryPoint<S extends StringMessages> extends com.sap.sse.gwt.client.AbstractEntryPoint<S> {
private UserService userService;
private UserManagementServiceAsync userManagementService;
public abstract class AbstractSecureEntryPoint<S extends StringMessages> extends com.sap.sse.gwt.client.AbstractEntryPoint<S> implements WithSecurity {
private WithSecurity securityProvider;
protected void doOnModuleLoad() {
super.doOnModuleLoad();
userManagementService = GWT.create(UserManagementService.class);
EntryPointHelper.registerASyncService((ServiceDefTarget) userManagementService, com.sap.sse.security.ui.client.RemoteServiceMappingConstants.userManagementServiceRemotePath);
userService = new UserService(userManagementService);
securityProvider = new DefaultWithSecurityImpl();
}
@Override
public UserManagementServiceAsync getUserManagementService() {
return securityProvider.getUserManagementService();
}
protected UserManagementServiceAsync getUserManagementService() {
return userManagementService;
}
protected UserService getUserService() {
return userService;
@Override
public UserService getUserService() {
return securityProvider.getUserService();
}
}
@@ -0,0 +1,32 @@
package com.sap.sse.security.ui.client;
import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.rpc.ServiceDefTarget;
import com.sap.sse.gwt.client.EntryPointHelper;
/**
* The default implementation for the WithSecurity interface
* Adds user management service and user service for security management.
*
* @author Axel Uhl (D043530)
*
*/
public class DefaultWithSecurityImpl implements WithSecurity {
private UserService userService;
private UserManagementServiceAsync userManagementService;
public DefaultWithSecurityImpl() {
userManagementService = GWT.create(UserManagementService.class);
EntryPointHelper.registerASyncService((ServiceDefTarget) userManagementService, com.sap.sse.security.ui.client.RemoteServiceMappingConstants.userManagementServiceRemotePath);
userService = new UserService(userManagementService);
}
public UserManagementServiceAsync getUserManagementService() {
return userManagementService;
}
public UserService getUserService() {
return userService;
}
}
@@ -0,0 +1,40 @@
package com.sap.sse.security.ui.client;
import com.google.gwt.event.shared.SimpleEventBus;
import com.google.gwt.place.shared.PlaceController;
import com.google.web.bindery.event.shared.EventBus;
import com.sap.sse.gwt.client.mvp.ClientFactoryImpl;
import com.sap.sse.gwt.client.mvp.TopLevelView;
/**
* An implementation of a ClientFactory providing security services
* @author Frank
*
*/
public abstract class SecureClientFactoryImpl extends ClientFactoryImpl implements WithSecurity {
private WithSecurity securityProvider;
public SecureClientFactoryImpl(TopLevelView root) {
this(root, new SimpleEventBus());
}
protected SecureClientFactoryImpl(TopLevelView root, EventBus eventBus) {
this(root, eventBus, new PlaceController(eventBus));
}
protected SecureClientFactoryImpl(TopLevelView root, EventBus eventBus, PlaceController placeController) {
super(root, eventBus, placeController);
securityProvider = new DefaultWithSecurityImpl();
}
@Override
public UserManagementServiceAsync getUserManagementService() {
return securityProvider.getUserManagementService();
}
@Override
public UserService getUserService() {
return securityProvider.getUserService();
}
}
@@ -0,0 +1,12 @@
package com.sap.sse.security.ui.client;
/**
* A marker interface indicating that usermanagement and security services are needed
* @author Frank
*
*/
public interface WithSecurity {
public UserManagementServiceAsync getUserManagementService();
public UserService getUserService();
}