@@ -74,21 +74,7 @@ def submit(submission)
7474 )
7575 end
7676
77- {
78- first_name : user . first_name ,
79- last_name : user . last_name ,
80- email : user . email ,
81- organization_name : [ user . department , user . organization ] . compact_blank . join ( ", " ) ,
82- organization_url : user . organization_url
83- } . each . with_index 1 do |( key , value ) , i |
84- Dway . bioproject [ :submission_data ] . insert (
85- submission_id :,
86- data_name : key . to_s ,
87- data_value : value . to_s ,
88- form_name : "submitter" ,
89- t_order : i
90- )
91- end
77+ Dway . bioproject [ :submission_data ] . multi_insert submission_data_attrs ( submission , submission_id , doc )
9278 end
9379 end
9480
@@ -121,5 +107,220 @@ def modify_xml(doc, project_id, is_public)
121107
122108 doc
123109 end
110+
111+ def submission_data_attrs ( submission , submission_id , doc )
112+ user = submission . validation . user
113+
114+ [
115+ doc . at ( "/PackageSet/Package/Project/Project/ProjectDescr/Title" ) . then {
116+ [ "general_info" , "project_title" , _1 &.text ]
117+ } ,
118+
119+ doc . at ( "/PackageSet/Package/Project/Project/ProjectDescr/Description" ) . then {
120+ [ "general_info" , "public_description" , _1 &.text ]
121+ } ,
122+
123+ *doc . xpath ( "/PackageSet/Package/Project/Project/ProjectDescr/ExternalLink" ) . flat_map . with_index ( 1 ) { |link , i |
124+ url = link . at ( "URL" )
125+
126+ [
127+ [ "general_info" , "link_url.#{ i } " , url &.text ] ,
128+ [ "general_info" , "link_description.#{ i } " , link [ :label ] ]
129+ ]
130+ } ,
131+
132+ *doc . xpath ( "/PackageSet/Package/Project/Project/ProjectDescr/Grant" ) . flat_map . with_index ( 1 ) { |grant , i |
133+ title = grant . at ( "Title" )
134+ agency = grant . at ( "Agency" )
135+ abbr = grant . at ( "Agency/@abbr" )
136+
137+ [
138+ [ "general_info" , "grant_id.#{ i } " , grant [ :GrantId ] ] ,
139+ [ "general_info" , "grant_title.#{ i } " , title &.text ] ,
140+ [ "general_info" , "agency.#{ i } " , agency &.text ] ,
141+ [ "general_info" , "agency_abbreviation.#{ i } " , abbr &.text ]
142+ ]
143+ } ,
144+
145+ *doc . xpath ( "/PackageSet/Package/Project/Project/ProjectDescr/Publication" ) . map . with_index ( 1 ) { |publication , i |
146+ case publication . at ( "Reference/DbType" ) &.text
147+ when "ePubmed"
148+ [ "publication" , "pubmed_id.#{ i } " , publication [ :id ] ]
149+ when "eDOI"
150+ [ "publication" , "doi.#{ i } " , publication [ :id ] ]
151+ else
152+ raise "Unsupported publication type"
153+ end
154+ } ,
155+
156+ doc . at ( "/PackageSet/Package/Project/Project/ProjectDescr/Relevance" ) . then {
157+ next nil unless _1
158+
159+ if other = _1 . at ( "Other" )
160+ [ "general_info" , "relevance_description" , other . text ]
161+ else
162+ [ "general_info" , "relevance" , _1 . childeren . first . name ]
163+ end
164+ } ,
165+
166+ doc . at ( "/PackageSet/Package/Project/Project/ProjectDescr/LocusTagPrefix" ) . then {
167+ [ "project_type" , "locus_tag" , _1 &.text ]
168+ } ,
169+
170+ *doc . at ( "/PackageSet/Package/Project/Project/ProjectType/ProjectTypeSubmission/Target" ) . then {
171+ [
172+ [ "project_type" , "sample_code" , _1 &.[]( :sample_scope ) ] ,
173+ [ "project_type" , "material" , _1 &.[]( :material ) ] ,
174+ [ "project_type" , "capture" , _1 &.[]( :capture ) ]
175+ ]
176+ } ,
177+
178+ doc . at ( "/PackageSet/Package/Project/Project/ProjectType/ProjectTypeSubmission/Target/Organism" ) . then {
179+ tax_id = _1 &.[]( :taxID )
180+
181+ [ "target" , "taxonomy_id" , tax_id == "0" ? nil : tax_id ]
182+ } ,
183+
184+ doc . at ( "/PackageSet/Package/Project/Project/ProjectType/ProjectTypeSubmission/Target/Organism/OrganismName" ) . then {
185+ [ "target" , "organism_name" , _1 &.text ]
186+ } ,
187+
188+ doc . at ( "/PackageSet/Package/Project/Project/ProjectType/ProjectTypeSubmission/Target/Organism/Label" ) . then {
189+ [ "target" , "isolate_name_or_label" , _1 &.text ]
190+ } ,
191+
192+ doc . at ( "/PackageSet/Package/Project/Project/ProjectType/ProjectTypeSubmission/Target/Organism/Strain" ) . then {
193+ [ "target" , "strain_breed_cultivar" , _1 &.text ]
194+ } ,
195+
196+ doc . at ( "/PackageSet/Package/Project/Project/ProjectType/ProjectTypeSubmission/Target/Organism/BiologicalProperties/Morphology/Gram" ) . then {
197+ [ "target" , "prokaryote_gram" , _1 &.text ]
198+ } ,
199+
200+ doc . at ( "/PackageSet/Package/Project/Project/ProjectType/ProjectTypeSubmission/Target/Organism/BiologicalProperties/Morphology/Enveloped" ) . then {
201+ [ "target" , "prokaryote_enveloped" , _1 &.text ]
202+ } ,
203+
204+ *doc . xpath ( "/PackageSet/Package/Project/Project/ProjectType/ProjectTypeSubmission/Target/Organism/BiologicalProperties/Morphology/Shape" ) . map . with_index ( 1 ) { |shape , i |
205+ [ "target" , "prokaryote_shape.#{ i } " , shape . text ]
206+ } ,
207+
208+ doc . at ( "/PackageSet/Package/Project/Project/ProjectType/ProjectTypeSubmission/Target/Organism/BiologicalProperties/Morphology/Endospores" ) . then {
209+ [ "target" , "prokaryote_endospores" , _1 &.text ]
210+ } ,
211+
212+ doc . at ( "/PackageSet/Package/Project/Project/ProjectType/ProjectTypeSubmission/Target/Organism/BiologicalProperties/Morphology/Motility" ) . then {
213+ [ "target" , "prokaryote_motility" , _1 &.text ]
214+ } ,
215+
216+ doc . at ( "/PackageSet/Package/Project/Project/ProjectType/ProjectTypeSubmission/Target/Organism/BiologicalProperties/Environment/Salinity" ) . then {
217+ [ "target" , "environment_salinity" , _1 &.text ]
218+ } ,
219+
220+ doc . at ( "/PackageSet/Package/Project/Project/ProjectType/ProjectTypeSubmission/Target/Organism/BiologicalProperties/Environment/OxygenReq" ) . then {
221+ [ "target" , "environment_oxygen_requirement" , _1 &.text ]
222+ } ,
223+
224+ doc . at ( "/PackageSet/Package/Project/Project/ProjectType/ProjectTypeSubmission/Target/Organism/BiologicalProperties/Environment/OptimumTemperature" ) . then {
225+ [ "target" , "environment_optimum_temperature" , _1 &.text ]
226+ } ,
227+
228+ doc . at ( "/PackageSet/Package/Project/Project/ProjectType/ProjectTypeSubmission/Target/Organism/BiologicalProperties/Environment/TemperatureRange" ) . then {
229+ [ "target" , "environment_temperature_range" , _1 &.text ]
230+ } ,
231+
232+ doc . at ( "/PackageSet/Package/Project/Project/ProjectType/ProjectTypeSubmission/Target/Organism/BiologicalProperties/Environment/Habitat" ) . then {
233+ [ "target" , "environment_habitat" , _1 &.text ]
234+ } ,
235+
236+ doc . at ( "/PackageSet/Package/Project/Project/ProjectType/ProjectTypeSubmission/Target/Organism/BiologicalProperties/Phenotype/BioticRelationship" ) . then {
237+ [ "target" , "phenotype_biotic_relationship" , _1 &.text ]
238+ } ,
239+
240+ doc . at ( "/PackageSet/Package/Project/Project/ProjectType/ProjectTypeSubmission/Target/Organism/BiologicalProperties/Phenotype/TrophicLevel" ) . then {
241+ [ "target" , "phenotype_trophic_level" , _1 &.text ]
242+ } ,
243+
244+ doc . at ( "/PackageSet/Package/Project/Project/ProjectType/ProjectTypeSubmission/Target/Organism/BiologicalProperties/Phenotype/Disease" ) . then {
245+ [ "target" , "phenotype_disease" , _1 &.text ]
246+ } ,
247+
248+ doc . at ( "/PackageSet/Package/Project/Project/ProjectType/ProjectTypeSubmission/Target/Organism/Organization" ) . then {
249+ [ "target" , "cellularity" , _1 &.text ]
250+ } ,
251+
252+ doc . at ( "/PackageSet/Package/Project/Project/ProjectType/ProjectTypeSubmission/Target/Organism/Reproduction" ) . then {
253+ [ "target" , "reproduction" , _1 &.text ]
254+ } ,
255+
256+ *doc . xpath ( "/PackageSet/Package/Project/Project/ProjectType/ProjectTypeSubmission/Target/Organism/RepliconSet/Replicon" ) . flat_map . with_index ( 1 ) { |replicon , i |
257+ type = replicon . at ( "Type" )
258+ name = replicon . at ( "Name" )
259+ size = replicon . at ( "Size" )
260+ description = replicon . at ( "Description" )
261+
262+ [
263+ [ "target" , "replicons_order.#{ i } " , replicon [ :order ] ] ,
264+ [ "target" , "replicons_location.#{ i } " , type &.[]( :location ) ] ,
265+ [ "target" , "replicons_type_description.#{ i } " , type &.[]( :typeOtherDescr ) ] ,
266+ [ "target" , "replicons_location_description.#{ i } " , type &.[]( :locationOtherDescr ) ] ,
267+ [ "target" , "replicons_type.#{ i } " , type &.text ] ,
268+ [ "target" , "replicons_name.#{ i } " , name &.text ] ,
269+ [ "target" , "replicons_size_unit.#{ i } " , size &.[]( :units ) ] ,
270+ [ "target" , "replicons_size.#{ i } " , size &.text ] ,
271+ [ "target" , "replicons_description.#{ i } " , description &.text ]
272+ ]
273+ } ,
274+
275+ doc . at ( "/PackageSet/Package/Project/Project/ProjectType/ProjectTypeSubmission/Target/Organism/RepliconSet/Ploidy" ) . then {
276+ [ "target" , "ploidy" , _1 &.[]( :type ) ]
277+ } ,
278+
279+ *doc . at ( "/PackageSet/Package/Project/Project/ProjectType/ProjectTypeSubmission/Target/Organism/GenomeSize" ) . then {
280+ [
281+ [ "target" , "haploid_genome_size_unit" , _1 &.[]( :units ) ] ,
282+ [ "target" , "haploid_genome_size" , _1 &.text ]
283+ ]
284+ } ,
285+
286+ doc . at ( "/PackageSet/Package/Project/Project/ProjectType/ProjectTypeSubmission/Target/Provider" ) . then {
287+ [ "general_info" , "biomaterial_provider" , _1 &.text ]
288+ } ,
289+
290+ doc . at ( "/PackageSet/Package/Project/Project/ProjectType/ProjectTypeSubmission/Target/Description" ) . then {
291+ [ "target" , "label_description" , _1 &.text ]
292+ } ,
293+
294+ *doc . at ( "/PackageSet/Package/Project/Project/ProjectType/ProjectTypeSubmission/Method" ) . then {
295+ method_type = _1 &.[]( :method_type )
296+
297+ [
298+ [ "project_type" , "methodology" , method_type ] ,
299+ [ "project_type" , "methodology_description" , method_type == "eOther" ? _1 &.text : nil ]
300+ ]
301+ } ,
302+
303+ *doc . xpath ( "/PackageSet/Package/Project/Project/ProjectType/ProjectTypeSubmission/Objectives" ) . map . with_index ( 1 ) { |objectives , i |
304+ data = objectives . at ( "Data" )
305+
306+ [ "project_type" , "objective.#{ i } " , data &.[]( :data_type ) ]
307+ } ,
308+
309+ [ "submitter" , "first_name" , user . first_name ] ,
310+ [ "submitter" , "last_name" , user . last_name ] ,
311+ [ "submitter" , "email" , user . email ] ,
312+ [ "submitter" , "organization_name" , [ user . department , user . organization ] . compact_blank . join ( ", " ) ] ,
313+ [ "submitter" , "organization_url" , user . organization_url ] ,
314+ [ "submitter" , "data_release" , submission . visibility_public? ? "hup" : nil ]
315+ ] . compact . map . with_index ( 1 ) { |( form_name , data_name , data_value ) , i |
316+ {
317+ submission_id :,
318+ form_name :,
319+ data_name :,
320+ data_value :,
321+ t_order : i
322+ }
323+ }
324+ end
124325 end
125326end
0 commit comments