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

Last change on this file since 52 was 52, checked in by robert@…, 9 years ago
  • Updated a bug on production with org.apache.tools.zip
  • Added tooltips to all icons
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                        e.printStackTrace();
65                }
66        }
67
68        /**
69         * Shows a form to edit the specified assaySample in dialog mode
70         */
71        def editForm = {
72                // load assaySample with id specified by param.id
73                AssaySample assaySample = AssaySample.get( params.id as long );
74
75                if( !assaySample ) {
76                        render "Sample not found";
77                        return
78                }
79
80                if (!assaySample.assay.study.canWrite( session.user ) ) {
81                        flash.error = "You don't have the right authorizaton to access sample " + assaySample.sample.name
82                        redirect(controller: params.parent ?: "run" )
83                        return null
84                }
85
86                [parent: params.parent ?: "run", parentId: params.parentId ?: assaySample.run?.id, assaySample: assaySample]
87        }
88
89        def update = {
90                // load assaySample with id specified by param.id
91                AssaySample assaySample = AssaySample.get( params.id as long );
92
93                if( !assaySample) {
94                        redirect(controller: params.parent ?: "run", action: 'list')
95                        return
96                }
97
98                assaySample.properties = params.sample
99
100                if( assaySample.save() ) {
101                        flash.message = "Sample succesfully saved";
102                } else {
103                        flash.error = "Sample could not be saved: " + assaySample.getErrors();
104                }
105
106                redirect( controller: params.parent ?: "run", action: 'show', id: params.parentId ?: assaySample.run?.id )
107        }
108
109        protected List getAssaySamples( params ) {
110                def ids = params.list( 'ids' );
111
112                ids = ids.findAll { it.isLong() }.collect { Long.parseLong( it ) }
113
114                if( !ids ) {
115                        def message = "No assaysample ids given"
116                        flash.error = message
117                        redirect( controller: "run", action: "index" );
118                        return;
119                }
120
121                return ids.collect { id -> AssaySample.get( id ) }.findAll{ it }
122        }
123}
Note: See TracBrowser for help on using the repository browser.