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

Code
Comments
Other
Rev Date Author Line
6869 15 Nov 22 nicklas 1 package net.sf.basedb.reggie.servlet;
6869 15 Nov 22 nicklas 2
6869 15 Nov 22 nicklas 3 import java.io.IOException;
6869 15 Nov 22 nicklas 4 import java.util.ArrayList;
6869 15 Nov 22 nicklas 5 import java.util.List;
6869 15 Nov 22 nicklas 6
6869 15 Nov 22 nicklas 7 import javax.servlet.ServletException;
6869 15 Nov 22 nicklas 8 import javax.servlet.http.HttpServlet;
6869 15 Nov 22 nicklas 9 import javax.servlet.http.HttpServletRequest;
6869 15 Nov 22 nicklas 10 import javax.servlet.http.HttpServletResponse;
6869 15 Nov 22 nicklas 11
6869 15 Nov 22 nicklas 12 import org.json.simple.JSONArray;
6869 15 Nov 22 nicklas 13 import org.json.simple.JSONObject;
6869 15 Nov 22 nicklas 14
6869 15 Nov 22 nicklas 15 import net.sf.basedb.core.ItemList;
6870 16 Nov 22 nicklas 16 import net.sf.basedb.core.ItemNotFoundException;
6869 15 Nov 22 nicklas 17 import net.sf.basedb.core.DbControl;
6869 15 Nov 22 nicklas 18 import net.sf.basedb.core.DerivedBioAssay;
6879 22 Nov 22 nicklas 19 import net.sf.basedb.core.Item;
6869 15 Nov 22 nicklas 20 import net.sf.basedb.core.ItemQuery;
6870 16 Nov 22 nicklas 21 import net.sf.basedb.core.Job;
6869 15 Nov 22 nicklas 22 import net.sf.basedb.core.SessionControl;
6870 16 Nov 22 nicklas 23 import net.sf.basedb.core.Software;
6869 15 Nov 22 nicklas 24 import net.sf.basedb.core.query.Annotations;
6869 15 Nov 22 nicklas 25 import net.sf.basedb.core.query.Hql;
6869 15 Nov 22 nicklas 26 import net.sf.basedb.core.query.Orders;
6879 22 Nov 22 nicklas 27 import net.sf.basedb.core.query.Restrictions;
6869 15 Nov 22 nicklas 28 import net.sf.basedb.core.snapshot.SnapshotManager;
6870 16 Nov 22 nicklas 29 import net.sf.basedb.opengrid.JobDefinition;
6870 16 Nov 22 nicklas 30 import net.sf.basedb.opengrid.OpenGridCluster;
6870 16 Nov 22 nicklas 31 import net.sf.basedb.opengrid.service.OpenGridService;
6869 15 Nov 22 nicklas 32 import net.sf.basedb.reggie.JsonUtil;
6869 15 Nov 22 nicklas 33 import net.sf.basedb.reggie.Reggie;
6880 22 Nov 22 nicklas 34 import net.sf.basedb.reggie.activity.ActivityDef;
6869 15 Nov 22 nicklas 35 import net.sf.basedb.reggie.counter.CounterService;
6869 15 Nov 22 nicklas 36 import net.sf.basedb.reggie.dao.Annotationtype;
6869 15 Nov 22 nicklas 37 import net.sf.basedb.reggie.dao.BeadChip;
6869 15 Nov 22 nicklas 38 import net.sf.basedb.reggie.dao.BiomaterialList;
6869 15 Nov 22 nicklas 39 import net.sf.basedb.reggie.dao.Dna;
6869 15 Nov 22 nicklas 40 import net.sf.basedb.reggie.dao.Methylation;
6879 22 Nov 22 nicklas 41 import net.sf.basedb.reggie.dao.Pipeline;
6869 15 Nov 22 nicklas 42 import net.sf.basedb.reggie.dao.ReggieRole;
6869 15 Nov 22 nicklas 43 import net.sf.basedb.reggie.dao.Subtype;
6870 16 Nov 22 nicklas 44 import net.sf.basedb.reggie.grid.MethylationBetaJobCreator;
6870 16 Nov 22 nicklas 45 import net.sf.basedb.reggie.grid.ScriptUtil;
6869 15 Nov 22 nicklas 46 import net.sf.basedb.util.Values;
6869 15 Nov 22 nicklas 47 import net.sf.basedb.util.error.ThrowableUtil;
6869 15 Nov 22 nicklas 48
6869 15 Nov 22 nicklas 49
6869 15 Nov 22 nicklas 50 public class MethylationServlet 
6869 15 Nov 22 nicklas 51   extends HttpServlet 
6869 15 Nov 22 nicklas 52 {
6869 15 Nov 22 nicklas 53
6869 15 Nov 22 nicklas 54   private static final long serialVersionUID = 7798394490628260483L;
6869 15 Nov 22 nicklas 55
6869 15 Nov 22 nicklas 56   public MethylationServlet()
6869 15 Nov 22 nicklas 57   {}
6869 15 Nov 22 nicklas 58
6869 15 Nov 22 nicklas 59   @Override
6869 15 Nov 22 nicklas 60   protected void doGet(HttpServletRequest req, HttpServletResponse resp)
6869 15 Nov 22 nicklas 61     throws ServletException, IOException 
6869 15 Nov 22 nicklas 62   {
6869 15 Nov 22 nicklas 63     String cmd = req.getParameter("cmd");
6869 15 Nov 22 nicklas 64     JsonUtil.setJsonResponseHeaders(resp);
6869 15 Nov 22 nicklas 65     
6869 15 Nov 22 nicklas 66     JSONObject json = new JSONObject();
6869 15 Nov 22 nicklas 67     json.put("status", "ok");
6869 15 Nov 22 nicklas 68     
6869 15 Nov 22 nicklas 69     final SessionControl sc = Reggie.getSessionControl(req);
6869 15 Nov 22 nicklas 70     DbControl dc = null;
6869 15 Nov 22 nicklas 71     try
6869 15 Nov 22 nicklas 72     {
6869 15 Nov 22 nicklas 73       if ("GetMethylationItemsForBetaAnalysis".equals(cmd))
6869 15 Nov 22 nicklas 74       {
6869 15 Nov 22 nicklas 75         dc = sc.newDbControl(":Start Methylation beta-analysis");
6869 15 Nov 22 nicklas 76         
6869 15 Nov 22 nicklas 77         List<Methylation> list = null;
6869 15 Nov 22 nicklas 78         String items = Values.getStringOrNull(req.getParameter("items"));
6869 15 Nov 22 nicklas 79         if (items == null)
6869 15 Nov 22 nicklas 80         {
6869 15 Nov 22 nicklas 81           ItemList methylationPipeline = BiomaterialList.METHYLATION_PIPELINE.load(dc);
6869 15 Nov 22 nicklas 82           ItemQuery<DerivedBioAssay> query = methylationPipeline.getMembers();
6869 15 Nov 22 nicklas 83           query.setIncludes(Reggie.INCLUDE_IN_CURRENT_PROJECT);
6869 15 Nov 22 nicklas 84           Subtype.METHYLATION.addFilter(dc, query);
6869 15 Nov 22 nicklas 85           // Join BeadChip and DNA aliquot for sorting
6869 15 Nov 22 nicklas 86           query.join(Hql.innerJoin(null, "physicalBioAssays", "chip", true));
6869 15 Nov 22 nicklas 87           query.join(Hql.innerJoin(null, "extract", "aliquot", true));
6869 15 Nov 22 nicklas 88           query.join(Annotations.leftJoin("aliquot", Annotationtype.BEADCHIP_POSITION.get(dc), "pos"));
6869 15 Nov 22 nicklas 89           query.order(Orders.asc(Hql.property("chip", "id")));
6869 15 Nov 22 nicklas 90           query.order(Orders.asc(Hql.alias("pos")));
6869 15 Nov 22 nicklas 91           query.order(Orders.asc(Hql.property("name")));
6869 15 Nov 22 nicklas 92           query.setMaxResults(250);
6869 15 Nov 22 nicklas 93           list = Methylation.toList(query.list(dc));
6869 15 Nov 22 nicklas 94         }
6869 15 Nov 22 nicklas 95         else
6869 15 Nov 22 nicklas 96         {
6869 15 Nov 22 nicklas 97           Integer[] ids = Values.getInt(items.split(","));
6869 15 Nov 22 nicklas 98           list = new ArrayList<Methylation>();
6869 15 Nov 22 nicklas 99           for (Integer id : ids)
6869 15 Nov 22 nicklas 100           {
6869 15 Nov 22 nicklas 101             list.add(Methylation.getById(dc, id));
6869 15 Nov 22 nicklas 102           }
6869 15 Nov 22 nicklas 103         }
6869 15 Nov 22 nicklas 104         SnapshotManager manager = new SnapshotManager();
6869 15 Nov 22 nicklas 105         JSONArray jsonMethylationItems = new JSONArray();
6869 15 Nov 22 nicklas 106         for (Methylation m : list)
6869 15 Nov 22 nicklas 107         {
6869 15 Nov 22 nicklas 108           m.loadAnnotations(dc, "pipeline", Annotationtype.PIPELINE, null);
6869 15 Nov 22 nicklas 109           Dna dna = m.getDnaAliquot(dc);
6869 15 Nov 22 nicklas 110           dna.loadAnnotations(dc, "BeadChipPosition", Annotationtype.BEADCHIP_POSITION, null);
6869 15 Nov 22 nicklas 111           m.setAnnotation("dna", dna.asJSONObject());
6869 15 Nov 22 nicklas 112           BeadChip chip = m.getBeadChip(dc);
6869 15 Nov 22 nicklas 113           chip.loadAnnotations(dc, "BeadChipId", Annotationtype.BEADCHIP_ID, null);
6869 15 Nov 22 nicklas 114           m.setAnnotation("beadChip", chip.asJSONObject());
6869 15 Nov 22 nicklas 115           m.loadAnnotations(dc, manager, "AutoProcess", Annotationtype.AUTO_PROCESSING, null);
6869 15 Nov 22 nicklas 116           m.loadDoNotUseAnnotations(dc, manager);
6869 15 Nov 22 nicklas 117           jsonMethylationItems.add(m.asJSONObject());
6869 15 Nov 22 nicklas 118         }
6869 15 Nov 22 nicklas 119         json.put("methylationItems", jsonMethylationItems);
6869 15 Nov 22 nicklas 120       }
6869 15 Nov 22 nicklas 121
6879 22 Nov 22 nicklas 122       else if ("GetUnconfirmedBetaAnalysis".equals(cmd))
6879 22 Nov 22 nicklas 123       {
6879 22 Nov 22 nicklas 124         dc = sc.newDbControl(":Confirm Methylation beta-analysis");
6879 22 Nov 22 nicklas 125         ItemQuery<DerivedBioAssay> query = DerivedBioAssay.getQuery();
6879 22 Nov 22 nicklas 126         query.setIncludes(Reggie.INCLUDE_IN_CURRENT_PROJECT);
6879 22 Nov 22 nicklas 127         Subtype.METHYLATION.addFilter(dc, query);
6879 22 Nov 22 nicklas 128         Pipeline.DNA_METHYLATION.addFilter(dc, query);
6880 22 Nov 22 nicklas 129         // The job must be a MethylationBeta job and it must be ended
6879 22 Nov 22 nicklas 130         query.join(Hql.innerJoin("job", "jb"));
6879 22 Nov 22 nicklas 131         Subtype.METHYLATION_BETA_JOB.addFilter(dc, query, "jb");
6879 22 Nov 22 nicklas 132         query.restrict(Restrictions.neq(Hql.property("jb", "ended"), null));
6879 22 Nov 22 nicklas 133         // Must NOT have a ANALYSIS_RESULT annotation
6879 22 Nov 22 nicklas 134         query.join(Annotations.leftJoin(null, Annotationtype.ANALYSIS_RESULT.load(dc), "ar"));
6879 22 Nov 22 nicklas 135         query.restrict(Restrictions.eq(Hql.alias("ar"), null));
6880 22 Nov 22 nicklas 136         // Must NOT have AutoProcess annotation
6879 22 Nov 22 nicklas 137         query.join(Annotations.leftJoin(null, Annotationtype.AUTO_PROCESSING.load(dc), "ap"));
6880 22 Nov 22 nicklas 138         query.restrict(  Restrictions.eq(Hql.alias("ap"), null));
6879 22 Nov 22 nicklas 139         // Join BeadChip and DNA aliquot for sorting
6879 22 Nov 22 nicklas 140         query.join(Hql.innerJoin(null, "physicalBioAssays", "chip", true));
6879 22 Nov 22 nicklas 141         query.join(Hql.innerJoin(null, "extract", "aliquot", true));
6879 22 Nov 22 nicklas 142         query.join(Annotations.leftJoin("aliquot", Annotationtype.BEADCHIP_POSITION.get(dc), "pos"));
6879 22 Nov 22 nicklas 143         query.order(Orders.asc(Hql.property("chip", "id")));
6879 22 Nov 22 nicklas 144         query.order(Orders.asc(Hql.alias("pos")));
6879 22 Nov 22 nicklas 145         query.order(Orders.asc(Hql.property("name")));
6879 22 Nov 22 nicklas 146         query.setMaxResults(250);
6879 22 Nov 22 nicklas 147         
6879 22 Nov 22 nicklas 148         SnapshotManager manager = new SnapshotManager();
6879 22 Nov 22 nicklas 149         JSONArray jsonMeth = new JSONArray();
6879 22 Nov 22 nicklas 150         List<Methylation> list = Methylation.toList(query.list(dc));
6879 22 Nov 22 nicklas 151         for (Methylation meth : list)
6879 22 Nov 22 nicklas 152         {
6879 22 Nov 22 nicklas 153           meth.loadAnnotations(dc, manager, "MedianMeth", Annotationtype.MEDIAN_METH, null);
6879 22 Nov 22 nicklas 154           meth.loadAnnotations(dc, manager, "MedianUnmeth", Annotationtype.MEDIAN_UNMETH, null);
6879 22 Nov 22 nicklas 155           meth.loadAnnotations(dc, manager, "ProbesRaw", Annotationtype.NUM_PROBES, null);
6879 22 Nov 22 nicklas 156           meth.loadAnnotations(dc, manager, "ProbesBad", Annotationtype.NUM_PROBES_BAD_PVAL, null);
6879 22 Nov 22 nicklas 157           meth.loadAnnotations(dc, manager, "ProbesRate", Annotationtype.PROBES_RATE, null);
6879 22 Nov 22 nicklas 158           meth.loadAnnotations(dc, manager, "PeakMethI", Annotationtype.PEAK_METH_I, null);
6879 22 Nov 22 nicklas 159           meth.loadAnnotations(dc, manager, "PeakMethII", Annotationtype.PEAK_METH_II, null);
6879 22 Nov 22 nicklas 160           meth.loadAnnotations(dc, manager, "PeakUnmethI", Annotationtype.PEAK_UNMETH_I, null);
6879 22 Nov 22 nicklas 161           meth.loadAnnotations(dc, manager, "PeakUnmethII", Annotationtype.PEAK_UNMETH_II, null);
6879 22 Nov 22 nicklas 162           meth.loadAnnotations(dc, manager, "AnalysisFlag", Annotationtype.ANALYSIS_FLAG, null);
6879 22 Nov 22 nicklas 163           meth.loadAnnotations(dc, manager, "DataFilesFolder", Annotationtype.DATA_FILES_FOLDER, null);
6880 22 Nov 22 nicklas 164           meth.setAnnotation("comment", meth.getItem().getDescription());
6879 22 Nov 22 nicklas 165
6879 22 Nov 22 nicklas 166           meth.setAnnotation("adjustmentPlots", JsonUtil.loadLinkedItem(dc, meth.getItem(), "adjustmentPlots.pdf", Item.FILE, null));
6879 22 Nov 22 nicklas 167           
6879 22 Nov 22 nicklas 168           // Load DNA information
6879 22 Nov 22 nicklas 169           Dna dna = meth.getDnaAliquot(dc);
6879 22 Nov 22 nicklas 170           dna.loadAnnotations(dc, "BeadChipPosition", Annotationtype.BEADCHIP_POSITION, null);
6879 22 Nov 22 nicklas 171           meth.setAnnotation("dna", dna.asJSONObject());
6879 22 Nov 22 nicklas 172
6879 22 Nov 22 nicklas 173           // Load BeadChip information
6879 22 Nov 22 nicklas 174           BeadChip chip = meth.getBeadChip(dc);
6879 22 Nov 22 nicklas 175           chip.loadAnnotations(dc, "BeadChipId", Annotationtype.BEADCHIP_ID, null);
6879 22 Nov 22 nicklas 176           meth.setAnnotation("beadChip", chip.asJSONObject());
6879 22 Nov 22 nicklas 177
6879 22 Nov 22 nicklas 178           // Load job information
6879 22 Nov 22 nicklas 179           Job job = meth.getItem().getJob();
6879 22 Nov 22 nicklas 180           JSONObject jsonJob = JsonUtil.getJobAsJSON(job);
6879 22 Nov 22 nicklas 181           meth.setAnnotation("job", jsonJob);
6879 22 Nov 22 nicklas 182
6879 22 Nov 22 nicklas 183           boolean debug = Boolean.TRUE.equals(job.getParameterValue("debug"));
6879 22 Nov 22 nicklas 184           jsonJob.put("debug", debug);
6879 22 Nov 22 nicklas 185           jsonMeth.add(meth.asJSONObject());
6879 22 Nov 22 nicklas 186         }
6879 22 Nov 22 nicklas 187         
6879 22 Nov 22 nicklas 188         json.put("methylationItems", jsonMeth);
6879 22 Nov 22 nicklas 189         
6879 22 Nov 22 nicklas 190       }
6869 15 Nov 22 nicklas 191     
6869 15 Nov 22 nicklas 192     }
6869 15 Nov 22 nicklas 193     catch (Throwable t)
6869 15 Nov 22 nicklas 194     {
6869 15 Nov 22 nicklas 195       t.printStackTrace();
6869 15 Nov 22 nicklas 196       json.clear();
6869 15 Nov 22 nicklas 197       json.put("status", "error");
6869 15 Nov 22 nicklas 198       json.put("message", t.getMessage());
6869 15 Nov 22 nicklas 199       json.put("stacktrace", ThrowableUtil.stackTraceToString(t));
6869 15 Nov 22 nicklas 200     }
6869 15 Nov 22 nicklas 201     finally
6869 15 Nov 22 nicklas 202     {
6869 15 Nov 22 nicklas 203       if (dc != null) dc.close();
6869 15 Nov 22 nicklas 204       json.writeJSONString(resp.getWriter());
6869 15 Nov 22 nicklas 205     }
6869 15 Nov 22 nicklas 206     
6869 15 Nov 22 nicklas 207   }
6869 15 Nov 22 nicklas 208
6869 15 Nov 22 nicklas 209   @Override
6869 15 Nov 22 nicklas 210   protected void doPost(HttpServletRequest req, HttpServletResponse resp)
6869 15 Nov 22 nicklas 211     throws ServletException, IOException 
6869 15 Nov 22 nicklas 212   {
6869 15 Nov 22 nicklas 213     String cmd = req.getParameter("cmd");
6869 15 Nov 22 nicklas 214     JsonUtil.setJsonResponseHeaders(resp);
6869 15 Nov 22 nicklas 215     
6869 15 Nov 22 nicklas 216     JSONObject json = new JSONObject();
6869 15 Nov 22 nicklas 217     json.put("status", "ok");
6869 15 Nov 22 nicklas 218     JSONArray jsonMessages = new JSONArray();
6869 15 Nov 22 nicklas 219   
6869 15 Nov 22 nicklas 220     final SessionControl sc = Reggie.getSessionControl(req);
6869 15 Nov 22 nicklas 221     DbControl dc = null;
6869 15 Nov 22 nicklas 222     try
6869 15 Nov 22 nicklas 223     {
6869 15 Nov 22 nicklas 224
6869 15 Nov 22 nicklas 225       if ("StartBetaAnalysis".equals(cmd))
6869 15 Nov 22 nicklas 226       {
6869 15 Nov 22 nicklas 227         dc = sc.newDbControl(":Start Methylation beta-analysis");
6869 15 Nov 22 nicklas 228
6869 15 Nov 22 nicklas 229         ReggieRole.checkPermission(dc, "'" + cmd + "' wizard", ReggieRole.SECONDARY_ANALYSIS, ReggieRole.ADMINISTRATOR);
6869 15 Nov 22 nicklas 230
6870 16 Nov 22 nicklas 231         JSONObject jsonReq = JsonUtil.parseRequest(req);
6870 16 Nov 22 nicklas 232         JSONArray jsonItems = (JSONArray)jsonReq.get("methylationItems");
6870 16 Nov 22 nicklas 233       
6870 16 Nov 22 nicklas 234         Number betaSoftwareId = (Number)jsonReq.get("betaSoftware");
6870 16 Nov 22 nicklas 235       
6870 16 Nov 22 nicklas 236         String clusterId = (String)jsonReq.get("cluster");
6870 16 Nov 22 nicklas 237         boolean debug = Boolean.TRUE.equals(jsonReq.get("debug"));
6870 16 Nov 22 nicklas 238         boolean autoConfirm = Boolean.TRUE.equals(jsonReq.get("autoConfirm"));
6870 16 Nov 22 nicklas 239         Number priority = (Number)jsonReq.get("priority");
6981 17 Jan 23 nicklas 240         String partition = Values.getStringOrNull((String)jsonReq.get("partition"));
7372 06 Oct 23 nicklas 241         String submitOptions = Values.getStringOrNull((String)jsonReq.get("submitOptionsOverride"));
6870 16 Nov 22 nicklas 242
6870 16 Nov 22 nicklas 243         OpenGridCluster cluster = OpenGridService.getInstance().getClusterById(dc, clusterId);
6870 16 Nov 22 nicklas 244         if (cluster == null)
6870 16 Nov 22 nicklas 245         {
6870 16 Nov 22 nicklas 246           throw new ItemNotFoundException("OpenGridCluster[" + clusterId + "]");
6870 16 Nov 22 nicklas 247         }
6870 16 Nov 22 nicklas 248
6870 16 Nov 22 nicklas 249         // Load common items
6870 16 Nov 22 nicklas 250         Software betaSoftware = betaSoftwareId != null ? Software.getById(dc, betaSoftwareId.intValue()) : null;
6870 16 Nov 22 nicklas 251
6870 16 Nov 22 nicklas 252         MethylationBetaJobCreator jobCreator = new MethylationBetaJobCreator();
6870 16 Nov 22 nicklas 253         jobCreator.setDebug(debug);
6870 16 Nov 22 nicklas 254         jobCreator.setAutoConfirm(autoConfirm);
6870 16 Nov 22 nicklas 255         jobCreator.setPriority(priority == null ? null : priority.intValue());
6981 17 Jan 23 nicklas 256         jobCreator.setPartition(partition);
6870 16 Nov 22 nicklas 257         jobCreator.setSoftware(betaSoftware);
7372 06 Oct 23 nicklas 258         jobCreator.setSubmitOptionsOverride(submitOptions);
6870 16 Nov 22 nicklas 259         
6870 16 Nov 22 nicklas 260         List<Methylation> methylationItems = new ArrayList<Methylation>();
6870 16 Nov 22 nicklas 261         for (int alNo = 0; alNo < jsonItems.size(); alNo++)
6870 16 Nov 22 nicklas 262         {
6870 16 Nov 22 nicklas 263           JSONObject jsonMeth = (JSONObject)jsonItems.get(alNo);
6870 16 Nov 22 nicklas 264           Number itemId = (Number)jsonMeth.get("id");
6870 16 Nov 22 nicklas 265         
6870 16 Nov 22 nicklas 266           Methylation m = Methylation.getById(dc, itemId.intValue());
6870 16 Nov 22 nicklas 267           methylationItems.add(m);
6870 16 Nov 22 nicklas 268
6870 16 Nov 22 nicklas 269           // Reset AUTO_PROCESSING annotation
6870 16 Nov 22 nicklas 270           DerivedBioAssay meth = m.getDerivedBioAssay();
6870 16 Nov 22 nicklas 271           Annotationtype.AUTO_PROCESSING.setAnnotationValue(dc, meth, null);
6870 16 Nov 22 nicklas 272         }
6870 16 Nov 22 nicklas 273
6870 16 Nov 22 nicklas 274         List<JobDefinition> jobDefs = jobCreator.createBetaJobs(dc, cluster, methylationItems);
6870 16 Nov 22 nicklas 275         List<Job> jobs = ScriptUtil.submitJobs(dc, cluster, jobDefs);
6870 16 Nov 22 nicklas 276         
6870 16 Nov 22 nicklas 277         for (Job job : jobs)
6870 16 Nov 22 nicklas 278         {
6870 16 Nov 22 nicklas 279           if (job.getStatus() == Job.Status.ERROR)
6870 16 Nov 22 nicklas 280           {
6870 16 Nov 22 nicklas 281             jsonMessages.add("[Error]Job submission for '" + job.getName() + "' failed: " + job.getStatusMessage());
6870 16 Nov 22 nicklas 282           }
6870 16 Nov 22 nicklas 283           else
6870 16 Nov 22 nicklas 284           {
6870 16 Nov 22 nicklas 285             jsonMessages.add("Submitted Methylation beta-analysis job to " + cluster.getConnectionInfo().getName() + " with id " + job.getExternalId());
6870 16 Nov 22 nicklas 286           }
6870 16 Nov 22 nicklas 287         }
6870 16 Nov 22 nicklas 288         
6869 15 Nov 22 nicklas 289         dc.commit();
6869 15 Nov 22 nicklas 290       }
6880 22 Nov 22 nicklas 291       else if ("ConfirmBetaAnalysis".equals(cmd))
6880 22 Nov 22 nicklas 292       {
6880 22 Nov 22 nicklas 293         dc = sc.newDbControl(":Confirm Methylation beta-analysis");
6869 15 Nov 22 nicklas 294
6880 22 Nov 22 nicklas 295         ReggieRole.checkPermission(dc, "'" + cmd + "' wizard", ReggieRole.SECONDARY_ANALYSIS, ReggieRole.ADMINISTRATOR);
6880 22 Nov 22 nicklas 296
6880 22 Nov 22 nicklas 297         JSONObject jsonReq = JsonUtil.parseRequest(req);
6880 22 Nov 22 nicklas 298         JSONArray jsonMethylationItems = (JSONArray)jsonReq.get("methylationItems");
6880 22 Nov 22 nicklas 299
6880 22 Nov 22 nicklas 300         int numConfirmed = 0;
6880 22 Nov 22 nicklas 301         int numUnconfirmed = 0;
6880 22 Nov 22 nicklas 302         int numReAnalyze = 0;
6880 22 Nov 22 nicklas 303         
6880 22 Nov 22 nicklas 304         ItemList betaPipeline = BiomaterialList.METHYLATION_PIPELINE.load(dc);
6880 22 Nov 22 nicklas 305         
6880 22 Nov 22 nicklas 306         for (int methNo = 0; methNo < jsonMethylationItems.size(); ++methNo)
6880 22 Nov 22 nicklas 307         {
6880 22 Nov 22 nicklas 308           JSONObject jsonMeth = (JSONObject)jsonMethylationItems.get(methNo);
6880 22 Nov 22 nicklas 309           Number methId = (Number)jsonMeth.get("id");
6880 22 Nov 22 nicklas 310           
6880 22 Nov 22 nicklas 311           Methylation m = Methylation.getById(dc, methId.intValue());
6880 22 Nov 22 nicklas 312           DerivedBioAssay meth = m.getItem();          
6880 22 Nov 22 nicklas 313           Job job = meth.getJob();
6880 22 Nov 22 nicklas 314           
6880 22 Nov 22 nicklas 315           Annotationtype.AUTO_PROCESSING.setAnnotationValue(dc, meth, null);          
6880 22 Nov 22 nicklas 316           String comment = Values.getStringOrNull((String)jsonMeth.get("comment"));
6880 22 Nov 22 nicklas 317           meth.setDescription(comment);
6880 22 Nov 22 nicklas 318           
6880 22 Nov 22 nicklas 319           boolean reAnalyze = Boolean.TRUE.equals(jsonMeth.get("reanalyze"));
6880 22 Nov 22 nicklas 320           boolean confirm = Boolean.TRUE.equals(jsonMeth.get("confirm"));
6880 22 Nov 22 nicklas 321
6880 22 Nov 22 nicklas 322           if (reAnalyze)
6880 22 Nov 22 nicklas 323           {
6880 22 Nov 22 nicklas 324             // Set ReProcess annotation on aligned sequences item
6880 22 Nov 22 nicklas 325             Annotationtype.AUTO_PROCESSING.setAnnotationValue(dc, meth, "ReProcess");
6880 22 Nov 22 nicklas 326             betaPipeline.add(meth);
6880 22 Nov 22 nicklas 327             numReAnalyze++;
6880 22 Nov 22 nicklas 328           }
6880 22 Nov 22 nicklas 329           if (confirm)
6880 22 Nov 22 nicklas 330           {
6880 22 Nov 22 nicklas 331             Annotationtype.ANALYSIS_RESULT.setAnnotationValue(dc, meth, job.getStatus() == Job.Status.ERROR ? "Failed" : "Successful");
6880 22 Nov 22 nicklas 332             numConfirmed++;
6880 22 Nov 22 nicklas 333           }
6880 22 Nov 22 nicklas 334           if (!confirm && !reAnalyze) numUnconfirmed++;
6880 22 Nov 22 nicklas 335         }
6880 22 Nov 22 nicklas 336         
6880 22 Nov 22 nicklas 337         if (numConfirmed > 0)
6880 22 Nov 22 nicklas 338         {
6880 22 Nov 22 nicklas 339           jsonMessages.add("Beta-values confirmed for " + numConfirmed + " methylation items");
6880 22 Nov 22 nicklas 340           ActivityDef.METHYLATION_BETA_CONFIRMED.merge(dc, numConfirmed);
6880 22 Nov 22 nicklas 341         }
6880 22 Nov 22 nicklas 342         else
6880 22 Nov 22 nicklas 343         {
6880 22 Nov 22 nicklas 344           jsonMessages.add("No methylation items confirmed");
6880 22 Nov 22 nicklas 345         }
6880 22 Nov 22 nicklas 346         
6880 22 Nov 22 nicklas 347         if (numReAnalyze > 0)
6880 22 Nov 22 nicklas 348         {
6880 22 Nov 22 nicklas 349           jsonMessages.add(numReAnalyze + " methylation items flagged for new beta-analysis");
6880 22 Nov 22 nicklas 350         }
6880 22 Nov 22 nicklas 351         
6880 22 Nov 22 nicklas 352         if (numUnconfirmed > 0)
6880 22 Nov 22 nicklas 353         {
6880 22 Nov 22 nicklas 354           jsonMessages.add(numUnconfirmed + " methylation items callings remain unconfirmed");
6880 22 Nov 22 nicklas 355         }
6880 22 Nov 22 nicklas 356         dc.commit();
6880 22 Nov 22 nicklas 357       }
6869 15 Nov 22 nicklas 358       json.put("messages", jsonMessages);
6869 15 Nov 22 nicklas 359       CounterService.getInstance().setForceCount();
6869 15 Nov 22 nicklas 360     }
6869 15 Nov 22 nicklas 361     catch (Throwable t)
6869 15 Nov 22 nicklas 362     {
6869 15 Nov 22 nicklas 363       t.printStackTrace();
6869 15 Nov 22 nicklas 364       json.clear();
6869 15 Nov 22 nicklas 365       json.put("status", "error");
6869 15 Nov 22 nicklas 366       json.put("message", t.getMessage());
6869 15 Nov 22 nicklas 367       json.put("stacktrace", ThrowableUtil.stackTraceToString(t));
6869 15 Nov 22 nicklas 368     }
6869 15 Nov 22 nicklas 369     finally
6869 15 Nov 22 nicklas 370     {
6869 15 Nov 22 nicklas 371       if (dc != null) dc.close();
6869 15 Nov 22 nicklas 372       json.writeJSONString(resp.getWriter());
6869 15 Nov 22 nicklas 373     }
6869 15 Nov 22 nicklas 374     
6869 15 Nov 22 nicklas 375   }
6869 15 Nov 22 nicklas 376   
6869 15 Nov 22 nicklas 377   
6869 15 Nov 22 nicklas 378
6869 15 Nov 22 nicklas 379 }