From 28af1bf5fcf0adbe1d19dac5c255959ecae6e9e0 Mon Sep 17 00:00:00 2001
From: buczekp <buczekp>
Date: Wed, 18 May 2011 08:14:14 +0000
Subject: [PATCH] [LMS-2104] fixed translation of virtual data sets and got rid
 of ExternalDataTranslator (DataSetTranslator is used instead)

SVN: 21356
---
 .../ArchivingPostRegistrationTask.java        |  29 +-
 .../dss/generic/server/UploadingCommand.java  |  31 +-
 .../generic/server/UploadingCommandTest.java  |   6 +-
 .../openbis/generic/server/ETLService.java    |   1 +
 .../shared/translator/DataSetTranslator.java  |  24 +-
 .../translator/ExternalDataTranslator.java    | 322 ------------------
 .../web/server/CommonClientServiceTest.java   |   4 +-
 .../generic/server/CommonServerTest.java      |   6 +-
 ...orTest.java => DataSetTranslatorTest.java} |  12 +-
 .../translator/SimpleDataSetHelperTest.java   |  21 +-
 .../server/logic/PlateContentLoader.java      |   4 +-
 11 files changed, 76 insertions(+), 384 deletions(-)
 delete mode 100644 openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/ExternalDataTranslator.java
 rename openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/translator/{ExternalDataTranslatorTest.java => DataSetTranslatorTest.java} (95%)

diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/postregistration/ArchivingPostRegistrationTask.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/postregistration/ArchivingPostRegistrationTask.java
index c4073b06168..328725e8fdc 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/postregistration/ArchivingPostRegistrationTask.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/postregistration/ArchivingPostRegistrationTask.java
@@ -39,7 +39,7 @@ import ch.systemsx.cisd.openbis.dss.generic.shared.ServiceProvider;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatasetLocation;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExternalData;
 import ch.systemsx.cisd.openbis.generic.shared.dto.DatasetDescription;
-import ch.systemsx.cisd.openbis.generic.shared.translator.ExternalDataTranslator;
+import ch.systemsx.cisd.openbis.generic.shared.translator.DataSetTranslator;
 
 /**
  * A post-registration task that archives datasets.
@@ -71,7 +71,7 @@ public class ArchivingPostRegistrationTask extends AbstractPostRegistrationTask
     {
         return new Executor(dataSetCode);
     }
-    
+
     private final class Executor implements IPostRegistrationTaskExecutor
     {
         private final String dataSetCode;
@@ -129,7 +129,8 @@ public class ArchivingPostRegistrationTask extends AbstractPostRegistrationTask
             String failedMessage =
                     String.format("Eager archiving of dataset '%s' has failed. \n", dataSetCode);
             message.append(failedMessage);
-            for (Status status : processingStatus.getErrorStatuses()) {
+            for (Status status : processingStatus.getErrorStatuses())
+            {
                 if (status.tryGetErrorMessage() != null)
                 {
                     message.append("Error encountered : " + status.tryGetErrorMessage());
@@ -140,7 +141,7 @@ public class ArchivingPostRegistrationTask extends AbstractPostRegistrationTask
                     String.format("If you wish to archive the dataset in the future, "
                             + "you can configure an '%s'.", AutoArchiverTask.class.getSimpleName());
             message.append(footer);
-            
+
             notificationLog.error(message);
         }
 
@@ -161,13 +162,13 @@ public class ArchivingPostRegistrationTask extends AbstractPostRegistrationTask
         }
 
         ExternalData data = dataList.get(0);
-        return ExternalDataTranslator.translateToDescription(data);
+        return DataSetTranslator.translateToDescription(data);
     }
 
-
     private static ArchiverTaskContext createArchiverContext()
     {
-        return new ArchiverTaskContext(ServiceProvider.getDataStoreService().getDataSetDirectoryProvider());
+        return new ArchiverTaskContext(ServiceProvider.getDataStoreService()
+                .getDataSetDirectoryProvider());
     }
 
     private static class ArchivingCleanupTask implements ICleanupTask
@@ -184,14 +185,16 @@ public class ArchivingPostRegistrationTask extends AbstractPostRegistrationTask
         public void cleanup(ISimpleLogger logger)
         {
             IEncapsulatedOpenBISService openBISService = ServiceProvider.getOpenBISService();
-            boolean statusUpdated = openBISService
-                    .compareAndSetDataSetStatus(dataSetCode, BACKUP_PENDING, AVAILABLE, false);
-            
-            if (statusUpdated == false) {
-                // invalid data set status, do not continue 
+            boolean statusUpdated =
+                    openBISService.compareAndSetDataSetStatus(dataSetCode, BACKUP_PENDING,
+                            AVAILABLE, false);
+
+            if (statusUpdated == false)
+            {
+                // invalid data set status, do not continue
                 return;
             }
-            
+
             IArchiverPlugin archiver = ServiceProvider.getDataStoreService().getArchiverPlugin();
             DatasetDescription dataSet = tryGetDatasetDescription(dataSetCode, openBISService);
             if (archiver != null && dataSet != null)
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/UploadingCommand.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/UploadingCommand.java
index 107a12581a4..fdf4ebceba0 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/UploadingCommand.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/UploadingCommand.java
@@ -58,7 +58,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Space;
 import ch.systemsx.cisd.openbis.generic.shared.dto.DataSetUploadContext;
 import ch.systemsx.cisd.openbis.generic.shared.dto.DatasetDescription;
-import ch.systemsx.cisd.openbis.generic.shared.translator.ExternalDataTranslator;
+import ch.systemsx.cisd.openbis.generic.shared.translator.DataSetTranslator;
 
 import de.schlichtherle.util.zip.ZipEntry;
 import de.schlichtherle.util.zip.ZipOutputStream;
@@ -72,11 +72,11 @@ class UploadingCommand implements IDataSetCommand
 {
     private static final long serialVersionUID = 1L;
 
-    private static final Logger operationLog =
-            LogFactory.getLogger(LogCategory.OPERATION, UploadingCommand.class);
+    private static final Logger operationLog = LogFactory.getLogger(LogCategory.OPERATION,
+            UploadingCommand.class);
 
-    private static final Logger notificationLog =
-            LogFactory.getLogger(LogCategory.NOTIFY, UploadingCommand.class);
+    private static final Logger notificationLog = LogFactory.getLogger(LogCategory.NOTIFY,
+            UploadingCommand.class);
 
     private final class ProgressListener implements IProgressListener
     {
@@ -139,8 +139,8 @@ class UploadingCommand implements IDataSetCommand
 
         private static final char DELIM = '\t';
 
-        private static final DateFormat DATE_FORMAT_PATTERN =
-                new SimpleDateFormat("yyyy-MM-dd HH:mm:ss Z");
+        private static final DateFormat DATE_FORMAT_PATTERN = new SimpleDateFormat(
+                "yyyy-MM-dd HH:mm:ss Z");
 
         private final StringBuilder builder = new StringBuilder();
 
@@ -416,7 +416,7 @@ class UploadingCommand implements IDataSetCommand
                 assert dataSet != null : "container datasets are currently not supported by DSS client";
 
                 DatasetDescription dataSetDescription =
-                        ExternalDataTranslator.translateToDescription(dataSet);
+                        DataSetTranslator.translateToDescription(dataSet);
                 File dataSetFile = dataSetDirectoryProvider.getDataSetDirectory(dataSetDescription);
                 if (dataSetFile.exists() == false)
                 {
@@ -426,13 +426,14 @@ class UploadingCommand implements IDataSetCommand
                 String newRootPath = createRootPath(dataSet);
                 try
                 {
-                    addEntry(zipOutputStream, newRootPath + "/meta-data.tsv", System
-                            .currentTimeMillis(), new ByteArrayInputStream(createMetaData(dataSet)
-                            .getBytes()));
+                    addEntry(zipOutputStream, newRootPath + "/meta-data.tsv",
+                            System.currentTimeMillis(),
+                            new ByteArrayInputStream(createMetaData(dataSet).getBytes()));
                 } catch (IOException ex)
                 {
-                    notificationLog.error("Couldn't add meta date for data set '"
-                            + dataSet.getCode() + "' to zip file.", ex);
+                    notificationLog.error(
+                            "Couldn't add meta date for data set '" + dataSet.getCode()
+                                    + "' to zip file.", ex);
                     return false;
                 }
                 try
@@ -441,8 +442,8 @@ class UploadingCommand implements IDataSetCommand
                             dataSetFile);
                 } catch (IOException ex)
                 {
-                    notificationLog.error("Couldn't add data set '" + dataSetFile + "' to zip file.",
-                            ex);
+                    notificationLog.error("Couldn't add data set '" + dataSetFile
+                            + "' to zip file.", ex);
                     return false;
                 }
             }
diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/UploadingCommandTest.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/UploadingCommandTest.java
index 075387fd602..3be648335bc 100644
--- a/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/UploadingCommandTest.java
+++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/UploadingCommandTest.java
@@ -65,8 +65,8 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.ExternalDataPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.PersonPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.ProjectPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.SpacePE;
+import ch.systemsx.cisd.openbis.generic.shared.translator.DataSetTranslator;
 import ch.systemsx.cisd.openbis.generic.shared.translator.ExperimentTranslator;
-import ch.systemsx.cisd.openbis.generic.shared.translator.ExternalDataTranslator;
 
 /**
  * @author Franz-Josef Elmer
@@ -183,11 +183,11 @@ public class UploadingCommandTest extends AssertJUnit
         createTestData(LOCATION1);
         ds2 = createTestData(LOCATION2);
         ExternalData dataSet1 =
-                ExternalDataTranslator.translate(createDataSet("1", LOCATION1), "?",
+                DataSetTranslator.translate(createDataSet("1", LOCATION1), "?",
                         ExperimentTranslator.LoadableFields.PROPERTIES);
         System.out.println("ds1:" + dataSet1.getExperiment().getProperties());
         ExternalData dataSet2 =
-                ExternalDataTranslator.translate(createDataSet("2", LOCATION2), "?",
+                DataSetTranslator.translate(createDataSet("2", LOCATION2), "?",
                         ExperimentTranslator.LoadableFields.PROPERTIES);
         dataSets = Arrays.<ExternalData> asList(dataSet1, dataSet2);
         command =
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ETLService.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ETLService.java
index 4b6832c2363..7fefd401cec 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ETLService.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ETLService.java
@@ -752,6 +752,7 @@ public class ETLService extends AbstractCommonServer<IETLService> implements IET
         dataBO.loadByCode(dataSetCode);
         dataBO.enrichWithParentsAndExperiment();
         dataBO.enrichWithProperties();
+        dataBO.enrichWithContainedDataSets();
         DataPE dataPE = dataBO.tryGetData();
         if (null == dataPE)
             return null;
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/DataSetTranslator.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/DataSetTranslator.java
index 6e0e1cb9179..5af3d6c1832 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/DataSetTranslator.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/DataSetTranslator.java
@@ -142,7 +142,7 @@ public class DataSetTranslator
         ExternalData externalData = null;
         if (dataPE.isContainer())
         {
-            externalData = translateContainerDataSetProperties(dataPE, withDetails);
+            externalData = translateContainerDataSetProperties(dataPE, baseIndexURL, withDetails);
         } else
         {
             externalData = translateDataSetProperties(dataPE);
@@ -189,12 +189,12 @@ public class DataSetTranslator
     }
 
     private static ExternalData translateContainerDataSetProperties(DataPE dataPE,
-            boolean withComponents)
+            String baseIndexURL, boolean withComponents)
     {
         ContainerDataSet containerDataSet = new ContainerDataSet();
         if (withComponents)
         {
-            setContainedDataSets(dataPE, containerDataSet);
+            setContainedDataSets(dataPE, containerDataSet, baseIndexURL);
         }
         return containerDataSet;
     }
@@ -307,14 +307,15 @@ public class DataSetTranslator
         externalData.setChildren(children);
     }
 
-    private static void setContainedDataSets(DataPE dataPE, ContainerDataSet containerDataSet)
+    private static void setContainedDataSets(DataPE dataPE, ContainerDataSet containerDataSet,
+            String baseIndexURL)
     {
         List<ExternalData> containedDataSets = new ArrayList<ExternalData>();
         if (HibernateUtils.isInitialized(dataPE.getContainedDataSets()))
         {
             for (DataPE childPE : dataPE.getContainedDataSets())
             {
-                containedDataSets.add(translateBasicProperties(childPE));
+                containedDataSets.add(translate(childPE, baseIndexURL));
             }
         }
         containerDataSet.setContainedDataSets(containedDataSets);
@@ -326,7 +327,18 @@ public class DataSetTranslator
      */
     private static ExternalData translateBasicProperties(DataPE dataPE)
     {
-        ExternalData result = new ExternalData();
+        ExternalData result = null;
+        if (dataPE.isContainer())
+        {
+            result = new ContainerDataSet();
+        } else if (dataPE.isExternalData())
+        {
+            result = new DataSet();
+        } else
+        {
+            assert dataPE.isPlaceholder() == true;
+            result = new ExternalData();
+        }
         result.setId(HibernateUtils.getId(dataPE));
         result.setCode(dataPE.getCode());
         result.setDataSetType(DataSetTypeTranslator.translate(dataPE.getDataSetType(),
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/ExternalDataTranslator.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/ExternalDataTranslator.java
deleted file mode 100644
index c1a589d54ba..00000000000
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/ExternalDataTranslator.java
+++ /dev/null
@@ -1,322 +0,0 @@
-/*
- * 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.shared.translator;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-
-import ch.systemsx.cisd.common.types.BooleanOrUnknown;
-import ch.systemsx.cisd.openbis.generic.shared.basic.IEntityInformationHolder;
-import ch.systemsx.cisd.openbis.generic.shared.basic.PermlinkUtilities;
-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.DatabaseInstance;
-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.ExperimentType;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExternalData;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IEntityProperty;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Invalidation;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Project;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.PropertyType;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SampleType;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Space;
-import ch.systemsx.cisd.openbis.generic.shared.dto.DataPE;
-import ch.systemsx.cisd.openbis.generic.shared.dto.DatasetDescription;
-import ch.systemsx.cisd.openbis.generic.shared.dto.ExperimentPE;
-import ch.systemsx.cisd.openbis.generic.shared.dto.ExternalDataPE;
-import ch.systemsx.cisd.openbis.generic.shared.dto.InvalidationPE;
-import ch.systemsx.cisd.openbis.generic.shared.dto.PropertyTypePE;
-import ch.systemsx.cisd.openbis.generic.shared.dto.SamplePE;
-import ch.systemsx.cisd.openbis.generic.shared.translator.ExperimentTranslator.LoadableFields;
-import ch.systemsx.cisd.openbis.generic.shared.util.HibernateUtils;
-
-/**
- * @author Franz-Josef Elmer
- */
-public class ExternalDataTranslator
-{
-    private ExternalDataTranslator()
-    {
-    }
-    
-    public static DatasetDescription translateToDescription(ExternalData data)
-    {
-        DatasetDescription description = new DatasetDescription();
-        description.setDatasetCode(data.getCode());
-
-        DataSet dataSet = data.tryGetAsDataSet();
-        if (dataSet != null)
-        {
-            description.setDataSetLocation(dataSet.getLocation());
-            description.setSpeedHint(dataSet.getSpeedHint());
-        }
-        description.setDataSetSize(data.getSize());
-        DataSetType dataSetType = data.getDataSetType();
-        if (dataSetType != null)
-        {
-            description.setDatasetTypeCode(dataSetType.getCode());
-        }
-        Experiment experiment = data.getExperiment();
-        if (experiment != null)
-        {
-            description.setExperimentCode(experiment.getCode());
-            description.setExperimentIdentifier(experiment.getIdentifier());
-            Project project = experiment.getProject();
-            if (project != null)
-            {
-                description.setProjectCode(project.getCode());
-                Space space = project.getSpace();
-                if (space != null)
-                {
-                    description.setSpaceCode(space.getCode());
-                    DatabaseInstance instance = space.getInstance();
-                    if (instance != null)
-                    {
-                        description.setDatabaseInstanceCode(instance.getCode());
-                    }
-                }
-            }
-            ExperimentType experimentType = experiment.getExperimentType();
-            if (experimentType != null)
-            {
-                description.setExperimentTypeCode(experimentType.getCode());
-            }
-        }
-        Sample sample = data.getSample();
-        if (sample != null)
-        {
-            description.setSampleCode(sample.getCode());
-            description.setSampleIdentifier(sample.getIdentifier());
-            SampleType sampleType = sample.getSampleType();
-            if (sampleType != null)
-            {
-                description.setSampleTypeCode(sampleType.getCode());
-            }
-        }
-        return description;
-    }
-
-    public static List<ExternalData> translate(List<ExternalDataPE> list,
-            String defaultDataStoreBaseURL, String baseIndexURL)
-    {
-        ArrayList<ExternalData> result = new ArrayList<ExternalData>(list.size());
-        for (ExternalDataPE externalDataPE : list)
-        {
-            ExternalData data =
-                    translate(externalDataPE, baseIndexURL, true,
-                            ExperimentTranslator.LoadableFields.PROPERTIES);
-            result.add(data);
-        }
-        return result;
-    }
-
-    public static ExternalData translate(ExternalDataPE externalDataPE, String baseIndexURL,
-            final LoadableFields... withExperimentFields)
-    {
-        return translate(externalDataPE, baseIndexURL, true, withExperimentFields);
-    }
-
-    public static ExternalData translate(ExternalDataPE externalDataPE, String baseIndexURL,
-            boolean loadSampleProperties, final LoadableFields... withExperimentFields)
-    {
-        ExternalData externalData = null;
-        if (externalDataPE.isContainer())
-        {
-            externalData = translateContainerDataSetProperties(externalDataPE);
-        } else
-        {
-            externalData = translateDataSetProperties(externalDataPE);
-        }
-
-        SamplePE sampleOrNull = externalDataPE.tryGetSample();
-        ExperimentPE experiment = externalDataPE.getExperiment();
-        externalData.setId(HibernateUtils.getId(externalDataPE));
-        externalData.setCode(externalDataPE.getCode());
-        externalData.setDataProducerCode(externalDataPE.getDataProducerCode());
-        externalData.setDataSetType(DataSetTypeTranslator.translate(
-                externalDataPE.getDataSetType(), new HashMap<PropertyTypePE, PropertyType>()));
-        externalData.setDerived(externalDataPE.isDerived());
-        externalData.setInvalidation(tryToGetInvalidation(sampleOrNull, experiment));
-        externalData.setSize(externalDataPE.getSize());
-        final Collection<ExternalData> parents = new HashSet<ExternalData>();
-        externalData.setParents(parents);
-        for (DataPE parentPE : externalDataPE.getParents())
-        {
-            parents.add(translateBasicProperties(parentPE));
-        }
-        setChildren(externalDataPE, externalData);
-        externalData.setProductionDate(externalDataPE.getProductionDate());
-        externalData.setModificationDate(externalDataPE.getModificationDate());
-        externalData.setRegistrator(PersonTranslator.translate(externalDataPE.getRegistrator()));
-        externalData.setRegistrationDate(externalDataPE.getRegistrationDate());
-        externalData.setSample(sampleOrNull == null ? null : fillSample(new Sample(), sampleOrNull,
-                loadSampleProperties));
-        externalData.setDataStore(DataStoreTranslator.translate(externalDataPE.getDataStore()));
-        externalData.setPermlink(PermlinkUtilities.createPermlinkURL(baseIndexURL,
-                EntityKind.DATA_SET, externalData.getIdentifier()));
-        setProperties(externalDataPE, externalData);
-        externalData.setExperiment(ExperimentTranslator.translate(experiment, baseIndexURL,
-                withExperimentFields));
-
-        return externalData;
-    }
-
-    private static ExternalData translateContainerDataSetProperties(ExternalDataPE externalDataPE)
-    {
-        ContainerDataSet containerDataSet = new ContainerDataSet();
-        setContainedDataSets(externalDataPE, containerDataSet);
-        return containerDataSet;
-    }
-
-    private static ExternalData translateDataSetProperties(ExternalDataPE externalDataPE)
-    {
-        DataSet dataSet = new DataSet();
-        dataSet.setComplete(BooleanOrUnknown.tryToResolve(externalDataPE.getComplete()));
-        dataSet.setStatus(externalDataPE.getStatus());
-        dataSet.setSpeedHint(externalDataPE.getSpeedHint());
-        dataSet.setFileFormatType(TypeTranslator.translate(externalDataPE.getFileFormatType()));
-        dataSet.setLocation(externalDataPE.getLocation());
-        dataSet.setLocatorType(TypeTranslator.translate(externalDataPE.getLocatorType()));
-        return dataSet;
-    }
-
-    private static void setProperties(ExternalDataPE externalDataPE, ExternalData externalData)
-    {
-        if (HibernateUtils.isInitialized(externalDataPE.getProperties()))
-        {
-            externalData.setDataSetProperties(EntityPropertyTranslator.translate(
-                    externalDataPE.getProperties(), new HashMap<PropertyTypePE, PropertyType>()));
-        } else
-        {
-            externalData.setDataSetProperties(new ArrayList<IEntityProperty>());
-        }
-    }
-
-    private static Invalidation tryToGetInvalidation(SamplePE sampleOrNull, ExperimentPE experiment)
-    {
-        InvalidationPE invalidationOrNull;
-        if (sampleOrNull != null)
-        {
-            invalidationOrNull = tryToGetInvalidationPE(sampleOrNull);
-        } else
-        {
-            invalidationOrNull = tryToGetInvalidationPE(experiment);
-        }
-        return translateInvalidation(invalidationOrNull);
-    }
-
-    private static InvalidationPE tryToGetInvalidationPE(SamplePE sampleOrNull)
-    {
-        if (sampleOrNull != null)
-        {
-            return sampleOrNull.getInvalidation();
-        } else
-        {
-            return null;
-        }
-    }
-
-    private static InvalidationPE tryToGetInvalidationPE(ExperimentPE experiment)
-    {
-        if (experiment != null)
-        {
-            return experiment.getInvalidation();
-        } else
-        {
-            return null;
-        }
-    }
-
-    private static Invalidation translateInvalidation(InvalidationPE invalidationPE)
-    {
-        if (invalidationPE == null)
-        {
-            return null;
-        }
-        Invalidation result = new Invalidation();
-        result.setReason(invalidationPE.getReason());
-        result.setRegistrationDate(invalidationPE.getRegistrationDate());
-        result.setRegistrator(PersonTranslator.translate(invalidationPE.getRegistrator()));
-        return result;
-    }
-
-    private static Sample fillSample(Sample sample, SamplePE samplePE, boolean loadSampleProperties)
-    {
-        sample.setId(HibernateUtils.getId(samplePE));
-        sample.setPermId(samplePE.getPermId());
-        SampleTranslator.setCodes(sample, samplePE);
-        sample.setInvalidation(translateInvalidation(samplePE.getInvalidation()));
-        sample.setSampleType(TypeTranslator.translate(samplePE.getSampleType()));
-        sample.setIdentifier(samplePE.getSampleIdentifier().toString());
-        sample.setRegistrationDate(samplePE.getRegistrationDate());
-        sample.setRegistrator(PersonTranslator.translate(samplePE.getRegistrator()));
-        sample.setSpace(GroupTranslator.translate(samplePE.getSpace()));
-        if (loadSampleProperties)
-        {
-            sample.setProperties(EntityPropertyTranslator.translate(samplePE.getProperties(),
-                    new HashMap<PropertyTypePE, PropertyType>()));
-        }
-        return sample;
-    }
-
-    private static void setChildren(ExternalDataPE externalDataPE, ExternalData externalData)
-    {
-        List<ExternalData> children = new ArrayList<ExternalData>();
-        if (HibernateUtils.isInitialized(externalDataPE.getChildren()))
-        {
-            for (DataPE childPE : externalDataPE.getChildren())
-            {
-                children.add(translateBasicProperties(childPE));
-            }
-        }
-        externalData.setChildren(children);
-    }
-
-    private static void setContainedDataSets(DataPE externalDataPE,
-            ContainerDataSet containerDataSet)
-    {
-        List<ExternalData> containedDataSets = new ArrayList<ExternalData>();
-        if (HibernateUtils.isInitialized(externalDataPE.getContainedDataSets()))
-        {
-            for (DataPE childPE : externalDataPE.getContainedDataSets())
-            {
-                containedDataSets.add(translateBasicProperties(childPE));
-            }
-        }
-        containerDataSet.setContainedDataSets(containedDataSets);
-    }
-
-    /**
-     * Creates an <var>externalData</var> from <var>dataPE</vra> an fills it with all data needed by
-     * {@link IEntityInformationHolder}.
-     */
-    private static ExternalData translateBasicProperties(DataPE dataPE)
-    {
-        ExternalData result = new ExternalData();
-        result.setId(HibernateUtils.getId(dataPE));
-        result.setCode(dataPE.getCode());
-        result.setDataSetType(DataSetTypeTranslator.translate(dataPE.getDataSetType(),
-                new HashMap<PropertyTypePE, PropertyType>()));
-        return result;
-    }
-}
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/server/CommonClientServiceTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/server/CommonClientServiceTest.java
index 7eaab9e4fd0..13f04c7e468 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/server/CommonClientServiceTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/server/CommonClientServiceTest.java
@@ -78,7 +78,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.LocatorTypePE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.VocabularyPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.VocabularyTermPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.ExperimentIdentifier;
-import ch.systemsx.cisd.openbis.generic.shared.translator.ExternalDataTranslator;
+import ch.systemsx.cisd.openbis.generic.shared.translator.DataSetTranslator;
 import ch.systemsx.cisd.openbis.generic.shared.translator.VocabularyTranslator;
 
 /**
@@ -503,7 +503,7 @@ public final class CommonClientServiceTest extends AbstractClientServiceTest
         locatorTypePE.setCode("LOCATOR");
         externalDataPE.setLocatorType(locatorTypePE);
         final ExternalData externalData =
-                ExternalDataTranslator.translate(externalDataPE, BASE_INDEX_URL, false);
+                DataSetTranslator.translate(externalDataPE, BASE_INDEX_URL, false);
         context.checking(new Expectations()
             {
                 {
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/CommonServerTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/CommonServerTest.java
index 7b2ef980948..d77ba062187 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/CommonServerTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/CommonServerTest.java
@@ -92,9 +92,9 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.builders.ExperimentTypePEBuil
 import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.DatabaseInstanceIdentifier;
 import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.ExperimentIdentifier;
 import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.ProjectIdentifier;
+import ch.systemsx.cisd.openbis.generic.shared.translator.DataSetTranslator;
 import ch.systemsx.cisd.openbis.generic.shared.translator.DtoConverters;
 import ch.systemsx.cisd.openbis.generic.shared.translator.ExperimentTranslator;
-import ch.systemsx.cisd.openbis.generic.shared.translator.ExternalDataTranslator;
 import ch.systemsx.cisd.openbis.generic.shared.translator.GroupTranslator;
 import ch.systemsx.cisd.openbis.generic.shared.translator.MaterialTypeTranslator;
 import ch.systemsx.cisd.openbis.generic.shared.translator.PersonTranslator;
@@ -566,7 +566,7 @@ public final class CommonServerTest extends AbstractServerTestCase
         dataStorePE.setCode("DST");
         externalDataPE.setDataStore(dataStorePE);
         final ExternalData externalData =
-                ExternalDataTranslator.translate(externalDataPE, BASE_INDEX_URL);
+                DataSetTranslator.translate(externalDataPE, BASE_INDEX_URL);
         prepareGetSession();
         final boolean showOnlyDirectlyConnected = true;
         context.checking(new Expectations()
@@ -605,7 +605,7 @@ public final class CommonServerTest extends AbstractServerTestCase
         dataStorePE.setCode("DST");
         externalDataPE.setDataStore(dataStorePE);
         final ExternalData externalData =
-                ExternalDataTranslator.translate(externalDataPE, BASE_INDEX_URL);
+                DataSetTranslator.translate(externalDataPE, BASE_INDEX_URL);
         prepareGetSession();
         context.checking(new Expectations()
             {
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/translator/ExternalDataTranslatorTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/translator/DataSetTranslatorTest.java
similarity index 95%
rename from openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/translator/ExternalDataTranslatorTest.java
rename to openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/translator/DataSetTranslatorTest.java
index 99f5402e31d..df264d94afa 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/translator/ExternalDataTranslatorTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/translator/DataSetTranslatorTest.java
@@ -47,7 +47,8 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.SpacePE;
 /**
  * @author Franz-Josef Elmer
  */
-public class ExternalDataTranslatorTest extends AssertJUnit
+// TODO write test with translation of components
+public class DataSetTranslatorTest extends AssertJUnit
 {
     private static final String DOWNLOAD_URL = "url";
 
@@ -58,8 +59,7 @@ public class ExternalDataTranslatorTest extends AssertJUnit
     {
         ExternalDataPE externalDataPE = new ExternalDataPE();
         externalDataPE.setDataStore(createStore());
-        ExternalData data =
-                ExternalDataTranslator.translate(externalDataPE, BASE_INDEX_URL);
+        ExternalData data = DataSetTranslator.translate(externalDataPE, BASE_INDEX_URL);
 
         DataSet translated = data.tryGetAsDataSet();
 
@@ -124,8 +124,7 @@ public class ExternalDataTranslatorTest extends AssertJUnit
         samplePE.setInvalidation(invalidationPE);
         externalDataPE.setSampleAcquiredFrom(samplePE);
 
-        ExternalData data =
-                ExternalDataTranslator.translate(externalDataPE, BASE_INDEX_URL);
+        ExternalData data = DataSetTranslator.translate(externalDataPE, BASE_INDEX_URL);
 
         DataSet translated = data.tryGetAsDataSet();
 
@@ -180,8 +179,7 @@ public class ExternalDataTranslatorTest extends AssertJUnit
         externalDataPE.addParent(createParent("parent-1"));
         externalDataPE.addParent(createParent("parent-2"));
 
-        ExternalData externalData =
-                ExternalDataTranslator.translate(externalDataPE, BASE_INDEX_URL);
+        ExternalData externalData = DataSetTranslator.translate(externalDataPE, BASE_INDEX_URL);
 
         assertEquals("my-experiment", externalData.getExperiment().getCode());
         assertEquals(2, externalData.getParents().size());
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/translator/SimpleDataSetHelperTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/translator/SimpleDataSetHelperTest.java
index 2f17ab45700..151eedb87c4 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/translator/SimpleDataSetHelperTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/translator/SimpleDataSetHelperTest.java
@@ -39,8 +39,6 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.DatasetDescription;
 import ch.systemsx.cisd.openbis.generic.shared.dto.SimpleDataSetInformationDTO;
 
 /**
- * 
- *
  * @author Franz-Josef Elmer
  */
 public class SimpleDataSetHelperTest extends AssertJUnit
@@ -52,24 +50,25 @@ public class SimpleDataSetHelperTest extends AssertJUnit
         ExternalData ds2 = create(2);
         ExternalData ds3 = new ContainerDataSet();
 
-        List<SimpleDataSetInformationDTO> list = SimpleDataSetHelper.translate(Arrays.asList(ds1, ds2, ds3));
-        
+        List<SimpleDataSetInformationDTO> list =
+                SimpleDataSetHelper.translate(Arrays.asList(ds1, ds2, ds3));
+
         check(1, list.get(0));
         check(2, list.get(1));
         assertEquals("42", list.get(1).getDataSetShareId());
         assertEquals(2, list.size());
     }
-    
-    @Test 
+
+    @Test
     public void testTranslateDescription()
     {
-        DatasetDescription description = ExternalDataTranslator.translateToDescription(create(1));
-        
+        DatasetDescription description = DataSetTranslator.translateToDescription(create(1));
+
         SimpleDataSetInformationDTO result = SimpleDataSetHelper.translate(description);
-        
+
         check(1, result);
     }
-    
+
     private ExternalData create(long id)
     {
         DataSet dataSet = new DataSet();
@@ -112,7 +111,7 @@ public class SimpleDataSetHelperTest extends AssertJUnit
         dataSet.setStatus(DataSetArchivingStatus.ARCHIVED);
         return dataSet;
     }
-    
+
     public void check(long expectedID, SimpleDataSetInformationDTO dataSet)
     {
         assertEquals("ds-" + expectedID, dataSet.getDataSetCode());
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/PlateContentLoader.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/PlateContentLoader.java
index 749c2dd0722..e1e09851b7f 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/PlateContentLoader.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/PlateContentLoader.java
@@ -39,8 +39,8 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.DataPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.ExternalDataPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.SamplePE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.Session;
+import ch.systemsx.cisd.openbis.generic.shared.translator.DataSetTranslator;
 import ch.systemsx.cisd.openbis.generic.shared.translator.EntityPropertyTranslator;
-import ch.systemsx.cisd.openbis.generic.shared.translator.ExternalDataTranslator;
 import ch.systemsx.cisd.openbis.generic.shared.translator.SampleTranslator;
 import ch.systemsx.cisd.openbis.generic.shared.util.HibernateUtils;
 import ch.systemsx.cisd.openbis.plugin.screening.server.IScreeningBusinessObjectFactory;
@@ -163,7 +163,7 @@ public class PlateContentLoader
 
     private ExternalData translate(ExternalDataPE externalData)
     {
-        return ExternalDataTranslator.translate(externalData, session.getBaseIndexURL());
+        return DataSetTranslator.translate(externalData, session.getBaseIndexURL());
     }
 
     private PlateContent getPlateContent(TechId plateId)
-- 
GitLab