1614 |
24 Apr 12 |
nicklas |
1 |
package net.sf.basedb.reggie; |
1614 |
24 Apr 12 |
nicklas |
2 |
|
1641 |
09 May 12 |
nicklas |
3 |
import java.util.Collection; |
1641 |
09 May 12 |
nicklas |
4 |
import java.util.Collections; |
2608 |
28 Aug 14 |
nicklas |
5 |
import java.util.Comparator; |
1614 |
24 Apr 12 |
nicklas |
6 |
import java.util.HashMap; |
1614 |
24 Apr 12 |
nicklas |
7 |
import java.util.Map; |
1614 |
24 Apr 12 |
nicklas |
8 |
|
4002 |
17 Jun 16 |
nicklas |
9 |
import net.sf.basedb.core.Group; |
4002 |
17 Jun 16 |
nicklas |
10 |
import net.sf.basedb.core.Item; |
4002 |
17 Jun 16 |
nicklas |
11 |
import net.sf.basedb.reggie.dao.ReggieRole; |
2894 |
05 Nov 14 |
nicklas |
12 |
import net.sf.basedb.reggie.logo.Logo; |
6277 |
03 Jun 21 |
nicklas |
13 |
import net.sf.basedb.util.MD5; |
2894 |
05 Nov 14 |
nicklas |
14 |
|
1614 |
24 Apr 12 |
nicklas |
15 |
import org.json.simple.JSONObject; |
1614 |
24 Apr 12 |
nicklas |
16 |
|
1614 |
24 Apr 12 |
nicklas |
17 |
/** |
1614 |
24 Apr 12 |
nicklas |
Information about the various sites that are participating. |
1614 |
24 Apr 12 |
nicklas |
@author nicklas |
1614 |
24 Apr 12 |
nicklas |
@since 2.5 |
1614 |
24 Apr 12 |
nicklas |
21 |
*/ |
1614 |
24 Apr 12 |
nicklas |
22 |
public class Site |
4002 |
17 Jun 16 |
nicklas |
23 |
extends ReggieRole<Group> |
1614 |
24 Apr 12 |
nicklas |
24 |
{ |
1614 |
24 Apr 12 |
nicklas |
// Store all sites by prefix |
1614 |
24 Apr 12 |
nicklas |
26 |
private static final Map<String, Site> sites = new HashMap<String, Site>(); |
1614 |
24 Apr 12 |
nicklas |
27 |
|
6610 |
25 Feb 22 |
nicklas |
28 |
public static final Site LUND = new Site("11", "Lund", "2010-11-10", true, true, true, Logo.REGION_SKÅNE); |
6610 |
25 Feb 22 |
nicklas |
29 |
public static final Site HELSINGBORG = new Site("22", "Helsingborg", "2010-11-01", true, true, true, Logo.REGION_SKÅNE); |
6610 |
25 Feb 22 |
nicklas |
30 |
public static final Site HALMSTAD = new Site("33", "Halmstad", "2010-10-01", true, true, true, Logo.REGION_HALLAND); |
6610 |
25 Feb 22 |
nicklas |
31 |
public static final Site KRISTIANSTAD = new Site("44", "Kristianstad", "2010-09-15", true, true, true, Logo.REGION_SKÅNE); |
6610 |
25 Feb 22 |
nicklas |
32 |
public static final Site KARLSKRONA = new Site("55", "Karlskrona", "2010-10-04", true, true, true, Logo.LANDSTINGET_BLEKINGE); |
6610 |
25 Feb 22 |
nicklas |
33 |
public static final Site VÄXJÖ = new Site("66", "Växjö", "2010-10-01", true, true, true, Logo.LANDSTINGET_KRONOBERG); |
6610 |
25 Feb 22 |
nicklas |
34 |
public static final Site MALMÖ = new Site("77", "Malmö", "2010-08-30", true, true, true, Logo.REGION_SKÅNE); |
6610 |
25 Feb 22 |
nicklas |
35 |
public static final Site UPPSALA = new Site("88", "Uppsala", "2013-10-01", true, false, false, Logo.UPPSALA_LANDSTING); |
6610 |
25 Feb 22 |
nicklas |
36 |
public static final Site BORÅS = new Site("91", "Borås", "2021-02-15", true, false, false, Logo.BORÅS); |
6610 |
25 Feb 22 |
nicklas |
37 |
public static final Site JÖNKÖPING = new Site("99", "Jönköping", "2015-06-11", true, false, false, Logo.JÖNKÖPINGS_LÄN); |
6610 |
25 Feb 22 |
nicklas |
38 |
public static final Site UNKNOWN = new Site(null, "Unknown", null, false, false, false, null); |
1623 |
26 Apr 12 |
nicklas |
39 |
|
1614 |
24 Apr 12 |
nicklas |
40 |
/** |
1641 |
09 May 12 |
nicklas |
Get all registered sites. |
1641 |
09 May 12 |
nicklas |
42 |
*/ |
1641 |
09 May 12 |
nicklas |
43 |
public static final Collection<Site> getAllSites() |
1641 |
09 May 12 |
nicklas |
44 |
{ |
1641 |
09 May 12 |
nicklas |
45 |
return Collections.unmodifiableCollection(sites.values()); |
1641 |
09 May 12 |
nicklas |
46 |
} |
1641 |
09 May 12 |
nicklas |
47 |
|
2608 |
28 Aug 14 |
nicklas |
48 |
public static final Comparator<Site> SORT_BY_NAME = new Comparator<Site>() |
2608 |
28 Aug 14 |
nicklas |
49 |
{ |
2608 |
28 Aug 14 |
nicklas |
50 |
@Override |
2608 |
28 Aug 14 |
nicklas |
51 |
public int compare(Site s1, Site s2) |
2608 |
28 Aug 14 |
nicklas |
52 |
{ |
2608 |
28 Aug 14 |
nicklas |
53 |
return s1.getName().compareTo(s2.getName()); |
2608 |
28 Aug 14 |
nicklas |
54 |
} |
2608 |
28 Aug 14 |
nicklas |
55 |
|
2608 |
28 Aug 14 |
nicklas |
56 |
}; |
2608 |
28 Aug 14 |
nicklas |
57 |
|
1641 |
09 May 12 |
nicklas |
58 |
/** |
1614 |
24 Apr 12 |
nicklas |
Find the site the given case name belongs to. Usually, the |
1614 |
24 Apr 12 |
nicklas |
first two characters in the case name is the site prefix. |
1623 |
26 Apr 12 |
nicklas |
If no site with the given prefix is found, {@link #UNKNOWN} is returned. |
1623 |
26 Apr 12 |
nicklas |
@return A Site object or UNKNOWN |
1614 |
24 Apr 12 |
nicklas |
63 |
*/ |
1614 |
24 Apr 12 |
nicklas |
64 |
public static Site findByCaseName(String caseName) |
1614 |
24 Apr 12 |
nicklas |
65 |
{ |
1623 |
26 Apr 12 |
nicklas |
66 |
Site s = sites.get(caseName.substring(0, 2)); |
1623 |
26 Apr 12 |
nicklas |
67 |
return s == null ? UNKNOWN : s; |
1614 |
24 Apr 12 |
nicklas |
68 |
} |
1614 |
24 Apr 12 |
nicklas |
69 |
|
1614 |
24 Apr 12 |
nicklas |
70 |
private final String prefix; |
1614 |
24 Apr 12 |
nicklas |
71 |
private final String name; |
1614 |
24 Apr 12 |
nicklas |
72 |
private final String startDate; |
1614 |
24 Apr 12 |
nicklas |
73 |
private final boolean useCaseSuffix; |
6610 |
25 Feb 22 |
nicklas |
74 |
private final boolean usePlasmaSerum; |
2250 |
25 Feb 14 |
olle |
75 |
private final boolean partOfRCC_syd; |
2894 |
05 Nov 14 |
nicklas |
76 |
private final Logo logo; |
1614 |
24 Apr 12 |
nicklas |
77 |
private JSONObject json; |
1614 |
24 Apr 12 |
nicklas |
78 |
|
6610 |
25 Feb 22 |
nicklas |
79 |
private Site(String prefix, String name, String startDate, boolean useCaseSuffix, boolean partOfRCC_syd, boolean usePlasmaSerum, Logo logo) |
1614 |
24 Apr 12 |
nicklas |
80 |
{ |
4002 |
17 Jun 16 |
nicklas |
81 |
super(name, Item.GROUP, false); |
1614 |
24 Apr 12 |
nicklas |
82 |
this.prefix = prefix; |
1614 |
24 Apr 12 |
nicklas |
83 |
this.name = name; |
1614 |
24 Apr 12 |
nicklas |
84 |
this.startDate = startDate; |
1614 |
24 Apr 12 |
nicklas |
85 |
this.useCaseSuffix = useCaseSuffix; |
6610 |
25 Feb 22 |
nicklas |
86 |
this.usePlasmaSerum = usePlasmaSerum; |
2250 |
25 Feb 14 |
olle |
87 |
this.partOfRCC_syd = partOfRCC_syd; |
2894 |
05 Nov 14 |
nicklas |
88 |
this.logo = logo; |
1623 |
26 Apr 12 |
nicklas |
89 |
if (prefix != null) sites.put(prefix, this); |
1614 |
24 Apr 12 |
nicklas |
90 |
} |
1614 |
24 Apr 12 |
nicklas |
91 |
|
1614 |
24 Apr 12 |
nicklas |
92 |
/** |
1614 |
24 Apr 12 |
nicklas |
Get the prefix for the site. |
1614 |
24 Apr 12 |
nicklas |
94 |
*/ |
1614 |
24 Apr 12 |
nicklas |
95 |
public String getPrefix() |
1614 |
24 Apr 12 |
nicklas |
96 |
{ |
1614 |
24 Apr 12 |
nicklas |
97 |
return prefix; |
1614 |
24 Apr 12 |
nicklas |
98 |
} |
1614 |
24 Apr 12 |
nicklas |
99 |
|
1614 |
24 Apr 12 |
nicklas |
100 |
/** |
1614 |
24 Apr 12 |
nicklas |
Get the full name of the site. |
1614 |
24 Apr 12 |
nicklas |
102 |
*/ |
4002 |
17 Jun 16 |
nicklas |
103 |
@Override |
1614 |
24 Apr 12 |
nicklas |
104 |
public String getName() |
1614 |
24 Apr 12 |
nicklas |
105 |
{ |
1614 |
24 Apr 12 |
nicklas |
106 |
return name; |
1614 |
24 Apr 12 |
nicklas |
107 |
} |
1614 |
24 Apr 12 |
nicklas |
108 |
|
1614 |
24 Apr 12 |
nicklas |
109 |
/** |
1614 |
24 Apr 12 |
nicklas |
Get the date the site joined the project. |
1614 |
24 Apr 12 |
nicklas |
111 |
*/ |
1614 |
24 Apr 12 |
nicklas |
112 |
public String getStartDate() |
1614 |
24 Apr 12 |
nicklas |
113 |
{ |
1614 |
24 Apr 12 |
nicklas |
114 |
return startDate; |
1614 |
24 Apr 12 |
nicklas |
115 |
} |
1614 |
24 Apr 12 |
nicklas |
116 |
|
1614 |
24 Apr 12 |
nicklas |
117 |
/** |
1614 |
24 Apr 12 |
nicklas |
Is this site using a suffix (eg, 'C') in the barcode on pre-neoadjuvant |
1614 |
24 Apr 12 |
nicklas |
referral forms (eg. specimen tubes, blood samples)? |
1614 |
24 Apr 12 |
nicklas |
If no suffix is used it is expected that the site use different |
1614 |
24 Apr 12 |
nicklas |
case numbers for such forms. |
1614 |
24 Apr 12 |
nicklas |
122 |
*/ |
1614 |
24 Apr 12 |
nicklas |
123 |
public boolean useCaseSuffixForPreNeoForms() |
1614 |
24 Apr 12 |
nicklas |
124 |
{ |
1614 |
24 Apr 12 |
nicklas |
125 |
return useCaseSuffix; |
1614 |
24 Apr 12 |
nicklas |
126 |
} |
2250 |
25 Feb 14 |
olle |
127 |
|
2250 |
25 Feb 14 |
olle |
128 |
/** |
2250 |
25 Feb 14 |
olle |
Get flag indicating whether site belongs to "RCC syd" (Regionalt Cancercentrum syd) |
2250 |
25 Feb 14 |
olle |
130 |
*/ |
2250 |
25 Feb 14 |
olle |
131 |
public boolean isPartOfRCC_syd() |
2250 |
25 Feb 14 |
olle |
132 |
{ |
2250 |
25 Feb 14 |
olle |
133 |
return partOfRCC_syd; |
2250 |
25 Feb 14 |
olle |
134 |
} |
1614 |
24 Apr 12 |
nicklas |
135 |
|
1614 |
24 Apr 12 |
nicklas |
136 |
/** |
6610 |
25 Feb 22 |
nicklas |
A flag indicating if the Plasma/Serum checkbox should be selected by default or not. |
6610 |
25 Feb 22 |
nicklas |
@since 4.371.1 |
6610 |
25 Feb 22 |
nicklas |
139 |
*/ |
6610 |
25 Feb 22 |
nicklas |
140 |
public boolean usePlasmaSerum() |
6610 |
25 Feb 22 |
nicklas |
141 |
{ |
6610 |
25 Feb 22 |
nicklas |
142 |
return usePlasmaSerum; |
6610 |
25 Feb 22 |
nicklas |
143 |
} |
6610 |
25 Feb 22 |
nicklas |
144 |
|
6610 |
25 Feb 22 |
nicklas |
145 |
/** |
2894 |
05 Nov 14 |
nicklas |
Get the logo for this site. Even if a Logo object has been defined for this |
2894 |
05 Nov 14 |
nicklas |
site this method may return null if the image file doesn't exists. |
2894 |
05 Nov 14 |
nicklas |
@since 2.18 |
2894 |
05 Nov 14 |
nicklas |
149 |
*/ |
2894 |
05 Nov 14 |
nicklas |
150 |
public Logo getLogo() |
2894 |
05 Nov 14 |
nicklas |
151 |
{ |
2894 |
05 Nov 14 |
nicklas |
152 |
return logo != null && logo.exists() ? logo : null; |
2894 |
05 Nov 14 |
nicklas |
153 |
} |
2894 |
05 Nov 14 |
nicklas |
154 |
|
6277 |
03 Jun 21 |
nicklas |
155 |
/** |
6277 |
03 Jun 21 |
nicklas |
Convert the numeric SCAN-B number, which should be a value |
6277 |
03 Jun 21 |
nicklas |
between 1 and 99,999 to a 7-digit SCAN-B ID with site prefix. |
6277 |
03 Jun 21 |
nicklas |
The UNKNOW site will not add a prefix and returns a 5-digit |
6277 |
03 Jun 21 |
nicklas |
string instead. |
6277 |
03 Jun 21 |
nicklas |
@since 4.31.2 |
6277 |
03 Jun 21 |
nicklas |
161 |
*/ |
6277 |
03 Jun 21 |
nicklas |
162 |
public String toScanbID(int scanbNumber) |
6277 |
03 Jun 21 |
nicklas |
163 |
{ |
6277 |
03 Jun 21 |
nicklas |
164 |
return (prefix==null?"":prefix)+MD5.leftPad(Integer.toString(scanbNumber), '0', 5); |
6277 |
03 Jun 21 |
nicklas |
165 |
} |
2894 |
05 Nov 14 |
nicklas |
166 |
|
6277 |
03 Jun 21 |
nicklas |
167 |
|
2894 |
05 Nov 14 |
nicklas |
168 |
/** |
1614 |
24 Apr 12 |
nicklas |
Get the site information as a JSON object. |
1614 |
24 Apr 12 |
nicklas |
170 |
*/ |
1614 |
24 Apr 12 |
nicklas |
171 |
public JSONObject asJSONObject() |
1614 |
24 Apr 12 |
nicklas |
172 |
{ |
1614 |
24 Apr 12 |
nicklas |
173 |
if (json == null) |
1614 |
24 Apr 12 |
nicklas |
174 |
{ |
1614 |
24 Apr 12 |
nicklas |
175 |
json = new JSONObject(); |
1614 |
24 Apr 12 |
nicklas |
176 |
json.put("prefix", getPrefix()); |
1614 |
24 Apr 12 |
nicklas |
177 |
json.put("name", getName()); |
1614 |
24 Apr 12 |
nicklas |
178 |
json.put("startDate", getStartDate()); |
6610 |
25 Feb 22 |
nicklas |
179 |
json.put("usePlasmaSerum", usePlasmaSerum()); |
6610 |
25 Feb 22 |
nicklas |
180 |
json.put("useCaseSuffixForPreNeoForms", useCaseSuffixForPreNeoForms()); |
6610 |
25 Feb 22 |
nicklas |
181 |
json.put("isRCCSyd", isPartOfRCC_syd()); |
1614 |
24 Apr 12 |
nicklas |
182 |
} |
1614 |
24 Apr 12 |
nicklas |
183 |
return json; |
1614 |
24 Apr 12 |
nicklas |
184 |
} |
1614 |
24 Apr 12 |
nicklas |
185 |
} |