From 4c6acedaad09f7c19279ae01f8e38a779f4e8a65 Mon Sep 17 00:00:00 2001 From: pkupczyk <pkupczyk> Date: Tue, 7 Aug 2012 11:24:06 +0000 Subject: [PATCH] SP-202 / BIS-122 : Webuis available from openBIS UI: - make MODULES_MENU context work - add openbisWebAppContext class to openbis.js - small fixes SVN: 26307 --- .../framework/ComponentProvider.java | 46 ++++++++++++ .../application/help/HelpPageIdentifier.java | 2 +- .../web/client/application/menu/TopMenu.java | 3 +- .../application/menu/modules/ModulesMenu.java | 74 +++++++++++++++++-- .../client/application/ui/AbstractViewer.java | 1 + .../ui/webapp/WebAppComponent.java | 9 +++ .../application/ui/webapp/WebAppUrl.java | 13 +++- .../ui/webapp/WebAppUrlParameter.java | 2 +- .../shared/basic/dto/WebAppContext.java | 2 +- .../openbis/public/resources/js/openbis.js | 36 +++++++++ openbis/source/javascript/openbis.js | 37 ++++++++++ 11 files changed, 213 insertions(+), 12 deletions(-) diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/ComponentProvider.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/ComponentProvider.java index 413a3057c45..95484d6320d 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/ComponentProvider.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/ComponentProvider.java @@ -17,6 +17,7 @@ package ch.systemsx.cisd.openbis.generic.client.web.client.application.framework; import com.extjs.gxt.ui.client.widget.Component; +import com.google.gwt.user.client.Window; import ch.systemsx.cisd.openbis.generic.client.web.client.ICommonClientServiceAsync; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ActionContext; @@ -63,8 +64,11 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.script. import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.script.ScriptRegistrationForm; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.vocabulary.VocabularyGrid; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.vocabulary.VocabularyRegistrationForm; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.webapp.WebAppComponent; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.webapp.WebAppUrl; import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.log.LoggingConsole; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.WebApp; /** * Creates and provides GUI modules/components (such as sample browser). @@ -1654,4 +1658,46 @@ public final class ComponentProvider }; } + + public AbstractTabItemFactory createWebApp(final WebApp webApp) + { + return new AbstractTabItemFactory() + { + @Override + public ITabItem create() + { + WebAppUrl url = + new WebAppUrl(Window.Location.getProtocol(), Window.Location.getHost(), + webApp.getCode(), viewContext.getModel().getSessionContext() + .getSessionID()); + return createRegistrationTab(getTabTitle(), + DatabaseModificationAwareComponent + .wrapUnaware(new WebAppComponent(url))); + } + + @Override + public String getId() + { + return WebAppComponent.getId(webApp.getCode()); + } + + @Override + public HelpPageIdentifier getHelpPageIdentifier() + { + return new HelpPageIdentifier(HelpPageDomain.WEB_APP, HelpPageAction.VIEW); + } + + @Override + public String getTabTitle() + { + return webApp.getLabel(); + } + + @Override + public String tryGetLink() + { + return null; + } + }; + } } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/help/HelpPageIdentifier.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/help/HelpPageIdentifier.java index 2e52fac178f..a899e537580 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/help/HelpPageIdentifier.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/help/HelpPageIdentifier.java @@ -38,7 +38,7 @@ public class HelpPageIdentifier public static enum HelpPageDomain { // base domains (as in menu) - EXPERIMENT, SAMPLE, DATA_SET, MATERIAL, ADMINISTRATION, SEARCH, + EXPERIMENT, SAMPLE, DATA_SET, MATERIAL, ADMINISTRATION, SEARCH, WEB_APP, // entity types EXPERIMENT_TYPE(EXPERIMENT), SAMPLE_TYPE(SAMPLE), DATA_SET_TYPE(DATA_SET), MATERIAL_TYPE( diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/TopMenu.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/TopMenu.java index 47c2d1e368b..8ec867cd3d7 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/TopMenu.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/TopMenu.java @@ -119,7 +119,8 @@ public class TopMenu extends LayoutContainer toolBar.add(new BrowseMenu(viewContext, componentProvider)); toolBar.add(new NewMenu(viewContext, componentProvider)); toolBar.add(new ImportMenu(viewContext, componentProvider)); - toolBar.add(new ModulesMenu(viewContext, viewContext.getClientPluginFactoryProvider())); + toolBar.add(new ModulesMenu(viewContext, viewContext.getClientPluginFactoryProvider(), + componentProvider)); toolBar.add(new FillToolItem()); toolBar.add(new SearchWidget(viewContext)); toolBar.add(new SeparatorToolItem()); diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/modules/ModulesMenu.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/modules/ModulesMenu.java index 79ceff936c3..50fa0d34a5f 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/modules/ModulesMenu.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/modules/ModulesMenu.java @@ -16,18 +16,27 @@ package ch.systemsx.cisd.openbis.generic.client.web.client.application.menu.modules; +import java.util.ArrayList; +import java.util.Collections; import java.util.List; import com.extjs.gxt.ui.client.widget.menu.Menu; import com.extjs.gxt.ui.client.widget.menu.MenuItem; import ch.systemsx.cisd.openbis.generic.client.web.client.application.Dict; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.ComponentProvider; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.menu.ActionMenu; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.menu.IActionMenuItem; import ch.systemsx.cisd.openbis.generic.client.web.client.application.menu.TopMenu; import ch.systemsx.cisd.openbis.generic.client.web.client.application.menu.TopMenuItem; import ch.systemsx.cisd.openbis.generic.client.web.client.application.plugin.IClientPluginFactoryProvider; import ch.systemsx.cisd.openbis.generic.client.web.client.application.plugin.IModule; import ch.systemsx.cisd.openbis.generic.client.web.client.application.plugin.IModuleInitializationObserver; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.webapp.WebAppSortingAndCodeComparator; import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IMessageProvider; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.WebApp; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.WebAppContext; /** * Modules top menu. @@ -37,10 +46,18 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IMess public class ModulesMenu extends TopMenuItem implements IModuleInitializationObserver { - public ModulesMenu(IMessageProvider messageProvider, - IClientPluginFactoryProvider clientPluginFactoryProvider) + private IViewContext<?> viewContext; + + private ComponentProvider componentProvider; + + public ModulesMenu(IViewContext<?> viewContext, + IClientPluginFactoryProvider clientPluginFactoryProvider, + ComponentProvider componentProvider) { - super(messageProvider.getMessage(Dict.MENU_MODULES)); + super(viewContext.getMessage(Dict.MENU_MODULES)); + + this.viewContext = viewContext; + this.componentProvider = componentProvider; setId(TopMenu.ID + "_MODULES"); Menu submenu = new Menu(); @@ -64,10 +81,42 @@ public class ModulesMenu extends TopMenuItem implements IModuleInitializationObs submenu.add(menuItem); } } - simplifyIfNecessary(this); - if (submenu.getItemCount() > 0) + } + + void addWebAppsItems() + { + List<WebApp> webApps = new ArrayList<WebApp>(); + + for (WebApp webApp : getViewContext().getModel().getApplicationInfo().getWebapps()) { - show(); + if (webApp.matchesContext(WebAppContext.MODULES_MENU)) + { + webApps.add(webApp); + } + } + + Collections.sort(webApps, new WebAppSortingAndCodeComparator()); + + Menu submenu = getMenu(); + for (final WebApp webApp : webApps) + { + IActionMenuItem actionMenuItem = new IActionMenuItem() + { + @Override + public String getMenuText(IMessageProvider messageProvider) + { + return webApp.getLabel(); + } + + @Override + public String getMenuId() + { + return TopMenu.ID + "_" + webApp.getCode(); + } + }; + + submenu.add(new ActionMenu(actionMenuItem, viewContext, componentProvider + .createWebApp(webApp))); } } @@ -92,6 +141,19 @@ public class ModulesMenu extends TopMenuItem implements IModuleInitializationObs public void notify(List<IModule> successfullyInitializedModules) { addModuleItems(successfullyInitializedModules); + addWebAppsItems(); + + simplifyIfNecessary(this); + + if (getMenu().getItemCount() > 0) + { + show(); + } + } + + private IViewContext<?> getViewContext() + { + return viewContext; } } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/AbstractViewer.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/AbstractViewer.java index 82f2850c9c1..0958b926bbe 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/AbstractViewer.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/AbstractViewer.java @@ -473,6 +473,7 @@ public abstract class AbstractViewer<D extends IEntityInformationHolder> extends webApp.getCode(), getSessionId()); url.setEntityKind(entity.getEntityKind()); url.setEntityType(entity.getEntityType()); + url.setEntityIdentifier(entity.getIdentifier()); url.setEntityPermId(entity.getPermId()); return new WebAppComponent(url); } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/webapp/WebAppComponent.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/webapp/WebAppComponent.java index fb9c0b93f3c..9d7df130f82 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/webapp/WebAppComponent.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/webapp/WebAppComponent.java @@ -19,6 +19,8 @@ package ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.webapp import com.extjs.gxt.ui.client.widget.WidgetComponent; import com.google.gwt.user.client.ui.Frame; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.GenericConstants; + /** * Component that displays a web application in an IFRAME. * @@ -27,8 +29,15 @@ import com.google.gwt.user.client.ui.Frame; public class WebAppComponent extends WidgetComponent { + private static final String ID_PREFIX = GenericConstants.ID_PREFIX + "webapp_"; + public WebAppComponent(WebAppUrl url) { super(new Frame(url.toString())); } + + public static String getId(String webAppCode) + { + return ID_PREFIX + webAppCode; + } } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/webapp/WebAppUrl.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/webapp/WebAppUrl.java index 6fa4b40dba4..ac386c118f9 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/webapp/WebAppUrl.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/webapp/WebAppUrl.java @@ -52,7 +52,9 @@ public class WebAppUrl builder.setProtocol(openbisProtocol); builder.setHost(openbisHost); - builder.setPath(webAppCode); + // TODO remove the hardcoded part after development is finished + builder.setPath("ch.systemsx.cisd.openbis.plugin.screening.OpenBIS/resources/applications/" + + webAppCode + "/html"); builder.setParameter(WebAppUrlParameter.SESSION_ID.getName(), sessionId); } @@ -72,6 +74,14 @@ public class WebAppUrl } } + public void setEntityIdentifier(String entityIdentifier) + { + if (entityIdentifier != null) + { + builder.setParameter(WebAppUrlParameter.ENTITY_IDENTIFIER.getName(), entityIdentifier); + } + } + public void setEntityPermId(String entityPermId) { if (entityPermId != null) @@ -85,5 +95,4 @@ public class WebAppUrl { return builder.buildString(); } - } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/webapp/WebAppUrlParameter.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/webapp/WebAppUrlParameter.java index 551fd183d7e..ad8f65a7574 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/webapp/WebAppUrlParameter.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/webapp/WebAppUrlParameter.java @@ -25,7 +25,7 @@ public enum WebAppUrlParameter { SESSION_ID("session-id"), ENTITY_KIND("entity-kind"), ENTITY_TYPE("entity-type"), - ENTITY_PERM_ID("entity-perm-id"); + ENTITY_IDENTIFIER("entity-identifier"), ENTITY_PERM_ID("entity-perm-id"); private final String name; diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/WebAppContext.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/WebAppContext.java index beac2d08945..7c1bbbba504 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/WebAppContext.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/WebAppContext.java @@ -24,7 +24,7 @@ package ch.systemsx.cisd.openbis.generic.shared.basic.dto; public enum WebAppContext { - QUERIES_MENU("queries-menu"), EXPERIMENT_DETAILS_VIEW("experiment-details-view"), + MODULES_MENU("modules-menu"), EXPERIMENT_DETAILS_VIEW("experiment-details-view"), SAMPLE_DETAILS_VIEW("sample-details-view"), DATA_SET_DETAILS_VIEW("data-set-details-view"), MATERIAL_DETAILS_VIEW("material-details-view"); diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/public/resources/js/openbis.js b/openbis/source/java/ch/systemsx/cisd/openbis/public/resources/js/openbis.js index e35025bfb43..9e14d8d90e9 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/public/resources/js/openbis.js +++ b/openbis/source/java/ch/systemsx/cisd/openbis/public/resources/js/openbis.js @@ -341,3 +341,39 @@ actionDeferrer.prototype.dependencyCompleted = function(key) { } } +function openbisWebAppContext(){ + this.sessionId = this.getParameter("session-id"); + this.entityKind = this.getParameter("entity-kind"); + this.entityType = this.getParameter("entity-type"); + this.entityIdentifier = this.getParameter("entity-identifier"); + this.entityPermId = this.getParameter("entity-perm-id"); +} + +openbisWebAppContext.prototype.getSessionId = function(){ + return this.sessionId; +} + +openbisWebAppContext.prototype.getEntityKind = function(){ + return this.entityKind; +} + +openbisWebAppContext.prototype.getEntityType = function(){ + return this.entityType; +} + +openbisWebAppContext.prototype.getEntityIdentifier = function(){ + return this.entityIdentifier; +} + +openbisWebAppContext.prototype.getEntityPermId = function(){ + return this.entityPermId; +} + +openbisWebAppContext.prototype.getParameter = function(parameterName){ + var match = location.search.match(RegExp("[?|&]"+parameterName+'=(.+?)(&|$)')); + if(match){ + return decodeURIComponent(match[1]); + }else{ + return null; + } +} diff --git a/openbis/source/javascript/openbis.js b/openbis/source/javascript/openbis.js index 466a18a5abf..f5a686c3ced 100644 --- a/openbis/source/javascript/openbis.js +++ b/openbis/source/javascript/openbis.js @@ -395,3 +395,40 @@ openbis.prototype.listPlateImageReferences = function(dataSetIdentifier, wellPos success: action }); } + +function openbisWebAppContext(){ + this.sessionId = this.getParameter("session-id"); + this.entityKind = this.getParameter("entity-kind"); + this.entityType = this.getParameter("entity-type"); + this.entityIdentifier = this.getParameter("entity-identifier"); + this.entityPermId = this.getParameter("entity-perm-id"); +} + +openbisWebAppContext.prototype.getSessionId = function(){ + return this.sessionId; +} + +openbisWebAppContext.prototype.getEntityKind = function(){ + return this.entityKind; +} + +openbisWebAppContext.prototype.getEntityType = function(){ + return this.entityType; +} + +openbisWebAppContext.prototype.getEntityIdentifier = function(){ + return this.entityIdentifier; +} + +openbisWebAppContext.prototype.getEntityPermId = function(){ + return this.entityPermId; +} + +openbisWebAppContext.prototype.getParameter = function(parameterName){ + var match = location.search.match(RegExp("[?|&]"+parameterName+'=(.+?)(&|$)')); + if(match){ + return decodeURIComponent(match[1]); + }else{ + return null; + } +} -- GitLab