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

Code
Comments
Other
Rev Date Author Line
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 86         // 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 171           // 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 176             // 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 196           // 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 199           // 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 272         // 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 }