diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/EntityPropertiesConverter.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/EntityPropertiesConverter.java index fa9514d32417b12537b38b18c9c3ba61e4fd569b..d49dd8938381cae6f4968d1aecde1f3ef4a09b40 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/EntityPropertiesConverter.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/EntityPropertiesConverter.java @@ -37,7 +37,6 @@ import ch.systemsx.cisd.common.collection.IKeyExtractor; import ch.systemsx.cisd.common.collection.TableMap; import ch.systemsx.cisd.common.collection.TableMap.UniqueKeyViolationStrategy; import ch.systemsx.cisd.common.exceptions.UserFailureException; -import ch.systemsx.cisd.common.shared.basic.string.StringUtils; import ch.systemsx.cisd.openbis.generic.server.dataaccess.util.KeyExtractorFactory; import ch.systemsx.cisd.openbis.generic.shared.basic.BasicConstant; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataTypeCode; @@ -51,7 +50,6 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.EntityPropertyPE; import ch.systemsx.cisd.openbis.generic.shared.dto.EntityTypePE; import ch.systemsx.cisd.openbis.generic.shared.dto.EntityTypePropertyTypePE; import ch.systemsx.cisd.openbis.generic.shared.dto.MaterialPE; -import ch.systemsx.cisd.openbis.generic.shared.dto.MaterialTypePE; import ch.systemsx.cisd.openbis.generic.shared.dto.PersonPE; import ch.systemsx.cisd.openbis.generic.shared.dto.PropertyTypePE; import ch.systemsx.cisd.openbis.generic.shared.dto.VocabularyPE; @@ -663,20 +661,11 @@ public final class EntityPropertiesConverter implements IEntityPropertiesConvert { return null; // this is not a property of MATERIAL type } - MaterialIdentifier materialIdentifier = MaterialIdentifier.tryParseIdentifier(value); + MaterialIdentifier materialIdentifier = + MaterialIdentifier.tryCreate(value, propertyType.getMaterialType()); if (materialIdentifier == null) { - MaterialTypePE fixedMaterialType = propertyType.getMaterialType(); - // if the material type of the property is fixed, then we accept when only material - // code is specified and its type is skipped (we know what the type should be) - if (fixedMaterialType != null && StringUtils.isBlank(value) == false) - { - materialIdentifier = new MaterialIdentifier(value, fixedMaterialType.getCode()); - } else - { - // identifier is invalid or null - return null; - } + return null; } final MaterialPE material; diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/MaterialIdentifier.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/MaterialIdentifier.java index 090ddbcd5aa1e05a64c0d03cd3294804da50862f..74394898bc2fe52d31b46ba0d85aeec7264ab5f5 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/MaterialIdentifier.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/MaterialIdentifier.java @@ -19,6 +19,7 @@ package ch.systemsx.cisd.openbis.generic.shared.basic.dto; import java.io.Serializable; import ch.systemsx.cisd.common.shared.basic.string.StringUtils; +import ch.systemsx.cisd.openbis.generic.shared.basic.ICodeHolder; import ch.systemsx.cisd.openbis.generic.shared.basic.IEntityInformationHolderWithPermId; /** @@ -87,6 +88,35 @@ public final class MaterialIdentifier implements Serializable } // ----------- + /** + * Creates material identifier from specified identifier or code and material type code if no + * full identifier is specified. + * + * @return <code>null</code> if no full identifier specified and material type is unknown. + */ + public static MaterialIdentifier tryCreate(String codeOrIdentifierOrNull, + ICodeHolder materialTypeCodeHolderOrNull) + { + MaterialIdentifier materialIdentifier = + MaterialIdentifier.tryParseIdentifier(codeOrIdentifierOrNull); + if (materialIdentifier == null) + { + // if the material type of the property is fixed, then we accept when only material + // code is specified and its type is skipped (we know what the type should be) + if (materialTypeCodeHolderOrNull != null + && StringUtils.isBlank(codeOrIdentifierOrNull) == false) + { + materialIdentifier = + new MaterialIdentifier(codeOrIdentifierOrNull, + materialTypeCodeHolderOrNull.getCode()); + } else + { + // identifier is invalid or null + return null; + } + } + return materialIdentifier; + } /** * Parses the material code and type. Assumes the syntax: "code (type)". Returns the chosen diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/server/EntityExistenceChecker.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/server/EntityExistenceChecker.java index beb664c7fca96285d125d0e88ff3bee545a68784..27d4e2130084714282afcf0551c6b0e3f71c4ab6 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/server/EntityExistenceChecker.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/server/EntityExistenceChecker.java @@ -357,14 +357,8 @@ class EntityExistenceChecker { String value = property.getValue(); MaterialTypePE materialType = propertyTypePE.getMaterialType(); - MaterialIdentifier materialIdentifier; - if (materialType != null) - { - materialIdentifier = new MaterialIdentifier(value, materialType.getCode()); - } else - { - materialIdentifier = MaterialIdentifier.tryParseIdentifier(value); - } + MaterialIdentifier materialIdentifier = + MaterialIdentifier.tryCreate(value, materialType); if (materialIdentifier == null) { errors.add("Material identifier not in the form '<material code> (<material type code>)': " diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/server/library_tools/LibraryEntityRegistrator.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/server/library_tools/LibraryEntityRegistrator.java index c3c2e31deae3b3662c7d9fd4c9d2b672e0189755..98dada26ba66e3637092345a924a1a0422f25b57 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/server/library_tools/LibraryEntityRegistrator.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/server/library_tools/LibraryEntityRegistrator.java @@ -179,8 +179,10 @@ public class LibraryEntityRegistrator { String wellCode = extractor.getWellCode(row); String wellIdentifier = plateId + ":" + wellCode; - String oligoMaterialProperty = oligoId; - String geneMaterialProperty = geneId; + String oligoMaterialProperty = + oligoId + " (" + ScreeningConstants.SIRNA_PLUGIN_TYPE_NAME + ")"; + String geneMaterialProperty = + geneId + " (" + ScreeningConstants.GENE_PLUGIN_TYPE_CODE + ")"; saveWell(wellIdentifier, experimentIdentifier, plateId, oligoMaterialProperty, geneMaterialProperty); }