From fe6b0e19c4eeaa59ac2857725ecc6f4ebee3b3a2 Mon Sep 17 00:00:00 2001
From: felmer <felmer>
Date: Tue, 6 Dec 2011 13:28:38 +0000
Subject: [PATCH] LMS-2693 IDataSetImmatable and implementations extends by
 getDataSetTypeWithPropertyTypes().

SVN: 23891
---
 ...ractDataSetRegistrationDetailsFactory.java |  4 +-
 .../api/v1/impl/AbstractDataSetImmutable.java | 66 +++++++++++++++++++
 .../api/v1/impl/AbstractTransactionState.java |  4 +-
 .../registrator/api/v1/impl/DataSet.java      | 21 +++++-
 .../api/v1/impl/DataSetImmutable.java         | 14 +++-
 .../api/v1/impl/DataSetUpdatable.java         |  5 +-
 .../api/v1/impl/SearchService.java            |  2 +-
 .../api/internal/v1/IDataSetImmutable.java    | 10 +++
 .../DataSetRegistrationTransactionTest.java   |  2 +-
 .../registrator/api/v1/impl/DataSetTest.java  |  2 +-
 .../generic/server/api/v1/Translator.java     |  2 +-
 11 files changed, 118 insertions(+), 14 deletions(-)
 create mode 100644 datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/AbstractDataSetImmutable.java

diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/AbstractDataSetRegistrationDetailsFactory.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/AbstractDataSetRegistrationDetailsFactory.java
index 5bb10d89d61..c3d0ed6af6b 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/AbstractDataSetRegistrationDetailsFactory.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/AbstractDataSetRegistrationDetailsFactory.java
@@ -21,6 +21,7 @@ import java.util.List;
 
 import ch.systemsx.cisd.etlserver.registrator.AbstractOmniscientTopLevelDataSetRegistrator.OmniscientTopLevelDataSetRegistratorState;
 import ch.systemsx.cisd.etlserver.registrator.api.v1.impl.DataSet;
+import ch.systemsx.cisd.openbis.dss.generic.shared.IEncapsulatedOpenBISService;
 import ch.systemsx.cisd.openbis.dss.generic.shared.dto.DataSetInformation;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetType;
 import ch.systemsx.cisd.openbis.generic.shared.dto.NewProperty;
@@ -71,7 +72,8 @@ public abstract class AbstractDataSetRegistrationDetailsFactory<T extends DataSe
     public DataSet<T> createDataSet(DataSetRegistrationDetails<T> registrationDetails,
             File stagingFile)
     {
-        return new DataSet<T>(registrationDetails, stagingFile);
+        IEncapsulatedOpenBISService service = registratorState.getGlobalState().getOpenBisService();
+        return new DataSet<T>(registrationDetails, stagingFile, service);
     }
 
     /**
diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/AbstractDataSetImmutable.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/AbstractDataSetImmutable.java
new file mode 100644
index 00000000000..2f25492cee1
--- /dev/null
+++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/AbstractDataSetImmutable.java
@@ -0,0 +1,66 @@
+/*
+ * Copyright 2011 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.etlserver.registrator.api.v1.impl;
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+
+import ch.systemsx.cisd.openbis.dss.generic.shared.IEncapsulatedOpenBISService;
+import ch.systemsx.cisd.openbis.dss.generic.shared.api.internal.v1.IDataSetImmutable;
+import ch.systemsx.cisd.openbis.generic.server.api.v1.Translator;
+import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.ControlledVocabularyPropertyType;
+import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.DataSetType;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetTypePropertyType;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetTypeWithVocabularyTerms;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Vocabulary;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.VocabularyTerm;
+
+/**
+ * Abstract super class of all {@link IDataSetImmutable} implementations.
+ *
+ * @author Franz-Josef Elmer
+ */
+abstract class AbstractDataSetImmutable implements IDataSetImmutable 
+{
+    protected final IEncapsulatedOpenBISService service;
+
+    AbstractDataSetImmutable(IEncapsulatedOpenBISService service)
+    {
+        this.service = service;
+    }
+    
+    protected DataSetType getDataSetTypeWithPropertyTypes(String dataSetTypeCode)
+    {
+        DataSetTypeWithVocabularyTerms dataSetType = service.getDataSetType(dataSetTypeCode);
+        HashMap<Vocabulary, List<ControlledVocabularyPropertyType.VocabularyTerm>> termsMap =
+                new HashMap<Vocabulary, List<ControlledVocabularyPropertyType.VocabularyTerm>>();
+        for (DataSetTypePropertyType dataSetTypePropertyType : dataSetType.getDataSetType()
+                .getAssignedPropertyTypes())
+        {
+            Vocabulary vocabulary = dataSetTypePropertyType.getPropertyType().getVocabulary();
+            if (vocabulary != null)
+            {
+                Collection<VocabularyTerm> vocabularyTerms =
+                        service.listVocabularyTerms(vocabulary.getCode());
+                termsMap.put(vocabulary, Translator.translatePropertyTypeTerms(vocabularyTerms));
+            }
+        }
+        return Translator.translate(dataSetType.getDataSetType(), termsMap);
+    }
+
+}
diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/AbstractTransactionState.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/AbstractTransactionState.java
index d8c14cb60dc..6de38830ec0 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/AbstractTransactionState.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/AbstractTransactionState.java
@@ -370,7 +370,7 @@ abstract class AbstractTransactionState<T extends DataSetInformation>
                 return null;
             } else
             {
-                return new DataSetImmutable(dataSet);
+                return new DataSetImmutable(dataSet, openBisService);
             }
         }
 
@@ -389,7 +389,7 @@ abstract class AbstractTransactionState<T extends DataSetInformation>
                 return null;
             } else
             {
-                result = new DataSetUpdatable(dataSet);
+                result = new DataSetUpdatable(dataSet, openBisService);
                 dataSetsToBeUpdated.add(result);
                 return result;
             }
diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSet.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSet.java
index 99e2d4a6ebc..f83c3e7ccde 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSet.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSet.java
@@ -22,12 +22,15 @@ import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
 
+import ch.systemsx.cisd.common.exceptions.UserFailureException;
 import ch.systemsx.cisd.etlserver.registrator.DataSetRegistrationDetails;
 import ch.systemsx.cisd.etlserver.registrator.api.v1.IDataSet;
+import ch.systemsx.cisd.openbis.dss.generic.shared.IEncapsulatedOpenBISService;
 import ch.systemsx.cisd.openbis.dss.generic.shared.api.internal.v1.IDataSetImmutable;
 import ch.systemsx.cisd.openbis.dss.generic.shared.api.internal.v1.IExperimentImmutable;
 import ch.systemsx.cisd.openbis.dss.generic.shared.api.internal.v1.ISampleImmutable;
 import ch.systemsx.cisd.openbis.dss.generic.shared.dto.DataSetInformation;
+import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.DataSetType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Experiment;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.FileFormatType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample;
@@ -41,7 +44,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.ExperimentIdentifi
  * 
  * @author Chandrasekhar Ramakrishnan
  */
-public class DataSet<T extends DataSetInformation> implements IDataSet
+public class DataSet<T extends DataSetInformation> extends AbstractDataSetImmutable implements IDataSet
 {
     private final DataSetRegistrationDetails<? extends T> registrationDetails;
 
@@ -52,8 +55,10 @@ public class DataSet<T extends DataSetInformation> implements IDataSet
 
     private ISampleImmutable sampleOrNull;
 
-    public DataSet(DataSetRegistrationDetails<? extends T> registrationDetails, File dataSetFolder)
+    public DataSet(DataSetRegistrationDetails<? extends T> registrationDetails, File dataSetFolder,
+            IEncapsulatedOpenBISService service)
     {
+        super(service);
         this.registrationDetails = registrationDetails;
         this.dataSetFolder = dataSetFolder;
     }
@@ -186,6 +191,18 @@ public class DataSet<T extends DataSetInformation> implements IDataSet
         return registrationDetails.getDataSetType().getCode();
     }
 
+    public DataSetType getDataSetTypeWithPropertyTypes()
+    {
+        String dataSetTypeCode = getDataSetType();
+        if (dataSetTypeCode == null)
+        {
+            throw new UserFailureException(
+                    "Unkown data set type. Data set type code has to be set "
+                            + "before invoking getDataSetTypeWithPropertyTypes().");
+        }
+        return getDataSetTypeWithPropertyTypes(dataSetTypeCode);
+    }
+
     public void setDataSetType(String dataSetTypeCode)
     {
         registrationDetails.setDataSetType(dataSetTypeCode);
diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSetImmutable.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSetImmutable.java
index 36969b95cf4..bf92954dd7a 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSetImmutable.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSetImmutable.java
@@ -20,9 +20,11 @@ import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 
+import ch.systemsx.cisd.openbis.dss.generic.shared.IEncapsulatedOpenBISService;
 import ch.systemsx.cisd.openbis.dss.generic.shared.api.internal.v1.IDataSetImmutable;
 import ch.systemsx.cisd.openbis.dss.generic.shared.api.internal.v1.IExperimentImmutable;
 import ch.systemsx.cisd.openbis.dss.generic.shared.api.internal.v1.ISampleImmutable;
+import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.DataSetType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Code;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExternalData;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IEntityProperty;
@@ -33,12 +35,13 @@ import ch.systemsx.cisd.openbis.generic.shared.util.EntityHelper;
  * 
  * @author Chandrasekhar Ramakrishnan
  */
-public class DataSetImmutable implements IDataSetImmutable
+public class DataSetImmutable extends AbstractDataSetImmutable
 {
     protected final ExternalData dataSet;
 
-    public DataSetImmutable(ExternalData dataSet)
+    public DataSetImmutable(ExternalData dataSet, IEncapsulatedOpenBISService service)
     {
+        super(service);
         this.dataSet = dataSet;
     }
 
@@ -96,6 +99,11 @@ public class DataSetImmutable implements IDataSetImmutable
         return dataSet.getDataSetType().getCode();
     }
 
+    public DataSetType getDataSetTypeWithPropertyTypes()
+    {
+        return getDataSetTypeWithPropertyTypes(getDataSetType());
+    }
+
     public String getPropertyValue(String propertyCode)
     {
         return EntityHelper.tryFindPropertyValue(dataSet, propertyCode);
@@ -141,7 +149,7 @@ public class DataSetImmutable implements IDataSetImmutable
         {
             for (ExternalData child : children)
             {
-                result.add(new DataSetImmutable(child));
+                result.add(new DataSetImmutable(child, service));
             }
         }
         return result;
diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSetUpdatable.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSetUpdatable.java
index 84a0cde25c8..d926ed801dc 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSetUpdatable.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSetUpdatable.java
@@ -20,6 +20,7 @@ import java.util.ArrayList;
 import java.util.List;
 
 import ch.systemsx.cisd.etlserver.registrator.api.v1.IDataSetUpdatable;
+import ch.systemsx.cisd.openbis.dss.generic.shared.IEncapsulatedOpenBISService;
 import ch.systemsx.cisd.openbis.dss.generic.shared.api.internal.v1.IExperimentImmutable;
 import ch.systemsx.cisd.openbis.dss.generic.shared.api.internal.v1.ISampleImmutable;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExternalData;
@@ -36,9 +37,9 @@ import ch.systemsx.cisd.openbis.generic.shared.util.EntityHelper;
  */
 public class DataSetUpdatable extends DataSetImmutable implements IDataSetUpdatable
 {
-    public DataSetUpdatable(ExternalData dataSet)
+    public DataSetUpdatable(ExternalData dataSet, IEncapsulatedOpenBISService service)
     {
-        super(dataSet);
+        super(dataSet, service);
         if (dataSet.getProperties() == null)
         {
             dataSet.setDataSetProperties(new ArrayList<IEntityProperty>());
diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/SearchService.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/SearchService.java
index 31886fa5b2a..9f3f2b2f4ab 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/SearchService.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/SearchService.java
@@ -102,7 +102,7 @@ class SearchService implements ISearchService
                 new ArrayList<IDataSetImmutable>(serverDataSets.size());
         for (ExternalData dataSet : serverDataSets)
         {
-            dataSets.add(new DataSetImmutable(dataSet));
+            dataSets.add(new DataSetImmutable(dataSet, openBisService));
         }
         return dataSets;
     }
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/api/internal/v1/IDataSetImmutable.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/api/internal/v1/IDataSetImmutable.java
index 639fd29b262..96df62cc75b 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/api/internal/v1/IDataSetImmutable.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/api/internal/v1/IDataSetImmutable.java
@@ -18,6 +18,8 @@ package ch.systemsx.cisd.openbis.dss.generic.shared.api.internal.v1;
 
 import java.util.List;
 
+import ch.systemsx.cisd.common.exceptions.UserFailureException;
+import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.DataSetType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.FileFormatType;
 
 /**
@@ -71,6 +73,14 @@ public interface IDataSetImmutable
      * data set.
      */
     public String getDataSetType();
+    
+    /**
+     * Returns data set type with property types and vocabulary terms for all property types with
+     * vocabulary data type.
+     * 
+     * @throws UserFailureException if data set type code hasn't been defined.
+     */
+    public DataSetType getDataSetTypeWithPropertyTypes();
 
     /**
      * Returns the speed hint.
diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSetRegistrationTransactionTest.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSetRegistrationTransactionTest.java
index b5f8a0e968c..206e5e7dd1e 100644
--- a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSetRegistrationTransactionTest.java
+++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSetRegistrationTransactionTest.java
@@ -701,7 +701,7 @@ public class DataSetRegistrationTransactionTest extends AbstractFileSystemTestCa
         public DataSet<DataSetInformation> createDataSet(
                 DataSetRegistrationDetails<DataSetInformation> registrationDetails, File stagingFile)
         {
-            return new DataSet<DataSetInformation>(registrationDetails, stagingFile);
+            return new DataSet<DataSetInformation>(registrationDetails, stagingFile, openBisService);
         }
     }
 
diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSetTest.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSetTest.java
index 11882db360b..152f0dfbd02 100644
--- a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSetTest.java
+++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSetTest.java
@@ -40,7 +40,7 @@ public class DataSetTest extends AssertJUnit
         DataSetRegistrationDetails<DataSetInformation> registrationDetails =
                 new DataSetRegistrationDetails<DataSetInformation>();
         registrationDetails.setDataSetInformation(new DataSetInformation());
-        IDataSet dataSet = new DataSet<DataSetInformation>(registrationDetails, new File("."));
+        IDataSet dataSet = new DataSet<DataSetInformation>(registrationDetails, new File("."), null);
         
         assertEquals(Constants.DEFAULT_SPEED_HINT, dataSet.getSpeedHint());
 
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/api/v1/Translator.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/api/v1/Translator.java
index 25b049b7aeb..e2651e63476 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/api/v1/Translator.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/api/v1/Translator.java
@@ -161,7 +161,7 @@ public class Translator
         return new Experiment(initializer);
     }
 
-    static DataSetType translate(
+    public static DataSetType translate(
             ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetType privateDataSetType,
             HashMap<ch.systemsx.cisd.openbis.generic.shared.basic.dto.Vocabulary, List<ControlledVocabularyPropertyType.VocabularyTerm>> vocabTerms)
     {
-- 
GitLab