From 8a107216d45f095fbb919183f0b73d4208b117eb Mon Sep 17 00:00:00 2001
From: felmer <felmer>
Date: Mon, 11 Mar 2013 07:36:20 +0000
Subject: [PATCH] SP-482, BIS-318: Logic of creating MaterialIdentifier based
 on full string identifier or code and type extracted out of
 EntityPropertiesConverter into MaterialIdentifier. This logic is used in
 EntityExistenceChecker when checking sample properties.
 LibraryEntityRegistrator reverted back to the version before the quick fix.

SVN: 28569
---
 .../dataaccess/EntityPropertiesConverter.java | 17 ++---------
 .../shared/basic/dto/MaterialIdentifier.java  | 30 +++++++++++++++++++
 .../server/EntityExistenceChecker.java        | 10 ++-----
 .../LibraryEntityRegistrator.java             |  6 ++--
 4 files changed, 39 insertions(+), 24 deletions(-)

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 fa9514d3241..d49dd893838 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 090ddbcd5aa..74394898bc2 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 beb664c7fca..27d4e213008 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 c3c2e31deae..98dada26ba6 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);
         }
-- 
GitLab