- Timestamp:
- 2003-07-11T16:29:16+12:00 (21 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/gsdl3/src/java/org/greenstone/gsdl3/service/GS2MGPPSearch.java
r4709 r4903 54 54 55 55 // extra parameters used 56 private static final String INDEX_FIELD_PARAM = "index"; 56 57 private static final String LEVEL_PARAM = "level"; 57 58 private static final String RANK_PARAM = "sortBy"; … … 77 78 private MGPPWrapper mgpp_src_=null; 78 79 80 // the default level for retrieval - and we'll use it for searching too 79 81 private String default_level_=null; 80 82 … … 124 126 // else set up the fielded query services 125 127 126 // set up short_service_info_ - for now just has name and type128 // set up short_service_info_ - for now just has id and type - name will be added in on teh fly 127 129 Element fq_service = doc_.createElement(GSXML.SERVICE_ELEM); 128 130 fq_service.setAttribute(GSXML.TYPE_ATT, GSXML.SERVICE_TYPE_QUERY); 129 131 fq_service.setAttribute(GSXML.NAME_ATT, FIELD_QUERY_SERVICE); 130 132 short_service_info_.appendChild(fq_service); 131 133 132 134 Element afq_service = doc_.createElement(GSXML.SERVICE_ELEM); 133 135 afq_service.setAttribute(GSXML.TYPE_ATT, GSXML.SERVICE_TYPE_QUERY); 134 136 afq_service.setAttribute(GSXML.NAME_ATT, ADVANCED_FIELD_QUERY_SERVICE); 135 137 short_service_info_.appendChild(afq_service); 136 137 // set up service_info_map_ has full details about each service 138 // incl params lists etc. 139 Element fq_service_full = (Element) fq_service.cloneNode(true); 140 Element fq_param_list = doc_.createElement(GSXML.PARAM_ELEM+GSXML.LIST_MODIFIER); 141 createFieldQueryParamList(fq_param_list, false, null); 142 fq_service_full.appendChild(fq_param_list); 143 service_info_map_.put(FIELD_QUERY_SERVICE, fq_service_full); 144 145 Element afq_service_full = (Element) afq_service.cloneNode(true); 146 Element afq_param_list = doc_.createElement(GSXML.PARAM_ELEM+GSXML.LIST_MODIFIER); 147 createAdvancedFieldQueryParamList(afq_param_list, false, null); 148 afq_service_full.appendChild(afq_param_list); 149 service_info_map_.put(ADVANCED_FIELD_QUERY_SERVICE, afq_service_full); 150 138 151 139 152 140 //set up format info - the info is the same as that for text query … … 159 147 } 160 148 161 162 /** creates a new param element and adds it to the param list */ 163 protected void createParameter(String name, Element param_list, boolean display, String lang) { 149 protected Element getServiceDescription(String service_id, String lang) { 150 151 if (!service_id.equals(FIELD_QUERY_SERVICE) && !service_id.equals(ADVANCED_FIELD_QUERY_SERVICE)) { 152 return super.getServiceDescription(service_id, lang); 153 } 154 155 Element service = doc_.createElement(GSXML.SERVICE_ELEM); 156 service.setAttribute(GSXML.TYPE_ATT, GSXML.SERVICE_TYPE_QUERY); 157 service.setAttribute(GSXML.NAME_ATT, service_id); 158 service.appendChild(GSXML.createDisplayTextElement(doc_, GSXML.DISPLAY_TEXT_NAME, getTextString(service_id+".name", lang))); 159 service.appendChild(GSXML.createDisplayTextElement(doc_, GSXML.DISPLAY_TEXT_SUBMIT, getTextString(service_id+".submit", lang))); 160 Element param_list = doc_.createElement(GSXML.PARAM_ELEM+GSXML.LIST_MODIFIER); 161 service.appendChild(param_list); 162 if (service_id.equals(FIELD_QUERY_SERVICE)) { 163 164 createFieldQueryParamList(param_list, lang); 165 } else { 166 createAdvancedFieldQueryParamList(param_list, lang); 167 } 168 return service; 169 170 } 171 172 /** creates a new param element and adds it to the param list */ 173 protected void createParameter(String id, Element param_list, String lang) { 164 174 Element param=null; 165 175 166 if ( name.equals(LEVEL_PARAM)) {176 if (id.equals(LEVEL_PARAM)) { 167 177 // the level info - read from config file 168 178 Element level_list = (Element)GSXML.getChildByTagName(config_info_, LEVEL_ELEM+GSXML.LIST_MODIFIER); … … 174 184 for (int i=0; i<len; i++) { 175 185 levs[i] = ((Element)levels.item(i)).getAttribute(GSXML.NAME_ATT); 176 if (display) { 177 lev_names[i] = getTextString("level."+levs[i], lang); 178 } 186 lev_names[i] = getTextString("level."+levs[i], lang); 187 179 188 } 180 if (display) { 181 param = GSXML.createParameterDisplay(doc_, LEVEL_PARAM, getTextString("param."+LEVEL_PARAM, lang), levs, lev_names); 182 } else { 183 param = GSXML.createParameterDescription(doc_, LEVEL_PARAM, GSXML.PARAM_TYPE_ENUM_SINGLE, default_level_, levs); 184 } 185 } 186 } else if (name.equals(RANK_PARAM)) { 189 // the first one is the default 190 param = GSXML.createParameterDescription(doc_, LEVEL_PARAM, getTextString("param."+LEVEL_PARAM, lang), GSXML.PARAM_TYPE_ENUM_SINGLE, levs[0], levs, lev_names); 191 192 } 193 } else if (id.equals(RANK_PARAM)) { 187 194 String [] vals1 = {RANK_PARAM_RANK, RANK_PARAM_NONE }; 188 if (display) { 189 String [] vals1_texts = { getTextString("param."+RANK_PARAM+"."+RANK_PARAM_RANK, lang), getTextString("param."+RANK_PARAM+"."+RANK_PARAM_NONE, lang)}; 195 String [] vals1_texts = { getTextString("param."+RANK_PARAM+"."+RANK_PARAM_RANK, lang), getTextString("param."+RANK_PARAM+"."+RANK_PARAM_NONE, lang)}; 190 196 191 param = GSXML.createParameterDisplay(doc_, RANK_PARAM, getTextString("param."+RANK_PARAM, lang), vals1, vals1_texts); 192 } else { 193 param = GSXML.createParameterDescription(doc_, RANK_PARAM, GSXML.PARAM_TYPE_ENUM_SINGLE, RANK_PARAM_RANK, vals1 ); 194 } 195 } else if (name.equals(FIELD_QUERY_PARAM)) { 196 if (display) { 197 param = GSXML.createParameterDisplay(doc_, FIELD_QUERY_PARAM, getTextString("param."+FIELD_QUERY_PARAM, lang), null, null); 198 } else { 199 param = GSXML.createParameterDescription(doc_, FIELD_QUERY_PARAM, GSXML.PARAM_TYPE_STRING, null, null); 200 } 201 202 } else if (name.equals(FIELD_CASE_PARAM)) { 203 if (display) { 204 String[] bool_ops = {"0", "1"}; 205 String[] bool_texts = {getTextString("param.boolean.off", lang),getTextString("param.boolean.on", lang)}; 206 param = GSXML.createParameterDisplay(doc_, FIELD_CASE_PARAM, getTextString("param."+FIELD_CASE_PARAM, lang), bool_ops, bool_texts); 207 208 } else { 209 param = GSXML.createParameterDescription(doc_, FIELD_CASE_PARAM, GSXML.PARAM_TYPE_BOOLEAN, BOOLEAN_PARAM_ON, null); 210 211 } 212 } else if (name.equals(FIELD_STEM_PARAM)) { 213 if (display) { 214 String[] bool_ops = {"0", "1"}; 215 String[] bool_texts = {getTextString("param.boolean.off", lang),getTextString("param.boolean.on", lang)}; 216 param = GSXML.createParameterDisplay(doc_, FIELD_STEM_PARAM, getTextString("param."+FIELD_STEM_PARAM, lang), bool_ops, bool_texts); 217 } else { 218 param = GSXML.createParameterDescription(doc_, FIELD_STEM_PARAM, GSXML.PARAM_TYPE_BOOLEAN, BOOLEAN_PARAM_ON, null); 219 220 } 221 222 } else if (name.equals(FIELD_FIELD_PARAM)) { 197 param = GSXML.createParameterDescription(doc_, RANK_PARAM, getTextString("param."+RANK_PARAM, lang), GSXML.PARAM_TYPE_ENUM_SINGLE, RANK_PARAM_RANK, vals1, vals1_texts ); 198 199 } else if (id.equals(FIELD_QUERY_PARAM)) { 200 param = GSXML.createParameterDescription(doc_, FIELD_QUERY_PARAM, getTextString("param."+FIELD_QUERY_PARAM, lang), GSXML.PARAM_TYPE_STRING, null, null, null); 201 202 203 } else if (id.equals(FIELD_CASE_PARAM) || id.equals(FIELD_STEM_PARAM)) { 204 String[] bool_ops = {"0", "1"}; 205 String[] bool_texts = {getTextString("param.boolean.off", lang),getTextString("param.boolean.on", lang)}; 206 param = GSXML.createParameterDescription(doc_, id, getTextString("param."+id, lang), GSXML.PARAM_TYPE_BOOLEAN, BOOLEAN_PARAM_ON, bool_ops, bool_texts); 207 208 } else if (id.equals(FIELD_FIELD_PARAM) || id.equals(INDEX_FIELD_PARAM)) { 223 209 224 210 // the field list - read from config file … … 226 212 NodeList fields = field_list.getElementsByTagName(GSXML.FIELD_ELEM); 227 213 int len = fields.getLength(); 228 String [] f_names = new String [len+1]; 229 String [] f_texts = new String [len+1]; 230 231 f_names[0] = "ZZ"; 232 if (display) { 233 f_texts[0] = getTextString("param.fqf.all", lang); 234 } 214 String [] f_names = new String [len]; 215 String [] f_texts = new String [len]; 235 216 for (int i=0; i< len;i++) { 236 f_names[i+1] = ((Element)fields.item(i)).getAttribute(GSXML.SHORTNAME_ATT); 237 if (display) { 238 // should these be changed to a text element based on lang? 239 // or is the name of a metadata element eg dc:Title its 240 // name in all langs 241 f_texts[i+1] = ((Element)fields.item(i)).getAttribute(GSXML.NAME_ATT); 242 } 243 } 244 if (display) { 245 param = GSXML.createParameterDisplay(doc_, FIELD_FIELD_PARAM, getTextString("param."+FIELD_FIELD_PARAM, lang), f_names, f_texts); 217 f_names[i] = ((Element)fields.item(i)).getAttribute(GSXML.SHORTNAME_ATT); 218 // should these be changed to a text element based on lang? 219 // or is the name of a metadata element eg dc:Title its 220 // name in all langs 221 f_texts[i] = ((Element)fields.item(i)).getAttribute(GSXML.NAME_ATT); 246 222 247 } else { 248 param = GSXML.createParameterDescription(doc_, FIELD_FIELD_PARAM, GSXML.PARAM_TYPE_ENUM_SINGLE, "", f_names ); 223 } 224 param = GSXML.createParameterDescription(doc_, id, getTextString("param."+id, lang), GSXML.PARAM_TYPE_ENUM_SINGLE, f_names[0], f_names, f_texts ); 225 226 } else if (id.equals(FIELD_COMBINE_PARAM)) { 227 228 String []vals = {FIELD_COMBINE_PARAM_AND, FIELD_COMBINE_PARAM_OR, FIELD_COMBINE_PARAM_NOT}; 229 String []val_texts = {getTextString("param."+FIELD_COMBINE_PARAM+"."+FIELD_COMBINE_PARAM_AND, lang), getTextString("param."+FIELD_COMBINE_PARAM+"."+FIELD_COMBINE_PARAM_OR, lang), getTextString("param."+FIELD_COMBINE_PARAM+"."+FIELD_COMBINE_PARAM_NOT, lang)}; 249 230 250 } 251 } else if (name.equals(FIELD_COMBINE_PARAM)) { 252 253 String []vals = {FIELD_COMBINE_PARAM_AND, FIELD_COMBINE_PARAM_OR, FIELD_COMBINE_PARAM_NOT}; 254 if (display) { 255 String []val_texts = {getTextString("param."+FIELD_COMBINE_PARAM+"."+FIELD_COMBINE_PARAM_AND, lang), getTextString("param."+FIELD_COMBINE_PARAM+"."+FIELD_COMBINE_PARAM_OR, lang), getTextString("param."+FIELD_COMBINE_PARAM+"."+FIELD_COMBINE_PARAM_NOT, lang)}; 231 232 param = GSXML.createParameterDescription(doc_, FIELD_COMBINE_PARAM, "", GSXML.PARAM_TYPE_ENUM_SINGLE, FIELD_COMBINE_PARAM_AND, vals, val_texts); 233 param.setAttribute(GSXML.PARAM_IGNORE_POS_ATT, "0"); 256 234 257 param = GSXML.createParameterDisplay(doc_, FIELD_COMBINE_PARAM, "", vals, val_texts); 258 259 } else { 260 param = GSXML.createParameterDescription(doc_, FIELD_COMBINE_PARAM, GSXML.PARAM_TYPE_ENUM_SINGLE, FIELD_COMBINE_PARAM_AND, vals); 261 param.setAttribute(GSXML.PARAM_IGNORE_POS_ATT, "0"); 262 263 } 264 } 265 235 236 } 237 266 238 // add the param to the list 267 239 if (param !=null) { … … 269 241 } 270 242 else { 271 super.createParameter( name, param_list, display, lang);272 } 273 } 274 243 super.createParameter(id, param_list, lang); 244 } 245 } 246 275 247 276 248 /** this creates all teh params and appends them to param_list. … … 279 251 */ 280 252 protected boolean createTextQueryParamList(Element param_list, 281 boolean display,253 282 254 String lang) 283 255 { 284 256 // the order they are specified here is the order they appear on 285 257 // the query form 286 createParameter(INDEX_PARAM, param_list, display, lang); 287 createParameter(LEVEL_PARAM, param_list, display, lang); 288 createParameter(CASE_PARAM, param_list, display, lang); 289 createParameter(STEM_PARAM, param_list, display, lang); 290 createParameter(MATCH_PARAM, param_list, display, lang); 291 createParameter(RANK_PARAM, param_list, display, lang); 292 createParameter(MAXDOCS_PARAM, param_list, display, lang); 293 createParameter(QUERY_PARAM, param_list, display, lang); 258 //createParameter(INDEX_PARAM, param_list, display, lang); - there is only ever one index now 259 createParameter(INDEX_FIELD_PARAM, param_list, lang); 260 createParameter(LEVEL_PARAM, param_list, lang); 261 createParameter(CASE_PARAM, param_list, lang); 262 createParameter(STEM_PARAM, param_list, lang); 263 createParameter(MATCH_PARAM, param_list, lang); 264 createParameter(RANK_PARAM, param_list, lang); 265 createParameter(MAXDOCS_PARAM, param_list, lang); 266 createParameter(QUERY_PARAM, param_list, lang); 294 267 295 268 return true; 296 269 } 297 270 298 299 // for now, the field queries just use the default index.300 // however, it is entirely possible to create two indexes with different301 // metadata. then you run into problems with displaying the form - you302 // need to use javascript to change teh field and maybe level lists303 // depending on which index is selected, or have the index preselected304 // before going to the query form305 271 306 272 … … 309 275 * otherwise it creates the description version 310 276 */ 311 protected boolean createFieldQueryParamList(Element param_list, boolean display,277 protected boolean createFieldQueryParamList(Element param_list, 312 278 String lang) 313 279 { 314 280 // add in the index param 315 createParameter(INDEX_PARAM, param_list, display, lang);316 createParameter(LEVEL_PARAM, param_list, display,lang);317 createParameter(MATCH_PARAM, param_list, display,lang);318 createParameter(CASE_PARAM, param_list, display,lang);319 createParameter(STEM_PARAM, param_list, display,lang);320 createParameter(RANK_PARAM, param_list, display,lang);321 createParameter(MAXDOCS_PARAM, param_list, display,lang);281 //createParameter(INDEX_PARAM, param_list, display, lang); 282 createParameter(LEVEL_PARAM, param_list, lang); 283 createParameter(MATCH_PARAM, param_list, lang); 284 createParameter(CASE_PARAM, param_list, lang); 285 createParameter(STEM_PARAM, param_list, lang); 286 createParameter(RANK_PARAM, param_list, lang); 287 createParameter(MAXDOCS_PARAM, param_list, lang); 322 288 323 289 // create a multi param for the fields etc … … 325 291 Element multiparam = null; 326 292 Element param=null; 327 if (display) { 328 param = GSXML.createParameterDisplay(doc_, SIMPLE_FIELD_PARAM, "", null, null); 329 param_list.appendChild(param); 330 } else { 331 multiparam = GSXML.createParameterDescription(doc_, SIMPLE_FIELD_PARAM, GSXML.PARAM_TYPE_MULTI, null, null); 332 multiparam.setAttribute("occurs", "4"); 333 param_list.appendChild(multiparam); 334 } 293 multiparam = GSXML.createParameterDescription(doc_, SIMPLE_FIELD_PARAM, "", GSXML.PARAM_TYPE_MULTI, null, null, null); 294 multiparam.setAttribute("occurs", "4"); 295 param_list.appendChild(multiparam); 296 335 297 // the components 336 if (display) { 337 createParameter(FIELD_QUERY_PARAM, param_list, display, lang); 338 createParameter(FIELD_FIELD_PARAM, param_list, display, lang); 339 } else { 340 createParameter(FIELD_QUERY_PARAM, multiparam, display, lang); 341 createParameter(FIELD_FIELD_PARAM, multiparam, display, lang); 342 } 298 createParameter(FIELD_QUERY_PARAM, multiparam, lang); 299 createParameter(FIELD_FIELD_PARAM, multiparam, lang); 300 343 301 return true; 344 302 } 345 303 346 protected boolean createAdvancedFieldQueryParamList(Element param_list, boolean display,304 protected boolean createAdvancedFieldQueryParamList(Element param_list, 347 305 String lang) { 348 306 349 307 // first do index and level params 350 createParameter(INDEX_PARAM, param_list, display, lang);351 createParameter(LEVEL_PARAM, param_list, display,lang);352 createParameter(RANK_PARAM, param_list, display,lang);353 createParameter(MAXDOCS_PARAM, param_list, display,lang);308 //createParameter(INDEX_PARAM, param_list, display, lang); 309 createParameter(LEVEL_PARAM, param_list, lang); 310 createParameter(RANK_PARAM, param_list, lang); 311 createParameter(MAXDOCS_PARAM, param_list, lang); 354 312 355 313 … … 360 318 Element param=null; 361 319 362 if (display) { 363 param = GSXML.createParameterDisplay(doc_, ADVANCED_FIELD_PARAM, "", null, null); 364 param_list.appendChild(param); 365 } else { 366 multiparam = GSXML.createParameterDescription(doc_, ADVANCED_FIELD_PARAM, GSXML.PARAM_TYPE_MULTI, null, null); 367 multiparam.setAttribute("occurs", "4"); 368 param_list.appendChild(multiparam); 369 } 370 371 if (display) { 372 createParameter(FIELD_COMBINE_PARAM, param_list, display, lang); 373 createParameter(FIELD_QUERY_PARAM, param_list, display, lang); 374 createParameter(FIELD_CASE_PARAM, param_list, display, lang); 375 createParameter(FIELD_STEM_PARAM, param_list, display, lang); 376 createParameter(FIELD_FIELD_PARAM, param_list, display, lang); 377 } else { 378 createParameter(FIELD_COMBINE_PARAM, multiparam, display, lang); 379 createParameter(FIELD_QUERY_PARAM, multiparam, display, lang); 380 createParameter(FIELD_CASE_PARAM, multiparam, display, lang); 381 createParameter(FIELD_STEM_PARAM, multiparam, display, lang); 382 createParameter(FIELD_FIELD_PARAM, multiparam, display, lang); 383 } 320 multiparam = GSXML.createParameterDescription(doc_, ADVANCED_FIELD_PARAM, "", GSXML.PARAM_TYPE_MULTI, null, null, null); 321 multiparam.setAttribute("occurs", "4"); 322 param_list.appendChild(multiparam); 323 324 createParameter(FIELD_COMBINE_PARAM, multiparam, lang); 325 createParameter(FIELD_QUERY_PARAM, multiparam, lang); 326 createParameter(FIELD_CASE_PARAM, multiparam, lang); 327 createParameter(FIELD_STEM_PARAM, multiparam, lang); 328 createParameter(FIELD_FIELD_PARAM, multiparam, lang); 329 384 330 385 331 return true; 386 332 } 387 333 388 389 /** creates a display element containing all the text strings needed to display390 the service page, in the language specified */391 protected Element createServiceDisplay(String service, String lang)392 {393 // Create a service display for the basic text query service394 Element display = super.createServiceDisplay(service, lang);395 396 // Now add MGPP's special services397 if (service.equals(FIELD_QUERY_SERVICE)) {398 createFieldQueryParamList(display, true, lang);399 }400 if (service.equals(ADVANCED_FIELD_QUERY_SERVICE)) {401 createAdvancedFieldQueryParamList(display, true, lang);402 }403 404 return display;405 }406 407 334 // the following three functions are needed so the base class can 408 335 // call the process+SERVICE_NAME methods … … 469 396 } 470 397 471 // If an index hasn't been specified, use the default472 String index = (String) params.get(INDEX_PARAM);473 if ( index== null) {474 index = default_index_;475 } 476 398 // If an field hasn't been specified, use all fields 399 String field = (String) params.get(INDEX_FIELD_PARAM); 400 if (field == null) { 401 field = "ZZ"; 402 } 403 477 404 // set up mgpp_src 478 405 String indexdir = GSFile.collectionBaseDir(site_home_, cluster_name_) + 479 File.separatorChar + GSFile.collectionIndexPath(cluster_name_, index);406 File.separatorChar + GSFile.collectionIndexPath(cluster_name_, default_index_); 480 407 mgpp_src_.loadIndexData(indexdir); 481 408 setStandardQueryParams(params); … … 483 410 // if field search, create the query string 484 411 switch (query_type) { 412 case TEXT_QUERY: 413 query = addFieldInfo(query, field); 414 break; 485 415 case SIMPLE_QUERY: 486 416 query = parseFieldQueryParams(params); … … 532 462 term_elem.setAttribute(FREQ_ATT, "" + term_info.term_freq_); 533 463 term_elem.setAttribute(NUM_DOCS_MATCH_ATT, "" + term_info.match_docs_); 534 Stringfield = term_info.tag_;464 field = term_info.tag_; 535 465 if (field.equals(query_level)) { 536 466 // ignore … … 596 526 } 597 527 528 protected String addFieldInfo(String query, String field) { 529 if (field.equals("") || field.equals("ZZ")) { 530 return query; 531 } 532 return "["+query+"]:"+field; 533 } 598 534 /** combines all the field params into a single query 599 535 * - for simple field query */
Note:
See TracChangeset
for help on using the changeset viewer.