source: trunk/grails-app/controllers/nl/tno/massSequencing/AssaySampleController.groovy @ 49

Last change on this file since 49 was 49, checked in by robert@…, 9 years ago
  • Added sequence length histograms
  • Fixed bugs in files that remained on the file system after uploading (while they shouldn't)
  • Added extra options in run- and assay screens
File size: 3.1 KB
Line 
1package nl.tno.massSequencing
2
3import java.util.List;
4
5class AssaySampleController {
6        def fastaService
7
8        /**
9         * Shows information about this assaySample in dialog style
10         */
11        def show = {
12                AssaySample assaySample = AssaySample.get( params.id as long );
13
14                if( !assaySample ) {
15                        render "Sample not found";
16                        return
17                }
18
19                if (!assaySample.assay.study.canRead( session.user ) ) {
20                        flash.error = "You don't have the right authorizaton to access sample " + assaySample.sample.name
21                        redirect(controller: 'study')
22                        return null
23                }
24
25
26                [assaySample: assaySample, entityType: params.entityType]
27        }
28
29        def sequenceLengthHistogram = {
30                def id = params.long( 'id' );
31                def assaySample = id ? AssaySample.get( id ) : null
32
33                if( !id || !assaySample ) {
34                        flash.message = "No sample selected";
35                        redirect( action: "index" );
36                        return;
37                }
38
39                [ assaySample: assaySample, histogram: fastaService.sequenceLengthHistogram( [assaySample] ) ]
40        }
41
42        /**
43         * Exports data about one or more runs in fasta format
44         */
45        def exportAsFasta = {
46                def assaySamples = getAssaySamples( params );
47                def name
48
49                if( assaySamples?.size() == 0 ) {
50                        flash.error = "No samples selected";
51                        redirect( action: "list" );
52                        return;
53                }
54
55                name = "samples";
56
57                // Export the sequences and quality scores
58                response.setHeader "Content-disposition", "attachment; filename=${name}.zip"
59                try {
60                        fastaService.export( assaySamples.unique(), response.getOutputStream() );
61                        response.outputStream.flush();
62                } catch( Exception e ) {
63                        log.error( "Exception occurred during export of sequences. Probably the user has cancelled the download." );
64                }
65        }
66
67        /**
68         * Shows a form to edit the specified assaySample in dialog mode
69         */
70        def editForm = {
71                // load assaySample with id specified by param.id
72                AssaySample assaySample = AssaySample.get( params.id as long );
73
74                if( !assaySample ) {
75                        render "Sample not found";
76                        return
77                }
78
79                if (!assaySample.assay.study.canWrite( session.user ) ) {
80                        flash.error = "You don't have the right authorizaton to access sample " + assaySample.sample.name
81                        redirect(controller: params.parent ?: "run" )
82                        return null
83                }
84
85                [parent: params.parent ?: "run", parentId: params.parentId ?: assaySample.run?.id, assaySample: assaySample]
86        }
87
88        def update = {
89                // load assaySample with id specified by param.id
90                AssaySample assaySample = AssaySample.get( params.id as long );
91
92                if( !assaySample) {
93                        redirect(controller: params.parent ?: "run", action: 'list')
94                        return
95                }
96
97                assaySample.properties = params.sample
98
99                if( assaySample.save() ) {
100                        flash.message = "Sample succesfully saved";
101                } else {
102                        flash.error = "Sample could not be saved: " + assaySample.getErrors();
103                }
104
105                redirect( controller: params.parent ?: "run", action: 'show', id: params.parentId ?: assaySample.run?.id )
106        }
107
108        protected List getAssaySamples( params ) {
109                def ids = params.list( 'ids' );
110
111                ids = ids.findAll { it.isLong() }.collect { Long.parseLong( it ) }
112
113                if( !ids ) {
114                        def message = "No assaysample ids given"
115                        flash.error = message
116                        redirect( controller: "run", action: "index" );
117                        return;
118                }
119
120                return ids.collect { id -> AssaySample.get( id ) }.findAll{ it }
121        }
122}
Note: See TracBrowser for help on using the repository browser.