4353 |
13 Feb 17 |
nicklas |
1 |
package net.sf.basedb.relax.dao; |
4353 |
13 Feb 17 |
nicklas |
2 |
|
4353 |
13 Feb 17 |
nicklas |
3 |
import java.lang.reflect.Field; |
4353 |
13 Feb 17 |
nicklas |
4 |
import java.util.List; |
4353 |
13 Feb 17 |
nicklas |
5 |
|
4353 |
13 Feb 17 |
nicklas |
6 |
import org.json.simple.JSONObject; |
4353 |
13 Feb 17 |
nicklas |
7 |
|
5079 |
08 Nov 18 |
nicklas |
8 |
import net.sf.basedb.core.AnnotationTypeCategory; |
4353 |
13 Feb 17 |
nicklas |
9 |
import net.sf.basedb.core.DbControl; |
4353 |
13 Feb 17 |
nicklas |
10 |
import net.sf.basedb.core.Include; |
4353 |
13 Feb 17 |
nicklas |
11 |
import net.sf.basedb.core.InvalidDataException; |
4353 |
13 Feb 17 |
nicklas |
12 |
import net.sf.basedb.core.Item; |
4353 |
13 Feb 17 |
nicklas |
13 |
import net.sf.basedb.core.ItemNotFoundException; |
4353 |
13 Feb 17 |
nicklas |
14 |
import net.sf.basedb.core.ItemQuery; |
4353 |
13 Feb 17 |
nicklas |
15 |
import net.sf.basedb.core.ItemSubtype; |
4353 |
13 Feb 17 |
nicklas |
16 |
import net.sf.basedb.core.Subtypable; |
4353 |
13 Feb 17 |
nicklas |
17 |
import net.sf.basedb.core.Type; |
4353 |
13 Feb 17 |
nicklas |
18 |
import net.sf.basedb.core.query.Expressions; |
4353 |
13 Feb 17 |
nicklas |
19 |
import net.sf.basedb.core.query.Hql; |
4353 |
13 Feb 17 |
nicklas |
20 |
import net.sf.basedb.core.query.Restriction; |
4353 |
13 Feb 17 |
nicklas |
21 |
import net.sf.basedb.core.query.Restrictions; |
4353 |
13 Feb 17 |
nicklas |
22 |
|
4353 |
13 Feb 17 |
nicklas |
23 |
/** |
4353 |
13 Feb 17 |
nicklas |
Used to define a subtype by name and main item type. |
4353 |
13 Feb 17 |
nicklas |
25 |
|
4353 |
13 Feb 17 |
nicklas |
@author nicklas |
4353 |
13 Feb 17 |
nicklas |
@since 1.0 |
4353 |
13 Feb 17 |
nicklas |
28 |
*/ |
4353 |
13 Feb 17 |
nicklas |
29 |
public class Subtype |
4353 |
13 Feb 17 |
nicklas |
30 |
{ |
4353 |
13 Feb 17 |
nicklas |
31 |
|
4353 |
13 Feb 17 |
nicklas |
32 |
/** |
4353 |
13 Feb 17 |
nicklas |
The definition of the "Patient" subtype. |
4353 |
13 Feb 17 |
nicklas |
34 |
*/ |
4353 |
13 Feb 17 |
nicklas |
35 |
public static final Subtype PATIENT = new Subtype("Patient", null, Item.BIOSOURCE, false); |
4353 |
13 Feb 17 |
nicklas |
36 |
|
4353 |
13 Feb 17 |
nicklas |
37 |
/** |
5109 |
19 Nov 18 |
nicklas |
The definition of the "Retract" subtype. |
5109 |
19 Nov 18 |
nicklas |
@since 1.4 |
5109 |
19 Nov 18 |
nicklas |
40 |
*/ |
5109 |
19 Nov 18 |
nicklas |
41 |
public static final Subtype RETRACT = new Subtype("Retract", null, Item.BIOSOURCE, false); |
5109 |
19 Nov 18 |
nicklas |
42 |
|
5109 |
19 Nov 18 |
nicklas |
43 |
/** |
5109 |
19 Nov 18 |
nicklas |
The definition of the "No" subtype. |
5109 |
19 Nov 18 |
nicklas |
@since 1.4 |
5109 |
19 Nov 18 |
nicklas |
46 |
*/ |
5123 |
21 Nov 18 |
nicklas |
47 |
public static final Subtype NO = new Subtype("No", null, Item.BIOSOURCE, false); |
5109 |
19 Nov 18 |
nicklas |
48 |
|
5109 |
19 Nov 18 |
nicklas |
49 |
/** |
5109 |
19 Nov 18 |
nicklas |
The definition of the "NotAsked" subtype. |
5109 |
19 Nov 18 |
nicklas |
@since 1.4 |
5109 |
19 Nov 18 |
nicklas |
52 |
*/ |
5109 |
19 Nov 18 |
nicklas |
53 |
public static final Subtype NOT_ASKED = new Subtype("NotAsked", null, Item.BIOSOURCE, false); |
5109 |
19 Nov 18 |
nicklas |
54 |
|
5109 |
19 Nov 18 |
nicklas |
55 |
/** |
4353 |
13 Feb 17 |
nicklas |
The definition of the "Case" subtype. |
4353 |
13 Feb 17 |
nicklas |
57 |
*/ |
4353 |
13 Feb 17 |
nicklas |
58 |
public static final Subtype CASE = new Subtype("Case", null, Item.SAMPLE, false); |
4353 |
13 Feb 17 |
nicklas |
59 |
|
4353 |
13 Feb 17 |
nicklas |
60 |
/** |
4353 |
13 Feb 17 |
nicklas |
The definition of the "Specimen" subtype. |
4353 |
13 Feb 17 |
nicklas |
62 |
*/ |
4353 |
13 Feb 17 |
nicklas |
63 |
public static final Subtype SPECIMEN = new Subtype("Specimen", null, Item.SAMPLE, false); |
4353 |
13 Feb 17 |
nicklas |
64 |
|
4353 |
13 Feb 17 |
nicklas |
65 |
/** |
5134 |
21 Nov 18 |
nicklas |
The definition of the "NoSpecimen" subtype. |
5134 |
21 Nov 18 |
nicklas |
@since 1.4 |
5134 |
21 Nov 18 |
nicklas |
68 |
*/ |
5134 |
21 Nov 18 |
nicklas |
69 |
public static final Subtype NO_SPECIMEN = new Subtype("NoSpecimen", null, Item.SAMPLE, false); |
5134 |
21 Nov 18 |
nicklas |
70 |
|
5134 |
21 Nov 18 |
nicklas |
71 |
/** |
5109 |
19 Nov 18 |
nicklas |
The definition of the "Blood" subtype. |
5109 |
19 Nov 18 |
nicklas |
@since 1.4 |
5109 |
19 Nov 18 |
nicklas |
74 |
*/ |
5109 |
19 Nov 18 |
nicklas |
75 |
public static final Subtype BLOOD = new Subtype("Blood", "b", Item.SAMPLE, false); |
5109 |
19 Nov 18 |
nicklas |
76 |
|
5109 |
19 Nov 18 |
nicklas |
77 |
/** |
5109 |
19 Nov 18 |
nicklas |
The definition of the "BloodDNA" subtype. |
5109 |
19 Nov 18 |
nicklas |
@since 1.4 |
5109 |
19 Nov 18 |
nicklas |
80 |
*/ |
5109 |
19 Nov 18 |
nicklas |
81 |
public static final Subtype BLOOD_DNA = new Subtype("BloodDNA", "d", Item.EXTRACT, false); |
5109 |
19 Nov 18 |
nicklas |
82 |
|
5109 |
19 Nov 18 |
nicklas |
83 |
/** |
5077 |
07 Nov 18 |
nicklas |
The definition of the "Lysate" extract subtype. |
5077 |
07 Nov 18 |
nicklas |
@since 1.4 |
5077 |
07 Nov 18 |
nicklas |
86 |
*/ |
5077 |
07 Nov 18 |
nicklas |
87 |
public static final Subtype LYSATE = new Subtype("Lysate", "l", Item.EXTRACT, false); |
5077 |
07 Nov 18 |
nicklas |
88 |
|
5077 |
07 Nov 18 |
nicklas |
89 |
/** |
4353 |
13 Feb 17 |
nicklas |
The definition of the "RNA" extract subtype. |
4353 |
13 Feb 17 |
nicklas |
91 |
*/ |
4353 |
13 Feb 17 |
nicklas |
92 |
public static final Subtype RNA = new Subtype("RNA", "r", Item.EXTRACT, false); |
4353 |
13 Feb 17 |
nicklas |
93 |
|
4353 |
13 Feb 17 |
nicklas |
94 |
/** |
5109 |
19 Nov 18 |
nicklas |
The definition of the "DNA" extract subtype. |
5109 |
19 Nov 18 |
nicklas |
@since 1.4 |
5109 |
19 Nov 18 |
nicklas |
97 |
*/ |
5109 |
19 Nov 18 |
nicklas |
98 |
public static final Subtype DNA = new Subtype("DNA", "d", Item.EXTRACT, false); |
5109 |
19 Nov 18 |
nicklas |
99 |
|
5109 |
19 Nov 18 |
nicklas |
100 |
/** |
5109 |
19 Nov 18 |
nicklas |
The definition of the "FlowThrough" extract subtype. |
5109 |
19 Nov 18 |
nicklas |
@since 1.4 |
5109 |
19 Nov 18 |
nicklas |
103 |
*/ |
5109 |
19 Nov 18 |
nicklas |
104 |
public static final Subtype FLOW_THROUGH = new Subtype("FlowThrough", "ft", Item.EXTRACT, false); |
5109 |
19 Nov 18 |
nicklas |
105 |
|
5109 |
19 Nov 18 |
nicklas |
106 |
/** |
4353 |
13 Feb 17 |
nicklas |
The definition of the "Library" extract subtype. Should already exist |
4353 |
13 Feb 17 |
nicklas |
in BASE. |
4353 |
13 Feb 17 |
nicklas |
109 |
*/ |
4353 |
13 Feb 17 |
nicklas |
110 |
public static final Subtype LIBRARY = new Subtype("Library", "lib", Item.EXTRACT, false); |
4353 |
13 Feb 17 |
nicklas |
111 |
|
4353 |
13 Feb 17 |
nicklas |
112 |
/** |
4399 |
16 Mar 17 |
nicklas |
The definition of the "MergedSequences" derived bioassay subtype. |
4399 |
16 Mar 17 |
nicklas |
114 |
*/ |
4399 |
16 Mar 17 |
nicklas |
115 |
public static final Subtype MERGED_SEQUENCES = new Subtype("MergedSequences", "g", Item.DERIVEDBIOASSAY, false); |
7008 |
25 Jan 23 |
nicklas |
116 |
|
7008 |
25 Jan 23 |
nicklas |
117 |
/** |
7008 |
25 Jan 23 |
nicklas |
The definition of the "Methylation" derived bioassay subtype. |
7008 |
25 Jan 23 |
nicklas |
@since 1.7 |
7008 |
25 Jan 23 |
nicklas |
120 |
*/ |
7008 |
25 Jan 23 |
nicklas |
121 |
public static final Subtype METHYLATION = new Subtype("Methylation", "mth", Item.DERIVEDBIOASSAY, false); |
4399 |
16 Mar 17 |
nicklas |
122 |
|
4409 |
20 Mar 17 |
nicklas |
123 |
/** |
4409 |
20 Mar 17 |
nicklas |
File subtype for sequence data files (FASTQ). |
4409 |
20 Mar 17 |
nicklas |
125 |
*/ |
4409 |
20 Mar 17 |
nicklas |
126 |
public static final Subtype SEQUENCE_DATA = new Subtype("Sequence data", null, Item.FILE, false); |
4399 |
16 Mar 17 |
nicklas |
127 |
|
4399 |
16 Mar 17 |
nicklas |
128 |
/** |
4409 |
20 Mar 17 |
nicklas |
File subtype for raw data files (generic, should already exist in BASE). |
4409 |
20 Mar 17 |
nicklas |
130 |
*/ |
4409 |
20 Mar 17 |
nicklas |
131 |
public static final Subtype RAW_DATA = new Subtype("Raw data", null, Item.FILE, false); |
4409 |
20 Mar 17 |
nicklas |
132 |
|
4409 |
20 Mar 17 |
nicklas |
133 |
/** |
5874 |
23 Mar 20 |
nicklas |
File subtype for variant call files. |
5874 |
23 Mar 20 |
nicklas |
@since 1.6 |
5874 |
23 Mar 20 |
nicklas |
136 |
*/ |
5874 |
23 Mar 20 |
nicklas |
137 |
public static final Subtype VARIANT_CALL_FORMAT = new Subtype("Variant call format", null, Item.FILE, false); |
5874 |
23 Mar 20 |
nicklas |
138 |
|
5874 |
23 Mar 20 |
nicklas |
139 |
/** |
7015 |
26 Jan 23 |
nicklas |
File subtype for IDAT files. |
7015 |
26 Jan 23 |
nicklas |
@since 1.7 |
7015 |
26 Jan 23 |
nicklas |
142 |
*/ |
7015 |
26 Jan 23 |
nicklas |
143 |
public static final Subtype IDAT = new Subtype("IDAT", null, Item.FILE, false); |
7015 |
26 Jan 23 |
nicklas |
144 |
|
7015 |
26 Jan 23 |
nicklas |
145 |
/** |
7015 |
26 Jan 23 |
nicklas |
File subtype for GTC files. |
7015 |
26 Jan 23 |
nicklas |
@since 1.7 |
7015 |
26 Jan 23 |
nicklas |
148 |
*/ |
7015 |
26 Jan 23 |
nicklas |
149 |
public static final Subtype GTC = new Subtype("Genotype call", null, Item.FILE, false); |
7015 |
26 Jan 23 |
nicklas |
150 |
|
7015 |
26 Jan 23 |
nicklas |
151 |
/** |
4353 |
13 Feb 17 |
nicklas |
Get the subtype by name of the static constant defined in this class. |
4353 |
13 Feb 17 |
nicklas |
153 |
|
4353 |
13 Feb 17 |
nicklas |
@param cName The name of the static constant |
4353 |
13 Feb 17 |
nicklas |
@return A subtype object or null if not found |
4353 |
13 Feb 17 |
nicklas |
156 |
*/ |
4353 |
13 Feb 17 |
nicklas |
157 |
public static Subtype getByCName(String cName) |
4353 |
13 Feb 17 |
nicklas |
158 |
{ |
4353 |
13 Feb 17 |
nicklas |
159 |
if (cName == null) return null; |
4353 |
13 Feb 17 |
nicklas |
160 |
Subtype subtype = null; |
4353 |
13 Feb 17 |
nicklas |
161 |
try |
4353 |
13 Feb 17 |
nicklas |
162 |
{ |
4353 |
13 Feb 17 |
nicklas |
163 |
Field f = Subtype.class.getDeclaredField(cName); |
4353 |
13 Feb 17 |
nicklas |
164 |
subtype = (Subtype)f.get(null); |
4353 |
13 Feb 17 |
nicklas |
165 |
} |
4353 |
13 Feb 17 |
nicklas |
166 |
catch (NoSuchFieldException ex) |
4353 |
13 Feb 17 |
nicklas |
167 |
{} |
4353 |
13 Feb 17 |
nicklas |
168 |
catch (IllegalAccessException ex) |
4353 |
13 Feb 17 |
nicklas |
169 |
{} |
4353 |
13 Feb 17 |
nicklas |
170 |
catch (ClassCastException ex) |
4353 |
13 Feb 17 |
nicklas |
171 |
{} |
4353 |
13 Feb 17 |
nicklas |
172 |
return subtype; |
4353 |
13 Feb 17 |
nicklas |
173 |
} |
4353 |
13 Feb 17 |
nicklas |
174 |
|
4353 |
13 Feb 17 |
nicklas |
175 |
private final String name; |
4353 |
13 Feb 17 |
nicklas |
176 |
private final String itemSuffix; |
4353 |
13 Feb 17 |
nicklas |
177 |
private final Item mainType; |
4353 |
13 Feb 17 |
nicklas |
178 |
private final boolean pushAnnotations; |
4353 |
13 Feb 17 |
nicklas |
179 |
private int id; |
4353 |
13 Feb 17 |
nicklas |
180 |
private JSONObject json; |
4353 |
13 Feb 17 |
nicklas |
181 |
|
4353 |
13 Feb 17 |
nicklas |
182 |
/** |
4353 |
13 Feb 17 |
nicklas |
Create a new definition |
4353 |
13 Feb 17 |
nicklas |
@param name The name of the subtype |
4353 |
13 Feb 17 |
nicklas |
@param mainType The main item type of the subtype |
4353 |
13 Feb 17 |
nicklas |
186 |
*/ |
4353 |
13 Feb 17 |
nicklas |
187 |
private Subtype(String name, String itemSuffix, Item mainType, boolean pushAnnotations) |
4353 |
13 Feb 17 |
nicklas |
188 |
{ |
4353 |
13 Feb 17 |
nicklas |
189 |
this.name = name; |
4353 |
13 Feb 17 |
nicklas |
190 |
this.itemSuffix = itemSuffix; |
4353 |
13 Feb 17 |
nicklas |
191 |
this.mainType = mainType; |
4353 |
13 Feb 17 |
nicklas |
192 |
this.pushAnnotations = pushAnnotations; |
4353 |
13 Feb 17 |
nicklas |
193 |
} |
4353 |
13 Feb 17 |
nicklas |
194 |
|
4353 |
13 Feb 17 |
nicklas |
195 |
/** |
4353 |
13 Feb 17 |
nicklas |
Get the name of the subtype. |
4353 |
13 Feb 17 |
nicklas |
197 |
*/ |
4353 |
13 Feb 17 |
nicklas |
198 |
public String getName() |
4353 |
13 Feb 17 |
nicklas |
199 |
{ |
4353 |
13 Feb 17 |
nicklas |
200 |
return name; |
4353 |
13 Feb 17 |
nicklas |
201 |
} |
4353 |
13 Feb 17 |
nicklas |
202 |
|
4353 |
13 Feb 17 |
nicklas |
203 |
/** |
4353 |
13 Feb 17 |
nicklas |
Get the suffix to use for items of this type. |
4353 |
13 Feb 17 |
nicklas |
Null if no suffix is used. |
4353 |
13 Feb 17 |
nicklas |
206 |
*/ |
4353 |
13 Feb 17 |
nicklas |
207 |
public String getItemSuffix() |
4353 |
13 Feb 17 |
nicklas |
208 |
{ |
4353 |
13 Feb 17 |
nicklas |
209 |
return itemSuffix; |
4353 |
13 Feb 17 |
nicklas |
210 |
} |
4353 |
13 Feb 17 |
nicklas |
211 |
|
4353 |
13 Feb 17 |
nicklas |
212 |
/** |
4353 |
13 Feb 17 |
nicklas |
Get the main item type of the subtype. |
4353 |
13 Feb 17 |
nicklas |
214 |
*/ |
4353 |
13 Feb 17 |
nicklas |
215 |
public Item getMainType() |
4353 |
13 Feb 17 |
nicklas |
216 |
{ |
4353 |
13 Feb 17 |
nicklas |
217 |
return mainType; |
4353 |
13 Feb 17 |
nicklas |
218 |
} |
4353 |
13 Feb 17 |
nicklas |
219 |
|
4353 |
13 Feb 17 |
nicklas |
220 |
/** |
4353 |
13 Feb 17 |
nicklas |
Should annotations on items with this subtype be pushed |
4353 |
13 Feb 17 |
nicklas |
to the parent item or not? |
4353 |
13 Feb 17 |
nicklas |
223 |
*/ |
4353 |
13 Feb 17 |
nicklas |
224 |
public boolean getPushAnnotations() |
4353 |
13 Feb 17 |
nicklas |
225 |
{ |
4353 |
13 Feb 17 |
nicklas |
226 |
return pushAnnotations; |
4353 |
13 Feb 17 |
nicklas |
227 |
} |
4353 |
13 Feb 17 |
nicklas |
228 |
|
4353 |
13 Feb 17 |
nicklas |
229 |
/** |
4353 |
13 Feb 17 |
nicklas |
Get the subtype information as a JSON object ready to be sent as an AJAX response. |
4353 |
13 Feb 17 |
nicklas |
231 |
*/ |
4353 |
13 Feb 17 |
nicklas |
232 |
public JSONObject asJSONObject(DbControl dc) |
4353 |
13 Feb 17 |
nicklas |
233 |
{ |
4353 |
13 Feb 17 |
nicklas |
234 |
if (json == null) |
4353 |
13 Feb 17 |
nicklas |
235 |
{ |
4353 |
13 Feb 17 |
nicklas |
236 |
if (id==0) load(dc); // Ensure that the subtype has been loaded |
4353 |
13 Feb 17 |
nicklas |
237 |
json = new JSONObject(); |
4353 |
13 Feb 17 |
nicklas |
238 |
json.put("id", id); |
4353 |
13 Feb 17 |
nicklas |
239 |
json.put("name", getName()); |
4353 |
13 Feb 17 |
nicklas |
240 |
json.put("mainType", getMainType().name()); |
4353 |
13 Feb 17 |
nicklas |
241 |
} |
4353 |
13 Feb 17 |
nicklas |
242 |
return json; |
4353 |
13 Feb 17 |
nicklas |
243 |
} |
4353 |
13 Feb 17 |
nicklas |
244 |
|
4353 |
13 Feb 17 |
nicklas |
245 |
/** |
4353 |
13 Feb 17 |
nicklas |
Load the subtype as a BASE item. Same as {@link #get(DbControl)} |
4353 |
13 Feb 17 |
nicklas |
but throw an exception instead of returning null if no BASE |
4353 |
13 Feb 17 |
nicklas |
item exists. |
4353 |
13 Feb 17 |
nicklas |
@param dc The DbControl to use for database access |
4353 |
13 Feb 17 |
nicklas |
@return An ItemSubtype object |
4353 |
13 Feb 17 |
nicklas |
251 |
*/ |
4353 |
13 Feb 17 |
nicklas |
252 |
public ItemSubtype load(DbControl dc) |
4353 |
13 Feb 17 |
nicklas |
253 |
{ |
4353 |
13 Feb 17 |
nicklas |
254 |
ItemSubtype subtype = null; |
4353 |
13 Feb 17 |
nicklas |
255 |
if (id == 0) |
4353 |
13 Feb 17 |
nicklas |
256 |
{ |
4353 |
13 Feb 17 |
nicklas |
257 |
List<ItemSubtype> result = list(dc); |
4353 |
13 Feb 17 |
nicklas |
258 |
if (result.size() == 0) |
4353 |
13 Feb 17 |
nicklas |
259 |
{ |
4353 |
13 Feb 17 |
nicklas |
260 |
throw new ItemNotFoundException("ItemSubtype["+name+"]"); |
4353 |
13 Feb 17 |
nicklas |
261 |
} |
4353 |
13 Feb 17 |
nicklas |
262 |
else if (result.size() > 1) |
4353 |
13 Feb 17 |
nicklas |
263 |
{ |
4353 |
13 Feb 17 |
nicklas |
264 |
throw new InvalidDataException("Found > 1 ItemSubtype["+name+"]"); |
4353 |
13 Feb 17 |
nicklas |
265 |
} |
4353 |
13 Feb 17 |
nicklas |
266 |
subtype = result.get(0); |
4353 |
13 Feb 17 |
nicklas |
267 |
id = subtype.getId(); |
4353 |
13 Feb 17 |
nicklas |
268 |
} |
4353 |
13 Feb 17 |
nicklas |
269 |
else |
4353 |
13 Feb 17 |
nicklas |
270 |
{ |
4353 |
13 Feb 17 |
nicklas |
271 |
subtype = ItemSubtype.getById(dc, id); |
4353 |
13 Feb 17 |
nicklas |
272 |
} |
4353 |
13 Feb 17 |
nicklas |
273 |
return subtype; |
4353 |
13 Feb 17 |
nicklas |
274 |
} |
4353 |
13 Feb 17 |
nicklas |
275 |
|
4353 |
13 Feb 17 |
nicklas |
276 |
/** |
4353 |
13 Feb 17 |
nicklas |
Load the subtype as a BASE item. Same as {@link #load(DbControl)} |
4353 |
13 Feb 17 |
nicklas |
but return null if no BASE item is found instead of throwing an exception. |
4353 |
13 Feb 17 |
nicklas |
@param dc The DbControl to use for database access |
4353 |
13 Feb 17 |
nicklas |
@return An ItemSubtype object |
4353 |
13 Feb 17 |
nicklas |
281 |
*/ |
4353 |
13 Feb 17 |
nicklas |
282 |
public ItemSubtype get(DbControl dc) |
4353 |
13 Feb 17 |
nicklas |
283 |
{ |
4353 |
13 Feb 17 |
nicklas |
284 |
ItemSubtype subtype = null; |
4353 |
13 Feb 17 |
nicklas |
285 |
if (id == 0) |
4353 |
13 Feb 17 |
nicklas |
286 |
{ |
4353 |
13 Feb 17 |
nicklas |
287 |
List<ItemSubtype> result = list(dc); |
4353 |
13 Feb 17 |
nicklas |
288 |
if (result.size() == 1) |
4353 |
13 Feb 17 |
nicklas |
289 |
{ |
4353 |
13 Feb 17 |
nicklas |
290 |
subtype = result.get(0); |
4353 |
13 Feb 17 |
nicklas |
291 |
id = subtype.getId(); |
4353 |
13 Feb 17 |
nicklas |
292 |
} |
4353 |
13 Feb 17 |
nicklas |
293 |
} |
4353 |
13 Feb 17 |
nicklas |
294 |
else |
4353 |
13 Feb 17 |
nicklas |
295 |
{ |
4353 |
13 Feb 17 |
nicklas |
296 |
subtype = ItemSubtype.getById(dc, id); |
4353 |
13 Feb 17 |
nicklas |
297 |
} |
4353 |
13 Feb 17 |
nicklas |
298 |
return subtype; |
4353 |
13 Feb 17 |
nicklas |
299 |
|
4353 |
13 Feb 17 |
nicklas |
300 |
} |
4353 |
13 Feb 17 |
nicklas |
301 |
|
4353 |
13 Feb 17 |
nicklas |
302 |
/** |
4353 |
13 Feb 17 |
nicklas |
List all subtypes registered in BASE with a name and main item type |
4353 |
13 Feb 17 |
nicklas |
matching this subtype definition. Normally, only a single subtype |
4353 |
13 Feb 17 |
nicklas |
should be returned. |
4353 |
13 Feb 17 |
nicklas |
306 |
*/ |
4353 |
13 Feb 17 |
nicklas |
307 |
public List<ItemSubtype> list(DbControl dc) |
4353 |
13 Feb 17 |
nicklas |
308 |
{ |
4353 |
13 Feb 17 |
nicklas |
309 |
ItemQuery<ItemSubtype> query = ItemSubtype.getQuery(getMainType()); |
4353 |
13 Feb 17 |
nicklas |
310 |
query.restrict( |
4353 |
13 Feb 17 |
nicklas |
311 |
Restrictions.eq( |
4353 |
13 Feb 17 |
nicklas |
312 |
Hql.property("name"), |
4353 |
13 Feb 17 |
nicklas |
313 |
Expressions.parameter("name", getName(), Type.STRING) |
4353 |
13 Feb 17 |
nicklas |
314 |
)); |
4353 |
13 Feb 17 |
nicklas |
315 |
query.include(Include.ALL); |
4353 |
13 Feb 17 |
nicklas |
316 |
return query.list(dc); |
4353 |
13 Feb 17 |
nicklas |
317 |
} |
4353 |
13 Feb 17 |
nicklas |
318 |
|
4353 |
13 Feb 17 |
nicklas |
319 |
/** |
5079 |
08 Nov 18 |
nicklas |
Get the annotation type category with the same name as this subtype. |
5079 |
08 Nov 18 |
nicklas |
Returns null if no category exists. |
5079 |
08 Nov 18 |
nicklas |
@since 1.4 |
5079 |
08 Nov 18 |
nicklas |
323 |
*/ |
5079 |
08 Nov 18 |
nicklas |
324 |
public AnnotationTypeCategory getAnnotationTypeCategory(DbControl dc) |
5079 |
08 Nov 18 |
nicklas |
325 |
{ |
5079 |
08 Nov 18 |
nicklas |
326 |
ItemQuery<AnnotationTypeCategory> query = AnnotationTypeCategory.getQuery(); |
5079 |
08 Nov 18 |
nicklas |
327 |
query.include(Include.ALL); |
5079 |
08 Nov 18 |
nicklas |
328 |
query.restrict( |
5079 |
08 Nov 18 |
nicklas |
329 |
Restrictions.eq( |
5079 |
08 Nov 18 |
nicklas |
330 |
Hql.property("name"), |
5079 |
08 Nov 18 |
nicklas |
331 |
Expressions.parameter("name", getName(), Type.STRING) |
5079 |
08 Nov 18 |
nicklas |
332 |
)); |
5079 |
08 Nov 18 |
nicklas |
333 |
List<AnnotationTypeCategory> result = query.list(dc); |
5079 |
08 Nov 18 |
nicklas |
334 |
return result.size() == 1 ? result.get(0) : null; |
5079 |
08 Nov 18 |
nicklas |
335 |
} |
5079 |
08 Nov 18 |
nicklas |
336 |
|
5079 |
08 Nov 18 |
nicklas |
337 |
/** |
4353 |
13 Feb 17 |
nicklas |
Add a filter restriction the given query so that it |
4353 |
13 Feb 17 |
nicklas |
only return items of this subtype. |
4353 |
13 Feb 17 |
nicklas |
340 |
|
4353 |
13 Feb 17 |
nicklas |
@param query The query to filter |
4353 |
13 Feb 17 |
nicklas |
342 |
*/ |
4353 |
13 Feb 17 |
nicklas |
343 |
public void addFilter(DbControl dc, ItemQuery<? extends Subtypable> query) |
4353 |
13 Feb 17 |
nicklas |
344 |
{ |
4353 |
13 Feb 17 |
nicklas |
345 |
addFilter(dc, query, null); |
4353 |
13 Feb 17 |
nicklas |
346 |
} |
4353 |
13 Feb 17 |
nicklas |
347 |
|
4353 |
13 Feb 17 |
nicklas |
348 |
/** |
4353 |
13 Feb 17 |
nicklas |
Add a filter restriction to the given query based on the |
4353 |
13 Feb 17 |
nicklas |
given subtype. If no alias is specified, the filter is |
4353 |
13 Feb 17 |
nicklas |
applied to the root item, otherwise it is applied |
4353 |
13 Feb 17 |
nicklas |
to the alias of a joined (eg. parent or child) item |
4353 |
13 Feb 17 |
nicklas |
353 |
|
4353 |
13 Feb 17 |
nicklas |
@param query The query to restrict |
4353 |
13 Feb 17 |
nicklas |
@param alias Specify an alias if the filter should be |
4353 |
13 Feb 17 |
nicklas |
placed on a joined (eg. child or parent) item instead |
4353 |
13 Feb 17 |
nicklas |
of the root item |
4353 |
13 Feb 17 |
nicklas |
358 |
*/ |
4353 |
13 Feb 17 |
nicklas |
359 |
public void addFilter(DbControl dc, ItemQuery<?> query, String alias) |
4353 |
13 Feb 17 |
nicklas |
360 |
{ |
4353 |
13 Feb 17 |
nicklas |
361 |
query.restrict(restriction(dc, alias)); |
4353 |
13 Feb 17 |
nicklas |
362 |
} |
4353 |
13 Feb 17 |
nicklas |
363 |
|
4353 |
13 Feb 17 |
nicklas |
364 |
public Restriction restriction(DbControl dc, String alias) |
4353 |
13 Feb 17 |
nicklas |
365 |
{ |
4353 |
13 Feb 17 |
nicklas |
366 |
if (id==0) load(dc); // Ensure that the subtype has been loaded |
4353 |
13 Feb 17 |
nicklas |
367 |
return Restrictions.eq(Hql.property(alias, "itemSubtype.id"), Expressions.integer(id)); |
4353 |
13 Feb 17 |
nicklas |
368 |
} |
4353 |
13 Feb 17 |
nicklas |
369 |
|
4353 |
13 Feb 17 |
nicklas |
370 |
@Override |
4353 |
13 Feb 17 |
nicklas |
371 |
public int hashCode() |
4353 |
13 Feb 17 |
nicklas |
372 |
{ |
4353 |
13 Feb 17 |
nicklas |
373 |
return id; |
4353 |
13 Feb 17 |
nicklas |
374 |
} |
4353 |
13 Feb 17 |
nicklas |
375 |
|
4353 |
13 Feb 17 |
nicklas |
376 |
@Override |
4353 |
13 Feb 17 |
nicklas |
377 |
public boolean equals(Object other) |
4353 |
13 Feb 17 |
nicklas |
378 |
{ |
4353 |
13 Feb 17 |
nicklas |
379 |
if (this == other) return true; |
4353 |
13 Feb 17 |
nicklas |
380 |
if (other == null || this.getClass() != other.getClass()) return false; |
4353 |
13 Feb 17 |
nicklas |
381 |
return id == ((Subtype)other).id; |
4353 |
13 Feb 17 |
nicklas |
382 |
} |
4353 |
13 Feb 17 |
nicklas |
383 |
|
4353 |
13 Feb 17 |
nicklas |
384 |
} |