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 |
// 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 |
// 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 |
// Remove RNA from "Flagged RNA" list |
5364 |
16 Apr 19 |
nicklas |
247 |
flaggedRna.removeItem(rna); |
3162 |
04 Mar 15 |
nicklas |
// 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 |
// 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 |
// 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 |
} |