From 75d977ec5c0b8f1e9de70586453494214321c1b8 Mon Sep 17 00:00:00 2001
From: buczekp <buczekp>
Date: Mon, 14 Feb 2011 22:09:16 +0000
Subject: [PATCH] [LMS-2036] refactoring: moved IEntityInformationProvider to
 api, renamed ScriptUtilityFactory->ManagedPropertyFunctions, stripped 'get'
 from some jython api methods; unit tests

SVN: 19939
---
 .../EntityInformationProvider.java            | 13 ++-
 .../ManagedPropertyEvaluator.java             |  2 +-
 ...ory.java => ManagedPropertyFunctions.java} | 19 +++-
 .../SimpleTableModelBuilderAdaptor.java       |  7 +-
 .../api/EntityLinkElementKind.java            |  7 +-
 .../shared/managed_property/api/IElement.java |  6 +-
 .../managed_property/api/IElementFactory.java |  2 +
 .../{ => api}/IEntityInformationProvider.java | 16 +++-
 .../api/IEntityLinkElement.java               |  3 +-
 .../api/IRowBuilderAdaptor.java               |  2 +-
 .../api/ISimpleTableModelBuilderAdaptor.java  |  2 +-
 .../api/IStructuredPropertyConverter.java     |  6 +-
 .../server/business/bo/AbstractBOTest.java    |  4 +-
 .../EntityInformationProviderTest.java        | 91 +++++++++++++++++++
 ...StructuredPropertyConverterPythonTest.java |  4 +-
 .../structured/structured-property-test.py    |  4 +-
 .../util/SimpleTableModelBuilderTest.java     | 22 ++++-
 17 files changed, 175 insertions(+), 35 deletions(-)
 rename openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/{ScriptUtilityFactory.java => ManagedPropertyFunctions.java} (82%)
 rename openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/{ => api}/IEntityInformationProvider.java (68%)
 create mode 100644 openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/managed_property/EntityInformationProviderTest.java

diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/managed_property/EntityInformationProvider.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/managed_property/EntityInformationProvider.java
index e16f819943f..b0ff3aa9165 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/managed_property/EntityInformationProvider.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/managed_property/EntityInformationProvider.java
@@ -26,7 +26,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.MaterialIdentifier;
 import ch.systemsx.cisd.openbis.generic.shared.dto.MaterialPE;
 import ch.systemsx.cisd.openbis.generic.shared.managed_property.EntityLinkElementTranslator;
-import ch.systemsx.cisd.openbis.generic.shared.managed_property.IEntityInformationProvider;
+import ch.systemsx.cisd.openbis.generic.shared.managed_property.api.IEntityInformationProvider;
 import ch.systemsx.cisd.openbis.generic.shared.managed_property.api.IEntityLinkElement;
 
 /**
@@ -35,10 +35,17 @@ import ch.systemsx.cisd.openbis.generic.shared.managed_property.api.IEntityLinkE
 @Component(value = ResourceNames.ENTITY_INFORMATION_PROVIDER)
 public class EntityInformationProvider implements IEntityInformationProvider
 {
+    // @Autowired
+    private final IDAOFactory daoFactory;
+
     @Autowired
-    private IDAOFactory daoFactory;
+    public EntityInformationProvider(IDAOFactory daoFactory)
+    {
+        assert daoFactory != null;
+        this.daoFactory = daoFactory;
+    }
 
-    public String getIdentifier(EntityKind entityKind, String permId)
+    private String getIdentifier(EntityKind entityKind, String permId)
     {
         IIdentifierHolder identifierHolderOrNull = null;
         switch (entityKind)
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/ManagedPropertyEvaluator.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/ManagedPropertyEvaluator.java
index 02bbd219ccf..2c8bc15bd3d 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/ManagedPropertyEvaluator.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/ManagedPropertyEvaluator.java
@@ -106,7 +106,7 @@ public class ManagedPropertyEvaluator
 
     public ManagedPropertyEvaluator(String scriptExpression)
     {
-        evaluator = new Evaluator("", ScriptUtilityFactory.class, scriptExpression);
+        evaluator = new Evaluator("", ManagedPropertyFunctions.class, scriptExpression);
         updateFromBatchFunctionDefined = evaluator.hasFunction(UPDATE_FROM_BATCH_INPUT_FUNCTION);
         List<String> names = new ArrayList<String>();
         if (evaluator.hasFunction(BATCH_COLUMN_NAMES_FUNCTION))
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/ScriptUtilityFactory.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/ManagedPropertyFunctions.java
similarity index 82%
rename from openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/ScriptUtilityFactory.java
rename to openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/ManagedPropertyFunctions.java
index a58bc5c8708..7db77909214 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/ScriptUtilityFactory.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/ManagedPropertyFunctions.java
@@ -8,6 +8,7 @@ import ch.systemsx.cisd.openbis.generic.shared.ResourceNames;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.api.ValidationException;
 import ch.systemsx.cisd.openbis.generic.shared.managed_property.api.IElement;
 import ch.systemsx.cisd.openbis.generic.shared.managed_property.api.IElementFactory;
+import ch.systemsx.cisd.openbis.generic.shared.managed_property.api.IEntityInformationProvider;
 import ch.systemsx.cisd.openbis.generic.shared.managed_property.api.ISimpleTableModelBuilderAdaptor;
 import ch.systemsx.cisd.openbis.generic.shared.managed_property.api.IStructuredPropertyConverter;
 import ch.systemsx.cisd.openbis.generic.shared.managed_property.structured.ElementFactory;
@@ -19,7 +20,7 @@ import ch.systemsx.cisd.openbis.generic.shared.managed_property.structured.XmlSt
  * All public methods of this class are part of the Managed Properties API.
  */
 @Component(value = ResourceNames.MANAGED_PROPERTY_SCRIPT_UTILITY_FACTORY)
-public class ScriptUtilityFactory
+public class ManagedPropertyFunctions
 {
     private static final IElementFactory ELEMENT_FACTORY_INSTANCE = new ElementFactory();
 
@@ -38,10 +39,10 @@ public class ScriptUtilityFactory
     @Resource(name = ResourceNames.ENTITY_INFORMATION_PROVIDER)
     public void setEntityInformationProvider(IEntityInformationProvider entityInformationProvider)
     {
-        ScriptUtilityFactory.entityInformationProvider = entityInformationProvider;
+        ManagedPropertyFunctions.entityInformationProvider = entityInformationProvider;
     }
 
-    private ScriptUtilityFactory()
+    private ManagedPropertyFunctions()
     {
 
     }
@@ -67,7 +68,7 @@ public class ScriptUtilityFactory
     /**
      * @return a factory object that can be used to create {@link IElement}-s.
      */
-    public static IElementFactory getElementFactory()
+    public static IElementFactory elementFactory()
     {
         return ELEMENT_FACTORY_INSTANCE;
     }
@@ -75,9 +76,17 @@ public class ScriptUtilityFactory
     /**
      * @return a converter that can translate {@link IElement} to/from Strings.
      */
-    public static IStructuredPropertyConverter getPropertyConverter()
+    public static IStructuredPropertyConverter propertyConverter()
     {
         return STRUCTURED_PROPERTY_CONVERTER_INSTANCE;
     }
 
+    /**
+     * @return a provider of information about entities.
+     */
+    public static IEntityInformationProvider entityInformationProvider()
+    {
+        return entityInformationProvider;
+    }
+
 }
\ No newline at end of file
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/SimpleTableModelBuilderAdaptor.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/SimpleTableModelBuilderAdaptor.java
index d9510a6c800..608bece4b35 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/SimpleTableModelBuilderAdaptor.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/SimpleTableModelBuilderAdaptor.java
@@ -21,6 +21,7 @@ import java.util.Date;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityTableCell;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModel;
+import ch.systemsx.cisd.openbis.generic.shared.managed_property.api.IEntityInformationProvider;
 import ch.systemsx.cisd.openbis.generic.shared.managed_property.api.IEntityLinkElement;
 import ch.systemsx.cisd.openbis.generic.shared.managed_property.api.IRowBuilderAdaptor;
 import ch.systemsx.cisd.openbis.generic.shared.managed_property.api.ISimpleTableModelBuilderAdaptor;
@@ -118,7 +119,7 @@ public class SimpleTableModelBuilderAdaptor implements ISimpleTableModelBuilderA
                     final EntityKind entityKind =
                             EntityLinkElementTranslator.translate(value.getEntityLinkKind());
                     final String permId = value.getPermId();
-                    final String identifierOrNull = tryExtractIdentifier(entityKind, permId);
+                    final String identifierOrNull = tryExtractIdentifier(value);
                     return new EntityTableCell(entityKind, permId, identifierOrNull);
                 }
 
@@ -135,8 +136,8 @@ public class SimpleTableModelBuilderAdaptor implements ISimpleTableModelBuilderA
         builder.addFullRow(values);
     }
 
-    private String tryExtractIdentifier(EntityKind entityKind, String permId)
+    private String tryExtractIdentifier(IEntityLinkElement entityLink)
     {
-        return entityInformationProvider.getIdentifier(entityKind, permId);
+        return entityInformationProvider.getIdentifier(entityLink);
     }
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/api/EntityLinkElementKind.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/api/EntityLinkElementKind.java
index 6007831c8d5..f40f4816410 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/api/EntityLinkElementKind.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/api/EntityLinkElementKind.java
@@ -19,15 +19,18 @@ package ch.systemsx.cisd.openbis.generic.shared.managed_property.api;
 /**
  * The type of an entity link.
  * <p>
+ * <b>All methods of this enum are part of the Managed Properties API.</b>
  * 
  * @author Kaloyan Enimanev
  */
 public enum EntityLinkElementKind
 {
 
-    EXPERIMENT("Experiment"), SAMPLE("Sample"), DATA_SET("Dataset", "Data Set"), MATERIAL("Material");
+    EXPERIMENT("Experiment"), SAMPLE("Sample"), DATA_SET("Dataset", "Data Set"), MATERIAL(
+            "Material");
 
     private final String elementName;
+
     private final String label;
 
     private EntityLinkElementKind(String elementName)
@@ -40,7 +43,7 @@ public enum EntityLinkElementKind
         this.elementName = elementName;
         this.label = label;
     }
-    
+
     /**
      * the {@link IElement} name corresponding to the link.
      */
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/api/IElement.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/api/IElement.java
index d2aff9f6329..f5c35b29838 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/api/IElement.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/api/IElement.java
@@ -26,6 +26,8 @@ import java.util.Map;
  * <p>
  * {@link IElement}-s are meant to be used as a convenient, hierarchical property-value persistence
  * technique for managed properties.
+ * <p>
+ * <b>All methods of this interface are part of the Managed Properties API.</b>
  * 
  * @author Piotr Buczek
  * @author Kaloyan Enimanev
@@ -60,9 +62,9 @@ public interface IElement
      * @return all children {@link IElement}-s.
      */
     List<IElement> getChildren();
-    
+
     Map<String, String> getAttributes();
-    
+
     IElement setAttributes(Map<String, String> attributes);
 
     /**
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/api/IElementFactory.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/api/IElementFactory.java
index c83730ed94e..d78be893ad8 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/api/IElementFactory.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/api/IElementFactory.java
@@ -18,6 +18,8 @@ package ch.systemsx.cisd.openbis.generic.shared.managed_property.api;
 
 /**
  * Contains helper method to construct {@link IElement} instances.
+ * <p>
+ * <b>All methods of this enum are part of the Managed Properties API.</b>
  * 
  * @author Kaloyan Enimanev
  */
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/IEntityInformationProvider.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/api/IEntityInformationProvider.java
similarity index 68%
rename from openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/IEntityInformationProvider.java
rename to openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/api/IEntityInformationProvider.java
index 2333d91646c..158fddfa33f 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/IEntityInformationProvider.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/api/IEntityInformationProvider.java
@@ -14,15 +14,21 @@
  * limitations under the License.
  */
 
-package ch.systemsx.cisd.openbis.generic.shared.managed_property;
-
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind;
+package ch.systemsx.cisd.openbis.generic.shared.managed_property.api;
 
 /**
+ * Provides required information about entities.
+ * <p>
+ * <b>All methods of this enum are part of the Managed Properties API.</b>
+ * 
  * @author Piotr Buczek
  */
 public interface IEntityInformationProvider
 {
-    /** @return identifier of entity with given kind and permid, <code>null</code> if such entity doesn't exist */
-    String getIdentifier(EntityKind entityKind, String permId); 
+    /**
+     * @return identifier of entity specified by given link, <code>null</code> if such an entity
+     *         doesn't exist
+     */
+    String getIdentifier(IEntityLinkElement entityLink);
+
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/api/IEntityLinkElement.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/api/IEntityLinkElement.java
index 450a7fad0f0..391ceef7d68 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/api/IEntityLinkElement.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/api/IEntityLinkElement.java
@@ -16,9 +16,10 @@
 
 package ch.systemsx.cisd.openbis.generic.shared.managed_property.api;
 
-
 /**
  * Denotes a link to an entity in the openBIS database.
+ * <p>
+ * <b>All methods of this enum are part of the Managed Properties API.</b>
  * 
  * @author Kaloyan Enimanev
  */
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/api/IRowBuilderAdaptor.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/api/IRowBuilderAdaptor.java
index a83f814cb1d..b58eb0b68d6 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/api/IRowBuilderAdaptor.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/api/IRowBuilderAdaptor.java
@@ -21,7 +21,7 @@ import java.util.Date;
 /**
  * Builder of a row of a simple table.
  * <p>
- * All methods of this interface are part of the Managed Properties API.
+ * <b>All methods of this enum are part of the Managed Properties API.</b>
  * 
  * @see ISimpleTableModelBuilderAdaptor
  * @author Piotr Buczek
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/api/ISimpleTableModelBuilderAdaptor.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/api/ISimpleTableModelBuilderAdaptor.java
index e05b9777cf9..0ab800943b7 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/api/ISimpleTableModelBuilderAdaptor.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/api/ISimpleTableModelBuilderAdaptor.java
@@ -22,7 +22,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.api.ITableModel;
 /**
  * Builder of simple table models. All column titles should be unique.
  * <p>
- * All methods of this interface are part of the Managed Properties API.
+ * <b>All methods of this enum are part of the Managed Properties API.</b>
  * 
  * @author Piotr Buczek
  */
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/api/IStructuredPropertyConverter.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/api/IStructuredPropertyConverter.java
index bd23080a816..a7c63ee69c3 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/api/IStructuredPropertyConverter.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/api/IStructuredPropertyConverter.java
@@ -23,6 +23,8 @@ import ch.systemsx.cisd.openbis.generic.shared.managed_property.structured.Eleme
 
 /**
  * Abstracts the conversion of {@link Element} objects to/from database strings.
+ * <p>
+ * <b>All methods of this enum are part of the Managed Properties API.</b>
  * 
  * @author Kaloyan Enimanev
  */
@@ -34,10 +36,10 @@ public interface IStructuredPropertyConverter
      * @return an empty list if the value is undefined or special.
      */
     List<IElement> convertToElements(IManagedProperty property);
-    
+
     /**
      * @return a {@link String} representation of the specified elements that can be persisted in
-     *         the database. 
+     *         the database.
      */
     String convertToString(List<IElement> elements);
 
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractBOTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractBOTest.java
index 6609f459d47..97fbcd3a043 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractBOTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractBOTest.java
@@ -36,7 +36,6 @@ import ch.systemsx.cisd.openbis.generic.server.dataaccess.IExperimentDAO;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IExternalDataDAO;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IFileFormatTypeDAO;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IGridCustomFilterDAO;
-import ch.systemsx.cisd.openbis.generic.server.dataaccess.ISpaceDAO;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.ILocatorTypeDAO;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IMaterialDAO;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IPersonDAO;
@@ -46,6 +45,7 @@ import ch.systemsx.cisd.openbis.generic.server.dataaccess.IRelationshipTypeDAO;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.ISampleDAO;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.ISampleTypeDAO;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IScriptDAO;
+import ch.systemsx.cisd.openbis.generic.server.dataaccess.ISpaceDAO;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IVocabularyDAO;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IVocabularyTermDAO;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.db.IPermIdDAO;
@@ -186,6 +186,8 @@ public abstract class AbstractBOTest extends AssertJUnit
                     will(returnValue(scriptDAO));
                     allowing(daoFactory).getMaterialDAO();
                     will(returnValue(materialDAO));
+                    allowing(daoFactory).getExperimentDAO();
+                    will(returnValue(experimentDAO));
                 }
             });
     }
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/managed_property/EntityInformationProviderTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/managed_property/EntityInformationProviderTest.java
new file mode 100644
index 00000000000..ce2622f2823
--- /dev/null
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/managed_property/EntityInformationProviderTest.java
@@ -0,0 +1,91 @@
+/*
+ * Copyright 2009 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.business.bo.managed_property;
+
+import org.jmock.Expectations;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+import ch.systemsx.cisd.common.logging.LogInitializer;
+import ch.systemsx.cisd.openbis.generic.server.business.bo.AbstractBOTest;
+import ch.systemsx.cisd.openbis.generic.shared.CommonTestUtils;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.MaterialIdentifier;
+import ch.systemsx.cisd.openbis.generic.shared.dto.ExperimentPE;
+import ch.systemsx.cisd.openbis.generic.shared.dto.SamplePE;
+import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.ExperimentIdentifier;
+import ch.systemsx.cisd.openbis.generic.shared.managed_property.api.IEntityLinkElement;
+import ch.systemsx.cisd.openbis.generic.shared.managed_property.structured.ElementFactory;
+
+/**
+ * @author Piotr Buczek
+ */
+public class EntityInformationProviderTest extends AbstractBOTest
+{
+
+    private EntityInformationProvider provider;
+
+    private ElementFactory elementFactory;
+
+    @BeforeMethod
+    public void setUp()
+    {
+        LogInitializer.init();
+        provider = new EntityInformationProvider(daoFactory);
+        elementFactory = new ElementFactory();
+    }
+
+    @Test
+    public void testGetIdentifier()
+    {
+        final String mCode = "mCode";
+        final String mTypeCode = "mTypeCode";
+        final String sPermId = "sPermId";
+        final String ePermId = "ePermId";
+        final String dPermId = "dPermId";
+        IEntityLinkElement sampleLink = elementFactory.createSampleLink(sPermId);
+        IEntityLinkElement experimentLink = elementFactory.createExperimentLink(ePermId);
+        IEntityLinkElement materialLink = elementFactory.createMaterialLink(mCode, mTypeCode);
+        IEntityLinkElement datasetLink = elementFactory.createDataSetLink(dPermId);
+
+        final SamplePE sample = CommonTestUtils.createSample();
+        final ExperimentPE experiment =
+                CommonTestUtils.createExperiment(new ExperimentIdentifier("proj", "exp"));
+        context.checking(new Expectations()
+            {
+                {
+                    one(sampleDAO).tryToFindByPermID(sPermId);
+                    will(returnValue(sample));
+
+                    one(experimentDAO).tryGetByPermID(ePermId);
+                    will(returnValue(experiment));
+                    one(materialDAO).tryFindMaterial(new MaterialIdentifier(mCode, mTypeCode));
+                    // will(returnValue(any(MaterialPE.class)));
+
+                    one(externalDataDAO).tryToFindDataSetByCode(dPermId);
+                    // will(returnValue(any(DataPE.class)));
+                }
+            });
+
+        String sIdentifier = provider.getIdentifier(sampleLink);
+        assertEquals(sample.getIdentifier(), sIdentifier);
+        String eIdentifier = provider.getIdentifier(experimentLink);
+        assertEquals(experiment.getIdentifier(), eIdentifier);
+        String mIdentifier = provider.getIdentifier(materialLink);
+        String dIdentifier = provider.getIdentifier(datasetLink);
+    }
+
+}
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/structured/StructuredPropertyConverterPythonTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/structured/StructuredPropertyConverterPythonTest.java
index 5f79271b9f1..33806bf1476 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/structured/StructuredPropertyConverterPythonTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/structured/StructuredPropertyConverterPythonTest.java
@@ -29,7 +29,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityProperty;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ManagedEntityProperty;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.api.IManagedProperty;
 import ch.systemsx.cisd.openbis.generic.shared.managed_property.ManagedPropertyEvaluator;
-import ch.systemsx.cisd.openbis.generic.shared.managed_property.ScriptUtilityFactory;
+import ch.systemsx.cisd.openbis.generic.shared.managed_property.ManagedPropertyFunctions;
 import ch.systemsx.cisd.openbis.generic.shared.managed_property.api.IElement;
 
 /**
@@ -55,7 +55,7 @@ public class StructuredPropertyConverterPythonTest extends AssertJUnit
 
         // the script will create several elements and serialize them in the property value
         List<IElement> elements =
-                ScriptUtilityFactory.getPropertyConverter().convertToElements(managedProperty);
+                ManagedPropertyFunctions.propertyConverter().convertToElements(managedProperty);
 
         assertEquals(3, elements.size());
     }
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/structured/structured-property-test.py b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/structured/structured-property-test.py
index 7fc95c5fd40..958557d1202 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/structured/structured-property-test.py
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/structured/structured-property-test.py
@@ -1,5 +1,5 @@
-factory = getElementFactory()
-converter = getPropertyConverter()
+factory = elementFactory()
+converter = propertyConverter()
 
 #
 # we use a function named "configureUI" to test something completely unrelated,
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/util/SimpleTableModelBuilderTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/util/SimpleTableModelBuilderTest.java
index b66a8311890..63a539b6274 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/util/SimpleTableModelBuilderTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/util/SimpleTableModelBuilderTest.java
@@ -196,9 +196,9 @@ public class SimpleTableModelBuilderTest extends AssertJUnit
         rowBuilder.setCell("datasetCol", createDataSetCell("d2"));
         rowBuilder = builder.addRow();
         rowBuilder.setCell("materialCol", SimpleTableModelBuilder.createNullCell());
-        rowBuilder.setCell("sampleCol", createSampleCell("s3"));
+        rowBuilder.setCell("sampleCol", createSampleCell("s3", null));
         rowBuilder.setCell("experimentCol", SimpleTableModelBuilder.createNullCell());
-        rowBuilder.setCell("datasetCol", createDataSetCell("d3"));
+        rowBuilder.setCell("datasetCol", createDataSetCell("d3", "d3 id"));
 
         TableModel tableModel = builder.getTableModel();
 
@@ -225,9 +225,13 @@ public class SimpleTableModelBuilderTest extends AssertJUnit
         assertEquals("d2", rows.get(1).getValues().get(3).toString());
         assertEquals(4, rows.get(2).getValues().size());
         assertEquals("", rows.get(2).getValues().get(0).toString());
-        assertEquals("s3", rows.get(2).getValues().get(1).toString());
+        assertEquals("s3 (missing)", rows.get(2).getValues().get(1).toString());
+        assertEquals(true, ((EntityTableCell) rows.get(2).getValues().get(1)).isMissing());
+        assertEquals("s3", ((EntityTableCell) rows.get(2).getValues().get(1)).getPermId());
         assertEquals("", rows.get(2).getValues().get(2).toString());
-        assertEquals("d3", rows.get(2).getValues().get(3).toString());
+        assertEquals("d3 id", rows.get(2).getValues().get(3).toString());
+        assertEquals(false, ((EntityTableCell) rows.get(2).getValues().get(3)).isMissing());
+        assertEquals("d3", ((EntityTableCell) rows.get(2).getValues().get(3)).getPermId());
     }
 
     private static EntityTableCell createMaterialCell(String permId)
@@ -240,6 +244,11 @@ public class SimpleTableModelBuilderTest extends AssertJUnit
         return new EntityTableCell(EntityKind.SAMPLE, permId);
     }
 
+    private static EntityTableCell createSampleCell(String permId, String identifierOrNull)
+    {
+        return new EntityTableCell(EntityKind.SAMPLE, permId, identifierOrNull);
+    }
+
     private static EntityTableCell createExperimentCell(String permId)
     {
         return new EntityTableCell(EntityKind.EXPERIMENT, permId);
@@ -250,6 +259,11 @@ public class SimpleTableModelBuilderTest extends AssertJUnit
         return new EntityTableCell(EntityKind.DATA_SET, permId);
     }
 
+    private static EntityTableCell createDataSetCell(String permId, String identifierOrNull)
+    {
+        return new EntityTableCell(EntityKind.DATA_SET, permId, identifierOrNull);
+    }
+
     private void assertHeader(String expectedTitle, String expectedID, int expectedDefaultWidth,
             int expectedIndex, DataTypeCode expectedDataType, TableModelColumnHeader header)
     {
-- 
GitLab