From 992545599d310eb86a558bd4b08eaa6f8bc5a610 Mon Sep 17 00:00:00 2001 From: tpylak <tpylak> Date: Wed, 1 Apr 2009 08:40:44 +0000 Subject: [PATCH] LMS-751 Automatic refresh: entity details SVN: 10511 --- .../PropertyTypeAssignmentForm.java | 5 ++- .../application/ClientPluginFactory.java | 27 ++++++------- .../experiment/ExperimentDataSetSection.java | 10 +++-- .../ExperimentPropertiesSection.java | 11 +++--- .../experiment/ExperimentSamplesSection.java | 6 +++ .../experiment/GenericExperimentViewer.java | 39 ++++++++++++++++--- .../material/GenericMaterialViewer.java | 30 +++++++++++++- .../sample/GenericSampleViewer.java | 39 ++++++++++++++++++- .../sample/SampleDataSetBrowser.java | 4 +- .../application/ClientPluginFactory.java | 1 - 10 files changed, 135 insertions(+), 37 deletions(-) diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/property_type/PropertyTypeAssignmentForm.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/property_type/PropertyTypeAssignmentForm.java index a2dcc250cd2..9e093c1606c 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/property_type/PropertyTypeAssignmentForm.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/property_type/PropertyTypeAssignmentForm.java @@ -302,9 +302,12 @@ public final class PropertyTypeAssignmentForm extends LayoutContainer implements formPanel.add(getMandatoryCheckbox()); updateDefaultField(); - // TODO 2009-03-30, Tomasz Pylak: add auto-refreshing of the initial value field modificationManager.addObserver(propertyTypeWidget); modificationManager.addObserver(typeSelectionWidget); + if (defaultValueField != null) + { + modificationManager.addObserver(defaultValueField); + } } @Override diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/ClientPluginFactory.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/ClientPluginFactory.java index 3a0d2e41e94..1553dc74a20 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/ClientPluginFactory.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/ClientPluginFactory.java @@ -148,11 +148,10 @@ public final class ClientPluginFactory extends { public ITabItem create() { - final GenericSampleViewer sampleViewer = - new GenericSampleViewer(getViewContext(), identifier); - // TODO 2009-03-31, Tomasz Pylak: make aware of db modifications - return DefaultTabItem.createUnaware( - getDetailsTitle(Dict.SAMPLE, identifier), sampleViewer, false); + final DatabaseModificationAwareComponent sampleViewer = + GenericSampleViewer.create(getViewContext(), identifier); + return DefaultTabItem.create(getDetailsTitle(Dict.SAMPLE, identifier), + sampleViewer, getViewContext(), false); } public String getId() @@ -215,11 +214,10 @@ public final class ClientPluginFactory extends { public ITabItem create() { - final GenericMaterialViewer materialViewer = - new GenericMaterialViewer(getViewContext(), identifier); - // TODO 2009-03-31, Tomasz Pylak: make aware of db modifications - return DefaultTabItem.createUnaware(getDetailsTitle(Dict.MATERIAL, - identifier), materialViewer, false); + final DatabaseModificationAwareComponent materialViewer = + GenericMaterialViewer.create(getViewContext(), identifier); + return DefaultTabItem.create(getDetailsTitle(Dict.MATERIAL, identifier), + materialViewer, getViewContext(), false); } public String getId() @@ -267,11 +265,10 @@ public final class ClientPluginFactory extends { public ITabItem create() { - final GenericExperimentViewer experimentViewer = - new GenericExperimentViewer(getViewContext(), identifier); - // TODO 2009-03-31, Tomasz Pylak: make aware of db modifications - return DefaultTabItem.createUnaware(getDetailsTitle(Dict.EXPERIMENT, - identifier), experimentViewer, false); + final DatabaseModificationAwareComponent experimentViewer = + GenericExperimentViewer.create(getViewContext(), identifier); + return DefaultTabItem.create(getDetailsTitle(Dict.EXPERIMENT, identifier), + experimentViewer, getViewContext(), false); } public String getId() 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 d2def0f1edf..35b15f7def0 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 @@ -20,12 +20,11 @@ import com.extjs.gxt.ui.client.widget.layout.RowData; import com.extjs.gxt.ui.client.widget.layout.RowLayout; import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext; +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.dto.Experiment; /** - * - * * @author Franz-Josef Elmer */ class ExperimentDataSetSection extends SectionPanel @@ -40,11 +39,16 @@ class ExperimentDataSetSection extends SectionPanel add(disposableBrowser.getComponent(), new RowData(-1, 200)); } + public IDatabaseModificationObserver getDatabaseModificationObserver() + { + return disposableBrowser; + } + @Override protected void onDetach() { disposableBrowser.dispose(); super.onDetach(); } - + } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/ExperimentPropertiesSection.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/ExperimentPropertiesSection.java index 5842bb0c84a..2d931117070 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/ExperimentPropertiesSection.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/ExperimentPropertiesSection.java @@ -57,15 +57,16 @@ public class ExperimentPropertiesSection extends SectionPanel private final PropertyGrid createPropertyGrid() { - final Map<String, Object> properties = createProperties(viewContext); - final PropertyGrid propertyGrid = new PropertyGrid(viewContext, properties.size()); + IMessageProvider messageProvider = viewContext; + final Map<String, Object> properties = createProperties(messageProvider); + final PropertyGrid propertyGrid = new PropertyGrid(messageProvider, properties.size()); propertyGrid.getElement().setId(PROPERTIES_ID_PREFIX + experiment.getIdentifier()); propertyGrid.registerPropertyValueRenderer(Person.class, PropertyValueRenderers - .createPersonPropertyValueRenderer(viewContext)); + .createPersonPropertyValueRenderer(messageProvider)); propertyGrid.registerPropertyValueRenderer(ExperimentType.class, PropertyValueRenderers - .createExperimentTypePropertyValueRenderer(viewContext)); + .createExperimentTypePropertyValueRenderer(messageProvider)); propertyGrid.registerPropertyValueRenderer(Invalidation.class, PropertyValueRenderers - .createInvalidationPropertyValueRenderer(viewContext)); + .createInvalidationPropertyValueRenderer(messageProvider)); propertyGrid.registerPropertyValueRenderer(ExperimentProperty.class, PropertyValueRenderers .createExperimentPropertyPropertyValueRenderer(viewContext)); propertyGrid.setProperties(properties); 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 3e9c55d3f18..f9cecd46f9e 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 @@ -20,6 +20,7 @@ import com.extjs.gxt.ui.client.widget.layout.RowData; import com.extjs.gxt.ui.client.widget.layout.RowLayout; import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext; +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.client.web.client.dto.Experiment; @@ -46,6 +47,11 @@ public class ExperimentSamplesSection extends SectionPanel add(sampleDisposableGrid.getComponent(), new RowData(-1, 200)); } + public IDatabaseModificationObserver getDatabaseModificationObserver() + { + return sampleDisposableGrid; + } + // @Private static String createId(String experimentIdentifier) { 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 857cf97ad4f..b20f15d5b7d 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 @@ -25,6 +25,8 @@ 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.GenericConstants; import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.CompositeDatabaseModificationObserver; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DatabaseModificationAwareComponent; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.AbstractViewer; import ch.systemsx.cisd.openbis.generic.client.web.client.dto.Experiment; import ch.systemsx.cisd.openbis.plugin.generic.client.web.client.IGenericClientServiceAsync; @@ -42,12 +44,24 @@ public final class GenericExperimentViewer extends AbstractViewer<IGenericClient private final String experimentIdentifier; - public GenericExperimentViewer(final IViewContext<IGenericClientServiceAsync> viewContext, + private final CompositeDatabaseModificationObserver modificationObserver; + + public static DatabaseModificationAwareComponent create( + final IViewContext<IGenericClientServiceAsync> viewContext, + final String experimentIdentifier) + { + GenericExperimentViewer viewer = + new GenericExperimentViewer(viewContext, experimentIdentifier); + return new DatabaseModificationAwareComponent(viewer, viewer.modificationObserver); + } + + private GenericExperimentViewer(final IViewContext<IGenericClientServiceAsync> viewContext, final String experimentIdentifier) { super(viewContext); setId(createId(experimentIdentifier)); this.experimentIdentifier = experimentIdentifier; + this.modificationObserver = new CompositeDatabaseModificationObserver(); loadData(); } @@ -67,18 +81,22 @@ public final class GenericExperimentViewer extends AbstractViewer<IGenericClient private void loadData() { viewContext.getService().getExperimentInfo(experimentIdentifier, - new ExperimentInfoCallback(viewContext, this)); + new ExperimentInfoCallback(viewContext, this, modificationObserver)); } public static final class ExperimentInfoCallback extends AbstractAsyncCallback<Experiment> { private final GenericExperimentViewer genericExperimentViewer; + private final CompositeDatabaseModificationObserver modificationObserver; + private ExperimentInfoCallback(final IViewContext<IGenericClientServiceAsync> viewContext, - final GenericExperimentViewer genericSampleViewer) + final GenericExperimentViewer genericSampleViewer, + final CompositeDatabaseModificationObserver modificationObserver) { super(viewContext); this.genericExperimentViewer = genericSampleViewer; + this.modificationObserver = modificationObserver; } // @@ -92,6 +110,7 @@ public final class GenericExperimentViewer extends AbstractViewer<IGenericClient * </p> */ @Override + // TODO 2009-04-01, Tomasz Pylak: add attachments and properies auto-refresh protected final void process(final Experiment result) { genericExperimentViewer.removeAll(); @@ -100,10 +119,18 @@ public final class GenericExperimentViewer extends AbstractViewer<IGenericClient new ExperimentPropertiesSection(result, viewContext)); addSection(genericExperimentViewer, new ExperimentAttachmentsSection(result, viewContext)); - addSection(genericExperimentViewer, new ExperimentSamplesSection(result, viewContext)); - addSection(genericExperimentViewer, new ExperimentDataSetSection(result, viewContext)); + + ExperimentSamplesSection sampleSection = + new ExperimentSamplesSection(result, viewContext); + addSection(genericExperimentViewer, sampleSection); + modificationObserver.addObserver(sampleSection.getDatabaseModificationObserver()); + + ExperimentDataSetSection dataSection = + new ExperimentDataSetSection(result, viewContext); + addSection(genericExperimentViewer, dataSection); + modificationObserver.addObserver(dataSection.getDatabaseModificationObserver()); + genericExperimentViewer.layout(); } } - } \ No newline at end of file diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/material/GenericMaterialViewer.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/material/GenericMaterialViewer.java index 96cb33cac6d..851061efdb8 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/material/GenericMaterialViewer.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/material/GenericMaterialViewer.java @@ -16,6 +16,8 @@ package ch.systemsx.cisd.openbis.plugin.generic.client.web.client.application.material; +import java.util.Set; + import com.extjs.gxt.ui.client.Style.Scroll; import com.extjs.gxt.ui.client.util.Margins; import com.extjs.gxt.ui.client.widget.LayoutContainer; @@ -25,8 +27,12 @@ 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.GenericConstants; 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.framework.IDatabaseModificationObserver; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.AbstractViewer; import ch.systemsx.cisd.openbis.generic.client.web.client.dto.Material; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKind; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKind.ObjectKind; import ch.systemsx.cisd.openbis.plugin.generic.client.web.client.IGenericClientServiceAsync; /** @@ -35,6 +41,7 @@ import ch.systemsx.cisd.openbis.plugin.generic.client.web.client.IGenericClientS * @author Piotr Buczek */ public final class GenericMaterialViewer extends AbstractViewer<IGenericClientServiceAsync> + implements IDatabaseModificationObserver { private static final String PREFIX = "generic-material-viewer_"; @@ -42,7 +49,15 @@ public final class GenericMaterialViewer extends AbstractViewer<IGenericClientSe private final String materialIdentifier; - public GenericMaterialViewer(final IViewContext<IGenericClientServiceAsync> viewContext, + public static DatabaseModificationAwareComponent create( + final IViewContext<IGenericClientServiceAsync> viewContext, + final String materialIdentifier) + { + GenericMaterialViewer viewer = new GenericMaterialViewer(viewContext, materialIdentifier); + return new DatabaseModificationAwareComponent(viewer, viewer); + } + + private GenericMaterialViewer(final IViewContext<IGenericClientServiceAsync> viewContext, final String materialIdentifier) { super(viewContext); @@ -101,4 +116,17 @@ public final class GenericMaterialViewer extends AbstractViewer<IGenericClientSe } } + public DatabaseModificationKind[] getRelevantModifications() + { + return new DatabaseModificationKind[] + { DatabaseModificationKind.edit(ObjectKind.MATERIAL), + DatabaseModificationKind.createOrDelete(ObjectKind.PROPERTY_TYPE_ASSIGNMENT), + DatabaseModificationKind.createOrDelete(ObjectKind.VOCABULARY_TERM) }; + } + + public void update(Set<DatabaseModificationKind> observedModifications) + { + loadData(); // reloads everything + } + } \ No newline at end of file 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 3699bc29c31..9684c194ee5 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 @@ -22,6 +22,7 @@ import java.util.Comparator; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.Set; import com.extjs.gxt.ui.client.Style.LayoutRegion; import com.extjs.gxt.ui.client.Style.Scroll; @@ -51,6 +52,9 @@ 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.framework.CompositeDatabaseModificationObserver; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DatabaseModificationAwareComponent; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.IDatabaseModificationObserver; import ch.systemsx.cisd.openbis.generic.client.web.client.application.model.SampleModel; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.AbstractViewer; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.ColumnConfigFactory; @@ -66,6 +70,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.dto.Procedure; import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ResultSet; import ch.systemsx.cisd.openbis.generic.client.web.client.dto.Sample; import ch.systemsx.cisd.openbis.generic.client.web.client.dto.SampleGeneration; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKind; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Person; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SampleProperty; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SampleType; @@ -76,7 +81,8 @@ import ch.systemsx.cisd.openbis.plugin.generic.client.web.client.IGenericClientS * * @author Christian Ribeaud */ -public final class GenericSampleViewer extends AbstractViewer<IGenericClientServiceAsync> +public final class GenericSampleViewer extends AbstractViewer<IGenericClientServiceAsync> implements + IDatabaseModificationObserver { private static final String PREFIX = "generic-sample-viewer_"; @@ -95,7 +101,14 @@ public final class GenericSampleViewer extends AbstractViewer<IGenericClientServ private IDisposableComponent disposableBrowser; - public GenericSampleViewer(final IViewContext<IGenericClientServiceAsync> viewContext, + public static DatabaseModificationAwareComponent create( + IViewContext<IGenericClientServiceAsync> viewContext, String sampleIdentifier) + { + GenericSampleViewer viewer = new GenericSampleViewer(viewContext, sampleIdentifier); + return new DatabaseModificationAwareComponent(viewer, viewer); + } + + private GenericSampleViewer(final IViewContext<IGenericClientServiceAsync> viewContext, final String sampleIdentifier) { super(viewContext); @@ -384,4 +397,26 @@ public final class GenericSampleViewer extends AbstractViewer<IGenericClientServ genericSampleViewer.loadStores(); } } + + public DatabaseModificationKind[] getRelevantModifications() + { + return createDatabaseModificationObserver().getRelevantModifications(); + } + + public void update(Set<DatabaseModificationKind> observedModifications) + { + createDatabaseModificationObserver().update(observedModifications); + } + + // TODO 2009-04-01, Tomasz Pylak: add auto-refresh for properties and contained samples + private CompositeDatabaseModificationObserver createDatabaseModificationObserver() + { + CompositeDatabaseModificationObserver observer = + new CompositeDatabaseModificationObserver(); + if (disposableBrowser != null) + { + observer.addObserver(disposableBrowser); + } + return observer; + } } \ No newline at end of file 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 9cd7cc7bfdb..d44340930ee 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 @@ -59,9 +59,7 @@ class SampleDataSetBrowser extends AbstractExternalDataGrid public DatabaseModificationKind[] getRelevantModifications() { - return new DatabaseModificationKind[] - { DatabaseModificationKind.createOrDelete(ObjectKind.SAMPLE), - DatabaseModificationKind.edit(ObjectKind.SAMPLE) }; + return DatabaseModificationKind.any(ObjectKind.DATA_SET); } } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/ClientPluginFactory.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/ClientPluginFactory.java index f6457ab49f0..6d59e53fa4b 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/ClientPluginFactory.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/ClientPluginFactory.java @@ -128,7 +128,6 @@ public final class ClientPluginFactory extends { final ScreeningSampleViewer sampleViewer = new ScreeningSampleViewer(getViewContext(), sampleIdentifier); - // TODO 2009-03-31, Tomasz Pylak: make aware of db modifications return DefaultTabItem.createUnaware(sampleIdentifier, sampleViewer, false); } -- GitLab