source: trunk/grails-app/services/nl/tno/massSequencing/files/ZipService.groovy @ 58

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

Implemented importing of classifications

File size: 3.1 KB
Line 
1package nl.tno.massSequencing.files
2
3import java.io.BufferedWriter;
4import java.io.File;
5import java.io.Writer;
6import java.util.ArrayList;
7import java.util.List;
8import org.codehaus.groovy.grails.commons.ConfigurationHolder
9import java.util.zip.*
10
11class ZipService implements nl.tno.massSequencing.imports.Importer {
12        def fileService
13
14        static transactional = false
15
16        /**
17         * Determines whether a file can be processed.
18         * @param filetype      Filetype of the file
19         * @see determineFileType()
20         * @return
21         */
22        public boolean canParseFileType( String filetype ) {
23                switch( filetype ) {
24                        case "zip":
25                        case "gzip":
26                                return true;
27                        default:
28                                return false;
29                }
30        }
31
32        /**
33         * Parses the given ZIP or GZip file
34         *
35         * @param file                  File to parse
36         * @param filetype              Type of the given file
37         * @param onProgress    Closure to execute when progress indicators should be updated.
38         *                                              Has 2 parameters: progress that indicates the number of bytes that have been processed. The second parameter determines
39         *                                              the number of bytes that has to be processed extra after this action (e.g. when a zip file is extracted, the extracted
40         *                                              files should be added to the total number of bytes to be processed)
41         * @return                              Structure with information about the parsed files. The 'success' files are
42         *                                              moved to the given directory
43         *
44         * Examples:
45         *                      [filename: 'abc.fasta', type: FASTA, numSequences: 190]
46         *                      [filename: 'cde.qual', type: QUAL, numSequences: 140, avgQuality: 29]
47         *
48         *                      [filename: 'test.zip', type: ZIP, extraFiles: [newfile1.xls, newfile2.xls, newfile3.xls]]
49         *
50         *                      [filename: 'testing.xls', type: 'unknown', message: 'Type not recognized']
51         *
52         */
53        public Map parseFile( File file, String filetype, Closure onProgress ) {
54                def filename = file.getName();
55               
56                switch( filetype ) {
57                        case "zip":
58                                // ZIP files are extracted and appended to the filenames list.
59                                def newfiles = fileService.extractZip( file, onProgress );
60                                fileService.delete( filename );
61                               
62                                // Add new files to the list, in order for them to be processed later on
63                                if( newfiles ) {
64                                        return [ success: true, filename: filename, originalfilename: fileService.originalFilename( filename ), type: "zip", extraFiles: newfiles ];
65                                } else {
66                                        return [ success: false, filename: filename, originalfilename: fileService.originalFilename( filename ), type: "zip", message: 'Zip file could not be extracted' ];
67                                }
68                        case "gzip":
69                                // ZIP files are extracted and appended to the filenames list.
70                                def newfiles = fileService.extractGZip( file, onProgress );
71                                fileService.delete( filename);
72                               
73                                // Add new files to the list, in order for them to be processed later on
74                                if( newfiles ) {
75                                        return [ success: true, filename: filename, originalfilename: fileService.originalFilename( filename ), type: "zip", extraFiles: newfiles ];
76                                } else {
77                                        return [ success: false, filename: filename, originalfilename: fileService.originalFilename( filename ), type: "zip", message: 'Zip file could not be extracted' ];
78                                }
79                        default:
80                                return [ success: false, filename: filename, type: filetype, message: 'Filetype could not be parsed.' ]
81                }
82        }
83}
Note: See TracBrowser for help on using the repository browser.