2933 |
14 Nov 14 |
olle |
1 |
package net.sf.basedb.meludi.dao; |
2933 |
14 Nov 14 |
olle |
2 |
|
2933 |
14 Nov 14 |
olle |
3 |
import java.lang.reflect.Field; |
2933 |
14 Nov 14 |
olle |
4 |
import java.util.ArrayList; |
2933 |
14 Nov 14 |
olle |
5 |
import java.util.List; |
2933 |
14 Nov 14 |
olle |
6 |
|
2933 |
14 Nov 14 |
olle |
7 |
import net.sf.basedb.core.BioPlate; |
2933 |
14 Nov 14 |
olle |
8 |
import net.sf.basedb.core.BioPlateType; |
2933 |
14 Nov 14 |
olle |
9 |
import net.sf.basedb.core.BioWell.LockMode; |
2933 |
14 Nov 14 |
olle |
10 |
import net.sf.basedb.core.DbControl; |
2933 |
14 Nov 14 |
olle |
11 |
import net.sf.basedb.core.Include; |
2933 |
14 Nov 14 |
olle |
12 |
import net.sf.basedb.core.InvalidDataException; |
2933 |
14 Nov 14 |
olle |
13 |
import net.sf.basedb.core.Item; |
2933 |
14 Nov 14 |
olle |
14 |
import net.sf.basedb.core.ItemNotFoundException; |
2933 |
14 Nov 14 |
olle |
15 |
import net.sf.basedb.core.ItemQuery; |
2933 |
14 Nov 14 |
olle |
16 |
import net.sf.basedb.core.PlateGeometry; |
2933 |
14 Nov 14 |
olle |
17 |
import net.sf.basedb.core.Type; |
2933 |
14 Nov 14 |
olle |
18 |
import net.sf.basedb.core.query.Expressions; |
2933 |
14 Nov 14 |
olle |
19 |
import net.sf.basedb.core.query.Hql; |
2933 |
14 Nov 14 |
olle |
20 |
import net.sf.basedb.core.query.Orders; |
2933 |
14 Nov 14 |
olle |
21 |
import net.sf.basedb.core.query.Restrictions; |
2933 |
14 Nov 14 |
olle |
22 |
import net.sf.basedb.util.MD5; |
2933 |
14 Nov 14 |
olle |
23 |
|
2933 |
14 Nov 14 |
olle |
24 |
/** |
2933 |
14 Nov 14 |
olle |
Used to define a bioplate types by name and main item type and item subtype. |
2933 |
14 Nov 14 |
olle |
26 |
|
2933 |
14 Nov 14 |
olle |
@author nicklas |
2933 |
14 Nov 14 |
olle |
@since 2.4 |
2933 |
14 Nov 14 |
olle |
29 |
*/ |
2933 |
14 Nov 14 |
olle |
30 |
public class BioplateType |
2933 |
14 Nov 14 |
olle |
31 |
{ |
2933 |
14 Nov 14 |
olle |
32 |
|
2933 |
14 Nov 14 |
olle |
33 |
/** |
2933 |
14 Nov 14 |
olle |
The definition of the "Bioanalyzer RNA Quality control" plate type. |
2933 |
14 Nov 14 |
olle |
35 |
*/ |
3044 |
16 Dec 14 |
olle |
36 |
/* |
2933 |
14 Nov 14 |
olle |
public static final BioplateType BA_RNAQC = |
2933 |
14 Nov 14 |
olle |
new BioplateType("Bioanalyzer RNAQC reaction plate", Item.EXTRACT, Subtype.RNAQC, LockMode.LOCKED_AFTER_ADD, Geometry.ONE_BY_TWELVE, "BAPlate", 4); |
3044 |
16 Dec 14 |
olle |
39 |
*/ |
2933 |
14 Nov 14 |
olle |
40 |
|
2933 |
14 Nov 14 |
olle |
41 |
/** |
2933 |
14 Nov 14 |
olle |
The definition of the "Caliper RNA Quality control" plate type. |
2933 |
14 Nov 14 |
olle |
43 |
*/ |
3044 |
16 Dec 14 |
olle |
44 |
/* |
2933 |
14 Nov 14 |
olle |
public static final BioplateType CALIPER_RNAQC = |
2933 |
14 Nov 14 |
olle |
new BioplateType("Caliper RNAQC reaction plate", Item.EXTRACT, Subtype.RNAQC, LockMode.LOCKED_AFTER_ADD, Geometry.EIGHT_BY_TWELVE, "CaliperPlate", 4); |
3044 |
16 Dec 14 |
olle |
47 |
*/ |
2933 |
14 Nov 14 |
olle |
48 |
|
2933 |
14 Nov 14 |
olle |
49 |
/** |
2933 |
14 Nov 14 |
olle |
The definition of the "Paraffin block" plate type. |
2933 |
14 Nov 14 |
olle |
@since 2.7 |
2933 |
14 Nov 14 |
olle |
52 |
*/ |
3044 |
16 Dec 14 |
olle |
53 |
/* |
2933 |
14 Nov 14 |
olle |
public static final BioplateType PARAFFIN_BLOCK = |
2933 |
14 Nov 14 |
olle |
new BioplateType("FFPE block", Item.SAMPLE, Subtype.HISTOLOGY, LockMode.LOCKED_AFTER_ADD, Geometry.THREE_BY_TWO, "PB", 5); |
3044 |
16 Dec 14 |
olle |
56 |
*/ |
2933 |
14 Nov 14 |
olle |
57 |
|
2933 |
14 Nov 14 |
olle |
58 |
/** |
5111 |
20 Nov 18 |
olle |
The definition of the "HE stain glass" plate type. It is locked to samples |
5111 |
20 Nov 18 |
olle |
of subtype {@link Subtype#STAINED}. |
5111 |
20 Nov 18 |
olle |
@since 2.7 |
5111 |
20 Nov 18 |
olle |
62 |
*/ |
5111 |
20 Nov 18 |
olle |
63 |
public static final BioplateType HE_GLASS = |
5111 |
20 Nov 18 |
olle |
64 |
new BioplateType("HE stain glass", Item.SAMPLE, Subtype.STAINED, LockMode.LOCKED_AFTER_ADD, Geometry.THREE_BY_TWO, "HE", 5); |
5111 |
20 Nov 18 |
olle |
65 |
|
5111 |
20 Nov 18 |
olle |
66 |
/** |
2933 |
14 Nov 14 |
olle |
The definition of the "mRNA reaction plate" type. It is locked to extracts |
2933 |
14 Nov 14 |
olle |
of subtype {@link Subtype#MRNA} and uses 8x12 geometry. |
2933 |
14 Nov 14 |
olle |
@since 2.12 |
2933 |
14 Nov 14 |
olle |
70 |
*/ |
3044 |
16 Dec 14 |
olle |
71 |
/* |
2933 |
14 Nov 14 |
olle |
public static final BioplateType MRNA = |
2933 |
14 Nov 14 |
olle |
new BioplateType("mRNA reaction plate", Item.EXTRACT, Subtype.MRNA, LockMode.LOCKED_AFTER_ADD, Geometry.EIGHT_BY_TWELVE, "MRnaPlate", 4); |
3044 |
16 Dec 14 |
olle |
74 |
*/ |
2933 |
14 Nov 14 |
olle |
75 |
|
2933 |
14 Nov 14 |
olle |
76 |
/** |
2933 |
14 Nov 14 |
olle |
The definition of the "cDNA reaction plate" type. It is locked to extracts |
2933 |
14 Nov 14 |
olle |
of subtype {@link Subtype#CDNA} and uses 8x12 geometry. |
2933 |
14 Nov 14 |
olle |
@since 2.12 |
2933 |
14 Nov 14 |
olle |
80 |
*/ |
3044 |
16 Dec 14 |
olle |
81 |
/* |
2933 |
14 Nov 14 |
olle |
public static final BioplateType CDNA = |
3180 |
17 Mar 15 |
olle |
new BioplateType("cDNA reaction plate", Item.EXTRACT, Subtype.CDNA, LockMode.LOCKED_AFTER_ADD, Geometry.EIGHT_BY_TWELVE, "CDnaPlate", 4); |
3044 |
16 Dec 14 |
olle |
84 |
*/ |
3044 |
16 Dec 14 |
olle |
85 |
|
2933 |
14 Nov 14 |
olle |
86 |
/** |
3180 |
17 Mar 15 |
olle |
The definition of the "DNA reaction plate" type. It is locked to extracts |
3180 |
17 Mar 15 |
olle |
of subtype {@link Subtype#DNA} and uses 8x12 geometry. |
3180 |
17 Mar 15 |
olle |
@since 1.2 |
3180 |
17 Mar 15 |
olle |
90 |
*/ |
3180 |
17 Mar 15 |
olle |
91 |
public static final BioplateType DNA = |
3180 |
17 Mar 15 |
olle |
92 |
new BioplateType("DNA reaction plate", Item.EXTRACT, Subtype.DNA, LockMode.LOCKED_AFTER_ADD, Geometry.EIGHT_BY_TWELVE, "DnaPlate", 4); |
3180 |
17 Mar 15 |
olle |
93 |
|
3180 |
17 Mar 15 |
olle |
94 |
/** |
2933 |
14 Nov 14 |
olle |
The definition of the "Library plate" type. It is locked to extracts |
2933 |
14 Nov 14 |
olle |
of subtype {@link Subtype#LIBRARY} and uses 8x12 geometry. |
2933 |
14 Nov 14 |
olle |
@since 2.12 |
2933 |
14 Nov 14 |
olle |
98 |
*/ |
2933 |
14 Nov 14 |
olle |
99 |
public static final BioplateType LIBRARY = |
2933 |
14 Nov 14 |
olle |
100 |
new BioplateType("Library plate", Item.EXTRACT, Subtype.LIBRARY, LockMode.LOCKED_AFTER_ADD, Geometry.EIGHT_BY_TWELVE, "LibPlate", 4); |
2933 |
14 Nov 14 |
olle |
101 |
|
2933 |
14 Nov 14 |
olle |
102 |
|
2933 |
14 Nov 14 |
olle |
103 |
/** |
2933 |
14 Nov 14 |
olle |
Get the bioplate type by name of the static constant defined in this class. |
2933 |
14 Nov 14 |
olle |
105 |
|
2933 |
14 Nov 14 |
olle |
@param cName The name of the static constant |
2933 |
14 Nov 14 |
olle |
@return A bioplate type object or null if not found |
2933 |
14 Nov 14 |
olle |
108 |
*/ |
2933 |
14 Nov 14 |
olle |
109 |
public static BioplateType getByCName(String cName) |
2933 |
14 Nov 14 |
olle |
110 |
{ |
2933 |
14 Nov 14 |
olle |
111 |
if (cName == null) return null; |
2933 |
14 Nov 14 |
olle |
112 |
BioplateType bioplateType = null; |
2933 |
14 Nov 14 |
olle |
113 |
try |
2933 |
14 Nov 14 |
olle |
114 |
{ |
2933 |
14 Nov 14 |
olle |
115 |
Field f = BioplateType.class.getDeclaredField(cName); |
2933 |
14 Nov 14 |
olle |
116 |
bioplateType = (BioplateType)f.get(null); |
2933 |
14 Nov 14 |
olle |
117 |
} |
2933 |
14 Nov 14 |
olle |
118 |
catch (NoSuchFieldException ex) |
2933 |
14 Nov 14 |
olle |
119 |
{} |
2933 |
14 Nov 14 |
olle |
120 |
catch (IllegalAccessException ex) |
2933 |
14 Nov 14 |
olle |
121 |
{} |
2933 |
14 Nov 14 |
olle |
122 |
catch (ClassCastException ex) |
2933 |
14 Nov 14 |
olle |
123 |
{} |
2933 |
14 Nov 14 |
olle |
124 |
return bioplateType; |
2933 |
14 Nov 14 |
olle |
125 |
} |
2933 |
14 Nov 14 |
olle |
126 |
|
2933 |
14 Nov 14 |
olle |
127 |
|
2933 |
14 Nov 14 |
olle |
128 |
private final String name; |
2933 |
14 Nov 14 |
olle |
129 |
private final Item bioMaterialType; |
2933 |
14 Nov 14 |
olle |
130 |
private final Subtype subtype; |
2933 |
14 Nov 14 |
olle |
131 |
private final LockMode lockMode; |
2933 |
14 Nov 14 |
olle |
132 |
private final Geometry geometry; |
3449 |
28 Jul 15 |
olle |
133 |
/* |
2933 |
14 Nov 14 |
olle |
private final String plateNamePrefix; |
2933 |
14 Nov 14 |
olle |
private final int numDigitsInName; |
3449 |
28 Jul 15 |
olle |
136 |
*/ |
3449 |
28 Jul 15 |
olle |
137 |
private String plateNamePrefix; |
3449 |
28 Jul 15 |
olle |
138 |
private int numDigitsInName; |
2933 |
14 Nov 14 |
olle |
139 |
private int id; |
2933 |
14 Nov 14 |
olle |
140 |
private int geometryId; |
2933 |
14 Nov 14 |
olle |
141 |
|
2933 |
14 Nov 14 |
olle |
142 |
/** |
2933 |
14 Nov 14 |
olle |
Create a new definition |
2933 |
14 Nov 14 |
olle |
@param name The name of the subtype |
2933 |
14 Nov 14 |
olle |
@param bioMaterialType The type of biomaterial that can be placed on the bioplate |
2933 |
14 Nov 14 |
olle |
@param subtype The subtype of biomaterial that can be placed on the bioplate |
2933 |
14 Nov 14 |
olle |
147 |
*/ |
2933 |
14 Nov 14 |
olle |
148 |
private BioplateType(String name, Item bioMaterialType, Subtype subtype, LockMode lockMode, Geometry geometry, String plateNamePrefix, int numDigitsInName) |
2933 |
14 Nov 14 |
olle |
149 |
{ |
2933 |
14 Nov 14 |
olle |
150 |
this.name = name; |
2933 |
14 Nov 14 |
olle |
151 |
this.bioMaterialType = bioMaterialType; |
2933 |
14 Nov 14 |
olle |
152 |
this.subtype = subtype; |
2933 |
14 Nov 14 |
olle |
153 |
this.lockMode = lockMode; |
2933 |
14 Nov 14 |
olle |
154 |
this.geometry = geometry; |
2933 |
14 Nov 14 |
olle |
155 |
this.plateNamePrefix = plateNamePrefix; |
2933 |
14 Nov 14 |
olle |
156 |
this.numDigitsInName = numDigitsInName; |
2933 |
14 Nov 14 |
olle |
157 |
} |
2933 |
14 Nov 14 |
olle |
158 |
|
2933 |
14 Nov 14 |
olle |
159 |
/** |
2933 |
14 Nov 14 |
olle |
Get the name of the plate type. |
2933 |
14 Nov 14 |
olle |
161 |
*/ |
2933 |
14 Nov 14 |
olle |
162 |
public String getName() |
2933 |
14 Nov 14 |
olle |
163 |
{ |
2933 |
14 Nov 14 |
olle |
164 |
return name; |
2933 |
14 Nov 14 |
olle |
165 |
} |
2933 |
14 Nov 14 |
olle |
166 |
|
2933 |
14 Nov 14 |
olle |
167 |
/** |
2933 |
14 Nov 14 |
olle |
Get the biomaterial item type that can be used on the plate. |
2933 |
14 Nov 14 |
olle |
169 |
*/ |
2933 |
14 Nov 14 |
olle |
170 |
public Item getBioMaterialType() |
2933 |
14 Nov 14 |
olle |
171 |
{ |
2933 |
14 Nov 14 |
olle |
172 |
return bioMaterialType; |
2933 |
14 Nov 14 |
olle |
173 |
} |
2933 |
14 Nov 14 |
olle |
174 |
|
2933 |
14 Nov 14 |
olle |
175 |
/** |
2933 |
14 Nov 14 |
olle |
Get the biomaterial subtype that can be used on the plate. |
2933 |
14 Nov 14 |
olle |
Null if no restriction. |
2933 |
14 Nov 14 |
olle |
178 |
*/ |
2933 |
14 Nov 14 |
olle |
179 |
public Subtype getSubtype() |
2933 |
14 Nov 14 |
olle |
180 |
{ |
2933 |
14 Nov 14 |
olle |
181 |
return subtype; |
2933 |
14 Nov 14 |
olle |
182 |
} |
2933 |
14 Nov 14 |
olle |
183 |
|
2933 |
14 Nov 14 |
olle |
184 |
/** |
2933 |
14 Nov 14 |
olle |
Get the prefix that is used when creating new plates of this plate |
2933 |
14 Nov 14 |
olle |
type. |
2933 |
14 Nov 14 |
olle |
@since 2.7 |
2933 |
14 Nov 14 |
olle |
188 |
*/ |
2933 |
14 Nov 14 |
olle |
189 |
public String getPlateNamePrefix() |
2933 |
14 Nov 14 |
olle |
190 |
{ |
2933 |
14 Nov 14 |
olle |
191 |
return plateNamePrefix; |
2933 |
14 Nov 14 |
olle |
192 |
} |
2933 |
14 Nov 14 |
olle |
193 |
|
2933 |
14 Nov 14 |
olle |
194 |
/** |
3449 |
28 Jul 15 |
olle |
Set the prefix that is used when creating new plates of this plate |
3449 |
28 Jul 15 |
olle |
type. |
3449 |
28 Jul 15 |
olle |
197 |
|
3449 |
28 Jul 15 |
olle |
@param plateNamePrefix String The plate name prefix to use. |
3449 |
28 Jul 15 |
olle |
@since 1.3 |
3449 |
28 Jul 15 |
olle |
200 |
*/ |
3449 |
28 Jul 15 |
olle |
201 |
public void setPlateNamePrefix(String plateNamePrefix) |
3449 |
28 Jul 15 |
olle |
202 |
{ |
3449 |
28 Jul 15 |
olle |
203 |
this.plateNamePrefix = plateNamePrefix; |
3449 |
28 Jul 15 |
olle |
204 |
} |
3449 |
28 Jul 15 |
olle |
205 |
|
3449 |
28 Jul 15 |
olle |
206 |
/** |
3449 |
28 Jul 15 |
olle |
Get the number of digits in the name of this plate. |
3449 |
28 Jul 15 |
olle |
@since 1.3 |
3449 |
28 Jul 15 |
olle |
209 |
*/ |
3449 |
28 Jul 15 |
olle |
210 |
public int getNumDigitsInName() |
3449 |
28 Jul 15 |
olle |
211 |
{ |
3449 |
28 Jul 15 |
olle |
212 |
return numDigitsInName; |
3449 |
28 Jul 15 |
olle |
213 |
} |
3449 |
28 Jul 15 |
olle |
214 |
|
3449 |
28 Jul 15 |
olle |
215 |
/** |
3449 |
28 Jul 15 |
olle |
Set the number of digits in the name of this plate. |
3449 |
28 Jul 15 |
olle |
217 |
|
3449 |
28 Jul 15 |
olle |
@param numDigitsInName int The number of digits in the name of the plate. |
3449 |
28 Jul 15 |
olle |
@since 1.3 |
3449 |
28 Jul 15 |
olle |
220 |
*/ |
3449 |
28 Jul 15 |
olle |
221 |
public void setNumDigitsInName(int numDigitsInName) |
3449 |
28 Jul 15 |
olle |
222 |
{ |
3449 |
28 Jul 15 |
olle |
223 |
this.numDigitsInName = numDigitsInName; |
3449 |
28 Jul 15 |
olle |
224 |
} |
3449 |
28 Jul 15 |
olle |
225 |
|
3449 |
28 Jul 15 |
olle |
226 |
/** |
2933 |
14 Nov 14 |
olle |
Get the lock mode for wells. |
2933 |
14 Nov 14 |
olle |
228 |
*/ |
2933 |
14 Nov 14 |
olle |
229 |
public LockMode getLockMode() |
2933 |
14 Nov 14 |
olle |
230 |
{ |
2933 |
14 Nov 14 |
olle |
231 |
return lockMode; |
2933 |
14 Nov 14 |
olle |
232 |
} |
2933 |
14 Nov 14 |
olle |
233 |
|
2933 |
14 Nov 14 |
olle |
234 |
/** |
2933 |
14 Nov 14 |
olle |
Load the subtype as a BASE item. |
2933 |
14 Nov 14 |
olle |
@param dc The DbControl to use for database access |
2933 |
14 Nov 14 |
olle |
@return An ItemSubtype object |
2933 |
14 Nov 14 |
olle |
238 |
*/ |
2933 |
14 Nov 14 |
olle |
239 |
public BioPlateType load(DbControl dc) |
2933 |
14 Nov 14 |
olle |
240 |
{ |
2933 |
14 Nov 14 |
olle |
241 |
BioPlateType plateType = null; |
2933 |
14 Nov 14 |
olle |
242 |
if (id == 0) |
2933 |
14 Nov 14 |
olle |
243 |
{ |
2933 |
14 Nov 14 |
olle |
244 |
List<BioPlateType> result = list(dc); |
2933 |
14 Nov 14 |
olle |
245 |
if (result.size() == 0) |
2933 |
14 Nov 14 |
olle |
246 |
{ |
2933 |
14 Nov 14 |
olle |
247 |
throw new ItemNotFoundException("BioPlateType["+getName()+"]"); |
2933 |
14 Nov 14 |
olle |
248 |
} |
2933 |
14 Nov 14 |
olle |
249 |
else if (result.size() > 1) |
2933 |
14 Nov 14 |
olle |
250 |
{ |
2933 |
14 Nov 14 |
olle |
251 |
throw new InvalidDataException("Found > 1 BioPlateType["+getName()+"]"); |
2933 |
14 Nov 14 |
olle |
252 |
} |
2933 |
14 Nov 14 |
olle |
253 |
plateType = result.get(0); |
2933 |
14 Nov 14 |
olle |
254 |
id = plateType.getId(); |
2933 |
14 Nov 14 |
olle |
255 |
} |
2933 |
14 Nov 14 |
olle |
256 |
else |
2933 |
14 Nov 14 |
olle |
257 |
{ |
2933 |
14 Nov 14 |
olle |
258 |
plateType = BioPlateType.getById(dc, id); |
2933 |
14 Nov 14 |
olle |
259 |
} |
2933 |
14 Nov 14 |
olle |
260 |
return plateType; |
2933 |
14 Nov 14 |
olle |
261 |
} |
2933 |
14 Nov 14 |
olle |
262 |
|
2933 |
14 Nov 14 |
olle |
263 |
/** |
2933 |
14 Nov 14 |
olle |
List all bioplate types registered in BASE with a name matching this bioplate type |
2933 |
14 Nov 14 |
olle |
definition. Normally, only a single bioplate type should be returned. |
2933 |
14 Nov 14 |
olle |
266 |
*/ |
2933 |
14 Nov 14 |
olle |
267 |
public List<BioPlateType> list(DbControl dc) |
2933 |
14 Nov 14 |
olle |
268 |
{ |
2933 |
14 Nov 14 |
olle |
269 |
ItemQuery<BioPlateType> query = BioPlateType.getQuery(); |
2933 |
14 Nov 14 |
olle |
270 |
query.restrict( |
2933 |
14 Nov 14 |
olle |
271 |
Restrictions.eq( |
2933 |
14 Nov 14 |
olle |
272 |
Hql.property("name"), |
2933 |
14 Nov 14 |
olle |
273 |
Expressions.parameter("name", getName(), Type.STRING) |
2933 |
14 Nov 14 |
olle |
274 |
)); |
2933 |
14 Nov 14 |
olle |
275 |
query.include(Include.ALL); |
2933 |
14 Nov 14 |
olle |
276 |
return query.list(dc); |
2933 |
14 Nov 14 |
olle |
277 |
} |
2933 |
14 Nov 14 |
olle |
278 |
|
2933 |
14 Nov 14 |
olle |
279 |
/** |
2933 |
14 Nov 14 |
olle |
Get the plate geometry this bioplate type normally uses. |
2933 |
14 Nov 14 |
olle |
281 |
*/ |
2933 |
14 Nov 14 |
olle |
282 |
public PlateGeometry getPlateGeometry(DbControl dc) |
2933 |
14 Nov 14 |
olle |
283 |
{ |
2933 |
14 Nov 14 |
olle |
284 |
return geometry.load(dc); |
2933 |
14 Nov 14 |
olle |
285 |
} |
2933 |
14 Nov 14 |
olle |
286 |
|
2933 |
14 Nov 14 |
olle |
287 |
/** |
2933 |
14 Nov 14 |
olle |
Generate the next auto-generated bioplate name. This method will search all bioplates |
2933 |
14 Nov 14 |
olle |
starting with the plate type's prefix and find the one with the highest numeric suffix. |
2933 |
14 Nov 14 |
olle |
The returned name is the found plate + offset. |
2933 |
14 Nov 14 |
olle |
291 |
*/ |
2933 |
14 Nov 14 |
olle |
292 |
public String generateNextName(DbControl dc, int offset) |
2933 |
14 Nov 14 |
olle |
293 |
{ |
2933 |
14 Nov 14 |
olle |
294 |
return generateNamesForBatch(dc, offset, 1).get(0); |
2933 |
14 Nov 14 |
olle |
295 |
} |
2933 |
14 Nov 14 |
olle |
296 |
|
2933 |
14 Nov 14 |
olle |
297 |
/** |
2933 |
14 Nov 14 |
olle |
Generate a sequence of names for the new bioplates. This method will search all bioplates |
2933 |
14 Nov 14 |
olle |
starting with the plate type's prefix and find the one with the highest numeric suffix. |
2933 |
14 Nov 14 |
olle |
The returned names start with the found plate + offset and contains the numNames new |
2933 |
14 Nov 14 |
olle |
names. |
2933 |
14 Nov 14 |
olle |
302 |
*/ |
2933 |
14 Nov 14 |
olle |
303 |
public List<String> generateNamesForBatch(DbControl dc, int offset, int numNames) |
2933 |
14 Nov 14 |
olle |
304 |
{ |
2933 |
14 Nov 14 |
olle |
305 |
ItemQuery<BioPlate> query = BioPlate.getQuery(); |
2933 |
14 Nov 14 |
olle |
306 |
addFilter(dc, query, false); |
2933 |
14 Nov 14 |
olle |
307 |
query.restrict(Restrictions.rlike(Hql.property("name"), Expressions.string("^" + plateNamePrefix + "[0-9]+$"))); |
2933 |
14 Nov 14 |
olle |
308 |
query.order(Orders.desc(Hql.property("name"))); |
2933 |
14 Nov 14 |
olle |
309 |
query.setMaxResults(1); |
2933 |
14 Nov 14 |
olle |
310 |
query.include(Include.ALL); |
2933 |
14 Nov 14 |
olle |
311 |
List<BioPlate> plates = query.list(dc); |
2933 |
14 Nov 14 |
olle |
312 |
|
2933 |
14 Nov 14 |
olle |
313 |
int startIndex = offset; |
2933 |
14 Nov 14 |
olle |
314 |
if (plates.size() > 0) |
2933 |
14 Nov 14 |
olle |
315 |
{ |
2933 |
14 Nov 14 |
olle |
316 |
String plateName = plates.get(0).getName().substring(plateNamePrefix.length()); |
2933 |
14 Nov 14 |
olle |
317 |
startIndex = Integer.parseInt(plateName) + offset; |
2933 |
14 Nov 14 |
olle |
318 |
} |
2933 |
14 Nov 14 |
olle |
319 |
|
2933 |
14 Nov 14 |
olle |
320 |
List<String> names = new ArrayList<String>(numNames); |
2933 |
14 Nov 14 |
olle |
321 |
for (int i = 0; i < numNames; ++i) |
2933 |
14 Nov 14 |
olle |
322 |
{ |
2933 |
14 Nov 14 |
olle |
323 |
names.add(plateNamePrefix + MD5.leftPad(Integer.toString(startIndex+i), '0', numDigitsInName)); |
2933 |
14 Nov 14 |
olle |
324 |
} |
2933 |
14 Nov 14 |
olle |
325 |
return names; |
2933 |
14 Nov 14 |
olle |
326 |
} |
2933 |
14 Nov 14 |
olle |
327 |
|
2933 |
14 Nov 14 |
olle |
328 |
|
2933 |
14 Nov 14 |
olle |
329 |
/** |
2933 |
14 Nov 14 |
olle |
Add a filter restriction the given bioplate query so that it |
2933 |
14 Nov 14 |
olle |
only return plates of this type. |
2933 |
14 Nov 14 |
olle |
332 |
|
2933 |
14 Nov 14 |
olle |
@param query The query to filter |
2933 |
14 Nov 14 |
olle |
@param excludeDestroyed If set, an additional filter is added so that only |
2933 |
14 Nov 14 |
olle |
non-destroyed bioplates are returned |
2933 |
14 Nov 14 |
olle |
336 |
*/ |
2933 |
14 Nov 14 |
olle |
337 |
public void addFilter(DbControl dc, ItemQuery<? extends BioPlate> query, boolean excludeDestroyed) |
2933 |
14 Nov 14 |
olle |
338 |
{ |
2933 |
14 Nov 14 |
olle |
339 |
addFilter(dc, query, null, excludeDestroyed); |
2933 |
14 Nov 14 |
olle |
340 |
} |
2933 |
14 Nov 14 |
olle |
341 |
|
2933 |
14 Nov 14 |
olle |
342 |
/** |
2933 |
14 Nov 14 |
olle |
Add a filter restriction to the given query based on the |
2933 |
14 Nov 14 |
olle |
given subtype. If no alias is specified, the filter is |
2933 |
14 Nov 14 |
olle |
applied to the root item, otherwise it is applied |
2933 |
14 Nov 14 |
olle |
to the alias of a joined (eg. parent or child) item |
2933 |
14 Nov 14 |
olle |
347 |
|
2933 |
14 Nov 14 |
olle |
@param query The query to restrict |
2933 |
14 Nov 14 |
olle |
@param alias Specify an alias if the filter should be |
2933 |
14 Nov 14 |
olle |
placed on a joined (eg. child or parent) item instead |
2933 |
14 Nov 14 |
olle |
of the root item |
2933 |
14 Nov 14 |
olle |
352 |
*/ |
2933 |
14 Nov 14 |
olle |
353 |
public void addFilter(DbControl dc, ItemQuery<?> query, String alias, boolean excludeDestroyed) |
2933 |
14 Nov 14 |
olle |
354 |
{ |
2933 |
14 Nov 14 |
olle |
355 |
if (id==0) load(dc); // Ensure that the subtype has been loaded |
2933 |
14 Nov 14 |
olle |
356 |
query.restrict(Restrictions.eq(Hql.property(alias, "bioPlateType"), Expressions.integer(id))); |
2933 |
14 Nov 14 |
olle |
357 |
if (excludeDestroyed) |
2933 |
14 Nov 14 |
olle |
358 |
{ |
2933 |
14 Nov 14 |
olle |
359 |
query.restrict(Restrictions.eq(Hql.property(alias, "destroyed"), Expressions.parameter("destroyed", false, Type.BOOLEAN))); |
2933 |
14 Nov 14 |
olle |
360 |
} |
2933 |
14 Nov 14 |
olle |
361 |
} |
2933 |
14 Nov 14 |
olle |
362 |
|
2933 |
14 Nov 14 |
olle |
363 |
} |