Changeset 145

Show
Ignore:
Timestamp:
27-09-11 16:20:01 (3 years ago)
Author:
m.s.vanvliet@…
Message:

first step in uploading and working with Feature lists (from Excel)

Location:
trunk
Files:
1 added
4 modified

Legend:

Unmodified
Added
Removed
  • trunk/grails-app/controllers/org/dbxp/metabolomicsModule/measurements/MeasurementPlatformVersionController.groovy

    r100 r145  
    11package org.dbxp.metabolomicsModule.measurements 
     2 
     3import org.dbxp.matriximporter.MatrixImporter 
    24 
    35class MeasurementPlatformVersionController { 
     
    68         
    79        /* 
    8         * Metabolomics MeasurementPlatformVersion page 
    9         * 
    10         * params.id is required to load the MeasurementPlatformVersion 
    11         */ 
     10         * Metabolomics MeasurementPlatformVersion page 
     11         *  
     12         * params.id is required to load the MeasurementPlatformVersion 
     13         */ 
    1214   def view = { 
    1315                if (!params.id) redirect(url: request.getHeader('Referer')) // id of an MeasurementPlatformVersion must be present 
     
    1517                [ measurementPlatformVersion: MeasurementPlatformVersion.get(params.id) ] 
    1618   } 
     19    
     20   /* 
     21    * Upload feature(s) file 
     22    */ 
     23   def featureFile = { 
     24                 
     25           def uploadedfile = request.getFile('featuresfile') 
     26            
     27           if (!uploadedfile.isEmpty() && params.mpv){ 
     28 
     29                        //determine extension of uploaded file 
     30                        def filename = uploadedfile.getOriginalFilename().toLowerCase() 
     31                        def ext = filename.tokenize(".")[-1] 
     32 
     33                        // select correct way of processing the file based on extension 
     34                        switch (ext) { 
     35 
     36                                case 'xls'              :       // uploaded xls 
     37                                case 'xlsx'             :       // uploaded xlsx 
     38                                         
     39                                                                        def mpv = MeasurementPlatformVersion.get(params.mpv as Long) 
     40                                                                 
     41                                                                        //move file to new location 
     42                                                                        def featuresFile = new File("${mpv?.featuresfile}") 
     43                                                                        uploadedfile.transferTo(featuresFile) 
     44                                                                         
     45                                                                        //read excel 
     46                                                                        def inputStream = new FileInputStream(featuresFile) 
     47                                                                        def (matrix, parseInfo) = MatrixImporter.instance.importInputStream(inputStream, [:], true) 
     48                                                                         
     49                                                                        if (!matrix) { 
     50                                                                                throw new RuntimeException("Error parsing file ${featuresFile.fileName}; No features found.") 
     51                                                                        } 
     52                                                                         
     53                                                                        println matrix.dump() 
     54                                                                        println matrix.size() 
     55                                                                        println matrix[1] 
     56                                                                         
     57                                                                        //clear old features 
     58                                                                         
     59                                                                        //insert MeasurementPlatformVersionFeatures entries 
     60                                                                 
     61                                                                         
     62                                                                        break 
     63                                default                 :       //unsupported file! 
     64                                        log.error("Unsupported filetype! ${filename}") 
     65                        } 
     66                } 
     67 
     68                //return to where you came from... 
     69                redirect(url: request.getHeader('Referer')) 
     70   } 
    1771} 
  • trunk/grails-app/domain/org/dbxp/metabolomicsModule/measurements/MeasurementPlatformVersion.groovy

    r95 r145  
    11package org.dbxp.metabolomicsModule.measurements 
     2 
     3import org.codehaus.groovy.grails.commons.ApplicationHolder 
    24 
    35class MeasurementPlatformVersion { 
     
    2123         * Transients 
    2224         **/ 
    23         static transients = ['features'] 
     25        static transients = ['features', 'featuresfolder', 'featuresfile'] 
    2426         
    2527        // fetch features linked to this version 
    2628        List getFeatures(){ return MeasurementPlatformVersionFeature.findAllByMeasurementPlatformVersion(this).collect { it.feature } }  
    2729         
     30        // returns the folder to store the feature file in 
     31        String getFeaturesfolder(){ 
     32                 
     33                //TODO: Make User/Group specific 
     34                 
     35                def featuresFolder =    "${ApplicationHolder.getApplication().getParentContext().getResource("/").getFile().toString()}/features/" + 
     36                                                                ("${this.id}-${this.measurementPlatform.id}-${this.versionNumber}").encodeAsMD5() 
     37                // make sure it exists 
     38                try { 
     39                        new File("${featuresFolder}").mkdirs() 
     40                } catch (e) { 
     41                        log.error ("Unable to create directory for storing the features! ${e}") 
     42                } 
     43                return featuresFolder 
     44        } 
     45         
     46        // returns the path+file of features file 
     47        String getFeaturesfile() { return "${this.featuresfolder}/.features" }  
    2848} 
  • trunk/grails-app/i18n/messages.properties

    r4 r145  
    3838default.edit.label=Edit {0} 
    3939 
     40#measurement platform 
     41mpv.feature.uploadfile.label = feature file 
     42mpv.feature.uploadfile.help = upload an Excel (.xls/.xlsx) with features 
     43 
    4044default.button.create.label=Create 
    4145default.button.edit.label=Edit 
  • trunk/grails-app/views/measurementPlatformVersion/view.gsp

    r102 r145  
    77                 
    88                <h2>${measurementPlatformVersion?.measurementPlatform?.name} (${measurementPlatformVersion?.versionNumber})</h2>         
     9         
     10                <h2> 
     11                        <g:if test="${measurementPlatformVersion?.features}"> 
     12                                Update existing 
     13                        </g:if> 
     14                        <g:else> 
     15                                Upload new 
     16                        </g:else> 
     17                        Features 
     18                </h2> 
     19                <g:uploadForm controller="measurementPlatformVersion" action="featureFile" name="featureUpload"> 
     20                        <input type="hidden" name="mpv" value="${measurementPlatformVersion.id}" /> 
     21                        <g:message code="mpv.feature.uploadfile.label" /> : <input type="file" name="featuresfile" /> 
     22                        <g:submitButton name="submit" value="submit" /> 
     23                </g:uploadForm>                                          
    924                 
    10                 <h2>Features</h2> 
    11                 <ul>             
    12                         <g:each in="${measurementPlatformVersion?.features}" var="feature"> 
    13                                 <li>${feature.label}</li> 
    14                         </g:each> 
    15                 </ul>            
     25                <g:if test="${measurementPlatformVersion?.features}"> 
     26                        <h2>Features</h2> 
     27                        <ul>             
     28                                <g:each in="${measurementPlatformVersion?.features}" var="feature"> 
     29                                        <li>${feature.label} ${feature.props}</li> 
     30                                </g:each> 
     31                        </ul> 
     32                </g:if>          
    1633        </body> 
    1734</html>