Changeset 26406
- Timestamp:
- 2012-10-30T14:37:16+13:00 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
main/trunk/greenstone3/src/java/org/greenstone/gsdl3/service/CrossCollectionSearch.java
r26055 r26406 49 49 // the services on offer - these proxy the actual collection ones 50 50 protected static final String TEXT_QUERY_SERVICE = "TextQuery"; 51 protected static final String ADV_QUERY_SERVICE = "AdvTextQuery";52 51 protected static final String DOCUMENT_METADATA_RETRIEVE_SERVICE = "DocumentMetadataRetrieve"; 53 52 54 53 protected String[] coll_ids_list = null; 55 54 protected String[] coll_ids_list_no_all = null; 56 protected String[] coll_names_list = null; 55 // maps lang to coll names list 56 protected HashMap<String, String[]> coll_names_map = null; 57 //protected String[] coll_names_list = null; 57 58 58 59 /** constructor */ … … 120 121 if (coll_ids_list == null) 121 122 { 122 initCollectionList( );123 initCollectionList(lang); 123 124 } 124 Element param = GSXML.createParameterDescription(this.doc, COLLECTION_PARAM, getTextString("param." + COLLECTION_PARAM, lang), GSXML.PARAM_TYPE_ENUM_MULTI, "all", coll_ids_list, coll_names_list); 125 if (!coll_names_map.containsKey(lang)) { 126 addCollectionNames(lang); 127 } 128 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)); 125 129 param_list.appendChild(param); 126 130 // query param … … 257 261 258 262 // } 259 protected boolean initCollectionList( )263 protected boolean initCollectionList(String lang) 260 264 { 261 265 UserContext userContext = new UserContext(); 262 userContext.setLanguage( "en");266 userContext.setLanguage(lang); 263 267 userContext.setUserID(""); 264 268 … … 279 283 280 284 NodeList colls = coll_list_response.getElementsByTagName(GSXML.COLLECTION_ELEM); 281 // we will send all the requests in a single message285 // we can send the same request to multiple collections at once by using a comma separated list 282 286 Element metadata_message = this.doc.createElement(GSXML.MESSAGE_ELEM); 287 StringBuffer colls_sb = new StringBuffer(); 283 288 for (int i = 0; i < colls.getLength(); i++) 284 289 { 285 290 Element c = (Element) colls.item(i); 286 291 String name = c.getAttribute(GSXML.NAME_ATT); 287 Element metadata_request = GSXML.createBasicRequest(this.doc, GSXML.REQUEST_TYPE_DESCRIBE, name, userContext); 288 metadata_message.appendChild(metadata_request); 289 } 292 if (i!=0) { 293 colls_sb.append(","); 294 } 295 colls_sb.append(name); 296 //Element metadata_request = GSXML.createBasicRequest(this.doc, GSXML.REQUEST_TYPE_DESCRIBE, name, userContext); 297 //metadata_message.appendChild(metadata_request); 298 } 299 Element metadata_request = GSXML.createBasicRequest(this.doc, GSXML.REQUEST_TYPE_DESCRIBE, colls_sb.toString(), userContext); 300 metadata_message.appendChild(metadata_request); 290 301 logger.debug("metadata request = " + this.converter.getPrettyString(metadata_message)); 291 302 Element metadata_response = (Element) this.router.process(metadata_message); … … 306 317 // use the name of the response in case we are talking to a remote collection, not the name of the collection. 307 318 String coll_id = response.getAttribute(GSXML.FROM_ATT); 308 String coll_name = coll_id + ": " + GSXML.getDisplayText(coll, GSXML.DISPLAY_TEXT_NAME, "en", "en"); // just use english for now until we do some caching or something319 String coll_name = GSXML.getDisplayText(coll, GSXML.DISPLAY_TEXT_NAME, lang, "en"); 309 320 valid_colls.add(coll_id); 310 321 valid_coll_names.add(coll_name); … … 320 331 321 332 valid_colls.add(0, "all"); 322 valid_coll_names.add(0, getTextString("param." + COLLECTION_PARAM + ".all", "en")); 333 valid_coll_names.add(0, getTextString("param." + COLLECTION_PARAM + ".all", lang)); 334 323 335 this.coll_ids_list = new String[1]; 324 this.coll_names_list = new String[1];325 336 this.coll_ids_list = valid_colls.toArray(coll_ids_list); 326 this.coll_names_list = valid_coll_names.toArray(coll_names_list); 337 338 this.coll_names_map = new HashMap<String, String[]>(); 339 String[] coll_names_list = new String[1]; 340 coll_names_list = valid_coll_names.toArray(coll_names_list); 341 this.coll_names_map.put(lang, coll_names_list); 327 342 return true; 328 343 } 344 345 protected void addCollectionNames(String lang) { 346 347 UserContext userContext = new UserContext(); 348 userContext.setLanguage(lang); 349 userContext.setUserID(""); 350 351 ArrayList<String> coll_names = new ArrayList<String>(); 352 coll_names.add(getTextString("param." + COLLECTION_PARAM + ".all", lang)); 353 354 // need to request MR for collection descriptions 355 Element metadata_message = this.doc.createElement(GSXML.MESSAGE_ELEM); 356 357 // get a comma separated list of coll ids to send to MR 358 // the first item is the place holder for 'all' 359 StringBuffer colls_sb = new StringBuffer(); 360 for (int i=1; i<coll_ids_list.length; i++) { 361 if (i!=1) { 362 colls_sb.append(","); 363 } 364 colls_sb.append(coll_ids_list[i]); 365 } 366 Element metadata_request = GSXML.createBasicRequest(this.doc, GSXML.REQUEST_TYPE_DESCRIBE, colls_sb.toString(), userContext); 367 // param_list to request just displayTextList 368 Element param_list = this.doc.createElement(GSXML.PARAM_ELEM+GSXML.LIST_MODIFIER); 369 Element param = GSXML.createParameter(this.doc, GSXML.SUBSET_PARAM, GSXML.DISPLAY_TEXT_ELEM + GSXML.LIST_MODIFIER); 370 param_list.appendChild(param); 371 metadata_request.appendChild(param_list); 372 metadata_message.appendChild(metadata_request); 373 logger.debug("coll names metadata request = " + this.converter.getPrettyString(metadata_message)); 374 Element metadata_response = (Element) this.router.process(metadata_message); 375 logger.debug("coll names metadata response = " + this.converter.getPrettyString(metadata_response)); 376 NodeList coll_responses = metadata_response.getElementsByTagName(GSXML.RESPONSE_ELEM); 377 for (int i = 0; i < coll_responses.getLength(); i++) 378 { 379 Element response = (Element) coll_responses.item(i); 380 Element coll = (Element) GSXML.getChildByTagName(response, GSXML.COLLECTION_ELEM); 381 String coll_name = GSXML.getDisplayText(coll, GSXML.DISPLAY_TEXT_NAME, lang, "en"); 382 coll_names.add(coll_name); 383 } 384 385 String[] coll_names_list = new String[1]; 386 coll_names_list = coll_names.toArray(coll_names_list); 387 this.coll_names_map.put(lang, coll_names_list); 388 389 } 329 390 330 391 protected Element processDocumentMetadataRetrieve(Element request)
Note:
See TracChangeset
for help on using the changeset viewer.