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

Code
Comments
Other
Rev Date Author Line
3158 04 Mar 15 nicklas 1 package net.sf.basedb.reggie.servlet;
3158 04 Mar 15 nicklas 2
3158 04 Mar 15 nicklas 3 import java.io.IOException;
3158 04 Mar 15 nicklas 4 import java.util.List;
3158 04 Mar 15 nicklas 5
3158 04 Mar 15 nicklas 6 import javax.servlet.ServletException;
3158 04 Mar 15 nicklas 7 import javax.servlet.http.HttpServlet;
3158 04 Mar 15 nicklas 8 import javax.servlet.http.HttpServletRequest;
3158 04 Mar 15 nicklas 9 import javax.servlet.http.HttpServletResponse;
3158 04 Mar 15 nicklas 10
3158 04 Mar 15 nicklas 11 import org.json.simple.JSONArray;
3158 04 Mar 15 nicklas 12 import org.json.simple.JSONObject;
3158 04 Mar 15 nicklas 13
3247 14 Apr 15 nicklas 14 import net.sf.basedb.core.ItemList;
3158 04 Mar 15 nicklas 15 import net.sf.basedb.core.DbControl;
3158 04 Mar 15 nicklas 16 import net.sf.basedb.core.Extract;
3158 04 Mar 15 nicklas 17 import net.sf.basedb.core.ItemQuery;
3158 04 Mar 15 nicklas 18 import net.sf.basedb.core.RawBioAssay;
3158 04 Mar 15 nicklas 19 import net.sf.basedb.core.Sample;
3158 04 Mar 15 nicklas 20 import net.sf.basedb.core.SessionControl;
3158 04 Mar 15 nicklas 21 import net.sf.basedb.core.Type;
3158 04 Mar 15 nicklas 22 import net.sf.basedb.core.query.Expressions;
3158 04 Mar 15 nicklas 23 import net.sf.basedb.core.query.Hql;
3158 04 Mar 15 nicklas 24 import net.sf.basedb.core.query.Orders;
3158 04 Mar 15 nicklas 25 import net.sf.basedb.core.query.Restrictions;
3166 05 Mar 15 nicklas 26 import net.sf.basedb.core.snapshot.SnapshotManager;
3158 04 Mar 15 nicklas 27 import net.sf.basedb.reggie.JsonUtil;
3158 04 Mar 15 nicklas 28 import net.sf.basedb.reggie.Reggie;
3158 04 Mar 15 nicklas 29 import net.sf.basedb.reggie.counter.CounterService;
3158 04 Mar 15 nicklas 30 import net.sf.basedb.reggie.dao.Annotationtype;
3158 04 Mar 15 nicklas 31 import net.sf.basedb.reggie.dao.BiomaterialList;
3158 04 Mar 15 nicklas 32 import net.sf.basedb.reggie.dao.Library;
3158 04 Mar 15 nicklas 33 import net.sf.basedb.reggie.dao.Lysate;
3158 04 Mar 15 nicklas 34 import net.sf.basedb.reggie.dao.Rawbioassay;
3158 04 Mar 15 nicklas 35 import net.sf.basedb.reggie.dao.ReggieRole;
3158 04 Mar 15 nicklas 36 import net.sf.basedb.reggie.dao.Rna;
3158 04 Mar 15 nicklas 37 import net.sf.basedb.reggie.dao.SpecimenTube;
3158 04 Mar 15 nicklas 38 import net.sf.basedb.reggie.dao.Subtype;
3158 04 Mar 15 nicklas 39 import net.sf.basedb.util.error.ThrowableUtil;
3158 04 Mar 15 nicklas 40
3158 04 Mar 15 nicklas 41
3158 04 Mar 15 nicklas 42 public class FlaggedRnaServlet 
3158 04 Mar 15 nicklas 43   extends HttpServlet 
3158 04 Mar 15 nicklas 44 {
3158 04 Mar 15 nicklas 45
3158 04 Mar 15 nicklas 46   private static final long serialVersionUID = 6418083429277485013L;
3158 04 Mar 15 nicklas 47
3158 04 Mar 15 nicklas 48   public FlaggedRnaServlet()
3158 04 Mar 15 nicklas 49   {}
3158 04 Mar 15 nicklas 50
3158 04 Mar 15 nicklas 51   @SuppressWarnings("unchecked")
3158 04 Mar 15 nicklas 52   @Override
3158 04 Mar 15 nicklas 53   protected void doGet(HttpServletRequest req, HttpServletResponse resp)
3158 04 Mar 15 nicklas 54     throws ServletException, IOException 
3158 04 Mar 15 nicklas 55   {
3158 04 Mar 15 nicklas 56     String cmd = req.getParameter("cmd");
3158 04 Mar 15 nicklas 57     JsonUtil.setJsonResponseHeaders(resp);
3158 04 Mar 15 nicklas 58     
3158 04 Mar 15 nicklas 59     JSONObject json = new JSONObject();
3158 04 Mar 15 nicklas 60     json.put("status", "ok");
3158 04 Mar 15 nicklas 61   
3975 26 May 16 nicklas 62     final SessionControl sc = Reggie.getSessionControl(req);
3158 04 Mar 15 nicklas 63     DbControl dc = null;
3158 04 Mar 15 nicklas 64     try
3158 04 Mar 15 nicklas 65     {
3158 04 Mar 15 nicklas 66       if ("LoadFlaggedRna".equals(cmd))
3158 04 Mar 15 nicklas 67       {
6336 16 Jun 21 nicklas 68         dc = sc.newDbControl(":Flagged RNA");
3247 14 Apr 15 nicklas 69         ItemList flaggedRna = BiomaterialList.FLAGGED_RNA.load(dc);
3158 04 Mar 15 nicklas 70         
6183 26 Mar 21 nicklas 71         ItemQuery<Extract> query = flaggedRna.getMembers();
3158 04 Mar 15 nicklas 72         query.setIncludes(Reggie.INCLUDE_IN_CURRENT_PROJECT);
3158 04 Mar 15 nicklas 73         
3158 04 Mar 15 nicklas 74         query.join(Hql.innerJoin(null, "parent", "lys", true));
3166 05 Mar 15 nicklas 75         query.join(Hql.innerJoin("lys", "creationEvent", "celys", true));
3158 04 Mar 15 nicklas 76         query.join(Hql.innerJoin("lys", "parent", "sp", true));
3166 05 Mar 15 nicklas 77         query.join(Hql.innerJoin("sp", "creationEvent", "cesp", true));
3158 04 Mar 15 nicklas 78         query.order(Orders.asc(Hql.property("name")));
3158 04 Mar 15 nicklas 79         
3158 04 Mar 15 nicklas 80         ItemQuery<Extract> libQuery = Extract.getQuery();
3158 04 Mar 15 nicklas 81         libQuery.setIncludes(Reggie.INCLUDE_IN_CURRENT_PROJECT);
3158 04 Mar 15 nicklas 82         Subtype.LIBRARY.addFilter(dc, libQuery);
3158 04 Mar 15 nicklas 83         libQuery.restrict(Restrictions.like(Hql.property("name"), Expressions.parameter("rnaName")));
6117 05 Feb 21 nicklas 84         libQuery.restrict(Restrictions.not(Restrictions.like(Hql.property("name"), Expressions.string("%.dil%")))); // Exclude .dil items
6117 05 Feb 21 nicklas 85       
3158 04 Mar 15 nicklas 86         ItemQuery<RawBioAssay> rawQuery = RawBioAssay.getQuery();
3158 04 Mar 15 nicklas 87         rawQuery.setIncludes(Reggie.INCLUDE_IN_CURRENT_PROJECT);
3158 04 Mar 15 nicklas 88         rawQuery.restrict(Restrictions.like(Hql.property("name"), Expressions.parameter("rnaName")));
3158 04 Mar 15 nicklas 89         
3166 05 Mar 15 nicklas 90         SnapshotManager manager = new SnapshotManager();
3158 04 Mar 15 nicklas 91         List<Rna> result = Rna.toRna(query.list(dc));
3158 04 Mar 15 nicklas 92         JSONArray jsonRna = new JSONArray();
3166 05 Mar 15 nicklas 93         for (Rna rna : result)
3158 04 Mar 15 nicklas 94         {
3166 05 Mar 15 nicklas 95           Lysate lys = rna.getLysate();
3166 05 Mar 15 nicklas 96           SpecimenTube sp = lys.getSpecimen();
3158 04 Mar 15 nicklas 97           
3166 05 Mar 15 nicklas 98           Extract rnaExtract = rna.getExtract();
3166 05 Mar 15 nicklas 99           Extract lysExtract = lys.getExtract();
3166 05 Mar 15 nicklas 100           Sample specimen = sp.getSample();
3158 04 Mar 15 nicklas 101           
3166 05 Mar 15 nicklas 102           rna.loadRnaQc(dc, manager);
3166 05 Mar 15 nicklas 103           rna.setAnnotation("remainingQuantity", rnaExtract.getRemainingQuantity());
3166 05 Mar 15 nicklas 104           rna.setAnnotation("originalQuantity", rnaExtract.getOriginalQuantity());
3166 05 Mar 15 nicklas 105           rna.loadAnnotations(dc, manager, "flag", Annotationtype.FLAG, null);
6720 03 May 22 nicklas 106           rna.loadAnnotations(dc, manager, "label", Annotationtype.TUBE_LABEL, null);
4995 02 Oct 18 nicklas 107           rna.loadDoNotUseAnnotations(dc, manager);
3158 04 Mar 15 nicklas 108           
3166 05 Mar 15 nicklas 109           lys.setAnnotation("remainingQuantity", lysExtract.getRemainingQuantity());
3166 05 Mar 15 nicklas 110           lys.setAnnotation("usedQuantity", lysExtract.getCreationEvent().getUsedQuantity(specimen));
3166 05 Mar 15 nicklas 111           rna.setAnnotation("lysate", lys.asJSONObject());
3166 05 Mar 15 nicklas 112           
3166 05 Mar 15 nicklas 113           sp.setAnnotation("remainingQuantity", specimen.getRemainingQuantity());
3166 05 Mar 15 nicklas 114           sp.setAnnotation("registered", Reggie.CONVERTER_DATE_TO_STRING.convert(specimen.getCreationEvent().getEntryDate()));
3767 23 Feb 16 nicklas 115           sp.loadAnnotations(dc, "YellowLabel", Annotationtype.YELLOW_LABEL, null);
3166 05 Mar 15 nicklas 116           rna.setAnnotation("specimen", sp.asJSONObject());
3166 05 Mar 15 nicklas 117           
3166 05 Mar 15 nicklas 118           JSONArray jsonLibs = new JSONArray();
3166 05 Mar 15 nicklas 119           libQuery.setParameter("rnaName", rna.getName() + "%", Type.STRING);
3158 04 Mar 15 nicklas 120           List<Library> libs = Library.toList(libQuery.list(dc));
3158 04 Mar 15 nicklas 121           for (Library lib : libs)
3158 04 Mar 15 nicklas 122           {
3158 04 Mar 15 nicklas 123             jsonLibs.add(lib.asJSONObject());
3158 04 Mar 15 nicklas 124           }
3166 05 Mar 15 nicklas 125           rna.setAnnotation("libraries", jsonLibs);
3158 04 Mar 15 nicklas 126           
3166 05 Mar 15 nicklas 127           JSONArray jsonRaw = new JSONArray();
3166 05 Mar 15 nicklas 128           rawQuery.setParameter("rnaName", rna.getName() + "%", Type.STRING);
3158 04 Mar 15 nicklas 129           List<Rawbioassay> raw = Rawbioassay.toList(rawQuery.list(dc));
3158 04 Mar 15 nicklas 130           for (Rawbioassay rba : raw)
3158 04 Mar 15 nicklas 131           {
3158 04 Mar 15 nicklas 132             jsonRaw.add(rba.asJSONObject());
3158 04 Mar 15 nicklas 133           }
3166 05 Mar 15 nicklas 134           rna.setAnnotation("rawbioassays", jsonRaw);
3158 04 Mar 15 nicklas 135           
3166 05 Mar 15 nicklas 136           jsonRna.add(rna.asJSONObject());
3158 04 Mar 15 nicklas 137         }
3158 04 Mar 15 nicklas 138
3158 04 Mar 15 nicklas 139         json.put("rna", jsonRna);
3158 04 Mar 15 nicklas 140       }
3158 04 Mar 15 nicklas 141       
3158 04 Mar 15 nicklas 142     }
3158 04 Mar 15 nicklas 143     catch (Throwable t)
3158 04 Mar 15 nicklas 144     {
3158 04 Mar 15 nicklas 145       t.printStackTrace();
3158 04 Mar 15 nicklas 146       json.clear();
3158 04 Mar 15 nicklas 147       json.put("status", "error");
3158 04 Mar 15 nicklas 148       json.put("message", t.getMessage());
3158 04 Mar 15 nicklas 149       json.put("stacktrace", ThrowableUtil.stackTraceToString(t));
3158 04 Mar 15 nicklas 150     }
3158 04 Mar 15 nicklas 151     finally
3158 04 Mar 15 nicklas 152     {
3158 04 Mar 15 nicklas 153       if (dc != null) dc.close();
3158 04 Mar 15 nicklas 154       json.writeJSONString(resp.getWriter());
3158 04 Mar 15 nicklas 155     }
3158 04 Mar 15 nicklas 156     
3158 04 Mar 15 nicklas 157   }
3158 04 Mar 15 nicklas 158
3158 04 Mar 15 nicklas 159   @Override
3158 04 Mar 15 nicklas 160   protected void doPost(HttpServletRequest req, HttpServletResponse resp)
3158 04 Mar 15 nicklas 161     throws ServletException, IOException 
3158 04 Mar 15 nicklas 162   {
3158 04 Mar 15 nicklas 163     String cmd = req.getParameter("cmd");
3158 04 Mar 15 nicklas 164     JsonUtil.setJsonResponseHeaders(resp);
3158 04 Mar 15 nicklas 165     
3158 04 Mar 15 nicklas 166     JSONObject json = new JSONObject();
3158 04 Mar 15 nicklas 167     json.put("status", "ok");
3158 04 Mar 15 nicklas 168     
3158 04 Mar 15 nicklas 169     JSONArray jsonMessages = new JSONArray();
3158 04 Mar 15 nicklas 170   
3975 26 May 16 nicklas 171     final SessionControl sc = Reggie.getSessionControl(req);
3158 04 Mar 15 nicklas 172     DbControl dc = null;
3158 04 Mar 15 nicklas 173     try
3158 04 Mar 15 nicklas 174     {
3158 04 Mar 15 nicklas 175       if ("ReExtractFromSpecimen".equals(cmd))
3158 04 Mar 15 nicklas 176       {
6336 16 Jun 21 nicklas 177         dc = sc.newDbControl(":Flagged RNA");
3158 04 Mar 15 nicklas 178
3163 04 Mar 15 nicklas 179         ReggieRole.checkPermission(dc, "'" + cmd + "' wizard", ReggieRole.PREP_CURATOR, ReggieRole.ADMINISTRATOR);
3158 04 Mar 15 nicklas 180
3752 17 Feb 16 nicklas 181         JSONObject jsonReq = JsonUtil.parseRequest(req);
3158 04 Mar 15 nicklas 182         JSONArray jsonRna = (JSONArray)jsonReq.get("rna");
3247 14 Apr 15 nicklas 183         ItemList flaggedRna = BiomaterialList.FLAGGED_RNA.load(dc);
3158 04 Mar 15 nicklas 184
3158 04 Mar 15 nicklas 185         for (int rnaNo = 0; rnaNo < jsonRna.size(); rnaNo++)
3158 04 Mar 15 nicklas 186         {
3158 04 Mar 15 nicklas 187           Number rnaId = (Number)jsonRna.get(rnaNo);
3158 04 Mar 15 nicklas 188           
3158 04 Mar 15 nicklas 189           Extract rna = Extract.getById(dc, rnaId.intValue());
3158 04 Mar 15 nicklas 190           Extract lysate = (Extract)rna.getParent();
3158 04 Mar 15 nicklas 191           Sample specimen = (Sample)lysate.getParent();
3158 04 Mar 15 nicklas 192           
3158 04 Mar 15 nicklas 193           // Remove RNA from "Flagged RNA" list and set "ReProcess" on the specimen item
5364 16 Apr 19 nicklas 194           flaggedRna.removeItem(rna);
3158 04 Mar 15 nicklas 195           Annotationtype.AUTO_PROCESSING.setAnnotationValue(dc, specimen, "ReProcess");
3158 04 Mar 15 nicklas 196         }
3158 04 Mar 15 nicklas 197         
3158 04 Mar 15 nicklas 198         jsonMessages.add(jsonRna.size() + " specimen scheduled for re-extraction");
3158 04 Mar 15 nicklas 199         dc.commit();
3158 04 Mar 15 nicklas 200       }
4086 07 Sep 16 nicklas 201       else if ("ReExtractFromLysate".equals(cmd))
4086 07 Sep 16 nicklas 202       {
6336 16 Jun 21 nicklas 203         dc = sc.newDbControl(":Flagged RNA");
4086 07 Sep 16 nicklas 204
4086 07 Sep 16 nicklas 205         ReggieRole.checkPermission(dc, "'" + cmd + "' wizard", ReggieRole.PREP_CURATOR, ReggieRole.ADMINISTRATOR);
4086 07 Sep 16 nicklas 206
4086 07 Sep 16 nicklas 207         JSONObject jsonReq = JsonUtil.parseRequest(req);
4086 07 Sep 16 nicklas 208         JSONArray jsonRna = (JSONArray)jsonReq.get("rna");
4086 07 Sep 16 nicklas 209         ItemList flaggedRna = BiomaterialList.FLAGGED_RNA.load(dc);
4086 07 Sep 16 nicklas 210
4086 07 Sep 16 nicklas 211         for (int rnaNo = 0; rnaNo < jsonRna.size(); rnaNo++)
4086 07 Sep 16 nicklas 212         {
4086 07 Sep 16 nicklas 213           Number rnaId = (Number)jsonRna.get(rnaNo);
4086 07 Sep 16 nicklas 214           
4086 07 Sep 16 nicklas 215           Extract rna = Extract.getById(dc, rnaId.intValue());
4086 07 Sep 16 nicklas 216           Extract lysate = (Extract)rna.getParent();
4086 07 Sep 16 nicklas 217           
4086 07 Sep 16 nicklas 218           // Remove RNA from "Flagged RNA" list and set "ReProcess" on the specimen item
5364 16 Apr 19 nicklas 219           flaggedRna.removeItem(rna);
4086 07 Sep 16 nicklas 220           Annotationtype.AUTO_PROCESSING.setAnnotationValue(dc, lysate, "ReProcess");
4086 07 Sep 16 nicklas 221         }
4086 07 Sep 16 nicklas 222         
4086 07 Sep 16 nicklas 223         jsonMessages.add(jsonRna.size() + " lysate scheduled for re-extraction");
4086 07 Sep 16 nicklas 224         dc.commit();
4086 07 Sep 16 nicklas 225       }
3162 04 Mar 15 nicklas 226       else if ("FlagSpecimen".equals(cmd))
3161 04 Mar 15 nicklas 227       {
6336 16 Jun 21 nicklas 228         dc = sc.newDbControl(":Flagged RNA");
3158 04 Mar 15 nicklas 229
3163 04 Mar 15 nicklas 230         ReggieRole.checkPermission(dc, "'" + cmd + "' wizard", ReggieRole.PREP_CURATOR, ReggieRole.ADMINISTRATOR);
3161 04 Mar 15 nicklas 231
3752 17 Feb 16 nicklas 232         JSONObject jsonReq = JsonUtil.parseRequest(req);
3161 04 Mar 15 nicklas 233         JSONArray jsonRna = (JSONArray)jsonReq.get("rna");
3247 14 Apr 15 nicklas 234         ItemList flaggedRna = BiomaterialList.FLAGGED_RNA.load(dc);
3247 14 Apr 15 nicklas 235         ItemList flaggedSpecimen = BiomaterialList.FLAGGED_SPECIMEN.load(dc);
3161 04 Mar 15 nicklas 236
3161 04 Mar 15 nicklas 237         for (int rnaNo = 0; rnaNo < jsonRna.size(); rnaNo++)
3161 04 Mar 15 nicklas 238         {
3161 04 Mar 15 nicklas 239           Number rnaId = (Number)jsonRna.get(rnaNo);
3161 04 Mar 15 nicklas 240           
3161 04 Mar 15 nicklas 241           Extract rna = Extract.getById(dc, rnaId.intValue());
3162 04 Mar 15 nicklas 242           Extract lysate = (Extract)rna.getParent();
3162 04 Mar 15 nicklas 243           Sample specimen = (Sample)lysate.getParent();
3162 04 Mar 15 nicklas 244           String flag = (String)Annotationtype.FLAG.getAnnotationValue(dc, rna);
3161 04 Mar 15 nicklas 245           
3162 04 Mar 15 nicklas 246           // Remove RNA from "Flagged RNA" list
5364 16 Apr 19 nicklas 247           flaggedRna.removeItem(rna);
3162 04 Mar 15 nicklas 248           // Add specimen to the "Flagged specimen" list and copy the "Flag"
3162 04 Mar 15 nicklas 249           flaggedSpecimen.add(specimen);
3162 04 Mar 15 nicklas 250           Annotationtype.FLAG.setAnnotationValue(dc, specimen, flag);
3162 04 Mar 15 nicklas 251         }
3162 04 Mar 15 nicklas 252         
3162 04 Mar 15 nicklas 253         jsonMessages.add(jsonRna.size() + " specimens has been flagged");
3162 04 Mar 15 nicklas 254         dc.commit();
3162 04 Mar 15 nicklas 255       }
3164 04 Mar 15 nicklas 256       else if ("ReProcessRna".equals(cmd))
3164 04 Mar 15 nicklas 257       {
6336 16 Jun 21 nicklas 258         dc = sc.newDbControl(":Flagged RNA");
3164 04 Mar 15 nicklas 259
3164 04 Mar 15 nicklas 260         ReggieRole.checkPermission(dc, "'" + cmd + "' wizard", ReggieRole.PREP_CURATOR, ReggieRole.ADMINISTRATOR);
3164 04 Mar 15 nicklas 261
3752 17 Feb 16 nicklas 262         JSONObject jsonReq = JsonUtil.parseRequest(req);
3164 04 Mar 15 nicklas 263         JSONArray jsonRna = (JSONArray)jsonReq.get("rna");
3247 14 Apr 15 nicklas 264         ItemList flaggedRna = BiomaterialList.FLAGGED_RNA.load(dc);
3164 04 Mar 15 nicklas 265
3164 04 Mar 15 nicklas 266         for (int rnaNo = 0; rnaNo < jsonRna.size(); rnaNo++)
3164 04 Mar 15 nicklas 267         {
3164 04 Mar 15 nicklas 268           Number rnaId = (Number)jsonRna.get(rnaNo);
3164 04 Mar 15 nicklas 269           
3164 04 Mar 15 nicklas 270           Extract rna = Extract.getById(dc, rnaId.intValue());
3164 04 Mar 15 nicklas 271           
3164 04 Mar 15 nicklas 272           // Remove RNA from "Flagged RNA" list, reset the "Flag" annotation and set "AutoProcessing" to "ReProcess"
5364 16 Apr 19 nicklas 273           flaggedRna.removeItem(rna);
3164 04 Mar 15 nicklas 274           Annotationtype.FLAG.setAnnotationValue(dc, rna, null);
3164 04 Mar 15 nicklas 275           Annotationtype.AUTO_PROCESSING.setAnnotationValue(dc, rna, "ReProcess");
3164 04 Mar 15 nicklas 276         }
3164 04 Mar 15 nicklas 277         
3164 04 Mar 15 nicklas 278         jsonMessages.add(jsonRna.size() + " RNA items has been scheduled for library preparation");
3164 04 Mar 15 nicklas 279         dc.commit();
3164 04 Mar 15 nicklas 280       }
3162 04 Mar 15 nicklas 281       else if ("UnflagRna".equals(cmd))
3162 04 Mar 15 nicklas 282       {
6336 16 Jun 21 nicklas 283         dc = sc.newDbControl(":Flagged RNA");
3162 04 Mar 15 nicklas 284
3163 04 Mar 15 nicklas 285         ReggieRole.checkPermission(dc, "'" + cmd + "' wizard", ReggieRole.PREP_CURATOR, ReggieRole.ADMINISTRATOR);
3162 04 Mar 15 nicklas 286
3752 17 Feb 16 nicklas 287         JSONObject jsonReq = JsonUtil.parseRequest(req);
3162 04 Mar 15 nicklas 288         JSONArray jsonRna = (JSONArray)jsonReq.get("rna");
3247 14 Apr 15 nicklas 289         ItemList flaggedRna = BiomaterialList.FLAGGED_RNA.load(dc);
3162 04 Mar 15 nicklas 290
3162 04 Mar 15 nicklas 291         for (int rnaNo = 0; rnaNo < jsonRna.size(); rnaNo++)
3162 04 Mar 15 nicklas 292         {
3162 04 Mar 15 nicklas 293           Number rnaId = (Number)jsonRna.get(rnaNo);
3162 04 Mar 15 nicklas 294           
3162 04 Mar 15 nicklas 295           Extract rna = Extract.getById(dc, rnaId.intValue());
3162 04 Mar 15 nicklas 296           
3161 04 Mar 15 nicklas 297           // Remove RNA from "Flagged RNA" list and reset the "Flag" annotation
5364 16 Apr 19 nicklas 298           flaggedRna.removeItem(rna);
3161 04 Mar 15 nicklas 299           Annotationtype.FLAG.setAnnotationValue(dc, rna, null);
3161 04 Mar 15 nicklas 300         }
3161 04 Mar 15 nicklas 301         
3161 04 Mar 15 nicklas 302         jsonMessages.add(jsonRna.size() + " RNA items has been unflagged");
3161 04 Mar 15 nicklas 303         dc.commit();
3161 04 Mar 15 nicklas 304       }
3165 05 Mar 15 nicklas 305       else if ("CreateBioMaterialList".equals(cmd))
3165 05 Mar 15 nicklas 306       {
6336 16 Jun 21 nicklas 307         dc = sc.newDbControl(":Flagged RNA");
3161 04 Mar 15 nicklas 308
3165 05 Mar 15 nicklas 309         ReggieRole.checkPermission(dc, "'" + cmd + "' wizard", ReggieRole.PREP_CURATOR, ReggieRole.ADMINISTRATOR);
3165 05 Mar 15 nicklas 310
3752 17 Feb 16 nicklas 311         JSONObject jsonReq = JsonUtil.parseRequest(req);
3165 05 Mar 15 nicklas 312         Subtype subtype = Subtype.getByCName((String)jsonReq.get("memberType"));
3165 05 Mar 15 nicklas 313         
3247 14 Apr 15 nicklas 314         ItemList list = ItemList.getNew(dc, subtype.getMainType());
3165 05 Mar 15 nicklas 315         list.setName((String)jsonReq.get("name"));
3165 05 Mar 15 nicklas 316         list.setDescription((String)jsonReq.get("description"));
3165 05 Mar 15 nicklas 317         dc.saveItem(list);
3165 05 Mar 15 nicklas 318         
3165 05 Mar 15 nicklas 319         JSONArray jsonRna = (JSONArray)jsonReq.get("rna");
3165 05 Mar 15 nicklas 320         for (int rnaNo = 0; rnaNo < jsonRna.size(); rnaNo++)
3165 05 Mar 15 nicklas 321         {
3165 05 Mar 15 nicklas 322           Number rnaId = (Number)jsonRna.get(rnaNo);
3165 05 Mar 15 nicklas 323           
3165 05 Mar 15 nicklas 324           Extract rna = Extract.getById(dc, rnaId.intValue());
3165 05 Mar 15 nicklas 325           if (subtype == Subtype.RNA)
3165 05 Mar 15 nicklas 326           {
3165 05 Mar 15 nicklas 327             list.add(rna);
3165 05 Mar 15 nicklas 328           }
3165 05 Mar 15 nicklas 329           else
3165 05 Mar 15 nicklas 330           {
3165 05 Mar 15 nicklas 331             Extract lysate = (Extract)rna.getParent();
3165 05 Mar 15 nicklas 332             Sample specimen = (Sample)lysate.getParent();
3165 05 Mar 15 nicklas 333             list.add(specimen);
3165 05 Mar 15 nicklas 334           }
3165 05 Mar 15 nicklas 335         }
3165 05 Mar 15 nicklas 336         
3165 05 Mar 15 nicklas 337         jsonMessages.add("List created with " + list.getSize() + " members (" + subtype.getName() + ")");
3165 05 Mar 15 nicklas 338         dc.commit();
3165 05 Mar 15 nicklas 339       }
3165 05 Mar 15 nicklas 340
3158 04 Mar 15 nicklas 341       json.put("messages", jsonMessages);
3158 04 Mar 15 nicklas 342       CounterService.getInstance().setForceCount();
3158 04 Mar 15 nicklas 343     }
3158 04 Mar 15 nicklas 344     catch (Throwable t)
3158 04 Mar 15 nicklas 345     {
3158 04 Mar 15 nicklas 346       t.printStackTrace();
3158 04 Mar 15 nicklas 347       json.clear();
3158 04 Mar 15 nicklas 348       json.put("status", "error");
3158 04 Mar 15 nicklas 349       json.put("message", t.getMessage());
3158 04 Mar 15 nicklas 350       json.put("stacktrace", ThrowableUtil.stackTraceToString(t));
3158 04 Mar 15 nicklas 351     }
3158 04 Mar 15 nicklas 352     finally
3158 04 Mar 15 nicklas 353     {
3158 04 Mar 15 nicklas 354       if (dc != null) dc.close();
3158 04 Mar 15 nicklas 355       json.writeJSONString(resp.getWriter());
3158 04 Mar 15 nicklas 356     }
3158 04 Mar 15 nicklas 357     
3158 04 Mar 15 nicklas 358   }
3158 04 Mar 15 nicklas 359   
3158 04 Mar 15 nicklas 360   
3158 04 Mar 15 nicklas 361 }