diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/translator/entity/material/MaterialTranslator.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/translator/entity/material/MaterialTranslator.java index 8e994142241eac4b4af51e72a0d340b2e34f5de3..608e41096851fc9bd6cebdf2e0daee9b792164b4 100644 --- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/translator/entity/material/MaterialTranslator.java +++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/translator/entity/material/MaterialTranslator.java @@ -42,6 +42,9 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.MetaprojectPE; public class MaterialTranslator extends AbstractCachingTranslator<MaterialPE, Material, MaterialFetchOptions> implements IMaterialTranslator { + @Autowired + private IMaterialTypeTranslator typeTranslator; + @Autowired private IPropertyTranslator propertyTranslator; @@ -94,5 +97,12 @@ public class MaterialTranslator extends AbstractCachingTranslator<MaterialPE, Ma result.setRegistrator(personTranslator.translate(context, materialPe.getRegistrator(), fetchOptions.withRegistrator())); result.getFetchOptions().withRegistratorUsing(fetchOptions.withRegistrator()); } + + if (fetchOptions.hasType()) + { + result.setType(typeTranslator.translate(context, materialPe.getMaterialType(), fetchOptions.withType())); + result.getFetchOptions().withTypeUsing(fetchOptions.withType()); + } + } } diff --git a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/api/v3/MapMaterialTest.java b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/api/v3/MapMaterialTest.java index 2b409296fdfc78fc2d44623201a5524817b06030..5b1686a6a4d6d2381f4d0bec3cd9e4d67f031f16 100644 --- a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/api/v3/MapMaterialTest.java +++ b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/api/v3/MapMaterialTest.java @@ -60,6 +60,8 @@ public class MapMaterialTest extends AbstractDataSetTest assertEquals(true, bacteria.getRegistrationDate() != null); assertPropertiesNotFetched(bacteria); + assertEquals(bacteria.getPermId(), bacteriaId); + v3api.logout(sessionToken); } @@ -114,6 +116,22 @@ public class MapMaterialTest extends AbstractDataSetTest assertEquals(selfChildId, childFromProperties.getPermId()); assertEquals(true, child == childFromProperties); + } + + @Test + public void testWithType() + { + String sessionToken = v3api.login(TEST_USER, PASSWORD); + + MaterialFetchOptions fetchOptions = new MaterialFetchOptions(); + fetchOptions.withType(); + + MaterialPermId selfId = new MaterialPermId("SRM_1A", "SELF_REF"); + + Map<IMaterialId, Material> map = v3api.mapMaterials(sessionToken, Arrays.asList(selfId), fetchOptions); + + Material item = map.get(selfId); + assertEquals(item.getType().getCode(), "SELF_REF"); } } diff --git a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/api/v3/UpdateMaterialTest.java b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/api/v3/UpdateMaterialTest.java index c480dce4f468cad0fd6d9747b9ee7727e749b42c..cf9de2caa6ca41377f9e4a6fa90962f17e0579e1 100644 --- a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/api/v3/UpdateMaterialTest.java +++ b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/api/v3/UpdateMaterialTest.java @@ -56,4 +56,52 @@ public class UpdateMaterialTest extends AbstractSampleTest assertEquals(material.getProperties().get("DESCRIPTION"), description); } + @Test + public void testWithMaterialProperties() + { + String sessionToken = v3api.login(TEST_USER, PASSWORD); + + MaterialFetchOptions fetchOptions = new MaterialFetchOptions(); + fetchOptions.withMaterialProperties().withProperties(); + + MaterialPermId selfParentId = new MaterialPermId("SRM_1", "SELF_REF"); + MaterialPermId selfChildId = new MaterialPermId("SRM_1A", "SELF_REF"); + + Map<IMaterialId, Material> map = v3api.mapMaterials(sessionToken, Arrays.asList(selfChildId, selfParentId), fetchOptions); + + Material parent = map.get(selfParentId); + Material child = map.get(selfChildId); + + Map<String, Material> materialProperties = parent.getMaterialProperties(); + + Material childFromProperties = materialProperties.get("ANY_MATERIAL"); + + assertEquals(selfChildId, childFromProperties.getPermId()); + assertEquals(true, child == childFromProperties); + } + + @Test + public void testUpdateMaterialProperty() + { + String sessionToken = v3api.login(TEST_USER, PASSWORD); + + MaterialUpdate update = new MaterialUpdate(); + update.setMaterialId(new MaterialPermId("SRM_1", "SELF_REF")); + update.setProperty("ANY_MATERIAL", "1 (GENE)"); + + v3api.updateMaterials(sessionToken, Arrays.asList(update)); + + MaterialFetchOptions fetchOptions = new MaterialFetchOptions(); + fetchOptions.withProperties(); + fetchOptions.withMaterialProperties().withType(); + + Map<IMaterialId, Material> map = v3api.mapMaterials(sessionToken, Arrays.asList(update.getMaterialId()), fetchOptions); + + Material material = map.get(update.getMaterialId()); + assertEquals(material.getProperties().get("ANY_MATERIAL"), "1 (GENE)"); + Material expectedGene = material.getMaterialProperties().get("ANY_MATERIAL"); + assertEquals(expectedGene.getCode(), "1"); + assertEquals(expectedGene.getType().getCode(), "GENE"); + } + }