Changeset 1908 for trunk/grails-app


Ignore:
Timestamp:
Jun 1, 2011, 4:05:21 PM (8 years ago)
Author:
robert@…
Message:

Improvements in querying in order to be able to refine searches in a module.

Location:
trunk/grails-app
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/grails-app/controllers/dbnp/query/AdvancedQueryController.groovy

    r1800 r1908  
    33import dbnp.modules.*
    44import org.dbnp.gdt.*
    5 
    6 // TODO: Make use of the searchable-plugin or Lucene possibilities instead of querying the database directly
     5import dbnp.studycapturing.*;
    76
    87/**
     
    2625                        criteria = parseCriteria( params.criteria, false )
    2726                }
    28                 [searchModes: SearchMode.values(), entitiesToSearchFor: entitiesToSearchFor, searchableFields: getSearchableFields(), criteria: criteria]
     27                [searchModes: SearchMode.values(), entitiesToSearchFor: entitiesToSearchFor, searchableFields: getSearchableFields(), criteria: criteria, previousSearches: session.queries ]
    2928        }
    3029
     
    234233                def queryId = saveSearch( combined );
    235234                redirect( action: "show", id: queryId );
     235        }
     236       
     237        /**
     238         * Registers a search from a module with GSCF, in order to be able to refine the searches
     239         */
     240        def refineExternal = {
     241                // Determine parameters and retrieve objects based on the tokens
     242                def name = params.name
     243                def url = params.url
     244                def entity = params.entity
     245                def tokens = params.list( 'tokens' );
     246                def results
     247               
     248                switch( entity ) {
     249                        case "Study":
     250                                results = Study.findAll( "from Study s where s.studyUUID IN (:tokens)", [ 'tokens': tokens ] )
     251                                break;
     252                        case "Assay":
     253                                results = Assay.findAll( "from Assay a where a.assayUUID IN (:tokens)", [ 'tokens': tokens ] )
     254                                break;
     255                        case "Sample":
     256                                results = Sample.findAll( "from Sample s where s.sampleUUID IN (:tokens)", [ 'tokens': tokens ] )
     257                                break;
     258                        default:
     259                                response.sendError( 400 );
     260                                render "The given entity is not supported. Choose one of Study, Assay or Sample"
     261                                return;
     262                }
     263               
     264                // Register and save search
     265                Search s = Search.register( name, url, entity, results );
     266                int searchId = saveSearch( s );
     267               
     268                println "Params: " + params.url
     269                println "Search: " + s.url
     270               
     271                // Redirect to the search screen
     272                def params = [
     273                        "criteria.0.entityfield": s.entity,
     274                        "criteria.0.operator": "in",
     275                        "criteria.0.value": searchId
     276                ];
     277
     278                redirect( action: "index", params: params)
    236279        }
    237280
     
    449492
    450493                s.id = id;
     494               
     495                if( !s.url )
     496                        s.url = g.createLink( controller: "advancedQuery", action: "show", id: id );
     497               
    451498                session.queries[ id ] = s;
    452499
     
    547594                                                module: "gscf",
    548595                                                name:"simpletox",
     596                                                type: "export",
    549597                                                description: "Export as SimpleTox",
    550598                                                url: createLink( controller: "exporter", action: "export", params: [ 'format': 'list', 'ids' : ids ] ),
     
    554602                                                module: "gscf",
    555603                                                name:"excel",
     604                                                type: "export",
    556605                                                description: "Export as CSV",
    557606                                                url: createLink( controller: "study", action: "exportToExcel", params: [ 'format': 'list', 'ids' : ids ] ),
     
    570619                                                module: "gscf",
    571620                                                name:"excel",
     621                                                type: "export",
    572622                                                description: "Export as CSV",
    573623                                                url: createLink( controller: "assay", action: "exportToExcel", params: [ 'format': 'list', 'ids' : ids ] ),
     
    618668                                                                        module: moduleName,
    619669                                                                        name: action.name,
     670                                                                        type: action.type ?: 'default',
    620671                                                                        description: action.description + " (" + moduleName + ")",
    621672                                                                        url: url + "&" + paramString,
  • trunk/grails-app/views/advancedQuery/_criteria.gsp

    r1717 r1908  
    99                                <span class="value">
    1010                                        <g:if test="${criterion.value != null && criterion.value instanceof Search}">
    11                                                 <g:link action="show" id="${criterion.value.id}">${criterion.value}</g:link>
     11                                                <g:link url="${criterion.value.url}">${criterion.value.toString()}</g:link>
    1212                                        </g:if>
    1313                                        <g:else>
  • trunk/grails-app/views/advancedQuery/_resultbuttons.gsp

    r1798 r1908  
     1<%
     2        def refineActions = actions.findAll { it.type == "refine" };
     3        def otherActions = actions.findAll { it.type != "refine" };
     4%>
    15<p class="options multiple">
    26        <g:if test="${search.getNumResults() == 0}">
     
    812        <br />
    913       
     14        <g:each in="${refineActions}" var="action">
     15                <g:if test="${search.getNumResults() == 0}">
     16                        <a href="#" onClick="return false;" class="refineSearch ${action.name} disabled">${action.description}</a>
     17                </g:if>
     18                <g:else>
     19                        <a class="refineSearch ${action.name}" href="${action.url}" onClick="performAction( $('form#results'), '${action.name.encodeAsJavaScript()}', '${action.module.encodeAsJavaScript()}', '${action.submitUrl.encodeAsJavaScript()}', true ); return false;">${action.description}</a>
     20                </g:else>
     21                <br />
     22        </g:each>
     23       
    1024        <g:link class="search" action="index">Search again</g:link><br />
    1125        <g:link class="discard" action="discard" id="${queryId}">Discard results</g:link><br />
     
    1327</p>
    1428<p class="options multiple">
    15         <g:each in="${actions}" var="action">
     29        <g:each in="${otherActions}" var="action">
    1630                <g:if test="${search.getNumResults() == 0}">
    1731                        <a href="#" onClick="return false;" class="performAction ${action.name} disabled">${action.description}</a>
    1832                </g:if>
    1933                <g:else>
    20                         <a class="performAction ${action.name}" href="${action.url}" onClick="performAction( $('form#results'), '${action.name}', '${action.module}', '${action.submitUrl}' ); return false;">${action.description}</a>
     34                        <a class="performAction ${action.name}" href="${action.url}" onClick="performAction( $('form#results'), '${action.name.encodeAsJavaScript()}', '${action.module.encodeAsJavaScript()}', '${action.submitUrl.encodeAsJavaScript()}' ); return false;">${action.description}</a>
    2135                </g:else>
    2236                <br />
  • trunk/grails-app/views/advancedQuery/_resultsform.gsp

    r1581 r1908  
    22        <input type="hidden" name="actionName" value="" />
    33        <input type="hidden" name="moduleName" value="" />
     4        <input type="hidden" name="entity" value="${search.entity}" />
     5        <input type="hidden" name="name" value="${search.toString()}" />
     6        <input type="hidden" name="url" value="${search.url}" />
    47        <input type="hidden" name="queryId" value="${search.id}" />
    58</form>
  • trunk/grails-app/views/advancedQuery/assayresults.gsp

    r1875 r1908  
    1212<body>
    1313
    14 <h1>Search results</h1>
     14<h1>Search results: ${search.toString()}</h1>
    1515
    1616<div class="searchoptions">
  • trunk/grails-app/views/advancedQuery/index.gsp

    r1879 r1908  
     1<%@ page import="dbnp.query.Operator" %>
    12<html>
    23<head>
     
    4647                        $(function() {
    4748                                <g:each in="${criteria}" var="criterion">
    48                                         showCriterium("${criterion.entityField().encodeAsJavaScript()}", "${criterion.value.toString().encodeAsJavaScript()}", "${criterion.operator.toString().encodeAsJavaScript()}");
     49                                        <g:if test="${criterion.operator == Operator.insearch}">
     50                                                        /* ${previousSearches?.getAt( criterion.value )?.url} */
     51                                                        showCriterium(
     52                                                                "${criterion.entityField().encodeAsJavaScript()}",
     53                                                                {
     54                                                                        'id': ${criterion.value},
     55                                                                        'description': "<g:if test="${previousSearches?.getAt( criterion.value )}">${previousSearches[ criterion.value ].toString().encodeAsJavaScript()}</g:if><g:else>Search ${criterion.value}</g:else>",
     56                                                                        'url': "<g:if test="${previousSearches?.getAt( criterion.value )?.url}">${previousSearches[ criterion.value ].url.encodeAsJavaScript()}</g:if><g:else><g:createLink controller='advancedQuery' action='show' id="${criterion.value}" /></g:else>"
     57                                                                },
     58                                                                "${criterion.operator.toString().encodeAsJavaScript()}"
     59                                                        );
     60                                        </g:if>
     61                                        <g:else>
     62                                                showCriterium("${criterion.entityField().encodeAsJavaScript()}", "${criterion.value.toString().encodeAsJavaScript()}", "${criterion.operator.toString().encodeAsJavaScript()}");
     63                                        </g:else>
    4964                                </g:each>
    5065                                                       
  • trunk/grails-app/views/advancedQuery/list.gsp

    r1581 r1908  
    6363                                                <span class="value">
    6464                                                        <g:if test="${criterion.value instanceof Search}">
    65                                                                 <g:link action="show" id="${criterion.value.id}">${criterion.value}</g:link>
     65                                                                <a href="${criterion.value.url}">${criterion.value?.toString()}</a>
    6666                                                        </g:if>
    6767                                                        <g:else>
  • trunk/grails-app/views/advancedQuery/sampleresults.gsp

    r1875 r1908  
    1212<body>
    1313
    14 <h1>Query results</h1>
     14<h1>Query results: ${search.toString()}</h1>
    1515
    1616<div class="searchoptions">
  • trunk/grails-app/views/advancedQuery/studyresults.gsp

    r1875 r1908  
    1212<body>
    1313
    14 <h1>Query results</h1>
     14<h1>Query results: ${search.toString()}</h1>
    1515
    1616<div class="searchoptions">
Note: See TracChangeset for help on using the changeset viewer.