Changeset 1997


Ignore:
Timestamp:
Sep 5, 2011, 5:46:32 PM (8 years ago)
Author:
taco@…
Message:

VisualizeController?.groovy, added optional infoMessage in returnobjects. Working on determining visualizationtypes

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/grails-app/controllers/dbnp/visualization/VisualizeController.groovy

    r1993 r1997  
    2424        def authenticationService
    2525        def moduleCommunicationService
     26    def infoMessage = ""
    2627
    2728        /**
     
    3435        def getStudies = {
    3536                def studies = Study.giveReadableStudies( authenticationService.getLoggedInUser() );
    36                 render studies as JSON
     37        returnResults(studies)
    3738        }
    3839
     
    4243
    4344                try{
     45            // TODO: fix this
    4446                        input_object = JSON.parse(params.get('data'))
    4547                        studies = input_object.get('studies').id
     
    9597                }
    9698
    97                 render fields as JSON
     99                returnResults(fields)
    98100        }
    99101
    100102        def getVisualizationTypes = {
     103        def inputData = parseGetDataParams();
     104        println "inputData: "+inputData
     105
     106
     107        // TODO: handle the case of multiple fields on an axis
     108        println "Checking type of row data"
     109        def rowType = determineFieldType(inputData.studyIds[0], inputData.rowIds[0])
     110        println "Checking type of column data"
     111        def columnType = determineFieldType(inputData.studyIds[0], inputData.columnIds[0])
     112
     113        println "getVisualizationTypes: row contains data of type "+rowType+" and column contains data of type "+columnType
     114
    101115                def types = [ [ "id": "barchart", "name": "Barchart"] ];
    102                 render types as JSON
     116                returnResults(types)
    103117        }
    104118
     
    273287                def returnData = formatData( groupedData, fields );
    274288
    275                 render returnData as JSON
     289                returnResults(returnData)
    276290        }
    277291
     
    410424                                                if( index > -1 ) {
    411425                                                        data << measurements[ index ];
    412                                                 } else {[ "x": inputData.columnIds[ 0 ], "y": inputData.rowIds[ 0 ] ]
     426                                                } else {
    413427                                                        data << null
    414428                                                }
     
    723737    }
    724738
     739    protected String determineFieldType(studyId, fieldId){
     740        // Parse the fieldId as given by the user
     741                def parsedField = parseFieldId( fieldId );
     742
     743        def study = Study.get(studyId)
     744        println "study: "+study+", parsedField: "+parsedField
     745
     746                def data = []
     747
     748                if( parsedField.source == "GSCF" ) {
     749            if(parsedField.id.isNumber()){
     750                // Templatefield
     751                // ask for tf by id, ask for .type
     752                println "GSCF, dunno yet"
     753            } else {
     754                // Domainfield or memberclass
     755                switch( parsedField.type ) {
     756                    case "Study":
     757                    case "studies":
     758                        def cat = determineCategoryFromClass(Study[parsedField.name].class)
     759                        println "parsedField.type: "+parsedField.type+", outcome: "+cat
     760                        return cat
     761                        break
     762                    case "Subject":
     763                    case "subjects":
     764                        def cat = determineCategoryFromClass(Subject[parsedField.name].class)
     765                        println "parsedField.type: "+parsedField.type+", outcome: "+cat
     766                        return cat
     767                        break
     768                    case "Sample":
     769                    case "samples":
     770                        def cat = determineCategoryFromClass(Sample[parsedField.name].class)
     771                        println "parsedField.type: "+parsedField.type+", outcome: "+cat
     772                        return cat
     773                        break
     774                    case "Event":
     775                    case "events":
     776                        def cat = determineCategoryFromClass(Event[parsedField.name].class)
     777                        println "parsedField.type: "+parsedField.type+", outcome: "+cat
     778                        return cat
     779                        break
     780                    case "SamplingEvent":
     781                    case "samplingEvents":
     782                        def cat = determineCategoryFromClass(SamplingEvent[parsedField.name].class)
     783                        println "parsedField.type: "+parsedField.type+", outcome: "+cat
     784                        return cat
     785                        break
     786                    case "Assay":
     787                    case "assays":
     788                        def cat = determineCategoryFromClass(Assay[parsedField.name].class)
     789                        println "parsedField.type: "+parsedField.type+", outcome: "+cat
     790                        return cat
     791                        break
     792                }
     793            }
     794
     795            // Check parsedField.id == number
     796                } else {
     797            data = getModuleData( study, study.getSamples(), parsedField.source, parsedField.name );
     798            def cat = determineCategoryFromData(data)
     799            return cat
     800                }
     801    }
     802
     803    protected String determineCategoryFromClass(inputObject){
     804        println "determineCategoryFromClass: "+inputObject+", class: "+inputObject.class
     805        if(inputObject==java.lang.String){
     806            return "cat"
     807            // TODO: make this a final
     808        } else {
     809            return "num"
     810            // TODO: make this a final
     811        }
     812    }
     813
     814    protected String determineCategoryFromData(inputObject){
     815        def results = []
     816        if(inputObject instanceof Collection){
     817            // More complex datatype, call outselves again
     818            inputObject.each {
     819                results << determineCategoryFromData(it)
     820            }
     821        } else {
     822            if(inputObject.toString().isDouble()){
     823                results << "num"
     824                // TODO: make this a final
     825            } else {
     826                results << "cat"
     827                // TODO: make this a final
     828            }
     829        }
     830
     831        results.unique()
     832
     833        if(results.size()>1){
     834            //log.error("VisualizeController: determineCategoryFromData: Category list contains more than one category! List: "+results+", inputObject: "+inputObject)
     835            results[0] = "cat"
     836            // TODO: make this a final
     837        }
     838
     839        return results[0]
     840    }
     841
     842    protected void returnResults(returnData){
     843        def results = [:]
     844        if(infoMessage!=""){
     845            results.put("infoMessage", returnData)
     846        }
     847        results.put("returnData", returnData)
     848        render results as JSON
     849    }
    725850}
Note: See TracChangeset for help on using the changeset viewer.