From 2c8aa0cb4c8a1694bfd50277954c9855a82bdef4 Mon Sep 17 00:00:00 2001 From: pkupczyk <pkupczyk> Date: Tue, 21 Feb 2012 12:42:17 +0000 Subject: [PATCH] LMS-2801 - Bring Back Data Sets Parents Column SVN: 24515 --- .../client/dto/ExternalDataGridColumnIDs.java | 2 + .../AbstractExternalDataProvider.java | 4 ++ .../web/server/resultset/SampleProvider.java | 45 +------------------ .../bo/datasetlister/DatasetLister.java | 40 +++++++++++++++++ .../openbis/generic/shared/util/IColumn.java | 6 +++ .../shared/util/TypedTableModelBuilder.java | 40 +++++++++++++++++ .../cisd/openbis/public/common-dictionary.js | 3 +- 7 files changed, 96 insertions(+), 44 deletions(-) diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/ExternalDataGridColumnIDs.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/ExternalDataGridColumnIDs.java index 0f11feebc06..b4e7296b29f 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/ExternalDataGridColumnIDs.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/ExternalDataGridColumnIDs.java @@ -27,6 +27,8 @@ public class ExternalDataGridColumnIDs public static final String CONTAINER_DATASET = "CONTAINER_DATASET"; + public static final String PARENT_DATASETS = "PARENT_DATASETS"; + public static final String ORDER_IN_CONTAINER = "ORDER_IN_CONTAINER"; public static final String SAMPLE = "SAMPLE"; diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/AbstractExternalDataProvider.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/AbstractExternalDataProvider.java index 233b9ebaebd..098ad4ae57f 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/AbstractExternalDataProvider.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/AbstractExternalDataProvider.java @@ -31,6 +31,7 @@ import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExternalDat import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExternalDataGridColumnIDs.IS_DELETED; import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExternalDataGridColumnIDs.LOCATION; import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExternalDataGridColumnIDs.ORDER_IN_CONTAINER; +import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExternalDataGridColumnIDs.PARENT_DATASETS; import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExternalDataGridColumnIDs.PERM_ID; import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExternalDataGridColumnIDs.PRESENT_IN_ARCHIVE; import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExternalDataGridColumnIDs.PRODUCTION_DATE; @@ -81,6 +82,7 @@ public abstract class AbstractExternalDataProvider extends builder.addColumn(DATA_SET_TYPE).withDefaultWidth(200); builder.addColumn(CONTAINER_DATASET).withDefaultWidth(150).hideByDefault(); builder.addColumn(ORDER_IN_CONTAINER).withDefaultWidth(100).hideByDefault(); + builder.addColumn(PARENT_DATASETS).withDefaultWidth(150).hideByDefault(); builder.addColumn(SAMPLE).withDefaultWidth(100).hideByDefault(); builder.addColumn(EXTERNAL_DATA_SAMPLE_IDENTIFIER).withDefaultWidth(200); builder.addColumn(SAMPLE_TYPE); @@ -115,6 +117,8 @@ public abstract class AbstractExternalDataProvider extends Integer orderInContainer = dataSet.getOrderInContainer(); builder.column(ORDER_IN_CONTAINER).addString( orderInContainer == null ? "" : orderInContainer.toString()); + builder.column(PARENT_DATASETS).addEntityLink(dataSet.getParents()); + Sample sample = dataSet.getSample(); if (sample != null) { diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/SampleProvider.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/SampleProvider.java index d94d1011679..b4894b60798 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/SampleProvider.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/SampleProvider.java @@ -36,7 +36,6 @@ import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.SampleGridC import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.SampleGridColumnIDs.SUBCODE; import java.util.List; -import java.util.Set; import ch.systemsx.cisd.common.collections.IKeyExtractor; import ch.systemsx.cisd.common.collections.TableMap; @@ -45,8 +44,6 @@ import ch.systemsx.cisd.openbis.generic.shared.ICommonServer; import ch.systemsx.cisd.openbis.generic.shared.basic.DeletionUtils; import ch.systemsx.cisd.openbis.generic.shared.basic.SimpleYesNoRenderer; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseInstance; -import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind; -import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityTableCell; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Experiment; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SampleType; @@ -59,8 +56,6 @@ import ch.systemsx.cisd.openbis.generic.shared.util.TypedTableModelBuilder; */ public class SampleProvider extends AbstractCommonTableModelProvider<Sample> { - private static final int MAX_PARENTS = 4; - private final ListSampleDisplayCriteria2 criteria; public SampleProvider(ICommonServer commonServer, String sessionToken, @@ -120,20 +115,8 @@ public class SampleProvider extends AbstractCommonTableModelProvider<Sample> builder.column(PROJECT).addString(getProjectCode(sample)); builder.column(PERM_ID).addString(sample.getPermId()); builder.column(SHOW_DETAILS_LINK_COLUMN_NAME).addString(sample.getPermlink()); - final Sample parentOrNull = tryGetParent(sample); - if (parentOrNull != null) - { - final Sample parent = parentOrNull; - builder.column(PARENTS).addEntityLink(parent, parent.getIdentifier()); - } else - { - // WORKAROUND we have no way to create cells with multiple links. - // This is an ugly way not to display multiple parents as single link. - EntityTableCell fakeEntityTableCell = - new EntityTableCell(EntityKind.SAMPLE, getParentsString(sample)); - fakeEntityTableCell.setFake(true); - builder.column(PARENTS).addValue(fakeEntityTableCell); - } + builder.column(PARENTS).addEntityLink(sample.getParents()); + final Sample containerOrNull = sample.getContainer(); if (containerOrNull != null) { @@ -167,30 +150,6 @@ public class SampleProvider extends AbstractCommonTableModelProvider<Sample> return sampleTypMap; } - private String getParentsString(Sample sample) - { - Set<Sample> parents = sample.getParents(); - int parentsSize = parents.size(); - StringBuilder builder = new StringBuilder(); - int counter = 0; - for (Sample parent : parents) - { - if (counter == MAX_PARENTS) - { - builder.append("... (").append(parentsSize - MAX_PARENTS).append(" more)"); - break; - } - builder.append(parent.getIdentifier()).append("\n"); - counter++; - } - return builder.toString(); - } - - private Sample tryGetParent(Sample sample) - { - return (sample.getParents().size() == 1) ? sample.getGeneratedFrom() : null; - } - private String getProjectCode(Sample sample) { Experiment experiment = sample.getExperiment(); diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/DatasetLister.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/DatasetLister.java index 6ffb52d3ed5..0fecdbfaef6 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/DatasetLister.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/DatasetLister.java @@ -450,6 +450,7 @@ public class DatasetLister extends AbstractLister implements IDatasetLister enrichWithSamples(datasetMap); enrichWithContainers(datasetMap); enrichWithContainedDataSets(datasetMap); + enrichWithParents(datasetMap); return asList(datasetMap); } @@ -541,6 +542,45 @@ public class DatasetLister extends AbstractLister implements IDatasetLister }); } + private void enrichWithParents(Long2ObjectMap<ExternalData> datasetMap) + { + Map<Long, Set<Long>> parentIdsMap = listParentIds(datasetMap.keySet()); + Set<Long> allParentIds = new HashSet<Long>(); + + for (Set<Long> parentIds : parentIdsMap.values()) + { + allParentIds.addAll(parentIds); + } + + DataIterator<DatasetRecord> parentIterator = + query.getDatasets(new LongOpenHashSet(allParentIds)); + + if (parentIterator != null) + { + Long2ObjectMap<ExternalData> parentMap = createPrimaryDatasets(parentIterator); + + for (Entry<Long, Set<Long>> parentIdsEntry : parentIdsMap.entrySet()) + { + Long datasetId = parentIdsEntry.getKey(); + Set<Long> parentIds = parentIdsEntry.getValue(); + + ExternalData dataset = datasetMap.get(datasetId); + Collection<ExternalData> parents = new ArrayList<ExternalData>(); + + for (Long parentId : parentIds) + { + ExternalData parent = parentMap.get(parentId); + if (parent != null) + { + parents.add(parent); + } + } + + dataset.setParents(parents); + } + } + } + private void enrichWithContainers(Long2ObjectMap<ExternalData> datasetMap) { diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/util/IColumn.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/util/IColumn.java index 25ee04ab529..64ac5119c5d 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/util/IColumn.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/util/IColumn.java @@ -16,6 +16,7 @@ package ch.systemsx.cisd.openbis.generic.shared.util; +import java.util.Collection; import java.util.Date; import ch.systemsx.cisd.openbis.generic.shared.basic.IEntityInformationHolderWithIdentifier; @@ -98,6 +99,11 @@ public interface IColumn */ public void addEntityLink(IEntityInformationHolderWithIdentifier entity, String linkText); + /** + * Adds a link to entities to the column. + */ + public void addEntityLink(Collection<? extends IEntityInformationHolderWithIdentifier> entities); + /** * Adds a person to the column as a string. */ diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/util/TypedTableModelBuilder.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/util/TypedTableModelBuilder.java index db5327628cd..06ba2ffa81a 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/util/TypedTableModelBuilder.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/util/TypedTableModelBuilder.java @@ -362,6 +362,46 @@ public class TypedTableModelBuilder<T extends Serializable> addValue(cell); } + public void addEntityLink( + Collection<? extends IEntityInformationHolderWithIdentifier> entities) + { + if (entities != null && !entities.isEmpty()) + { + IEntityInformationHolderWithIdentifier firstEntity = entities.iterator().next(); + + if (entities.size() == 1) + { + addEntityLink(firstEntity, firstEntity.getIdentifier()); + } else + { + // WORKAROUND we have no way to create cells with multiple links. + // This is an ugly way not to display multiple entities as single link. + + final int MAX_ENTITIES = 4; + + StringBuilder builder = new StringBuilder(); + int counter = 0; + + for (IEntityInformationHolderWithIdentifier entity : entities) + { + if (counter == MAX_ENTITIES) + { + builder.append("... (").append(entities.size() - MAX_ENTITIES) + .append(" more)"); + break; + } + builder.append(entity.getIdentifier()).append("\n"); + counter++; + } + + EntityTableCell fakeEntityTableCell = + new EntityTableCell(firstEntity.getEntityKind(), builder.toString()); + fakeEntityTableCell.setFake(true); + addValue(fakeEntityTableCell); + } + } + } + private void setDataType(DataTypeCode dataType) { header.setDataType(DataTypeUtils.getCompatibleDataType(header.getDataType(), dataType)); diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/public/common-dictionary.js b/openbis/source/java/ch/systemsx/cisd/openbis/public/common-dictionary.js index 6a83a7adce6..989253b7c29 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/public/common-dictionary.js +++ b/openbis/source/java/ch/systemsx/cisd/openbis/public/common-dictionary.js @@ -272,7 +272,8 @@ var common = { // DataSet Browser // - container_dataset: "Container", + container_dataset: "Container", + parent_datasets: "Parents", order_in_container: "Order in Container", children_datasets: "Children", no_datasets_selected: "No Data Sets were selected.", -- GitLab