From 49a64df74b99721b0f702c74db4faaf1615c84c3 Mon Sep 17 00:00:00 2001
From: buczekp <buczekp>
Date: Wed, 9 Mar 2011 20:28:43 +0000
Subject: [PATCH] [LMS-1979] allow to change text of displayed entity links and
 load sample's permId by code

SVN: 20275
---
 .../EntityInformationProvider.java            | 49 ++++++++++++++++---
 .../SimpleTableModelBuilderAdaptor.java       | 17 +++++--
 .../api/IEntityInformationProvider.java       | 12 +++++
 .../api/IRowBuilderAdaptor.java               | 17 +++++--
 4 files changed, 80 insertions(+), 15 deletions(-)

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 b0ff3aa9165..fa17d2b22ff 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
@@ -19,12 +19,18 @@ package ch.systemsx.cisd.openbis.generic.server.business.bo.managed_property;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
+import ch.systemsx.cisd.openbis.generic.client.web.client.exception.UserFailureException;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDAOFactory;
 import ch.systemsx.cisd.openbis.generic.shared.ResourceNames;
 import ch.systemsx.cisd.openbis.generic.shared.basic.IIdentifierHolder;
 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.DatabaseInstancePE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.MaterialPE;
+import ch.systemsx.cisd.openbis.generic.shared.dto.SamplePE;
+import ch.systemsx.cisd.openbis.generic.shared.dto.SpacePE;
+import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleIdentifier;
+import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleIdentifierFactory;
 import ch.systemsx.cisd.openbis.generic.shared.managed_property.EntityLinkElementTranslator;
 import ch.systemsx.cisd.openbis.generic.shared.managed_property.api.IEntityInformationProvider;
 import ch.systemsx.cisd.openbis.generic.shared.managed_property.api.IEntityLinkElement;
@@ -35,7 +41,6 @@ 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
@@ -45,6 +50,14 @@ public class EntityInformationProvider implements IEntityInformationProvider
         this.daoFactory = daoFactory;
     }
 
+    public String getIdentifier(IEntityLinkElement entityLink)
+    {
+        final EntityKind entityKind =
+                EntityLinkElementTranslator.translate(entityLink.getEntityLinkKind());
+        final String permId = entityLink.getPermId();
+        return getIdentifier(entityKind, permId);
+    }
+
     private String getIdentifier(EntityKind entityKind, String permId)
     {
         IIdentifierHolder identifierHolderOrNull = null;
@@ -89,12 +102,36 @@ public class EntityInformationProvider implements IEntityInformationProvider
         return identifierHolderOrNull == null ? null : identifierHolderOrNull.getIdentifier();
     }
 
-    public String getIdentifier(IEntityLinkElement entityLink)
+    public String getSamplePermId(String spaceCode, String sampleCode)
     {
-        final EntityKind entityKind =
-                EntityLinkElementTranslator.translate(entityLink.getEntityLinkKind());
-        final String permId = entityLink.getPermId();
-        return getIdentifier(entityKind, permId);
+        DatabaseInstancePE homeInstance = daoFactory.getDatabaseInstanceDAO().getHomeInstance();
+        SpacePE space =
+                daoFactory.getSpaceDAO().tryFindSpaceByCodeAndDatabaseInstance(spaceCode,
+                        homeInstance);
+        if (space == null)
+        {
+            throw new UserFailureException("space " + spaceCode + " doesn't exist");
+        }
+        SamplePE sample = daoFactory.getSampleDAO().tryFindByCodeAndSpace(sampleCode, space);
+        return (sample != null) ? sample.getPermId() : null;
+    }
+
+    public String getSamplePermId(String sampleIdentifier)
+    {
+        SampleIdentifier identifier = SampleIdentifierFactory.parse(sampleIdentifier);
+        String sampleCode = identifier.getSampleCode();
+        if (identifier.isSpaceLevel())
+        {
+            String spaceCode = identifier.getSpaceLevel().getSpaceCode();
+            return getSamplePermId(spaceCode, sampleCode);
+        } else
+        {
+            DatabaseInstancePE homeInstance = daoFactory.getDatabaseInstanceDAO().getHomeInstance();
+            SamplePE sample =
+                    daoFactory.getSampleDAO().tryFindByCodeAndDatabaseInstance(sampleCode,
+                            homeInstance);
+            return (sample != null) ? sample.getPermId() : null;
+        }
     }
 
 }
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 608bece4b35..91ba4deb46b 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
@@ -111,18 +111,27 @@ public class SimpleTableModelBuilderAdaptor implements ISimpleTableModelBuilderA
 
                 public void setCell(String headerTitle, IEntityLinkElement value)
                 {
-                    row.setCell(headerTitle, asTableCell(value));
+                    row.setCell(headerTitle, asTableCell(value, null));
                 }
 
-                private EntityTableCell asTableCell(IEntityLinkElement value)
+                public void setCell(String headerTitle, IEntityLinkElement value, String linkText)
+                {
+                    row.setCell(headerTitle, asTableCell(value, linkText));
+                }
+
+                private EntityTableCell asTableCell(IEntityLinkElement value,
+                        String linkTextOrNull)
                 {
                     final EntityKind entityKind =
                             EntityLinkElementTranslator.translate(value.getEntityLinkKind());
                     final String permId = value.getPermId();
                     final String identifierOrNull = tryExtractIdentifier(value);
-                    return new EntityTableCell(entityKind, permId, identifierOrNull);
-                }
 
+                    final EntityTableCell result =
+                            new EntityTableCell(entityKind, permId, identifierOrNull);
+                    result.setLinkText(linkTextOrNull);
+                    return result;
+                }
             };
     }
 
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/api/IEntityInformationProvider.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/api/IEntityInformationProvider.java
index 158fddfa33f..75f64702669 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/api/IEntityInformationProvider.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/api/IEntityInformationProvider.java
@@ -31,4 +31,16 @@ public interface IEntityInformationProvider
      */
     String getIdentifier(IEntityLinkElement entityLink);
 
+    /**
+     * @return permId of entity specified by given space and sample, <code>null</code> if such an
+     *         entity doesn't exist
+     */
+    String getSamplePermId(String spaceCode, String sampleCode);
+
+    /**
+     * @return permId of entity specified by given identifier, <code>null</code> if such an entity
+     *         doesn't exist
+     */
+    String getSamplePermId(String sampleIdentifier);
+
 }
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 b58eb0b68d6..591de197394 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
@@ -30,28 +30,35 @@ public interface IRowBuilderAdaptor
 {
 
     /**
-     * Sets the value of the column specified by the header title by the specified string.
+     * Sets the value of the column specified by the header title to the specified string.
      */
     public void setCell(String headerTitle, String value);
 
     /**
-     * Sets the value of the column specified by the header title by the specified long value.
+     * Sets the value of the column specified by the header title to the specified long value.
      */
     public void setCell(String headerTitle, long value);
 
     /**
-     * Sets the value of the column specified by the header title by the specified double value.
+     * Sets the value of the column specified by the header title to the specified double value.
      */
     public void setCell(String headerTitle, double value);
 
     /**
-     * Sets the value of the column specified by the header title by the specified date.
+     * Sets the value of the column specified by the header title to the specified date.
      */
     public void setCell(String headerTitle, Date value);
 
     /**
-     * Sets the value of the column specified by the header title by the specified entity link.
+     * Sets the value of the column specified by the header title to the specified entity link
+     * rendered using identifier.
      */
     public void setCell(String headerTitle, IEntityLinkElement value);
 
+    /**
+     * Sets the value of the column specified by the header title to the specified entity link
+     * rendered using given text.
+     */
+    public void setCell(String headerTitle, IEntityLinkElement value, String linkText);
+
 }
-- 
GitLab