5098 |
15 Nov 18 |
nicklas |
1 |
package net.sf.basedb.reggie.plugins.release; |
5098 |
15 Nov 18 |
nicklas |
2 |
|
5098 |
15 Nov 18 |
nicklas |
3 |
import java.util.ArrayList; |
5098 |
15 Nov 18 |
nicklas |
4 |
import java.util.List; |
5098 |
15 Nov 18 |
nicklas |
5 |
|
5098 |
15 Nov 18 |
nicklas |
6 |
import net.sf.basedb.core.AnnotationType; |
5098 |
15 Nov 18 |
nicklas |
7 |
import net.sf.basedb.core.BioMaterial; |
5098 |
15 Nov 18 |
nicklas |
8 |
import net.sf.basedb.core.DbControl; |
5102 |
16 Nov 18 |
nicklas |
9 |
import net.sf.basedb.core.DerivedBioAssay; |
5099 |
15 Nov 18 |
nicklas |
10 |
import net.sf.basedb.core.Extract; |
5102 |
16 Nov 18 |
nicklas |
11 |
import net.sf.basedb.core.Item; |
5198 |
19 Dec 18 |
nicklas |
12 |
import net.sf.basedb.core.ItemList; |
5098 |
15 Nov 18 |
nicklas |
13 |
import net.sf.basedb.core.ItemQuery; |
5103 |
16 Nov 18 |
nicklas |
14 |
import net.sf.basedb.core.RawBioAssay; |
5098 |
15 Nov 18 |
nicklas |
15 |
import net.sf.basedb.core.Sample; |
5098 |
15 Nov 18 |
nicklas |
16 |
import net.sf.basedb.core.Type; |
5098 |
15 Nov 18 |
nicklas |
17 |
import net.sf.basedb.core.query.Annotations; |
5098 |
15 Nov 18 |
nicklas |
18 |
import net.sf.basedb.core.query.Expressions; |
5098 |
15 Nov 18 |
nicklas |
19 |
import net.sf.basedb.core.query.Hql; |
5107 |
19 Nov 18 |
nicklas |
20 |
import net.sf.basedb.core.query.Orders; |
5098 |
15 Nov 18 |
nicklas |
21 |
import net.sf.basedb.core.query.Restrictions; |
5098 |
15 Nov 18 |
nicklas |
22 |
import net.sf.basedb.reggie.Reggie; |
5103 |
16 Nov 18 |
nicklas |
23 |
import net.sf.basedb.reggie.dao.AlignedSequences; |
5098 |
15 Nov 18 |
nicklas |
24 |
import net.sf.basedb.reggie.dao.Annotationtype; |
5198 |
19 Dec 18 |
nicklas |
25 |
import net.sf.basedb.reggie.dao.BiomaterialList; |
5142 |
22 Nov 18 |
nicklas |
26 |
import net.sf.basedb.reggie.dao.Blood; |
7007 |
25 Jan 23 |
nicklas |
27 |
import net.sf.basedb.reggie.dao.BloodDna; |
5098 |
15 Nov 18 |
nicklas |
28 |
import net.sf.basedb.reggie.dao.Case; |
7006 |
24 Jan 23 |
nicklas |
29 |
import net.sf.basedb.reggie.dao.Dna; |
7007 |
25 Jan 23 |
nicklas |
30 |
import net.sf.basedb.reggie.dao.GenotypeCall; |
5107 |
19 Nov 18 |
nicklas |
31 |
import net.sf.basedb.reggie.dao.Histology; |
5102 |
16 Nov 18 |
nicklas |
32 |
import net.sf.basedb.reggie.dao.Library; |
5100 |
15 Nov 18 |
nicklas |
33 |
import net.sf.basedb.reggie.dao.Lysate; |
5103 |
16 Nov 18 |
nicklas |
34 |
import net.sf.basedb.reggie.dao.MaskedSequences; |
5103 |
16 Nov 18 |
nicklas |
35 |
import net.sf.basedb.reggie.dao.MergedSequences; |
5098 |
15 Nov 18 |
nicklas |
36 |
import net.sf.basedb.reggie.dao.Patient; |
5549 |
08 Aug 19 |
nicklas |
37 |
import net.sf.basedb.reggie.dao.Pipeline; |
5103 |
16 Nov 18 |
nicklas |
38 |
import net.sf.basedb.reggie.dao.Rawdatatype; |
5098 |
15 Nov 18 |
nicklas |
39 |
import net.sf.basedb.reggie.dao.ReggieItem; |
5099 |
15 Nov 18 |
nicklas |
40 |
import net.sf.basedb.reggie.dao.SpecimenTube; |
5098 |
15 Nov 18 |
nicklas |
41 |
import net.sf.basedb.reggie.dao.Subtype; |
5098 |
15 Nov 18 |
nicklas |
42 |
|
5098 |
15 Nov 18 |
nicklas |
43 |
/** |
5098 |
15 Nov 18 |
nicklas |
Helper class for generating and keeping track of queries that are |
5098 |
15 Nov 18 |
nicklas |
needed in order to load relase data at different levels. |
5098 |
15 Nov 18 |
nicklas |
@author nicklas |
5098 |
15 Nov 18 |
nicklas |
@since 4.21 |
5098 |
15 Nov 18 |
nicklas |
48 |
*/ |
5098 |
15 Nov 18 |
nicklas |
49 |
public class QueryManager |
5098 |
15 Nov 18 |
nicklas |
50 |
{ |
5098 |
15 Nov 18 |
nicklas |
// NOTE! This DbControl belongs to the writing transaction and should |
5098 |
15 Nov 18 |
nicklas |
// not be used for loading release data. Basically, we need it to |
5098 |
15 Nov 18 |
nicklas |
// make sure subtypes, annotation types, etc. that are used for |
5098 |
15 Nov 18 |
nicklas |
// building queries can be loaded. |
5098 |
15 Nov 18 |
nicklas |
55 |
private final DbControl dc; |
5098 |
15 Nov 18 |
nicklas |
56 |
|
5098 |
15 Nov 18 |
nicklas |
57 |
private ItemQuery<Sample> caseQuery; |
5138 |
22 Nov 18 |
nicklas |
58 |
private ItemQuery<Sample> bloodQuery; |
5098 |
15 Nov 18 |
nicklas |
59 |
private ItemQuery<Sample> specimenQuery; |
5136 |
22 Nov 18 |
nicklas |
60 |
private ItemQuery<Sample> noSpecimenQuery; |
5107 |
19 Nov 18 |
nicklas |
61 |
private ItemQuery<Sample> histologyQuery; |
5107 |
19 Nov 18 |
nicklas |
62 |
private ItemQuery<Sample> goodStainQuery; |
5142 |
22 Nov 18 |
nicklas |
63 |
private ItemQuery<Extract> bloodDnaQuery; |
5099 |
15 Nov 18 |
nicklas |
64 |
private ItemQuery<Extract> lysateQuery; |
5100 |
15 Nov 18 |
nicklas |
65 |
private ItemQuery<Extract> rnaQuery; |
5131 |
21 Nov 18 |
nicklas |
66 |
private ItemQuery<Extract> dnaQuery; |
5131 |
21 Nov 18 |
nicklas |
67 |
private ItemQuery<Extract> flowThroughQuery; |
5101 |
16 Nov 18 |
nicklas |
68 |
private ItemQuery<Extract> libQuery; |
7006 |
24 Jan 23 |
nicklas |
69 |
private ItemQuery<DerivedBioAssay> methylationQuery; |
5102 |
16 Nov 18 |
nicklas |
70 |
private ItemQuery<DerivedBioAssay> mergedQuery; |
5103 |
16 Nov 18 |
nicklas |
71 |
private ItemQuery<DerivedBioAssay> maskedQuery; |
5103 |
16 Nov 18 |
nicklas |
72 |
private ItemQuery<DerivedBioAssay> alignedQuery; |
5103 |
16 Nov 18 |
nicklas |
73 |
private ItemQuery<RawBioAssay> stringTieQuery; |
5103 |
16 Nov 18 |
nicklas |
74 |
private ItemQuery<RawBioAssay> cufflinksQuery; |
5873 |
23 Mar 20 |
nicklas |
75 |
private ItemQuery<RawBioAssay> variantCallQuery; |
7007 |
25 Jan 23 |
nicklas |
76 |
private ItemQuery<DerivedBioAssay> genotypeCallQuery; |
7007 |
25 Jan 23 |
nicklas |
77 |
private ItemQuery<RawBioAssay> oncoArrayQuery; |
5104 |
16 Nov 18 |
nicklas |
78 |
private ItemQuery<DerivedBioAssay> demuxedQuery; |
5104 |
16 Nov 18 |
nicklas |
79 |
private ItemQuery<DerivedBioAssay> sequencingRunQuery; |
5104 |
16 Nov 18 |
nicklas |
80 |
private ItemQuery<Extract> poolsFromLibQuery; |
5098 |
15 Nov 18 |
nicklas |
81 |
|
5098 |
15 Nov 18 |
nicklas |
82 |
public QueryManager(DbControl dc) |
5098 |
15 Nov 18 |
nicklas |
83 |
{ |
5098 |
15 Nov 18 |
nicklas |
84 |
this.dc = dc; |
5098 |
15 Nov 18 |
nicklas |
85 |
} |
5098 |
15 Nov 18 |
nicklas |
86 |
|
5098 |
15 Nov 18 |
nicklas |
87 |
/** |
5098 |
15 Nov 18 |
nicklas |
Get a query that is returning all cases that are related to the |
5098 |
15 Nov 18 |
nicklas |
given patient. The query is filtered to only return cases with |
5098 |
15 Nov 18 |
nicklas |
Consent=Yes and DoNotUse=null. |
5098 |
15 Nov 18 |
nicklas |
@return A query or null if the patient is null |
5098 |
15 Nov 18 |
nicklas |
92 |
*/ |
5098 |
15 Nov 18 |
nicklas |
93 |
public ItemQuery<Sample> getCaseQuery(Patient patient) |
5098 |
15 Nov 18 |
nicklas |
94 |
{ |
5098 |
15 Nov 18 |
nicklas |
95 |
if (patient == null) return null; |
5098 |
15 Nov 18 |
nicklas |
96 |
if (caseQuery == null) |
5098 |
15 Nov 18 |
nicklas |
97 |
{ |
5098 |
15 Nov 18 |
nicklas |
98 |
caseQuery = Sample.getQuery(); |
5101 |
16 Nov 18 |
nicklas |
99 |
initBioMaterialQuery(caseQuery, Subtype.CASE, Subtype.PATIENT, ParentRestriction.SINGLE_ENTITY); |
5098 |
15 Nov 18 |
nicklas |
100 |
annotationEquals(caseQuery, Annotationtype.CONSENT, "Yes"); |
5098 |
15 Nov 18 |
nicklas |
101 |
annotationEquals(caseQuery, Annotationtype.DO_NOT_USE, null); |
5098 |
15 Nov 18 |
nicklas |
102 |
} |
5098 |
15 Nov 18 |
nicklas |
103 |
caseQuery.setEntityParameter("parent", patient.getItem()); |
5098 |
15 Nov 18 |
nicklas |
104 |
return caseQuery; |
5098 |
15 Nov 18 |
nicklas |
105 |
} |
5098 |
15 Nov 18 |
nicklas |
106 |
|
5098 |
15 Nov 18 |
nicklas |
107 |
/** |
5138 |
22 Nov 18 |
nicklas |
Get a query that is returning all blood items that are related to the |
5138 |
22 Nov 18 |
nicklas |
given patient. The query is filtered to only return items with |
5138 |
22 Nov 18 |
nicklas |
Consent=Yes and DoNotUse=null. |
5138 |
22 Nov 18 |
nicklas |
@return A query or null if the patient is null |
5138 |
22 Nov 18 |
nicklas |
112 |
*/ |
5138 |
22 Nov 18 |
nicklas |
113 |
public ItemQuery<Sample> getBloodQuery(Patient patient) |
5138 |
22 Nov 18 |
nicklas |
114 |
{ |
5138 |
22 Nov 18 |
nicklas |
115 |
if (patient == null) return null; |
5138 |
22 Nov 18 |
nicklas |
116 |
if (bloodQuery == null) |
5138 |
22 Nov 18 |
nicklas |
117 |
{ |
5138 |
22 Nov 18 |
nicklas |
118 |
bloodQuery = Sample.getQuery(); |
5138 |
22 Nov 18 |
nicklas |
119 |
initBioMaterialQuery(bloodQuery, Subtype.BLOOD, Subtype.PATIENT, ParentRestriction.SINGLE_ENTITY); |
5138 |
22 Nov 18 |
nicklas |
120 |
annotationEquals(bloodQuery, Annotationtype.CONSENT, "Yes"); |
5138 |
22 Nov 18 |
nicklas |
121 |
annotationEquals(bloodQuery, Annotationtype.DO_NOT_USE, null); |
5138 |
22 Nov 18 |
nicklas |
122 |
} |
5138 |
22 Nov 18 |
nicklas |
123 |
bloodQuery.setEntityParameter("parent", patient.getItem()); |
5138 |
22 Nov 18 |
nicklas |
124 |
return bloodQuery; |
5138 |
22 Nov 18 |
nicklas |
125 |
} |
5138 |
22 Nov 18 |
nicklas |
126 |
|
5138 |
22 Nov 18 |
nicklas |
127 |
/** |
5142 |
22 Nov 18 |
nicklas |
Get a query that is returning all BloodDNA items that are related |
5142 |
22 Nov 18 |
nicklas |
to the given list of parent Blood. The query is filtered to only return |
5142 |
22 Nov 18 |
nicklas |
items with DoNotUse=null. |
5142 |
22 Nov 18 |
nicklas |
@return A query or null if the list is null or empty |
5142 |
22 Nov 18 |
nicklas |
132 |
*/ |
5142 |
22 Nov 18 |
nicklas |
133 |
public ItemQuery<Extract> getBloodDnaQuery(List<Blood> blood) |
5142 |
22 Nov 18 |
nicklas |
134 |
{ |
5142 |
22 Nov 18 |
nicklas |
135 |
if (blood == null || blood.isEmpty()) return null; |
5142 |
22 Nov 18 |
nicklas |
136 |
if (bloodDnaQuery == null) |
5142 |
22 Nov 18 |
nicklas |
137 |
{ |
5142 |
22 Nov 18 |
nicklas |
138 |
bloodDnaQuery = Extract.getQuery(); |
5142 |
22 Nov 18 |
nicklas |
139 |
initBioMaterialQuery(bloodDnaQuery, Subtype.BLOOD_DNA, Subtype.BLOOD, ParentRestriction.LIST_ID); |
5142 |
22 Nov 18 |
nicklas |
140 |
annotationEquals(bloodDnaQuery, Annotationtype.DO_NOT_USE, null); |
5142 |
22 Nov 18 |
nicklas |
141 |
} |
5142 |
22 Nov 18 |
nicklas |
142 |
bloodDnaQuery.setParameter("parents", idList(blood), Type.INT); |
5142 |
22 Nov 18 |
nicklas |
143 |
return bloodDnaQuery; |
5142 |
22 Nov 18 |
nicklas |
144 |
} |
5142 |
22 Nov 18 |
nicklas |
145 |
|
5142 |
22 Nov 18 |
nicklas |
146 |
|
5142 |
22 Nov 18 |
nicklas |
147 |
/** |
5098 |
15 Nov 18 |
nicklas |
Get a query that is returning all specimen tubes that are related |
5098 |
15 Nov 18 |
nicklas |
to the given list of cases. The query is filtered to only return |
5098 |
15 Nov 18 |
nicklas |
specimen with DoNotUse=null. |
5101 |
16 Nov 18 |
nicklas |
@return A query or null if the list is null or empty |
5098 |
15 Nov 18 |
nicklas |
152 |
*/ |
5098 |
15 Nov 18 |
nicklas |
153 |
public ItemQuery<Sample> getSpecimenQuery(List<Case> cases) |
5098 |
15 Nov 18 |
nicklas |
154 |
{ |
5098 |
15 Nov 18 |
nicklas |
155 |
if (cases == null || cases.isEmpty()) return null; |
5098 |
15 Nov 18 |
nicklas |
156 |
if (specimenQuery == null) |
5098 |
15 Nov 18 |
nicklas |
157 |
{ |
5098 |
15 Nov 18 |
nicklas |
158 |
specimenQuery = Sample.getQuery(); |
5101 |
16 Nov 18 |
nicklas |
159 |
initBioMaterialQuery(specimenQuery, Subtype.SPECIMEN, Subtype.CASE, ParentRestriction.LIST_ID); |
5098 |
15 Nov 18 |
nicklas |
160 |
annotationEquals(specimenQuery, Annotationtype.DO_NOT_USE, null); |
5098 |
15 Nov 18 |
nicklas |
161 |
} |
5098 |
15 Nov 18 |
nicklas |
162 |
specimenQuery.setParameter("parents", idList(cases), Type.INT); |
5098 |
15 Nov 18 |
nicklas |
163 |
return specimenQuery; |
5098 |
15 Nov 18 |
nicklas |
164 |
} |
5098 |
15 Nov 18 |
nicklas |
165 |
|
5098 |
15 Nov 18 |
nicklas |
166 |
/** |
5136 |
22 Nov 18 |
nicklas |
Get a query that is returning all NoSpecimen items that are related |
5136 |
22 Nov 18 |
nicklas |
to the given list of cases. The query is filtered to only return |
6580 |
10 Feb 22 |
nicklas |
items with DoNotUse=null and ExternalSpecimenExists!=Yes |
5136 |
22 Nov 18 |
nicklas |
@return A query or null if the list is null or empty |
5136 |
22 Nov 18 |
nicklas |
171 |
*/ |
5136 |
22 Nov 18 |
nicklas |
172 |
public ItemQuery<Sample> getNoSpecimenQuery(List<Case> cases) |
5136 |
22 Nov 18 |
nicklas |
173 |
{ |
5136 |
22 Nov 18 |
nicklas |
174 |
if (cases == null || cases.isEmpty()) return null; |
5136 |
22 Nov 18 |
nicklas |
175 |
if (noSpecimenQuery == null) |
5136 |
22 Nov 18 |
nicklas |
176 |
{ |
5136 |
22 Nov 18 |
nicklas |
177 |
noSpecimenQuery = Sample.getQuery(); |
5136 |
22 Nov 18 |
nicklas |
178 |
initBioMaterialQuery(noSpecimenQuery, Subtype.NO_SPECIMEN, Subtype.CASE, ParentRestriction.LIST_ID); |
5136 |
22 Nov 18 |
nicklas |
179 |
annotationEquals(noSpecimenQuery, Annotationtype.DO_NOT_USE, null); |
6580 |
10 Feb 22 |
nicklas |
180 |
noSpecimenQuery.join(Annotations.leftJoin(Annotationtype.EXTERNAL_SPECIMEN_EXISTS.load(dc), "es")); |
6580 |
10 Feb 22 |
nicklas |
181 |
noSpecimenQuery.restrict( |
6580 |
10 Feb 22 |
nicklas |
182 |
Restrictions.or( |
6580 |
10 Feb 22 |
nicklas |
183 |
Restrictions.eq(Hql.alias("es"), null), |
6580 |
10 Feb 22 |
nicklas |
184 |
Restrictions.neq(Hql.alias("es"), Expressions.string("Yes")) |
6580 |
10 Feb 22 |
nicklas |
185 |
)); |
5136 |
22 Nov 18 |
nicklas |
186 |
} |
5136 |
22 Nov 18 |
nicklas |
187 |
noSpecimenQuery.setParameter("parents", idList(cases), Type.INT); |
5136 |
22 Nov 18 |
nicklas |
188 |
return noSpecimenQuery; |
5136 |
22 Nov 18 |
nicklas |
189 |
} |
5136 |
22 Nov 18 |
nicklas |
190 |
|
5136 |
22 Nov 18 |
nicklas |
191 |
/** |
5107 |
19 Nov 18 |
nicklas |
Get a query that is returning the Histology item that is related |
5107 |
19 Nov 18 |
nicklas |
to the given specimen. The query is filtered to only return |
5164 |
03 Dec 18 |
nicklas |
histology with a creation date, DoNotUse=null and if there is more than one it |
5107 |
19 Nov 18 |
nicklas |
will only return the histology with the latest partition date. |
5107 |
19 Nov 18 |
nicklas |
@return A query or null if the specimen is null |
5107 |
19 Nov 18 |
nicklas |
197 |
*/ |
5107 |
19 Nov 18 |
nicklas |
198 |
public ItemQuery<Sample> getHistologyQuery(SpecimenTube specimen) |
5107 |
19 Nov 18 |
nicklas |
199 |
{ |
5107 |
19 Nov 18 |
nicklas |
200 |
if (specimen == null) return null; |
5107 |
19 Nov 18 |
nicklas |
201 |
if (histologyQuery == null) |
5107 |
19 Nov 18 |
nicklas |
202 |
{ |
5107 |
19 Nov 18 |
nicklas |
203 |
histologyQuery = Sample.getQuery(); |
5107 |
19 Nov 18 |
nicklas |
204 |
initBioMaterialQuery(histologyQuery, Subtype.HISTOLOGY, Subtype.SPECIMEN, ParentRestriction.SINGLE_ENTITY); |
5164 |
03 Dec 18 |
nicklas |
205 |
hasCreationDate(histologyQuery); |
5107 |
19 Nov 18 |
nicklas |
206 |
annotationEquals(histologyQuery, Annotationtype.DO_NOT_USE, null); |
5107 |
19 Nov 18 |
nicklas |
// If there is more than one Histology we load the last one |
5107 |
19 Nov 18 |
nicklas |
// TODO -- is this what we want? |
5107 |
19 Nov 18 |
nicklas |
209 |
histologyQuery.join(Annotations.innerJoin(null, Annotationtype.PARTITION_DATE.load(dc), "pd")); |
5107 |
19 Nov 18 |
nicklas |
210 |
histologyQuery.order(Orders.desc(Hql.alias("pd"))); |
5107 |
19 Nov 18 |
nicklas |
211 |
histologyQuery.setMaxResults(1); |
5107 |
19 Nov 18 |
nicklas |
212 |
} |
5107 |
19 Nov 18 |
nicklas |
213 |
histologyQuery.setEntityParameter("parent", specimen.getItem()); |
5107 |
19 Nov 18 |
nicklas |
214 |
return histologyQuery; |
5107 |
19 Nov 18 |
nicklas |
215 |
} |
5107 |
19 Nov 18 |
nicklas |
216 |
|
5107 |
19 Nov 18 |
nicklas |
217 |
/** |
5107 |
19 Nov 18 |
nicklas |
Get a query that is returning the HE-stained item that is related |
5107 |
19 Nov 18 |
nicklas |
to the given histology item. The query is filtered to only return |
5107 |
19 Nov 18 |
nicklas |
stained item with GoodStain=true (there should only be a single such item). |
5107 |
19 Nov 18 |
nicklas |
@return A query or null if the histology item is null |
5107 |
19 Nov 18 |
nicklas |
222 |
*/ |
5107 |
19 Nov 18 |
nicklas |
223 |
public ItemQuery<Sample> getGoodStainQuery(Histology histology) |
5107 |
19 Nov 18 |
nicklas |
224 |
{ |
5107 |
19 Nov 18 |
nicklas |
225 |
if (histology == null) return null; |
5107 |
19 Nov 18 |
nicklas |
226 |
if (goodStainQuery == null) |
5107 |
19 Nov 18 |
nicklas |
227 |
{ |
5107 |
19 Nov 18 |
nicklas |
228 |
goodStainQuery = Sample.getQuery(); |
5107 |
19 Nov 18 |
nicklas |
229 |
initBioMaterialQuery(goodStainQuery, Subtype.STAINED, Subtype.HISTOLOGY, ParentRestriction.SINGLE_ENTITY); |
5107 |
19 Nov 18 |
nicklas |
230 |
annotationEquals(goodStainQuery, Annotationtype.GOOD_STAIN, true); |
5107 |
19 Nov 18 |
nicklas |
231 |
} |
5107 |
19 Nov 18 |
nicklas |
232 |
goodStainQuery.setEntityParameter("parent", histology.getItem()); |
5107 |
19 Nov 18 |
nicklas |
233 |
return goodStainQuery; |
5107 |
19 Nov 18 |
nicklas |
234 |
} |
5107 |
19 Nov 18 |
nicklas |
235 |
|
5107 |
19 Nov 18 |
nicklas |
236 |
/** |
5099 |
15 Nov 18 |
nicklas |
Get a query that is returning all lysates that are related |
5099 |
15 Nov 18 |
nicklas |
to the given list of specimen. The query is filtered to only return |
5164 |
03 Dec 18 |
nicklas |
lysates with a creation date and DoNotUse=null. |
5101 |
16 Nov 18 |
nicklas |
@return A query or null if the list is null or empty |
5099 |
15 Nov 18 |
nicklas |
241 |
*/ |
5099 |
15 Nov 18 |
nicklas |
242 |
public ItemQuery<Extract> getLysateQuery(List<SpecimenTube> specimen) |
5099 |
15 Nov 18 |
nicklas |
243 |
{ |
5099 |
15 Nov 18 |
nicklas |
244 |
if (specimen == null || specimen.isEmpty()) return null; |
5099 |
15 Nov 18 |
nicklas |
245 |
if (lysateQuery == null) |
5099 |
15 Nov 18 |
nicklas |
246 |
{ |
5099 |
15 Nov 18 |
nicklas |
247 |
lysateQuery = Extract.getQuery(); |
5101 |
16 Nov 18 |
nicklas |
248 |
initBioMaterialQuery(lysateQuery, Subtype.LYSATE, Subtype.SPECIMEN, ParentRestriction.LIST_ID); |
5164 |
03 Dec 18 |
nicklas |
249 |
hasCreationDate(lysateQuery); |
5099 |
15 Nov 18 |
nicklas |
250 |
annotationEquals(lysateQuery, Annotationtype.DO_NOT_USE, null); |
5099 |
15 Nov 18 |
nicklas |
251 |
} |
5099 |
15 Nov 18 |
nicklas |
252 |
lysateQuery.setParameter("parents", idList(specimen), Type.INT); |
5099 |
15 Nov 18 |
nicklas |
253 |
return lysateQuery; |
5099 |
15 Nov 18 |
nicklas |
254 |
} |
5099 |
15 Nov 18 |
nicklas |
255 |
|
5099 |
15 Nov 18 |
nicklas |
256 |
/** |
5100 |
15 Nov 18 |
nicklas |
Get a query that is returning all RNA items that are related |
5100 |
15 Nov 18 |
nicklas |
to the given list of lysates. The query is filtered to only return |
5100 |
15 Nov 18 |
nicklas |
RNA with DoNotUse=null. |
5101 |
16 Nov 18 |
nicklas |
@return A query or null if the list is null or empty |
5100 |
15 Nov 18 |
nicklas |
261 |
*/ |
5100 |
15 Nov 18 |
nicklas |
262 |
public ItemQuery<Extract> getRnaQuery(List<Lysate> lysates) |
5100 |
15 Nov 18 |
nicklas |
263 |
{ |
5100 |
15 Nov 18 |
nicklas |
264 |
if (lysates == null || lysates.isEmpty()) return null; |
5100 |
15 Nov 18 |
nicklas |
265 |
if (rnaQuery == null) |
5100 |
15 Nov 18 |
nicklas |
266 |
{ |
5100 |
15 Nov 18 |
nicklas |
267 |
rnaQuery = Extract.getQuery(); |
5101 |
16 Nov 18 |
nicklas |
268 |
initBioMaterialQuery(rnaQuery, Subtype.RNA, Subtype.LYSATE, ParentRestriction.LIST_ID); |
5100 |
15 Nov 18 |
nicklas |
269 |
annotationEquals(rnaQuery, Annotationtype.DO_NOT_USE, null); |
5100 |
15 Nov 18 |
nicklas |
270 |
} |
5100 |
15 Nov 18 |
nicklas |
271 |
rnaQuery.setParameter("parents", idList(lysates), Type.INT); |
5100 |
15 Nov 18 |
nicklas |
272 |
return rnaQuery; |
5100 |
15 Nov 18 |
nicklas |
273 |
} |
5100 |
15 Nov 18 |
nicklas |
274 |
|
5100 |
15 Nov 18 |
nicklas |
275 |
/** |
5131 |
21 Nov 18 |
nicklas |
Get a query that is returning all DNA items that are related |
5131 |
21 Nov 18 |
nicklas |
to the given list of lysates. The query is filtered to only return |
5131 |
21 Nov 18 |
nicklas |
DNA with DoNotUse=null. |
5131 |
21 Nov 18 |
nicklas |
@return A query or null if the list is null or empty |
5131 |
21 Nov 18 |
nicklas |
280 |
*/ |
5131 |
21 Nov 18 |
nicklas |
281 |
public ItemQuery<Extract> getDnaQuery(List<Lysate> lysates) |
5131 |
21 Nov 18 |
nicklas |
282 |
{ |
5131 |
21 Nov 18 |
nicklas |
283 |
if (lysates == null || lysates.isEmpty()) return null; |
5131 |
21 Nov 18 |
nicklas |
284 |
if (dnaQuery == null) |
5131 |
21 Nov 18 |
nicklas |
285 |
{ |
5131 |
21 Nov 18 |
nicklas |
286 |
dnaQuery = Extract.getQuery(); |
5131 |
21 Nov 18 |
nicklas |
287 |
initBioMaterialQuery(dnaQuery, Subtype.DNA, Subtype.LYSATE, ParentRestriction.LIST_ID); |
5131 |
21 Nov 18 |
nicklas |
288 |
annotationEquals(dnaQuery, Annotationtype.DO_NOT_USE, null); |
5131 |
21 Nov 18 |
nicklas |
289 |
} |
5131 |
21 Nov 18 |
nicklas |
290 |
dnaQuery.setParameter("parents", idList(lysates), Type.INT); |
5131 |
21 Nov 18 |
nicklas |
291 |
return dnaQuery; |
5131 |
21 Nov 18 |
nicklas |
292 |
} |
5131 |
21 Nov 18 |
nicklas |
293 |
|
5131 |
21 Nov 18 |
nicklas |
294 |
/** |
5131 |
21 Nov 18 |
nicklas |
Get a query that is returning all FlowThrough items that are related |
5131 |
21 Nov 18 |
nicklas |
to the given list of lysates. The query is filtered to only return |
5131 |
21 Nov 18 |
nicklas |
FlowThrough with DoNotUse=null. |
5131 |
21 Nov 18 |
nicklas |
@return A query or null if the list is null or empty |
5131 |
21 Nov 18 |
nicklas |
299 |
*/ |
5131 |
21 Nov 18 |
nicklas |
300 |
public ItemQuery<Extract> getFlowThroughQuery(List<Lysate> lysates) |
5131 |
21 Nov 18 |
nicklas |
301 |
{ |
5131 |
21 Nov 18 |
nicklas |
302 |
if (lysates == null || lysates.isEmpty()) return null; |
5131 |
21 Nov 18 |
nicklas |
303 |
if (flowThroughQuery == null) |
5131 |
21 Nov 18 |
nicklas |
304 |
{ |
5131 |
21 Nov 18 |
nicklas |
305 |
flowThroughQuery = Extract.getQuery(); |
5131 |
21 Nov 18 |
nicklas |
306 |
initBioMaterialQuery(flowThroughQuery, Subtype.FLOW_THROUGH, Subtype.LYSATE, ParentRestriction.LIST_ID); |
5131 |
21 Nov 18 |
nicklas |
307 |
annotationEquals(flowThroughQuery, Annotationtype.DO_NOT_USE, null); |
5131 |
21 Nov 18 |
nicklas |
308 |
} |
5131 |
21 Nov 18 |
nicklas |
309 |
flowThroughQuery.setParameter("parents", idList(lysates), Type.INT); |
5131 |
21 Nov 18 |
nicklas |
310 |
return flowThroughQuery; |
5131 |
21 Nov 18 |
nicklas |
311 |
} |
5131 |
21 Nov 18 |
nicklas |
312 |
|
5131 |
21 Nov 18 |
nicklas |
313 |
/** |
5101 |
16 Nov 18 |
nicklas |
Get a query that is returning all Library items that are related to the |
5549 |
08 Aug 19 |
nicklas |
given list of RNA or DNA. The query is filtered to only return libraries |
5197 |
19 Dec 18 |
nicklas |
with a creation date, DoNotUse=null, a name that doesn't end with '.dil' and located |
5197 |
19 Dec 18 |
nicklas |
on a LibPlate with PlateProcessResult=Successful. Since there are multiple variants |
5549 |
08 Aug 19 |
nicklas |
of the path from library to RNA/DNA (depending on the protocol used) the query is matching |
5197 |
19 Dec 18 |
nicklas |
items by name instead of actual links. |
5101 |
16 Nov 18 |
nicklas |
@return A query or null if the list is null or empty |
5101 |
16 Nov 18 |
nicklas |
321 |
*/ |
5549 |
08 Aug 19 |
nicklas |
322 |
public ItemQuery<Extract> getLibraryQuery(List<? extends ReggieItem<Extract>> rnaOrDna, Pipeline pipeline) |
5101 |
16 Nov 18 |
nicklas |
323 |
{ |
5549 |
08 Aug 19 |
nicklas |
324 |
if (rnaOrDna == null || rnaOrDna.isEmpty()) return null; |
5101 |
16 Nov 18 |
nicklas |
325 |
if (libQuery == null) |
5101 |
16 Nov 18 |
nicklas |
326 |
{ |
5101 |
16 Nov 18 |
nicklas |
327 |
libQuery = Extract.getQuery(); |
5101 |
16 Nov 18 |
nicklas |
328 |
initBioMaterialQuery(libQuery, Subtype.LIBRARY, null, ParentRestriction.REGEXP_NAME); |
5164 |
03 Dec 18 |
nicklas |
329 |
hasCreationDate(libQuery); |
5101 |
16 Nov 18 |
nicklas |
330 |
libQuery.restrict(Restrictions.not(Restrictions.like(Hql.property("name"), Expressions.string("%.dil")))); // Exclude .dil items |
5101 |
16 Nov 18 |
nicklas |
331 |
annotationEquals(libQuery, Annotationtype.DO_NOT_USE, null); |
5549 |
08 Aug 19 |
nicklas |
332 |
Pipeline.createFilterParameter(dc, libQuery); |
5549 |
08 Aug 19 |
nicklas |
333 |
|
5197 |
19 Dec 18 |
nicklas |
// Join bioplate |
5197 |
19 Dec 18 |
nicklas |
335 |
libQuery.join(Hql.innerJoin("bioWell", "bw")); |
5197 |
19 Dec 18 |
nicklas |
336 |
libQuery.join(Hql.innerJoin("bw", "bioPlate", "bp")); |
5197 |
19 Dec 18 |
nicklas |
337 |
annotationEquals(libQuery, "bp", Annotationtype.PLATE_PROCESS_RESULT, "Successful"); |
5101 |
16 Nov 18 |
nicklas |
338 |
} |
5549 |
08 Aug 19 |
nicklas |
339 |
libQuery.setParameter("parents", namesRegexp(rnaOrDna), Type.STRING); |
5549 |
08 Aug 19 |
nicklas |
340 |
libQuery.setParameter("pipeline", pipeline.getName(), Type.STRING); |
5101 |
16 Nov 18 |
nicklas |
341 |
return libQuery; |
5101 |
16 Nov 18 |
nicklas |
342 |
} |
5101 |
16 Nov 18 |
nicklas |
343 |
|
5101 |
16 Nov 18 |
nicklas |
344 |
/** |
5104 |
16 Nov 18 |
nicklas |
Get a query that is returning all PooledLibrary items where the |
5104 |
16 Nov 18 |
nicklas |
given Library is included. |
5104 |
16 Nov 18 |
nicklas |
347 |
*/ |
5104 |
16 Nov 18 |
nicklas |
348 |
public ItemQuery<Extract> getPoolQuery(Library library) |
5104 |
16 Nov 18 |
nicklas |
349 |
{ |
5104 |
16 Nov 18 |
nicklas |
350 |
if (library == null) return null; |
5104 |
16 Nov 18 |
nicklas |
351 |
if (poolsFromLibQuery == null) |
5104 |
16 Nov 18 |
nicklas |
352 |
{ |
5197 |
19 Dec 18 |
nicklas |
// We can't use the 'init...(...)' method since this is a many-to-many relation and not a one-to-many |
5104 |
16 Nov 18 |
nicklas |
354 |
poolsFromLibQuery = Extract.getQuery(); |
5104 |
16 Nov 18 |
nicklas |
355 |
poolsFromLibQuery.setIncludes(Reggie.INCLUDE_IN_CURRENT_PROJECT); |
5104 |
16 Nov 18 |
nicklas |
356 |
Subtype.POOLED_LIBRARY.addFilter(dc, poolsFromLibQuery); |
5104 |
16 Nov 18 |
nicklas |
357 |
|
5104 |
16 Nov 18 |
nicklas |
// Join libraries |
5104 |
16 Nov 18 |
nicklas |
359 |
poolsFromLibQuery.join(Hql.innerJoin("creationEvent", "ce")); |
5104 |
16 Nov 18 |
nicklas |
360 |
poolsFromLibQuery.join(Hql.innerJoin("ce", "sources", "src")); |
5104 |
16 Nov 18 |
nicklas |
361 |
poolsFromLibQuery.restrict( |
5104 |
16 Nov 18 |
nicklas |
362 |
Restrictions.eq( |
5104 |
16 Nov 18 |
nicklas |
363 |
Hql.property("src", "bioMaterial"), |
5104 |
16 Nov 18 |
nicklas |
364 |
Hql.entityParameter("parent", Subtype.LIBRARY.getMainType()))); |
5104 |
16 Nov 18 |
nicklas |
365 |
} |
5104 |
16 Nov 18 |
nicklas |
366 |
poolsFromLibQuery.setEntityParameter("parent", library.getItem()); |
5104 |
16 Nov 18 |
nicklas |
367 |
return poolsFromLibQuery; |
5104 |
16 Nov 18 |
nicklas |
368 |
} |
5104 |
16 Nov 18 |
nicklas |
369 |
|
5104 |
16 Nov 18 |
nicklas |
370 |
/** |
5104 |
16 Nov 18 |
nicklas |
Get a query that is returning all DemuxedSequences items that are parents |
5104 |
16 Nov 18 |
nicklas |
to the given MergedSequences item. |
5104 |
16 Nov 18 |
nicklas |
373 |
*/ |
5104 |
16 Nov 18 |
nicklas |
374 |
public ItemQuery<DerivedBioAssay> getDemuxedSequencesQuery(MergedSequences merged) |
5104 |
16 Nov 18 |
nicklas |
375 |
{ |
5104 |
16 Nov 18 |
nicklas |
376 |
if (merged == null) return null; |
5104 |
16 Nov 18 |
nicklas |
377 |
if (demuxedQuery == null) |
5104 |
16 Nov 18 |
nicklas |
378 |
{ |
5104 |
16 Nov 18 |
nicklas |
379 |
demuxedQuery = DerivedBioAssay.getQuery(); |
5104 |
16 Nov 18 |
nicklas |
380 |
demuxedQuery.setIncludes(Reggie.INCLUDE_IN_CURRENT_PROJECT); |
5104 |
16 Nov 18 |
nicklas |
381 |
Subtype.DEMUXED_SEQUENCES.addFilter(dc, demuxedQuery); |
5104 |
16 Nov 18 |
nicklas |
382 |
demuxedQuery.join(Hql.innerJoin("children", "c")); |
5104 |
16 Nov 18 |
nicklas |
383 |
demuxedQuery.restrict(Restrictions.eq(Hql.alias("c"), Hql.entityParameter("child", Item.DERIVEDBIOASSAY))); |
5104 |
16 Nov 18 |
nicklas |
384 |
} |
5104 |
16 Nov 18 |
nicklas |
385 |
demuxedQuery.setEntityParameter("child", merged.getItem()); |
5104 |
16 Nov 18 |
nicklas |
386 |
return demuxedQuery; |
5104 |
16 Nov 18 |
nicklas |
387 |
} |
5104 |
16 Nov 18 |
nicklas |
388 |
|
5104 |
16 Nov 18 |
nicklas |
389 |
/** |
5104 |
16 Nov 18 |
nicklas |
Get a query that is returning all SequencingRun items that are parents |
5104 |
16 Nov 18 |
nicklas |
to the given MergedSequences item. |
5104 |
16 Nov 18 |
nicklas |
392 |
*/ |
5104 |
16 Nov 18 |
nicklas |
393 |
public ItemQuery<DerivedBioAssay> getSequencingRunsQuery(MergedSequences merged) |
5104 |
16 Nov 18 |
nicklas |
394 |
{ |
5104 |
16 Nov 18 |
nicklas |
395 |
if (merged == null) return null; |
5104 |
16 Nov 18 |
nicklas |
396 |
if (sequencingRunQuery == null) |
5104 |
16 Nov 18 |
nicklas |
397 |
{ |
5104 |
16 Nov 18 |
nicklas |
398 |
sequencingRunQuery = DerivedBioAssay.getQuery(); |
5104 |
16 Nov 18 |
nicklas |
399 |
sequencingRunQuery.setIncludes(Reggie.INCLUDE_IN_CURRENT_PROJECT); |
5104 |
16 Nov 18 |
nicklas |
400 |
Subtype.SEQUENCING_RUN.addFilter(dc, sequencingRunQuery); |
5104 |
16 Nov 18 |
nicklas |
401 |
sequencingRunQuery.join(Hql.innerJoin("children", "c1")); |
5104 |
16 Nov 18 |
nicklas |
402 |
sequencingRunQuery.join(Hql.innerJoin("c1", "children", "c")); |
5104 |
16 Nov 18 |
nicklas |
403 |
sequencingRunQuery.restrict(Restrictions.eq(Hql.alias("c"), Hql.entityParameter("child", Item.DERIVEDBIOASSAY))); |
5104 |
16 Nov 18 |
nicklas |
404 |
} |
5104 |
16 Nov 18 |
nicklas |
405 |
sequencingRunQuery.setEntityParameter("child", merged.getItem()); |
5104 |
16 Nov 18 |
nicklas |
406 |
return sequencingRunQuery; |
5104 |
16 Nov 18 |
nicklas |
407 |
} |
5104 |
16 Nov 18 |
nicklas |
408 |
|
5104 |
16 Nov 18 |
nicklas |
409 |
/** |
5102 |
16 Nov 18 |
nicklas |
Get a query that is returning all MergedSequences items that are related to the |
5102 |
16 Nov 18 |
nicklas |
given list of libraries. The query is filtered to only return items |
5102 |
16 Nov 18 |
nicklas |
with DoNotUse=null and AnalysisResult=Successful. |
5102 |
16 Nov 18 |
nicklas |
@return A query or null if the list is null or empty |
5102 |
16 Nov 18 |
nicklas |
414 |
*/ |
5550 |
09 Aug 19 |
nicklas |
415 |
public ItemQuery<DerivedBioAssay> getMergedSequencesQuery(List<Library> libraries, Pipeline pipeline) |
5102 |
16 Nov 18 |
nicklas |
416 |
{ |
5102 |
16 Nov 18 |
nicklas |
417 |
if (libraries == null || libraries.isEmpty()) return null; |
5102 |
16 Nov 18 |
nicklas |
418 |
if (mergedQuery == null) |
5102 |
16 Nov 18 |
nicklas |
419 |
{ |
5102 |
16 Nov 18 |
nicklas |
420 |
mergedQuery = DerivedBioAssay.getQuery(); |
5102 |
16 Nov 18 |
nicklas |
421 |
initDerivedBioAssayQuery(mergedQuery, Subtype.MERGED_SEQUENCES, Subtype.LIBRARY, ParentRestriction.LIST_ID); |
5550 |
09 Aug 19 |
nicklas |
422 |
Pipeline.createFilterParameter(dc, mergedQuery); |
5102 |
16 Nov 18 |
nicklas |
423 |
annotationEquals(mergedQuery, Annotationtype.DO_NOT_USE, null); |
5102 |
16 Nov 18 |
nicklas |
424 |
annotationEquals(mergedQuery, Annotationtype.ANALYSIS_RESULT, "Successful"); |
5102 |
16 Nov 18 |
nicklas |
425 |
} |
5102 |
16 Nov 18 |
nicklas |
426 |
mergedQuery.setParameter("parents", idList(libraries), Type.INT); |
5550 |
09 Aug 19 |
nicklas |
427 |
mergedQuery.setParameter("pipeline", pipeline.getName(), Type.STRING); |
5102 |
16 Nov 18 |
nicklas |
428 |
return mergedQuery; |
5102 |
16 Nov 18 |
nicklas |
429 |
} |
5103 |
16 Nov 18 |
nicklas |
430 |
|
5103 |
16 Nov 18 |
nicklas |
431 |
/** |
5103 |
16 Nov 18 |
nicklas |
Get a query that is returning all MaskedSequences items that are related to the |
5103 |
16 Nov 18 |
nicklas |
given list of merged sequences. The query is filtered to only return items |
5103 |
16 Nov 18 |
nicklas |
with DoNotUse=null. |
5103 |
16 Nov 18 |
nicklas |
@return A query or null if the list is null or empty |
5103 |
16 Nov 18 |
nicklas |
436 |
*/ |
5103 |
16 Nov 18 |
nicklas |
437 |
public ItemQuery<DerivedBioAssay> getMaskedSequencesQuery(List<MergedSequences> merged) |
5103 |
16 Nov 18 |
nicklas |
438 |
{ |
5103 |
16 Nov 18 |
nicklas |
439 |
if (merged == null || merged.isEmpty()) return null; |
5103 |
16 Nov 18 |
nicklas |
440 |
if (maskedQuery == null) |
5103 |
16 Nov 18 |
nicklas |
441 |
{ |
5103 |
16 Nov 18 |
nicklas |
442 |
maskedQuery = DerivedBioAssay.getQuery(); |
5103 |
16 Nov 18 |
nicklas |
443 |
initDerivedBioAssayQuery(maskedQuery, Subtype.MASKED_SEQUENCES, Subtype.MERGED_SEQUENCES, ParentRestriction.LIST_ID); |
5103 |
16 Nov 18 |
nicklas |
444 |
annotationEquals(maskedQuery, Annotationtype.DO_NOT_USE, null); |
5103 |
16 Nov 18 |
nicklas |
445 |
} |
5103 |
16 Nov 18 |
nicklas |
446 |
maskedQuery.setParameter("parents", idList(merged), Type.INT); |
5103 |
16 Nov 18 |
nicklas |
447 |
return maskedQuery; |
5103 |
16 Nov 18 |
nicklas |
448 |
} |
5102 |
16 Nov 18 |
nicklas |
449 |
|
5102 |
16 Nov 18 |
nicklas |
450 |
/** |
5103 |
16 Nov 18 |
nicklas |
Get a query that is returning all AlignedSequences items that are related to the |
5103 |
16 Nov 18 |
nicklas |
given list of masked sequences. The query is filtered to only return items |
5103 |
16 Nov 18 |
nicklas |
with DoNotUse=null and AnalysisResult=Successful. |
5103 |
16 Nov 18 |
nicklas |
@return A query or null if the list is null or empty |
5103 |
16 Nov 18 |
nicklas |
455 |
*/ |
5103 |
16 Nov 18 |
nicklas |
456 |
public ItemQuery<DerivedBioAssay> getAlignedSequencesQuery(List<MaskedSequences> masked) |
5103 |
16 Nov 18 |
nicklas |
457 |
{ |
5103 |
16 Nov 18 |
nicklas |
458 |
if (masked == null || masked.isEmpty()) return null; |
5103 |
16 Nov 18 |
nicklas |
459 |
if (alignedQuery == null) |
5103 |
16 Nov 18 |
nicklas |
460 |
{ |
5103 |
16 Nov 18 |
nicklas |
461 |
alignedQuery = DerivedBioAssay.getQuery(); |
5103 |
16 Nov 18 |
nicklas |
462 |
initDerivedBioAssayQuery(alignedQuery, Subtype.ALIGNED_SEQUENCES, Subtype.MASKED_SEQUENCES, ParentRestriction.LIST_ID); |
5103 |
16 Nov 18 |
nicklas |
463 |
annotationEquals(alignedQuery, Annotationtype.DO_NOT_USE, null); |
5103 |
16 Nov 18 |
nicklas |
464 |
} |
5103 |
16 Nov 18 |
nicklas |
465 |
alignedQuery.setParameter("parents", idList(masked), Type.INT); |
5103 |
16 Nov 18 |
nicklas |
466 |
return alignedQuery; |
5103 |
16 Nov 18 |
nicklas |
467 |
} |
5103 |
16 Nov 18 |
nicklas |
468 |
|
5103 |
16 Nov 18 |
nicklas |
469 |
/** |
5103 |
16 Nov 18 |
nicklas |
Get a query that is returning all StringTie raw bioassays that are related to the |
5103 |
16 Nov 18 |
nicklas |
given list of aligned sequences. The query is filtered to only return items |
5103 |
16 Nov 18 |
nicklas |
with DoNotUse=null and AnalysisResult=Successful. |
5103 |
16 Nov 18 |
nicklas |
@return A query or null if the list is null or empty |
5103 |
16 Nov 18 |
nicklas |
474 |
*/ |
5103 |
16 Nov 18 |
nicklas |
475 |
public ItemQuery<RawBioAssay> getStringTieQuery(List<AlignedSequences> aligned) |
5103 |
16 Nov 18 |
nicklas |
476 |
{ |
5103 |
16 Nov 18 |
nicklas |
477 |
if (aligned == null || aligned.isEmpty()) return null; |
5103 |
16 Nov 18 |
nicklas |
478 |
if (stringTieQuery == null) |
5103 |
16 Nov 18 |
nicklas |
479 |
{ |
5103 |
16 Nov 18 |
nicklas |
480 |
stringTieQuery = RawBioAssay.getQuery(); |
5103 |
16 Nov 18 |
nicklas |
481 |
initRawBioAssayQuery(stringTieQuery, Rawdatatype.STRINGTIE, Subtype.ALIGNED_SEQUENCES, ParentRestriction.LIST_ID); |
5103 |
16 Nov 18 |
nicklas |
482 |
annotationEquals(stringTieQuery, Annotationtype.DO_NOT_USE, null); |
5103 |
16 Nov 18 |
nicklas |
483 |
annotationEquals(stringTieQuery, Annotationtype.ANALYSIS_RESULT, "Successful"); |
5103 |
16 Nov 18 |
nicklas |
484 |
} |
5103 |
16 Nov 18 |
nicklas |
485 |
stringTieQuery.setParameter("parents", idList(aligned), Type.INT); |
5103 |
16 Nov 18 |
nicklas |
486 |
return stringTieQuery; |
5103 |
16 Nov 18 |
nicklas |
487 |
} |
5103 |
16 Nov 18 |
nicklas |
488 |
|
5103 |
16 Nov 18 |
nicklas |
489 |
/** |
5103 |
16 Nov 18 |
nicklas |
Get a query that is returning all Cufflinks raw bioassays that are related to the |
5103 |
16 Nov 18 |
nicklas |
given list of aligned sequences. The query is filtered to only return items |
5103 |
16 Nov 18 |
nicklas |
with DoNotUse=null and AnalysisResult=Successful. |
5103 |
16 Nov 18 |
nicklas |
@return A query or null if the list is null or empty |
5103 |
16 Nov 18 |
nicklas |
494 |
*/ |
5103 |
16 Nov 18 |
nicklas |
495 |
public ItemQuery<RawBioAssay> getCufflinksQuery(List<AlignedSequences> aligned) |
5103 |
16 Nov 18 |
nicklas |
496 |
{ |
5103 |
16 Nov 18 |
nicklas |
497 |
if (aligned == null || aligned.isEmpty()) return null; |
5103 |
16 Nov 18 |
nicklas |
498 |
if (cufflinksQuery == null) |
5103 |
16 Nov 18 |
nicklas |
499 |
{ |
5103 |
16 Nov 18 |
nicklas |
500 |
cufflinksQuery = RawBioAssay.getQuery(); |
5103 |
16 Nov 18 |
nicklas |
501 |
initRawBioAssayQuery(cufflinksQuery, Rawdatatype.CUFFLINKS, Subtype.ALIGNED_SEQUENCES, ParentRestriction.LIST_ID); |
5103 |
16 Nov 18 |
nicklas |
502 |
annotationEquals(cufflinksQuery, Annotationtype.DO_NOT_USE, null); |
5103 |
16 Nov 18 |
nicklas |
503 |
annotationEquals(cufflinksQuery, Annotationtype.ANALYSIS_RESULT, "Successful"); |
5103 |
16 Nov 18 |
nicklas |
504 |
} |
5103 |
16 Nov 18 |
nicklas |
505 |
cufflinksQuery.setParameter("parents", idList(aligned), Type.INT); |
5103 |
16 Nov 18 |
nicklas |
506 |
return cufflinksQuery; |
5103 |
16 Nov 18 |
nicklas |
507 |
} |
5103 |
16 Nov 18 |
nicklas |
508 |
|
5198 |
19 Dec 18 |
nicklas |
509 |
/** |
5873 |
23 Mar 20 |
nicklas |
Get a query that is returning all VariantCall raw bioassays that are related to the |
5873 |
23 Mar 20 |
nicklas |
given list of aligned sequences. The query is filtered to only return items |
5873 |
23 Mar 20 |
nicklas |
with DoNotUse=null and AnalysisResult=Successful. |
5873 |
23 Mar 20 |
nicklas |
@return A query or null if the list is null or empty |
5873 |
23 Mar 20 |
nicklas |
@since 4.26 |
5873 |
23 Mar 20 |
nicklas |
515 |
*/ |
5873 |
23 Mar 20 |
nicklas |
516 |
public ItemQuery<RawBioAssay> getVariantCallQuery(List<AlignedSequences> aligned) |
5873 |
23 Mar 20 |
nicklas |
517 |
{ |
5873 |
23 Mar 20 |
nicklas |
518 |
if (aligned == null || aligned.isEmpty()) return null; |
5873 |
23 Mar 20 |
nicklas |
519 |
if (variantCallQuery == null) |
5873 |
23 Mar 20 |
nicklas |
520 |
{ |
5873 |
23 Mar 20 |
nicklas |
521 |
variantCallQuery = RawBioAssay.getQuery(); |
5873 |
23 Mar 20 |
nicklas |
522 |
initRawBioAssayQuery(variantCallQuery, Rawdatatype.VARIANT_CALL, Subtype.ALIGNED_SEQUENCES, ParentRestriction.LIST_ID); |
5873 |
23 Mar 20 |
nicklas |
523 |
annotationEquals(variantCallQuery, Annotationtype.DO_NOT_USE, null); |
5873 |
23 Mar 20 |
nicklas |
524 |
annotationEquals(variantCallQuery, Annotationtype.ANALYSIS_RESULT, "Successful"); |
5873 |
23 Mar 20 |
nicklas |
525 |
} |
5873 |
23 Mar 20 |
nicklas |
526 |
variantCallQuery.setParameter("parents", idList(aligned), Type.INT); |
5873 |
23 Mar 20 |
nicklas |
527 |
return variantCallQuery; |
5873 |
23 Mar 20 |
nicklas |
528 |
} |
5873 |
23 Mar 20 |
nicklas |
529 |
|
7006 |
24 Jan 23 |
nicklas |
530 |
/** |
7006 |
24 Jan 23 |
nicklas |
Get a query that is returning all Methylation derived bioassays that are related to the |
7006 |
24 Jan 23 |
nicklas |
given list of DNA items. The query is filtered to only return items |
7006 |
24 Jan 23 |
nicklas |
with DoNotUse=null and AnalysisResult=Successful. Since there are multiple levels |
7006 |
24 Jan 23 |
nicklas |
of items on the path from DNA to Methylation the query is |
7006 |
24 Jan 23 |
nicklas |
matching items by name instead of actual links. |
7006 |
24 Jan 23 |
nicklas |
536 |
|
7006 |
24 Jan 23 |
nicklas |
@return A query or null if the list is null or empty |
7006 |
24 Jan 23 |
nicklas |
@since 4.44 |
7006 |
24 Jan 23 |
nicklas |
539 |
*/ |
7006 |
24 Jan 23 |
nicklas |
540 |
public ItemQuery<DerivedBioAssay> getMethylationQuery(List<Dna> dna) |
7006 |
24 Jan 23 |
nicklas |
541 |
{ |
7006 |
24 Jan 23 |
nicklas |
542 |
if (dna == null || dna.isEmpty()) return null; |
7006 |
24 Jan 23 |
nicklas |
543 |
if (methylationQuery == null) |
7006 |
24 Jan 23 |
nicklas |
544 |
{ |
7006 |
24 Jan 23 |
nicklas |
545 |
methylationQuery = DerivedBioAssay.getQuery(); |
7006 |
24 Jan 23 |
nicklas |
546 |
initDerivedBioAssayQuery(methylationQuery, Subtype.METHYLATION, null, ParentRestriction.REGEXP_NAME); |
7006 |
24 Jan 23 |
nicklas |
547 |
annotationEquals(methylationQuery, Annotationtype.DO_NOT_USE, null); |
7006 |
24 Jan 23 |
nicklas |
548 |
annotationEquals(methylationQuery, Annotationtype.ANALYSIS_RESULT, "Successful"); |
7006 |
24 Jan 23 |
nicklas |
549 |
} |
7006 |
24 Jan 23 |
nicklas |
550 |
methylationQuery.setParameter("parents", namesRegexp(dna), Type.STRING); |
7006 |
24 Jan 23 |
nicklas |
551 |
return methylationQuery; |
7006 |
24 Jan 23 |
nicklas |
552 |
} |
7006 |
24 Jan 23 |
nicklas |
553 |
|
5873 |
23 Mar 20 |
nicklas |
554 |
|
5873 |
23 Mar 20 |
nicklas |
555 |
/** |
7007 |
25 Jan 23 |
nicklas |
Get a query that is returning all GenotypeCall derived bioassays that are related to the |
7007 |
25 Jan 23 |
nicklas |
given list of BloodDNA items. The query is filtered to only return items |
7007 |
25 Jan 23 |
nicklas |
with DoNotUse=null and AnalysisResult=Successful. Since there are multiple levels |
7007 |
25 Jan 23 |
nicklas |
of items on the path from BloodDNA to GenotypeCall the query is |
7007 |
25 Jan 23 |
nicklas |
matching items by name instead of actual links. |
7007 |
25 Jan 23 |
nicklas |
561 |
|
7007 |
25 Jan 23 |
nicklas |
@return A query or null if the list is null or empty |
7007 |
25 Jan 23 |
nicklas |
@since 4.44 |
7007 |
25 Jan 23 |
nicklas |
564 |
*/ |
7007 |
25 Jan 23 |
nicklas |
565 |
public ItemQuery<DerivedBioAssay> getGenotypeCallsQuery(List<BloodDna> dna) |
7007 |
25 Jan 23 |
nicklas |
566 |
{ |
7007 |
25 Jan 23 |
nicklas |
567 |
if (dna == null || dna.isEmpty()) return null; |
7007 |
25 Jan 23 |
nicklas |
568 |
if (genotypeCallQuery == null) |
7007 |
25 Jan 23 |
nicklas |
569 |
{ |
7007 |
25 Jan 23 |
nicklas |
570 |
genotypeCallQuery = DerivedBioAssay.getQuery(); |
7007 |
25 Jan 23 |
nicklas |
571 |
initDerivedBioAssayQuery(genotypeCallQuery, Subtype.GENOTYPE_CALL, null, ParentRestriction.REGEXP_NAME); |
7007 |
25 Jan 23 |
nicklas |
572 |
annotationEquals(genotypeCallQuery, Annotationtype.DO_NOT_USE, null); |
7007 |
25 Jan 23 |
nicklas |
573 |
annotationEquals(genotypeCallQuery, Annotationtype.ANALYSIS_RESULT, "Successful"); |
7007 |
25 Jan 23 |
nicklas |
574 |
} |
7007 |
25 Jan 23 |
nicklas |
575 |
genotypeCallQuery.setParameter("parents", namesRegexp(dna), Type.STRING); |
7007 |
25 Jan 23 |
nicklas |
576 |
return genotypeCallQuery; |
7007 |
25 Jan 23 |
nicklas |
577 |
} |
7007 |
25 Jan 23 |
nicklas |
578 |
|
7007 |
25 Jan 23 |
nicklas |
579 |
/** |
7007 |
25 Jan 23 |
nicklas |
Get a query that is returning all OncoArray raw bioassays that are related to the |
7007 |
25 Jan 23 |
nicklas |
given list of genotype calls. The query is filtered to only return items |
7007 |
25 Jan 23 |
nicklas |
with DoNotUse=null and AnalysisResult=Successful. |
7007 |
25 Jan 23 |
nicklas |
@return A query or null if the list is null or empty |
7007 |
25 Jan 23 |
nicklas |
@since 4.44 |
7007 |
25 Jan 23 |
nicklas |
585 |
*/ |
7007 |
25 Jan 23 |
nicklas |
586 |
public ItemQuery<RawBioAssay> getOncoArrayQuery(List<GenotypeCall> genotypeCalls) |
7007 |
25 Jan 23 |
nicklas |
587 |
{ |
7007 |
25 Jan 23 |
nicklas |
588 |
if (genotypeCalls == null || genotypeCalls.isEmpty()) return null; |
7007 |
25 Jan 23 |
nicklas |
589 |
if (oncoArrayQuery == null) |
7007 |
25 Jan 23 |
nicklas |
590 |
{ |
7007 |
25 Jan 23 |
nicklas |
591 |
oncoArrayQuery = RawBioAssay.getQuery(); |
7007 |
25 Jan 23 |
nicklas |
592 |
initRawBioAssayQuery(oncoArrayQuery, Rawdatatype.ONCOARRAY500K, Subtype.GENOTYPE_CALL, ParentRestriction.LIST_ID); |
7007 |
25 Jan 23 |
nicklas |
593 |
annotationEquals(oncoArrayQuery, Annotationtype.DO_NOT_USE, null); |
7007 |
25 Jan 23 |
nicklas |
594 |
annotationEquals(oncoArrayQuery, Annotationtype.ANALYSIS_RESULT, "Successful"); |
7007 |
25 Jan 23 |
nicklas |
595 |
} |
7007 |
25 Jan 23 |
nicklas |
596 |
oncoArrayQuery.setParameter("parents", idList(genotypeCalls), Type.INT); |
7007 |
25 Jan 23 |
nicklas |
597 |
return oncoArrayQuery; |
7007 |
25 Jan 23 |
nicklas |
598 |
} |
7007 |
25 Jan 23 |
nicklas |
599 |
|
7007 |
25 Jan 23 |
nicklas |
600 |
/** |
5198 |
19 Dec 18 |
nicklas |
Get a query that load all libraries that has at least one alignment in the |
5198 |
19 Dec 18 |
nicklas |
"Flagged alignments" list. |
5198 |
19 Dec 18 |
nicklas |
603 |
*/ |
5198 |
19 Dec 18 |
nicklas |
604 |
public ItemQuery<Extract> getLibrariesWithFlaggedAlignments() |
5198 |
19 Dec 18 |
nicklas |
605 |
{ |
5198 |
19 Dec 18 |
nicklas |
606 |
ItemQuery<Extract> query = Extract.getQuery(); |
5198 |
19 Dec 18 |
nicklas |
607 |
initBioMaterialQuery(query, Subtype.LIBRARY, null, null); |
5198 |
19 Dec 18 |
nicklas |
608 |
query.join(Hql.innerJoin("derivedBioAssays", "aligned")); |
5198 |
19 Dec 18 |
nicklas |
609 |
Subtype.ALIGNED_SEQUENCES.addFilter(dc, query, "aligned"); |
5198 |
19 Dec 18 |
nicklas |
610 |
ItemList flagged = BiomaterialList.FLAGGED_ALIGNMENT.get(dc); |
5198 |
19 Dec 18 |
nicklas |
611 |
query.restrict(Hql.restriction("aligned.id IN (SELECT mmb FROM ItemListData lst INNER JOIN lst.members mmb WHERE lst.id=" +flagged.getId()+")", "$")); |
5198 |
19 Dec 18 |
nicklas |
612 |
return query; |
5198 |
19 Dec 18 |
nicklas |
613 |
} |
5104 |
16 Nov 18 |
nicklas |
614 |
|
5103 |
16 Nov 18 |
nicklas |
615 |
/** |
5098 |
15 Nov 18 |
nicklas |
Initializes a query for biomaterial items of a given type that also |
5098 |
15 Nov 18 |
nicklas |
must have a parent item of some other type. The parent item is joined |
5098 |
15 Nov 18 |
nicklas |
with alias 'p'. |
5098 |
15 Nov 18 |
nicklas |
619 |
*/ |
5098 |
15 Nov 18 |
nicklas |
620 |
private void initBioMaterialQuery(ItemQuery<? extends BioMaterial> query, |
5098 |
15 Nov 18 |
nicklas |
621 |
Subtype subtype, Subtype parentType, ParentRestriction parentRestriction) |
5098 |
15 Nov 18 |
nicklas |
622 |
{ |
5098 |
15 Nov 18 |
nicklas |
623 |
query.setIncludes(Reggie.INCLUDE_IN_CURRENT_PROJECT); |
5098 |
15 Nov 18 |
nicklas |
624 |
subtype.addFilter(dc, query); |
5101 |
16 Nov 18 |
nicklas |
625 |
if (parentType != null) |
5098 |
15 Nov 18 |
nicklas |
626 |
{ |
5101 |
16 Nov 18 |
nicklas |
// INNER JOIN parent item |
5101 |
16 Nov 18 |
nicklas |
628 |
query.join(Hql.innerJoin("parent", "p")); |
5101 |
16 Nov 18 |
nicklas |
629 |
parentType.addFilter(dc, query, "p"); |
5101 |
16 Nov 18 |
nicklas |
630 |
} |
5101 |
16 Nov 18 |
nicklas |
631 |
if (parentRestriction == ParentRestriction.SINGLE_ENTITY) |
5101 |
16 Nov 18 |
nicklas |
632 |
{ |
5098 |
15 Nov 18 |
nicklas |
633 |
query.restrict(Restrictions.eq(Hql.alias("p"), Hql.entityParameter("parent", parentType.getMainType()))); |
5098 |
15 Nov 18 |
nicklas |
634 |
} |
5101 |
16 Nov 18 |
nicklas |
635 |
else if (parentRestriction == ParentRestriction.LIST_ID) |
5098 |
15 Nov 18 |
nicklas |
636 |
{ |
5098 |
15 Nov 18 |
nicklas |
637 |
query.restrict(Restrictions.in(Hql.alias("p"), Expressions.parameter("parents", Type.INT))); |
5098 |
15 Nov 18 |
nicklas |
638 |
} |
5101 |
16 Nov 18 |
nicklas |
639 |
else if (parentRestriction == ParentRestriction.REGEXP_NAME) |
5101 |
16 Nov 18 |
nicklas |
640 |
{ |
5101 |
16 Nov 18 |
nicklas |
641 |
query.restrict(Restrictions.rlike(Hql.property("name"), Expressions.parameter("parents", Type.STRING))); |
5101 |
16 Nov 18 |
nicklas |
642 |
} |
5098 |
15 Nov 18 |
nicklas |
643 |
} |
5098 |
15 Nov 18 |
nicklas |
644 |
|
5098 |
15 Nov 18 |
nicklas |
645 |
/** |
5102 |
16 Nov 18 |
nicklas |
Initializes a query for derived bioassay items of a given type that also |
5102 |
16 Nov 18 |
nicklas |
must have a parent derived bioassay or extract item of some other type. |
5102 |
16 Nov 18 |
nicklas |
The parent item is joined with alias 'p'. |
5102 |
16 Nov 18 |
nicklas |
649 |
*/ |
5102 |
16 Nov 18 |
nicklas |
650 |
private void initDerivedBioAssayQuery(ItemQuery<DerivedBioAssay> query, |
5102 |
16 Nov 18 |
nicklas |
651 |
Subtype subtype, Subtype parentType, ParentRestriction parentRestriction) |
5102 |
16 Nov 18 |
nicklas |
652 |
{ |
5102 |
16 Nov 18 |
nicklas |
653 |
query.setIncludes(Reggie.INCLUDE_IN_CURRENT_PROJECT); |
5102 |
16 Nov 18 |
nicklas |
654 |
subtype.addFilter(dc, query); |
5102 |
16 Nov 18 |
nicklas |
655 |
|
7006 |
24 Jan 23 |
nicklas |
656 |
if (parentType != null) |
5102 |
16 Nov 18 |
nicklas |
657 |
{ |
7006 |
24 Jan 23 |
nicklas |
658 |
Item parentItemType = parentType.getMainType(); |
7006 |
24 Jan 23 |
nicklas |
659 |
if (parentItemType == Item.EXTRACT) |
7006 |
24 Jan 23 |
nicklas |
660 |
{ |
7006 |
24 Jan 23 |
nicklas |
661 |
query.join(Hql.innerJoin("extract", "p")); |
7006 |
24 Jan 23 |
nicklas |
662 |
parentType.addFilter(dc, query, "p"); |
7006 |
24 Jan 23 |
nicklas |
663 |
} |
7006 |
24 Jan 23 |
nicklas |
664 |
else if (parentItemType == Item.DERIVEDBIOASSAY) |
7006 |
24 Jan 23 |
nicklas |
665 |
{ |
7006 |
24 Jan 23 |
nicklas |
666 |
query.join(Hql.innerJoin("parents", "p")); |
7006 |
24 Jan 23 |
nicklas |
667 |
parentType.addFilter(dc, query, "p"); |
7006 |
24 Jan 23 |
nicklas |
668 |
} |
5102 |
16 Nov 18 |
nicklas |
669 |
} |
5102 |
16 Nov 18 |
nicklas |
670 |
|
5102 |
16 Nov 18 |
nicklas |
671 |
if (parentRestriction == ParentRestriction.LIST_ID) |
5102 |
16 Nov 18 |
nicklas |
672 |
{ |
5102 |
16 Nov 18 |
nicklas |
673 |
query.restrict(Restrictions.in(Hql.alias("p"), Expressions.parameter("parents", Type.INT))); |
5102 |
16 Nov 18 |
nicklas |
674 |
} |
7006 |
24 Jan 23 |
nicklas |
675 |
else if (parentRestriction == ParentRestriction.REGEXP_NAME) |
7006 |
24 Jan 23 |
nicklas |
676 |
{ |
7006 |
24 Jan 23 |
nicklas |
677 |
query.restrict(Restrictions.rlike(Hql.property("name"), Expressions.parameter("parents", Type.STRING))); |
7006 |
24 Jan 23 |
nicklas |
678 |
} |
5102 |
16 Nov 18 |
nicklas |
679 |
} |
5103 |
16 Nov 18 |
nicklas |
680 |
|
5103 |
16 Nov 18 |
nicklas |
681 |
/** |
5103 |
16 Nov 18 |
nicklas |
Initializes a query for raw bioassay items of a given type that also |
5103 |
16 Nov 18 |
nicklas |
must have a parent derived bioassay or extract item of some other type. |
5103 |
16 Nov 18 |
nicklas |
The parent item is joined with alias 'p'. |
5103 |
16 Nov 18 |
nicklas |
685 |
*/ |
5103 |
16 Nov 18 |
nicklas |
686 |
private void initRawBioAssayQuery(ItemQuery<RawBioAssay> query, |
5103 |
16 Nov 18 |
nicklas |
687 |
Rawdatatype rawtype, Subtype parentType, ParentRestriction parentRestriction) |
5103 |
16 Nov 18 |
nicklas |
688 |
{ |
5103 |
16 Nov 18 |
nicklas |
689 |
query.setIncludes(Reggie.INCLUDE_IN_CURRENT_PROJECT); |
5103 |
16 Nov 18 |
nicklas |
690 |
rawtype.addFilter(dc, query); |
5103 |
16 Nov 18 |
nicklas |
691 |
|
5103 |
16 Nov 18 |
nicklas |
692 |
Item parentItemType = parentType.getMainType(); |
5103 |
16 Nov 18 |
nicklas |
693 |
if (parentItemType == Item.EXTRACT) |
5103 |
16 Nov 18 |
nicklas |
694 |
{ |
5103 |
16 Nov 18 |
nicklas |
695 |
query.join(Hql.innerJoin("parentExtract", "p")); |
5103 |
16 Nov 18 |
nicklas |
696 |
parentType.addFilter(dc, query, "p"); |
5103 |
16 Nov 18 |
nicklas |
697 |
} |
5103 |
16 Nov 18 |
nicklas |
698 |
else if (parentItemType == Item.DERIVEDBIOASSAY) |
5103 |
16 Nov 18 |
nicklas |
699 |
{ |
5103 |
16 Nov 18 |
nicklas |
700 |
query.join(Hql.innerJoin("parentBioAssay", "p")); |
5103 |
16 Nov 18 |
nicklas |
701 |
parentType.addFilter(dc, query, "p"); |
5103 |
16 Nov 18 |
nicklas |
702 |
} |
5103 |
16 Nov 18 |
nicklas |
703 |
|
5103 |
16 Nov 18 |
nicklas |
704 |
if (parentRestriction == ParentRestriction.LIST_ID) |
5103 |
16 Nov 18 |
nicklas |
705 |
{ |
5103 |
16 Nov 18 |
nicklas |
706 |
query.restrict(Restrictions.in(Hql.alias("p"), Expressions.parameter("parents", Type.INT))); |
5103 |
16 Nov 18 |
nicklas |
707 |
} |
5103 |
16 Nov 18 |
nicklas |
708 |
} |
5102 |
16 Nov 18 |
nicklas |
709 |
|
5164 |
03 Dec 18 |
nicklas |
710 |
/** |
5164 |
03 Dec 18 |
nicklas |
Adds a restriction to a biomaterial query so that only |
5164 |
03 Dec 18 |
nicklas |
items with a creation date are returned. This will avoid |
5164 |
03 Dec 18 |
nicklas |
items that have been pre-created for some process that has |
5164 |
03 Dec 18 |
nicklas |
not yet been performed in the lab. |
5164 |
03 Dec 18 |
nicklas |
715 |
*/ |
5164 |
03 Dec 18 |
nicklas |
716 |
private void hasCreationDate(ItemQuery<? extends BioMaterial> query) |
5164 |
03 Dec 18 |
nicklas |
717 |
{ |
5164 |
03 Dec 18 |
nicklas |
718 |
query.restrict(Restrictions.neq(Hql.property("creationEvent.eventDate"), null)); |
5164 |
03 Dec 18 |
nicklas |
719 |
} |
5102 |
16 Nov 18 |
nicklas |
720 |
|
5197 |
19 Dec 18 |
nicklas |
721 |
private void annotationEquals(ItemQuery<?> query, Annotationtype at, Object value) |
5197 |
19 Dec 18 |
nicklas |
722 |
{ |
5197 |
19 Dec 18 |
nicklas |
723 |
annotationEquals(query, null, at, value); |
5197 |
19 Dec 18 |
nicklas |
724 |
} |
5197 |
19 Dec 18 |
nicklas |
725 |
|
5102 |
16 Nov 18 |
nicklas |
726 |
/** |
5164 |
03 Dec 18 |
nicklas |
Adds a restriction to a query that filters on a single-valued annotation |
5098 |
15 Nov 18 |
nicklas |
type having a specific value. The restriction is using an INNER JOIN if |
5098 |
15 Nov 18 |
nicklas |
a specific value is requested, or a LEFT JOIN if the value should be null. |
5098 |
15 Nov 18 |
nicklas |
The annotation is join with alias 'a{id}' where {id}=ID of the annotation type. |
5098 |
15 Nov 18 |
nicklas |
731 |
*/ |
5197 |
19 Dec 18 |
nicklas |
732 |
private void annotationEquals(ItemQuery<?> query, String joinedAlias, Annotationtype at, Object value) |
5098 |
15 Nov 18 |
nicklas |
733 |
{ |
5098 |
15 Nov 18 |
nicklas |
734 |
AnnotationType a = at.load(dc); |
5098 |
15 Nov 18 |
nicklas |
735 |
String alias = "a"+a.getId(); |
5098 |
15 Nov 18 |
nicklas |
736 |
if (value == null) |
5098 |
15 Nov 18 |
nicklas |
737 |
{ |
5098 |
15 Nov 18 |
nicklas |
// 'null' value requires LEFT JOIN |
5197 |
19 Dec 18 |
nicklas |
739 |
query.join(Annotations.leftJoin(joinedAlias, a, alias)); |
5098 |
15 Nov 18 |
nicklas |
740 |
query.restrict(Restrictions.eq(Hql.alias(alias), null)); |
5098 |
15 Nov 18 |
nicklas |
741 |
} |
5098 |
15 Nov 18 |
nicklas |
742 |
else |
5098 |
15 Nov 18 |
nicklas |
743 |
{ |
5098 |
15 Nov 18 |
nicklas |
// Otherwise we use INNER JOIN |
5197 |
19 Dec 18 |
nicklas |
745 |
query.join(Annotations.innerJoin(joinedAlias, at.load(dc), alias)); |
5098 |
15 Nov 18 |
nicklas |
746 |
query.restrict( |
5098 |
15 Nov 18 |
nicklas |
747 |
Restrictions.eq( |
5098 |
15 Nov 18 |
nicklas |
748 |
Hql.alias(alias), |
5098 |
15 Nov 18 |
nicklas |
749 |
Expressions.parameter(alias, value, at.getValueType()) |
5098 |
15 Nov 18 |
nicklas |
750 |
)); |
5098 |
15 Nov 18 |
nicklas |
751 |
} |
5098 |
15 Nov 18 |
nicklas |
752 |
} |
5098 |
15 Nov 18 |
nicklas |
753 |
|
5098 |
15 Nov 18 |
nicklas |
754 |
private List<Integer> idList(List<? extends ReggieItem<?>> items) |
5098 |
15 Nov 18 |
nicklas |
755 |
{ |
5101 |
16 Nov 18 |
nicklas |
756 |
List<Integer> ids = new ArrayList<>(items.size()); |
5098 |
15 Nov 18 |
nicklas |
757 |
for (ReggieItem<?> r : items) |
5098 |
15 Nov 18 |
nicklas |
758 |
{ |
5098 |
15 Nov 18 |
nicklas |
759 |
ids.add(r.getId()); |
5098 |
15 Nov 18 |
nicklas |
760 |
} |
5098 |
15 Nov 18 |
nicklas |
761 |
return ids; |
5098 |
15 Nov 18 |
nicklas |
762 |
} |
5098 |
15 Nov 18 |
nicklas |
763 |
|
5101 |
16 Nov 18 |
nicklas |
764 |
private String namesRegexp(List<? extends ReggieItem<?>> items) |
5101 |
16 Nov 18 |
nicklas |
765 |
{ |
5101 |
16 Nov 18 |
nicklas |
766 |
StringBuilder sb = new StringBuilder(); |
5101 |
16 Nov 18 |
nicklas |
767 |
sb.append("^("); |
5101 |
16 Nov 18 |
nicklas |
768 |
String sep = ""; |
5101 |
16 Nov 18 |
nicklas |
769 |
for (ReggieItem<?> r : items) |
5101 |
16 Nov 18 |
nicklas |
770 |
{ |
5101 |
16 Nov 18 |
nicklas |
771 |
sb.append(sep); |
5101 |
16 Nov 18 |
nicklas |
772 |
sep = "|"; |
5101 |
16 Nov 18 |
nicklas |
773 |
sb.append(r.getName().replace(".", "\\.")); |
5101 |
16 Nov 18 |
nicklas |
774 |
} |
5101 |
16 Nov 18 |
nicklas |
775 |
sb.append(").+"); |
5101 |
16 Nov 18 |
nicklas |
776 |
return sb.toString(); |
5101 |
16 Nov 18 |
nicklas |
777 |
} |
5101 |
16 Nov 18 |
nicklas |
778 |
|
5098 |
15 Nov 18 |
nicklas |
779 |
enum ParentRestriction |
5098 |
15 Nov 18 |
nicklas |
780 |
{ |
5104 |
16 Nov 18 |
nicklas |
781 |
SINGLE_ENTITY, LIST_ID, REGEXP_NAME; |
5098 |
15 Nov 18 |
nicklas |
782 |
} |
5098 |
15 Nov 18 |
nicklas |
783 |
|
5098 |
15 Nov 18 |
nicklas |
784 |
} |