Ignore:
Timestamp:
Feb 2, 2011, 4:40:22 PM (10 years ago)
Author:
robert@…
Message:

Implemented saving of queries

Location:
trunk/grails-app/views/advancedQuery
Files:
3 added
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/grails-app/views/advancedQuery/index.gsp

    r1430 r1482  
    66        <link rel="stylesheet" href="<g:resource dir="css" file="advancedQuery.css" />" type="text/css"/>
    77        <g:javascript src="advancedQuery.js" />
     8        <script type="text/javascript">
     9                // Make a list of fields to search in
     10                var queryableFields = [
     11                        <g:set var="j" value="${0}" />
     12                        <g:each in="${searchableFields}" var="entity">
     13                                <g:each in="${entity.value}" var="field">
     14                                        <g:if test="${j > 0}">,</g:if>
     15                                        {
     16                                                value: "${entity.key.toString().encodeAsJavaScript()}.${field.toString().encodeAsJavaScript()}",
     17                                                show: "${(field[0].toUpperCase() + field[1..-1]).encodeAsJavaScript()}",
     18                                                label: "${entity.key.toString().encodeAsJavaScript()}.${field.toString().encodeAsJavaScript()}",
     19                                                entity: "${entity.key.toString().encodeAsJavaScript()}"
     20                                        }
     21                                        <g:set var="j" value="1" />
     22                                </g:each>
     23                        </g:each>
     24                ];
     25       
     26                <g:if test="${criteria && criteria.size() > 0}">
     27                        // Show given criteria
     28                        $(function() {
     29                                <g:each in="${criteria}" var="criterion">
     30                                        showCriterium("${criterion.entityField().encodeAsJavaScript()}", "${criterion.value.toString().encodeAsJavaScript()}", "${criterion.operator.toString().encodeAsJavaScript()}");
     31                                </g:each>
     32                                showHideNoCriteriaItem();
     33                        });
     34                </g:if>
     35        </script>
    836</head>
    937<body>
     
    1139<h1>Query database</h1>
    1240
     41<g:if test="${flash.error}">
     42        <div class="error">
     43                ${flash.error.toString().encodeAsHTML()}
     44        </div>
     45</g:if>
     46<g:if test="${flash.message}">
     47        <div class="message">
     48                ${flash.message.toString().encodeAsHTML()}
     49        </div>
     50</g:if>
     51
     52<a href="<g:createLink action="list" />">View previous queries</a>
     53
    1354<form id="input_criteria">
    1455        <h2>Add criterium</h2>
    15         <p>
     56        <p class="explanation">
    1657                N.B. Comparing numerical values is done without taking into
    1758                account the units. E.g. a weight of 1 kg equals 1 grams.
    1859        </p>
    1960        <label for="field">Field</label>
    20                 <select name="field">
     61                <select name="field" id="queryFieldSelect">
    2162                        <option value=""></option>
    2263                        <g:each in="${searchableFields}" var="entity">
     
    2970                                </optgroup>
    3071                        </g:each>
    31                 </select> 
     72                </select>
    3273               
    3374        <label for="value">Comparison</label>
  • trunk/grails-app/views/advancedQuery/results.gsp

    r1430 r1482  
    55        <title>Query results</title>
    66        <link rel="stylesheet" href="<g:resource dir="css" file="advancedQuery.css" />" type="text/css"/>
    7         <g:javascript src="advancedQuery.js" />
    87</head>
    98<body>
     
    1716        <g:each in="${search.getCriteria()}" var="criterion">
    1817                <li>
    19                         <span class="entityfield">${criterion.entity}.${criterion.field}</span>
     18                        <span class="entityfield">${criterion.entityField()}</span>
    2019                        <span class="operator">${criterion.operator}</span>
    2120                        <span class="value">${criterion.value}</span>
     
    2827
    2928<g:if test="${search.getNumResults() > 0}">
    30 
     29        <%
     30                def resultFields = search.getShowableResultFields();
     31                def extraFields = resultFields[ search.getResults()[ 0 ].id ]?.keySet();
     32        %>
    3133        <table id="searchresults">
    3234                <thead>
     
    3436                                <th>Type</th>
    3537                                <th>Id</th>
     38                                <g:each in="${extraFields}" var="fieldName">
     39                                        <th>${fieldName}</th>
     40                                </g:each>
    3641                        </tr>
    3742                </thead>
     
    4045                                <td>${search.entity}</td>
    4146                                <td>${result.id}</td>
     47                                <g:each in="${extraFields}" var="fieldName">
     48                                        <td>
     49                                                <%
     50                                                        def fieldValue = resultFields[ result.id ]?.get( fieldName );
     51                                                        if( fieldValue ) {
     52                                                                if( fieldValue instanceof Collection )
     53                                                                        fieldValue = fieldValue.collect { it.toString() }.findAll { it }.join( ', ' );
     54                                                                else
     55                                                                        fieldValue = fieldValue.toString();
     56                                                        }
     57                                                %>
     58                                                ${fieldValue}
     59                                        </td>
     60                                </g:each>
     61
    4262                        </tr>
    4363                </g:each>
    4464        </table>
    4565</g:if>
    46 <p>
    47         <g:link action="index">Search again</g:link>
    48 </p>
     66<g:render template="resultbuttons" model="[queryId: queryId]" />
     67
    4968</body>
    5069</html>
  • trunk/grails-app/views/advancedQuery/sampleresults.gsp

    r1458 r1482  
    55        <title>Query results</title>
    66        <link rel="stylesheet" href="<g:resource dir="css" file="advancedQuery.css" />" type="text/css"/>
    7         <g:javascript src="advancedQuery.js" />
    87</head>
    98<body>
     
    1211
    1312<p>
    14         Your search for studies with:
     13        Your search for samples with:
    1514</p>
    16 <ul id="criteria">
    17         <g:each in="${search.getCriteria()}" var="criterion">
    18                 <li>
    19                         <span class="entityfield">${criterion.entity}.${criterion.field}</span>
    20                         <span class="operator">${criterion.operator}</span>
    21                         <span class="value">${criterion.value}</span>
    22                 </li>
    23         </g:each>
    24 </ul>
     15<g:render template="criteria" model="[criteria: search.getCriteria()]" />
    2516<p>
    2617        resulted in ${search.getNumResults()} <g:if test="${search.getNumResults() == 1}">sample</g:if><g:else>samples</g:else>.
    2718</p>
    2819
    29 
    3020<g:if test="${search.getNumResults() > 0}">
    31 
     21        <%
     22                def resultFields = search.getShowableResultFields();
     23                def extraFields = resultFields[ search.getResults()[ 0 ].id ]?.keySet();
     24        %>
    3225        <table id="searchresults" class="paginate">
    3326                <thead>
     
    3528                        <th>Study</th>
    3629                        <th>Name</th>
     30                        <g:each in="${extraFields}" var="fieldName">
     31                                <th>${fieldName}</th>
     32                        </g:each>
    3733                </tr>
    3834                </thead>
     
    4036                <g:each in="${search.getResults()}" var="sampleInstance" status="i">
    4137                        <tr class="${(i % 2) == 0 ? 'odd' : 'even'}">
    42 
    4338                                <td><g:link controller="study" action="show" id="${sampleInstance?.parent?.id}">${sampleInstance?.parent?.title}</g:link></td>
    4439                                <td>${fieldValue(bean: sampleInstance, field: "name")}</td>
     40                                <g:each in="${extraFields}" var="fieldName">
     41                                        <td>
     42                                                <%
     43                                                        def fieldValue = resultFields[ sampleInstance.id ]?.get( fieldName );
     44                                                        if( fieldValue ) {
     45                                                                if( fieldValue instanceof Collection )
     46                                                                        fieldValue = fieldValue.collect { it.toString() }.findAll { it }.join( ', ' );
     47                                                                else
     48                                                                        fieldValue = fieldValue.toString();
     49                                                        }
     50                                                %>
     51                                                ${fieldValue}
     52                                        </td>
     53                                </g:each>
    4554                        </tr>
    4655                </g:each>
     
    4958
    5059</g:if>
    51 <p>
    52         <g:link action="index">Search again</g:link>
    53 </p>
     60<g:render template="resultbuttons" model="[queryId: queryId]" />
    5461</body>
    5562</html>
  • trunk/grails-app/views/advancedQuery/studyresults.gsp

    r1458 r1482  
    55        <title>Query results</title>
    66        <link rel="stylesheet" href="<g:resource dir="css" file="advancedQuery.css" />" type="text/css"/>
    7         <g:javascript src="advancedQuery.js" />
    87</head>
    98<body>
     
    1413        Your search for studies with:
    1514</p>
    16 <ul id="criteria">
    17         <g:each in="${search.getCriteria()}" var="criterion">
    18                 <li>
    19                         <span class="entityfield">${criterion.entity}.${criterion.field}</span>
    20                         <span class="operator">${criterion.operator}</span>
    21                         <span class="value">${criterion.value}</span>
    22                 </li>
    23         </g:each>
    24 </ul>
     15<g:render template="criteria" model="[criteria: search.getCriteria()]" />
    2516<p>
    2617        resulted in ${search.getNumResults()} <g:if test="${search.getNumResults() == 1}">study</g:if><g:else>studies</g:else>.
    2718</p>
    2819<g:if test="${search.getNumResults() > 0}">
     20        <%
     21                def resultFields = search.getShowableResultFields();
     22                def extraFields = resultFields[ search.getResults()[ 0 ].id ]?.keySet();
     23        %>
    2924
    3025        <table id="searchresults" class="paginate">
     
    3732                        <th>Events</th>
    3833                        <th>Assays</th>
     34                        <g:each in="${extraFields}" var="fieldName">
     35                                <th>${fieldName}</th>
     36                        </g:each>                       
    3937                </tr>
    4038                </thead>
     
    7977                                        </g:else>
    8078                                </td>
    81 
     79                                <g:each in="${extraFields}" var="fieldName">
     80                                        <td>
     81                                                <%
     82                                                        def fieldValue = resultFields[ studyInstance.id ]?.get( fieldName );
     83                                                        if( fieldValue ) {
     84                                                                if( fieldValue instanceof Collection )
     85                                                                        fieldValue = fieldValue.collect { it.toString() }.findAll { it }.join( ', ' );
     86                                                                else
     87                                                                        fieldValue = fieldValue.toString();
     88                                                        }
     89                                                %>
     90                                                ${fieldValue}
     91                                        </td>
     92                                </g:each>
    8293                        </tr>
    8394                </g:each>
     
    8697
    8798</g:if>
    88 <p>
    89         <g:link action="index">Search again</g:link>
    90 </p>
     99<g:render template="resultbuttons" model="[queryId: queryId]" />
    91100</body>
    92101</html>
Note: See TracChangeset for help on using the changeset viewer.