2933 |
14 Nov 14 |
olle |
1 |
package net.sf.basedb.meludi.servlet; |
2933 |
14 Nov 14 |
olle |
2 |
|
2933 |
14 Nov 14 |
olle |
3 |
import java.io.IOException; |
2933 |
14 Nov 14 |
olle |
4 |
import java.net.URI; |
2933 |
14 Nov 14 |
olle |
5 |
import java.util.ArrayList; |
2933 |
14 Nov 14 |
olle |
6 |
import java.util.Arrays; |
2933 |
14 Nov 14 |
olle |
7 |
import java.util.Collections; |
3449 |
28 Jul 15 |
olle |
8 |
import java.util.Date; |
2933 |
14 Nov 14 |
olle |
9 |
import java.util.HashMap; |
2933 |
14 Nov 14 |
olle |
10 |
import java.util.List; |
2933 |
14 Nov 14 |
olle |
11 |
import java.util.Map; |
2933 |
14 Nov 14 |
olle |
12 |
import java.util.Set; |
2933 |
14 Nov 14 |
olle |
13 |
|
2933 |
14 Nov 14 |
olle |
14 |
import javax.servlet.ServletException; |
2933 |
14 Nov 14 |
olle |
15 |
import javax.servlet.http.HttpServlet; |
2933 |
14 Nov 14 |
olle |
16 |
import javax.servlet.http.HttpServletRequest; |
2933 |
14 Nov 14 |
olle |
17 |
import javax.servlet.http.HttpServletResponse; |
2933 |
14 Nov 14 |
olle |
18 |
|
2933 |
14 Nov 14 |
olle |
19 |
import org.json.simple.JSONArray; |
2933 |
14 Nov 14 |
olle |
20 |
import org.json.simple.JSONObject; |
2933 |
14 Nov 14 |
olle |
21 |
|
2933 |
14 Nov 14 |
olle |
22 |
import net.sf.basedb.core.AnnotationType; |
2933 |
14 Nov 14 |
olle |
23 |
import net.sf.basedb.core.AnnotationTypeCategory; |
2933 |
14 Nov 14 |
olle |
24 |
import net.sf.basedb.core.Application; |
2933 |
14 Nov 14 |
olle |
25 |
import net.sf.basedb.core.BasicItem; |
2933 |
14 Nov 14 |
olle |
26 |
import net.sf.basedb.core.BioPlateEventType; |
2933 |
14 Nov 14 |
olle |
27 |
import net.sf.basedb.core.BioPlateType; |
2933 |
14 Nov 14 |
olle |
28 |
import net.sf.basedb.core.DataFileType; |
2933 |
14 Nov 14 |
olle |
29 |
import net.sf.basedb.core.DbControl; |
5271 |
29 Jan 19 |
olle |
30 |
import net.sf.basedb.core.Directory; |
2933 |
14 Nov 14 |
olle |
31 |
import net.sf.basedb.core.Extract; |
2933 |
14 Nov 14 |
olle |
32 |
import net.sf.basedb.core.FileServer; |
2933 |
14 Nov 14 |
olle |
33 |
import net.sf.basedb.core.Group; |
2933 |
14 Nov 14 |
olle |
34 |
import net.sf.basedb.core.Include; |
2933 |
14 Nov 14 |
olle |
35 |
import net.sf.basedb.core.Item; |
2933 |
14 Nov 14 |
olle |
36 |
import net.sf.basedb.core.ItemKey; |
3384 |
10 Jun 15 |
olle |
37 |
import net.sf.basedb.core.ItemList; |
2933 |
14 Nov 14 |
olle |
38 |
import net.sf.basedb.core.ItemNotFoundException; |
2933 |
14 Nov 14 |
olle |
39 |
import net.sf.basedb.core.ItemQuery; |
2933 |
14 Nov 14 |
olle |
40 |
import net.sf.basedb.core.ItemSubtype; |
2933 |
14 Nov 14 |
olle |
41 |
import net.sf.basedb.core.ItemSubtypeFileType; |
2933 |
14 Nov 14 |
olle |
42 |
import net.sf.basedb.core.MimeType; |
2933 |
14 Nov 14 |
olle |
43 |
import net.sf.basedb.core.MultiPermissions; |
2933 |
14 Nov 14 |
olle |
44 |
import net.sf.basedb.core.Nameable; |
5271 |
29 Jan 19 |
olle |
45 |
import net.sf.basedb.core.Path; |
2933 |
14 Nov 14 |
olle |
46 |
import net.sf.basedb.core.Permission; |
2933 |
14 Nov 14 |
olle |
47 |
import net.sf.basedb.core.PlateGeometry; |
2933 |
14 Nov 14 |
olle |
48 |
import net.sf.basedb.core.PluginConfiguration; |
2933 |
14 Nov 14 |
olle |
49 |
import net.sf.basedb.core.PluginDefinition; |
2933 |
14 Nov 14 |
olle |
50 |
import net.sf.basedb.core.Project; |
2933 |
14 Nov 14 |
olle |
51 |
import net.sf.basedb.core.ProjectKey; |
3527 |
05 Oct 15 |
olle |
52 |
import net.sf.basedb.core.Role; |
2933 |
14 Nov 14 |
olle |
53 |
import net.sf.basedb.core.SessionControl; |
2933 |
14 Nov 14 |
olle |
54 |
import net.sf.basedb.core.SharedItem; |
2933 |
14 Nov 14 |
olle |
55 |
import net.sf.basedb.core.SystemItems; |
2933 |
14 Nov 14 |
olle |
56 |
import net.sf.basedb.core.Tag; |
2933 |
14 Nov 14 |
olle |
57 |
import net.sf.basedb.core.Type; |
2933 |
14 Nov 14 |
olle |
58 |
import net.sf.basedb.core.User; |
2933 |
14 Nov 14 |
olle |
59 |
import net.sf.basedb.core.query.Expressions; |
2933 |
14 Nov 14 |
olle |
60 |
import net.sf.basedb.core.query.Hql; |
2933 |
14 Nov 14 |
olle |
61 |
import net.sf.basedb.core.query.Restrictions; |
2933 |
14 Nov 14 |
olle |
62 |
import net.sf.basedb.meludi.JsonUtil; |
2933 |
14 Nov 14 |
olle |
63 |
import net.sf.basedb.meludi.Meludi; |
2933 |
14 Nov 14 |
olle |
64 |
import net.sf.basedb.meludi.Site; |
2933 |
14 Nov 14 |
olle |
65 |
import net.sf.basedb.meludi.dao.Annotationtype; |
2933 |
14 Nov 14 |
olle |
66 |
import net.sf.basedb.meludi.dao.BiomaterialList; |
2933 |
14 Nov 14 |
olle |
67 |
import net.sf.basedb.meludi.dao.BioplateEventtype; |
2933 |
14 Nov 14 |
olle |
68 |
import net.sf.basedb.meludi.dao.BioplateType; |
4773 |
20 Apr 18 |
olle |
69 |
import net.sf.basedb.meludi.dao.Consent; |
2933 |
14 Nov 14 |
olle |
70 |
import net.sf.basedb.meludi.dao.Datafiletype; |
3028 |
11 Dec 14 |
olle |
71 |
import net.sf.basedb.meludi.dao.Dna; |
2933 |
14 Nov 14 |
olle |
72 |
import net.sf.basedb.meludi.dao.Fileserver; |
2933 |
14 Nov 14 |
olle |
73 |
import net.sf.basedb.meludi.dao.Geometry; |
5093 |
14 Nov 18 |
olle |
74 |
import net.sf.basedb.meludi.dao.Histology; |
2933 |
14 Nov 14 |
olle |
75 |
import net.sf.basedb.meludi.dao.Mimetype; |
2933 |
14 Nov 14 |
olle |
76 |
import net.sf.basedb.meludi.dao.ReactionPlate; |
2933 |
14 Nov 14 |
olle |
77 |
import net.sf.basedb.meludi.dao.MeludiRole; |
2933 |
14 Nov 14 |
olle |
78 |
import net.sf.basedb.meludi.dao.Rna; |
2933 |
14 Nov 14 |
olle |
79 |
import net.sf.basedb.meludi.dao.Subtype; |
3101 |
21 Jan 15 |
olle |
80 |
import net.sf.basedb.meludi.counter.CounterService; |
3449 |
28 Jul 15 |
olle |
81 |
import net.sf.basedb.meludi.servlet.InstallServlet.ValueOptions; |
5271 |
29 Jan 19 |
olle |
//import net.sf.basedb.meludi.servlet.Directory; |
5271 |
29 Jan 19 |
olle |
//import net.sf.basedb.meludi.servlet.Path; |
5271 |
29 Jan 19 |
olle |
84 |
import net.sf.basedb.meludi.servlet.InstallServlet.PermissionOptions; |
2933 |
14 Nov 14 |
olle |
85 |
import net.sf.basedb.util.EqualsHelper; |
2933 |
14 Nov 14 |
olle |
86 |
import net.sf.basedb.util.error.ThrowableUtil; |
2933 |
14 Nov 14 |
olle |
87 |
import net.sf.basedb.util.uri.ConnectionManager; |
2933 |
14 Nov 14 |
olle |
88 |
import net.sf.basedb.util.uri.ConnectionManagerFactory; |
2933 |
14 Nov 14 |
olle |
89 |
import net.sf.basedb.util.uri.ConnectionManagerUtil; |
2933 |
14 Nov 14 |
olle |
90 |
import net.sf.basedb.util.uri.ConnectionParameters; |
2933 |
14 Nov 14 |
olle |
91 |
import net.sf.basedb.util.uri.UriMetadata; |
2933 |
14 Nov 14 |
olle |
92 |
|
2933 |
14 Nov 14 |
olle |
93 |
/** |
2933 |
14 Nov 14 |
olle |
Servlet that verify and install items that are required by other Meludi actions. |
2933 |
14 Nov 14 |
olle |
@author nicklas |
2933 |
14 Nov 14 |
olle |
96 |
*/ |
2933 |
14 Nov 14 |
olle |
97 |
public class InstallServlet |
2933 |
14 Nov 14 |
olle |
98 |
extends HttpServlet |
2933 |
14 Nov 14 |
olle |
99 |
{ |
2933 |
14 Nov 14 |
olle |
100 |
|
2933 |
14 Nov 14 |
olle |
101 |
private static final long serialVersionUID = -3216326283682707833L; |
2933 |
14 Nov 14 |
olle |
102 |
|
3058 |
19 Dec 14 |
olle |
103 |
public final static String PROJECTFOCUS_NONE = "none"; |
3058 |
19 Dec 14 |
olle |
104 |
public final static String PROJECTFOCUS_MELANOMA = "melanoma"; |
3058 |
19 Dec 14 |
olle |
105 |
public final static String PROJECTFOCUS_LUNG_CANCER = "lungcancer"; |
3058 |
19 Dec 14 |
olle |
106 |
public final static String PROJECTFOCUS_COLON_CANCER = "coloncancer"; |
3139 |
16 Feb 15 |
olle |
107 |
public final static String PROJECTFOCUS_GIST = "GIST"; |
4196 |
31 Oct 16 |
olle |
108 |
public final static String PROJECTFOCUS_BREAST_CANCER = "breastcancer"; |
3058 |
19 Dec 14 |
olle |
109 |
public final static String PROJECTFOCUS_UNKNOWN = ""; |
3058 |
19 Dec 14 |
olle |
110 |
|
4180 |
27 Oct 16 |
olle |
111 |
public final static String SPECIMENTYPE_PRIMARY_TUMOR = "Primary"; |
4180 |
27 Oct 16 |
olle |
112 |
public final static String SPECIMENTYPE_METASTASIS = "MetastasisDistant"; |
4180 |
27 Oct 16 |
olle |
113 |
public final static String SPECIMENTYPE_UNKNOWN = ""; |
4180 |
27 Oct 16 |
olle |
114 |
|
2933 |
14 Nov 14 |
olle |
115 |
public InstallServlet() |
2933 |
14 Nov 14 |
olle |
116 |
{} |
2933 |
14 Nov 14 |
olle |
117 |
|
2933 |
14 Nov 14 |
olle |
118 |
@SuppressWarnings("unchecked") |
2933 |
14 Nov 14 |
olle |
119 |
@Override |
2933 |
14 Nov 14 |
olle |
120 |
protected void doGet(HttpServletRequest req, HttpServletResponse resp) |
2933 |
14 Nov 14 |
olle |
121 |
throws ServletException, IOException |
2933 |
14 Nov 14 |
olle |
122 |
{ |
2933 |
14 Nov 14 |
olle |
123 |
|
2933 |
14 Nov 14 |
olle |
124 |
String ID = req.getParameter("ID"); |
2933 |
14 Nov 14 |
olle |
125 |
String cmd = req.getParameter("cmd"); |
2933 |
14 Nov 14 |
olle |
126 |
JsonUtil.setJsonResponseHeaders(resp); |
2933 |
14 Nov 14 |
olle |
127 |
|
2933 |
14 Nov 14 |
olle |
128 |
JSONObject json = new JSONObject(); |
2933 |
14 Nov 14 |
olle |
129 |
json.put("status", "ok"); |
2933 |
14 Nov 14 |
olle |
130 |
|
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 |
133 |
final SessionControl sc = Application.getSessionControl(ID, null, req.getRemoteAddr(), true); |
2933 |
14 Nov 14 |
olle |
134 |
DbControl dc = null; |
2933 |
14 Nov 14 |
olle |
135 |
try |
2933 |
14 Nov 14 |
olle |
136 |
{ |
2933 |
14 Nov 14 |
olle |
137 |
if ("Validate".equals(cmd) || "Install".equals(cmd)) |
2933 |
14 Nov 14 |
olle |
138 |
{ |
2933 |
14 Nov 14 |
olle |
139 |
dc = sc.newDbControl(); |
2933 |
14 Nov 14 |
olle |
140 |
boolean createIfMissing = "Install".equals(cmd); |
2933 |
14 Nov 14 |
olle |
141 |
JSONArray jsonChecks = new JSONArray(); |
2933 |
14 Nov 14 |
olle |
142 |
|
2933 |
14 Nov 14 |
olle |
// Project checks |
2933 |
14 Nov 14 |
olle |
144 |
jsonChecks.add(checkActiveProject(dc)); |
2933 |
14 Nov 14 |
olle |
145 |
|
2933 |
14 Nov 14 |
olle |
// Group checks |
2933 |
14 Nov 14 |
olle |
147 |
jsonChecks.add(checkMeludiRole(dc, MeludiRole.PATIENT_CURATOR, createIfMissing)); |
2933 |
14 Nov 14 |
olle |
148 |
|
2933 |
14 Nov 14 |
olle |
// Role checks |
2933 |
14 Nov 14 |
olle |
150 |
jsonChecks.add(checkMeludiRole(dc, MeludiRole.ADMINISTRATOR, createIfMissing)); |
2933 |
14 Nov 14 |
olle |
151 |
jsonChecks.add(checkMeludiRole(dc, MeludiRole.SAMPLE_PREP, createIfMissing)); |
3527 |
05 Oct 15 |
olle |
152 |
jsonChecks.add(checkMeludiRole(dc, MeludiRole.LIBRARY_PREP, createIfMissing)); |
2933 |
14 Nov 14 |
olle |
153 |
|
2933 |
14 Nov 14 |
olle |
154 |
int projectId = dc.getSessionControl().getActiveProjectId(); |
2933 |
14 Nov 14 |
olle |
155 |
Project activeProject = projectId == 0 ? null : Project.getById(dc, projectId); |
2933 |
14 Nov 14 |
olle |
156 |
|
2933 |
14 Nov 14 |
olle |
157 |
Group patientCurator = MeludiRole.PATIENT_CURATOR.get(dc); |
2933 |
14 Nov 14 |
olle |
158 |
PermissionOptions patientCuratorUse = null; |
2933 |
14 Nov 14 |
olle |
159 |
PermissionOptions patientCuratorWrite = null; |
2933 |
14 Nov 14 |
olle |
160 |
PermissionOptions patientCuratorRead = null; |
2933 |
14 Nov 14 |
olle |
161 |
if (patientCurator != null) |
2933 |
14 Nov 14 |
olle |
162 |
{ |
2933 |
14 Nov 14 |
olle |
163 |
patientCuratorRead = new PermissionOptions(); |
2933 |
14 Nov 14 |
olle |
164 |
patientCuratorRead.set(patientCurator, Permission.READ); |
2933 |
14 Nov 14 |
olle |
165 |
patientCuratorUse = new PermissionOptions(); |
2933 |
14 Nov 14 |
olle |
166 |
patientCuratorUse.set(patientCurator, Permission.USE); |
2933 |
14 Nov 14 |
olle |
167 |
patientCuratorWrite = new PermissionOptions(); |
2933 |
14 Nov 14 |
olle |
168 |
patientCuratorWrite.set(patientCurator, Permission.WRITE); |
2933 |
14 Nov 14 |
olle |
169 |
if (activeProject != null) |
2933 |
14 Nov 14 |
olle |
170 |
{ |
2933 |
14 Nov 14 |
olle |
171 |
patientCuratorRead.set(activeProject, null); |
2933 |
14 Nov 14 |
olle |
172 |
patientCuratorUse.set(activeProject, null); |
2933 |
14 Nov 14 |
olle |
173 |
patientCuratorWrite.set(activeProject, null); |
2933 |
14 Nov 14 |
olle |
174 |
} |
2933 |
14 Nov 14 |
olle |
175 |
} |
2933 |
14 Nov 14 |
olle |
176 |
|
2933 |
14 Nov 14 |
olle |
177 |
PermissionOptions activeProjectRead = null; |
2933 |
14 Nov 14 |
olle |
178 |
PermissionOptions activeProjectUse = null; |
2933 |
14 Nov 14 |
olle |
179 |
PermissionOptions activeProjectWrite = null; |
2933 |
14 Nov 14 |
olle |
180 |
if (activeProject != null) |
2933 |
14 Nov 14 |
olle |
181 |
{ |
2933 |
14 Nov 14 |
olle |
182 |
activeProjectRead = new PermissionOptions(); |
2933 |
14 Nov 14 |
olle |
183 |
activeProjectRead.set(activeProject, Permission.READ); |
2933 |
14 Nov 14 |
olle |
184 |
activeProjectUse = new PermissionOptions(); |
2933 |
14 Nov 14 |
olle |
185 |
activeProjectUse.set(activeProject, Permission.USE); |
2933 |
14 Nov 14 |
olle |
186 |
activeProjectWrite = new PermissionOptions(); |
2933 |
14 Nov 14 |
olle |
187 |
activeProjectWrite.set(activeProject, Permission.WRITE); |
2933 |
14 Nov 14 |
olle |
188 |
} |
2933 |
14 Nov 14 |
olle |
189 |
|
2933 |
14 Nov 14 |
olle |
190 |
PermissionOptions effectivePermissionsRead = activeProjectRead == null ? |
2933 |
14 Nov 14 |
olle |
191 |
patientCuratorRead : activeProjectRead; |
2933 |
14 Nov 14 |
olle |
192 |
PermissionOptions effectivePermissionsUse = activeProjectUse == null ? |
2933 |
14 Nov 14 |
olle |
193 |
patientCuratorUse : activeProjectUse; |
2933 |
14 Nov 14 |
olle |
194 |
PermissionOptions effectivePermissionsWrite = activeProjectWrite == null ? |
2933 |
14 Nov 14 |
olle |
195 |
patientCuratorWrite : activeProjectWrite; |
2933 |
14 Nov 14 |
olle |
196 |
Map<String, Item> subtypeItems = new HashMap<String, Item>(); |
2933 |
14 Nov 14 |
olle |
197 |
|
2933 |
14 Nov 14 |
olle |
// Subtype checks |
2933 |
14 Nov 14 |
olle |
199 |
jsonChecks.add(checkSubtype(dc, Subtype.PATIENT, null, createIfMissing)); |
4785 |
27 Apr 18 |
olle |
200 |
jsonChecks.add(checkSubtype(dc, Subtype.NO, null, createIfMissing)); |
4785 |
27 Apr 18 |
olle |
201 |
jsonChecks.add(checkSubtype(dc, Subtype.NOT_ASKED, null, createIfMissing)); |
2933 |
14 Nov 14 |
olle |
202 |
jsonChecks.add(checkSubtype(dc, Subtype.CASE, null, createIfMissing, Subtype.PATIENT)); |
4795 |
08 May 18 |
olle |
203 |
jsonChecks.add(checkSubtype(dc, Subtype.BLOOD, null, createIfMissing, Subtype.PATIENT)); |
4795 |
08 May 18 |
olle |
204 |
jsonChecks.add(checkSubtype(dc, Subtype.BLOOD_DNA, null, createIfMissing, Subtype.BLOOD)); |
4903 |
10 Jul 18 |
olle |
205 |
jsonChecks.add(checkSubtype(dc, Subtype.FFPE_BLOCK, null, createIfMissing, Subtype.PATIENT)); |
2933 |
14 Nov 14 |
olle |
206 |
jsonChecks.add(checkSubtype(dc, Subtype.SPECIMEN,null, createIfMissing, Subtype.CASE)); |
5093 |
14 Nov 18 |
olle |
//jsonChecks.add(checkSubtype(dc, Subtype.HISTOLOGY, null, createIfMissing, Subtype.SPECIMEN, Subtype.HISTOLOGY_PROTOCOL)); |
5093 |
14 Nov 18 |
olle |
208 |
jsonChecks.add(checkSubtype(dc, Subtype.HISTOLOGY, null, createIfMissing, Subtype.SPECIMEN)); |
5111 |
20 Nov 18 |
olle |
//jsonChecks.add(checkSubtype(dc, Subtype.STAINED, null, createIfMissing, Subtype.HISTOLOGY, Subtype.STAINING_PROTOCOL)); |
5111 |
20 Nov 18 |
olle |
210 |
jsonChecks.add(checkSubtype(dc, Subtype.STAINED, null, createIfMissing, Subtype.HISTOLOGY)); |
3044 |
16 Dec 14 |
olle |
211 |
jsonChecks.add(checkSubtype(dc, Subtype.DNA, null, createIfMissing)); |
3044 |
16 Dec 14 |
olle |
212 |
jsonChecks.add(checkSubtype(dc, Subtype.RNA, null, createIfMissing)); |
3180 |
17 Mar 15 |
olle |
213 |
/* |
3180 |
17 Mar 15 |
olle |
jsonChecks.add(checkSubtype(dc, Subtype.CDNA, null, createIfMissing, Subtype.MRNA, Subtype.CDNA_PROTOCOL)); |
3180 |
17 Mar 15 |
olle |
215 |
*/ |
3449 |
28 Jul 15 |
olle |
216 |
jsonChecks.add(checkSubtype(dc, Subtype.LIBRARY_PROTOCOL, null, createIfMissing)); |
3449 |
28 Jul 15 |
olle |
217 |
jsonChecks.add(checkSubtype(dc, Subtype.BARCODE, null, createIfMissing)); |
3449 |
28 Jul 15 |
olle |
218 |
jsonChecks.add(checkSubtype(dc, Subtype.LIBRARY, null, createIfMissing, Subtype.DNA, Subtype.BARCODE, Subtype.LIBRARY_PROTOCOL)); |
4785 |
27 Apr 18 |
olle |
219 |
jsonChecks.add(checkSubtype(dc, Subtype.RETRACT, null, createIfMissing)); |
4785 |
27 Apr 18 |
olle |
220 |
jsonChecks.add(checkSubtype(dc, Subtype.RETRO_NO, null, createIfMissing)); |
5149 |
28 Nov 18 |
olle |
221 |
jsonChecks.add(checkSubtype(dc, Subtype.BASE_LINE_CSV, null, createIfMissing)); |
2933 |
14 Nov 14 |
olle |
222 |
|
2933 |
14 Nov 14 |
olle |
// Plate geometries |
2933 |
14 Nov 14 |
olle |
224 |
jsonChecks.add(checkPlateGeometry(dc, Geometry.THREE_BY_TWO, createIfMissing)); |
2933 |
14 Nov 14 |
olle |
225 |
jsonChecks.add(checkPlateGeometry(dc, Geometry.ONE_BY_TWELVE, createIfMissing)); |
2933 |
14 Nov 14 |
olle |
226 |
jsonChecks.add(checkPlateGeometry(dc, Geometry.NINE_BY_NINE, createIfMissing)); |
2933 |
14 Nov 14 |
olle |
227 |
jsonChecks.add(checkPlateGeometry(dc, Geometry.EIGHT_BY_TWELVE, createIfMissing)); |
5175 |
04 Dec 18 |
olle |
228 |
jsonChecks.add(checkPlateGeometry(dc, Geometry.TEN_BY_TEN, createIfMissing)); |
2933 |
14 Nov 14 |
olle |
229 |
|
2933 |
14 Nov 14 |
olle |
// Bioplate types |
5111 |
20 Nov 18 |
olle |
231 |
jsonChecks.add(checkBioplateType(dc, BioplateType.HE_GLASS, createIfMissing)); |
3180 |
17 Mar 15 |
olle |
232 |
jsonChecks.add(checkBioplateType(dc, BioplateType.DNA, createIfMissing)); |
2933 |
14 Nov 14 |
olle |
233 |
|
2933 |
14 Nov 14 |
olle |
// Bioplate event types |
2933 |
14 Nov 14 |
olle |
235 |
|
2933 |
14 Nov 14 |
olle |
// Annotation type checks |
2933 |
14 Nov 14 |
olle |
// -- the first batch need to be shared to the PatientCurator group |
2933 |
14 Nov 14 |
olle |
238 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.PERSONAL_NUMBER, 1, null, patientCuratorUse, createIfMissing)); |
2933 |
14 Nov 14 |
olle |
239 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.FAMILY_NAME, 1, null, patientCuratorUse, createIfMissing)); |
2933 |
14 Nov 14 |
olle |
240 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.ALL_FIRST_NAMES, 1, null, patientCuratorUse, createIfMissing)); |
2933 |
14 Nov 14 |
olle |
241 |
|
2933 |
14 Nov 14 |
olle |
// -- the second batch need only be shared to the active project or to the PatientCurator group |
2933 |
14 Nov 14 |
olle |
243 |
|
2933 |
14 Nov 14 |
olle |
244 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.DATE_OF_BIRTH, 1, null, effectivePermissionsUse, createIfMissing)); |
2933 |
14 Nov 14 |
olle |
245 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.GENDER, 1, new ValueOptions("F", "M"), effectivePermissionsUse, createIfMissing)); |
4795 |
08 May 18 |
olle |
246 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.PL_NUMBER, 1, null, patientCuratorUse, createIfMissing)); |
4795 |
08 May 18 |
olle |
247 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.PAD, 1, null, patientCuratorUse, createIfMissing)); |
5074 |
06 Nov 18 |
olle |
248 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.MATERIAL_NUMBER, 1, null, patientCuratorUse, createIfMissing)); |
5160 |
30 Nov 18 |
olle |
249 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.LOCALISATION, 1, null, effectivePermissionsUse, createIfMissing)); |
2933 |
14 Nov 14 |
olle |
250 |
|
4795 |
08 May 18 |
olle |
251 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.BLOOD_SAMPLING_DATETIME, 1, null, effectivePermissionsUse, createIfMissing)); |
4986 |
28 Sep 18 |
olle |
252 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.TUBE_LABEL, 1, null, patientCuratorUse, createIfMissing)); |
4795 |
08 May 18 |
olle |
253 |
|
3028 |
11 Dec 14 |
olle |
254 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.SAMPLING_DATE, 1, null, effectivePermissionsUse, createIfMissing)); |
4773 |
20 Apr 18 |
olle |
255 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.CONSENT, 1, new ValueOptions("Yes", "No", "Not asked"), effectivePermissionsUse, createIfMissing)); |
4773 |
20 Apr 18 |
olle |
256 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.CONSENT_DATE, 1, null, effectivePermissionsUse, createIfMissing)); |
4879 |
27 Jun 18 |
olle |
257 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.DIAGNOSIS_CONFIRMED, 1, null, effectivePermissionsUse, createIfMissing)); |
4840 |
08 Jun 18 |
olle |
258 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.REFERRAL_ID, 1, null, patientCuratorUse, createIfMissing)); |
4899 |
10 Jul 18 |
olle |
259 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.CASE_ID, 1, null, effectivePermissionsUse, createIfMissing)); |
2933 |
14 Nov 14 |
olle |
260 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.ARRIVAL_DATE, 1, null, effectivePermissionsUse, createIfMissing)); |
5034 |
17 Oct 18 |
olle |
261 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.ARRIVAL_OPERATOR, 1, null, effectivePermissionsUse, createIfMissing)); |
2933 |
14 Nov 14 |
olle |
262 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.NOF_DELIVERED_TUBES, 1, null, effectivePermissionsUse, createIfMissing)); |
3028 |
11 Dec 14 |
olle |
263 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.NOF_SECTIONS, 1, null, effectivePermissionsUse, createIfMissing)); |
3067 |
08 Jan 15 |
olle |
264 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.VIABLE_TUMOUR_CELLS_PERCENT, 1, null, effectivePermissionsUse, createIfMissing)); |
5111 |
20 Nov 18 |
olle |
265 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.TUMOUR_CELLS_PERCENT, 1, null, effectivePermissionsUse, createIfMissing)); |
2933 |
14 Nov 14 |
olle |
266 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.OPERATOR_DELIVERY_COMMENT, 1, null, effectivePermissionsUse, createIfMissing)); |
5031 |
16 Oct 18 |
olle |
267 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.YELLOW_LABEL, 1, |
5031 |
16 Oct 18 |
olle |
268 |
new ValueOptions("yellow"), effectivePermissionsUse, createIfMissing)); |
5031 |
16 Oct 18 |
olle |
269 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.COMPLETED_DATE, 1, null, effectivePermissionsUse, createIfMissing)); |
2933 |
14 Nov 14 |
olle |
270 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.OTHER_PATH_NOTE, 1, null, effectivePermissionsUse, createIfMissing)); |
5243 |
17 Jan 19 |
olle |
271 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.FFPE_BLOCK_ORDER_DATE, 1, null, effectivePermissionsUse, createIfMissing)); |
5061 |
30 Oct 18 |
olle |
272 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.USED_FOR_FFPE_SECTION_ORDER_FORM, 1, null, effectivePermissionsUse, createIfMissing)); |
5061 |
30 Oct 18 |
olle |
273 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.USED_FOR_FFPE_SECTION, 1, null, effectivePermissionsUse, createIfMissing)); |
5060 |
29 Oct 18 |
olle |
274 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.RETURNED_DATE, 1, null, effectivePermissionsUse, createIfMissing)); |
4730 |
04 Apr 18 |
olle |
275 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.MUTATION_ANALYSIS, 0, new ValueOptions("KRAS", "NRAS", "BRAF", "EGFR", "ALKEML4", "PDGFRA", "KIT", "TST170", "Other"), effectivePermissionsUse, createIfMissing)); |
2933 |
14 Nov 14 |
olle |
276 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.SITE, 1, new ValueOptions( |
4231 |
10 Nov 16 |
olle |
277 |
Site.GOTEBORG.getPrefix(), |
4725 |
29 Mar 18 |
olle |
278 |
Site.HALMSTAD.getPrefix(), |
2933 |
14 Nov 14 |
olle |
279 |
Site.HELSINGBORG.getPrefix(), |
4725 |
29 Mar 18 |
olle |
280 |
Site.JONKOPING.getPrefix(), |
2962 |
19 Nov 14 |
olle |
281 |
Site.KARLSKRONA.getPrefix(), |
2933 |
14 Nov 14 |
olle |
282 |
Site.KRISTIANSTAD.getPrefix(), |
4211 |
07 Nov 16 |
olle |
283 |
Site.LINKOPING.getPrefix(), |
2933 |
14 Nov 14 |
olle |
284 |
Site.LUND.getPrefix(), |
2933 |
14 Nov 14 |
olle |
285 |
Site.MALMO.getPrefix(), |
4231 |
10 Nov 16 |
olle |
286 |
Site.STOCKHOLM.getPrefix(), |
3408 |
17 Jun 15 |
olle |
287 |
Site.TRELLEBORG.getPrefix(), |
4211 |
07 Nov 16 |
olle |
288 |
Site.UMEA.getPrefix(), |
4211 |
07 Nov 16 |
olle |
289 |
Site.UPPSALA.getPrefix(), |
4211 |
07 Nov 16 |
olle |
290 |
Site.VAXJO.getPrefix()), |
2933 |
14 Nov 14 |
olle |
291 |
effectivePermissionsUse, createIfMissing)); |
3028 |
11 Dec 14 |
olle |
292 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.TUBE_CONTENT_TYPE, 1, |
3028 |
11 Dec 14 |
olle |
293 |
new ValueOptions("Specimen", "DNA", "RNA", "DNA_RNA"), |
2933 |
14 Nov 14 |
olle |
294 |
effectivePermissionsUse, createIfMissing)); |
4196 |
31 Oct 16 |
olle |
295 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.PROJECT_FOCUS, 1, new ValueOptions(PROJECTFOCUS_MELANOMA, PROJECTFOCUS_LUNG_CANCER, PROJECTFOCUS_COLON_CANCER, PROJECTFOCUS_GIST, PROJECTFOCUS_BREAST_CANCER), effectivePermissionsUse, createIfMissing)); |
4732 |
04 Apr 18 |
olle |
296 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.METASTASIS_SITE, 1, |
4732 |
04 Apr 18 |
olle |
297 |
new ValueOptions("liver", "skeleton", "bone"), |
4732 |
04 Apr 18 |
olle |
298 |
effectivePermissionsUse, createIfMissing)); |
2933 |
14 Nov 14 |
olle |
299 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.SPECIMEN_TYPE, 1, |
4180 |
27 Oct 16 |
olle |
300 |
new ValueOptions(SPECIMENTYPE_PRIMARY_TUMOR, SPECIMENTYPE_METASTASIS), |
2933 |
14 Nov 14 |
olle |
301 |
effectivePermissionsUse, createIfMissing)); |
4195 |
31 Oct 16 |
olle |
302 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.SPECIMEN_INPUT_TYPE, 1, |
4729 |
04 Apr 18 |
olle |
303 |
new ValueOptions("fresh_frozen", "rna_later", "ffpe_block", "ffpe_section", "ffpe_punch", "ffpe_slide", "cell_line"), |
4195 |
31 Oct 16 |
olle |
304 |
effectivePermissionsUse, createIfMissing)); |
3318 |
08 May 15 |
olle |
305 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.SAMPLING_DATE_EXTRACT, 1, null, effectivePermissionsUse, createIfMissing)); |
3318 |
08 May 15 |
olle |
306 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.ARRIVAL_DATE_EXTRACT, 1, null, effectivePermissionsUse, createIfMissing)); |
3318 |
08 May 15 |
olle |
307 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.SPECIMEN_TYPE_EXTRACT, 1, |
4180 |
27 Oct 16 |
olle |
308 |
new ValueOptions(SPECIMENTYPE_PRIMARY_TUMOR, SPECIMENTYPE_METASTASIS), |
3318 |
08 May 15 |
olle |
309 |
effectivePermissionsUse, createIfMissing)); |
3318 |
08 May 15 |
olle |
310 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.VIABLE_TUMOUR_CELLS_PERCENT_EXTRACT, 1, null, effectivePermissionsUse, createIfMissing)); |
3318 |
08 May 15 |
olle |
311 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.OPERATOR_DELIVERY_COMMENT_EXTRACT, 1, null, effectivePermissionsUse, createIfMissing)); |
3176 |
06 Mar 15 |
olle |
// Sample processing |
3180 |
17 Mar 15 |
olle |
313 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.ISOLATION_DATE, 1, null, effectivePermissionsUse, createIfMissing)); |
3501 |
21 Sep 15 |
olle |
314 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.EXTRACTION_OPERATOR, 1, null, effectivePermissionsUse, createIfMissing)); |
3176 |
06 Mar 15 |
olle |
315 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.XYLENE_SPECIMEN, 1, null, effectivePermissionsUse, createIfMissing)); |
3176 |
06 Mar 15 |
olle |
316 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.ETOH995_SPECIMEN, 1, null, effectivePermissionsUse, createIfMissing)); |
3176 |
06 Mar 15 |
olle |
317 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.BUFFER_PKD_SPECIMEN, 1, null, effectivePermissionsUse, createIfMissing)); |
3176 |
06 Mar 15 |
olle |
318 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.BUFFER_ATL_SPECIMEN, 1, null, effectivePermissionsUse, createIfMissing)); |
3176 |
06 Mar 15 |
olle |
319 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.PROTEINASE_K_SPECIMEN, 1, null, effectivePermissionsUse, createIfMissing)); |
3176 |
06 Mar 15 |
olle |
320 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.RNASE_A_SPECIMEN, 1, null, effectivePermissionsUse, createIfMissing)); |
3176 |
06 Mar 15 |
olle |
321 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.QIACUBE_DATE, 1, null, effectivePermissionsUse, createIfMissing)); |
3176 |
06 Mar 15 |
olle |
322 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.QIACUBE_OPERATOR, 1, null, effectivePermissionsUse, createIfMissing)); |
3176 |
06 Mar 15 |
olle |
323 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.QIACUBE_INSTRUMENT_PREFIX, 1, null, effectivePermissionsUse, createIfMissing)); |
3176 |
06 Mar 15 |
olle |
324 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.QIACUBE_POSITION, 1, null, effectivePermissionsUse, createIfMissing)); |
3176 |
06 Mar 15 |
olle |
325 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.QIACUBE_RUN_NO, 1, null, effectivePermissionsUse, createIfMissing)); |
3176 |
06 Mar 15 |
olle |
326 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.ALLPREP_FFPE_KIT, 1, null, effectivePermissionsUse, createIfMissing)); |
3176 |
06 Mar 15 |
olle |
327 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.ETOH995, 1, null, effectivePermissionsUse, createIfMissing)); |
3176 |
06 Mar 15 |
olle |
328 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.BUFFER_RLT, 1, null, effectivePermissionsUse, createIfMissing)); |
3176 |
06 Mar 15 |
olle |
329 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.BUFFER_FRN, 1, null, effectivePermissionsUse, createIfMissing)); |
3176 |
06 Mar 15 |
olle |
330 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.BUFFER_RPE, 1, null, effectivePermissionsUse, createIfMissing)); |
3176 |
06 Mar 15 |
olle |
331 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.BUFFER_AL, 1, null, effectivePermissionsUse, createIfMissing)); |
3176 |
06 Mar 15 |
olle |
332 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.BUFFER_AW1, 1, null, effectivePermissionsUse, createIfMissing)); |
3176 |
06 Mar 15 |
olle |
333 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.BUFFER_AW2, 1, null, effectivePermissionsUse, createIfMissing)); |
3176 |
06 Mar 15 |
olle |
334 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.BUFFER_ATE, 1, null, effectivePermissionsUse, createIfMissing)); |
3176 |
06 Mar 15 |
olle |
335 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.BUFFER_RDD, 1, null, effectivePermissionsUse, createIfMissing)); |
3176 |
06 Mar 15 |
olle |
336 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.RNASE_FREE_WATER, 1, null, effectivePermissionsUse, createIfMissing)); |
3176 |
06 Mar 15 |
olle |
337 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.DNASE_MIX, 1, null, effectivePermissionsUse, createIfMissing)); |
3176 |
06 Mar 15 |
olle |
338 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.RNEASY_MIN_ELUTE_SPIN_COL, 1, null, effectivePermissionsUse, createIfMissing)); |
3176 |
06 Mar 15 |
olle |
339 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.QIAAMP_MIN_ELUTE_SPIN_COL, 1, null, effectivePermissionsUse, createIfMissing)); |
3324 |
11 May 15 |
olle |
340 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.KAPA_SYBR_FAST, 1, null, effectivePermissionsUse, createIfMissing)); |
3324 |
11 May 15 |
olle |
341 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.QUALITY_CONTROL_PRIMERS_QCP_RGT, 1, null, effectivePermissionsUse, createIfMissing)); |
3438 |
03 Jul 15 |
olle |
342 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.QUALITY_CONTROL_TEMPLATE_QCT, 1, null, effectivePermissionsUse, createIfMissing)); |
3324 |
11 May 15 |
olle |
343 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.QUBIT_DNA_HIGH_SENS, 1, null, effectivePermissionsUse, createIfMissing)); |
3324 |
11 May 15 |
olle |
344 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.QUBIT_DNA_BROAD_RANGE, 1, null, effectivePermissionsUse, createIfMissing)); |
3176 |
06 Mar 15 |
olle |
345 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.ND_CONC, 1, null, effectivePermissionsUse, createIfMissing)); |
3176 |
06 Mar 15 |
olle |
346 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.ND_260_BY_280, 1, null, effectivePermissionsUse, createIfMissing)); |
3176 |
06 Mar 15 |
olle |
347 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.ND_260_BY_230, 1, null, effectivePermissionsUse, createIfMissing)); |
3176 |
06 Mar 15 |
olle |
348 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.QUBIT_CONC, 1, null, effectivePermissionsUse, createIfMissing)); |
3176 |
06 Mar 15 |
olle |
349 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.DELTA_CT, 1, null, effectivePermissionsUse, createIfMissing)); |
3449 |
28 Jul 15 |
olle |
350 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.DILUTION_DATE, 1, null, effectivePermissionsUse, createIfMissing)); |
3449 |
28 Jul 15 |
olle |
351 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.DILUTION_OPERATOR, 1, null, effectivePermissionsUse, createIfMissing)); |
3449 |
28 Jul 15 |
olle |
352 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.DILUTION_CONC, 1, null, effectivePermissionsUse, createIfMissing)); |
3180 |
17 Mar 15 |
olle |
353 |
|
3233 |
09 Apr 15 |
olle |
354 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.SOURCE_ITEM_NAMES_LIST_STRING, 1, null, effectivePermissionsUse, createIfMissing)); |
3180 |
17 Mar 15 |
olle |
355 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.BATCH_NUMBER_EXTRA_QIACUBE_ITEMS, 1, null, effectivePermissionsUse, createIfMissing)); |
3245 |
14 Apr 15 |
olle |
356 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.EXTRA_QIACUBE_ITEM_NAMES_LIST_STRING, 1, null, effectivePermissionsUse, createIfMissing)); |
3180 |
17 Mar 15 |
olle |
357 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.BATCH_ISOLATION_DATE, 1, null, effectivePermissionsUse, createIfMissing)); |
3180 |
17 Mar 15 |
olle |
358 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.BATCH_EXTRACTION_PROTOCOL_ID, 1, null, effectivePermissionsUse, createIfMissing)); |
3180 |
17 Mar 15 |
olle |
359 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.BATCH_EXTRACTION_PROTOCOL_NAME, 1, null, effectivePermissionsUse, createIfMissing)); |
3180 |
17 Mar 15 |
olle |
360 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.BATCH_RNA_DEFAULT_VOLUME_IN_MICROLITRE, 1, null, effectivePermissionsUse, createIfMissing)); |
3180 |
17 Mar 15 |
olle |
361 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.BATCH_DNA_DEFAULT_VOLUME_IN_MICROLITRE, 1, null, effectivePermissionsUse, createIfMissing)); |
3180 |
17 Mar 15 |
olle |
362 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.BATCH_QIACUBE_DATE, 1, null, effectivePermissionsUse, createIfMissing)); |
3180 |
17 Mar 15 |
olle |
363 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.BATCH_QIACUBE_PRIMARY_PREFIX, 1, null, effectivePermissionsUse, createIfMissing)); |
3180 |
17 Mar 15 |
olle |
364 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.BATCH_QIACUBE_SECONDARY_PREFIX, 1, null, effectivePermissionsUse, createIfMissing)); |
3180 |
17 Mar 15 |
olle |
365 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.BATCH_QIACUBE_RUN_NO, 1, null, effectivePermissionsUse, createIfMissing)); |
3180 |
17 Mar 15 |
olle |
366 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.BATCH_QIACUBE_OPERATOR, 1, null, effectivePermissionsUse, createIfMissing)); |
3180 |
17 Mar 15 |
olle |
367 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.BATCH_ALLPREP_FFPE_KIT, 1, null, effectivePermissionsUse, createIfMissing)); |
2933 |
14 Nov 14 |
olle |
368 |
|
3430 |
29 Jun 15 |
olle |
369 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.SAMPLE_PREP_LIST_IS_PROCESSED, 1, null, effectivePermissionsUse, createIfMissing)); |
3430 |
29 Jun 15 |
olle |
370 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.LIST_ISOLATION_DATE, 1, null, effectivePermissionsUse, createIfMissing)); |
3430 |
29 Jun 15 |
olle |
371 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.LIST_EXTRACTION_DATE, 1, null, effectivePermissionsUse, createIfMissing)); |
3501 |
21 Sep 15 |
olle |
372 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.LIST_EXTRACTION_OPERATOR, 1, null, effectivePermissionsUse, createIfMissing)); |
3430 |
29 Jun 15 |
olle |
373 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.LIST_EXTRACTION_PROTOCOL_ID, 1, null, effectivePermissionsUse, createIfMissing)); |
3430 |
29 Jun 15 |
olle |
374 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.LIST_EXTRACTION_PROTOCOL_NAME, 1, null, effectivePermissionsUse, createIfMissing)); |
3430 |
29 Jun 15 |
olle |
375 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.LIST_RNA_DEFAULT_VOLUME_IN_MICROLITRE, 1, null, effectivePermissionsUse, createIfMissing)); |
3430 |
29 Jun 15 |
olle |
376 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.LIST_DNA_DEFAULT_VOLUME_IN_MICROLITRE, 1, null, effectivePermissionsUse, createIfMissing)); |
3430 |
29 Jun 15 |
olle |
377 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.LIST_QIACUBE_DATE, 1, null, effectivePermissionsUse, createIfMissing)); |
3430 |
29 Jun 15 |
olle |
378 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.LIST_QIACUBE_PRIMARY_PREFIX, 1, null, effectivePermissionsUse, createIfMissing)); |
3430 |
29 Jun 15 |
olle |
379 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.LIST_QIACUBE_SECONDARY_PREFIX, 1, null, effectivePermissionsUse, createIfMissing)); |
3430 |
29 Jun 15 |
olle |
380 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.LIST_QIACUBE_RUN_NO, 1, null, effectivePermissionsUse, createIfMissing)); |
3430 |
29 Jun 15 |
olle |
381 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.LIST_QIACUBE_OPERATOR, 1, null, effectivePermissionsUse, createIfMissing)); |
3430 |
29 Jun 15 |
olle |
382 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.LIST_ALLPREP_FFPE_KIT, 1, null, effectivePermissionsUse, createIfMissing)); |
3501 |
21 Sep 15 |
olle |
383 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.LIST_XYLENE_SPECIMEN, 1, null, effectivePermissionsUse, createIfMissing)); |
3501 |
21 Sep 15 |
olle |
384 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.LIST_ETOH995_SPECIMEN, 1, null, effectivePermissionsUse, createIfMissing)); |
3501 |
21 Sep 15 |
olle |
385 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.LIST_BUFFER_PKD_SPECIMEN, 1, null, effectivePermissionsUse, createIfMissing)); |
3501 |
21 Sep 15 |
olle |
386 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.LIST_BUFFER_ATL_SPECIMEN, 1, null, effectivePermissionsUse, createIfMissing)); |
3501 |
21 Sep 15 |
olle |
387 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.LIST_PROTEINASE_K_SPECIMEN, 1, null, effectivePermissionsUse, createIfMissing)); |
3501 |
21 Sep 15 |
olle |
388 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.LIST_RNASE_A_SPECIMEN, 1, null, effectivePermissionsUse, createIfMissing)); |
3501 |
21 Sep 15 |
olle |
389 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.LIST_ETOH995, 1, null, effectivePermissionsUse, createIfMissing)); |
3501 |
21 Sep 15 |
olle |
390 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.LIST_BUFFER_RLT, 1, null, effectivePermissionsUse, createIfMissing)); |
3501 |
21 Sep 15 |
olle |
391 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.LIST_BUFFER_FRN, 1, null, effectivePermissionsUse, createIfMissing)); |
3501 |
21 Sep 15 |
olle |
392 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.LIST_BUFFER_RPE, 1, null, effectivePermissionsUse, createIfMissing)); |
3501 |
21 Sep 15 |
olle |
393 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.LIST_BUFFER_AL, 1, null, effectivePermissionsUse, createIfMissing)); |
3501 |
21 Sep 15 |
olle |
394 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.LIST_BUFFER_AW1, 1, null, effectivePermissionsUse, createIfMissing)); |
3501 |
21 Sep 15 |
olle |
395 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.LIST_BUFFER_AW2, 1, null, effectivePermissionsUse, createIfMissing)); |
3501 |
21 Sep 15 |
olle |
396 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.LIST_BUFFER_ATE, 1, null, effectivePermissionsUse, createIfMissing)); |
3501 |
21 Sep 15 |
olle |
397 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.LIST_BUFFER_RDD, 1, null, effectivePermissionsUse, createIfMissing)); |
3501 |
21 Sep 15 |
olle |
398 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.LIST_RNASE_FREE_WATER, 1, null, effectivePermissionsUse, createIfMissing)); |
3501 |
21 Sep 15 |
olle |
399 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.LIST_DNASE_MIX, 1, null, effectivePermissionsUse, createIfMissing)); |
3501 |
21 Sep 15 |
olle |
400 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.LIST_RNEASY_MIN_ELUTE_SPIN_COL, 1, null, effectivePermissionsUse, createIfMissing)); |
3501 |
21 Sep 15 |
olle |
401 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.LIST_QIAAMP_MIN_ELUTE_SPIN_COL, 1, null, effectivePermissionsUse, createIfMissing)); |
3501 |
21 Sep 15 |
olle |
402 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.LIST_KAPA_SYBR_FAST, 1, null, effectivePermissionsUse, createIfMissing)); |
3501 |
21 Sep 15 |
olle |
403 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.LIST_QUALITY_CONTROL_PRIMERS_QCP_RGT, 1, null, effectivePermissionsUse, createIfMissing)); |
3501 |
21 Sep 15 |
olle |
404 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.LIST_QUALITY_CONTROL_TEMPLATE_QCT, 1, null, effectivePermissionsUse, createIfMissing)); |
3501 |
21 Sep 15 |
olle |
405 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.LIST_QUBIT_DNA_HIGH_SENS, 1, null, effectivePermissionsUse, createIfMissing)); |
3501 |
21 Sep 15 |
olle |
406 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.LIST_QUBIT_DNA_BROAD_RANGE, 1, null, effectivePermissionsUse, createIfMissing)); |
3430 |
29 Jun 15 |
olle |
407 |
|
5111 |
20 Nov 18 |
olle |
408 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.IHC, 1, |
5111 |
20 Nov 18 |
olle |
409 |
new ValueOptions("p63"), |
5111 |
20 Nov 18 |
olle |
410 |
effectivePermissionsUse, createIfMissing)); |
5111 |
20 Nov 18 |
olle |
411 |
|
3449 |
28 Jul 15 |
olle |
// Library preparation |
3449 |
28 Jul 15 |
olle |
413 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.POOL_SCHEMA, 1, |
3449 |
28 Jul 15 |
olle |
414 |
new ValueOptions("2by48", "4by24", "1by16", "2by16", "3by16", "4by16", "5by16", "NP1by16"), |
3449 |
28 Jul 15 |
olle |
415 |
effectivePermissionsUse, createIfMissing)); |
3449 |
28 Jul 15 |
olle |
416 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.BARCODE_VARIANT, 1, null, effectivePermissionsUse, createIfMissing)); |
3449 |
28 Jul 15 |
olle |
417 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.BARCODE_SEQUENCE, 1, null, effectivePermissionsUse, createIfMissing)); |
3630 |
27 Nov 15 |
olle |
418 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.CONTROL_LOT_NO, 1, null, effectivePermissionsUse, createIfMissing)); |
3719 |
22 Jan 16 |
olle |
419 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.QPCR_BRANCH, 1, null, effectivePermissionsUse, createIfMissing)); |
3449 |
28 Jul 15 |
olle |
420 |
|
3610 |
20 Nov 15 |
olle |
// Library preparation kits |
3610 |
20 Nov 15 |
olle |
422 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.LIBPREPKIT_LIB_PREP_BOX1, 1, null, effectivePermissionsUse, createIfMissing)); |
3610 |
20 Nov 15 |
olle |
423 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.LIBPREPKIT_LIB_INDEX_KIT, 1, null, effectivePermissionsUse, createIfMissing)); |
3610 |
20 Nov 15 |
olle |
424 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.LIBPREPKIT_CONTENT_SET_BOX3, 1, null, effectivePermissionsUse, createIfMissing)); |
3610 |
20 Nov 15 |
olle |
425 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.LIBPREPKIT_OLIGO_POOL_A_FPA, 1, null, effectivePermissionsUse, createIfMissing)); |
3610 |
20 Nov 15 |
olle |
426 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.LIBPREPKIT_OLIGO_POOL_B_FPB, 1, null, effectivePermissionsUse, createIfMissing)); |
3610 |
20 Nov 15 |
olle |
427 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.LIBPREPKIT_OLIGO_HYBR_SEQ_REAGENT3_OHS3, 1, null, effectivePermissionsUse, createIfMissing)); |
3610 |
20 Nov 15 |
olle |
428 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.LIBPREPKIT_STRINGENT_WASH1_SW1, 1, null, effectivePermissionsUse, createIfMissing)); |
3610 |
20 Nov 15 |
olle |
429 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.LIBPREPKIT_EXTENSION_LIGATION_MIX3_ELM3, 1, null, effectivePermissionsUse, createIfMissing)); |
3610 |
20 Nov 15 |
olle |
430 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.LIBPREPKIT_PCR_MASTER_MIX2_PMM2, 1, null, effectivePermissionsUse, createIfMissing)); |
3610 |
20 Nov 15 |
olle |
431 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.LIBPREPKIT_UB1, 1, null, effectivePermissionsUse, createIfMissing)); |
3610 |
20 Nov 15 |
olle |
432 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.LIBPREPKIT_TDP, 1, null, effectivePermissionsUse, createIfMissing)); |
3610 |
20 Nov 15 |
olle |
433 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.LIBPREPKIT_FILTER_PLATE, 1, null, effectivePermissionsUse, createIfMissing)); |
3610 |
20 Nov 15 |
olle |
434 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.LIBPREPKIT_A701, 1, null, effectivePermissionsUse, createIfMissing)); |
3610 |
20 Nov 15 |
olle |
435 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.LIBPREPKIT_A702, 1, null, effectivePermissionsUse, createIfMissing)); |
3610 |
20 Nov 15 |
olle |
436 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.LIBPREPKIT_A703, 1, null, effectivePermissionsUse, createIfMissing)); |
3610 |
20 Nov 15 |
olle |
437 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.LIBPREPKIT_A704, 1, null, effectivePermissionsUse, createIfMissing)); |
3610 |
20 Nov 15 |
olle |
438 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.LIBPREPKIT_A705, 1, null, effectivePermissionsUse, createIfMissing)); |
3610 |
20 Nov 15 |
olle |
439 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.LIBPREPKIT_A706, 1, null, effectivePermissionsUse, createIfMissing)); |
3610 |
20 Nov 15 |
olle |
440 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.LIBPREPKIT_A707, 1, null, effectivePermissionsUse, createIfMissing)); |
3610 |
20 Nov 15 |
olle |
441 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.LIBPREPKIT_A708, 1, null, effectivePermissionsUse, createIfMissing)); |
3610 |
20 Nov 15 |
olle |
442 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.LIBPREPKIT_A709, 1, null, effectivePermissionsUse, createIfMissing)); |
3610 |
20 Nov 15 |
olle |
443 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.LIBPREPKIT_A710, 1, null, effectivePermissionsUse, createIfMissing)); |
3610 |
20 Nov 15 |
olle |
444 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.LIBPREPKIT_A711, 1, null, effectivePermissionsUse, createIfMissing)); |
3610 |
20 Nov 15 |
olle |
445 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.LIBPREPKIT_A712, 1, null, effectivePermissionsUse, createIfMissing)); |
3610 |
20 Nov 15 |
olle |
446 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.LIBPREPKIT_A501, 1, null, effectivePermissionsUse, createIfMissing)); |
3610 |
20 Nov 15 |
olle |
447 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.LIBPREPKIT_A502, 1, null, effectivePermissionsUse, createIfMissing)); |
3610 |
20 Nov 15 |
olle |
448 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.LIBPREPKIT_A503, 1, null, effectivePermissionsUse, createIfMissing)); |
3610 |
20 Nov 15 |
olle |
449 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.LIBPREPKIT_A504, 1, null, effectivePermissionsUse, createIfMissing)); |
3610 |
20 Nov 15 |
olle |
450 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.LIBPREPKIT_A505, 1, null, effectivePermissionsUse, createIfMissing)); |
3610 |
20 Nov 15 |
olle |
451 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.LIBPREPKIT_A506, 1, null, effectivePermissionsUse, createIfMissing)); |
3610 |
20 Nov 15 |
olle |
452 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.LIBPREPKIT_A507, 1, null, effectivePermissionsUse, createIfMissing)); |
3610 |
20 Nov 15 |
olle |
453 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.LIBPREPKIT_A508, 1, null, effectivePermissionsUse, createIfMissing)); |
3610 |
20 Nov 15 |
olle |
454 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.LIBPREPKIT_LAST_UPDATED, 1, null, effectivePermissionsUse, createIfMissing)); |
3610 |
20 Nov 15 |
olle |
455 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.LIBPREPKIT_NUMBER_TIMES_USED, 1, null, effectivePermissionsUse, createIfMissing)); |
3610 |
20 Nov 15 |
olle |
456 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.LIBPREPKIT_UNUSED_FPA_WELLS, 1, null, effectivePermissionsUse, createIfMissing)); |
3610 |
20 Nov 15 |
olle |
457 |
|
2933 |
14 Nov 14 |
olle |
// Annotation type categories |
2933 |
14 Nov 14 |
olle |
459 |
jsonChecks.add(checkAnnotationTypeCategory(dc, Subtype.PATIENT, createIfMissing, |
2933 |
14 Nov 14 |
olle |
460 |
Annotationtype.ALL_FIRST_NAMES, Annotationtype.DATE_OF_BIRTH, |
2933 |
14 Nov 14 |
olle |
461 |
Annotationtype.FAMILY_NAME, Annotationtype.GENDER, Annotationtype.PERSONAL_NUMBER)); |
2933 |
14 Nov 14 |
olle |
462 |
|
3028 |
11 Dec 14 |
olle |
463 |
jsonChecks.add(checkAnnotationTypeCategory(dc, Subtype.CASE, createIfMissing, |
4773 |
20 Apr 18 |
olle |
464 |
Annotationtype.CONSENT, Annotationtype.CONSENT_DATE, |
4879 |
27 Jun 18 |
olle |
465 |
Annotationtype.DIAGNOSIS_CONFIRMED, |
4840 |
08 Jun 18 |
olle |
466 |
Annotationtype.REFERRAL_ID, |
3028 |
11 Dec 14 |
olle |
467 |
Annotationtype.MUTATION_ANALYSIS, |
3028 |
11 Dec 14 |
olle |
468 |
Annotationtype.SITE, Annotationtype.TUBE_CONTENT_TYPE, Annotationtype.PROJECT_FOCUS, |
5158 |
30 Nov 18 |
olle |
469 |
Annotationtype.NOF_DELIVERED_TUBES, |
5243 |
17 Jan 19 |
olle |
470 |
Annotationtype.FFPE_BLOCK_ORDER_DATE)); |
2933 |
14 Nov 14 |
olle |
471 |
|
4899 |
10 Jul 18 |
olle |
472 |
jsonChecks.add(checkAnnotationTypeCategory(dc, Subtype.BLOOD, createIfMissing, |
4899 |
10 Jul 18 |
olle |
473 |
Annotationtype.CONSENT, Annotationtype.CONSENT_DATE, |
4899 |
10 Jul 18 |
olle |
474 |
Annotationtype.CASE_ID, |
4986 |
28 Sep 18 |
olle |
475 |
Annotationtype.TUBE_LABEL, |
5027 |
15 Oct 18 |
olle |
476 |
Annotationtype.SAMPLING_DATE, |
4899 |
10 Jul 18 |
olle |
477 |
Annotationtype.BLOOD_SAMPLING_DATETIME, |
5027 |
15 Oct 18 |
olle |
478 |
Annotationtype.ARRIVAL_DATE, |
5034 |
17 Oct 18 |
olle |
479 |
Annotationtype.ARRIVAL_OPERATOR, |
4899 |
10 Jul 18 |
olle |
480 |
Annotationtype.OTHER_PATH_NOTE)); |
4899 |
10 Jul 18 |
olle |
481 |
|
4903 |
10 Jul 18 |
olle |
482 |
jsonChecks.add(checkAnnotationTypeCategory(dc, Subtype.FFPE_BLOCK, createIfMissing, |
4903 |
10 Jul 18 |
olle |
483 |
Annotationtype.CONSENT, Annotationtype.CONSENT_DATE, |
4903 |
10 Jul 18 |
olle |
484 |
Annotationtype.CASE_ID, |
4903 |
10 Jul 18 |
olle |
485 |
Annotationtype.PAD, |
5074 |
06 Nov 18 |
olle |
486 |
Annotationtype.MATERIAL_NUMBER, |
5160 |
30 Nov 18 |
olle |
487 |
Annotationtype.LOCALISATION, |
4903 |
10 Jul 18 |
olle |
488 |
Annotationtype.SAMPLING_DATE, |
5044 |
19 Oct 18 |
olle |
489 |
Annotationtype.ARRIVAL_DATE, |
5044 |
19 Oct 18 |
olle |
490 |
Annotationtype.YELLOW_LABEL, |
5044 |
19 Oct 18 |
olle |
491 |
Annotationtype.OPERATOR_DELIVERY_COMMENT, |
5052 |
25 Oct 18 |
olle |
492 |
Annotationtype.OTHER_PATH_NOTE, |
5061 |
30 Oct 18 |
olle |
493 |
Annotationtype.USED_FOR_FFPE_SECTION_ORDER_FORM, |
5061 |
30 Oct 18 |
olle |
494 |
Annotationtype.USED_FOR_FFPE_SECTION, |
5060 |
29 Oct 18 |
olle |
495 |
Annotationtype.RETURNED_DATE)); |
4903 |
10 Jul 18 |
olle |
496 |
|
2933 |
14 Nov 14 |
olle |
497 |
jsonChecks.add(checkAnnotationTypeCategory(dc, Subtype.SPECIMEN, createIfMissing, |
3050 |
17 Dec 14 |
olle |
498 |
Annotationtype.ARRIVAL_DATE, |
3028 |
11 Dec 14 |
olle |
499 |
Annotationtype.NOF_SECTIONS, Annotationtype.OPERATOR_DELIVERY_COMMENT, |
2933 |
14 Nov 14 |
olle |
500 |
Annotationtype.OTHER_PATH_NOTE, |
2933 |
14 Nov 14 |
olle |
501 |
Annotationtype.PL_NUMBER, Annotationtype.PAD, |
3067 |
08 Jan 15 |
olle |
502 |
Annotationtype.SAMPLING_DATE, Annotationtype.SPECIMEN_TYPE, |
4195 |
31 Oct 16 |
olle |
503 |
Annotationtype.SPECIMEN_INPUT_TYPE, |
5031 |
16 Oct 18 |
olle |
504 |
Annotationtype.YELLOW_LABEL, |
5031 |
16 Oct 18 |
olle |
505 |
Annotationtype.COMPLETED_DATE, |
3067 |
08 Jan 15 |
olle |
506 |
Annotationtype.VIABLE_TUMOUR_CELLS_PERCENT)); |
2933 |
14 Nov 14 |
olle |
507 |
|
5093 |
14 Nov 18 |
olle |
508 |
/* |
5093 |
14 Nov 18 |
olle |
jsonChecks.add(checkAnnotationTypeCategory(dc, Subtype.HISTOLOGY, createIfMissing, |
5093 |
14 Nov 18 |
olle |
Annotationtype.AUTO_PROCESSING, Annotationtype.FLAG)); |
5093 |
14 Nov 18 |
olle |
511 |
*/ |
5111 |
20 Nov 18 |
olle |
512 |
/* |
5111 |
20 Nov 18 |
olle |
jsonChecks.add(checkAnnotationTypeCategory(dc, Subtype.STAINED, createIfMissing, |
5111 |
20 Nov 18 |
olle |
Annotationtype.IHC, Annotationtype.IHC_QUALITY, |
5111 |
20 Nov 18 |
olle |
Annotationtype.GOOD_STAIN, Annotationtype.SCORE_COMPLETE, Annotationtype.SCORE_INVASIVE_CANCER, |
5111 |
20 Nov 18 |
olle |
Annotationtype.SCORE_INSITU_CANCER, Annotationtype.SCORE_LYMPHOCYTES, Annotationtype.SCORE_NORMAL, |
5111 |
20 Nov 18 |
olle |
Annotationtype.SCORE_STROMA, Annotationtype.SCORE_FAT)); |
5111 |
20 Nov 18 |
olle |
518 |
*/ |
5111 |
20 Nov 18 |
olle |
519 |
jsonChecks.add(checkAnnotationTypeCategory(dc, Subtype.STAINED, createIfMissing, |
5111 |
20 Nov 18 |
olle |
520 |
Annotationtype.IHC, |
5111 |
20 Nov 18 |
olle |
521 |
Annotationtype.TUMOUR_CELLS_PERCENT)); |
5093 |
14 Nov 18 |
olle |
522 |
|
2933 |
14 Nov 14 |
olle |
523 |
jsonChecks.add(checkAnnotationTypeCategory(dc, Subtype.RNA, createIfMissing, |
3318 |
08 May 15 |
olle |
524 |
Annotationtype.ARRIVAL_DATE_EXTRACT, |
3318 |
08 May 15 |
olle |
525 |
Annotationtype.SAMPLING_DATE_EXTRACT, |
3318 |
08 May 15 |
olle |
526 |
Annotationtype.SPECIMEN_TYPE_EXTRACT, |
3318 |
08 May 15 |
olle |
527 |
Annotationtype.VIABLE_TUMOUR_CELLS_PERCENT_EXTRACT, |
3318 |
08 May 15 |
olle |
528 |
Annotationtype.OPERATOR_DELIVERY_COMMENT_EXTRACT, |
3180 |
17 Mar 15 |
olle |
529 |
Annotationtype.ISOLATION_DATE, |
3501 |
21 Sep 15 |
olle |
530 |
Annotationtype.EXTRACTION_OPERATOR, |
3176 |
06 Mar 15 |
olle |
531 |
Annotationtype.XYLENE_SPECIMEN, |
3176 |
06 Mar 15 |
olle |
532 |
Annotationtype.ETOH995_SPECIMEN, |
3176 |
06 Mar 15 |
olle |
533 |
Annotationtype.BUFFER_PKD_SPECIMEN, |
3176 |
06 Mar 15 |
olle |
534 |
Annotationtype.BUFFER_ATL_SPECIMEN, |
3176 |
06 Mar 15 |
olle |
535 |
Annotationtype.PROTEINASE_K_SPECIMEN, |
3176 |
06 Mar 15 |
olle |
536 |
Annotationtype.RNASE_A_SPECIMEN, |
3176 |
06 Mar 15 |
olle |
537 |
Annotationtype.QIACUBE_DATE, |
3176 |
06 Mar 15 |
olle |
538 |
Annotationtype.QIACUBE_OPERATOR, |
3176 |
06 Mar 15 |
olle |
539 |
Annotationtype.QIACUBE_INSTRUMENT_PREFIX, |
3176 |
06 Mar 15 |
olle |
540 |
Annotationtype.QIACUBE_POSITION, |
3176 |
06 Mar 15 |
olle |
541 |
Annotationtype.QIACUBE_RUN_NO, |
3176 |
06 Mar 15 |
olle |
542 |
Annotationtype.ALLPREP_FFPE_KIT, |
3176 |
06 Mar 15 |
olle |
543 |
Annotationtype.ETOH995, |
3176 |
06 Mar 15 |
olle |
544 |
Annotationtype.BUFFER_RLT, |
3176 |
06 Mar 15 |
olle |
545 |
Annotationtype.BUFFER_FRN, |
3176 |
06 Mar 15 |
olle |
546 |
Annotationtype.BUFFER_RPE, |
3176 |
06 Mar 15 |
olle |
547 |
Annotationtype.BUFFER_AL, |
3176 |
06 Mar 15 |
olle |
548 |
Annotationtype.BUFFER_AW1, |
3176 |
06 Mar 15 |
olle |
549 |
Annotationtype.BUFFER_AW2, |
3176 |
06 Mar 15 |
olle |
550 |
Annotationtype.BUFFER_ATE, |
3176 |
06 Mar 15 |
olle |
551 |
Annotationtype.BUFFER_RDD, |
3176 |
06 Mar 15 |
olle |
552 |
Annotationtype.RNASE_FREE_WATER, |
3176 |
06 Mar 15 |
olle |
553 |
Annotationtype.DNASE_MIX, |
3176 |
06 Mar 15 |
olle |
554 |
Annotationtype.RNEASY_MIN_ELUTE_SPIN_COL, |
3176 |
06 Mar 15 |
olle |
555 |
Annotationtype.QIAAMP_MIN_ELUTE_SPIN_COL, |
3324 |
11 May 15 |
olle |
556 |
Annotationtype.KAPA_SYBR_FAST, |
3324 |
11 May 15 |
olle |
557 |
Annotationtype.QUALITY_CONTROL_PRIMERS_QCP_RGT, |
3438 |
03 Jul 15 |
olle |
558 |
Annotationtype.QUALITY_CONTROL_TEMPLATE_QCT, |
3324 |
11 May 15 |
olle |
559 |
Annotationtype.QUBIT_DNA_HIGH_SENS, |
3324 |
11 May 15 |
olle |
560 |
Annotationtype.QUBIT_DNA_BROAD_RANGE, |
3176 |
06 Mar 15 |
olle |
561 |
Annotationtype.ND_CONC, |
3176 |
06 Mar 15 |
olle |
562 |
Annotationtype.ND_260_BY_280, |
3176 |
06 Mar 15 |
olle |
563 |
Annotationtype.ND_260_BY_230, |
3176 |
06 Mar 15 |
olle |
564 |
Annotationtype.QUBIT_CONC, |
3176 |
06 Mar 15 |
olle |
565 |
Annotationtype.DELTA_CT)); |
2933 |
14 Nov 14 |
olle |
566 |
|
2933 |
14 Nov 14 |
olle |
567 |
jsonChecks.add(checkAnnotationTypeCategory(dc, Subtype.DNA, createIfMissing, |
3318 |
08 May 15 |
olle |
568 |
Annotationtype.ARRIVAL_DATE_EXTRACT, |
3318 |
08 May 15 |
olle |
569 |
Annotationtype.SAMPLING_DATE_EXTRACT, |
3318 |
08 May 15 |
olle |
570 |
Annotationtype.SPECIMEN_TYPE_EXTRACT, |
3318 |
08 May 15 |
olle |
571 |
Annotationtype.VIABLE_TUMOUR_CELLS_PERCENT_EXTRACT, |
3318 |
08 May 15 |
olle |
572 |
Annotationtype.OPERATOR_DELIVERY_COMMENT_EXTRACT, |
3180 |
17 Mar 15 |
olle |
573 |
Annotationtype.ISOLATION_DATE, |
3501 |
21 Sep 15 |
olle |
574 |
Annotationtype.EXTRACTION_OPERATOR, |
3176 |
06 Mar 15 |
olle |
575 |
Annotationtype.XYLENE_SPECIMEN, |
3176 |
06 Mar 15 |
olle |
576 |
Annotationtype.ETOH995_SPECIMEN, |
3176 |
06 Mar 15 |
olle |
577 |
Annotationtype.BUFFER_PKD_SPECIMEN, |
3176 |
06 Mar 15 |
olle |
578 |
Annotationtype.BUFFER_ATL_SPECIMEN, |
3176 |
06 Mar 15 |
olle |
579 |
Annotationtype.PROTEINASE_K_SPECIMEN, |
3176 |
06 Mar 15 |
olle |
580 |
Annotationtype.RNASE_A_SPECIMEN, |
3176 |
06 Mar 15 |
olle |
581 |
Annotationtype.QIACUBE_DATE, |
3176 |
06 Mar 15 |
olle |
582 |
Annotationtype.QIACUBE_OPERATOR, |
3176 |
06 Mar 15 |
olle |
583 |
Annotationtype.QIACUBE_INSTRUMENT_PREFIX, |
3176 |
06 Mar 15 |
olle |
584 |
Annotationtype.QIACUBE_POSITION, |
3176 |
06 Mar 15 |
olle |
585 |
Annotationtype.QIACUBE_RUN_NO, |
3176 |
06 Mar 15 |
olle |
586 |
Annotationtype.ALLPREP_FFPE_KIT, |
3176 |
06 Mar 15 |
olle |
587 |
Annotationtype.ETOH995, |
3176 |
06 Mar 15 |
olle |
588 |
Annotationtype.BUFFER_RLT, |
3176 |
06 Mar 15 |
olle |
589 |
Annotationtype.BUFFER_FRN, |
3176 |
06 Mar 15 |
olle |
590 |
Annotationtype.BUFFER_RPE, |
3176 |
06 Mar 15 |
olle |
591 |
Annotationtype.BUFFER_AL, |
3176 |
06 Mar 15 |
olle |
592 |
Annotationtype.BUFFER_AW1, |
3176 |
06 Mar 15 |
olle |
593 |
Annotationtype.BUFFER_AW2, |
3176 |
06 Mar 15 |
olle |
594 |
Annotationtype.BUFFER_ATE, |
3176 |
06 Mar 15 |
olle |
595 |
Annotationtype.BUFFER_RDD, |
3176 |
06 Mar 15 |
olle |
596 |
Annotationtype.RNASE_FREE_WATER, |
3176 |
06 Mar 15 |
olle |
597 |
Annotationtype.DNASE_MIX, |
3176 |
06 Mar 15 |
olle |
598 |
Annotationtype.RNEASY_MIN_ELUTE_SPIN_COL, |
3176 |
06 Mar 15 |
olle |
599 |
Annotationtype.QIAAMP_MIN_ELUTE_SPIN_COL, |
3324 |
11 May 15 |
olle |
600 |
Annotationtype.KAPA_SYBR_FAST, |
3324 |
11 May 15 |
olle |
601 |
Annotationtype.QUALITY_CONTROL_PRIMERS_QCP_RGT, |
3438 |
03 Jul 15 |
olle |
602 |
Annotationtype.QUALITY_CONTROL_TEMPLATE_QCT, |
3324 |
11 May 15 |
olle |
603 |
Annotationtype.QUBIT_DNA_HIGH_SENS, |
3324 |
11 May 15 |
olle |
604 |
Annotationtype.QUBIT_DNA_BROAD_RANGE, |
3176 |
06 Mar 15 |
olle |
605 |
Annotationtype.ND_CONC, |
3176 |
06 Mar 15 |
olle |
606 |
Annotationtype.ND_260_BY_280, |
3176 |
06 Mar 15 |
olle |
607 |
Annotationtype.ND_260_BY_230, |
3176 |
06 Mar 15 |
olle |
608 |
Annotationtype.QUBIT_CONC, |
3630 |
27 Nov 15 |
olle |
609 |
Annotationtype.DELTA_CT, |
3719 |
22 Jan 16 |
olle |
610 |
Annotationtype.CONTROL_LOT_NO, |
3719 |
22 Jan 16 |
olle |
611 |
Annotationtype.QPCR_BRANCH)); |
2933 |
14 Nov 14 |
olle |
612 |
|
3449 |
28 Jul 15 |
olle |
613 |
jsonChecks.add(checkAnnotationType(dc, Annotationtype.PLATE_PROCESS_RESULT, 1, |
3449 |
28 Jul 15 |
olle |
614 |
new ValueOptions(ReactionPlate.PROCESS_SUCCESSFUL, ReactionPlate.PROCESS_FAILED), |
3449 |
28 Jul 15 |
olle |
615 |
effectivePermissionsUse, createIfMissing)); |
3449 |
28 Jul 15 |
olle |
616 |
jsonChecks.add(checkAnnotationTypeCategory(dc, Subtype.DNA, createIfMissing, |
3641 |
02 Dec 15 |
olle |
617 |
Annotationtype.POOL_SCHEMA, Annotationtype.BARCODE_VARIANT, Annotationtype.PLATE_PROCESS_RESULT)); |
3180 |
17 Mar 15 |
olle |
618 |
/* |
3180 |
17 Mar 15 |
olle |
jsonChecks.add(checkAnnotationTypeCategory(dc, Subtype.CDNA, createIfMissing, |
3180 |
17 Mar 15 |
olle |
Annotationtype.SYNTHESIS_DATE, Annotationtype.SYNTHESIS_OPERATOR, |
3180 |
17 Mar 15 |
olle |
Annotationtype.POOL_SCHEMA, Annotationtype.BARCODE_VARIANT, Annotationtype.PLATE_PROCESS_RESULT)); |
3180 |
17 Mar 15 |
olle |
622 |
*/ |
3180 |
17 Mar 15 |
olle |
623 |
jsonChecks.add(checkAnnotationTypeCategory(dc, Subtype.DNA, createIfMissing)); |
3449 |
28 Jul 15 |
olle |
624 |
jsonChecks.add(checkAnnotationTypeCategory(dc, Subtype.BARCODE, createIfMissing, |
3449 |
28 Jul 15 |
olle |
625 |
Annotationtype.BARCODE_SEQUENCE |
3449 |
28 Jul 15 |
olle |
626 |
)); |
3180 |
17 Mar 15 |
olle |
627 |
|
3180 |
17 Mar 15 |
olle |
628 |
|
2933 |
14 Nov 14 |
olle |
// File servers |
2933 |
14 Nov 14 |
olle |
630 |
|
5271 |
29 Jan 19 |
olle |
// Directories |
5271 |
29 Jan 19 |
olle |
//jsonChecks.add(checkDirectory(dc, Histology.IMAGE_DIR, createIfMissing, effectivePermissionsUse)); |
5271 |
29 Jan 19 |
olle |
633 |
List<String> projectNameList = new ArrayList<String>(); |
5271 |
29 Jan 19 |
olle |
634 |
projectNameList.add("SCAN-B-rec"); |
5686 |
25 Oct 19 |
olle |
635 |
projectNameList.add("NordicTrip"); |
6783 |
25 Jul 22 |
olle |
636 |
projectNameList.add("LUCAS"); |
5271 |
29 Jan 19 |
olle |
637 |
for (String projectName: projectNameList) |
5271 |
29 Jan 19 |
olle |
638 |
{ |
5271 |
29 Jan 19 |
olle |
639 |
String referralFormTemplatesDir = Meludi.fetchReferralFormTemplatesDir(projectName); |
5271 |
29 Jan 19 |
olle |
640 |
String referralFormTemplatesOldDir = Meludi.fetchReferralFormTemplatesOldDir(projectName); |
5271 |
29 Jan 19 |
olle |
641 |
jsonChecks.add(checkDirectory(dc, referralFormTemplatesDir, createIfMissing, patientCuratorUse)); |
5271 |
29 Jan 19 |
olle |
642 |
jsonChecks.add(checkDirectory(dc, referralFormTemplatesOldDir, createIfMissing, patientCuratorUse)); |
5327 |
06 Mar 19 |
olle |
643 |
/* |
5327 |
06 Mar 19 |
olle |
// Creates sub-directories with names equals to site prefixes |
5271 |
29 Jan 19 |
olle |
HashMap<String,String> siteKeySitePrefixHashMap = Meludi.fetchSiteKeySitePrefixHashMap(projectName); |
5271 |
29 Jan 19 |
olle |
for (Site site: Site.getAllSites()) |
5271 |
29 Jan 19 |
olle |
647 |
{ |
5271 |
29 Jan 19 |
olle |
String siteKey = site.getPrefix(); |
5271 |
29 Jan 19 |
olle |
if (siteKey != null && siteKeySitePrefixHashMap != null) |
5271 |
29 Jan 19 |
olle |
650 |
{ |
5271 |
29 Jan 19 |
olle |
String sitePrefix = siteKeySitePrefixHashMap.get(siteKey); |
5271 |
29 Jan 19 |
olle |
if (sitePrefix != null && !sitePrefix.equals((""))) |
5271 |
29 Jan 19 |
olle |
653 |
{ |
5271 |
29 Jan 19 |
olle |
String siteDirName = referralFormTemplatesDir + "/" + sitePrefix; |
5271 |
29 Jan 19 |
olle |
jsonChecks.add(checkDirectory(dc, siteDirName, createIfMissing, patientCuratorUse)); |
5271 |
29 Jan 19 |
olle |
siteDirName = referralFormTemplatesOldDir + "/" + sitePrefix; |
5271 |
29 Jan 19 |
olle |
jsonChecks.add(checkDirectory(dc, siteDirName, createIfMissing, patientCuratorUse)); |
5271 |
29 Jan 19 |
olle |
658 |
} |
5271 |
29 Jan 19 |
olle |
659 |
} |
5271 |
29 Jan 19 |
olle |
660 |
} |
5327 |
06 Mar 19 |
olle |
661 |
*/ |
5271 |
29 Jan 19 |
olle |
662 |
String baselineFilesDir = Meludi.fetchBaselineFilesDir(projectName); |
5271 |
29 Jan 19 |
olle |
663 |
jsonChecks.add(checkDirectory(dc, baselineFilesDir, createIfMissing, patientCuratorUse)); |
5271 |
29 Jan 19 |
olle |
664 |
} |
5271 |
29 Jan 19 |
olle |
665 |
|
2933 |
14 Nov 14 |
olle |
// Plugin definitions and configurations |
2933 |
14 Nov 14 |
olle |
667 |
|
2933 |
14 Nov 14 |
olle |
// Biomaterial lists |
2933 |
14 Nov 14 |
olle |
669 |
|
2933 |
14 Nov 14 |
olle |
// MIME types |
2933 |
14 Nov 14 |
olle |
671 |
|
2933 |
14 Nov 14 |
olle |
// Special items |
2933 |
14 Nov 14 |
olle |
673 |
|
2933 |
14 Nov 14 |
olle |
// Tags |
3449 |
28 Jul 15 |
olle |
675 |
/* |
3449 |
28 Jul 15 |
olle |
for (int i = 1; i <= 27; i++) |
3449 |
28 Jul 15 |
olle |
677 |
{ |
3449 |
28 Jul 15 |
olle |
// Skip 17, 24 and 26 since those are not present in our kits |
3449 |
28 Jul 15 |
olle |
if (i == 17 || i == 24 || i == 26) continue; |
3449 |
28 Jul 15 |
olle |
jsonChecks.add(checkTag(dc, "AD"+(i < 10 ? "00" : "0")+i, Subtype.BARCODE, |
3449 |
28 Jul 15 |
olle |
"TruSeq Adapter Index " + i, |
3449 |
28 Jul 15 |
olle |
effectivePermissionsUse, createIfMissing)); |
3449 |
28 Jul 15 |
olle |
683 |
} |
3449 |
28 Jul 15 |
olle |
684 |
*/ |
3449 |
28 Jul 15 |
olle |
// Illumina Index 1 Primers Lot Number |
3449 |
28 Jul 15 |
olle |
686 |
for (int i = 1; i <= 12; i++) |
3449 |
28 Jul 15 |
olle |
687 |
{ |
3449 |
28 Jul 15 |
olle |
688 |
jsonChecks.add(checkTag(dc, "A7"+(i < 10 ? "0" : "")+i, Subtype.BARCODE, |
3449 |
28 Jul 15 |
olle |
689 |
"TruSight Index 1 Primer " + i, |
3449 |
28 Jul 15 |
olle |
690 |
effectivePermissionsUse, createIfMissing)); |
3449 |
28 Jul 15 |
olle |
691 |
} |
3449 |
28 Jul 15 |
olle |
// Illumina Index 2 Primers Lot Number |
3449 |
28 Jul 15 |
olle |
693 |
for (int i = 1; i <= 8; i++) |
3449 |
28 Jul 15 |
olle |
694 |
{ |
3449 |
28 Jul 15 |
olle |
695 |
jsonChecks.add(checkTag(dc, "A5"+(i < 10 ? "0" : "")+i, Subtype.BARCODE, |
3449 |
28 Jul 15 |
olle |
696 |
"TruSight Index 2 Primer " + i, |
3449 |
28 Jul 15 |
olle |
697 |
effectivePermissionsUse, createIfMissing)); |
3449 |
28 Jul 15 |
olle |
698 |
} |
3449 |
28 Jul 15 |
olle |
699 |
|
2933 |
14 Nov 14 |
olle |
700 |
json.put("checks", jsonChecks); |
2933 |
14 Nov 14 |
olle |
701 |
|
3101 |
21 Jan 15 |
olle |
702 |
if (createIfMissing) |
3101 |
21 Jan 15 |
olle |
703 |
{ |
3101 |
21 Jan 15 |
olle |
704 |
dc.commit(); |
3102 |
21 Jan 15 |
olle |
705 |
CounterService.getInstance().setForceCount(); |
3101 |
21 Jan 15 |
olle |
706 |
} |
2933 |
14 Nov 14 |
olle |
707 |
} |
2933 |
14 Nov 14 |
olle |
708 |
|
2933 |
14 Nov 14 |
olle |
709 |
else if ("GetPermissions".equals(cmd)) |
2933 |
14 Nov 14 |
olle |
710 |
{ |
2933 |
14 Nov 14 |
olle |
711 |
dc = sc.newDbControl(); |
2933 |
14 Nov 14 |
olle |
712 |
boolean isRoot = sc.getLoggedInUserId() == SystemItems.getId(User.ROOT); |
2933 |
14 Nov 14 |
olle |
713 |
JSONObject jsonPermissions = new JSONObject(); |
2933 |
14 Nov 14 |
olle |
714 |
jsonPermissions.put("Administrator", isRoot|| MeludiRole.ADMINISTRATOR.isMember(dc) ? 1 : 0); |
2933 |
14 Nov 14 |
olle |
715 |
jsonPermissions.put("PatientCurator", MeludiRole.PATIENT_CURATOR.isMember(dc) ? 1 : 0); |
2933 |
14 Nov 14 |
olle |
716 |
jsonPermissions.put("SamplePrep", MeludiRole.SAMPLE_PREP.isMember(dc) ? 1 : 0); |
3527 |
05 Oct 15 |
olle |
717 |
jsonPermissions.put("LibraryPrep", MeludiRole.LIBRARY_PREP.isMember(dc) ? 1 : 0); |
2933 |
14 Nov 14 |
olle |
718 |
|
2933 |
14 Nov 14 |
olle |
719 |
json.put("permissions", jsonPermissions); |
2933 |
14 Nov 14 |
olle |
720 |
dc.close(); |
2933 |
14 Nov 14 |
olle |
721 |
} |
2933 |
14 Nov 14 |
olle |
722 |
} |
2933 |
14 Nov 14 |
olle |
723 |
catch (Throwable t) |
2933 |
14 Nov 14 |
olle |
724 |
{ |
2933 |
14 Nov 14 |
olle |
725 |
t.printStackTrace(); |
2933 |
14 Nov 14 |
olle |
726 |
json.clear(); |
2933 |
14 Nov 14 |
olle |
727 |
json.put("status", "error"); |
2933 |
14 Nov 14 |
olle |
728 |
json.put("message", t.getMessage()); |
2933 |
14 Nov 14 |
olle |
729 |
json.put("stacktrace", ThrowableUtil.stackTraceToString(t)); |
2933 |
14 Nov 14 |
olle |
730 |
} |
2933 |
14 Nov 14 |
olle |
731 |
finally |
2933 |
14 Nov 14 |
olle |
732 |
{ |
2933 |
14 Nov 14 |
olle |
733 |
if (dc != null) dc.close(); |
2933 |
14 Nov 14 |
olle |
734 |
json.writeJSONString(resp.getWriter()); |
2933 |
14 Nov 14 |
olle |
735 |
} |
2933 |
14 Nov 14 |
olle |
736 |
|
2933 |
14 Nov 14 |
olle |
737 |
|
2933 |
14 Nov 14 |
olle |
738 |
} |
2933 |
14 Nov 14 |
olle |
739 |
|
2933 |
14 Nov 14 |
olle |
740 |
|
2933 |
14 Nov 14 |
olle |
741 |
/** |
2933 |
14 Nov 14 |
olle |
Creates an annotation type with the given options. The annotation |
2933 |
14 Nov 14 |
olle |
type is created in a separate transaction. The annotation can be enabled for |
2933 |
14 Nov 14 |
olle |
one or more item-types. |
2933 |
14 Nov 14 |
olle |
745 |
|
2933 |
14 Nov 14 |
olle |
@since 2.5 |
2933 |
14 Nov 14 |
olle |
747 |
*/ |
2933 |
14 Nov 14 |
olle |
748 |
public AnnotationType createAnnotationType(SessionControl sc, Annotationtype annotationType, |
2933 |
14 Nov 14 |
olle |
749 |
int multiplicity, ValueOptions valueOptions, PermissionOptions permissions) |
2933 |
14 Nov 14 |
olle |
750 |
{ |
2933 |
14 Nov 14 |
olle |
751 |
AnnotationType at = null; |
2933 |
14 Nov 14 |
olle |
752 |
DbControl dc = sc.newDbControl(); |
2933 |
14 Nov 14 |
olle |
753 |
try |
2933 |
14 Nov 14 |
olle |
754 |
{ |
2933 |
14 Nov 14 |
olle |
755 |
at = AnnotationType.getNew(dc, annotationType.getValueType()); |
2933 |
14 Nov 14 |
olle |
756 |
at.setName(annotationType.getName()); |
2933 |
14 Nov 14 |
olle |
757 |
for (Item it : annotationType.getMainType()) |
2933 |
14 Nov 14 |
olle |
758 |
{ |
2933 |
14 Nov 14 |
olle |
759 |
at.enableForItem(it); |
2933 |
14 Nov 14 |
olle |
760 |
} |
2933 |
14 Nov 14 |
olle |
761 |
at.setMultiplicity(multiplicity); |
2933 |
14 Nov 14 |
olle |
762 |
if (valueOptions != null) |
2933 |
14 Nov 14 |
olle |
763 |
{ |
2933 |
14 Nov 14 |
olle |
764 |
if (valueOptions.isEnumeration()) |
2933 |
14 Nov 14 |
olle |
765 |
{ |
2933 |
14 Nov 14 |
olle |
766 |
at.setEnumeration(true); |
2933 |
14 Nov 14 |
olle |
767 |
at.setDisplayAsList(false); |
2933 |
14 Nov 14 |
olle |
768 |
at.setValues(valueOptions.getList()); |
2933 |
14 Nov 14 |
olle |
769 |
} |
2933 |
14 Nov 14 |
olle |
770 |
else if (at.getValueType().isNumerical()) |
2933 |
14 Nov 14 |
olle |
771 |
{ |
2933 |
14 Nov 14 |
olle |
772 |
Integer max = valueOptions.getMax(); |
2933 |
14 Nov 14 |
olle |
773 |
if (max != null) |
2933 |
14 Nov 14 |
olle |
774 |
{ |
2933 |
14 Nov 14 |
olle |
775 |
at.setMaxValueLong(max.longValue()); |
2933 |
14 Nov 14 |
olle |
776 |
} |
2933 |
14 Nov 14 |
olle |
777 |
Integer min = valueOptions.getMin(); |
2933 |
14 Nov 14 |
olle |
778 |
if (min != null) |
2933 |
14 Nov 14 |
olle |
779 |
{ |
2933 |
14 Nov 14 |
olle |
780 |
at.setMinValueLong(min.longValue()); |
2933 |
14 Nov 14 |
olle |
781 |
} |
2933 |
14 Nov 14 |
olle |
782 |
} |
2933 |
14 Nov 14 |
olle |
783 |
} |
2933 |
14 Nov 14 |
olle |
784 |
if (permissions != null) permissions.applyPermissions(at); |
2933 |
14 Nov 14 |
olle |
785 |
dc.saveItem(at); |
2933 |
14 Nov 14 |
olle |
786 |
dc.commit(); |
2933 |
14 Nov 14 |
olle |
787 |
} |
2933 |
14 Nov 14 |
olle |
788 |
finally |
2933 |
14 Nov 14 |
olle |
789 |
{ |
2933 |
14 Nov 14 |
olle |
790 |
if (dc != null) dc.close(); |
2933 |
14 Nov 14 |
olle |
791 |
} |
2933 |
14 Nov 14 |
olle |
792 |
return at; |
2933 |
14 Nov 14 |
olle |
793 |
} |
2933 |
14 Nov 14 |
olle |
794 |
|
2933 |
14 Nov 14 |
olle |
795 |
/** |
2933 |
14 Nov 14 |
olle |
Check for an existing annotation type with the given options. A JSONObject is returned |
2933 |
14 Nov 14 |
olle |
with the result. The following keys are used: |
2933 |
14 Nov 14 |
olle |
<ul> |
2933 |
14 Nov 14 |
olle |
<li>itemType: ANNOTATIONTYPE |
2933 |
14 Nov 14 |
olle |
<li>name: The name of the annotation type |
2933 |
14 Nov 14 |
olle |
<li>id: The id of the annotation type if it exists |
2933 |
14 Nov 14 |
olle |
<li>status: ok, error, or missing |
2933 |
14 Nov 14 |
olle |
<li>message: A descriptive message in case of an error |
2933 |
14 Nov 14 |
olle |
</ul> |
2933 |
14 Nov 14 |
olle |
805 |
|
2933 |
14 Nov 14 |
olle |
@since 2.5 |
2933 |
14 Nov 14 |
olle |
807 |
*/ |
2933 |
14 Nov 14 |
olle |
808 |
@SuppressWarnings("unchecked") |
2933 |
14 Nov 14 |
olle |
809 |
public JSONObject checkAnnotationType(DbControl dc, Annotationtype annotationType, |
2933 |
14 Nov 14 |
olle |
810 |
int multiplicity, ValueOptions valueOptions, PermissionOptions permissions, |
2933 |
14 Nov 14 |
olle |
811 |
boolean createIfMissing) |
2933 |
14 Nov 14 |
olle |
812 |
{ |
2933 |
14 Nov 14 |
olle |
813 |
JSONObject json = new JSONObject(); |
2933 |
14 Nov 14 |
olle |
814 |
JSONArray jsonMessages = new JSONArray(); |
2933 |
14 Nov 14 |
olle |
815 |
json.put("itemType", Item.ANNOTATIONTYPE.name()); |
2933 |
14 Nov 14 |
olle |
816 |
json.put("name", annotationType.getName()); |
2933 |
14 Nov 14 |
olle |
817 |
|
2933 |
14 Nov 14 |
olle |
818 |
List<AnnotationType> result = annotationType.list(dc); |
2933 |
14 Nov 14 |
olle |
819 |
if (result.size() == 0) |
2933 |
14 Nov 14 |
olle |
820 |
{ |
2933 |
14 Nov 14 |
olle |
821 |
if (createIfMissing) |
2933 |
14 Nov 14 |
olle |
822 |
{ |
2933 |
14 Nov 14 |
olle |
823 |
AnnotationType at = createAnnotationType(dc.getSessionControl(), annotationType, |
2933 |
14 Nov 14 |
olle |
824 |
multiplicity, valueOptions, permissions); |
2933 |
14 Nov 14 |
olle |
825 |
json.put("id", at.getId()); |
2933 |
14 Nov 14 |
olle |
826 |
json.put("status", "ok"); |
2933 |
14 Nov 14 |
olle |
827 |
jsonMessages.add("Created"); |
2933 |
14 Nov 14 |
olle |
828 |
} |
2933 |
14 Nov 14 |
olle |
829 |
else |
2933 |
14 Nov 14 |
olle |
830 |
{ |
2933 |
14 Nov 14 |
olle |
831 |
json.put("status", "missing"); |
2933 |
14 Nov 14 |
olle |
832 |
jsonMessages.add("Not found"); |
2933 |
14 Nov 14 |
olle |
833 |
} |
2933 |
14 Nov 14 |
olle |
834 |
} |
2933 |
14 Nov 14 |
olle |
835 |
else if (result.size() > 1) |
2933 |
14 Nov 14 |
olle |
836 |
{ |
2933 |
14 Nov 14 |
olle |
837 |
json.put("status", "error"); |
2933 |
14 Nov 14 |
olle |
838 |
jsonMessages.add("Found > 1 annotation type"); |
2933 |
14 Nov 14 |
olle |
839 |
} |
2933 |
14 Nov 14 |
olle |
840 |
else |
2933 |
14 Nov 14 |
olle |
841 |
{ |
2933 |
14 Nov 14 |
olle |
842 |
AnnotationType at = result.get(0); |
2933 |
14 Nov 14 |
olle |
843 |
json.put("id", at.getId()); |
2933 |
14 Nov 14 |
olle |
844 |
json.put("status", "ok");// For now -- more checks below |
2933 |
14 Nov 14 |
olle |
845 |
if (permissions != null && !permissions.checkPermissions(at)) |
2933 |
14 Nov 14 |
olle |
846 |
{ |
2933 |
14 Nov 14 |
olle |
847 |
if (createIfMissing) |
2933 |
14 Nov 14 |
olle |
848 |
{ |
2933 |
14 Nov 14 |
olle |
849 |
permissions.applyPermissions(at); |
2933 |
14 Nov 14 |
olle |
850 |
if (jsonMessages.size() == 0) jsonMessages.add("Fixed"); |
2933 |
14 Nov 14 |
olle |
851 |
} |
2933 |
14 Nov 14 |
olle |
852 |
else |
2933 |
14 Nov 14 |
olle |
853 |
{ |
2933 |
14 Nov 14 |
olle |
854 |
json.put("status", "incomplete"); |
2933 |
14 Nov 14 |
olle |
855 |
jsonMessages.add(permissions.getMessage()); |
2933 |
14 Nov 14 |
olle |
856 |
} |
2933 |
14 Nov 14 |
olle |
857 |
} |
2933 |
14 Nov 14 |
olle |
858 |
boolean allTypesOk = true; |
2933 |
14 Nov 14 |
olle |
859 |
boolean fixedTypes = false; |
2933 |
14 Nov 14 |
olle |
860 |
for (Item it : annotationType.getMainType()) |
2933 |
14 Nov 14 |
olle |
861 |
{ |
2933 |
14 Nov 14 |
olle |
862 |
if (!at.isEnabledForItem(it)) |
2933 |
14 Nov 14 |
olle |
863 |
{ |
2933 |
14 Nov 14 |
olle |
864 |
allTypesOk = false; |
2933 |
14 Nov 14 |
olle |
865 |
if (createIfMissing) |
2933 |
14 Nov 14 |
olle |
866 |
{ |
2933 |
14 Nov 14 |
olle |
867 |
at.enableForItem(it); |
2933 |
14 Nov 14 |
olle |
868 |
fixedTypes = true; |
2933 |
14 Nov 14 |
olle |
869 |
} |
2933 |
14 Nov 14 |
olle |
870 |
else |
2933 |
14 Nov 14 |
olle |
871 |
{ |
2933 |
14 Nov 14 |
olle |
872 |
json.put("status", "incomplete"); |
2933 |
14 Nov 14 |
olle |
873 |
jsonMessages.add("Not enabled for " + it.name()); |
2933 |
14 Nov 14 |
olle |
874 |
} |
2933 |
14 Nov 14 |
olle |
875 |
} |
2933 |
14 Nov 14 |
olle |
876 |
} |
2933 |
14 Nov 14 |
olle |
877 |
if (fixedTypes && jsonMessages.size() == 0) jsonMessages.add("Fixed"); |
2933 |
14 Nov 14 |
olle |
878 |
if (at.getValueType() != annotationType.getValueType()) |
2933 |
14 Nov 14 |
olle |
879 |
{ |
2933 |
14 Nov 14 |
olle |
880 |
json.put("status", "error"); |
2933 |
14 Nov 14 |
olle |
881 |
jsonMessages.add("Is not a " + annotationType.getValueType().name() + " type"); |
2933 |
14 Nov 14 |
olle |
882 |
} |
2933 |
14 Nov 14 |
olle |
883 |
if (at.getMultiplicity() != multiplicity) |
2933 |
14 Nov 14 |
olle |
884 |
{ |
2933 |
14 Nov 14 |
olle |
885 |
json.put("status", "error"); |
2933 |
14 Nov 14 |
olle |
886 |
jsonMessages.add("Should have multiplicity=" + (multiplicity == 0 ? "unlimited" : multiplicity)); |
2933 |
14 Nov 14 |
olle |
887 |
} |
2933 |
14 Nov 14 |
olle |
888 |
if (at.getDisableLogOfValues() != annotationType.getDisableChangeHistoryLog()) |
2933 |
14 Nov 14 |
olle |
889 |
{ |
2933 |
14 Nov 14 |
olle |
890 |
if (createIfMissing) |
2933 |
14 Nov 14 |
olle |
891 |
{ |
2933 |
14 Nov 14 |
olle |
892 |
at.setDisableLogOfValues(annotationType.getDisableChangeHistoryLog()); |
2933 |
14 Nov 14 |
olle |
893 |
if (jsonMessages.size() == 0) jsonMessages.add("Fixed"); |
2933 |
14 Nov 14 |
olle |
894 |
} |
2933 |
14 Nov 14 |
olle |
895 |
else |
2933 |
14 Nov 14 |
olle |
896 |
{ |
2933 |
14 Nov 14 |
olle |
897 |
json.put("status", "incomplete"); |
2933 |
14 Nov 14 |
olle |
898 |
if (annotationType.getDisableChangeHistoryLog()) |
2933 |
14 Nov 14 |
olle |
899 |
{ |
2933 |
14 Nov 14 |
olle |
900 |
jsonMessages.add("Should disable change log"); |
2933 |
14 Nov 14 |
olle |
901 |
} |
2933 |
14 Nov 14 |
olle |
902 |
else |
2933 |
14 Nov 14 |
olle |
903 |
{ |
2933 |
14 Nov 14 |
olle |
904 |
jsonMessages.add("Should not disable change log"); |
2933 |
14 Nov 14 |
olle |
905 |
} |
2933 |
14 Nov 14 |
olle |
906 |
} |
2933 |
14 Nov 14 |
olle |
907 |
} |
2933 |
14 Nov 14 |
olle |
908 |
if (at.isEnumeration() && (valueOptions == null || !valueOptions.isEnumeration())) |
2933 |
14 Nov 14 |
olle |
909 |
{ |
2933 |
14 Nov 14 |
olle |
910 |
json.put("status", "error"); |
2933 |
14 Nov 14 |
olle |
911 |
jsonMessages.add("Should not be an enumeration"); |
2933 |
14 Nov 14 |
olle |
912 |
} |
2933 |
14 Nov 14 |
olle |
913 |
if (valueOptions != null) |
2933 |
14 Nov 14 |
olle |
914 |
{ |
2933 |
14 Nov 14 |
olle |
915 |
if (valueOptions.isEnumeration()) |
2933 |
14 Nov 14 |
olle |
916 |
{ |
2933 |
14 Nov 14 |
olle |
917 |
if (!at.isEnumeration()) |
2933 |
14 Nov 14 |
olle |
918 |
{ |
2933 |
14 Nov 14 |
olle |
919 |
json.put("status", "error"); |
2933 |
14 Nov 14 |
olle |
920 |
jsonMessages.add("Is not enumeration of: " + valueOptions.getList()); |
2933 |
14 Nov 14 |
olle |
921 |
} |
2933 |
14 Nov 14 |
olle |
922 |
else if (!EqualsHelper.invariantEquals(at.getValues().toArray(), valueOptions.getArray())) |
2933 |
14 Nov 14 |
olle |
923 |
{ |
2933 |
14 Nov 14 |
olle |
924 |
if (createIfMissing) |
2933 |
14 Nov 14 |
olle |
925 |
{ |
2933 |
14 Nov 14 |
olle |
926 |
valueOptions.applyEnumeration(at); |
2933 |
14 Nov 14 |
olle |
927 |
if (jsonMessages.size() == 0) jsonMessages.add("Fixed"); |
2933 |
14 Nov 14 |
olle |
928 |
} |
2933 |
14 Nov 14 |
olle |
929 |
else |
2933 |
14 Nov 14 |
olle |
930 |
{ |
2933 |
14 Nov 14 |
olle |
931 |
json.put("status", "incomplete"); |
2933 |
14 Nov 14 |
olle |
932 |
jsonMessages.add("Doesn't have all options: " + valueOptions.getList() + "!=" + at.getValues()); |
2933 |
14 Nov 14 |
olle |
933 |
} |
2933 |
14 Nov 14 |
olle |
934 |
} |
2933 |
14 Nov 14 |
olle |
935 |
} |
2933 |
14 Nov 14 |
olle |
936 |
if (valueOptions.getMax() != null) |
2933 |
14 Nov 14 |
olle |
937 |
{ |
2933 |
14 Nov 14 |
olle |
938 |
if (at.getMaxValueLong() == null || at.getMaxValueLong().longValue() != valueOptions.getMax().longValue()) |
2933 |
14 Nov 14 |
olle |
939 |
{ |
2933 |
14 Nov 14 |
olle |
940 |
json.put("status", "error"); |
2933 |
14 Nov 14 |
olle |
941 |
jsonMessages.add("Should have max allowed value=" + valueOptions.getMax()); |
2933 |
14 Nov 14 |
olle |
942 |
} |
2933 |
14 Nov 14 |
olle |
943 |
} |
2933 |
14 Nov 14 |
olle |
944 |
if (valueOptions.getMin() != null) |
2933 |
14 Nov 14 |
olle |
945 |
{ |
2933 |
14 Nov 14 |
olle |
946 |
if (at.getMinValueLong() == null || at.getMinValueLong().longValue() != valueOptions.getMin().longValue()) |
2933 |
14 Nov 14 |
olle |
947 |
{ |
2933 |
14 Nov 14 |
olle |
948 |
json.put("status", "error"); |
2933 |
14 Nov 14 |
olle |
949 |
jsonMessages.add("Should have min allowed value=" + valueOptions.getMin()); |
2933 |
14 Nov 14 |
olle |
950 |
} |
2933 |
14 Nov 14 |
olle |
951 |
} |
2933 |
14 Nov 14 |
olle |
952 |
} |
2933 |
14 Nov 14 |
olle |
953 |
} |
2933 |
14 Nov 14 |
olle |
954 |
if (jsonMessages.size() == 0) jsonMessages.add("Ok"); |
2933 |
14 Nov 14 |
olle |
955 |
json.put("messages", jsonMessages); |
2933 |
14 Nov 14 |
olle |
956 |
return json; |
2933 |
14 Nov 14 |
olle |
957 |
} |
2933 |
14 Nov 14 |
olle |
958 |
|
2933 |
14 Nov 14 |
olle |
959 |
/** |
2933 |
14 Nov 14 |
olle |
Create a group or role with the given options. The item is created in |
2933 |
14 Nov 14 |
olle |
a separate transaction. |
2933 |
14 Nov 14 |
olle |
962 |
*/ |
3610 |
20 Nov 15 |
olle |
963 |
public <T extends BasicItem & Nameable> T createMeludiRole(SessionControl sc, MeludiRole<T> role) |
2933 |
14 Nov 14 |
olle |
964 |
{ |
2933 |
14 Nov 14 |
olle |
965 |
T r = null; |
2933 |
14 Nov 14 |
olle |
966 |
DbControl dc = sc.newDbControl(); |
2933 |
14 Nov 14 |
olle |
967 |
try |
2933 |
14 Nov 14 |
olle |
968 |
{ |
2933 |
14 Nov 14 |
olle |
969 |
r = role.create(dc); |
2933 |
14 Nov 14 |
olle |
970 |
r.setName(role.getName()); |
2933 |
14 Nov 14 |
olle |
971 |
dc.saveItem(r); |
2933 |
14 Nov 14 |
olle |
972 |
dc.commit(); |
2933 |
14 Nov 14 |
olle |
973 |
} |
2933 |
14 Nov 14 |
olle |
974 |
finally |
2933 |
14 Nov 14 |
olle |
975 |
{ |
2933 |
14 Nov 14 |
olle |
976 |
if (dc != null) dc.close(); |
2933 |
14 Nov 14 |
olle |
977 |
} |
2933 |
14 Nov 14 |
olle |
978 |
return r; |
2933 |
14 Nov 14 |
olle |
979 |
} |
2933 |
14 Nov 14 |
olle |
980 |
|
2933 |
14 Nov 14 |
olle |
981 |
/** |
2944 |
17 Nov 14 |
olle |
Check for an existing meludi role (a BASE role or group) with the given options. |
2933 |
14 Nov 14 |
olle |
A JSONObject is returned with the result. The following keys are used: |
2933 |
14 Nov 14 |
olle |
<ul> |
2933 |
14 Nov 14 |
olle |
<li>itemType: GROUP or ROLE |
2933 |
14 Nov 14 |
olle |
<li>name: The name of the item |
2933 |
14 Nov 14 |
olle |
<li>id: The id of the item if it exists |
2933 |
14 Nov 14 |
olle |
<li>status: ok, error, or missing |
2933 |
14 Nov 14 |
olle |
<li>message: A descriptive message in case of an error |
2933 |
14 Nov 14 |
olle |
</ul> |
2933 |
14 Nov 14 |
olle |
991 |
*/ |
2933 |
14 Nov 14 |
olle |
992 |
@SuppressWarnings("unchecked") |
2933 |
14 Nov 14 |
olle |
993 |
public JSONObject checkMeludiRole(DbControl dc, MeludiRole<? extends BasicItem> role, boolean createIfMissing) |
2933 |
14 Nov 14 |
olle |
994 |
{ |
2933 |
14 Nov 14 |
olle |
995 |
JSONObject json = new JSONObject(); |
2933 |
14 Nov 14 |
olle |
996 |
JSONArray jsonMessages = new JSONArray(); |
2933 |
14 Nov 14 |
olle |
997 |
json.put("itemType", role.getActualType().name()); |
2933 |
14 Nov 14 |
olle |
998 |
json.put("name", role.getName()); |
2933 |
14 Nov 14 |
olle |
999 |
|
2933 |
14 Nov 14 |
olle |
1000 |
List<? extends BasicItem> result = role.list(dc); |
2933 |
14 Nov 14 |
olle |
1001 |
if (result.size() == 0) |
2933 |
14 Nov 14 |
olle |
1002 |
{ |
2933 |
14 Nov 14 |
olle |
1003 |
if (createIfMissing) |
2933 |
14 Nov 14 |
olle |
1004 |
{ |
2933 |
14 Nov 14 |
olle |
1005 |
BasicItem g = createMeludiRole(dc.getSessionControl(), role); |
2933 |
14 Nov 14 |
olle |
1006 |
json.put("id", g.getId()); |
2933 |
14 Nov 14 |
olle |
1007 |
json.put("status", "ok"); |
2933 |
14 Nov 14 |
olle |
1008 |
jsonMessages.add("Created"); |
2933 |
14 Nov 14 |
olle |
1009 |
} |
2933 |
14 Nov 14 |
olle |
1010 |
else |
2933 |
14 Nov 14 |
olle |
1011 |
{ |
2933 |
14 Nov 14 |
olle |
1012 |
json.put("status", "missing"); |
2933 |
14 Nov 14 |
olle |
1013 |
jsonMessages.add("Not found"); |
2933 |
14 Nov 14 |
olle |
1014 |
} |
2933 |
14 Nov 14 |
olle |
1015 |
} |
2933 |
14 Nov 14 |
olle |
1016 |
else if (result.size() > 1) |
2933 |
14 Nov 14 |
olle |
1017 |
{ |
2933 |
14 Nov 14 |
olle |
1018 |
json.put("status", "error"); |
2933 |
14 Nov 14 |
olle |
1019 |
jsonMessages.add("Found > 1 " + role.getActualType().toString()); |
2933 |
14 Nov 14 |
olle |
1020 |
} |
2933 |
14 Nov 14 |
olle |
1021 |
else |
2933 |
14 Nov 14 |
olle |
1022 |
{ |
2933 |
14 Nov 14 |
olle |
1023 |
BasicItem g = result.get(0); |
2933 |
14 Nov 14 |
olle |
1024 |
json.put("id", g.getId()); |
2933 |
14 Nov 14 |
olle |
1025 |
json.put("status", "ok"); |
2933 |
14 Nov 14 |
olle |
1026 |
json.put("message", "Ok"); |
2933 |
14 Nov 14 |
olle |
1027 |
} |
2933 |
14 Nov 14 |
olle |
1028 |
if (jsonMessages.size() == 0) jsonMessages.add("Ok"); |
2933 |
14 Nov 14 |
olle |
1029 |
json.put("messages", jsonMessages); |
2933 |
14 Nov 14 |
olle |
1030 |
return json; |
2933 |
14 Nov 14 |
olle |
1031 |
} |
2933 |
14 Nov 14 |
olle |
1032 |
|
2933 |
14 Nov 14 |
olle |
1033 |
@SuppressWarnings("unchecked") |
2933 |
14 Nov 14 |
olle |
1034 |
public JSONObject checkActiveProject(DbControl dc) |
2933 |
14 Nov 14 |
olle |
1035 |
{ |
2933 |
14 Nov 14 |
olle |
1036 |
JSONObject json = new JSONObject(); |
2933 |
14 Nov 14 |
olle |
1037 |
JSONArray jsonMessages = new JSONArray(); |
2933 |
14 Nov 14 |
olle |
1038 |
json.put("itemType", Item.PROJECT.name()); |
2933 |
14 Nov 14 |
olle |
1039 |
|
2933 |
14 Nov 14 |
olle |
1040 |
int projectId = dc.getSessionControl().getActiveProjectId(); |
2933 |
14 Nov 14 |
olle |
1041 |
if (projectId == 0) |
2933 |
14 Nov 14 |
olle |
1042 |
{ |
2933 |
14 Nov 14 |
olle |
1043 |
json.put("status", "warning"); |
2933 |
14 Nov 14 |
olle |
1044 |
json.put("name", "not selected"); |
2933 |
14 Nov 14 |
olle |
1045 |
jsonMessages.add("No active project"); |
2933 |
14 Nov 14 |
olle |
1046 |
} |
2933 |
14 Nov 14 |
olle |
1047 |
else |
2933 |
14 Nov 14 |
olle |
1048 |
{ |
2933 |
14 Nov 14 |
olle |
1049 |
Project p = Project.getById(dc, projectId); |
2933 |
14 Nov 14 |
olle |
1050 |
json.put("name", p.getName()); |
2933 |
14 Nov 14 |
olle |
1051 |
json.put("id", projectId); |
2933 |
14 Nov 14 |
olle |
1052 |
json.put("status", "ok"); |
2933 |
14 Nov 14 |
olle |
1053 |
} |
2933 |
14 Nov 14 |
olle |
1054 |
if (jsonMessages.size() == 0) jsonMessages.add("Ok"); |
2933 |
14 Nov 14 |
olle |
1055 |
json.put("messages", jsonMessages); |
2933 |
14 Nov 14 |
olle |
1056 |
return json; |
2933 |
14 Nov 14 |
olle |
1057 |
} |
2933 |
14 Nov 14 |
olle |
1058 |
|
2933 |
14 Nov 14 |
olle |
1059 |
/** |
2933 |
14 Nov 14 |
olle |
Create a subtype with the given options. The subtype is created in |
2933 |
14 Nov 14 |
olle |
a separate transaction. |
2933 |
14 Nov 14 |
olle |
@since 2.0 |
2933 |
14 Nov 14 |
olle |
1063 |
*/ |
2933 |
14 Nov 14 |
olle |
1064 |
public ItemSubtype createSubtype(SessionControl sc, Subtype def, Datafiletype fileType, Subtype... relatedTo) |
2933 |
14 Nov 14 |
olle |
1065 |
{ |
2933 |
14 Nov 14 |
olle |
1066 |
ItemSubtype subtype = null; |
2933 |
14 Nov 14 |
olle |
1067 |
DbControl dc = sc.newDbControl(); |
2933 |
14 Nov 14 |
olle |
1068 |
try |
2933 |
14 Nov 14 |
olle |
1069 |
{ |
2933 |
14 Nov 14 |
olle |
1070 |
subtype = ItemSubtype.getNew(dc, def.getMainType()); |
2933 |
14 Nov 14 |
olle |
1071 |
subtype.setName(def.getName()); |
2933 |
14 Nov 14 |
olle |
1072 |
subtype.setPushAnnotations(def.getPushAnnotations()); |
2933 |
14 Nov 14 |
olle |
1073 |
|
2933 |
14 Nov 14 |
olle |
1074 |
if (fileType != null) |
2933 |
14 Nov 14 |
olle |
1075 |
{ |
2933 |
14 Nov 14 |
olle |
1076 |
ItemSubtypeFileType ft = subtype.getAssociatedDataFileType(fileType.load(dc), true); |
2933 |
14 Nov 14 |
olle |
1077 |
ft.setRequired(fileType.isRequired()); |
2933 |
14 Nov 14 |
olle |
1078 |
ft.setAllowMultiple(fileType.getAllowMultiple()); |
2933 |
14 Nov 14 |
olle |
1079 |
} |
2933 |
14 Nov 14 |
olle |
1080 |
|
2933 |
14 Nov 14 |
olle |
1081 |
if (relatedTo != null) |
2933 |
14 Nov 14 |
olle |
1082 |
{ |
2933 |
14 Nov 14 |
olle |
1083 |
for (Subtype related : relatedTo) |
2933 |
14 Nov 14 |
olle |
1084 |
{ |
2933 |
14 Nov 14 |
olle |
1085 |
ItemSubtype r = related.get(dc); |
2933 |
14 Nov 14 |
olle |
1086 |
if (r != null) subtype.setRelatedSubtype(r); |
2933 |
14 Nov 14 |
olle |
1087 |
} |
2933 |
14 Nov 14 |
olle |
1088 |
} |
2933 |
14 Nov 14 |
olle |
1089 |
|
2933 |
14 Nov 14 |
olle |
1090 |
dc.saveItem(subtype); |
2933 |
14 Nov 14 |
olle |
1091 |
dc.commit(); |
2933 |
14 Nov 14 |
olle |
1092 |
} |
2933 |
14 Nov 14 |
olle |
1093 |
finally |
2933 |
14 Nov 14 |
olle |
1094 |
{ |
2933 |
14 Nov 14 |
olle |
1095 |
if (dc != null) dc.close(); |
2933 |
14 Nov 14 |
olle |
1096 |
} |
2933 |
14 Nov 14 |
olle |
1097 |
return subtype; |
2933 |
14 Nov 14 |
olle |
1098 |
} |
2933 |
14 Nov 14 |
olle |
1099 |
|
2933 |
14 Nov 14 |
olle |
1100 |
/** |
2933 |
14 Nov 14 |
olle |
Check for an existing item subtype with the given options. |
2933 |
14 Nov 14 |
olle |
A JSONObject is returned with the result. The following |
2933 |
14 Nov 14 |
olle |
keys are used: |
2933 |
14 Nov 14 |
olle |
<ul> |
2933 |
14 Nov 14 |
olle |
<li>itemType: ITEMSUBTYPE |
2933 |
14 Nov 14 |
olle |
<li>name: The name of the subtype |
2933 |
14 Nov 14 |
olle |
<li>id: The id of the subtype if it exists |
2933 |
14 Nov 14 |
olle |
<li>mainType: The main item type that the subtype applies to |
2933 |
14 Nov 14 |
olle |
<li>status: ok, error, or missing |
2933 |
14 Nov 14 |
olle |
<li>message: A descriptive message in case of an error |
2933 |
14 Nov 14 |
olle |
</ul |
2933 |
14 Nov 14 |
olle |
@since 2.0 |
2933 |
14 Nov 14 |
olle |
1113 |
*/ |
2933 |
14 Nov 14 |
olle |
1114 |
@SuppressWarnings("unchecked") |
2933 |
14 Nov 14 |
olle |
1115 |
public JSONObject checkSubtype(DbControl dc, Subtype subtype, |
2933 |
14 Nov 14 |
olle |
1116 |
Datafiletype fileType, boolean createIfMissing, Subtype... relatedTo) |
2933 |
14 Nov 14 |
olle |
1117 |
{ |
2933 |
14 Nov 14 |
olle |
1118 |
|
2933 |
14 Nov 14 |
olle |
1119 |
JSONObject json = new JSONObject(); |
2933 |
14 Nov 14 |
olle |
1120 |
JSONArray jsonMessages = new JSONArray(); |
2933 |
14 Nov 14 |
olle |
1121 |
json.put("itemType", Item.ITEMSUBTYPE.name()); |
2933 |
14 Nov 14 |
olle |
1122 |
json.put("name", subtype.getName()); |
2933 |
14 Nov 14 |
olle |
1123 |
json.put("mainType", subtype.getMainType().name()); |
2933 |
14 Nov 14 |
olle |
1124 |
|
2933 |
14 Nov 14 |
olle |
1125 |
List<ItemSubtype> result = subtype.list(dc); |
2933 |
14 Nov 14 |
olle |
1126 |
if (result.size() == 0) |
2933 |
14 Nov 14 |
olle |
1127 |
{ |
2933 |
14 Nov 14 |
olle |
1128 |
if (createIfMissing) |
2933 |
14 Nov 14 |
olle |
1129 |
{ |
2933 |
14 Nov 14 |
olle |
1130 |
ItemSubtype s = createSubtype(dc.getSessionControl(), subtype, fileType, relatedTo); |
2933 |
14 Nov 14 |
olle |
1131 |
json.put("id", s.getId()); |
2933 |
14 Nov 14 |
olle |
1132 |
json.put("status", "ok"); |
2933 |
14 Nov 14 |
olle |
1133 |
jsonMessages.add("Created"); |
2933 |
14 Nov 14 |
olle |
1134 |
} |
2933 |
14 Nov 14 |
olle |
1135 |
else |
2933 |
14 Nov 14 |
olle |
1136 |
{ |
2933 |
14 Nov 14 |
olle |
1137 |
json.put("status", "missing"); |
2933 |
14 Nov 14 |
olle |
1138 |
jsonMessages.add("Not found"); |
2933 |
14 Nov 14 |
olle |
1139 |
} |
2933 |
14 Nov 14 |
olle |
1140 |
} |
2933 |
14 Nov 14 |
olle |
1141 |
else if (result.size() > 1) |
2933 |
14 Nov 14 |
olle |
1142 |
{ |
2933 |
14 Nov 14 |
olle |
1143 |
json.put("status", "error"); |
2933 |
14 Nov 14 |
olle |
1144 |
jsonMessages.add("Found > 1 subtype"); |
2933 |
14 Nov 14 |
olle |
1145 |
} |
2933 |
14 Nov 14 |
olle |
1146 |
else |
2933 |
14 Nov 14 |
olle |
1147 |
{ |
2933 |
14 Nov 14 |
olle |
1148 |
ItemSubtype s = result.get(0); |
2933 |
14 Nov 14 |
olle |
1149 |
json.put("id", s.getId()); |
2933 |
14 Nov 14 |
olle |
1150 |
json.put("status", "ok"); // For now -- more checks below |
2933 |
14 Nov 14 |
olle |
1151 |
|
2933 |
14 Nov 14 |
olle |
1152 |
if (subtype.getPushAnnotations() != s.getPushAnnotations()) |
2933 |
14 Nov 14 |
olle |
1153 |
{ |
2933 |
14 Nov 14 |
olle |
1154 |
json.put("status", "error"); |
2933 |
14 Nov 14 |
olle |
1155 |
jsonMessages.add("Should have 'Push annotations to parent'="+subtype.getPushAnnotations()); |
2933 |
14 Nov 14 |
olle |
1156 |
} |
2933 |
14 Nov 14 |
olle |
1157 |
|
2933 |
14 Nov 14 |
olle |
1158 |
if (fileType != null) |
2933 |
14 Nov 14 |
olle |
1159 |
{ |
2933 |
14 Nov 14 |
olle |
1160 |
DataFileType dft = fileType.get(dc); |
2933 |
14 Nov 14 |
olle |
1161 |
if (dft != null && !s.isAssociatedDataFileType(dft)) |
2933 |
14 Nov 14 |
olle |
1162 |
{ |
2933 |
14 Nov 14 |
olle |
1163 |
if (createIfMissing) |
2933 |
14 Nov 14 |
olle |
1164 |
{ |
2933 |
14 Nov 14 |
olle |
1165 |
ItemSubtypeFileType ft = s.getAssociatedDataFileType(dft, true); |
2933 |
14 Nov 14 |
olle |
1166 |
ft.setRequired(fileType.isRequired()); |
2933 |
14 Nov 14 |
olle |
1167 |
ft.setAllowMultiple(fileType.getAllowMultiple()); |
2933 |
14 Nov 14 |
olle |
1168 |
jsonMessages.add("Fixed"); |
2933 |
14 Nov 14 |
olle |
1169 |
} |
2933 |
14 Nov 14 |
olle |
1170 |
else |
2933 |
14 Nov 14 |
olle |
1171 |
{ |
2933 |
14 Nov 14 |
olle |
1172 |
json.put("status", "incomplete"); |
2933 |
14 Nov 14 |
olle |
1173 |
jsonMessages.add("Should be related to '" + fileType.getName() + " file type"); |
2933 |
14 Nov 14 |
olle |
1174 |
} |
2933 |
14 Nov 14 |
olle |
1175 |
} |
2933 |
14 Nov 14 |
olle |
1176 |
} |
2933 |
14 Nov 14 |
olle |
1177 |
|
2933 |
14 Nov 14 |
olle |
1178 |
if (relatedTo != null) |
2933 |
14 Nov 14 |
olle |
1179 |
{ |
2933 |
14 Nov 14 |
olle |
1180 |
for (Subtype related : relatedTo) |
2933 |
14 Nov 14 |
olle |
1181 |
{ |
2933 |
14 Nov 14 |
olle |
1182 |
ItemSubtype r = s.getRelatedSubtype(related.getMainType()); |
2933 |
14 Nov 14 |
olle |
1183 |
if (r == null) |
2933 |
14 Nov 14 |
olle |
1184 |
{ |
2933 |
14 Nov 14 |
olle |
1185 |
r = related.get(dc); |
2933 |
14 Nov 14 |
olle |
1186 |
if (createIfMissing && r != null) |
2933 |
14 Nov 14 |
olle |
1187 |
{ |
2933 |
14 Nov 14 |
olle |
1188 |
s.setRelatedSubtype(r); |
2933 |
14 Nov 14 |
olle |
1189 |
jsonMessages.add("Fixed"); |
2933 |
14 Nov 14 |
olle |
1190 |
} |
2933 |
14 Nov 14 |
olle |
1191 |
else |
2933 |
14 Nov 14 |
olle |
1192 |
{ |
2933 |
14 Nov 14 |
olle |
1193 |
json.put("status", "incomplete"); |
2933 |
14 Nov 14 |
olle |
1194 |
jsonMessages.add("Should be related to '" + related.getName() + "' [" + related.getMainType().name() + "]"); |
2933 |
14 Nov 14 |
olle |
1195 |
} |
2933 |
14 Nov 14 |
olle |
1196 |
} |
2933 |
14 Nov 14 |
olle |
1197 |
else if (!r.getName().equals(related.getName())) |
2933 |
14 Nov 14 |
olle |
1198 |
{ |
2933 |
14 Nov 14 |
olle |
1199 |
if (createIfMissing) |
2933 |
14 Nov 14 |
olle |
1200 |
{ |
2933 |
14 Nov 14 |
olle |
1201 |
s.setRelatedSubtype(related.get(dc)); |
2933 |
14 Nov 14 |
olle |
1202 |
jsonMessages.add("Fixed"); |
2933 |
14 Nov 14 |
olle |
1203 |
} |
2933 |
14 Nov 14 |
olle |
1204 |
else |
2933 |
14 Nov 14 |
olle |
1205 |
{ |
2933 |
14 Nov 14 |
olle |
1206 |
json.put("status", "incomplete"); |
2933 |
14 Nov 14 |
olle |
1207 |
jsonMessages.add("Should be related to: '" + |
2933 |
14 Nov 14 |
olle |
1208 |
related.getName() + "' not '" + r.getName() + "'"); |
2933 |
14 Nov 14 |
olle |
1209 |
} |
2933 |
14 Nov 14 |
olle |
1210 |
} |
2933 |
14 Nov 14 |
olle |
1211 |
} |
2933 |
14 Nov 14 |
olle |
1212 |
} |
2933 |
14 Nov 14 |
olle |
1213 |
|
2933 |
14 Nov 14 |
olle |
1214 |
} |
2933 |
14 Nov 14 |
olle |
1215 |
if (jsonMessages.size() == 0) jsonMessages.add("Ok"); |
2933 |
14 Nov 14 |
olle |
1216 |
json.put("messages", jsonMessages); |
2933 |
14 Nov 14 |
olle |
1217 |
return json; |
2933 |
14 Nov 14 |
olle |
1218 |
|
2933 |
14 Nov 14 |
olle |
1219 |
} |
2933 |
14 Nov 14 |
olle |
1220 |
|
2933 |
14 Nov 14 |
olle |
1221 |
/** |
2933 |
14 Nov 14 |
olle |
Create a Tag with the given options. The tag is created in |
2933 |
14 Nov 14 |
olle |
a separate transaction. |
2933 |
14 Nov 14 |
olle |
@since 2.12 |
2933 |
14 Nov 14 |
olle |
1225 |
*/ |
2933 |
14 Nov 14 |
olle |
1226 |
public Tag createTag(SessionControl sc, String name, Subtype subtype, String description, PermissionOptions permissions) |
2933 |
14 Nov 14 |
olle |
1227 |
{ |
2933 |
14 Nov 14 |
olle |
1228 |
Tag tag = null; |
2933 |
14 Nov 14 |
olle |
1229 |
DbControl dc = sc.newDbControl(); |
2933 |
14 Nov 14 |
olle |
1230 |
try |
2933 |
14 Nov 14 |
olle |
1231 |
{ |
2933 |
14 Nov 14 |
olle |
1232 |
tag = Tag.getNew(dc); |
2933 |
14 Nov 14 |
olle |
1233 |
tag.setName(name); |
2933 |
14 Nov 14 |
olle |
1234 |
tag.setItemSubtype(subtype.get(dc)); |
2933 |
14 Nov 14 |
olle |
1235 |
tag.setDescription(description); |
2933 |
14 Nov 14 |
olle |
1236 |
if (permissions != null) permissions.applyPermissions(tag); |
2933 |
14 Nov 14 |
olle |
1237 |
dc.saveItem(tag); |
2933 |
14 Nov 14 |
olle |
1238 |
dc.commit(); |
2933 |
14 Nov 14 |
olle |
1239 |
} |
2933 |
14 Nov 14 |
olle |
1240 |
finally |
2933 |
14 Nov 14 |
olle |
1241 |
{ |
2933 |
14 Nov 14 |
olle |
1242 |
if (dc != null) dc.close(); |
2933 |
14 Nov 14 |
olle |
1243 |
} |
2933 |
14 Nov 14 |
olle |
1244 |
return tag; |
2933 |
14 Nov 14 |
olle |
1245 |
} |
2933 |
14 Nov 14 |
olle |
1246 |
|
2933 |
14 Nov 14 |
olle |
1247 |
|
2933 |
14 Nov 14 |
olle |
1248 |
/** |
2933 |
14 Nov 14 |
olle |
Check for an existing tag with the given options. |
2933 |
14 Nov 14 |
olle |
A JSONObject is returned with the result. The following |
2933 |
14 Nov 14 |
olle |
keys are used: |
2933 |
14 Nov 14 |
olle |
<ul> |
2933 |
14 Nov 14 |
olle |
<li>itemType: TAG |
2933 |
14 Nov 14 |
olle |
<li>name: The name of the tag |
2933 |
14 Nov 14 |
olle |
<li>id: The id of the subtype if it exists |
2933 |
14 Nov 14 |
olle |
<li>status: ok, error, or missing |
2933 |
14 Nov 14 |
olle |
<li>message: A descriptive message in case of an error |
2933 |
14 Nov 14 |
olle |
</ul> |
3449 |
28 Jul 15 |
olle |
@since 1.3 |
2933 |
14 Nov 14 |
olle |
1260 |
*/ |
2933 |
14 Nov 14 |
olle |
1261 |
@SuppressWarnings("unchecked") |
2933 |
14 Nov 14 |
olle |
1262 |
public JSONObject checkTag(DbControl dc, String name, Subtype subtype, String description, PermissionOptions permissions, boolean createIfMissing) |
2933 |
14 Nov 14 |
olle |
1263 |
{ |
3449 |
28 Jul 15 |
olle |
1264 |
System.out.println(new Date() + " InstallServlet::checkTag(): name = " + name + " subtype = " + subtype + " description = " + description + " createIfMissing = " + createIfMissing); |
2933 |
14 Nov 14 |
olle |
1265 |
JSONObject json = new JSONObject(); |
2933 |
14 Nov 14 |
olle |
1266 |
JSONArray jsonMessages = new JSONArray(); |
2933 |
14 Nov 14 |
olle |
1267 |
json.put("itemType", Item.TAG.name()); |
2933 |
14 Nov 14 |
olle |
1268 |
json.put("name", name); |
2933 |
14 Nov 14 |
olle |
1269 |
|
2933 |
14 Nov 14 |
olle |
1270 |
ItemQuery<Tag> query = Tag.getQuery(); |
2933 |
14 Nov 14 |
olle |
1271 |
query.restrict( |
2933 |
14 Nov 14 |
olle |
1272 |
Restrictions.eq( |
2933 |
14 Nov 14 |
olle |
1273 |
Hql.property("name"), |
2933 |
14 Nov 14 |
olle |
1274 |
Expressions.parameter("name", name, Type.STRING) |
2933 |
14 Nov 14 |
olle |
1275 |
)); |
2933 |
14 Nov 14 |
olle |
1276 |
query.include(Include.ALL); |
2933 |
14 Nov 14 |
olle |
1277 |
List<Tag> result = query.list(dc); |
3449 |
28 Jul 15 |
olle |
1278 |
System.out.println(new Date() + " InstallServlet::checkTag(): result.size() = " + result.size()); |
2933 |
14 Nov 14 |
olle |
1279 |
if (result.size() == 0) |
2933 |
14 Nov 14 |
olle |
1280 |
{ |
2933 |
14 Nov 14 |
olle |
1281 |
if (createIfMissing) |
2933 |
14 Nov 14 |
olle |
1282 |
{ |
2933 |
14 Nov 14 |
olle |
1283 |
Tag t = createTag(dc.getSessionControl(), name, subtype, description, permissions); |
2933 |
14 Nov 14 |
olle |
1284 |
json.put("id", t.getId()); |
2933 |
14 Nov 14 |
olle |
1285 |
json.put("status", "ok"); |
2933 |
14 Nov 14 |
olle |
1286 |
jsonMessages.add("Created"); |
2933 |
14 Nov 14 |
olle |
1287 |
} |
2933 |
14 Nov 14 |
olle |
1288 |
else |
2933 |
14 Nov 14 |
olle |
1289 |
{ |
2933 |
14 Nov 14 |
olle |
1290 |
json.put("status", "missing"); |
2933 |
14 Nov 14 |
olle |
1291 |
jsonMessages.add("Not found"); |
2933 |
14 Nov 14 |
olle |
1292 |
} |
2933 |
14 Nov 14 |
olle |
1293 |
} |
2933 |
14 Nov 14 |
olle |
1294 |
else if (result.size() > 1) |
2933 |
14 Nov 14 |
olle |
1295 |
{ |
2933 |
14 Nov 14 |
olle |
1296 |
json.put("status", "error"); |
2933 |
14 Nov 14 |
olle |
1297 |
jsonMessages.add("Found > 1 tag"); |
2933 |
14 Nov 14 |
olle |
1298 |
} |
2933 |
14 Nov 14 |
olle |
1299 |
else |
2933 |
14 Nov 14 |
olle |
1300 |
{ |
2933 |
14 Nov 14 |
olle |
1301 |
Tag t = result.get(0); |
2933 |
14 Nov 14 |
olle |
1302 |
json.put("id", t.getId()); |
2933 |
14 Nov 14 |
olle |
1303 |
json.put("status", "ok"); // For now -- more checks below |
2933 |
14 Nov 14 |
olle |
1304 |
|
2933 |
14 Nov 14 |
olle |
1305 |
if (!subtype.load(dc).equals(t.getItemSubtype())) |
2933 |
14 Nov 14 |
olle |
1306 |
{ |
2933 |
14 Nov 14 |
olle |
1307 |
json.put("status", "error"); |
2933 |
14 Nov 14 |
olle |
1308 |
jsonMessages.add("Should have '" + subtype.getName() + "' as subtype."); |
2933 |
14 Nov 14 |
olle |
1309 |
} |
2933 |
14 Nov 14 |
olle |
1310 |
|
2933 |
14 Nov 14 |
olle |
1311 |
if (permissions != null && !permissions.checkPermissions(t)) |
2933 |
14 Nov 14 |
olle |
1312 |
{ |
2933 |
14 Nov 14 |
olle |
1313 |
if (createIfMissing) |
2933 |
14 Nov 14 |
olle |
1314 |
{ |
2933 |
14 Nov 14 |
olle |
1315 |
permissions.applyPermissions(t); |
2933 |
14 Nov 14 |
olle |
1316 |
if (jsonMessages.size() == 0) jsonMessages.add("Fixed"); |
2933 |
14 Nov 14 |
olle |
1317 |
} |
2933 |
14 Nov 14 |
olle |
1318 |
else |
2933 |
14 Nov 14 |
olle |
1319 |
{ |
2933 |
14 Nov 14 |
olle |
1320 |
json.put("status", "incomplete"); |
2933 |
14 Nov 14 |
olle |
1321 |
jsonMessages.add(permissions.getMessage()); |
2933 |
14 Nov 14 |
olle |
1322 |
} |
2933 |
14 Nov 14 |
olle |
1323 |
} |
2933 |
14 Nov 14 |
olle |
1324 |
AnnotationType barcodeSequenceType = Annotationtype.BARCODE_SEQUENCE.get(dc); |
3449 |
28 Jul 15 |
olle |
1325 |
System.out.println(new Date() + " InstallServlet::checkTag(): barcodeSequenceType = " + barcodeSequenceType); |
2933 |
14 Nov 14 |
olle |
1326 |
if (barcodeSequenceType != null) |
2933 |
14 Nov 14 |
olle |
1327 |
{ |
2933 |
14 Nov 14 |
olle |
1328 |
String barcodeSequence = (String)Annotationtype.BARCODE_SEQUENCE.getAnnotationValue(dc, t); |
3449 |
28 Jul 15 |
olle |
1329 |
System.out.println(new Date() + " InstallServlet::checkTag(): (1) barcodeSequence = " + barcodeSequence); |
2933 |
14 Nov 14 |
olle |
1330 |
if (barcodeSequence == null) |
2933 |
14 Nov 14 |
olle |
1331 |
{ |
3449 |
28 Jul 15 |
olle |
1332 |
System.out.println(new Date() + " InstallServlet::checkTag(): createIfMissing = " + createIfMissing); |
2933 |
14 Nov 14 |
olle |
1333 |
if (createIfMissing) |
2933 |
14 Nov 14 |
olle |
1334 |
{ |
2933 |
14 Nov 14 |
olle |
1335 |
barcodeSequence = lookupSequence(name); |
3449 |
28 Jul 15 |
olle |
1336 |
System.out.println(new Date() + " InstallServlet::checkTag(): (2) barcodeSequence = " + barcodeSequence); |
2933 |
14 Nov 14 |
olle |
1337 |
Annotationtype.BARCODE_SEQUENCE.setAnnotationValue(dc, t, barcodeSequence); |
2933 |
14 Nov 14 |
olle |
1338 |
if (jsonMessages.size() == 0) jsonMessages.add("Fixed"); |
2933 |
14 Nov 14 |
olle |
1339 |
} |
2933 |
14 Nov 14 |
olle |
1340 |
else |
2933 |
14 Nov 14 |
olle |
1341 |
{ |
2933 |
14 Nov 14 |
olle |
1342 |
json.put("status", "incomplete"); |
2933 |
14 Nov 14 |
olle |
1343 |
jsonMessages.add("Missing BarcodeSequence annotation"); |
2933 |
14 Nov 14 |
olle |
1344 |
} |
2933 |
14 Nov 14 |
olle |
1345 |
} |
2933 |
14 Nov 14 |
olle |
1346 |
} |
2933 |
14 Nov 14 |
olle |
1347 |
} |
2933 |
14 Nov 14 |
olle |
1348 |
if (jsonMessages.size() == 0) jsonMessages.add("Ok"); |
2933 |
14 Nov 14 |
olle |
1349 |
json.put("messages", jsonMessages); |
2933 |
14 Nov 14 |
olle |
1350 |
return json; |
2933 |
14 Nov 14 |
olle |
1351 |
|
2933 |
14 Nov 14 |
olle |
1352 |
} |
2933 |
14 Nov 14 |
olle |
1353 |
|
2933 |
14 Nov 14 |
olle |
1354 |
/** |
2933 |
14 Nov 14 |
olle |
Create an annotation type category with the given options. The category |
2933 |
14 Nov 14 |
olle |
is created in a separate transaction. |
2933 |
14 Nov 14 |
olle |
@since 2.5 |
2933 |
14 Nov 14 |
olle |
1358 |
*/ |
2933 |
14 Nov 14 |
olle |
1359 |
public AnnotationTypeCategory createAnnotationTypeCategory(SessionControl sc, |
2933 |
14 Nov 14 |
olle |
1360 |
Subtype subtype) |
2933 |
14 Nov 14 |
olle |
1361 |
{ |
2933 |
14 Nov 14 |
olle |
1362 |
AnnotationTypeCategory cat = null; |
2933 |
14 Nov 14 |
olle |
1363 |
DbControl dc = sc.newDbControl(); |
2933 |
14 Nov 14 |
olle |
1364 |
try |
2933 |
14 Nov 14 |
olle |
1365 |
{ |
2933 |
14 Nov 14 |
olle |
1366 |
cat = AnnotationTypeCategory.getNew(dc); |
2933 |
14 Nov 14 |
olle |
1367 |
cat.setName(subtype.getName()); |
2933 |
14 Nov 14 |
olle |
1368 |
dc.saveItem(cat); |
2933 |
14 Nov 14 |
olle |
1369 |
dc.commit(); |
2933 |
14 Nov 14 |
olle |
1370 |
} |
2933 |
14 Nov 14 |
olle |
1371 |
finally |
2933 |
14 Nov 14 |
olle |
1372 |
{ |
2933 |
14 Nov 14 |
olle |
1373 |
if (dc != null) dc.close(); |
2933 |
14 Nov 14 |
olle |
1374 |
} |
2933 |
14 Nov 14 |
olle |
1375 |
return cat; |
2933 |
14 Nov 14 |
olle |
1376 |
} |
2933 |
14 Nov 14 |
olle |
1377 |
|
2933 |
14 Nov 14 |
olle |
1378 |
/** |
2933 |
14 Nov 14 |
olle |
Check for an existing annotation type category. |
2933 |
14 Nov 14 |
olle |
A JSONObject is returned with the result. The following |
2933 |
14 Nov 14 |
olle |
keys are used: |
2933 |
14 Nov 14 |
olle |
<ul> |
2933 |
14 Nov 14 |
olle |
<li>itemType: ANNOTATIONTYPECATEGORY |
2933 |
14 Nov 14 |
olle |
<li>name: The name of the subtype |
2933 |
14 Nov 14 |
olle |
<li>id: The id of the subtype if it exists |
2933 |
14 Nov 14 |
olle |
<li>mainType: The main item type that the subtype applies to |
2933 |
14 Nov 14 |
olle |
<li>status: ok, error, or missing |
2933 |
14 Nov 14 |
olle |
<li>message: A descriptive message in case of an error |
2933 |
14 Nov 14 |
olle |
</ul> |
2933 |
14 Nov 14 |
olle |
@since 2.5 |
2933 |
14 Nov 14 |
olle |
1391 |
*/ |
2933 |
14 Nov 14 |
olle |
1392 |
@SuppressWarnings("unchecked") |
2933 |
14 Nov 14 |
olle |
1393 |
public JSONObject checkAnnotationTypeCategory(DbControl dc, Subtype subtype, |
2933 |
14 Nov 14 |
olle |
1394 |
boolean createIfMissing, Annotationtype... annotationTypes) |
2933 |
14 Nov 14 |
olle |
1395 |
{ |
2933 |
14 Nov 14 |
olle |
1396 |
|
2933 |
14 Nov 14 |
olle |
1397 |
JSONObject json = new JSONObject(); |
2933 |
14 Nov 14 |
olle |
1398 |
JSONArray jsonMessages = new JSONArray(); |
2933 |
14 Nov 14 |
olle |
1399 |
json.put("itemType", Item.ANNOTATIONTYPECATEGORY.name()); |
2933 |
14 Nov 14 |
olle |
1400 |
json.put("name", subtype.getName()); |
2933 |
14 Nov 14 |
olle |
1401 |
|
2933 |
14 Nov 14 |
olle |
1402 |
List<AnnotationTypeCategory> result = Meludi.listAnnotationTypeCategories(dc, subtype.getName()); |
2933 |
14 Nov 14 |
olle |
1403 |
if (result.size() == 0) |
2933 |
14 Nov 14 |
olle |
1404 |
{ |
2933 |
14 Nov 14 |
olle |
1405 |
if (createIfMissing) |
2933 |
14 Nov 14 |
olle |
1406 |
{ |
2933 |
14 Nov 14 |
olle |
1407 |
AnnotationTypeCategory cat = createAnnotationTypeCategory(dc.getSessionControl(), subtype); |
2933 |
14 Nov 14 |
olle |
// Add the category to annotation types in the original transaction |
2933 |
14 Nov 14 |
olle |
1409 |
if (annotationTypes != null) |
2933 |
14 Nov 14 |
olle |
1410 |
{ |
2933 |
14 Nov 14 |
olle |
1411 |
for (Annotationtype annotationType : annotationTypes) |
2933 |
14 Nov 14 |
olle |
1412 |
{ |
2933 |
14 Nov 14 |
olle |
1413 |
AnnotationType at = annotationType.load(dc); |
2933 |
14 Nov 14 |
olle |
1414 |
at.addCategory(cat); |
2933 |
14 Nov 14 |
olle |
1415 |
} |
2933 |
14 Nov 14 |
olle |
1416 |
} |
2933 |
14 Nov 14 |
olle |
1417 |
|
2933 |
14 Nov 14 |
olle |
1418 |
json.put("id", cat.getId()); |
2933 |
14 Nov 14 |
olle |
1419 |
json.put("status", "ok"); |
2933 |
14 Nov 14 |
olle |
1420 |
jsonMessages.add("Created"); |
2933 |
14 Nov 14 |
olle |
1421 |
} |
2933 |
14 Nov 14 |
olle |
1422 |
else |
2933 |
14 Nov 14 |
olle |
1423 |
{ |
2933 |
14 Nov 14 |
olle |
1424 |
json.put("status", "missing"); |
2933 |
14 Nov 14 |
olle |
1425 |
jsonMessages.add("Not found"); |
2933 |
14 Nov 14 |
olle |
1426 |
} |
2933 |
14 Nov 14 |
olle |
1427 |
} |
2933 |
14 Nov 14 |
olle |
1428 |
else if (result.size() > 1) |
2933 |
14 Nov 14 |
olle |
1429 |
{ |
2933 |
14 Nov 14 |
olle |
1430 |
json.put("status", "error"); |
2933 |
14 Nov 14 |
olle |
1431 |
jsonMessages.add("Found > 1 annotation type category"); |
2933 |
14 Nov 14 |
olle |
1432 |
} |
2933 |
14 Nov 14 |
olle |
1433 |
else |
2933 |
14 Nov 14 |
olle |
1434 |
{ |
2933 |
14 Nov 14 |
olle |
1435 |
AnnotationTypeCategory cat = result.get(0); |
2933 |
14 Nov 14 |
olle |
1436 |
json.put("id", cat.getId()); |
2933 |
14 Nov 14 |
olle |
1437 |
json.put("status", "ok"); // For now -- more checks below |
2933 |
14 Nov 14 |
olle |
1438 |
|
2933 |
14 Nov 14 |
olle |
1439 |
if (annotationTypes != null) |
2933 |
14 Nov 14 |
olle |
1440 |
{ |
2933 |
14 Nov 14 |
olle |
1441 |
for (Annotationtype annotationType : annotationTypes) |
2933 |
14 Nov 14 |
olle |
1442 |
{ |
2933 |
14 Nov 14 |
olle |
1443 |
List<AnnotationType> list = annotationType.list(dc); // Use list() to avoid throwing exceptions if the annotation type doesn't exists yet |
2933 |
14 Nov 14 |
olle |
1444 |
AnnotationType at = list.size() == 1 ? list.get(0) : null; |
2933 |
14 Nov 14 |
olle |
1445 |
if (at != null && !at.isMember(cat)) |
2933 |
14 Nov 14 |
olle |
1446 |
{ |
2933 |
14 Nov 14 |
olle |
1447 |
if (createIfMissing) |
2933 |
14 Nov 14 |
olle |
1448 |
{ |
2933 |
14 Nov 14 |
olle |
1449 |
at.addCategory(cat); |
2933 |
14 Nov 14 |
olle |
1450 |
if (jsonMessages.size() == 0) jsonMessages.add("Fixed"); |
2933 |
14 Nov 14 |
olle |
1451 |
} |
2933 |
14 Nov 14 |
olle |
1452 |
else |
2933 |
14 Nov 14 |
olle |
1453 |
{ |
2933 |
14 Nov 14 |
olle |
1454 |
json.put("status", "incomplete"); |
2933 |
14 Nov 14 |
olle |
1455 |
jsonMessages.add("Not linked with: " + annotationType.getName()); |
2933 |
14 Nov 14 |
olle |
1456 |
} |
2933 |
14 Nov 14 |
olle |
1457 |
} |
2933 |
14 Nov 14 |
olle |
1458 |
} |
2933 |
14 Nov 14 |
olle |
1459 |
} |
2933 |
14 Nov 14 |
olle |
1460 |
} |
2933 |
14 Nov 14 |
olle |
1461 |
if (jsonMessages.size() == 0) jsonMessages.add("Ok"); |
2933 |
14 Nov 14 |
olle |
1462 |
json.put("messages", jsonMessages); |
2933 |
14 Nov 14 |
olle |
1463 |
return json; |
2933 |
14 Nov 14 |
olle |
1464 |
|
2933 |
14 Nov 14 |
olle |
1465 |
} |
2933 |
14 Nov 14 |
olle |
1466 |
|
2933 |
14 Nov 14 |
olle |
1467 |
|
2933 |
14 Nov 14 |
olle |
1468 |
/** |
2933 |
14 Nov 14 |
olle |
Create a bioplate event type with the given options. The bioplate event type is created in |
2933 |
14 Nov 14 |
olle |
a separate transaction. |
2933 |
14 Nov 14 |
olle |
@since 2.12 |
2933 |
14 Nov 14 |
olle |
1472 |
*/ |
2933 |
14 Nov 14 |
olle |
1473 |
public BioPlateEventType createBioPlateEventType(SessionControl sc, BioplateEventtype def) |
2933 |
14 Nov 14 |
olle |
1474 |
{ |
2933 |
14 Nov 14 |
olle |
1475 |
BioPlateEventType eventType = null; |
2933 |
14 Nov 14 |
olle |
1476 |
DbControl dc = sc.newDbControl(); |
2933 |
14 Nov 14 |
olle |
1477 |
try |
2933 |
14 Nov 14 |
olle |
1478 |
{ |
2933 |
14 Nov 14 |
olle |
1479 |
eventType = BioPlateEventType.getNew(dc, def.getSystemId()); |
2933 |
14 Nov 14 |
olle |
1480 |
eventType.setName(def.getName()); |
2933 |
14 Nov 14 |
olle |
1481 |
eventType.setDescription(def.getDescription()); |
2933 |
14 Nov 14 |
olle |
1482 |
dc.saveItem(eventType); |
2933 |
14 Nov 14 |
olle |
1483 |
dc.commit(); |
2933 |
14 Nov 14 |
olle |
1484 |
} |
2933 |
14 Nov 14 |
olle |
1485 |
finally |
2933 |
14 Nov 14 |
olle |
1486 |
{ |
2933 |
14 Nov 14 |
olle |
1487 |
if (dc != null) dc.close(); |
2933 |
14 Nov 14 |
olle |
1488 |
} |
2933 |
14 Nov 14 |
olle |
1489 |
return eventType; |
2933 |
14 Nov 14 |
olle |
1490 |
} |
2933 |
14 Nov 14 |
olle |
1491 |
|
2933 |
14 Nov 14 |
olle |
1492 |
|
2933 |
14 Nov 14 |
olle |
1493 |
/** |
2933 |
14 Nov 14 |
olle |
Check for an existing bioplate event type with the given options. |
2933 |
14 Nov 14 |
olle |
A JSONObject is returned with the result. The following |
2933 |
14 Nov 14 |
olle |
keys are used: |
2933 |
14 Nov 14 |
olle |
<ul> |
2933 |
14 Nov 14 |
olle |
<li>itemType: BIOPLATEEVENTTYPE |
2933 |
14 Nov 14 |
olle |
<li>name: The name of the event type |
2933 |
14 Nov 14 |
olle |
<li>id: The id of the event type if it exists |
2933 |
14 Nov 14 |
olle |
<li>status: ok, error, or missing |
2933 |
14 Nov 14 |
olle |
<li>message: A descriptive message in case of an error |
2933 |
14 Nov 14 |
olle |
</ul> |
2933 |
14 Nov 14 |
olle |
@since 2.12 |
2933 |
14 Nov 14 |
olle |
1505 |
*/ |
2933 |
14 Nov 14 |
olle |
1506 |
@SuppressWarnings("unchecked") |
2933 |
14 Nov 14 |
olle |
1507 |
public JSONObject checkBioplateEventtype(DbControl dc, BioplateEventtype eventType, |
2933 |
14 Nov 14 |
olle |
1508 |
boolean createIfMissing) |
2933 |
14 Nov 14 |
olle |
1509 |
{ |
2933 |
14 Nov 14 |
olle |
1510 |
|
2933 |
14 Nov 14 |
olle |
1511 |
JSONObject json = new JSONObject(); |
2933 |
14 Nov 14 |
olle |
1512 |
JSONArray jsonMessages = new JSONArray(); |
2933 |
14 Nov 14 |
olle |
1513 |
json.put("itemType", Item.BIOPLATEEVENTTYPE.name()); |
2933 |
14 Nov 14 |
olle |
1514 |
json.put("name", eventType.getName()); |
2933 |
14 Nov 14 |
olle |
1515 |
|
2933 |
14 Nov 14 |
olle |
1516 |
List<BioPlateEventType> result = eventType.list(dc); |
2933 |
14 Nov 14 |
olle |
1517 |
if (result.size() == 0) |
2933 |
14 Nov 14 |
olle |
1518 |
{ |
2933 |
14 Nov 14 |
olle |
1519 |
if (createIfMissing) |
2933 |
14 Nov 14 |
olle |
1520 |
{ |
2933 |
14 Nov 14 |
olle |
1521 |
BioPlateEventType t = createBioPlateEventType(dc.getSessionControl(), eventType); |
2933 |
14 Nov 14 |
olle |
1522 |
json.put("id", t.getId()); |
2933 |
14 Nov 14 |
olle |
1523 |
json.put("status", "ok"); |
2933 |
14 Nov 14 |
olle |
1524 |
jsonMessages.add("Created"); |
2933 |
14 Nov 14 |
olle |
1525 |
} |
2933 |
14 Nov 14 |
olle |
1526 |
else |
2933 |
14 Nov 14 |
olle |
1527 |
{ |
2933 |
14 Nov 14 |
olle |
1528 |
json.put("status", "missing"); |
2933 |
14 Nov 14 |
olle |
1529 |
jsonMessages.add("Not found"); |
2933 |
14 Nov 14 |
olle |
1530 |
} |
2933 |
14 Nov 14 |
olle |
1531 |
} |
2933 |
14 Nov 14 |
olle |
1532 |
else if (result.size() > 1) |
2933 |
14 Nov 14 |
olle |
1533 |
{ |
2933 |
14 Nov 14 |
olle |
1534 |
json.put("status", "error"); |
2933 |
14 Nov 14 |
olle |
1535 |
jsonMessages.add("Found > 1 bioplate event type"); |
2933 |
14 Nov 14 |
olle |
1536 |
} |
2933 |
14 Nov 14 |
olle |
1537 |
else |
2933 |
14 Nov 14 |
olle |
1538 |
{ |
2933 |
14 Nov 14 |
olle |
1539 |
BioPlateEventType t = result.get(0); |
2933 |
14 Nov 14 |
olle |
1540 |
json.put("id", t.getId()); |
2933 |
14 Nov 14 |
olle |
1541 |
json.put("status", "ok"); // For now -- more checks below |
2933 |
14 Nov 14 |
olle |
1542 |
|
2933 |
14 Nov 14 |
olle |
1543 |
} |
2933 |
14 Nov 14 |
olle |
1544 |
if (jsonMessages.size() == 0) jsonMessages.add("Ok"); |
2933 |
14 Nov 14 |
olle |
1545 |
json.put("messages", jsonMessages); |
2933 |
14 Nov 14 |
olle |
1546 |
return json; |
2933 |
14 Nov 14 |
olle |
1547 |
} |
2933 |
14 Nov 14 |
olle |
1548 |
|
2933 |
14 Nov 14 |
olle |
1549 |
|
2933 |
14 Nov 14 |
olle |
1550 |
|
2933 |
14 Nov 14 |
olle |
1551 |
/** |
2933 |
14 Nov 14 |
olle |
Create a bioplate type with the given options. The bioplate type is created in |
2933 |
14 Nov 14 |
olle |
a separate transaction. |
2933 |
14 Nov 14 |
olle |
@since 2.4 |
2933 |
14 Nov 14 |
olle |
1555 |
*/ |
2933 |
14 Nov 14 |
olle |
1556 |
public BioPlateType createBioPlateType(SessionControl sc, BioplateType def) |
2933 |
14 Nov 14 |
olle |
1557 |
{ |
2933 |
14 Nov 14 |
olle |
1558 |
BioPlateType plateType = null; |
2933 |
14 Nov 14 |
olle |
1559 |
DbControl dc = sc.newDbControl(); |
2933 |
14 Nov 14 |
olle |
1560 |
try |
2933 |
14 Nov 14 |
olle |
1561 |
{ |
2933 |
14 Nov 14 |
olle |
1562 |
plateType = BioPlateType.getNew(dc); |
2933 |
14 Nov 14 |
olle |
1563 |
plateType.setName(def.getName()); |
2933 |
14 Nov 14 |
olle |
1564 |
plateType.setBioMaterialType(def.getBioMaterialType()); |
2933 |
14 Nov 14 |
olle |
1565 |
if (def.getSubtype() != null) |
2933 |
14 Nov 14 |
olle |
1566 |
{ |
2933 |
14 Nov 14 |
olle |
1567 |
ItemSubtype subtype = def.getSubtype().get(dc); |
2933 |
14 Nov 14 |
olle |
1568 |
if (subtype != null) |
2933 |
14 Nov 14 |
olle |
1569 |
{ |
2933 |
14 Nov 14 |
olle |
1570 |
plateType.setItemSubtype(subtype); |
2933 |
14 Nov 14 |
olle |
1571 |
} |
2933 |
14 Nov 14 |
olle |
1572 |
} |
2933 |
14 Nov 14 |
olle |
1573 |
plateType.setLockMode(def.getLockMode()); |
2933 |
14 Nov 14 |
olle |
1574 |
|
2933 |
14 Nov 14 |
olle |
1575 |
dc.saveItem(plateType); |
2933 |
14 Nov 14 |
olle |
1576 |
dc.commit(); |
2933 |
14 Nov 14 |
olle |
1577 |
} |
2933 |
14 Nov 14 |
olle |
1578 |
finally |
2933 |
14 Nov 14 |
olle |
1579 |
{ |
2933 |
14 Nov 14 |
olle |
1580 |
if (dc != null) dc.close(); |
2933 |
14 Nov 14 |
olle |
1581 |
} |
2933 |
14 Nov 14 |
olle |
1582 |
return plateType; |
2933 |
14 Nov 14 |
olle |
1583 |
} |
2933 |
14 Nov 14 |
olle |
1584 |
|
2933 |
14 Nov 14 |
olle |
1585 |
|
2933 |
14 Nov 14 |
olle |
1586 |
/** |
2933 |
14 Nov 14 |
olle |
Check for an existing bioplate type with the given options. |
2933 |
14 Nov 14 |
olle |
A JSONObject is returned with the result. The following |
2933 |
14 Nov 14 |
olle |
keys are used: |
2933 |
14 Nov 14 |
olle |
<ul> |
2933 |
14 Nov 14 |
olle |
<li>itemType: BIOPLATETYPE |
2933 |
14 Nov 14 |
olle |
<li>name: The name of the bioplate type |
2933 |
14 Nov 14 |
olle |
<li>id: The id of the bioplate type if it exists |
2933 |
14 Nov 14 |
olle |
<li>bioMaterialType: The bioMaterial type that can be used on bioplates with the given type |
2933 |
14 Nov 14 |
olle |
<li>status: ok, error, or missing |
2933 |
14 Nov 14 |
olle |
<li>message: A descriptive message in case of an error |
2933 |
14 Nov 14 |
olle |
</ul> |
2933 |
14 Nov 14 |
olle |
@since 2.0 |
2933 |
14 Nov 14 |
olle |
1599 |
*/ |
2933 |
14 Nov 14 |
olle |
1600 |
@SuppressWarnings("unchecked") |
2933 |
14 Nov 14 |
olle |
1601 |
public JSONObject checkBioplateType(DbControl dc, BioplateType plateType, |
2933 |
14 Nov 14 |
olle |
1602 |
boolean createIfMissing) |
2933 |
14 Nov 14 |
olle |
1603 |
{ |
2933 |
14 Nov 14 |
olle |
1604 |
|
2933 |
14 Nov 14 |
olle |
1605 |
JSONObject json = new JSONObject(); |
2933 |
14 Nov 14 |
olle |
1606 |
JSONArray jsonMessages = new JSONArray(); |
2933 |
14 Nov 14 |
olle |
1607 |
json.put("itemType", Item.BIOPLATETYPE.name()); |
2933 |
14 Nov 14 |
olle |
1608 |
json.put("name", plateType.getName()); |
2933 |
14 Nov 14 |
olle |
1609 |
json.put("bioMaterialType", plateType.getBioMaterialType().name()); |
2933 |
14 Nov 14 |
olle |
1610 |
|
2933 |
14 Nov 14 |
olle |
1611 |
List<BioPlateType> result = plateType.list(dc); |
2933 |
14 Nov 14 |
olle |
1612 |
if (result.size() == 0) |
2933 |
14 Nov 14 |
olle |
1613 |
{ |
2933 |
14 Nov 14 |
olle |
1614 |
if (createIfMissing) |
2933 |
14 Nov 14 |
olle |
1615 |
{ |
2933 |
14 Nov 14 |
olle |
1616 |
BioPlateType t = createBioPlateType(dc.getSessionControl(), plateType); |
2933 |
14 Nov 14 |
olle |
1617 |
json.put("id", t.getId()); |
2933 |
14 Nov 14 |
olle |
1618 |
json.put("status", "ok"); |
2933 |
14 Nov 14 |
olle |
1619 |
jsonMessages.add("Created"); |
2933 |
14 Nov 14 |
olle |
1620 |
} |
2933 |
14 Nov 14 |
olle |
1621 |
else |
2933 |
14 Nov 14 |
olle |
1622 |
{ |
2933 |
14 Nov 14 |
olle |
1623 |
json.put("status", "missing"); |
2933 |
14 Nov 14 |
olle |
1624 |
jsonMessages.add("Not found"); |
2933 |
14 Nov 14 |
olle |
1625 |
} |
2933 |
14 Nov 14 |
olle |
1626 |
} |
2933 |
14 Nov 14 |
olle |
1627 |
else if (result.size() > 1) |
2933 |
14 Nov 14 |
olle |
1628 |
{ |
2933 |
14 Nov 14 |
olle |
1629 |
json.put("status", "error"); |
2933 |
14 Nov 14 |
olle |
1630 |
jsonMessages.add("Found > 1 bioplate type"); |
2933 |
14 Nov 14 |
olle |
1631 |
} |
2933 |
14 Nov 14 |
olle |
1632 |
else |
2933 |
14 Nov 14 |
olle |
1633 |
{ |
2933 |
14 Nov 14 |
olle |
1634 |
BioPlateType t = result.get(0); |
2933 |
14 Nov 14 |
olle |
1635 |
json.put("id", t.getId()); |
2933 |
14 Nov 14 |
olle |
1636 |
json.put("status", "ok"); // For now -- more checks below |
2933 |
14 Nov 14 |
olle |
1637 |
|
2933 |
14 Nov 14 |
olle |
1638 |
if (t.getBioMaterialType() != plateType.getBioMaterialType()) |
2933 |
14 Nov 14 |
olle |
1639 |
{ |
2933 |
14 Nov 14 |
olle |
1640 |
json.put("status", "error"); |
2933 |
14 Nov 14 |
olle |
1641 |
jsonMessages.add("Can't be used by '" + plateType.getBioMaterialType() + "' items."); |
2933 |
14 Nov 14 |
olle |
1642 |
} |
2933 |
14 Nov 14 |
olle |
1643 |
|
2933 |
14 Nov 14 |
olle |
1644 |
Subtype subtype = plateType.getSubtype(); |
2933 |
14 Nov 14 |
olle |
1645 |
if (subtype != null) |
2933 |
14 Nov 14 |
olle |
1646 |
{ |
2933 |
14 Nov 14 |
olle |
1647 |
ItemSubtype st = subtype.get(dc); |
2933 |
14 Nov 14 |
olle |
1648 |
if (st == null || !st.equals(t.getItemSubtype())) |
2933 |
14 Nov 14 |
olle |
1649 |
{ |
2933 |
14 Nov 14 |
olle |
1650 |
json.put("status", "error"); |
2933 |
14 Nov 14 |
olle |
1651 |
jsonMessages.add("Should be locked to '" + subtype.getName() + "' (" + subtype.getMainType() + ") items."); |
2933 |
14 Nov 14 |
olle |
1652 |
} |
2933 |
14 Nov 14 |
olle |
1653 |
} |
2933 |
14 Nov 14 |
olle |
1654 |
|
2933 |
14 Nov 14 |
olle |
1655 |
if (t.getLockMode() != plateType.getLockMode()) |
2933 |
14 Nov 14 |
olle |
1656 |
{ |
2933 |
14 Nov 14 |
olle |
1657 |
json.put("status", "error"); |
2933 |
14 Nov 14 |
olle |
1658 |
jsonMessages.add("Should be using '" + plateType.getLockMode().name() + "' well lock mode"); |
2933 |
14 Nov 14 |
olle |
1659 |
} |
2933 |
14 Nov 14 |
olle |
1660 |
} |
2933 |
14 Nov 14 |
olle |
1661 |
if (jsonMessages.size() == 0) jsonMessages.add("Ok"); |
2933 |
14 Nov 14 |
olle |
1662 |
json.put("messages", jsonMessages); |
2933 |
14 Nov 14 |
olle |
1663 |
return json; |
2933 |
14 Nov 14 |
olle |
1664 |
|
2933 |
14 Nov 14 |
olle |
1665 |
} |
2933 |
14 Nov 14 |
olle |
1666 |
|
2933 |
14 Nov 14 |
olle |
1667 |
/** |
3384 |
10 Jun 15 |
olle |
Create an item list with the given options. The list is created in |
2933 |
14 Nov 14 |
olle |
a separate transaction. |
2933 |
14 Nov 14 |
olle |
@since 2.12 |
2933 |
14 Nov 14 |
olle |
1671 |
*/ |
3384 |
10 Jun 15 |
olle |
1672 |
public ItemList createItemList(SessionControl sc, BiomaterialList def, PermissionOptions permissions) |
2933 |
14 Nov 14 |
olle |
1673 |
{ |
3384 |
10 Jun 15 |
olle |
1674 |
ItemList list = null; |
2933 |
14 Nov 14 |
olle |
1675 |
DbControl dc = sc.newDbControl(); |
2933 |
14 Nov 14 |
olle |
1676 |
try |
2933 |
14 Nov 14 |
olle |
1677 |
{ |
3384 |
10 Jun 15 |
olle |
1678 |
list = ItemList.getNew(dc, def.getBioMaterialType()); |
2933 |
14 Nov 14 |
olle |
1679 |
list.setName(def.getName()); |
2933 |
14 Nov 14 |
olle |
1680 |
list.setExternalId(def.getExternalId()); |
2933 |
14 Nov 14 |
olle |
1681 |
list.setDescription(def.getDescription()); |
2933 |
14 Nov 14 |
olle |
1682 |
if (permissions != null) permissions.applyPermissions(list); |
2933 |
14 Nov 14 |
olle |
1683 |
|
2933 |
14 Nov 14 |
olle |
1684 |
dc.saveItem(list); |
2933 |
14 Nov 14 |
olle |
1685 |
dc.commit(); |
2933 |
14 Nov 14 |
olle |
1686 |
} |
2933 |
14 Nov 14 |
olle |
1687 |
finally |
2933 |
14 Nov 14 |
olle |
1688 |
{ |
2933 |
14 Nov 14 |
olle |
1689 |
if (dc != null) dc.close(); |
2933 |
14 Nov 14 |
olle |
1690 |
} |
2933 |
14 Nov 14 |
olle |
1691 |
return list; |
2933 |
14 Nov 14 |
olle |
1692 |
} |
2933 |
14 Nov 14 |
olle |
1693 |
|
2933 |
14 Nov 14 |
olle |
1694 |
|
2933 |
14 Nov 14 |
olle |
1695 |
/** |
2933 |
14 Nov 14 |
olle |
Check for an existing biomaterial list with the given options. |
2933 |
14 Nov 14 |
olle |
A JSONObject is returned with the result. The following |
2933 |
14 Nov 14 |
olle |
keys are used: |
2933 |
14 Nov 14 |
olle |
<ul> |
2933 |
14 Nov 14 |
olle |
<li>itemType: BIOMATERIALLIST |
2933 |
14 Nov 14 |
olle |
<li>name: The name of the biomaterial list |
2933 |
14 Nov 14 |
olle |
<li>id: The id of the biomaterial list if it exists |
2933 |
14 Nov 14 |
olle |
<li>bioMaterialType: The bioMaterial type that can be stored in the list |
2933 |
14 Nov 14 |
olle |
<li>status: ok, error, or missing |
2933 |
14 Nov 14 |
olle |
<li>message: A descriptive message in case of an error |
2933 |
14 Nov 14 |
olle |
</ul> |
2933 |
14 Nov 14 |
olle |
@since 2.12 |
2933 |
14 Nov 14 |
olle |
1708 |
*/ |
2933 |
14 Nov 14 |
olle |
1709 |
@SuppressWarnings("unchecked") |
2933 |
14 Nov 14 |
olle |
1710 |
public JSONObject checkBioMaterialList(DbControl dc, BiomaterialList list, |
2933 |
14 Nov 14 |
olle |
1711 |
PermissionOptions permissions, boolean createIfMissing) |
2933 |
14 Nov 14 |
olle |
1712 |
{ |
2933 |
14 Nov 14 |
olle |
1713 |
|
2933 |
14 Nov 14 |
olle |
1714 |
JSONObject json = new JSONObject(); |
2933 |
14 Nov 14 |
olle |
1715 |
JSONArray jsonMessages = new JSONArray(); |
3384 |
10 Jun 15 |
olle |
1716 |
json.put("itemType", Item.ITEMLIST.name()); |
2933 |
14 Nov 14 |
olle |
1717 |
json.put("name", list.getName()); |
2933 |
14 Nov 14 |
olle |
1718 |
json.put("bioMaterialType", list.getBioMaterialType().name()); |
2933 |
14 Nov 14 |
olle |
1719 |
|
3384 |
10 Jun 15 |
olle |
1720 |
List<ItemList> result = list.list(dc); |
2933 |
14 Nov 14 |
olle |
1721 |
if (result.size() == 0) |
2933 |
14 Nov 14 |
olle |
1722 |
{ |
2933 |
14 Nov 14 |
olle |
1723 |
if (createIfMissing) |
2933 |
14 Nov 14 |
olle |
1724 |
{ |
3384 |
10 Jun 15 |
olle |
1725 |
ItemList l = createItemList(dc.getSessionControl(), list, permissions); |
2933 |
14 Nov 14 |
olle |
1726 |
json.put("id", l.getId()); |
2933 |
14 Nov 14 |
olle |
1727 |
json.put("status", "ok"); |
2933 |
14 Nov 14 |
olle |
1728 |
jsonMessages.add("Created"); |
2933 |
14 Nov 14 |
olle |
1729 |
} |
2933 |
14 Nov 14 |
olle |
1730 |
else |
2933 |
14 Nov 14 |
olle |
1731 |
{ |
2933 |
14 Nov 14 |
olle |
1732 |
json.put("status", "missing"); |
2933 |
14 Nov 14 |
olle |
1733 |
jsonMessages.add("Not found"); |
2933 |
14 Nov 14 |
olle |
1734 |
} |
2933 |
14 Nov 14 |
olle |
1735 |
} |
2933 |
14 Nov 14 |
olle |
1736 |
else if (result.size() > 1) |
2933 |
14 Nov 14 |
olle |
1737 |
{ |
2933 |
14 Nov 14 |
olle |
1738 |
json.put("status", "error"); |
2933 |
14 Nov 14 |
olle |
1739 |
jsonMessages.add("Found > 1 biomaterial list"); |
2933 |
14 Nov 14 |
olle |
1740 |
} |
2933 |
14 Nov 14 |
olle |
1741 |
else |
2933 |
14 Nov 14 |
olle |
1742 |
{ |
3384 |
10 Jun 15 |
olle |
1743 |
ItemList l = result.get(0); |
2933 |
14 Nov 14 |
olle |
1744 |
json.put("id", l.getId()); |
2933 |
14 Nov 14 |
olle |
1745 |
json.put("status", "ok"); // For now -- more checks below |
2933 |
14 Nov 14 |
olle |
1746 |
|
2933 |
14 Nov 14 |
olle |
1747 |
if (l.getMemberType() != list.getBioMaterialType()) |
2933 |
14 Nov 14 |
olle |
1748 |
{ |
2933 |
14 Nov 14 |
olle |
1749 |
json.put("status", "error"); |
2933 |
14 Nov 14 |
olle |
1750 |
jsonMessages.add("Can't be used by '" + list.getBioMaterialType() + "' items."); |
2933 |
14 Nov 14 |
olle |
1751 |
} |
2933 |
14 Nov 14 |
olle |
1752 |
|
2933 |
14 Nov 14 |
olle |
1753 |
if (permissions != null && !permissions.checkPermissions(l)) |
2933 |
14 Nov 14 |
olle |
1754 |
{ |
2933 |
14 Nov 14 |
olle |
1755 |
if (createIfMissing) |
2933 |
14 Nov 14 |
olle |
1756 |
{ |
2933 |
14 Nov 14 |
olle |
1757 |
permissions.applyPermissions(l); |
2933 |
14 Nov 14 |
olle |
1758 |
if (jsonMessages.size() == 0) jsonMessages.add("Fixed"); |
2933 |
14 Nov 14 |
olle |
1759 |
} |
2933 |
14 Nov 14 |
olle |
1760 |
else |
2933 |
14 Nov 14 |
olle |
1761 |
{ |
2933 |
14 Nov 14 |
olle |
1762 |
json.put("status", "incomplete"); |
2933 |
14 Nov 14 |
olle |
1763 |
jsonMessages.add(permissions.getMessage()); |
2933 |
14 Nov 14 |
olle |
1764 |
} |
2933 |
14 Nov 14 |
olle |
1765 |
} |
2933 |
14 Nov 14 |
olle |
1766 |
|
2933 |
14 Nov 14 |
olle |
1767 |
} |
2933 |
14 Nov 14 |
olle |
1768 |
if (jsonMessages.size() == 0) jsonMessages.add("Ok"); |
2933 |
14 Nov 14 |
olle |
1769 |
json.put("messages", jsonMessages); |
2933 |
14 Nov 14 |
olle |
1770 |
return json; |
2933 |
14 Nov 14 |
olle |
1771 |
} |
2933 |
14 Nov 14 |
olle |
1772 |
|
2933 |
14 Nov 14 |
olle |
1773 |
|
2933 |
14 Nov 14 |
olle |
1774 |
/** |
2933 |
14 Nov 14 |
olle |
Create a MIME type with the given options. The type is created in |
2933 |
14 Nov 14 |
olle |
a separate transaction. |
2933 |
14 Nov 14 |
olle |
@since 2.4 |
2933 |
14 Nov 14 |
olle |
1778 |
*/ |
2933 |
14 Nov 14 |
olle |
1779 |
public MimeType createMimeType(SessionControl sc, Mimetype def) |
2933 |
14 Nov 14 |
olle |
1780 |
{ |
2933 |
14 Nov 14 |
olle |
1781 |
MimeType type = null; |
2933 |
14 Nov 14 |
olle |
1782 |
DbControl dc = sc.newDbControl(); |
2933 |
14 Nov 14 |
olle |
1783 |
try |
2933 |
14 Nov 14 |
olle |
1784 |
{ |
2933 |
14 Nov 14 |
olle |
1785 |
type = MimeType.getNew(dc); |
2933 |
14 Nov 14 |
olle |
1786 |
type.setName(def.getMimeType()); |
2933 |
14 Nov 14 |
olle |
1787 |
type.setExtension(def.getExtension()); |
2933 |
14 Nov 14 |
olle |
1788 |
type.setDescription(def.getDescription()); |
2933 |
14 Nov 14 |
olle |
1789 |
if (def.getFileType() != null) |
2933 |
14 Nov 14 |
olle |
1790 |
{ |
2933 |
14 Nov 14 |
olle |
1791 |
ItemSubtype subtype = def.getFileType().get(dc); |
2933 |
14 Nov 14 |
olle |
1792 |
if (subtype != null) type.setFileType(subtype); |
2933 |
14 Nov 14 |
olle |
1793 |
} |
2933 |
14 Nov 14 |
olle |
1794 |
|
2933 |
14 Nov 14 |
olle |
1795 |
dc.saveItem(type); |
2933 |
14 Nov 14 |
olle |
1796 |
dc.commit(); |
2933 |
14 Nov 14 |
olle |
1797 |
} |
2933 |
14 Nov 14 |
olle |
1798 |
finally |
2933 |
14 Nov 14 |
olle |
1799 |
{ |
2933 |
14 Nov 14 |
olle |
1800 |
if (dc != null) dc.close(); |
2933 |
14 Nov 14 |
olle |
1801 |
} |
2933 |
14 Nov 14 |
olle |
1802 |
return type; |
2933 |
14 Nov 14 |
olle |
1803 |
} |
2933 |
14 Nov 14 |
olle |
1804 |
|
2933 |
14 Nov 14 |
olle |
1805 |
|
2933 |
14 Nov 14 |
olle |
1806 |
/** |
2933 |
14 Nov 14 |
olle |
Check for an existing MIME type with the given options. |
2933 |
14 Nov 14 |
olle |
A JSONObject is returned with the result. The following |
2933 |
14 Nov 14 |
olle |
keys are used: |
2933 |
14 Nov 14 |
olle |
<ul> |
2933 |
14 Nov 14 |
olle |
<li>itemType: MIMETYPE |
2933 |
14 Nov 14 |
olle |
<li>name: The name of the subtype |
2933 |
14 Nov 14 |
olle |
<li>id: The id of the subtype if it exists |
2933 |
14 Nov 14 |
olle |
<li>mainType: The main item type that the subtype applies to |
2933 |
14 Nov 14 |
olle |
<li>status: ok, error, or missing |
2933 |
14 Nov 14 |
olle |
<li>message: A descriptive message in case of an error |
2933 |
14 Nov 14 |
olle |
</ul> |
2933 |
14 Nov 14 |
olle |
@since 2.4 |
2933 |
14 Nov 14 |
olle |
1819 |
*/ |
2933 |
14 Nov 14 |
olle |
1820 |
@SuppressWarnings("unchecked") |
2933 |
14 Nov 14 |
olle |
1821 |
public JSONObject checkMimeType(DbControl dc, Mimetype mimeType, |
2933 |
14 Nov 14 |
olle |
1822 |
boolean createIfMissing) |
2933 |
14 Nov 14 |
olle |
1823 |
{ |
2933 |
14 Nov 14 |
olle |
1824 |
|
2933 |
14 Nov 14 |
olle |
1825 |
JSONObject json = new JSONObject(); |
2933 |
14 Nov 14 |
olle |
1826 |
JSONArray jsonMessages = new JSONArray(); |
2933 |
14 Nov 14 |
olle |
1827 |
json.put("itemType", Item.MIMETYPE.name()); |
2933 |
14 Nov 14 |
olle |
1828 |
json.put("name", mimeType.getDescription()); |
2933 |
14 Nov 14 |
olle |
1829 |
json.put("mimeType", mimeType.getMimeType()); |
2933 |
14 Nov 14 |
olle |
1830 |
json.put("extension", mimeType.getExtension()); |
2933 |
14 Nov 14 |
olle |
1831 |
|
2933 |
14 Nov 14 |
olle |
1832 |
List<MimeType> result = mimeType.list(dc); |
2933 |
14 Nov 14 |
olle |
1833 |
if (result.size() == 0) |
2933 |
14 Nov 14 |
olle |
1834 |
{ |
2933 |
14 Nov 14 |
olle |
1835 |
if (createIfMissing) |
2933 |
14 Nov 14 |
olle |
1836 |
{ |
2933 |
14 Nov 14 |
olle |
1837 |
MimeType type = createMimeType(dc.getSessionControl(), mimeType); |
2933 |
14 Nov 14 |
olle |
1838 |
json.put("id", type.getId()); |
2933 |
14 Nov 14 |
olle |
1839 |
json.put("status", "ok"); |
2933 |
14 Nov 14 |
olle |
1840 |
jsonMessages.add("Created"); |
2933 |
14 Nov 14 |
olle |
1841 |
} |
2933 |
14 Nov 14 |
olle |
1842 |
else |
2933 |
14 Nov 14 |
olle |
1843 |
{ |
2933 |
14 Nov 14 |
olle |
1844 |
json.put("status", "missing"); |
2933 |
14 Nov 14 |
olle |
1845 |
jsonMessages.add("Not found"); |
2933 |
14 Nov 14 |
olle |
1846 |
} |
2933 |
14 Nov 14 |
olle |
1847 |
} |
2933 |
14 Nov 14 |
olle |
1848 |
else if (result.size() > 1) |
2933 |
14 Nov 14 |
olle |
1849 |
{ |
2933 |
14 Nov 14 |
olle |
1850 |
json.put("status", "error"); |
2933 |
14 Nov 14 |
olle |
1851 |
jsonMessages.add("Found > 1 MIME type"); |
2933 |
14 Nov 14 |
olle |
1852 |
} |
2933 |
14 Nov 14 |
olle |
1853 |
else |
2933 |
14 Nov 14 |
olle |
1854 |
{ |
2933 |
14 Nov 14 |
olle |
1855 |
MimeType s = result.get(0); |
2933 |
14 Nov 14 |
olle |
1856 |
json.put("id", s.getId()); |
2933 |
14 Nov 14 |
olle |
1857 |
json.put("status", "ok"); // For now -- more checks below |
2933 |
14 Nov 14 |
olle |
1858 |
|
2933 |
14 Nov 14 |
olle |
1859 |
if (!s.getName().equals(mimeType.getMimeType())) |
2933 |
14 Nov 14 |
olle |
1860 |
{ |
2933 |
14 Nov 14 |
olle |
1861 |
json.put("status", "error"); |
2933 |
14 Nov 14 |
olle |
1862 |
jsonMessages.add("Should have '" + mimeType.getMimeType() + "' as MIME type."); |
2933 |
14 Nov 14 |
olle |
1863 |
} |
2933 |
14 Nov 14 |
olle |
1864 |
|
2933 |
14 Nov 14 |
olle |
1865 |
} |
2933 |
14 Nov 14 |
olle |
1866 |
if (jsonMessages.size() == 0) jsonMessages.add("Ok"); |
2933 |
14 Nov 14 |
olle |
1867 |
json.put("messages", jsonMessages); |
2933 |
14 Nov 14 |
olle |
1868 |
return json; |
2933 |
14 Nov 14 |
olle |
1869 |
|
2933 |
14 Nov 14 |
olle |
1870 |
} |
2933 |
14 Nov 14 |
olle |
1871 |
|
2933 |
14 Nov 14 |
olle |
1872 |
|
2933 |
14 Nov 14 |
olle |
1873 |
/** |
2933 |
14 Nov 14 |
olle |
Create a file server with the given options. The file server is created in |
2933 |
14 Nov 14 |
olle |
a separate transaction. |
2933 |
14 Nov 14 |
olle |
@since 2.16 |
2933 |
14 Nov 14 |
olle |
1877 |
*/ |
2933 |
14 Nov 14 |
olle |
1878 |
public FileServer createFileServer(SessionControl sc, Fileserver def, PermissionOptions permissions) |
2933 |
14 Nov 14 |
olle |
1879 |
{ |
2933 |
14 Nov 14 |
olle |
1880 |
FileServer fs = null; |
2933 |
14 Nov 14 |
olle |
1881 |
DbControl dc = sc.newDbControl(); |
2933 |
14 Nov 14 |
olle |
1882 |
try |
2933 |
14 Nov 14 |
olle |
1883 |
{ |
2933 |
14 Nov 14 |
olle |
1884 |
fs = FileServer.getNew(dc); |
2933 |
14 Nov 14 |
olle |
1885 |
fs.setName(def.getName()); |
2933 |
14 Nov 14 |
olle |
1886 |
fs.setConnectionManagerFactoryId(def.getConnectionManagerId()); |
2933 |
14 Nov 14 |
olle |
1887 |
fs.setDescription(def.getDescription()); |
2933 |
14 Nov 14 |
olle |
1888 |
if (permissions != null) permissions.applyPermissions(fs); |
2933 |
14 Nov 14 |
olle |
1889 |
|
2933 |
14 Nov 14 |
olle |
1890 |
dc.saveItem(fs); |
2933 |
14 Nov 14 |
olle |
1891 |
dc.commit(); |
2933 |
14 Nov 14 |
olle |
1892 |
} |
2933 |
14 Nov 14 |
olle |
1893 |
finally |
2933 |
14 Nov 14 |
olle |
1894 |
{ |
2933 |
14 Nov 14 |
olle |
1895 |
if (dc != null) dc.close(); |
2933 |
14 Nov 14 |
olle |
1896 |
} |
2933 |
14 Nov 14 |
olle |
1897 |
return fs; |
2933 |
14 Nov 14 |
olle |
1898 |
} |
2933 |
14 Nov 14 |
olle |
1899 |
|
2933 |
14 Nov 14 |
olle |
1900 |
|
2933 |
14 Nov 14 |
olle |
1901 |
/** |
2933 |
14 Nov 14 |
olle |
Check for an existing file server with the given options. |
2933 |
14 Nov 14 |
olle |
A JSONObject is returned with the result. The following |
2933 |
14 Nov 14 |
olle |
keys are used: |
2933 |
14 Nov 14 |
olle |
<ul> |
2933 |
14 Nov 14 |
olle |
<li>itemType: FILESERVER |
2933 |
14 Nov 14 |
olle |
<li>name: The name of the fileserver |
2933 |
14 Nov 14 |
olle |
<li>id: The id of the fileserver if it exists |
2933 |
14 Nov 14 |
olle |
<li>status: ok, error, or missing |
2933 |
14 Nov 14 |
olle |
<li>message: A descriptive message in case of an error |
2933 |
14 Nov 14 |
olle |
</ul> |
2933 |
14 Nov 14 |
olle |
@since 2.16 |
2933 |
14 Nov 14 |
olle |
1913 |
*/ |
2933 |
14 Nov 14 |
olle |
1914 |
@SuppressWarnings("unchecked") |
2933 |
14 Nov 14 |
olle |
1915 |
public JSONObject checkFileServer(DbControl dc, Fileserver fileServer, |
2933 |
14 Nov 14 |
olle |
1916 |
PermissionOptions permissions, boolean createIfMissing) |
2933 |
14 Nov 14 |
olle |
1917 |
{ |
2933 |
14 Nov 14 |
olle |
1918 |
|
2933 |
14 Nov 14 |
olle |
1919 |
JSONObject json = new JSONObject(); |
2933 |
14 Nov 14 |
olle |
1920 |
JSONArray jsonMessages = new JSONArray(); |
2933 |
14 Nov 14 |
olle |
1921 |
json.put("itemType", Item.FILESERVER.name()); |
2933 |
14 Nov 14 |
olle |
1922 |
json.put("name", fileServer.getName()); |
2933 |
14 Nov 14 |
olle |
1923 |
|
2933 |
14 Nov 14 |
olle |
1924 |
FileServer fs = null; |
2933 |
14 Nov 14 |
olle |
1925 |
List<FileServer> result = fileServer.list(dc); |
2933 |
14 Nov 14 |
olle |
1926 |
if (result.size() == 0) |
2933 |
14 Nov 14 |
olle |
1927 |
{ |
2933 |
14 Nov 14 |
olle |
1928 |
if (createIfMissing) |
2933 |
14 Nov 14 |
olle |
1929 |
{ |
2933 |
14 Nov 14 |
olle |
1930 |
fs = createFileServer(dc.getSessionControl(), fileServer, permissions); |
2933 |
14 Nov 14 |
olle |
1931 |
fs = FileServer.getById(dc, fs.getId()); |
2933 |
14 Nov 14 |
olle |
1932 |
json.put("id", fs.getId()); |
2933 |
14 Nov 14 |
olle |
// Not ok yet, need manual configuration which is checked below |
2933 |
14 Nov 14 |
olle |
1934 |
} |
2933 |
14 Nov 14 |
olle |
1935 |
else |
2933 |
14 Nov 14 |
olle |
1936 |
{ |
2933 |
14 Nov 14 |
olle |
1937 |
json.put("status", "missing"); |
2933 |
14 Nov 14 |
olle |
1938 |
jsonMessages.add("Not found"); |
2933 |
14 Nov 14 |
olle |
1939 |
} |
2933 |
14 Nov 14 |
olle |
1940 |
} |
2933 |
14 Nov 14 |
olle |
1941 |
else if (result.size() > 1) |
2933 |
14 Nov 14 |
olle |
1942 |
{ |
2933 |
14 Nov 14 |
olle |
1943 |
json.put("status", "error"); |
2933 |
14 Nov 14 |
olle |
1944 |
jsonMessages.add("Found > 1 file server"); |
2933 |
14 Nov 14 |
olle |
1945 |
} |
2933 |
14 Nov 14 |
olle |
1946 |
else |
2933 |
14 Nov 14 |
olle |
1947 |
{ |
2933 |
14 Nov 14 |
olle |
1948 |
fs = result.get(0); |
2933 |
14 Nov 14 |
olle |
1949 |
} |
2933 |
14 Nov 14 |
olle |
1950 |
|
2933 |
14 Nov 14 |
olle |
1951 |
if (fs != null) |
2933 |
14 Nov 14 |
olle |
1952 |
{ |
2933 |
14 Nov 14 |
olle |
1953 |
json.put("id", fs.getId()); |
2933 |
14 Nov 14 |
olle |
1954 |
json.put("status", "ok"); // For now -- more checks below |
2933 |
14 Nov 14 |
olle |
1955 |
|
2933 |
14 Nov 14 |
olle |
1956 |
if (permissions != null && !permissions.checkPermissions(fs)) |
2933 |
14 Nov 14 |
olle |
1957 |
{ |
2933 |
14 Nov 14 |
olle |
1958 |
if (createIfMissing) |
2933 |
14 Nov 14 |
olle |
1959 |
{ |
2933 |
14 Nov 14 |
olle |
1960 |
permissions.applyPermissions(fs); |
2933 |
14 Nov 14 |
olle |
1961 |
if (jsonMessages.size() == 0) jsonMessages.add("Fixed"); |
2933 |
14 Nov 14 |
olle |
1962 |
} |
2933 |
14 Nov 14 |
olle |
1963 |
else |
2933 |
14 Nov 14 |
olle |
1964 |
{ |
2933 |
14 Nov 14 |
olle |
1965 |
json.put("status", "incomplete"); |
2933 |
14 Nov 14 |
olle |
1966 |
jsonMessages.add(permissions.getMessage()); |
2933 |
14 Nov 14 |
olle |
1967 |
} |
2933 |
14 Nov 14 |
olle |
1968 |
} |
2933 |
14 Nov 14 |
olle |
1969 |
|
2933 |
14 Nov 14 |
olle |
1970 |
if (!fileServer.getConnectionManagerId().equals(fs.getConnectionManagerFactoryId())) |
2933 |
14 Nov 14 |
olle |
1971 |
{ |
2933 |
14 Nov 14 |
olle |
1972 |
if (createIfMissing) |
2933 |
14 Nov 14 |
olle |
1973 |
{ |
2933 |
14 Nov 14 |
olle |
1974 |
fs.setConnectionManagerFactoryId(fileServer.getConnectionManagerId()); |
2933 |
14 Nov 14 |
olle |
1975 |
} |
2933 |
14 Nov 14 |
olle |
1976 |
else |
2933 |
14 Nov 14 |
olle |
1977 |
{ |
2933 |
14 Nov 14 |
olle |
1978 |
json.put("status", "incomplete"); |
2933 |
14 Nov 14 |
olle |
1979 |
jsonMessages.add("Should use SFTP connection manager"); |
2933 |
14 Nov 14 |
olle |
1980 |
} |
2933 |
14 Nov 14 |
olle |
1981 |
} |
2933 |
14 Nov 14 |
olle |
1982 |
|
2933 |
14 Nov 14 |
olle |
1983 |
if (fs.getHost() == null) |
2933 |
14 Nov 14 |
olle |
1984 |
{ |
2933 |
14 Nov 14 |
olle |
1985 |
json.put("status", "warning"); |
2933 |
14 Nov 14 |
olle |
1986 |
jsonMessages.add("No host name configured"); |
2933 |
14 Nov 14 |
olle |
1987 |
} |
2933 |
14 Nov 14 |
olle |
1988 |
|
2933 |
14 Nov 14 |
olle |
1989 |
if (fs.getUsername() == null) |
2933 |
14 Nov 14 |
olle |
1990 |
{ |
2933 |
14 Nov 14 |
olle |
1991 |
json.put("status", "warning"); |
2933 |
14 Nov 14 |
olle |
1992 |
jsonMessages.add("No user configured"); |
2933 |
14 Nov 14 |
olle |
1993 |
} |
2933 |
14 Nov 14 |
olle |
1994 |
|
2933 |
14 Nov 14 |
olle |
1995 |
if (!fs.hasPassword()) |
2933 |
14 Nov 14 |
olle |
1996 |
{ |
2933 |
14 Nov 14 |
olle |
1997 |
json.put("status", "warning"); |
2933 |
14 Nov 14 |
olle |
1998 |
jsonMessages.add("No password configured"); |
2933 |
14 Nov 14 |
olle |
1999 |
} |
2933 |
14 Nov 14 |
olle |
2000 |
|
2933 |
14 Nov 14 |
olle |
2001 |
if (fs.getRootPath() == null) |
2933 |
14 Nov 14 |
olle |
2002 |
{ |
2933 |
14 Nov 14 |
olle |
2003 |
json.put("status", "warning"); |
2933 |
14 Nov 14 |
olle |
2004 |
jsonMessages.add("No root path configured"); |
2933 |
14 Nov 14 |
olle |
2005 |
} |
2933 |
14 Nov 14 |
olle |
2006 |
|
2933 |
14 Nov 14 |
olle |
2007 |
if (fs.getSshFingerprint() == null) |
2933 |
14 Nov 14 |
olle |
2008 |
{ |
2933 |
14 Nov 14 |
olle |
2009 |
json.put("status", "warning"); |
2933 |
14 Nov 14 |
olle |
2010 |
jsonMessages.add("No SSH fingerprint configured"); |
2933 |
14 Nov 14 |
olle |
2011 |
} |
2933 |
14 Nov 14 |
olle |
2012 |
|
2933 |
14 Nov 14 |
olle |
2013 |
if (json.get("status").equals("ok")) |
2933 |
14 Nov 14 |
olle |
2014 |
{ |
2933 |
14 Nov 14 |
olle |
2015 |
ConnectionManagerFactory cmf = ConnectionManagerUtil.getFactory(fs.getConnectionManagerFactoryId()); |
2933 |
14 Nov 14 |
olle |
2016 |
if (cmf == null) |
2933 |
14 Nov 14 |
olle |
2017 |
{ |
2933 |
14 Nov 14 |
olle |
2018 |
json.put("status", "warning"); |
2933 |
14 Nov 14 |
olle |
2019 |
jsonMessages.add("SFTP connection manager is not installed"); |
2933 |
14 Nov 14 |
olle |
2020 |
} |
2933 |
14 Nov 14 |
olle |
2021 |
else |
2933 |
14 Nov 14 |
olle |
2022 |
{ |
2933 |
14 Nov 14 |
olle |
2023 |
ConnectionParameters cp = new ConnectionParameters(); |
2933 |
14 Nov 14 |
olle |
2024 |
cp.setHost(fs.getHost()); |
2933 |
14 Nov 14 |
olle |
2025 |
cp.setUsername(fs.getUsername()); |
2933 |
14 Nov 14 |
olle |
2026 |
cp.setPassword(fs.getPassword()); |
2933 |
14 Nov 14 |
olle |
2027 |
cp.setRootPath(fs.getRootPath()); |
2933 |
14 Nov 14 |
olle |
2028 |
cp.setSshFingerprint(fs.getSshFingerprint()); |
2933 |
14 Nov 14 |
olle |
2029 |
URI uri = cp.changeHost(URI.create("sftp://" + fs.getHost() + "/")); |
2933 |
14 Nov 14 |
olle |
2030 |
ConnectionManager cm = cmf.createConnectionManager(uri, cp); |
2933 |
14 Nov 14 |
olle |
2031 |
try |
2933 |
14 Nov 14 |
olle |
2032 |
{ |
2933 |
14 Nov 14 |
olle |
2033 |
UriMetadata meta = cm.getMetadata(); |
2933 |
14 Nov 14 |
olle |
2034 |
} |
2933 |
14 Nov 14 |
olle |
2035 |
catch (IOException ex) |
2933 |
14 Nov 14 |
olle |
2036 |
{ |
2933 |
14 Nov 14 |
olle |
2037 |
json.put("status", "warning"); |
2933 |
14 Nov 14 |
olle |
2038 |
jsonMessages.add(uri + ": " + ex.getMessage()); |
2933 |
14 Nov 14 |
olle |
2039 |
ex.printStackTrace(); |
2933 |
14 Nov 14 |
olle |
2040 |
} |
2933 |
14 Nov 14 |
olle |
2041 |
} |
2933 |
14 Nov 14 |
olle |
2042 |
} |
2933 |
14 Nov 14 |
olle |
2043 |
} |
2933 |
14 Nov 14 |
olle |
2044 |
if (jsonMessages.size() == 0) jsonMessages.add("Ok"); |
2933 |
14 Nov 14 |
olle |
2045 |
json.put("messages", jsonMessages); |
2933 |
14 Nov 14 |
olle |
2046 |
return json; |
2933 |
14 Nov 14 |
olle |
2047 |
|
2933 |
14 Nov 14 |
olle |
2048 |
} |
2933 |
14 Nov 14 |
olle |
2049 |
|
2933 |
14 Nov 14 |
olle |
2050 |
|
2933 |
14 Nov 14 |
olle |
2051 |
/** |
5271 |
29 Jan 19 |
olle |
Create a directory with the given options. The directory is created in |
5271 |
29 Jan 19 |
olle |
a separate transaction. |
5271 |
29 Jan 19 |
olle |
@since 1.6.0 |
5271 |
29 Jan 19 |
olle |
2055 |
*/ |
5271 |
29 Jan 19 |
olle |
2056 |
public Directory createDirectory(SessionControl sc, Path path, PermissionOptions... permissions) |
5271 |
29 Jan 19 |
olle |
2057 |
{ |
5271 |
29 Jan 19 |
olle |
2058 |
Directory d = null; |
5271 |
29 Jan 19 |
olle |
2059 |
DbControl dc = sc.newDbControl(); |
5271 |
29 Jan 19 |
olle |
2060 |
try |
5271 |
29 Jan 19 |
olle |
2061 |
{ |
5271 |
29 Jan 19 |
olle |
2062 |
d = Directory.getNew(dc, path); |
5271 |
29 Jan 19 |
olle |
2063 |
if (permissions != null) |
5271 |
29 Jan 19 |
olle |
2064 |
{ |
5271 |
29 Jan 19 |
olle |
2065 |
for (PermissionOptions p : permissions) |
5271 |
29 Jan 19 |
olle |
2066 |
{ |
5271 |
29 Jan 19 |
olle |
2067 |
p.applyPermissions(d); |
5271 |
29 Jan 19 |
olle |
2068 |
} |
5271 |
29 Jan 19 |
olle |
2069 |
} |
5271 |
29 Jan 19 |
olle |
2070 |
dc.saveItem(d); |
5271 |
29 Jan 19 |
olle |
2071 |
dc.commit(); |
5271 |
29 Jan 19 |
olle |
2072 |
} |
5271 |
29 Jan 19 |
olle |
2073 |
finally |
5271 |
29 Jan 19 |
olle |
2074 |
{ |
5271 |
29 Jan 19 |
olle |
2075 |
if (dc != null) dc.close(); |
5271 |
29 Jan 19 |
olle |
2076 |
} |
5271 |
29 Jan 19 |
olle |
2077 |
return d; |
5271 |
29 Jan 19 |
olle |
2078 |
} |
5271 |
29 Jan 19 |
olle |
2079 |
|
5271 |
29 Jan 19 |
olle |
2080 |
/** |
5271 |
29 Jan 19 |
olle |
Check for an existing directory. |
5271 |
29 Jan 19 |
olle |
A JSONObject is returned with the result. The following |
5271 |
29 Jan 19 |
olle |
keys are used: |
5271 |
29 Jan 19 |
olle |
<ul> |
5271 |
29 Jan 19 |
olle |
<li>itemType: DIRECTORY |
5271 |
29 Jan 19 |
olle |
<li>name: The full path of the directory |
5271 |
29 Jan 19 |
olle |
<li>id: The id of the directory if it exists |
5271 |
29 Jan 19 |
olle |
<li>status: ok, error, or missing |
5271 |
29 Jan 19 |
olle |
<li>message: A descriptive message in case of an error |
5271 |
29 Jan 19 |
olle |
</ul> |
5271 |
29 Jan 19 |
olle |
@since 1.6.0 |
5271 |
29 Jan 19 |
olle |
2092 |
*/ |
5271 |
29 Jan 19 |
olle |
2093 |
@SuppressWarnings("unchecked") |
5271 |
29 Jan 19 |
olle |
2094 |
public JSONObject checkDirectory(DbControl dc, String name, |
5271 |
29 Jan 19 |
olle |
2095 |
boolean createIfMissing, PermissionOptions... permissions) |
5271 |
29 Jan 19 |
olle |
2096 |
{ |
5271 |
29 Jan 19 |
olle |
2097 |
|
5271 |
29 Jan 19 |
olle |
2098 |
JSONObject json = new JSONObject(); |
5271 |
29 Jan 19 |
olle |
2099 |
JSONArray jsonMessages = new JSONArray(); |
5271 |
29 Jan 19 |
olle |
2100 |
json.put("itemType", Item.DIRECTORY.name()); |
5271 |
29 Jan 19 |
olle |
2101 |
json.put("name", name); |
5271 |
29 Jan 19 |
olle |
2102 |
|
5271 |
29 Jan 19 |
olle |
2103 |
Directory d = null; |
5271 |
29 Jan 19 |
olle |
2104 |
Path path = new Path(name, Path.Type.DIRECTORY); |
5271 |
29 Jan 19 |
olle |
2105 |
try |
5271 |
29 Jan 19 |
olle |
2106 |
{ |
5271 |
29 Jan 19 |
olle |
2107 |
d = Directory.getByPath(dc, path); |
5271 |
29 Jan 19 |
olle |
2108 |
} |
5271 |
29 Jan 19 |
olle |
2109 |
catch (RuntimeException ex) |
5271 |
29 Jan 19 |
olle |
2110 |
{} |
5271 |
29 Jan 19 |
olle |
2111 |
|
5271 |
29 Jan 19 |
olle |
2112 |
if (d == null) |
5271 |
29 Jan 19 |
olle |
2113 |
{ |
5271 |
29 Jan 19 |
olle |
2114 |
if (createIfMissing) |
5271 |
29 Jan 19 |
olle |
2115 |
{ |
5271 |
29 Jan 19 |
olle |
2116 |
d = createDirectory(dc.getSessionControl(), path, permissions); |
5271 |
29 Jan 19 |
olle |
2117 |
d = Directory.getById(dc, d.getId()); |
5271 |
29 Jan 19 |
olle |
2118 |
json.put("id", d.getId()); |
5271 |
29 Jan 19 |
olle |
2119 |
} |
5271 |
29 Jan 19 |
olle |
2120 |
else |
5271 |
29 Jan 19 |
olle |
2121 |
{ |
5271 |
29 Jan 19 |
olle |
2122 |
json.put("status", "missing"); |
5271 |
29 Jan 19 |
olle |
2123 |
jsonMessages.add("Not found"); |
5271 |
29 Jan 19 |
olle |
2124 |
} |
5271 |
29 Jan 19 |
olle |
2125 |
} |
5271 |
29 Jan 19 |
olle |
2126 |
|
5271 |
29 Jan 19 |
olle |
2127 |
if (d != null) |
5271 |
29 Jan 19 |
olle |
2128 |
{ |
5271 |
29 Jan 19 |
olle |
2129 |
json.put("id", d.getId()); |
5271 |
29 Jan 19 |
olle |
2130 |
json.put("status", "ok"); // For now -- more checks below |
5271 |
29 Jan 19 |
olle |
2131 |
|
5271 |
29 Jan 19 |
olle |
2132 |
if (permissions != null) |
5271 |
29 Jan 19 |
olle |
2133 |
{ |
5271 |
29 Jan 19 |
olle |
2134 |
String permissionCheck = null; |
5271 |
29 Jan 19 |
olle |
2135 |
for (PermissionOptions p : permissions) |
5271 |
29 Jan 19 |
olle |
2136 |
{ |
5271 |
29 Jan 19 |
olle |
2137 |
if (!p.checkPermissions(d)) |
5271 |
29 Jan 19 |
olle |
2138 |
{ |
5271 |
29 Jan 19 |
olle |
2139 |
permissionCheck = p.getMessage(); |
5271 |
29 Jan 19 |
olle |
2140 |
break; |
5271 |
29 Jan 19 |
olle |
2141 |
} |
5271 |
29 Jan 19 |
olle |
2142 |
} |
5271 |
29 Jan 19 |
olle |
2143 |
|
5271 |
29 Jan 19 |
olle |
2144 |
if (permissionCheck != null) |
5271 |
29 Jan 19 |
olle |
2145 |
{ |
5271 |
29 Jan 19 |
olle |
2146 |
if (createIfMissing) |
5271 |
29 Jan 19 |
olle |
2147 |
{ |
5271 |
29 Jan 19 |
olle |
2148 |
for (PermissionOptions p : permissions) |
5271 |
29 Jan 19 |
olle |
2149 |
{ |
5271 |
29 Jan 19 |
olle |
2150 |
p.applyPermissions(d); |
5271 |
29 Jan 19 |
olle |
2151 |
} |
5271 |
29 Jan 19 |
olle |
2152 |
if (jsonMessages.size() == 0) jsonMessages.add("Fixed"); |
5271 |
29 Jan 19 |
olle |
2153 |
} |
5271 |
29 Jan 19 |
olle |
2154 |
else |
5271 |
29 Jan 19 |
olle |
2155 |
{ |
5271 |
29 Jan 19 |
olle |
2156 |
json.put("status", "incomplete"); |
5271 |
29 Jan 19 |
olle |
2157 |
jsonMessages.add(permissionCheck); |
5271 |
29 Jan 19 |
olle |
2158 |
} |
5271 |
29 Jan 19 |
olle |
2159 |
} |
5271 |
29 Jan 19 |
olle |
2160 |
} |
5271 |
29 Jan 19 |
olle |
2161 |
} |
5271 |
29 Jan 19 |
olle |
2162 |
if (jsonMessages.size() == 0) jsonMessages.add("Ok"); |
5271 |
29 Jan 19 |
olle |
2163 |
json.put("messages", jsonMessages); |
5271 |
29 Jan 19 |
olle |
2164 |
return json; |
5271 |
29 Jan 19 |
olle |
2165 |
} |
5271 |
29 Jan 19 |
olle |
2166 |
|
5271 |
29 Jan 19 |
olle |
2167 |
|
5271 |
29 Jan 19 |
olle |
2168 |
/** |
2933 |
14 Nov 14 |
olle |
Create a data file type with the given options. The type is created in |
2933 |
14 Nov 14 |
olle |
a separate transaction. |
2933 |
14 Nov 14 |
olle |
@since 2.16 |
2933 |
14 Nov 14 |
olle |
2172 |
*/ |
2933 |
14 Nov 14 |
olle |
2173 |
public DataFileType createDataFileType(SessionControl sc, Datafiletype def) |
2933 |
14 Nov 14 |
olle |
2174 |
{ |
2933 |
14 Nov 14 |
olle |
2175 |
DataFileType type = null; |
2933 |
14 Nov 14 |
olle |
2176 |
DbControl dc = sc.newDbControl(); |
2933 |
14 Nov 14 |
olle |
2177 |
try |
2933 |
14 Nov 14 |
olle |
2178 |
{ |
2933 |
14 Nov 14 |
olle |
2179 |
type = DataFileType.getNew(dc, def.getExternalId(), def.getItemType()); |
2933 |
14 Nov 14 |
olle |
2180 |
type.setName(def.getName()); |
2933 |
14 Nov 14 |
olle |
2181 |
type.setExtension(def.getExtension()); |
2933 |
14 Nov 14 |
olle |
2182 |
type.setDescription(def.getDescription()); |
2933 |
14 Nov 14 |
olle |
2183 |
if (def.getSubtype() != null) |
2933 |
14 Nov 14 |
olle |
2184 |
{ |
2933 |
14 Nov 14 |
olle |
2185 |
type.setGenericType(def.getSubtype().get(dc)); |
2933 |
14 Nov 14 |
olle |
2186 |
} |
2933 |
14 Nov 14 |
olle |
2187 |
dc.saveItem(type); |
2933 |
14 Nov 14 |
olle |
2188 |
dc.commit(); |
2933 |
14 Nov 14 |
olle |
2189 |
} |
2933 |
14 Nov 14 |
olle |
2190 |
finally |
2933 |
14 Nov 14 |
olle |
2191 |
{ |
2933 |
14 Nov 14 |
olle |
2192 |
if (dc != null) dc.close(); |
2933 |
14 Nov 14 |
olle |
2193 |
} |
2933 |
14 Nov 14 |
olle |
2194 |
return type; |
2933 |
14 Nov 14 |
olle |
2195 |
} |
2933 |
14 Nov 14 |
olle |
2196 |
|
2933 |
14 Nov 14 |
olle |
2197 |
|
2933 |
14 Nov 14 |
olle |
2198 |
/** |
2933 |
14 Nov 14 |
olle |
Check for an existing data file type with the given options. |
2933 |
14 Nov 14 |
olle |
A JSONObject is returned with the result. The following |
2933 |
14 Nov 14 |
olle |
keys are used: |
2933 |
14 Nov 14 |
olle |
<ul> |
2933 |
14 Nov 14 |
olle |
<li>itemType: DATAFILETYPE |
2933 |
14 Nov 14 |
olle |
<li>name: The name of the file type |
2933 |
14 Nov 14 |
olle |
<li>id: The id of the file type if it exists |
2933 |
14 Nov 14 |
olle |
<li>status: ok, error, or missing |
2933 |
14 Nov 14 |
olle |
<li>message: A descriptive message in case of an error |
2933 |
14 Nov 14 |
olle |
</ul> |
2933 |
14 Nov 14 |
olle |
@since 2.16 |
2933 |
14 Nov 14 |
olle |
2210 |
*/ |
2933 |
14 Nov 14 |
olle |
2211 |
@SuppressWarnings("unchecked") |
2933 |
14 Nov 14 |
olle |
2212 |
public JSONObject checkDataFileType(DbControl dc, Datafiletype fileType, |
2933 |
14 Nov 14 |
olle |
2213 |
boolean createIfMissing) |
2933 |
14 Nov 14 |
olle |
2214 |
{ |
2933 |
14 Nov 14 |
olle |
2215 |
|
2933 |
14 Nov 14 |
olle |
2216 |
JSONObject json = new JSONObject(); |
2933 |
14 Nov 14 |
olle |
2217 |
JSONArray jsonMessages = new JSONArray(); |
2933 |
14 Nov 14 |
olle |
2218 |
json.put("itemType", Item.DATAFILETYPE.name()); |
2933 |
14 Nov 14 |
olle |
2219 |
json.put("name", fileType.getName()); |
2933 |
14 Nov 14 |
olle |
2220 |
|
2933 |
14 Nov 14 |
olle |
2221 |
List<DataFileType> result = fileType.list(dc); |
2933 |
14 Nov 14 |
olle |
2222 |
if (result.size() == 0) |
2933 |
14 Nov 14 |
olle |
2223 |
{ |
2933 |
14 Nov 14 |
olle |
2224 |
if (createIfMissing) |
2933 |
14 Nov 14 |
olle |
2225 |
{ |
2933 |
14 Nov 14 |
olle |
2226 |
DataFileType type = createDataFileType(dc.getSessionControl(), fileType); |
2933 |
14 Nov 14 |
olle |
2227 |
json.put("id", type.getId()); |
2933 |
14 Nov 14 |
olle |
2228 |
json.put("status", "ok"); |
2933 |
14 Nov 14 |
olle |
2229 |
jsonMessages.add("Created"); |
2933 |
14 Nov 14 |
olle |
2230 |
} |
2933 |
14 Nov 14 |
olle |
2231 |
else |
2933 |
14 Nov 14 |
olle |
2232 |
{ |
2933 |
14 Nov 14 |
olle |
2233 |
json.put("status", "missing"); |
2933 |
14 Nov 14 |
olle |
2234 |
jsonMessages.add("Not found"); |
2933 |
14 Nov 14 |
olle |
2235 |
} |
2933 |
14 Nov 14 |
olle |
2236 |
} |
2933 |
14 Nov 14 |
olle |
2237 |
else if (result.size() > 1) |
2933 |
14 Nov 14 |
olle |
2238 |
{ |
2933 |
14 Nov 14 |
olle |
2239 |
json.put("status", "error"); |
2933 |
14 Nov 14 |
olle |
2240 |
jsonMessages.add("Found > 1 MIME type"); |
2933 |
14 Nov 14 |
olle |
2241 |
} |
2933 |
14 Nov 14 |
olle |
2242 |
else |
2933 |
14 Nov 14 |
olle |
2243 |
{ |
2933 |
14 Nov 14 |
olle |
2244 |
DataFileType ft = result.get(0); |
2933 |
14 Nov 14 |
olle |
2245 |
json.put("id", ft.getId()); |
2933 |
14 Nov 14 |
olle |
2246 |
json.put("status", "ok"); // For now -- more checks below |
2933 |
14 Nov 14 |
olle |
2247 |
|
2933 |
14 Nov 14 |
olle |
2248 |
if (!ft.getExternalId().equals(fileType.getExternalId())) |
2933 |
14 Nov 14 |
olle |
2249 |
{ |
2933 |
14 Nov 14 |
olle |
2250 |
json.put("status", "error"); |
2933 |
14 Nov 14 |
olle |
2251 |
jsonMessages.add("Should have '" + fileType.getExternalId() + "' as external id."); |
2933 |
14 Nov 14 |
olle |
2252 |
} |
2933 |
14 Nov 14 |
olle |
2253 |
|
2933 |
14 Nov 14 |
olle |
2254 |
if (!ft.getItemType().equals(fileType.getItemType())) |
2933 |
14 Nov 14 |
olle |
2255 |
{ |
2933 |
14 Nov 14 |
olle |
2256 |
json.put("status", "error"); |
2933 |
14 Nov 14 |
olle |
2257 |
jsonMessages.add("Should have '" + fileType.getItemType().name() + "' as item type."); |
2933 |
14 Nov 14 |
olle |
2258 |
} |
2933 |
14 Nov 14 |
olle |
2259 |
|
2933 |
14 Nov 14 |
olle |
2260 |
if (fileType.getSubtype() != null) |
2933 |
14 Nov 14 |
olle |
2261 |
{ |
2933 |
14 Nov 14 |
olle |
2262 |
ItemSubtype subtype = fileType.getSubtype().get(dc); |
2933 |
14 Nov 14 |
olle |
2263 |
if (subtype != null && !subtype.equals(ft.getGenericType())) |
2933 |
14 Nov 14 |
olle |
2264 |
{ |
2933 |
14 Nov 14 |
olle |
2265 |
if (createIfMissing) |
2933 |
14 Nov 14 |
olle |
2266 |
{ |
2933 |
14 Nov 14 |
olle |
2267 |
ft.setGenericType(fileType.getSubtype().get(dc)); |
2933 |
14 Nov 14 |
olle |
2268 |
jsonMessages.add("Fixed"); |
2933 |
14 Nov 14 |
olle |
2269 |
} |
2933 |
14 Nov 14 |
olle |
2270 |
else |
2933 |
14 Nov 14 |
olle |
2271 |
{ |
2933 |
14 Nov 14 |
olle |
2272 |
json.put("status", "incomplete"); |
2933 |
14 Nov 14 |
olle |
2273 |
jsonMessages.add("Should be related to '" + fileType.getSubtype().getName() + "' subtype."); |
2933 |
14 Nov 14 |
olle |
2274 |
} |
2933 |
14 Nov 14 |
olle |
2275 |
} |
2933 |
14 Nov 14 |
olle |
2276 |
} |
2933 |
14 Nov 14 |
olle |
2277 |
} |
2933 |
14 Nov 14 |
olle |
2278 |
if (jsonMessages.size() == 0) jsonMessages.add("Ok"); |
2933 |
14 Nov 14 |
olle |
2279 |
json.put("messages", jsonMessages); |
2933 |
14 Nov 14 |
olle |
2280 |
return json; |
2933 |
14 Nov 14 |
olle |
2281 |
|
2933 |
14 Nov 14 |
olle |
2282 |
} |
2933 |
14 Nov 14 |
olle |
2283 |
|
2933 |
14 Nov 14 |
olle |
2284 |
|
2933 |
14 Nov 14 |
olle |
2285 |
/** |
2933 |
14 Nov 14 |
olle |
Create a MIME type with the given options. The type is created in |
2933 |
14 Nov 14 |
olle |
a separate transaction. |
2933 |
14 Nov 14 |
olle |
@since 2.12 |
2933 |
14 Nov 14 |
olle |
2289 |
*/ |
2933 |
14 Nov 14 |
olle |
2290 |
public Extract createExtract(SessionControl sc, String name, Subtype subtype, String description, PermissionOptions permissions) |
2933 |
14 Nov 14 |
olle |
2291 |
{ |
2933 |
14 Nov 14 |
olle |
2292 |
Extract extract = null; |
2933 |
14 Nov 14 |
olle |
2293 |
DbControl dc = sc.newDbControl(); |
2933 |
14 Nov 14 |
olle |
2294 |
try |
2933 |
14 Nov 14 |
olle |
2295 |
{ |
2933 |
14 Nov 14 |
olle |
2296 |
extract = Extract.getNew(dc); |
2933 |
14 Nov 14 |
olle |
2297 |
extract.setName(name); |
2933 |
14 Nov 14 |
olle |
2298 |
extract.setItemSubtype(subtype.get(dc)); |
2933 |
14 Nov 14 |
olle |
2299 |
extract.setDescription(description); |
2933 |
14 Nov 14 |
olle |
2300 |
if (permissions != null) permissions.applyPermissions(extract); |
2933 |
14 Nov 14 |
olle |
2301 |
dc.saveItem(extract); |
2933 |
14 Nov 14 |
olle |
2302 |
dc.commit(); |
2933 |
14 Nov 14 |
olle |
2303 |
} |
2933 |
14 Nov 14 |
olle |
2304 |
finally |
2933 |
14 Nov 14 |
olle |
2305 |
{ |
2933 |
14 Nov 14 |
olle |
2306 |
if (dc != null) dc.close(); |
2933 |
14 Nov 14 |
olle |
2307 |
} |
2933 |
14 Nov 14 |
olle |
2308 |
return extract; |
2933 |
14 Nov 14 |
olle |
2309 |
} |
2933 |
14 Nov 14 |
olle |
2310 |
|
2933 |
14 Nov 14 |
olle |
2311 |
/** |
2933 |
14 Nov 14 |
olle |
Check for an existing Extract type with the given options. |
2933 |
14 Nov 14 |
olle |
A JSONObject is returned with the result. The following |
2933 |
14 Nov 14 |
olle |
keys are used: |
2933 |
14 Nov 14 |
olle |
<ul> |
2933 |
14 Nov 14 |
olle |
<li>itemType: EXTRACT |
2933 |
14 Nov 14 |
olle |
<li>name: The name of the extract |
2933 |
14 Nov 14 |
olle |
<li>id: The id of the extract if it exists |
2933 |
14 Nov 14 |
olle |
<li>status: ok, error, or missing |
2933 |
14 Nov 14 |
olle |
<li>message: A descriptive message in case of an error |
2933 |
14 Nov 14 |
olle |
</ul> |
2933 |
14 Nov 14 |
olle |
@since 2.12 |
2933 |
14 Nov 14 |
olle |
2323 |
*/ |
2933 |
14 Nov 14 |
olle |
2324 |
@SuppressWarnings("unchecked") |
2933 |
14 Nov 14 |
olle |
2325 |
public JSONObject checkExtract(DbControl dc, String name, Subtype subtype, String description, PermissionOptions permissions, |
2933 |
14 Nov 14 |
olle |
2326 |
boolean createIfMissing) |
2933 |
14 Nov 14 |
olle |
2327 |
{ |
2933 |
14 Nov 14 |
olle |
2328 |
|
2933 |
14 Nov 14 |
olle |
2329 |
JSONObject json = new JSONObject(); |
2933 |
14 Nov 14 |
olle |
2330 |
JSONArray jsonMessages = new JSONArray(); |
2933 |
14 Nov 14 |
olle |
2331 |
json.put("itemType", Item.EXTRACT.name()); |
2933 |
14 Nov 14 |
olle |
2332 |
json.put("name", name); |
2933 |
14 Nov 14 |
olle |
2333 |
|
2933 |
14 Nov 14 |
olle |
2334 |
ItemQuery<Extract> query = Extract.getQuery(); |
2933 |
14 Nov 14 |
olle |
2335 |
query.setIncludes(Include.ALL); |
2933 |
14 Nov 14 |
olle |
2336 |
query.restrict( |
2933 |
14 Nov 14 |
olle |
2337 |
Restrictions.eq( |
2933 |
14 Nov 14 |
olle |
2338 |
Hql.property("name"), |
2933 |
14 Nov 14 |
olle |
2339 |
Expressions.parameter("name", name, Type.STRING) |
2933 |
14 Nov 14 |
olle |
2340 |
)); |
2933 |
14 Nov 14 |
olle |
2341 |
|
2933 |
14 Nov 14 |
olle |
2342 |
List<Extract> result = query.list(dc); |
2933 |
14 Nov 14 |
olle |
2343 |
if (result.size() == 0) |
2933 |
14 Nov 14 |
olle |
2344 |
{ |
2933 |
14 Nov 14 |
olle |
2345 |
if (createIfMissing) |
2933 |
14 Nov 14 |
olle |
2346 |
{ |
2933 |
14 Nov 14 |
olle |
2347 |
Extract extract = createExtract(dc.getSessionControl(), name, subtype, description, permissions); |
2933 |
14 Nov 14 |
olle |
2348 |
json.put("id", extract.getId()); |
2933 |
14 Nov 14 |
olle |
2349 |
json.put("status", "ok"); |
2933 |
14 Nov 14 |
olle |
2350 |
jsonMessages.add("Created"); |
2933 |
14 Nov 14 |
olle |
2351 |
} |
2933 |
14 Nov 14 |
olle |
2352 |
else |
2933 |
14 Nov 14 |
olle |
2353 |
{ |
2933 |
14 Nov 14 |
olle |
2354 |
json.put("status", "missing"); |
2933 |
14 Nov 14 |
olle |
2355 |
jsonMessages.add("Not found"); |
2933 |
14 Nov 14 |
olle |
2356 |
} |
2933 |
14 Nov 14 |
olle |
2357 |
} |
2933 |
14 Nov 14 |
olle |
2358 |
else if (result.size() > 1) |
2933 |
14 Nov 14 |
olle |
2359 |
{ |
2933 |
14 Nov 14 |
olle |
2360 |
json.put("status", "error"); |
2933 |
14 Nov 14 |
olle |
2361 |
jsonMessages.add("Found > 1 Extract [" + name + "]"); |
2933 |
14 Nov 14 |
olle |
2362 |
} |
2933 |
14 Nov 14 |
olle |
2363 |
else |
2933 |
14 Nov 14 |
olle |
2364 |
{ |
2933 |
14 Nov 14 |
olle |
2365 |
Extract e = result.get(0); |
2933 |
14 Nov 14 |
olle |
2366 |
json.put("id", e.getId()); |
2933 |
14 Nov 14 |
olle |
2367 |
json.put("status", "ok"); // For now -- more checks below |
2933 |
14 Nov 14 |
olle |
2368 |
|
2933 |
14 Nov 14 |
olle |
2369 |
if (!subtype.load(dc).equals(e.getItemSubtype())) |
2933 |
14 Nov 14 |
olle |
2370 |
{ |
2933 |
14 Nov 14 |
olle |
2371 |
json.put("status", "error"); |
2933 |
14 Nov 14 |
olle |
2372 |
jsonMessages.add("Should have '" + subtype.getName() + "' as subtype."); |
2933 |
14 Nov 14 |
olle |
2373 |
} |
2933 |
14 Nov 14 |
olle |
2374 |
|
2933 |
14 Nov 14 |
olle |
2375 |
if (permissions != null && !permissions.checkPermissions(e)) |
2933 |
14 Nov 14 |
olle |
2376 |
{ |
2933 |
14 Nov 14 |
olle |
2377 |
if (createIfMissing) |
2933 |
14 Nov 14 |
olle |
2378 |
{ |
2933 |
14 Nov 14 |
olle |
2379 |
permissions.applyPermissions(e); |
2933 |
14 Nov 14 |
olle |
2380 |
if (jsonMessages.size() == 0) jsonMessages.add("Fixed"); |
2933 |
14 Nov 14 |
olle |
2381 |
} |
2933 |
14 Nov 14 |
olle |
2382 |
else |
2933 |
14 Nov 14 |
olle |
2383 |
{ |
2933 |
14 Nov 14 |
olle |
2384 |
json.put("status", "incomplete"); |
2933 |
14 Nov 14 |
olle |
2385 |
jsonMessages.add(permissions.getMessage()); |
2933 |
14 Nov 14 |
olle |
2386 |
} |
2933 |
14 Nov 14 |
olle |
2387 |
} |
2933 |
14 Nov 14 |
olle |
2388 |
|
2933 |
14 Nov 14 |
olle |
2389 |
} |
2933 |
14 Nov 14 |
olle |
2390 |
if (jsonMessages.size() == 0) jsonMessages.add("Ok"); |
2933 |
14 Nov 14 |
olle |
2391 |
json.put("messages", jsonMessages); |
2933 |
14 Nov 14 |
olle |
2392 |
return json; |
2933 |
14 Nov 14 |
olle |
2393 |
} |
2933 |
14 Nov 14 |
olle |
2394 |
|
2933 |
14 Nov 14 |
olle |
2395 |
|
2933 |
14 Nov 14 |
olle |
2396 |
/** |
2933 |
14 Nov 14 |
olle |
Create a Plate geometry with the given options. The geometry is created in |
2933 |
14 Nov 14 |
olle |
a separate transaction. |
2933 |
14 Nov 14 |
olle |
@since 2.5 |
2933 |
14 Nov 14 |
olle |
2400 |
*/ |
2933 |
14 Nov 14 |
olle |
2401 |
public PlateGeometry createPlateGeometry(SessionControl sc, Geometry def) |
2933 |
14 Nov 14 |
olle |
2402 |
{ |
2933 |
14 Nov 14 |
olle |
2403 |
PlateGeometry g = null; |
2933 |
14 Nov 14 |
olle |
2404 |
DbControl dc = sc.newDbControl(); |
2933 |
14 Nov 14 |
olle |
2405 |
try |
2933 |
14 Nov 14 |
olle |
2406 |
{ |
2933 |
14 Nov 14 |
olle |
2407 |
g = PlateGeometry.getNew(dc, def.getRows(), def.getColumns()); |
2933 |
14 Nov 14 |
olle |
2408 |
g.setName(def.getName()); |
2933 |
14 Nov 14 |
olle |
2409 |
dc.saveItem(g); |
2933 |
14 Nov 14 |
olle |
2410 |
dc.commit(); |
2933 |
14 Nov 14 |
olle |
2411 |
} |
2933 |
14 Nov 14 |
olle |
2412 |
finally |
2933 |
14 Nov 14 |
olle |
2413 |
{ |
2933 |
14 Nov 14 |
olle |
2414 |
if (dc != null) dc.close(); |
2933 |
14 Nov 14 |
olle |
2415 |
} |
2933 |
14 Nov 14 |
olle |
2416 |
return g; |
2933 |
14 Nov 14 |
olle |
2417 |
} |
2933 |
14 Nov 14 |
olle |
2418 |
|
2933 |
14 Nov 14 |
olle |
2419 |
|
2933 |
14 Nov 14 |
olle |
2420 |
/** |
2933 |
14 Nov 14 |
olle |
Check for an existing Plate geometry type with the given options. |
2933 |
14 Nov 14 |
olle |
A JSONObject is returned with the result. The following |
2933 |
14 Nov 14 |
olle |
keys are used: |
2933 |
14 Nov 14 |
olle |
<ul> |
2933 |
14 Nov 14 |
olle |
<li>itemType: PLATEGEOMETRY |
2933 |
14 Nov 14 |
olle |
<li>name: The name of the geometry |
2933 |
14 Nov 14 |
olle |
<li>id: The id of the geometry if it exists |
2933 |
14 Nov 14 |
olle |
<li>rows: The number of rows |
2933 |
14 Nov 14 |
olle |
<li>column: The number of columns |
2933 |
14 Nov 14 |
olle |
<li>status: ok, error, or missing |
2933 |
14 Nov 14 |
olle |
<li>message: A descriptive message in case of an error |
2933 |
14 Nov 14 |
olle |
</ul> |
2933 |
14 Nov 14 |
olle |
@since 2.5 |
2933 |
14 Nov 14 |
olle |
2434 |
*/ |
2933 |
14 Nov 14 |
olle |
2435 |
@SuppressWarnings("unchecked") |
2933 |
14 Nov 14 |
olle |
2436 |
public JSONObject checkPlateGeometry(DbControl dc, Geometry geometry, boolean createIfMissing) |
2933 |
14 Nov 14 |
olle |
2437 |
{ |
2933 |
14 Nov 14 |
olle |
2438 |
|
2933 |
14 Nov 14 |
olle |
2439 |
JSONObject json = new JSONObject(); |
2933 |
14 Nov 14 |
olle |
2440 |
JSONArray jsonMessages = new JSONArray(); |
2933 |
14 Nov 14 |
olle |
2441 |
json.put("itemType", Item.PLATEGEOMETRY.name()); |
2933 |
14 Nov 14 |
olle |
2442 |
json.put("name", geometry.getName()); |
2933 |
14 Nov 14 |
olle |
2443 |
json.put("rows", geometry.getRows()); |
2933 |
14 Nov 14 |
olle |
2444 |
json.put("columns", geometry.getColumns()); |
2933 |
14 Nov 14 |
olle |
2445 |
|
2933 |
14 Nov 14 |
olle |
2446 |
List<PlateGeometry> result = geometry.list(dc); |
2933 |
14 Nov 14 |
olle |
2447 |
if (result.size() == 0) |
2933 |
14 Nov 14 |
olle |
2448 |
{ |
2933 |
14 Nov 14 |
olle |
2449 |
if (createIfMissing) |
2933 |
14 Nov 14 |
olle |
2450 |
{ |
2933 |
14 Nov 14 |
olle |
2451 |
PlateGeometry g = createPlateGeometry(dc.getSessionControl(), geometry); |
2933 |
14 Nov 14 |
olle |
2452 |
json.put("id", g.getId()); |
2933 |
14 Nov 14 |
olle |
2453 |
json.put("status", "ok"); |
2933 |
14 Nov 14 |
olle |
2454 |
jsonMessages.add("Created"); |
2933 |
14 Nov 14 |
olle |
2455 |
} |
2933 |
14 Nov 14 |
olle |
2456 |
else |
2933 |
14 Nov 14 |
olle |
2457 |
{ |
2933 |
14 Nov 14 |
olle |
2458 |
json.put("status", "missing"); |
2933 |
14 Nov 14 |
olle |
2459 |
jsonMessages.add("Not found"); |
2933 |
14 Nov 14 |
olle |
2460 |
} |
2933 |
14 Nov 14 |
olle |
2461 |
} |
2933 |
14 Nov 14 |
olle |
2462 |
else if (result.size() > 1) |
2933 |
14 Nov 14 |
olle |
2463 |
{ |
2933 |
14 Nov 14 |
olle |
2464 |
json.put("status", "error"); |
2933 |
14 Nov 14 |
olle |
2465 |
jsonMessages.add("Found > 1 geometry"); |
2933 |
14 Nov 14 |
olle |
2466 |
} |
2933 |
14 Nov 14 |
olle |
2467 |
else |
2933 |
14 Nov 14 |
olle |
2468 |
{ |
2933 |
14 Nov 14 |
olle |
2469 |
PlateGeometry g = result.get(0); |
2933 |
14 Nov 14 |
olle |
2470 |
json.put("id", g.getId()); |
2933 |
14 Nov 14 |
olle |
2471 |
json.put("status", "ok"); // For now -- more checks below |
2933 |
14 Nov 14 |
olle |
2472 |
} |
2933 |
14 Nov 14 |
olle |
2473 |
if (jsonMessages.size() == 0) jsonMessages.add("Ok"); |
2933 |
14 Nov 14 |
olle |
2474 |
json.put("messages", jsonMessages); |
2933 |
14 Nov 14 |
olle |
2475 |
return json; |
2933 |
14 Nov 14 |
olle |
2476 |
|
2933 |
14 Nov 14 |
olle |
2477 |
} |
2933 |
14 Nov 14 |
olle |
2478 |
|
2933 |
14 Nov 14 |
olle |
2479 |
@SuppressWarnings("unchecked") |
2933 |
14 Nov 14 |
olle |
2480 |
public JSONObject checkPlugin(DbControl dc, String clazz, |
2933 |
14 Nov 14 |
olle |
2481 |
PermissionOptions permissions, boolean createIfMissing) |
2933 |
14 Nov 14 |
olle |
2482 |
{ |
2933 |
14 Nov 14 |
olle |
2483 |
JSONObject json = new JSONObject(); |
2933 |
14 Nov 14 |
olle |
2484 |
JSONArray jsonMessages = new JSONArray(); |
2933 |
14 Nov 14 |
olle |
2485 |
json.put("itemType", Item.PLUGINDEFINITION.name()); |
2933 |
14 Nov 14 |
olle |
2486 |
json.put("name", clazz); |
2933 |
14 Nov 14 |
olle |
2487 |
|
2933 |
14 Nov 14 |
olle |
2488 |
try |
2933 |
14 Nov 14 |
olle |
2489 |
{ |
2933 |
14 Nov 14 |
olle |
2490 |
PluginDefinition plugin = PluginDefinition.getByClassName(dc, clazz); |
2933 |
14 Nov 14 |
olle |
2491 |
|
2933 |
14 Nov 14 |
olle |
2492 |
json.put("id", plugin.getId()); |
2933 |
14 Nov 14 |
olle |
2493 |
json.put("name", plugin.getName()); |
2933 |
14 Nov 14 |
olle |
2494 |
json.put("status", "ok"); // For now -- more checks below |
2933 |
14 Nov 14 |
olle |
2495 |
|
2933 |
14 Nov 14 |
olle |
2496 |
if (permissions != null && !permissions.checkPermissions(plugin)) |
2933 |
14 Nov 14 |
olle |
2497 |
{ |
2933 |
14 Nov 14 |
olle |
2498 |
if (createIfMissing) |
2933 |
14 Nov 14 |
olle |
2499 |
{ |
2933 |
14 Nov 14 |
olle |
2500 |
permissions.applyPermissions(plugin); |
2933 |
14 Nov 14 |
olle |
2501 |
if (jsonMessages.size() == 0) jsonMessages.add("Fixed"); |
2933 |
14 Nov 14 |
olle |
2502 |
} |
2933 |
14 Nov 14 |
olle |
2503 |
else |
2933 |
14 Nov 14 |
olle |
2504 |
{ |
2933 |
14 Nov 14 |
olle |
2505 |
json.put("status", "incomplete"); |
2933 |
14 Nov 14 |
olle |
2506 |
jsonMessages.add(permissions.getMessage()); |
2933 |
14 Nov 14 |
olle |
2507 |
} |
2933 |
14 Nov 14 |
olle |
2508 |
} |
2933 |
14 Nov 14 |
olle |
2509 |
} |
2933 |
14 Nov 14 |
olle |
2510 |
catch (ItemNotFoundException ex) |
2933 |
14 Nov 14 |
olle |
2511 |
{ |
2933 |
14 Nov 14 |
olle |
2512 |
jsonMessages.add("Not installed"); |
2933 |
14 Nov 14 |
olle |
2513 |
json.put("status", "error"); |
2933 |
14 Nov 14 |
olle |
2514 |
} |
2933 |
14 Nov 14 |
olle |
2515 |
|
2933 |
14 Nov 14 |
olle |
2516 |
if (jsonMessages.size() == 0) jsonMessages.add("Ok"); |
2933 |
14 Nov 14 |
olle |
2517 |
json.put("messages", jsonMessages); |
2933 |
14 Nov 14 |
olle |
2518 |
return json; |
2933 |
14 Nov 14 |
olle |
2519 |
} |
2933 |
14 Nov 14 |
olle |
2520 |
|
2933 |
14 Nov 14 |
olle |
2521 |
@SuppressWarnings("unchecked") |
2933 |
14 Nov 14 |
olle |
2522 |
public JSONObject checkPluginConfiguration(DbControl dc, String clazz, String configName, |
2933 |
14 Nov 14 |
olle |
2523 |
PermissionOptions permissions, boolean createIfMissing) |
2933 |
14 Nov 14 |
olle |
2524 |
{ |
2933 |
14 Nov 14 |
olle |
2525 |
JSONObject json = new JSONObject(); |
2933 |
14 Nov 14 |
olle |
2526 |
JSONArray jsonMessages = new JSONArray(); |
2933 |
14 Nov 14 |
olle |
2527 |
json.put("itemType", Item.PLUGINCONFIGURATION.name()); |
2933 |
14 Nov 14 |
olle |
2528 |
json.put("name", configName); |
2933 |
14 Nov 14 |
olle |
2529 |
|
2933 |
14 Nov 14 |
olle |
2530 |
try |
2933 |
14 Nov 14 |
olle |
2531 |
{ |
2933 |
14 Nov 14 |
olle |
2532 |
PluginDefinition plugin = PluginDefinition.getByClassName(dc, clazz); |
2933 |
14 Nov 14 |
olle |
2533 |
|
2933 |
14 Nov 14 |
olle |
2534 |
ItemQuery<PluginConfiguration> query = plugin.getPluginConfigurations(); |
2933 |
14 Nov 14 |
olle |
2535 |
query.include(Include.ALL); |
2933 |
14 Nov 14 |
olle |
2536 |
query.restrict(Restrictions.eq(Hql.property("name"), Expressions.string(configName))); |
2933 |
14 Nov 14 |
olle |
2537 |
|
2933 |
14 Nov 14 |
olle |
2538 |
List<PluginConfiguration> result = query.list(dc); |
2933 |
14 Nov 14 |
olle |
2539 |
|
2933 |
14 Nov 14 |
olle |
2540 |
if (result.size() == 0) |
2933 |
14 Nov 14 |
olle |
2541 |
{ |
2933 |
14 Nov 14 |
olle |
2542 |
json.put("status", "error"); |
2933 |
14 Nov 14 |
olle |
2543 |
jsonMessages.add("Not installed"); |
2933 |
14 Nov 14 |
olle |
2544 |
} |
2933 |
14 Nov 14 |
olle |
2545 |
else if (result.size() > 1) |
2933 |
14 Nov 14 |
olle |
2546 |
{ |
2933 |
14 Nov 14 |
olle |
2547 |
json.put("status", "error"); |
2933 |
14 Nov 14 |
olle |
2548 |
jsonMessages.add("Found > 1 configuration"); |
2933 |
14 Nov 14 |
olle |
2549 |
} |
2933 |
14 Nov 14 |
olle |
2550 |
else |
2933 |
14 Nov 14 |
olle |
2551 |
{ |
2933 |
14 Nov 14 |
olle |
2552 |
PluginConfiguration config = result.get(0); |
2933 |
14 Nov 14 |
olle |
2553 |
json.put("id", config.getId()); |
2933 |
14 Nov 14 |
olle |
2554 |
json.put("status", "ok"); // For now -- more checks below |
2933 |
14 Nov 14 |
olle |
2555 |
|
2933 |
14 Nov 14 |
olle |
2556 |
if (permissions != null && !permissions.checkPermissions(config)) |
2933 |
14 Nov 14 |
olle |
2557 |
{ |
2933 |
14 Nov 14 |
olle |
2558 |
if (createIfMissing) |
2933 |
14 Nov 14 |
olle |
2559 |
{ |
2933 |
14 Nov 14 |
olle |
2560 |
permissions.applyPermissions(config); |
2933 |
14 Nov 14 |
olle |
2561 |
if (jsonMessages.size() == 0) jsonMessages.add("Fixed"); |
2933 |
14 Nov 14 |
olle |
2562 |
} |
2933 |
14 Nov 14 |
olle |
2563 |
else |
2933 |
14 Nov 14 |
olle |
2564 |
{ |
2933 |
14 Nov 14 |
olle |
2565 |
json.put("status", "incomplete"); |
2933 |
14 Nov 14 |
olle |
2566 |
jsonMessages.add(permissions.getMessage()); |
2933 |
14 Nov 14 |
olle |
2567 |
} |
2933 |
14 Nov 14 |
olle |
2568 |
} |
2933 |
14 Nov 14 |
olle |
2569 |
} |
2933 |
14 Nov 14 |
olle |
2570 |
} |
2933 |
14 Nov 14 |
olle |
2571 |
catch (ItemNotFoundException ex) |
2933 |
14 Nov 14 |
olle |
2572 |
{ |
2933 |
14 Nov 14 |
olle |
2573 |
jsonMessages.add("Not installed"); |
2933 |
14 Nov 14 |
olle |
2574 |
json.put("status", "error"); |
2933 |
14 Nov 14 |
olle |
2575 |
} |
2933 |
14 Nov 14 |
olle |
2576 |
|
2933 |
14 Nov 14 |
olle |
2577 |
if (jsonMessages.size() == 0) jsonMessages.add("Ok"); |
2933 |
14 Nov 14 |
olle |
2578 |
json.put("messages", jsonMessages); |
2933 |
14 Nov 14 |
olle |
2579 |
return json; |
2933 |
14 Nov 14 |
olle |
2580 |
} |
2933 |
14 Nov 14 |
olle |
2581 |
|
2933 |
14 Nov 14 |
olle |
2582 |
private Map<String, String> barcodeSequences; |
2933 |
14 Nov 14 |
olle |
2583 |
/** |
3449 |
28 Jul 15 |
olle |
Maps barcode name (A701, ... , A712, A501, ... , A508) to gene sequence. |
2933 |
14 Nov 14 |
olle |
2585 |
*/ |
2933 |
14 Nov 14 |
olle |
2586 |
private String lookupSequence(String barcode) |
2933 |
14 Nov 14 |
olle |
2587 |
{ |
2933 |
14 Nov 14 |
olle |
2588 |
if (barcodeSequences == null) |
2933 |
14 Nov 14 |
olle |
2589 |
{ |
2933 |
14 Nov 14 |
olle |
2590 |
barcodeSequences = new HashMap<String, String>(); |
3449 |
28 Jul 15 |
olle |
// Illumina Index 1 Primers Lot Number |
3449 |
28 Jul 15 |
olle |
2592 |
barcodeSequences.put("A701", "ATCACGAC"); |
3449 |
28 Jul 15 |
olle |
2593 |
barcodeSequences.put("A702", "ACAGTGGT"); |
3449 |
28 Jul 15 |
olle |
2594 |
barcodeSequences.put("A703", "CAGATCCA"); |
3449 |
28 Jul 15 |
olle |
2595 |
barcodeSequences.put("A704", "ACAAACGG"); |
3449 |
28 Jul 15 |
olle |
2596 |
barcodeSequences.put("A705", "ACCCAGCA"); |
3449 |
28 Jul 15 |
olle |
2597 |
barcodeSequences.put("A706", "AACCCCTC"); |
3449 |
28 Jul 15 |
olle |
2598 |
barcodeSequences.put("A707", "CCCAACCT"); |
3449 |
28 Jul 15 |
olle |
2599 |
barcodeSequences.put("A708", "CACCACAC"); |
3449 |
28 Jul 15 |
olle |
2600 |
barcodeSequences.put("A709", "GAAACCCA"); |
3449 |
28 Jul 15 |
olle |
2601 |
barcodeSequences.put("A710", "TGTGACCA"); |
3449 |
28 Jul 15 |
olle |
2602 |
barcodeSequences.put("A711", "AGGGTCAA"); |
3449 |
28 Jul 15 |
olle |
2603 |
barcodeSequences.put("A712", "AGGAGTGG"); |
3449 |
28 Jul 15 |
olle |
// Illumina Index 2 Primers Lot Number |
3449 |
28 Jul 15 |
olle |
2605 |
barcodeSequences.put("A501", "TGAACCTT"); |
3449 |
28 Jul 15 |
olle |
2606 |
barcodeSequences.put("A502", "TGCTAAGT"); |
3449 |
28 Jul 15 |
olle |
2607 |
barcodeSequences.put("A503", "TGTTCTCT"); |
3449 |
28 Jul 15 |
olle |
2608 |
barcodeSequences.put("A504", "TAAGACAC"); |
3449 |
28 Jul 15 |
olle |
2609 |
barcodeSequences.put("A505", "CTAATCGA"); |
3449 |
28 Jul 15 |
olle |
2610 |
barcodeSequences.put("A506", "CTAGAACA"); |
3449 |
28 Jul 15 |
olle |
2611 |
barcodeSequences.put("A507", "TAAGTTCC"); |
3449 |
28 Jul 15 |
olle |
2612 |
barcodeSequences.put("A508", "TAGACCTA"); |
3449 |
28 Jul 15 |
olle |
2613 |
/* |
2933 |
14 Nov 14 |
olle |
barcodeSequences.put("AD001", "ATCACGA"); |
2933 |
14 Nov 14 |
olle |
barcodeSequences.put("AD002", "CGATGTA"); |
2933 |
14 Nov 14 |
olle |
barcodeSequences.put("AD003", "TTAGGCA"); |
2933 |
14 Nov 14 |
olle |
barcodeSequences.put("AD004", "TGACCAA"); |
2933 |
14 Nov 14 |
olle |
barcodeSequences.put("AD005", "ACAGTGA"); |
2933 |
14 Nov 14 |
olle |
barcodeSequences.put("AD006", "GCCAATA"); |
2933 |
14 Nov 14 |
olle |
barcodeSequences.put("AD007", "CAGATCA"); |
2933 |
14 Nov 14 |
olle |
barcodeSequences.put("AD008", "ACTTGAA"); |
2933 |
14 Nov 14 |
olle |
barcodeSequences.put("AD009", "GATCAGA"); |
2933 |
14 Nov 14 |
olle |
barcodeSequences.put("AD010", "TAGCTTA"); |
2933 |
14 Nov 14 |
olle |
barcodeSequences.put("AD011", "GGCTACA"); |
2933 |
14 Nov 14 |
olle |
barcodeSequences.put("AD012", "CTTGTAA"); |
2933 |
14 Nov 14 |
olle |
barcodeSequences.put("AD013", "AGTCAAA"); |
2933 |
14 Nov 14 |
olle |
barcodeSequences.put("AD014", "AGTTCCA"); |
2933 |
14 Nov 14 |
olle |
barcodeSequences.put("AD015", "ATGTCAA"); |
2933 |
14 Nov 14 |
olle |
barcodeSequences.put("AD016", "CCGTCCA"); |
2933 |
14 Nov 14 |
olle |
barcodeSequences.put("AD018", "GTCCGCA"); |
2933 |
14 Nov 14 |
olle |
barcodeSequences.put("AD019", "GTGAAAA"); |
2933 |
14 Nov 14 |
olle |
barcodeSequences.put("AD020", "GTGGCCA"); |
2933 |
14 Nov 14 |
olle |
barcodeSequences.put("AD021", "GTTTCGA"); |
2933 |
14 Nov 14 |
olle |
barcodeSequences.put("AD022", "CGTACGA"); |
2933 |
14 Nov 14 |
olle |
barcodeSequences.put("AD023", "GAGTGGA"); |
2933 |
14 Nov 14 |
olle |
barcodeSequences.put("AD025", "ACTGATA"); |
2933 |
14 Nov 14 |
olle |
barcodeSequences.put("AD027", "ATTCCTA"); |
3449 |
28 Jul 15 |
olle |
2638 |
*/ |
2933 |
14 Nov 14 |
olle |
2639 |
} |
2933 |
14 Nov 14 |
olle |
2640 |
|
2933 |
14 Nov 14 |
olle |
2641 |
return barcodeSequences.get(barcode); |
2933 |
14 Nov 14 |
olle |
2642 |
} |
2933 |
14 Nov 14 |
olle |
2643 |
|
2933 |
14 Nov 14 |
olle |
2644 |
/** |
2933 |
14 Nov 14 |
olle |
Store options for enumerated annotation types and min/max values for numerical annotations. |
2933 |
14 Nov 14 |
olle |
2646 |
*/ |
2933 |
14 Nov 14 |
olle |
2647 |
static class ValueOptions |
2933 |
14 Nov 14 |
olle |
2648 |
{ |
2933 |
14 Nov 14 |
olle |
2649 |
private final Object[] options; |
2933 |
14 Nov 14 |
olle |
2650 |
private final Integer min; |
2933 |
14 Nov 14 |
olle |
2651 |
private final Integer max; |
2933 |
14 Nov 14 |
olle |
2652 |
|
2933 |
14 Nov 14 |
olle |
2653 |
/** |
2933 |
14 Nov 14 |
olle |
The annotation type is an enumerated annotation type with the following options. |
2933 |
14 Nov 14 |
olle |
2655 |
*/ |
2933 |
14 Nov 14 |
olle |
2656 |
ValueOptions(Object... options) |
2933 |
14 Nov 14 |
olle |
2657 |
{ |
2933 |
14 Nov 14 |
olle |
2658 |
this.options = options; |
2933 |
14 Nov 14 |
olle |
2659 |
this.min = null; |
2933 |
14 Nov 14 |
olle |
2660 |
this.max = null; |
2933 |
14 Nov 14 |
olle |
2661 |
} |
2933 |
14 Nov 14 |
olle |
2662 |
|
2933 |
14 Nov 14 |
olle |
2663 |
/** |
2933 |
14 Nov 14 |
olle |
The annotation type is a numeric annotation type with the following restrictions. |
2933 |
14 Nov 14 |
olle |
2665 |
*/ |
2933 |
14 Nov 14 |
olle |
2666 |
ValueOptions(Integer min, Integer max) |
2933 |
14 Nov 14 |
olle |
2667 |
{ |
2933 |
14 Nov 14 |
olle |
2668 |
this.min = min; |
2933 |
14 Nov 14 |
olle |
2669 |
this.max = max; |
2933 |
14 Nov 14 |
olle |
2670 |
this.options = null; |
2933 |
14 Nov 14 |
olle |
2671 |
} |
2933 |
14 Nov 14 |
olle |
2672 |
|
2933 |
14 Nov 14 |
olle |
2673 |
boolean isEnumeration() |
2933 |
14 Nov 14 |
olle |
2674 |
{ |
2933 |
14 Nov 14 |
olle |
2675 |
return options != null; |
2933 |
14 Nov 14 |
olle |
2676 |
} |
2933 |
14 Nov 14 |
olle |
2677 |
|
2933 |
14 Nov 14 |
olle |
2678 |
Integer getMin() |
2933 |
14 Nov 14 |
olle |
2679 |
{ |
2933 |
14 Nov 14 |
olle |
2680 |
return min; |
2933 |
14 Nov 14 |
olle |
2681 |
} |
2933 |
14 Nov 14 |
olle |
2682 |
|
2933 |
14 Nov 14 |
olle |
2683 |
Integer getMax() |
2933 |
14 Nov 14 |
olle |
2684 |
{ |
2933 |
14 Nov 14 |
olle |
2685 |
return max; |
2933 |
14 Nov 14 |
olle |
2686 |
} |
2933 |
14 Nov 14 |
olle |
2687 |
|
2933 |
14 Nov 14 |
olle |
2688 |
/** |
2933 |
14 Nov 14 |
olle |
Get the options as a List. |
2933 |
14 Nov 14 |
olle |
2690 |
*/ |
2933 |
14 Nov 14 |
olle |
2691 |
List<?> getList() |
2933 |
14 Nov 14 |
olle |
2692 |
{ |
2933 |
14 Nov 14 |
olle |
2693 |
return Arrays.asList(options); |
2933 |
14 Nov 14 |
olle |
2694 |
} |
2933 |
14 Nov 14 |
olle |
2695 |
|
2933 |
14 Nov 14 |
olle |
2696 |
/** |
2933 |
14 Nov 14 |
olle |
Get the options as an array. |
2933 |
14 Nov 14 |
olle |
2698 |
*/ |
2933 |
14 Nov 14 |
olle |
2699 |
Object[] getArray() |
2933 |
14 Nov 14 |
olle |
2700 |
{ |
2933 |
14 Nov 14 |
olle |
2701 |
return options; |
2933 |
14 Nov 14 |
olle |
2702 |
} |
2933 |
14 Nov 14 |
olle |
2703 |
|
2933 |
14 Nov 14 |
olle |
2704 |
/** |
2933 |
14 Nov 14 |
olle |
Add options missing in the current annotation type. |
2933 |
14 Nov 14 |
olle |
2706 |
*/ |
2933 |
14 Nov 14 |
olle |
2707 |
void applyEnumeration(AnnotationType at) |
2933 |
14 Nov 14 |
olle |
2708 |
{ |
2933 |
14 Nov 14 |
olle |
2709 |
List<Object> values = new ArrayList<Object>(at.getValues()); |
2933 |
14 Nov 14 |
olle |
2710 |
for (Object opt : options) |
2933 |
14 Nov 14 |
olle |
2711 |
{ |
2933 |
14 Nov 14 |
olle |
2712 |
System.out.println(opt+":"+values.contains(opt)); |
2933 |
14 Nov 14 |
olle |
2713 |
if (!values.contains(opt)) values.add(opt); |
2933 |
14 Nov 14 |
olle |
2714 |
} |
2933 |
14 Nov 14 |
olle |
2715 |
at.setValues(values); |
2933 |
14 Nov 14 |
olle |
2716 |
} |
2933 |
14 Nov 14 |
olle |
2717 |
} |
2933 |
14 Nov 14 |
olle |
2718 |
|
2933 |
14 Nov 14 |
olle |
2719 |
/** |
2933 |
14 Nov 14 |
olle |
Store permissions that can be applied to shareable items. |
2933 |
14 Nov 14 |
olle |
2721 |
*/ |
2933 |
14 Nov 14 |
olle |
2722 |
static class PermissionOptions |
2933 |
14 Nov 14 |
olle |
2723 |
{ |
2933 |
14 Nov 14 |
olle |
2724 |
private Map<Group, Permission> groupPermissions; |
2933 |
14 Nov 14 |
olle |
2725 |
private Map<Project, Permission> projectPermissions; |
2933 |
14 Nov 14 |
olle |
2726 |
private String message; |
2933 |
14 Nov 14 |
olle |
2727 |
|
2933 |
14 Nov 14 |
olle |
2728 |
PermissionOptions() |
2933 |
14 Nov 14 |
olle |
2729 |
{ |
2933 |
14 Nov 14 |
olle |
2730 |
groupPermissions = new HashMap<Group, Permission>(); |
2933 |
14 Nov 14 |
olle |
2731 |
projectPermissions = new HashMap<Project, Permission>(); |
2933 |
14 Nov 14 |
olle |
2732 |
} |
2933 |
14 Nov 14 |
olle |
2733 |
|
2933 |
14 Nov 14 |
olle |
2734 |
/** |
2933 |
14 Nov 14 |
olle |
Set a permission for the given group. |
2933 |
14 Nov 14 |
olle |
2736 |
*/ |
2933 |
14 Nov 14 |
olle |
2737 |
void set(Group g, Permission p) |
2933 |
14 Nov 14 |
olle |
2738 |
{ |
2933 |
14 Nov 14 |
olle |
2739 |
groupPermissions.put(g, p); |
2933 |
14 Nov 14 |
olle |
2740 |
} |
2933 |
14 Nov 14 |
olle |
2741 |
|
2933 |
14 Nov 14 |
olle |
2742 |
/** |
2933 |
14 Nov 14 |
olle |
Set a permission for the given project. |
2933 |
14 Nov 14 |
olle |
2744 |
*/ |
2933 |
14 Nov 14 |
olle |
2745 |
void set(Project pr, Permission p) |
2933 |
14 Nov 14 |
olle |
2746 |
{ |
2933 |
14 Nov 14 |
olle |
2747 |
projectPermissions.put(pr, p); |
2933 |
14 Nov 14 |
olle |
2748 |
} |
2933 |
14 Nov 14 |
olle |
2749 |
|
2933 |
14 Nov 14 |
olle |
2750 |
/** |
2933 |
14 Nov 14 |
olle |
Check if the given item includes at least all the required permissions. |
2933 |
14 Nov 14 |
olle |
@return TRUE if all permissions are ok, FALSE if not (call getMessage()) |
2933 |
14 Nov 14 |
olle |
to get more information. |
2933 |
14 Nov 14 |
olle |
2754 |
*/ |
2933 |
14 Nov 14 |
olle |
2755 |
boolean checkPermissions(SharedItem item) |
2933 |
14 Nov 14 |
olle |
2756 |
{ |
2933 |
14 Nov 14 |
olle |
2757 |
ProjectKey pKey = item.getProjectKey(); |
2933 |
14 Nov 14 |
olle |
2758 |
for (Map.Entry<Project, Permission> entry : projectPermissions.entrySet()) |
2933 |
14 Nov 14 |
olle |
2759 |
{ |
2933 |
14 Nov 14 |
olle |
2760 |
Project pr = entry.getKey(); |
2933 |
14 Nov 14 |
olle |
2761 |
Permission p = entry.getValue(); |
2933 |
14 Nov 14 |
olle |
2762 |
|
2933 |
14 Nov 14 |
olle |
2763 |
Set<Permission> permissions = pKey != null ? pKey.getPermissions(pr) : null; |
2933 |
14 Nov 14 |
olle |
2764 |
if (p == null) |
2933 |
14 Nov 14 |
olle |
2765 |
{ |
2933 |
14 Nov 14 |
olle |
// The item should not be shared to project 'pr' |
2933 |
14 Nov 14 |
olle |
2767 |
if (permissions != null && permissions.size() > 0) |
2933 |
14 Nov 14 |
olle |
2768 |
{ |
2933 |
14 Nov 14 |
olle |
2769 |
message = "Should not be shared to project: " + pr.getName() + " (" + permissions + ")"; |
2933 |
14 Nov 14 |
olle |
2770 |
return false; |
2933 |
14 Nov 14 |
olle |
2771 |
} |
2933 |
14 Nov 14 |
olle |
2772 |
} |
2933 |
14 Nov 14 |
olle |
2773 |
else |
2933 |
14 Nov 14 |
olle |
2774 |
{ |
2933 |
14 Nov 14 |
olle |
// The item should be shared to project 'pr' with permission 'p' |
2933 |
14 Nov 14 |
olle |
2776 |
if (pKey == null || !permissions.contains(p)) |
2933 |
14 Nov 14 |
olle |
2777 |
{ |
2933 |
14 Nov 14 |
olle |
2778 |
message = "Not shared to project: " + pr.getName() + " (" + p + ")"; |
2933 |
14 Nov 14 |
olle |
2779 |
return false; |
2933 |
14 Nov 14 |
olle |
2780 |
} |
2933 |
14 Nov 14 |
olle |
2781 |
} |
2933 |
14 Nov 14 |
olle |
2782 |
} |
2933 |
14 Nov 14 |
olle |
2783 |
ItemKey key = item.getItemKey(); |
2933 |
14 Nov 14 |
olle |
2784 |
for (Map.Entry<Group, Permission> entry : groupPermissions.entrySet()) |
2933 |
14 Nov 14 |
olle |
2785 |
{ |
2933 |
14 Nov 14 |
olle |
2786 |
Group g = entry.getKey(); |
2933 |
14 Nov 14 |
olle |
2787 |
Permission p = entry.getValue(); |
2933 |
14 Nov 14 |
olle |
2788 |
|
2933 |
14 Nov 14 |
olle |
2789 |
Set<Permission> permissions = key != null ? key.getPermissions(g) : null; |
2933 |
14 Nov 14 |
olle |
2790 |
if (p == null) |
2933 |
14 Nov 14 |
olle |
2791 |
{ |
2933 |
14 Nov 14 |
olle |
// The item should not be shared to group 'g' |
2933 |
14 Nov 14 |
olle |
2793 |
if (permissions != null && permissions.size() > 0) |
2933 |
14 Nov 14 |
olle |
2794 |
{ |
2933 |
14 Nov 14 |
olle |
2795 |
message = "Should not be shared to group: " + g.getName() + " (" + permissions + ")"; |
2933 |
14 Nov 14 |
olle |
2796 |
return false; |
2933 |
14 Nov 14 |
olle |
2797 |
} |
2933 |
14 Nov 14 |
olle |
2798 |
} |
2933 |
14 Nov 14 |
olle |
2799 |
else |
2933 |
14 Nov 14 |
olle |
2800 |
{ |
2933 |
14 Nov 14 |
olle |
// The item should be shared to group 'g' with permission 'p' |
2933 |
14 Nov 14 |
olle |
2802 |
if (key == null || !key.getPermissions(g).contains(p)) |
2933 |
14 Nov 14 |
olle |
2803 |
{ |
2933 |
14 Nov 14 |
olle |
2804 |
message = "Not shared to group: " + g.getName() + " (" + p + ")"; |
2933 |
14 Nov 14 |
olle |
2805 |
return false; |
2933 |
14 Nov 14 |
olle |
2806 |
} |
2933 |
14 Nov 14 |
olle |
2807 |
} |
2933 |
14 Nov 14 |
olle |
2808 |
|
2933 |
14 Nov 14 |
olle |
2809 |
} |
2933 |
14 Nov 14 |
olle |
2810 |
return true; |
2933 |
14 Nov 14 |
olle |
2811 |
} |
2933 |
14 Nov 14 |
olle |
2812 |
|
2933 |
14 Nov 14 |
olle |
2813 |
/** |
2933 |
14 Nov 14 |
olle |
More information about missing permission from the checkPermissions() method. |
2933 |
14 Nov 14 |
olle |
2815 |
*/ |
2933 |
14 Nov 14 |
olle |
2816 |
String getMessage() |
2933 |
14 Nov 14 |
olle |
2817 |
{ |
2933 |
14 Nov 14 |
olle |
2818 |
return message; |
2933 |
14 Nov 14 |
olle |
2819 |
} |
2933 |
14 Nov 14 |
olle |
2820 |
|
2933 |
14 Nov 14 |
olle |
2821 |
/** |
2933 |
14 Nov 14 |
olle |
Apply all permissions to the given item. |
2933 |
14 Nov 14 |
olle |
2823 |
*/ |
2933 |
14 Nov 14 |
olle |
2824 |
void applyPermissions(SharedItem item) |
2933 |
14 Nov 14 |
olle |
2825 |
{ |
2933 |
14 Nov 14 |
olle |
2826 |
MultiPermissions mp = new MultiPermissions(Collections.singleton(item)); |
2933 |
14 Nov 14 |
olle |
2827 |
for (Map.Entry<Group, Permission> entry : groupPermissions.entrySet()) |
2933 |
14 Nov 14 |
olle |
2828 |
{ |
2933 |
14 Nov 14 |
olle |
2829 |
Group g = entry.getKey(); |
2933 |
14 Nov 14 |
olle |
2830 |
Permission p = entry.getValue(); |
2933 |
14 Nov 14 |
olle |
2831 |
if (p == null) |
2933 |
14 Nov 14 |
olle |
2832 |
{ |
2933 |
14 Nov 14 |
olle |
2833 |
mp.setPermissions(g, null); |
2933 |
14 Nov 14 |
olle |
2834 |
} |
2933 |
14 Nov 14 |
olle |
2835 |
else |
2933 |
14 Nov 14 |
olle |
2836 |
{ |
2933 |
14 Nov 14 |
olle |
2837 |
mp.addPermissions(g, Collections.singleton(p)); |
2933 |
14 Nov 14 |
olle |
2838 |
} |
2933 |
14 Nov 14 |
olle |
2839 |
} |
2933 |
14 Nov 14 |
olle |
2840 |
for (Map.Entry<Project, Permission> entry : projectPermissions.entrySet()) |
2933 |
14 Nov 14 |
olle |
2841 |
{ |
2933 |
14 Nov 14 |
olle |
2842 |
Project pr = entry.getKey(); |
2933 |
14 Nov 14 |
olle |
2843 |
Permission p = entry.getValue(); |
2933 |
14 Nov 14 |
olle |
2844 |
if (p == null) |
2933 |
14 Nov 14 |
olle |
2845 |
{ |
2933 |
14 Nov 14 |
olle |
2846 |
mp.setPermissions(pr, null); |
2933 |
14 Nov 14 |
olle |
2847 |
} |
2933 |
14 Nov 14 |
olle |
2848 |
else |
2933 |
14 Nov 14 |
olle |
2849 |
{ |
2933 |
14 Nov 14 |
olle |
2850 |
mp.addPermissions(pr, Collections.singleton(p)); |
2933 |
14 Nov 14 |
olle |
2851 |
} |
2933 |
14 Nov 14 |
olle |
2852 |
} |
2933 |
14 Nov 14 |
olle |
2853 |
mp.updateKeys(item.getDbControl()); |
2933 |
14 Nov 14 |
olle |
2854 |
} |
2933 |
14 Nov 14 |
olle |
2855 |
} |
2933 |
14 Nov 14 |
olle |
2856 |
} |