From 76b1846a62fd7f7fc53cfef716ec0e16dd5c0672 Mon Sep 17 00:00:00 2001
From: felmer <felmer>
Date: Wed, 2 Sep 2009 07:12:38 +0000
Subject: [PATCH] SE-127 some bugs (but not all) in samples table of protein
 details view fixed

SVN: 12357
---
 .../application/ProteinSamplesSection.java    |  6 ++--
 .../SampleAbundanceBrowserGrid.java           |  6 ++--
 .../ListSampleAbundanceByProteinCriteria.java | 10 +++---
 .../ListSampleAbundanceDataProvider.java      |  9 +++---
 .../web/server/PhosphoNetXClientService.java  |  2 +-
 .../phosphonetx/server/PhosphoNetXServer.java |  4 +--
 .../server/PhosphoNetXServerLogger.java       |  6 ++--
 .../server/business/ISampleTable.java         |  2 +-
 .../server/business/SampleTable.java          | 32 +++++--------------
 .../server/dataaccess/IProteinQueryDAO.java   | 10 ++++--
 .../shared/IPhosphoNetXServer.java            |  2 +-
 11 files changed, 39 insertions(+), 50 deletions(-)

diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/application/ProteinSamplesSection.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/application/ProteinSamplesSection.java
index 0d7b2f5c3e3..6330f85a981 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/application/ProteinSamplesSection.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/application/ProteinSamplesSection.java
@@ -38,12 +38,12 @@ public class ProteinSamplesSection extends SingleSectionPanel
     private IDisposableComponent sampleDisposableGrid;
 
     public ProteinSamplesSection(final IViewContext<IPhosphoNetXClientServiceAsync> viewContext,
-            final TechId proteinID)
+            final TechId proteinReferenceID)
     {
         super("Samples");
         sampleDisposableGrid =
-                SampleAbundanceBrowserGrid.createGridForProteinSamples(viewContext, proteinID,
-                        createGridId(proteinID));
+                SampleAbundanceBrowserGrid.createGridForProteinSamples(viewContext, proteinReferenceID,
+                        createGridId(proteinReferenceID));
         add(sampleDisposableGrid.getComponent());
     }
 
diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/application/SampleAbundanceBrowserGrid.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/application/SampleAbundanceBrowserGrid.java
index b4701b88583..053d69249d7 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/application/SampleAbundanceBrowserGrid.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/application/SampleAbundanceBrowserGrid.java
@@ -86,12 +86,12 @@ public class SampleAbundanceBrowserGrid
     private final IViewContext<IPhosphoNetXClientServiceAsync> phosphoViewContext;
 
     public static IDisposableComponent createGridForProteinSamples(
-            final IViewContext<IPhosphoNetXClientServiceAsync> viewContext, final TechId proteinID,
-            final String gridId)
+            final IViewContext<IPhosphoNetXClientServiceAsync> viewContext,
+            final TechId proteinReferenceID, final String gridId)
     {
         final ListSampleAbundanceByProteinCriteria criteria =
                 new ListSampleAbundanceByProteinCriteria();
-        criteria.setProteinID(proteinID);
+        criteria.setProteinReferenceID(proteinReferenceID);
 
         ISampleAbundanceCriteriaProvider criteriaProvider =
                 new SampleAbundanceCriteriaProvider(viewContext, criteria);
diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/dto/ListSampleAbundanceByProteinCriteria.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/dto/ListSampleAbundanceByProteinCriteria.java
index 592ec020411..6eefaa1677b 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/dto/ListSampleAbundanceByProteinCriteria.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/dto/ListSampleAbundanceByProteinCriteria.java
@@ -30,15 +30,15 @@ import ch.systemsx.cisd.openbis.plugin.phosphonetx.shared.basic.dto.SampleWithPr
 public class ListSampleAbundanceByProteinCriteria extends
         DefaultResultSetConfig<String, SampleWithPropertiesAndAbundance> implements IsSerializable
 {
-    private TechId proteinID;
+    private TechId proteinReferenceID;
 
-    public final TechId getProteinID()
+    public final TechId getProteinReferenceID()
     {
-        return proteinID;
+        return proteinReferenceID;
     }
 
-    public final void setProteinID(TechId proteinID)
+    public final void setProteinReferenceID(TechId proteinReferenceID)
     {
-        this.proteinID = proteinID;
+        this.proteinReferenceID = proteinReferenceID;
     }
 }
diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/server/ListSampleAbundanceDataProvider.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/server/ListSampleAbundanceDataProvider.java
index e8701aec368..13350d8a519 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/server/ListSampleAbundanceDataProvider.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/server/ListSampleAbundanceDataProvider.java
@@ -35,19 +35,20 @@ class ListSampleAbundanceDataProvider implements IOriginalDataProvider<SampleWit
 
     private final String sessionToken;
 
-    private final TechId proteinID;
+    private final TechId proteinReferenceID;
 
-    ListSampleAbundanceDataProvider(IPhosphoNetXServer server, String sessionToken, TechId proteinID)
+    ListSampleAbundanceDataProvider(IPhosphoNetXServer server, String sessionToken,
+            TechId proteinReferenceID)
     {
         this.server = server;
         this.sessionToken = sessionToken;
-        this.proteinID = proteinID;
+        this.proteinReferenceID = proteinReferenceID;
     }
 
 
     public List<SampleWithPropertiesAndAbundance> getOriginalData() throws UserFailureException
     {
-        return server.listSamplesWithAbundanceByProtein(sessionToken, proteinID);
+        return server.listSamplesWithAbundanceByProtein(sessionToken, proteinReferenceID);
     }
 
 }
diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/server/PhosphoNetXClientService.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/server/PhosphoNetXClientService.java
index b2696ff2588..a605154b033 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/server/PhosphoNetXClientService.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/server/PhosphoNetXClientService.java
@@ -144,7 +144,7 @@ public class PhosphoNetXClientService extends AbstractClientService implements
     {
         final String sessionToken = getSessionToken();
         return listEntities(criteria, new ListSampleAbundanceDataProvider(server, sessionToken,
-                criteria.getProteinID()));
+                criteria.getProteinReferenceID()));
     }
 
     public String prepareExportSamplesWithAbundance(
diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/PhosphoNetXServer.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/PhosphoNetXServer.java
index 663bcbaebaa..0f964cb130b 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/PhosphoNetXServer.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/PhosphoNetXServer.java
@@ -187,11 +187,11 @@ public class PhosphoNetXServer extends AbstractServer<IPhosphoNetXServer> implem
     }
 
     public List<SampleWithPropertiesAndAbundance> listSamplesWithAbundanceByProtein(
-            String sessionToken, TechId proteinID) throws UserFailureException
+            String sessionToken, TechId proteinReferenceID) throws UserFailureException
     {
         final Session session = getSessionManager().getSession(sessionToken);
         ISampleTable sampleTable = specificBOFactory.createSampleTable(session);
-        sampleTable.loadSamplesWithAbundance(proteinID);
+        sampleTable.loadSamplesWithAbundance(proteinReferenceID);
         return sampleTable.getSamples();
     }
 
diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/PhosphoNetXServerLogger.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/PhosphoNetXServerLogger.java
index 025e9d0e986..a3e35f953f3 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/PhosphoNetXServerLogger.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/PhosphoNetXServerLogger.java
@@ -83,10 +83,10 @@ public class PhosphoNetXServerLogger extends AbstractServerLogger implements IPh
     }
 
     public List<SampleWithPropertiesAndAbundance> listSamplesWithAbundanceByProtein(
-            String sessionToken, TechId proteinID) throws UserFailureException
+            String sessionToken, TechId proteinReferenceID) throws UserFailureException
     {
-        logAccess(sessionToken, "list_samples_with_abundance_by_protein", "PROTEIN_ID(%s)",
-                proteinID);
+        logAccess(sessionToken, "list_samples_with_abundance_by_protein", "PROTEIN_REFERENCE_ID(%s)",
+                proteinReferenceID);
         return null;
     }
 
diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/business/ISampleTable.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/business/ISampleTable.java
index cbf5d9da684..63e7d88cf96 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/business/ISampleTable.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/business/ISampleTable.java
@@ -29,7 +29,7 @@ import ch.systemsx.cisd.openbis.plugin.phosphonetx.shared.basic.dto.SampleWithPr
 public interface ISampleTable
 {
 
-    public void loadSamplesWithAbundance(TechId proteinID);
+    public void loadSamplesWithAbundance(TechId proteinReferenceID);
 
     public List<SampleWithPropertiesAndAbundance> getSamples();
 
diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/business/SampleTable.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/business/SampleTable.java
index 4db06a266bf..85e07e332e3 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/business/SampleTable.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/business/SampleTable.java
@@ -27,7 +27,6 @@ import org.apache.commons.lang.StringEscapeUtils;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDAOFactory;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.ISampleDAO;
 import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
-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.dto.PropertyTypePE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.SamplePE;
@@ -47,10 +46,12 @@ class SampleTable extends AbstractBusinessObject implements ISampleTable
 {
     private List<SampleWithPropertiesAndAbundance> samples =
             new ArrayList<SampleWithPropertiesAndAbundance>();
+    private SampleIDProvider sampleIDProvider;
 
     SampleTable(IDAOFactory daoFactory, IPhosphoNetXDAOFactory specificDAOFactory, Session session)
     {
         super(daoFactory, specificDAOFactory, session);
+        sampleIDProvider = new SampleIDProvider(daoFactory.getSampleDAO());
     }
 
     public List<SampleWithPropertiesAndAbundance> getSamples()
@@ -58,13 +59,13 @@ class SampleTable extends AbstractBusinessObject implements ISampleTable
         return samples;
     }
 
-    public void loadSamplesWithAbundance(TechId proteinID)
+    public void loadSamplesWithAbundance(TechId proteinReferenceID)
     {
         samples = new ArrayList<SampleWithPropertiesAndAbundance>();
         IProteinQueryDAO proteinQueryDAO = getSpecificDAOFactory().getProteinQueryDAO();
         ISampleDAO sampleDAO = getDaoFactory().getSampleDAO();
         DataSet<SampleAbundance> sampleAbundances =
-                proteinQueryDAO.listSampleAbundanceByProtein(proteinID.getId());
+                proteinQueryDAO.listSampleAbundanceByProtein(proteinReferenceID.getId());
         try
         {
             for (SampleAbundance sampleAbundance : sampleAbundances)
@@ -72,12 +73,8 @@ class SampleTable extends AbstractBusinessObject implements ISampleTable
                 SampleWithPropertiesAndAbundance sample = new SampleWithPropertiesAndAbundance();
                 sample.setAbundance(sampleAbundance.getAbundance());
                 String samplePermID = sampleAbundance.getSamplePermID();
-                SamplePE samplePE = sampleDAO.tryToFindByPermID(samplePermID);
-                if (samplePE == null)
-                {
-                    throw new IllegalStateException("No sample with following permanent ID found: "
-                            + samplePermID);
-                }
+                long sampleID = sampleIDProvider.getSampleIDOrParentSampleID(samplePermID);
+                SamplePE samplePE = sampleDAO.getByTechId(new TechId(sampleID));
                 fillSampleData(sample, samplePE);
                 samples.add(sample);
             }
@@ -95,20 +92,7 @@ class SampleTable extends AbstractBusinessObject implements ISampleTable
         result.setIdentifier(StringEscapeUtils.escapeHtml(samplePE.getIdentifier()));
         result.setSampleType(SampleTypeTranslator.translate(samplePE.getSampleType(),
                 new HashMap<PropertyTypePE, PropertyType>()));
-        setProperties(result, samplePE);
-    }
-
-    private static void setProperties(final SampleWithPropertiesAndAbundance result,
-            final SamplePE samplePE)
-    {
-        if (samplePE.isPropertiesInitialized())
-        {
-            result.setProperties(EntityPropertyTranslator.translate(samplePE.getProperties(),
-                    new HashMap<PropertyTypePE, PropertyType>()));
-        } else
-        {
-            result.setProperties(new ArrayList<IEntityProperty>());
-        }
+        result.setProperties(EntityPropertyTranslator.translate(samplePE.getProperties(),
+                new HashMap<PropertyTypePE, PropertyType>()));
     }
-
 }
diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/dataaccess/IProteinQueryDAO.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/dataaccess/IProteinQueryDAO.java
index 5c73ea7bf19..232314502d4 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/dataaccess/IProteinQueryDAO.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/dataaccess/IProteinQueryDAO.java
@@ -83,8 +83,12 @@ public interface IProteinQueryDAO extends BaseQuery
     @Select("select * from peptides where prot_id = ?{1}")
     public DataSet<IdentifiedPeptide> listIdentifiedPeptidesByProtein(long proteinID);
     
-    @Select("select a.id, perm_id, value from abundances as a join samples as s on a.samp_id = s.id "
-            + "where a.prot_id = ?{1}")
-    public DataSet<SampleAbundance> listSampleAbundanceByProtein(long proteinID);
+    @Select("select distinct a.id, perm_id, value " 
+            + "from abundances as a left join proteins as p on a.prot_id = p.id "
+            + "                     left join identified_proteins as i on i.prot_id = p.id "
+            + "                     left join sequences as s on i.sequ_id = s.id "
+            + "                     left join samples on a.samp_id = samples.id "
+            + "where s.prre_id = ?{1}")
+    public DataSet<SampleAbundance> listSampleAbundanceByProtein(long proteinReferenceID);
     
 }
diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/shared/IPhosphoNetXServer.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/shared/IPhosphoNetXServer.java
index 732f465312b..342e5af0953 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/shared/IPhosphoNetXServer.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/shared/IPhosphoNetXServer.java
@@ -74,6 +74,6 @@ public interface IPhosphoNetXServer extends IServer
     @Transactional
     @RolesAllowed(RoleSet.OBSERVER)
     public List<SampleWithPropertiesAndAbundance> listSamplesWithAbundanceByProtein(
-            String sessionToken, TechId proteinID) throws UserFailureException;
+            String sessionToken, TechId proteinReferenceID) throws UserFailureException;
 
 }
-- 
GitLab