extensions/net.sf.basedb.reggie/trunk/src/net/sf/basedb/reggie/servlet/SspServlet.java

Code
Comments
Other
Rev Date Author Line
5924 29 Apr 20 nicklas 1 package net.sf.basedb.reggie.servlet;
5924 29 Apr 20 nicklas 2
5924 29 Apr 20 nicklas 3 import java.io.IOException;
5924 29 Apr 20 nicklas 4 import java.util.ArrayList;
5924 29 Apr 20 nicklas 5 import java.util.List;
5924 29 Apr 20 nicklas 6
5924 29 Apr 20 nicklas 7 import javax.servlet.ServletException;
5924 29 Apr 20 nicklas 8 import javax.servlet.http.HttpServlet;
5924 29 Apr 20 nicklas 9 import javax.servlet.http.HttpServletRequest;
5924 29 Apr 20 nicklas 10 import javax.servlet.http.HttpServletResponse;
5924 29 Apr 20 nicklas 11
5924 29 Apr 20 nicklas 12 import org.json.simple.JSONArray;
5924 29 Apr 20 nicklas 13 import org.json.simple.JSONObject;
5924 29 Apr 20 nicklas 14
5941 18 May 20 nicklas 15 import net.sf.basedb.core.AnnotationType;
5924 29 Apr 20 nicklas 16 import net.sf.basedb.core.DbControl;
5924 29 Apr 20 nicklas 17 import net.sf.basedb.core.ItemList;
5924 29 Apr 20 nicklas 18 import net.sf.basedb.core.ItemQuery;
5924 29 Apr 20 nicklas 19 import net.sf.basedb.core.Job;
5944 20 May 20 nicklas 20 import net.sf.basedb.core.PluginConfiguration;
5924 29 Apr 20 nicklas 21 import net.sf.basedb.core.RawBioAssay;
5924 29 Apr 20 nicklas 22 import net.sf.basedb.core.SessionControl;
5944 20 May 20 nicklas 23 import net.sf.basedb.core.query.Expressions;
5924 29 Apr 20 nicklas 24 import net.sf.basedb.core.query.Hql;
5924 29 Apr 20 nicklas 25 import net.sf.basedb.core.query.Orders;
5944 20 May 20 nicklas 26 import net.sf.basedb.core.query.Restrictions;
5924 29 Apr 20 nicklas 27 import net.sf.basedb.core.snapshot.SnapshotManager;
5924 29 Apr 20 nicklas 28 import net.sf.basedb.reggie.JsonUtil;
5924 29 Apr 20 nicklas 29 import net.sf.basedb.reggie.Reggie;
5924 29 Apr 20 nicklas 30 import net.sf.basedb.reggie.counter.CounterService;
5924 29 Apr 20 nicklas 31 import net.sf.basedb.reggie.dao.Annotationtype;
5924 29 Apr 20 nicklas 32 import net.sf.basedb.reggie.dao.BiomaterialList;
5924 29 Apr 20 nicklas 33 import net.sf.basedb.reggie.dao.Library;
5924 29 Apr 20 nicklas 34 import net.sf.basedb.reggie.dao.Pipeline;
5924 29 Apr 20 nicklas 35 import net.sf.basedb.reggie.dao.Rawbioassay;
5924 29 Apr 20 nicklas 36 import net.sf.basedb.reggie.dao.Rawdatatype;
5924 29 Apr 20 nicklas 37 import net.sf.basedb.reggie.dao.ReggieRole;
5924 29 Apr 20 nicklas 38 import net.sf.basedb.reggie.dao.Rna;
5924 29 Apr 20 nicklas 39 import net.sf.basedb.reggie.ssp.SspModel;
5924 29 Apr 20 nicklas 40 import net.sf.basedb.reggie.ssp.SspPlugin;
5924 29 Apr 20 nicklas 41 import net.sf.basedb.util.Values;
5924 29 Apr 20 nicklas 42 import net.sf.basedb.util.error.ThrowableUtil;
5924 29 Apr 20 nicklas 43
5924 29 Apr 20 nicklas 44
5924 29 Apr 20 nicklas 45 public class SspServlet 
5924 29 Apr 20 nicklas 46   extends HttpServlet 
5924 29 Apr 20 nicklas 47 {
5924 29 Apr 20 nicklas 48
5924 29 Apr 20 nicklas 49   private static final long serialVersionUID = 444691884705070524L;
5924 29 Apr 20 nicklas 50
5924 29 Apr 20 nicklas 51   public SspServlet()
5924 29 Apr 20 nicklas 52   {}
5924 29 Apr 20 nicklas 53
5924 29 Apr 20 nicklas 54   @SuppressWarnings("unchecked")
5924 29 Apr 20 nicklas 55   @Override
5924 29 Apr 20 nicklas 56   protected void doGet(HttpServletRequest req, HttpServletResponse resp)
5924 29 Apr 20 nicklas 57     throws ServletException, IOException 
5924 29 Apr 20 nicklas 58   {
5924 29 Apr 20 nicklas 59     String cmd = req.getParameter("cmd");
5924 29 Apr 20 nicklas 60     JsonUtil.setJsonResponseHeaders(resp);
5924 29 Apr 20 nicklas 61     
5924 29 Apr 20 nicklas 62     JSONObject json = new JSONObject();
5924 29 Apr 20 nicklas 63     json.put("status", "ok");
5924 29 Apr 20 nicklas 64     
5924 29 Apr 20 nicklas 65     final SessionControl sc = Reggie.getSessionControl(req);
5924 29 Apr 20 nicklas 66     DbControl dc = null;
5924 29 Apr 20 nicklas 67     try
5924 29 Apr 20 nicklas 68     {
5924 29 Apr 20 nicklas 69       if ("GetRawBioAssaysForSsp".equals(cmd))
5924 29 Apr 20 nicklas 70       {
5924 29 Apr 20 nicklas 71         Rawdatatype rawDataType = Rawdatatype.STRINGTIE;
5924 29 Apr 20 nicklas 72         Pipeline pipeline = Pipeline.RNASEQ_HISAT_STRINGTIE;
5924 29 Apr 20 nicklas 73
6335 15 Jun 21 nicklas 74         dc = sc.newDbControl(":Start SSP analysis");
5924 29 Apr 20 nicklas 75         List<Rawbioassay> list = null;
5924 29 Apr 20 nicklas 76         String items = Values.getStringOrNull(req.getParameter("items"));
5924 29 Apr 20 nicklas 77         if (items == null)
5924 29 Apr 20 nicklas 78         {
5924 29 Apr 20 nicklas 79           ItemList sspPipeline = BiomaterialList.SSP_PIPELINE.load(dc);
6183 26 Mar 21 nicklas 80           ItemQuery<RawBioAssay> query = sspPipeline.getMembers();
5924 29 Apr 20 nicklas 81           query.setIncludes(Reggie.INCLUDE_IN_CURRENT_PROJECT);
5924 29 Apr 20 nicklas 82           Rawdatatype.STRINGTIE.addFilter(dc, query);
5924 29 Apr 20 nicklas 83           // Join LibPlate for sorting
5924 29 Apr 20 nicklas 84           query.join(Hql.innerJoin(null, "parentExtract", "lib", true));
5924 29 Apr 20 nicklas 85           query.join(Hql.innerJoin("lib", "bioWell", "bw", true));
5924 29 Apr 20 nicklas 86           query.join(Hql.innerJoin("bw", "bioPlate", "libPlate", true));
5924 29 Apr 20 nicklas 87           query.order(Orders.asc(Hql.property("libPlate", "id")));
5924 29 Apr 20 nicklas 88           query.order(Orders.asc(Hql.property("name")));
5943 18 May 20 nicklas 89           query.setMaxResults(500);
5924 29 Apr 20 nicklas 90           list = Rawbioassay.toList(query.list(dc));
5924 29 Apr 20 nicklas 91         }
5924 29 Apr 20 nicklas 92         else
5924 29 Apr 20 nicklas 93         {
5924 29 Apr 20 nicklas 94           Integer[] ids = Values.getInt(items.split(","));
5924 29 Apr 20 nicklas 95           list = new ArrayList<Rawbioassay>();
5924 29 Apr 20 nicklas 96           for (Integer id : ids)
5924 29 Apr 20 nicklas 97           {
5924 29 Apr 20 nicklas 98             list.add(Rawbioassay.getById(dc, id));
5924 29 Apr 20 nicklas 99           }
5924 29 Apr 20 nicklas 100         }
5924 29 Apr 20 nicklas 101         
5924 29 Apr 20 nicklas 102         SnapshotManager manager = new SnapshotManager();
5924 29 Apr 20 nicklas 103         JSONArray jsonRawBioAssays = new JSONArray();
5924 29 Apr 20 nicklas 104         for (Rawbioassay raw : list)
5924 29 Apr 20 nicklas 105         {
5924 29 Apr 20 nicklas 106           RawBioAssay rba = raw.getItem();
5924 29 Apr 20 nicklas 107           raw.loadAnnotations(dc, manager, "AutoProcess", Annotationtype.AUTO_PROCESSING, null);
5924 29 Apr 20 nicklas 108           raw.loadAnnotations(dc, manager, "pipeline", Annotationtype.PIPELINE, null);
5924 29 Apr 20 nicklas 109           
5924 29 Apr 20 nicklas 110           // Load library information
5924 29 Apr 20 nicklas 111           Library lib = raw.getLibrary(dc);
5924 29 Apr 20 nicklas 112           Rna r = lib.getRna(dc, true);
5924 29 Apr 20 nicklas 113           lib.loadBioPlateLocation();
5924 29 Apr 20 nicklas 114           lib.setAnnotation("specimen", r.loadYellowLabelInfo(dc, manager));
5924 29 Apr 20 nicklas 115           raw.setAnnotation("lib", lib.asJSONObject());
5924 29 Apr 20 nicklas 116           raw.loadDoNotUseAnnotations(dc, manager);
5924 29 Apr 20 nicklas 117           jsonRawBioAssays.add(raw.asJSONObject());
5924 29 Apr 20 nicklas 118         }
5924 29 Apr 20 nicklas 119         
5924 29 Apr 20 nicklas 120         json.put("rawBioAssays", jsonRawBioAssays);
5924 29 Apr 20 nicklas 121         json.put("rawDataType", rawDataType != null ? rawDataType.getId() : null);
5924 29 Apr 20 nicklas 122         json.put("pipeline", pipeline != null ? pipeline.getName() : "");
5924 29 Apr 20 nicklas 123       }
5924 29 Apr 20 nicklas 124       else if ("GetModels".equals(cmd))
5924 29 Apr 20 nicklas 125       {
6335 15 Jun 21 nicklas 126         dc = sc.newDbControl(":Start SSP analysis");
5924 29 Apr 20 nicklas 127         JSONArray jsonModels = new JSONArray();
5926 29 Apr 20 nicklas 128         List<SspModel> models = SspModel.getConfiguredModels();
5941 18 May 20 nicklas 129         //Collections.sort(models);
5926 29 Apr 20 nicklas 130         for (SspModel m : models)
5924 29 Apr 20 nicklas 131         {
5941 18 May 20 nicklas 132           AnnotationType at = m.getAnnotationType(dc);
5941 18 May 20 nicklas 133           
5924 29 Apr 20 nicklas 134           JSONObject jsonModel = new JSONObject();
5924 29 Apr 20 nicklas 135           jsonModel.put("name", m.getName());
5941 18 May 20 nicklas 136           jsonModel.put("annotationType", m.getAnnotationTypeName());
5962 03 Jun 20 nicklas 137           jsonModel.put("description", m.getDescription());
5941 18 May 20 nicklas 138           if (at != null)
5941 18 May 20 nicklas 139           {
5962 03 Jun 20 nicklas 140             if (at.getDescription() != null)
5962 03 Jun 20 nicklas 141             {
5962 03 Jun 20 nicklas 142               jsonModel.put("description", at.getDescription());
5962 03 Jun 20 nicklas 143             }
5941 18 May 20 nicklas 144           }
5941 18 May 20 nicklas 145           else
5941 18 May 20 nicklas 146           {
5941 18 May 20 nicklas 147             jsonModel.put("error", "Can't find annotation type: " + m.getAnnotationTypeName());
5941 18 May 20 nicklas 148           }
5941 18 May 20 nicklas 149           if (!m.modelDataExists()) jsonModel.put("error", "Can't find file: "+m.getModelData());
5924 29 Apr 20 nicklas 150           jsonModels.add(jsonModel);
5924 29 Apr 20 nicklas 151         }
5924 29 Apr 20 nicklas 152         json.put("models", jsonModels);
5944 20 May 20 nicklas 153         
5944 20 May 20 nicklas 154         // Load presets -- eg. PluginConfigurations
5944 20 May 20 nicklas 155         ItemQuery<PluginConfiguration> query = PluginConfiguration.getQuery();
5944 20 May 20 nicklas 156         query.setIncludes(Reggie.INCLUDE_IN_CURRENT_PROJECT);
5944 20 May 20 nicklas 157         query.join(Hql.innerJoin("pluginDefinition", "p"));
5944 20 May 20 nicklas 158         query.restrict(Restrictions.eq(Hql.property("p", "className"), Expressions.string(SspPlugin.class.getName())));
5944 20 May 20 nicklas 159         query.order(Orders.asc(Hql.property("name")));
5944 20 May 20 nicklas 160         
5944 20 May 20 nicklas 161         JSONArray jsonPresets = new JSONArray();
5944 20 May 20 nicklas 162         for (PluginConfiguration config : query.list(dc))
5944 20 May 20 nicklas 163         {
5944 20 May 20 nicklas 164           JSONObject jsonPreset = new JSONObject();
5944 20 May 20 nicklas 165           jsonPreset.put("name", config.getName());
5944 20 May 20 nicklas 166           JSONArray jsonPresetModels = new JSONArray();
5944 20 May 20 nicklas 167           jsonPresetModels.addAll(config.getParameterValues("models"));
5944 20 May 20 nicklas 168           jsonPreset.put("models", jsonPresetModels);
5944 20 May 20 nicklas 169           jsonPresets.add(jsonPreset);
5944 20 May 20 nicklas 170         }
5944 20 May 20 nicklas 171         json.put("presets", jsonPresets);
5924 29 Apr 20 nicklas 172       }
5924 29 Apr 20 nicklas 173
5924 29 Apr 20 nicklas 174     }
5924 29 Apr 20 nicklas 175     catch (Throwable t)
5924 29 Apr 20 nicklas 176     {
5924 29 Apr 20 nicklas 177       t.printStackTrace();
5924 29 Apr 20 nicklas 178       json.clear();
5924 29 Apr 20 nicklas 179       json.put("status", "error");
5924 29 Apr 20 nicklas 180       json.put("message", t.getMessage());
5924 29 Apr 20 nicklas 181       json.put("stacktrace", ThrowableUtil.stackTraceToString(t));
5924 29 Apr 20 nicklas 182     }
5924 29 Apr 20 nicklas 183     finally
5924 29 Apr 20 nicklas 184     {
5924 29 Apr 20 nicklas 185       if (dc != null) dc.close();
5924 29 Apr 20 nicklas 186       json.writeJSONString(resp.getWriter());
5924 29 Apr 20 nicklas 187     }
5924 29 Apr 20 nicklas 188     
5924 29 Apr 20 nicklas 189   }
5924 29 Apr 20 nicklas 190
5924 29 Apr 20 nicklas 191   @SuppressWarnings("unchecked")
5924 29 Apr 20 nicklas 192   @Override
5924 29 Apr 20 nicklas 193   protected void doPost(HttpServletRequest req, HttpServletResponse resp)
5924 29 Apr 20 nicklas 194     throws ServletException, IOException 
5924 29 Apr 20 nicklas 195   {
5924 29 Apr 20 nicklas 196     String cmd = req.getParameter("cmd");
5924 29 Apr 20 nicklas 197     JsonUtil.setJsonResponseHeaders(resp);
5924 29 Apr 20 nicklas 198     
5924 29 Apr 20 nicklas 199     JSONObject json = new JSONObject();
5924 29 Apr 20 nicklas 200     json.put("status", "ok");
5924 29 Apr 20 nicklas 201     JSONArray jsonMessages = new JSONArray();
5924 29 Apr 20 nicklas 202   
5924 29 Apr 20 nicklas 203     final SessionControl sc = Reggie.getSessionControl(req);
5924 29 Apr 20 nicklas 204     DbControl dc = null;
5924 29 Apr 20 nicklas 205     try
5924 29 Apr 20 nicklas 206     {
5924 29 Apr 20 nicklas 207
5924 29 Apr 20 nicklas 208       if ("RunSsp".equals(cmd))
5924 29 Apr 20 nicklas 209       {
6335 15 Jun 21 nicklas 210         dc = sc.newDbControl(":Start SSP analysis");
5924 29 Apr 20 nicklas 211         ReggieRole.checkPermission(dc, "'" + cmd + "' wizard", ReggieRole.SECONDARY_ANALYSIS, ReggieRole.ADMINISTRATOR);
5924 29 Apr 20 nicklas 212         
5924 29 Apr 20 nicklas 213         JSONObject jsonReq = JsonUtil.parseRequest(req);
5924 29 Apr 20 nicklas 214         JSONArray jsonRawBioAssays = (JSONArray)jsonReq.get("rawBioAssays");
5924 29 Apr 20 nicklas 215         List<String> models = (List<String>)jsonReq.get("models");
6025 26 Oct 20 nicklas 216         boolean autoConfirm = Boolean.TRUE.equals(jsonReq.get("autoConfirm"));
5924 29 Apr 20 nicklas 217         
5924 29 Apr 20 nicklas 218         List<RawBioAssay> rawBioAssays = new ArrayList<RawBioAssay>(jsonRawBioAssays.size());        
5924 29 Apr 20 nicklas 219         for (int rawNo = 0; rawNo < jsonRawBioAssays.size(); rawNo++)
5924 29 Apr 20 nicklas 220         {
5924 29 Apr 20 nicklas 221           Number rawId = (Number)jsonRawBioAssays.get(rawNo);
5924 29 Apr 20 nicklas 222           RawBioAssay raw = RawBioAssay.getById(dc, rawId.intValue());
5924 29 Apr 20 nicklas 223           rawBioAssays.add(raw);
5924 29 Apr 20 nicklas 224         }
5924 29 Apr 20 nicklas 225
6025 26 Oct 20 nicklas 226         Job j = SspPlugin.createAnalysisJob(dc, rawBioAssays, models, autoConfirm);
5924 29 Apr 20 nicklas 227         dc.commit();
5924 29 Apr 20 nicklas 228         
5924 29 Apr 20 nicklas 229         json.put("job", JsonUtil.getJobAsJSON(j));
5962 03 Jun 20 nicklas 230         if (rawBioAssays.size() == 0)
5962 03 Jun 20 nicklas 231         {
5962 03 Jun 20 nicklas 232           jsonMessages.add("Successfully scheduled job for analyzing " + models.size() + " models");
5962 03 Jun 20 nicklas 233         }
5962 03 Jun 20 nicklas 234         else
5962 03 Jun 20 nicklas 235         {
5962 03 Jun 20 nicklas 236           jsonMessages.add("Successfully scheduled job for analyzing " + rawBioAssays.size() + " raw bioassays with " + models.size() + " models");
5962 03 Jun 20 nicklas 237         }
5924 29 Apr 20 nicklas 238       }
5924 29 Apr 20 nicklas 239
5924 29 Apr 20 nicklas 240       json.put("messages", jsonMessages);
5924 29 Apr 20 nicklas 241       CounterService.getInstance().setForceCount();
5924 29 Apr 20 nicklas 242     }
5924 29 Apr 20 nicklas 243     catch (Throwable t)
5924 29 Apr 20 nicklas 244     {
5924 29 Apr 20 nicklas 245       t.printStackTrace();
5924 29 Apr 20 nicklas 246       json.clear();
5924 29 Apr 20 nicklas 247       json.put("status", "error");
5924 29 Apr 20 nicklas 248       json.put("message", t.getMessage());
5924 29 Apr 20 nicklas 249       json.put("stacktrace", ThrowableUtil.stackTraceToString(t));
5924 29 Apr 20 nicklas 250     }
5924 29 Apr 20 nicklas 251     finally
5924 29 Apr 20 nicklas 252     {
5924 29 Apr 20 nicklas 253       if (dc != null) dc.close();
5924 29 Apr 20 nicklas 254       json.writeJSONString(resp.getWriter());
5924 29 Apr 20 nicklas 255     }
5924 29 Apr 20 nicklas 256     
5924 29 Apr 20 nicklas 257   }
5924 29 Apr 20 nicklas 258   
5924 29 Apr 20 nicklas 259   
5924 29 Apr 20 nicklas 260
5924 29 Apr 20 nicklas 261 }