From b4b1dd2ecf08d01a24ff1bcae74f1bf85bcf82c5 Mon Sep 17 00:00:00 2001
From: anttil <anttil>
Date: Mon, 25 Mar 2013 18:20:50 +0000
Subject: [PATCH] BIS-359 / SP-564 : All feature list in dropbox. Correct
 ordering shown in GUI, API in progress.

SVN: 28686
---
 .../etl/dto/api/impl/FeatureDefinition.java   |  5 ++
 .../impl/FeatureVectorContainerDataSet.java   | 16 ++++++
 ...ImagingDataSetRegistrationTransaction.java | 13 +++++
 .../detailviewers/heatmaps/PlateLayouter.java | 53 +++++++++++++------
 4 files changed, 71 insertions(+), 16 deletions(-)

diff --git a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/dto/api/impl/FeatureDefinition.java b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/dto/api/impl/FeatureDefinition.java
index 3d8cc97d394..2af3732a7dc 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/dto/api/impl/FeatureDefinition.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/dto/api/impl/FeatureDefinition.java
@@ -87,6 +87,11 @@ public class FeatureDefinition implements IFeatureDefinition, Serializable
         this.imgFeatureDefDTO.setLabel(label);
     }
 
+    public String getFeatureLabel()
+    {
+        return imgFeatureDefDTO.getLabel();
+    }
+
     /** Optional. Sets description of a feature. */
     @Override
     public void setFeatureDescription(String description)
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/dto/api/v2/impl/FeatureVectorContainerDataSet.java b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/dto/api/v2/impl/FeatureVectorContainerDataSet.java
index 57fefcd6d3d..30f70da8960 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/dto/api/v2/impl/FeatureVectorContainerDataSet.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/dto/api/v2/impl/FeatureVectorContainerDataSet.java
@@ -53,6 +53,8 @@ public class FeatureVectorContainerDataSet extends DataSet<DataSetInformation> i
 
     private FeatureVectorDataSet originalDataset;
 
+    private IDataSet allFeaturesList;
+
     public IDataSet getOriginalDataset()
     {
         return originalDataset;
@@ -80,6 +82,11 @@ public class FeatureVectorContainerDataSet extends DataSet<DataSetInformation> i
             // calling this line assures, that the sample in the contained dataset will not be kept.
             originalDataset.getRegistrationDetails().getDataSetInformation().setLinkSample(false);
         }
+
+        if (allFeaturesList != null)
+        {
+            allFeaturesList.setSample(sampleOrNull);
+        }
     }
 
     @Override
@@ -90,6 +97,10 @@ public class FeatureVectorContainerDataSet extends DataSet<DataSetInformation> i
         {
             originalDataset.setExperiment(experimentOrNull);
         }
+        if (allFeaturesList != null)
+        {
+            allFeaturesList.setExperiment(experimentOrNull);
+        }
     }
 
     @Override
@@ -146,4 +157,9 @@ public class FeatureVectorContainerDataSet extends DataSet<DataSetInformation> i
 
         super.setDataSetType(getContainerAnalysisType(dataSetTypeCode));
     }
+
+    public void setAllFeaturesList(IDataSet allFeaturesList)
+    {
+        this.allFeaturesList = allFeaturesList;
+    }
 }
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/jython/v2/ImagingDataSetRegistrationTransaction.java b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/jython/v2/ImagingDataSetRegistrationTransaction.java
index bfc547c8304..79301d76ccf 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/jython/v2/ImagingDataSetRegistrationTransaction.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/jython/v2/ImagingDataSetRegistrationTransaction.java
@@ -235,6 +235,19 @@ public class ImagingDataSetRegistrationTransaction extends DataSetRegistrationTr
         registrationDetails.getDataSetInformation().setContainerDatasetPermId(
                 containerDataset.getDataSetCode());
 
+        FeatureListDataConfig config = new FeatureListDataConfig();
+        config.setName("All");
+        List<String> features = new ArrayList<String>();
+        for (FeatureDefinition feature : registrationDetails.getDataSetInformation().getFeatures())
+        {
+            features.add(feature.getFeatureLabel());
+        }
+        config.setFeatureList(features);
+        config.setContainerDataSet(containerDataset);
+
+        IDataSet allFeaturesList = createNewFeatureListDataSet(config);
+        containerDataset.setAllFeaturesList(allFeaturesList);
+
         return containerDataset;
     }
 
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/heatmaps/PlateLayouter.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/heatmaps/PlateLayouter.java
index 00543978217..c73c1f8efe3 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/heatmaps/PlateLayouter.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/heatmaps/PlateLayouter.java
@@ -20,10 +20,8 @@ import static ch.systemsx.cisd.openbis.plugin.screening.client.web.client.applic
 
 import java.util.ArrayList;
 import java.util.HashMap;
-import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
-import java.util.Set;
 
 import com.extjs.gxt.ui.client.Style.Scroll;
 import com.extjs.gxt.ui.client.event.BaseEvent;
@@ -150,17 +148,8 @@ public class PlateLayouter
                                         model.getAllFeatureNames());
                             } else
                             {
-                                Set<String> features =
-                                        new HashSet<String>(featureList.getFeatures());
-                                List<CodeAndLabel> result = new ArrayList<CodeAndLabel>();
-                                for (CodeAndLabel feature : model.getAllFeatureNames())
-                                {
-                                    if (features.contains(feature.getCode()))
-                                    {
-                                        result.add(feature);
-                                    }
-                                }
-                                updateHeatmapKindComboBox(heatmapKindChooser, result);
+                                updateHeatmapKindComboBox(heatmapKindChooser,
+                                        labelsOfFeatureList(featureList));
                             }
                         }
                     });
@@ -169,6 +158,7 @@ public class PlateLayouter
 
         this.view =
                 renderView(renderedWells, heatmapKindChooser, featureListsSelector, legendContainer);
+
     }
 
     private IRealNumberRenderer createRealNumberRenderer(ScreeningViewContext viewContext)
@@ -324,7 +314,27 @@ public class PlateLayouter
     {
         this.model.setFeatureVectorDataset(dataset);
         updateFeaturesListsComboBox(featureListsSelector, model.getFeatureLists());
-        updateHeatmapKindComboBox(heatmapKindChooser, model.getAllFeatureNames());
+
+        updateHeatmapKindComboBox(heatmapKindChooser, labelsOfFeatureList(featureListsSelector
+                .getValue().getValue().getItem()));
+    }
+
+    private List<CodeAndLabel> labelsOfFeatureList(FeatureList featureList)
+    {
+        Map<String, CodeAndLabel> map = new HashMap<String, CodeAndLabel>();
+        for (CodeAndLabel codeAndLabel : model.getAllFeatureNames())
+        {
+            map.put(codeAndLabel.getLabel(), codeAndLabel);
+        }
+        List<CodeAndLabel> result = new ArrayList<CodeAndLabel>();
+        for (String feature : featureList.getFeatures())
+        {
+            if (map.containsKey(feature))
+            {
+                result.add(map.get(feature));
+            }
+        }
+        return result;
     }
 
     /**
@@ -646,15 +656,26 @@ public class PlateLayouter
             List<FeatureList> featureListsOrNull)
     {
         List<LabeledItem<FeatureList>> items = new ArrayList<LabeledItem<FeatureList>>();
-        items.add(new LabeledItem<FeatureList>(null, "All"));
+        boolean hadAll = false;
         if (featureListsOrNull != null)
         {
             for (FeatureList featureList : featureListsOrNull)
             {
                 String label = featureList.getName();
-                items.add(new LabeledItem<FeatureList>(featureList, label));
+                if (label.equals("All"))
+                {
+                    hadAll = true;
+                    items.add(0, new LabeledItem<FeatureList>(featureList, label));
+                } else
+                {
+                    items.add(new LabeledItem<FeatureList>(featureList, label));
+                }
             }
         }
+        if (hadAll == false)
+        {
+            items.add(0, new LabeledItem<FeatureList>(null, "All"));
+        }
         return items;
     }
 }
-- 
GitLab