diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/IClientService.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/IClientService.java index 5f75e63cc53cfe1d7b5aa59b099b289fc0fd629a..c3b898297bc6ab63b76b586b443197e61ca3ebef 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/IClientService.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/IClientService.java @@ -76,8 +76,8 @@ public interface IClientService extends RemoteService public void changeUserHomeGroup(TechId groupIdOrNull); /** - * Saves display settings and loggs out. + * Logs out the user, saving his/her {@link DisplaySettings} if necessary. */ - public void logout(DisplaySettings displaySettings); + public void logout(DisplaySettings displaySettings, boolean simpleViewMode); } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/IClientServiceAsync.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/IClientServiceAsync.java index 758a230bebb0cb9f5b0b04cb730650b53d871c97..e4caad7f065ba553fa9affbfa72d89dbe16dc290 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/IClientServiceAsync.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/IClientServiceAsync.java @@ -50,7 +50,8 @@ public interface IClientServiceAsync /** @see IClientService#changeUserHomeGroup(TechId) */ public void changeUserHomeGroup(TechId groupIdOrNull, AsyncCallback<Void> callback); - /** @see IClientService#logout(DisplaySettings) */ - public void logout(DisplaySettings displaySettings, AsyncCallback<Void> callback); + /** @see IClientService#logout(DisplaySettings, boolean) */ + public void logout(DisplaySettings displaySettings, boolean simpleViewMode, + AsyncCallback<Void> callback); } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/Client.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/Client.java index 12e377755c77539beba76e5e288b34277b5863d2..086cd9d10418faab5ea1fc8fbff85119073a26d5 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/Client.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/Client.java @@ -38,6 +38,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework. import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.LoginController; import ch.systemsx.cisd.openbis.generic.client.web.client.application.locator.AttachmentDownloadLocatorResolver; import ch.systemsx.cisd.openbis.generic.client.web.client.application.locator.BrowserLocatorResolver; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.locator.HomeLocatorResolver; import ch.systemsx.cisd.openbis.generic.client.web.client.application.locator.MaterialLocatorResolver; import ch.systemsx.cisd.openbis.generic.client.web.client.application.locator.OpenViewAction; import ch.systemsx.cisd.openbis.generic.client.web.client.application.locator.PermlinkLocatorResolver; @@ -340,6 +341,7 @@ public class Client implements EntryPoint, ValueChangeHandler<String> handlerRegistry.registerHandler(new SearchLocatorResolver(context)); handlerRegistry.registerHandler(new BrowserLocatorResolver(context)); + handlerRegistry.registerHandler(new HomeLocatorResolver(context)); } public void onValueChange(ValueChangeEvent<String> event) diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/Dict.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/Dict.java index d2796ba0727ec326f1a55af57bc9decb4c1519cf..38eacd0c890ae2baa1f5e97bbf392b18faae9311 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/Dict.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/Dict.java @@ -145,6 +145,10 @@ public abstract class Dict public static final String BUTTON_EXPORT_TABLE = "button_exportTable"; + public static final String BUTTON_LOGOUT_LABEL = "logout_buttonLabel"; + + public static final String BUTTON_HOME_LABEL = "home_buttonLabel"; + public static final String EXPORT_ALL_COLUMNS = "export_all_columns"; public static final String EXPORT_VISIBLE_COLUMNS = "export_visible_columns"; diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/AppView.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/AppView.java index 0b06c518ba06384d210fa24821e61652e999e08f..c5616d5a550392f2e984f6feeacb10a72fb7547a 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/AppView.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/AppView.java @@ -20,6 +20,7 @@ import com.extjs.gxt.ui.client.Style.LayoutRegion; import com.extjs.gxt.ui.client.mvc.AppEvent; import com.extjs.gxt.ui.client.mvc.Controller; import com.extjs.gxt.ui.client.mvc.View; +import com.extjs.gxt.ui.client.widget.LayoutContainer; import com.extjs.gxt.ui.client.widget.Viewport; import com.extjs.gxt.ui.client.widget.layout.BorderLayout; import com.extjs.gxt.ui.client.widget.layout.BorderLayoutData; @@ -30,6 +31,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.CommonView import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext; import ch.systemsx.cisd.openbis.generic.client.web.client.application.menu.TopMenu; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.Footer; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.SimpleModeHeader; /** * Main application view. @@ -44,7 +46,7 @@ final class AppView extends View private IMainPanel mainPanel; - private TopMenu north; + private LayoutContainer north; private ComponentProvider componentProvider; @@ -68,10 +70,7 @@ final class AppView extends View { viewport = new Viewport(); viewport.setLayout(new BorderLayout()); - if (viewContext.isSimpleMode() == false) - { - createNorth(); - } + createNorth(); createCenter(); createSouth(); RootPanel.get().clear(); @@ -80,7 +79,13 @@ final class AppView extends View private final void createNorth() { - north = new TopMenu(viewContext, componentProvider); + if (viewContext.isSimpleMode()) + { + north = new SimpleModeHeader(viewContext, componentProvider); + } else + { + north = new TopMenu(viewContext, componentProvider); + } final BorderLayoutData data = new BorderLayoutData(LayoutRegion.NORTH, 30); viewport.add(north, data); } @@ -108,7 +113,6 @@ final class AppView extends View protected final void initialize() { componentProvider = new ComponentProvider(viewContext); - // categoriesBuilder = new CategoriesBuilder(componentProvider); } @Override @@ -120,7 +124,7 @@ final class AppView extends View } else if (event.getType() == AppEvents.NAVI_EVENT) { activate(getData(event)); - } + } } private static IMainPanel createMainPanel(IViewContext<ICommonClientServiceAsync> viewContext) diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/MainPagePanel.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/MainPagePanel.java index e814a996be4d5c761668ee45b4270f4fe2ecc3c3..a1785fa2afa5b8f98bfe33b635f0e30e18a405f3 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/MainPagePanel.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/MainPagePanel.java @@ -35,7 +35,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.GWTUt public class MainPagePanel extends ContentPanel implements IMainPanel { - private static final String PREFIX = GenericConstants.ID_PREFIX + "main-page_"; + public static final String PREFIX = GenericConstants.ID_PREFIX + "main-page_"; private IClosableItem content; diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/locator/HomeLocatorResolver.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/locator/HomeLocatorResolver.java new file mode 100644 index 0000000000000000000000000000000000000000..e2e956463158ccaa855e826cad496c7335ec7da0 --- /dev/null +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/locator/HomeLocatorResolver.java @@ -0,0 +1,73 @@ +package ch.systemsx.cisd.openbis.generic.client.web.client.application.locator; + +import ch.systemsx.cisd.openbis.generic.client.web.client.ICommonClientServiceAsync; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.Dict; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.GenericConstants; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.AbstractTabItemFactory; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DefaultTabItem; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DispatcherHelper; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.ITabItem; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.MainPagePanel; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.WelcomePanelHelper; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.help.HelpPageIdentifier; +import ch.systemsx.cisd.openbis.generic.client.web.client.exception.UserFailureException; + +/** + * {@link IViewLocatorResolver} that always goes to the home page. + * + * @author Kaloyan Enimanev + */ +public class HomeLocatorResolver extends AbstractViewLocatorResolver +{ + public final static String HOME_ACTION = "HOME"; + + private final IViewContext<ICommonClientServiceAsync> viewContext; + + public HomeLocatorResolver(IViewContext<ICommonClientServiceAsync> viewContext) + { + super(HOME_ACTION); + this.viewContext = viewContext; + } + + public void resolve(final ViewLocator locator) throws UserFailureException + { + DispatcherHelper.dispatchNaviEvent(new AbstractTabItemFactory() + { + + private final static String ID = GenericConstants.ID_PREFIX + HOME_ACTION; + + @Override + public ITabItem create() + { + return DefaultTabItem.createUnaware(getTabTitle(), WelcomePanelHelper + .createWelcomePanel(viewContext, MainPagePanel.PREFIX), false); + } + + @Override + public String getId() + { + return ID; + } + + @Override + public HelpPageIdentifier getHelpPageIdentifier() + { + return null; + } + + @Override + public String getTabTitle() + { + return viewContext.getMessage(Dict.APPLICATION_NAME); + } + + @Override + public String tryGetLink() + { + return locator.getHistoryToken(); + } + + }); + } +} \ No newline at end of file diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/user/action/LogoutAction.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/user/action/LogoutAction.java index ab141af256b4efd5907dbc5786a3ce4d64f3f82d..1c159b5a2d2768166ad21bebce8815ae4958ec81 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/user/action/LogoutAction.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/user/action/LogoutAction.java @@ -39,11 +39,11 @@ public class LogoutAction implements IDelegatedAction public void execute() { - // NOTE: We decided not to support logout in simple view mode. - assert viewContext.isSimpleMode() == false; History.newItem(""); // clears history token in URL DisplaySettings displaySettings = viewContext.getModel().getSessionContext().getDisplaySettings(); - viewContext.getService().logout(displaySettings, new LogoutCallback(viewContext)); + + viewContext.getService().logout(displaySettings, viewContext.isSimpleMode(), + new LogoutCallback(viewContext)); } } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/SimpleModeHeader.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/SimpleModeHeader.java new file mode 100644 index 0000000000000000000000000000000000000000..72651f3e9fc9c47544050716f104ebdd5a3a23f2 --- /dev/null +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/SimpleModeHeader.java @@ -0,0 +1,117 @@ +/* + * Copyright 2008 ETH Zuerich, CISD + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package ch.systemsx.cisd.openbis.generic.client.web.client.application.ui; + +import com.extjs.gxt.ui.client.event.ButtonEvent; +import com.extjs.gxt.ui.client.event.SelectionListener; +import com.extjs.gxt.ui.client.widget.Component; +import com.extjs.gxt.ui.client.widget.LayoutContainer; +import com.extjs.gxt.ui.client.widget.button.Button; +import com.extjs.gxt.ui.client.widget.layout.FlowLayout; +import com.extjs.gxt.ui.client.widget.toolbar.FillToolItem; +import com.extjs.gxt.ui.client.widget.toolbar.SeparatorToolItem; +import com.extjs.gxt.ui.client.widget.toolbar.ToolBar; +import com.google.gwt.user.client.Element; +import com.google.gwt.user.client.History; + +import ch.systemsx.cisd.openbis.generic.client.web.client.ICommonClientServiceAsync; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.Dict; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.GenericConstants; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.SearchWidget; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.ComponentProvider; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.locator.HomeLocatorResolver; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.menu.user.action.LogoutAction; +import ch.systemsx.cisd.openbis.generic.shared.basic.BasicConstant; +import ch.systemsx.cisd.openbis.generic.shared.basic.URLMethodWithParameters; + +/** + * Adds the header section in simple view mode. + * + * @author Kaloyan Enimanev + */ +public class SimpleModeHeader extends LayoutContainer +{ + public static final String ID = GenericConstants.ID_PREFIX + "simple-mode-header"; + + + private final ToolBar toolBar; + + private final IViewContext<ICommonClientServiceAsync> viewContext; + + public SimpleModeHeader(final IViewContext<ICommonClientServiceAsync> viewContext, + ComponentProvider componentProvider) + { + this.viewContext = viewContext; + setId(ID); + setLayout(new FlowLayout()); + setBorders(true); + toolBar = new ToolBar(); + add(toolBar); + } + + final void refresh() + { + toolBar.removeAll(); + toolBar.add(createHomeButton()); + toolBar.add(new FillToolItem()); + toolBar.add(new SearchWidget(viewContext)); + toolBar.add(new SeparatorToolItem()); + toolBar.add(createLogoutButton()); + } + + private Component createHomeButton() + { + String homeLabel = viewContext.getMessage(Dict.BUTTON_HOME_LABEL); + return new Button(homeLabel, new SelectionListener<ButtonEvent>() + { + @Override + public void componentSelected(ButtonEvent ce) + { + URLMethodWithParameters url = new URLMethodWithParameters(""); + url.addParameter(BasicConstant.LOCATOR_ACTION_PARAMETER, + HomeLocatorResolver.HOME_ACTION); + String urlParameters = url.toString().substring(1); + History.newItem(urlParameters); + } + + }); + } + + private Button createLogoutButton() + { + String logoutLabel = viewContext.getMessage(Dict.BUTTON_LOGOUT_LABEL); + return new Button(logoutLabel, new SelectionListener<ButtonEvent>() + { + private LogoutAction logoutAction = new LogoutAction(viewContext); + @Override + public void componentSelected(ButtonEvent ce) + { + logoutAction.execute(); + } + + }); + } + + @Override + protected void onRender(final Element parent, final int pos) + { + super.onRender(parent, pos); + refresh(); + } + +} diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/AbstractClientService.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/AbstractClientService.java index adc4f73dd73e0065c6a69bf543d15246f45fa146..6b5ae6312a7cdf400f0f7d054d9f3ec476f8b931 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/AbstractClientService.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/AbstractClientService.java @@ -581,7 +581,7 @@ public abstract class AbstractClientService implements IClientService, } } - public final void logout(DisplaySettings displaySettings) + public final void logout(DisplaySettings displaySettings, boolean simpleViewMode) { try { @@ -595,7 +595,11 @@ public abstract class AbstractClientService implements IClientService, httpSession.removeAttribute(SessionConstants.OPENBIS_EXPORT_MANAGER); httpSession.invalidate(); IServer server = getServer(); - server.saveDisplaySettings(sessionToken, displaySettings); + if (simpleViewMode == false) + { + // only save settings for "normal" view + server.saveDisplaySettings(sessionToken, displaySettings); + } server.logout(sessionToken); } } catch (final UserFailureException e) diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/public/common-dictionary.js b/openbis/source/java/ch/systemsx/cisd/openbis/public/common-dictionary.js index 02b29758fd32eb7236afbf5a44311fd042000430..9b7b395298659a1bebf323cd4af46203223893fd 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/public/common-dictionary.js +++ b/openbis/source/java/ch/systemsx/cisd/openbis/public/common-dictionary.js @@ -97,6 +97,8 @@ var common = { button_process: "Process", button_top: "Files", button_evaluate: "Evaluate", + logout_buttonLabel: "Logout", + home_buttonLabel: "Home", tooltip_refresh_disabled: "To activate select appropriate criteria first.", tooltip_refresh_enabled: "Load or update the table.", diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/testframework/AbstractGWTTestCase.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/testframework/AbstractGWTTestCase.java index c697ac40f886fe24450d752f4f3ad4b1d11bafb7..1673a454fbbfa368e1f282d37ed5725614d24ef4 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/testframework/AbstractGWTTestCase.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/testframework/AbstractGWTTestCase.java @@ -149,7 +149,7 @@ public abstract class AbstractGWTTestCase extends GWTTestCase final IViewContext<ICommonClientServiceAsync> viewContext = client.tryToGetViewContext(); if (viewContext != null) { - viewContext.getService().logout(null, new AsyncCallback<Void>() + viewContext.getService().logout(null, false, new AsyncCallback<Void>() { public void onSuccess(final Void result) { diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/server/CommonClientServiceTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/server/CommonClientServiceTest.java index 928f789f24d0468c50a5eddc167c484bba6a5929..334bb9b3ab9de638e5f245768d974a3b8ce923d7 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/server/CommonClientServiceTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/server/CommonClientServiceTest.java @@ -598,7 +598,7 @@ public final class CommonClientServiceTest extends AbstractClientServiceTest } }); - commonClientService.logout(displaySettings); + commonClientService.logout(displaySettings, false); context.assertIsSatisfied(); } diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/SystemTestCase.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/SystemTestCase.java index b22fcd72872a238397f1658a63451ea0cfe37a7f..eb5baeeac15a2c53641c80ac0f95905f07319a0d 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/SystemTestCase.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/SystemTestCase.java @@ -142,7 +142,7 @@ public abstract class SystemTestCase extends AbstractTransactionalTestNGSpringCo protected void logOutFromCommonClientService() { - commonClientService.logout(new DisplaySettings()); + commonClientService.logout(new DisplaySettings(), false); } protected void sleep(long millis)