1474 |
29 Nov 11 |
pawels |
1 |
/******************************************************************************* |
1474 |
29 Nov 11 |
pawels |
* Copyright (c) 2011 The Norwegian Microarray Consortium. |
1474 |
29 Nov 11 |
pawels |
* All rights reserved. This program and the accompanying materials |
1474 |
29 Nov 11 |
pawels |
* are made available under the terms of the GNU Public License v3.0 |
1474 |
29 Nov 11 |
pawels |
* which accompanies this distribution, and is available at |
1474 |
29 Nov 11 |
pawels |
* http://www.gnu.org/licenses/gpl-3.0.html |
1474 |
29 Nov 11 |
pawels |
7 |
* |
1474 |
29 Nov 11 |
pawels |
* Contributors: |
1474 |
29 Nov 11 |
pawels |
* The Norwegian Microarray Consortium - initial API and implementation |
1474 |
29 Nov 11 |
pawels |
10 |
******************************************************************************/ |
1474 |
29 Nov 11 |
pawels |
11 |
package no.uib.cbu.base.magetabexport; |
1474 |
29 Nov 11 |
pawels |
12 |
|
1474 |
29 Nov 11 |
pawels |
13 |
import java.util.ArrayList; |
1474 |
29 Nov 11 |
pawels |
14 |
import java.util.Arrays; |
1474 |
29 Nov 11 |
pawels |
15 |
import java.util.List; |
1474 |
29 Nov 11 |
pawels |
16 |
|
1474 |
29 Nov 11 |
pawels |
17 |
import net.sf.basedb.core.Annotatable; |
1474 |
29 Nov 11 |
pawels |
18 |
import net.sf.basedb.core.AnnotationType; |
1474 |
29 Nov 11 |
pawels |
19 |
import net.sf.basedb.core.ArrayDesign; |
1474 |
29 Nov 11 |
pawels |
20 |
import net.sf.basedb.core.BioAssaySet; |
1474 |
29 Nov 11 |
pawels |
21 |
import net.sf.basedb.core.BioMaterialEvent; |
1474 |
29 Nov 11 |
pawels |
22 |
import net.sf.basedb.core.BioSource; |
1474 |
29 Nov 11 |
pawels |
23 |
import net.sf.basedb.core.DataFileType; |
1474 |
29 Nov 11 |
pawels |
24 |
import net.sf.basedb.core.DbControl; |
1474 |
29 Nov 11 |
pawels |
25 |
import net.sf.basedb.core.Experiment; |
1474 |
29 Nov 11 |
pawels |
26 |
import net.sf.basedb.core.Extract; |
1474 |
29 Nov 11 |
pawels |
27 |
import net.sf.basedb.core.FileSetMember; |
1474 |
29 Nov 11 |
pawels |
28 |
import net.sf.basedb.core.Hybridization; |
1474 |
29 Nov 11 |
pawels |
29 |
import net.sf.basedb.core.Include; |
1474 |
29 Nov 11 |
pawels |
30 |
import net.sf.basedb.core.ItemQuery; |
1474 |
29 Nov 11 |
pawels |
31 |
import net.sf.basedb.core.ItemResultList; |
1474 |
29 Nov 11 |
pawels |
32 |
import net.sf.basedb.core.LabeledExtract; |
1474 |
29 Nov 11 |
pawels |
33 |
import net.sf.basedb.core.MeasuredBioMaterial; |
1474 |
29 Nov 11 |
pawels |
34 |
import net.sf.basedb.core.Protocol; |
1474 |
29 Nov 11 |
pawels |
35 |
import net.sf.basedb.core.RawBioAssay; |
1474 |
29 Nov 11 |
pawels |
36 |
import net.sf.basedb.core.Sample; |
1474 |
29 Nov 11 |
pawels |
37 |
import net.sf.basedb.core.Scan; |
1474 |
29 Nov 11 |
pawels |
38 |
import net.sf.basedb.core.snapshot.AnnotationSnapshot; |
1474 |
29 Nov 11 |
pawels |
39 |
import net.sf.basedb.core.snapshot.AnnotationTypeFilter; |
1474 |
29 Nov 11 |
pawels |
40 |
import net.sf.basedb.core.snapshot.SnapshotManager; |
1474 |
29 Nov 11 |
pawels |
41 |
import no.uib.cbu.base.magetabexport.ProtocolInfo.TYPE; |
1474 |
29 Nov 11 |
pawels |
42 |
|
1474 |
29 Nov 11 |
pawels |
43 |
public class SDRFCreator { |
1474 |
29 Nov 11 |
pawels |
44 |
|
1474 |
29 Nov 11 |
pawels |
45 |
/** |
1474 |
29 Nov 11 |
pawels |
* Experiment to create SDRF for |
1474 |
29 Nov 11 |
pawels |
47 |
*/ |
1474 |
29 Nov 11 |
pawels |
48 |
private Experiment experiment; |
1474 |
29 Nov 11 |
pawels |
49 |
/** |
1474 |
29 Nov 11 |
pawels |
* ArrayExpress accession annotation for array design and protocols |
1474 |
29 Nov 11 |
pawels |
51 |
*/ |
1474 |
29 Nov 11 |
pawels |
52 |
private AnnotationType aeRefAT; |
1474 |
29 Nov 11 |
pawels |
53 |
/** |
1474 |
29 Nov 11 |
pawels |
* Material type annotation for biomaterials |
1474 |
29 Nov 11 |
pawels |
55 |
*/ |
1474 |
29 Nov 11 |
pawels |
56 |
private AnnotationType materialTypeAT; |
1474 |
29 Nov 11 |
pawels |
57 |
/** |
1474 |
29 Nov 11 |
pawels |
* List of file types that should be reported in SDRF as Array Data Files |
1474 |
29 Nov 11 |
pawels |
59 |
*/ |
1474 |
29 Nov 11 |
pawels |
60 |
private List<DataFileType> dataFileTypes; |
1474 |
29 Nov 11 |
pawels |
61 |
|
1474 |
29 Nov 11 |
pawels |
62 |
private SnapshotManager snapMan; |
1474 |
29 Nov 11 |
pawels |
63 |
|
1474 |
29 Nov 11 |
pawels |
64 |
public void setArrayExpressRefAnnotationType(AnnotationType aeRefAT) { |
1474 |
29 Nov 11 |
pawels |
65 |
this.aeRefAT = aeRefAT; |
1474 |
29 Nov 11 |
pawels |
66 |
} |
1474 |
29 Nov 11 |
pawels |
67 |
|
1474 |
29 Nov 11 |
pawels |
68 |
public void setMaterialTypeAnnotationType(AnnotationType materialTypeAT) { |
1474 |
29 Nov 11 |
pawels |
69 |
this.materialTypeAT = materialTypeAT; |
1474 |
29 Nov 11 |
pawels |
70 |
} |
1474 |
29 Nov 11 |
pawels |
71 |
|
1474 |
29 Nov 11 |
pawels |
72 |
public void setArrayDataFileTypes(List<DataFileType> dataFileTypes) { |
1474 |
29 Nov 11 |
pawels |
73 |
this.dataFileTypes = dataFileTypes; |
1474 |
29 Nov 11 |
pawels |
74 |
} |
1474 |
29 Nov 11 |
pawels |
75 |
|
1474 |
29 Nov 11 |
pawels |
76 |
public SDRFCreator(Experiment exp) { |
1474 |
29 Nov 11 |
pawels |
77 |
experiment = exp; |
1474 |
29 Nov 11 |
pawels |
78 |
snapMan = new SnapshotManager(); |
1474 |
29 Nov 11 |
pawels |
79 |
} |
1474 |
29 Nov 11 |
pawels |
80 |
|
1474 |
29 Nov 11 |
pawels |
81 |
|
1474 |
29 Nov 11 |
pawels |
82 |
public SDRF getSDRFForExperiment(DbControl dc) throws MageTabException { |
1474 |
29 Nov 11 |
pawels |
83 |
|
1474 |
29 Nov 11 |
pawels |
84 |
SDRF sdrf = new SDRF(); |
1474 |
29 Nov 11 |
pawels |
85 |
|
1474 |
29 Nov 11 |
pawels |
86 |
ItemQuery<AnnotationType> factorsQ = experiment.getExperimentalFactors(); |
1474 |
29 Nov 11 |
pawels |
87 |
factorsQ.include(Include.ALL); |
1474 |
29 Nov 11 |
pawels |
88 |
ItemResultList<AnnotationType> factors = factorsQ.list(dc); |
1474 |
29 Nov 11 |
pawels |
89 |
if (factors == null || factors.isEmpty()) { |
1474 |
29 Nov 11 |
pawels |
90 |
throw new MageTabException("No experimental factors found"); |
1474 |
29 Nov 11 |
pawels |
91 |
} |
1474 |
29 Nov 11 |
pawels |
92 |
|
1474 |
29 Nov 11 |
pawels |
93 |
BioAssaySet bioAssaySet = null; |
1474 |
29 Nov 11 |
pawels |
94 |
ItemQuery<BioAssaySet> basQ = experiment.getBioAssaySets(); |
1474 |
29 Nov 11 |
pawels |
95 |
basQ.include(Include.ALL); |
1474 |
29 Nov 11 |
pawels |
96 |
List<BioAssaySet> bass = basQ.list(dc); |
1474 |
29 Nov 11 |
pawels |
97 |
if (bass != null && !bass.isEmpty()) { |
1474 |
29 Nov 11 |
pawels |
98 |
|
1474 |
29 Nov 11 |
pawels |
// TODO let the user choose the bioassayset when executing the plugin |
1474 |
29 Nov 11 |
pawels |
100 |
|
1474 |
29 Nov 11 |
pawels |
101 |
bioAssaySet = bass.get(0); |
1474 |
29 Nov 11 |
pawels |
102 |
} |
1474 |
29 Nov 11 |
pawels |
103 |
|
1474 |
29 Nov 11 |
pawels |
104 |
String bioAssaySetMatrixFile = "processed_data_file"; |
1474 |
29 Nov 11 |
pawels |
105 |
if (bioAssaySet != null && bioAssaySet.hasFileSet()) { |
1474 |
29 Nov 11 |
pawels |
106 |
DataFileType dft = DataFileType.getByExternalId(dc, DataFileType.BASEFILE_MATRIX); |
1474 |
29 Nov 11 |
pawels |
107 |
if (bioAssaySet.getFileSet().hasMember(dft)) { |
1474 |
29 Nov 11 |
pawels |
108 |
FileSetMember m = bioAssaySet.getFileSet().getMember(dft); |
1474 |
29 Nov 11 |
pawels |
109 |
bioAssaySetMatrixFile = m.getFile().getName(); |
1474 |
29 Nov 11 |
pawels |
110 |
} |
1474 |
29 Nov 11 |
pawels |
111 |
} |
1474 |
29 Nov 11 |
pawels |
112 |
|
1474 |
29 Nov 11 |
pawels |
// Assumption is made here that all the rawbioassays in the experiment should be exported, |
1474 |
29 Nov 11 |
pawels |
// and that the RawBioAssaySet selected above contains all of them. The basefile_matrix file |
1474 |
29 Nov 11 |
pawels |
// linked to it should have the data for all rbas. |
1474 |
29 Nov 11 |
pawels |
116 |
|
1474 |
29 Nov 11 |
pawels |
117 |
ItemQuery<RawBioAssay> rbaQ = experiment.getRawBioAssays(); |
1474 |
29 Nov 11 |
pawels |
118 |
rbaQ.include(Include.ALL); |
1474 |
29 Nov 11 |
pawels |
119 |
ItemResultList<RawBioAssay> rbas = rbaQ.list(dc); |
1474 |
29 Nov 11 |
pawels |
120 |
for (RawBioAssay rba : rbas) { |
1474 |
29 Nov 11 |
pawels |
121 |
|
1474 |
29 Nov 11 |
pawels |
122 |
List<SDRFEntry> ses = getSDRFEntriesForRBA(rba, factors, dc); |
1474 |
29 Nov 11 |
pawels |
123 |
for (SDRFEntry se : ses) { |
1474 |
29 Nov 11 |
pawels |
124 |
|
1474 |
29 Nov 11 |
pawels |
// set derived file & data processing protocol |
1474 |
29 Nov 11 |
pawels |
126 |
ProtocolInfo pi = new ProtocolInfo(ProtocolInfo.TYPE.DATA_PROCESSING, "BASE:data_processing_protocol", null); |
1474 |
29 Nov 11 |
pawels |
127 |
ItemInfo item = new ItemInfo(ItemInfo.TYPE.DERIVED_ARRAY_DATA_FILE, bioAssaySetMatrixFile); |
1474 |
29 Nov 11 |
pawels |
128 |
item.setProtocol(pi); |
1474 |
29 Nov 11 |
pawels |
129 |
se.addItem(item); |
1474 |
29 Nov 11 |
pawels |
130 |
|
1474 |
29 Nov 11 |
pawels |
131 |
sdrf.addSDRFEntry(se); |
1474 |
29 Nov 11 |
pawels |
132 |
} |
1474 |
29 Nov 11 |
pawels |
133 |
} |
1474 |
29 Nov 11 |
pawels |
134 |
|
1474 |
29 Nov 11 |
pawels |
135 |
return sdrf; |
1474 |
29 Nov 11 |
pawels |
136 |
} |
1474 |
29 Nov 11 |
pawels |
137 |
|
1474 |
29 Nov 11 |
pawels |
138 |
private List<SDRFEntry> getSDRFEntriesForRBA(RawBioAssay rba, List<AnnotationType> factors, DbControl dc) |
1474 |
29 Nov 11 |
pawels |
139 |
throws MageTabException { |
1474 |
29 Nov 11 |
pawels |
140 |
|
1474 |
29 Nov 11 |
pawels |
141 |
if (rba == null) { return Arrays.asList(new SDRFEntry()); } |
1474 |
29 Nov 11 |
pawels |
142 |
|
1474 |
29 Nov 11 |
pawels |
143 |
List<SDRFEntry> sdrfEs = new ArrayList<SDRFEntry>(); |
1474 |
29 Nov 11 |
pawels |
144 |
|
1474 |
29 Nov 11 |
pawels |
145 |
for (DataFileType dft : dataFileTypes) { |
1474 |
29 Nov 11 |
pawels |
146 |
|
1474 |
29 Nov 11 |
pawels |
147 |
|
1474 |
29 Nov 11 |
pawels |
148 |
/* |
1474 |
29 Nov 11 |
pawels |
* TODO |
1474 |
29 Nov 11 |
pawels |
* Check if for 2 rawdata files per sample, two lines should be generated or two columns. |
1474 |
29 Nov 11 |
pawels |
* Currently separate lines are created. |
1474 |
29 Nov 11 |
pawels |
152 |
* |
1474 |
29 Nov 11 |
pawels |
153 |
*/ |
1474 |
29 Nov 11 |
pawels |
154 |
|
1474 |
29 Nov 11 |
pawels |
155 |
List<SDRFEntry> ses = getSDRFEntriesForScan(rba.getScan(), rba.getArrayNum(), dc); |
1474 |
29 Nov 11 |
pawels |
156 |
|
1474 |
29 Nov 11 |
pawels |
157 |
for (SDRFEntry se : ses) { |
1474 |
29 Nov 11 |
pawels |
// set the array/raw data file |
1474 |
29 Nov 11 |
pawels |
159 |
if (rba.hasFileSet()) { |
1474 |
29 Nov 11 |
pawels |
160 |
FileSetMember member = rba.getFileSet().getMember(dft); |
1474 |
29 Nov 11 |
pawels |
161 |
if (member != null) { |
1474 |
29 Nov 11 |
pawels |
162 |
ItemInfo item = new ItemInfo(ItemInfo.TYPE.ARRAY_DATA_FILE, member.getFile().getName()); |
1474 |
29 Nov 11 |
pawels |
163 |
fillCharacteristicsForItem(item, rba, dc); |
1474 |
29 Nov 11 |
pawels |
164 |
se.addItem(item); |
1474 |
29 Nov 11 |
pawels |
165 |
} |
1474 |
29 Nov 11 |
pawels |
166 |
} |
1474 |
29 Nov 11 |
pawels |
167 |
|
1474 |
29 Nov 11 |
pawels |
168 |
if (rba.hasArrayDesign()) { |
1474 |
29 Nov 11 |
pawels |
169 |
ArrayDesign design = rba.getArrayDesign(); |
1474 |
29 Nov 11 |
pawels |
170 |
String arrayRef = getValueForAnnotationType(design, aeRefAT, dc); |
1474 |
29 Nov 11 |
pawels |
171 |
if (arrayRef == null) { |
1474 |
29 Nov 11 |
pawels |
172 |
arrayRef = "BASE:" + design.getName(); |
1474 |
29 Nov 11 |
pawels |
173 |
} |
1474 |
29 Nov 11 |
pawels |
174 |
se.setArrayDesign(arrayRef); |
1474 |
29 Nov 11 |
pawels |
175 |
} |
1474 |
29 Nov 11 |
pawels |
176 |
|
1590 |
20 Mar 12 |
pawels |
177 |
|
1474 |
29 Nov 11 |
pawels |
// add experimental factors |
1474 |
29 Nov 11 |
pawels |
179 |
if (!rba.isAnnotated()) { |
1474 |
29 Nov 11 |
pawels |
180 |
throw new MageTabException("raw bioassay ["+rba.getName()+"] is not annotated. "+ |
1474 |
29 Nov 11 |
pawels |
181 |
"Can't retrieve experimental factor(s)."); |
1474 |
29 Nov 11 |
pawels |
182 |
} |
1590 |
20 Mar 12 |
pawels |
183 |
|
1474 |
29 Nov 11 |
pawels |
184 |
for (AnnotationType at : factors) { |
1590 |
20 Mar 12 |
pawels |
185 |
|
1474 |
29 Nov 11 |
pawels |
186 |
List<AnnotationSnapshot> as = snapMan.findAnnotations(dc, rba, new AnnotationTypeFilter(at), true); |
1590 |
20 Mar 12 |
pawels |
187 |
|
1474 |
29 Nov 11 |
pawels |
188 |
if (as == null || as.isEmpty()) { |
1474 |
29 Nov 11 |
pawels |
189 |
throw new MageTabException("raw bioassay ["+rba.getName()+"] is not annotated with "+ |
1474 |
29 Nov 11 |
pawels |
190 |
"an experimental factor ["+at.getName()+"]."); |
1590 |
20 Mar 12 |
pawels |
191 |
} |
1590 |
20 Mar 12 |
pawels |
192 |
else if (as.size() == 1) { // one-channel experiment |
1590 |
20 Mar 12 |
pawels |
193 |
AnnotationSnapshot a = as.get(0); |
1590 |
20 Mar 12 |
pawels |
194 |
se.addExperimentalFactor(at.getName(), getValueForAnnotation(a)); |
1590 |
20 Mar 12 |
pawels |
195 |
} |
1590 |
20 Mar 12 |
pawels |
196 |
else if (as.size() == 2) { // two-channel experiment |
1590 |
20 Mar 12 |
pawels |
// find the correct annotation looking at sample annotation of this SDRFEntry |
1590 |
20 Mar 12 |
pawels |
198 |
for (AnnotationSnapshot a : as) { |
1590 |
20 Mar 12 |
pawels |
199 |
String ann = getValueForAnnotation(a); |
1590 |
20 Mar 12 |
pawels |
200 |
ItemInfo ii = se.getItems().get(ItemInfo.TYPE.SAMPLE); |
1590 |
20 Mar 12 |
pawels |
201 |
if (ii != null && ii.getAllCharacteristicsNames().contains(at.getName())) { |
1590 |
20 Mar 12 |
pawels |
202 |
if (ann.equals(ii.getCharacteristicValue(at.getName()))) { |
1590 |
20 Mar 12 |
pawels |
203 |
se.addExperimentalFactor(at.getName(), ann); |
1590 |
20 Mar 12 |
pawels |
204 |
break; |
1590 |
20 Mar 12 |
pawels |
205 |
} |
1590 |
20 Mar 12 |
pawels |
206 |
} |
1590 |
20 Mar 12 |
pawels |
207 |
} |
1590 |
20 Mar 12 |
pawels |
208 |
} else { |
1474 |
29 Nov 11 |
pawels |
209 |
throw new MageTabException("raw bioassay ["+rba.getName()+"] has multiple annotations "+ |
1474 |
29 Nov 11 |
pawels |
210 |
"of type ["+at.getName()+"]."); |
1474 |
29 Nov 11 |
pawels |
211 |
} |
1590 |
20 Mar 12 |
pawels |
212 |
|
1590 |
20 Mar 12 |
pawels |
213 |
|
1474 |
29 Nov 11 |
pawels |
214 |
} |
1474 |
29 Nov 11 |
pawels |
215 |
|
1474 |
29 Nov 11 |
pawels |
216 |
} |
1474 |
29 Nov 11 |
pawels |
217 |
sdrfEs.addAll(ses); |
1474 |
29 Nov 11 |
pawels |
218 |
} |
1474 |
29 Nov 11 |
pawels |
219 |
|
1474 |
29 Nov 11 |
pawels |
220 |
return sdrfEs; |
1474 |
29 Nov 11 |
pawels |
221 |
} |
1474 |
29 Nov 11 |
pawels |
222 |
|
1474 |
29 Nov 11 |
pawels |
223 |
|
1474 |
29 Nov 11 |
pawels |
224 |
private List<SDRFEntry> getSDRFEntriesForScan(Scan scan, int arrayNum, DbControl dc) { |
1474 |
29 Nov 11 |
pawels |
225 |
|
1474 |
29 Nov 11 |
pawels |
226 |
if (scan == null) { return Arrays.asList(new SDRFEntry()); } |
1474 |
29 Nov 11 |
pawels |
227 |
|
1474 |
29 Nov 11 |
pawels |
228 |
List<SDRFEntry> sdrfEs = |
1474 |
29 Nov 11 |
pawels |
229 |
getSDRFEntriesForHybridization(scan.getHybridization(), arrayNum, dc); |
1474 |
29 Nov 11 |
pawels |
230 |
|
1474 |
29 Nov 11 |
pawels |
231 |
for (SDRFEntry se : sdrfEs) { |
1474 |
29 Nov 11 |
pawels |
232 |
|
1474 |
29 Nov 11 |
pawels |
233 |
ItemInfo item = new ItemInfo(ItemInfo.TYPE.SCAN, scan.getName()); |
1474 |
29 Nov 11 |
pawels |
234 |
fillCharacteristicsForItem(item, scan, dc); |
1474 |
29 Nov 11 |
pawels |
235 |
ProtocolInfo pInfo = createProtocolInfo(scan.getProtocol(), ProtocolInfo.TYPE.SCANNING, dc); |
1474 |
29 Nov 11 |
pawels |
236 |
item.setProtocol(pInfo); |
1474 |
29 Nov 11 |
pawels |
237 |
se.addItem(item); |
1474 |
29 Nov 11 |
pawels |
238 |
} |
1474 |
29 Nov 11 |
pawels |
239 |
|
1474 |
29 Nov 11 |
pawels |
240 |
return sdrfEs; |
1474 |
29 Nov 11 |
pawels |
241 |
} |
1474 |
29 Nov 11 |
pawels |
242 |
|
1474 |
29 Nov 11 |
pawels |
243 |
|
1474 |
29 Nov 11 |
pawels |
244 |
private List<SDRFEntry> getSDRFEntriesForHybridization(Hybridization hyb, int arrayNum, DbControl dc) { |
1474 |
29 Nov 11 |
pawels |
245 |
|
1474 |
29 Nov 11 |
pawels |
246 |
if (hyb == null) { return Arrays.asList(new SDRFEntry()); } |
1474 |
29 Nov 11 |
pawels |
247 |
|
1474 |
29 Nov 11 |
pawels |
248 |
ItemQuery<LabeledExtract> q = hyb.getLabeledExtracts(arrayNum); |
1474 |
29 Nov 11 |
pawels |
249 |
q.include(Include.ALL); |
1474 |
29 Nov 11 |
pawels |
250 |
ItemResultList<LabeledExtract> lextracts = q.list(dc); |
1474 |
29 Nov 11 |
pawels |
251 |
|
1474 |
29 Nov 11 |
pawels |
252 |
List<SDRFEntry> sdrfEs = new ArrayList<SDRFEntry>(); |
1474 |
29 Nov 11 |
pawels |
253 |
for (LabeledExtract le : lextracts) { |
1474 |
29 Nov 11 |
pawels |
//List<SDRFEntry> ses = getSDRFEntriesForLabeledExtract(le, dc); |
1474 |
29 Nov 11 |
pawels |
255 |
List<SDRFEntry> ses = getSDRFEntriesForMeasuredBioMaterial(le, dc); |
1474 |
29 Nov 11 |
pawels |
256 |
for (SDRFEntry se : ses) { |
1474 |
29 Nov 11 |
pawels |
257 |
ItemInfo item = new ItemInfo(ItemInfo.TYPE.HYBRIDIZATION, hyb.getName()); |
1474 |
29 Nov 11 |
pawels |
258 |
fillCharacteristicsForItem(item, hyb, dc); |
1474 |
29 Nov 11 |
pawels |
259 |
ProtocolInfo pInfo = createProtocolInfo(hyb.getProtocol(), ProtocolInfo.TYPE.HYBRIDIZATION, dc); |
1474 |
29 Nov 11 |
pawels |
260 |
item.setProtocol(pInfo); |
1474 |
29 Nov 11 |
pawels |
261 |
se.addItem(item); |
1474 |
29 Nov 11 |
pawels |
262 |
} |
1474 |
29 Nov 11 |
pawels |
263 |
sdrfEs.addAll(ses); |
1474 |
29 Nov 11 |
pawels |
264 |
} |
1474 |
29 Nov 11 |
pawels |
265 |
|
1474 |
29 Nov 11 |
pawels |
266 |
return sdrfEs; |
1474 |
29 Nov 11 |
pawels |
267 |
} |
1474 |
29 Nov 11 |
pawels |
268 |
|
1474 |
29 Nov 11 |
pawels |
269 |
|
1474 |
29 Nov 11 |
pawels |
270 |
private List<SDRFEntry> getSDRFEntriesForMeasuredBioMaterial(MeasuredBioMaterial mbm, DbControl dc) { |
1474 |
29 Nov 11 |
pawels |
271 |
|
1474 |
29 Nov 11 |
pawels |
272 |
if (mbm == null) { return Arrays.asList(new SDRFEntry()); } |
1474 |
29 Nov 11 |
pawels |
273 |
|
1474 |
29 Nov 11 |
pawels |
// set correct item and protocol types |
1474 |
29 Nov 11 |
pawels |
275 |
ItemInfo.TYPE iType = null; |
1474 |
29 Nov 11 |
pawels |
276 |
ProtocolInfo.TYPE pType = null; |
1474 |
29 Nov 11 |
pawels |
277 |
if (mbm instanceof LabeledExtract) { |
1474 |
29 Nov 11 |
pawels |
278 |
iType = mbm.isPooled() ? ItemInfo.TYPE.POOLED_LABELED_EXTRACT : ItemInfo.TYPE.LABELED_EXTRACT; |
1474 |
29 Nov 11 |
pawels |
279 |
pType = mbm.isPooled() ? ProtocolInfo.TYPE.POOLING : ProtocolInfo.TYPE.LABELING; |
1474 |
29 Nov 11 |
pawels |
280 |
} else if (mbm instanceof Extract) { |
1474 |
29 Nov 11 |
pawels |
281 |
iType = mbm.isPooled() ? ItemInfo.TYPE.POOLED_EXTRACT : ItemInfo.TYPE.EXTRACT; |
1474 |
29 Nov 11 |
pawels |
282 |
pType = mbm.isPooled() ? ProtocolInfo.TYPE.POOLING : ProtocolInfo.TYPE.EXTRACTION; |
1474 |
29 Nov 11 |
pawels |
283 |
} else { |
1474 |
29 Nov 11 |
pawels |
284 |
iType = mbm.isPooled() ? ItemInfo.TYPE.POOLED_SAMPLE : ItemInfo.TYPE.SAMPLE; |
1474 |
29 Nov 11 |
pawels |
285 |
pType = mbm.isPooled() ? ProtocolInfo.TYPE.POOLING : ProtocolInfo.TYPE.SAMPLING; |
1474 |
29 Nov 11 |
pawels |
286 |
} |
1474 |
29 Nov 11 |
pawels |
287 |
|
1474 |
29 Nov 11 |
pawels |
288 |
List<SDRFEntry> sdrfEs = new ArrayList<SDRFEntry>(); |
1474 |
29 Nov 11 |
pawels |
289 |
if (mbm.isPooled()) { |
1474 |
29 Nov 11 |
pawels |
290 |
BioMaterialEvent event = mbm.getCreationEvent(); |
1474 |
29 Nov 11 |
pawels |
291 |
ItemQuery<MeasuredBioMaterial> parentsQ = (ItemQuery<MeasuredBioMaterial>) event.getSources(); |
1474 |
29 Nov 11 |
pawels |
292 |
parentsQ.include(Include.ALL); |
1474 |
29 Nov 11 |
pawels |
293 |
List<MeasuredBioMaterial> parents = parentsQ.list(dc); |
1474 |
29 Nov 11 |
pawels |
294 |
for (MeasuredBioMaterial m : parents) { |
1474 |
29 Nov 11 |
pawels |
295 |
sdrfEs.addAll(getSDRFEntriesForMeasuredBioMaterial(m, dc)); |
1474 |
29 Nov 11 |
pawels |
296 |
} |
1474 |
29 Nov 11 |
pawels |
297 |
} else { |
1474 |
29 Nov 11 |
pawels |
298 |
if (mbm instanceof LabeledExtract) { |
1474 |
29 Nov 11 |
pawels |
299 |
sdrfEs = getSDRFEntriesForMeasuredBioMaterial(((LabeledExtract)mbm).getExtract(), dc); |
1474 |
29 Nov 11 |
pawels |
300 |
} else if (mbm instanceof Extract) { |
1474 |
29 Nov 11 |
pawels |
301 |
sdrfEs = getSDRFEntriesForMeasuredBioMaterial(((Extract)mbm).getSample(), dc); |
1474 |
29 Nov 11 |
pawels |
302 |
} else { |
1474 |
29 Nov 11 |
pawels |
303 |
sdrfEs = getSDRFEntriesForBioSource(((Sample)mbm).getBioSource(), dc); |
1474 |
29 Nov 11 |
pawels |
304 |
} |
1474 |
29 Nov 11 |
pawels |
305 |
} |
1474 |
29 Nov 11 |
pawels |
306 |
|
1474 |
29 Nov 11 |
pawels |
// add empty entry in case the item was pooled but had no parents |
1474 |
29 Nov 11 |
pawels |
308 |
if (sdrfEs.isEmpty()) { sdrfEs.add(new SDRFEntry()); } |
1474 |
29 Nov 11 |
pawels |
309 |
|
1474 |
29 Nov 11 |
pawels |
310 |
for (SDRFEntry se : sdrfEs) { |
1474 |
29 Nov 11 |
pawels |
311 |
|
1474 |
29 Nov 11 |
pawels |
312 |
ItemInfo item = new ItemInfo(iType, mbm.getName()); |
1474 |
29 Nov 11 |
pawels |
313 |
item.setMaterialType(getValueForAnnotationType(mbm, materialTypeAT, dc)); |
1474 |
29 Nov 11 |
pawels |
314 |
fillCharacteristicsForItem(item, mbm, dc); |
1474 |
29 Nov 11 |
pawels |
315 |
ProtocolInfo pInfo = createProtocolInfo(mbm.getProtocol(), pType, dc); |
1474 |
29 Nov 11 |
pawels |
316 |
item.setProtocol(pInfo); |
1474 |
29 Nov 11 |
pawels |
317 |
se.addItem(item); |
1474 |
29 Nov 11 |
pawels |
318 |
|
1474 |
29 Nov 11 |
pawels |
// set label if it is a LabeledExtract |
1474 |
29 Nov 11 |
pawels |
320 |
if (mbm instanceof LabeledExtract) { |
1474 |
29 Nov 11 |
pawels |
321 |
LabeledExtract le = (LabeledExtract)mbm; |
1474 |
29 Nov 11 |
pawels |
322 |
if (le.getLabel() != null) { |
1474 |
29 Nov 11 |
pawels |
323 |
se.setLabel(le.getLabel().getName()); |
1474 |
29 Nov 11 |
pawels |
324 |
} |
1474 |
29 Nov 11 |
pawels |
325 |
} |
1474 |
29 Nov 11 |
pawels |
326 |
|
1474 |
29 Nov 11 |
pawels |
327 |
} |
1474 |
29 Nov 11 |
pawels |
328 |
|
1474 |
29 Nov 11 |
pawels |
329 |
return sdrfEs; |
1474 |
29 Nov 11 |
pawels |
330 |
} |
1474 |
29 Nov 11 |
pawels |
331 |
|
1474 |
29 Nov 11 |
pawels |
332 |
/* |
1474 |
29 Nov 11 |
pawels |
private List<SDRFEntry> getSDRFEntriesForLabeledExtract(LabeledExtract lextract, DbControl dc) { |
1474 |
29 Nov 11 |
pawels |
334 |
|
1474 |
29 Nov 11 |
pawels |
if (lextract == null) { return Arrays.asList(new SDRFEntry()); } |
1474 |
29 Nov 11 |
pawels |
336 |
|
1474 |
29 Nov 11 |
pawels |
// initiate sdrfEs in case the item is pooled but has no parents |
1474 |
29 Nov 11 |
pawels |
List<SDRFEntry> sdrfEs = Arrays.asList(new SDRFEntry()); |
1474 |
29 Nov 11 |
pawels |
if (lextract.isPooled()) { |
1474 |
29 Nov 11 |
pawels |
BioMaterialEvent event = lextract.getCreationEvent(); |
1474 |
29 Nov 11 |
pawels |
ItemQuery<LabeledExtract> parentsQ = (ItemQuery<LabeledExtract>)event.getSources(); |
1474 |
29 Nov 11 |
pawels |
parentsQ.include(Include.ALL); |
1474 |
29 Nov 11 |
pawels |
List<LabeledExtract> parents = parentsQ.list(dc); |
1474 |
29 Nov 11 |
pawels |
for (LabeledExtract le : parents) { |
1474 |
29 Nov 11 |
pawels |
sdrfEs = getSDRFEntriesForLabeledExtract(le, dc); |
1474 |
29 Nov 11 |
pawels |
346 |
} |
1474 |
29 Nov 11 |
pawels |
} else { |
1474 |
29 Nov 11 |
pawels |
sdrfEs = getSDRFEntriesForExtract(lextract.getExtract(), dc); |
1474 |
29 Nov 11 |
pawels |
349 |
} |
1474 |
29 Nov 11 |
pawels |
350 |
|
1474 |
29 Nov 11 |
pawels |
for (SDRFEntry se : sdrfEs) { |
1474 |
29 Nov 11 |
pawels |
352 |
|
1474 |
29 Nov 11 |
pawels |
ItemInfo.TYPE leType = lextract.isPooled() ? ItemInfo.TYPE.POOLED_LABELED_EXTRACT : ItemInfo.TYPE.LABELED_EXTRACT; |
1474 |
29 Nov 11 |
pawels |
ItemInfo item = new ItemInfo(leType, lextract.getName()); |
1474 |
29 Nov 11 |
pawels |
item.setMaterialType(getValueForAnnotationType(lextract, materialTypeAT, dc)); |
1474 |
29 Nov 11 |
pawels |
fillCharacteristicsForItem(item, lextract, dc); |
1474 |
29 Nov 11 |
pawels |
se.addItem(item); |
1474 |
29 Nov 11 |
pawels |
358 |
|
1474 |
29 Nov 11 |
pawels |
if (lextract.getLabel() != null) { |
1474 |
29 Nov 11 |
pawels |
se.setLabel(lextract.getLabel().getName()); |
1474 |
29 Nov 11 |
pawels |
361 |
} |
1474 |
29 Nov 11 |
pawels |
362 |
|
1474 |
29 Nov 11 |
pawels |
ProtocolInfo.TYPE pType = lextract.isPooled() ? ProtocolInfo.TYPE.POOLING : ProtocolInfo.TYPE.LABELING; |
1474 |
29 Nov 11 |
pawels |
ProtocolInfo pInfo = createProtocolInfo(lextract.getProtocol(), pType, dc); |
1474 |
29 Nov 11 |
pawels |
se.addProtocol(pInfo); |
1474 |
29 Nov 11 |
pawels |
366 |
} |
1474 |
29 Nov 11 |
pawels |
367 |
|
1474 |
29 Nov 11 |
pawels |
return sdrfEs; |
1474 |
29 Nov 11 |
pawels |
369 |
} |
1474 |
29 Nov 11 |
pawels |
370 |
|
1474 |
29 Nov 11 |
pawels |
371 |
|
1474 |
29 Nov 11 |
pawels |
private List<SDRFEntry> getSDRFEntriesForExtract(Extract extract, DbControl dc) { |
1474 |
29 Nov 11 |
pawels |
373 |
|
1474 |
29 Nov 11 |
pawels |
if (extract == null) { return Arrays.asList(new SDRFEntry()); } |
1474 |
29 Nov 11 |
pawels |
375 |
|
1474 |
29 Nov 11 |
pawels |
// initiate sdrfEs in case the item is pooled but has no parents |
1474 |
29 Nov 11 |
pawels |
List<SDRFEntry> sdrfEs = Arrays.asList(new SDRFEntry()); |
1474 |
29 Nov 11 |
pawels |
if (extract.isPooled()) { |
1474 |
29 Nov 11 |
pawels |
BioMaterialEvent event = extract.getCreationEvent(); |
1474 |
29 Nov 11 |
pawels |
ItemQuery<Extract> parentsQ = (ItemQuery<Extract>)event.getSources(); |
1474 |
29 Nov 11 |
pawels |
parentsQ.include(Include.ALL); |
1474 |
29 Nov 11 |
pawels |
List<Extract> parents = parentsQ.list(dc); |
1474 |
29 Nov 11 |
pawels |
for (Extract e : parents) { |
1474 |
29 Nov 11 |
pawels |
sdrfEs = getSDRFEntriesForExtract(e, dc); |
1474 |
29 Nov 11 |
pawels |
385 |
} |
1474 |
29 Nov 11 |
pawels |
} else { |
1474 |
29 Nov 11 |
pawels |
sdrfEs = getSDRFEntriesForSample(extract.getSample(), dc); |
1474 |
29 Nov 11 |
pawels |
388 |
} |
1474 |
29 Nov 11 |
pawels |
389 |
|
1474 |
29 Nov 11 |
pawels |
for (SDRFEntry se : sdrfEs) { |
1474 |
29 Nov 11 |
pawels |
391 |
|
1474 |
29 Nov 11 |
pawels |
ItemInfo.TYPE eType = extract.isPooled() ? ItemInfo.TYPE.POOLED_EXTRACT : ItemInfo.TYPE.EXTRACT; |
1474 |
29 Nov 11 |
pawels |
ItemInfo item = new ItemInfo(eType, extract.getName()); |
1474 |
29 Nov 11 |
pawels |
item.setMaterialType(getValueForAnnotationType(extract, materialTypeAT, dc)); |
1474 |
29 Nov 11 |
pawels |
fillCharacteristicsForItem(item, extract, dc); |
1474 |
29 Nov 11 |
pawels |
se.addItem(item); |
1474 |
29 Nov 11 |
pawels |
397 |
|
1474 |
29 Nov 11 |
pawels |
ProtocolInfo.TYPE pType = extract.isPooled() ? ProtocolInfo.TYPE.POOLING : ProtocolInfo.TYPE.EXTRACTION; |
1474 |
29 Nov 11 |
pawels |
ProtocolInfo pInfo = createProtocolInfo(extract.getProtocol(), pType, dc); |
1474 |
29 Nov 11 |
pawels |
se.addProtocol(pInfo); |
1474 |
29 Nov 11 |
pawels |
401 |
} |
1474 |
29 Nov 11 |
pawels |
402 |
|
1474 |
29 Nov 11 |
pawels |
return sdrfEs; |
1474 |
29 Nov 11 |
pawels |
404 |
} |
1474 |
29 Nov 11 |
pawels |
405 |
|
1474 |
29 Nov 11 |
pawels |
406 |
|
1474 |
29 Nov 11 |
pawels |
private List<SDRFEntry> getSDRFEntriesForSample(Sample sample, DbControl dc) { |
1474 |
29 Nov 11 |
pawels |
408 |
|
1474 |
29 Nov 11 |
pawels |
if (sample == null) { return Arrays.asList(new SDRFEntry()); } |
1474 |
29 Nov 11 |
pawels |
410 |
|
1474 |
29 Nov 11 |
pawels |
// initiate sdrfEs in case the item is pooled but has no parents |
1474 |
29 Nov 11 |
pawels |
List<SDRFEntry> sdrfEs = Arrays.asList(new SDRFEntry()); |
1474 |
29 Nov 11 |
pawels |
if (sample.isPooled()) { |
1474 |
29 Nov 11 |
pawels |
BioMaterialEvent event = sample.getCreationEvent(); |
1474 |
29 Nov 11 |
pawels |
ItemQuery<Sample> parentsQ = (ItemQuery<Sample>)event.getSources(); |
1474 |
29 Nov 11 |
pawels |
parentsQ.include(Include.ALL); |
1474 |
29 Nov 11 |
pawels |
List<Sample> parents = parentsQ.list(dc); |
1474 |
29 Nov 11 |
pawels |
for (Sample s : parents) { |
1474 |
29 Nov 11 |
pawels |
sdrfEs = getSDRFEntriesForSample(s, dc); |
1474 |
29 Nov 11 |
pawels |
420 |
} |
1474 |
29 Nov 11 |
pawels |
} else { |
1474 |
29 Nov 11 |
pawels |
sdrfEs = getSDRFEntriesForBioSource(sample.getBioSource(), dc); |
1474 |
29 Nov 11 |
pawels |
423 |
} |
1474 |
29 Nov 11 |
pawels |
424 |
|
1474 |
29 Nov 11 |
pawels |
for (SDRFEntry se : sdrfEs) { |
1474 |
29 Nov 11 |
pawels |
426 |
|
1474 |
29 Nov 11 |
pawels |
ItemInfo.TYPE sType = sample.isPooled() ? ItemInfo.TYPE.POOLED_SAMPLE : ItemInfo.TYPE.SAMPLE; |
1474 |
29 Nov 11 |
pawels |
ItemInfo item = new ItemInfo(sType, sample.getName()); |
1474 |
29 Nov 11 |
pawels |
item.setMaterialType(getValueForAnnotationType(sample, materialTypeAT, dc)); |
1474 |
29 Nov 11 |
pawels |
fillCharacteristicsForItem(item, sample, dc); |
1474 |
29 Nov 11 |
pawels |
se.addItem(item); |
1474 |
29 Nov 11 |
pawels |
432 |
|
1474 |
29 Nov 11 |
pawels |
ProtocolInfo.TYPE pType = sample.isPooled() ? ProtocolInfo.TYPE.POOLING : ProtocolInfo.TYPE.SAMPLING; |
1474 |
29 Nov 11 |
pawels |
ProtocolInfo pInfo = createProtocolInfo(sample.getProtocol(), pType, dc); |
1474 |
29 Nov 11 |
pawels |
se.addProtocol(pInfo); |
1474 |
29 Nov 11 |
pawels |
436 |
} |
1474 |
29 Nov 11 |
pawels |
437 |
|
1474 |
29 Nov 11 |
pawels |
return sdrfEs; |
1474 |
29 Nov 11 |
pawels |
439 |
} |
1474 |
29 Nov 11 |
pawels |
440 |
|
1474 |
29 Nov 11 |
pawels |
441 |
*/ |
1474 |
29 Nov 11 |
pawels |
442 |
private List<SDRFEntry> getSDRFEntriesForBioSource(BioSource bioSource, DbControl dc) { |
1474 |
29 Nov 11 |
pawels |
443 |
|
1474 |
29 Nov 11 |
pawels |
444 |
SDRFEntry sdrfE = new SDRFEntry(); |
1474 |
29 Nov 11 |
pawels |
445 |
if (bioSource != null) { |
1474 |
29 Nov 11 |
pawels |
446 |
ItemInfo item = new ItemInfo(ItemInfo.TYPE.SOURCE, bioSource.getName()); |
1474 |
29 Nov 11 |
pawels |
447 |
item.setMaterialType(getValueForAnnotationType(bioSource, materialTypeAT, dc)); |
1474 |
29 Nov 11 |
pawels |
448 |
fillCharacteristicsForItem(item, bioSource, dc); |
1474 |
29 Nov 11 |
pawels |
449 |
sdrfE.addItem(item); |
1474 |
29 Nov 11 |
pawels |
450 |
} |
1474 |
29 Nov 11 |
pawels |
451 |
return Arrays.asList(sdrfE); |
1474 |
29 Nov 11 |
pawels |
452 |
} |
1474 |
29 Nov 11 |
pawels |
453 |
|
1474 |
29 Nov 11 |
pawels |
454 |
private ProtocolInfo createProtocolInfo(Protocol protocol, TYPE protocolType, DbControl dc) { |
1474 |
29 Nov 11 |
pawels |
455 |
|
1474 |
29 Nov 11 |
pawels |
456 |
if (protocol == null) { |
1474 |
29 Nov 11 |
pawels |
457 |
return new ProtocolInfo(protocolType, null, null); |
1474 |
29 Nov 11 |
pawels |
458 |
} |
1474 |
29 Nov 11 |
pawels |
459 |
|
1474 |
29 Nov 11 |
pawels |
460 |
String pRef = getValueForAnnotationType(protocol, aeRefAT, dc); |
1474 |
29 Nov 11 |
pawels |
461 |
if (pRef == null) { |
1474 |
29 Nov 11 |
pawels |
462 |
pRef = "BASE:"+protocol.getName(); |
1474 |
29 Nov 11 |
pawels |
463 |
} |
1474 |
29 Nov 11 |
pawels |
464 |
|
1474 |
29 Nov 11 |
pawels |
465 |
ProtocolInfo pInfo = new ProtocolInfo(protocolType, pRef, protocol.getDescription()); |
1474 |
29 Nov 11 |
pawels |
466 |
|
1474 |
29 Nov 11 |
pawels |
467 |
if (protocol.isAnnotated()) { |
1474 |
29 Nov 11 |
pawels |
468 |
List<AnnotationSnapshot> annotations = snapMan.findAnnotations(dc, protocol, null, false); |
1474 |
29 Nov 11 |
pawels |
469 |
for (AnnotationSnapshot a : annotations) { |
1474 |
29 Nov 11 |
pawels |
470 |
AnnotationType at = a.getAnnotationType(dc); |
1474 |
29 Nov 11 |
pawels |
471 |
if (!at.isProtocolParameter()) { |
1474 |
29 Nov 11 |
pawels |
472 |
continue; |
1474 |
29 Nov 11 |
pawels |
473 |
} |
1474 |
29 Nov 11 |
pawels |
474 |
String paramName = at.getName(); |
1474 |
29 Nov 11 |
pawels |
475 |
String paramValue = getValueForAnnotation(a); |
1474 |
29 Nov 11 |
pawels |
476 |
pInfo.addParameter(paramName, paramValue); |
1474 |
29 Nov 11 |
pawels |
477 |
} |
1474 |
29 Nov 11 |
pawels |
478 |
} |
1474 |
29 Nov 11 |
pawels |
479 |
|
1474 |
29 Nov 11 |
pawels |
480 |
return pInfo; |
1474 |
29 Nov 11 |
pawels |
481 |
|
1474 |
29 Nov 11 |
pawels |
482 |
} |
1474 |
29 Nov 11 |
pawels |
483 |
|
1474 |
29 Nov 11 |
pawels |
484 |
|
1474 |
29 Nov 11 |
pawels |
485 |
private void fillCharacteristicsForItem(ItemInfo item, Annotatable annotatable, DbControl dc) { |
1474 |
29 Nov 11 |
pawels |
486 |
|
1474 |
29 Nov 11 |
pawels |
487 |
if (!annotatable.isAnnotated()) { return; } |
1474 |
29 Nov 11 |
pawels |
488 |
List<AnnotationSnapshot> annotations = snapMan.findAnnotations(dc, annotatable, null, false); |
1474 |
29 Nov 11 |
pawels |
489 |
|
1474 |
29 Nov 11 |
pawels |
490 |
for (AnnotationSnapshot a : annotations) { |
1474 |
29 Nov 11 |
pawels |
491 |
AnnotationType at = a.getAnnotationType(dc); |
1474 |
29 Nov 11 |
pawels |
492 |
if (at.equals(materialTypeAT)) { continue; } |
1474 |
29 Nov 11 |
pawels |
493 |
|
1474 |
29 Nov 11 |
pawels |
494 |
String chName = at.getName(); |
1474 |
29 Nov 11 |
pawels |
495 |
String chValue = getValueForAnnotation(a); |
1474 |
29 Nov 11 |
pawels |
496 |
|
1474 |
29 Nov 11 |
pawels |
497 |
// |
1474 |
29 Nov 11 |
pawels |
// where should this information be?? |
1474 |
29 Nov 11 |
pawels |
499 |
// |
1474 |
29 Nov 11 |
pawels |
500 |
String chSourceRef = null; |
1474 |
29 Nov 11 |
pawels |
501 |
item.addCharacteristic(chName, chValue, chSourceRef); |
1474 |
29 Nov 11 |
pawels |
502 |
} |
1474 |
29 Nov 11 |
pawels |
503 |
|
1474 |
29 Nov 11 |
pawels |
504 |
} |
1474 |
29 Nov 11 |
pawels |
505 |
|
1474 |
29 Nov 11 |
pawels |
506 |
/** |
1474 |
29 Nov 11 |
pawels |
* Returns a value of the annotation on the annotatable. This method does not support multiplicity of annotations of one type, |
1474 |
29 Nov 11 |
pawels |
* and will only return value(s) only of the first one. NUll is returned if annotatable is not annotated with an annotation of type at. |
1474 |
29 Nov 11 |
pawels |
* @param annotatable - annotated item that the annotation should be taken from |
1474 |
29 Nov 11 |
pawels |
* @param at - type of the annotation |
1474 |
29 Nov 11 |
pawels |
* @param dc |
1474 |
29 Nov 11 |
pawels |
* @return value of the at annotation on annotatable, or null if not annotated |
1474 |
29 Nov 11 |
pawels |
513 |
*/ |
1474 |
29 Nov 11 |
pawels |
514 |
private String getValueForAnnotationType(Annotatable annotatable, AnnotationType at, DbControl dc) { |
1474 |
29 Nov 11 |
pawels |
515 |
if (annotatable == null || !annotatable.isAnnotated() || at == null) { |
1474 |
29 Nov 11 |
pawels |
516 |
return null; |
1474 |
29 Nov 11 |
pawels |
517 |
} |
1474 |
29 Nov 11 |
pawels |
518 |
|
1474 |
29 Nov 11 |
pawels |
519 |
AnnotationTypeFilter filter = new AnnotationTypeFilter(at); |
1474 |
29 Nov 11 |
pawels |
520 |
List<AnnotationSnapshot> as = snapMan.findAnnotations(dc, annotatable, filter, false); |
1474 |
29 Nov 11 |
pawels |
521 |
if (!as.isEmpty()) { |
1474 |
29 Nov 11 |
pawels |
522 |
return getValueForAnnotation(as.get(0)); |
1474 |
29 Nov 11 |
pawels |
523 |
} |
1474 |
29 Nov 11 |
pawels |
524 |
return null; |
1474 |
29 Nov 11 |
pawels |
525 |
} |
1474 |
29 Nov 11 |
pawels |
526 |
|
1474 |
29 Nov 11 |
pawels |
527 |
private String getValueForAnnotation(AnnotationSnapshot a) { |
1474 |
29 Nov 11 |
pawels |
528 |
// |
1474 |
29 Nov 11 |
pawels |
// possible conversion problems ? |
1474 |
29 Nov 11 |
pawels |
530 |
// |
1474 |
29 Nov 11 |
pawels |
531 |
List<Object> values = (List<Object>)a.getValues(); |
1474 |
29 Nov 11 |
pawels |
532 |
if (values == null) { return null; } |
1474 |
29 Nov 11 |
pawels |
533 |
|
1474 |
29 Nov 11 |
pawels |
534 |
String aValue = ""; |
1474 |
29 Nov 11 |
pawels |
535 |
for (Object v : values) { |
1474 |
29 Nov 11 |
pawels |
536 |
aValue += v.toString()+";"; |
1474 |
29 Nov 11 |
pawels |
537 |
} |
1474 |
29 Nov 11 |
pawels |
538 |
|
1474 |
29 Nov 11 |
pawels |
539 |
return Utils.removeTrailingString(aValue, ";"); |
1474 |
29 Nov 11 |
pawels |
540 |
} |
1474 |
29 Nov 11 |
pawels |
541 |
|
1474 |
29 Nov 11 |
pawels |
542 |
} |