diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/AdminConsoleEntryPoint.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/AdminConsoleEntryPoint.java index 1adee36d4fb..d9b50409a7d 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/AdminConsoleEntryPoint.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/AdminConsoleEntryPoint.java @@ -57,7 +57,7 @@ public class AdminConsoleEntryPoint extends AbstractEntryPoint implements Regatt private final SailingServiceAsync sailingService = GWT.create(SailingService.class); private final MediaServiceAsync mediaService = GWT.create(MediaService.class); - + @Override protected void doOnModuleLoad() { super.doOnModuleLoad(); @@ -241,7 +241,7 @@ public class AdminConsoleEntryPoint extends AbstractEntryPoint implements Regatt }); informationPanel.setSize("100%", "95%"); informationPanel.setSpacing(10); - informationPanel.add(new LoginPanel(SecurityStylesheetResources.INSTANCE.css()), DockPanel.WEST); + informationPanel.add(new LoginPanel(SecurityStylesheetResources.INSTANCE.css(), getUserService()), DockPanel.WEST); informationPanel.add(persistentAlertLabel, DockPanel.CENTER); SystemInformationPanel sysinfoPanel = new SystemInformationPanel(sailingService, this); @@ -287,7 +287,7 @@ public class AdminConsoleEntryPoint extends AbstractEntryPoint implements Regatt } private void addToTabPanel(VerticalTabLayoutPanel tabPanel, Panel panelToAdd, String tabTitle, AdminConsoleFeatures feature) { - UserDTO user = LoginPanel.getCurrentUser(); + UserDTO user = getUserService().getCurrentUser(); if (user != null && isUserInRole(feature.getEnabledRoles())) { ScrollPanel scrollPanel = new ScrollPanel(); scrollPanel.add(panelToAdd); @@ -297,7 +297,7 @@ public class AdminConsoleEntryPoint extends AbstractEntryPoint implements Regatt } private void addToTabPanel(TabLayoutPanel tabPanel, Panel panelToAdd, String tabTitle, AdminConsoleFeatures feature) { - UserDTO user = LoginPanel.getCurrentUser(); + UserDTO user = getUserService().getCurrentUser(); if (user != null && isUserInRole(feature.getEnabledRoles())) { ScrollPanel scrollPanel = new ScrollPanel(); scrollPanel.add(panelToAdd); @@ -308,7 +308,7 @@ public class AdminConsoleEntryPoint extends AbstractEntryPoint implements Regatt private boolean isUserInRole(UserRoles[] roles) { boolean result = true; - UserDTO user = LoginPanel.getCurrentUser(); + UserDTO user = getUserService().getCurrentUser(); for (UserRoles enabledRole : roles) { if (user.getRoles().contains(enabledRole.name())) { result = true; diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/AbstractEntryPoint.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/AbstractEntryPoint.java index c8fe4770bc6..41249e0ee24 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/AbstractEntryPoint.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/AbstractEntryPoint.java @@ -7,16 +7,21 @@ import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.resources.client.TextResource; import com.google.gwt.user.client.Window; +import com.google.gwt.user.client.rpc.ServiceDefTarget; 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.RootPanel; import com.google.gwt.user.client.ui.VerticalPanel; +import com.sap.sse.gwt.client.EntryPointHelper; import com.sap.sse.gwt.client.async.MarkedAsyncCallback; import com.sap.sse.gwt.client.async.PendingAjaxCallMarker; import com.sap.sse.gwt.client.useragent.UserAgentDetails; import com.sap.sse.gwt.shared.DebugConstants; +import com.sap.sse.security.ui.client.UserService; +import com.sap.sse.security.ui.shared.UserManagementService; +import com.sap.sse.security.ui.shared.UserManagementServiceAsync; public abstract class AbstractEntryPoint implements EntryPoint, ErrorReporter, WindowSizeDetector { private DialogBox errorDialogBox; @@ -25,7 +30,9 @@ public abstract class AbstractEntryPoint implements EntryPoint, ErrorReporter, W protected StringMessages stringMessages; protected UserAgentDetails userAgent; protected Label persistentAlertLabel; - + private UserService userService; + private UserManagementServiceAsync userManagementService; + /** * The message displayed to the user when the server cannot be reached or * returns an error. @@ -39,7 +46,6 @@ public abstract class AbstractEntryPoint implements EntryPoint, ErrorReporter, W PendingAjaxCallBundle bundle = GWT.create(PendingAjaxCallBundle.class); TextResource script = bundle.ajaxSemaphoreJS(); JavaScriptInjector.inject(script.getText()); - DebugInfo.setDebugIdAttribute(DebugConstants.DEBUG_ID_ATTRIBUTE, false); DebugInfo.setDebugIdPrefix(DebugConstants.DEBUG_ID_PREFIX); } @@ -50,12 +56,23 @@ public abstract class AbstractEntryPoint implements EntryPoint, ErrorReporter, W } protected void doOnModuleLoad() { + userManagementService = GWT.create(UserManagementService.class); + EntryPointHelper.registerASyncService((ServiceDefTarget) userManagementService, com.sap.sse.security.ui.client.RemoteServiceMappingConstants.userManagementServiceRemotePath); + userService = new UserService(userManagementService); stringMessages = GWT.create(StringMessages.class); errorDialogBox = createErrorDialog(); /* TODO: Make this more generic (e.g. make it support all kinds of messages) */ userAgent = new UserAgentDetails(Window.Navigator.getUserAgent()); persistentAlertLabel = new Label(""); persistentAlertLabel.setStyleName("global-alert-message"); } + + protected UserManagementServiceAsync getUserManagementService() { + return userManagementService; + } + + protected UserService getUserService() { + return userService; + } @Override public void reportError(String message) { @@ -87,7 +104,7 @@ public abstract class AbstractEntryPoint implements EntryPoint, ErrorReporter, W } public void createErrorPage(String message) { - LogoAndTitlePanel logoAndTitlePanel = new LogoAndTitlePanel(stringMessages, this); + LogoAndTitlePanel logoAndTitlePanel = new LogoAndTitlePanel(stringMessages, this, getUserService()); logoAndTitlePanel.addStyleName("LogoAndTitlePanel"); RootPanel.get().add(logoAndTitlePanel); RootPanel.get().add(new Label(message)); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/LogoAndTitlePanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/LogoAndTitlePanel.java index fd7a3155896..12ed466a14d 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/LogoAndTitlePanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/LogoAndTitlePanel.java @@ -5,6 +5,9 @@ import com.google.gwt.user.client.ui.Anchor; import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.RequiresResize; +import com.sap.sailing.gwt.ui.shared.SecurityStylesheetResources; +import com.sap.sse.security.ui.client.UserService; +import com.sap.sse.security.ui.loginpanel.LoginPanel; public class LogoAndTitlePanel extends FlowPanel implements RequiresResize { private final String title; @@ -15,16 +18,18 @@ public class LogoAndTitlePanel extends FlowPanel implements RequiresResize { private boolean lastIsSmallWidth; private final WindowSizeDetector windowSizeDetector; private final StringMessages stringMessages; + private final UserService userService; - public LogoAndTitlePanel(StringMessages stringConstants, WindowSizeDetector windowSizeDetector) { - this(null, null, stringConstants, windowSizeDetector); + public LogoAndTitlePanel(StringMessages stringConstants, WindowSizeDetector windowSizeDetector, UserService userService) { + this(null, null, stringConstants, windowSizeDetector, userService); } - public LogoAndTitlePanel(String title, StringMessages stringConstants, WindowSizeDetector windowSizeDetector) { - this(title, null, stringConstants, windowSizeDetector); + public LogoAndTitlePanel(String title, StringMessages stringConstants, WindowSizeDetector windowSizeDetector, UserService userService) { + this(title, null, stringConstants, windowSizeDetector, userService); } - public LogoAndTitlePanel(String title, String subtitle, StringMessages stringMessages, WindowSizeDetector windowSizeDetector) { + public LogoAndTitlePanel(String title, String subtitle, StringMessages stringMessages, WindowSizeDetector windowSizeDetector, UserService userService) { + this.userService = userService; this.title = title; this.subtitle = subtitle; this.stringMessages = stringMessages; @@ -73,6 +78,7 @@ public class LogoAndTitlePanel extends FlowPanel implements RequiresResize { subTitleLabelWrapper.add(subTitleLabel); this.add(subTitleLabelWrapper); } + this.add(new LoginPanel(SecurityStylesheetResources.INSTANCE.css(), userService)); } public String getTitle() { diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/media/MediaPlayerManagerComponent.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/media/MediaPlayerManagerComponent.java index 84cda8a5c03..5d7ae2cf2e8 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/media/MediaPlayerManagerComponent.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/media/MediaPlayerManagerComponent.java @@ -48,7 +48,7 @@ import com.sap.sse.gwt.client.player.Timer.PlayModes; import com.sap.sse.gwt.client.player.Timer.PlayStates; import com.sap.sse.gwt.client.useragent.UserAgentDetails; import com.sap.sse.gwt.client.useragent.UserAgentDetails.AgentTypes; -import com.sap.sse.security.ui.loginpanel.LoginPanel; +import com.sap.sse.security.ui.client.UserService; public class MediaPlayerManagerComponent implements Component, PlayStateListener, TimeListener, MediaPlayerManager, CloseHandler, ClosingHandler { @@ -59,6 +59,7 @@ public class MediaPlayerManagerComponent implements Component, PlayStateLi } private final SimplePanel rootPanel = new SimplePanel(); + private final UserService userService; private MediaPlayer activeAudioPlayer; private VideoPlayer dockedVideoPlayer; @@ -79,8 +80,9 @@ public class MediaPlayerManagerComponent implements Component, PlayStateLi public MediaPlayerManagerComponent(RegattaAndRaceIdentifier selectedRaceIdentifier, RaceTimesInfoProvider raceTimesInfoProvider, Timer raceTimer, MediaServiceAsync mediaService, - StringMessages stringMessages, ErrorReporter errorReporter, UserAgentDetails userAgent, - boolean autoSelectMedia) { + UserService userService, StringMessages stringMessages, ErrorReporter errorReporter, + UserAgentDetails userAgent, boolean autoSelectMedia) { + this.userService = userService; this.raceIdentifier = selectedRaceIdentifier; this.raceTimesInfoProvider = raceTimesInfoProvider; this.raceTimer = raceTimer; @@ -475,7 +477,7 @@ public class MediaPlayerManagerComponent implements Component, PlayStateLi }; final VideoSynchPlayer videoPlayer; - boolean showSynchControls = LoginPanel.getCurrentUser() != null; + boolean showSynchControls = userService.getCurrentUser() != null; if (videoTrack.isYoutube()) { videoPlayer = new VideoYoutubePlayer(videoTrack, getRaceStartTime(), showSynchControls, raceTimer); @@ -658,7 +660,7 @@ public class MediaPlayerManagerComponent implements Component, PlayStateLi @Override public boolean allowsEditing() { - return LoginPanel.getCurrentUser() != null; + return userService.getCurrentUser() != null; } @Override diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/DataMiningEntryPoint.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/DataMiningEntryPoint.java index 9c620c72472..49a3d2d12ed 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/DataMiningEntryPoint.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/DataMiningEntryPoint.java @@ -71,7 +71,7 @@ public class DataMiningEntryPoint extends AbstractEntryPoint { } private LogoAndTitlePanel createLogoAndTitlePanel() { - LogoAndTitlePanel logoAndTitlePanel = new LogoAndTitlePanel(stringMessages.dataMining(), stringMessages, this); + LogoAndTitlePanel logoAndTitlePanel = new LogoAndTitlePanel(stringMessages.dataMining(), stringMessages, this, getUserService()); logoAndTitlePanel.addStyleName("LogoAndTitlePanel"); FlowPanel globalNavigationPanel = new GlobalNavigationPanel(stringMessages, true, null, null, /* event */ null, null); logoAndTitlePanel.add(globalNavigationPanel); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboard/LeaderboardEntryPoint.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboard/LeaderboardEntryPoint.java index e207d8b06fd..f73c0d6e4d5 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboard/LeaderboardEntryPoint.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboard/LeaderboardEntryPoint.java @@ -32,7 +32,6 @@ 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.sailing.gwt.ui.shared.SecurityStylesheetResources; import com.sap.sse.common.Util; import com.sap.sse.gwt.client.EntryPointHelper; import com.sap.sse.gwt.client.async.AsyncActionsExecutor; @@ -42,7 +41,6 @@ import com.sap.sse.gwt.client.player.Timer; import com.sap.sse.gwt.client.player.Timer.PlayModes; import com.sap.sse.gwt.client.player.Timer.PlayStates; import com.sap.sse.gwt.shared.GwtHttpRequestUtils; -import com.sap.sse.security.ui.loginpanel.LoginPanel; public class LeaderboardEntryPoint extends AbstractEntryPoint { @@ -59,9 +57,7 @@ public class LeaderboardEntryPoint extends AbstractEntryPoint { @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*/); @@ -88,7 +84,6 @@ public class LeaderboardEntryPoint extends AbstractEntryPoint { } else { RootPanel.get().add(new Label(stringMessages.noSuchLeaderboard())); } - RootPanel.get().add(new LoginPanel(SecurityStylesheetResources.INSTANCE.css())); } @Override @@ -121,7 +116,12 @@ public class LeaderboardEntryPoint extends AbstractEntryPoint { } final String zoomTo = Window.Location.getParameter(LeaderboardUrlSettings.PARAM_ZOOM_TO); if (zoomTo != null) { - RootPanel.getBodyElement().setAttribute("style", "zoom: "+zoomTo+";-moz-transform: scale("+zoomTo+");-moz-transform-origin: 0 0;-o-transform: scale("+zoomTo+");-o-transform-origin: 0 0;-webkit-transform: scale("+zoomTo+");-webkit-transform-origin: 0 0;"); + RootPanel.getBodyElement().setAttribute( + "style", + "zoom: " + zoomTo + ";-moz-transform: scale(" + zoomTo + + ");-moz-transform-origin: 0 0;-o-transform: scale(" + zoomTo + + ");-o-transform-origin: 0 0;-webkit-transform: scale(" + zoomTo + + ");-webkit-transform-origin: 0 0;"); } } @@ -136,7 +136,7 @@ public class LeaderboardEntryPoint extends AbstractEntryPoint { leaderboardDisplayName = leaderboardName; } globalNavigationPanel = new GlobalNavigationPanel(stringMessages, true, null, leaderboardGroupName, event, null); - logoAndTitlePanel = new LogoAndTitlePanel(leaderboardGroupName, leaderboardDisplayName, stringMessages, this) { + logoAndTitlePanel = new LogoAndTitlePanel(leaderboardGroupName, leaderboardDisplayName, stringMessages, this, getUserService()) { @Override public void onResize() { super.onResize(); @@ -167,7 +167,7 @@ public class LeaderboardEntryPoint extends AbstractEntryPoint { boolean showOverallLeaderboard = GwtHttpRequestUtils.getBooleanParameter(LeaderboardUrlSettings.PARAM_SHOW_OVERALL_LEADERBOARD, false); boolean showSeriesLeaderboards = GwtHttpRequestUtils.getBooleanParameter(LeaderboardUrlSettings.PARAM_SHOW_SERIES_LEADERBOARDS, false); String chartDetailParam = GwtHttpRequestUtils.getStringParameter(LeaderboardUrlSettings.PARAM_CHART_DETAIL, null); - DetailType chartDetailType; + final DetailType chartDetailType; if (chartDetailParam != null && (DetailType.REGATTA_RANK.name().equals(chartDetailParam) || DetailType.OVERALL_RANK.name().equals(chartDetailParam) || DetailType.REGATTA_TOTAL_POINTS_SUM.name().equals(chartDetailParam))) { chartDetailType = DetailType.valueOf(chartDetailParam); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboardedit/LeaderboardEditPage.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboardedit/LeaderboardEditPage.java index 5db95c5b4ae..6e697f702b0 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboardedit/LeaderboardEditPage.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboardedit/LeaderboardEditPage.java @@ -32,7 +32,7 @@ public class LeaderboardEditPage extends AbstractEntryPoint { public void onSuccess(List leaderboardNames) { String leaderboardName = Window.Location.getParameter("name"); if (leaderboardNames.contains(leaderboardName)) { - LogoAndTitlePanel logoAndTitlePanel = new LogoAndTitlePanel(stringMessages.editScores(), stringMessages, LeaderboardEditPage.this); + LogoAndTitlePanel logoAndTitlePanel = new LogoAndTitlePanel(stringMessages.editScores(), stringMessages, LeaderboardEditPage.this, getUserService()); logoAndTitlePanel.addStyleName("LogoAndTitlePanel"); EditableLeaderboardPanel leaderboardPanel = new EditableLeaderboardPanel(sailingService, new AsyncActionsExecutor(), leaderboardName, null, LeaderboardEditPage.this, stringMessages, userAgent); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardEntryPoint.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardEntryPoint.java index 2c58d0f6eb8..6344fdddbaf 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardEntryPoint.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardEntryPoint.java @@ -141,7 +141,7 @@ public class RaceBoardEntryPoint extends AbstractEntryPoint { if (leaderboardGroupName != null) { sailingService.getLeaderboardGroupByName(leaderboardGroupNameParamValue, false /*withGeoLocationData*/, getLeaderboardGroupByNameCallback); } - RootPanel.get().add(new LoginPanel(SecurityStylesheetResources.INSTANCE.css())); + RootPanel.get().add(new LoginPanel(SecurityStylesheetResources.INSTANCE.css(), getUserService())); } private void checkUrlParameters(List leaderboardNames, LeaderboardGroupDTO leaderboardGroup, @@ -192,8 +192,8 @@ public class RaceBoardEntryPoint extends AbstractEntryPoint { Timer timer = new Timer(PlayModes.Replay, 1000l); AsyncActionsExecutor asyncActionsExecutor = new AsyncActionsExecutor(); RaceTimesInfoProvider raceTimesInfoProvider = new RaceTimesInfoProvider(sailingService, asyncActionsExecutor, this, singletonList, 5000l /* requestInterval*/); - RaceBoardPanel raceBoardPanel = new RaceBoardPanel(sailingService, mediaService, asyncActionsExecutor, timer, raceSelectionModel, leaderboardName, - leaderboardGroupName, event, raceboardViewConfig, RaceBoardEntryPoint.this, stringMessages, userAgent, raceTimesInfoProvider, showMapControls); + RaceBoardPanel raceBoardPanel = new RaceBoardPanel(sailingService, mediaService, getUserService(), asyncActionsExecutor, timer, raceSelectionModel, + leaderboardName, leaderboardGroupName, event, raceboardViewConfig, RaceBoardEntryPoint.this, stringMessages, userAgent, raceTimesInfoProvider, showMapControls); raceBoardPanel.fillRegattas(regattas); createRaceBoardInOneScreenMode(raceBoardPanel, raceboardViewConfig); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardPanel.java index 93a291721d7..0047b7f835a 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardPanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardPanel.java @@ -57,6 +57,7 @@ import com.sap.sse.gwt.client.async.AsyncActionsExecutor; import com.sap.sse.gwt.client.player.TimeRangeWithZoomModel; import com.sap.sse.gwt.client.player.Timer; import com.sap.sse.gwt.client.useragent.UserAgentDetails; +import com.sap.sse.security.ui.client.UserService; /** * A view showing a list of components visualizing a race from the regattas announced by calls to {@link #fillRegattas(List)}. @@ -110,16 +111,17 @@ public class RaceBoardPanel extends SimplePanel implements RegattasDisplayer, Ra private boolean currentRaceHasBeenSelectedOnce; /** + * @param userService TODO * @param event * an optional event that can be used for "back"-navigation in case the race board shows a race in the * context of an event; may be null. */ public RaceBoardPanel(SailingServiceAsync sailingService, MediaServiceAsync mediaService, - AsyncActionsExecutor asyncActionsExecutor, Timer timer, - RaceSelectionProvider theRaceSelectionProvider, String leaderboardName, String leaderboardGroupName, - EventDTO event, RaceBoardViewConfiguration raceboardViewConfiguration, ErrorReporter errorReporter, - final StringMessages stringMessages, UserAgentDetails userAgent, - RaceTimesInfoProvider raceTimesInfoProvider, boolean showMapControls) { + UserService userService, AsyncActionsExecutor asyncActionsExecutor, + Timer timer, RaceSelectionProvider theRaceSelectionProvider, String leaderboardName, + String leaderboardGroupName, EventDTO event, RaceBoardViewConfiguration raceboardViewConfiguration, + ErrorReporter errorReporter, final StringMessages stringMessages, + UserAgentDetails userAgent, RaceTimesInfoProvider raceTimesInfoProvider, boolean showMapControls) { this.sailingService = sailingService; this.mediaService = mediaService; this.stringMessages = stringMessages; @@ -164,7 +166,7 @@ public class RaceBoardPanel extends SimplePanel implements RegattasDisplayer, Ra leaderboardPanel.setTitle(stringMessages.leaderboard()); leaderboardPanel.getElement().getStyle().setMarginLeft(6, Unit.PX); leaderboardPanel.getElement().getStyle().setMarginTop(4, Unit.PX); - createOneScreenView(leaderboardName, leaderboardGroupName, event, mainPanel, showMapControls, raceMap); // initializes the raceMap field + createOneScreenView(leaderboardName, leaderboardGroupName, event, mainPanel, showMapControls, raceMap, userService); // initializes the raceMap field leaderboardPanel.addLeaderboardUpdateListener(this); // in case the URL configuration contains the name of a competitors filter set we try to activate it // FIXME the competitorsFilterSets has now moved to CompetitorSearchTextBox (which should probably be renamed); pass on the parameters to the LeaderboardPanel and see what it does with it @@ -188,9 +190,10 @@ public class RaceBoardPanel extends SimplePanel implements RegattasDisplayer, Ra /** * @param event an optional event; may be null or else can be used to show some context information in * the {@link GlobalNavigationPanel}. + * @param userService TODO */ private void createOneScreenView(String leaderboardName, String leaderboardGroupName, EventDTO event, FlowPanel mainPanel, - boolean showMapControls, RaceMap raceMap) { + boolean showMapControls, RaceMap raceMap, UserService userService) { // create the default leaderboard and select the right race raceTimesInfoProvider.addRaceTimesInfoProviderListener(raceMap); raceMap.onRaceSelectionChange(Collections.singletonList(selectedRaceIdentifier)); @@ -208,7 +211,7 @@ public class RaceBoardPanel extends SimplePanel implements RegattasDisplayer, Ra windChart.getEntryWidget().setTitle(stringMessages.windChart()); components.add(windChart); boolean autoSelectMedia = getConfiguration().isAutoSelectMedia(); - MediaPlayerManagerComponent mediaPlayerManagerComponent = new MediaPlayerManagerComponent(selectedRaceIdentifier, raceTimesInfoProvider, timer, mediaService, stringMessages, errorReporter, userAgent, autoSelectMedia); + MediaPlayerManagerComponent mediaPlayerManagerComponent = new MediaPlayerManagerComponent(selectedRaceIdentifier, raceTimesInfoProvider, timer, mediaService, userService, stringMessages, errorReporter, userAgent, autoSelectMedia); leaderboardAndMapViewer = new SideBySideComponentViewer(leaderboardPanel, raceMap, mediaPlayerManagerComponent, components, stringMessages); componentViewers.add(leaderboardAndMapViewer); for (ComponentViewer componentViewer : componentViewers) { diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/regattaoverview/RegattaOverviewEntryPoint.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/regattaoverview/RegattaOverviewEntryPoint.java index 0e787377ca9..98755bde2a2 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/regattaoverview/RegattaOverviewEntryPoint.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/regattaoverview/RegattaOverviewEntryPoint.java @@ -53,7 +53,7 @@ public class RegattaOverviewEntryPoint extends AbstractEntryPoint { boolean embedded = Window.Location.getParameter("embedded") != null && Window.Location.getParameter("embedded").equalsIgnoreCase("true"); if (!embedded) { - LogoAndTitlePanel logoAndTitlePanel = new LogoAndTitlePanel(stringMessages.eventOverview(), stringMessages, this); + LogoAndTitlePanel logoAndTitlePanel = new LogoAndTitlePanel(stringMessages.eventOverview(), stringMessages, this, getUserService()); logoAndTitlePanel.addStyleName("LogoAndTitlePanel"); containerPanel.addNorth(logoAndTitlePanel, 68); } else { diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/simulator/SimulatorEntryPoint.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/simulator/SimulatorEntryPoint.java index cfaac88b123..55f403b72cb 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/simulator/SimulatorEntryPoint.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/simulator/SimulatorEntryPoint.java @@ -182,7 +182,7 @@ public class SimulatorEntryPoint extends AbstractEntryPoint { } private FlowPanel createLogoAndTitlePanel(SimulatorMainPanel simulatorPanel) { - LogoAndTitlePanel logoAndTitlePanel = new LogoAndTitlePanel(titleName, null, stringMessages, this); + LogoAndTitlePanel logoAndTitlePanel = new LogoAndTitlePanel(titleName, null, stringMessages, this, getUserService()); /*{ @Override public void onResize() { diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/spectator/SpectatorEntryPoint.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/spectator/SpectatorEntryPoint.java index c5124ef84dd..58d6b3c6606 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/spectator/SpectatorEntryPoint.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/spectator/SpectatorEntryPoint.java @@ -74,7 +74,7 @@ public class SpectatorEntryPoint extends AbstractEntryPoint implements RegattaRe && Window.Location.getParameter("embedded").equalsIgnoreCase("true"); if (!embedded) { String title = groupName != null ? groupName : stringMessages.overview(); - LogoAndTitlePanel logoAndTitlePanel = new LogoAndTitlePanel(title, stringMessages, this); + LogoAndTitlePanel logoAndTitlePanel = new LogoAndTitlePanel(title, stringMessages, this, getUserService()); logoAndTitlePanel.addStyleName("LogoAndTitlePanel"); FlowPanel globalNavigationPanel = new GlobalNavigationPanel(stringMessages, true, null, null, /* event */ null, null); logoAndTitlePanel.add(globalNavigationPanel); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/tv/TVEntryPoint.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/tv/TVEntryPoint.java index ed2e202cdf6..b1fd0d787f9 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/tv/TVEntryPoint.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/tv/TVEntryPoint.java @@ -92,14 +92,14 @@ public class TVEntryPoint extends AbstractEntryPoint { if(leaderboardDisplayName == null || leaderboardDisplayName.isEmpty()) { leaderboardDisplayName = leaderboardName; } - logoAndTitlePanel = new LogoAndTitlePanel(leaderboardGroupName, leaderboardDisplayName, stringMessages, this); + logoAndTitlePanel = new LogoAndTitlePanel(leaderboardGroupName, leaderboardDisplayName, stringMessages, this, getUserService()); logoAndTitlePanel.addStyleName("LogoAndTitlePanel"); mainPanel.addNorth(logoAndTitlePanel, 68); } - tvViewController = new TVViewController(sailingService, mediaService, stringMessages, this, - leaderboardGroupName, leaderboardName, userAgent, logoAndTitlePanel, mainPanel, delayToLiveMillis, - showRaceDetails, raceboardViewConfig); + tvViewController = new TVViewController(sailingService, mediaService, getUserService(), stringMessages, + this, leaderboardGroupName, leaderboardName, userAgent, logoAndTitlePanel, mainPanel, + delayToLiveMillis, showRaceDetails, raceboardViewConfig); tvViewController.updateTvView(TVViews.Leaderboard); } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/tv/TVViewController.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/tv/TVViewController.java index 6a33ecbe02d..e93498860ef 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/tv/TVViewController.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/tv/TVViewController.java @@ -34,6 +34,7 @@ import com.sap.sse.gwt.client.async.AsyncActionsExecutor; import com.sap.sse.gwt.client.player.Timer; import com.sap.sse.gwt.client.player.Timer.PlayModes; import com.sap.sse.gwt.client.useragent.UserAgentDetails; +import com.sap.sse.security.ui.client.UserService; public class TVViewController implements RaceTimesInfoProviderListener { private static final int REFRESH_INTERVAL_IN_MILLIS_LEADERBOARD = 10000; @@ -67,8 +68,10 @@ public class TVViewController implements RaceTimesInfoProviderListener { private boolean showRaceDetails; private boolean showWindChart; private final RaceBoardViewConfiguration raceboardViewConfig; + private final UserService userService; /** + * @param userService TODO * @param logoAndTitlePanel * allowed to be null * @param showNavigationPanel @@ -76,10 +79,11 @@ public class TVViewController implements RaceTimesInfoProviderListener { * the various components and lets them configure them; makes sense to use only if intended for "manned" mode. */ public TVViewController(SailingServiceAsync sailingService, MediaServiceAsync mediaService, - StringMessages stringMessages, ErrorReporter errorReporter, String leaderboardGroupName, - String leaderboardName, UserAgentDetails userAgent, LogoAndTitlePanel logoAndTitlePanel, - DockLayoutPanel dockPanel, long delayToLiveInMillis, boolean showRaceDetails, - RaceBoardViewConfiguration raceboardViewConfig) { + UserService userService, StringMessages stringMessages, ErrorReporter errorReporter, + String leaderboardGroupName, String leaderboardName, UserAgentDetails userAgent, + LogoAndTitlePanel logoAndTitlePanel, DockLayoutPanel dockPanel, long delayToLiveInMillis, + boolean showRaceDetails, RaceBoardViewConfiguration raceboardViewConfig) { + this.userService = userService; this.raceboardViewConfig = raceboardViewConfig; this.sailingService = sailingService; this.mediaService = mediaService; @@ -149,9 +153,9 @@ public class TVViewController implements RaceTimesInfoProviderListener { RaceSelectionModel raceSelectionModel = new RaceSelectionModel(); List singletonList = Collections.singletonList(raceToShow); raceSelectionModel.setSelection(singletonList); - RaceBoardPanel raceBoardPanel = new RaceBoardPanel(sailingService, mediaService, asyncActionsExecutor, - raceboardTimer, raceSelectionModel, leaderboardName, null, /* event */null, raceboardViewConfig, - errorReporter, stringMessages, userAgent, raceTimesInfoProvider, /* showMapControls */false); + RaceBoardPanel raceBoardPanel = new RaceBoardPanel(sailingService, mediaService, userService, + asyncActionsExecutor, raceboardTimer, raceSelectionModel, leaderboardName, null, /* event */null, + raceboardViewConfig, errorReporter, stringMessages, userAgent, raceTimesInfoProvider, /* showMapControls */false); return raceBoardPanel; } diff --git a/java/com.sap.sailing.gwt.ui/src/main/resources/com/sap/sailing/gwt/ui/LeaderboardEditing.gwt.xml b/java/com.sap.sailing.gwt.ui/src/main/resources/com/sap/sailing/gwt/ui/LeaderboardEditing.gwt.xml index 32357e0725f..b93c09ff035 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/resources/com/sap/sailing/gwt/ui/LeaderboardEditing.gwt.xml +++ b/java/com.sap.sailing.gwt.ui/src/main/resources/com/sap/sailing/gwt/ui/LeaderboardEditing.gwt.xml @@ -19,7 +19,8 @@ - + + @@ -35,7 +36,7 @@ - + diff --git a/java/com.sap.sailing.gwt.ui/src/main/resources/com/sap/sailing/gwt/ui/RegattaOverview.gwt.xml b/java/com.sap.sailing.gwt.ui/src/main/resources/com/sap/sailing/gwt/ui/RegattaOverview.gwt.xml index 703f21a4e9f..b0a904c6698 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/resources/com/sap/sailing/gwt/ui/RegattaOverview.gwt.xml +++ b/java/com.sap.sailing.gwt.ui/src/main/resources/com/sap/sailing/gwt/ui/RegattaOverview.gwt.xml @@ -20,7 +20,8 @@ - + + diff --git a/java/com.sap.sailing.gwt.ui/src/main/resources/com/sap/sailing/gwt/ui/Search.gwt.xml b/java/com.sap.sailing.gwt.ui/src/main/resources/com/sap/sailing/gwt/ui/Search.gwt.xml index 177244e8f24..274ea79fdc5 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/resources/com/sap/sailing/gwt/ui/Search.gwt.xml +++ b/java/com.sap.sailing.gwt.ui/src/main/resources/com/sap/sailing/gwt/ui/Search.gwt.xml @@ -28,7 +28,7 @@ - + diff --git a/java/com.sap.sailing.gwt.ui/src/main/resources/com/sap/sailing/gwt/ui/Spectator.gwt.xml b/java/com.sap.sailing.gwt.ui/src/main/resources/com/sap/sailing/gwt/ui/Spectator.gwt.xml index 4e1c414567c..ebccbfd30fb 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/resources/com/sap/sailing/gwt/ui/Spectator.gwt.xml +++ b/java/com.sap.sailing.gwt.ui/src/main/resources/com/sap/sailing/gwt/ui/Spectator.gwt.xml @@ -21,7 +21,8 @@ - + + @@ -37,7 +38,7 @@ - + diff --git a/java/com.sap.sailing.gwt.ui/src/main/resources/com/sap/sailing/gwt/ui/UserManagement.gwt.xml b/java/com.sap.sailing.gwt.ui/src/main/resources/com/sap/sailing/gwt/ui/UserManagement.gwt.xml index a4af606eef8..3ab1cad1eae 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/resources/com/sap/sailing/gwt/ui/UserManagement.gwt.xml +++ b/java/com.sap.sailing.gwt.ui/src/main/resources/com/sap/sailing/gwt/ui/UserManagement.gwt.xml @@ -14,7 +14,8 @@ - + + @@ -30,7 +31,7 @@ - + diff --git a/java/com.sap.sailing.gwt.ui/src/main/resources/com/sap/sailing/gwt/ui/YoutubePopup.gwt.xml b/java/com.sap.sailing.gwt.ui/src/main/resources/com/sap/sailing/gwt/ui/YoutubePopup.gwt.xml index d8aafa49fb5..1b3ad714eeb 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/resources/com/sap/sailing/gwt/ui/YoutubePopup.gwt.xml +++ b/java/com.sap.sailing.gwt.ui/src/main/resources/com/sap/sailing/gwt/ui/YoutubePopup.gwt.xml @@ -7,7 +7,8 @@ - + + @@ -23,7 +24,7 @@ - + diff --git a/java/com.sap.sse.security.ui/META-INF/MANIFEST.MF b/java/com.sap.sse.security.ui/META-INF/MANIFEST.MF index d751487f180..7cb2c7e5cdf 100644 --- a/java/com.sap.sse.security.ui/META-INF/MANIFEST.MF +++ b/java/com.sap.sse.security.ui/META-INF/MANIFEST.MF @@ -17,6 +17,7 @@ Require-Bundle: javax.servlet;bundle-version="2.5.0", com.sap.sse.security;bundle-version="1.0.0", org.json.simple Web-ContextPath: /security/ui -Export-Package: com.sap.sse.security.ui.loginpanel, +Export-Package: com.sap.sse.security.ui.client, + com.sap.sse.security.ui.loginpanel, com.sap.sse.security.ui.server, com.sap.sse.security.ui.shared diff --git a/java/com.sap.sse.security.ui/WEB-INF/web.xml b/java/com.sap.sse.security.ui/WEB-INF/web.xml index d399906375a..32ce3b77f0e 100644 --- a/java/com.sap.sse.security.ui/WEB-INF/web.xml +++ b/java/com.sap.sse.security.ui/WEB-INF/web.xml @@ -49,7 +49,7 @@ /redirect - + remoteLogging com.google.gwt.logging.server.RemoteLoggingServiceImpl @@ -57,5 +57,6 @@ remoteLogging /com.sap.sse.security.ui.OAuthLogin/remote_logging + /com.sap.sse.security.ui.Login/remote_logging diff --git a/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/client/UserService.java b/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/client/UserService.java index e6a1843366f..60eb9310371 100755 --- a/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/client/UserService.java +++ b/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/client/UserService.java @@ -2,6 +2,7 @@ package com.sap.sse.security.ui.client; import java.util.HashSet; import java.util.Set; +import java.util.UUID; import java.util.logging.Logger; import com.google.gwt.core.client.GWT; @@ -9,11 +10,10 @@ import com.google.gwt.storage.client.Storage; import com.google.gwt.storage.client.StorageEvent; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.rpc.AsyncCallback; -import com.sap.sse.security.ui.loginpanel.LoginPanel; +import com.sap.sse.gwt.client.async.MarkedAsyncCallback; import com.sap.sse.security.ui.oauth.client.util.ClientUtils; import com.sap.sse.security.ui.shared.SuccessInfo; import com.sap.sse.security.ui.shared.UserDTO; -import com.sap.sse.security.ui.shared.UserManagementService; import com.sap.sse.security.ui.shared.UserManagementServiceAsync; /** @@ -44,7 +44,7 @@ public class UserService { */ private static final String LOCAL_STORAGE_UPDATE_KEY = "current-user-has-changed"; - private static final UserManagementServiceAsync userManagementService = GWT.create(UserManagementService.class); + private final UserManagementServiceAsync userManagementService; private final Storage localStorage; @@ -52,13 +52,28 @@ public class UserService { private UserDTO currentUser; - public UserService() { + private final UUID id; + + public UserService(UserManagementServiceAsync userManagementService) { + this.id = UUID.randomUUID(); + this.userManagementService = userManagementService; localStorage = Storage.getLocalStorageIfSupported(); handlers = new HashSet<>(); registerStorageListener(); updateUser(/* notifyOtherInstances */ false); } + /** + * Used to synchronize changes in the user status between all {@link UserService} instances across all browser + * tabs/windows. + */ + public void fireUserUpdateEvent() { + if (localStorage != null) { + localStorage.setItem(LOCAL_STORAGE_UPDATE_KEY, id.toString()); + localStorage.setItem(LOCAL_STORAGE_UPDATE_KEY, ""); + } + } + /** * Lets this user service get notified if other tabs or browser windows update the logged-in user */ @@ -67,7 +82,9 @@ public class UserService { Storage.addStorageEventHandler(new StorageEvent.Handler() { @Override public void onStorageChange(StorageEvent event) { - if (LOCAL_STORAGE_UPDATE_KEY.equals(event.getKey()) && Boolean.TRUE.toString().equals(event.getNewValue())) { + // ignore update events coming from this object itself + if (LOCAL_STORAGE_UPDATE_KEY.equals(event.getKey()) && event.getNewValue() != null + && !event.getNewValue().isEmpty() && !event.getNewValue().equals(id.toString())) { updateUser(/* Don't play endless ping-ping between instances! */ false); } } @@ -86,7 +103,8 @@ public class UserService { * if true, other instances of this class will be notified about the result of the call */ private void updateUser(final boolean notifyOtherInstances) { - userManagementService.getCurrentUser(new AsyncCallback() { + userManagementService.getCurrentUser(new MarkedAsyncCallback( + new AsyncCallback() { @Override public void onSuccess(UserDTO result) { setCurrentUser(result, notifyOtherInstances); @@ -96,7 +114,7 @@ public class UserService { public void onFailure(Throwable caught) { Window.alert(caught.getMessage()); } - }); + })); } /** @@ -105,7 +123,8 @@ public class UserService { * signed-in user will remain to be signed in. */ public void login(String username, String password, final AsyncCallback callback) { - userManagementService.login(username, password, new AsyncCallback() { + userManagementService.login(username, password, + new MarkedAsyncCallback(new AsyncCallback() { @Override public void onFailure(Throwable caught) { callback.onFailure(caught); @@ -118,13 +137,14 @@ public class UserService { } callback.onSuccess(result); } - }); + })); } public void verifySocialUser(final AsyncCallback callback) throws Exception { final String authProviderName = ClientUtils.getAuthProviderNameFromCookie(); logger.info("Verifying " + authProviderName + " user ..."); - userManagementService.verifySocialUser(ClientUtils.getCredential(), new AsyncCallback() { + userManagementService.verifySocialUser(ClientUtils.getCredential(), + new MarkedAsyncCallback(new AsyncCallback() { @Override public void onFailure(Throwable caught) { callback.onFailure(caught); @@ -136,11 +156,11 @@ public class UserService { logger.info(authProviderName + " user '" + result.getName() + "' is verified!\n"); callback.onSuccess(result); } - }); + })); } public void logout() { - LoginPanel.userManagementService.logout(new AsyncCallback() { + userManagementService.logout(new AsyncCallback() { @Override public void onFailure(Throwable caught) { Window.alert(stringMessages.couldNotSignOut(caught.getMessage())); @@ -165,8 +185,8 @@ public class UserService { private void setCurrentUser(UserDTO result, final boolean notifyOtherInstances) { currentUser = result; - logger.info("User changed to " + (result == null ? "No User" : result.getName()) + "roles: " - + result.getRoles()); + logger.info("User changed to " + (result == null ? "No User" : (result.getName() + " roles: " + + result.getRoles()))); notifyUserStatusEventHandlers(); if (notifyOtherInstances) { fireUserUpdateEvent(); @@ -187,15 +207,7 @@ public class UserService { } } - /** - * Used to synchronize changes in the user status between all {@link UserService} instances across all browser - * tabs/windows. - */ - public void fireUserUpdateEvent() { - if (localStorage != null) { - localStorage.setItem(LOCAL_STORAGE_UPDATE_KEY, Boolean.TRUE.toString()); - localStorage.setItem(LOCAL_STORAGE_UPDATE_KEY, Boolean.FALSE.toString()); - } + public UserManagementServiceAsync getUserManagementService() { + return userManagementService; } - } diff --git a/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/login/LoginEntryPoint.java b/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/login/LoginEntryPoint.java index acceb71196d..232811ce6b1 100644 --- a/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/login/LoginEntryPoint.java +++ b/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/login/LoginEntryPoint.java @@ -28,24 +28,22 @@ import com.sap.sse.security.ui.shared.UserManagementService; import com.sap.sse.security.ui.shared.UserManagementServiceAsync; public class LoginEntryPoint implements EntryPoint { - - private final UserManagementServiceAsync userManagementService = GWT.create(UserManagementService.class); - private final StringMessages stringMessages = GWT.create(StringMessages.class); - - private final UserService userService = new UserService(); + private UserManagementServiceAsync userManagementService; + private UserService userService; @Override public void onModuleLoad() { + userManagementService = GWT.create(UserManagementService.class); EntryPointHelper.registerASyncService((ServiceDefTarget) userManagementService, RemoteServiceMappingConstants.userManagementServiceRemotePath); - + userService = new UserService(userManagementService); RootLayoutPanel rootPanel = RootLayoutPanel.get(); DockLayoutPanel dockPanel = new DockLayoutPanel(Unit.PX); rootPanel.add(dockPanel); FlowPanel fp = new FlowPanel(); - RootPanel.get().add(new LoginPanel(Resources.INSTANCE.css())); + RootPanel.get().add(new LoginPanel(Resources.INSTANCE.css(), userService)); Label nameLabel = new Label(stringMessages.name()+": "); fp.add(nameLabel); diff --git a/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/loginpanel/LoginPanel.java b/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/loginpanel/LoginPanel.java index 8455df35b99..7e977f125c8 100644 --- a/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/loginpanel/LoginPanel.java +++ b/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/loginpanel/LoginPanel.java @@ -8,7 +8,6 @@ import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.resources.client.ImageResource; 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.FocusPanel; @@ -22,8 +21,6 @@ import com.google.gwt.user.client.ui.PasswordTextBox; import com.google.gwt.user.client.ui.SimplePanel; import com.google.gwt.user.client.ui.SubmitButton; import com.google.gwt.user.client.ui.TextBox; -import com.sap.sse.gwt.client.EntryPointHelper; -import com.sap.sse.security.ui.client.RemoteServiceMappingConstants; import com.sap.sse.security.ui.client.Resources; import com.sap.sse.security.ui.client.StringMessages; import com.sap.sse.security.ui.client.UserService; @@ -31,19 +28,13 @@ import com.sap.sse.security.ui.client.UserStatusEventHandler; import com.sap.sse.security.ui.oauth.client.component.OAuthLoginPanel; import com.sap.sse.security.ui.shared.SuccessInfo; import com.sap.sse.security.ui.shared.UserDTO; -import com.sap.sse.security.ui.shared.UserManagementService; import com.sap.sse.security.ui.shared.UserManagementServiceAsync; public class LoginPanel extends FlowPanel implements UserStatusEventHandler { - public static final UserManagementServiceAsync userManagementService = GWT.create(UserManagementService.class); + public final UserManagementServiceAsync userManagementService; public static final StringMessages stringMessages = GWT.create(StringMessages.class); - static { - EntryPointHelper.registerASyncService((ServiceDefTarget) userManagementService, - RemoteServiceMappingConstants.userManagementServiceRemotePath); - } - private FormPanel loginPanel; private FlowPanel userPanel; private SimplePanel infoPanel; @@ -51,7 +42,7 @@ public class LoginPanel extends FlowPanel implements UserStatusEventHandler { private static int counter = 0; private boolean expanded = false; - private static UserService userService = new UserService(); + private UserService userService; private Label loginTitle; private Anchor loginLink; @@ -66,7 +57,9 @@ public class LoginPanel extends FlowPanel implements UserStatusEventHandler { private final Css css; - public LoginPanel(final Css css) { + public LoginPanel(final Css css, UserService userService) { + this.userManagementService = userService.getUserManagementService(); + this.userService = userService; this.css = css; id = counter++; css.ensureInjected(); @@ -106,7 +99,8 @@ public class LoginPanel extends FlowPanel implements UserStatusEventHandler { loginPanel.addSubmitHandler(new SubmitHandler() { @Override public void onSubmit(SubmitEvent event) { - userService.login(name.getText(), password.getText(), new AsyncCallback() { + userService.login(name.getText(), password.getText(), + new AsyncCallback() { @Override public void onFailure(Throwable caught) { Window.alert(caught.getMessage()); @@ -118,7 +112,6 @@ public class LoginPanel extends FlowPanel implements UserStatusEventHandler { Window.alert(result.getMessage()); } } - }); } }); @@ -198,15 +191,15 @@ public class LoginPanel extends FlowPanel implements UserStatusEventHandler { } } - public static UserDTO getCurrentUser() { + public UserDTO getCurrentUser() { return userService.getCurrentUser(); } - public static void addUserStatusEventHandler(UserStatusEventHandler handler) { + public void addUserStatusEventHandler(UserStatusEventHandler handler) { userService.addUserStatusEventHandler(handler); } - public static void removeUserStatusEventHandler(UserStatusEventHandler handler) { + public void removeUserStatusEventHandler(UserStatusEventHandler handler) { userService.removeUserStatusEventHandler(handler); } diff --git a/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/oauth/client/OAuthLoginEntryPoint.java b/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/oauth/client/OAuthLoginEntryPoint.java index 62527091850..4429380a0de 100644 --- a/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/oauth/client/OAuthLoginEntryPoint.java +++ b/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/oauth/client/OAuthLoginEntryPoint.java @@ -26,7 +26,7 @@ import com.sap.sse.security.ui.shared.UserManagementServiceAsync; public class OAuthLoginEntryPoint implements EntryPoint, UserChangeEventHandler { private final UserManagementServiceAsync userManagementService = GWT.create(UserManagementService.class); private final StringMessages stringMessages = GWT.create(StringMessages.class); - private final UserService userService = new UserService(); + private final UserService userService = new UserService(userManagementService); private OAuthLoginPanel loginScreen = new OAuthLoginPanel(userManagementService); private FlowPanel content = new FlowPanel(); diff --git a/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/oauth/client/component/OAuthLoginPanel.java b/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/oauth/client/component/OAuthLoginPanel.java index 78b71c79c6b..de9b41a66f3 100644 --- a/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/oauth/client/component/OAuthLoginPanel.java +++ b/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/oauth/client/component/OAuthLoginPanel.java @@ -17,12 +17,14 @@ import com.google.gwt.user.client.ui.Image; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.PopupPanel; import com.google.gwt.user.client.ui.VerticalPanel; +import com.sap.sse.security.ui.client.StringMessages; import com.sap.sse.security.ui.oauth.client.CredentialDTO; import com.sap.sse.security.ui.oauth.client.resources.ImageResources; import com.sap.sse.security.ui.oauth.client.util.ClientUtils; import com.sap.sse.security.ui.shared.UserManagementServiceAsync; public class OAuthLoginPanel extends Composite { + private static final StringMessages stringMessages = GWT.create(StringMessages.class); private static final String SAP_SAILING_OAUTH_WINDOW = "sap_sailing_oauth_verification_window"; private VerticalPanel verticalPanel; private FlexTable flexTableLeft; @@ -64,7 +66,7 @@ public class OAuthLoginPanel extends Composite { dp.add(flexTableLeft); verticalPanel.add(dp); - Label loginWithLabel = new Label("Login With"); + Label loginWithLabel = new Label("Login With"); // TODO i18n loginWithLabel.setWordWrap(false); // loginWithLabel.setStyleName(labelStyle); flexTableLeft.setWidget(0, 0, loginWithLabel); @@ -77,7 +79,7 @@ public class OAuthLoginPanel extends Composite { facebookImage = new Image(images.facebookIconImageData().getSafeUri()); image = facebookImage; // image.setStyleName(imageStyle); - image.setTitle("Login with Facebook"); + image.setTitle("Login with Facebook"); // TODO i18n flexTableLeft.setWidget(r, c, image); r = 1; @@ -85,7 +87,7 @@ public class OAuthLoginPanel extends Composite { googleImage = new Image(images.googleIconImageData().getSafeUri()); image = googleImage; // image.setStyleName(imageStyle); - image.setTitle("Login with Google"); + image.setTitle("Login with Google"); // TODO i18n // flexTableLeft.setWidget(r, c, image); flexTableLeft.getCellFormatter().setHorizontalAlignment(r, c, har); @@ -94,7 +96,7 @@ public class OAuthLoginPanel extends Composite { twitterImage = new Image(images.twitterIconImageData().getSafeUri()); image = twitterImage; // image.setStyleName(imageStyle); - image.setTitle("Login with Twitter"); + image.setTitle("Login with Twitter"); // TODO i18n // flexTableLeft.setWidget(r, c, image); flexTableLeft.getCellFormatter().setHorizontalAlignment(r, c, har); @@ -103,7 +105,7 @@ public class OAuthLoginPanel extends Composite { yahooImage = new Image(images.yahooIconImageData().getSafeUri()); image = yahooImage; // image.setStyleName(imageStyle); - image.setTitle("Login with Yahoo!"); + image.setTitle("Login with Yahoo!"); // TODO i18n // flexTableLeft.setWidget(r, c, image); flexTableLeft.getCellFormatter().setHorizontalAlignment(r, c, har); @@ -113,7 +115,7 @@ public class OAuthLoginPanel extends Composite { linkedinImage = new Image(images.linkedinIconImageData().getSafeUri()); image = linkedinImage; // image.setStyleName(imageStyle); - image.setTitle("Login with LinkedIn"); + image.setTitle("Login with LinkedIn"); // TODO i18n // flexTableLeft.setWidget(r, c, image); flexTableLeft.getCellFormatter().setHorizontalAlignment(r, c, har); @@ -122,7 +124,7 @@ public class OAuthLoginPanel extends Composite { instagramImage = new Image(images.instagramIconImageData().getSafeUri()); image = instagramImage; // image.setStyleName(imageStyle); - image.setTitle("Login with Instagram"); + image.setTitle("Login with Instagram"); // TODO i18n // flexTableLeft.setWidget(r, c, image); flexTableLeft.getCellFormatter().setHorizontalAlignment(r, c, har); @@ -131,7 +133,7 @@ public class OAuthLoginPanel extends Composite { vimeoImage = new Image(images.vimeoIconImageData().getSafeUri()); image = vimeoImage; // image.setStyleName(imageStyle); - image.setTitle("Login with Vimeo"); + image.setTitle("Login with Vimeo"); // TODO i18n // flexTableLeft.setWidget(r, c, image); flexTableLeft.getCellFormatter().setHorizontalAlignment(r, c, har); @@ -140,7 +142,7 @@ public class OAuthLoginPanel extends Composite { githubImage = new Image(images.githubIconImageData().getSafeUri()); image = githubImage; // image.setStyleName(imageStyle); - image.setTitle("Login with github"); + image.setTitle("Login with github"); // TODO i18n // flexTableLeft.setWidget(r, c, image); flexTableLeft.getCellFormatter().setHorizontalAlignment(r, c, har); @@ -150,7 +152,7 @@ public class OAuthLoginPanel extends Composite { flickrImage = new Image(images.flickrIconImageData().getSafeUri()); image = flickrImage; // image.setStyleName(imageStyle); - image.setTitle("Login with flickr"); + image.setTitle("Login with flickr"); // TODO i18n // flexTableLeft.setWidget(r, c, image); flexTableLeft.getCellFormatter().setHorizontalAlignment(r, c, har); @@ -159,7 +161,7 @@ public class OAuthLoginPanel extends Composite { liveImage = new Image(images.liveIconImageData().getSafeUri()); image = liveImage; // image.setStyleName(imageStyle); - image.setTitle("Login with Microsoft Live Connect"); + image.setTitle("Login with Microsoft Live Connect"); // TODO i18n // flexTableLeft.setWidget(r, c, image); flexTableLeft.getCellFormatter().setHorizontalAlignment(r, c, har); flexTableLeft.getCellFormatter().setHorizontalAlignment(1, 0, HasHorizontalAlignment.ALIGN_RIGHT); @@ -171,7 +173,7 @@ public class OAuthLoginPanel extends Composite { tumblrImage = new Image(images.tumblrIconImageData().getSafeUri()); image = tumblrImage; // image.setStyleName(imageStyle); - image.setTitle("Login with tumblr."); + image.setTitle("Login with tumblr."); // TODO i18n // flexTableLeft.setWidget(r, c, image); flexTableLeft.getCellFormatter().setHorizontalAlignment(r, c, har); flexTableLeft.getCellFormatter().setHorizontalAlignment(1, 0, HasHorizontalAlignment.ALIGN_RIGHT); @@ -183,7 +185,7 @@ public class OAuthLoginPanel extends Composite { foursquareImage = new Image(images.foursquareIconImageData().getSafeUri()); image = foursquareImage; // image.setStyleName(imageStyle); - image.setTitle("Login with foursquare"); + image.setTitle("Login with foursquare"); // TODO i18n // flexTableLeft.setWidget(r, c, image); flexTableLeft.getCellFormatter().setHorizontalAlignment(r, c, har); flexTableLeft.getCellFormatter().setHorizontalAlignment(1, 0, HasHorizontalAlignment.ALIGN_RIGHT); @@ -198,8 +200,7 @@ public class OAuthLoginPanel extends Composite { popupFrame.setHeight("300px"); popupFrame.getElement().getStyle().setBorderWidth(0, Unit.PX); popupContent.add(popupFrame); - Button close = new Button("Close", new ClickHandler() { - + Button close = new Button(stringMessages.close(), new ClickHandler() { @Override public void onClick(ClickEvent event) { popupPanel.hide(); @@ -214,13 +215,10 @@ public class OAuthLoginPanel extends Composite { // String authProviderName = ClientUtils.getAuthProviderName(authProvider); final String callbackUrl = ClientUtils.getCallbackUrl(); GWT.log("Getting authorization url"); - final CredentialDTO credential = new CredentialDTO(); credential.setRedirectUrl(callbackUrl); credential.setAuthProvider(authProvider); - userManagementService.getAuthorizationUrl(credential, new AsyncCallback() { - @Override public void onFailure(Throwable caught) { ClientUtils.handleException(caught); @@ -256,7 +254,6 @@ public class OAuthLoginPanel extends Composite { }-*/; private void setupLoginScreenHandlers() { - facebookImage.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { diff --git a/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/usermanagement/UserManagementEntryPoint.java b/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/usermanagement/UserManagementEntryPoint.java index 3d64ed60e89..745362183c1 100644 --- a/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/usermanagement/UserManagementEntryPoint.java +++ b/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/usermanagement/UserManagementEntryPoint.java @@ -32,6 +32,7 @@ import com.sap.sse.security.ui.client.RemoteServiceMappingConstants; import com.sap.sse.security.ui.client.Resources; import com.sap.sse.security.ui.client.StringMessages; import com.sap.sse.security.ui.client.UserChangeEventHandler; +import com.sap.sse.security.ui.client.UserService; import com.sap.sse.security.ui.client.UserStatusEventHandler; import com.sap.sse.security.ui.client.component.CreateUserPanel; import com.sap.sse.security.ui.client.component.CreateUserPanel.UserCreationEventHandler; @@ -71,12 +72,13 @@ public class UserManagementEntryPoint implements EntryPoint { public void onModuleLoad() { EntryPointHelper.registerASyncService((ServiceDefTarget) userManagementService, RemoteServiceMappingConstants.userManagementServiceRemotePath); + UserService userService = new UserService(userManagementService); center = new SimpleLayoutPanel(); RootLayoutPanel rootPanel = RootLayoutPanel.get(); DockLayoutPanel dockPanel = new DockLayoutPanel(Unit.PX); rootPanel.add(dockPanel); HorizontalPanel hp = new HorizontalPanel(); - LoginPanel.addUserStatusEventHandler(new UserStatusEventHandler() { + userService.addUserStatusEventHandler(new UserStatusEventHandler() { @Override public void onUserStatusChange(UserDTO user) { if (user == null){ @@ -98,11 +100,10 @@ public class UserManagementEntryPoint implements EntryPoint { public void onClick(ClickEvent event) { CreateUserPanel createUserPanel = new CreateUserPanel(userManagementService); createUserPanel.addUserCreationEventHandler(new UserCreationEventHandler() { - @Override public void onUserCreation(UserDTO user) { userListDataProvider.updateDisplays(); - if (user != null){ + if (user != null) { singleSelectionModel.setSelected(user, true); } } @@ -165,6 +166,6 @@ public class UserManagementEntryPoint implements EntryPoint { } }); center.setWidget(createUserPanel); - RootPanel.get().add(new LoginPanel(Resources.INSTANCE.css())); + RootPanel.get().add(new LoginPanel(Resources.INSTANCE.css(), userService)); } }