From cd87c1981acce536614d10dcdac4720a999157de Mon Sep 17 00:00:00 2001 From: Benjamin Barth Date: Fri, 27 Oct 2017 11:40:13 +0200 Subject: [PATCH] bug4312 Introduced abstraction for desktop and mobile version of MoreLoginInformation activity and view --- .../MoreLoginInformation.java | 31 -------------- .../MoreLoginInformationActivity.java | 35 ++-------------- .../MoreLoginInformationDesktop.java | 22 ++++++++++ ...xml => MoreLoginInformationDesktop.ui.xml} | 0 .../MoreLoginInformationActivity.java | 35 ++-------------- .../MoreLoginInformationMobile.java | 19 +++------ .../AbstractMoreLoginInformation.java | 29 +++++++++++++ .../AbstractMoreLoginInformationActivity.java | 41 +++++++++++++++++++ .../MoreLoginInformationView.java | 17 ++++++++ 9 files changed, 122 insertions(+), 107 deletions(-) delete mode 100644 java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/places/morelogininformation/MoreLoginInformation.java create mode 100644 java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/places/morelogininformation/MoreLoginInformationDesktop.java rename java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/places/morelogininformation/{MoreLoginInformation.ui.xml => MoreLoginInformationDesktop.ui.xml} (100%) create mode 100644 java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/shared/places/morelogininformation/AbstractMoreLoginInformation.java create mode 100644 java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/shared/places/morelogininformation/AbstractMoreLoginInformationActivity.java create mode 100644 java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/shared/places/morelogininformation/MoreLoginInformationView.java diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/places/morelogininformation/MoreLoginInformation.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/places/morelogininformation/MoreLoginInformation.java deleted file mode 100644 index 380c525b02d..00000000000 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/places/morelogininformation/MoreLoginInformation.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.sap.sailing.gwt.home.desktop.places.morelogininformation; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.dom.client.Element; -import com.google.gwt.uibinder.client.UiBinder; -import com.google.gwt.uibinder.client.UiField; -import com.google.gwt.user.client.DOM; -import com.google.gwt.user.client.Event; -import com.google.gwt.user.client.ui.Composite; -import com.google.gwt.user.client.ui.Widget; - -/** - * Desktop page that shows the benefits of logging in on sapsailing.com. - */ -public class MoreLoginInformation extends Composite { - - private static MoreLoginInformationUiBinder uiBinder = GWT.create(MoreLoginInformationUiBinder.class); - - interface MoreLoginInformationUiBinder extends UiBinder { - } - - @UiField - Element registerControl; - - public MoreLoginInformation(Runnable onRegisterClick) { - initWidget(uiBinder.createAndBindUi(this)); - DOM.sinkEvents(registerControl, Event.ONCLICK); - Event.setEventListener(registerControl, event -> onRegisterClick.run()); - } - -} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/places/morelogininformation/MoreLoginInformationActivity.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/places/morelogininformation/MoreLoginInformationActivity.java index 0b37ecab955..4e8f14c5b2a 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/places/morelogininformation/MoreLoginInformationActivity.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/places/morelogininformation/MoreLoginInformationActivity.java @@ -1,42 +1,15 @@ package com.sap.sailing.gwt.home.desktop.places.morelogininformation; -import com.google.gwt.activity.shared.Activity; -import com.google.gwt.event.shared.EventBus; import com.google.gwt.place.shared.Place; -import com.google.gwt.user.client.ui.AcceptsOneWidget; import com.sap.sailing.gwt.home.desktop.app.DesktopClientFactory; +import com.sap.sailing.gwt.home.shared.places.morelogininformation.AbstractMoreLoginInformationActivity; import com.sap.sse.security.ui.authentication.AuthenticationRequestEvent; -public class MoreLoginInformationActivity implements Activity { - private DesktopClientFactory clientFactory; +public class MoreLoginInformationActivity extends AbstractMoreLoginInformationActivity { public MoreLoginInformationActivity(Place place, DesktopClientFactory clientFactory) { - this.clientFactory = clientFactory; - } - - @Override - public String mayStop() { - return null; - } - - @Override - public void onCancel() { - - } - - @Override - public void onStop() { - - } - - @Override - public void start(AcceptsOneWidget panel, EventBus eventBus) { - panel.setWidget(new MoreLoginInformation(new Runnable() { - @Override - public void run() { - clientFactory.getEventBus().fireEvent(new AuthenticationRequestEvent(true)); - } - })); + super(clientFactory, new MoreLoginInformationDesktop( + () -> clientFactory.getEventBus().fireEvent(new AuthenticationRequestEvent(true)))); } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/places/morelogininformation/MoreLoginInformationDesktop.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/places/morelogininformation/MoreLoginInformationDesktop.java new file mode 100644 index 00000000000..757f8bc6974 --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/places/morelogininformation/MoreLoginInformationDesktop.java @@ -0,0 +1,22 @@ +package com.sap.sailing.gwt.home.desktop.places.morelogininformation; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.uibinder.client.UiBinder; +import com.google.gwt.user.client.ui.Widget; +import com.sap.sailing.gwt.home.shared.places.morelogininformation.AbstractMoreLoginInformation; + +/** + * Desktop page that shows the benefits of logging in on sapsailing.com. + */ +public class MoreLoginInformationDesktop extends AbstractMoreLoginInformation { + + private static MoreLoginInformationUiBinder uiBinder = GWT.create(MoreLoginInformationUiBinder.class); + + interface MoreLoginInformationUiBinder extends UiBinder { + } + + public MoreLoginInformationDesktop(Runnable registerCallback) { + super(uiBinder, registerCallback); + } + +} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/places/morelogininformation/MoreLoginInformation.ui.xml b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/places/morelogininformation/MoreLoginInformationDesktop.ui.xml similarity index 100% rename from java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/places/morelogininformation/MoreLoginInformation.ui.xml rename to java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/places/morelogininformation/MoreLoginInformationDesktop.ui.xml diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/morelogininformation/MoreLoginInformationActivity.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/morelogininformation/MoreLoginInformationActivity.java index 6d9f3c801f7..4524074a7de 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/morelogininformation/MoreLoginInformationActivity.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/morelogininformation/MoreLoginInformationActivity.java @@ -1,41 +1,14 @@ package com.sap.sailing.gwt.home.mobile.places.morelogininformation; -import com.google.gwt.activity.shared.Activity; -import com.google.gwt.event.shared.EventBus; import com.google.gwt.place.shared.Place; -import com.google.gwt.user.client.ui.AcceptsOneWidget; import com.sap.sailing.gwt.home.mobile.app.MobileApplicationClientFactory; +import com.sap.sailing.gwt.home.shared.places.morelogininformation.AbstractMoreLoginInformationActivity; -public class MoreLoginInformationActivity implements Activity { - private MobileApplicationClientFactory clientFactory; +public class MoreLoginInformationActivity extends AbstractMoreLoginInformationActivity { public MoreLoginInformationActivity(Place place, MobileApplicationClientFactory clientFactory) { - this.clientFactory = clientFactory; - } - - @Override - public String mayStop() { - return null; - } - - @Override - public void onCancel() { - - } - - @Override - public void onStop() { - - } - - @Override - public void start(AcceptsOneWidget panel, EventBus eventBus) { - panel.setWidget(new MoreLoginInformationMobile(new Runnable() { - @Override - public void run() { - clientFactory.getNavigator().getSignInNavigation(true).goToPlace(); - } - })); + super(clientFactory, new MoreLoginInformationMobile( + () -> clientFactory.getNavigator().getSignInNavigation(true).goToPlace())); } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/morelogininformation/MoreLoginInformationMobile.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/morelogininformation/MoreLoginInformationMobile.java index f8cb19663ec..f8f7a098003 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/morelogininformation/MoreLoginInformationMobile.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/morelogininformation/MoreLoginInformationMobile.java @@ -1,31 +1,22 @@ package com.sap.sailing.gwt.home.mobile.places.morelogininformation; import com.google.gwt.core.client.GWT; -import com.google.gwt.dom.client.Element; import com.google.gwt.uibinder.client.UiBinder; -import com.google.gwt.uibinder.client.UiField; -import com.google.gwt.user.client.DOM; -import com.google.gwt.user.client.Event; -import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.Widget; +import com.sap.sailing.gwt.home.shared.places.morelogininformation.AbstractMoreLoginInformation; /** * Mobile page that shows the benefits of logging in on sapsailing.com. */ -public class MoreLoginInformationMobile extends Composite { +public class MoreLoginInformationMobile extends AbstractMoreLoginInformation { private static MoreLoginInformationUiBinder uiBinder = GWT.create(MoreLoginInformationUiBinder.class); - interface MoreLoginInformationUiBinder extends UiBinder { + interface MoreLoginInformationUiBinder extends UiBinder { } - @UiField - public Element registerControl; - - public MoreLoginInformationMobile(Runnable onRegisterClick) { - initWidget(uiBinder.createAndBindUi(this)); - DOM.sinkEvents(registerControl, Event.ONCLICK); - Event.setEventListener(registerControl, event -> onRegisterClick.run()); + public MoreLoginInformationMobile(Runnable registerCallback) { + super(uiBinder, registerCallback); } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/shared/places/morelogininformation/AbstractMoreLoginInformation.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/shared/places/morelogininformation/AbstractMoreLoginInformation.java new file mode 100644 index 00000000000..fd3669a7434 --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/shared/places/morelogininformation/AbstractMoreLoginInformation.java @@ -0,0 +1,29 @@ +package com.sap.sailing.gwt.home.shared.places.morelogininformation; + +import com.google.gwt.dom.client.Element; +import com.google.gwt.uibinder.client.UiBinder; +import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.user.client.DOM; +import com.google.gwt.user.client.Event; +import com.google.gwt.user.client.ui.Composite; +import com.google.gwt.user.client.ui.UIObject; +import com.google.gwt.user.client.ui.Widget; + +public class AbstractMoreLoginInformation extends Composite implements MoreLoginInformationView { + + @UiField + public Element registerControl; + + protected AbstractMoreLoginInformation(UiBinder uiBinder, + Runnable registerCallback) { + initWidget(uiBinder.createAndBindUi(this)); + DOM.sinkEvents(registerControl, Event.ONCLICK); + Event.setEventListener(registerControl, event -> registerCallback.run()); + } + + @Override + public final void setRegisterControlVisible(boolean visible) { + UIObject.setVisible(registerControl, visible); + } + +} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/shared/places/morelogininformation/AbstractMoreLoginInformationActivity.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/shared/places/morelogininformation/AbstractMoreLoginInformationActivity.java new file mode 100644 index 00000000000..1e0c1e6a087 --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/shared/places/morelogininformation/AbstractMoreLoginInformationActivity.java @@ -0,0 +1,41 @@ +package com.sap.sailing.gwt.home.shared.places.morelogininformation; + +import java.util.Objects; + +import com.google.gwt.activity.shared.AbstractActivity; +import com.google.gwt.activity.shared.Activity; +import com.google.gwt.event.shared.EventBus; +import com.google.gwt.user.client.ui.AcceptsOneWidget; +import com.sap.sse.security.ui.authentication.WithUserService; +import com.sap.sse.security.ui.client.UserService; +import com.sap.sse.security.ui.client.UserStatusEventHandler; + +/** + * Abstract {@link Activity activity} implementation for {@link MoreLoginInformationView}s. + */ +public class AbstractMoreLoginInformationActivity extends AbstractActivity { + + private final WithUserService clientFactory; + private final MoreLoginInformationView view; + + /** + * Creates new {@link AbstractMoreLoginInformationActivity} instance for the provided view using the given factory. + * + * @param clientFactory + * {@link WithUserService client factory} providing access to the {@link UserService} + * @param view + * the {@link MoreLoginInformationView} to show + */ + protected AbstractMoreLoginInformationActivity(WithUserService clientFactory, MoreLoginInformationView view) { + this.clientFactory = clientFactory; + this.view = view; + } + + @Override + public final void start(AcceptsOneWidget panel, EventBus eventBus) { + final UserStatusEventHandler handler = user -> view.setRegisterControlVisible(Objects.isNull(user)); + this.clientFactory.getUserService().addUserStatusEventHandler(handler, true); + panel.setWidget(view); + } + +} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/shared/places/morelogininformation/MoreLoginInformationView.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/shared/places/morelogininformation/MoreLoginInformationView.java new file mode 100644 index 00000000000..4a44fa568ee --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/shared/places/morelogininformation/MoreLoginInformationView.java @@ -0,0 +1,17 @@ +package com.sap.sailing.gwt.home.shared.places.morelogininformation; + +import com.google.gwt.user.client.ui.IsWidget; + +/** + * Interface for views containing information about benefits of signing in on SAP Sailing Analytics. + */ +public interface MoreLoginInformationView extends IsWidget { + + /** + * Show or hide the control leading to register form (usually based on login state). + * + * @param visible + * true to show register control, false to hide + */ + void setRegisterControlVisible(boolean visible); +}