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.io.IOException; |
1474 |
29 Nov 11 |
pawels |
14 |
import java.io.InputStream; |
1474 |
29 Nov 11 |
pawels |
15 |
import java.io.OutputStream; |
1474 |
29 Nov 11 |
pawels |
16 |
import java.util.ArrayList; |
1474 |
29 Nov 11 |
pawels |
17 |
import java.util.Arrays; |
1474 |
29 Nov 11 |
pawels |
18 |
import java.util.Calendar; |
1474 |
29 Nov 11 |
pawels |
19 |
import java.util.Collections; |
1474 |
29 Nov 11 |
pawels |
20 |
import java.util.Date; |
1474 |
29 Nov 11 |
pawels |
21 |
import java.util.HashSet; |
1474 |
29 Nov 11 |
pawels |
22 |
import java.util.List; |
1474 |
29 Nov 11 |
pawels |
23 |
import java.util.Set; |
1474 |
29 Nov 11 |
pawels |
24 |
|
1474 |
29 Nov 11 |
pawels |
25 |
import net.sf.basedb.core.AnnotationType; |
1474 |
29 Nov 11 |
pawels |
26 |
import net.sf.basedb.core.Application; |
1474 |
29 Nov 11 |
pawels |
27 |
import net.sf.basedb.core.BaseException; |
1474 |
29 Nov 11 |
pawels |
28 |
import net.sf.basedb.core.BooleanParameterType; |
1474 |
29 Nov 11 |
pawels |
29 |
import net.sf.basedb.core.DataFileType; |
1474 |
29 Nov 11 |
pawels |
30 |
import net.sf.basedb.core.DateParameterType; |
1474 |
29 Nov 11 |
pawels |
31 |
import net.sf.basedb.core.DbControl; |
1474 |
29 Nov 11 |
pawels |
32 |
import net.sf.basedb.core.Experiment; |
1474 |
29 Nov 11 |
pawels |
33 |
import net.sf.basedb.core.File; |
1474 |
29 Nov 11 |
pawels |
34 |
import net.sf.basedb.core.Include; |
1474 |
29 Nov 11 |
pawels |
35 |
import net.sf.basedb.core.Item; |
1474 |
29 Nov 11 |
pawels |
36 |
import net.sf.basedb.core.ItemParameterType; |
1474 |
29 Nov 11 |
pawels |
37 |
import net.sf.basedb.core.ItemQuery; |
1474 |
29 Nov 11 |
pawels |
38 |
import net.sf.basedb.core.ItemResultList; |
1474 |
29 Nov 11 |
pawels |
39 |
import net.sf.basedb.core.Path; |
1474 |
29 Nov 11 |
pawels |
40 |
import net.sf.basedb.core.PathParameterType; |
1474 |
29 Nov 11 |
pawels |
41 |
import net.sf.basedb.core.Permission; |
1474 |
29 Nov 11 |
pawels |
42 |
import net.sf.basedb.core.PermissionDeniedException; |
1474 |
29 Nov 11 |
pawels |
43 |
import net.sf.basedb.core.Platform; |
1474 |
29 Nov 11 |
pawels |
44 |
import net.sf.basedb.core.PlatformVariant; |
1474 |
29 Nov 11 |
pawels |
45 |
import net.sf.basedb.core.PluginParameter; |
1474 |
29 Nov 11 |
pawels |
46 |
import net.sf.basedb.core.ProgressReporter; |
1474 |
29 Nov 11 |
pawels |
47 |
import net.sf.basedb.core.RawBioAssay; |
1474 |
29 Nov 11 |
pawels |
48 |
import net.sf.basedb.core.RequestInformation; |
1474 |
29 Nov 11 |
pawels |
49 |
import net.sf.basedb.core.StringParameterType; |
1474 |
29 Nov 11 |
pawels |
50 |
import net.sf.basedb.core.User; |
1474 |
29 Nov 11 |
pawels |
51 |
import net.sf.basedb.core.plugin.About; |
1474 |
29 Nov 11 |
pawels |
52 |
import net.sf.basedb.core.plugin.AboutImpl; |
1474 |
29 Nov 11 |
pawels |
53 |
import net.sf.basedb.core.plugin.AbstractPlugin; |
1474 |
29 Nov 11 |
pawels |
54 |
import net.sf.basedb.core.plugin.GuiContext; |
1474 |
29 Nov 11 |
pawels |
55 |
import net.sf.basedb.core.plugin.InteractivePlugin; |
1474 |
29 Nov 11 |
pawels |
56 |
import net.sf.basedb.core.plugin.Plugin; |
1474 |
29 Nov 11 |
pawels |
57 |
import net.sf.basedb.core.plugin.Request; |
1474 |
29 Nov 11 |
pawels |
58 |
import net.sf.basedb.core.plugin.Response; |
1474 |
29 Nov 11 |
pawels |
59 |
import net.sf.basedb.core.query.Hql; |
1474 |
29 Nov 11 |
pawels |
60 |
import net.sf.basedb.core.query.Orders; |
1474 |
29 Nov 11 |
pawels |
61 |
import net.sf.basedb.util.zip.ZipFilePacker; |
1474 |
29 Nov 11 |
pawels |
62 |
|
1474 |
29 Nov 11 |
pawels |
63 |
/** |
1474 |
29 Nov 11 |
pawels |
* MageTab Exporter plugin |
1474 |
29 Nov 11 |
pawels |
65 |
*/ |
1474 |
29 Nov 11 |
pawels |
66 |
public class MageTabExporterPlugin extends AbstractPlugin implements InteractivePlugin { |
1474 |
29 Nov 11 |
pawels |
67 |
|
1474 |
29 Nov 11 |
pawels |
68 |
public About getAbout() { |
1474 |
29 Nov 11 |
pawels |
69 |
return new AboutImpl ( |
1474 |
29 Nov 11 |
pawels |
70 |
"MageTab exporter", |
1474 |
29 Nov 11 |
pawels |
71 |
"The plugin exports an experiment in the Mage-Tab format. The Mage-Tab format specification " + |
1474 |
29 Nov 11 |
pawels |
72 |
"is available at http://www.mged.org/mage-tab/spec1.0.html", |
1474 |
29 Nov 11 |
pawels |
73 |
"1.0", |
1474 |
29 Nov 11 |
pawels |
74 |
"2011, The Norwegian Microarray Consortium", |
1474 |
29 Nov 11 |
pawels |
75 |
null, |
1474 |
29 Nov 11 |
pawels |
76 |
"pawel.sztromwasser@cbu.uib.no", |
1474 |
29 Nov 11 |
pawels |
77 |
"http://baseplugins.thep.lu.se/" |
1474 |
29 Nov 11 |
pawels |
78 |
); |
1474 |
29 Nov 11 |
pawels |
79 |
} |
1474 |
29 Nov 11 |
pawels |
80 |
|
1474 |
29 Nov 11 |
pawels |
81 |
private static final GuiContext experimentItemGuiContext = new GuiContext(Item.EXPERIMENT, GuiContext.Type.ITEM); |
1474 |
29 Nov 11 |
pawels |
82 |
private static final Set<GuiContext> guiContexts = Collections.singleton(experimentItemGuiContext); |
1474 |
29 Nov 11 |
pawels |
83 |
|
1474 |
29 Nov 11 |
pawels |
84 |
/* |
1474 |
29 Nov 11 |
pawels |
85 |
* |
1474 |
29 Nov 11 |
pawels |
* job parameters (not configurable elsewhere than during runtime) |
1474 |
29 Nov 11 |
pawels |
87 |
* |
1474 |
29 Nov 11 |
pawels |
88 |
*/ |
1474 |
29 Nov 11 |
pawels |
89 |
private PluginParameter<String> pathParameter; |
1474 |
29 Nov 11 |
pawels |
90 |
private PluginParameter<String> archivePathParameter; |
1474 |
29 Nov 11 |
pawels |
91 |
private PluginParameter<Experiment> experimentParameter; |
1474 |
29 Nov 11 |
pawels |
92 |
private PluginParameter<Date> releaseDateParameter; |
1474 |
29 Nov 11 |
pawels |
93 |
private PluginParameter<Boolean> overWriteParameter; |
1474 |
29 Nov 11 |
pawels |
94 |
private PluginParameter<Boolean> quoteFieldsParameter; |
1474 |
29 Nov 11 |
pawels |
95 |
private final String QUOTE_FIELDS_PARAM_NAME = "quoteFields"; |
1474 |
29 Nov 11 |
pawels |
96 |
private PluginParameter<String> handleMissingContentParameter; |
1474 |
29 Nov 11 |
pawels |
97 |
private final String HANDLE_MISSING_CONTENT_PARAM_NAME = "handleMissingContent"; |
1474 |
29 Nov 11 |
pawels |
98 |
private final String FILL_MISSING_CONTENT_PARAM_VALUE = "Ignore & fill with empty"; |
1474 |
29 Nov 11 |
pawels |
99 |
private final String ERROR_MISSING_CONTENT_PARAM_VALUE = "Error"; |
1474 |
29 Nov 11 |
pawels |
100 |
private PluginParameter<String> missingContentReplParameter; |
1474 |
29 Nov 11 |
pawels |
101 |
private final String MISSING_CONTENT_REPLACEMENT_PARAM_NAME = "missingContentReplacement"; |
1474 |
29 Nov 11 |
pawels |
102 |
|
1474 |
29 Nov 11 |
pawels |
// job configuration step 2 |
1474 |
29 Nov 11 |
pawels |
104 |
private static final String COMMAND_CONFIGURE_JOB_STEP2 = "configure_job2"; |
1474 |
29 Nov 11 |
pawels |
105 |
|
1474 |
29 Nov 11 |
pawels |
// After first step of configuration, when the experiment is known, we can filter data file types |
1474 |
29 Nov 11 |
pawels |
// based on platform used in the experiment |
1474 |
29 Nov 11 |
pawels |
108 |
private Experiment chosenExperiment = null; |
1474 |
29 Nov 11 |
pawels |
109 |
|
1474 |
29 Nov 11 |
pawels |
110 |
|
1474 |
29 Nov 11 |
pawels |
111 |
/* |
1474 |
29 Nov 11 |
pawels |
112 |
* |
1474 |
29 Nov 11 |
pawels |
* plugin parameters (configured using plugin configuration or at runtime) |
1474 |
29 Nov 11 |
pawels |
114 |
* |
1474 |
29 Nov 11 |
pawels |
115 |
*/ |
1474 |
29 Nov 11 |
pawels |
116 |
private PluginParameter<PlatformVariant> platformVariantParameter; |
1474 |
29 Nov 11 |
pawels |
117 |
private PluginParameter<DataFileType> rawDataFileTypeParameter; |
1474 |
29 Nov 11 |
pawels |
118 |
private final String RAWDATA_FILE_TYPES_PARAM_NAME = "rawDataFileType"; |
1474 |
29 Nov 11 |
pawels |
119 |
private PluginParameter<AnnotationType> aeAccessionATParameter; |
1474 |
29 Nov 11 |
pawels |
120 |
private final String AE_ACCESSION_ANNOTATION_PARAM_NAME = "aeAccessionAT"; |
1474 |
29 Nov 11 |
pawels |
121 |
private PluginParameter<AnnotationType> materialTypeATParameter; |
1474 |
29 Nov 11 |
pawels |
122 |
private final String MATERIAL_TYPE_ANNOTATION_PARAM_NAME = "materialTypeAT"; |
1474 |
29 Nov 11 |
pawels |
123 |
|
1474 |
29 Nov 11 |
pawels |
// plugin configuration step 2 |
1474 |
29 Nov 11 |
pawels |
125 |
private static final String COMMAND_CONFIGURE_PLUGIN_FILE_TYPES = "configure_plugin_file_types"; |
1474 |
29 Nov 11 |
pawels |
126 |
|
1474 |
29 Nov 11 |
pawels |
// temporary variables used to save state between subsequent plugin configuration steps |
1474 |
29 Nov 11 |
pawels |
128 |
private PlatformVariant chosenVariant; |
1474 |
29 Nov 11 |
pawels |
129 |
|
1474 |
29 Nov 11 |
pawels |
130 |
|
1474 |
29 Nov 11 |
pawels |
131 |
|
1474 |
29 Nov 11 |
pawels |
132 |
private RequestInformation getConfigureJobParameters1() { |
1474 |
29 Nov 11 |
pawels |
133 |
|
1474 |
29 Nov 11 |
pawels |
134 |
pathParameter = new PluginParameter<String>( |
1474 |
29 Nov 11 |
pawels |
135 |
"exportPath", |
1474 |
29 Nov 11 |
pawels |
136 |
"Save as", |
1474 |
29 Nov 11 |
pawels |
137 |
"Please specify the file name where the plugin should store it's output", |
1474 |
29 Nov 11 |
pawels |
138 |
new PathParameterType(Path.Type.FILE, Utils.getUserDefaultDirectory(sc)+"/magetab", true)); |
1474 |
29 Nov 11 |
pawels |
139 |
|
1474 |
29 Nov 11 |
pawels |
140 |
archivePathParameter = new PluginParameter<String>( |
1474 |
29 Nov 11 |
pawels |
141 |
"archivePath", |
1474 |
29 Nov 11 |
pawels |
142 |
"Save raw data archive as", |
1474 |
29 Nov 11 |
pawels |
143 |
"Please specify the file name where the plugin should store .zip archive with raw data files", |
1474 |
29 Nov 11 |
pawels |
144 |
new PathParameterType(Path.Type.FILE, Utils.getUserDefaultDirectory(sc)+"/magetab_rawdata.zip", true)); |
1474 |
29 Nov 11 |
pawels |
145 |
|
1474 |
29 Nov 11 |
pawels |
146 |
experimentParameter = new PluginParameter<Experiment>( |
1474 |
29 Nov 11 |
pawels |
147 |
"experiment", |
1474 |
29 Nov 11 |
pawels |
148 |
"Experiment", |
1474 |
29 Nov 11 |
pawels |
149 |
"The experiment to export", |
1474 |
29 Nov 11 |
pawels |
150 |
new ItemParameterType<Experiment>(Experiment.class, null,true,1,null)); |
1474 |
29 Nov 11 |
pawels |
151 |
|
1474 |
29 Nov 11 |
pawels |
152 |
releaseDateParameter= new PluginParameter<Date>( |
1474 |
29 Nov 11 |
pawels |
153 |
"releaseDate", |
1474 |
29 Nov 11 |
pawels |
154 |
"Release Date", |
1474 |
29 Nov 11 |
pawels |
155 |
"Please specify the release date of the experiment. This is optional at this point and can be entered into the exported file", |
1474 |
29 Nov 11 |
pawels |
156 |
new DateParameterType(Calendar.getInstance().getTime(), true)); |
1474 |
29 Nov 11 |
pawels |
157 |
|
1474 |
29 Nov 11 |
pawels |
158 |
overWriteParameter = new PluginParameter<Boolean>( |
1474 |
29 Nov 11 |
pawels |
159 |
"overwrite", |
1474 |
29 Nov 11 |
pawels |
160 |
"Overwrite", |
1474 |
29 Nov 11 |
pawels |
161 |
"Overwrite existing file?", |
1474 |
29 Nov 11 |
pawels |
162 |
new BooleanParameterType(false, true)); |
1474 |
29 Nov 11 |
pawels |
163 |
|
1474 |
29 Nov 11 |
pawels |
164 |
quoteFieldsParameter = new PluginParameter<Boolean>( |
1474 |
29 Nov 11 |
pawels |
165 |
QUOTE_FIELDS_PARAM_NAME, |
1474 |
29 Nov 11 |
pawels |
166 |
"Quote fields", |
1474 |
29 Nov 11 |
pawels |
167 |
"Should the content in tab-delimited idf and sdrf files be quoted?", |
1474 |
29 Nov 11 |
pawels |
168 |
new BooleanParameterType(true, true)); |
1474 |
29 Nov 11 |
pawels |
169 |
|
1474 |
29 Nov 11 |
pawels |
170 |
handleMissingContentParameter = new PluginParameter<String>( |
1474 |
29 Nov 11 |
pawels |
171 |
HANDLE_MISSING_CONTENT_PARAM_NAME, |
1474 |
29 Nov 11 |
pawels |
172 |
"Handle missing content by", |
1474 |
29 Nov 11 |
pawels |
173 |
"Should the missing content be ignored and filled with missing content replacement?", |
1474 |
29 Nov 11 |
pawels |
174 |
new StringParameterType(25, "Ignore & fill with empty", true, 1, 25, 10, |
1474 |
29 Nov 11 |
pawels |
175 |
Arrays.asList(FILL_MISSING_CONTENT_PARAM_VALUE, ERROR_MISSING_CONTENT_PARAM_VALUE))); |
1474 |
29 Nov 11 |
pawels |
176 |
|
1474 |
29 Nov 11 |
pawels |
177 |
missingContentReplParameter = new PluginParameter<String>( |
1474 |
29 Nov 11 |
pawels |
178 |
MISSING_CONTENT_REPLACEMENT_PARAM_NAME, |
1474 |
29 Nov 11 |
pawels |
179 |
"Replace missing content with", |
1474 |
29 Nov 11 |
pawels |
180 |
"A string to replace missing content", |
1474 |
29 Nov 11 |
pawels |
181 |
new StringParameterType(10, "N/A", false)); |
1474 |
29 Nov 11 |
pawels |
182 |
|
1474 |
29 Nov 11 |
pawels |
183 |
List<PluginParameter<?>> parameters = new ArrayList<PluginParameter<?>>(); |
1474 |
29 Nov 11 |
pawels |
184 |
parameters.add(experimentParameter); |
1474 |
29 Nov 11 |
pawels |
185 |
parameters.add(pathParameter); |
1474 |
29 Nov 11 |
pawels |
186 |
parameters.add(archivePathParameter); |
1474 |
29 Nov 11 |
pawels |
187 |
parameters.add(overWriteParameter); |
1474 |
29 Nov 11 |
pawels |
188 |
parameters.add(releaseDateParameter); |
1474 |
29 Nov 11 |
pawels |
189 |
parameters.add(quoteFieldsParameter); |
1474 |
29 Nov 11 |
pawels |
190 |
parameters.add(handleMissingContentParameter); |
1474 |
29 Nov 11 |
pawels |
191 |
parameters.add(missingContentReplParameter); |
1474 |
29 Nov 11 |
pawels |
192 |
|
1474 |
29 Nov 11 |
pawels |
193 |
RequestInformation configureJob = new RequestInformation |
1474 |
29 Nov 11 |
pawels |
194 |
( |
1474 |
29 Nov 11 |
pawels |
195 |
Request.COMMAND_CONFIGURE_JOB, |
1474 |
29 Nov 11 |
pawels |
196 |
"MageTab exporter options", |
1474 |
29 Nov 11 |
pawels |
197 |
"Set the path where the export files should be saved", |
1474 |
29 Nov 11 |
pawels |
198 |
parameters |
1474 |
29 Nov 11 |
pawels |
199 |
); |
1474 |
29 Nov 11 |
pawels |
200 |
|
1474 |
29 Nov 11 |
pawels |
201 |
return configureJob; |
1474 |
29 Nov 11 |
pawels |
202 |
} |
1474 |
29 Nov 11 |
pawels |
203 |
|
1474 |
29 Nov 11 |
pawels |
204 |
|
1474 |
29 Nov 11 |
pawels |
205 |
private RequestInformation getConfigureJobParameters2() { |
1474 |
29 Nov 11 |
pawels |
206 |
|
1474 |
29 Nov 11 |
pawels |
207 |
DbControl dc = sc.newDbControl(); |
1474 |
29 Nov 11 |
pawels |
208 |
|
1474 |
29 Nov 11 |
pawels |
209 |
/* |
1474 |
29 Nov 11 |
pawels |
* Retrieve platform and variant of selected experiment to filter list of data file types |
1474 |
29 Nov 11 |
pawels |
* WARNING: experiment can have rbas using different platforms/variants |
1474 |
29 Nov 11 |
pawels |
* as long as they all have the same rawdata type. If this is the case, the plugin |
1474 |
29 Nov 11 |
pawels |
* will only find files of types connected to platform/variant of the first rba in |
1474 |
29 Nov 11 |
pawels |
* the query results. |
1474 |
29 Nov 11 |
pawels |
215 |
*/ |
1474 |
29 Nov 11 |
pawels |
216 |
Platform platform = null; |
1474 |
29 Nov 11 |
pawels |
217 |
PlatformVariant variant = null; |
1474 |
29 Nov 11 |
pawels |
218 |
if (chosenExperiment != null) { |
1474 |
29 Nov 11 |
pawels |
219 |
ItemQuery<RawBioAssay> query = chosenExperiment.getRawBioAssays(); |
1474 |
29 Nov 11 |
pawels |
220 |
query.include(Include.ALL); |
1474 |
29 Nov 11 |
pawels |
221 |
ItemResultList<RawBioAssay> rbas = query.list(dc); |
1474 |
29 Nov 11 |
pawels |
222 |
if (rbas != null && !rbas.isEmpty()) { |
1474 |
29 Nov 11 |
pawels |
223 |
platform = rbas.get(0).getPlatform(); |
1474 |
29 Nov 11 |
pawels |
224 |
variant = rbas.get(0).getVariant(); |
1474 |
29 Nov 11 |
pawels |
225 |
} |
1474 |
29 Nov 11 |
pawels |
226 |
} |
1474 |
29 Nov 11 |
pawels |
// get list of DataFileTypes relevant for this platform/variant |
1474 |
29 Nov 11 |
pawels |
228 |
ItemQuery<DataFileType> dfTypesQuery = DataFileType.getQuery(platform, variant, Item.RAWBIOASSAY, null); |
1474 |
29 Nov 11 |
pawels |
229 |
ItemResultList<DataFileType> dfTypeOptions = dfTypesQuery.list(dc); |
1474 |
29 Nov 11 |
pawels |
230 |
ItemParameterType<DataFileType> dtParameterType = new ItemParameterType<DataFileType>( |
1474 |
29 Nov 11 |
pawels |
231 |
DataFileType.class, |
1474 |
29 Nov 11 |
pawels |
232 |
dfTypeOptions.size()==1 ? dfTypeOptions.get(0) : null, |
1474 |
29 Nov 11 |
pawels |
233 |
true, 0, dfTypeOptions); |
1474 |
29 Nov 11 |
pawels |
234 |
rawDataFileTypeParameter = new PluginParameter<DataFileType>( |
1474 |
29 Nov 11 |
pawels |
235 |
RAWDATA_FILE_TYPES_PARAM_NAME, |
1474 |
29 Nov 11 |
pawels |
236 |
"Raw data file type", |
1474 |
29 Nov 11 |
pawels |
237 |
"Type of the raw data files to include in the export", |
1474 |
29 Nov 11 |
pawels |
238 |
dtParameterType); |
1474 |
29 Nov 11 |
pawels |
239 |
|
1474 |
29 Nov 11 |
pawels |
// query relevant annotationtypes from database |
1474 |
29 Nov 11 |
pawels |
241 |
ItemQuery<AnnotationType> atQuery = AnnotationType.getQuery(Item.PROTOCOL); |
1474 |
29 Nov 11 |
pawels |
242 |
atQuery.include(Include.MINE, Include.IN_PROJECT, Include.SHARED); |
1474 |
29 Nov 11 |
pawels |
243 |
atQuery.exclude(Include.REMOVED); |
1474 |
29 Nov 11 |
pawels |
244 |
ItemResultList<AnnotationType> atQueryResult = atQuery.list(dc); |
1474 |
29 Nov 11 |
pawels |
245 |
ItemParameterType<AnnotationType> itemParameterType = new ItemParameterType<AnnotationType>( |
1474 |
29 Nov 11 |
pawels |
246 |
AnnotationType.class, |
1474 |
29 Nov 11 |
pawels |
247 |
atQueryResult.size()==1 ? atQueryResult.get(0) : null, |
1474 |
29 Nov 11 |
pawels |
248 |
false, 1, atQueryResult); |
1474 |
29 Nov 11 |
pawels |
249 |
aeAccessionATParameter = new PluginParameter<AnnotationType>( |
1474 |
29 Nov 11 |
pawels |
250 |
AE_ACCESSION_ANNOTATION_PARAM_NAME, |
1474 |
29 Nov 11 |
pawels |
251 |
"ArrayExpress accession AnnotationType", |
1474 |
29 Nov 11 |
pawels |
252 |
"AnnotationType representing ArrayExpress accession", |
1474 |
29 Nov 11 |
pawels |
253 |
itemParameterType); |
1474 |
29 Nov 11 |
pawels |
254 |
|
1474 |
29 Nov 11 |
pawels |
// reuse the query object |
1474 |
29 Nov 11 |
pawels |
256 |
atQuery = AnnotationType.getQuery(Item.LABELEDEXTRACT); |
1474 |
29 Nov 11 |
pawels |
257 |
atQuery.include(Include.MINE, Include.IN_PROJECT, Include.SHARED); |
1474 |
29 Nov 11 |
pawels |
258 |
atQuery.exclude(Include.REMOVED); |
1474 |
29 Nov 11 |
pawels |
259 |
atQueryResult = atQuery.list(dc); |
1474 |
29 Nov 11 |
pawels |
260 |
itemParameterType = new ItemParameterType<AnnotationType>( |
1474 |
29 Nov 11 |
pawels |
261 |
AnnotationType.class, |
1474 |
29 Nov 11 |
pawels |
262 |
atQueryResult.size()==1 ? atQueryResult.get(0) : null, |
1474 |
29 Nov 11 |
pawels |
263 |
false, 1, atQueryResult); |
1474 |
29 Nov 11 |
pawels |
264 |
materialTypeATParameter = new PluginParameter<AnnotationType>( |
1474 |
29 Nov 11 |
pawels |
265 |
MATERIAL_TYPE_ANNOTATION_PARAM_NAME, |
1474 |
29 Nov 11 |
pawels |
266 |
"Material Type AnnotationType", |
1474 |
29 Nov 11 |
pawels |
267 |
"AnnotationType representing material type of a biomaterial", |
1474 |
29 Nov 11 |
pawels |
268 |
itemParameterType); |
1474 |
29 Nov 11 |
pawels |
// close db |
1474 |
29 Nov 11 |
pawels |
270 |
dc.close(); |
1474 |
29 Nov 11 |
pawels |
271 |
|
1474 |
29 Nov 11 |
pawels |
272 |
|
1474 |
29 Nov 11 |
pawels |
273 |
List<PluginParameter<?>> parameters = new ArrayList<PluginParameter<?>>(); |
1474 |
29 Nov 11 |
pawels |
274 |
parameters.add(rawDataFileTypeParameter); |
1474 |
29 Nov 11 |
pawels |
275 |
parameters.add(aeAccessionATParameter); |
1474 |
29 Nov 11 |
pawels |
276 |
parameters.add(materialTypeATParameter); |
1474 |
29 Nov 11 |
pawels |
277 |
|
1474 |
29 Nov 11 |
pawels |
278 |
|
1474 |
29 Nov 11 |
pawels |
279 |
RequestInformation configureJob = new RequestInformation ( |
1474 |
29 Nov 11 |
pawels |
280 |
COMMAND_CONFIGURE_JOB_STEP2, |
1474 |
29 Nov 11 |
pawels |
281 |
"Additional MageTab exporter options", |
1474 |
29 Nov 11 |
pawels |
282 |
"Set the data file types for raw data, and annotation types for ArrayExpress identifiers", |
1474 |
29 Nov 11 |
pawels |
283 |
parameters |
1474 |
29 Nov 11 |
pawels |
284 |
); |
1474 |
29 Nov 11 |
pawels |
285 |
|
1474 |
29 Nov 11 |
pawels |
286 |
return configureJob; |
1474 |
29 Nov 11 |
pawels |
287 |
} |
1474 |
29 Nov 11 |
pawels |
288 |
|
1474 |
29 Nov 11 |
pawels |
289 |
private RequestInformation getConfigurePluginParameters_PlatformVariant() { |
1474 |
29 Nov 11 |
pawels |
290 |
|
1474 |
29 Nov 11 |
pawels |
291 |
RequestInformation configurePlugin = null; |
1474 |
29 Nov 11 |
pawels |
292 |
|
1474 |
29 Nov 11 |
pawels |
293 |
DbControl dc = sc.newDbControl(); |
1474 |
29 Nov 11 |
pawels |
294 |
|
1474 |
29 Nov 11 |
pawels |
295 |
try { |
1474 |
29 Nov 11 |
pawels |
296 |
|
1474 |
29 Nov 11 |
pawels |
297 |
ItemResultList<PlatformVariant> variants = PlatformVariant.getQuery().list(dc); |
1474 |
29 Nov 11 |
pawels |
298 |
|
1474 |
29 Nov 11 |
pawels |
299 |
platformVariantParameter = new PluginParameter<PlatformVariant>( |
1474 |
29 Nov 11 |
pawels |
300 |
"platformVariant", |
1474 |
29 Nov 11 |
pawels |
301 |
"Platform variant", |
1474 |
29 Nov 11 |
pawels |
302 |
"Platform variant this export configuration will be used for", |
1474 |
29 Nov 11 |
pawels |
303 |
new ItemParameterType<PlatformVariant>(PlatformVariant.class, null, true, 1, variants)); |
1474 |
29 Nov 11 |
pawels |
304 |
|
1474 |
29 Nov 11 |
pawels |
305 |
List<PluginParameter<?>> parameters = new ArrayList<PluginParameter<?>>(); |
1474 |
29 Nov 11 |
pawels |
306 |
parameters.add(platformVariantParameter); |
1474 |
29 Nov 11 |
pawels |
307 |
|
1474 |
29 Nov 11 |
pawels |
308 |
configurePlugin = new RequestInformation ( |
1474 |
29 Nov 11 |
pawels |
309 |
Request.COMMAND_CONFIGURE_PLUGIN, |
1474 |
29 Nov 11 |
pawels |
310 |
"Configurable Tab2Mage exporter options - step 1", |
1474 |
29 Nov 11 |
pawels |
311 |
"Choose platform this configuration will be used for", |
1474 |
29 Nov 11 |
pawels |
312 |
parameters |
1474 |
29 Nov 11 |
pawels |
313 |
); |
1474 |
29 Nov 11 |
pawels |
314 |
|
1474 |
29 Nov 11 |
pawels |
315 |
} finally { |
1474 |
29 Nov 11 |
pawels |
316 |
dc.close(); |
1474 |
29 Nov 11 |
pawels |
317 |
} |
1474 |
29 Nov 11 |
pawels |
318 |
|
1474 |
29 Nov 11 |
pawels |
319 |
return configurePlugin; |
1474 |
29 Nov 11 |
pawels |
320 |
} |
1474 |
29 Nov 11 |
pawels |
321 |
|
1474 |
29 Nov 11 |
pawels |
322 |
private RequestInformation getConfigurePluginParameters_FileTypes() { |
1474 |
29 Nov 11 |
pawels |
323 |
|
1474 |
29 Nov 11 |
pawels |
324 |
RequestInformation configurePlugin = null; |
1474 |
29 Nov 11 |
pawels |
325 |
|
1474 |
29 Nov 11 |
pawels |
326 |
DbControl dc = sc.newDbControl(); |
1474 |
29 Nov 11 |
pawels |
327 |
|
1474 |
29 Nov 11 |
pawels |
328 |
try { |
1474 |
29 Nov 11 |
pawels |
329 |
|
1474 |
29 Nov 11 |
pawels |
330 |
dc.refreshItem(chosenVariant); |
1474 |
29 Nov 11 |
pawels |
331 |
|
1474 |
29 Nov 11 |
pawels |
// get list of DataFileTypes relevant for this platform/variant |
1474 |
29 Nov 11 |
pawels |
333 |
ItemQuery<DataFileType> dfTypesQuery = DataFileType.getQuery(chosenVariant.getPlatform(), chosenVariant, Item.RAWBIOASSAY, null); |
1474 |
29 Nov 11 |
pawels |
334 |
rawDataFileTypeParameter = new PluginParameter<DataFileType>( |
1474 |
29 Nov 11 |
pawels |
335 |
RAWDATA_FILE_TYPES_PARAM_NAME, |
1474 |
29 Nov 11 |
pawels |
336 |
"Raw data file type", |
1474 |
29 Nov 11 |
pawels |
337 |
"Type of the raw data files to include in the export", |
1474 |
29 Nov 11 |
pawels |
338 |
new ItemParameterType<DataFileType>(DataFileType.class, null, true, 0, dfTypesQuery.list(dc))); |
1474 |
29 Nov 11 |
pawels |
339 |
|
1474 |
29 Nov 11 |
pawels |
// query relevant annotation types from database |
1474 |
29 Nov 11 |
pawels |
341 |
ItemQuery<AnnotationType> atQuery = AnnotationType.getQuery(Item.PROTOCOL); |
1474 |
29 Nov 11 |
pawels |
342 |
atQuery.include(Include.MINE, Include.IN_PROJECT, Include.SHARED); |
1474 |
29 Nov 11 |
pawels |
343 |
atQuery.exclude(Include.REMOVED); |
1474 |
29 Nov 11 |
pawels |
344 |
aeAccessionATParameter = new PluginParameter<AnnotationType>( |
1474 |
29 Nov 11 |
pawels |
345 |
AE_ACCESSION_ANNOTATION_PARAM_NAME, |
1474 |
29 Nov 11 |
pawels |
346 |
"Protocol AE accession AnnotationType", |
1474 |
29 Nov 11 |
pawels |
347 |
"AnnotationType representing ArrayExpress accession for protocol", |
1474 |
29 Nov 11 |
pawels |
348 |
new ItemParameterType<AnnotationType>(AnnotationType.class, null, false, 1, atQuery.list(dc))); |
1474 |
29 Nov 11 |
pawels |
349 |
|
1474 |
29 Nov 11 |
pawels |
// reuse query object |
1474 |
29 Nov 11 |
pawels |
351 |
atQuery = AnnotationType.getQuery(Item.EXTRACT); |
1474 |
29 Nov 11 |
pawels |
352 |
atQuery.include(Include.MINE, Include.IN_PROJECT, Include.SHARED); |
1474 |
29 Nov 11 |
pawels |
353 |
atQuery.exclude(Include.REMOVED); |
1474 |
29 Nov 11 |
pawels |
354 |
materialTypeATParameter = new PluginParameter<AnnotationType>( |
1474 |
29 Nov 11 |
pawels |
355 |
MATERIAL_TYPE_ANNOTATION_PARAM_NAME, |
1474 |
29 Nov 11 |
pawels |
356 |
"Material Type AnnotationType", |
1474 |
29 Nov 11 |
pawels |
357 |
"AnnotationType representing material type of a biomaterial", |
1474 |
29 Nov 11 |
pawels |
358 |
new ItemParameterType<AnnotationType>(AnnotationType.class, null, false, 1, atQuery.list(dc))); |
1474 |
29 Nov 11 |
pawels |
359 |
|
1474 |
29 Nov 11 |
pawels |
360 |
List<PluginParameter<?>> parameters = new ArrayList<PluginParameter<?>>(); |
1474 |
29 Nov 11 |
pawels |
361 |
parameters.add(rawDataFileTypeParameter); |
1474 |
29 Nov 11 |
pawels |
362 |
parameters.add(aeAccessionATParameter); |
1474 |
29 Nov 11 |
pawels |
363 |
parameters.add(materialTypeATParameter); |
1474 |
29 Nov 11 |
pawels |
364 |
|
1474 |
29 Nov 11 |
pawels |
365 |
configurePlugin = new RequestInformation ( |
1474 |
29 Nov 11 |
pawels |
366 |
COMMAND_CONFIGURE_PLUGIN_FILE_TYPES, |
1474 |
29 Nov 11 |
pawels |
367 |
"Configurable Tab2Mage exporter options - step 2", |
1474 |
29 Nov 11 |
pawels |
368 |
"Choose raw data file types to export, and annotation types for ArrayExpress annotations", |
1474 |
29 Nov 11 |
pawels |
369 |
parameters |
1474 |
29 Nov 11 |
pawels |
370 |
); |
1474 |
29 Nov 11 |
pawels |
371 |
|
1474 |
29 Nov 11 |
pawels |
372 |
} finally { |
1474 |
29 Nov 11 |
pawels |
373 |
dc.close(); |
1474 |
29 Nov 11 |
pawels |
374 |
} |
1474 |
29 Nov 11 |
pawels |
375 |
|
1474 |
29 Nov 11 |
pawels |
376 |
return configurePlugin; |
1474 |
29 Nov 11 |
pawels |
377 |
|
1474 |
29 Nov 11 |
pawels |
378 |
} |
1474 |
29 Nov 11 |
pawels |
379 |
|
1474 |
29 Nov 11 |
pawels |
380 |
|
1474 |
29 Nov 11 |
pawels |
381 |
public RequestInformation getRequestInformation(GuiContext context, String command) |
1474 |
29 Nov 11 |
pawels |
382 |
throws BaseException |
1474 |
29 Nov 11 |
pawels |
383 |
{ |
1474 |
29 Nov 11 |
pawels |
384 |
RequestInformation requestInformation = null; |
1474 |
29 Nov 11 |
pawels |
385 |
if (Request.COMMAND_CONFIGURE_JOB.equals(command)) |
1474 |
29 Nov 11 |
pawels |
386 |
{ |
1474 |
29 Nov 11 |
pawels |
387 |
requestInformation = getConfigureJobParameters1(); |
1474 |
29 Nov 11 |
pawels |
388 |
} |
1474 |
29 Nov 11 |
pawels |
389 |
else if (COMMAND_CONFIGURE_JOB_STEP2.equals(command)) |
1474 |
29 Nov 11 |
pawels |
390 |
{ |
1474 |
29 Nov 11 |
pawels |
391 |
requestInformation = getConfigureJobParameters2(); |
1474 |
29 Nov 11 |
pawels |
392 |
} |
1474 |
29 Nov 11 |
pawels |
393 |
else if (Request.COMMAND_CONFIGURE_PLUGIN.equals(command)) { |
1474 |
29 Nov 11 |
pawels |
394 |
requestInformation = getConfigurePluginParameters_PlatformVariant(); |
1474 |
29 Nov 11 |
pawels |
395 |
} |
1474 |
29 Nov 11 |
pawels |
396 |
else if (COMMAND_CONFIGURE_PLUGIN_FILE_TYPES.equals(command)) { |
1474 |
29 Nov 11 |
pawels |
397 |
requestInformation = getConfigurePluginParameters_FileTypes(); |
1474 |
29 Nov 11 |
pawels |
398 |
} |
1474 |
29 Nov 11 |
pawels |
399 |
|
1474 |
29 Nov 11 |
pawels |
400 |
return requestInformation; |
1474 |
29 Nov 11 |
pawels |
401 |
} |
1474 |
29 Nov 11 |
pawels |
402 |
|
1474 |
29 Nov 11 |
pawels |
403 |
public void configure(GuiContext context, Request request, Response response) |
1474 |
29 Nov 11 |
pawels |
404 |
{ |
1474 |
29 Nov 11 |
pawels |
405 |
String command = request.getCommand(); |
1474 |
29 Nov 11 |
pawels |
406 |
try |
1474 |
29 Nov 11 |
pawels |
407 |
{ |
1474 |
29 Nov 11 |
pawels |
408 |
if (Request.COMMAND_CONFIGURE_JOB.equals(command)) { |
1474 |
29 Nov 11 |
pawels |
409 |
|
1474 |
29 Nov 11 |
pawels |
410 |
List<Throwable> errors = validateRequestParameters(getConfigureJobParameters1().getParameters(), request); |
1474 |
29 Nov 11 |
pawels |
411 |
if (errors != null) |
1474 |
29 Nov 11 |
pawels |
412 |
{ |
1474 |
29 Nov 11 |
pawels |
413 |
response.setError(errors.size() + " invalid parameters were found in the request",errors); |
1474 |
29 Nov 11 |
pawels |
414 |
return; |
1474 |
29 Nov 11 |
pawels |
415 |
} |
1474 |
29 Nov 11 |
pawels |
416 |
storeValue(job, request, experimentParameter); |
1474 |
29 Nov 11 |
pawels |
417 |
storeValue(job, request, pathParameter); |
1474 |
29 Nov 11 |
pawels |
418 |
storeValue(job, request, archivePathParameter); |
1474 |
29 Nov 11 |
pawels |
419 |
storeValue(job, request, overWriteParameter); |
1474 |
29 Nov 11 |
pawels |
420 |
storeValue(job, request, releaseDateParameter); |
1474 |
29 Nov 11 |
pawels |
421 |
storeValue(job, request, quoteFieldsParameter); |
1474 |
29 Nov 11 |
pawels |
422 |
storeValue(job, request, handleMissingContentParameter); |
1474 |
29 Nov 11 |
pawels |
423 |
storeValue(job, request, missingContentReplParameter); |
1474 |
29 Nov 11 |
pawels |
424 |
|
1474 |
29 Nov 11 |
pawels |
425 |
chosenExperiment = (Experiment)job.getValue(experimentParameter.getName()); |
1474 |
29 Nov 11 |
pawels |
426 |
|
1474 |
29 Nov 11 |
pawels |
427 |
response.setContinue(COMMAND_CONFIGURE_JOB_STEP2); |
1474 |
29 Nov 11 |
pawels |
428 |
|
1474 |
29 Nov 11 |
pawels |
429 |
} else if (COMMAND_CONFIGURE_JOB_STEP2.equals(command)) { |
1474 |
29 Nov 11 |
pawels |
430 |
|
1474 |
29 Nov 11 |
pawels |
431 |
List<Throwable> errors = validateRequestParameters(getConfigureJobParameters2().getParameters(), request); |
1474 |
29 Nov 11 |
pawels |
432 |
if (errors != null) |
1474 |
29 Nov 11 |
pawels |
433 |
{ |
1474 |
29 Nov 11 |
pawels |
434 |
response.setError(errors.size() + " invalid parameters were found in the request",errors); |
1474 |
29 Nov 11 |
pawels |
435 |
return; |
1474 |
29 Nov 11 |
pawels |
436 |
} |
1474 |
29 Nov 11 |
pawels |
437 |
storeValues(job, request, rawDataFileTypeParameter); |
1474 |
29 Nov 11 |
pawels |
438 |
storeValue(job, request, aeAccessionATParameter); |
1474 |
29 Nov 11 |
pawels |
439 |
storeValue(job, request, materialTypeATParameter); |
1474 |
29 Nov 11 |
pawels |
440 |
response.setDone("The job configuration is complete"); |
1474 |
29 Nov 11 |
pawels |
441 |
|
1474 |
29 Nov 11 |
pawels |
442 |
} else if (Request.COMMAND_CONFIGURE_PLUGIN.equals(command)) { |
1474 |
29 Nov 11 |
pawels |
443 |
|
1474 |
29 Nov 11 |
pawels |
444 |
List<Throwable> errors = validateRequestParameters(getConfigurePluginParameters_PlatformVariant().getParameters(), request); |
1474 |
29 Nov 11 |
pawels |
445 |
if (errors != null) |
1474 |
29 Nov 11 |
pawels |
446 |
{ |
1474 |
29 Nov 11 |
pawels |
447 |
response.setError(errors.size() + " invalid parameters were found in the request",errors); |
1474 |
29 Nov 11 |
pawels |
448 |
return; |
1474 |
29 Nov 11 |
pawels |
449 |
} |
1474 |
29 Nov 11 |
pawels |
450 |
storeValue(configuration, request, platformVariantParameter); |
1474 |
29 Nov 11 |
pawels |
451 |
|
1474 |
29 Nov 11 |
pawels |
452 |
chosenVariant = (PlatformVariant)configuration.getValue(platformVariantParameter.getName()); |
1474 |
29 Nov 11 |
pawels |
453 |
|
1474 |
29 Nov 11 |
pawels |
454 |
response.setContinue(COMMAND_CONFIGURE_PLUGIN_FILE_TYPES); |
1474 |
29 Nov 11 |
pawels |
455 |
|
1474 |
29 Nov 11 |
pawels |
456 |
} else if (COMMAND_CONFIGURE_PLUGIN_FILE_TYPES.equals(command)) { |
1474 |
29 Nov 11 |
pawels |
457 |
|
1474 |
29 Nov 11 |
pawels |
458 |
List<Throwable> errors = validateRequestParameters(getConfigurePluginParameters_FileTypes().getParameters(), request); |
1474 |
29 Nov 11 |
pawels |
459 |
if (errors != null) |
1474 |
29 Nov 11 |
pawels |
460 |
{ |
1474 |
29 Nov 11 |
pawels |
461 |
response.setError(errors.size() + " invalid parameters were found in the request",errors); |
1474 |
29 Nov 11 |
pawels |
462 |
return; |
1474 |
29 Nov 11 |
pawels |
463 |
} |
1474 |
29 Nov 11 |
pawels |
464 |
storeValues(configuration, request, rawDataFileTypeParameter); |
1474 |
29 Nov 11 |
pawels |
465 |
storeValue(configuration, request, aeAccessionATParameter); |
1474 |
29 Nov 11 |
pawels |
466 |
storeValue(configuration, request, materialTypeATParameter); |
1474 |
29 Nov 11 |
pawels |
467 |
response.setDone("The plugin configuration is complete"); |
1474 |
29 Nov 11 |
pawels |
468 |
} |
1474 |
29 Nov 11 |
pawels |
469 |
|
1474 |
29 Nov 11 |
pawels |
470 |
} |
1474 |
29 Nov 11 |
pawels |
471 |
catch(Throwable ex) |
1474 |
29 Nov 11 |
pawels |
472 |
{ |
1474 |
29 Nov 11 |
pawels |
473 |
response.setError(ex.getMessage(), Arrays.asList(ex)); |
1474 |
29 Nov 11 |
pawels |
474 |
} |
1474 |
29 Nov 11 |
pawels |
475 |
} |
1474 |
29 Nov 11 |
pawels |
476 |
|
1474 |
29 Nov 11 |
pawels |
477 |
|
1474 |
29 Nov 11 |
pawels |
478 |
|
1474 |
29 Nov 11 |
pawels |
479 |
public void run(Request request, Response response, ProgressReporter progress) { |
1474 |
29 Nov 11 |
pawels |
480 |
|
1474 |
29 Nov 11 |
pawels |
481 |
DbControl dc = null; |
1474 |
29 Nov 11 |
pawels |
482 |
|
1474 |
29 Nov 11 |
pawels |
483 |
try { |
1474 |
29 Nov 11 |
pawels |
484 |
|
1474 |
29 Nov 11 |
pawels |
485 |
dc = sc.newDbControl(); |
1474 |
29 Nov 11 |
pawels |
486 |
|
1474 |
29 Nov 11 |
pawels |
487 |
User user = User.getById(dc, sc.getLoggedInUserId()); |
1474 |
29 Nov 11 |
pawels |
488 |
|
1474 |
29 Nov 11 |
pawels |
489 |
/* |
1474 |
29 Nov 11 |
pawels |
* get job parameters / options |
1474 |
29 Nov 11 |
pawels |
491 |
*/ |
1474 |
29 Nov 11 |
pawels |
492 |
|
1474 |
29 Nov 11 |
pawels |
493 |
Experiment experiment = (Experiment) job.getValue("experiment"); |
1474 |
29 Nov 11 |
pawels |
494 |
dc.refreshItem(experiment); |
1474 |
29 Nov 11 |
pawels |
495 |
|
1474 |
29 Nov 11 |
pawels |
496 |
String exportPath = (String) job.getValue("exportPath"); |
1474 |
29 Nov 11 |
pawels |
497 |
String archivePath = (String) job.getValue("archivePath"); |
1474 |
29 Nov 11 |
pawels |
498 |
Date releaseDate = (Date) job.getValue("releaseDate"); |
1474 |
29 Nov 11 |
pawels |
499 |
boolean overwrite = (Boolean) job.getValue("overwrite"); |
1474 |
29 Nov 11 |
pawels |
500 |
|
1474 |
29 Nov 11 |
pawels |
501 |
|
1474 |
29 Nov 11 |
pawels |
502 |
List<DataFileType> fTypes = (List<DataFileType>)job.getValues(RAWDATA_FILE_TYPES_PARAM_NAME); |
1474 |
29 Nov 11 |
pawels |
503 |
|
1474 |
29 Nov 11 |
pawels |
// user-selected AnnotationType for AE accession |
1474 |
29 Nov 11 |
pawels |
505 |
AnnotationType aeAccessionAT = (AnnotationType) job.getValue(AE_ACCESSION_ANNOTATION_PARAM_NAME); |
1474 |
29 Nov 11 |
pawels |
506 |
if (aeAccessionAT != null) { |
1474 |
29 Nov 11 |
pawels |
507 |
dc.refreshItem(aeAccessionAT); |
1474 |
29 Nov 11 |
pawels |
508 |
} |
1474 |
29 Nov 11 |
pawels |
509 |
|
1474 |
29 Nov 11 |
pawels |
// user-selected AnnotationType for material type |
1474 |
29 Nov 11 |
pawels |
511 |
AnnotationType materialType_AT = (AnnotationType) job.getValue(MATERIAL_TYPE_ANNOTATION_PARAM_NAME); |
1474 |
29 Nov 11 |
pawels |
512 |
if (materialType_AT != null) { |
1474 |
29 Nov 11 |
pawels |
513 |
dc.refreshItem(materialType_AT); |
1474 |
29 Nov 11 |
pawels |
514 |
} |
1474 |
29 Nov 11 |
pawels |
515 |
|
1474 |
29 Nov 11 |
pawels |
516 |
|
1474 |
29 Nov 11 |
pawels |
517 |
/* |
1474 |
29 Nov 11 |
pawels |
* Check if a user has write permission on the experiment. If one can change experiment, one should be able to |
1474 |
29 Nov 11 |
pawels |
* export it as well. |
1474 |
29 Nov 11 |
pawels |
520 |
*/ |
1474 |
29 Nov 11 |
pawels |
521 |
if (!experiment.getPermissions().contains(Permission.WRITE)) |
1474 |
29 Nov 11 |
pawels |
522 |
{ |
1474 |
29 Nov 11 |
pawels |
523 |
throw new PermissionDeniedException("Export failed. User ["+user.getName()+ |
1474 |
29 Nov 11 |
pawels |
524 |
"] does not have permission to export the experiment ["+experiment.getName()+"]."); |
1474 |
29 Nov 11 |
pawels |
525 |
} |
1474 |
29 Nov 11 |
pawels |
526 |
|
1474 |
29 Nov 11 |
pawels |
527 |
|
1474 |
29 Nov 11 |
pawels |
528 |
// |
1474 |
29 Nov 11 |
pawels |
// set settings for the export |
1474 |
29 Nov 11 |
pawels |
530 |
MageTabExporterSettings.BASE_HOST = Application.getHostName(); |
1474 |
29 Nov 11 |
pawels |
531 |
MageTabExporterSettings.QUOTE = (Boolean)job.getValue(QUOTE_FIELDS_PARAM_NAME); |
1474 |
29 Nov 11 |
pawels |
532 |
MageTabExporterSettings.FILL_MISSING_VALUES = |
1474 |
29 Nov 11 |
pawels |
533 |
FILL_MISSING_CONTENT_PARAM_VALUE.equals((String)job.getValue(HANDLE_MISSING_CONTENT_PARAM_NAME)); |
1474 |
29 Nov 11 |
pawels |
// add following to plugin parameters ? |
1474 |
29 Nov 11 |
pawels |
// MageTabExporterSettings.DELIMITER = |
1474 |
29 Nov 11 |
pawels |
536 |
|
1474 |
29 Nov 11 |
pawels |
537 |
String missingValueReplacement = (String)job.getValue(MISSING_CONTENT_REPLACEMENT_PARAM_NAME); |
1474 |
29 Nov 11 |
pawels |
538 |
if (missingValueReplacement == null) { |
1474 |
29 Nov 11 |
pawels |
539 |
missingValueReplacement = ""; |
1474 |
29 Nov 11 |
pawels |
540 |
} |
1474 |
29 Nov 11 |
pawels |
541 |
MageTabExporterSettings.REPLACE_MISSING_VALUE_WITH = missingValueReplacement; |
1474 |
29 Nov 11 |
pawels |
542 |
|
1474 |
29 Nov 11 |
pawels |
543 |
|
1474 |
29 Nov 11 |
pawels |
// make sdrf |
1474 |
29 Nov 11 |
pawels |
545 |
SDRFCreator sdrfCreator = new SDRFCreator(experiment); |
1474 |
29 Nov 11 |
pawels |
546 |
sdrfCreator.setArrayExpressRefAnnotationType(aeAccessionAT); |
1474 |
29 Nov 11 |
pawels |
547 |
sdrfCreator.setMaterialTypeAnnotationType(materialType_AT); |
1474 |
29 Nov 11 |
pawels |
548 |
sdrfCreator.setArrayDataFileTypes(fTypes); |
1474 |
29 Nov 11 |
pawels |
549 |
SDRF sdrf = sdrfCreator.getSDRFForExperiment(dc); |
1474 |
29 Nov 11 |
pawels |
550 |
SDRFFile sdrfFile = new SDRFFile(sdrf); |
1474 |
29 Nov 11 |
pawels |
// save sdrf |
1474 |
29 Nov 11 |
pawels |
552 |
String sdrfPath = exportPath + "_sdrf.txt"; |
1474 |
29 Nov 11 |
pawels |
553 |
OutputStream out = Utils.getOutputStreamForPath(sdrfPath, overwrite, dc); |
1474 |
29 Nov 11 |
pawels |
554 |
sdrfFile.save(out); |
1474 |
29 Nov 11 |
pawels |
555 |
out.close(); |
1474 |
29 Nov 11 |
pawels |
556 |
|
1474 |
29 Nov 11 |
pawels |
// make idf |
1474 |
29 Nov 11 |
pawels |
558 |
String idfPath = exportPath + "_idf.txt"; |
1474 |
29 Nov 11 |
pawels |
559 |
IDFCreator idfCreator = new IDFCreator(experiment); |
1474 |
29 Nov 11 |
pawels |
560 |
IDF idf = idfCreator.getIDFForExperiment(sdrf); |
1474 |
29 Nov 11 |
pawels |
561 |
idf.setFieldContent(IDF.SDRF_FILE, sdrfPath.substring(sdrfPath.lastIndexOf("/")+1)); |
1474 |
29 Nov 11 |
pawels |
562 |
idf.setFieldContent(IDF.PUBLIC_RELEASE_DATE, releaseDate.toString()); |
1474 |
29 Nov 11 |
pawels |
563 |
IDFFile idfFile = new IDFFile(idf); |
1474 |
29 Nov 11 |
pawels |
// save idf |
1474 |
29 Nov 11 |
pawels |
565 |
out = Utils.getOutputStreamForPath(idfPath, overwrite, dc); |
1474 |
29 Nov 11 |
pawels |
566 |
idfFile.save(out); |
1474 |
29 Nov 11 |
pawels |
567 |
out.close(); |
1474 |
29 Nov 11 |
pawels |
568 |
|
1474 |
29 Nov 11 |
pawels |
569 |
|
1474 |
29 Nov 11 |
pawels |
// make rawdata archive |
1474 |
29 Nov 11 |
pawels |
571 |
ItemQuery<RawBioAssay> q = experiment.getRawBioAssays(); |
1474 |
29 Nov 11 |
pawels |
572 |
q.include(Include.ALL); |
1474 |
29 Nov 11 |
pawels |
573 |
q.order(Orders.asc(Hql.property("name"))); |
1474 |
29 Nov 11 |
pawels |
574 |
List<RawBioAssay> rbas = q.list(dc); |
1474 |
29 Nov 11 |
pawels |
// save archive |
1474 |
29 Nov 11 |
pawels |
576 |
out = Utils.getOutputStreamForPath(archivePath, overwrite, dc); |
1474 |
29 Nov 11 |
pawels |
577 |
saveRawDataArchive(out, rbas, fTypes, progress, dc); |
1474 |
29 Nov 11 |
pawels |
578 |
out.close(); |
1474 |
29 Nov 11 |
pawels |
579 |
|
1474 |
29 Nov 11 |
pawels |
580 |
dc.commit(); |
1474 |
29 Nov 11 |
pawels |
581 |
response.setDone("Experiment " + experiment.getName() + " exported successfully"); |
1474 |
29 Nov 11 |
pawels |
582 |
|
1474 |
29 Nov 11 |
pawels |
583 |
} catch (MageTabException e) { |
1474 |
29 Nov 11 |
pawels |
584 |
response.setError(e.getMessage(), Arrays.asList(e)); |
1474 |
29 Nov 11 |
pawels |
585 |
} catch (PermissionDeniedException e) { |
1474 |
29 Nov 11 |
pawels |
586 |
response.setError(e.getMessage(), Arrays.asList(e)); |
1474 |
29 Nov 11 |
pawels |
587 |
} catch (java.util.zip.ZipException e) { |
1474 |
29 Nov 11 |
pawels |
588 |
String msg = ""; |
1474 |
29 Nov 11 |
pawels |
589 |
if (e.getMessage().equals("ZIP file must have at least one entry")) { |
1474 |
29 Nov 11 |
pawels |
590 |
List<DataFileType> dfts = (List<DataFileType>)job.getValues(RAWDATA_FILE_TYPES_PARAM_NAME); |
1474 |
29 Nov 11 |
pawels |
591 |
msg = "Couldn't find any files of types: ["; |
1474 |
29 Nov 11 |
pawels |
592 |
for (DataFileType dft : dfts) { |
1474 |
29 Nov 11 |
pawels |
593 |
msg += dft.getName()+","; |
1474 |
29 Nov 11 |
pawels |
594 |
} |
1474 |
29 Nov 11 |
pawels |
595 |
if (msg.endsWith(",")) { msg.substring(0, msg.length()-1); } |
1474 |
29 Nov 11 |
pawels |
596 |
msg += "] attached to rawbioassays in the experiment.\n"; |
1474 |
29 Nov 11 |
pawels |
597 |
msg += "Check the 'Raw data file type' parameter of the export plugin.\n"; |
1474 |
29 Nov 11 |
pawels |
598 |
msg += "Original exception message: "; |
1474 |
29 Nov 11 |
pawels |
599 |
} |
1474 |
29 Nov 11 |
pawels |
600 |
response.setError(msg + e.getMessage(), Arrays.asList(e)); |
1474 |
29 Nov 11 |
pawels |
601 |
} catch (IOException e) { |
1474 |
29 Nov 11 |
pawels |
602 |
response.setError(e.getMessage(), Arrays.asList(e)); |
1474 |
29 Nov 11 |
pawels |
603 |
} finally { |
1474 |
29 Nov 11 |
pawels |
604 |
if (dc != null) { dc.close(); } |
1474 |
29 Nov 11 |
pawels |
605 |
} |
1474 |
29 Nov 11 |
pawels |
606 |
} |
1474 |
29 Nov 11 |
pawels |
607 |
|
1474 |
29 Nov 11 |
pawels |
608 |
|
1474 |
29 Nov 11 |
pawels |
609 |
/** |
1474 |
29 Nov 11 |
pawels |
* Packs raw data files of selected types and prints to a given OutputStream. |
1474 |
29 Nov 11 |
pawels |
* WARNING: Different files with the same names (for example kept in different dirs) |
1474 |
29 Nov 11 |
pawels |
* will not be included. |
1474 |
29 Nov 11 |
pawels |
613 |
* |
1474 |
29 Nov 11 |
pawels |
* @param out - OutputStream to print zipped files to |
1474 |
29 Nov 11 |
pawels |
* @param rbaList - raw bioassays to extract raw data files from |
1474 |
29 Nov 11 |
pawels |
* @param dfts - types of data files which will be included |
1474 |
29 Nov 11 |
pawels |
* @param progress - ProgressReporter |
1474 |
29 Nov 11 |
pawels |
* @param dc - DbControl |
1474 |
29 Nov 11 |
pawels |
* @return |
1474 |
29 Nov 11 |
pawels |
* an InputStream of zipped files. |
1474 |
29 Nov 11 |
pawels |
621 |
*/ |
1474 |
29 Nov 11 |
pawels |
622 |
public static void saveRawDataArchive(OutputStream out, |
1474 |
29 Nov 11 |
pawels |
623 |
List<RawBioAssay> rbaList, List<DataFileType> dfts, |
1474 |
29 Nov 11 |
pawels |
624 |
ProgressReporter progress, DbControl dc) |
1474 |
29 Nov 11 |
pawels |
625 |
throws IOException { |
1474 |
29 Nov 11 |
pawels |
626 |
|
1474 |
29 Nov 11 |
pawels |
627 |
ZipFilePacker packer = new ZipFilePacker(); |
1474 |
29 Nov 11 |
pawels |
628 |
packer.setOutputStream(out); |
1474 |
29 Nov 11 |
pawels |
629 |
|
1474 |
29 Nov 11 |
pawels |
630 |
int currProgress = 30; |
1474 |
29 Nov 11 |
pawels |
631 |
int progressPerRBA = (95 - currProgress) / rbaList.size(); |
1474 |
29 Nov 11 |
pawels |
632 |
|
1474 |
29 Nov 11 |
pawels |
// for checking if file has not been included because all the files are packed in the same |
1474 |
29 Nov 11 |
pawels |
// directory and can't have the same filename |
1474 |
29 Nov 11 |
pawels |
635 |
HashSet<String> includedFiles = new HashSet<String>(); |
1474 |
29 Nov 11 |
pawels |
636 |
|
1474 |
29 Nov 11 |
pawels |
637 |
for (RawBioAssay rba : rbaList) { |
1474 |
29 Nov 11 |
pawels |
638 |
|
1474 |
29 Nov 11 |
pawels |
639 |
for (DataFileType dft : dfts) { |
1474 |
29 Nov 11 |
pawels |
640 |
if (rba.hasFileSet() && rba.getFileSet().hasMember(dft)) { |
1474 |
29 Nov 11 |
pawels |
641 |
File f = rba.getFileSet().getMember(dft).getFile(); |
1474 |
29 Nov 11 |
pawels |
642 |
if (f != null && !includedFiles.contains(f.getName())) { |
1474 |
29 Nov 11 |
pawels |
643 |
progress.display(currProgress, "Zipping file: "+f.getName()); |
1474 |
29 Nov 11 |
pawels |
644 |
includedFiles.add(f.getName()); |
1474 |
29 Nov 11 |
pawels |
645 |
InputStream in = f.getDownloadStream(0); |
1474 |
29 Nov 11 |
pawels |
646 |
packer.pack(f.getName(), in, f.getSize(), f.getLastUpdate().getTime()); |
1474 |
29 Nov 11 |
pawels |
647 |
} |
1474 |
29 Nov 11 |
pawels |
648 |
} |
1474 |
29 Nov 11 |
pawels |
649 |
} |
1474 |
29 Nov 11 |
pawels |
650 |
|
1474 |
29 Nov 11 |
pawels |
651 |
currProgress += progressPerRBA; |
1474 |
29 Nov 11 |
pawels |
652 |
} |
1474 |
29 Nov 11 |
pawels |
653 |
|
1474 |
29 Nov 11 |
pawels |
654 |
packer.close(); |
1474 |
29 Nov 11 |
pawels |
655 |
} |
1474 |
29 Nov 11 |
pawels |
656 |
|
1474 |
29 Nov 11 |
pawels |
657 |
|
1474 |
29 Nov 11 |
pawels |
658 |
|
1474 |
29 Nov 11 |
pawels |
659 |
/* |
1474 |
29 Nov 11 |
pawels |
660 |
* |
1474 |
29 Nov 11 |
pawels |
* Other plugin methods |
1474 |
29 Nov 11 |
pawels |
662 |
* |
1474 |
29 Nov 11 |
pawels |
663 |
*/ |
1474 |
29 Nov 11 |
pawels |
664 |
|
1474 |
29 Nov 11 |
pawels |
665 |
|
1474 |
29 Nov 11 |
pawels |
666 |
/** |
1474 |
29 Nov 11 |
pawels |
Create a new MageTab exporter |
1474 |
29 Nov 11 |
pawels |
668 |
*/ |
1474 |
29 Nov 11 |
pawels |
669 |
public MageTabExporterPlugin() {} |
1474 |
29 Nov 11 |
pawels |
670 |
|
1474 |
29 Nov 11 |
pawels |
671 |
|
1474 |
29 Nov 11 |
pawels |
672 |
public Set<GuiContext> getGuiContexts() |
1474 |
29 Nov 11 |
pawels |
673 |
{ |
1474 |
29 Nov 11 |
pawels |
674 |
return guiContexts; |
1474 |
29 Nov 11 |
pawels |
675 |
} |
1474 |
29 Nov 11 |
pawels |
676 |
|
1474 |
29 Nov 11 |
pawels |
677 |
public String isInContext(GuiContext context, Object item) |
1474 |
29 Nov 11 |
pawels |
678 |
{ |
1474 |
29 Nov 11 |
pawels |
679 |
String message = null; |
1474 |
29 Nov 11 |
pawels |
680 |
if (context.equals(experimentItemGuiContext)) |
1474 |
29 Nov 11 |
pawels |
681 |
{ |
1474 |
29 Nov 11 |
pawels |
682 |
if (item == null) |
1474 |
29 Nov 11 |
pawels |
683 |
{ |
1474 |
29 Nov 11 |
pawels |
684 |
message = "The object is null"; |
1474 |
29 Nov 11 |
pawels |
685 |
} |
1474 |
29 Nov 11 |
pawels |
686 |
else if (!(item instanceof Experiment)) |
1474 |
29 Nov 11 |
pawels |
687 |
{ |
1474 |
29 Nov 11 |
pawels |
688 |
message = "The object is not an Experiment: " + item; |
1474 |
29 Nov 11 |
pawels |
689 |
} |
1474 |
29 Nov 11 |
pawels |
690 |
} |
1474 |
29 Nov 11 |
pawels |
691 |
return message; |
1474 |
29 Nov 11 |
pawels |
692 |
} |
1474 |
29 Nov 11 |
pawels |
693 |
|
1474 |
29 Nov 11 |
pawels |
694 |
|
1474 |
29 Nov 11 |
pawels |
695 |
public MainType getMainType() |
1474 |
29 Nov 11 |
pawels |
696 |
{ |
1474 |
29 Nov 11 |
pawels |
697 |
return Plugin.MainType.EXPORT; |
1474 |
29 Nov 11 |
pawels |
698 |
} |
1474 |
29 Nov 11 |
pawels |
699 |
|
1474 |
29 Nov 11 |
pawels |
700 |
|
1474 |
29 Nov 11 |
pawels |
701 |
public boolean supportsConfigurations() |
1474 |
29 Nov 11 |
pawels |
702 |
{ |
1474 |
29 Nov 11 |
pawels |
703 |
return true; |
1474 |
29 Nov 11 |
pawels |
704 |
} |
1474 |
29 Nov 11 |
pawels |
705 |
|
1474 |
29 Nov 11 |
pawels |
706 |
|
1474 |
29 Nov 11 |
pawels |
707 |
public boolean requiresConfiguration() |
1474 |
29 Nov 11 |
pawels |
708 |
{ |
1474 |
29 Nov 11 |
pawels |
709 |
return false; |
1474 |
29 Nov 11 |
pawels |
710 |
} |
1474 |
29 Nov 11 |
pawels |
711 |
|
1474 |
29 Nov 11 |
pawels |
712 |
} |