Alexander Wels has uploaded a new change for review. Change subject: userportal: Dynamic guide link ......................................................................
userportal: Dynamic guide link - Dynamically switch guide link between basic guide and power user guide based on active tab - Fixed issue where the place managers where not singleton accross modules. Bug-Url: https://bugzilla.redhat.com/show_bug.cgi?id=948653 Change-Id: If6374df0da70fa6f6edf044d4ebadafc7fb1a105 Signed-off-by: Alexander Wels <aw...@redhat.com> --- M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/gin/BaseSystemModule.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/presenter/AbstractHeaderPresenterWidget.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/utils/DynamicMessages.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/tab/AbstractTabPanel.java M frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/ApplicationDynamicMessages.java M frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/gin/SystemModule.java M frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/section/main/presenter/HeaderPresenterWidget.java M frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/section/main/presenter/MainSectionPresenter.java M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/SystemModule.java M packaging/branding/ovirt.brand/external_resources.properties 10 files changed, 103 insertions(+), 12 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/98/19298/1 diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/gin/BaseSystemModule.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/gin/BaseSystemModule.java index 13104f7..2483aa0 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/gin/BaseSystemModule.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/gin/BaseSystemModule.java @@ -20,7 +20,6 @@ import com.google.inject.Singleton; import com.gwtplatform.mvp.client.RootPresenter; import com.gwtplatform.mvp.client.proxy.ParameterTokenFormatter; -import com.gwtplatform.mvp.client.proxy.PlaceManager; import com.gwtplatform.mvp.client.proxy.TokenFormatter; /** @@ -28,11 +27,10 @@ */ public abstract class BaseSystemModule extends AbstractGinModule { - protected void bindCommonInfrastructure(Class<? extends PlaceManager> placeManager) { + protected void bindCommonInfrastructure() { bindEventBus(); bind(TokenFormatter.class).to(ParameterTokenFormatter.class).in(Singleton.class); bind(RootPresenter.class).asEagerSingleton(); - bind(PlaceManager.class).to(placeManager).in(Singleton.class); bind(CurrentUser.class).in(Singleton.class); bind(LoggedInGatekeeper.class).in(Singleton.class); bind(ErrorPopupManager.class).to(ErrorPopupManagerImpl.class).in(Singleton.class); diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/presenter/AbstractHeaderPresenterWidget.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/presenter/AbstractHeaderPresenterWidget.java index a954918..1992563 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/presenter/AbstractHeaderPresenterWidget.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/presenter/AbstractHeaderPresenterWidget.java @@ -7,6 +7,7 @@ import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.event.dom.client.HasClickHandlers; import com.google.gwt.event.shared.EventBus; +import com.google.gwt.safehtml.shared.SafeHtmlUtils; import com.gwtplatform.mvp.client.PresenterWidget; import com.gwtplatform.mvp.client.View; @@ -24,14 +25,14 @@ private final CurrentUser user; private final String windowName; - private final String guideUrl; + private String guideUrl; public AbstractHeaderPresenterWidget(EventBus eventBus, V view, CurrentUser user, String windowName, String guideUrl) { super(eventBus, view); this.user = user; this.windowName = windowName; - this.guideUrl = guideUrl; + setGuideUrl(guideUrl); } @Override @@ -51,7 +52,14 @@ WebUtils.openUrlInNewWindow(windowName, guideUrl, WebUtils.OPTION_SCROLLBARS); } })); + } + /** + * Set the URL of the guide link. This string is escaped. + * @param guideUrlString The new URL as a string. + */ + public void setGuideUrl(String guideUrlString) { + this.guideUrl = SafeHtmlUtils.htmlEscapeAllowEntities(guideUrlString); } @Override diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/utils/DynamicMessages.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/utils/DynamicMessages.java index 466c43e..1292f12 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/utils/DynamicMessages.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/utils/DynamicMessages.java @@ -35,6 +35,7 @@ FEEDBACK_URL("feedback_url"), //$NON-NLS-1$ FEEDBACK_LINK_LABEL("feedback_link_label"), //$NON-NLS-1$ GUIDE_URL("guide_url"), //$NON-NLS-1$ + EXTENDED_GUIDE_URL("extended_guide_url"), //$NON-NLS-1$ GUIDE_LINK_LABEL("guide_link_label"), //$NON-NLS-1$ DOC("doc"); //$NON-NLS-1$ diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/tab/AbstractTabPanel.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/tab/AbstractTabPanel.java index c32d81e..eec0e50 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/tab/AbstractTabPanel.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/tab/AbstractTabPanel.java @@ -5,6 +5,7 @@ import org.ovirt.engine.ui.common.presenter.DynamicTabContainerPresenter.DynamicTabPanel; +import com.google.gwt.event.shared.HasHandlers; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.IsWidget; @@ -22,7 +23,7 @@ * <li>{@link #tabContentContainer} widget for displaying tab contents * </ul> */ -public abstract class AbstractTabPanel extends Composite implements TabPanel, DynamicTabPanel { +public abstract class AbstractTabPanel extends Composite implements TabPanel, DynamicTabPanel, HasHandlers { @UiField public Panel tabContentContainer; diff --git a/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/ApplicationDynamicMessages.java b/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/ApplicationDynamicMessages.java index 24226cd..b9441f8 100644 --- a/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/ApplicationDynamicMessages.java +++ b/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/ApplicationDynamicMessages.java @@ -3,6 +3,7 @@ import org.ovirt.engine.ui.common.utils.DynamicMessages; import com.google.gwt.core.client.GWT; +import com.google.gwt.i18n.client.LocaleInfo; public class ApplicationDynamicMessages extends DynamicMessages { @@ -19,4 +20,14 @@ addFallback(DynamicMessageKey.GUIDE_LINK_LABEL, constants.guideLinkLabel()); } + /** + * Get the extended guide URL using the {@code Dictionary} in the host page. Uses current locale (e.g. "en_US") + * for placeholder {0}, if it exists. With a fall back to the standard GWT Constant. + * + * @return The guide URL. + */ + public final String extendedGuideUrl() { + return formatString(DynamicMessageKey.EXTENDED_GUIDE_URL, LocaleInfo.getCurrentLocale().getLocaleName()); + } + } diff --git a/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/gin/SystemModule.java b/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/gin/SystemModule.java index 97154a0..7aa1e60 100644 --- a/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/gin/SystemModule.java +++ b/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/gin/SystemModule.java @@ -1,5 +1,6 @@ package org.ovirt.engine.ui.userportal.gin; +import org.ovirt.engine.ui.common.auth.CurrentUser; import org.ovirt.engine.ui.common.gin.BaseSystemModule; import org.ovirt.engine.ui.common.section.DefaultLoginSectionPlace; import org.ovirt.engine.ui.common.section.DefaultMainSectionPlace; @@ -16,12 +17,19 @@ import org.ovirt.engine.ui.userportal.section.DefaultMainSectionExtendedPlace; import org.ovirt.engine.ui.userportal.system.ApplicationInit; +import com.google.gwt.event.shared.EventBus; +import com.google.inject.Inject; +import com.google.inject.Provides; import com.google.inject.Singleton; +import com.gwtplatform.mvp.client.proxy.PlaceManager; +import com.gwtplatform.mvp.client.proxy.TokenFormatter; /** * GIN module containing UserPortal infrastructure and configuration bindings. */ public class SystemModule extends BaseSystemModule { + + private static UserPortalPlaceManager singletonPlaceManager; @SuppressWarnings("deprecation") @Override @@ -32,7 +40,7 @@ } void bindInfrastructure() { - bindCommonInfrastructure(UserPortalPlaceManager.class); + bindCommonInfrastructure(); bind(LoggedInExtendedPlaceGatekeeper.class).in(Singleton.class); bind(ApplicationInit.class).asEagerSingleton(); bind(CurrentUserRole.class).in(Singleton.class); @@ -51,4 +59,28 @@ bind(ApplicationResourcesWithLookup.class).in(Singleton.class); } + @Provides + @Inject + public PlaceManager getPlaceManager(EventBus eventBus, TokenFormatter tokenFormatter, + CurrentUser user, CurrentUserRole userRole, + @DefaultLoginSectionPlace String defaultLoginSectionPlace, + @DefaultMainSectionPlace String defaultMainSectionPlace, + @DefaultMainSectionExtendedPlace String defaultMainSectionExtendedPlace) { + return getUserPortalPlaceManager(eventBus, tokenFormatter, user, userRole, defaultLoginSectionPlace, + defaultMainSectionExtendedPlace, defaultMainSectionExtendedPlace); + } + + @Provides + @Inject + public UserPortalPlaceManager getUserPortalPlaceManager(EventBus eventBus, TokenFormatter tokenFormatter, + CurrentUser user, CurrentUserRole userRole, + @DefaultLoginSectionPlace String defaultLoginSectionPlace, + @DefaultMainSectionPlace String defaultMainSectionPlace, + @DefaultMainSectionExtendedPlace String defaultMainSectionExtendedPlace) { + if (singletonPlaceManager == null) { + singletonPlaceManager = new UserPortalPlaceManager(eventBus, tokenFormatter, user, userRole, + defaultLoginSectionPlace, defaultMainSectionPlace, defaultMainSectionExtendedPlace); + } + return singletonPlaceManager; + } } diff --git a/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/section/main/presenter/HeaderPresenterWidget.java b/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/section/main/presenter/HeaderPresenterWidget.java index 13e1332..bf0046a 100644 --- a/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/section/main/presenter/HeaderPresenterWidget.java +++ b/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/section/main/presenter/HeaderPresenterWidget.java @@ -14,7 +14,8 @@ import com.google.inject.Inject; import com.gwtplatform.mvp.client.proxy.RevealRootPopupContentEvent; -public class HeaderPresenterWidget extends AbstractHeaderPresenterWidget<HeaderPresenterWidget.ViewDef> implements TabWidgetHandler { +public class HeaderPresenterWidget extends AbstractHeaderPresenterWidget<HeaderPresenterWidget.ViewDef> + implements TabWidgetHandler { public interface ViewDef extends AbstractHeaderPresenterWidget.ViewDef, TabWidgetHandler { @@ -64,5 +65,4 @@ getView().setMainTabPanelVisible(userRole.isExtendedUser()); } - } diff --git a/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/section/main/presenter/MainSectionPresenter.java b/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/section/main/presenter/MainSectionPresenter.java index 8a54efc..1040df9 100644 --- a/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/section/main/presenter/MainSectionPresenter.java +++ b/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/section/main/presenter/MainSectionPresenter.java @@ -1,5 +1,8 @@ package org.ovirt.engine.ui.userportal.section.main.presenter; +import org.ovirt.engine.ui.userportal.ApplicationDynamicMessages; +import org.ovirt.engine.ui.userportal.place.UserPortalPlaceManager; + import com.google.gwt.event.shared.EventBus; import com.google.gwt.event.shared.GwtEvent.Type; import com.google.inject.Inject; @@ -26,11 +29,18 @@ public static final Type<RevealContentHandler<?>> TYPE_SetMainContent = new Type<RevealContentHandler<?>>(); private final HeaderPresenterWidget header; + private final UserPortalPlaceManager placeManager; + private final String basicGuideUrl; + private final String extendedGuideUrl; @Inject - public MainSectionPresenter(EventBus eventBus, ViewDef view, ProxyDef proxy, HeaderPresenterWidget header) { + public MainSectionPresenter(EventBus eventBus, ViewDef view, ProxyDef proxy, HeaderPresenterWidget header, + UserPortalPlaceManager userPortalPlaceManager, ApplicationDynamicMessages dynamicMessages) { super(eventBus, view, proxy, RevealType.RootLayout); this.header = header; + this.placeManager = userPortalPlaceManager; + this.basicGuideUrl = dynamicMessages.guideUrl(); + this.extendedGuideUrl = dynamicMessages.extendedGuideUrl(); } @Override @@ -40,4 +50,14 @@ setInSlot(TYPE_SetHeader, header); } + @Override + protected void onReset() { + // This is called before the place is actually changed, so we need to reverse the logic, and set the + // extended guide when switching away from the basic (but it is still visible), and vice versa. + if (!placeManager.isMainSectionBasicPlaceVisible()) { + header.setGuideUrl(basicGuideUrl); + } else { + header.setGuideUrl(extendedGuideUrl); + } + } } diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/SystemModule.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/SystemModule.java index c437b1b..8138e85 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/SystemModule.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/SystemModule.java @@ -1,5 +1,6 @@ package org.ovirt.engine.ui.webadmin.gin; +import org.ovirt.engine.ui.common.auth.CurrentUser; import org.ovirt.engine.ui.common.gin.BaseSystemModule; import org.ovirt.engine.ui.common.section.DefaultLoginSectionPlace; import org.ovirt.engine.ui.common.section.DefaultMainSectionPlace; @@ -14,10 +15,18 @@ import org.ovirt.engine.ui.webadmin.system.InternalConfiguration; import org.ovirt.engine.ui.webadmin.system.PostMessageDispatcher; +import com.google.gwt.event.shared.EventBus; +import com.google.inject.Inject; +import com.google.inject.Provides; +import com.gwtplatform.mvp.client.proxy.PlaceManager; +import com.gwtplatform.mvp.client.proxy.TokenFormatter; + /** * GIN module containing WebAdmin infrastructure and configuration bindings. */ public class SystemModule extends BaseSystemModule { + + private static PlaceManager singletonPlaceManager; @SuppressWarnings("deprecation") @Override @@ -28,7 +37,7 @@ } void bindInfrastructure() { - bindCommonInfrastructure(WebAdminPlaceManager.class); + bindCommonInfrastructure(); bind(ApplicationInit.class).asEagerSingleton(); bind(InternalConfiguration.class).asEagerSingleton(); bind(PostMessageDispatcher.class).asEagerSingleton(); @@ -44,4 +53,15 @@ ApplicationResources.class, ApplicationTemplates.class, ApplicationDynamicMessages.class); } + @Provides + @Inject + public PlaceManager getPlaceManager(EventBus eventBus, TokenFormatter tokenFormatter, CurrentUser user, + @DefaultLoginSectionPlace String defaultLoginSectionPlace, + @DefaultMainSectionPlace String defaultMainSectionPlace) { + if (singletonPlaceManager == null) { + singletonPlaceManager = new WebAdminPlaceManager(eventBus, tokenFormatter, user, defaultLoginSectionPlace, + defaultMainSectionPlace); + } + return singletonPlaceManager; + } } diff --git a/packaging/branding/ovirt.brand/external_resources.properties b/packaging/branding/ovirt.brand/external_resources.properties index d085e75..c7e93af 100644 --- a/packaging/branding/ovirt.brand/external_resources.properties +++ b/packaging/branding/ovirt.brand/external_resources.properties @@ -7,4 +7,4 @@ # Guide URL obrand.webadmin.guide_url=http://www.ovirt.org/Documentation obrand.userportal.guide_url=http://www.ovirt.org/Documentation - +obrand.userportal.extended_guide_url=http://www.ovirt.org/Documentation -- To view, visit http://gerrit.ovirt.org/19298 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: If6374df0da70fa6f6edf044d4ebadafc7fb1a105 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Alexander Wels <aw...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches