source: trunk/grails-app/controllers/dbnp/query/SimpleQueryController.groovy @ 650

Last change on this file since 650 was 650, checked in by vinlud, 8 years ago

Multiple changes in structure/view/logic

  • Property svn:keywords set to Date Author Rev
File size: 5.7 KB
Line 
1/**
2 * SimpleQueryController Controler
3 *
4 * Description of my controller
5 *
6 * @author  vincent@ludden.nl
7 * @since       20100526
8 * @package     dbnp.query
9 *
10 * Revision information:
11 * $Rev: 650 $
12 * $Author: vinlud $
13 * $Date: 2010-07-13 16:26:50 +0000 (di, 13 jul 2010) $
14 */
15package dbnp.query
16
17import dbnp.data.*
18import dbnp.studycapturing.Study
19import org.compass.core.engine.SearchEngineQueryParseException
20import dbnp.rest.common.CommunicationManager
21
22class SimpleQueryController {
23        /**
24         * index closure
25         */
26    def index = {
27      redirect( action:'pages')
28    }
29
30    def searchableService
31
32    def pagesFlow = {
33
34        // Starting simpleQuery flow, initialize variables
35        onStart {
36            println "Starting webflow simpleQuery"
37            flow.search_term            = null
38            flow.search_sa_compounds    = []
39            flow.search_sa_operators    = []
40            flow.search_sa_values       = []
41            flow.page                   = 0
42                        flow.pages = [
43                [title: 'Query'],
44                                [title: 'Results']
45                        ]
46            }
47
48        // Render the query page and handle its actions
49                query {
50                        render(view: "/simpleQuery/mainPage")
51
52            onRender {
53              println "Rendering mainPage"
54              flow.operators              = ['>', '=', '<']
55
56              if (flow.search_sa_compounds.size() == 0) {
57                flow.showFirstRowCompounds  = true
58                println "showRow true"
59              } else {
60                flow.showFirstRowCompounds  = false
61                println "showRow false"
62              }
63
64              flow.species = Term.findAll()
65              flow.page = 1
66            }
67
68            on("search") {
69              println "Search!"
70              if (!params.search_term.trim()) {
71                return [:]
72              }
73            }.to "searching"
74
75            on("refresh").to "query"
76                }
77
78
79        // Searching for results
80        searching {
81           action {
82              println "Starting simpleQuery search..."
83              def searchResult
84              def searchGscfResult
85              def searchSamResult   = []
86
87              // TODO: walk parameters, remove empty entries
88
89              // Map GSCF parameters
90              flow.search_term            = params.search_term        // String
91
92              // Map SAM parameters
93              if (params.sa_compound instanceof String) {
94                //flow.search_sam = [:]
95                flow.search_sa_compounds = []
96                flow.search_sa_operators = []
97                flow.search_sa_values    = []
98
99                flow.search_sa_compounds.add(params.sa_compound)
100                flow.search_sa_operators.add(params.sa_operator)
101                flow.search_sa_values.add(params.sa_value)
102              } else {
103                flow.search_sa_compounds  = params.sa_compound as List
104                flow.search_sa_operators  = params.sa_operator as List
105                flow.search_sa_values     = params.sa_value as List
106              }
107
108              // Search the keyword with the Searchable plugin
109              try {
110                searchGscfResult = searchableService.search(flow.search_term)
111              } catch (SearchEngineQueryParseException ex) {
112                println ex
113                return [parseException: true]
114              }
115
116              // Map non-study objects to Studies
117              // ... todo when the plugin works and I can see the output
118
119              // Search in the SAM module when a compound is entered
120              // Todo: check whether the module is active and to be used
121              // ...
122              if (flow.search_sa_compounds.size() > 0) {
123                def resultSAM = []
124                resultSAM = this.searchSAM(flow.search_sa_compounds)
125                println "Sam result: " + resultSAM
126              }
127                                         
128             // Merge the results of all searches
129             if (searchGscfResult.size() > 0) {
130               
131                searchResult = searchSamResult + searchGscfResult
132             }             
133
134
135             // Save the results in the flow
136             flow.listStudies = searchGscfResult.results
137             println flow.listStudies
138
139           }
140
141          on("error").to "query"
142          on("success").to "results"
143        }
144
145
146        // Render result page including search options
147        results {
148            render(view: "/simpleQuery/mainPage")
149
150            onRender {
151              println "Rendering resultPage"
152              flow.page = 2
153
154              flow.showFirstRowCompounds  = false
155            }
156
157            on("reset") {
158              flow.search_term            = null
159              flow.studies                = null
160              flow.search_sa_compounds    = null
161              flow.search_sa_values       = null
162              flow.search_tt_genepaths    = null
163              flow.search_tt_regulations  = null
164              println "Resetting query flow"
165            }.to "query"
166
167            on("search").to "searching"
168            on("refresh").to "results"
169        }
170
171    }
172
173
174   static List searchSAM (List compounds) {
175     if (compounds.size() == 1) {
176       println "Single SAM call"
177       def mapSamResult
178       mapSamResult = CommunicationManager.getQueryResult(compounds.get(0))
179       
180       return mapSamResult.studies
181
182     } else {
183       println "Multiple SAM calls"
184       def tmpSamResult
185       def i = 0
186
187       compounds.each() {
188         println compounds.get(i)
189
190         println "set tmpSamResult"
191
192         // Combine each search
193         // searchSamResult = Merge(searchSamResult, tmpSamResult)
194         // searchSamResult += tmpSamResult
195         i++
196       };
197     }
198
199   }
200
201
202
203   static List merge (List list1, List list2) {
204
205     def resultList = []
206     resultList = list1.intersect(list2)
207
208     return resultList
209   }
210
211}
Note: See TracBrowser for help on using the repository browser.