Changeset 15481
- Timestamp:
- 2008-05-15T13:27:22+12:00 (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
greenstone3/trunk/resources/java/QBRSOAPServer.java.in
r15298 r15481 38 38 import org.w3c.dom.Document; 39 39 import org.w3c.dom.Element; 40 import org.w3c.dom.NodeList; 40 41 41 42 import org.greenstone.gsdl3.core.MessageRouter; … … 325 326 this.doc, name, value)); 326 327 } 327 return queryProcess(collection+"/"+service, lang, paramList); 328 } 329 330 /** Values for field Names given in the paramList must exist for the 331 * (Collection-)Service Query that this message is sent To (as given in the 332 * 'to' argument). 333 * @see <a href="http://wiki.greenstone.org/wiki/index.php/Greenstone3">The Greenstone 3 Developer's Manual - page 45</a> 334 * @param to - the (Collection-)Service Query that this message is sent To 335 * @param lang - the language of the display items in the response 336 * @param paramList - XML Dom Element representing the list of field names, 337 * and associated values required for executing the query. 338 * For names of Greenstone-accepted arguments, 339 * @see <a href="http://wiki.greenstone.org/wiki/index.php/Actions_and_Arguments">Greenstone wiki - Actions and Arguments<a> 340 */ 341 protected String queryProcess(String to, String lang, Element paramList) { 342 // must work with whatever Document was used to create the 343 // <paramList>: other elements must be created using this 344 // document object too 345 Document ownerDoc = paramList.getOwnerDocument(); 346 Element message = ownerDoc.createElement(GSXML.MESSAGE_ELEM); 328 329 Element message = this.doc.createElement(GSXML.MESSAGE_ELEM); 347 330 Element request = GSXML.createBasicRequest( 348 ownerDoc, GSXML.REQUEST_TYPE_PROCESS, to, lang, ""); 331 this.doc, GSXML.REQUEST_TYPE_PROCESS, 332 collection+"/"+service, lang, ""); 349 333 350 334 request.appendChild(paramList); … … 352 336 353 337 // Send it off to the Message Router and return the response 354 return this.processInternal(message); 355 } 338 return this.processInternal(message); 339 } 340 341 /** 342 * This method is used to perform the most basic query: 343 * it assumes defaults for all other parameters and provides only 344 * the query string. It is built on top of a TextQuery. 345 * @param collection is the Greenstone collection to be searched 346 * @param lang is the preferred language of the display content in 347 * the response to be returned. 348 * @param query is the string to be sought in the Greenstone collection 349 * @return a Greenstone 3 XML response message for the query specifying 350 * the search results. 351 */ 352 public String basicQuery(String collection, String lang, String query) { 353 // The basicQuery is built on top of the TextQuery service 354 final String queryService = "TextQuery"; 355 356 // (1) describe request on the TextQuery 357 String queryDescription = describeCollectionService( 358 collection, queryService, "en", "paramList"); // just get paramList 359 //System.out.println(queryDescription); 360 361 Document doc = this.converter.getDOM(queryDescription); 362 NodeList nl = doc.getElementsByTagName( 363 GSXML.PARAM_ELEM+GSXML.LIST_MODIFIER); 364 365 Element paramList = null; 366 if(nl.getLength() <= 0) { // no paramList in textQuery description means 367 // no query field either: that means we can't continue 368 return this.error("BasicQuery is not available for this collection" 369 + " as it provides no TextQuery service."); 370 } //else 371 372 paramList = (Element)nl.item(0); 373 nl = paramList.getElementsByTagName(GSXML.PARAM_ELEM); 374 if(nl.getLength() <= 0) { // no params, means no query field, so return 375 return this.error("BasicQuery is not available for this collection."); 376 } 377 378 // (2) get the defaults for each parameter and use that to set 379 // the defaults 380 Map params = new HashMap(nl.getLength()); // field name to value map 381 for(int i = 0; i < nl.getLength(); i++) { 382 Element param = (Element)nl.item(i); 383 String paramName = param.getAttribute(GSXML.NAME_ATT); 384 String def = param.getAttribute(GSXML.DEFAULT_ATT); 385 if(def.equals("")) { 386 // if there's no default, the field must want the query String 387 params.put(paramName, query); 388 } else { // there is a default, use the default for this param 389 params.put(paramName, def); 390 } 391 } 392 393 // (3) Perform the query using defaults and return the response 394 return this.query(collection, queryService, lang, params); 395 } 396 356 397 357 398 /* (3) RETRIEVE PROCESS METHODS - Manual, pp.47-49 */
Note:
See TracChangeset
for help on using the changeset viewer.