From b076d103c3d8f3f024803a61de60e5804e9d94b4 Mon Sep 17 00:00:00 2001 From: buczekp <buczekp> Date: Tue, 10 Aug 2010 08:00:18 +0000 Subject: [PATCH] [LMS-1676] improved Parents column for sample browsers; sort parents by code SVN: 17374 --- .../renderer/InternalLinkCellRenderer.java | 21 +++++++++++++++++-- .../web/client/application/ui/CodesArea.java | 3 ++- .../sample/AbstractParentSampleColDef.java | 7 ++++++- .../ParentGeneratedFromSampleColDef.java | 17 ++++++++++++++- .../ui/sample/SampleBrowserGrid.java | 10 ++++++++- .../generic/shared/basic/dto/Sample.java | 12 ++++++----- .../sample/GenericSampleEditForm.java | 5 +++-- .../sample/GenericSampleViewer.java | 10 ++++----- .../application/sample/SamplesArea.java | 3 ++- .../plugin/generic/server/GenericServer.java | 5 ++++- 10 files changed, 73 insertions(+), 20 deletions(-) diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/renderer/InternalLinkCellRenderer.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/renderer/InternalLinkCellRenderer.java index 75fb413277a..0e74b76fadf 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/renderer/InternalLinkCellRenderer.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/renderer/InternalLinkCellRenderer.java @@ -9,6 +9,17 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.model.Base public class InternalLinkCellRenderer implements GridCellRenderer<BaseEntityModel<?>> { + private final boolean renderOriginalValueForEmptyToken; + + public InternalLinkCellRenderer(boolean renderOriginalValueForEmptyToken) + { + this.renderOriginalValueForEmptyToken = renderOriginalValueForEmptyToken; + } + + public InternalLinkCellRenderer() + { + this(false); + } public Object render(BaseEntityModel<?> model, String property, ColumnData config, int rowIndex, int colIndex, ListStore<BaseEntityModel<?>> store, @@ -21,8 +32,14 @@ public class InternalLinkCellRenderer implements GridCellRenderer<BaseEntityMode { // TODO 2010-05-18, IA: almost the same as LinkRenderer#createLinkRenderer() String originalValue = String.valueOf(model.get(property)); String tokenOrNull = model.tryGetLink(property); - String href = "#" + (tokenOrNull != null ? tokenOrNull : ""); - return LinkRenderer.renderAsLinkWithAnchor(originalValue, href, false); + if (tokenOrNull == null && renderOriginalValueForEmptyToken) + { + return originalValue; + } else + { + String href = "#" + (tokenOrNull != null ? tokenOrNull : ""); + return LinkRenderer.renderAsLinkWithAnchor(originalValue, href, false); + } } } } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/CodesArea.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/CodesArea.java index 5b6826116b8..3f3d5e471ec 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/CodesArea.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/CodesArea.java @@ -16,6 +16,7 @@ package ch.systemsx.cisd.openbis.generic.client.web.client.application.ui; +import java.util.Collection; import java.util.List; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.field.MultilineVarcharField; @@ -36,7 +37,7 @@ abstract public class CodesArea<T extends ICodeHolder> extends MultilineVarcharF setEmptyText(emptyTextMsg); } - public final void setCodeProviders(List<T> codeProviders) + public final void setCodeProviders(Collection<T> codeProviders) { List<String> codes = Code.extractCodes(codeProviders); setCodes(codes); diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/columns/specific/sample/AbstractParentSampleColDef.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/columns/specific/sample/AbstractParentSampleColDef.java index a9192fe0d9f..7d4787f7e6c 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/columns/specific/sample/AbstractParentSampleColDef.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/columns/specific/sample/AbstractParentSampleColDef.java @@ -39,13 +39,18 @@ public abstract class AbstractParentSampleColDef extends AbstractColumnDefinitio Sample parent = tryGetParent(sample); if (parent != null) { - return parent.getIdentifier(); + return getAsValue(parent); } else { return null; } } + protected final String getAsValue(Sample sample) + { + return sample.getIdentifier(); + } + @Override public String tryGetLink(Sample sample) { diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/columns/specific/sample/ParentGeneratedFromSampleColDef.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/columns/specific/sample/ParentGeneratedFromSampleColDef.java index 51f305068e7..c1de7882d3e 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/columns/specific/sample/ParentGeneratedFromSampleColDef.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/columns/specific/sample/ParentGeneratedFromSampleColDef.java @@ -16,12 +16,15 @@ package ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.columns.specific.sample; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.MultilineHTML; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample; public class ParentGeneratedFromSampleColDef extends AbstractParentSampleColDef { private static final String IDENTIFIER = "generatedFromParent"; + private static final int MAX_PARENTS = 4; + // GWT only public ParentGeneratedFromSampleColDef() { @@ -62,7 +65,19 @@ public class ParentGeneratedFromSampleColDef extends AbstractParentSampleColDef return super.tryGetValue(sample); } else { - return parentsSize + ""; + StringBuilder sb = new StringBuilder(); + int counter = 0; + for (Sample parent : sample.getParents()) + { + if (counter == MAX_PARENTS) + { + sb.append("... (").append(parentsSize - MAX_PARENTS).append(" more)"); + break; + } + sb.append(getAsValue(parent)).append("\n"); + counter++; + } + return new MultilineHTML(sb.toString()).toString(); } } 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 a1789e6d6bf..9f58645e23a 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 @@ -42,6 +42,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework. import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.SampleTypeDisplayID; import ch.systemsx.cisd.openbis.generic.client.web.client.application.model.BaseEntityModel; import ch.systemsx.cisd.openbis.generic.client.web.client.application.model.SampleModelFactory; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.renderer.InternalLinkCellRenderer; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.DisplayedAndSelectedEntities; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.columns.framework.IColumnDefinitionKind; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.columns.specific.sample.AbstractParentSampleColDef; @@ -612,9 +613,11 @@ public class SampleBrowserGrid extends linkCellRenderer); schema.setGridCellRendererFor(CommonSampleColDefKind.PROJECT.id(), linkCellRenderer); // setup link renderers and listeners on parent columns + GridCellRenderer<BaseEntityModel<?>> parentLinkCellRenderer = + createParentLinkCellRenderer(); for (final AbstractParentSampleColDef parentColDef : parentColumnsSchema) { - schema.setGridCellRendererFor(parentColDef.getIdentifier(), linkCellRenderer); + schema.setGridCellRendererFor(parentColDef.getIdentifier(), parentLinkCellRenderer); registerLinkClickListenerFor(parentColDef.getIdentifier(), new OpenEntityDetailsTabCellClickListener() { @@ -629,6 +632,11 @@ public class SampleBrowserGrid extends return schema; } + protected final GridCellRenderer<BaseEntityModel<?>> createParentLinkCellRenderer() + { + return new InternalLinkCellRenderer(true); + } + @Override protected boolean hasColumnsDefinitionChanged(ListSampleDisplayCriteria newCriteria) { diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/Sample.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/Sample.java index 2fbb11ffd5a..303735ea505 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/Sample.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/Sample.java @@ -19,6 +19,8 @@ package ch.systemsx.cisd.openbis.generic.shared.basic.dto; import java.util.ArrayList; import java.util.Date; import java.util.List; +import java.util.Set; +import java.util.TreeSet; import ch.systemsx.cisd.common.annotation.CollectionMapping; import ch.systemsx.cisd.openbis.generic.shared.basic.IAttachmentHolder; @@ -52,7 +54,7 @@ public final class Sample extends CodeWithRegistration<Sample> implements IInval private Sample container; - private List<Sample> parents = new ArrayList<Sample>(); + private Set<Sample> parents = new TreeSet<Sample>(); private List<IEntityProperty> properties; @@ -156,12 +158,12 @@ public final class Sample extends CodeWithRegistration<Sample> implements IInval this.container = container; } - public List<Sample> getParents() + public Set<Sample> getParents() { return parents; } - public void setParents(List<Sample> parents) + public void setParents(Set<Sample> parents) { this.parents = parents; } @@ -182,13 +184,13 @@ public final class Sample extends CodeWithRegistration<Sample> implements IInval throw new IllegalStateException("Sample " + getIdentifier() + " has more than one parent"); } - return parents.get(0); + return parents.iterator().next(); } // used only for testing public void setGeneratedFrom(final Sample generatedFrom) { - parents = new ArrayList<Sample>(); + parents = new TreeSet<Sample>(); parents.add(generatedFrom); } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/GenericSampleEditForm.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/GenericSampleEditForm.java index 11cf3cf3143..eb98d7c3c56 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/GenericSampleEditForm.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/GenericSampleEditForm.java @@ -17,6 +17,7 @@ package ch.systemsx.cisd.openbis.plugin.generic.client.web.client.application.sample; import java.util.List; +import java.util.Set; import ch.systemsx.cisd.common.shared.basic.utils.StringUtils; import ch.systemsx.cisd.openbis.generic.client.web.client.application.AbstractAsyncCallback; @@ -156,7 +157,7 @@ public final class GenericSampleEditForm extends AbstractGenericSampleRegisterEd private void initializeGeneratedFromParent() { - List<Sample> parents = originalSample.getParents(); + Set<Sample> parents = originalSample.getParents(); if (parents.size() == 1) { Sample parentSample = originalSample.getGeneratedFrom(); @@ -170,7 +171,7 @@ public final class GenericSampleEditForm extends AbstractGenericSampleRegisterEd private void initializeParents() { // TODO 2010-08-06, Piotr Buczek: load in background? like in experiment - List<Sample> parents = originalSample.getParents(); + Set<Sample> parents = originalSample.getParents(); parentsArea.setSamples(parents); } 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 c2a99e4602d..d095dc73724 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 @@ -202,17 +202,17 @@ abstract public class GenericSampleViewer extends AbstractViewer<Sample> impleme containerSamplesSection = new ContainerSamplesSection(viewContext, generator); containerSamplesSection.setDisplayID(DisplayTypeIDGenerator.CONTAINER_SAMPLES_SECTION, displayIdSuffix); - container.addPanel(containerSamplesSection); + container.addPanel(containerSamplesSection, false); // Derived samples derivedSamplesSection = new DerivedSamplesSection(viewContext, generator); derivedSamplesSection.setDisplayID(DisplayTypeIDGenerator.DERIVED_SAMPLES_SECTION, displayIdSuffix); - container.addPanel(derivedSamplesSection); + container.addPanel(derivedSamplesSection, false); // Parent samples parentSamplesSection = new ParentSamplesSection(viewContext, generator); parentSamplesSection.setDisplayID(DisplayTypeIDGenerator.PARENT_SAMPLES_SECTION, displayIdSuffix); - container.addPanel(parentSamplesSection); + container.addPanel(parentSamplesSection, false); // Data Sets CheckBox showOnlyDirectlyConnectedCheckBox = createShowOnlyDirectlyConnectedCheckBox(); dataSetBrowser = @@ -290,11 +290,11 @@ abstract public class GenericSampleViewer extends AbstractViewer<Sample> impleme { properties.put(messageProvider.getMessage(Dict.DERIVED_SAMPLE) + "s", generated.length); } - final List<Sample> parents = sample.getParents(); + final Set<Sample> parents = sample.getParents(); final int parentsSize = parents.size(); if (parentsSize == 1) { - properties.put(messageProvider.getMessage(Dict.PARENT), parents.get(0)); + properties.put(messageProvider.getMessage(Dict.PARENT), parents.iterator().next()); } else if (parentsSize > 1) { properties.put(messageProvider.getMessage(Dict.PARENTS), parentsSize); diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/SamplesArea.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/SamplesArea.java index 2354cbaa0bb..8772464e680 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/SamplesArea.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/SamplesArea.java @@ -16,6 +16,7 @@ package ch.systemsx.cisd.openbis.plugin.generic.client.web.client.application.sample; +import java.util.Collection; import java.util.List; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.CodesArea; @@ -42,7 +43,7 @@ abstract public class SamplesArea extends CodesArea<Sample> return tryGetModifiedItemList(); } - public final void setSamples(List<Sample> samples) + public final void setSamples(Collection<Sample> samples) { setCodeProviders(samples); } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/server/GenericServer.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/server/GenericServer.java index 105979dc8b6..24d4167ac95 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/server/GenericServer.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/server/GenericServer.java @@ -19,6 +19,7 @@ package ch.systemsx.cisd.openbis.plugin.generic.server; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; +import java.util.Collections; import java.util.Date; import java.util.HashMap; import java.util.HashSet; @@ -681,7 +682,9 @@ public final class GenericServer extends AbstractServer<IGenericServer> implemen SampleUpdateResult result = new SampleUpdateResult(); SamplePE sample = sampleBO.getSample(); result.setModificationDate(sample.getModificationDate()); - result.setParents(Code.extractCodes(sample.getParents())); + List<String> parents = Code.extractCodes(sample.getParents()); + Collections.sort(parents); + result.setParents(parents); return result; } -- GitLab