From e34aa703c36d8efb53a81d9c0434a870243dc6a7 Mon Sep 17 00:00:00 2001
From: felmer <felmer>
Date: Mon, 16 May 2011 13:33:53 +0000
Subject: [PATCH] LMS-2250 extending IDatasetLister, using data set lister for
 listing share IDs and data sets.

SVN: 21320
---
 .../path/PathInfoDatabaseFeedingTask.java     |  1 -
 .../openbis/generic/server/ETLService.java    | 27 +++++----
 .../bo/datasetlister/DatasetLister.java       | 16 +++--
 .../bo/datasetlister/IDatasetLister.java      |  5 ++
 .../datasetlister/IDatasetListingQuery.java   |  3 +
 .../generic/shared/basic/dto/DataSet.java     | 12 ++++
 .../dto/SimpleDataSetInformationDTO.java      | 13 ----
 .../translator/SimpleDataSetHelper.java       | 33 ++++-------
 .../translator/SimpleDataSetHelperTest.java   | 59 +++++++++----------
 9 files changed, 88 insertions(+), 81 deletions(-)

diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/path/PathInfoDatabaseFeedingTask.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/path/PathInfoDatabaseFeedingTask.java
index 06084e7ee2e..71f648a36a7 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/path/PathInfoDatabaseFeedingTask.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/path/PathInfoDatabaseFeedingTask.java
@@ -111,7 +111,6 @@ public class PathInfoDatabaseFeedingTask implements IMaintenanceTask, IPostRegis
 
     public void execute()
     {
-        // TODO don't load virtual data sets here or filter them out
         List<SimpleDataSetInformationDTO> dataSets = service.listDataSets();
         for (SimpleDataSetInformationDTO dataSet : dataSets)
         {
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 9051857dde9..4afaad4d9b7 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
@@ -37,7 +37,6 @@ import ch.systemsx.cisd.openbis.generic.server.business.bo.ICommonBusinessObject
 import ch.systemsx.cisd.openbis.generic.server.business.bo.IExperimentBO;
 import ch.systemsx.cisd.openbis.generic.server.business.bo.IExperimentTable;
 import ch.systemsx.cisd.openbis.generic.server.business.bo.IExternalDataBO;
-import ch.systemsx.cisd.openbis.generic.server.business.bo.IExternalDataTable;
 import ch.systemsx.cisd.openbis.generic.server.business.bo.IGroupBO;
 import ch.systemsx.cisd.openbis.generic.server.business.bo.IProjectBO;
 import ch.systemsx.cisd.openbis.generic.server.business.bo.IRoleAssignmentTable;
@@ -57,6 +56,7 @@ import ch.systemsx.cisd.openbis.generic.shared.IDataStoreService;
 import ch.systemsx.cisd.openbis.generic.shared.IServer;
 import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ArchiverDataSetCriteria;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSet;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetArchivingStatus;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetTypeWithVocabularyTerms;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataStoreServiceKind;
@@ -800,14 +800,18 @@ public class ETLService extends AbstractCommonServer<IETLService> implements IET
     public List<DataSetShareId> listShareIds(String sessionToken, String dataStore)
             throws UserFailureException
     {
-        List<ExternalDataPE> dataSets = loadDataSets(sessionToken, dataStore);
+        List<ExternalData> dataSets = loadDataSets(sessionToken, dataStore);
         ArrayList<DataSetShareId> shareIds = new ArrayList<DataSetShareId>();
-        for (ExternalDataPE dataSet : dataSets)
+        for (ExternalData dataSet : dataSets)
         {
-            DataSetShareId dataSetShareId = new DataSetShareId();
-            dataSetShareId.setDataSetCode(dataSet.getCode());
-            dataSetShareId.setShareId(dataSet.getShareId());
-            shareIds.add(dataSetShareId);
+            if (dataSet instanceof DataSet)
+            {
+                DataSet ds = (DataSet) dataSet;
+                DataSetShareId dataSetShareId = new DataSetShareId();
+                dataSetShareId.setDataSetCode(ds.getCode());
+                dataSetShareId.setShareId(ds.getShareId());
+                shareIds.add(dataSetShareId);
+            }
         }
         return shareIds;
     }
@@ -815,7 +819,7 @@ public class ETLService extends AbstractCommonServer<IETLService> implements IET
     public List<SimpleDataSetInformationDTO> listDataSets(String sessionToken, String dataStoreCode)
             throws UserFailureException
     {
-        List<ExternalDataPE> dataSets = loadDataSets(sessionToken, dataStoreCode);
+        List<ExternalData> dataSets = loadDataSets(sessionToken, dataStoreCode);
         return SimpleDataSetHelper.translate(dataSets);
     }
 
@@ -851,18 +855,17 @@ public class ETLService extends AbstractCommonServer<IETLService> implements IET
         return result;
     }
 
-    private List<ExternalDataPE> loadDataSets(String sessionToken, String dataStoreCode)
+    private List<ExternalData> loadDataSets(String sessionToken, String dataStoreCode)
     {
         Session session = getSession(sessionToken);
+        IDatasetLister datasetLister = businessObjectFactory.createDatasetLister(session);
         DataStorePE dataStore =
                 getDAOFactory().getDataStoreDAO().tryToFindDataStoreByCode(dataStoreCode);
         if (dataStore == null)
         {
             throw new UserFailureException(String.format("Unknown data store '%s'", dataStoreCode));
         }
-        IExternalDataTable dataSetTable = businessObjectFactory.createExternalDataTable(session);
-        dataSetTable.loadByDataStore(dataStore);
-        return dataSetTable.getExternalData();
+        return datasetLister.listByDataStore(dataStore.getId());
     }
 
     public List<DeletedDataSet> listDeletedDataSets(String sessionToken,
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/DatasetLister.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/DatasetLister.java
index 137c09868e9..562a285f0fd 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/DatasetLister.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/DatasetLister.java
@@ -343,6 +343,11 @@ public class DatasetLister extends AbstractLister implements IDatasetLister
         return asList(createPrimaryDatasets(asList(datasets)));
     }
 
+    public List<ExternalData> listByDataStore(long dataStoreID)
+    {
+        return enrichDatasets(query.getDatasetsByDataStoreId(dataStoreID));
+    }
+
     public List<ExternalData> listByTrackingCriteria(TrackingDataSetCriteria criteria)
     {
         DataIterator<DatasetRecord> dataSets;
@@ -645,7 +650,7 @@ public class DatasetLister extends AbstractLister implements IDatasetLister
         for (DatasetRecord record : records)
         {
             DataSetType dsType = dataSetTypes.get(record.dsty_id);
-            if (record.is_placeholder)
+            if (record.is_placeholder || record.location == null)
             {
                 // placeholder data sets are filtered out
             } else if (dsType.isContainerType())
@@ -665,13 +670,16 @@ public class DatasetLister extends AbstractLister implements IDatasetLister
         convertStandardProperties(dataSet, record);
 
         dataSet.setComplete(resolve(record.is_complete));
-        dataSet.setStatus(DataSetArchivingStatus.valueOf(record.status));
+        dataSet.setStatus(record.status == null ? null : DataSetArchivingStatus
+                .valueOf(record.status));
         dataSet.setSpeedHint(record.speed_hint == null ? Constants.DEFAULT_SPEED_HINT
                 : record.speed_hint);
-        dataSet.setFileFormatType(fileFormatTypes.get(record.ffty_id));
+        dataSet.setShareId(record.share_id);
+        dataSet.setFileFormatType(record.ffty_id == null ? null : fileFormatTypes
+                .get(record.ffty_id));
         dataSet.setLocation(record.location);
         dataSet.setSize(record.size);
-        dataSet.setLocatorType(locatorTypes.get(record.loty_id));
+        dataSet.setLocatorType(record.loty_id == null ? null : locatorTypes.get(record.loty_id));
         return dataSet;
     }
 
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/IDatasetLister.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/IDatasetLister.java
index 3ef3183b414..c22dde3e489 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/IDatasetLister.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/IDatasetLister.java
@@ -76,6 +76,11 @@ public interface IDatasetLister
      * Lists all data sets with specified codes. Unenriched data sets will be returned.
      */
     List<ExternalData> listByDatasetCode(Collection<String> datasetCodes);
+    
+    /**
+     * Lists all data sets of specified data store. Unenriched data sets will be returned.
+     */
+    List<ExternalData> listByDataStore(long dataStoreID);
 
     /** @return datasets with given ids */
     List<ExternalData> listByDatasetIds(Collection<Long> datasetIds);
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/IDatasetListingQuery.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/IDatasetListingQuery.java
index 62319fb0fb6..e7816b22d05 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/IDatasetListingQuery.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/IDatasetListingQuery.java
@@ -195,6 +195,9 @@ public interface IDatasetListingQuery extends TransactionQuery, IPropertyListing
         { StringArrayMapper.class }, fetchSize = FETCH_SIZE)
     public DataIterator<DatasetRecord> getDatasets(String[] datasetCodes);
 
+    @Select(sql = SELECT_ALL + " where data.dast_id = ?{1}", fetchSize = FETCH_SIZE)
+    public DataIterator<DatasetRecord> getDatasetsByDataStoreId(long dataStoreId);
+    
     /**
      * Returns the children dataset ids of the specified datasets.
      */
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/DataSet.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/DataSet.java
index 6201dff3dea..d690ac0cfbe 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/DataSet.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/DataSet.java
@@ -28,6 +28,8 @@ public class DataSet extends ExternalData implements IDatasetLocation
     private static final long serialVersionUID = ServiceVersionHolder.VERSION;
 
     private Boolean complete;
+    
+    private String shareId;
 
     private String location;
 
@@ -51,6 +53,16 @@ public class DataSet extends ExternalData implements IDatasetLocation
         this.complete = complete;
     }
 
+    public void setShareId(String shareId)
+    {
+        this.shareId = shareId;
+    }
+
+    public String getShareId()
+    {
+        return shareId;
+    }
+
     @Override
     public String getLocation()
     {
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/SimpleDataSetInformationDTO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/SimpleDataSetInformationDTO.java
index 151f99b3386..5da76b66351 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/SimpleDataSetInformationDTO.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/SimpleDataSetInformationDTO.java
@@ -17,7 +17,6 @@
 package ch.systemsx.cisd.openbis.generic.shared.dto;
 
 import java.io.Serializable;
-import java.util.Collection;
 
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IDatasetLocation;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ServiceVersionHolder;
@@ -55,8 +54,6 @@ public class SimpleDataSetInformationDTO implements Serializable, IDatasetLocati
 
     private String databaseInstanceCode;
     
-    private Collection<String> parentDataSetCodes;
-
     public void setDataStoreCode(String dataStoreCode)
     {
         this.dataStoreCode = dataStoreCode;
@@ -178,14 +175,4 @@ public class SimpleDataSetInformationDTO implements Serializable, IDatasetLocati
         this.databaseInstanceCode = dbInstanceCode;
     }
 
-    public Collection<String> getParentDataSetCodes()
-    {
-        return parentDataSetCodes;
-    }
-
-    public void setParentDataSetCodes(Collection<String> parentDataSetCodes)
-    {
-        this.parentDataSetCodes = parentDataSetCodes;
-    }
-
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/SimpleDataSetHelper.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/SimpleDataSetHelper.java
index 9cfc5f5545b..9300849d6d3 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/SimpleDataSetHelper.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/SimpleDataSetHelper.java
@@ -17,13 +17,11 @@
 package ch.systemsx.cisd.openbis.generic.shared.translator;
 
 import java.util.ArrayList;
-import java.util.HashSet;
 import java.util.List;
 
-import ch.systemsx.cisd.openbis.generic.shared.dto.DataPE;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSet;
+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.dto.ExternalDataPE;
-import ch.systemsx.cisd.openbis.generic.shared.dto.SamplePE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.SimpleDataSetInformationDTO;
 
 /**
@@ -33,23 +31,25 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.SimpleDataSetInformationDTO;
  */
 public class SimpleDataSetHelper
 {
-    public static final List<SimpleDataSetInformationDTO> translate(
-            List<ExternalDataPE> externalData)
+    public static final List<SimpleDataSetInformationDTO> translate(List<ExternalData> externalData)
     {
         if (externalData == null)
         {
             return null;
         }
         List<SimpleDataSetInformationDTO> result = new ArrayList<SimpleDataSetInformationDTO>();
-        for (ExternalDataPE ed : externalData)
+        for (ExternalData ed : externalData)
         {
-            result.add(translate(ed));
+            if (ed instanceof DataSet)
+            {
+                DataSet dataSet = (DataSet) ed;
+                result.add(translate(dataSet));
+            }
         }
         return result;
     }
 
-    // TODO KE: use DataPE ?
-    private static SimpleDataSetInformationDTO translate(ExternalDataPE data)
+    private static SimpleDataSetInformationDTO translate(DataSet data)
     {
         SimpleDataSetInformationDTO result = new SimpleDataSetInformationDTO();
         result.setDataStoreCode(data.getDataStore().getCode());
@@ -59,22 +59,13 @@ public class SimpleDataSetHelper
         result.setDataSetLocation(data.getLocation());
         result.setDataSetSize(data.getSize());
         result.setDatabaseInstanceCode(data.getExperiment().getProject().getSpace()
-                .getDatabaseInstance().getCode());
+                .getInstance().getCode());
         result.setExperimentCode(data.getExperiment().getCode());
         result.setProjectCode(data.getExperiment().getProject().getCode());
         result.setGroupCode(data.getExperiment().getProject().getSpace().getCode());
-        SamplePE sampleOrNull = data.tryGetSample();
-        result.setSampleCode(sampleOrNull == null ? null : sampleOrNull.getCode());
+        result.setSampleCode(data.getSampleCode());
         result.setDataSetType(data.getDataSetType().getCode());
 
-        HashSet<String> parentCodes = new HashSet<String>();
-        for (DataPE parent : data.getParents())
-        {
-            parentCodes.add(parent.getCode());
-        }
-
-        result.setParentDataSetCodes(parentCodes);
-
         return result;
     }
     
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 56e837cf447..2f17ab45700 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
@@ -22,21 +22,21 @@ import java.util.List;
 import org.testng.AssertJUnit;
 import org.testng.annotations.Test;
 
-import ch.systemsx.cisd.common.types.BooleanOrUnknown;
+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.DataSetArchivingStatus;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetType;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataStore;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseInstance;
+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.dto.DataSetTypePE;
-import ch.systemsx.cisd.openbis.generic.shared.dto.DataStorePE;
-import ch.systemsx.cisd.openbis.generic.shared.dto.DatabaseInstancePE;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.FileFormatType;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Project;
+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.DatasetDescription;
-import ch.systemsx.cisd.openbis.generic.shared.dto.ExperimentPE;
-import ch.systemsx.cisd.openbis.generic.shared.dto.ExperimentTypePE;
-import ch.systemsx.cisd.openbis.generic.shared.dto.ExternalDataPE;
-import ch.systemsx.cisd.openbis.generic.shared.dto.FileFormatTypePE;
-import ch.systemsx.cisd.openbis.generic.shared.dto.ProjectPE;
-import ch.systemsx.cisd.openbis.generic.shared.dto.SamplePE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.SimpleDataSetInformationDTO;
-import ch.systemsx.cisd.openbis.generic.shared.dto.SpacePE;
 
 /**
  * 
@@ -48,10 +48,11 @@ public class SimpleDataSetHelperTest extends AssertJUnit
     @Test
     public void testTranslateList()
     {
-        ExternalDataPE ds1 = create(1);
-        ExternalDataPE ds2 = create(2);
+        ExternalData ds1 = create(1);
+        ExternalData ds2 = create(2);
+        ExternalData ds3 = new ContainerDataSet();
 
-        List<SimpleDataSetInformationDTO> list = SimpleDataSetHelper.translate(Arrays.asList(ds1, ds2));
+        List<SimpleDataSetInformationDTO> list = SimpleDataSetHelper.translate(Arrays.asList(ds1, ds2, ds3));
         
         check(1, list.get(0));
         check(2, list.get(1));
@@ -62,49 +63,47 @@ public class SimpleDataSetHelperTest extends AssertJUnit
     @Test 
     public void testTranslateDescription()
     {
-        ExternalData ds = ExternalDataTranslator.translate(create(1), "", false);
-        DatasetDescription description = ExternalDataTranslator.translateToDescription(ds);
+        DatasetDescription description = ExternalDataTranslator.translateToDescription(create(1));
         
         SimpleDataSetInformationDTO result = SimpleDataSetHelper.translate(description);
         
         check(1, result);
     }
     
-    private ExternalDataPE create(long id)
+    private ExternalData create(long id)
     {
-        ExternalDataPE dataSet = new ExternalDataPE();
+        DataSet dataSet = new DataSet();
         dataSet.setId(id);
         dataSet.setCode("ds-" + id);
-        dataSet.setComplete(BooleanOrUnknown.T);
+        dataSet.setComplete(true);
         dataSet.setDataProducerCode("producer");
-        DataSetTypePE dataSetType = new DataSetTypePE();
+        DataSetType dataSetType = new DataSetType();
         dataSetType.setCode("MY-TYPE");
         dataSet.setDataSetType(dataSetType);
-        DataStorePE store = new DataStorePE();
+        DataStore store = new DataStore();
         store.setCode("MY-STORE");
         dataSet.setDataStore(store);
         dataSet.setDerived(true);
-        ExperimentPE experiment = new ExperimentPE();
+        Experiment experiment = new Experiment();
         experiment.setCode("MY-EXPERIMENT");
-        ExperimentTypePE experimentType = new ExperimentTypePE();
+        ExperimentType experimentType = new ExperimentType();
         experimentType.setCode("MY-EXPERIMENT-TYPE");
         experiment.setExperimentType(experimentType);
-        ProjectPE project = new ProjectPE();
+        Project project = new Project();
         project.setCode("MY-PROJECT");
-        SpacePE space = new SpacePE();
+        Space space = new Space();
         space.setCode("MY-SPACE");
-        DatabaseInstancePE databaseInstance = new DatabaseInstancePE();
+        DatabaseInstance databaseInstance = new DatabaseInstance();
         databaseInstance.setCode("MY-DB");
-        space.setDatabaseInstance(databaseInstance);
+        space.setInstance(databaseInstance);
         project.setSpace(space);
         experiment.setProject(project);
         dataSet.setExperiment(experiment);
-        FileFormatTypePE fileFormatType = new FileFormatTypePE();
+        FileFormatType fileFormatType = new FileFormatType();
         fileFormatType.setCode("MY_FILE_FORMAT");
         dataSet.setFileFormatType(fileFormatType);
         dataSet.setLocation("my-location");
-        dataSet.setPresentInArchive(true);
-        SamplePE sample = new SamplePE();
+        Sample sample = new Sample();
         sample.setCode("MY-SAMPLE");
         dataSet.setSample(sample);
         dataSet.setShareId("42");
-- 
GitLab