From 1ad700c9f218a767cf788d06505c2a4cb1529979 Mon Sep 17 00:00:00 2001
From: kaloyane <kaloyane>
Date: Mon, 30 May 2011 14:54:07 +0000
Subject: [PATCH] [LMS-2285] added conversion from DataSetUpdatable to
 DataSetUpdatesDTO

SVN: 21511
---
 .../api/v1/impl/ConversionUtils.java          | 41 ++++++++++++++++++-
 .../generic/shared/basic/dto/Code.java        | 10 +++--
 2 files changed, 46 insertions(+), 5 deletions(-)

diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/ConversionUtils.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/ConversionUtils.java
index d2920bbd4b5..cc32cb2e3b7 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/ConversionUtils.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/ConversionUtils.java
@@ -23,6 +23,9 @@ import ch.systemsx.cisd.common.types.BooleanOrUnknown;
 import ch.systemsx.cisd.etlserver.registrator.DataSetRegistrationDetails;
 import ch.systemsx.cisd.openbis.dss.generic.shared.dto.DataSetInformation;
 import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Code;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ContainerDataSet;
+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.NewAttachment;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewExperiment;
@@ -36,7 +39,9 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.NewExternalData;
 import ch.systemsx.cisd.openbis.generic.shared.dto.NewProperty;
 import ch.systemsx.cisd.openbis.generic.shared.dto.SampleUpdatesDTO;
 import ch.systemsx.cisd.openbis.generic.shared.dto.StorageFormat;
+import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.ExperimentIdentifier;
 import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.ExperimentIdentifierFactory;
+import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleIdentifier;
 import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleIdentifierFactory;
 
 /**
@@ -181,8 +186,40 @@ public class ConversionUtils
 
     public static DataSetUpdatesDTO convertToDataSetUpdatesDTO(DataSetUpdatable dataSet)
     {
-        // TODO KE: implement
-        return null;
+        ExternalData externalData = dataSet.getExternalData();
+
+        DataSetUpdatesDTO dataSetUpdate = new DataSetUpdatesDTO();
+        dataSetUpdate.setDatasetId(new TechId(externalData));
+        dataSetUpdate.setVersion(externalData.getModificationDate());
+        dataSetUpdate.setFileFormatTypeCode(dataSet.getFileFormatType());
+        dataSetUpdate.setProperties(externalData.getProperties());
+
+        if (externalData.getExperiment() != null)
+        {
+            String identifierString = externalData.getExperiment().getIdentifier();
+            ExperimentIdentifier experimentIdentifier =
+                    ExperimentIdentifierFactory.parse(identifierString);
+            dataSetUpdate.setExperimentIdentifierOrNull(experimentIdentifier);
+        }
+
+        if (externalData.getSample() != null)
+        {
+            String identifierString = externalData.getSampleIdentifier();
+            SampleIdentifier sampleIdentifier = SampleIdentifierFactory.parse(identifierString);
+            dataSetUpdate.setSampleIdentifierOrNull(sampleIdentifier);
+        }
+
+        if (externalData.isContainer())
+        {
+            ContainerDataSet container = externalData.tryGetAsContainerDataSet();
+            String[] containedCodes = Code.extractCodesToArray(container.getContainedDataSets());
+            dataSetUpdate.setModifiedContainedDatasetCodesOrNull(containedCodes);
+        }
+
+        String[] parentCodes = Code.extractCodesToArray(externalData.getParents());
+        dataSetUpdate.setModifiedParentDatasetCodesOrNull(parentCodes);
+
+        return dataSetUpdate;
     }
 
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/Code.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/Code.java
index 267d24bfedc..5cddba3eb8a 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/Code.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/Code.java
@@ -104,16 +104,20 @@ public class Code<T extends Code<T>> implements ISerializable, ICodeHolder, Comp
     public final static List<String> extractCodes(Collection<? extends ICodeHolder> codeProviders)
     {
         List<String> codes = new ArrayList<String>();
-        for (ICodeHolder codeProvider : codeProviders)
+        if (codeProviders != null)
         {
-            codes.add(codeProvider.getCode());
+            for (ICodeHolder codeProvider : codeProviders)
+            {
+                codes.add(codeProvider.getCode());
+            }
         }
         return codes;
     }
 
     public final static String[] extractCodesToArray(Collection<? extends ICodeHolder> codeProviders)
     {
-        return extractCodes(codeProviders).toArray(new String[codeProviders.size()]);
+        int size = (codeProviders == null) ? 0 : codeProviders.size();
+        return extractCodes(codeProviders).toArray(new String[size]);
     }
 
     private final static class CodeProviderComparator implements Comparator<ICodeHolder>,
-- 
GitLab