From 35a4ffc735cabd5772a35e6ed67eddb9c8724e70 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Steffen=20Sch=C3=A4fer?= Date: Thu, 4 Feb 2016 14:08:43 +0100 Subject: [PATCH] Initial implementation to handle unauthenticated state in LeaderboardEditing --- .../GenericAuthorizedContentDecorator.java | 36 +++++++++++++ .../GenericNotLoggedInView.java | 52 +++++++++++++++++++ .../GenericNotLoggedInView.ui.xml | 18 +++++++ .../GenericSailingAuthentication.java | 13 ++++- .../leaderboardedit/LeaderboardEditPage.java | 16 ++++-- ...FlyoutBasedAuthorizedContentDecorator.java | 10 ++++ .../decorator/FlyoutNotLoggedInPresenter.java | 18 +++++++ 7 files changed, 156 insertions(+), 7 deletions(-) create mode 100644 java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/common/authentication/GenericAuthorizedContentDecorator.java create mode 100644 java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/common/authentication/GenericNotLoggedInView.java create mode 100644 java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/common/authentication/GenericNotLoggedInView.ui.xml create mode 100644 java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/authentication/decorator/FlyoutBasedAuthorizedContentDecorator.java create mode 100644 java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/authentication/decorator/FlyoutNotLoggedInPresenter.java diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/common/authentication/GenericAuthorizedContentDecorator.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/common/authentication/GenericAuthorizedContentDecorator.java new file mode 100644 index 00000000000..1b8ba5e3255 --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/common/authentication/GenericAuthorizedContentDecorator.java @@ -0,0 +1,36 @@ +package com.sap.sailing.gwt.common.authentication; + +import com.google.web.bindery.event.shared.HandlerRegistration; +import com.sap.sse.security.ui.authentication.AuthenticationContextEvent; +import com.sap.sse.security.ui.authentication.decorator.FlyoutBasedAuthorizedContentDecorator; + +public class GenericAuthorizedContentDecorator extends FlyoutBasedAuthorizedContentDecorator { + + private final GenericSailingAuthentication genericSailingAuthentication; + private HandlerRegistration handlerRegistration; + + public GenericAuthorizedContentDecorator(GenericSailingAuthentication genericSailingAuthentication) { + super(genericSailingAuthentication.getEventBus(), new GenericNotLoggedInView()); + this.genericSailingAuthentication = genericSailingAuthentication; + + } + + @Override + protected void onLoad() { + super.onLoad(); + setUserManagementContext(genericSailingAuthentication.getAuthenticationManager().getAuthenticationContext()); + handlerRegistration = genericSailingAuthentication.getEventBus().addHandler(AuthenticationContextEvent.TYPE, new AuthenticationContextEvent.Handler() { + @Override + public void onUserChangeEvent(AuthenticationContextEvent event) { + setUserManagementContext(event.getCtx()); + } + }); + } + + @Override + protected void onUnload() { + super.onUnload(); + handlerRegistration.removeHandler(); + handlerRegistration = null; + } +} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/common/authentication/GenericNotLoggedInView.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/common/authentication/GenericNotLoggedInView.java new file mode 100644 index 00000000000..e4fde22ed85 --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/common/authentication/GenericNotLoggedInView.java @@ -0,0 +1,52 @@ +package com.sap.sailing.gwt.common.authentication; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.dom.client.DivElement; +import com.google.gwt.event.dom.client.ClickEvent; +import com.google.gwt.uibinder.client.UiBinder; +import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.uibinder.client.UiHandler; +import com.google.gwt.user.client.ui.Button; +import com.google.gwt.user.client.ui.Composite; +import com.google.gwt.user.client.ui.Widget; +import com.sap.sse.security.ui.authentication.decorator.NotLoggedInPresenter; +import com.sap.sse.security.ui.authentication.decorator.NotLoggedInView; + +public class GenericNotLoggedInView extends Composite implements NotLoggedInView { + + private static NotLoggedInViewUiBinder uiBinder = GWT.create(NotLoggedInViewUiBinder.class); + + interface NotLoggedInViewUiBinder extends UiBinder { + } + + @UiField + DivElement messageUi; + + @UiField + Button buttonUi; + private NotLoggedInPresenter presenter; + + public GenericNotLoggedInView() { + initWidget(uiBinder.createAndBindUi(this)); + } + + @Override + public void setPresenter(NotLoggedInPresenter presenter) { + this.presenter = presenter; + } + + @UiHandler("buttonUi") + void onClick(ClickEvent e) { + presenter.doTriggerLoginForm(); + } + + @Override + public void setMessage(String message) { + messageUi.setInnerText(message); + } + + @Override + public void setSignInText(String signInText) { + buttonUi.setText(signInText); + } +} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/common/authentication/GenericNotLoggedInView.ui.xml b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/common/authentication/GenericNotLoggedInView.ui.xml new file mode 100644 index 00000000000..d0315bde1e2 --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/common/authentication/GenericNotLoggedInView.ui.xml @@ -0,0 +1,18 @@ + + + + + .message { + font-weight: bold; + font-style: italic; + display: inline-block; + padding-right: 1em; + } + + + +
+ + + \ No newline at end of file diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/common/authentication/GenericSailingAuthentication.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/common/authentication/GenericSailingAuthentication.java index ec5c2afc000..c217d0a200b 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/common/authentication/GenericSailingAuthentication.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/common/authentication/GenericSailingAuthentication.java @@ -15,6 +15,8 @@ import com.sap.sse.security.ui.client.UserService; public class GenericSailingAuthentication { private static final CommonSharedResources res = CommonSharedResources.INSTANCE; + private final EventBus eventBus; + private final AuthenticationManager manager; public GenericSailingAuthentication(UserService userService, AuthenticationMenuView userManagementMenuView) { this(userService, userManagementMenuView, false); @@ -23,14 +25,14 @@ public class GenericSailingAuthentication { public GenericSailingAuthentication(UserService userService, AuthenticationMenuView menuView, boolean fixedPositioning) { res.mainCss().ensureInjected(); - final EventBus eventBus = new SimpleEventBus(); + eventBus = new SimpleEventBus(); final FlyoutAuthenticationView display; if (fixedPositioning) { display = new FixedSailingAuthenticationView(res); } else { display = new GenericSailingAuthenticationView(res); } - final AuthenticationManager manager = new AuthenticationManagerImpl(userService, eventBus, + manager = new AuthenticationManagerImpl(userService, eventBus, SailingAuthenticationEntryPointLinkFactory.createEmailValidationLink(), SailingAuthenticationEntryPointLinkFactory.createPasswordResetLink()); final AuthenticationClientFactory clientFactory = new AuthenticationClientFactoryImpl(manager, res); @@ -41,4 +43,11 @@ public class GenericSailingAuthentication { new FlyoutAuthenticationPresenter(display, menuView, controller, eventBus, manager.getAuthenticationContext()); } + public EventBus getEventBus() { + return eventBus; + } + + public AuthenticationManager getAuthenticationManager() { + return manager; + } } 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 bcb55a825db..dc66d1c0942 100644 --- 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 @@ -9,12 +9,13 @@ import com.google.gwt.user.client.Window; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.RootPanel; -import com.google.gwt.user.client.ui.Widget; +import com.sap.sailing.gwt.common.authentication.GenericAuthorizedContentDecorator; import com.sap.sailing.gwt.common.authentication.GenericSailingAuthentication; import com.sap.sailing.gwt.common.authentication.SAPHeaderWithAuthentication; import com.sap.sailing.gwt.ui.client.AbstractSailingEntryPoint; import com.sap.sse.gwt.client.async.AsyncActionsExecutor; import com.sap.sse.gwt.client.async.MarkedAsyncCallback; +import com.sap.sse.security.ui.authentication.decorator.AuthorizedContentDecorator; public class LeaderboardEditPage extends AbstractSailingEntryPoint { @Override @@ -30,8 +31,14 @@ public class LeaderboardEditPage extends AbstractSailingEntryPoint { EditableLeaderboardPanel leaderboardPanel = new EditableLeaderboardPanel(sailingService, new AsyncActionsExecutor(), leaderboardName, null, LeaderboardEditPage.this, getStringMessages(), userAgent); leaderboardPanel.ensureDebugId("EditableLeaderboardPanel"); - RootPanel.get().add(leaderboardPanel); - RootPanel.get().add(initHeader()); + + SAPHeaderWithAuthentication header = initHeader(); + GenericSailingAuthentication genericSailingAuthentication = new GenericSailingAuthentication(getUserService(), header.getAuthenticationMenuView(), true); + AuthorizedContentDecorator authorizedContentDecorator = new GenericAuthorizedContentDecorator(genericSailingAuthentication); + authorizedContentDecorator.addContent(leaderboardPanel); + + RootPanel.get().add(authorizedContentDecorator); + RootPanel.get().add(header); } else { RootPanel.get().add(new Label(getStringMessages().noSuchLeaderboard())); } @@ -43,7 +50,7 @@ public class LeaderboardEditPage extends AbstractSailingEntryPoint { })); } - private Widget initHeader() { + private SAPHeaderWithAuthentication initHeader() { Label title = new Label(getStringMessages().editScores()); title.getElement().getStyle().setColor("white"); title.getElement().getStyle().setFontSize(20, Unit.PX); @@ -51,7 +58,6 @@ public class LeaderboardEditPage extends AbstractSailingEntryPoint { title.getElement().getStyle().setMarginTop(16, Unit.PX); SAPHeaderWithAuthentication header = new SAPHeaderWithAuthentication(getStringMessages().sapSailingAnalytics(), title); - new GenericSailingAuthentication(getUserService(), header.getAuthenticationMenuView(), true); header.getElement().getStyle().setPosition(Position.FIXED); header.getElement().getStyle().setTop(0, Unit.PX); diff --git a/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/authentication/decorator/FlyoutBasedAuthorizedContentDecorator.java b/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/authentication/decorator/FlyoutBasedAuthorizedContentDecorator.java new file mode 100644 index 00000000000..0abfe64f1fb --- /dev/null +++ b/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/authentication/decorator/FlyoutBasedAuthorizedContentDecorator.java @@ -0,0 +1,10 @@ +package com.sap.sse.security.ui.authentication.decorator; + +import com.google.web.bindery.event.shared.EventBus; + +public class FlyoutBasedAuthorizedContentDecorator extends AuthorizedContentDecorator { + + public FlyoutBasedAuthorizedContentDecorator(EventBus eventBus, NotLoggedInView notLoggedInView) { + super(new FlyoutNotLoggedInPresenter(eventBus), notLoggedInView); + } +} diff --git a/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/authentication/decorator/FlyoutNotLoggedInPresenter.java b/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/authentication/decorator/FlyoutNotLoggedInPresenter.java new file mode 100644 index 00000000000..388594a52b2 --- /dev/null +++ b/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/authentication/decorator/FlyoutNotLoggedInPresenter.java @@ -0,0 +1,18 @@ +package com.sap.sse.security.ui.authentication.decorator; + +import com.google.web.bindery.event.shared.EventBus; +import com.sap.sse.security.ui.authentication.AuthenticationRequestEvent; + +public class FlyoutNotLoggedInPresenter implements NotLoggedInPresenter { + + private final EventBus eventBus; + + public FlyoutNotLoggedInPresenter(EventBus eventBus) { + this.eventBus = eventBus; + } + + @Override + public void doTriggerLoginForm() { + eventBus.fireEvent(new AuthenticationRequestEvent()); + } +}