source: trunk/grails-app/domain/nl/tno/metagenomics/Run.groovy @ 28

Last change on this file since 28 was 28, checked in by robert@…, 8 years ago

Renamed module to massSequencing

File size: 2.8 KB
Line 
1package nl.tno.massSequencing
2
3import nl.tno.massSequencing.auth.User
4import org.codehaus.groovy.grails.commons.ConfigurationHolder
5
6/**
7 * Holds data belonging to a sequencing run
8 *
9 * @author Robert Horlings (robert@isdat.nl)
10 *
11 */
12class Run {
13        def fileService
14
15        String  name
16        Date    date
17        String  machine
18        String  supplier
19        String  parameterFile
20
21        static hasMany = [assaySamples: AssaySample, assays: Assay]
22        static belongsTo = Assay        // Only used to determine the owner of the many-to-many relationship assay-run
23
24        static mapping = {
25                columns {
26                        name index:'runname_idx'
27                }
28        }
29        static constraints = {
30                name(unique:true)
31                date(nullable:true)
32                machine(nullable:true)
33                supplier(nullable:true)
34                parameterFile(nullable:true)
35        }
36
37        def beforeDelete = {
38                // Remove the file if the object is deleted
39                if( this.parameterFile )
40                        fileService.delete( this.parameterFile, fileService.absolutePath( ConfigurationHolder.config.massSequencing.fileDir ) )
41        }
42
43        /**
44         * Sets the properties of this run from a form
45         * @param params
46         * @return
47         */
48        public setPropertiesFromForm( params ) {
49                this.properties = params.run
50
51                // Enter date or default NULL
52                if( params.run_date ) {
53                        this.date = Date.parse( "yyyy-mm-dd", params.run_date );
54                } else {
55                        this.date = null
56                }
57
58                // Enter filename if needed
59                if( params.parameterFile && params.parameterFile != this.parameterFile ) {
60                        this.parameterFile = fileService.handleUploadedFile(
61                                        fileService.get( params.parameterFile ),
62                                        "",
63                                        fileService.absolutePath( ConfigurationHolder.config.massSequencing.fileDir )
64                                        );
65                }
66        }
67
68        /**
69         * Returns the number of files in the system, belonging to this run
70         *
71         * @return
72         */
73        public int numFiles() {
74                if( !assaySamples )
75                        return 0
76
77                int numFiles = 0;
78                assaySamples.each { numFiles += it.numFiles() }
79
80                return numFiles;
81        }
82
83        /**
84         * Returns the number of sequences in the files in the system, belonging to this run
85         *
86         * @return
87         */
88        public long numSequences() {
89                if( !assaySamples )
90                        return 0
91
92                long numSequences = 0;
93                assaySamples.each { numSequences += it.numSequences() }
94
95                return numSequences;
96        }
97
98        /**
99         * Returns the assaySamples associated with this run
100         *
101         * @return
102         */
103        public ArrayList samples( def assayId ) {
104                if( !assaySamples )
105                        return []
106
107                def list = []
108                assaySamples.each {
109                        if( it.assay.id == assayId )
110                                list << it
111                }
112
113                return list.unique().toList();
114        }
115       
116        /**
117         * Returns true if this run can be deleted
118         *
119         * @return
120         */
121        public boolean deletable( User u ) {
122                // Don't remove runs for which data exists
123                if( this.assaySamples*.sequenceData.flatten().size() ) {
124                        return false;
125                }
126
127                // Check whether the user has sufficient privileges to remove the run from all assays
128                def hasPrivileges = true;
129                assays.each {
130                        if( !it.study.canWrite( u ) )
131                                hasPrivileges = false
132                }
133               
134                return hasPrivileges
135        }
136}
Note: See TracBrowser for help on using the repository browser.