4014 |
06 Jul 16 |
olle |
1 |
package net.sf.basedb.reggie.servlet; |
4014 |
06 Jul 16 |
olle |
2 |
|
4014 |
06 Jul 16 |
olle |
3 |
import java.io.BufferedReader; |
4014 |
06 Jul 16 |
olle |
4 |
import java.io.IOException; |
4014 |
06 Jul 16 |
olle |
5 |
import java.io.InputStream; |
4014 |
06 Jul 16 |
olle |
6 |
import java.io.InputStreamReader; |
4014 |
06 Jul 16 |
olle |
7 |
import java.io.OutputStream; |
4019 |
08 Jul 16 |
olle |
8 |
import java.io.OutputStreamWriter; |
6277 |
03 Jun 21 |
nicklas |
9 |
import java.io.Writer; |
6277 |
03 Jun 21 |
nicklas |
10 |
import java.nio.charset.StandardCharsets; |
4014 |
06 Jul 16 |
olle |
11 |
import java.util.ArrayList; |
6277 |
03 Jun 21 |
nicklas |
12 |
import java.util.Collections; |
4014 |
06 Jul 16 |
olle |
13 |
import java.util.Date; |
4014 |
06 Jul 16 |
olle |
14 |
import java.util.List; |
4014 |
06 Jul 16 |
olle |
15 |
|
4014 |
06 Jul 16 |
olle |
16 |
import javax.servlet.ServletException; |
4014 |
06 Jul 16 |
olle |
17 |
import javax.servlet.http.HttpServlet; |
4014 |
06 Jul 16 |
olle |
18 |
import javax.servlet.http.HttpServletRequest; |
4014 |
06 Jul 16 |
olle |
19 |
import javax.servlet.http.HttpServletResponse; |
4014 |
06 Jul 16 |
olle |
20 |
|
4014 |
06 Jul 16 |
olle |
21 |
import org.json.simple.JSONArray; |
4014 |
06 Jul 16 |
olle |
22 |
import org.json.simple.JSONObject; |
4014 |
06 Jul 16 |
olle |
23 |
|
6277 |
03 Jun 21 |
nicklas |
24 |
import net.sf.basedb.core.ClientDefaultSetting; |
4014 |
06 Jul 16 |
olle |
25 |
import net.sf.basedb.core.DbControl; |
4018 |
07 Jul 16 |
olle |
26 |
import net.sf.basedb.core.File; |
4018 |
07 Jul 16 |
olle |
27 |
import net.sf.basedb.core.Path; |
4014 |
06 Jul 16 |
olle |
28 |
import net.sf.basedb.core.SessionControl; |
4014 |
06 Jul 16 |
olle |
29 |
import net.sf.basedb.reggie.JsonUtil; |
4014 |
06 Jul 16 |
olle |
30 |
import net.sf.basedb.reggie.Reggie; |
6277 |
03 Jun 21 |
nicklas |
31 |
import net.sf.basedb.reggie.Site; |
6277 |
03 Jun 21 |
nicklas |
32 |
import net.sf.basedb.reggie.dao.ClientApp; |
4014 |
06 Jul 16 |
olle |
33 |
import net.sf.basedb.reggie.dao.ReggieRole; |
6277 |
03 Jun 21 |
nicklas |
34 |
import net.sf.basedb.util.FileUtil; |
4014 |
06 Jul 16 |
olle |
35 |
import net.sf.basedb.util.Values; |
4014 |
06 Jul 16 |
olle |
36 |
import net.sf.basedb.util.error.ThrowableUtil; |
4014 |
06 Jul 16 |
olle |
37 |
|
4014 |
06 Jul 16 |
olle |
38 |
|
4014 |
06 Jul 16 |
olle |
39 |
public class ReferralGeneratorServlet |
4014 |
06 Jul 16 |
olle |
40 |
extends HttpServlet |
4014 |
06 Jul 16 |
olle |
41 |
{ |
4088 |
08 Sep 16 |
olle |
42 |
|
6277 |
03 Jun 21 |
nicklas |
43 |
private static final long serialVersionUID = -5473785391656131849L; |
4014 |
06 Jul 16 |
olle |
44 |
|
4014 |
06 Jul 16 |
olle |
45 |
public ReferralGeneratorServlet() |
4014 |
06 Jul 16 |
olle |
46 |
{} |
4014 |
06 Jul 16 |
olle |
47 |
|
6277 |
03 Jun 21 |
nicklas |
48 |
@SuppressWarnings("unused") |
4014 |
06 Jul 16 |
olle |
49 |
@Override |
4014 |
06 Jul 16 |
olle |
50 |
protected void doGet(HttpServletRequest req, HttpServletResponse resp) |
4014 |
06 Jul 16 |
olle |
51 |
throws ServletException, IOException |
4014 |
06 Jul 16 |
olle |
52 |
{ |
4014 |
06 Jul 16 |
olle |
53 |
String cmd = req.getParameter("cmd"); |
4014 |
06 Jul 16 |
olle |
54 |
JsonUtil.setJsonResponseHeaders(resp); |
4014 |
06 Jul 16 |
olle |
55 |
|
4014 |
06 Jul 16 |
olle |
56 |
JSONObject json = new JSONObject(); |
4014 |
06 Jul 16 |
olle |
57 |
json.put("status", "ok"); |
4014 |
06 Jul 16 |
olle |
58 |
|
4014 |
06 Jul 16 |
olle |
59 |
JSONArray jsonMessages = new JSONArray(); |
4014 |
06 Jul 16 |
olle |
60 |
|
4014 |
06 Jul 16 |
olle |
61 |
final SessionControl sc = Reggie.getSessionControl(req); |
4014 |
06 Jul 16 |
olle |
62 |
DbControl dc = null; |
4014 |
06 Jul 16 |
olle |
63 |
String progressId = ""; |
4014 |
06 Jul 16 |
olle |
64 |
try |
4014 |
06 Jul 16 |
olle |
65 |
{ |
6277 |
03 Jun 21 |
nicklas |
66 |
if ("GetSitesAndStartNumber".equals(cmd)) |
4014 |
06 Jul 16 |
olle |
67 |
{ |
6329 |
14 Jun 21 |
nicklas |
68 |
dc = sc.newDbControl(":Referral ID generator"); |
6277 |
03 Jun 21 |
nicklas |
69 |
|
6277 |
03 Jun 21 |
nicklas |
70 |
List<Site> sites = new ArrayList<>(Site.getAllSites()); |
6277 |
03 Jun 21 |
nicklas |
71 |
Collections.sort(sites, Site.SORT_BY_NAME); |
6277 |
03 Jun 21 |
nicklas |
72 |
JSONArray jsonSites = new JSONArray(); |
6277 |
03 Jun 21 |
nicklas |
73 |
for (Site s : sites) |
4080 |
06 Sep 16 |
olle |
74 |
{ |
6277 |
03 Jun 21 |
nicklas |
75 |
JSONObject jsonSite = new JSONObject(s.asJSONObject()); |
6277 |
03 Jun 21 |
nicklas |
76 |
jsonSites.add(jsonSite); |
4080 |
06 Sep 16 |
olle |
77 |
} |
6277 |
03 Jun 21 |
nicklas |
78 |
json.put("sites", jsonSites); |
6277 |
03 Jun 21 |
nicklas |
79 |
|
6277 |
03 Jun 21 |
nicklas |
80 |
ClientDefaultSetting lastReferralID = ClientApp.REGGIE.getSetting(dc, "last-referral-id", false); |
6277 |
03 Jun 21 |
nicklas |
81 |
if (lastReferralID != null) json.put("lastReferralID", lastReferralID.getValue()); |
4080 |
06 Sep 16 |
olle |
82 |
|
6277 |
03 Jun 21 |
nicklas |
83 |
ClientDefaultSetting lastReferralNumKits = ClientApp.REGGIE.getSetting(dc, "last-referral-num-kits", false); |
6277 |
03 Jun 21 |
nicklas |
84 |
if (lastReferralNumKits != null) json.put("lastNumKits", lastReferralNumKits.getValue()); |
6061 |
18 Nov 20 |
nicklas |
85 |
|
6277 |
03 Jun 21 |
nicklas |
// Check if log file exists |
6277 |
03 Jun 21 |
nicklas |
87 |
Path logPath = new Path(Reggie.REFERRAL_LOGS_DIR+"/referral-id-generator.log", Path.Type.FILE); |
6277 |
03 Jun 21 |
nicklas |
88 |
File log = File.getByPath(dc, logPath, true); |
6277 |
03 Jun 21 |
nicklas |
89 |
if (log.isInDatabase()) |
4014 |
06 Jul 16 |
olle |
90 |
{ |
6277 |
03 Jun 21 |
nicklas |
91 |
json.put("logFile", log.getId()); |
4014 |
06 Jul 16 |
olle |
92 |
} |
4014 |
06 Jul 16 |
olle |
93 |
} |
4014 |
06 Jul 16 |
olle |
94 |
} |
4014 |
06 Jul 16 |
olle |
95 |
catch (Throwable t) |
4014 |
06 Jul 16 |
olle |
96 |
{ |
4014 |
06 Jul 16 |
olle |
97 |
t.printStackTrace(); |
4014 |
06 Jul 16 |
olle |
98 |
if (json != null) |
4014 |
06 Jul 16 |
olle |
99 |
{ |
4014 |
06 Jul 16 |
olle |
100 |
json.clear(); |
4014 |
06 Jul 16 |
olle |
101 |
json.put("status", "error"); |
4014 |
06 Jul 16 |
olle |
102 |
json.put("message", t.getMessage()); |
4014 |
06 Jul 16 |
olle |
103 |
json.put("stacktrace", ThrowableUtil.stackTraceToString(t)); |
4014 |
06 Jul 16 |
olle |
104 |
} |
6277 |
03 Jun 21 |
nicklas |
105 |
else |
6277 |
03 Jun 21 |
nicklas |
106 |
{ |
6277 |
03 Jun 21 |
nicklas |
107 |
resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, t.getClass().getName() + ": " + t.getMessage()); |
6277 |
03 Jun 21 |
nicklas |
108 |
} |
4014 |
06 Jul 16 |
olle |
109 |
} |
4014 |
06 Jul 16 |
olle |
110 |
finally |
4014 |
06 Jul 16 |
olle |
111 |
{ |
4014 |
06 Jul 16 |
olle |
112 |
if (dc != null) dc.close(); |
4014 |
06 Jul 16 |
olle |
113 |
if (json != null) |
4014 |
06 Jul 16 |
olle |
114 |
{ |
6063 |
18 Nov 20 |
nicklas |
115 |
json.put("messages", jsonMessages); |
4014 |
06 Jul 16 |
olle |
116 |
json.writeJSONString(resp.getWriter()); |
4014 |
06 Jul 16 |
olle |
117 |
} |
4014 |
06 Jul 16 |
olle |
118 |
} |
4014 |
06 Jul 16 |
olle |
119 |
|
4014 |
06 Jul 16 |
olle |
120 |
} |
4014 |
06 Jul 16 |
olle |
121 |
|
4088 |
08 Sep 16 |
olle |
122 |
|
6277 |
03 Jun 21 |
nicklas |
123 |
@Override |
6277 |
03 Jun 21 |
nicklas |
124 |
protected void doPost(HttpServletRequest req, HttpServletResponse resp) |
6277 |
03 Jun 21 |
nicklas |
125 |
throws ServletException, IOException |
4014 |
06 Jul 16 |
olle |
126 |
{ |
6277 |
03 Jun 21 |
nicklas |
127 |
String cmd = req.getParameter("cmd"); |
6277 |
03 Jun 21 |
nicklas |
128 |
JsonUtil.setJsonResponseHeaders(resp); |
6277 |
03 Jun 21 |
nicklas |
129 |
|
6277 |
03 Jun 21 |
nicklas |
130 |
JSONObject json = new JSONObject(); |
6277 |
03 Jun 21 |
nicklas |
131 |
json.put("status", "ok"); |
6277 |
03 Jun 21 |
nicklas |
132 |
|
6277 |
03 Jun 21 |
nicklas |
133 |
JSONArray jsonMessages = new JSONArray(); |
6277 |
03 Jun 21 |
nicklas |
134 |
|
6277 |
03 Jun 21 |
nicklas |
135 |
final SessionControl sc = Reggie.getSessionControl(req); |
6277 |
03 Jun 21 |
nicklas |
136 |
DbControl dc = null; |
4014 |
06 Jul 16 |
olle |
137 |
try |
4014 |
06 Jul 16 |
olle |
138 |
{ |
6277 |
03 Jun 21 |
nicklas |
139 |
if ("ExportToBD47".equals(cmd)) |
4014 |
06 Jul 16 |
olle |
140 |
{ |
6329 |
14 Jun 21 |
nicklas |
141 |
dc = sc.newDbControl(":Referral ID generator"); |
6277 |
03 Jun 21 |
nicklas |
142 |
ReggieRole.checkPermission(dc, "'" + cmd + "' wizard", ReggieRole.PATIENT_CURATOR, ReggieRole.ADMINISTRATOR); |
6277 |
03 Jun 21 |
nicklas |
143 |
|
6277 |
03 Jun 21 |
nicklas |
144 |
boolean preview = Values.getBoolean(req.getParameter("preview")); |
6277 |
03 Jun 21 |
nicklas |
145 |
|
6277 |
03 Jun 21 |
nicklas |
146 |
JSONObject jsonReq = JsonUtil.parseRequest(req); |
6277 |
03 Jun 21 |
nicklas |
147 |
|
6277 |
03 Jun 21 |
nicklas |
148 |
Site site = Site.findByCaseName((String)jsonReq.get("site")); |
6277 |
03 Jun 21 |
nicklas |
149 |
String kitType = Values.getString((String)jsonReq.get("kitType"), "standard"); |
6277 |
03 Jun 21 |
nicklas |
150 |
int startNumber = ((Number)jsonReq.get("startNumber")).intValue(); |
6277 |
03 Jun 21 |
nicklas |
151 |
int numKits = Math.max(1, Math.min(100, ((Number)jsonReq.get("numKits")).intValue())); |
6277 |
03 Jun 21 |
nicklas |
152 |
|
6277 |
03 Jun 21 |
nicklas |
153 |
StringBuilder csv = new StringBuilder(); |
6277 |
03 Jun 21 |
nicklas |
154 |
String sep = ";"; |
6277 |
03 Jun 21 |
nicklas |
155 |
csv.append("RemissID"+sep+"Remisstyp"+sep+"Remissmottagare\n"); |
6277 |
03 Jun 21 |
nicklas |
156 |
RefType[] refs = getRefTypes(site, kitType); |
6277 |
03 Jun 21 |
nicklas |
157 |
for (int kitNo = 0; kitNo < numKits; kitNo++) |
4015 |
06 Jul 16 |
olle |
158 |
{ |
6277 |
03 Jun 21 |
nicklas |
159 |
for (RefType rt : refs) |
6277 |
03 Jun 21 |
nicklas |
160 |
{ |
6277 |
03 Jun 21 |
nicklas |
161 |
csv.append(rt.getRow(startNumber+kitNo, site, sep)+"\n"); |
6277 |
03 Jun 21 |
nicklas |
162 |
} |
4015 |
06 Jul 16 |
olle |
163 |
} |
6277 |
03 Jun 21 |
nicklas |
164 |
|
6277 |
03 Jun 21 |
nicklas |
165 |
if (preview) |
6277 |
03 Jun 21 |
nicklas |
166 |
{ |
6277 |
03 Jun 21 |
nicklas |
167 |
json.put("csv", csv.toString()); |
6277 |
03 Jun 21 |
nicklas |
168 |
} |
6277 |
03 Jun 21 |
nicklas |
169 |
else |
6277 |
03 Jun 21 |
nicklas |
170 |
{ |
6277 |
03 Jun 21 |
nicklas |
// Save BD47 file |
6277 |
03 Jun 21 |
nicklas |
172 |
int fileIndex = 1; |
6277 |
03 Jun 21 |
nicklas |
173 |
File bd47 = null; |
6277 |
03 Jun 21 |
nicklas |
174 |
while (true) |
6277 |
03 Jun 21 |
nicklas |
175 |
{ |
6277 |
03 Jun 21 |
nicklas |
// Try to generate a file until we find a non-existing one |
6277 |
03 Jun 21 |
nicklas |
177 |
String filename = Path.makeSafeFilename(Reggie.CONVERTER_DATE_TO_STRING_WITH_SEPARATOR.convert(new Date())+ |
6277 |
03 Jun 21 |
nicklas |
178 |
"_"+site.getName()+"_"+kitType+(fileIndex==1?"":"."+fileIndex)+".csv", ""); |
6277 |
03 Jun 21 |
nicklas |
179 |
Path p = new Path(Reggie.REFERRAL_LOGS_DIR+"/"+filename, Path.Type.FILE); |
6277 |
03 Jun 21 |
nicklas |
180 |
bd47 = File.getByPath(dc, p, true); |
6277 |
03 Jun 21 |
nicklas |
181 |
if (!bd47.isInDatabase()) break; |
6277 |
03 Jun 21 |
nicklas |
182 |
fileIndex++; |
6277 |
03 Jun 21 |
nicklas |
183 |
} |
6277 |
03 Jun 21 |
nicklas |
184 |
bd47.setCharacterSet("UTF-8"); |
6277 |
03 Jun 21 |
nicklas |
185 |
bd47.setMimeType("text/plain"); |
6277 |
03 Jun 21 |
nicklas |
186 |
dc.saveItem(bd47); |
6277 |
03 Jun 21 |
nicklas |
187 |
|
6277 |
03 Jun 21 |
nicklas |
188 |
OutputStream out = bd47.getUploadStream(false); |
6277 |
03 Jun 21 |
nicklas |
189 |
Writer writer = new OutputStreamWriter(out); |
6277 |
03 Jun 21 |
nicklas |
190 |
writer.write(csv.toString()); |
6277 |
03 Jun 21 |
nicklas |
191 |
writer.flush(); |
6277 |
03 Jun 21 |
nicklas |
192 |
out.flush(); |
6277 |
03 Jun 21 |
nicklas |
193 |
FileUtil.close(writer); |
6277 |
03 Jun 21 |
nicklas |
194 |
FileUtil.close(out); |
6277 |
03 Jun 21 |
nicklas |
195 |
|
6277 |
03 Jun 21 |
nicklas |
// Append to log file |
6277 |
03 Jun 21 |
nicklas |
197 |
File log = appendToLogFile(dc, site, kitType, startNumber, numKits, bd47.getName()); |
6277 |
03 Jun 21 |
nicklas |
198 |
|
6277 |
03 Jun 21 |
nicklas |
// Save recent settings |
6277 |
03 Jun 21 |
nicklas |
200 |
ClientDefaultSetting lastReferralID = ClientApp.REGGIE.getSetting(dc, "last-referral-id", true); |
6277 |
03 Jun 21 |
nicklas |
201 |
lastReferralID.setValue(Site.UNKNOWN.toScanbID(startNumber+numKits)); |
6277 |
03 Jun 21 |
nicklas |
202 |
ClientDefaultSetting lastNumKits = ClientApp.REGGIE.getSetting(dc, "last-referral-num-kits", true); |
6277 |
03 Jun 21 |
nicklas |
203 |
lastNumKits.setValue(Integer.toString(numKits)); |
6277 |
03 Jun 21 |
nicklas |
204 |
|
6277 |
03 Jun 21 |
nicklas |
205 |
dc.commit(); |
6277 |
03 Jun 21 |
nicklas |
206 |
|
6277 |
03 Jun 21 |
nicklas |
207 |
jsonMessages.add("Generated "+numKits+" "+kitType+" kits for "+site.getName()); |
6277 |
03 Jun 21 |
nicklas |
208 |
jsonMessages.add("First SCAN-B ID: " + site.toScanbID(startNumber)); |
6277 |
03 Jun 21 |
nicklas |
209 |
jsonMessages.add("Last SCAN-B ID: " + site.toScanbID(startNumber+numKits-1)); |
6277 |
03 Jun 21 |
nicklas |
210 |
|
6277 |
03 Jun 21 |
nicklas |
211 |
json.put("bd47File", bd47.getId()); |
6277 |
03 Jun 21 |
nicklas |
212 |
json.put("bd47Path", bd47.getPath().toString()); |
6277 |
03 Jun 21 |
nicklas |
213 |
json.put("logFile", log.getId()); |
6277 |
03 Jun 21 |
nicklas |
214 |
} |
6277 |
03 Jun 21 |
nicklas |
215 |
|
4014 |
06 Jul 16 |
olle |
216 |
} |
6277 |
03 Jun 21 |
nicklas |
217 |
json.put("messages", jsonMessages); |
4014 |
06 Jul 16 |
olle |
218 |
} |
6277 |
03 Jun 21 |
nicklas |
219 |
catch (Throwable t) |
4065 |
31 Aug 16 |
olle |
220 |
{ |
6277 |
03 Jun 21 |
nicklas |
221 |
t.printStackTrace(); |
6277 |
03 Jun 21 |
nicklas |
222 |
json.clear(); |
6277 |
03 Jun 21 |
nicklas |
223 |
json.put("status", "error"); |
6277 |
03 Jun 21 |
nicklas |
224 |
json.put("message", t.getMessage()); |
6277 |
03 Jun 21 |
nicklas |
225 |
json.put("stacktrace", ThrowableUtil.stackTraceToString(t)); |
4065 |
31 Aug 16 |
olle |
226 |
} |
6277 |
03 Jun 21 |
nicklas |
227 |
finally |
4065 |
31 Aug 16 |
olle |
228 |
{ |
6277 |
03 Jun 21 |
nicklas |
229 |
if (dc != null) dc.close(); |
6277 |
03 Jun 21 |
nicklas |
230 |
json.writeJSONString(resp.getWriter()); |
4065 |
31 Aug 16 |
olle |
231 |
} |
6277 |
03 Jun 21 |
nicklas |
232 |
|
4065 |
31 Aug 16 |
olle |
233 |
} |
6277 |
03 Jun 21 |
nicklas |
234 |
|
6277 |
03 Jun 21 |
nicklas |
235 |
private File appendToLogFile(DbControl dc, Site site, String kitType, int startNumber, int numKits, String fileName) |
6277 |
03 Jun 21 |
nicklas |
236 |
throws IOException |
4014 |
06 Jul 16 |
olle |
237 |
{ |
6277 |
03 Jun 21 |
nicklas |
238 |
Path logPath = new Path(Reggie.REFERRAL_LOGS_DIR+"/referral-id-generator.log", Path.Type.FILE); |
6277 |
03 Jun 21 |
nicklas |
239 |
File log = File.getByPath(dc, logPath, true); |
6277 |
03 Jun 21 |
nicklas |
240 |
InputStream in = null; |
6277 |
03 Jun 21 |
nicklas |
241 |
OutputStream out = null; |
6277 |
03 Jun 21 |
nicklas |
242 |
int[] colSizes = { 20, 10, 10, 15, 15, 10, -1 }; |
6277 |
03 Jun 21 |
nicklas |
243 |
try |
4014 |
06 Jul 16 |
olle |
244 |
{ |
6277 |
03 Jun 21 |
nicklas |
245 |
if (!log.isInDatabase()) |
4014 |
06 Jul 16 |
olle |
246 |
{ |
6277 |
03 Jun 21 |
nicklas |
247 |
log.setDescription("Log file for the Referral ID generator wizard"); |
6277 |
03 Jun 21 |
nicklas |
248 |
log.setCharacterSet("UTF-8"); |
6277 |
03 Jun 21 |
nicklas |
249 |
log.setMimeType("text/plain"); |
6277 |
03 Jun 21 |
nicklas |
250 |
dc.saveItem(log); |
4014 |
06 Jul 16 |
olle |
251 |
} |
6277 |
03 Jun 21 |
nicklas |
252 |
else |
4080 |
06 Sep 16 |
olle |
253 |
{ |
6277 |
03 Jun 21 |
nicklas |
254 |
in = log.getDownloadStream(0); |
4080 |
06 Sep 16 |
olle |
255 |
} |
6277 |
03 Jun 21 |
nicklas |
256 |
|
6277 |
03 Jun 21 |
nicklas |
257 |
out = log.getUploadStream(false); |
6277 |
03 Jun 21 |
nicklas |
258 |
|
6277 |
03 Jun 21 |
nicklas |
259 |
Writer writer = new OutputStreamWriter(out, StandardCharsets.UTF_8); |
6277 |
03 Jun 21 |
nicklas |
260 |
String[] header = new String[] { "DateAndTime", "Start", "End", "Site", "KitType", "NumKits", "FileName" }; |
6277 |
03 Jun 21 |
nicklas |
261 |
writeRow(writer, header, colSizes); |
6277 |
03 Jun 21 |
nicklas |
262 |
|
6277 |
03 Jun 21 |
nicklas |
263 |
String[] row = new String[] { |
6277 |
03 Jun 21 |
nicklas |
264 |
Reggie.CONVERTER_DATETIME_TO_STRING_WITH_SEPARATOR.convert(new Date()), |
6277 |
03 Jun 21 |
nicklas |
265 |
site.toScanbID(startNumber), site.toScanbID(startNumber+numKits-1), |
6277 |
03 Jun 21 |
nicklas |
266 |
site.getName(), kitType, Integer.toString(numKits), fileName |
6277 |
03 Jun 21 |
nicklas |
267 |
}; |
6277 |
03 Jun 21 |
nicklas |
268 |
writeRow(writer, row, colSizes); |
6277 |
03 Jun 21 |
nicklas |
269 |
|
6277 |
03 Jun 21 |
nicklas |
270 |
if (in != null) |
4018 |
07 Jul 16 |
olle |
271 |
{ |
6277 |
03 Jun 21 |
nicklas |
// Copy rest of original file except the header line |
6277 |
03 Jun 21 |
nicklas |
273 |
BufferedReader reader = new BufferedReader(new InputStreamReader(in, StandardCharsets.UTF_8)); |
6277 |
03 Jun 21 |
nicklas |
274 |
reader.readLine(); |
6277 |
03 Jun 21 |
nicklas |
275 |
FileUtil.copy(reader, writer); |
4018 |
07 Jul 16 |
olle |
276 |
} |
6277 |
03 Jun 21 |
nicklas |
277 |
|
6277 |
03 Jun 21 |
nicklas |
278 |
writer.flush(); |
6277 |
03 Jun 21 |
nicklas |
279 |
out.flush(); |
4018 |
07 Jul 16 |
olle |
280 |
} |
6277 |
03 Jun 21 |
nicklas |
281 |
finally |
4057 |
23 Aug 16 |
olle |
282 |
{ |
6277 |
03 Jun 21 |
nicklas |
283 |
FileUtil.close(out); |
6277 |
03 Jun 21 |
nicklas |
284 |
FileUtil.close(in); |
4057 |
23 Aug 16 |
olle |
285 |
} |
6277 |
03 Jun 21 |
nicklas |
286 |
return log; |
4057 |
23 Aug 16 |
olle |
287 |
} |
4057 |
23 Aug 16 |
olle |
288 |
|
6277 |
03 Jun 21 |
nicklas |
289 |
private void writeRow(Writer writer, String[] row, int[] colSizes) |
6277 |
03 Jun 21 |
nicklas |
290 |
throws IOException |
4057 |
23 Aug 16 |
olle |
291 |
{ |
6277 |
03 Jun 21 |
nicklas |
292 |
StringBuilder sb = new StringBuilder(row[0]); |
6277 |
03 Jun 21 |
nicklas |
293 |
int col = colSizes[0]; |
6277 |
03 Jun 21 |
nicklas |
294 |
for (int i = 1; i < row.length; i++) |
4057 |
23 Aug 16 |
olle |
295 |
{ |
6277 |
03 Jun 21 |
nicklas |
296 |
int padding = col-sb.length(); |
6277 |
03 Jun 21 |
nicklas |
297 |
sb.append(" ".repeat(Math.max(1, padding))); |
6277 |
03 Jun 21 |
nicklas |
298 |
sb.append(row[i]); |
6277 |
03 Jun 21 |
nicklas |
299 |
col += colSizes[i]; |
4057 |
23 Aug 16 |
olle |
300 |
} |
6277 |
03 Jun 21 |
nicklas |
301 |
writer.write(sb.toString()); |
6277 |
03 Jun 21 |
nicklas |
302 |
writer.write('\n'); |
6277 |
03 Jun 21 |
nicklas |
303 |
} |
6277 |
03 Jun 21 |
nicklas |
304 |
|
6277 |
03 Jun 21 |
nicklas |
305 |
private RefType[] getRefTypes(Site s, String kitType) |
6277 |
03 Jun 21 |
nicklas |
306 |
{ |
6771 |
10 Jun 22 |
nicklas |
307 |
boolean isNeo = "neoadjuvant".equals(kitType); |
6771 |
10 Jun 22 |
nicklas |
308 |
RefType[] refTypes = null; |
6277 |
03 Jun 21 |
nicklas |
309 |
if (s == Site.HALMSTAD) |
4057 |
23 Aug 16 |
olle |
310 |
{ |
6771 |
10 Jun 22 |
nicklas |
311 |
refTypes = isNeo ? RefType.HALMSTAD_NEO : RefType.HALMSTAD_STANDARD; |
4057 |
23 Aug 16 |
olle |
312 |
} |
6354 |
19 Aug 21 |
nicklas |
313 |
else if (s == Site.JÖNKÖPING || s == Site.BORÅS) |
4019 |
08 Jul 16 |
olle |
314 |
{ |
6771 |
10 Jun 22 |
nicklas |
315 |
refTypes = isNeo ? RefType.BORÅS_JÖNKÖPING_NEO : RefType.BORÅS_JÖNKÖPING_STANDARD; |
4019 |
08 Jul 16 |
olle |
316 |
} |
6277 |
03 Jun 21 |
nicklas |
317 |
else |
4019 |
08 Jul 16 |
olle |
318 |
{ |
6771 |
10 Jun 22 |
nicklas |
319 |
refTypes = isNeo ? RefType.DEFAULT_NEO : RefType.DEFAULT_STANDARD; |
4019 |
08 Jul 16 |
olle |
320 |
} |
6277 |
03 Jun 21 |
nicklas |
321 |
return refTypes; |
4019 |
08 Jul 16 |
olle |
322 |
} |
6277 |
03 Jun 21 |
nicklas |
323 |
|
6771 |
10 Jun 22 |
nicklas |
324 |
|
6277 |
03 Jun 21 |
nicklas |
325 |
public static enum RefType |
4039 |
29 Jul 16 |
olle |
326 |
{ |
6277 |
03 Jun 21 |
nicklas |
327 |
KLIN_PAT("SCAN-B KlinPat", "", ""), |
6277 |
03 Jun 21 |
nicklas |
328 |
KLIN_KEM("SCAN-B KlinKem", "K", ""), |
6277 |
03 Jun 21 |
nicklas |
329 |
KLIN_KEM_NEO("SCAN-B KlinKemNeo", "K", "C"), |
6277 |
03 Jun 21 |
nicklas |
330 |
KLIN_KEM_33("SCAN-B KlinKem33", "K", ""), |
6277 |
03 Jun 21 |
nicklas |
331 |
KLIN_KEM_NEO_33("SCAN-B KlinKemNeo33", "K", "C"), |
6277 |
03 Jun 21 |
nicklas |
332 |
KLIN_KEM_99("SCAN-B KlinKem99", "K", ""), |
6277 |
03 Jun 21 |
nicklas |
333 |
KLIN_KEM_NEO_99("SCAN-B KlinKemNeo99", "K", "C"); |
6061 |
18 Nov 20 |
nicklas |
334 |
|
6771 |
10 Jun 22 |
nicklas |
335 |
public static final RefType[] DEFAULT_STANDARD = { KLIN_PAT, KLIN_KEM }; |
6771 |
10 Jun 22 |
nicklas |
336 |
public static final RefType[] DEFAULT_NEO = { KLIN_PAT, KLIN_KEM, KLIN_KEM_NEO }; |
6771 |
10 Jun 22 |
nicklas |
337 |
|
6771 |
10 Jun 22 |
nicklas |
338 |
public static final RefType[] HALMSTAD_STANDARD = { KLIN_PAT, KLIN_KEM_33 }; |
6771 |
10 Jun 22 |
nicklas |
339 |
public static final RefType[] HALMSTAD_NEO = { KLIN_PAT, KLIN_KEM_33, KLIN_KEM_NEO_33 }; |
6771 |
10 Jun 22 |
nicklas |
340 |
|
6771 |
10 Jun 22 |
nicklas |
341 |
public static final RefType[] BORÅS_JÖNKÖPING_STANDARD = { KLIN_KEM_99 }; |
6771 |
10 Jun 22 |
nicklas |
342 |
public static final RefType[] BORÅS_JÖNKÖPING_NEO = { KLIN_KEM_99, KLIN_KEM_NEO_99 }; |
6771 |
10 Jun 22 |
nicklas |
343 |
|
6277 |
03 Jun 21 |
nicklas |
344 |
private final String typeName; |
6277 |
03 Jun 21 |
nicklas |
345 |
private final String prefix; |
6277 |
03 Jun 21 |
nicklas |
346 |
private final String suffix; |
6277 |
03 Jun 21 |
nicklas |
347 |
|
6277 |
03 Jun 21 |
nicklas |
348 |
RefType(String typeName, String prefix, String suffix) |
4014 |
06 Jul 16 |
olle |
349 |
{ |
6277 |
03 Jun 21 |
nicklas |
350 |
this.typeName = typeName; |
6277 |
03 Jun 21 |
nicklas |
351 |
this.prefix = prefix; |
6277 |
03 Jun 21 |
nicklas |
352 |
this.suffix = suffix; |
4014 |
06 Jul 16 |
olle |
353 |
} |
6070 |
20 Nov 20 |
nicklas |
354 |
|
6277 |
03 Jun 21 |
nicklas |
355 |
public String getRow(int scanbNumber, Site s, String sep) |
4068 |
02 Sep 16 |
olle |
356 |
{ |
6277 |
03 Jun 21 |
nicklas |
357 |
return prefix+s.toScanbID(scanbNumber)+suffix + sep + typeName + sep + s.getName(); |
4068 |
02 Sep 16 |
olle |
358 |
} |
4068 |
02 Sep 16 |
olle |
359 |
} |
6277 |
03 Jun 21 |
nicklas |
360 |
|
4014 |
06 Jul 16 |
olle |
361 |
} |