From 5fcf6b51a5f539bb4f29656c97634a4d49d0ccf8 Mon Sep 17 00:00:00 2001
From: kohleman <kohleman>
Date: Wed, 22 May 2013 14:47:45 +0000
Subject: [PATCH] New Tracking client to reflect the new structure of the Meta
 Data Model

SVN: 29200
---
 .../email/EntityTrackingEmailDataManager.java | 131 ++++++++++++----
 .../email/EntityTrackingEmailGenerator.java   | 110 ++++++++++----
 .../cisd/dsu/tracking/main/TrackingBO.java    | 140 +++++++++++++++---
 .../dsu/tracking/main/TrackingClient.java     |  11 +-
 .../tracking/etc/openBIS.keystore             | Bin 0 -> 83353 bytes
 .../bo/samplelister/ISampleListingQuery.java  |  41 +++--
 .../bo/samplelister/SampleListingWorker.java  |  35 +++--
 7 files changed, 361 insertions(+), 107 deletions(-)
 create mode 100644 deep_sequencing_unit/tracking/etc/openBIS.keystore

diff --git a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/email/EntityTrackingEmailDataManager.java b/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/email/EntityTrackingEmailDataManager.java
index 2cca9c040d3..2b83c189661 100644
--- a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/email/EntityTrackingEmailDataManager.java
+++ b/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/email/EntityTrackingEmailDataManager.java
@@ -27,6 +27,7 @@ import ch.ethz.bsse.cisd.dsu.tracking.dto.TrackedEntities;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.AbstractExternalData;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IEntityProperty;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SampleType;
 
 /**
  * Manager that groups data about tracked entities into {@link EntityTrackingEmailData} objects.
@@ -41,6 +42,8 @@ class EntityTrackingEmailDataManager
 
     private final static String PRINCIPAL_INVESTIGATOR_EMAIL = "PRINCIPAL_INVESTIGATOR_EMAIL";
 
+    private final static String MASTER_SAMPLE_TYPE = "MASTER_SAMPLE";
+
     private static Map<String, String> recipientsByAffiliation;
 
     public static void initialize(final Map<String, String> recipients)
@@ -121,8 +124,7 @@ class EntityTrackingEmailDataManager
     }
 
     /**
-     * Returns a set of emails of recipients that should get a tracking information about given
-     * <var>sequencingSample</var>.<br>
+     * Returns a set of emails of recipients that should get a tracking information about given <var>sequencingSample</var>.<br>
      */
     // NOTE: Set is needed because one recipient can occur in many roles for one sample
     private static Set<String> getSequencingSampleTrackingRecipients(
@@ -137,56 +139,125 @@ class EntityTrackingEmailDataManager
         recipientPropertyTypeCodes.add(CONTACT_PERSON_EMAIL);
         recipientPropertyTypeCodes.add(PRINCIPAL_INVESTIGATOR_EMAIL);
 
+        SampleType masterSampleType = new SampleType();
+        masterSampleType.setCode(MASTER_SAMPLE_TYPE);
+
         for (Sample sequencingSample : sequencingSamples)
         {
-            for (IEntityProperty property : sequencingSample.getProperties())
+
+            findMasterSample(sequencingSample, recipients);
+
+            // SampleType seqSampleSampleType = sequencingSample.getSampleType();
+            // if (seqSampleSampleType.equals(masterSampleType))
+            // {
+            // Set<String> r = extractProperties(recipientPropertyTypeCodes, sequencingSample);
+            // recipients.addAll(r);
+            // }
+            // else
+            // {
+            // Set<Sample> parents = sequencingSample.getParents();
+            // assert parents != null;
+            // for (Sample parent : parents)
+            // {
+            // SampleType sampleType = parent.getSampleType();
+            //
+            // if (false == sampleType.equals(masterSampleType))
+            // {
+            // Set<Sample> grandParents = parent.getParents();
+            // for (Sample grandparent : grandParents)
+            // {
+            // Set<String> r = extractProperties(recipientPropertyTypeCodes, grandparent);
+            // recipients.addAll(r);
+            // }
+            // }
+            // else
+            // {
+            // {
+            // Set<String> r = extractProperties(recipientPropertyTypeCodes, sequencingSample);
+            // recipients.addAll(r);
+            // }
+            // }
+            //
+            // }
+            //
+            // }
+        }
+        return recipients;
+    }
+
+    private static void findMasterSample(Sample s, Set<String> recipients)
+    {
+        SampleType masterSampleType = new SampleType();
+        masterSampleType.setCode(MASTER_SAMPLE_TYPE);
+        // Recipients are taken from properties of the sequencing sample.
+        final Set<String> recipientPropertyTypeCodes = new HashSet<String>();
+        recipientPropertyTypeCodes.add(CONTACT_PERSON_EMAIL);
+        recipientPropertyTypeCodes.add(PRINCIPAL_INVESTIGATOR_EMAIL);
+
+        SampleType seqSampleSampleType = s.getSampleType();
+        if (seqSampleSampleType.equals(masterSampleType))
+        {
+            Set<String> r = extractProperties(recipientPropertyTypeCodes, s);
+            recipients.addAll(r);
+        }
+        else
+        {
+            for (Sample parent : s.getParents())
             {
-                final String propertyCode = property.getPropertyType().getCode();
-                final String propertyValue = property.tryGetAsString();
-                if (recipientPropertyTypeCodes.contains(propertyCode))
-                {
-                    recipients.add(propertyValue);
-                } else
+                findMasterSample(parent, recipients);
+
+            }
+        }
+
+    }
+
+    private static Set<String> extractProperties(final Set<String> recipientPropertyTypeCodes, Sample sequencingSample)
+    {
+        Set<String> recipients = new HashSet<String>();
+        for (IEntityProperty property : sequencingSample.getProperties())
+        {
+            final String propertyCode = property.getPropertyType().getCode();
+            final String propertyValue = property.tryGetAsString();
+            if (recipientPropertyTypeCodes.contains(propertyCode))
+            {
+                recipients.add(propertyValue);
+            } else
+            {
+                // add recipient for affiliation if his email was specified in properties
+                if (propertyCode.equals(AFFILIATION))
                 {
-                    // add recipient for affiliation if his email was specified in properties
-                    if (propertyCode.equals(AFFILIATION))
+                    String affiliationRecipientOrNull =
+                            recipientsByAffiliation.get(propertyValue);
+                    if (affiliationRecipientOrNull != null)
                     {
-                        String affiliationRecipientOrNull =
-                                recipientsByAffiliation.get(propertyValue);
-                        if (affiliationRecipientOrNull != null)
-                        {
-                            recipients.add(affiliationRecipientOrNull);
-                        }
+                        recipients.add(affiliationRecipientOrNull);
                     }
                 }
             }
         }
-
         return recipients;
     }
 
     /**
-     * Returns a set of emails of recipients that should get a tracking information about given
-     * <var>flowLaneSample</var>.
+     * Returns a set of emails of recipients that should get a tracking information about given <var>flowLaneSample</var>.
      */
-    private static Set<String> getFlowLaneSampleTrackingRecipients(Sample flowLaneSample)
+    private static Set<String> getSampleTrackingRecipients(Sample sample)
     {
-        // Recipients are taken from properties of sequencing sample
-        // that is a parent of the flow lane sample.
-        assert flowLaneSample != null;
-        return getSequencingSampleTrackingRecipients(flowLaneSample.getParents());
+        // Recipients are taken from properties of master sample
+        // that is a parent/grandparent of a library/raw sample
+        assert sample != null;
+        return getSequencingSampleTrackingRecipients(sample.getParents());
     }
 
     /**
-     * Returns a set of emails of recipients that should get a tracking information about given
-     * <var>dataSet</var>.
+     * Returns a set of emails of recipients that should get a tracking information about given <var>dataSet</var>.
      */
     private static Set<String> getDataSetTrackingRecipients(AbstractExternalData dataSet)
     {
-        // Recipients are taken from properties of sequencing sample
-        // that is a parent of a flow lane sample connected directly with the data set.
+        // Recipients are taken from properties of master sample
+        // that is a parent/grandparent of a library/raw sample connected with the data set.
         assert dataSet != null;
-        return getFlowLaneSampleTrackingRecipients(dataSet.getSample());
+        return getSampleTrackingRecipients(dataSet.getSample());
     }
 
 }
\ No newline at end of file
diff --git a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/email/EntityTrackingEmailGenerator.java b/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/email/EntityTrackingEmailGenerator.java
index e944be35a9e..c17eb0b22d6 100644
--- a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/email/EntityTrackingEmailGenerator.java
+++ b/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/email/EntityTrackingEmailGenerator.java
@@ -26,6 +26,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Properties;
+import java.util.Set;
 import java.util.TreeMap;
 
 import ch.ethz.bsse.cisd.dsu.tracking.dto.TrackedEntities;
@@ -163,11 +164,11 @@ public class EntityTrackingEmailGenerator implements IEntityTrackingEmailGenerat
 
         private static final String PERMLINK_LABEL = "See details in openBIS";
 
-        private static final String GENARATED_CONTENT_TARGET = "{generated-content}";
+        private static final String GENERATED_CONTENT_TARGET = "{generated-content}";
 
         public static String fillTemplateWithData(String template, EntityTrackingEmailData emailData)
         {
-            return template.replace(GENARATED_CONTENT_TARGET, generateContent(emailData));
+            return template.replace(GENERATED_CONTENT_TARGET, generateContent(emailData));
         }
 
         private static String generateContent(EntityTrackingEmailData emailData)
@@ -179,12 +180,33 @@ public class EntityTrackingEmailGenerator implements IEntityTrackingEmailGenerat
             return sb.toString();
         }
 
+        private static String getName(Sample sequencingSample)
+        {
+            /**
+             * We try to get the external sample name recursively in the sample tree. This means we take the first name in the tree. This results in
+             * the following precedence: LIBARY -> RAW
+             */
+
+            String externalSampleName = getExternalSampleName(sequencingSample);
+            if (externalSampleName == null || externalSampleName.isEmpty())
+            {
+                Set<Sample> parents = sequencingSample.getParents();
+                for (Sample parent : parents)
+                {
+                    externalSampleName = getName(parent);
+                }
+            }
+
+            return externalSampleName;
+
+        }
+
         private static void appendSequencingSamplesData(StringBuilder sb,
                 Collection<Sample> sequencingSamples, boolean processed)
         {
             for (Sample sequencingSample : sequencingSamples)
             {
-                final String externalSampleName = getExternalSampleName(sequencingSample);
+                String externalSampleName = getName(sequencingSample);
 
                 appendln(sb, SECTION_SEPARATOR_LINE);
                 appendln(sb, SUBSECTION_SEPARATOR_LINE);
@@ -229,18 +251,19 @@ public class EntityTrackingEmailGenerator implements IEntityTrackingEmailGenerat
             appendln(sb, SUBSECTION_SEPARATOR_LINE);
             appendln(sb, "There are new sequencing results available to you.");
             appendln(sb, SUBSECTION_SEPARATOR_LINE);
-            
+
             // Using a TreeMap, so the keys are sorted
             TreeMap<String, List<AbstractExternalData>> sampleMap = new TreeMap<String, List<AbstractExternalData>>();
-            List <AbstractExternalData> dsList = new ArrayList<AbstractExternalData>();
-            
+            List<AbstractExternalData> dsList = new ArrayList<AbstractExternalData>();
+
             // we just loop over the data sets and write the connected samples as keys
-            // and the data sets as values in a map, so that we can group together as 
+            // and the data sets as values in a map, so that we can group together as
             // data sets per lane
             for (AbstractExternalData dataSet : dataSets)
             {
                 Sample s = dataSet.getSample();
-                if (sampleMap.containsKey(s.getIdentifier())) {
+                if (sampleMap.containsKey(s.getIdentifier()))
+                {
                     dsList = sampleMap.get(s.getIdentifier());
                 }
                 dsList.add(dataSet);
@@ -250,11 +273,13 @@ public class EntityTrackingEmailGenerator implements IEntityTrackingEmailGenerat
 
             // now we can write out this per sample
             Iterator<Entry<String, List<AbstractExternalData>>> it = sampleMap.entrySet().iterator();
-            while (it.hasNext()) {
-                Map.Entry pairs = (Map.Entry)it.next();
+            while (it.hasNext())
+            {
+                Map.Entry pairs = (Map.Entry) it.next();
                 appendln(sb, String.format("Results for %s", pairs.getKey()));
                 dsList = (List<AbstractExternalData>) pairs.getValue();
-                for (AbstractExternalData ed : dsList) {
+                for (AbstractExternalData ed : dsList)
+                {
                     appendDataSetDetails(sb, ed);
                 }
                 it.remove(); // avoids a ConcurrentModificationException
@@ -270,23 +295,27 @@ public class EntityTrackingEmailGenerator implements IEntityTrackingEmailGenerat
             assert flowLaneSample != null;
             sequencingSamples = flowLaneSample.getParents();
             assert sequencingSamples != null;
-            
+
             String Index1 = getIndex1(dataSet);
             String Index2 = getIndex2(dataSet);
             String Index = null;
 
-            if (Index1 != null) {
+            if (Index1 != null)
+            {
                 Index = Index1;
             }
-            if (Index2 != null) {
+            if (Index2 != null)
+            {
                 Index = Index + "-" + Index2;
             }
 
-            if (Index != null) {
+            if (Index != null)
+            {
                 appendln(sb, "Data Set Type: " + dataSet.getDataSetType().toString() +
                         " Index: " + Index);
             }
-            else {
+            else
+            {
                 appendln(sb, "Data Set Type: " + dataSet.getDataSetType().toString());
             }
             appendln(sb, dataSet.getPermlink());
@@ -296,33 +325,45 @@ public class EntityTrackingEmailGenerator implements IEntityTrackingEmailGenerat
         {
             String externalSampleName =
                     tryGetSamplePropertyValue(sequencingSample, EXTERNAL_SAMPLE_NAME_PROPERTY_CODE);
-            assert externalSampleName != null;
+            // assert externalSampleName != null;
+            if (externalSampleName == null)
+            {
+                externalSampleName = "";
+            }
             return externalSampleName;
         }
-        
-        private static String getIndex1(AbstractExternalData dataSet) {
+
+        private static String getIndex1(AbstractExternalData dataSet)
+        {
             List<IEntityProperty> properties = dataSet.getProperties();
-            
-            String Index = null; 
-            for (IEntityProperty p : properties) {
-                if (p.getPropertyType().getCode().equals(INDEX1_PROPERTY_CODE)) {
+
+            String Index = null;
+            for (IEntityProperty p : properties)
+            {
+                if (p.getPropertyType().getCode().equals(INDEX1_PROPERTY_CODE))
+                {
                     Index = p.getVocabularyTerm().getCode();
-                    if (! Index.equals("NOINDEX")) {
+                    if (!Index.equals("NOINDEX"))
+                    {
                         return Index;
                     }
                 }
             }
             return null;
         }
-        
-        private static String getIndex2(AbstractExternalData dataSet) {
+
+        private static String getIndex2(AbstractExternalData dataSet)
+        {
             List<IEntityProperty> properties = dataSet.getProperties();
-            
-            String Index = null; 
-            for (IEntityProperty p : properties) {
-                if (p.getPropertyType().getCode().equals(INDEX2_PROPERTY_CODE)) {
+
+            String Index = null;
+            for (IEntityProperty p : properties)
+            {
+                if (p.getPropertyType().getCode().equals(INDEX2_PROPERTY_CODE))
+                {
                     Index = p.getVocabularyTerm().getCode();
-                    if (! Index.equals("NOINDEX")) {
+                    if (!Index.equals("NOINDEX"))
+                    {
                         return Index;
                     }
                 }
@@ -330,7 +371,6 @@ public class EntityTrackingEmailGenerator implements IEntityTrackingEmailGenerat
             return null;
         }
 
-
         private static String tryGetSamplePropertyValue(Sample sequencingSample, String propertyCode)
         {
             String result = null;
@@ -386,4 +426,10 @@ public class EntityTrackingEmailGenerator implements IEntityTrackingEmailGenerat
 
     }
 
+    public static void findSampleWithExternalSampleName(Sample sequencingSample)
+    {
+        // TODO Auto-generated method stub
+
+    }
+
 }
diff --git a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/main/TrackingBO.java b/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/main/TrackingBO.java
index 2c1fdfdcbf3..888cf720ab9 100644
--- a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/main/TrackingBO.java
+++ b/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/main/TrackingBO.java
@@ -16,7 +16,11 @@
 
 package ch.ethz.bsse.cisd.dsu.tracking.main;
 
+import java.util.ArrayList;
+import java.util.EnumSet;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 import java.util.TreeSet;
 
@@ -30,9 +34,19 @@ import ch.systemsx.cisd.common.collection.CollectionUtils;
 import ch.systemsx.cisd.common.mail.From;
 import ch.systemsx.cisd.common.mail.IMailClient;
 import ch.systemsx.cisd.openbis.generic.shared.ITrackingServer;
+import ch.systemsx.cisd.openbis.generic.shared.api.v1.IGeneralInformationService;
+import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SampleFetchOption;
+import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchCriteria;
+import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchCriteria.MatchClause;
+import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchCriteria.MatchClauseAttribute;
+import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchCriteria.SearchOperator;
 import ch.systemsx.cisd.openbis.generic.shared.basic.IIdAndCodeHolder;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.AbstractExternalData;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityProperty;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IEntityProperty;
+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.TrackingDataSetCriteria;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TrackingSampleCriteria;
 import ch.systemsx.cisd.openbis.generic.shared.dto.SessionContextDTO;
@@ -42,27 +56,40 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.SessionContextDTO;
  */
 public class TrackingBO
 {
-    private static final String SEQUENCING_SAMPLE_TYPE = "ILLUMINA_SEQUENCING";
+    private static final String EXTERNAL_SAMPLE_NAME = "EXTERNAL_SAMPLE_NAME";
 
-    private static final String FLOW_LANE_SAMPLE_TYPE = "ILLUMINA_FLOW_LANE";
+    private static final String LIBRARY_SAMPLE_TYPE = "LIBRARY";
 
-    private static final String PROCESSING_POSSIBLE_PROPERTY_CODE = "LIBRARY_PROCESSING_POSSIBLE";
+    private static final String RAW_SAMPLE_TYPE = "RAW_SAMPLE";
+
+    private static final String DATASET_ATTACHED_TO_SAMPLE_TYPE = "LIBRARY";
+
+    private static final String PROCESSING_POSSIBLE_PROPERTY_CODE = "LIBRARY_PROCESSING_POSSIBLE_YES_NO";
 
     private static final String PROCESSING_SUCCESSFUL_PROPERTY_CODE =
             "LIBRARY_PROCESSING_SUCCESSFUL";
 
+    private final static String CONTACT_PERSON_EMAIL = "CONTACT_PERSON_EMAIL";
+
+    private final static String PRINCIPAL_INVESTIGATOR_EMAIL = "PRINCIPAL_INVESTIGATOR_EMAIL";
+
     private static final String TRUE = "true";
 
+    private static final String YES = "YES";
+
     private final ITrackingServer trackingServer;
 
+    private final IGeneralInformationService gis;
+
     private final IEntityTrackingEmailGenerator emailGenerator;
 
     private final IMailClient mailClient;
 
-    public TrackingBO(ITrackingServer trackingServer, IEntityTrackingEmailGenerator emailGenerator,
+    public TrackingBO(ITrackingServer trackingServer, IGeneralInformationService gis, IEntityTrackingEmailGenerator emailGenerator,
             IMailClient mailClient)
     {
         this.trackingServer = trackingServer;
+        this.gis = gis;
         this.emailGenerator = emailGenerator;
         this.mailClient = mailClient;
     }
@@ -72,7 +99,7 @@ public class TrackingBO
         TrackingStateDTO prevTrackingState = trackingDAO.getTrackingState();
 
         TrackedEntities changedEntities =
-                fetchChangedEntities(prevTrackingState, trackingServer, session);
+                fetchChangedEntities(prevTrackingState, trackingServer, gis, session);
         List<EmailWithSummary> emailsWithSummary = emailGenerator.generateEmails(changedEntities);
         sendEmails(emailsWithSummary, mailClient);
         saveTrackingState(prevTrackingState, changedEntities, trackingDAO);
@@ -163,17 +190,18 @@ public class TrackingBO
     }
 
     private static TrackedEntities fetchChangedEntities(TrackingStateDTO trackingState,
-            ITrackingServer trackingServer, SessionContextDTO session)
+            ITrackingServer trackingServer, IGeneralInformationService gis, SessionContextDTO session)
     {
         List<Sample> sequencingSamplesToBeProcessed =
-                listSequencingSamples(PROCESSING_POSSIBLE_PROPERTY_CODE, trackingState
-                        .getAlreadyTrackedSampleIdsToBeProcessed(), trackingServer, session);
+                listSequencingSamples(RAW_SAMPLE_TYPE, YES, PROCESSING_POSSIBLE_PROPERTY_CODE, trackingState
+                        .getAlreadyTrackedSampleIdsToBeProcessed(), trackingServer, gis, session);
+
         List<Sample> sequencingSamplesSuccessfullyProcessed =
-                listSequencingSamples(PROCESSING_SUCCESSFUL_PROPERTY_CODE, trackingState
-                        .getAlreadyTrackedSampleIdsProcessed(), trackingServer, session);
+                listSequencingSamples(LIBRARY_SAMPLE_TYPE, TRUE, PROCESSING_SUCCESSFUL_PROPERTY_CODE, trackingState
+                        .getAlreadyTrackedSampleIdsProcessed(), trackingServer, gis, session);
 
         TrackingDataSetCriteria dataSetCriteria =
-                new TrackingDataSetCriteria(FLOW_LANE_SAMPLE_TYPE, trackingState
+                new TrackingDataSetCriteria(DATASET_ATTACHED_TO_SAMPLE_TYPE, trackingState
                         .getLastSeenDatasetId());
         List<AbstractExternalData> dataSets =
                 trackingServer.listDataSets(session.getSessionToken(), dataSetCriteria);
@@ -182,22 +210,100 @@ public class TrackingBO
                 sequencingSamplesSuccessfullyProcessed, dataSets);
     }
 
-    private static List<Sample> listSequencingSamples(String propertyTypeCode,
-            Set<Long> alreadyTrackedSampleIds, ITrackingServer trackingServer,
+    private static List<Sample> listSequencingSamples(String SampleType, String propertyValue, String propertyTypeCode,
+            Set<Long> alreadyTrackedSampleIds, ITrackingServer trackingServer, IGeneralInformationService gis,
             SessionContextDTO session)
     {
-        return listSamples(SEQUENCING_SAMPLE_TYPE, propertyTypeCode, TRUE, alreadyTrackedSampleIds,
-                trackingServer, session);
+        return listSamples(SampleType, propertyTypeCode, propertyValue, alreadyTrackedSampleIds,
+                trackingServer, gis, session);
     }
 
     private static List<Sample> listSamples(String sampleType, String propertyTypeCode,
             String propertyValue, Set<Long> alreadyTrackedSampleIds,
-            ITrackingServer trackingServer, SessionContextDTO session)
+            ITrackingServer trackingServer, IGeneralInformationService gis, SessionContextDTO session)
     {
         TrackingSampleCriteria criteria =
                 new TrackingSampleCriteria(sampleType, propertyTypeCode, propertyValue,
                         alreadyTrackedSampleIds);
-        return trackingServer.listSamples(session.getSessionToken(), criteria);
+        List<Sample> samples = trackingServer.listSamples(session.getSessionToken(), criteria);
+
+        for (Sample sample : samples)
+        {
+            SearchCriteria parentCriteria = new SearchCriteria();
+            parentCriteria.setOperator(SearchOperator.MATCH_ANY_CLAUSES);
+
+            for (Sample parent : sample.getParents())
+            {
+                parentCriteria.addMatchClause(MatchClause.createAttributeMatch(MatchClauseAttribute.CODE, parent.getCode()));
+            }
+
+            List<ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.Sample> apiParents =
+                    gis.searchForSamples(session.getSessionToken(), parentCriteria,
+                            EnumSet.of(SampleFetchOption.PARENTS, SampleFetchOption.PROPERTIES));
+            Set<Sample> dtoParents = new HashSet<Sample>();
+
+            for (ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.Sample apiParent : apiParents)
+            {
+                dtoParents.add(convertSample(apiParent));
+            }
+            sample.setParents(dtoParents);
+        }
+
+        return samples;
+    }
+
+    private static Sample convertSample(ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.Sample apiSample)
+    {
+        Sample dtoSample = new Sample();
+
+        EntityProperty person = new EntityProperty();
+        EntityProperty pi = new EntityProperty();
+        EntityProperty externalSampleName = new EntityProperty();
+
+        List<IEntityProperty> propertyList = new ArrayList<IEntityProperty>();
+
+        dtoSample.setCode(apiSample.getCode());
+        String sampleTypeCode = apiSample.getSampleTypeCode();
+
+        SampleType stc = new SampleType();
+        stc.setCode(sampleTypeCode);
+
+        dtoSample.setSampleType(stc);
+
+        Map<String, String> properties = apiSample.getProperties();
+
+        PropertyType personType = new PropertyType();
+        PropertyType piType = new PropertyType();
+        PropertyType externalSampleNameType = new PropertyType();
+
+        personType.setCode(CONTACT_PERSON_EMAIL);
+        piType.setCode(PRINCIPAL_INVESTIGATOR_EMAIL);
+        externalSampleNameType.setCode(EXTERNAL_SAMPLE_NAME);
+
+        person.setPropertyType(personType);
+        person.setValue(properties.get(CONTACT_PERSON_EMAIL));
+        propertyList.add(person);
+
+        pi.setPropertyType(piType);
+        pi.setValue(properties.get(PRINCIPAL_INVESTIGATOR_EMAIL));
+        propertyList.add(pi);
+
+        externalSampleName.setPropertyType(externalSampleNameType);
+        externalSampleName.setValue(properties.get(EXTERNAL_SAMPLE_NAME));
+        propertyList.add(externalSampleName);
+
+        dtoSample.setProperties(propertyList);
+
+        if (apiSample.getRetrievedFetchOptions().contains(SampleFetchOption.PARENTS))
+        {
+            Set<Sample> dtoParents = new HashSet<Sample>();
+            for (ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.Sample apiParent : apiSample.getParents())
+            {
+                dtoParents.add(convertSample(apiParent));
+            }
+            dtoSample.setParents(dtoParents);
+        }
+        return dtoSample;
     }
 
     static class TrackingStateUpdateHelper
diff --git a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/main/TrackingClient.java b/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/main/TrackingClient.java
index bdaf5b9c4d5..780ce7375d8 100644
--- a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/main/TrackingClient.java
+++ b/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/main/TrackingClient.java
@@ -38,6 +38,7 @@ import ch.systemsx.cisd.common.mail.IMailClient;
 import ch.systemsx.cisd.common.shared.basic.string.StringUtils;
 import ch.systemsx.cisd.common.spring.HttpInvokerUtils;
 import ch.systemsx.cisd.openbis.generic.shared.ITrackingServer;
+import ch.systemsx.cisd.openbis.generic.shared.api.v1.IGeneralInformationService;
 import ch.systemsx.cisd.openbis.generic.shared.dto.SessionContextDTO;
 
 /**
@@ -74,10 +75,11 @@ public class TrackingClient
         Parameters params = new Parameters(props);
 
         ITrackingServer trackingServer = createOpenBISTrackingServer(params);
+        IGeneralInformationService gis = createOpenBISGeneralInformationService(params);
         IEntityTrackingEmailGenerator emailGenerator =
                 new EntityTrackingEmailGenerator(props, retrieveEmailTemplate());
         IMailClient mailClient = params.getMailClient();
-        TrackingBO trackingBO = new TrackingBO(trackingServer, emailGenerator, mailClient);
+        TrackingBO trackingBO = new TrackingBO(trackingServer, gis, emailGenerator, mailClient);
 
         ITrackingDAO trackingDAO = new FileBasedTrackingDAO(LOCAL_STORAGE_FILE);
 
@@ -93,6 +95,13 @@ public class TrackingClient
                 5 * DateUtils.MILLIS_PER_MINUTE);
     }
 
+    private static IGeneralInformationService createOpenBISGeneralInformationService(Parameters params)
+    {
+        String serviceURL = params.getOpenbisServerURL() + IGeneralInformationService.SERVICE_URL;
+        return HttpInvokerUtils.createServiceStub(IGeneralInformationService.class, serviceURL,
+                5 * DateUtils.MILLIS_PER_MINUTE);
+    }
+
     private static SessionContextDTO authentificateInOpenBIS(Parameters params,
             ITrackingServer trackingServer)
     {
diff --git a/deep_sequencing_unit/tracking/etc/openBIS.keystore b/deep_sequencing_unit/tracking/etc/openBIS.keystore
new file mode 100644
index 0000000000000000000000000000000000000000..776d15ff5354656cb250ea54cd9134af48feaa93
GIT binary patch
literal 83353
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

literal 0
HcmV?d00001

diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/samplelister/ISampleListingQuery.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/samplelister/ISampleListingQuery.java
index dc9bf804c24..1008e0860c1 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/samplelister/ISampleListingQuery.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/samplelister/ISampleListingQuery.java
@@ -29,7 +29,6 @@ import net.lemnik.eodsql.Select;
 import net.lemnik.eodsql.TransactionQuery;
 import net.lemnik.eodsql.TypeMapper;
 import net.lemnik.eodsql.spi.util.NonUpdateCapableDataObjectBinding;
-
 import ch.rinn.restrictions.Friend;
 import ch.rinn.restrictions.Private;
 import ch.systemsx.cisd.openbis.generic.server.business.bo.common.GenericEntityPropertyRecord;
@@ -43,11 +42,10 @@ import ch.systemsx.cisd.openbis.generic.server.dataaccess.db.StringArrayMapper;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SampleType;
 
 /**
- * A {@link TransactionQuery} interface for obtaining large sets of sample-related entities from the
- * database.
+ * A {@link TransactionQuery} interface for obtaining large sets of sample-related entities from the database.
  * <p>
- * This interface is intended to be used only in this package. The <code>public</code> modifier is
- * needed for creating a dynamic proxy by the EOD SQL library.
+ * This interface is intended to be used only in this package. The <code>public</code> modifier is needed for creating a dynamic proxy by the EOD SQL
+ * library.
  * 
  * @author Bernd Rinn
  */
@@ -165,8 +163,7 @@ public interface ISampleListingQuery extends BaseQuery, IPropertyListingQuery
             String groupCode, long sampleTypeId);
 
     /**
-     * Returns the samples for the given <var>groupCode</var> and <var>sampleTypeId</var> that are
-     * assigned to an experiment.
+     * Returns the samples for the given <var>groupCode</var> and <var>sampleTypeId</var> that are assigned to an experiment.
      */
     @Select(sql = SELECT_FROM_SAMPLES_S + " join spaces g on s.space_id=g.id "
             + " where s.expe_id is not null and g.dbin_id=?{1} and g.code=?{2} and s.saty_id=?{3} "
@@ -200,8 +197,7 @@ public interface ISampleListingQuery extends BaseQuery, IPropertyListingQuery
             long sampleTypeId);
 
     /**
-     * Returns the samples for all spaces and <var>sampleTypeId</var> that are assigned to an
-     * experiment.
+     * Returns the samples for all spaces and <var>sampleTypeId</var> that are assigned to an experiment.
      */
     @Select(sql = SELECT_FROM_SAMPLES_S + " join spaces g on s.space_id=g.id "
             + " where s.expe_id is not null and g.dbin_id=?{1} and s.saty_id=?{2} "
@@ -282,9 +278,8 @@ public interface ISampleListingQuery extends BaseQuery, IPropertyListingQuery
     //
 
     /**
-     * Returns all samples with a <var>propertyType</var> attached having specified
-     * <var>popertyValue</var>. Additionally id of the sample SHOULDN'T be in the specified set of
-     * ids.
+     * Returns all samples with a <var>propertyType</var> attached having specified <var>popertyValue</var>. Additionally id of the sample SHOULDN'T
+     * be in the specified set of ids.
      */
     @Select(sql = SELECT_FROM_SAMPLES_S + " where s.saty_id=?{1} and s.id in ("
             + "       select samp_id from sample_properties sp where sp.stpt_id in ("
@@ -296,6 +291,22 @@ public interface ISampleListingQuery extends BaseQuery, IPropertyListingQuery
     public DataIterator<SampleRecord> getSamplesWithPropertyValue(long sampleTypeId,
             String propertyTypeCode, String propertyValue, LongSet sampleIds);
 
+    /**
+     * Returns all samples with a <var>propertyType</var> and s specific <var>propertyValue</var> The <var>propertyValue</var> is a term of a
+     * controlled vocabulary in this case. Additionally <var>sampleTypeId</var> should not be in the the list of <var>sampleIds</var>
+     */
+    @Select(sql = SELECT_FROM_SAMPLES_S + " where s.saty_id=?{1} and s.id in ("
+            + "       select samp_id from sample_properties sp where sp.stpt_id in ("
+            + "              select id from sample_type_property_types stpt where stpt.prty_id = "
+            + "                     (select id from property_types where code=?{2})"
+            + "              )  and cvte_id in ( "
+            + "                        select id from controlled_vocabulary_terms where code=?{3}"
+            + "                 )"
+            + "       ) and not id = any(?{4})", parameterBindings =
+        { TypeMapper.class, TypeMapper.class, TypeMapper.class, LongSetMapper.class }, fetchSize = FETCH_SIZE)
+    public DataIterator<SampleRecord> getSamplesWithControlledVocabularyWithPropertyValue(long sampleTypeId,
+            String propertyTypeCode, String propertyValue, LongSet sampleIds);
+
     //
     // Shared samples
     //
@@ -335,8 +346,7 @@ public interface ISampleListingQuery extends BaseQuery, IPropertyListingQuery
     }
 
     /**
-     * Returns the sample type for the given <code>sampleCode</code>. Note that the code of the
-     * result is already HTML escaped.
+     * Returns the sample type for the given <code>sampleCode</code>. Note that the code of the result is already HTML escaped.
      */
     @Select(sql = "select id, code, generated_from_depth, part_of_depth from sample_types"
             + "      where code=?{2} and dbin_id=?{1}", resultSetBinding = SampleTypeDataObjectBinding.class)
@@ -408,8 +418,7 @@ public interface ISampleListingQuery extends BaseQuery, IPropertyListingQuery
             LongSet sampleIds);
 
     /**
-     * Returns all controlled vocabulary property values of all samples specified by
-     * <var>sampleIds</var>.
+     * Returns all controlled vocabulary property values of all samples specified by <var>sampleIds</var>.
      * 
      * @param sampleIds The set of sample ids to get the property values for.
      */
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/samplelister/SampleListingWorker.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/samplelister/SampleListingWorker.java
index 319415b98b0..9ed88b980a3 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/samplelister/SampleListingWorker.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/samplelister/SampleListingWorker.java
@@ -59,19 +59,16 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Space;
 import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.IdentifierHelper;
 
 /**
- * A business worker object for fast sample listing. It has only one interface method, which is
- * {@link #load()}. This method deals with
+ * A business worker object for fast sample listing. It has only one interface method, which is {@link #load()}. This method deals with
  * <ul>
  * <li>information stored in the sample table</li>
  * <li>sample type information</li>
  * <li>assigned experiment, project, group and database instance</li>
  * <li>sample relationships (parent-child and contained-container)</li>
  * </ul>
- * It delegates the work of enriching the samples with properties to an implementation of a
- * {@link IEntityPropertiesEnricher}. The worker follows the logic that only the samples specified
- * by the {@link ListSampleCriteria}, the <i>primary samples</i>, should be enriched with properties
- * (as only primary samples are shown in a separate row of the list). From <i>dependent samples</i>,
- * only basic information is obtained.
+ * It delegates the work of enriching the samples with properties to an implementation of a {@link IEntityPropertiesEnricher}. The worker follows the
+ * logic that only the samples specified by the {@link ListSampleCriteria}, the <i>primary samples</i>, should be enriched with properties (as only
+ * primary samples are shown in a separate row of the list). From <i>dependent samples</i>, only basic information is obtained.
  * 
  * @author Bernd Rinn
  */
@@ -214,8 +211,8 @@ final class SampleListingWorker extends AbstractLister
     //
 
     /**
-     * Load the samples defined by the criteria given to the constructor. The samples will be
-     * enriched with sample properties and dependencies to parents and container will be resolved.
+     * Load the samples defined by the criteria given to the constructor. The samples will be enriched with sample properties and dependencies to
+     * parents and container will be resolved.
      */
     public List<Sample> load()
     {
@@ -234,7 +231,8 @@ final class SampleListingWorker extends AbstractLister
         retrievePrimaryBasicSamples(tryGetIteratorForContainedSamples());
         retrievePrimaryBasicSamples(tryGetIteratorForParentSamples());
         retrievePrimaryBasicSamples(tryGetIteratorForChildSamples());
-        retrievePrimaryBasicSamples(tryGetIteratorForNewTrackedSamples());
+        retrievePrimaryBasicSamples(tryGetIteratorForNewTrackedProcessedSamples());
+        retrievePrimaryBasicSamples(tryGetIteratorForNewTrackedToBeProcessedSamples());
         retrievePrimaryBasicSamples(tryGetIteratorForMetaprojectSamples());
         if (operationLog.isDebugEnabled())
         {
@@ -589,7 +587,7 @@ final class SampleListingWorker extends AbstractLister
         }
     }
 
-    private Iterable<SampleRecord> tryGetIteratorForNewTrackedSamples()
+    private Iterable<SampleRecord> tryGetIteratorForNewTrackedProcessedSamples()
     {
         if (criteria.getSampleTypeCode() == null)
         {
@@ -601,6 +599,21 @@ final class SampleListingWorker extends AbstractLister
         final String propertyValue = criteria.getPropertyValue();
         return query.getSamplesWithPropertyValue(sampleTypeId, propertyTypeCode, propertyValue,
                 new LongOpenHashSet(criteria.getAlreadyTrackedSampleIds()));
+
+    }
+
+    private Iterable<SampleRecord> tryGetIteratorForNewTrackedToBeProcessedSamples()
+    {
+        if (criteria.getSampleTypeCode() == null)
+        {
+            return null;
+        }
+        final long sampleTypeId =
+                referencedEntityDAO.getSampleTypeIdForSampleTypeCode(criteria.getSampleTypeCode());
+        final String propertyTypeCode = criteria.getPropertyTypeCode();
+        final String propertyValue = criteria.getPropertyValue();
+        return query.getSamplesWithControlledVocabularyWithPropertyValue(sampleTypeId, propertyTypeCode, propertyValue,
+                new LongOpenHashSet(criteria.getAlreadyTrackedSampleIds()));
     }
 
     private void retrievePrimaryBasicSamples(final Iterable<SampleRecord> sampleIteratorOrNull)
-- 
GitLab