From a10e3c2f234463a56605b090193408a4cafd354a Mon Sep 17 00:00:00 2001
From: felmer <felmer>
Date: Tue, 14 Aug 2012 14:05:46 +0000
Subject: [PATCH] SP-141, BIS-99, OBP-83: Export for update unit tested.

SVN: 26368
---
 .../resultset/TableForUpdateExporter.java     |   4 +-
 .../resultset/TableForUpdateExporterTest.java | 151 ++++++++++++++++++
 .../dto/builders/AbstractDataSetBuilder.java  |   7 +
 .../basic/dto/builders/PropertyBuilder.java   |  59 +++++--
 .../basic/dto/builders/SampleBuilder.java     |  46 +++---
 .../util/TypedTableModelBuilderTest.java      |  43 ++++-
 6 files changed, 272 insertions(+), 38 deletions(-)
 create mode 100644 openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/TableForUpdateExporterTest.java

diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/TableForUpdateExporter.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/TableForUpdateExporter.java
index 1e7bfd4fd62..623a6853c83 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/TableForUpdateExporter.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/TableForUpdateExporter.java
@@ -111,7 +111,7 @@ public class TableForUpdateExporter
         {
             if (samples.size() > 1)
             {
-                builder.append("[").append(entry.getKey()).append("]\n");
+                builder.append("[").append(entry.getKey()).append("]").append(lineSeparator);
             }
             builder.append(getTableForSamples(entry, lineSeparator));
         }
@@ -224,7 +224,7 @@ public class TableForUpdateExporter
         List<IEntityProperty> filteredProperties = new ArrayList<IEntityProperty>();
         for (IEntityProperty property : properties)
         {
-            if (property.isDynamic() == false && property.isDynamic() == false)
+            if (property.isDynamic() == false && property.isManaged() == false)
             {
                 filteredProperties.add(property);
             }
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/TableForUpdateExporterTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/TableForUpdateExporterTest.java
new file mode 100644
index 00000000000..a861d4bb334
--- /dev/null
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/TableForUpdateExporterTest.java
@@ -0,0 +1,151 @@
+/*
+ * Copyright 2012 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.client.web.server.resultset;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Date;
+import java.util.List;
+
+import org.testng.AssertJUnit;
+import org.testng.annotations.Test;
+
+import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ColumnDistinctValues;
+import ch.systemsx.cisd.openbis.generic.client.web.client.dto.GridCustomColumnInfo;
+import ch.systemsx.cisd.openbis.generic.client.web.client.dto.GridRowModels;
+import ch.systemsx.cisd.openbis.generic.shared.basic.GridRowModel;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSet;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Experiment;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ISerializableComparable;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample;
+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.builders.ContainerDataSetBuilder;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.builders.DataSetBuilder;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.builders.ExperimentBuilder;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.builders.MaterialBuilder;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.builders.SampleBuilder;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.builders.VocabularyTermBuilder;
+
+/**
+ * @author Franz-Josef Elmer
+ */
+public class TableForUpdateExporterTest extends AssertJUnit
+{
+    @Test
+    public void testExperimentExport()
+    {
+        Experiment e1 = new ExperimentBuilder().identifier("/S/P/E1").getExperiment();
+        Experiment e2 =
+                new ExperimentBuilder().identifier("/S/P/E2").property("P1", "hello")
+                        .getExperiment();
+        ExperimentBuilder e3 = new ExperimentBuilder().identifier("/S/P/E3");
+        e3.property("P2").internal().label("Property 2")
+                .value(new MaterialBuilder().code("ALPHA").type("GENE"));
+        e3.property("P3").managed().value("hello");
+        e3.property("P3").dynamic().value("hello");
+        GridRowModels<TableModelRowWithObject<Experiment>> rows =
+                createGridRowModels(e1, e2, e3.getExperiment());
+
+        String fileContent =
+                TableForUpdateExporter.getExportTableForUpdate(rows, EntityKind.EXPERIMENT, "\n");
+
+        assertEquals("identifier\tproject\tP1\t$P2\n" + "/S/P/E1\t\t\t\n" + "/S/P/E2\t\thello\t\n"
+                + "/S/P/E3\t\t\tALPHA (GENE)\n", fileContent);
+    }
+
+    @Test
+    public void testSampleExportOnlyOneSampleType()
+    {
+        Sample s1 =
+                new SampleBuilder("/S/S1").type("T1")
+                        .partOf(new SampleBuilder("/S/C1").getSample())
+                        .experiment(new ExperimentBuilder().identifier("/S/P/E1").getExperiment())
+                        .getSample();
+        SampleBuilder s2 = new SampleBuilder("/S/S2").type("T1");
+        s2.parents(new SampleBuilder("/S/S1").getSample(), new SampleBuilder("/S/S3").getSample());
+        s2.property("P1").label("p1")
+                .value(new VocabularyTermBuilder("A").label("alpha").getTerm());
+        GridRowModels<TableModelRowWithObject<Sample>> rows =
+                createGridRowModels(s1, s2.getSample());
+
+        String fileContent =
+                TableForUpdateExporter.getExportTableForUpdate(rows, EntityKind.SAMPLE, "\n");
+
+        assertEquals("identifier\tcontainer\tparents\texperiment\tP1\n"
+                + "/S/S1\t/S/C1\t\t/S/P/E1\t\n" + "/S/S2\t\t/S/S1,/S/S3\t\tA\n", fileContent);
+    }
+
+    @Test
+    public void testSampleExportForMixedSampleTypes()
+    {
+        Sample s1 = new SampleBuilder("/S/S1").type("T1").property("P1", "hello").getSample();
+        Sample s2 = new SampleBuilder("/A/S2").type("T1").getSample();
+        SampleBuilder s3 = new SampleBuilder("/S/S3").type("T2");
+        s3.parents(new SampleBuilder("/S/S1").getSample());
+        s3.property("P2").label("p2").value(new Date(1234567L));
+        GridRowModels<TableModelRowWithObject<Sample>> rows =
+                createGridRowModels(s1, s2, s3.getSample());
+
+        String fileContent =
+                TableForUpdateExporter.getExportTableForUpdate(rows, EntityKind.SAMPLE, "\n");
+
+        assertEquals("[T1]\n" + "identifier\tcontainer\tparents\texperiment\tP1\n"
+                + "/A/S2\t\t\t\t\n" + "/S/S1\t\t\t\thello\n" + "[T2]\n"
+                + "identifier\tcontainer\tparents\texperiment\tP2\n"
+                + "/S/S3\t\t/S/S1\t\t1970-01-01 01:20:34 +0100\n", fileContent);
+    }
+
+    @Test
+    public void testDataSetExport()
+    {
+        Experiment experiment = new ExperimentBuilder().identifier("/S/P/E").getExperiment();
+        DataSet ds1 =
+                new DataSetBuilder().code("ds1").experiment(experiment).property("P1", "hello")
+                        .parent(new DataSetBuilder().code("ds3").getDataSet())
+                        .parent(new DataSetBuilder().code("ds4").getDataSet()).getDataSet();
+        DataSet ds2 =
+                new DataSetBuilder().code("ds2").experiment(experiment)
+                        .container(new ContainerDataSetBuilder().code("ds1").getContainerDataSet())
+                        .sample(new SampleBuilder("/S/S1").getSample()).getDataSet();
+        GridRowModels<TableModelRowWithObject<DataSet>> rows = createGridRowModels(ds1, ds2);
+        String fileContent =
+                TableForUpdateExporter.getExportTableForUpdate(rows, EntityKind.DATA_SET, "\n");
+
+        assertEquals("code\tcontainer\tparents\texperiment\tsample\tP1\n"
+                + "ds1\t\tds3,ds4\t/S/P/E\t\thello\n" + "ds2\tds1\t\t/S/P/E\t/S/S1\t\n",
+                fileContent);
+    }
+
+    private <T extends Serializable> GridRowModels<TableModelRowWithObject<T>> createGridRowModels(
+            T... entities)
+    {
+        List<GridRowModel<TableModelRowWithObject<T>>> rows =
+                new ArrayList<GridRowModel<TableModelRowWithObject<T>>>();
+        for (T entity : entities)
+        {
+            rows.add(new GridRowModel<TableModelRowWithObject<T>>(new TableModelRowWithObject<T>(
+                    entity, Collections.<ISerializableComparable> emptyList()), null));
+        }
+        return new GridRowModels<TableModelRowWithObject<T>>(rows,
+                Collections.<TableModelColumnHeader> emptyList(),
+                Collections.<GridCustomColumnInfo> emptyList(),
+                Collections.<ColumnDistinctValues> emptyList());
+    }
+}
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/builders/AbstractDataSetBuilder.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/builders/AbstractDataSetBuilder.java
index 865c7fee8e0..366ceb30688 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/builders/AbstractDataSetBuilder.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/builders/AbstractDataSetBuilder.java
@@ -21,6 +21,7 @@ import java.util.Collection;
 import java.util.Date;
 import java.util.List;
 
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ContainerDataSet;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSet;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataStore;
@@ -64,6 +65,12 @@ public abstract class AbstractDataSetBuilder<T extends AbstractDataSetBuilder<?>
         return asConcreteSubclass();
     }
 
+    public T container(ContainerDataSet container)
+    {
+        dataSet.setContainer(container);
+        return asConcreteSubclass();
+    }
+
     public T experiment(Experiment experiment)
     {
         dataSet.setExperiment(experiment);
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/builders/PropertyBuilder.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/builders/PropertyBuilder.java
index 2a47aee9f8d..3360ea6cbbc 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/builders/PropertyBuilder.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/builders/PropertyBuilder.java
@@ -26,16 +26,36 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataTypeCode;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityProperty;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Material;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.PropertyType;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ServiceVersionHolder;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.VocabularyTerm;
 
 /**
  * Builder for an {@link EntityProperty} instance.
- *
+ * 
  * @author Franz-Josef Elmer
  */
 public class PropertyBuilder
 {
-    private final EntityProperty property = new EntityProperty();
+    private static final class ExtendedEntityProperty extends EntityProperty
+    {
+        private static final long serialVersionUID = ServiceVersionHolder.VERSION;
+
+        private boolean managed;
+
+        @Override
+        public boolean isManaged()
+        {
+            return managed;
+        }
+
+        void setManaged(boolean managed)
+        {
+            this.managed = managed;
+        }
+
+    }
+
+    private final ExtendedEntityProperty property = new ExtendedEntityProperty();
 
     /**
      * Creates an instance for specified property type code which also the simple code. Data type is
@@ -49,7 +69,7 @@ public class PropertyBuilder
         property.setPropertyType(propertyType);
         type(DataTypeCode.VARCHAR);
     }
-    
+
     public PropertyBuilder type(DataTypeCode dataType)
     {
         property.getPropertyType().setDataType(new DataType(dataType));
@@ -61,7 +81,7 @@ public class PropertyBuilder
         property.getPropertyType().setLabel(label);
         return this;
     }
-    
+
     /**
      * Sets property type to internal name space and adds a '$' code prefix.
      */
@@ -72,27 +92,39 @@ public class PropertyBuilder
         propertyType.setCode("$" + propertyType.getSimpleCode());
         return this;
     }
-    
+
+    public PropertyBuilder dynamic()
+    {
+        property.setDynamic(true);
+        return this;
+    }
+
+    public PropertyBuilder managed()
+    {
+        property.setManaged(true);
+        return this;
+    }
+
     public PropertyBuilder value(String value)
     {
         property.setValue(value);
         return this;
     }
-    
+
     public PropertyBuilder value(int value)
     {
         type(DataTypeCode.INTEGER);
         property.setValue(Integer.toString(value));
         return this;
     }
-    
+
     public PropertyBuilder value(double value)
     {
         type(DataTypeCode.REAL);
         property.setValue(Double.toString(value));
         return this;
     }
-    
+
     public PropertyBuilder value(Date value)
     {
         type(DataTypeCode.TIMESTAMP);
@@ -100,30 +132,29 @@ public class PropertyBuilder
         property.setValue(formatedDate);
         return this;
     }
-    
+
     public PropertyBuilder value(MaterialBuilder builder)
     {
         return value(builder.getMaterial());
     }
-    
+
     public PropertyBuilder value(Material value)
     {
         type(DataTypeCode.MATERIAL);
         property.setMaterial(value);
         return this;
     }
-    
+
     public PropertyBuilder value(VocabularyTerm value)
     {
         type(DataTypeCode.CONTROLLEDVOCABULARY);
         property.setVocabularyTerm(value);
         return this;
     }
-    
+
     public EntityProperty getProperty()
     {
         return property;
     }
-    
-    
+
 }
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/builders/SampleBuilder.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/builders/SampleBuilder.java
index f61d9131d0e..bfd3849f45d 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/builders/SampleBuilder.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/builders/SampleBuilder.java
@@ -23,9 +23,9 @@ import java.util.LinkedHashSet;
 import java.util.List;
 
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseInstance;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Deletion;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Experiment;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IEntityProperty;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Deletion;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Person;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SampleType;
@@ -36,36 +36,36 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SpaceIdentifier;
 
 /**
  * Builder for an instance of {@link Sample}.
- *
+ * 
  * @author Franz-Josef Elmer
  */
 public class SampleBuilder
 {
     private Sample sample = new Sample();
-    
+
     public SampleBuilder()
     {
         sample.setProperties(new ArrayList<IEntityProperty>());
     }
-    
+
     public SampleBuilder(String identifier)
     {
         this();
         identifier(identifier);
     }
-    
+
     public SampleBuilder id(long id)
     {
         sample.setId(id);
         return this;
     }
-    
+
     public SampleBuilder code(String code)
     {
         sample.setCode(code);
         return this;
     }
-    
+
     public SampleBuilder identifier(String identifier)
     {
         sample.setIdentifier(identifier);
@@ -91,7 +91,7 @@ public class SampleBuilder
         }
         return this;
     }
-    
+
     public SampleBuilder type(String typeCode)
     {
         SampleType sampleType = new SampleType();
@@ -104,61 +104,67 @@ public class SampleBuilder
         sample.setSampleType(sampleType);
         return this;
     }
-    
+
     public SampleBuilder markDeleted()
     {
         sample.setDeletion(new Deletion());
         return this;
     }
-    
+
     public SampleBuilder registrator(Person person)
     {
         sample.setRegistrator(person);
         return this;
     }
-    
+
     public SampleBuilder date(Date date)
     {
         sample.setRegistrationDate(date);
         return this;
     }
-    
+
     public SampleBuilder modificationDate(Date date)
     {
         sample.setModificationDate(date);
         return this;
     }
-    
+
     public SampleBuilder experiment(Experiment experiment)
     {
         sample.setExperiment(experiment);
         return this;
     }
-    
+
     public SampleBuilder permID(String permID)
     {
         sample.setPermId(permID);
         return this;
     }
-    
+
     public SampleBuilder permLink(String permLink)
     {
         sample.setPermlink(permLink);
         return this;
     }
-    
+
     public SampleBuilder childOf(Sample... parents)
     {
         sample.setParents(new LinkedHashSet<Sample>(Arrays.asList(parents)));
         return this;
     }
-    
+
     public SampleBuilder partOf(Sample container)
     {
         sample.setContainer(container);
         return this;
     }
-    
+
+    public SampleBuilder parents(Sample... parents)
+    {
+        sample.setParents(new LinkedHashSet<Sample>(Arrays.asList(parents)));
+        return this;
+    }
+
     public PropertyBuilder property(String key)
     {
         List<IEntityProperty> properties = sample.getProperties();
@@ -166,13 +172,13 @@ public class SampleBuilder
         properties.add(propertyBuilder.getProperty());
         return propertyBuilder;
     }
-    
+
     public SampleBuilder property(String key, String value)
     {
         property(key).value(value);
         return this;
     }
-    
+
     public Sample getSample()
     {
         return sample;
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/util/TypedTableModelBuilderTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/util/TypedTableModelBuilderTest.java
index a63c3146138..e7aef2ebdeb 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/util/TypedTableModelBuilderTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/util/TypedTableModelBuilderTest.java
@@ -37,6 +37,8 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.StringTableCell;
 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.VocabularyTerm;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.builders.MaterialBuilder;
 
 /**
  * @author Franz-Josef Elmer
@@ -121,7 +123,6 @@ public class TypedTableModelBuilderTest extends AssertJUnit
 
         TypedTableModel<Serializable> model = builder.getModel();
         List<TableModelColumnHeader> headers = model.getHeader();
-        System.out.println("HEADERS:" + headers);
         assertHeadersOrder(headers, "MY-USER-ALPHA", "MY-INTERN-BETA", "MY-USER-GAMMA",
                 "MY-USER-KAPPA");
         assertEquals("alpha", headers.get(0).getTitle());
@@ -145,6 +146,31 @@ public class TypedTableModelBuilderTest extends AssertJUnit
         assertEquals(2, rows.size());
     }
 
+    @Test
+    public void testAddPropertiesForUpdate()
+    {
+        TypedTableModelBuilder<Serializable> builder = new TypedTableModelBuilder<Serializable>();
+        builder.addRow(new MockSerializable());
+        IEntityProperty p1 = property("beta", "3.25", true, DataTypeCode.REAL);
+        IEntityProperty p2 = property("alpha", "hello", false, DataTypeCode.MATERIAL);
+        IEntityProperty p3 = property("gamma", "hello world", false, DataTypeCode.VARCHAR);
+        IEntityProperty p4 = property("delta", "hi", false, DataTypeCode.CONTROLLEDVOCABULARY);
+        IEntityProperty p5 =
+                property("kappa", "2012-08-14 15:11:12", false, DataTypeCode.TIMESTAMP);
+        builder.columnGroup("g").addPropertiesForUpdate(Arrays.asList(p1, p2, p3, p4, p5));
+
+        TypedTableModel<Serializable> model = builder.getModel();
+        List<TableModelColumnHeader> headers = model.getHeader();
+        assertHeadersOrder(headers, "ALPHA", "$BETA", "DELTA", "GAMMA", "KAPPA");
+        List<TableModelRowWithObject<Serializable>> rows = model.getRows();
+        assertEquals(new StringTableCell("HELLO (TEST)"), rows.get(0).getValues().get(0));
+        assertEquals(new StringTableCell("3.25"), rows.get(0).getValues().get(1));
+        assertEquals(new StringTableCell("HI"), rows.get(0).getValues().get(2));
+        assertEquals(new StringTableCell("hello world"), rows.get(0).getValues().get(3));
+        assertEquals(new StringTableCell("2012-08-14 15:11:12"), rows.get(0).getValues().get(4));
+        assertEquals(1, rows.size());
+    }
+
     private IEntityProperty property(String key, String value, boolean internalNamespace,
             DataTypeCode type)
     {
@@ -157,7 +183,20 @@ public class TypedTableModelBuilderTest extends AssertJUnit
         propertyType.setLabel(key);
         propertyType.setDataType(new DataType(type));
         property.setPropertyType(propertyType);
-        property.setValue(value);
+        if (type == DataTypeCode.CONTROLLEDVOCABULARY)
+        {
+            VocabularyTerm vocabularyTerm = new VocabularyTerm();
+            vocabularyTerm.setCode(value.toUpperCase());
+            vocabularyTerm.setLabel(value);
+            property.setVocabularyTerm(vocabularyTerm);
+        } else if (type == DataTypeCode.MATERIAL)
+        {
+            property.setMaterial(new MaterialBuilder().code(value.toUpperCase()).type("TEST")
+                    .getMaterial());
+        } else
+        {
+            property.setValue(value);
+        }
         return property;
     }
 
-- 
GitLab