diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/HierarchicalContentProvider.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/HierarchicalContentProvider.java index 7575078a46e48909ba5ff8f67b6517844f928ce2..87d89a6f584a6a0d31efe8a13de1791776b85f0a 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/HierarchicalContentProvider.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/HierarchicalContentProvider.java @@ -175,6 +175,7 @@ public class HierarchicalContentProvider implements IHierarchicalContentProvider if (locationNode.isContainer()) { List<IHierarchicalContent> componentContents = new ArrayList<IHierarchicalContent>(); + final String containerDataSetCode = locationNode.getLocation().getDataSetCode(); List<IDatasetLocationNode> sortedNodes = new ArrayList<IDatasetLocationNode>(locationNode.getComponents()); Collections.sort(sortedNodes, new Comparator<IDatasetLocationNode>() { @@ -186,7 +187,7 @@ public class HierarchicalContentProvider implements IHierarchicalContentProvider private int getOrderInContainer(IDatasetLocationNode node) { - Integer orderInContainer = node.getLocation().getOrderInContainer(); + Integer orderInContainer = node.getLocation().getOrderInContainer(containerDataSetCode); return orderInContainer == null ? 0 : orderInContainer; } }); diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/shared/HierarchicalContentProviderTest.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/shared/HierarchicalContentProviderTest.java index e0e6f1b8cfbca70c796baa2e5dd494abe7193bb5..0fe6311a64409f98d8063ee355b2f85ae0c99591 100644 --- a/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/shared/HierarchicalContentProviderTest.java +++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/shared/HierarchicalContentProviderTest.java @@ -296,7 +296,7 @@ public class HierarchicalContentProviderTest extends AssertJUnit } @Override - public Integer getOrderInContainer() + public Integer getOrderInContainer(String containerDataSetCode) { return null; } 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 b8e211e066821c096eb16a0efef7509cc90f199b..03148fcf0cba815179036b5725dddf74a5bc1f44 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 @@ -31,11 +31,11 @@ public class ExternalDataGridColumnIDs public static final String DATA_SET_TYPE = "DATA_SET_TYPE"; - public static final String CONTAINER_DATASET = "CONTAINER_DATASET"; + public static final String CONTAINER_DATASETS = "CONTAINER_DATASETS"; public static final String PARENT_DATASETS = "PARENT_DATASETS"; - public static final String ORDER_IN_CONTAINER = "ORDER_IN_CONTAINER"; + public static final String ORDER_IN_CONTAINERS = "ORDER_IN_CONTAINERS"; 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 2a9f2980ad9ad231d680d25de490f3ccdb19c6ed..4e64f5cfff2eec2a20bb6e57579848ad74793461 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 @@ -20,7 +20,7 @@ import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.CommonGridC import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.CommonGridColumnIDs.MODIFIER; import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExternalDataGridColumnIDs.ARCHIVING_STATUS; import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExternalDataGridColumnIDs.CODE; -import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExternalDataGridColumnIDs.CONTAINER_DATASET; +import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExternalDataGridColumnIDs.CONTAINER_DATASETS; import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExternalDataGridColumnIDs.DATA_PRODUCER_CODE; import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExternalDataGridColumnIDs.DATA_SET_TYPE; import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExternalDataGridColumnIDs.DATA_STORE_CODE; @@ -36,7 +36,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.METAPROJECTS; -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.ORDER_IN_CONTAINERS; 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; @@ -53,19 +53,20 @@ import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExternalDat import java.util.List; +import ch.systemsx.cisd.common.shared.basic.string.CommaSeparatedListBuilder; 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.AbstractExternalData; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ContainerDataSet; -import ch.systemsx.cisd.openbis.generic.shared.basic.dto.PhysicalDataSet; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Experiment; -import ch.systemsx.cisd.openbis.generic.shared.basic.dto.AbstractExternalData; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExternalDataManagementSystem; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.FileFormatType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.LinkDataSet; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.LinkDataSetUrl; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.LinkTableCell; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.PhysicalDataSet; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SampleType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TypedTableModel; @@ -91,8 +92,8 @@ public abstract class AbstractExternalDataProvider extends builder.addColumn(CODE).withDefaultWidth(150); builder.addColumn(EXTERNAL_CODE).withDefaultWidth(150).hideByDefault(); builder.addColumn(DATA_SET_TYPE).withDefaultWidth(200); - builder.addColumn(CONTAINER_DATASET).withDefaultWidth(150).hideByDefault(); - builder.addColumn(ORDER_IN_CONTAINER).withDefaultWidth(100).hideByDefault(); + builder.addColumn(CONTAINER_DATASETS).withDefaultWidth(150).hideByDefault(); + builder.addColumn(ORDER_IN_CONTAINERS).withDefaultWidth(100).hideByDefault(); builder.addColumn(PARENT_DATASETS).withDefaultWidth(150).hideByDefault(); builder.addColumn(SAMPLE).withDefaultWidth(100).hideByDefault(); builder.addColumn(EXTERNAL_DATA_SAMPLE_IDENTIFIER).withDefaultWidth(200); @@ -153,14 +154,14 @@ public abstract class AbstractExternalDataProvider extends metaProjectsToString(dataSet.getMetaprojects())); builder.column(DATA_SET_TYPE).addString(dataSet.getDataSetType().getCode()); - ContainerDataSet container = dataSet.tryGetContainer(); - if (container != null) + List<ContainerDataSet> containerDataSets = dataSet.getContainerDataSets(); + builder.column(CONTAINER_DATASETS).addEntityLink(containerDataSets); + CommaSeparatedListBuilder listBuilder = new CommaSeparatedListBuilder(); + for (ContainerDataSet containerDataSet : containerDataSets) { - builder.column(CONTAINER_DATASET).addEntityLink(container, container.getCode()); + listBuilder.append(dataSet.getOrderInContainer(containerDataSet.getCode())); } - Integer orderInContainer = dataSet.getOrderInContainer(); - builder.column(ORDER_IN_CONTAINER).addString( - orderInContainer == null ? "" : orderInContainer.toString()); + builder.column(ORDER_IN_CONTAINERS).addString(listBuilder.toString()); builder.column(PARENT_DATASETS).addEntityLink(dataSet.getParents()); Sample sample = dataSet.getSample(); diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServer.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServer.java index ce8151e663e044da4978bed085554f8e23876271..58a2d77e328ce3671659752657e04295d08f76dc 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServer.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServer.java @@ -870,7 +870,11 @@ public final class CommonServer extends AbstractCommonServer<ICommonServerForInt { case CONTAINER: datasets = datasetLister.listByContainerTechId(datasetId); - Collections.sort(datasets, AbstractExternalData.DATA_SET_COMPONENTS_COMPARATOR); + Collections.sort(datasets, new AbstractExternalData.DataSetComponentsComparator(datasetId)); + break; + case COMPONENT: + datasets = datasetLister.listByComponentTechId(datasetId); + Collections.sort(datasets); break; case CHILD: datasets = datasetLister.listByChildTechId(datasetId); 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 894b8ec2d38d101e72daa04365295f0c2cc861cf..000ade4d9f1f1dd36d2cf673d7c2622f7ab9b703 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 @@ -407,6 +407,13 @@ public class DatasetLister extends AbstractLister implements IDatasetLister getParentChildRelationshipTypeId())); } + @Override + public List<AbstractExternalData> listByComponentTechId(TechId componentDatasetId) + { + return enrichDatasets(query.getParentsOf(new LongOpenHashSet(Arrays.asList(componentDatasetId.getId())), + getContainerComponentRelationshipTypeId())); + } + @Override public List<AbstractExternalData> listByContainerTechId(TechId containerDatasetId) { diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/DatasetLocationNodeRecord.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/DatasetLocationNodeRecord.java index 8c8954496708ef01955fef60d12178add4e2237c..b7b252266b4be547057d86affa23aa996a0007cc 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/DatasetLocationNodeRecord.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/DatasetLocationNodeRecord.java @@ -28,6 +28,8 @@ public class DatasetLocationNodeRecord public Long container_id; + public String container_code; + public Integer ordinal; public String location; diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/IDatasetLister.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/IDatasetLister.java index 71c7481456a5da46103b420dff0da9ad3285a1d7..69979a9e06a8340dfdb12a1b6e135c7003d0853e 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/IDatasetLister.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/IDatasetLister.java @@ -57,6 +57,9 @@ public interface IDatasetLister /** @return datasets that are parents of a dataset with the specified id */ List<AbstractExternalData> listByChildTechId(TechId childDatasetId); + /** @return datasets that are containers of a dataset with the specified id */ + List<AbstractExternalData> listByComponentTechId(TechId componentDatasetId); + /** @return datasets that are components of a dataset with the specified id */ List<AbstractExternalData> listByContainerTechId(TechId containerDatasetId); diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/AbstractExternalData.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/AbstractExternalData.java index 706fc4fc55bc9138a465dc8edcfd5679210950f7..63286c01c613651d8a4728fbf05e8bc6ba6c6057 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/AbstractExternalData.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/AbstractExternalData.java @@ -31,6 +31,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.IIdAndCodeHolder; import ch.systemsx.cisd.openbis.generic.shared.basic.IIsStub; import ch.systemsx.cisd.openbis.generic.shared.basic.IPermIdHolder; import ch.systemsx.cisd.openbis.generic.shared.basic.ITaggable; +import ch.systemsx.cisd.openbis.generic.shared.basic.TechId; /** * A DTO for any kind of data set. @@ -75,14 +76,10 @@ public abstract class AbstractExternalData extends } - /** - * {@link Comparator} for data sets contained in a (virtual) container which uses ascending order in container. - */ - public static final Comparator<AbstractExternalData> DATA_SET_COMPONENTS_COMPARATOR = - new DataSetComponentsComparator(); - private Map<String, ContainerAndOrder> containersAndOrderByContainerId = new TreeMap<String, ContainerAndOrder>(); + private Map<Long, ContainerAndOrder> containersAndOrderByContainerTechId = new TreeMap<Long, ContainerAndOrder>(); + private boolean derived; private Long id; @@ -401,13 +398,6 @@ public abstract class AbstractExternalData extends return containersAndOrderByContainerId.values().iterator().next().getContainerDataSet(); } - @Deprecated - public Integer getOrderInContainer() - { - ContainerDataSet container = tryGetContainer(); - return container == null ? null : getOrderIn(container.getCode()); - } - public void addContainer(ContainerDataSet containerDataSet, Integer orderInContainer) { List<AbstractExternalData> components = containerDataSet.getContainedDataSets(); @@ -415,7 +405,9 @@ public abstract class AbstractExternalData extends { components.add(this); } - containersAndOrderByContainerId.put(containerDataSet.getCode(), new ContainerAndOrder(containerDataSet, orderInContainer)); + ContainerAndOrder containerAndOrder = new ContainerAndOrder(containerDataSet, orderInContainer); + containersAndOrderByContainerId.put(containerDataSet.getCode(), containerAndOrder); + containersAndOrderByContainerTechId.put(containerDataSet.getId(), containerAndOrder); } public List<ContainerDataSet> getContainerDataSets() @@ -429,7 +421,13 @@ public abstract class AbstractExternalData extends return containers; } - public Integer getOrderIn(String containerDataSetCode) + public Integer getOrderInContainer(Long containerDataSetTechId) + { + ContainerAndOrder containerAndOrder = containersAndOrderByContainerTechId.get(containerDataSetTechId); + return containerAndOrder == null ? null : containerAndOrder.getOrderInContainer(); + } + + public Integer getOrderInContainer(String containerDataSetCode) { ContainerAndOrder containerAndOrder = containersAndOrderByContainerId.get(containerDataSetCode); return containerAndOrder == null ? null : containerAndOrder.getOrderInContainer(); @@ -474,14 +472,23 @@ public abstract class AbstractExternalData extends return this.isStub; } - private static final class DataSetComponentsComparator implements - Comparator<AbstractExternalData> + /** + * {@link Comparator} for data sets contained in a (virtual) container which uses ascending order in container. + */ + public static final class DataSetComponentsComparator implements Comparator<AbstractExternalData> { + private Long id; + + public DataSetComponentsComparator(TechId techId) + { + id = techId.getId(); + } + @Override public int compare(AbstractExternalData o1, AbstractExternalData o2) { - Integer order1 = o1.getOrderInContainer(); - Integer order2 = o2.getOrderInContainer(); + Integer order1 = o1.getOrderInContainer(id); + Integer order2 = o2.getOrderInContainer(id); // sanity check if (order1 == null || order2 == null) { diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/DataSetRelationshipRole.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/DataSetRelationshipRole.java index 8e53888ff0e22ba6f8016388b57abac68ec4efbf..ad5394cd19795c63f8242f9817aac3b089edc716 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/DataSetRelationshipRole.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/DataSetRelationshipRole.java @@ -23,5 +23,5 @@ import java.io.Serializable; */ public enum DataSetRelationshipRole implements Serializable { - CONTAINER, PARENT, CHILD; + CONTAINER, COMPONENT, PARENT, CHILD; } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/DatasetLocation.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/DatasetLocation.java index 0ef65e2535b5bd1a13c08d0f8738a7b1806f5c12..699457012d5f099340a5de22d06e43c7df554b81 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/DatasetLocation.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/DatasetLocation.java @@ -60,7 +60,7 @@ public class DatasetLocation implements IDatasetLocation, Serializable, ICodeHol } @Override - public Integer getOrderInContainer() + public Integer getOrderInContainer(String containerDataSetCode) { return orderInContainer; } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/ExternalDataLocationNode.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/ExternalDataLocationNode.java index b9d07e5b87b5d06774de80fe7904f317e9075773..ef5b273f4f3bf0820c8f3f6d3cbfa5328932c662 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/ExternalDataLocationNode.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/ExternalDataLocationNode.java @@ -86,7 +86,7 @@ public class ExternalDataLocationNode implements IDatasetLocationNode for (AbstractExternalData component : components) { componentsLocationNodes.put(component.getCode(), - new ExternalDataLocationNode(component, component.getOrderIn(containerCode))); + new ExternalDataLocationNode(component, component.getOrderInContainer(containerCode))); } return componentsLocationNodes.values(); diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/IDatasetLocation.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/IDatasetLocation.java index e67cd84e84c7514af3150ad9a937416c1fe3c9c3..32ba2368124957e9353b21626f00a3a5d5b9d50b 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/IDatasetLocation.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/IDatasetLocation.java @@ -31,5 +31,5 @@ public interface IDatasetLocation String getDataStoreCode(); - Integer getOrderInContainer(); + Integer getOrderInContainer(String containerDataSetCode); } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/DataPE.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/DataPE.java index 0dde3d12cb10f26da46663a1e3d2b9ab6f757517..224e4d919eed6a5f2f476cbde277859ed12ee3e2 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/DataPE.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/DataPE.java @@ -70,7 +70,6 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.IIdentifierHolder; import ch.systemsx.cisd.openbis.generic.shared.dto.hibernate.SearchFieldConstants; import ch.systemsx.cisd.openbis.generic.shared.dto.properties.EntityKind; import ch.systemsx.cisd.openbis.generic.shared.util.HibernateUtils; -import ch.systemsx.cisd.openbis.generic.shared.util.RelationshipUtils; /** * Kind of <i>Java Bean</i> or <i>Value Object</i> which contains any information we would like to know about one DATA. @@ -230,21 +229,24 @@ public class DataPE extends AbstractIdAndCodeHolder<DataPE> implements @Field(index = Index.UN_TOKENIZED, store = Store.YES, name = SearchFieldConstants.CONTAINER_ID) private Long getContainerId() { - DataPE container = getContainer(); - return container != null ? container.getId() : null; + List<DataPE> containers = getContainers(); + return containers.isEmpty() ? null : containers.get(0).getId(); } @Transient - public DataPE getContainer() + public List<DataPE> getContainers() { - for (DataSetRelationshipPE relationship : getParentRelationships()) + final Set<DataSetRelationshipPE> relationships = getParentRelationships(); + final List<DataPE> containers = new ArrayList<DataPE>(); + for (DataSetRelationshipPE r : relationships) { - if (RelationshipUtils.isContainerComponentRelationship(relationship)) + if (isContainerComponentRelationship(r)) { - return relationship.getParentDataSet(); + assert r.getChildDataSet().equals(this); + containers.add(r.getParentDataSet()); } } - return null; + return containers; } public void addParentRelationship(final DataSetRelationshipPE relationship) diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/DatasetDescription.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/DatasetDescription.java index afa7d781c94cf31acbced6fe8fd13164c141faca..3078b507a318312113990182c868713d32706367 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/DatasetDescription.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/DatasetDescription.java @@ -19,7 +19,9 @@ package ch.systemsx.cisd.openbis.generic.shared.dto; import java.io.Serializable; import java.util.ArrayList; import java.util.Date; +import java.util.HashMap; import java.util.List; +import java.util.Map; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IDatasetLocation; @@ -40,7 +42,7 @@ public class DatasetDescription implements Serializable, IDatasetLocation private String dataSetLocation; - private Integer orderInContainer; + private final Map<String, Integer> orderInContainers = new HashMap<String, Integer>(); private Date registrationTimestamp; @@ -312,14 +314,19 @@ public class DatasetDescription implements Serializable, IDatasetLocation } @Override - public Integer getOrderInContainer() + public Integer getOrderInContainer(String containerDataSetCode) { - return orderInContainer; + return orderInContainers.get(containerDataSetCode); } - public void setOrderInContainer(Integer orderInContainer) + public void addOrderInContainer(String containerDataSetCode, Integer orderInContainer) { - this.orderInContainer = orderInContainer; + orderInContainers.put(containerDataSetCode, orderInContainer); + } + + public Map<String, Integer> getOrderInContainers() + { + return orderInContainers; } } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/SimpleDataSetInformationDTO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/SimpleDataSetInformationDTO.java index e20f363b05c129858a55aba1964807d238182eb3..f100956f7aae734f4bae7310410f577aeb95743d 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/SimpleDataSetInformationDTO.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/SimpleDataSetInformationDTO.java @@ -18,6 +18,8 @@ package ch.systemsx.cisd.openbis.generic.shared.dto; import java.io.Serializable; import java.util.Date; +import java.util.HashMap; +import java.util.Map; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IDatasetLocation; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ServiceVersionHolder; @@ -59,7 +61,7 @@ public class SimpleDataSetInformationDTO implements Serializable, IDatasetLocati private String dataStoreUrl; - private Integer orderInContainer; + private Map<String, Integer> orderInContainers = new HashMap<String, Integer>(); public void setDataStoreCode(String dataStoreCode) { @@ -207,14 +209,19 @@ public class SimpleDataSetInformationDTO implements Serializable, IDatasetLocati } @Override - public Integer getOrderInContainer() + public Integer getOrderInContainer(String containerDataSetCode) { - return orderInContainer; + return orderInContainers.get(containerDataSetCode); } - public void setOrderInContainer(Integer orderInContainer) + public void addOrderInContainer(String containerDataSetCode, Integer orderInContainer) { - this.orderInContainer = orderInContainer; + orderInContainers.put(containerDataSetCode, orderInContainer); + } + + public void setOrderInContainers(Map<String, Integer> orderInContainers) + { + this.orderInContainers = orderInContainers; } } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/DataSetTranslator.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/DataSetTranslator.java index dcae0c60c23eb6d31d8fb5a43989e5a351b7ea48..f052420576521ddb10edcc4f5485f6b1c2c69e7d 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/DataSetTranslator.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/DataSetTranslator.java @@ -76,7 +76,12 @@ public class DataSetTranslator description.setDataStoreCode(data.getDataStore().getCode()); description.setRegistrationTimestamp(data.getRegistrationDate()); - description.setOrderInContainer(data.getOrderInContainer()); + List<ContainerDataSet> containerDataSets = data.getContainerDataSets(); + for (ContainerDataSet containerDataSet : containerDataSets) + { + String containerDataSetCode = containerDataSet.getCode(); + description.addOrderInContainer(containerDataSetCode, data.getOrderInContainer(containerDataSetCode)); + } PhysicalDataSet dataSet = data.tryGetAsDataSet(); if (dataSet != null) @@ -281,17 +286,6 @@ public class DataSetTranslator } } - private static DataSetRelationshipPE getContainerRelationshipOrNull(DataPE dataPE) - { - List<DataSetRelationshipPE> containerComponentRelationships = - RelationshipUtils.getContainerComponentRelationships(dataPE.getParentRelationships()); - if (containerComponentRelationships.isEmpty() == false) - { - return containerComponentRelationships.get(0); - } - return null; - } - private static ContainerDataSet tryToTranslateContainer(DataPE containerOrNull, String baseIndexURL, IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory) { @@ -447,12 +441,13 @@ public class DataSetTranslator DatasetDescription description = new DatasetDescription(); description.setDataSetCode(dataSet.getCode()); - DataSetRelationshipPE relationship = getContainerRelationshipOrNull(dataSet); - if (relationship != null) + List<DataSetRelationshipPE> containerComponentRelationships = + RelationshipUtils.getContainerComponentRelationships(dataSet.getParentRelationships()); + for (DataSetRelationshipPE relationship : containerComponentRelationships) { - description.setOrderInContainer(relationship.getOrdinal()); + String containerDataSetCode = relationship.getParentDataSet().getCode(); + description.addOrderInContainer(containerDataSetCode, relationship.getOrdinal()); } - description.setRegistrationTimestamp(dataSet.getRegistrationDate()); if (dataSet.isExternalData()) { diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/SimpleDataSetHelper.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/SimpleDataSetHelper.java index d3bb435fbfb423c8007542605cc24b1522bae269..984218728e32c0199bcc493e0dc244f0eff77933 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/SimpleDataSetHelper.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/SimpleDataSetHelper.java @@ -20,6 +20,7 @@ import java.util.ArrayList; import java.util.List; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.AbstractExternalData; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ContainerDataSet; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.PhysicalDataSet; import ch.systemsx.cisd.openbis.generic.shared.dto.DatasetDescription; import ch.systemsx.cisd.openbis.generic.shared.dto.SimpleDataSetInformationDTO; @@ -71,7 +72,12 @@ public class SimpleDataSetHelper result.setSampleCode(data.getSampleCode()); result.setDataSetType(data.getDataSetType().getCode()); result.setDataStoreUrl(data.getDataStore().getHostUrl()); - result.setOrderInContainer(data.getOrderInContainer()); + List<ContainerDataSet> containerDataSets = data.getContainerDataSets(); + for (ContainerDataSet containerDataSet : containerDataSets) + { + String containerDataSetCode = containerDataSet.getCode(); + result.addOrderInContainer(containerDataSetCode, data.getOrderInContainer(containerDataSetCode)); + } return result; } @@ -89,7 +95,7 @@ public class SimpleDataSetHelper result.setSpaceCode(datasetDescription.getSpaceCode()); result.setProjectCode(datasetDescription.getProjectCode()); result.setSampleCode(datasetDescription.getSampleCode()); - result.setOrderInContainer(datasetDescription.getOrderInContainer()); + result.setOrderInContainers(datasetDescription.getOrderInContainers()); return result; } } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/DataSetContainerSection.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/DataSetContainerSection.java new file mode 100644 index 0000000000000000000000000000000000000000..c83bdefef1e21529e31e927db7d9ace81f3ab14f --- /dev/null +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/DataSetContainerSection.java @@ -0,0 +1,46 @@ +/* + * Copyright 2014 ETH Zuerich, SIS + * + * 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.plugin.generic.client.web.client.application.dataset; + +import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DisplayTypeIDGenerator; +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.AbstractExternalData; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetRelationshipRole; + +/** + * @author Franz-Josef Elmer + */ +class DataSetContainerSection extends AbstractDataSetsSection +{ + private final AbstractExternalData dataset; + + DataSetContainerSection(IViewContext<?> viewContext, AbstractExternalData dataset) + { + super("Container (Data Sets)", viewContext, dataset); + this.dataset = dataset; + setIds(DisplayTypeIDGenerator.DATA_SET_CONTAINED_SECTION); + } + + @Override + protected IDisposableComponent createDatasetBrowserComponent() + { + return DataSetRelationshipBrowser.create(viewContext, TechId.create(dataset), + DataSetRelationshipRole.COMPONENT, dataset.getDataSetType()); + } +} diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/DataSetPropertiesPanel.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/DataSetPropertiesPanel.java index 53b43d85207fcac4f26bbc85dbe5a6fc320738de..42198fee0e3e09bece79786f012b2dc29f2bdca1 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/DataSetPropertiesPanel.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/DataSetPropertiesPanel.java @@ -112,7 +112,7 @@ public class DataSetPropertiesPanel extends ContentPanel properties.put(messageProvider.getMessage(Dict.REGISTRATION_DATE), dataset.getRegistrationDate()); List<ContainerDataSet> containerDataSets = dataset.getContainerDataSets(); - if (containerDataSets.isEmpty() == false) + if (containerDataSets.size() == 1) { properties.put(messageProvider.getMessage(Dict.CONTAINER_DATA_SET), containerDataSets.get(0)); } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/GenericDataSetViewer.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/GenericDataSetViewer.java index 3f2287711843381daaf888ff573e52b9c5e1dfab..a3e9d5de4be7594e87ee5cb82b75c28c1a7c42e4 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/GenericDataSetViewer.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/GenericDataSetViewer.java @@ -57,14 +57,14 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IMess import ch.systemsx.cisd.openbis.generic.client.web.client.dto.DisplayedOrSelectedDatasetCriteria; import ch.systemsx.cisd.openbis.generic.shared.basic.IIdAndCodeHolder; import ch.systemsx.cisd.openbis.generic.shared.basic.TechId; -import ch.systemsx.cisd.openbis.generic.shared.basic.dto.PhysicalDataSet; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.AbstractExternalData; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataStoreServiceKind; 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.generic.shared.basic.dto.DatastoreServiceDescription; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind; -import ch.systemsx.cisd.openbis.generic.shared.basic.dto.AbstractExternalData; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ISerializableComparable; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.PhysicalDataSet; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModelRowWithObject; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.WebAppContext; import ch.systemsx.cisd.openbis.plugin.generic.client.web.client.IGenericClientServiceAsync; @@ -117,8 +117,7 @@ abstract public class GenericDataSetViewer extends AbstractViewerWithVerticalSpl AsyncCallback<AbstractExternalData> asyncCallback); /** - * To be subclassed. Creates additional panels of the viewer in the right side section besides - * components, datasets and attachments + * To be subclassed. Creates additional panels of the viewer in the right side section besides components, datasets and attachments */ protected List<TabContent> createAdditionalSectionPanels(AbstractExternalData dataset) { @@ -275,6 +274,8 @@ abstract public class GenericDataSetViewer extends AbstractViewerWithVerticalSpl final TabContent containedSection = new DataSetContainedSection(context, dataset); container.addSection(containedSection); } + final TabContent containerSection = new DataSetContainerSection(context, dataset); + container.addSection(containerSection); // parents final TabContent parentsSection = new DataSetParentsSection(context, dataset); @@ -370,18 +371,18 @@ abstract public class GenericDataSetViewer extends AbstractViewerWithVerticalSpl public DatabaseModificationKind[] getRelevantModifications() { return new DatabaseModificationKind[] - { DatabaseModificationKind.edit(ObjectKind.DATA_SET), - DatabaseModificationKind.createOrDelete(ObjectKind.DATA_SET), - DatabaseModificationKind.createOrDelete(ObjectKind.PROPERTY_TYPE_ASSIGNMENT), - DatabaseModificationKind.edit(ObjectKind.PROPERTY_TYPE_ASSIGNMENT), - DatabaseModificationKind.createOrDelete(ObjectKind.VOCABULARY_TERM), - DatabaseModificationKind.edit(ObjectKind.VOCABULARY_TERM), - DatabaseModificationKind.createOrDelete(ObjectKind.EXPERIMENT), - DatabaseModificationKind.edit(ObjectKind.EXPERIMENT), - DatabaseModificationKind.createOrDelete(ObjectKind.SAMPLE), - DatabaseModificationKind.edit(ObjectKind.SAMPLE), - DatabaseModificationKind.createOrDelete(ObjectKind.METAPROJECT), - DatabaseModificationKind.edit(ObjectKind.METAPROJECT) }; + { DatabaseModificationKind.edit(ObjectKind.DATA_SET), + DatabaseModificationKind.createOrDelete(ObjectKind.DATA_SET), + DatabaseModificationKind.createOrDelete(ObjectKind.PROPERTY_TYPE_ASSIGNMENT), + DatabaseModificationKind.edit(ObjectKind.PROPERTY_TYPE_ASSIGNMENT), + DatabaseModificationKind.createOrDelete(ObjectKind.VOCABULARY_TERM), + DatabaseModificationKind.edit(ObjectKind.VOCABULARY_TERM), + DatabaseModificationKind.createOrDelete(ObjectKind.EXPERIMENT), + DatabaseModificationKind.edit(ObjectKind.EXPERIMENT), + DatabaseModificationKind.createOrDelete(ObjectKind.SAMPLE), + DatabaseModificationKind.edit(ObjectKind.SAMPLE), + DatabaseModificationKind.createOrDelete(ObjectKind.METAPROJECT), + DatabaseModificationKind.edit(ObjectKind.METAPROJECT) }; } @Override @@ -391,10 +392,9 @@ abstract public class GenericDataSetViewer extends AbstractViewerWithVerticalSpl } /** - * Holder of a {@link Button} that has a menu with items that schedule dataset plugin - * processing. The button is hidden at the beginning. When data set is successfully loaded by - * the viewer and there is a nonempty list of plugins assigned to its data type data then the - * menu is filled and button is shown. + * Holder of a {@link Button} that has a menu with items that schedule dataset plugin processing. The button is hidden at the beginning. When data + * set is successfully loaded by the viewer and there is a nonempty list of plugins assigned to its data type data then the menu is filled and + * button is shown. */ private class ProcessButtonHolder { 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 3c153d78214384b9eb0653f962fd891a51554af8..10bea9f946d4b74130a54bb444a7da7c55b48097 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 @@ -328,9 +328,9 @@ var common = { // DataSet Browser // - container_dataset: "Container", + container_datasets: "Containers", parent_datasets: "Parents", - order_in_container: "Order in Container", + order_in_containers: "Order in Containers", children_datasets: "Children", no_datasets_selected: "No Data Sets were selected.", datasets_from_different_stores_selected: "Data Sets from different Data Stores were selected, so no operation can be performed on all of them.", @@ -823,6 +823,7 @@ var common = { file_format_type: "File Type", production_date: "Production Date", data_producer_code: "Producer", + container_dataset: "Container", data_store_code: "Data Store", button_upload_datasets: "Export Data", confirm_dataset_upload_title: "Uploading Confirmation and Authentication", diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/DatasetListerFastTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/DatasetListerFastTest.java index f8b5b0f9e208a69108de1923a5cd64cd0ad49a6c..7314731640234aa0b577557b1c879bbb8bae17be 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/DatasetListerFastTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/DatasetListerFastTest.java @@ -127,10 +127,10 @@ public class DatasetListerFastTest extends AssertJUnit new ArrayList<IDatasetLocationNode>(location.getComponents()); Collections.sort(components, DATA_SET_LOCATION_NODE_COMPARATOR); assertEquals("ds-c1", components.get(0).getLocation().getDataSetCode()); - assertEquals(new Integer(0), components.get(0).getLocation().getOrderInContainer()); + assertEquals(new Integer(0), components.get(0).getLocation().getOrderInContainer("ds-1")); assertEquals("a/b/c/1", components.get(0).getLocation().getDataSetLocation()); assertEquals("ds-c2", components.get(1).getLocation().getDataSetCode()); - assertEquals(new Integer(1), components.get(1).getLocation().getOrderInContainer()); + assertEquals(new Integer(1), components.get(1).getLocation().getOrderInContainer("ds-1")); assertEquals("a/b/c/2", components.get(1).getLocation().getDataSetLocation()); } @@ -163,23 +163,23 @@ public class DatasetListerFastTest extends AssertJUnit new ArrayList<IDatasetLocationNode>(location.getComponents()); Collections.sort(components, DATA_SET_LOCATION_NODE_COMPARATOR); assertEquals("-2303", components.get(0).getLocation().getDataSetCode()); - assertEquals(new Integer(1), components.get(0).getLocation().getOrderInContainer()); + assertEquals(new Integer(1), components.get(0).getLocation().getOrderInContainer("-2306")); assertEquals("a/b/c/2303", components.get(0).getLocation().getDataSetLocation()); assertEquals("[]", components.get(0).getComponents().toString()); assertEquals("-2304", components.get(1).getLocation().getDataSetCode()); - assertEquals(new Integer(0), components.get(1).getLocation().getOrderInContainer()); + assertEquals(new Integer(0), components.get(1).getLocation().getOrderInContainer("-2306")); assertEquals(null, components.get(1).getLocation().getDataSetLocation()); List<IDatasetLocationNode> subComponents = new ArrayList<IDatasetLocationNode>(components.get(1).getComponents()); Collections.sort(subComponents, DATA_SET_LOCATION_NODE_COMPARATOR); assertEquals("-2302", subComponents.get(0).getLocation().getDataSetCode()); - assertEquals(new Integer(1), subComponents.get(0).getLocation().getOrderInContainer()); + assertEquals(new Integer(1), subComponents.get(0).getLocation().getOrderInContainer("-2304")); assertEquals("a/b/c/2302", subComponents.get(0).getLocation().getDataSetLocation()); assertEquals("-2303", subComponents.get(1).getLocation().getDataSetCode()); - assertEquals(new Integer(2), subComponents.get(1).getLocation().getOrderInContainer()); + assertEquals(new Integer(2), subComponents.get(1).getLocation().getOrderInContainer("-2304")); assertEquals("a/b/c/2303", subComponents.get(1).getLocation().getDataSetLocation()); assertEquals("-2305", components.get(2).getLocation().getDataSetCode()); - assertEquals(new Integer(2), components.get(2).getLocation().getOrderInContainer()); + assertEquals(new Integer(2), components.get(2).getLocation().getOrderInContainer("-2306")); assertEquals("a/b/c/2305", components.get(2).getLocation().getDataSetLocation()); assertEquals("[]", components.get(2).getComponents().toString()); diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/DatasetListerTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/DatasetListerTest.java index 9ecb4c11b4bf6084655211bcf01d15b914a69547..b3c4e946a5f66e55a0f0c95003da902e408fade9 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/DatasetListerTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/DatasetListerTest.java @@ -290,7 +290,7 @@ public class DatasetListerTest extends AbstractDAOTest PhysicalDataSet dataset1 = datasets.get(1).tryGetAsDataSet(); assertNotNull(dataset1); - assertEquals(2, (int) dataset1.getOrderIn(containerDataSet.getCode())); + assertEquals(2, (int) dataset1.getOrderInContainer(containerDataSet.getCode())); assertEquals(dataset1.getContainerDataSets().get(0), containerDataSet); } diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/ExternalDataLocationNodeTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/ExternalDataLocationNodeTest.java index db471d617381f8a8ee1e5862e6d45754e3da5337..f4574bc5ba9e26ef85d4a09c6668ea08c5ade3e0 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/ExternalDataLocationNodeTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/ExternalDataLocationNodeTest.java @@ -34,10 +34,10 @@ public class ExternalDataLocationNodeTest extends AssertJUnit @Test public void test() { - ContainerDataSetBuilder rootContainer = new ContainerDataSetBuilder().code("c1"); + ContainerDataSetBuilder rootContainer = new ContainerDataSetBuilder(1).code("c1"); DataStore store = new DataStoreBuilder("DSS").getStore(); rootContainer.component(new DataSetBuilder().code("p1").store(store).location("a/b/c/1").getDataSet()); - ContainerDataSetBuilder subContainer = new ContainerDataSetBuilder().code("c2"); + ContainerDataSetBuilder subContainer = new ContainerDataSetBuilder(2).code("c2"); PhysicalDataSet component2 = new DataSetBuilder().code("p2").store(store).location("a/b/c/2").getDataSet(); subContainer.component(component2); subContainer.component(new DataSetBuilder().code("p3").store(store).location("a/b/c/3").getDataSet()); @@ -52,18 +52,18 @@ public class ExternalDataLocationNodeTest extends AssertJUnit assertEquals("p1", components.get(1).getLocation().getDataSetCode()); assertEquals("DSS", components.get(1).getLocation().getDataStoreCode()); assertEquals("a/b/c/1", components.get(1).getLocation().getDataSetLocation()); - assertEquals(0, components.get(1).getLocation().getOrderInContainer().intValue()); + assertEquals(0, components.get(1).getLocation().getOrderInContainer("c1").intValue()); assertEquals("p2", components.get(2).getLocation().getDataSetCode()); assertEquals("a/b/c/2", components.get(2).getLocation().getDataSetLocation()); - assertEquals(2, components.get(2).getLocation().getOrderInContainer().intValue()); + assertEquals(2, components.get(2).getLocation().getOrderInContainer("c1").intValue()); assertEquals(3, components.size()); components = new ArrayList<IDatasetLocationNode>(components.get(0).getComponents()); assertEquals("p2", components.get(0).getLocation().getDataSetCode()); assertEquals("a/b/c/2", components.get(0).getLocation().getDataSetLocation()); - assertEquals(0, components.get(0).getLocation().getOrderInContainer().intValue()); + assertEquals(0, components.get(0).getLocation().getOrderInContainer("c2").intValue()); assertEquals("p3", components.get(1).getLocation().getDataSetCode()); assertEquals("a/b/c/3", components.get(1).getLocation().getDataSetLocation()); - assertEquals(1, components.get(1).getLocation().getOrderInContainer().intValue()); + assertEquals(1, components.get(1).getLocation().getOrderInContainer("c2").intValue()); assertEquals(2, components.size()); } } diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/base/matcher/ExternalDataHasContainerMatcher.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/base/matcher/ExternalDataHasContainerMatcher.java index 0c1d7d769d9d392eb8ea58f4d77baf4d850fcbfa..6be3efc37fbddcb8cb75a80153e5b18c9bccfa22 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/base/matcher/ExternalDataHasContainerMatcher.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/base/matcher/ExternalDataHasContainerMatcher.java @@ -57,7 +57,7 @@ public class ExternalDataHasContainerMatcher extends TypeSafeMatcher<AbstractExt String containerCode = container.getCode(); if (expectedContainer.getCode().equals(containerCode)) { - Integer order = actual.getOrderIn(containerCode); + Integer order = actual.getOrderInContainer(containerCode); return expectedOrder == null || expectedOrder.equals(order); } } diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/ScreeningUtils.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/ScreeningUtils.java index ed3c49cd2bc9658c361dd900246cffc80d74dab8..8619b91e9e0e7361e48fd3c7776b036af18ee6cf 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/ScreeningUtils.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/ScreeningUtils.java @@ -216,8 +216,8 @@ public class ScreeningUtils private static <T extends DataPE> boolean isContainerMatching(T dataset, String... datasetTypeCodePatterns) { - DataPE container = dataset.getContainer(); - return container != null && isOneOfTypesMatching(container, datasetTypeCodePatterns); + List<DataPE> containers = dataset.getContainers(); + return containers.isEmpty() == false && isOneOfTypesMatching(containers.get(0), datasetTypeCodePatterns); } private static boolean isNotEmpty(AbstractExternalData dataset)