Skip to content
Snippets Groups Projects
Commit bdee614c authored by cramakri's avatar cramakri
Browse files

LMS-1914 Improve DataSet to include the experiment/sample identifier (as...

LMS-1914 Improve DataSet to include the experiment/sample identifier (as strings). Added new method to GeneralInformationService to return data sets for a sample, optionally including children.

SVN: 19029
parent de984200
No related branches found
No related tags found
No related merge requests found
......@@ -44,6 +44,7 @@ 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.TechId;
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.ExperimentType;
......@@ -144,7 +145,7 @@ public class GeneralInformationService extends AbstractServer<IGeneralInformatio
public int getMinorVersion()
{
return 2;
return 3;
}
private Map<String, List<RoleAssignmentPE>> getRoleAssignmentsPerSpace()
......@@ -286,4 +287,19 @@ public class GeneralInformationService extends AbstractServer<IGeneralInformatio
}
return experiments;
}
public List<DataSet> listDataSetsForSample(String sessionToken, Sample sample,
boolean areOnlyDirectlyConnectedIncluded)
{
checkSession(sessionToken);
List<ExternalData> externalData =
commonServer.listSampleExternalData(sessionToken, new TechId(sample.getId()),
areOnlyDirectlyConnectedIncluded);
ArrayList<DataSet> dataSets = new ArrayList<DataSet>(externalData.size());
for (ExternalData externalDatum : externalData)
{
dataSets.add(Translator.translate(externalDatum));
}
return dataSets;
}
}
......@@ -92,4 +92,11 @@ class GeneralInformationServiceLogger extends AbstractServerLogger implements
return null;
}
public List<DataSet> listDataSetsForSample(String sessionToken, Sample sample,
boolean areOnlyDirectlyConnectedIncluded)
{
logAccess(sessionToken, "list-data-sets", "SAMPLE(%s) INCLUDE-CONNECTED(%s)", sample,
areOnlyDirectlyConnectedIncluded);
return null;
}
}
......@@ -96,6 +96,8 @@ class Translator
{
DataSetInitializer initializer = new DataSetInitializer();
initializer.setCode(externalDatum.getCode());
initializer.setExperimentIdentifier(externalDatum.getExperiment().getIdentifier());
initializer.setSampleIdentifierOrNull(externalDatum.getSampleIdentifier());
initializer.setDataSetTypeCode(externalDatum.getDataSetType().getCode());
initializer.setRegistrationDate(externalDatum.getRegistrationDate());
List<IEntityProperty> properties = externalDatum.getProperties();
......
......@@ -116,4 +116,19 @@ public interface IGeneralInformationService extends IRpcService
public List<Experiment> listExperiments(String sessionToken, List<Project> projects,
String experimentType);
/**
* Return the data sets attached to the specified sample, optionally including child samples.
* Available since minor version 3.
*
* @param sample The sample for which we return attached data sets.
* @param areOnlyDirectlyConnectedIncluded If true, only data sets that are directly connected
* to the sample are included, otherwise data sets of child samples are included as
* well.
* @since 1.3
*/
@Transactional(readOnly = true)
@RolesAllowed(RoleWithHierarchy.INSTANCE_OBSERVER)
public List<DataSet> listDataSetsForSample(String sessionToken, Sample sample,
boolean areOnlyDirectlyConnectedIncluded);
}
......@@ -44,6 +44,10 @@ public final class DataSet implements Serializable
{
private String code;
private String sampleIdentifierOrNull;
private String experimentIdentifier;
private String dataSetTypeCode;
private Date registrationDate;
......@@ -60,6 +64,26 @@ public final class DataSet implements Serializable
this.code = code;
}
public String getSampleIdentifierOrNull()
{
return sampleIdentifierOrNull;
}
public void setSampleIdentifierOrNull(String sampleIdentifierOrNull)
{
this.sampleIdentifierOrNull = sampleIdentifierOrNull;
}
public String getExperimentIdentifier()
{
return experimentIdentifier;
}
public void setExperimentIdentifier(String experimentIdentifier)
{
this.experimentIdentifier = experimentIdentifier;
}
public void setDataSetTypeCode(String dataSetTypeCode)
{
this.dataSetTypeCode = dataSetTypeCode;
......@@ -93,6 +117,10 @@ public final class DataSet implements Serializable
private final String code;
private final String experimentIdentifier;
private final String sampleIdentifierOrNull;
private final String dataSetTypeCode;
private final Date registrationDate;
......@@ -109,6 +137,14 @@ public final class DataSet implements Serializable
checkValidString(initializer.getCode(), "Unspecified code.");
this.code = initializer.getCode();
checkValidString(initializer.getExperimentIdentifier(), "Unspecified experiment.");
this.experimentIdentifier = initializer.getExperimentIdentifier();
this.sampleIdentifierOrNull = initializer.getSampleIdentifierOrNull();
// Either the sample identifier or experiment identifier should be non-null
assert sampleIdentifierOrNull != null || experimentIdentifier != null;
checkValidString(initializer.getDataSetTypeCode(), "Unspecified data set type code.");
this.dataSetTypeCode = initializer.getDataSetTypeCode();
......@@ -133,6 +169,16 @@ public final class DataSet implements Serializable
return code;
}
public String getExperimentIdentifier()
{
return experimentIdentifier;
}
public String getSampleIdentifierOrNull()
{
return sampleIdentifierOrNull;
}
public String getDataSetTypeCode()
{
return dataSetTypeCode;
......@@ -179,6 +225,8 @@ public final class DataSet implements Serializable
{
ToStringBuilder builder = new ToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE);
builder.append(getCode());
builder.append(getExperimentIdentifier());
builder.append(getSampleIdentifierOrNull());
builder.append(getDataSetTypeCode());
builder.append(getProperties());
return builder.toString();
......
......@@ -42,6 +42,7 @@ import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchCriteria;
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.api.v1.dto.SpaceWithProjectsAndRoleAssignments;
import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetRelatedEntities;
import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetType;
import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DetailedSearchCriteria;
......@@ -242,6 +243,17 @@ public class GeneralInformationServiceTest extends AbstractServerTestCase
returnData.setCode("ds-code");
returnData.setDataSetType(returnDataSetType);
returnData.setDataSetProperties(new ArrayList<IEntityProperty>());
ch.systemsx.cisd.openbis.generic.shared.basic.dto.Experiment experiment =
new ch.systemsx.cisd.openbis.generic.shared.basic.dto.Experiment();
experiment.setIdentifier("/space/project/exp");
returnData.setExperiment(experiment);
ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample sample =
new ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample();
sample.setIdentifier("/space/code");
returnData.setSample(sample);
will(returnValue(Collections.singletonList(returnData)));
}
});
......@@ -286,6 +298,52 @@ public class GeneralInformationServiceTest extends AbstractServerTestCase
context.assertIsSatisfied();
}
@Test
public void testListDataSetsForSample()
{
prepareGetSession();
context.checking(new Expectations()
{
{
one(commonServer).listSampleExternalData(with(SESSION_TOKEN),
with(new TechId(1)), with(true));
ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExternalData returnData =
new ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExternalData();
DataSetType returnDataSetType = new DataSetType();
returnDataSetType.setCode("ds-type");
returnData.setCode("ds-code");
returnData.setDataSetType(returnDataSetType);
returnData.setDataSetProperties(new ArrayList<IEntityProperty>());
ch.systemsx.cisd.openbis.generic.shared.basic.dto.Experiment experiment =
new ch.systemsx.cisd.openbis.generic.shared.basic.dto.Experiment();
experiment.setIdentifier("/space/project/exp");
returnData.setExperiment(experiment);
ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample sample =
new ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample();
sample.setIdentifier("/space/code");
returnData.setSample(sample);
will(returnValue(Collections.singletonList(returnData)));
}
});
SampleInitializer initializer = new SampleInitializer();
initializer.setId(new Long(1));
initializer.setPermId("permId");
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.listDataSetsForSample(SESSION_TOKEN, owner, true);
assertEquals(1, result.size());
DataSet resultDataSet = result.get(0);
assertEquals("ds-code", resultDataSet.getCode());
context.assertIsSatisfied();
}
private void prepareSearchForExperiments()
{
context.checking(new Expectations()
......
......@@ -129,6 +129,18 @@ public class GeneralInformationServiceTest extends SystemTestCase
assertEquals(true, result.size() > 0);
}
@Test
public void testListDataSetsForSample()
{
// Search for Samples first
SearchCriteria sc = new SearchCriteria();
sc.addMatchClause(MatchClause.createPropertyMatch("ORGANISM", "HUMAN"));
List<Sample> samples = generalInformationService.searchForSamples(sessionToken, sc);
List<DataSet> result =
generalInformationService.listDataSetsForSample(sessionToken, samples.get(0), true);
assertEquals(true, result.size() > 0);
}
@Test
public void testListDataSetsForEmptySampleList()
{
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment