diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/api/v1/GeneralInformationService.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/api/v1/GeneralInformationService.java index 25028d513e7801670281f03ce593f6559fb1d6f6..e68a302b8640ca776d91a569a8ec2d54e430f7df 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/api/v1/GeneralInformationService.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/api/v1/GeneralInformationService.java @@ -36,12 +36,15 @@ import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDAOFactory; import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDatabaseInstanceDAO; import ch.systemsx.cisd.openbis.generic.shared.ICommonServer; import ch.systemsx.cisd.openbis.generic.shared.api.v1.IGeneralInformationService; +import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.DataSet; import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.Project; import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.Role; import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.Sample; import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchCriteria; import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SpaceWithProjectsAndRoleAssignments; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetRelatedEntities; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DetailedSearchCriteria; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExternalData; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.RoleWithHierarchy; import ch.systemsx.cisd.openbis.generic.shared.dto.AuthorizationGroupPE; import ch.systemsx.cisd.openbis.generic.shared.dto.DatabaseInstancePE; @@ -224,4 +227,21 @@ public class GeneralInformationService extends AbstractServer<IGeneralInformatio return samples; } + + public List<DataSet> listDataSets(String sessionToken, List<Sample> samples) + { + checkSession(sessionToken); + List<ch.systemsx.cisd.openbis.generic.shared.basic.dto.SampleType> sampleTypes = + commonServer.listSampleTypes(sessionToken); + SampleToDataSetRelatedEntitiesTranslator translator = + new SampleToDataSetRelatedEntitiesTranslator(sampleTypes, samples); + DataSetRelatedEntities dsre = translator.convertToDataSetRelatedEntities(); + List<ExternalData> externalData = commonServer.listRelatedDataSets(sessionToken, dsre); + ArrayList<DataSet> dataSets = new ArrayList<DataSet>(externalData.size()); + for (ExternalData externalDatum : externalData) + { + dataSets.add(Translator.translate(externalDatum)); + } + return dataSets; + } } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/api/v1/GeneralInformationServiceLogger.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/api/v1/GeneralInformationServiceLogger.java index 30389894a13bbbdaea5bfe5c9ca8c05a178ecfb8..2582501e1ac1601df5316abb9a020fa524891d31 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/api/v1/GeneralInformationServiceLogger.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/api/v1/GeneralInformationServiceLogger.java @@ -24,6 +24,7 @@ import ch.systemsx.cisd.authentication.ISessionManager; import ch.systemsx.cisd.common.spring.IInvocationLoggerContext; import ch.systemsx.cisd.openbis.generic.server.AbstractServerLogger; import ch.systemsx.cisd.openbis.generic.shared.api.v1.IGeneralInformationService; +import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.DataSet; import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.Role; import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.Sample; import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchCriteria; @@ -76,4 +77,10 @@ class GeneralInformationServiceLogger extends AbstractServerLogger implements return null; } + public List<DataSet> listDataSets(String sessionToken, List<Sample> samples) + { + logAccess(sessionToken, "list-data-sets", "SAMPLES(%s)", samples); + return null; + } + } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/api/v1/SampleToDataSetRelatedEntitiesTranslator.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/api/v1/SampleToDataSetRelatedEntitiesTranslator.java new file mode 100644 index 0000000000000000000000000000000000000000..bbe5246400eb666922878c90dba2fa156acca751 --- /dev/null +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/api/v1/SampleToDataSetRelatedEntitiesTranslator.java @@ -0,0 +1,101 @@ +/* + * Copyright 2010 ETH Zuerich, CISD + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package ch.systemsx.cisd.openbis.generic.server.api.v1; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.Sample; +import ch.systemsx.cisd.openbis.generic.shared.basic.BasicEntityInformationHolder; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetRelatedEntities; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityType; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SampleType; + +/** + * A class that converts {@link Sample} objects to {@link DataSetRelatedEntities} objects. + * + * @author Chandrasekhar Ramakrishnan + */ +class SampleToDataSetRelatedEntitiesTranslator +{ + // A map from sample type Id to sample type. + private final HashMap<Long, SampleType> sampleTypesMap; + + private final List<Sample> samples; + + private final ArrayList<BasicEntityInformationHolder> entityInformationHolders; + + /** + * Creates a translator from public {@Sample} objects to the internal + * {@link DataSetRelatedEntities} objects. + * <p> + * A list of sample types known to the DB must be provided because Sample knows only the code of + * the SampleType. + * + * @param sampleTypes A list of SampleTypes known to the DB. + * @param samples The samples to convert. + */ + public SampleToDataSetRelatedEntitiesTranslator(List<SampleType> sampleTypes, + List<Sample> samples) + { + this.sampleTypesMap = convertSampleTypesListToMap(sampleTypes); + this.samples = samples; + entityInformationHolders = new ArrayList<BasicEntityInformationHolder>(samples.size()); + } + + private static HashMap<Long, SampleType> convertSampleTypesListToMap( + List<SampleType> sampleTypes) + { + HashMap<Long, SampleType> map = new HashMap<Long, SampleType>(sampleTypes.size()); + + for (SampleType sampleType : sampleTypes) + { + map.put(sampleType.getId(), sampleType); + } + + return map; + } + + public DataSetRelatedEntities convertToDataSetRelatedEntities() + { + for (Sample sample : samples) + { + BasicEntityInformationHolder holderOrNull = + tryConvertSampleToEntityInformationHolder(sample); + if (null != holderOrNull) + { + entityInformationHolders.add(holderOrNull); + } + } + return new DataSetRelatedEntities(entityInformationHolders); + } + + private BasicEntityInformationHolder tryConvertSampleToEntityInformationHolder(Sample sample) + { + EntityType entityType = sampleTypesMap.get(sample.getSampleTypeId()); + if (null == entityType) + { + return null; + } + BasicEntityInformationHolder holder = + new BasicEntityInformationHolder(EntityKind.SAMPLE, entityType, sample.getCode(), + sample.getId()); + return holder; + } +} diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/api/v1/Translator.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/api/v1/Translator.java index cbf4d4e77a43c2e05139c03c69edad7ba05fea8d..101a4070368317152d5bfc7163c0cb62e1784652 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/api/v1/Translator.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/api/v1/Translator.java @@ -16,9 +16,12 @@ package ch.systemsx.cisd.openbis.generic.server.api.v1; +import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.DataSet; import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.Role; import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.Sample; +import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.DataSet.DataSetInitializer; import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.Sample.SampleInitializer; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExternalData; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.RoleWithHierarchy.RoleCode; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.RoleWithHierarchy.RoleLevel; @@ -40,11 +43,22 @@ class Translator static Sample translate(ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample privateSample) { SampleInitializer initializer = new SampleInitializer(); + initializer.setId(privateSample.getId()); + initializer.setCode(privateSample.getCode()); initializer.setIdentifier(privateSample.getIdentifier()); + initializer.setSampleTypeId(privateSample.getSampleType().getId()); + initializer.setSampleTypeCode(privateSample.getSampleType().getCode()); return new Sample(initializer); } private Translator() { } + + public static DataSet translate(ExternalData externalDatum) + { + DataSetInitializer initializer = new DataSetInitializer(); + initializer.setCode(externalDatum.getCode()); + return new DataSet(initializer); + } } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/api/v1/IGeneralInformationService.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/api/v1/IGeneralInformationService.java index 15ce9594e5ce0351605e0c12cd6989d537a04dd4..adf5228c035fdbad1f001791fb3bf896d534ad44 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/api/v1/IGeneralInformationService.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/api/v1/IGeneralInformationService.java @@ -23,6 +23,7 @@ import java.util.Set; import org.springframework.transaction.annotation.Transactional; import ch.systemsx.cisd.common.api.IRpcService; +import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.DataSet; import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.Role; import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.Sample; import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchCriteria; @@ -90,4 +91,13 @@ public interface IGeneralInformationService extends IRpcService @RolesAllowed(RoleWithHierarchy.INSTANCE_OBSERVER) public List<Sample> searchForSamples(String sessionToken, SearchCriteria searchCriteria); + /** + * Return all data sets attached to the given samples. + * + * @param samples The samples for which we return attached data sets. + */ + @Transactional(readOnly = true) + @RolesAllowed(RoleWithHierarchy.INSTANCE_OBSERVER) + public List<DataSet> listDataSets(String sessionToken, List<Sample> samples); + } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/api/v1/dto/DataSet.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/api/v1/dto/DataSet.java new file mode 100644 index 0000000000000000000000000000000000000000..06dbb657c1ada1df98daa50e0fe1262dcadbcbb7 --- /dev/null +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/api/v1/dto/DataSet.java @@ -0,0 +1,114 @@ +/* + * Copyright 2010 ETH Zuerich, CISD + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package ch.systemsx.cisd.openbis.generic.shared.api.v1.dto; + +import java.io.Serializable; + +import org.apache.commons.lang.builder.EqualsBuilder; +import org.apache.commons.lang.builder.HashCodeBuilder; +import org.apache.commons.lang.builder.ToStringBuilder; +import org.apache.commons.lang.builder.ToStringStyle; + +/** + * Immutable value object representing a data set. + * + * @author Chandrasekhar Ramakrishnan + */ +public final class DataSet implements Serializable +{ + private static final long serialVersionUID = 1L; + + private final String code; + + /** + * Class used to initialize a new data set instance. Necessary since all the fields of a DataSet + * are final. + * + * @author Chandrasekhar Ramakrishnan + */ + public static final class DataSetInitializer + { + private String code; + + public String getCode() + { + return code; + } + + public void setCode(String code) + { + this.code = code; + } + } + + /** + * Creates a new instance with the provided initializer + * + * @throws IllegalArgumentException if some of the required information is not provided. + */ + public DataSet(DataSetInitializer initializer) + { + String id = initializer.getCode(); + if (id == null || id.length() == 0) + { + throw new IllegalArgumentException("Unspecified code."); + } + this.code = id; + } + + /** + * Returns the sample code; + */ + public String getCode() + { + return code; + } + + @Override + public boolean equals(Object obj) + { + if (obj == this) + { + return true; + } + if (obj instanceof DataSet == false) + { + return false; + } + + EqualsBuilder builder = new EqualsBuilder(); + DataSet other = (DataSet) obj; + builder.append(getCode(), other.getCode()); + return builder.isEquals(); + } + + @Override + public int hashCode() + { + HashCodeBuilder builder = new HashCodeBuilder(); + builder.append(getCode()); + return builder.toHashCode(); + } + + @Override + public String toString() + { + ToStringBuilder builder = new ToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE); + builder.append(getCode()); + return builder.toString(); + } +} diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/api/v1/dto/Sample.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/api/v1/dto/Sample.java index 87d6444f0f3722fa2957b005cc1b8e0a30267832..dfc8bd8d3ecb529e6be020a0100f12ba8bd25c1c 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/api/v1/dto/Sample.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/api/v1/dto/Sample.java @@ -32,18 +32,47 @@ public final class Sample implements Serializable { private static final long serialVersionUID = 1L; - private final String identifier; - /** * Class used to initialize a new sample instance. Necessary since all the fields of a sample * are final. + * <p> + * All of the properties must be filled (non-null) before being used to initialize a Sample, + * otherwise the Sample constructor will throw an exception. * * @author Chandrasekhar Ramakrishnan */ public static final class SampleInitializer { + private Long id; + + private String code; + private String identifier; + private Long sampleTypeId; + + private String sampleTypeCode; + + public void setId(Long id) + { + this.id = id; + } + + public Long getId() + { + return id; + } + + public void setCode(String code) + { + this.code = code; + } + + public String getCode() + { + return code; + } + public String getIdentifier() { return identifier; @@ -53,8 +82,38 @@ public final class Sample implements Serializable { this.identifier = identifier; } + + public void setSampleTypeId(Long sampleTypeId) + { + this.sampleTypeId = sampleTypeId; + } + + public Long getSampleTypeId() + { + return sampleTypeId; + } + + public void setSampleTypeCode(String sampleTypeCode) + { + this.sampleTypeCode = sampleTypeCode; + } + + public String getSampleTypeCode() + { + return sampleTypeCode; + } } + private final Long id; + + private final String code; + + private final String identifier; + + private final Long sampleTypeId; + + private final String sampleTypeCode; + /** * Creates a new instance with the provided initializer * @@ -62,12 +121,52 @@ public final class Sample implements Serializable */ public Sample(SampleInitializer initializer) { - String id = initializer.getIdentifier(); - if (id == null || id.length() == 0) + checkValidLong(initializer.getId(), "Unspecified id."); + this.id = initializer.getId(); + + checkValidString(initializer.getCode(), "Unspecified code."); + this.code = initializer.getCode(); + + checkValidString(initializer.getIdentifier(), "Unspecified identifier."); + this.identifier = initializer.getIdentifier(); + + checkValidLong(initializer.getSampleTypeId(), "Unspecified sample type id."); + this.sampleTypeId = initializer.getSampleTypeId(); + + checkValidString(initializer.getSampleTypeCode(), "Unspecified sample type code."); + this.sampleTypeCode = initializer.getSampleTypeCode(); + } + + private void checkValidString(String string, String message) throws IllegalArgumentException + { + if (string == null || string.length() == 0) { - throw new IllegalArgumentException("Unspecified identifier."); + throw new IllegalArgumentException(message); } - this.identifier = id; + } + + private void checkValidLong(Long longValue, String message) throws IllegalArgumentException + { + if (longValue == null || longValue == 0) + { + throw new IllegalArgumentException(message); + } + } + + /** + * Returns the sample id. + */ + public Long getId() + { + return id; + } + + /** + * Returns the sample code. + */ + public String getCode() + { + return code; } /** @@ -78,6 +177,22 @@ public final class Sample implements Serializable return identifier; } + /** + * Returns the sample type id. + */ + public Long getSampleTypeId() + { + return sampleTypeId; + } + + /** + * Returns the sample type code. + */ + public String getSampleTypeCode() + { + return sampleTypeCode; + } + @Override public boolean equals(Object obj) { @@ -92,7 +207,7 @@ public final class Sample implements Serializable EqualsBuilder builder = new EqualsBuilder(); Sample other = (Sample) obj; - builder.append(getIdentifier(), other.getIdentifier()); + builder.append(getId(), other.getId()); return builder.isEquals(); } @@ -100,7 +215,7 @@ public final class Sample implements Serializable public int hashCode() { HashCodeBuilder builder = new HashCodeBuilder(); - builder.append(getIdentifier()); + builder.append(getId()); return builder.toHashCode(); } @@ -109,6 +224,7 @@ public final class Sample implements Serializable { ToStringBuilder builder = new ToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE); builder.append(getIdentifier()); + builder.append(getSampleTypeCode()); return builder.toString(); } } diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/api/v1/GeneralInformationServiceTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/api/v1/GeneralInformationServiceTest.java index f78db9631c3b6514ab341f893f2e8c95c57e2e1c..1fd96312e35ecd68f5434d1e0e9170259c85df8e 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/api/v1/GeneralInformationServiceTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/api/v1/GeneralInformationServiceTest.java @@ -32,14 +32,18 @@ import org.testng.annotations.Test; import ch.rinn.restrictions.Friend; import ch.systemsx.cisd.openbis.generic.shared.AbstractServerTestCase; import ch.systemsx.cisd.openbis.generic.shared.ICommonServer; +import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.DataSet; import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.Project; import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.Role; import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.Sample; import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchCriteria; import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SpaceWithProjectsAndRoleAssignments; +import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.Sample.SampleInitializer; import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchCriteria.MatchClause; import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchCriteria.MatchClauseAttribute; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetRelatedEntities; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DetailedSearchCriteria; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SampleType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.RoleWithHierarchy.RoleCode; import ch.systemsx.cisd.openbis.generic.shared.dto.GroupPE; import ch.systemsx.cisd.openbis.generic.shared.dto.PersonPE; @@ -180,6 +184,16 @@ public class GeneralInformationServiceTest extends AbstractServerTestCase public void testSearchForSamples() { prepareGetSession(); + prepareSearchForSamples(); + List<Sample> result = service.searchForSamples(SESSION_TOKEN, createSearchCriteria()); + assertEquals(1, result.size()); + Sample resultSample = result.get(0); + assertEquals("/space/code", resultSample.getIdentifier()); + context.assertIsSatisfied(); + } + + private void prepareSearchForSamples() + { context.checking(new Expectations() { { @@ -187,14 +201,76 @@ public class GeneralInformationServiceTest extends AbstractServerTestCase with(any(DetailedSearchCriteria.class))); ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample returnSample = new ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample(); + SampleType returnSampleType = new SampleType(); + returnSample.setId(new Long(1)); + returnSample.setCode("code"); returnSample.setIdentifier("/space/code"); + returnSampleType.setId(new Long(1)); + returnSampleType.setCode("sample-type"); + returnSample.setSampleType(returnSampleType); will(returnValue(Collections.singletonList(returnSample))); } }); - List<Sample> result = service.searchForSamples(SESSION_TOKEN, createSearchCriteria()); + } + + @Test + public void testListDataSets() + { + prepareGetSession(); + context.checking(new Expectations() + { + { + one(commonServer).listSampleTypes(SESSION_TOKEN); + SampleType returnSampleType = new SampleType(); + returnSampleType.setId(new Long(1)); + returnSampleType.setCode("sample-type"); + will(returnValue(Collections.singletonList(returnSampleType))); + + one(commonServer).listRelatedDataSets(with(SESSION_TOKEN), + with(any(DataSetRelatedEntities.class))); + ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExternalData returnData = + new ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExternalData(); + returnData.setCode("ds-code"); + will(returnValue(Collections.singletonList(returnData))); + } + }); + + SampleInitializer initializer = new SampleInitializer(); + initializer.setId(new Long(1)); + initializer.setCode("code"); + initializer.setIdentifier("/space/code"); + initializer.setSampleTypeId(new Long(1)); + initializer.setSampleTypeCode("sample-type"); + Sample owner = new Sample(initializer); + List<DataSet> result = + service.listDataSets(SESSION_TOKEN, Collections.singletonList(owner)); assertEquals(1, result.size()); - Sample resultSample = result.get(0); - assertEquals("/space/code", resultSample.getIdentifier()); + DataSet resultDataSet = result.get(0); + assertEquals("ds-code", resultDataSet.getCode()); + context.assertIsSatisfied(); + } + + @Test + public void testListDataSetsWithEmptySampleList() + { + prepareGetSession(); + context.checking(new Expectations() + { + { + one(commonServer).listSampleTypes(SESSION_TOKEN); + SampleType returnSampleType = new SampleType(); + returnSampleType.setId(new Long(1)); + returnSampleType.setCode("sample-type"); + will(returnValue(Collections.singletonList(returnSampleType))); + + one(commonServer).listRelatedDataSets(with(SESSION_TOKEN), + with(any(DataSetRelatedEntities.class))); + will(returnValue(new ArrayList<ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExternalData>())); + } + }); + ArrayList<Sample> samples = new ArrayList<Sample>(); + List<DataSet> result = service.listDataSets(SESSION_TOKEN, samples); + assertEquals(0, result.size()); context.assertIsSatisfied(); } diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/api/v1/SampleToDataSetRelatedEntitiesTranslatorTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/api/v1/SampleToDataSetRelatedEntitiesTranslatorTest.java new file mode 100644 index 0000000000000000000000000000000000000000..8be495211057dbe422502ba7323b4cdbceeb30e8 --- /dev/null +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/api/v1/SampleToDataSetRelatedEntitiesTranslatorTest.java @@ -0,0 +1,103 @@ +/* +; * Copyright 2010 ETH Zuerich, CISD + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package ch.systemsx.cisd.openbis.generic.server.api.v1; + +import java.util.ArrayList; +import java.util.List; + +import org.testng.AssertJUnit; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.Test; + +import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.Sample; +import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.Sample.SampleInitializer; +import ch.systemsx.cisd.openbis.generic.shared.basic.IEntityInformationHolder; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetRelatedEntities; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SampleType; + +/** + * @author Chandrasekhar Ramakrishnan + */ +public class SampleToDataSetRelatedEntitiesTranslatorTest extends AssertJUnit +{ + private SampleToDataSetRelatedEntitiesTranslator translator; + + private static final Long SAMPLE_ID = new Long(1); + + private static final String SAMPLE_CODE = "sample-code"; + + private static final String SAMPLE_IDENTIFIER = "/space/sample-code"; + + private static final Long SAMPLE_TYPE_ID = new Long(1); + + private static final String SAMPLE_TYPE_CODE = "sample-type"; + + @BeforeMethod + public void setUp() + { + ArrayList<SampleType> sampleTypes = createSampleTypes(); + ArrayList<Sample> samples = createSamples(); + translator = new SampleToDataSetRelatedEntitiesTranslator(sampleTypes, samples); + } + + private ArrayList<Sample> createSamples() + { + ArrayList<Sample> samples = new ArrayList<Sample>(); + SampleInitializer initializer = new SampleInitializer(); + initializer.setId(SAMPLE_ID); + initializer.setCode(SAMPLE_CODE); + initializer.setIdentifier(SAMPLE_IDENTIFIER); + initializer.setSampleTypeId(SAMPLE_TYPE_ID); + initializer.setSampleTypeCode(SAMPLE_TYPE_CODE); + Sample sample = new Sample(initializer); + samples.add(sample); + return samples; + } + + private ArrayList<SampleType> createSampleTypes() + { + ArrayList<SampleType> sampleTypes = new ArrayList<SampleType>(); + SampleType sampleType = new SampleType(); + sampleType.setId(new Long(1)); + sampleType.setCode("SAMPLE_TYPE"); + sampleTypes.add(sampleType); + return sampleTypes; + } + + @Test + public void testTranslator() + { + DataSetRelatedEntities dsre = translator.convertToDataSetRelatedEntities(); + assertNotNull(dsre); + List<? extends IEntityInformationHolder> entities = dsre.getEntities(); + assertEquals(1, entities.size()); + } + + @Test + public void testTranslatorWithEmptySampleTypes() + { + ArrayList<SampleType> sampleTypes = new ArrayList<SampleType>(); + ArrayList<Sample> samples = createSamples(); + SampleToDataSetRelatedEntitiesTranslator myTranslator = + new SampleToDataSetRelatedEntitiesTranslator(sampleTypes, samples); + + DataSetRelatedEntities dsre = myTranslator.convertToDataSetRelatedEntities(); + assertNotNull(dsre); + List<? extends IEntityInformationHolder> entities = dsre.getEntities(); + assertEquals(0, entities.size()); + } +} diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/api/v1/dto/SampleTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/api/v1/dto/SampleTest.java index 978d1450aee8dbee03171503a59b547680ec487b..4676bc9eef1939e41c701848316904165ea12e20 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/api/v1/dto/SampleTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/api/v1/dto/SampleTest.java @@ -27,33 +27,76 @@ import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.Sample.SampleInitializ */ public class SampleTest extends AssertJUnit { + private static final Long SAMPLE_ID = new Long(1); + + private static final String SAMPLE_CODE = "sample-code"; + private static final String SAMPLE_IDENTIFIER = "/space/sample-code"; + private static final Long SAMPLE_TYPE_ID = new Long(1); + + private static final String SAMPLE_TYPE_CODE = "sample-type"; + private Sample sample; @BeforeMethod public void setUp() { SampleInitializer initializer = new SampleInitializer(); + initializer.setId(SAMPLE_ID); + initializer.setCode(SAMPLE_CODE); initializer.setIdentifier(SAMPLE_IDENTIFIER); + initializer.setSampleTypeId(SAMPLE_TYPE_ID); + initializer.setSampleTypeCode(SAMPLE_TYPE_CODE); sample = new Sample(initializer); } + @Test(expectedExceptions = + { IllegalArgumentException.class }) + public void testInitialization() + { + SampleInitializer initializer = new SampleInitializer(); + initializer.setIdentifier(SAMPLE_IDENTIFIER); + new Sample(initializer); + } + @Test public void testEquals() { SampleInitializer initializer = new SampleInitializer(); + initializer.setId(SAMPLE_ID); + initializer.setCode(SAMPLE_CODE); initializer.setIdentifier(SAMPLE_IDENTIFIER); + initializer.setSampleTypeId(SAMPLE_TYPE_ID); + initializer.setSampleTypeCode(SAMPLE_TYPE_CODE); Sample mySample = new Sample(initializer); + assertTrue("Samples with the same id should be equal.", sample.equals(mySample)); + assertEquals(sample.hashCode(), mySample.hashCode()); - assertTrue(sample.equals(mySample)); + initializer = new SampleInitializer(); + initializer.setId(SAMPLE_ID); + initializer.setCode("different-code"); + initializer.setIdentifier("/a/different-identifier"); + initializer.setSampleTypeId(new Long(2)); + initializer.setSampleTypeCode("new-code"); + mySample = new Sample(initializer); + assertTrue("Samples with the same id should be equal.", sample.equals(mySample)); assertEquals(sample.hashCode(), mySample.hashCode()); + + initializer = new SampleInitializer(); + initializer.setId(new Long(2)); + initializer.setCode(SAMPLE_CODE); + initializer.setIdentifier(SAMPLE_IDENTIFIER); + initializer.setSampleTypeId(SAMPLE_TYPE_ID); + initializer.setSampleTypeCode(SAMPLE_TYPE_CODE); + mySample = new Sample(initializer); + assertFalse("Samples with the different ids should not be equal.", sample.equals(mySample)); } @Test public void testToString() { String stringRepresentation = sample.toString(); - assertEquals("Sample[/space/sample-code]", stringRepresentation); + assertEquals("Sample[/space/sample-code,sample-type]", stringRepresentation); } }