1543 |
28 Feb 12 |
nicklas |
1 |
package net.sf.basedb.reggie.dao; |
1543 |
28 Feb 12 |
nicklas |
2 |
|
1544 |
29 Feb 12 |
nicklas |
3 |
import java.lang.reflect.Field; |
1552 |
07 Mar 12 |
nicklas |
4 |
import java.util.List; |
1544 |
29 Feb 12 |
nicklas |
5 |
|
5392 |
02 May 19 |
nicklas |
6 |
import org.json.simple.JSONObject; |
5392 |
02 May 19 |
nicklas |
7 |
|
1543 |
28 Feb 12 |
nicklas |
8 |
import net.sf.basedb.core.BioPlate; |
1543 |
28 Feb 12 |
nicklas |
9 |
import net.sf.basedb.core.BioPlateType; |
1543 |
28 Feb 12 |
nicklas |
10 |
import net.sf.basedb.core.BioWell.LockMode; |
1543 |
28 Feb 12 |
nicklas |
11 |
import net.sf.basedb.core.DbControl; |
1552 |
07 Mar 12 |
nicklas |
12 |
import net.sf.basedb.core.Include; |
1610 |
23 Apr 12 |
nicklas |
13 |
import net.sf.basedb.core.InvalidDataException; |
1543 |
28 Feb 12 |
nicklas |
14 |
import net.sf.basedb.core.Item; |
1610 |
23 Apr 12 |
nicklas |
15 |
import net.sf.basedb.core.ItemNotFoundException; |
1543 |
28 Feb 12 |
nicklas |
16 |
import net.sf.basedb.core.ItemQuery; |
1552 |
07 Mar 12 |
nicklas |
17 |
import net.sf.basedb.core.PlateGeometry; |
1543 |
28 Feb 12 |
nicklas |
18 |
import net.sf.basedb.core.Type; |
1543 |
28 Feb 12 |
nicklas |
19 |
import net.sf.basedb.core.query.Expressions; |
1543 |
28 Feb 12 |
nicklas |
20 |
import net.sf.basedb.core.query.Hql; |
3309 |
06 May 15 |
nicklas |
21 |
import net.sf.basedb.core.query.Restriction; |
1543 |
28 Feb 12 |
nicklas |
22 |
import net.sf.basedb.core.query.Restrictions; |
1543 |
28 Feb 12 |
nicklas |
23 |
|
1543 |
28 Feb 12 |
nicklas |
24 |
/** |
1543 |
28 Feb 12 |
nicklas |
Used to define a bioplate types by name and main item type and item subtype. |
1543 |
28 Feb 12 |
nicklas |
26 |
|
1543 |
28 Feb 12 |
nicklas |
@author nicklas |
1543 |
28 Feb 12 |
nicklas |
@since 2.4 |
1543 |
28 Feb 12 |
nicklas |
29 |
*/ |
1543 |
28 Feb 12 |
nicklas |
30 |
public class BioplateType |
1543 |
28 Feb 12 |
nicklas |
31 |
{ |
1543 |
28 Feb 12 |
nicklas |
32 |
|
1543 |
28 Feb 12 |
nicklas |
33 |
/** |
3640 |
02 Dec 15 |
nicklas |
Definition of a storage box. The "Sp" boxes are used a template. "Lys", "DNA", "RNA" and "FT" boxes |
3640 |
02 Dec 15 |
nicklas |
are using the same plate type. |
3640 |
02 Dec 15 |
nicklas |
@since 4.0 |
3640 |
02 Dec 15 |
nicklas |
37 |
*/ |
3640 |
02 Dec 15 |
nicklas |
38 |
public static final BioplateType STORAGE_BOX = |
3640 |
02 Dec 15 |
nicklas |
39 |
new BioplateType("Storage plate", null, null, LockMode.UNLOCKED, Geometry.NINE_BY_NINE, "Sp", 3); |
3640 |
02 Dec 15 |
nicklas |
40 |
|
3640 |
02 Dec 15 |
nicklas |
41 |
/** |
1543 |
28 Feb 12 |
nicklas |
The definition of the "Bioanalyzer RNA Quality control" plate type. |
1543 |
28 Feb 12 |
nicklas |
43 |
*/ |
1543 |
28 Feb 12 |
nicklas |
44 |
public static final BioplateType BA_RNAQC = |
1606 |
19 Apr 12 |
nicklas |
45 |
new BioplateType("Bioanalyzer RNAQC reaction plate", Item.EXTRACT, Subtype.RNAQC, LockMode.LOCKED_AFTER_ADD, Geometry.ONE_BY_TWELVE, "BAPlate", 4); |
1543 |
28 Feb 12 |
nicklas |
46 |
|
1543 |
28 Feb 12 |
nicklas |
47 |
/** |
1543 |
28 Feb 12 |
nicklas |
The definition of the "Caliper RNA Quality control" plate type. |
1543 |
28 Feb 12 |
nicklas |
49 |
*/ |
1543 |
28 Feb 12 |
nicklas |
50 |
public static final BioplateType CALIPER_RNAQC = |
1606 |
19 Apr 12 |
nicklas |
51 |
new BioplateType("Caliper RNAQC reaction plate", Item.EXTRACT, Subtype.RNAQC, LockMode.LOCKED_AFTER_ADD, Geometry.EIGHT_BY_TWELVE, "CaliperPlate", 4); |
1543 |
28 Feb 12 |
nicklas |
52 |
|
1606 |
19 Apr 12 |
nicklas |
53 |
/** |
5482 |
11 Jun 19 |
nicklas |
The definition of the "NormDNA" plate type. |
5361 |
15 Apr 19 |
nicklas |
@since 4.23 |
5361 |
15 Apr 19 |
nicklas |
56 |
*/ |
5361 |
15 Apr 19 |
nicklas |
57 |
public static final BioplateType PRE_NORMALIZED_DNA = |
5482 |
11 Jun 19 |
nicklas |
58 |
new BioplateType("PreNormalizedDNA plate", Item.EXTRACT, Subtype.DNA_NORMALIZED_ALIQUOT, LockMode.LOCKED_AFTER_ADD, Geometry.EIGHT_BY_TWELVE, "NormDNA", 4); |
5361 |
15 Apr 19 |
nicklas |
59 |
|
5361 |
15 Apr 19 |
nicklas |
60 |
|
5361 |
15 Apr 19 |
nicklas |
61 |
/** |
1606 |
19 Apr 12 |
nicklas |
The definition of the "Paraffin block" plate type. |
1666 |
23 May 12 |
nicklas |
@since 2.7 |
1606 |
19 Apr 12 |
nicklas |
64 |
*/ |
1606 |
19 Apr 12 |
nicklas |
65 |
public static final BioplateType PARAFFIN_BLOCK = |
1685 |
04 Jun 12 |
nicklas |
66 |
new BioplateType("FFPE block", Item.SAMPLE, Subtype.HISTOLOGY, LockMode.LOCKED_AFTER_ADD, Geometry.THREE_BY_TWO, "PB", 5); |
1606 |
19 Apr 12 |
nicklas |
67 |
|
1606 |
19 Apr 12 |
nicklas |
68 |
/** |
1685 |
04 Jun 12 |
nicklas |
The definition of the "HE stain glass" plate type. It is locked to samples |
1668 |
25 May 12 |
nicklas |
of subtype {@link Subtype#STAINED}. |
1668 |
25 May 12 |
nicklas |
@since 2.7 |
1668 |
25 May 12 |
nicklas |
72 |
*/ |
1668 |
25 May 12 |
nicklas |
73 |
public static final BioplateType HE_GLASS = |
1685 |
04 Jun 12 |
nicklas |
74 |
new BioplateType("HE stain glass", Item.SAMPLE, Subtype.STAINED, LockMode.LOCKED_AFTER_ADD, Geometry.THREE_BY_TWO, "HE", 5); |
1668 |
25 May 12 |
nicklas |
75 |
|
1865 |
19 Feb 13 |
nicklas |
76 |
/** |
1865 |
19 Feb 13 |
nicklas |
The definition of the "mRNA reaction plate" type. It is locked to extracts |
1865 |
19 Feb 13 |
nicklas |
of subtype {@link Subtype#MRNA} and uses 8x12 geometry. |
1867 |
19 Feb 13 |
nicklas |
@since 2.12 |
1865 |
19 Feb 13 |
nicklas |
80 |
*/ |
1865 |
19 Feb 13 |
nicklas |
81 |
public static final BioplateType MRNA = |
1899 |
07 Mar 13 |
nicklas |
82 |
new BioplateType("mRNA reaction plate", Item.EXTRACT, Subtype.MRNA, LockMode.LOCKED_AFTER_ADD, Geometry.EIGHT_BY_TWELVE, "MRnaPlate", 4); |
1865 |
19 Feb 13 |
nicklas |
83 |
|
1865 |
19 Feb 13 |
nicklas |
84 |
/** |
1865 |
19 Feb 13 |
nicklas |
The definition of the "cDNA reaction plate" type. It is locked to extracts |
1865 |
19 Feb 13 |
nicklas |
of subtype {@link Subtype#CDNA} and uses 8x12 geometry. |
1867 |
19 Feb 13 |
nicklas |
@since 2.12 |
1865 |
19 Feb 13 |
nicklas |
88 |
*/ |
1865 |
19 Feb 13 |
nicklas |
89 |
public static final BioplateType CDNA = |
1899 |
07 Mar 13 |
nicklas |
90 |
new BioplateType("cDNA reaction plate", Item.EXTRACT, Subtype.CDNA, LockMode.LOCKED_AFTER_ADD, Geometry.EIGHT_BY_TWELVE, "CDnaPlate", 4); |
1668 |
25 May 12 |
nicklas |
91 |
|
1668 |
25 May 12 |
nicklas |
92 |
/** |
1893 |
04 Mar 13 |
nicklas |
The definition of the "Library plate" type. It is locked to extracts |
1893 |
04 Mar 13 |
nicklas |
of subtype {@link Subtype#LIBRARY} and uses 8x12 geometry. |
1893 |
04 Mar 13 |
nicklas |
@since 2.12 |
1893 |
04 Mar 13 |
nicklas |
96 |
*/ |
1893 |
04 Mar 13 |
nicklas |
97 |
public static final BioplateType LIBRARY = |
1899 |
07 Mar 13 |
nicklas |
98 |
new BioplateType("Library plate", Item.EXTRACT, Subtype.LIBRARY, LockMode.LOCKED_AFTER_ADD, Geometry.EIGHT_BY_TWELVE, "LibPlate", 4); |
1893 |
04 Mar 13 |
nicklas |
99 |
|
1893 |
04 Mar 13 |
nicklas |
100 |
/** |
3284 |
29 Apr 15 |
nicklas |
The definition of the "NeoPrep plate" type. It is locked to extracts |
3284 |
29 Apr 15 |
nicklas |
of subtype {@link Subtype#LIBRARY} and uses 8x2 geometry. |
3284 |
29 Apr 15 |
nicklas |
@since 3.4 |
3284 |
29 Apr 15 |
nicklas |
104 |
*/ |
3284 |
29 Apr 15 |
nicklas |
105 |
public static final BioplateType NEOPREP = |
3284 |
29 Apr 15 |
nicklas |
106 |
new BioplateType("NeoPrep plate", Item.EXTRACT, Subtype.LIBRARY, LockMode.LOCKED_AFTER_ADD, Geometry.EIGHT_BY_TWO, "NeoPrepPlate", 4); |
3284 |
29 Apr 15 |
nicklas |
107 |
|
5867 |
18 Mar 20 |
nicklas |
108 |
|
5390 |
29 Apr 19 |
nicklas |
109 |
/** |
5867 |
18 Mar 20 |
nicklas |
The definition of the "External library plate" type. It is locked to extracts |
6474 |
04 Nov 21 |
nicklas |
of subtype {@link Subtype#LIBRARY} and uses 8x12 geometry. |
5867 |
18 Mar 20 |
nicklas |
@since 2.12 |
5867 |
18 Mar 20 |
nicklas |
113 |
*/ |
5867 |
18 Mar 20 |
nicklas |
114 |
public static final BioplateType EXTERNAL_LIBRARY = |
5867 |
18 Mar 20 |
nicklas |
115 |
new BioplateType("External library plate", Item.EXTRACT, Subtype.LIBRARY, LockMode.LOCKED_AFTER_ADD, Geometry.EIGHT_BY_TWELVE, "ExternalLibPlate", 4); |
6474 |
04 Nov 21 |
nicklas |
116 |
|
5867 |
18 Mar 20 |
nicklas |
117 |
/** |
6474 |
04 Nov 21 |
nicklas |
The definition of the "External library strip" type. It is locked to extracts |
6474 |
04 Nov 21 |
nicklas |
of subtype {@link Subtype#LIBRARY} and uses 1x8 geometry. |
6474 |
04 Nov 21 |
nicklas |
@since 4.33.4 |
6474 |
04 Nov 21 |
nicklas |
121 |
*/ |
6474 |
04 Nov 21 |
nicklas |
122 |
public static final BioplateType EXTERNAL_LIBRARY_STRIP = |
6474 |
04 Nov 21 |
nicklas |
123 |
new BioplateType("External library strip", Item.EXTRACT, Subtype.LIBRARY, LockMode.LOCKED_AFTER_ADD, Geometry.ONE_BY_EIGHT, "ExternalLibStrip", 5); |
6474 |
04 Nov 21 |
nicklas |
124 |
|
6474 |
04 Nov 21 |
nicklas |
125 |
|
6474 |
04 Nov 21 |
nicklas |
126 |
/** |
5390 |
29 Apr 19 |
nicklas |
The definition of the "MIPs plate" type. It is locked to extracts |
5390 |
29 Apr 19 |
nicklas |
of subtype {@link Subtype#LIBRARY} and uses 8x12 geometry. |
5390 |
29 Apr 19 |
nicklas |
@since 4.23 |
5390 |
29 Apr 19 |
nicklas |
130 |
*/ |
5390 |
29 Apr 19 |
nicklas |
131 |
public static final BioplateType MIPS = |
5390 |
29 Apr 19 |
nicklas |
132 |
new BioplateType("MIPs plate", Item.EXTRACT, Subtype.LIBRARY, LockMode.LOCKED_AFTER_ADD, Geometry.EIGHT_BY_TWELVE, "MIPsPlate", 4); |
3284 |
29 Apr 15 |
nicklas |
133 |
|
3284 |
29 Apr 15 |
nicklas |
134 |
/** |
5429 |
16 May 19 |
nicklas |
Plate type for barcode templates. An actual instance of this type holds virtual biomaterial items |
5429 |
16 May 19 |
nicklas |
with a barcode that is copied to actual libraries on the same coordinate of a target plate. |
5429 |
16 May 19 |
nicklas |
@since 4.23 |
5429 |
16 May 19 |
nicklas |
138 |
*/ |
5429 |
16 May 19 |
nicklas |
139 |
public static final BioplateType BARCODE_TEMPLATE = |
5429 |
16 May 19 |
nicklas |
140 |
new BioplateType("BarcodeTemplate", Item.EXTRACT, null, LockMode.LOCKED_AFTER_ADD, Geometry.EIGHT_BY_TWELVE, "BarcodeTemplate", 2); |
5429 |
16 May 19 |
nicklas |
141 |
|
5429 |
16 May 19 |
nicklas |
142 |
/** |
1544 |
29 Feb 12 |
nicklas |
Get the bioplate type by name of the static constant defined in this class. |
1544 |
29 Feb 12 |
nicklas |
144 |
|
1552 |
07 Mar 12 |
nicklas |
@param cName The name of the static constant |
1544 |
29 Feb 12 |
nicklas |
@return A bioplate type object or null if not found |
1544 |
29 Feb 12 |
nicklas |
147 |
*/ |
1544 |
29 Feb 12 |
nicklas |
148 |
public static BioplateType getByCName(String cName) |
1544 |
29 Feb 12 |
nicklas |
149 |
{ |
1544 |
29 Feb 12 |
nicklas |
150 |
if (cName == null) return null; |
1544 |
29 Feb 12 |
nicklas |
151 |
BioplateType bioplateType = null; |
1544 |
29 Feb 12 |
nicklas |
152 |
try |
1544 |
29 Feb 12 |
nicklas |
153 |
{ |
1544 |
29 Feb 12 |
nicklas |
154 |
Field f = BioplateType.class.getDeclaredField(cName); |
1544 |
29 Feb 12 |
nicklas |
155 |
bioplateType = (BioplateType)f.get(null); |
1544 |
29 Feb 12 |
nicklas |
156 |
} |
1544 |
29 Feb 12 |
nicklas |
157 |
catch (NoSuchFieldException ex) |
1544 |
29 Feb 12 |
nicklas |
158 |
{} |
1544 |
29 Feb 12 |
nicklas |
159 |
catch (IllegalAccessException ex) |
1544 |
29 Feb 12 |
nicklas |
160 |
{} |
1544 |
29 Feb 12 |
nicklas |
161 |
catch (ClassCastException ex) |
1544 |
29 Feb 12 |
nicklas |
162 |
{} |
1544 |
29 Feb 12 |
nicklas |
163 |
return bioplateType; |
1544 |
29 Feb 12 |
nicklas |
164 |
} |
1544 |
29 Feb 12 |
nicklas |
165 |
|
1544 |
29 Feb 12 |
nicklas |
166 |
|
1543 |
28 Feb 12 |
nicklas |
167 |
private final String name; |
1543 |
28 Feb 12 |
nicklas |
168 |
private final Item bioMaterialType; |
1543 |
28 Feb 12 |
nicklas |
169 |
private final Subtype subtype; |
1543 |
28 Feb 12 |
nicklas |
170 |
private final LockMode lockMode; |
1606 |
19 Apr 12 |
nicklas |
171 |
private final Geometry geometry; |
1552 |
07 Mar 12 |
nicklas |
172 |
private final String plateNamePrefix; |
1606 |
19 Apr 12 |
nicklas |
173 |
private final int numDigitsInName; |
1543 |
28 Feb 12 |
nicklas |
174 |
private int id; |
1552 |
07 Mar 12 |
nicklas |
175 |
private int geometryId; |
5392 |
02 May 19 |
nicklas |
176 |
private JSONObject json; |
1543 |
28 Feb 12 |
nicklas |
177 |
|
1543 |
28 Feb 12 |
nicklas |
178 |
/** |
1543 |
28 Feb 12 |
nicklas |
Create a new definition |
1543 |
28 Feb 12 |
nicklas |
@param name The name of the subtype |
1543 |
28 Feb 12 |
nicklas |
@param bioMaterialType The type of biomaterial that can be placed on the bioplate |
1543 |
28 Feb 12 |
nicklas |
@param subtype The subtype of biomaterial that can be placed on the bioplate |
1543 |
28 Feb 12 |
nicklas |
183 |
*/ |
1606 |
19 Apr 12 |
nicklas |
184 |
private BioplateType(String name, Item bioMaterialType, Subtype subtype, LockMode lockMode, Geometry geometry, String plateNamePrefix, int numDigitsInName) |
1543 |
28 Feb 12 |
nicklas |
185 |
{ |
1543 |
28 Feb 12 |
nicklas |
186 |
this.name = name; |
1543 |
28 Feb 12 |
nicklas |
187 |
this.bioMaterialType = bioMaterialType; |
1543 |
28 Feb 12 |
nicklas |
188 |
this.subtype = subtype; |
1543 |
28 Feb 12 |
nicklas |
189 |
this.lockMode = lockMode; |
1606 |
19 Apr 12 |
nicklas |
190 |
this.geometry = geometry; |
1552 |
07 Mar 12 |
nicklas |
191 |
this.plateNamePrefix = plateNamePrefix; |
1606 |
19 Apr 12 |
nicklas |
192 |
this.numDigitsInName = numDigitsInName; |
1543 |
28 Feb 12 |
nicklas |
193 |
} |
1543 |
28 Feb 12 |
nicklas |
194 |
|
1543 |
28 Feb 12 |
nicklas |
195 |
/** |
1668 |
25 May 12 |
nicklas |
Get the name of the plate type. |
1543 |
28 Feb 12 |
nicklas |
197 |
*/ |
1543 |
28 Feb 12 |
nicklas |
198 |
public String getName() |
1543 |
28 Feb 12 |
nicklas |
199 |
{ |
1543 |
28 Feb 12 |
nicklas |
200 |
return name; |
1543 |
28 Feb 12 |
nicklas |
201 |
} |
1543 |
28 Feb 12 |
nicklas |
202 |
|
1543 |
28 Feb 12 |
nicklas |
203 |
/** |
1543 |
28 Feb 12 |
nicklas |
Get the biomaterial item type that can be used on the plate. |
1543 |
28 Feb 12 |
nicklas |
205 |
*/ |
1543 |
28 Feb 12 |
nicklas |
206 |
public Item getBioMaterialType() |
1543 |
28 Feb 12 |
nicklas |
207 |
{ |
1543 |
28 Feb 12 |
nicklas |
208 |
return bioMaterialType; |
1543 |
28 Feb 12 |
nicklas |
209 |
} |
1543 |
28 Feb 12 |
nicklas |
210 |
|
1543 |
28 Feb 12 |
nicklas |
211 |
/** |
1543 |
28 Feb 12 |
nicklas |
Get the biomaterial subtype that can be used on the plate. |
1543 |
28 Feb 12 |
nicklas |
Null if no restriction. |
1543 |
28 Feb 12 |
nicklas |
214 |
*/ |
1543 |
28 Feb 12 |
nicklas |
215 |
public Subtype getSubtype() |
1543 |
28 Feb 12 |
nicklas |
216 |
{ |
1543 |
28 Feb 12 |
nicklas |
217 |
return subtype; |
1543 |
28 Feb 12 |
nicklas |
218 |
} |
1543 |
28 Feb 12 |
nicklas |
219 |
|
1543 |
28 Feb 12 |
nicklas |
220 |
/** |
1668 |
25 May 12 |
nicklas |
Get the prefix that is used when creating new plates of this plate |
1668 |
25 May 12 |
nicklas |
type. |
1668 |
25 May 12 |
nicklas |
@since 2.7 |
1668 |
25 May 12 |
nicklas |
224 |
*/ |
1668 |
25 May 12 |
nicklas |
225 |
public String getPlateNamePrefix() |
1668 |
25 May 12 |
nicklas |
226 |
{ |
1668 |
25 May 12 |
nicklas |
227 |
return plateNamePrefix; |
1668 |
25 May 12 |
nicklas |
228 |
} |
1668 |
25 May 12 |
nicklas |
229 |
|
1668 |
25 May 12 |
nicklas |
230 |
/** |
1543 |
28 Feb 12 |
nicklas |
Get the lock mode for wells. |
1543 |
28 Feb 12 |
nicklas |
232 |
*/ |
1543 |
28 Feb 12 |
nicklas |
233 |
public LockMode getLockMode() |
1543 |
28 Feb 12 |
nicklas |
234 |
{ |
1543 |
28 Feb 12 |
nicklas |
235 |
return lockMode; |
1543 |
28 Feb 12 |
nicklas |
236 |
} |
1543 |
28 Feb 12 |
nicklas |
237 |
|
1543 |
28 Feb 12 |
nicklas |
238 |
/** |
1543 |
28 Feb 12 |
nicklas |
Load the subtype as a BASE item. |
1543 |
28 Feb 12 |
nicklas |
@param dc The DbControl to use for database access |
1543 |
28 Feb 12 |
nicklas |
@return An ItemSubtype object |
1543 |
28 Feb 12 |
nicklas |
242 |
*/ |
1543 |
28 Feb 12 |
nicklas |
243 |
public BioPlateType load(DbControl dc) |
1543 |
28 Feb 12 |
nicklas |
244 |
{ |
1543 |
28 Feb 12 |
nicklas |
245 |
BioPlateType plateType = null; |
1543 |
28 Feb 12 |
nicklas |
246 |
if (id == 0) |
1543 |
28 Feb 12 |
nicklas |
247 |
{ |
1610 |
23 Apr 12 |
nicklas |
248 |
List<BioPlateType> result = list(dc); |
1610 |
23 Apr 12 |
nicklas |
249 |
if (result.size() == 0) |
1610 |
23 Apr 12 |
nicklas |
250 |
{ |
1610 |
23 Apr 12 |
nicklas |
251 |
throw new ItemNotFoundException("BioPlateType["+getName()+"]"); |
1610 |
23 Apr 12 |
nicklas |
252 |
} |
1610 |
23 Apr 12 |
nicklas |
253 |
else if (result.size() > 1) |
1610 |
23 Apr 12 |
nicklas |
254 |
{ |
1610 |
23 Apr 12 |
nicklas |
255 |
throw new InvalidDataException("Found > 1 BioPlateType["+getName()+"]"); |
1610 |
23 Apr 12 |
nicklas |
256 |
} |
1610 |
23 Apr 12 |
nicklas |
257 |
plateType = result.get(0); |
1543 |
28 Feb 12 |
nicklas |
258 |
id = plateType.getId(); |
1543 |
28 Feb 12 |
nicklas |
259 |
} |
1543 |
28 Feb 12 |
nicklas |
260 |
else |
1543 |
28 Feb 12 |
nicklas |
261 |
{ |
1543 |
28 Feb 12 |
nicklas |
262 |
plateType = BioPlateType.getById(dc, id); |
1543 |
28 Feb 12 |
nicklas |
263 |
} |
1543 |
28 Feb 12 |
nicklas |
264 |
return plateType; |
1543 |
28 Feb 12 |
nicklas |
265 |
} |
1543 |
28 Feb 12 |
nicklas |
266 |
|
1543 |
28 Feb 12 |
nicklas |
267 |
/** |
6049 |
12 Nov 20 |
nicklas |
Load the plate type as a BASE item. Same as {@link #load(DbControl)} but return null |
6049 |
12 Nov 20 |
nicklas |
if no BASE item is found instead of throwing an exception. |
6049 |
12 Nov 20 |
nicklas |
@param dc The DbControl to use for database access |
6049 |
12 Nov 20 |
nicklas |
@return An BioPlateType object |
6049 |
12 Nov 20 |
nicklas |
@since 4.28 |
6049 |
12 Nov 20 |
nicklas |
273 |
*/ |
6049 |
12 Nov 20 |
nicklas |
274 |
public BioPlateType get(DbControl dc) |
6049 |
12 Nov 20 |
nicklas |
275 |
{ |
6049 |
12 Nov 20 |
nicklas |
276 |
BioPlateType plateType = null; |
6049 |
12 Nov 20 |
nicklas |
277 |
if (id == 0) |
6049 |
12 Nov 20 |
nicklas |
278 |
{ |
6049 |
12 Nov 20 |
nicklas |
279 |
List<BioPlateType> result = list(dc); |
6049 |
12 Nov 20 |
nicklas |
280 |
if (result.size() == 1) |
6049 |
12 Nov 20 |
nicklas |
281 |
{ |
6049 |
12 Nov 20 |
nicklas |
282 |
plateType = result.get(0); |
6049 |
12 Nov 20 |
nicklas |
283 |
id = plateType.getId(); |
6049 |
12 Nov 20 |
nicklas |
284 |
} |
6049 |
12 Nov 20 |
nicklas |
285 |
} |
6049 |
12 Nov 20 |
nicklas |
286 |
else |
6049 |
12 Nov 20 |
nicklas |
287 |
{ |
6049 |
12 Nov 20 |
nicklas |
288 |
plateType = BioPlateType.getById(dc, id); |
6049 |
12 Nov 20 |
nicklas |
289 |
} |
6049 |
12 Nov 20 |
nicklas |
290 |
return plateType; |
6049 |
12 Nov 20 |
nicklas |
291 |
|
6049 |
12 Nov 20 |
nicklas |
292 |
} |
6049 |
12 Nov 20 |
nicklas |
293 |
|
6049 |
12 Nov 20 |
nicklas |
294 |
/** |
1610 |
23 Apr 12 |
nicklas |
List all bioplate types registered in BASE with a name matching this bioplate type |
1610 |
23 Apr 12 |
nicklas |
definition. Normally, only a single bioplate type should be returned. |
1610 |
23 Apr 12 |
nicklas |
297 |
*/ |
1610 |
23 Apr 12 |
nicklas |
298 |
public List<BioPlateType> list(DbControl dc) |
1610 |
23 Apr 12 |
nicklas |
299 |
{ |
1610 |
23 Apr 12 |
nicklas |
300 |
ItemQuery<BioPlateType> query = BioPlateType.getQuery(); |
1610 |
23 Apr 12 |
nicklas |
301 |
query.restrict( |
1610 |
23 Apr 12 |
nicklas |
302 |
Restrictions.eq( |
1610 |
23 Apr 12 |
nicklas |
303 |
Hql.property("name"), |
1610 |
23 Apr 12 |
nicklas |
304 |
Expressions.parameter("name", getName(), Type.STRING) |
1610 |
23 Apr 12 |
nicklas |
305 |
)); |
1610 |
23 Apr 12 |
nicklas |
306 |
query.include(Include.ALL); |
1610 |
23 Apr 12 |
nicklas |
307 |
return query.list(dc); |
1610 |
23 Apr 12 |
nicklas |
308 |
} |
1610 |
23 Apr 12 |
nicklas |
309 |
|
1610 |
23 Apr 12 |
nicklas |
310 |
/** |
1552 |
07 Mar 12 |
nicklas |
Get the plate geometry this bioplate type normally uses. |
1552 |
07 Mar 12 |
nicklas |
312 |
*/ |
1552 |
07 Mar 12 |
nicklas |
313 |
public PlateGeometry getPlateGeometry(DbControl dc) |
1552 |
07 Mar 12 |
nicklas |
314 |
{ |
1606 |
19 Apr 12 |
nicklas |
315 |
return geometry.load(dc); |
1552 |
07 Mar 12 |
nicklas |
316 |
} |
1552 |
07 Mar 12 |
nicklas |
317 |
|
1552 |
07 Mar 12 |
nicklas |
318 |
/** |
1552 |
07 Mar 12 |
nicklas |
Generate the next auto-generated bioplate name. This method will search all bioplates |
4888 |
05 Jul 18 |
nicklas |
starting with the plate type's prefix and find the one with the highest numeric suffix. |
4888 |
05 Jul 18 |
nicklas |
The returned name is the found plate + 1, but see also |
4888 |
05 Jul 18 |
nicklas |
{@link ReggieItem#getNextItemNames(DbControl, int, ItemQuery, String, int, boolean)} |
4888 |
05 Jul 18 |
nicklas |
for more information about name reservation. |
4888 |
05 Jul 18 |
nicklas |
@since 4.19 |
4888 |
05 Jul 18 |
nicklas |
325 |
*/ |
4888 |
05 Jul 18 |
nicklas |
326 |
public String getNextPlateName(DbControl dc, boolean releaseIfTransactionFails) |
4888 |
05 Jul 18 |
nicklas |
327 |
{ |
4888 |
05 Jul 18 |
nicklas |
328 |
ItemQuery<BioPlate> query = BioPlate.getQuery(); |
4888 |
05 Jul 18 |
nicklas |
329 |
addFilter(dc, query, false); |
4888 |
05 Jul 18 |
nicklas |
330 |
query.include(Include.ALL); |
4888 |
05 Jul 18 |
nicklas |
331 |
return ReggieItem.getNextItemName(dc, query, plateNamePrefix, numDigitsInName, releaseIfTransactionFails); |
4888 |
05 Jul 18 |
nicklas |
332 |
} |
4888 |
05 Jul 18 |
nicklas |
333 |
|
4888 |
05 Jul 18 |
nicklas |
334 |
/** |
1543 |
28 Feb 12 |
nicklas |
Add a filter restriction the given bioplate query so that it |
1543 |
28 Feb 12 |
nicklas |
only return plates of this type. |
1543 |
28 Feb 12 |
nicklas |
337 |
|
1543 |
28 Feb 12 |
nicklas |
@param query The query to filter |
1543 |
28 Feb 12 |
nicklas |
@param excludeDestroyed If set, an additional filter is added so that only |
1543 |
28 Feb 12 |
nicklas |
non-destroyed bioplates are returned |
1543 |
28 Feb 12 |
nicklas |
341 |
*/ |
1543 |
28 Feb 12 |
nicklas |
342 |
public void addFilter(DbControl dc, ItemQuery<? extends BioPlate> query, boolean excludeDestroyed) |
1543 |
28 Feb 12 |
nicklas |
343 |
{ |
1543 |
28 Feb 12 |
nicklas |
344 |
addFilter(dc, query, null, excludeDestroyed); |
1543 |
28 Feb 12 |
nicklas |
345 |
} |
1543 |
28 Feb 12 |
nicklas |
346 |
|
1543 |
28 Feb 12 |
nicklas |
347 |
/** |
1543 |
28 Feb 12 |
nicklas |
Add a filter restriction to the given query based on the |
1543 |
28 Feb 12 |
nicklas |
given subtype. If no alias is specified, the filter is |
1543 |
28 Feb 12 |
nicklas |
applied to the root item, otherwise it is applied |
1543 |
28 Feb 12 |
nicklas |
to the alias of a joined (eg. parent or child) item |
1543 |
28 Feb 12 |
nicklas |
352 |
|
1543 |
28 Feb 12 |
nicklas |
@param query The query to restrict |
1543 |
28 Feb 12 |
nicklas |
@param alias Specify an alias if the filter should be |
1543 |
28 Feb 12 |
nicklas |
placed on a joined (eg. child or parent) item instead |
1543 |
28 Feb 12 |
nicklas |
of the root item |
1543 |
28 Feb 12 |
nicklas |
357 |
*/ |
1606 |
19 Apr 12 |
nicklas |
358 |
public void addFilter(DbControl dc, ItemQuery<?> query, String alias, boolean excludeDestroyed) |
1543 |
28 Feb 12 |
nicklas |
359 |
{ |
3309 |
06 May 15 |
nicklas |
360 |
query.restrict(restriction(dc, alias)); |
1543 |
28 Feb 12 |
nicklas |
361 |
if (excludeDestroyed) |
1543 |
28 Feb 12 |
nicklas |
362 |
{ |
1543 |
28 Feb 12 |
nicklas |
363 |
query.restrict(Restrictions.eq(Hql.property(alias, "destroyed"), Expressions.parameter("destroyed", false, Type.BOOLEAN))); |
1543 |
28 Feb 12 |
nicklas |
364 |
} |
1543 |
28 Feb 12 |
nicklas |
365 |
} |
1543 |
28 Feb 12 |
nicklas |
366 |
|
3309 |
06 May 15 |
nicklas |
367 |
/** |
3309 |
06 May 15 |
nicklas |
Create a restriction for returning only bioplates of this type. |
3309 |
06 May 15 |
nicklas |
@since 3.4 |
3309 |
06 May 15 |
nicklas |
370 |
*/ |
3309 |
06 May 15 |
nicklas |
371 |
public Restriction restriction(DbControl dc, String alias) |
3309 |
06 May 15 |
nicklas |
372 |
{ |
3309 |
06 May 15 |
nicklas |
373 |
if (id==0) load(dc); // Ensure that the subtype has been loaded |
3309 |
06 May 15 |
nicklas |
374 |
return Restrictions.eq(Hql.property(alias, "bioPlateType"), Expressions.integer(id)); |
3309 |
06 May 15 |
nicklas |
375 |
} |
5392 |
02 May 19 |
nicklas |
376 |
|
5392 |
02 May 19 |
nicklas |
377 |
/** |
5392 |
02 May 19 |
nicklas |
Get the file type information as a JSON object ready to be sent as an AJAX response. |
5392 |
02 May 19 |
nicklas |
@since 4.23 |
5392 |
02 May 19 |
nicklas |
380 |
*/ |
5392 |
02 May 19 |
nicklas |
381 |
public JSONObject asJSONObject(DbControl dc) |
5392 |
02 May 19 |
nicklas |
382 |
{ |
5392 |
02 May 19 |
nicklas |
383 |
if (json == null) |
5392 |
02 May 19 |
nicklas |
384 |
{ |
5392 |
02 May 19 |
nicklas |
385 |
if (id==0) load(dc); // Ensure that the file type has been loaded |
5392 |
02 May 19 |
nicklas |
386 |
json = new JSONObject(); |
5392 |
02 May 19 |
nicklas |
387 |
json.put("id", id); |
5392 |
02 May 19 |
nicklas |
388 |
json.put("name", getName()); |
5392 |
02 May 19 |
nicklas |
389 |
json.put("bioMaterialType", getBioMaterialType().name()); |
5392 |
02 May 19 |
nicklas |
390 |
json.put("subtype", getSubtype().asJSONObject(dc)); |
5392 |
02 May 19 |
nicklas |
391 |
} |
5392 |
02 May 19 |
nicklas |
392 |
return json; |
5392 |
02 May 19 |
nicklas |
393 |
} |
3309 |
06 May 15 |
nicklas |
394 |
|
1543 |
28 Feb 12 |
nicklas |
395 |
} |