source: trunk/grails-app/domain/nl/tno/massSequencing/SequenceData.groovy @ 59

Last change on this file since 59 was 59, checked in by robert@…, 9 years ago
  • Improved speed by using ajax calls in pagination
  • Importing taxonomy files now works by adding it to sequenceData objects
File size: 2.4 KB
Line 
1package nl.tno.massSequencing
2
3import org.codehaus.groovy.grails.commons.ConfigurationHolder
4
5class SequenceData {
6        def fileService
7       
8        String sequenceFile = ''
9        String qualityFile = ''
10        Long numSequences = 0L
11        Float averageQuality = 0.0
12
13        static belongsTo = [sample: AssaySample]
14        static constraints = {
15                qualityFile(nullable: true)
16                numSequences(nullable: true)
17                averageQuality(nullable: true)
18        }
19
20        /**
21         * Returns the number of files in this data object.
22         * @return
23         */
24        public int numFiles() {
25                int number = 0;
26                if( sequenceFile != null && sequenceFile != "" )
27                        number++;
28
29                if( qualityFile != null && qualityFile != "" )
30                        number++;
31
32                return number;
33        }
34       
35       
36        /**
37         * Returns the number of quality scores in this data object. This equals
38         * the number of sequences iff a quality score is attached to this object
39         *
40         * @return      Number of quality scores in this object
41         */
42        public int numQualScores() {
43                if( qualityFile != null )
44                        return numSequences
45                else
46                        return 0;
47        }
48       
49        def beforeDelete = {
50                def permanentDir = fileService.absolutePath( ConfigurationHolder.config.massSequencing.fileDir.toString() )
51                if( sequenceFile ) {
52                        fileService.delete( sequenceFile, permanentDir )
53                }
54
55                if( qualityFile )
56                        fileService.delete( qualityFile, permanentDir )
57               
58                       
59                // Remove all sequence objects referencing this sequenceData object
60                Sequence.executeUpdate( "DELETE FROM Sequence s WHERE s.sequenceData = ?", [this])
61
62                // Reset statistics of the assay sample, to ensure the deleted files are removed from statistics
63                sample?.resetStats();
64               
65                return true;
66        }
67       
68        public SequenceData clone() {
69                // Copy the files to a new name
70                def permanentDir = fileService.absolutePath( ConfigurationHolder.config.massSequencing.fileDir.toString() )
71               
72                def newSequenceFileName = sequenceFile;
73                if( this.sequenceFile ) {
74                        newSequenceFileName = fileService.getUniqueFilename( this.sequenceFile, permanentDir );
75                        fileService.copy( sequenceFile, newSequenceFileName, permanentDir );
76                }
77
78                def newQualityFileName = qualityFile;
79                if( this.qualityFile ) {
80                        newQualityFileName = fileService.getUniqueFilename( this.qualityFile, permanentDir );
81                        fileService.copy( qualityFile, newQualityFileName, permanentDir );
82                }
83
84                def sd = new SequenceData( 
85                        sequenceFile: newSequenceFileName, 
86                        qualityFile: newQualityFileName, 
87                        numSequences: this.numSequences,
88                        averageQuality: this.averageQuality
89                );
90       
91                if( this.sample )
92                        this.sample.addToSequenceData( sd );
93                       
94                return sd;
95        }
96}
Note: See TracBrowser for help on using the repository browser.