Changeset 28966 for main/trunk/greenstone3/src/java/org/greenstone/gsdl3/service/CrossCollectionSearch.java
- Timestamp:
- 2014-04-10T14:39:33+12:00 (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
main/trunk/greenstone3/src/java/org/greenstone/gsdl3/service/CrossCollectionSearch.java
r28180 r28966 29 29 import org.greenstone.gsdl3.util.GSXML; 30 30 import org.greenstone.gsdl3.util.UserContext; 31 import org.greenstone.gsdl3.util.XMLConverter; 32 33 import org.w3c.dom.Document; 31 34 import org.w3c.dom.Element; 32 35 import org.w3c.dom.Node; … … 65 68 logger.info("Configuring CrossCollectionSearch..."); 66 69 // query service 67 Element ccs_service = this.d oc.createElement(GSXML.SERVICE_ELEM);70 Element ccs_service = this.desc_doc.createElement(GSXML.SERVICE_ELEM); 68 71 ccs_service.setAttribute(GSXML.TYPE_ATT, GSXML.SERVICE_TYPE_QUERY); 69 72 ccs_service.setAttribute(GSXML.NAME_ATT, TEXT_QUERY_SERVICE); … … 71 74 72 75 // metadata service 73 Element dmr_service = this.d oc.createElement(GSXML.SERVICE_ELEM);76 Element dmr_service = this.desc_doc.createElement(GSXML.SERVICE_ELEM); 74 77 dmr_service.setAttribute(GSXML.TYPE_ATT, GSXML.SERVICE_TYPE_RETRIEVE); 75 78 dmr_service.setAttribute(GSXML.NAME_ATT, DOCUMENT_METADATA_RETRIEVE_SERVICE); … … 80 83 if (format_info != null) 81 84 { 82 this.format_info_map.put(TEXT_QUERY_SERVICE, this.d oc.importNode(format_info, true));85 this.format_info_map.put(TEXT_QUERY_SERVICE, this.desc_doc.importNode(format_info, true)); 83 86 } 84 87 else … … 91 94 } 92 95 format_string += "</xsl:attribute><gsf:icon/></a></td><td><gsf:metadata name='Title'/> (<xsl:value-of select='@collection'/>) </td></gsf:template></format>"; 93 this.format_info_map.put(TEXT_QUERY_SERVICE, this.d oc.importNode(this.converter.getDOM(format_string).getDocumentElement(), true));96 this.format_info_map.put(TEXT_QUERY_SERVICE, this.desc_doc.importNode(this.converter.getDOM(format_string).getDocumentElement(), true)); 94 97 } 95 98 return true; 96 99 } 97 100 98 protected Element getServiceDescription(String service, String lang, String subset)101 protected Element getServiceDescription(Document doc, String service, String lang, String subset) 99 102 { 100 103 if (service.equals(TEXT_QUERY_SERVICE)) 101 104 { 102 105 103 Element ccs_service = this.doc.createElement(GSXML.SERVICE_ELEM);106 Element ccs_service = doc.createElement(GSXML.SERVICE_ELEM); 104 107 ccs_service.setAttribute(GSXML.TYPE_ATT, GSXML.SERVICE_TYPE_QUERY); 105 108 ccs_service.setAttribute(GSXML.NAME_ATT, TEXT_QUERY_SERVICE); … … 108 111 if (subset == null || subset.equals(GSXML.DISPLAY_TEXT_ELEM + GSXML.LIST_MODIFIER)) 109 112 { 110 ccs_service.appendChild(GSXML.createDisplayTextElement( this.doc, GSXML.DISPLAY_TEXT_NAME, getTextString(TEXT_QUERY_SERVICE + ".name", lang)));111 ccs_service.appendChild(GSXML.createDisplayTextElement( this.doc, GSXML.DISPLAY_TEXT_SUBMIT, getTextString(TEXT_QUERY_SERVICE + ".submit", lang)));112 ccs_service.appendChild(GSXML.createDisplayTextElement( this.doc, GSXML.DISPLAY_TEXT_DESCRIPTION, getTextString(TEXT_QUERY_SERVICE + ".description", lang)));113 ccs_service.appendChild(GSXML.createDisplayTextElement(doc, GSXML.DISPLAY_TEXT_NAME, getTextString(TEXT_QUERY_SERVICE + ".name", lang))); 114 ccs_service.appendChild(GSXML.createDisplayTextElement(doc, GSXML.DISPLAY_TEXT_SUBMIT, getTextString(TEXT_QUERY_SERVICE + ".submit", lang))); 115 ccs_service.appendChild(GSXML.createDisplayTextElement(doc, GSXML.DISPLAY_TEXT_DESCRIPTION, getTextString(TEXT_QUERY_SERVICE + ".description", lang))); 113 116 } 114 117 // param info 115 118 if (subset == null || subset.equals(GSXML.PARAM_ELEM + GSXML.LIST_MODIFIER)) 116 119 { 117 Element param_list = this.doc.createElement(GSXML.PARAM_ELEM + GSXML.LIST_MODIFIER);120 Element param_list = doc.createElement(GSXML.PARAM_ELEM + GSXML.LIST_MODIFIER); 118 121 // collection list 119 122 if (coll_ids_list == null) … … 125 128 addCollectionNames(lang); 126 129 } 127 Element param = GSXML.createParameterDescription( this.doc, COLLECTION_PARAM, getTextString("param." + COLLECTION_PARAM, lang), GSXML.PARAM_TYPE_ENUM_MULTI, "all", coll_ids_list, coll_names_map.get(lang));130 Element param = GSXML.createParameterDescription(doc, COLLECTION_PARAM, getTextString("param." + COLLECTION_PARAM, lang), GSXML.PARAM_TYPE_ENUM_MULTI, "all", coll_ids_list, coll_names_map.get(lang)); 128 131 param_list.appendChild(param); 129 132 // query param 130 param = GSXML.createParameterDescription( this.doc, QUERY_PARAM, getTextString("param." + QUERY_PARAM, lang), GSXML.PARAM_TYPE_STRING, null, null, null);133 param = GSXML.createParameterDescription(doc, QUERY_PARAM, getTextString("param." + QUERY_PARAM, lang), GSXML.PARAM_TYPE_STRING, null, null, null); 131 134 param_list.appendChild(param); 132 135 ccs_service.appendChild(param_list); … … 137 140 } 138 141 // these ones are probably never called, but put them here just in case 139 Element service_elem = this.doc.createElement(GSXML.SERVICE_ELEM);142 Element service_elem = doc.createElement(GSXML.SERVICE_ELEM); 140 143 service_elem.setAttribute(GSXML.TYPE_ATT, GSXML.SERVICE_TYPE_RETRIEVE); 141 144 service_elem.setAttribute(GSXML.NAME_ATT, service); … … 147 150 { 148 151 // Create a new (empty) result message 149 Element result = this.doc.createElement(GSXML.RESPONSE_ELEM); 152 Document result_doc = XMLConverter.newDOM(); 153 Element result = result_doc.createElement(GSXML.RESPONSE_ELEM); 150 154 result.setAttribute(GSXML.FROM_ATT, TEXT_QUERY_SERVICE); 151 155 result.setAttribute(GSXML.TYPE_ATT, GSXML.REQUEST_TYPE_PROCESS); … … 173 177 } 174 178 175 Element query_message = this.doc.createElement(GSXML.MESSAGE_ELEM); 179 Document msg_doc = XMLConverter.newDOM(); 180 Element query_message = msg_doc.createElement(GSXML.MESSAGE_ELEM); 176 181 // we are sending the same request to each collection - build up the to 177 182 // attribute for the request … … 187 192 } 188 193 // send the query to all colls 189 Element query_request = GSXML.createBasicRequest( this.doc, GSXML.REQUEST_TYPE_PROCESS, to_att.toString(), userContext);194 Element query_request = GSXML.createBasicRequest(msg_doc, GSXML.REQUEST_TYPE_PROCESS, to_att.toString(), userContext); 190 195 query_message.appendChild(query_request); 191 196 // should we add params individually? 192 Element new_param_list = this.doc.createElement(GSXML.PARAM_ELEM + GSXML.LIST_MODIFIER);197 Element new_param_list = msg_doc.createElement(GSXML.PARAM_ELEM + GSXML.LIST_MODIFIER); 193 198 query_request.appendChild(new_param_list); 194 new_param_list.appendChild( this.doc.importNode(GSXML.getNamedElement(param_list, GSXML.PARAM_ELEM, GSXML.NAME_ATT, QUERY_PARAM), true));199 new_param_list.appendChild(msg_doc.importNode(GSXML.getNamedElement(param_list, GSXML.PARAM_ELEM, GSXML.NAME_ATT, QUERY_PARAM), true)); 195 200 Element query_result = (Element) this.router.process(query_message); 196 201 … … 215 220 } 216 221 217 Element metadata_list = this.doc.createElement(GSXML.METADATA_ELEM + GSXML.LIST_MODIFIER);222 Element metadata_list = result_doc.createElement(GSXML.METADATA_ELEM + GSXML.LIST_MODIFIER); 218 223 result.appendChild(metadata_list); 219 GSXML.addMetadata( this.doc,metadata_list, "numDocsReturned", "" + numDocsReturned);220 //GSXML.addMetadata( this.doc,metadata_list, "numDocsMatched", ""+numDocsMatched);221 222 Element doc_node_list = this.doc.createElement(GSXML.DOC_NODE_ELEM + GSXML.LIST_MODIFIER);224 GSXML.addMetadata(metadata_list, "numDocsReturned", "" + numDocsReturned); 225 //GSXML.addMetadata(metadata_list, "numDocsMatched", ""+numDocsMatched); 226 227 Element doc_node_list = result_doc.createElement(GSXML.DOC_NODE_ELEM + GSXML.LIST_MODIFIER); 223 228 result.appendChild(doc_node_list); 224 229 … … 240 245 { 241 246 242 doc_node_list.appendChild( this.doc.importNode(this_node, true));247 doc_node_list.appendChild(result_doc.importNode(this_node, true)); 243 248 } 244 249 else … … 267 272 268 273 // first, get the message router info 269 Element coll_list_message = this.doc.createElement(GSXML.MESSAGE_ELEM); 270 Element coll_list_request = GSXML.createBasicRequest(this.doc, GSXML.REQUEST_TYPE_DESCRIBE, "", userContext); // uid 274 Document msg_doc = XMLConverter.newDOM(); 275 Element coll_list_message = msg_doc.createElement(GSXML.MESSAGE_ELEM); 276 Element coll_list_request = GSXML.createBasicRequest(msg_doc, GSXML.REQUEST_TYPE_DESCRIBE, "", userContext); // uid 271 277 coll_list_message.appendChild(coll_list_request); 272 278 logger.debug("coll list request = " + this.converter.getPrettyString(coll_list_request)); … … 283 289 NodeList colls = coll_list_response.getElementsByTagName(GSXML.COLLECTION_ELEM); 284 290 // we can send the same request to multiple collections at once by using a comma separated list 285 Element metadata_message = this.doc.createElement(GSXML.MESSAGE_ELEM);291 Element metadata_message = msg_doc.createElement(GSXML.MESSAGE_ELEM); 286 292 StringBuffer colls_sb = new StringBuffer(); 287 293 for (int i = 0; i < colls.getLength(); i++) … … 298 304 } 299 305 300 Element metadata_request = GSXML.createBasicRequest( this.doc, GSXML.REQUEST_TYPE_DESCRIBE, colls_sb.toString(), userContext);306 Element metadata_request = GSXML.createBasicRequest(msg_doc, GSXML.REQUEST_TYPE_DESCRIBE, colls_sb.toString(), userContext); 301 307 metadata_message.appendChild(metadata_request); 302 308 logger.debug("metadata request = " + this.converter.getPrettyString(metadata_message)); … … 352 358 353 359 // need to request MR for collection descriptions 354 Element metadata_message = this.doc.createElement(GSXML.MESSAGE_ELEM); 360 Document msg_doc = XMLConverter.newDOM(); 361 Element metadata_message = msg_doc.createElement(GSXML.MESSAGE_ELEM); 355 362 356 363 // get a comma separated list of coll ids to send to MR … … 365 372 colls_sb.append(coll_ids_list[i]); 366 373 } 367 Element metadata_request = GSXML.createBasicRequest( this.doc, GSXML.REQUEST_TYPE_DESCRIBE, colls_sb.toString(), userContext);374 Element metadata_request = GSXML.createBasicRequest(msg_doc, GSXML.REQUEST_TYPE_DESCRIBE, colls_sb.toString(), userContext); 368 375 // param_list to request just displayTextList 369 Element param_list = this.doc.createElement(GSXML.PARAM_ELEM + GSXML.LIST_MODIFIER);370 Element param = GSXML.createParameter( this.doc, GSXML.SUBSET_PARAM, GSXML.DISPLAY_TEXT_ELEM + GSXML.LIST_MODIFIER);376 Element param_list = msg_doc.createElement(GSXML.PARAM_ELEM + GSXML.LIST_MODIFIER); 377 Element param = GSXML.createParameter(msg_doc, GSXML.SUBSET_PARAM, GSXML.DISPLAY_TEXT_ELEM + GSXML.LIST_MODIFIER); 371 378 param_list.appendChild(param); 372 379 metadata_request.appendChild(param_list); … … 393 400 { 394 401 // Create a new (empty) result message 395 Element result = this.doc.createElement(GSXML.RESPONSE_ELEM); 402 Document result_doc = XMLConverter.newDOM(); 403 Element result = result_doc.createElement(GSXML.RESPONSE_ELEM); 396 404 result.setAttribute(GSXML.FROM_ATT, DOCUMENT_METADATA_RETRIEVE_SERVICE); 397 405 result.setAttribute(GSXML.TYPE_ATT, GSXML.REQUEST_TYPE_PROCESS); … … 414 422 415 423 // the resulting doc node list 416 Element result_node_list = this.doc.createElement(GSXML.DOC_NODE_ELEM + GSXML.LIST_MODIFIER);424 Element result_node_list = result_doc.createElement(GSXML.DOC_NODE_ELEM + GSXML.LIST_MODIFIER); 417 425 result.appendChild(result_node_list); 418 426 419 // get all the metadata params420 Element new_param_list = this.doc.createElement(GSXML.PARAM_ELEM + GSXML.LIST_MODIFIER);421 Element param = GSXML.createParameter(this.doc, "metadata", "Title");422 new_param_list.appendChild(param);423 427 424 428 // organise the nodes into collection lists … … 432 436 if (coll_items == null) 433 437 { 434 coll_items = this.doc.createElement(GSXML.DOC_NODE_ELEM + GSXML.LIST_MODIFIER);438 coll_items = result_doc.createElement(GSXML.DOC_NODE_ELEM + GSXML.LIST_MODIFIER); 435 439 coll_map.put(coll_name, coll_items); 436 440 } 437 coll_items.appendChild( this.doc.importNode(doc_node, true));441 coll_items.appendChild(result_doc.importNode(doc_node, true)); 438 442 } 439 443 440 444 // create teh individual requests 441 Element meta_request_message = this.doc.createElement(GSXML.MESSAGE_ELEM); 445 Document msg_doc = XMLConverter.newDOM(); 446 Element meta_request_message = msg_doc.createElement(GSXML.MESSAGE_ELEM); 447 // get all the metadata params 448 Element new_param_list = msg_doc.createElement(GSXML.PARAM_ELEM + GSXML.LIST_MODIFIER); 449 Element param = GSXML.createParameter(msg_doc, "metadata", "Title"); 450 new_param_list.appendChild(param); 451 442 452 Set mapping_set = coll_map.entrySet(); 443 453 Iterator iter = mapping_set.iterator(); … … 448 458 String cname = (String) e.getKey(); 449 459 Element doc_nodes = (Element) e.getValue(); 450 Element meta_request = GSXML.createBasicRequest( this.doc, GSXML.REQUEST_TYPE_PROCESS, GSPath.appendLink(cname, DOCUMENT_METADATA_RETRIEVE_SERVICE), userContext);451 meta_request.appendChild( doc_nodes);460 Element meta_request = GSXML.createBasicRequest(msg_doc, GSXML.REQUEST_TYPE_PROCESS, GSPath.appendLink(cname, DOCUMENT_METADATA_RETRIEVE_SERVICE), userContext); 461 meta_request.appendChild(msg_doc.importNode(doc_nodes, true)); 452 462 meta_request.appendChild(new_param_list.cloneNode(true)); 453 463 meta_request_message.appendChild(meta_request); … … 456 466 457 467 Node meta_result_node = this.router.process(meta_request_message); 458 Element meta_result = this.converter.nodeToElement(meta_result_node);468 Element meta_result = GSXML.nodeToElement(meta_result_node); 459 469 460 470 // now need to put the doc nodes back in the right order … … 472 482 { 473 483 Element doc_node = (Element) query_doc_list.item(i); 474 Element new_node = (Element) this.doc.importNode(doc_node, false);484 Element new_node = (Element) result_doc.importNode(doc_node, false); 475 485 result_node_list.appendChild(new_node); 476 486 String coll_name = doc_node.getAttribute("collection");
Note:
See TracChangeset
for help on using the changeset viewer.