From 139b1db075c9ac3eab65fedcf31655abbf3e8bff Mon Sep 17 00:00:00 2001
From: felmer <felmer>
Date: Mon, 19 Mar 2012 13:20:51 +0000
Subject: [PATCH] bug fixed: If a sample property of type MATERIAL or
 VOCABULARY is a dynamic property and not yet calculated all sample grids
 showing such samples had lead to an exception.

SVN: 24748
---
 .../shared/util/TypedTableModelBuilder.java   | 25 ++++++++++++++++---
 1 file changed, 21 insertions(+), 4 deletions(-)

diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/util/TypedTableModelBuilder.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/util/TypedTableModelBuilder.java
index 06ba2ffa81a..d9272ee5bfc 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/util/TypedTableModelBuilder.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/util/TypedTableModelBuilder.java
@@ -45,6 +45,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityTypePropertyType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IEntityProperty;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ISerializableComparable;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IntegerTableCell;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Material;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Person;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.PropertyType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.StringTableCell;
@@ -52,6 +53,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModelColumnHeader;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModelRowWithObject;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TypedTableModel;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Vocabulary;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.VocabularyTerm;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.VocabularyTermTableCell;
 
 /**
@@ -203,12 +205,27 @@ public class TypedTableModelBuilder<T extends Serializable>
                 switch (dataType)
                 {
                     case MATERIAL:
-                        value =
-                                new EntityTableCell(EntityKind.MATERIAL, property.getMaterial()
-                                        .getIdentifier());
+
+                        Material material = property.getMaterial();
+                        if (material == null) // if not yet calculated dynamic property
+                        {
+                            value = new StringTableCell("");
+                        } else
+                        {
+                            value =
+                                    new EntityTableCell(EntityKind.MATERIAL,
+                                            material.getIdentifier());
+                        }
                         break;
                     case CONTROLLEDVOCABULARY:
-                        value = new VocabularyTermTableCell(property.getVocabularyTerm());
+                        VocabularyTerm vocabularyTerm = property.getVocabularyTerm();
+                        if (vocabularyTerm == null) // if not yet calculated dynamic property
+                        {
+                            value = new StringTableCell("");
+                        } else
+                        {
+                            value = new VocabularyTermTableCell(vocabularyTerm);
+                        }
                         break;
                     default:
                         value = DataTypeUtils.convertTo(dataType, property.tryGetAsString());
-- 
GitLab