2964 |
20 Nov 14 |
olle |
1 |
package net.sf.basedb.meludi.servlet; |
2964 |
20 Nov 14 |
olle |
2 |
|
5264 |
24 Jan 19 |
olle |
3 |
import java.io.FileInputStream; |
3575 |
05 Nov 15 |
olle |
4 |
import java.io.FileWriter; |
2964 |
20 Nov 14 |
olle |
5 |
import java.io.IOException; |
5264 |
24 Jan 19 |
olle |
6 |
import java.io.InputStream; |
5264 |
24 Jan 19 |
olle |
7 |
import java.io.OutputStream; |
5264 |
24 Jan 19 |
olle |
8 |
import java.text.SimpleDateFormat; |
5069 |
01 Nov 18 |
olle |
9 |
import java.util.ArrayList; |
3575 |
05 Nov 15 |
olle |
10 |
import java.util.Date; |
4131 |
26 Sep 16 |
olle |
11 |
import java.util.HashMap; |
5069 |
01 Nov 18 |
olle |
12 |
import java.util.List; |
4131 |
26 Sep 16 |
olle |
13 |
import java.util.Set; |
2964 |
20 Nov 14 |
olle |
14 |
|
2964 |
20 Nov 14 |
olle |
15 |
import javax.servlet.ServletException; |
2964 |
20 Nov 14 |
olle |
16 |
import javax.servlet.ServletOutputStream; |
2964 |
20 Nov 14 |
olle |
17 |
import javax.servlet.http.HttpServlet; |
2964 |
20 Nov 14 |
olle |
18 |
import javax.servlet.http.HttpServletRequest; |
2964 |
20 Nov 14 |
olle |
19 |
import javax.servlet.http.HttpServletResponse; |
2964 |
20 Nov 14 |
olle |
20 |
|
2964 |
20 Nov 14 |
olle |
21 |
import net.sf.basedb.core.Application; |
2964 |
20 Nov 14 |
olle |
22 |
import net.sf.basedb.core.DbControl; |
2964 |
20 Nov 14 |
olle |
23 |
import net.sf.basedb.core.ItemQuery; |
4131 |
26 Sep 16 |
olle |
24 |
import net.sf.basedb.core.Project; |
2964 |
20 Nov 14 |
olle |
25 |
import net.sf.basedb.core.Sample; |
2964 |
20 Nov 14 |
olle |
26 |
import net.sf.basedb.core.SessionControl; |
2964 |
20 Nov 14 |
olle |
27 |
import net.sf.basedb.meludi.JsonUtil; |
2964 |
20 Nov 14 |
olle |
28 |
import net.sf.basedb.meludi.Meludi; |
5264 |
24 Jan 19 |
olle |
29 |
import net.sf.basedb.meludi.converter.DateToStringConverter; |
5069 |
01 Nov 18 |
olle |
30 |
import net.sf.basedb.meludi.dao.Annotationtype; |
5069 |
01 Nov 18 |
olle |
31 |
import net.sf.basedb.meludi.dao.FfpeBlock; |
2964 |
20 Nov 14 |
olle |
32 |
import net.sf.basedb.meludi.dao.Subtype; |
3575 |
05 Nov 15 |
olle |
33 |
import net.sf.basedb.util.Values; |
2964 |
20 Nov 14 |
olle |
34 |
import net.sf.basedb.util.error.ThrowableUtil; |
2964 |
20 Nov 14 |
olle |
35 |
|
5069 |
01 Nov 18 |
olle |
36 |
import org.json.simple.JSONArray; |
2964 |
20 Nov 14 |
olle |
37 |
import org.json.simple.JSONObject; |
5069 |
01 Nov 18 |
olle |
38 |
import org.json.simple.parser.JSONParser; |
2964 |
20 Nov 14 |
olle |
39 |
|
2964 |
20 Nov 14 |
olle |
40 |
public class LabelGenerationServlet |
2964 |
20 Nov 14 |
olle |
41 |
extends HttpServlet |
2964 |
20 Nov 14 |
olle |
42 |
{ |
2964 |
20 Nov 14 |
olle |
43 |
private static final long serialVersionUID = 4343512283090513225L; |
3575 |
05 Nov 15 |
olle |
44 |
private static final String CASE_LABEL_INFO_FILENAME = "Case_Label_Info.csv"; |
5264 |
24 Jan 19 |
olle |
45 |
private static int sitePrefixLength = 2; |
2964 |
20 Nov 14 |
olle |
46 |
|
2964 |
20 Nov 14 |
olle |
47 |
public LabelGenerationServlet() |
2964 |
20 Nov 14 |
olle |
48 |
{} |
2964 |
20 Nov 14 |
olle |
49 |
|
2964 |
20 Nov 14 |
olle |
50 |
@SuppressWarnings("unchecked") |
2964 |
20 Nov 14 |
olle |
51 |
@Override |
2964 |
20 Nov 14 |
olle |
52 |
protected void doGet(HttpServletRequest req, HttpServletResponse resp) |
2964 |
20 Nov 14 |
olle |
53 |
throws ServletException, IOException |
2964 |
20 Nov 14 |
olle |
54 |
{ |
2964 |
20 Nov 14 |
olle |
55 |
String ID = req.getParameter("ID"); |
2964 |
20 Nov 14 |
olle |
56 |
String cmd = req.getParameter("cmd"); |
2964 |
20 Nov 14 |
olle |
57 |
JsonUtil.setJsonResponseHeaders(resp); |
2964 |
20 Nov 14 |
olle |
58 |
|
2964 |
20 Nov 14 |
olle |
59 |
JSONObject json = new JSONObject(); |
2964 |
20 Nov 14 |
olle |
60 |
json.put("status", "ok"); |
2964 |
20 Nov 14 |
olle |
61 |
|
5468 |
04 Jun 19 |
olle |
//final SessionControl sc = Application.getSessionControl(ID, req.getRemoteAddr()); |
5744 |
20 Nov 19 |
olle |
//final SessionControl sc = Application.getSessionControl(ID, "", req.getRemoteAddr(), true); |
5744 |
20 Nov 19 |
olle |
64 |
final SessionControl sc = Application.getSessionControl(ID, null, req.getRemoteAddr(), true); |
2964 |
20 Nov 14 |
olle |
65 |
DbControl dc = null; |
2964 |
20 Nov 14 |
olle |
66 |
|
2964 |
20 Nov 14 |
olle |
67 |
try |
2964 |
20 Nov 14 |
olle |
68 |
{ |
2964 |
20 Nov 14 |
olle |
69 |
if ("CountCases".equals(cmd)) |
2964 |
20 Nov 14 |
olle |
70 |
{ |
3668 |
17 Dec 15 |
olle |
71 |
dc = sc.newDbControl(); |
3668 |
17 Dec 15 |
olle |
72 |
ItemQuery<Sample> query = Sample.getQuery(); |
3668 |
17 Dec 15 |
olle |
73 |
Subtype.CASE.addFilter(dc, query); |
3668 |
17 Dec 15 |
olle |
74 |
query.setIncludes(Meludi.INCLUDE_IN_CURRENT_PROJECT); |
3668 |
17 Dec 15 |
olle |
75 |
query.setCacheResult(true); |
3668 |
17 Dec 15 |
olle |
76 |
long count = query.count(dc); |
3668 |
17 Dec 15 |
olle |
77 |
json.put("count", count); |
4144 |
30 Sep 16 |
olle |
78 |
json.put("sampleItemPrefix", Meludi.fetchSampleItemPrefix(sc.getActiveProjectId())); |
4215 |
08 Nov 16 |
olle |
79 |
json.put("sampleItemNumDigits", Meludi.fetchSampleItemNumDigits(sc.getActiveProjectId())); |
4869 |
25 Jun 18 |
olle |
80 |
json.put("bloodItemPrefix", Meludi.fetchBloodItemPrefix(sc.getActiveProjectId())); |
3668 |
17 Dec 15 |
olle |
81 |
} |
3668 |
17 Dec 15 |
olle |
82 |
else if ("GetLastLabelCase".equals(cmd)) |
3668 |
17 Dec 15 |
olle |
83 |
{ |
4131 |
26 Sep 16 |
olle |
84 |
dc = sc.newDbControl(); |
4131 |
26 Sep 16 |
olle |
85 |
Project project = Project.getById(dc, sc.getActiveProjectId()); |
3575 |
05 Nov 15 |
olle |
// Get highest label case number from file |
4131 |
26 Sep 16 |
olle |
87 |
long count = fetchLabelCaseCount(project.getName()); |
3575 |
05 Nov 15 |
olle |
88 |
if (count < 0) |
3575 |
05 Nov 15 |
olle |
89 |
{ |
3575 |
05 Nov 15 |
olle |
// Get number of stored cases |
3575 |
05 Nov 15 |
olle |
91 |
ItemQuery<Sample> query = Sample.getQuery(); |
3575 |
05 Nov 15 |
olle |
92 |
Subtype.CASE.addFilter(dc, query); |
3575 |
05 Nov 15 |
olle |
93 |
query.setIncludes(Meludi.INCLUDE_IN_CURRENT_PROJECT); |
3575 |
05 Nov 15 |
olle |
94 |
query.setCacheResult(true); |
3575 |
05 Nov 15 |
olle |
95 |
count = query.count(dc); |
3575 |
05 Nov 15 |
olle |
96 |
} |
2964 |
20 Nov 14 |
olle |
97 |
json.put("count", count); |
4144 |
30 Sep 16 |
olle |
98 |
json.put("sampleItemPrefix", Meludi.fetchSampleItemPrefix(sc.getActiveProjectId())); |
4215 |
08 Nov 16 |
olle |
99 |
json.put("sampleItemNumDigits", Meludi.fetchSampleItemNumDigits(sc.getActiveProjectId())); |
2964 |
20 Nov 14 |
olle |
100 |
} |
2964 |
20 Nov 14 |
olle |
101 |
else if ("GetLabelFile".equals(cmd)) |
2964 |
20 Nov 14 |
olle |
102 |
{ |
4131 |
26 Sep 16 |
olle |
103 |
dc = sc.newDbControl(); |
4144 |
30 Sep 16 |
olle |
104 |
int activeProjectId = sc.getActiveProjectId(); |
4144 |
30 Sep 16 |
olle |
105 |
Project project = Project.getById(dc, activeProjectId); |
4144 |
30 Sep 16 |
olle |
106 |
String sampleItemPrefix = Meludi.fetchSampleItemPrefix(activeProjectId); |
4869 |
25 Jun 18 |
olle |
107 |
String bloodItemPrefix = Meludi.fetchBloodItemPrefix(activeProjectId); |
4876 |
27 Jun 18 |
olle |
108 |
boolean bloodAndSampleItemPrefixesDiffer = Meludi.bloodAndSampleItemPrefixesDiffer(activeProjectId); |
2964 |
20 Nov 14 |
olle |
109 |
String firstPart = ""; |
2964 |
20 Nov 14 |
olle |
110 |
String secondPart = ""; |
2964 |
20 Nov 14 |
olle |
111 |
|
2964 |
20 Nov 14 |
olle |
112 |
String nofCasesStr = req.getParameter("nofCases"); |
2964 |
20 Nov 14 |
olle |
113 |
String nofTubesPerCaseStr = req.getParameter("nofTubesPerCase"); |
2964 |
20 Nov 14 |
olle |
114 |
String startCase = req.getParameter("startCase"); |
4869 |
25 Jun 18 |
olle |
115 |
String tubeContentType = req.getParameter("tubeContentType"); |
4252 |
25 Nov 16 |
olle |
116 |
Boolean extractsFromFirstSpecimenOnly = Values.getBoolean(req.getParameter("extractsFromFirstSpecimenOnly"), false); |
3575 |
05 Nov 15 |
olle |
117 |
boolean preview = Values.getBoolean(req.getParameter("preview"), true); |
2964 |
20 Nov 14 |
olle |
118 |
int nofCases = Integer.parseInt(nofCasesStr); |
2964 |
20 Nov 14 |
olle |
119 |
int nofTubesPerCase = Integer.parseInt(nofTubesPerCaseStr); |
4252 |
25 Nov 16 |
olle |
120 |
int nofExtracts = nofTubesPerCase; |
4252 |
25 Nov 16 |
olle |
121 |
if (extractsFromFirstSpecimenOnly) |
4252 |
25 Nov 16 |
olle |
122 |
{ |
4252 |
25 Nov 16 |
olle |
123 |
nofExtracts = 1; |
4252 |
25 Nov 16 |
olle |
124 |
} |
4869 |
25 Jun 18 |
olle |
// Get desired item name prefix |
4869 |
25 Jun 18 |
olle |
126 |
String itemNamePrefix = sampleItemPrefix; |
4869 |
25 Jun 18 |
olle |
127 |
if (tubeContentType != null && tubeContentType.equals("Blood")) |
4869 |
25 Jun 18 |
olle |
128 |
{ |
4869 |
25 Jun 18 |
olle |
129 |
itemNamePrefix = bloodItemPrefix; |
4869 |
25 Jun 18 |
olle |
130 |
} |
4869 |
25 Jun 18 |
olle |
//System.out.println("LabelGenerationServlet::doGet(): cmd = \"" + cmd + "\" tubeContentType = " + tubeContentType + " itemNamePrefix = " + itemNamePrefix); |
4869 |
25 Jun 18 |
olle |
132 |
|
2964 |
20 Nov 14 |
olle |
// Possibly zero-padded start case number |
4869 |
25 Jun 18 |
olle |
134 |
String startCaseNumberStr = startCase.substring(itemNamePrefix.length()); |
2964 |
20 Nov 14 |
olle |
// Remove leading zeros in start case number |
2964 |
20 Nov 14 |
olle |
136 |
while (startCaseNumberStr.startsWith("0")) |
2964 |
20 Nov 14 |
olle |
137 |
{ |
2964 |
20 Nov 14 |
olle |
138 |
startCaseNumberStr = startCaseNumberStr.substring(1); |
2964 |
20 Nov 14 |
olle |
139 |
} |
2964 |
20 Nov 14 |
olle |
140 |
int startCaseNumber = Integer.parseInt(startCaseNumberStr); |
3575 |
05 Nov 15 |
olle |
141 |
int endCaseNumber = startCaseNumber + nofCases - 1; |
3575 |
05 Nov 15 |
olle |
142 |
if (!preview) |
3575 |
05 Nov 15 |
olle |
143 |
{ |
3575 |
05 Nov 15 |
olle |
// Update label case info file |
4131 |
26 Sep 16 |
olle |
145 |
updateLabelCaseCount(project.getName(), endCaseNumber); |
3575 |
05 Nov 15 |
olle |
146 |
} |
3575 |
05 Nov 15 |
olle |
// Generate label file contents |
4215 |
08 Nov 16 |
olle |
148 |
Integer sampleItemNumDigits = Meludi.fetchSampleItemNumDigits(sc.getActiveProjectId()); |
2964 |
20 Nov 14 |
olle |
149 |
String separator = ""; |
2964 |
20 Nov 14 |
olle |
150 |
|
2964 |
20 Nov 14 |
olle |
151 |
if (nofCases > 0 && nofTubesPerCase > 0 && startCaseNumber > 0) |
2964 |
20 Nov 14 |
olle |
152 |
{ |
2964 |
20 Nov 14 |
olle |
// Create label-text for each tube |
2964 |
20 Nov 14 |
olle |
154 |
for (int i = 0; i < nofCases; i++) |
2964 |
20 Nov 14 |
olle |
155 |
{ |
2964 |
20 Nov 14 |
olle |
156 |
int caseNumber = startCaseNumber + i; |
2964 |
20 Nov 14 |
olle |
157 |
String caseNumberStr = "" + caseNumber; |
4215 |
08 Nov 16 |
olle |
158 |
while (caseNumberStr.length() < sampleItemNumDigits) |
2964 |
20 Nov 14 |
olle |
159 |
{ |
2964 |
20 Nov 14 |
olle |
160 |
caseNumberStr = "0" + caseNumberStr; |
2964 |
20 Nov 14 |
olle |
161 |
} |
4869 |
25 Jun 18 |
olle |
162 |
String caseName = itemNamePrefix + caseNumberStr; |
2964 |
20 Nov 14 |
olle |
163 |
|
2964 |
20 Nov 14 |
olle |
164 |
firstPart += separator + caseName; |
2964 |
20 Nov 14 |
olle |
165 |
separator = "\n"; |
2964 |
20 Nov 14 |
olle |
166 |
|
2964 |
20 Nov 14 |
olle |
167 |
for (int j = 1; j <= nofTubesPerCase; j++) |
2964 |
20 Nov 14 |
olle |
168 |
{ |
4869 |
25 Jun 18 |
olle |
169 |
String tubeName = caseName; |
4876 |
27 Jun 18 |
olle |
170 |
if (tubeContentType != null && tubeContentType.equals("Blood") && !bloodAndSampleItemPrefixesDiffer) |
4869 |
25 Jun 18 |
olle |
171 |
{ |
4869 |
25 Jun 18 |
olle |
172 |
tubeName += ".b"; |
4869 |
25 Jun 18 |
olle |
173 |
if (j > 1) |
4869 |
25 Jun 18 |
olle |
174 |
{ |
4869 |
25 Jun 18 |
olle |
175 |
tubeName += "" + j; |
4869 |
25 Jun 18 |
olle |
176 |
} |
4869 |
25 Jun 18 |
olle |
177 |
} |
4869 |
25 Jun 18 |
olle |
178 |
else |
4869 |
25 Jun 18 |
olle |
179 |
{ |
4869 |
25 Jun 18 |
olle |
180 |
tubeName += "." + j; |
4869 |
25 Jun 18 |
olle |
181 |
} |
2964 |
20 Nov 14 |
olle |
182 |
firstPart += separator + tubeName; |
4252 |
25 Nov 16 |
olle |
183 |
|
4252 |
25 Nov 16 |
olle |
184 |
if (j <= nofExtracts) |
4252 |
25 Nov 16 |
olle |
185 |
{ |
4252 |
25 Nov 16 |
olle |
186 |
secondPart += separator + tubeName + ".r"; |
4252 |
25 Nov 16 |
olle |
187 |
secondPart += separator + tubeName + ".d"; |
4252 |
25 Nov 16 |
olle |
188 |
} |
2964 |
20 Nov 14 |
olle |
189 |
} |
2964 |
20 Nov 14 |
olle |
190 |
} |
2964 |
20 Nov 14 |
olle |
191 |
String labelString = "LABEL\n" + firstPart + secondPart; |
2964 |
20 Nov 14 |
olle |
192 |
|
2964 |
20 Nov 14 |
olle |
// Send labels in a file to the client. |
2964 |
20 Nov 14 |
olle |
194 |
resp.setHeader("Content-Disposition", "attachment; filename=Tube_labels.csv"); |
2964 |
20 Nov 14 |
olle |
195 |
resp.setContentType("text/plain"); |
2964 |
20 Nov 14 |
olle |
196 |
ServletOutputStream os = resp.getOutputStream(); |
2964 |
20 Nov 14 |
olle |
197 |
os.print(labelString); |
2964 |
20 Nov 14 |
olle |
198 |
os.flush(); |
2964 |
20 Nov 14 |
olle |
199 |
os.close(); |
2964 |
20 Nov 14 |
olle |
200 |
} |
2964 |
20 Nov 14 |
olle |
201 |
} |
5069 |
01 Nov 18 |
olle |
202 |
else if ("GetFfpeSectionLabelFile".equals(cmd)) |
5069 |
01 Nov 18 |
olle |
203 |
{ |
5069 |
01 Nov 18 |
olle |
204 |
dc = sc.newDbControl(); |
5069 |
01 Nov 18 |
olle |
205 |
int activeProjectId = sc.getActiveProjectId(); |
5069 |
01 Nov 18 |
olle |
206 |
Project project = Project.getById(dc, activeProjectId); |
5069 |
01 Nov 18 |
olle |
207 |
String sampleItemPrefix = Meludi.fetchSampleItemPrefix(activeProjectId); |
5069 |
01 Nov 18 |
olle |
208 |
String bloodItemPrefix = Meludi.fetchBloodItemPrefix(activeProjectId); |
5069 |
01 Nov 18 |
olle |
209 |
boolean bloodAndSampleItemPrefixesDiffer = Meludi.bloodAndSampleItemPrefixesDiffer(activeProjectId); |
5069 |
01 Nov 18 |
olle |
210 |
String firstPart = ""; |
5069 |
01 Nov 18 |
olle |
211 |
String secondPart = ""; |
5069 |
01 Nov 18 |
olle |
212 |
|
5069 |
01 Nov 18 |
olle |
213 |
boolean preview = Values.getBoolean(req.getParameter("preview"), true); |
5069 |
01 Nov 18 |
olle |
214 |
String jsonFfpeBlockListStr = Values.getString(req.getParameter("ffpeblocklist"), ""); |
5069 |
01 Nov 18 |
olle |
//System.out.println("LabelGenerationServlet::doGet(): cmd = \"" + cmd + "\" jsonFfpeBlockListStr = " + jsonFfpeBlockListStr); |
5069 |
01 Nov 18 |
olle |
// Get list of extract source item names |
5069 |
01 Nov 18 |
olle |
217 |
List<String> ffpeBlockIdList = new ArrayList<String>(); |
5069 |
01 Nov 18 |
olle |
218 |
JSONArray jsonItems = (JSONArray)new JSONParser().parse(jsonFfpeBlockListStr); |
5069 |
01 Nov 18 |
olle |
//System.out.println("LabelGenerationServlet::doGet(): cmd = \"" + cmd + "\" jsonItems = " + jsonItems); |
5069 |
01 Nov 18 |
olle |
220 |
|
5069 |
01 Nov 18 |
olle |
// Generate label file contents |
5069 |
01 Nov 18 |
olle |
222 |
Integer sampleItemNumDigits = Meludi.fetchSampleItemNumDigits(sc.getActiveProjectId()); |
5069 |
01 Nov 18 |
olle |
223 |
String separator = ""; |
5069 |
01 Nov 18 |
olle |
224 |
|
5069 |
01 Nov 18 |
olle |
225 |
for (int i = 0; i < jsonItems.size(); ++i) |
5069 |
01 Nov 18 |
olle |
226 |
{ |
5069 |
01 Nov 18 |
olle |
227 |
JSONObject jsonItem = (JSONObject)jsonItems.get(i); |
5069 |
01 Nov 18 |
olle |
228 |
String itemName = (String)jsonItem.get("name"); |
5069 |
01 Nov 18 |
olle |
229 |
ffpeBlockIdList.add(itemName); |
5069 |
01 Nov 18 |
olle |
230 |
firstPart += separator + itemName + ".s"; |
5069 |
01 Nov 18 |
olle |
231 |
separator = "\n"; |
5069 |
01 Nov 18 |
olle |
232 |
} |
5069 |
01 Nov 18 |
olle |
233 |
String labelString = "LABEL\n" + firstPart + secondPart; |
5069 |
01 Nov 18 |
olle |
234 |
|
5069 |
01 Nov 18 |
olle |
// Send labels in a file to the client. |
5069 |
01 Nov 18 |
olle |
236 |
resp.setHeader("Content-Disposition", "attachment; filename=FFPE_section_labels.csv"); |
5069 |
01 Nov 18 |
olle |
237 |
resp.setContentType("text/plain"); |
5069 |
01 Nov 18 |
olle |
238 |
ServletOutputStream os = resp.getOutputStream(); |
5069 |
01 Nov 18 |
olle |
239 |
os.print(labelString); |
5069 |
01 Nov 18 |
olle |
240 |
os.flush(); |
5069 |
01 Nov 18 |
olle |
241 |
os.close(); |
5069 |
01 Nov 18 |
olle |
242 |
} |
5069 |
01 Nov 18 |
olle |
243 |
else if ("GetHeGlassLabelFile".equals(cmd)) |
5069 |
01 Nov 18 |
olle |
244 |
{ |
5069 |
01 Nov 18 |
olle |
245 |
dc = sc.newDbControl(); |
5069 |
01 Nov 18 |
olle |
246 |
int activeProjectId = sc.getActiveProjectId(); |
5069 |
01 Nov 18 |
olle |
247 |
Project project = Project.getById(dc, activeProjectId); |
5069 |
01 Nov 18 |
olle |
248 |
String sampleItemPrefix = Meludi.fetchSampleItemPrefix(activeProjectId); |
5069 |
01 Nov 18 |
olle |
249 |
String bloodItemPrefix = Meludi.fetchBloodItemPrefix(activeProjectId); |
5069 |
01 Nov 18 |
olle |
250 |
boolean bloodAndSampleItemPrefixesDiffer = Meludi.bloodAndSampleItemPrefixesDiffer(activeProjectId); |
5069 |
01 Nov 18 |
olle |
251 |
String firstPart = ""; |
5069 |
01 Nov 18 |
olle |
252 |
String secondPart = ""; |
5069 |
01 Nov 18 |
olle |
253 |
|
5069 |
01 Nov 18 |
olle |
254 |
boolean preview = Values.getBoolean(req.getParameter("preview"), true); |
5069 |
01 Nov 18 |
olle |
255 |
String jsonFfpeBlockListStr = Values.getString(req.getParameter("ffpeblocklist"), ""); |
5069 |
01 Nov 18 |
olle |
//System.out.println("LabelGenerationServlet::doGet(): cmd = \"" + cmd + "\" jsonFfpeBlockListStr = " + jsonFfpeBlockListStr); |
5069 |
01 Nov 18 |
olle |
// Get list of extract source item names |
5069 |
01 Nov 18 |
olle |
258 |
List<String> ffpeBlockIdList = new ArrayList<String>(); |
5069 |
01 Nov 18 |
olle |
259 |
JSONArray jsonItems = (JSONArray)new JSONParser().parse(jsonFfpeBlockListStr); |
5069 |
01 Nov 18 |
olle |
//System.out.println("LabelGenerationServlet::doGet(): cmd = \"" + cmd + "\" jsonItems = " + jsonItems); |
5069 |
01 Nov 18 |
olle |
261 |
|
5069 |
01 Nov 18 |
olle |
// Generate label file contents |
5069 |
01 Nov 18 |
olle |
263 |
Integer sampleItemNumDigits = Meludi.fetchSampleItemNumDigits(sc.getActiveProjectId()); |
5069 |
01 Nov 18 |
olle |
264 |
String separator = ""; |
5069 |
01 Nov 18 |
olle |
265 |
|
5069 |
01 Nov 18 |
olle |
266 |
for (int i = 0; i < jsonItems.size(); ++i) |
5069 |
01 Nov 18 |
olle |
267 |
{ |
5069 |
01 Nov 18 |
olle |
268 |
JSONObject jsonItem = (JSONObject)jsonItems.get(i); |
5069 |
01 Nov 18 |
olle |
269 |
String itemName = (String)jsonItem.get("name"); |
5069 |
01 Nov 18 |
olle |
270 |
ffpeBlockIdList.add(itemName); |
5083 |
12 Nov 18 |
olle |
271 |
firstPart += separator + itemName + ".F"; |
5069 |
01 Nov 18 |
olle |
272 |
separator = "\n"; |
5083 |
12 Nov 18 |
olle |
273 |
firstPart += separator + itemName + ".E"; |
5069 |
01 Nov 18 |
olle |
274 |
} |
5069 |
01 Nov 18 |
olle |
275 |
String labelString = "LABEL\n" + firstPart + secondPart; |
5069 |
01 Nov 18 |
olle |
276 |
|
5069 |
01 Nov 18 |
olle |
// Send labels in a file to the client. |
5069 |
01 Nov 18 |
olle |
278 |
resp.setHeader("Content-Disposition", "attachment; filename=HE_glass_labels.csv"); |
5069 |
01 Nov 18 |
olle |
279 |
resp.setContentType("text/plain"); |
5069 |
01 Nov 18 |
olle |
280 |
ServletOutputStream os = resp.getOutputStream(); |
5069 |
01 Nov 18 |
olle |
281 |
os.print(labelString); |
5069 |
01 Nov 18 |
olle |
282 |
os.flush(); |
5069 |
01 Nov 18 |
olle |
283 |
os.close(); |
5069 |
01 Nov 18 |
olle |
284 |
} |
5264 |
24 Jan 19 |
olle |
285 |
else if ("GetSerumLabelFile".equals(cmd)) |
5264 |
24 Jan 19 |
olle |
286 |
{ |
5264 |
24 Jan 19 |
olle |
287 |
dc = sc.newDbControl(); |
5264 |
24 Jan 19 |
olle |
288 |
int activeProjectId = sc.getActiveProjectId(); |
5264 |
24 Jan 19 |
olle |
// No JSON output |
5264 |
24 Jan 19 |
olle |
290 |
json = null; |
5264 |
24 Jan 19 |
olle |
291 |
|
5264 |
24 Jan 19 |
olle |
292 |
int batchType = Values.getInteger(req.getParameter("batchType"), 1); |
5264 |
24 Jan 19 |
olle |
293 |
String startItemName = req.getParameter("startitemname"); |
5264 |
24 Jan 19 |
olle |
294 |
int nofItems = Values.getInteger(req.getParameter("nofformsets"), 1); |
5264 |
24 Jan 19 |
olle |
295 |
String itemPrefix = Meludi.fetchReferralPrefix(activeProjectId); |
5264 |
24 Jan 19 |
olle |
296 |
String startItemIdDigits = Meludi.fetchReferralDigits(startItemName, activeProjectId); |
5264 |
24 Jan 19 |
olle |
297 |
boolean preview = Values.getBoolean(req.getParameter("preview"), true); |
5264 |
24 Jan 19 |
olle |
298 |
String firstPart = ""; |
5264 |
24 Jan 19 |
olle |
299 |
String secondPart = ""; |
5264 |
24 Jan 19 |
olle |
300 |
|
5264 |
24 Jan 19 |
olle |
// Generate label file contents |
5264 |
24 Jan 19 |
olle |
302 |
Integer sampleItemNumDigits = Meludi.fetchSampleItemNumDigits(sc.getActiveProjectId()); |
5264 |
24 Jan 19 |
olle |
303 |
String separator = ""; |
5264 |
24 Jan 19 |
olle |
304 |
|
5264 |
24 Jan 19 |
olle |
//for (int i = 0; i < jsonItems.size(); ++i) |
5264 |
24 Jan 19 |
olle |
//String referralLabelPrefix = "SC2798"; |
5264 |
24 Jan 19 |
olle |
307 |
String referralLabelPrefix = "2798"; |
5264 |
24 Jan 19 |
olle |
308 |
String itemDigits = startItemIdDigits; |
5264 |
24 Jan 19 |
olle |
309 |
for (int i = 0; i < nofItems; i++) |
5264 |
24 Jan 19 |
olle |
310 |
{ |
5264 |
24 Jan 19 |
olle |
311 |
if (i > 0) |
5264 |
24 Jan 19 |
olle |
312 |
{ |
5264 |
24 Jan 19 |
olle |
313 |
itemDigits = nextItemIdDigits(itemDigits); |
5264 |
24 Jan 19 |
olle |
314 |
} |
5264 |
24 Jan 19 |
olle |
//String itemName = itemPrefix + itemDigits; |
5264 |
24 Jan 19 |
olle |
316 |
String itemName = itemDigits; |
5264 |
24 Jan 19 |
olle |
317 |
for (int j = 1; j < 9; j++) |
5264 |
24 Jan 19 |
olle |
318 |
{ |
5264 |
24 Jan 19 |
olle |
319 |
for (int k = 1; k < 5; k++) |
5264 |
24 Jan 19 |
olle |
320 |
{ |
5264 |
24 Jan 19 |
olle |
//firstPart += separator + referralLabelPrefix + "-" + itemName + "-" + j + "-" + k; |
5264 |
24 Jan 19 |
olle |
//firstPart += separator + referralLabelPrefix + itemName + "-" + j + "-" + k; |
5264 |
24 Jan 19 |
olle |
323 |
firstPart += separator + referralLabelPrefix + itemName + "-" + j + "" + k; |
5264 |
24 Jan 19 |
olle |
324 |
separator = "\n"; |
5264 |
24 Jan 19 |
olle |
325 |
} |
5264 |
24 Jan 19 |
olle |
326 |
} |
5264 |
24 Jan 19 |
olle |
327 |
} |
5264 |
24 Jan 19 |
olle |
//String labelString = "LABEL\n" + firstPart + secondPart; |
5264 |
24 Jan 19 |
olle |
329 |
String labelString = firstPart + secondPart; |
5264 |
24 Jan 19 |
olle |
330 |
|
5264 |
24 Jan 19 |
olle |
// Send labels in a file to the client. |
5264 |
24 Jan 19 |
olle |
332 |
String endItemName = itemPrefix + itemDigits; |
5264 |
24 Jan 19 |
olle |
333 |
String filename = "serum_labels_" + startItemName + "-" + endItemName + ".csv"; |
5264 |
24 Jan 19 |
olle |
334 |
String headerArg1 = "attachment; filename=" + filename; |
5264 |
24 Jan 19 |
olle |
//resp.setHeader("Content-Disposition", "attachment; filename=referral_labels.csv"); |
5264 |
24 Jan 19 |
olle |
336 |
resp.setHeader("Content-Disposition", headerArg1); |
5264 |
24 Jan 19 |
olle |
337 |
resp.setContentType("text/plain"); |
5264 |
24 Jan 19 |
olle |
338 |
ServletOutputStream os = resp.getOutputStream(); |
5264 |
24 Jan 19 |
olle |
339 |
os.print(labelString); |
5264 |
24 Jan 19 |
olle |
340 |
os.flush(); |
5264 |
24 Jan 19 |
olle |
341 |
os.close(); |
5264 |
24 Jan 19 |
olle |
342 |
} |
5858 |
10 Mar 20 |
olle |
343 |
else if ("GetDnaRnaLabelFile".equals(cmd)) |
5858 |
10 Mar 20 |
olle |
344 |
{ |
5858 |
10 Mar 20 |
olle |
345 |
dc = sc.newDbControl(); |
5858 |
10 Mar 20 |
olle |
346 |
int activeProjectId = sc.getActiveProjectId(); |
5858 |
10 Mar 20 |
olle |
347 |
Project project = Project.getById(dc, activeProjectId); |
5858 |
10 Mar 20 |
olle |
348 |
String sampleItemPrefix = Meludi.fetchSampleItemPrefix(activeProjectId); |
5858 |
10 Mar 20 |
olle |
349 |
String bloodItemPrefix = Meludi.fetchBloodItemPrefix(activeProjectId); |
5858 |
10 Mar 20 |
olle |
350 |
boolean bloodAndSampleItemPrefixesDiffer = Meludi.bloodAndSampleItemPrefixesDiffer(activeProjectId); |
5858 |
10 Mar 20 |
olle |
351 |
String firstPart = ""; |
5858 |
10 Mar 20 |
olle |
352 |
String secondPart = ""; |
5858 |
10 Mar 20 |
olle |
353 |
|
5858 |
10 Mar 20 |
olle |
354 |
boolean preview = Values.getBoolean(req.getParameter("preview"), true); |
5858 |
10 Mar 20 |
olle |
355 |
String jsonSelItemsListStr = Values.getString(req.getParameter("selitemslist"), ""); |
5858 |
10 Mar 20 |
olle |
// Get list of extract source item names |
5858 |
10 Mar 20 |
olle |
357 |
List<String> selItemsIdList = new ArrayList<String>(); |
5858 |
10 Mar 20 |
olle |
358 |
JSONArray jsonItems = (JSONArray)new JSONParser().parse(jsonSelItemsListStr); |
5858 |
10 Mar 20 |
olle |
359 |
|
5858 |
10 Mar 20 |
olle |
// Generate label file contents |
5858 |
10 Mar 20 |
olle |
361 |
Integer sampleItemNumDigits = Meludi.fetchSampleItemNumDigits(sc.getActiveProjectId()); |
5858 |
10 Mar 20 |
olle |
362 |
String separator = ""; |
5858 |
10 Mar 20 |
olle |
363 |
|
5858 |
10 Mar 20 |
olle |
364 |
for (int i = 0; i < jsonItems.size(); ++i) |
5858 |
10 Mar 20 |
olle |
365 |
{ |
5858 |
10 Mar 20 |
olle |
366 |
JSONObject jsonItem = (JSONObject)jsonItems.get(i); |
5858 |
10 Mar 20 |
olle |
367 |
String itemName = (String)jsonItem.get("name"); |
5858 |
10 Mar 20 |
olle |
// Simplify item name by omitting ".s" for FFPR section (specimen) |
5858 |
10 Mar 20 |
olle |
369 |
itemName = itemName.replace(".s", ""); |
5858 |
10 Mar 20 |
olle |
370 |
selItemsIdList.add(itemName); |
5858 |
10 Mar 20 |
olle |
//firstPart += separator + itemName + ".s"; |
5858 |
10 Mar 20 |
olle |
372 |
firstPart += separator + itemName + ".d"; |
5858 |
10 Mar 20 |
olle |
373 |
separator = "\n"; |
5858 |
10 Mar 20 |
olle |
374 |
firstPart += separator + itemName + ".r"; |
5858 |
10 Mar 20 |
olle |
375 |
separator = "\n"; |
5858 |
10 Mar 20 |
olle |
376 |
} |
5858 |
10 Mar 20 |
olle |
377 |
String labelString = "LABEL\n" + firstPart + secondPart; |
5858 |
10 Mar 20 |
olle |
378 |
|
5858 |
10 Mar 20 |
olle |
// Get filename with time stamp |
5858 |
10 Mar 20 |
olle |
380 |
String filename = "dna_rna_labels.csv"; |
5858 |
10 Mar 20 |
olle |
// Add time stamp to download filename |
5858 |
10 Mar 20 |
olle |
382 |
DateToStringConverter d2 = new DateToStringConverter(new SimpleDateFormat("yyyyMMdd_HHmm")); |
5858 |
10 Mar 20 |
olle |
383 |
String timeStampStr = d2.convert(new Date()); |
5858 |
10 Mar 20 |
olle |
384 |
String fileExt = ""; |
5858 |
10 Mar 20 |
olle |
385 |
int fileExtIndex = filename.lastIndexOf("."); |
5858 |
10 Mar 20 |
olle |
386 |
if (fileExtIndex >= 0) |
5858 |
10 Mar 20 |
olle |
387 |
{ |
5858 |
10 Mar 20 |
olle |
// Get file extension |
5858 |
10 Mar 20 |
olle |
389 |
fileExt = filename.substring(fileExtIndex); |
5858 |
10 Mar 20 |
olle |
// Remove file extension |
5858 |
10 Mar 20 |
olle |
391 |
filename = filename.substring(0, fileExtIndex); |
5858 |
10 Mar 20 |
olle |
392 |
} |
5858 |
10 Mar 20 |
olle |
393 |
filename += "_" + timeStampStr + fileExt; |
5858 |
10 Mar 20 |
olle |
394 |
|
5858 |
10 Mar 20 |
olle |
// Send labels in a file to the client. |
5858 |
10 Mar 20 |
olle |
396 |
resp.setHeader("Content-Disposition", "attachment; filename=" + filename); |
5858 |
10 Mar 20 |
olle |
397 |
resp.setContentType("text/plain"); |
5858 |
10 Mar 20 |
olle |
398 |
ServletOutputStream os = resp.getOutputStream(); |
5858 |
10 Mar 20 |
olle |
399 |
os.print(labelString); |
5858 |
10 Mar 20 |
olle |
400 |
os.flush(); |
5858 |
10 Mar 20 |
olle |
401 |
os.close(); |
5858 |
10 Mar 20 |
olle |
402 |
} |
2964 |
20 Nov 14 |
olle |
403 |
} |
2964 |
20 Nov 14 |
olle |
404 |
catch (Throwable t) |
2964 |
20 Nov 14 |
olle |
405 |
{ |
2964 |
20 Nov 14 |
olle |
406 |
t.printStackTrace(); |
2964 |
20 Nov 14 |
olle |
407 |
json.clear(); |
2964 |
20 Nov 14 |
olle |
408 |
json.put("status", "error"); |
2964 |
20 Nov 14 |
olle |
409 |
json.put("message", t.getMessage()); |
2964 |
20 Nov 14 |
olle |
410 |
json.put("stacktrace", ThrowableUtil.stackTraceToString(t)); |
2964 |
20 Nov 14 |
olle |
411 |
} |
2964 |
20 Nov 14 |
olle |
412 |
finally |
2964 |
20 Nov 14 |
olle |
413 |
{ |
2964 |
20 Nov 14 |
olle |
414 |
if (dc!=null) dc.close(); |
2964 |
20 Nov 14 |
olle |
415 |
json.writeJSONString(resp.getWriter()); |
2964 |
20 Nov 14 |
olle |
416 |
} |
2964 |
20 Nov 14 |
olle |
417 |
} |
3575 |
05 Nov 15 |
olle |
418 |
|
4131 |
26 Sep 16 |
olle |
419 |
private long fetchLabelCaseCount(String projectName) |
3575 |
05 Nov 15 |
olle |
420 |
{ |
3575 |
05 Nov 15 |
olle |
421 |
long highestCaseNum = -1; |
4131 |
26 Sep 16 |
olle |
422 |
HashMap<String,String> projectNameHighestCaseNumHM = fetchLabelCaseFileContents(); |
4131 |
26 Sep 16 |
olle |
423 |
if (projectNameHighestCaseNumHM != null) |
4131 |
26 Sep 16 |
olle |
424 |
{ |
4131 |
26 Sep 16 |
olle |
425 |
String value = projectNameHighestCaseNumHM.get(projectName); |
4131 |
26 Sep 16 |
olle |
426 |
if (value != null && !value.equals("")) |
4131 |
26 Sep 16 |
olle |
427 |
{ |
4131 |
26 Sep 16 |
olle |
428 |
highestCaseNum = Long.parseLong(value); |
4131 |
26 Sep 16 |
olle |
429 |
} |
4131 |
26 Sep 16 |
olle |
430 |
} |
4131 |
26 Sep 16 |
olle |
431 |
return highestCaseNum; |
4131 |
26 Sep 16 |
olle |
432 |
} |
4131 |
26 Sep 16 |
olle |
433 |
|
4131 |
26 Sep 16 |
olle |
434 |
private HashMap<String,String> fetchLabelCaseFileContents() |
4131 |
26 Sep 16 |
olle |
435 |
{ |
3575 |
05 Nov 15 |
olle |
// Place highest case label file in BASE user files directory |
3575 |
05 Nov 15 |
olle |
437 |
String caseLabelInfoFileName = CASE_LABEL_INFO_FILENAME; |
3575 |
05 Nov 15 |
olle |
438 |
java.io.File userFilesDir = Application.getUserFilesDirectory(); |
3575 |
05 Nov 15 |
olle |
439 |
String fileDir = userFilesDir.getAbsolutePath(); |
3575 |
05 Nov 15 |
olle |
440 |
String caseLabelInfoFilePath = fileDir + "/" + caseLabelInfoFileName; |
3575 |
05 Nov 15 |
olle |
441 |
java.io.File caseLabelInfoFile = new java.io.File(caseLabelInfoFilePath); |
4131 |
26 Sep 16 |
olle |
442 |
HashMap<String,String> projectNameHighestCaseNumHM = new HashMap<String,String>(); |
4131 |
26 Sep 16 |
olle |
443 |
String separator = "\t"; |
3575 |
05 Nov 15 |
olle |
444 |
if (caseLabelInfoFile.exists() && !caseLabelInfoFile.isDirectory()) |
3575 |
05 Nov 15 |
olle |
445 |
{ |
3575 |
05 Nov 15 |
olle |
// Load data from file |
3575 |
05 Nov 15 |
olle |
447 |
java.io.FileReader fileReader = null; |
3575 |
05 Nov 15 |
olle |
448 |
try |
3575 |
05 Nov 15 |
olle |
449 |
{ |
3575 |
05 Nov 15 |
olle |
450 |
fileReader = new java.io.FileReader(caseLabelInfoFile); |
3575 |
05 Nov 15 |
olle |
451 |
java.io.BufferedReader bufferedReader = new java.io.BufferedReader(fileReader); |
4131 |
26 Sep 16 |
olle |
// Read lines until key in first column equals project name |
3575 |
05 Nov 15 |
olle |
453 |
String inline; |
3575 |
05 Nov 15 |
olle |
454 |
while ((inline = bufferedReader.readLine()) != null) |
3575 |
05 Nov 15 |
olle |
455 |
{ |
3575 |
05 Nov 15 |
olle |
456 |
if (inline != null) |
3575 |
05 Nov 15 |
olle |
457 |
{ |
3575 |
05 Nov 15 |
olle |
458 |
String[] columns = inline.split(separator, -1); |
3575 |
05 Nov 15 |
olle |
459 |
if (columns.length > 0) |
3575 |
05 Nov 15 |
olle |
460 |
{ |
3575 |
05 Nov 15 |
olle |
461 |
String key = columns[0]; |
3575 |
05 Nov 15 |
olle |
462 |
if (columns.length > 1) |
3575 |
05 Nov 15 |
olle |
463 |
{ |
3575 |
05 Nov 15 |
olle |
464 |
String value = columns[1]; |
4131 |
26 Sep 16 |
olle |
465 |
projectNameHighestCaseNumHM.put(key, value); |
3575 |
05 Nov 15 |
olle |
466 |
} |
3575 |
05 Nov 15 |
olle |
467 |
} |
3575 |
05 Nov 15 |
olle |
468 |
} |
3575 |
05 Nov 15 |
olle |
469 |
} |
3575 |
05 Nov 15 |
olle |
470 |
fileReader.close(); |
3575 |
05 Nov 15 |
olle |
471 |
} |
3575 |
05 Nov 15 |
olle |
472 |
catch (IOException ex) |
3575 |
05 Nov 15 |
olle |
473 |
{ |
4131 |
26 Sep 16 |
olle |
474 |
System.out.println(new Date() + " LabelGenerationServlet::fetchLabelCaseFileContents(): IOException when trying to get file reader for = \"" + caseLabelInfoFilePath + "\" e: " + ex); |
4131 |
26 Sep 16 |
olle |
475 |
return null; |
3575 |
05 Nov 15 |
olle |
476 |
} |
3575 |
05 Nov 15 |
olle |
477 |
} |
4131 |
26 Sep 16 |
olle |
478 |
return projectNameHighestCaseNumHM; |
3575 |
05 Nov 15 |
olle |
479 |
} |
3575 |
05 Nov 15 |
olle |
480 |
|
4131 |
26 Sep 16 |
olle |
481 |
private void updateLabelCaseCount(String projectName, int endCaseNumber) |
3575 |
05 Nov 15 |
olle |
482 |
{ |
4131 |
26 Sep 16 |
olle |
// Get current contents of highest case label file |
4131 |
26 Sep 16 |
olle |
484 |
HashMap<String,String> projectNameHighestCaseNumHM = fetchLabelCaseFileContents(); |
4131 |
26 Sep 16 |
olle |
485 |
String[] keyArr = null; |
4131 |
26 Sep 16 |
olle |
486 |
if (projectNameHighestCaseNumHM != null) |
4131 |
26 Sep 16 |
olle |
487 |
{ |
4131 |
26 Sep 16 |
olle |
488 |
Set<String> keySet = projectNameHighestCaseNumHM.keySet(); |
4131 |
26 Sep 16 |
olle |
489 |
keyArr = keySet.toArray(new String[keySet.size()]); |
4131 |
26 Sep 16 |
olle |
490 |
} |
3575 |
05 Nov 15 |
olle |
// Place highest case label file in BASE user files directory |
3575 |
05 Nov 15 |
olle |
492 |
String caseLabelInfoFileName = CASE_LABEL_INFO_FILENAME; |
3575 |
05 Nov 15 |
olle |
493 |
java.io.File userFilesDir = Application.getUserFilesDirectory(); |
3575 |
05 Nov 15 |
olle |
494 |
String fileDir = userFilesDir.getAbsolutePath(); |
3575 |
05 Nov 15 |
olle |
495 |
String caseLabelInfoFilePath = fileDir + "/" + caseLabelInfoFileName; |
3575 |
05 Nov 15 |
olle |
496 |
java.io.File caseLabelInfoFile = new java.io.File(caseLabelInfoFilePath); |
4131 |
26 Sep 16 |
olle |
497 |
String separator = "\t"; |
3597 |
12 Nov 15 |
olle |
498 |
if (!caseLabelInfoFile.isDirectory()) |
3575 |
05 Nov 15 |
olle |
499 |
{ |
3575 |
05 Nov 15 |
olle |
// Save new/updated library preparation reagents file |
3575 |
05 Nov 15 |
olle |
501 |
java.io.FileWriter fileWriter = null; |
3575 |
05 Nov 15 |
olle |
502 |
try |
3575 |
05 Nov 15 |
olle |
503 |
{ |
3575 |
05 Nov 15 |
olle |
504 |
fileWriter = new FileWriter(caseLabelInfoFile); |
4131 |
26 Sep 16 |
olle |
505 |
boolean updatedKeyFound = false; |
4131 |
26 Sep 16 |
olle |
506 |
if (keyArr != null) |
4131 |
26 Sep 16 |
olle |
507 |
{ |
4131 |
26 Sep 16 |
olle |
508 |
for (int i = 0; i < keyArr.length; i++) |
4131 |
26 Sep 16 |
olle |
509 |
{ |
4131 |
26 Sep 16 |
olle |
510 |
String key = keyArr[i]; |
4131 |
26 Sep 16 |
olle |
511 |
String valueStr = projectNameHighestCaseNumHM.get(key); |
4131 |
26 Sep 16 |
olle |
512 |
long value = Long.parseLong(valueStr); |
4131 |
26 Sep 16 |
olle |
// If updated project found in list, write new updated value to file |
4131 |
26 Sep 16 |
olle |
514 |
if (projectName.equals(key)) |
4131 |
26 Sep 16 |
olle |
515 |
{ |
4131 |
26 Sep 16 |
olle |
516 |
value = endCaseNumber; |
4131 |
26 Sep 16 |
olle |
517 |
updatedKeyFound = true; |
4131 |
26 Sep 16 |
olle |
518 |
} |
4131 |
26 Sep 16 |
olle |
519 |
String line = key + separator + value; |
4131 |
26 Sep 16 |
olle |
520 |
fileWriter.write(line + "\n"); |
4131 |
26 Sep 16 |
olle |
521 |
} |
4131 |
26 Sep 16 |
olle |
522 |
} |
4131 |
26 Sep 16 |
olle |
// If updated project not found in list, add new entry to file |
4131 |
26 Sep 16 |
olle |
524 |
if (!updatedKeyFound) |
4131 |
26 Sep 16 |
olle |
525 |
{ |
4131 |
26 Sep 16 |
olle |
526 |
String line = projectName + separator + endCaseNumber; |
4131 |
26 Sep 16 |
olle |
527 |
fileWriter.write(line + "\n"); |
4131 |
26 Sep 16 |
olle |
528 |
} |
3575 |
05 Nov 15 |
olle |
529 |
|
3575 |
05 Nov 15 |
olle |
530 |
fileWriter.flush(); |
3575 |
05 Nov 15 |
olle |
531 |
fileWriter.close(); |
3575 |
05 Nov 15 |
olle |
532 |
} |
3575 |
05 Nov 15 |
olle |
533 |
catch(IOException ex) |
3575 |
05 Nov 15 |
olle |
534 |
{ |
3668 |
17 Dec 15 |
olle |
535 |
System.out.println(new Date() + " LabelGenerationServlet::updateLabelCaseCount(): IOException when trying to get file writer for caseLabelInfoFilePath = " + caseLabelInfoFilePath); |
3575 |
05 Nov 15 |
olle |
536 |
return; |
3575 |
05 Nov 15 |
olle |
537 |
} |
3575 |
05 Nov 15 |
olle |
538 |
} |
3575 |
05 Nov 15 |
olle |
539 |
} |
5264 |
24 Jan 19 |
olle |
540 |
|
5264 |
24 Jan 19 |
olle |
541 |
private String nextItemIdDigits(String itemIdDigits) |
5264 |
24 Jan 19 |
olle |
542 |
{ |
5264 |
24 Jan 19 |
olle |
543 |
String nextItemIdDigits = nextItemIdDigits(itemIdDigits, 1); |
5264 |
24 Jan 19 |
olle |
544 |
return nextItemIdDigits; |
5264 |
24 Jan 19 |
olle |
545 |
} |
5264 |
24 Jan 19 |
olle |
546 |
|
5264 |
24 Jan 19 |
olle |
547 |
/** |
5264 |
24 Jan 19 |
olle |
* Increments an input item id with or without site prefix |
5264 |
24 Jan 19 |
olle |
* a given increment. |
5264 |
24 Jan 19 |
olle |
550 |
* |
5264 |
24 Jan 19 |
olle |
* @param itemIdDigits String The item id with or without site prefix. |
5264 |
24 Jan 19 |
olle |
* @param incr Integer Increment of item id. |
5264 |
24 Jan 19 |
olle |
* @return String The item id with given increment. |
5264 |
24 Jan 19 |
olle |
554 |
*/ |
5264 |
24 Jan 19 |
olle |
555 |
private String nextItemIdDigits(String itemIdDigits, Integer incr) |
5264 |
24 Jan 19 |
olle |
556 |
{ |
5264 |
24 Jan 19 |
olle |
557 |
String nextItemIdDigits = null; |
5264 |
24 Jan 19 |
olle |
558 |
String sitePrefix = ""; |
5264 |
24 Jan 19 |
olle |
559 |
String itemIdDigitsPure = ""; |
5264 |
24 Jan 19 |
olle |
560 |
if (itemIdDigits != null) |
5264 |
24 Jan 19 |
olle |
561 |
{ |
5264 |
24 Jan 19 |
olle |
562 |
if (itemIdDigits.length() > 6) |
5264 |
24 Jan 19 |
olle |
563 |
{ |
5264 |
24 Jan 19 |
olle |
564 |
sitePrefix = itemIdDigits.substring(0,sitePrefixLength); |
5264 |
24 Jan 19 |
olle |
565 |
itemIdDigitsPure = itemIdDigits.substring(sitePrefixLength); |
5264 |
24 Jan 19 |
olle |
566 |
} |
5264 |
24 Jan 19 |
olle |
567 |
else if (itemIdDigits.length() > 4) |
5264 |
24 Jan 19 |
olle |
568 |
{ |
5264 |
24 Jan 19 |
olle |
569 |
itemIdDigitsPure = itemIdDigits; |
5264 |
24 Jan 19 |
olle |
570 |
} |
5264 |
24 Jan 19 |
olle |
571 |
String itemIdDigitsSuffix = ""; |
5264 |
24 Jan 19 |
olle |
572 |
if (itemIdDigitsPure.length() > 5) |
5264 |
24 Jan 19 |
olle |
573 |
{ |
5264 |
24 Jan 19 |
olle |
// Extract item ID suffix |
5264 |
24 Jan 19 |
olle |
575 |
itemIdDigitsSuffix = itemIdDigitsPure.substring(itemIdDigitsPure.length() - 1, itemIdDigitsPure.length()); |
5264 |
24 Jan 19 |
olle |
576 |
itemIdDigitsPure = itemIdDigitsPure.substring(0, itemIdDigitsPure.length() - 1); |
5264 |
24 Jan 19 |
olle |
577 |
} |
5264 |
24 Jan 19 |
olle |
// Remove initial zeroes |
5264 |
24 Jan 19 |
olle |
579 |
while (itemIdDigitsPure.indexOf("0") == 0) |
5264 |
24 Jan 19 |
olle |
580 |
{ |
5264 |
24 Jan 19 |
olle |
// Remove initial zero |
5264 |
24 Jan 19 |
olle |
582 |
itemIdDigitsPure = itemIdDigitsPure.substring(1); |
5264 |
24 Jan 19 |
olle |
583 |
} |
5264 |
24 Jan 19 |
olle |
584 |
String nextItemIdDigitsPure = ""; |
5264 |
24 Jan 19 |
olle |
585 |
if (itemIdDigitsPure.length() > 0) |
5264 |
24 Jan 19 |
olle |
586 |
{ |
5264 |
24 Jan 19 |
olle |
587 |
int itemIdDigitsPureInt = Integer.parseInt(itemIdDigitsPure); |
5264 |
24 Jan 19 |
olle |
588 |
int nextItemIdDigitsPureInt = itemIdDigitsPureInt + incr; |
5264 |
24 Jan 19 |
olle |
589 |
nextItemIdDigitsPure = "" + nextItemIdDigitsPureInt; |
5264 |
24 Jan 19 |
olle |
590 |
} |
5264 |
24 Jan 19 |
olle |
// Add initial zeroes |
5264 |
24 Jan 19 |
olle |
592 |
while (nextItemIdDigitsPure.length() < 5) |
5264 |
24 Jan 19 |
olle |
593 |
{ |
5264 |
24 Jan 19 |
olle |
// Add initial zero |
5264 |
24 Jan 19 |
olle |
595 |
nextItemIdDigitsPure = "0" + nextItemIdDigitsPure; |
5264 |
24 Jan 19 |
olle |
596 |
} |
5264 |
24 Jan 19 |
olle |
// Add item ID prefix and optional suffix |
5264 |
24 Jan 19 |
olle |
598 |
nextItemIdDigits = sitePrefix + nextItemIdDigitsPure + itemIdDigitsSuffix; |
5264 |
24 Jan 19 |
olle |
599 |
} |
5264 |
24 Jan 19 |
olle |
600 |
return nextItemIdDigits; |
5264 |
24 Jan 19 |
olle |
601 |
} |
2964 |
20 Nov 14 |
olle |
602 |
} |