extensions/net.sf.basedb.genepattern/trunk/src/net/sf/basedb/genepattern/servlet/Visualizer.java

Code
Comments
Other
Rev Date Author Line
1132 18 Jun 09 nicklas 1 /*
1132 18 Jun 09 nicklas 2   $Id$
1132 18 Jun 09 nicklas 3
1132 18 Jun 09 nicklas 4   Copyright (C) 2007 Nicklas Nordborg
1132 18 Jun 09 nicklas 5
1132 18 Jun 09 nicklas 6   This file is part of BASE - BioArray Software Environment.
1132 18 Jun 09 nicklas 7   Available at http://base.thep.lu.se/
1132 18 Jun 09 nicklas 8
1132 18 Jun 09 nicklas 9   BASE is free software; you can redistribute it and/or
1132 18 Jun 09 nicklas 10   modify it under the terms of the GNU General Public License
1132 18 Jun 09 nicklas 11   as published by the Free Software Foundation; either version 2
1132 18 Jun 09 nicklas 12   of the License, or (at your option) any later version.
1132 18 Jun 09 nicklas 13
1132 18 Jun 09 nicklas 14   BASE is distributed in the hope that it will be useful,
1132 18 Jun 09 nicklas 15   but WITHOUT ANY WARRANTY; without even the implied warranty of
1132 18 Jun 09 nicklas 16   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1132 18 Jun 09 nicklas 17   GNU General Public License for more details.
1132 18 Jun 09 nicklas 18
1132 18 Jun 09 nicklas 19   You should have received a copy of the GNU General Public License
1132 18 Jun 09 nicklas 20   along with this program; if not, write to the Free Software
1132 18 Jun 09 nicklas 21   Foundation, Inc., 59 Temple Place - Suite 330,
1132 18 Jun 09 nicklas 22   Boston, MA  02111-1307, USA.
1132 18 Jun 09 nicklas 23 */
1132 18 Jun 09 nicklas 24 package net.sf.basedb.genepattern.servlet;
1132 18 Jun 09 nicklas 25
1132 18 Jun 09 nicklas 26 import javax.servlet.ServletException;
1132 18 Jun 09 nicklas 27 import javax.servlet.http.HttpServlet;
1132 18 Jun 09 nicklas 28 import javax.servlet.http.HttpServletRequest;
1132 18 Jun 09 nicklas 29 import javax.servlet.http.HttpServletResponse;
1132 18 Jun 09 nicklas 30
1132 18 Jun 09 nicklas 31 import net.sf.basedb.clients.web.Base;
1132 18 Jun 09 nicklas 32 import net.sf.basedb.clients.web.extensions.ExtensionsControl;
1134 22 Jun 09 nicklas 33 import net.sf.basedb.core.PluginParameter;
1132 18 Jun 09 nicklas 34 import net.sf.basedb.core.SessionControl;
1132 18 Jun 09 nicklas 35 import net.sf.basedb.genepattern.GPServer;
1132 18 Jun 09 nicklas 36 import net.sf.basedb.genepattern.file.SupportFileTransferGateway;
1132 18 Jun 09 nicklas 37 import net.sf.basedb.genepattern.wrapper.GPClient;
1132 18 Jun 09 nicklas 38 import net.sf.basedb.genepattern.wrapper.ParameterInfo;
1132 18 Jun 09 nicklas 39 import net.sf.basedb.genepattern.wrapper.SupportFileInfo;
1132 18 Jun 09 nicklas 40 import net.sf.basedb.genepattern.wrapper.TaskInfo;
1132 18 Jun 09 nicklas 41 import net.sf.basedb.util.Values;
1132 18 Jun 09 nicklas 42
1132 18 Jun 09 nicklas 43 import org.genepattern.webservice.WebServiceException;
1132 18 Jun 09 nicklas 44
1132 18 Jun 09 nicklas 45 import java.io.IOException;
1132 18 Jun 09 nicklas 46 import java.util.ArrayList;
1132 18 Jun 09 nicklas 47 import java.util.LinkedHashMap;
1132 18 Jun 09 nicklas 48 import java.util.List;
1132 18 Jun 09 nicklas 49 import java.util.Map;
1132 18 Jun 09 nicklas 50
1132 18 Jun 09 nicklas 51 /**
1132 18 Jun 09 nicklas 52   Servlet that gathers enough information so that we can launch a visualizer
1132 18 Jun 09 nicklas 53   module. The servlet needs the GenePattern "server" and "module" that
1132 18 Jun 09 nicklas 54   should be invoked as well as parameter values for all parameters that
1132 18 Jun 09 nicklas 55   are required by the given module.
1132 18 Jun 09 nicklas 56   <p>
1132 18 Jun 09 nicklas 57   
1132 18 Jun 09 nicklas 58   The servlet will contact the given GenePattern server and collection
1132 18 Jun 09 nicklas 59   more information about the module. Everything is put in a map that
1132 18 Jun 09 nicklas 60   is stored in the "appletParameters" request attribute.
1132 18 Jun 09 nicklas 61   <p>
1132 18 Jun 09 nicklas 62   
1132 18 Jun 09 nicklas 63   The request is forwarded to 'visualizer.jsp' that generates a
1132 18 Jun 09 nicklas 64   page with the proper &lt;applet&gt; parameters.
1132 18 Jun 09 nicklas 65   
1132 18 Jun 09 nicklas 66   @author Nicklas
1132 18 Jun 09 nicklas 67   @version 1.0
1132 18 Jun 09 nicklas 68   @base.modified $Date$
1132 18 Jun 09 nicklas 69 */
1132 18 Jun 09 nicklas 70 public final class Visualizer
1132 18 Jun 09 nicklas 71   extends HttpServlet
1132 18 Jun 09 nicklas 72 {
1132 18 Jun 09 nicklas 73
1132 18 Jun 09 nicklas 74   private static final long serialVersionUID = -4408846915389097744L;
1132 18 Jun 09 nicklas 75
1132 18 Jun 09 nicklas 76   public Visualizer()
1132 18 Jun 09 nicklas 77   {}
1132 18 Jun 09 nicklas 78   
1132 18 Jun 09 nicklas 79   @Override
1132 18 Jun 09 nicklas 80   public void doGet(HttpServletRequest request, HttpServletResponse response)
1132 18 Jun 09 nicklas 81     throws IOException, ServletException
1132 18 Jun 09 nicklas 82   {
1134 22 Jun 09 nicklas 83     String cmd = request.getParameter("cmd");
1134 22 Jun 09 nicklas 84     String forward = null;
1132 18 Jun 09 nicklas 85     try
1132 18 Jun 09 nicklas 86     {
1134 22 Jun 09 nicklas 87       if ("SelectServerModule".equals(cmd))
1132 18 Jun 09 nicklas 88       {
1134 22 Jun 09 nicklas 89         forward = selectServerModule(request, response);
1132 18 Jun 09 nicklas 90       }
1134 22 Jun 09 nicklas 91       else if ("RunVisualizerApplet".equals(cmd))
1132 18 Jun 09 nicklas 92       {
1134 22 Jun 09 nicklas 93         forward = runVisualizerApplet(request, response);
1132 18 Jun 09 nicklas 94       }
1132 18 Jun 09 nicklas 95     }
1132 18 Jun 09 nicklas 96     catch (WebServiceException ex)
1132 18 Jun 09 nicklas 97     {
1132 18 Jun 09 nicklas 98       throw new ServletException(ex);
1134 22 Jun 09 nicklas 99     }
1134 22 Jun 09 nicklas 100     if (forward != null)
1134 22 Jun 09 nicklas 101     {
1134 22 Jun 09 nicklas 102       request.getRequestDispatcher(forward).forward(request, response);
1134 22 Jun 09 nicklas 103     }
1132 18 Jun 09 nicklas 104   }
1132 18 Jun 09 nicklas 105   
1132 18 Jun 09 nicklas 106
1132 18 Jun 09 nicklas 107   @Override
1132 18 Jun 09 nicklas 108   public void doPost(HttpServletRequest request, HttpServletResponse response)
1132 18 Jun 09 nicklas 109     throws IOException, ServletException
1132 18 Jun 09 nicklas 110   {
1132 18 Jun 09 nicklas 111     doGet(request, response);
1132 18 Jun 09 nicklas 112   }
1132 18 Jun 09 nicklas 113   
1134 22 Jun 09 nicklas 114   private String selectServerModule(HttpServletRequest request, HttpServletResponse response)
1134 22 Jun 09 nicklas 115     throws WebServiceException
1134 22 Jun 09 nicklas 116   {
1134 22 Jun 09 nicklas 117     // Request parameters
1134 22 Jun 09 nicklas 118     String server = request.getParameter("server");
1134 22 Jun 09 nicklas 119     String module = request.getParameter("module");
1134 22 Jun 09 nicklas 120     SessionControl sc = Base.getSessionControl(request, false);
1134 22 Jun 09 nicklas 121     
1134 22 Jun 09 nicklas 122     // Get the selected server & a web service connection to it
1134 22 Jun 09 nicklas 123     GPServer gpServer = GPServer.get(sc, server);
1134 22 Jun 09 nicklas 124     final GPClient gp = new GPClient(gpServer);
1134 22 Jun 09 nicklas 125
1134 22 Jun 09 nicklas 126     // Get the TaskInfo for the selected module
1134 22 Jun 09 nicklas 127     final TaskInfo ti = gp.getTaskInfo(module);
1134 22 Jun 09 nicklas 128     
1134 22 Jun 09 nicklas 129     // Start a thread that downloads the module support files
1134 22 Jun 09 nicklas 130     Thread t = new Thread(new Runnable()
1134 22 Jun 09 nicklas 131     {
1134 22 Jun 09 nicklas 132       @Override
1134 22 Jun 09 nicklas 133       public void run() 
1134 22 Jun 09 nicklas 134       {
1134 22 Jun 09 nicklas 135         SupportFileTransferGateway gw = new SupportFileTransferGateway(ti);
1134 22 Jun 09 nicklas 136         try 
1134 22 Jun 09 nicklas 137         {
1134 22 Jun 09 nicklas 138           gw.downloadSupportFiles(gp);
1134 22 Jun 09 nicklas 139         }
1134 22 Jun 09 nicklas 140         catch (Exception ex)
1134 22 Jun 09 nicklas 141         {}
1134 22 Jun 09 nicklas 142       }
1134 22 Jun 09 nicklas 143     });
1134 22 Jun 09 nicklas 144     t.start();
1134 22 Jun 09 nicklas 145     
1134 22 Jun 09 nicklas 146     
1134 22 Jun 09 nicklas 147     ParameterInfo[] parameters = ti.getParameters(null);
1134 22 Jun 09 nicklas 148     List<PluginParameter> moduleParameters = new ArrayList<PluginParameter>();
1134 22 Jun 09 nicklas 149     
1134 22 Jun 09 nicklas 150     for (ParameterInfo pi : parameters)
1134 22 Jun 09 nicklas 151     {
1134 22 Jun 09 nicklas 152       moduleParameters.add(pi.createPluginParameter("gp.", null));
1134 22 Jun 09 nicklas 153     }
1134 22 Jun 09 nicklas 154     
1134 22 Jun 09 nicklas 155     request.setAttribute("moduleParameters", moduleParameters);
1134 22 Jun 09 nicklas 156     return "visualizer_parameters.jsp";
1134 22 Jun 09 nicklas 157   }
1134 22 Jun 09 nicklas 158   
1134 22 Jun 09 nicklas 159   private String runVisualizerApplet(HttpServletRequest request, HttpServletResponse response)
1134 22 Jun 09 nicklas 160     throws WebServiceException, IOException
1134 22 Jun 09 nicklas 161   {
1134 22 Jun 09 nicklas 162     
1134 22 Jun 09 nicklas 163     // Request parameters
1134 22 Jun 09 nicklas 164     String server = request.getParameter("server");
1134 22 Jun 09 nicklas 165     String module = request.getParameter("module");
1134 22 Jun 09 nicklas 166     SessionControl sc = Base.getSessionControl(request, false);
1134 22 Jun 09 nicklas 167     String ID = sc.getId();
1134 22 Jun 09 nicklas 168     
1134 22 Jun 09 nicklas 169     // Get the selected server & a web service connection to it
1134 22 Jun 09 nicklas 170     GPServer gpServer = GPServer.get(sc, server);
1134 22 Jun 09 nicklas 171     GPClient gp = new GPClient(gpServer);
1134 22 Jun 09 nicklas 172     
1134 22 Jun 09 nicklas 173     // Get the TaskInfo and ParameterInfo for the selected module
1134 22 Jun 09 nicklas 174     TaskInfo ti = gp.getTaskInfo(module);
1134 22 Jun 09 nicklas 175     ParameterInfo[] parameters = ti.getParameters(null);
1134 22 Jun 09 nicklas 176     
1134 22 Jun 09 nicklas 177     // Make sure that all support files have been cached in BASE
1134 22 Jun 09 nicklas 178     SupportFileTransferGateway gw = new SupportFileTransferGateway(ti);
1134 22 Jun 09 nicklas 179     gw.downloadSupportFiles(gp);
1134 22 Jun 09 nicklas 180     
1134 22 Jun 09 nicklas 181     // Create the applet parameters
1134 22 Jun 09 nicklas 182     // 1. Environment parameters
1134 22 Jun 09 nicklas 183     Map<String, String> appletParameters = new LinkedHashMap<String, String>();
1134 22 Jun 09 nicklas 184     appletParameters.put("name", module);
1134 22 Jun 09 nicklas 185     appletParameters.put("gp_lsid", ti.getLsid());
1134 22 Jun 09 nicklas 186     appletParameters.put("gp_os", ti.getOs());
1134 22 Jun 09 nicklas 187     appletParameters.put("gp_cpuType", ti.getCpuType());
1134 22 Jun 09 nicklas 188     appletParameters.put("visualizer_java_flags", "-Xmx512M"); // TODO - should be configurable
1134 22 Jun 09 nicklas 189     appletParameters.put("context", ExtensionsControl.getHomeUrl("net.sf.basedb.genepattern.options"));
1134 22 Jun 09 nicklas 190     appletParameters.put("commandLine", ti.getCommandLine());
1134 22 Jun 09 nicklas 191   
1134 22 Jun 09 nicklas 192     // 2. Module-specific parameters
1134 22 Jun 09 nicklas 193     List<String> parameterNames = new ArrayList<String>();
1134 22 Jun 09 nicklas 194     List<String> fileParameters = new ArrayList<String>();
1134 22 Jun 09 nicklas 195     final String scheme = request.getScheme();
1134 22 Jun 09 nicklas 196     final String serverName = request.getServerName();
1134 22 Jun 09 nicklas 197     final int serverPort = request.getServerPort();
1134 22 Jun 09 nicklas 198     final String contextPath = request.getContextPath();
1134 22 Jun 09 nicklas 199     final String baseFileUrl = scheme + "://" + serverName + ":" + serverPort + 
1134 22 Jun 09 nicklas 200       contextPath + "/filemanager/files/view/-" + ID + "-";
1134 22 Jun 09 nicklas 201
1134 22 Jun 09 nicklas 202     for (ParameterInfo pi : parameters)
1134 22 Jun 09 nicklas 203     {
1134 22 Jun 09 nicklas 204       String name = pi.getName();
1134 22 Jun 09 nicklas 205       String value = Values.getStringOrNull(request.getParameter("gp." + name));
1134 22 Jun 09 nicklas 206       if (value != null)
1134 22 Jun 09 nicklas 207       {
1134 22 Jun 09 nicklas 208         parameterNames.add(name);
1134 22 Jun 09 nicklas 209         if (pi.isInputFile()) 
1134 22 Jun 09 nicklas 210         {
1134 22 Jun 09 nicklas 211           fileParameters.add(name);
1134 22 Jun 09 nicklas 212           appletParameters.put(name, baseFileUrl + value);
1134 22 Jun 09 nicklas 213         }
1134 22 Jun 09 nicklas 214         else
1134 22 Jun 09 nicklas 215         {
1134 22 Jun 09 nicklas 216           appletParameters.put(name, value);
1134 22 Jun 09 nicklas 217         }
1134 22 Jun 09 nicklas 218       }
1134 22 Jun 09 nicklas 219     }
1134 22 Jun 09 nicklas 220     appletParameters.put("gp_paramNames", Values.getString(parameterNames, ",", true));
1134 22 Jun 09 nicklas 221     appletParameters.put("gp_download", Values.getString(fileParameters, ",", true));
1134 22 Jun 09 nicklas 222     
1134 22 Jun 09 nicklas 223     // 3. Support file information
1134 22 Jun 09 nicklas 224     SupportFileInfo[] supportFiles = gp.getSupportFiles(ti.getLsid());
1134 22 Jun 09 nicklas 225     List<String> fileNames = new ArrayList<String>();
1134 22 Jun 09 nicklas 226     List<Long> fileDates = new ArrayList<Long>();
1134 22 Jun 09 nicklas 227     for (SupportFileInfo si : supportFiles)
1134 22 Jun 09 nicklas 228     {
1134 22 Jun 09 nicklas 229       fileNames.add(si.getFileName());
1134 22 Jun 09 nicklas 230       fileDates.add(si.getLastModified());
1134 22 Jun 09 nicklas 231     }
1134 22 Jun 09 nicklas 232     appletParameters.put("gp_filenames", Values.getString(fileNames, ",", true));
1134 22 Jun 09 nicklas 233     appletParameters.put("gp_fileDates", Values.getString(fileDates, ",", true));
1134 22 Jun 09 nicklas 234     
1134 22 Jun 09 nicklas 235     request.setAttribute("appletParameters", appletParameters);
1134 22 Jun 09 nicklas 236     return "visualizer_applet.jsp";
1134 22 Jun 09 nicklas 237   }
1134 22 Jun 09 nicklas 238   
1132 18 Jun 09 nicklas 239 }