Changeset 2031


Ignore:
Timestamp:
Sep 26, 2011, 5:01:21 PM (9 years ago)
Author:
robert@…
Message:

Updated visualization to enable a linechart and fixed some bugs

Location:
trunk
Files:
2 edited

Legend:

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

    r2029 r2031  
    641641          case "Subject":
    642642          case "subjects":
    643               return study?.samples?.parentSubject
     643              return study?.subjects
    644644          case "Sample":
    645645          case "samples":
     
    647647          case "Event":
    648648          case "events":
    649                return study?.samples?.parentEventGroup?.events?.flatten()
     649               return study?.events
    650650          case "SamplingEvent":
    651651          case "samplingEvents":
    652               return study?.samples?.parentEvent
     652              return study?.samplingEvents
    653653          case "Assay":
    654654          case "assays":
     
    839839                // Domainfield or memberclass
    840840                try{
    841                                         return determineCategoryFromClass(domainObjectCallback( parsedField.type )?.fields[parsedField.name].type)
     841                                        def field = domainObjectCallback( parsedField.type )?.declaredFields.find { it.name == parsedField.name };
     842                                        if( field ) {
     843                                                return determineCategoryFromClass( field.getType() )
     844                                        } else {
     845                                                log.error( "The user asked for field " + parsedField.type + " - " + parsedField.name + ", but it doesn't exist." );
     846                                        }
    842847                } catch(Exception e){
    843848                    log.error("VisualizationController: determineFieldType: "+e)
  • trunk/web-app/js/visualization.js

    r2022 r2031  
    211211                    showError(data.infoMessage,"message_warning");
    212212                }
     213               
    213214                // Handle erroneous data
    214                 /*if( !checkCorrectData( data.returnData ) ) {
     215                if( !checkCorrectData( data.returnData ) ) {
    215216                    showError( ["Unfortunately the server returned data in a format that we did not expect."], "message_error" );
     217                    $( "#menu_go" ).find("img.spinner").hide();
    216218                    return;
    217                 }*/
     219                }
    218220
    219221                // Retrieve the datapoints from the json object
     
    221223                var series = [];
    222224
    223 
    224225                var returnData = data.returnData;
    225226                $.each(returnData.series, function(idx, element ) {
    226                     dataPoints[ dataPoints.length ] = element.y;
    227                     series[ series.length ] = { "label": element.name };
     227                        if( element.y && element.y.length > 0 ) {
     228                            dataPoints[ dataPoints.length ] = element.y;
     229                            series[ series.length ] = { "label": element.name };
     230                        }
    228231                });
    229232
     233                // If no datapoints are found, return an error
     234                if( dataPoints.length == 0 ) {
     235                    showError( ["Unfortunately the server returned data without any measurements"], "message_error" );
     236                    $( "#menu_go" ).find("img.spinner").hide();
     237                    return;
     238                }
     239               
    230240                var xlabel = returnData[ "xaxis" ].unit=="" ? returnData[ "xaxis" ].title : returnData[ "xaxis" ].title + " (" + returnData[ "xaxis" ].unit + ")";
    231241                var ylabel = returnData[ "yaxis" ].unit=="" ? returnData[ "yaxis" ].title : returnData[ "yaxis" ].title + " (" + returnData[ "yaxis" ].unit + ")";
     
    233243                // TODO: create a chart based on the data that is sent by the user and the type of chart
    234244                // chosen by the user
    235                 visualization = $.jqplot('visualization', dataPoints, {
    236                     // Tell the plot to stack the bars.
    237                     stackSeries: true,
    238                     seriesDefaults:{
    239                         renderer:$.jqplot.BarRenderer,
    240                         rendererOptions: {
    241                                 // Put a 30 pixel margin between bars.
    242                                 barMargin: 30,
    243                                 // Highlight bars when mouse button pressed.
    244                                 // Disables default highlighting on mouse over.
    245                                 highlightMouseDown: true
    246                         },
    247                         pointLabels: {show: true}
    248                     },
    249                     series: series,
    250                     axes: {
    251                         xaxis: {
    252                                 renderer: $.jqplot.CategoryAxisRenderer,
    253                                 ticks: returnData.x,
    254                                 label: xlabel,
    255                                 labelRenderer: $.jqplot.CanvasAxisLabelRenderer
    256                         },
    257                         yaxis: {
    258                             label: ylabel,
    259                             labelRenderer: $.jqplot.CanvasAxisLabelRenderer
    260                         }
    261                     }
    262 
    263                 });
    264 
    265                 $( "#visualization" ).show();
     245                var plotOptions = null;
     246               
     247                switch( returnData.type ) {
     248                        case "horizontal_barchart":
     249                        case "scatterplot":
     250                                alert( "I'm sorry, this visualization type is not implemented yet.")
     251                                break;
     252                        case "linechart":
     253                        plotOptions = {
     254                            series: series,
     255                            axes: {
     256                                xaxis: {
     257                                        renderer: $.jqplot.CategoryAxisRenderer,
     258                                        ticks: returnData.series[ 0 ].x,        // Use the x-axis of the first serie
     259                                        label: xlabel,
     260                                        labelRenderer: $.jqplot.CanvasAxisLabelRenderer
     261                                },
     262                                yaxis: {
     263                                    label: ylabel,
     264                                    labelRenderer: $.jqplot.CanvasAxisLabelRenderer
     265                                }
     266                            }
     267                        };                             
     268                                break;
     269                        case "barchart":
     270                        plotOptions = {
     271                            // Tell the plot to stack the bars.
     272                            stackSeries: true,
     273                            seriesDefaults:{
     274                                renderer:$.jqplot.BarRenderer,
     275                                rendererOptions: {
     276                                        // Put a 30 pixel margin between bars.
     277                                        barMargin: 30,
     278                                        // Highlight bars when mouse button pressed.
     279                                        // Disables default highlighting on mouse over.
     280                                        highlightMouseDown: true
     281                                },
     282                                pointLabels: {show: true}
     283                            },
     284                            series: series,
     285                            axes: {
     286                                xaxis: {
     287                                        renderer: $.jqplot.CategoryAxisRenderer,
     288                                        ticks: returnData.series[ 0 ].x,                // Use the x-axis of the first serie
     289                                        label: xlabel,
     290                                        labelRenderer: $.jqplot.CanvasAxisLabelRenderer
     291                                },
     292                                yaxis: {
     293                                    label: ylabel,
     294                                    labelRenderer: $.jqplot.CanvasAxisLabelRenderer
     295                                }
     296                            }
     297
     298                        };                             
     299                               
     300                        case "table":
     301                                alert( "I'm sorry, this visualization type is not implemented yet.")
     302                                break;
     303                }
     304               
     305                // If a chart has been created, show it
     306                if( plotOptions != null ) {
     307                    visualization = $.jqplot('visualization', dataPoints, plotOptions );                       
     308                    $( "#visualization" ).show();
     309                }
     310
    266311                $( "#menu_go" ).find("img.spinner").hide();
    267312            }
     
    339384        {
    340385                "type": "barchart",
    341                 "x": [ "Q1", "Q2", "Q3", "Q4" ],
    342386                "xaxis": { "title": "quarter 2011", "unit": "" },
    343387                "yaxis": { "title": "temperature", "unit": "degrees C" },
     
    345389                        {
    346390                                "name": "series name",
     391                                "x": [ "Q1", "Q2", "Q3", "Q4" ],
    347392                                "y": [ 5.1, 3.1, 20.6, 15.4 ],
    348393                                "error": [ 0.5, 0.2, 0.4, 0.5 ]
     
    352397        */
    353398
    354         return ( "type" in data && "x" in data && "xaxis" in data && "yaxis" in data && "series" in data && $.isArray( data.series ) );
     399        return ( "type" in data && "xaxis" in data && "yaxis" in data && "series" in data && $.isArray( data.series ) );
    355400}
    356401
Note: See TracChangeset for help on using the changeset viewer.