From 96a072fda6a3651a4c0e8024f0c84fc2962cb47f Mon Sep 17 00:00:00 2001
From: felmer <felmer>
Date: Tue, 14 Dec 2010 07:56:38 +0000
Subject: [PATCH] Integrate new version of Image Viewer. Screening openBIS bugs
 fixed.

SVN: 19113
---
 .../LogicalImageDatasetSection.java           |  8 ++-
 .../detailviewers/LogicalImageViewer.java     |  9 ++-
 .../detailviewers/WellContentDialog.java      |  1 +
 .../detailviewers/WellImageSampleSection.java |  2 +-
 .../web/server/ImageViewerLaunchServlet.java  | 67 ++++++-------------
 5 files changed, 36 insertions(+), 51 deletions(-)

diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/LogicalImageDatasetSection.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/LogicalImageDatasetSection.java
index 06f44c6d46a..7f058a528b5 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/LogicalImageDatasetSection.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/LogicalImageDatasetSection.java
@@ -24,6 +24,7 @@ import com.google.gwt.user.client.ui.Widget;
 
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.AbstractAsyncCallback;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.TabContent;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Experiment;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExternalData;
 import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.Dict;
 import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.DisplayTypeIDGenerator;
@@ -72,14 +73,17 @@ public class LogicalImageDatasetSection extends TabContent
                     setLayout(new RowLayout());
                     setScrollMode(Scroll.AUTO);
 
-                    String experimentPermId = dataset.getExperiment().getPermId();
+                    Experiment experiment = dataset.getExperiment();
+                    String experimentPermId = experiment.getPermId();
+                    String identifier = experiment.getIdentifier();
                     LogicalImageReference logicalImageReference =
                             new LogicalImageReference(dataset.getCode(), dataset.getDataStore()
                                     .getCode(), dataset.getDataStore().getHostUrl(),
                                     imageInfo.getImageParameters());
                     LogicalImageViewer viewer =
                             new LogicalImageViewer(logicalImageReference,
-                                    LogicalImageDatasetSection.this.viewContext, experimentPermId);
+                                    LogicalImageDatasetSection.this.viewContext, identifier,
+                                    experimentPermId);
                     Widget viewerWidget = viewer.getViewerWidget(imageInfo.getChannelStacks());
                     add(viewerWidget, PlateLayouter.createRowLayoutSurroundingData());
 
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/LogicalImageViewer.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/LogicalImageViewer.java
index 26f374a009c..bb25202cc5d 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/LogicalImageViewer.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/LogicalImageViewer.java
@@ -63,13 +63,17 @@ public class LogicalImageViewer
 
     private final IDefaultChannelState channelState;
 
+    private final String experimentIdentifier;
+    
     private String currentlySelectedChannelCode;
 
     public LogicalImageViewer(LogicalImageReference logicalImageReference,
-            IViewContext<IScreeningClientServiceAsync> viewContext, String experimentPermId)
+            IViewContext<IScreeningClientServiceAsync> viewContext, String experimentIdentifier,
+            String experimentPermId)
     {
         this.logicalImageReference = logicalImageReference;
         this.viewContext = viewContext;
+        this.experimentIdentifier = experimentIdentifier;
         this.channelState = createDefaultChannelState(viewContext, experimentPermId);
     }
 
@@ -203,7 +207,8 @@ public class LogicalImageViewer
         String sessionToken = viewContext.getModel().getSessionContext().getSessionID();
         urlParams.addParameter("session", sessionToken);
         urlParams.addParameter(ParameterNames.SERVER_URL, GWT.getHostPageBaseURL());
-
+        urlParams.addParameter(ParameterNames.EXPERIMENT_ID, experimentIdentifier);
+        
         if (currentlySelectedChannelCode != null)
         {
             urlParams.addParameter(ParameterNames.CHANNEL, currentlySelectedChannelCode);
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/WellContentDialog.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/WellContentDialog.java
index 41dbe590c78..2829fbaa43c 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/WellContentDialog.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/WellContentDialog.java
@@ -189,6 +189,7 @@ public class WellContentDialog extends Dialog
         final LogicalImageReference imagesOrNull =
                 new LogicalImageReference(imageDatasetOrNull, wellLocationOrNull);
         return new LogicalImageViewer(imagesOrNull, viewContext,
+                experimentCriteria.getExperimentIdentifier(),
                 experimentCriteria.getExperimentPermId());
     }
 
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/WellImageSampleSection.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/WellImageSampleSection.java
index b28d66bcaba..7eb27801e9f 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/WellImageSampleSection.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/WellImageSampleSection.java
@@ -115,7 +115,7 @@ public class WellImageSampleSection extends TabContent
                             wellLocationOrNull);
             LogicalImageViewer viewer =
                     new LogicalImageViewer(logicalImageReference,
-                            WellImageSampleSection.this.viewContext, experimentPermId);
+                            WellImageSampleSection.this.viewContext, "", experimentPermId);
             Widget viewerWidget = viewer.getViewerWidget(imageInfo.getChannelStacks());
             add(viewerWidget, PlateLayouter.createRowLayoutSurroundingData());
         }
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/server/ImageViewerLaunchServlet.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/server/ImageViewerLaunchServlet.java
index c02d8ab3bb4..a05751eb6f0 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/server/ImageViewerLaunchServlet.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/server/ImageViewerLaunchServlet.java
@@ -21,6 +21,8 @@ import static ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.Screeni
 import java.io.IOException;
 import java.io.OutputStreamWriter;
 import java.io.PrintWriter;
+import java.net.MalformedURLException;
+import java.net.URL;
 import java.util.Arrays;
 import java.util.List;
 
@@ -31,6 +33,7 @@ import org.apache.log4j.Logger;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.RequestMapping;
 
+import ch.systemsx.cisd.common.exceptions.EnvironmentFailureException;
 import ch.systemsx.cisd.common.exceptions.UserFailureException;
 import ch.systemsx.cisd.common.logging.LogCategory;
 import ch.systemsx.cisd.common.logging.LogFactory;
@@ -50,73 +53,40 @@ public class ImageViewerLaunchServlet extends AbstractServlet
 
     public static final Template JNLP_TEMPLATE = new Template(
             "<?xml version='1.0' encoding='utf-8'?>\n"
-
             + "<jnlp spec='1.0+' codebase='${base-URL}'>\n"
-
             + "  <information>\n"
-
             + "    <title>${title}</title>\n"
-
             + "    <vendor>SyBIT</vendor>\n"
-
             + "    <description>${description}</description>\n"
-
             + "  </information>\n"
-
             + "  <security>\n"
-
             + "    <all-permissions/>\n"
-
             + "  </security>\n"
-
             + "  <resources>\n"
-
             + "    <j2se version='1.5+'/>\n"
-
             + "    <jar href='screening.jar'/>\n"
-
             + "    <jar href='cisd-base.jar'/>\n"
-
             + "    <jar href='image-viewer.jar'/>\n"
-
             + "    <jar href='spring-web.jar'/>\n"
-
             + "    <jar href='spring-context.jar'/>\n"
-
             + "    <jar href='spring-beans.jar'/>\n"
-
             + "    <jar href='spring-aop.jar'/>\n"
-
             + "    <jar href='spring-core.jar'/>\n"
-
             + "    <jar href='aopalliance.jar'/>\n"
-
             + "    <jar href='stream-supporting-httpinvoker.jar'/>\n"
-
             + "    <jar href='commons-codec.jar'/>\n"
-
             + "    <jar href='commons-httpclient.jar'/>\n"
-
             + "    <jar href='commons-io.jar'/>\n"
-
             + "    <jar href='commons-lang.jar'/>\n"
-
             + "    <jar href='commons-logging.jar'/>\n"
-
             + "    <jar href='ij.jar'/>\n"
-
             + "  </resources>\n"
-
             + "  <application-desc main-class='${main-class}'>\n"
-
             + "    <argument>${service-URL}</argument>\n"
-
             + "    <argument>${session-id}</argument>\n"
-
+            + "    <argument>${experiment}</argument>\n"
             + "    <argument>${channel}</argument>\n"
-
             + "${data-set-and-wells-arguments}\n"
-
             + "  </application-desc>\n" + "</jnlp>\n");
 
     private final Logger operationLog;
@@ -139,9 +109,10 @@ public class ImageViewerLaunchServlet extends AbstractServlet
             template.bind("title", "Image Viewer");
             template.bind("description", "Image Viewer for color adjustment.");
             String basicURL = getBasicURL(request);
-            template.bind("base-URL", createBaseURL(request));
+            template.bind("base-URL", basicURL);
             template.bind("main-class", getMainClass());
-            template.bind("service-URL", basicURL);
+            template.bind("service-URL", getServiceURL(request));
+            template.bind("experiment", getParam(request, ParameterNames.EXPERIMENT_ID));
             String sessionToken = getSessionToken(request);
             template.bind("session-id", sessionToken);
             String channel = getParam(request, ParameterNames.CHANNEL);
@@ -149,10 +120,10 @@ public class ImageViewerLaunchServlet extends AbstractServlet
             StringBuilder builder = new StringBuilder();
             // TODO 2010-12-09, Tomasz Pylak: add support for microscopy images in Image Viewer
             // where there are no wells. Extend API to load images in such cases.
-            for (String dataSet : getParams(request, ParameterNames.DATA_SETS))
-            {
-                builder.append("    <argument>").append(dataSet + ":0.0").append("</argument>\n");
-            }
+//            for (String dataSet : getParams(request, ParameterNames.DATA_SETS))
+//            {
+//                builder.append("    <argument>").append(dataSet + ":0.0").append("</argument>\n");
+//            }
             for (String dataSetAndWells : getParams(request, ParameterNames.DATA_SET_AND_WELLS))
             {
                 builder.append("    <argument>").append(dataSetAndWells).append("</argument>\n");
@@ -167,6 +138,7 @@ public class ImageViewerLaunchServlet extends AbstractServlet
             }
         } catch (UserFailureException ex)
         {
+            operationLog.error("Couldn't create JNLP file", ex);
             printError(response, ex.getMessage());
         }
     }
@@ -176,17 +148,20 @@ public class ImageViewerLaunchServlet extends AbstractServlet
         return "ch.systemsx.sybit.imageviewer.gui.ImageViewer";
     }
 
-    private String createBaseURL(HttpServletRequest request)
+    private String getServiceURL(HttpServletRequest request)
     {
         String url = getBasicURL(request);
-        if (url.indexOf("localhost:8888") > 0 || url.indexOf("127.0.0.1:888") > 0)
+        try
         {
-            url = url + "/ch.systemsx.cisd.openbis.plugin.screening.OpenBIS/";
-        } else
+            URL baseURL = new URL(url);
+            String protocol = baseURL.getProtocol();
+            String host = baseURL.getHost();
+            int port = baseURL.getPort();
+            return new URL(protocol, host, port, "/openbis/openbis/").toString();
+        } catch (MalformedURLException ex)
         {
-            url = url + "/";
+            throw new EnvironmentFailureException("Invalid URL", ex);
         }
-        return url;
     }
 
     private String getBasicURL(HttpServletRequest request)
-- 
GitLab