From a76bcb4bc14923e940202f90a722f7e373658d90 Mon Sep 17 00:00:00 2001 From: tpylak <tpylak> Date: Wed, 17 Mar 2010 23:57:02 +0000 Subject: [PATCH] LMS-1432 real lazy sections loading SVN: 15174 --- .../AttachmentVersionsSection.java | 15 +- ...Panel.java => DisposableSectionPanel.java} | 40 ++--- .../application/ServerRequestQueue.java | 133 --------------- .../application/SingleSectionPanel.java | 34 ++-- ...CompositeDatabaseModificationObserver.java | 7 +- ...eModificationObserverWithMainObserver.java | 5 +- .../framework/DisplaySettingsManager.java | 2 +- .../ui/attachment/AttachmentBrowser.java | 10 -- .../ui/data/AbstractExternalDataGrid.java | 5 +- .../ui/data/DataSetSearchHitGrid.java | 3 +- .../ui/data/RelatedDataSetGrid.java | 2 +- .../ui/grid/AbstractBrowserGrid.java | 49 +----- .../ui/sample/SampleBrowserGrid.java | 9 +- .../dataset/DataSetChildrenSection.java | 20 ++- .../dataset/DataSetParentsSection.java | 20 ++- .../dataset/DataSetRelationshipBrowser.java | 11 +- .../application/dataset/DataViewSection.java | 35 +++- .../experiment/ExperimentDataSetBrowser.java | 9 +- .../experiment/ExperimentDataSetSection.java | 18 +- .../experiment/ExperimentPropertiesPanel.java | 2 + .../experiment/ExperimentSamplesSection.java | 28 +-- .../experiment/GenericExperimentViewer.java | 161 +++++++++--------- .../material/MaterialPropertiesSection.java | 13 +- .../sample/ContainerSamplesSection.java | 36 ++-- .../sample/GenericSampleViewer.java | 38 ++--- .../sample/SampleDataSetBrowser.java | 12 +- .../sample/SampleDataSetsSection.java | 35 ++-- .../client/application/ExperimentViewer.java | 27 +-- .../application/ProteinSamplesSection.java | 32 ++-- .../web/client/application/ProteinViewer.java | 32 +++- .../PlateLayoutDatasetSection.java | 45 +++-- .../PlateLayoutSampleSection.java | 59 +++---- 32 files changed, 373 insertions(+), 574 deletions(-) rename openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/{BrowserSectionPanel.java => DisposableSectionPanel.java} (53%) delete mode 100644 openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ServerRequestQueue.java diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/AttachmentVersionsSection.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/AttachmentVersionsSection.java index 6b221e8a7b6..cd851abd023 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/AttachmentVersionsSection.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/AttachmentVersionsSection.java @@ -18,6 +18,7 @@ package ch.systemsx.cisd.openbis.generic.client.web.client.application; import ch.systemsx.cisd.openbis.generic.client.web.client.ICommonClientServiceAsync; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.attachment.AttachmentBrowser; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IDisposableComponent; import ch.systemsx.cisd.openbis.generic.client.web.client.dto.AttachmentVersions; import ch.systemsx.cisd.openbis.generic.shared.basic.IAttachmentHolder; @@ -26,12 +27,20 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.IAttachmentHolder; * * @author Piotr Buczek */ -public class AttachmentVersionsSection<T extends IAttachmentHolder> extends BrowserSectionPanel +public class AttachmentVersionsSection<T extends IAttachmentHolder> extends DisposableSectionPanel { + private final T attachmentHolder; + public AttachmentVersionsSection(final IViewContext<ICommonClientServiceAsync> viewContext, final T attachmentHolder) { - super(viewContext.getMessage(Dict.ATTACHMENTS)); - initializeDisposableBrowser(AttachmentBrowser.create(viewContext, attachmentHolder, getServerRequestQueue())); + super(viewContext.getMessage(Dict.ATTACHMENTS), viewContext); + this.attachmentHolder = attachmentHolder; + } + + @Override + protected IDisposableComponent createDisposableContent() + { + return AttachmentBrowser.create(viewContext.getCommonViewContext(), attachmentHolder); } } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/BrowserSectionPanel.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/DisposableSectionPanel.java similarity index 53% rename from openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/BrowserSectionPanel.java rename to openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/DisposableSectionPanel.java index ecbcb44691e..c64dafe8351 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/BrowserSectionPanel.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/DisposableSectionPanel.java @@ -20,45 +20,45 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework. import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IDisposableComponent; /** - * Panel of a details view showing data in a browser (i.e. table). + * Panel of a details view showing a component which should be disposed at the end (i.e. browser + * grid). * * @author Franz-Josef Elmer */ -public class BrowserSectionPanel extends SingleSectionPanel +abstract public class DisposableSectionPanel extends SingleSectionPanel { - IDisposableComponent disposableBrowser; + abstract protected IDisposableComponent createDisposableContent(); + + // null if the section has not been shown yet + private IDisposableComponent disposableComponentOrNull = null; /** - * Creates section with specified header and disposable browser. Subclasses need to invoke - * initializeDisposableBrowser in their constructors -- instances are not usable until the - * disposableBrowser has been initialized + * Creates section with specified header. */ - public BrowserSectionPanel(String header) + public DisposableSectionPanel(String header, IViewContext<?> viewContext) { - super(header); + super(header, viewContext); } - public BrowserSectionPanel(String header, IDisposableComponent browser) + public IDatabaseModificationObserver tryGetDatabaseModificationObserver() { - super(header); - initializeDisposableBrowser(browser); - } - - public IDatabaseModificationObserver getDatabaseModificationObserver() - { - return disposableBrowser; + return disposableComponentOrNull; } @Override protected void onDetach() { - disposableBrowser.dispose(); + if (disposableComponentOrNull != null) + { + disposableComponentOrNull.dispose(); + } super.onDetach(); } - protected void initializeDisposableBrowser(IDisposableComponent browser) + @Override + protected void showContent() { - this.disposableBrowser = browser; - add(disposableBrowser.getComponent()); + this.disposableComponentOrNull = createDisposableContent(); + add(disposableComponentOrNull.getComponent()); } } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ServerRequestQueue.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ServerRequestQueue.java deleted file mode 100644 index 69cec81866f..00000000000 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ServerRequestQueue.java +++ /dev/null @@ -1,133 +0,0 @@ -/* - * Copyright 2010 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; - -import java.util.ArrayList; -import java.util.HashSet; - -/** - * A queue of requests for data from the server. Users of the queue can manage and control when - * requests are actually sent. If the queue is set to process immediately, requests are not queued, - * but executed on arrival. - * - * @author Chandrasekhar Ramakrishnan - */ -public class ServerRequestQueue -{ - - /** - * Interface implemented by things in the queue - * - * @author Chandrasekhar Ramakrishnan - */ - public static interface IServerRequestAction - { - /** - * Run the request - */ - void onInvoke(); - - /** - * An object used to identify the request. Requests with the same identifier are considered - * to be duplicates. - */ - Object getIdentifier(); - } - - /** - * A default implementation of IServerRequestAction which subclasses may extend. - * - * @author Chandrasekhar Ramakrishnan - */ - public static abstract class ServerRequestAction implements IServerRequestAction - { - final Object identifier; - - public ServerRequestAction(Object identifier) - { - this.identifier = identifier; - } - - public Object getIdentifier() - { - return identifier; - } - } - - // Internal State - private ArrayList<IServerRequestAction> requests = new ArrayList<IServerRequestAction>(); - - private boolean processImmediately; - - // Public API - /** - * Create a new Queue. By default, do not process immediately. - */ - public ServerRequestQueue() - { - setProcessImmediately(false); - } - - /** - * If set to true, requests will not be queued, they will be processed on add. - */ - public void setProcessImmediately(boolean processImmediately) - { - this.processImmediately = processImmediately; - } - - /** - * Queue a request. - */ - public void addRequestToQueue(IServerRequestAction requestAction) - { - if (isProcessImmediately()) - { - requestAction.onInvoke(); - } else - { - requests.add(requestAction); - } - } - - /** - * Process the requests in the queue. Duplicates are skipped. - */ - public void processUniqueRequests() - { - HashSet<Object> processedIdentifiers = new HashSet<Object>(); - for (IServerRequestAction request : requests) - { - if (processedIdentifiers.contains(request.getIdentifier()) == false) - { - processedIdentifiers.add(request.getIdentifier()); - request.onInvoke(); - } - } - requests.clear(); - } - - // Internal API - /** - * True if requests are to be processed immediately when they are added to the queue - */ - protected boolean isProcessImmediately() - { - return processImmediately; - } - -} diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/SingleSectionPanel.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/SingleSectionPanel.java index 513c6032673..2179dee3c9e 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/SingleSectionPanel.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/SingleSectionPanel.java @@ -30,28 +30,26 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget. * * @author Izabela Adamczyk */ -public class SingleSectionPanel extends ContentPanel +abstract public class SingleSectionPanel extends ContentPanel { + /** creates a section content, called when the section is shown for the first time */ + abstract protected void showContent(); + + protected final IViewContext<?> viewContext; + private String displayId; private boolean isContentVisible = false; - /** - * A queue used to store requests for data when the selection panel is hidden to avoid - * retrieving data while the panel is not visible. Subclasses that use abstract browser grids - * should set the grid's queue to this queue - */ - private final ServerRequestQueue serverRequestQueue; - - public SingleSectionPanel(final String header) + public SingleSectionPanel(final String header, IViewContext<?> viewContext) { + this.viewContext = viewContext; setHeaderVisible(true); setHeading(header); setCollapsible(true); setAnimCollapse(false); setBodyBorder(true); setLayout(new FitLayout()); - serverRequestQueue = new ServerRequestQueue(); } public void setDisplayID(IDisplayTypeIDGenerator generator, String suffix) @@ -78,20 +76,10 @@ public class SingleSectionPanel extends ContentPanel public void setContentVisible(boolean visible) { - if (this.isContentVisible != visible) + if (visible && isContentVisible == false) { - this.isContentVisible = visible; - if (visible) - { - serverRequestQueue.processUniqueRequests(); - } - serverRequestQueue.setProcessImmediately(visible); + showContent(); + isContentVisible = true; } } - - protected ServerRequestQueue getServerRequestQueue() - { - return serverRequestQueue; - } - } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/CompositeDatabaseModificationObserver.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/CompositeDatabaseModificationObserver.java index 3da8f6fc23e..4af39ab4786 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/CompositeDatabaseModificationObserver.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/CompositeDatabaseModificationObserver.java @@ -47,9 +47,12 @@ public class CompositeDatabaseModificationObserver implements IDatabaseModificat } } - public void addObserver(IDatabaseModificationObserver observer) + public void addObserver(IDatabaseModificationObserver observerOrNull) { - registeredObservers.add(observer); + if (observerOrNull != null) + { + registeredObservers.add(observerOrNull); + } } public DatabaseModificationKind[] getRelevantModifications() diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/CompositeDatabaseModificationObserverWithMainObserver.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/CompositeDatabaseModificationObserverWithMainObserver.java index fa207017d4d..94d16cbf641 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/CompositeDatabaseModificationObserverWithMainObserver.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/CompositeDatabaseModificationObserverWithMainObserver.java @@ -57,10 +57,9 @@ public class CompositeDatabaseModificationObserverWithMainObserver extends } @Override - public void addObserver(IDatabaseModificationObserver observer) + public void addObserver(IDatabaseModificationObserver observerOrNull) { - assert mainObserver != null : "main observer cannot be null"; - super.addObserver(observer); + super.addObserver(observerOrNull); } @Override diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/DisplaySettingsManager.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/DisplaySettingsManager.java index dabb00016b2..02e1f5fb5fb 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/DisplaySettingsManager.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/DisplaySettingsManager.java @@ -418,7 +418,7 @@ public class DisplaySettingsManager } /** - * @returns section settings for given display id<br> + * @returns section settings for given display id - is the section visible or not<br> * <br> * NOTE: Returned value should be used read only, or modification time should be set * manually after a modification. diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/attachment/AttachmentBrowser.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/attachment/AttachmentBrowser.java index 2e6c0bcbc7e..295e66fe0e9 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/attachment/AttachmentBrowser.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/attachment/AttachmentBrowser.java @@ -45,7 +45,6 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.AbstractAs 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.ServerRequestQueue; 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.DisplayTypeIDGenerator; @@ -109,15 +108,6 @@ public class AttachmentBrowser extends AbstractSimpleBrowserGrid<AttachmentVersi return browser.asDisposableWithoutToolbar(); } - public static IDisposableComponent create( - final IViewContext<ICommonClientServiceAsync> viewContext, - final IAttachmentHolder attachmentHolder, ServerRequestQueue requestQueueOrNull) - { - final AttachmentBrowser browser = new AttachmentBrowser(viewContext, attachmentHolder); - browser.setServerRequestQueue(requestQueueOrNull); - return browser.asDisposableWithoutToolbar(); - } - private final IAttachmentHolder attachmentHolder; public AttachmentBrowser(IViewContext<ICommonClientServiceAsync> viewContext, diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/AbstractExternalDataGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/AbstractExternalDataGrid.java index 6fe6a7830cb..042af7aa1f9 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/AbstractExternalDataGrid.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/AbstractExternalDataGrid.java @@ -30,7 +30,6 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.ICommonClientServiceAs import ch.systemsx.cisd.openbis.generic.client.web.client.application.AbstractAsyncCallback; 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.ServerRequestQueue; import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DisplayTypeIDGenerator; import ch.systemsx.cisd.openbis.generic.client.web.client.application.model.BaseEntityModel; import ch.systemsx.cisd.openbis.generic.client.web.client.application.model.EntityGridModelFactory; @@ -84,11 +83,9 @@ public abstract class AbstractExternalDataGrid private final ICriteriaProvider<PropertyTypesCriteria> criteriaProvider; protected AbstractExternalDataGrid(final IViewContext<ICommonClientServiceAsync> viewContext, - String browserId, String gridId, DisplayTypeIDGenerator displayTypeIDGenerator, - ServerRequestQueue requestQueueOrNull) + String browserId, String gridId, DisplayTypeIDGenerator displayTypeIDGenerator) { super(viewContext, gridId, false, displayTypeIDGenerator); - super.setServerRequestQueue(requestQueueOrNull); this.criteriaProvider = createCriteriaProvider(); setId(browserId); updateCriteriaProviderAndRefresh(); diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/DataSetSearchHitGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/DataSetSearchHitGrid.java index d4dc7576541..5f221dc4abc 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/DataSetSearchHitGrid.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/DataSetSearchHitGrid.java @@ -91,8 +91,7 @@ public class DataSetSearchHitGrid extends AbstractExternalDataGrid implements private DataSetSearchHitGrid(final IViewContext<ICommonClientServiceAsync> viewContext) { - super(viewContext, BROWSER_ID, GRID_ID, DisplayTypeIDGenerator.DATA_SET_SEARCH_RESULT_GRID, - null); + super(viewContext, BROWSER_ID, GRID_ID, DisplayTypeIDGenerator.DATA_SET_SEARCH_RESULT_GRID); } @Override diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/RelatedDataSetGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/RelatedDataSetGrid.java index 3c13ddf537f..1a4042cc494 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/RelatedDataSetGrid.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/RelatedDataSetGrid.java @@ -59,7 +59,7 @@ public class RelatedDataSetGrid extends AbstractExternalDataGrid private RelatedDataSetGrid(final IViewContext<ICommonClientServiceAsync> viewContext, final RelatedDataSetCriteria relatedCriteria) { - super(viewContext, BROWSER_ID, GRID_ID, DisplayTypeIDGenerator.RELATED_DATA_SET_GRID, null); + super(viewContext, BROWSER_ID, GRID_ID, DisplayTypeIDGenerator.RELATED_DATA_SET_GRID); this.relatedCriteria = relatedCriteria; } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/AbstractBrowserGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/AbstractBrowserGrid.java index bf5d7745e43..03fda5a0aec 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/AbstractBrowserGrid.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/AbstractBrowserGrid.java @@ -65,7 +65,6 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.AbstractAs 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.ServerRequestQueue; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ShowRelatedDatasetsDialog; import ch.systemsx.cisd.openbis.generic.client.web.client.application.VoidAsyncCallback; import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DispatcherHelper; @@ -215,9 +214,6 @@ public abstract class AbstractBrowserGrid<T/* Entity */, M extends BaseEntityMod private LayoutContainer bottomToolbars; - // A request queue for managing when requests for data from the server are actually carried out. - private ServerRequestQueue serverRequestQueueOrNull = null; - protected AbstractBrowserGrid(final IViewContext<ICommonClientServiceAsync> viewContext, String gridId, IDisplayTypeIDGenerator displayTypeIDGenerator) { @@ -535,22 +531,7 @@ public abstract class AbstractBrowserGrid<T/* Entity */, M extends BaseEntityMod final ListEntitiesCallback listCallback = new ListEntitiesCallback(viewContext, callback, resultSetConfig); - // If this objects has a queue, don't execute the request immediately -- queue it up instead - if (shouldQueueServerRequests()) - { - ServerRequestQueue queue = tryGetServerRequestQueue(); - assert queue != null; - queue.addRequestToQueue(new ServerRequestQueue.ServerRequestAction(this) - { - public void onInvoke() - { - listEntities(resultSetConfig, listCallback); - } - }); - } else - { - listEntities(resultSetConfig, listCallback); - } + listEntities(resultSetConfig, listCallback); } private void debug(String msg) @@ -583,9 +564,8 @@ public abstract class AbstractBrowserGrid<T/* Entity */, M extends BaseEntityMod return filters; } - private DefaultResultSetConfig<String, T> createPagingConfig( - PagingLoadConfig loadConfig, GridFilters<T> filters, - String gridDisplayId) + private DefaultResultSetConfig<String, T> createPagingConfig(PagingLoadConfig loadConfig, + GridFilters<T> filters, String gridDisplayId) { int limit = loadConfig.getLimit(); int offset = loadConfig.getOffset(); @@ -1698,27 +1678,4 @@ public abstract class AbstractBrowserGrid<T/* Entity */, M extends BaseEntityMod .getTotalCount()).show(); } } - - public ServerRequestQueue tryGetServerRequestQueue() - { - return serverRequestQueueOrNull; - } - - /** - * Set the request queue for this browser grid. Pass in null to clear the request queue. - */ - public void setServerRequestQueue(ServerRequestQueue requestQueueOrNull) - { - this.serverRequestQueueOrNull = requestQueueOrNull; - } - - /** - * See if requests for data from the server should be queued instead of being executed - * immediately. INVARIANT: If this returns true, then the serverRequestQueueOrNull is not null - */ - protected boolean shouldQueueServerRequests() - { - return this.serverRequestQueueOrNull != null; - } - } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/SampleBrowserGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/SampleBrowserGrid.java index 1cab35a7bc1..f19e1de9a84 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/SampleBrowserGrid.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/SampleBrowserGrid.java @@ -34,7 +34,6 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.AbstractAs 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.ServerRequestQueue; import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.ComponentProvider; import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DispatcherHelper; import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DisplayTypeIDGenerator; @@ -148,8 +147,7 @@ public class SampleBrowserGrid extends public static IDisposableComponent createGridForContainerSamples( final IViewContext<ICommonClientServiceAsync> viewContext, - final TechId containerSampleId, final String gridId, final SampleType sampleType, - final ServerRequestQueue requestQueueOrNull) + final TechId containerSampleId, final String gridId, final SampleType sampleType) { final ListSampleDisplayCriteria criteria = ListSampleDisplayCriteria.createForContainer(containerSampleId); @@ -157,7 +155,6 @@ public class SampleBrowserGrid extends final SampleBrowserGrid browserGrid = createGridAsComponent(viewContext, gridId, criteria, entityTypeCode, DisplayTypeIDGenerator.SAMPLE_DETAILS_GRID); - browserGrid.setServerRequestQueue(requestQueueOrNull); browserGrid.updateCriteriaProviderAndRefresh(); browserGrid.extendBottomToolbar(); return browserGrid.asDisposableWithoutToolbar(); @@ -165,8 +162,7 @@ public class SampleBrowserGrid extends public static IDisposableComponent createGridForExperimentSamples( final IViewContext<ICommonClientServiceAsync> viewContext, final TechId experimentId, - final String gridId, final ExperimentType experimentType, - ServerRequestQueue requestQueueOrNull) + final String gridId, final ExperimentType experimentType) { final ListSampleDisplayCriteria criteria = ListSampleDisplayCriteria.createForExperiment(experimentId); @@ -175,7 +171,6 @@ public class SampleBrowserGrid extends final SampleBrowserGrid browserGrid = createGridAsComponent(viewContext, gridId, criteria, entityTypeCode, DisplayTypeIDGenerator.EXPERIMENT_DETAILS_GRID); - browserGrid.setServerRequestQueue(requestQueueOrNull); browserGrid.updateCriteriaProviderAndRefresh(); browserGrid.extendBottomToolbar(); return browserGrid.asDisposableWithoutToolbar(); diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/DataSetChildrenSection.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/DataSetChildrenSection.java index a1844a95ef0..5d344f95385 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/DataSetChildrenSection.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/DataSetChildrenSection.java @@ -16,8 +16,9 @@ package ch.systemsx.cisd.openbis.plugin.generic.client.web.client.application.dataset; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.BrowserSectionPanel; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.DisposableSectionPanel; import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IDisposableComponent; import ch.systemsx.cisd.openbis.generic.shared.basic.TechId; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetRelationshipRole; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExternalData; @@ -25,14 +26,21 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExternalData; /** * @author Piotr Buczek */ -class DataSetChildrenSection extends BrowserSectionPanel +class DataSetChildrenSection extends DisposableSectionPanel { + private final ExternalData dataset; + DataSetChildrenSection(IViewContext<?> viewContext, ExternalData dataset) { - super("Children (Data Sets)"); - initializeDisposableBrowser(DataSetRelationshipBrowser.create(viewContext, TechId - .create(dataset), DataSetRelationshipRole.PARENT, dataset.getDataSetType(), - getServerRequestQueue())); + super("Children (Data Sets)", viewContext); + this.dataset = dataset; + } + + @Override + protected IDisposableComponent createDisposableContent() + { + return DataSetRelationshipBrowser.create(viewContext, TechId.create(dataset), + DataSetRelationshipRole.PARENT, dataset.getDataSetType()); } } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/DataSetParentsSection.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/DataSetParentsSection.java index 88c3954c3fa..5242f41bb86 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/DataSetParentsSection.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/DataSetParentsSection.java @@ -16,8 +16,9 @@ package ch.systemsx.cisd.openbis.plugin.generic.client.web.client.application.dataset; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.BrowserSectionPanel; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.DisposableSectionPanel; import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IDisposableComponent; import ch.systemsx.cisd.openbis.generic.shared.basic.TechId; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetRelationshipRole; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExternalData; @@ -25,14 +26,21 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExternalData; /** * @author Piotr Buczek */ -class DataSetParentsSection extends BrowserSectionPanel +class DataSetParentsSection extends DisposableSectionPanel { + private final ExternalData dataset; + DataSetParentsSection(IViewContext<?> viewContext, ExternalData dataset) { - super("Parents (Data Sets)"); - initializeDisposableBrowser(DataSetRelationshipBrowser.create(viewContext, TechId - .create(dataset), DataSetRelationshipRole.CHILD, dataset.getDataSetType(), - getServerRequestQueue())); + super("Parents (Data Sets)", viewContext); + this.dataset = dataset; + } + + @Override + protected IDisposableComponent createDisposableContent() + { + return DataSetRelationshipBrowser.create(viewContext, TechId.create(dataset), + DataSetRelationshipRole.CHILD, dataset.getDataSetType()); } } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/DataSetRelationshipBrowser.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/DataSetRelationshipBrowser.java index 64722b84d79..39dbd4e50bb 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/DataSetRelationshipBrowser.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/DataSetRelationshipBrowser.java @@ -20,7 +20,6 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.ICommonClientServiceAs import ch.systemsx.cisd.openbis.generic.client.web.client.application.AbstractAsyncCallback; 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.ServerRequestQueue; import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DisplayTypeIDGenerator; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.data.AbstractExternalDataGrid; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IDisposableComponent; @@ -44,14 +43,12 @@ public class DataSetRelationshipBrowser extends AbstractExternalDataGrid public static final String ID_PREFIX = GenericConstants.ID_PREFIX + PREFIX; public static IDisposableComponent create(IViewContext<?> viewContext, TechId datasetId, - final DataSetRelationshipRole role, final DataSetType datasetType, - ServerRequestQueue requestQueueOrNull) + final DataSetRelationshipRole role, final DataSetType datasetType) { IViewContext<ICommonClientServiceAsync> commonViewContext = viewContext.getCommonViewContext(); DataSetRelationshipBrowser browser = - new DataSetRelationshipBrowser(commonViewContext, datasetId, role, - requestQueueOrNull) + new DataSetRelationshipBrowser(commonViewContext, datasetId, role) { @Override public String getGridDisplayTypeID() @@ -69,10 +66,10 @@ public class DataSetRelationshipBrowser extends AbstractExternalDataGrid private final DataSetRelationshipRole role; private DataSetRelationshipBrowser(IViewContext<ICommonClientServiceAsync> viewContext, - TechId datasetId, DataSetRelationshipRole role, ServerRequestQueue requestQueueOrNull) + TechId datasetId, DataSetRelationshipRole role) { super(viewContext, createBrowserId(datasetId, role), createGridId(datasetId, role), - DisplayTypeIDGenerator.DATA_SET_DETAILS_GRID, requestQueueOrNull); + DisplayTypeIDGenerator.DATA_SET_DETAILS_GRID); this.datasetId = datasetId; this.role = role; } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/DataViewSection.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/DataViewSection.java index db52a4747bd..3687a1925fb 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/DataViewSection.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/DataViewSection.java @@ -63,20 +63,41 @@ public class DataViewSection extends SingleSectionPanel private static String FILES_HOME_VIEW = "Files (Home)"; + private final ExternalData dataset; + + private IDisposableComponent currentReportOrNull = null; + public DataViewSection(final IViewContext<?> viewContext, final ExternalData dataset) { - super(viewContext.getMessage(Dict.DATA_VIEW)); + super(viewContext.getMessage(Dict.DATA_VIEW), viewContext); + this.dataset = dataset; + } + + @Override + protected void onDetach() + { + disposeCurrentReport(); + } + + private void disposeCurrentReport() + { + if (currentReportOrNull != null) + { + currentReportOrNull.dispose(); + } + } + @Override + protected void showContent() + { final DatastoreServiceSelectionWidget serviceSelectionWidget = new DatastoreServiceSelectionWidget(viewContext, dataset); getHeader().addTool(new LabelToolItem(serviceSelectionWidget.getFieldLabel() + ": ")); getHeader().addTool(serviceSelectionWidget); - serviceSelectionWidget.addSelectionChangedListener(createServiceSelectionChangedListener( - viewContext, dataset)); + serviceSelectionWidget.addSelectionChangedListener(createServiceSelectionChangedListener()); } - private SelectionChangedListener<DatastoreServiceDescriptionModel> createServiceSelectionChangedListener( - final IViewContext<?> viewContext, final ExternalData dataset) + private SelectionChangedListener<DatastoreServiceDescriptionModel> createServiceSelectionChangedListener() { return new SelectionChangedListener<DatastoreServiceDescriptionModel>() { @@ -110,20 +131,20 @@ public class DataViewSection extends SingleSectionPanel IOnReportComponentGeneratedAction action = new IOnReportComponentGeneratedAction() { - public void execute(IDisposableComponent reportComponent) { + disposeCurrentReport(); // replace current viewer with report grid Widget reportGrid = reportComponent.getComponent(); if (currentViewerOrNull != null) { remove(currentViewerOrNull); } + currentReportOrNull = reportComponent; currentViewerOrNull = reportGrid; add(reportGrid); layout(); } - }; DisplayedOrSelectedDatasetCriteria criteria = diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/ExperimentDataSetBrowser.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/ExperimentDataSetBrowser.java index 7b81c9b8698..c07bf8d401b 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/ExperimentDataSetBrowser.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/ExperimentDataSetBrowser.java @@ -20,7 +20,6 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.ICommonClientServiceAs import ch.systemsx.cisd.openbis.generic.client.web.client.application.AbstractAsyncCallback; 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.ServerRequestQueue; import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DisplayTypeIDGenerator; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.data.AbstractExternalDataGrid; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IDisposableComponent; @@ -40,12 +39,12 @@ public class ExperimentDataSetBrowser extends AbstractExternalDataGrid public static final String ID_PREFIX = GenericConstants.ID_PREFIX + PREFIX; static IDisposableComponent create(IViewContext<?> viewContext, TechId experimentId, - final ExperimentType experimentType, ServerRequestQueue requestQueueOrNull) + final ExperimentType experimentType) { IViewContext<ICommonClientServiceAsync> commonViewContext = viewContext.getCommonViewContext(); ExperimentDataSetBrowser browser = - new ExperimentDataSetBrowser(commonViewContext, experimentId, requestQueueOrNull) + new ExperimentDataSetBrowser(commonViewContext, experimentId) { @Override public String getGridDisplayTypeID() @@ -59,10 +58,10 @@ public class ExperimentDataSetBrowser extends AbstractExternalDataGrid private final TechId experimentId; private ExperimentDataSetBrowser(IViewContext<ICommonClientServiceAsync> viewContext, - TechId experimentId, ServerRequestQueue requestQueueOrNull) + TechId experimentId) { super(viewContext, createBrowserId(experimentId), createGridId(experimentId), - DisplayTypeIDGenerator.EXPERIMENT_DETAILS_GRID, requestQueueOrNull); + DisplayTypeIDGenerator.EXPERIMENT_DETAILS_GRID); this.experimentId = experimentId; } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/ExperimentDataSetSection.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/ExperimentDataSetSection.java index 10083db814b..270d6aba83c 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/ExperimentDataSetSection.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/ExperimentDataSetSection.java @@ -16,21 +16,29 @@ package ch.systemsx.cisd.openbis.plugin.generic.client.web.client.application.experiment; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.BrowserSectionPanel; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.DisposableSectionPanel; import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IDisposableComponent; import ch.systemsx.cisd.openbis.generic.shared.basic.TechId; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Experiment; /** * @author Franz-Josef Elmer */ -class ExperimentDataSetSection extends BrowserSectionPanel +class ExperimentDataSetSection extends DisposableSectionPanel { + private final Experiment experiment; + ExperimentDataSetSection(Experiment experiment, IViewContext<?> viewContext) { - super("Data Sets"); - initializeDisposableBrowser(ExperimentDataSetBrowser.create(viewContext, TechId - .create(experiment), experiment.getExperimentType(), getServerRequestQueue())); + super("Data Sets", viewContext); + this.experiment = experiment; } + @Override + protected IDisposableComponent createDisposableContent() + { + return ExperimentDataSetBrowser.create(viewContext, TechId.create(experiment), experiment + .getExperimentType()); + } } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/ExperimentPropertiesPanel.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/ExperimentPropertiesPanel.java index 99fbd5de035..46500c8da8b 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/ExperimentPropertiesPanel.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/ExperimentPropertiesPanel.java @@ -22,6 +22,7 @@ import java.util.List; import java.util.Map; import java.util.Set; +import com.extjs.gxt.ui.client.Style.Scroll; import com.extjs.gxt.ui.client.widget.ContentPanel; import ch.systemsx.cisd.openbis.generic.client.web.client.application.AbstractAsyncCallback; @@ -83,6 +84,7 @@ public class ExperimentPropertiesPanel extends ContentPanel this.viewer = viewer; this.grid = createPropertyGrid(); add(grid); + setScrollMode(Scroll.AUTOY); } private final PropertyGrid createPropertyGrid() diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/ExperimentSamplesSection.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/ExperimentSamplesSection.java index 248fb668d8e..bf15dcfe2d3 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/ExperimentSamplesSection.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/ExperimentSamplesSection.java @@ -16,10 +16,10 @@ package ch.systemsx.cisd.openbis.plugin.generic.client.web.client.application.experiment; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.DisposableSectionPanel; 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.SingleSectionPanel; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.IDatabaseModificationObserver; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IDisposableComponent; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.sample.SampleBrowserGrid; import ch.systemsx.cisd.openbis.generic.shared.basic.TechId; @@ -30,29 +30,18 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Experiment; * * @author Izabela Adamczyk */ -public class ExperimentSamplesSection extends SingleSectionPanel +public class ExperimentSamplesSection extends DisposableSectionPanel { private static final String PREFIX = "experiment-samples-section_"; public static final String ID_PREFIX = GenericConstants.ID_PREFIX + PREFIX; - private IDisposableComponent sampleDisposableGrid; + private final Experiment experiment; public ExperimentSamplesSection(final IViewContext<?> viewContext, final Experiment experiment) { - super("Samples"); - TechId experimentId = TechId.create(experiment); - sampleDisposableGrid = - SampleBrowserGrid.createGridForExperimentSamples( - viewContext.getCommonViewContext(), experimentId, - createGridId(experimentId), experiment.getExperimentType(), - getServerRequestQueue()); - add(sampleDisposableGrid.getComponent()); - } - - public IDatabaseModificationObserver getDatabaseModificationObserver() - { - return sampleDisposableGrid; + super("Samples", viewContext); + this.experiment = experiment; } // @Private @@ -62,10 +51,11 @@ public class ExperimentSamplesSection extends SingleSectionPanel } @Override - protected void onDetach() + protected IDisposableComponent createDisposableContent() { - sampleDisposableGrid.dispose(); - super.onDetach(); + TechId experimentId = TechId.create(experiment); + return SampleBrowserGrid.createGridForExperimentSamples(viewContext.getCommonViewContext(), + experimentId, createGridId(experimentId), experiment.getExperimentType()); } } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/GenericExperimentViewer.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/GenericExperimentViewer.java index 3e9935133e3..d97203bbe45 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/GenericExperimentViewer.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/GenericExperimentViewer.java @@ -16,16 +16,16 @@ package ch.systemsx.cisd.openbis.plugin.generic.client.web.client.application.experiment; +import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.Set; -import com.extjs.gxt.ui.client.Style.Scroll; -import com.extjs.gxt.ui.client.widget.Component; import com.extjs.gxt.ui.client.widget.layout.BorderLayout; import ch.systemsx.cisd.openbis.generic.client.web.client.application.AbstractAsyncCallback; import ch.systemsx.cisd.openbis.generic.client.web.client.application.AttachmentVersionsSection; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.BrowserSectionPanel; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.DisposableSectionPanel; 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.CompositeDatabaseModificationObserverWithMainObserver; @@ -38,6 +38,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget. import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IDelegatedAction; import ch.systemsx.cisd.openbis.generic.shared.basic.IIdentifiable; import ch.systemsx.cisd.openbis.generic.shared.basic.TechId; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKind; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Experiment; import ch.systemsx.cisd.openbis.plugin.generic.client.web.client.IGenericClientServiceAsync; @@ -46,7 +47,8 @@ import ch.systemsx.cisd.openbis.plugin.generic.client.web.client.IGenericClientS * * @author Izabela Adamczyk */ -public class GenericExperimentViewer extends AbstractViewer<Experiment> +public class GenericExperimentViewer extends AbstractViewer<Experiment> implements + IDatabaseModificationObserver { private static final String GENERIC_EXPERIMENT_VIEWER = "generic-experiment-viewer"; @@ -56,18 +58,20 @@ public class GenericExperimentViewer extends AbstractViewer<Experiment> private final IViewContext<IGenericClientServiceAsync> viewContext; - private final CompositeDatabaseModificationObserverWithMainObserver modificationObserver; - protected final IIdentifiable identifiable; - + protected Experiment experimentOrNull; + private List<DisposableSectionPanel> rightPanelSections; + + private ExperimentPropertiesPanel propertiesPanel; + public static DatabaseModificationAwareComponent create( final IViewContext<IGenericClientServiceAsync> viewContext, final IIdentifiable identifiable) { GenericExperimentViewer viewer = new GenericExperimentViewer(viewContext, identifiable); - return new DatabaseModificationAwareComponent(viewer, viewer.getModificationObserver()); + return new DatabaseModificationAwareComponent(viewer, viewer); } protected GenericExperimentViewer(final IViewContext<IGenericClientServiceAsync> viewContext, @@ -75,18 +79,12 @@ public class GenericExperimentViewer extends AbstractViewer<Experiment> { super(viewContext, createId(experiment)); this.identifiable = experiment; - setLayout(new BorderLayout()); - this.modificationObserver = new CompositeDatabaseModificationObserverWithMainObserver(); this.viewContext = viewContext; + setLayout(new BorderLayout()); extendToolBar(); reloadAllData(); } - public IDatabaseModificationObserver getModificationObserver() - { - return modificationObserver; - } - private void extendToolBar() { addToolBarButton(createDeleteButton(new IDelegatedAction() @@ -102,7 +100,14 @@ public class GenericExperimentViewer extends AbstractViewer<Experiment> private void reloadAllData() { - reloadData(new ExperimentInfoCallback(viewContext, this, modificationObserver)); + reloadData(new AbstractAsyncCallback<Experiment>(viewContext) + { + @Override + protected final void process(final Experiment result) + { + layoutExperimentDetailView(result); + } + }); } public static final String createId(final IIdentifiable identifiable) @@ -130,15 +135,6 @@ public class GenericExperimentViewer extends AbstractViewer<Experiment> super.updateOriginalData(newData); } - private final Component createLeftPanel(final Experiment newExperiment, - final CompositeDatabaseModificationObserverWithMainObserver observer) - { - final ExperimentPropertiesPanel panel = createExperimentPropertiesPanel(newExperiment); - panel.setScrollMode(Scroll.AUTOY); - observer.addMainObserver(panel.getDatabaseModificationObserver()); - return panel; - } - private ExperimentPropertiesPanel createExperimentPropertiesPanel(final Experiment newExperiment) { return new ExperimentPropertiesPanel(newExperiment, viewContext, this); @@ -151,47 +147,27 @@ public class GenericExperimentViewer extends AbstractViewer<Experiment> newExperiment); } - private static final class ExperimentInfoCallback extends AbstractAsyncCallback<Experiment> + /** + * Sets the {@link Experiment} for this <var>generic</var> experiment viewer. + * <p> + * This method triggers the whole <i>GUI</i> construction. + * </p> + */ + private void layoutExperimentDetailView(final Experiment result) { - private final GenericExperimentViewer genericExperimentViewer; + this.experimentOrNull = result; + this.updateOriginalData(result); + this.removeAll(); - private final CompositeDatabaseModificationObserverWithMainObserver observer; + // Left panel + this.propertiesPanel = createExperimentPropertiesPanel(result); + add(this.propertiesPanel, createLeftBorderLayoutData()); + // Right panel + this.rightPanelSections = createRightPanel(result); + SectionsPanel rightPanel = layoutSections(this.rightPanelSections); + add(rightPanel, createRightBorderLayoutData()); - private ExperimentInfoCallback(final IViewContext<IGenericClientServiceAsync> viewContext, - final GenericExperimentViewer genericSampleViewer, - final CompositeDatabaseModificationObserverWithMainObserver modificationObserver) - { - super(viewContext); - this.genericExperimentViewer = genericSampleViewer; - this.observer = modificationObserver; - } - - // - // AbstractAsyncCallback - // - - /** - * Sets the {@link Experiment} for this <var>generic</var> experiment viewer. - * <p> - * This method triggers the whole <i>GUI</i> construction. - * </p> - */ - @Override - protected final void process(final Experiment result) - { - genericExperimentViewer.experimentOrNull = result; - genericExperimentViewer.updateOriginalData(result); - genericExperimentViewer.removeAll(); - - // Left panel - final Component leftPanel = genericExperimentViewer.createLeftPanel(result, observer); - genericExperimentViewer.add(leftPanel, createLeftBorderLayoutData()); - // Right panel - final Component rightPanel = genericExperimentViewer.createRightPanel(result, observer); - genericExperimentViewer.add(rightPanel, createRightBorderLayoutData()); - - genericExperimentViewer.layout(); - } + layout(); } private static final String getDisplayIdSuffix(String suffix) @@ -199,44 +175,67 @@ public class GenericExperimentViewer extends AbstractViewer<Experiment> return GENERIC_EXPERIMENT_VIEWER + "-" + suffix; } - private Component createRightPanel(Experiment result, - CompositeDatabaseModificationObserverWithMainObserver observer) + private List<DisposableSectionPanel> createRightPanel(Experiment result) { - final SectionsPanel container = new SectionsPanel(viewContext.getCommonViewContext()); final String displayIdSuffix = getDisplayIdSuffix(result.getExperimentType().getCode()); - - List<BrowserSectionPanel> additionalPanels = createAdditionalBrowserSectionPanels(displayIdSuffix); - for (BrowserSectionPanel panel : additionalPanels) - { - container.addPanel(panel); - observer.addObserver(panel.getDatabaseModificationObserver()); - } + List<DisposableSectionPanel> allPanels = new ArrayList<DisposableSectionPanel>(); + + allPanels.addAll(createAdditionalBrowserSectionPanels(displayIdSuffix)); final ExperimentSamplesSection sampleSection = new ExperimentSamplesSection(viewContext, result); sampleSection.setDisplayID(DisplayTypeIDGenerator.SAMPLE_SECTION, displayIdSuffix); - container.addPanel(sampleSection); - observer.addObserver(sampleSection.getDatabaseModificationObserver()); + allPanels.add(sampleSection); final ExperimentDataSetSection dataSection = new ExperimentDataSetSection(result, viewContext); dataSection.setDisplayID(DisplayTypeIDGenerator.DATA_SET_SECTION, displayIdSuffix); - container.addPanel(dataSection); - observer.addObserver(dataSection.getDatabaseModificationObserver()); + allPanels.add(dataSection); final AttachmentVersionsSection<Experiment> attachmentsSection = createAttachmentsSection(result); attachmentsSection.setDisplayID(DisplayTypeIDGenerator.ATTACHMENT_SECTION, displayIdSuffix); - container.addPanel(attachmentsSection); - observer.addObserver(attachmentsSection.getDatabaseModificationObserver()); + allPanels.add(attachmentsSection); + + return allPanels; + } + private SectionsPanel layoutSections(List<DisposableSectionPanel> allPanels) + { + final SectionsPanel container = new SectionsPanel(viewContext.getCommonViewContext()); + for (DisposableSectionPanel panel : allPanels) + { + container.addPanel(panel); + } container.layout(); return container; } - - protected List<BrowserSectionPanel> createAdditionalBrowserSectionPanels(String displyIdSuffix) + + protected List<DisposableSectionPanel> createAdditionalBrowserSectionPanels(String displyIdSuffix) { return Collections.emptyList(); } + // this observer should not be cached - some sections may become visible in the future + private IDatabaseModificationObserver createModificationObserver() + { + CompositeDatabaseModificationObserverWithMainObserver modificationObserver = + new CompositeDatabaseModificationObserverWithMainObserver(); + modificationObserver.addMainObserver(propertiesPanel.getDatabaseModificationObserver()); + for (DisposableSectionPanel panel : rightPanelSections) + { + modificationObserver.addObserver(panel.tryGetDatabaseModificationObserver()); + } + return modificationObserver; + } + + public DatabaseModificationKind[] getRelevantModifications() + { + return createModificationObserver().getRelevantModifications(); + } + + public void update(Set<DatabaseModificationKind> observedModifications) + { + createModificationObserver().update(observedModifications); + } } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/material/MaterialPropertiesSection.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/material/MaterialPropertiesSection.java index 117ff4e9c9d..07cd553289f 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/material/MaterialPropertiesSection.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/material/MaterialPropertiesSection.java @@ -54,18 +54,14 @@ public class MaterialPropertiesSection extends SingleSectionPanel private final Material material; - private final IViewContext<?> viewContext; - public MaterialPropertiesSection(final Material material, final IViewContext<?> viewContext) { - super("Material Properties"); + super("Material Properties", viewContext); this.material = material; - this.viewContext = viewContext; - final PropertyGrid propertyGrid = createPropertyGrid(); - add(propertyGrid); } - private final PropertyGrid createPropertyGrid() + @Override + protected void showContent() { final Map<String, Object> properties = createProperties(viewContext); final PropertyGrid propertyGrid = new PropertyGrid(viewContext, properties.size()); @@ -86,7 +82,7 @@ public class MaterialPropertiesSection extends SingleSectionPanel propertyGrid.registerPropertyValueRenderer(MaterialValueEntityProperty.class, propertyRenderer); propertyGrid.setProperties(properties); - return propertyGrid; + add(propertyGrid); } private final Map<String, Object> createProperties(final IMessageProvider messageProvider) @@ -111,4 +107,5 @@ public class MaterialPropertiesSection extends SingleSectionPanel } return properties; } + } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/ContainerSamplesSection.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/ContainerSamplesSection.java index 5a72d5b7fc2..d553fc67c79 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/ContainerSamplesSection.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/ContainerSamplesSection.java @@ -16,11 +16,11 @@ package ch.systemsx.cisd.openbis.plugin.generic.client.web.client.application.sample; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.DisposableSectionPanel; 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.SingleSectionPanel; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.IDatabaseModificationObserver; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IDisposableComponent; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.sample.SampleBrowserGrid; import ch.systemsx.cisd.openbis.generic.shared.basic.TechId; @@ -31,35 +31,18 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample; * * @author Piotr Buczek */ -public class ContainerSamplesSection extends SingleSectionPanel +public class ContainerSamplesSection extends DisposableSectionPanel { private static final String PREFIX = "container-samples-section_"; public static final String ID_PREFIX = GenericConstants.ID_PREFIX + PREFIX; - private final IViewContext<?> viewContext; + private final Sample container; - private IDisposableComponent sampleDisposableGrid; - - public ContainerSamplesSection(final IViewContext<?> viewContext) + public ContainerSamplesSection(final IViewContext<?> viewContext, final Sample container) { - super(viewContext.getMessage(Dict.PART_OF_HEADING)); - this.viewContext = viewContext; - } - - public void addSamplesGrid(final Sample container) - { - TechId containerId = TechId.create(container); - sampleDisposableGrid = - SampleBrowserGrid.createGridForContainerSamples(viewContext.getCommonViewContext(), - containerId, createGridId(containerId), container.getSampleType(), getServerRequestQueue()); - - add(sampleDisposableGrid.getComponent()); - } - - public IDatabaseModificationObserver getDatabaseModificationObserver() - { - return sampleDisposableGrid; + super(viewContext.getMessage(Dict.PART_OF_HEADING), viewContext); + this.container = container; } // @Private @@ -69,10 +52,11 @@ public class ContainerSamplesSection extends SingleSectionPanel } @Override - protected void onDetach() + protected IDisposableComponent createDisposableContent() { - sampleDisposableGrid.dispose(); - super.onDetach(); + TechId containerId = TechId.create(container); + return SampleBrowserGrid.createGridForContainerSamples(viewContext.getCommonViewContext(), + containerId, createGridId(containerId), container.getSampleType()); } } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/GenericSampleViewer.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/GenericSampleViewer.java index f09ba18f8c3..5c606de5c5f 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/GenericSampleViewer.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/GenericSampleViewer.java @@ -35,6 +35,7 @@ import com.google.gwt.user.client.rpc.AsyncCallback; import ch.systemsx.cisd.openbis.generic.client.web.client.application.AbstractAsyncCallback; import ch.systemsx.cisd.openbis.generic.client.web.client.application.AttachmentVersionsSection; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.DisposableSectionPanel; 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; @@ -48,7 +49,6 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework. import ch.systemsx.cisd.openbis.generic.client.web.client.application.renderer.PropertyTypeRenderer; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.AbstractViewer; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.PropertyValueRenderers; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IDisposableComponent; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.property.IPropertyValueRenderer; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.property.PropertyGrid; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.sample.SampleListDeletionConfirmationDialog; @@ -103,11 +103,11 @@ abstract public class GenericSampleViewer extends AbstractViewer<Sample> impleme protected final TechId sampleId; - private AttachmentVersionsSection<Sample> attachmentsSection; + private DisposableSectionPanel attachmentsSection; - private ContainerSamplesSection containerSamplesSection; + private DisposableSectionPanel containerSamplesSection; - private IDisposableComponent dataSetBrowser; + private DisposableSectionPanel dataSetBrowser; private PropertyGrid propertyGrid; @@ -189,19 +189,17 @@ abstract public class GenericSampleViewer extends AbstractViewer<Sample> impleme } // 'Part of' samples - containerSamplesSection = new ContainerSamplesSection(viewContext); + containerSamplesSection = new ContainerSamplesSection(viewContext, generator); containerSamplesSection .setDisplayID(DisplayTypeIDGenerator.SAMPLE_SECTION, displayIdSuffix); - containerSamplesSection.addSamplesGrid(generator); container.addPanel(containerSamplesSection); // Data Sets - final SampleDataSetsSection externalDataPanel = new SampleDataSetsSection(viewContext); - externalDataPanel.setDisplayID(DisplayTypeIDGenerator.DATA_SET_SECTION, displayIdSuffix); CheckBox showOnlyDirectlyConnectedCheckBox = createShowOnlyDirectlyConnectedCheckBox(); - externalDataPanel.addDataSetGrid(showOnlyDirectlyConnectedCheckBox, sampleId, generator - .getSampleType()); - dataSetBrowser = externalDataPanel.getDataSetBrowser(); - container.addPanel(externalDataPanel); + dataSetBrowser = + new SampleDataSetsSection(viewContext, showOnlyDirectlyConnectedCheckBox, sampleId, + generator.getSampleType()); + dataSetBrowser.setDisplayID(DisplayTypeIDGenerator.DATA_SET_SECTION, displayIdSuffix); + container.addPanel(dataSetBrowser); // Attachments attachmentsSection = createAttachmentsSection(generator); @@ -235,16 +233,6 @@ abstract public class GenericSampleViewer extends AbstractViewer<Sample> impleme return new AttachmentVersionsSection<Sample>(viewContext.getCommonViewContext(), sample); } - @Override - protected void onDetach() - { - if (dataSetBrowser != null) - { - dataSetBrowser.dispose(); - } - super.onDetach(); - } - private final static Map<String, Object> createProperties( final IMessageProvider messageProvider, final SampleParentWithDerived sampleGeneration) { @@ -458,15 +446,15 @@ abstract public class GenericSampleViewer extends AbstractViewer<Sample> impleme new PropertyGridDatabaseModificationObserver()); if (dataSetBrowser != null) { - observer.addObserver(dataSetBrowser); + observer.addObserver(dataSetBrowser.tryGetDatabaseModificationObserver()); } if (attachmentsSection != null) { - observer.addObserver(attachmentsSection.getDatabaseModificationObserver()); + observer.addObserver(attachmentsSection.tryGetDatabaseModificationObserver()); } if (containerSamplesSection != null) { - observer.addObserver(containerSamplesSection.getDatabaseModificationObserver()); + observer.addObserver(containerSamplesSection.tryGetDatabaseModificationObserver()); } return observer; } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/SampleDataSetBrowser.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/SampleDataSetBrowser.java index 09243d69188..d66805f6ce7 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/SampleDataSetBrowser.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/SampleDataSetBrowser.java @@ -20,7 +20,6 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.ICommonClientServiceAs import ch.systemsx.cisd.openbis.generic.client.web.client.application.AbstractAsyncCallback; 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.ServerRequestQueue; import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DisplayTypeIDGenerator; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.data.AbstractExternalDataGrid; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IDisposableComponent; @@ -45,15 +44,13 @@ class SampleDataSetBrowser extends AbstractExternalDataGrid public static IDisposableComponent create(IViewContext<?> viewContext, TechId sampleId, final SampleType sampleType, - final DataSetConnectionTypeProvider connectionTypeProvider, - final ServerRequestQueue requestQueueOrNull) + final DataSetConnectionTypeProvider connectionTypeProvider) { IViewContext<ICommonClientServiceAsync> commonViewContext = viewContext.getCommonViewContext(); SampleDataSetBrowser browser = - new SampleDataSetBrowser(commonViewContext, sampleId, connectionTypeProvider, - requestQueueOrNull) + new SampleDataSetBrowser(commonViewContext, sampleId, connectionTypeProvider) { @Override public String getGridDisplayTypeID() @@ -68,11 +65,10 @@ class SampleDataSetBrowser extends AbstractExternalDataGrid private final TechId sampleId; private SampleDataSetBrowser(IViewContext<ICommonClientServiceAsync> viewContext, - TechId sampleId, DataSetConnectionTypeProvider connectionTypeProvider, - ServerRequestQueue requestQueueOrNull) + TechId sampleId, DataSetConnectionTypeProvider connectionTypeProvider) { super(viewContext, createBrowserId(sampleId), createGridId(sampleId), - DisplayTypeIDGenerator.SAMPLE_DETAILS_GRID, requestQueueOrNull); + DisplayTypeIDGenerator.SAMPLE_DETAILS_GRID); this.sampleId = sampleId; this.connectionTypeProvider = connectionTypeProvider; // refresh data when connection type provider value changes diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/SampleDataSetsSection.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/SampleDataSetsSection.java index 98ed33ec222..fff3fe9b1cf 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/SampleDataSetsSection.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/SampleDataSetsSection.java @@ -18,9 +18,9 @@ package ch.systemsx.cisd.openbis.plugin.generic.client.web.client.application.sa import com.extjs.gxt.ui.client.widget.form.CheckBox; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.DisposableSectionPanel; 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.SingleSectionPanel; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IDisposableComponent; import ch.systemsx.cisd.openbis.generic.shared.basic.TechId; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SampleType; @@ -29,32 +29,29 @@ import ch.systemsx.cisd.openbis.plugin.generic.client.web.client.application.sam /** * @author Chandrasekhar Ramakrishnan */ -public class SampleDataSetsSection extends SingleSectionPanel +public class SampleDataSetsSection extends DisposableSectionPanel { - final IViewContext<?> viewContext; + private final CheckBox showOnlyDirectlyConnectedCheckBox; - private IDisposableComponent dataSetBrowser; + private final TechId sampleId; - public SampleDataSetsSection(final IViewContext<?> viewContext) - { - super(viewContext.getMessage(Dict.EXTERNAL_DATA_HEADING)); - this.viewContext = viewContext; - } + private final SampleType sampleType; - public void addDataSetGrid(CheckBox showOnlyDirectlyConnectedCheckBox, TechId sampleId, - SampleType sampleType) + public SampleDataSetsSection(final IViewContext<?> viewContext, + CheckBox showOnlyDirectlyConnectedCheckBox, TechId sampleId, SampleType sampleType) { - getHeader().addTool(showOnlyDirectlyConnectedCheckBox); - dataSetBrowser = - SampleDataSetBrowser.create(viewContext, sampleId, sampleType, - new DataSetConnectionTypeProvider(showOnlyDirectlyConnectedCheckBox), - getServerRequestQueue()); - add(dataSetBrowser.getComponent()); + super(viewContext.getMessage(Dict.EXTERNAL_DATA_HEADING), viewContext); + this.showOnlyDirectlyConnectedCheckBox = showOnlyDirectlyConnectedCheckBox; + this.sampleId = sampleId; + this.sampleType = sampleType; } - IDisposableComponent getDataSetBrowser() + @Override + protected IDisposableComponent createDisposableContent() { - return dataSetBrowser; + getHeader().addTool(showOnlyDirectlyConnectedCheckBox); + return SampleDataSetBrowser.create(viewContext, sampleId, sampleType, + new DataSetConnectionTypeProvider(showOnlyDirectlyConnectedCheckBox)); } } diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/application/ExperimentViewer.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/application/ExperimentViewer.java index 758789de394..ca24284b629 100644 --- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/application/ExperimentViewer.java +++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/application/ExperimentViewer.java @@ -19,7 +19,7 @@ package ch.systemsx.cisd.openbis.plugin.phosphonetx.client.web.client.applicatio import java.util.Collections; import java.util.List; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.BrowserSectionPanel; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.DisposableSectionPanel; import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext; import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DatabaseModificationAwareComponent; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IDisposableComponent; @@ -30,8 +30,6 @@ import ch.systemsx.cisd.openbis.plugin.generic.client.web.client.application.exp import ch.systemsx.cisd.openbis.plugin.phosphonetx.client.web.client.IPhosphoNetXClientServiceAsync; /** - * - * * @author Franz-Josef Elmer */ public class ExperimentViewer extends GenericExperimentViewer @@ -43,7 +41,7 @@ public class ExperimentViewer extends GenericExperimentViewer ExperimentViewer viewer = new ExperimentViewer(new GenericViewContext(viewContext.getCommonViewContext()), viewContext, identifiable); - return new DatabaseModificationAwareComponent(viewer, viewer.getModificationObserver()); + return new DatabaseModificationAwareComponent(viewer, viewer); } private final IViewContext<IPhosphoNetXClientServiceAsync> specificViewContext; @@ -57,16 +55,21 @@ public class ExperimentViewer extends GenericExperimentViewer } @Override - protected List<BrowserSectionPanel> createAdditionalBrowserSectionPanels(String displyIdSuffix) + protected List<DisposableSectionPanel> createAdditionalBrowserSectionPanels(String displyIdSuffix) { - IDisposableComponent grid = - ProteinByExperimentBrowserGrid.create(specificViewContext, experimentOrNull); - BrowserSectionPanel section = - new BrowserSectionPanel(specificViewContext.getMessage(Dict.PROTEINS_SECTION), grid); + DisposableSectionPanel section = + new DisposableSectionPanel(specificViewContext.getMessage(Dict.PROTEINS_SECTION), + specificViewContext) + { + @Override + protected IDisposableComponent createDisposableContent() + { + return ProteinByExperimentBrowserGrid.create(specificViewContext, + experimentOrNull); + } + }; section.setDisplayID(DisplayTypeIDGenerator.PROTEIN_SECTION, displyIdSuffix); - return Collections.<BrowserSectionPanel> singletonList(section); + return Collections.<DisposableSectionPanel> singletonList(section); } - - } diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/application/ProteinSamplesSection.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/application/ProteinSamplesSection.java index da889acf176..7992a4f3142 100644 --- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/application/ProteinSamplesSection.java +++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/application/ProteinSamplesSection.java @@ -16,10 +16,10 @@ package ch.systemsx.cisd.openbis.plugin.phosphonetx.client.web.client.application; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.DisposableSectionPanel; 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.SingleSectionPanel; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.IDatabaseModificationObserver; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IDisposableComponent; import ch.systemsx.cisd.openbis.generic.shared.basic.IIdentifiable; import ch.systemsx.cisd.openbis.generic.shared.basic.TechId; @@ -30,28 +30,25 @@ import ch.systemsx.cisd.openbis.plugin.phosphonetx.client.web.client.IPhosphoNet * * @author Piotr Buczek */ -public class ProteinSamplesSection extends SingleSectionPanel +public class ProteinSamplesSection extends DisposableSectionPanel { private static final String PREFIX = "protein-samples-section_"; public static final String ID_PREFIX = GenericConstants.ID_PREFIX + PREFIX; - private IDisposableComponent sampleDisposableGrid; + private final IViewContext<IPhosphoNetXClientServiceAsync> viewContext; + + private final TechId proteinReferenceID; + + private final IIdentifiable experimentOrNull; public ProteinSamplesSection(final IViewContext<IPhosphoNetXClientServiceAsync> viewContext, final TechId proteinReferenceID, IIdentifiable experimentOrNull) { - super("Samples"); - Long experimentID = experimentOrNull == null ? null : experimentOrNull.getId(); - sampleDisposableGrid = - SampleAbundanceBrowserGrid.createGridForProteinSamples(viewContext, - proteinReferenceID, experimentID, createGridId(proteinReferenceID)); - add(sampleDisposableGrid.getComponent()); - } - - public IDatabaseModificationObserver getDatabaseModificationObserver() - { - return sampleDisposableGrid; + super("Samples", viewContext); + this.viewContext = viewContext; + this.experimentOrNull = experimentOrNull; + this.proteinReferenceID = proteinReferenceID; } // @Private @@ -61,10 +58,11 @@ public class ProteinSamplesSection extends SingleSectionPanel } @Override - protected void onDetach() + protected IDisposableComponent createDisposableContent() { - sampleDisposableGrid.dispose(); - super.onDetach(); + Long experimentID = experimentOrNull == null ? null : experimentOrNull.getId(); + return SampleAbundanceBrowserGrid.createGridForProteinSamples(viewContext, + proteinReferenceID, experimentID, createGridId(proteinReferenceID)); } } diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/application/ProteinViewer.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/application/ProteinViewer.java index 461b125e01c..37f6cb75b0e 100644 --- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/application/ProteinViewer.java +++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/application/ProteinViewer.java @@ -29,7 +29,7 @@ import com.extjs.gxt.ui.client.widget.layout.BorderLayout; import com.extjs.gxt.ui.client.widget.layout.BorderLayoutData; import ch.systemsx.cisd.openbis.generic.client.web.client.application.AbstractAsyncCallback; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.BrowserSectionPanel; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.DisposableSectionPanel; 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.CompositeDatabaseModificationObserver; @@ -40,6 +40,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework. import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.ITabItemFactory; import ch.systemsx.cisd.openbis.generic.client.web.client.application.help.HelpPageIdentifier; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.AbstractViewer; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IDisposableComponent; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.property.PropertyGrid; import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.StringUtils; import ch.systemsx.cisd.openbis.generic.shared.basic.IEntityInformationHolder; @@ -170,11 +171,28 @@ public class ProteinViewer extends AbstractViewer<IEntityInformationHolder> impl BorderLayoutData layoutData = createBorderLayoutData(LayoutRegion.WEST); layoutData.setSize(400); add(propertyPanel, layoutData); - add(new BrowserSectionPanel(viewContext.getMessage(Dict.SEQUENCES), ProteinSequenceGrid - .create(viewContext, proteinReferenceID)), createRightBorderLayoutData()); - add(new BrowserSectionPanel(viewContext.getMessage(Dict.DATA_SET_PROTEINS), - DataSetProteinGrid.create(viewContext, experimentOrNull, proteinReferenceID)), - createBorderLayoutData(LayoutRegion.SOUTH)); + DisposableSectionPanel sequencesSection = + new DisposableSectionPanel(viewContext.getMessage(Dict.SEQUENCES), viewContext) + { + @Override + protected IDisposableComponent createDisposableContent() + { + return ProteinSequenceGrid.create(ProteinViewer.this.viewContext, + proteinReferenceID); + } + }; + add(sequencesSection, createRightBorderLayoutData()); + DisposableSectionPanel proteinsSection = + new DisposableSectionPanel(viewContext.getMessage(Dict.DATA_SET_PROTEINS), viewContext) + { + @Override + protected IDisposableComponent createDisposableContent() + { + return DataSetProteinGrid.create(ProteinViewer.this.viewContext, + experimentOrNull, proteinReferenceID); + } + }; + add(proteinsSection, createBorderLayoutData(LayoutRegion.SOUTH)); layout(); } @@ -313,7 +331,7 @@ public class ProteinViewer extends AbstractViewer<IEntityInformationHolder> impl new CompositeDatabaseModificationObserver(); if (proteinSamplesSection != null) { - observer.addObserver(proteinSamplesSection.getDatabaseModificationObserver()); + observer.addObserver(proteinSamplesSection.tryGetDatabaseModificationObserver()); } // TODO 2009-07-31, Piotr Buczek: refresh properties panel? return observer; diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/PlateLayoutDatasetSection.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/PlateLayoutDatasetSection.java index c5770fa370c..ec3de1343d5 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/PlateLayoutDatasetSection.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/PlateLayoutDatasetSection.java @@ -24,13 +24,10 @@ import com.extjs.gxt.ui.client.widget.layout.RowLayout; import com.google.gwt.user.client.rpc.AsyncCallback; import ch.systemsx.cisd.openbis.generic.client.web.client.application.AbstractAsyncCallback; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.ServerRequestQueue; import ch.systemsx.cisd.openbis.generic.client.web.client.application.SingleSectionPanel; import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DisplayTypeIDGenerator; import ch.systemsx.cisd.openbis.generic.shared.basic.TechId; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample; -import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.IScreeningClientServiceAsync; import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.Dict; import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.ScreeningViewContext; import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.PlateImages; @@ -45,27 +42,25 @@ public class PlateLayoutDatasetSection extends SingleSectionPanel { public static final String ID_SUFFIX = "PlateLayoutDatasetSection"; - public PlateLayoutDatasetSection(final ScreeningViewContext viewContext, final TechId datasetId) - { - super("Plate Layout"); - add(new Text(viewContext.getMessage(Dict.LOAD_IN_PROGRESS))); + private final ScreeningViewContext viewContext; - // Don't get data immediately -- queue the request and let the panel decide when data needs - // to be retrieved - ServerRequestQueue.ServerRequestAction requestAction = - new ServerRequestQueue.ServerRequestAction(this) - { + private final TechId datasetId; - public void onInvoke() - { - viewContext.getService().getPlateContentForDataset(datasetId, - createDisplayPlateCallback(viewContext)); - } - }; + public PlateLayoutDatasetSection(final ScreeningViewContext viewContext, final TechId datasetId) + { + super("Plate Layout", viewContext); + this.viewContext = viewContext; + this.datasetId = datasetId; + setDisplayID(DisplayTypeIDGenerator.SAMPLE_SECTION, ID_SUFFIX); + } - getServerRequestQueue().addRequestToQueue(requestAction); + @Override + protected void showContent() + { + add(new Text(viewContext.getMessage(Dict.LOAD_IN_PROGRESS))); - setDisplayID(DisplayTypeIDGenerator.SAMPLE_SECTION, ID_SUFFIX); + viewContext.getService().getPlateContentForDataset(datasetId, + createDisplayPlateCallback(viewContext)); } private AsyncCallback<PlateImages> createDisplayPlateCallback(final ScreeningViewContext context) @@ -79,26 +74,24 @@ public class PlateLayoutDatasetSection extends SingleSectionPanel setLayout(new RowLayout()); setScrollMode(Scroll.AUTO); - renderPlate(plateContent, context); - addMetadataTable(plateContent.getPlate(), context); + renderPlate(plateContent); + addMetadataTable(plateContent.getPlate()); layout(); } }; } - private void renderPlate(PlateImages plateImages, ScreeningViewContext viewContext) + private void renderPlate(PlateImages plateImages) { LayoutContainer container = new LayoutContainer(); container.add(PlateLayouter.createVisualization(plateImages, viewContext)); add(container, PlateLayouter.createRowLayoutMarginData()); } - private void addMetadataTable(final Sample plate, - final IViewContext<IScreeningClientServiceAsync> viewContext) + private void addMetadataTable(final Sample plate) { Button generateButton = PlateLayouter.createPlateMetadataButton(plate, viewContext); add(generateButton, PlateLayouter.createRowLayoutMarginData()); } - } diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/PlateLayoutSampleSection.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/PlateLayoutSampleSection.java index 00766406820..3c13c26a0e2 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/PlateLayoutSampleSection.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/PlateLayoutSampleSection.java @@ -30,15 +30,12 @@ import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.Widget; import ch.systemsx.cisd.openbis.generic.client.web.client.application.AbstractAsyncCallback; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.ServerRequestQueue; import ch.systemsx.cisd.openbis.generic.client.web.client.application.SingleSectionPanel; import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DisplayTypeIDGenerator; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.data.DataSetReportGenerator; import ch.systemsx.cisd.openbis.generic.client.web.client.dto.DisplayedOrSelectedDatasetCriteria; import ch.systemsx.cisd.openbis.generic.shared.basic.TechId; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatastoreServiceDescription; -import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.IScreeningClientServiceAsync; import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.ScreeningConstants; import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.Dict; import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.ScreeningViewContext; @@ -55,29 +52,25 @@ public class PlateLayoutSampleSection extends SingleSectionPanel { public static final String ID_SUFFIX = "PlateLayoutSection"; - public PlateLayoutSampleSection(final ScreeningViewContext viewContext, final TechId sampleId) - { - super("Plate Layout"); - add(new Text(viewContext.getMessage(Dict.LOAD_IN_PROGRESS))); + private final ScreeningViewContext viewContext; - // Don't get data immediately -- queue the request and let the panel decide when data needs - // to be retrieved - ServerRequestQueue.ServerRequestAction requestAction = - new ServerRequestQueue.ServerRequestAction(this) - { - - public void onInvoke() - { - viewContext.getService().getPlateContent(sampleId, - createDisplayPlateCallback(viewContext)); - } - }; - - getServerRequestQueue().addRequestToQueue(requestAction); + private final TechId sampleId; + public PlateLayoutSampleSection(final ScreeningViewContext viewContext, final TechId sampleId) + { + super("Plate Layout", viewContext); + this.viewContext = viewContext; + this.sampleId = sampleId; setDisplayID(DisplayTypeIDGenerator.SAMPLE_SECTION, ID_SUFFIX); } + @Override + protected void showContent() + { + add(new Text(viewContext.getMessage(Dict.LOAD_IN_PROGRESS))); + viewContext.getService().getPlateContent(sampleId, createDisplayPlateCallback(viewContext)); + } + private AsyncCallback<PlateContent> createDisplayPlateCallback( final ScreeningViewContext context) { @@ -90,18 +83,17 @@ public class PlateLayoutSampleSection extends SingleSectionPanel setLayout(new RowLayout()); setScrollMode(Scroll.AUTO); - renderPlate(plateContent, context); - addImageAnalysisButton(plateContent, viewContext); + renderPlate(plateContent); + addImageAnalysisButton(plateContent); - addMetadataTable(plateContent, context); + addMetadataTable(plateContent); layout(); } }; } - private void addImageAnalysisButton(final PlateContent plateContent, - final IViewContext<?> viewContext) + private void addImageAnalysisButton(final PlateContent plateContent) { Component analysisPanel; int datasetsNumber = plateContent.getImageAnalysisDatasetsNumber(); @@ -116,7 +108,7 @@ public class PlateLayoutSampleSection extends SingleSectionPanel @Override public void componentSelected(ButtonEvent ce) { - generateImageAnalysisReport(viewContext, dataset, plateContent); + generateImageAnalysisReport(dataset, plateContent); } }); analysisPanel = generateButton; @@ -136,8 +128,7 @@ public class PlateLayoutSampleSection extends SingleSectionPanel add(analysisPanel, PlateLayouter.createRowLayoutMarginData()); } - private void generateImageAnalysisReport(IViewContext<?> viewContext, DatasetReference dataset, - PlateContent plateContent) + private void generateImageAnalysisReport(DatasetReference dataset, PlateContent plateContent) { DatastoreServiceDescription service = createImageAnalysisReporter(dataset, plateContent); DisplayedOrSelectedDatasetCriteria criteria = @@ -154,10 +145,10 @@ public class PlateLayoutSampleSection extends SingleSectionPanel reportLabel, new String[] {}, dataset.getDatastoreCode()); } - private void renderPlate(PlateContent plateContent, ScreeningViewContext viewContext) + private void renderPlate(PlateContent plateContent) { LayoutContainer container = new LayoutContainer(); - Widget datasetNumberLegend = tryRenderImageDatasetsNumberLegend(plateContent, viewContext); + Widget datasetNumberLegend = tryRenderImageDatasetsNumberLegend(plateContent); if (datasetNumberLegend != null) { container.add(datasetNumberLegend); @@ -168,8 +159,7 @@ public class PlateLayoutSampleSection extends SingleSectionPanel add(container, PlateLayouter.createRowLayoutMarginData()); } - private Widget tryRenderImageDatasetsNumberLegend(PlateContent plateContent, - IViewContext<?> viewContext) + private Widget tryRenderImageDatasetsNumberLegend(PlateContent plateContent) { int datasetsNumber = plateContent.getImageDatasetsNumber(); if (datasetsNumber == 0) @@ -186,8 +176,7 @@ public class PlateLayoutSampleSection extends SingleSectionPanel } } - private void addMetadataTable(final PlateContent plateContent, - final IViewContext<IScreeningClientServiceAsync> viewContext) + private void addMetadataTable(final PlateContent plateContent) { Button generateButton = PlateLayouter.createPlateMetadataButton(plateContent.getPlate(), viewContext); -- GitLab