Changeset 24977
- Timestamp:
- 2012-01-26T10:38:03+13:00 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
main/trunk/greenstone3/src/java/org/greenstone/gsdl3/service/BerryBasket.java
r24221 r24977 47 47 import org.apache.log4j.*; 48 48 49 public class BerryBasket 50 extends ServiceRack { 51 52 static Logger logger = Logger.getLogger(org.greenstone.gsdl3.service.BerryBasket.class.getName()); 53 54 // the services on offer 55 // these strings must match what is found in the properties file 56 protected static final String ADD_ITEM_SERVICE = "AddItem"; 57 protected static final String DISPLAY_ITEMS_SERVICE = "DisplayList"; 58 protected static final String ITEM_NUM_SERVICE = "ItemNum"; 59 protected static final String DELETE_ITEMS_SERVICE = "DeleteItems"; 60 protected static final String SEND_MAIL_SERVICE = "SendMail"; 61 protected static final String DELETE_ITEM_SERVICE = "DeleteItem"; 62 63 protected static final String ITEM_PARAM = "item"; 64 protected static final String delimiter ="|"; 65 protected static final int delay = 1800000; 66 67 protected Hashtable userMap = null; 68 protected Hashtable timerMap = null; 69 protected String username=""; 70 protected String password=""; 71 72 73 /** constructor */ 74 public BerryBasket() 75 { 76 userMap = new Hashtable(); 77 timerMap = new Hashtable(); 78 } 79 80 private Hashtable updateDocMap(Element request){ 81 82 String id = request.getAttribute("uid"); 83 84 if (userMap.containsKey(id)){ 85 if (timerMap.containsKey(id)){ 86 UserTimer timer = (UserTimer)timerMap.get(id); 87 timer.restart(); 88 } 89 return (Hashtable) userMap.get(id); 90 } 91 else{ 92 UserTimer timer = new UserTimer(delay,id); 93 timerMap.put(id,timer); 94 timer.start(); 95 Hashtable newDocs= new Hashtable(); 96 userMap.put(id,newDocs); 97 return newDocs; 98 } 99 } 100 101 102 /** configure this service */ 103 public boolean configure(Element info, Element extra_info) 104 { 105 logger.info("Configuring BerryBasket..."); 106 this.config_info = info; 107 108 // set up short_service_info_ - for now just has name and type 109 Element add_service = this.doc.createElement(GSXML.SERVICE_ELEM); 110 add_service.setAttribute(GSXML.TYPE_ATT, "gather"); // what?? 111 add_service.setAttribute(GSXML.NAME_ATT, ADD_ITEM_SERVICE); 112 this.short_service_info.appendChild(add_service); 113 114 115 // set up short_service_info_ - for now just has name and type 116 Element disp_service = this.doc.createElement(GSXML.SERVICE_ELEM); 117 disp_service.setAttribute(GSXML.TYPE_ATT, "gather"); // what?? 118 disp_service.setAttribute(GSXML.NAME_ATT, DISPLAY_ITEMS_SERVICE); 119 this.short_service_info.appendChild(disp_service); 120 121 // set up short_service_info_ - for now just has name and type 122 Element num_service = this.doc.createElement(GSXML.SERVICE_ELEM); 123 num_service.setAttribute(GSXML.TYPE_ATT, "gather"); // what?? 124 num_service.setAttribute(GSXML.NAME_ATT, ITEM_NUM_SERVICE); 125 this.short_service_info.appendChild(num_service); 126 127 // set up short_service_info_ - for now just has name and type 128 Element delete_service = this.doc.createElement(GSXML.SERVICE_ELEM); 129 delete_service.setAttribute(GSXML.TYPE_ATT, "gather"); // what?? 130 delete_service.setAttribute(GSXML.NAME_ATT, DELETE_ITEMS_SERVICE); 131 this.short_service_info.appendChild(delete_service); 132 133 // set up short_service_info_ - for now just has name and type 134 Element deleteone_service = this.doc.createElement(GSXML.SERVICE_ELEM); 135 deleteone_service.setAttribute(GSXML.TYPE_ATT, "gather"); // what?? 136 deleteone_service.setAttribute(GSXML.NAME_ATT, DELETE_ITEM_SERVICE); 137 this.short_service_info.appendChild(deleteone_service); 138 139 // set up short_service_info_ - for now just has name and type 140 Element mail_service = this.doc.createElement(GSXML.SERVICE_ELEM); 141 mail_service.setAttribute(GSXML.TYPE_ATT, "gather"); // what?? 142 mail_service.setAttribute(GSXML.NAME_ATT, SEND_MAIL_SERVICE); 143 this.short_service_info.appendChild(mail_service); 144 145 146 return true; 147 148 } 149 150 /** returns a specific service description */ 151 protected Element getServiceDescription(String service_id, String lang, String subset) { 152 153 if (service_id.equals(ADD_ITEM_SERVICE)) { 154 Element add_service = this.doc.createElement(GSXML.SERVICE_ELEM); 155 add_service.setAttribute(GSXML.TYPE_ATT, "gather"); // what?? 156 add_service.setAttribute(GSXML.NAME_ATT, ADD_ITEM_SERVICE); 157 return add_service; 158 } 159 if (service_id.equals(DISPLAY_ITEMS_SERVICE)) { 160 161 Element disp_service = this.doc.createElement(GSXML.SERVICE_ELEM); 162 disp_service.setAttribute(GSXML.TYPE_ATT, "gather"); // what?? 163 disp_service.setAttribute(GSXML.NAME_ATT, DISPLAY_ITEMS_SERVICE); 164 return disp_service; 165 } 166 167 if (service_id.equals(ITEM_NUM_SERVICE)) { 168 169 Element num_service = this.doc.createElement(GSXML.SERVICE_ELEM); 170 num_service.setAttribute(GSXML.TYPE_ATT, "gather"); // what?? 171 num_service.setAttribute(GSXML.NAME_ATT, ITEM_NUM_SERVICE); 172 return num_service; 173 } 174 175 if (service_id.equals(DELETE_ITEMS_SERVICE)) { 176 177 Element del_service = this.doc.createElement(GSXML.SERVICE_ELEM); 178 del_service.setAttribute(GSXML.TYPE_ATT, "gather"); // what?? 179 del_service.setAttribute(GSXML.NAME_ATT, DELETE_ITEMS_SERVICE); 180 return del_service; 181 } 182 183 if (service_id.equals(DELETE_ITEM_SERVICE)) { 184 185 Element delone_service = this.doc.createElement(GSXML.SERVICE_ELEM); 186 delone_service.setAttribute(GSXML.TYPE_ATT, "gather"); // what?? 187 delone_service.setAttribute(GSXML.NAME_ATT, DELETE_ITEM_SERVICE); 188 return delone_service; 189 } 190 191 if (service_id.equals(SEND_MAIL_SERVICE)) { 192 193 Element mail_service = this.doc.createElement(GSXML.SERVICE_ELEM); 194 mail_service.setAttribute(GSXML.TYPE_ATT, "gather"); // what?? 195 mail_service.setAttribute(GSXML.NAME_ATT, SEND_MAIL_SERVICE); 196 return mail_service; 197 } 198 199 return null; 200 } 201 202 protected Element processAddItem(Element request) { 203 Hashtable docsMap = updateDocMap(request); 204 205 // Create a new (empty) result message 206 Element result = this.doc.createElement(GSXML.RESPONSE_ELEM); 207 208 // Get the parameters of the request 209 Element param_list = (Element) GSXML.getChildByTagName(request, GSXML.PARAM_ELEM+GSXML.LIST_MODIFIER); 210 if (param_list == null) { 211 logger.error("BerryBasket Error: AddItem request had no paramList."); 212 return result; // Return the empty result 213 } 214 215 HashMap params = GSXML.extractParams(param_list, false); 216 217 String item = (String)params.get("item"); 218 String collection = ""; 219 int pos = item.indexOf(":"); 220 if (pos != -1) { 221 collection = item.substring(0,pos); 222 item = item.substring(pos+1); 223 } 224 225 if (docsMap.containsKey(collection)){ 226 Hashtable items = (Hashtable) docsMap.get(collection); 227 if (!items.containsKey(item)){ 228 Item newItem = generateItem(collection,item); 229 items.put(item, newItem); 230 result.appendChild(newItem.wrapIntoElement()); 231 } 232 } 233 else{ 234 Hashtable items = new Hashtable(); 235 Item newItem = generateItem(collection,item); 236 items.put(item, newItem); 237 docsMap.put(collection,items); 238 result.appendChild(newItem.wrapIntoElement()); 239 } 240 241 return result; 242 } 243 244 private Item generateItem(String collection, String id){ 245 246 Item item = new Item(collection, id); 247 String to = GSPath.appendLink(collection, "DocumentMetadataRetrieve"); 248 ArrayList tmp = new ArrayList(); 249 tmp.add(id); 250 Element response = getDocumentMetadata(to,"en","dumy", tmp.iterator()); 251 Element doc_node = (Element)response.getElementsByTagName(GSXML.DOC_NODE_ELEM).item(0); 252 253 String node_id = doc_node.getAttribute(GSXML.NODE_ID_ATT); 254 Element metadata_list = (Element)doc_node.getElementsByTagName(GSXML.METADATA_ELEM+GSXML.LIST_MODIFIER).item(0); 255 256 //assign title metadata if any 257 Element metadata = GSXML.getNamedElement(metadata_list,"metadata","name","Title"); 258 if (metadata != null){ 259 item.title = GSXML.getNodeText(metadata).trim(); 260 } 261 //assign date metadata if any 262 metadata = GSXML.getNamedElement(metadata_list,"metadata","name","Date"); 263 if (metadata != null){ 264 item.date = GSXML.getNodeText(metadata).trim(); 265 } 266 267 //assign root title metadata if any 268 metadata = GSXML.getNamedElement(metadata_list,"metadata","name","root_Title"); 269 if (metadata != null){ 270 String rootTitle = GSXML.getNodeText(metadata).trim(); 271 if (!rootTitle.equals(item.title)){ 272 item.rootTitle = rootTitle; 273 } 274 275 } 276 277 return item; 278 } 279 280 281 protected Element processDeleteItems(Element request) { 282 Hashtable docsMap = updateDocMap(request); 283 284 // Create a new (empty) result message 285 Element result = this.doc.createElement(GSXML.RESPONSE_ELEM); 286 287 // Get the parameters of the request 288 Element param_list = (Element) GSXML.getChildByTagName(request, GSXML.PARAM_ELEM+GSXML.LIST_MODIFIER); 289 290 if (param_list == null) { 291 logger.error("BerryBasket Error: DeleteItem request had no paramList."); 292 return result; // Return the empty result 293 } 294 295 HashMap params = GSXML.extractParams(param_list, false); 296 297 String param = (String)params.get("items"); 298 299 if (param == null) return result; 300 301 String[] items = param.split("\\|"); 302 303 for (int i=0; i<items.length; i++){ 304 String item = items[i]; 305 if (item.trim().length() == 0) continue; 306 String collection = ""; 307 int pos = item.indexOf(":"); 308 if (pos != -1) { 309 collection = item.substring(0,pos); 310 item = item.substring(pos+1); 311 } 312 313 if (docsMap.containsKey(collection)){ 314 Hashtable itemMap = (Hashtable) docsMap.get(collection); 315 if (itemMap.containsKey(item)){ 316 itemMap.remove(item); 317 } 318 if (itemMap.size()==0){ 319 docsMap.remove(collection); 320 } 321 } 322 323 } 324 325 return result; 326 } 327 328 protected Element processDeleteItem(Element request) { 329 Hashtable docsMap = updateDocMap(request); 330 331 // Create a new (empty) result message 332 Element result = this.doc.createElement(GSXML.RESPONSE_ELEM); 333 334 // Get the parameters of the request 335 Element param_list = (Element) GSXML.getChildByTagName(request, GSXML.PARAM_ELEM+GSXML.LIST_MODIFIER); 336 337 if (param_list == null) { 338 logger.error("BerryBasket Error: DeleteItem request had no paramList."); 339 return result; // Return the empty result 340 } 341 342 HashMap params = GSXML.extractParams(param_list, false); 343 344 String param = (String)params.get("item"); 345 346 if (param == null) return result; 347 348 String item = param; 349 350 String collection = ""; 351 int pos = item.indexOf(":"); 352 353 if (pos != -1) { 354 collection = item.substring(0,pos); 355 item = item.substring(pos+1); 356 } 357 358 if (docsMap.containsKey(collection)){ 359 Hashtable itemMap = (Hashtable) docsMap.get(collection); 360 if (itemMap.containsKey(item)){ 361 itemMap.remove(item); 362 } 363 if (itemMap.size()==0){ 364 docsMap.remove(collection); 365 } 366 } 367 368 return result; 369 } 370 371 372 protected Element processItemNum(Element request){ 373 Hashtable docsMap = updateDocMap(request); 374 375 // Create a new (empty) result message 376 Element result = this.doc.createElement(GSXML.RESPONSE_ELEM); 377 378 int size = 0; 379 String ids =""; 380 Iterator keys = docsMap.keySet().iterator(); 381 382 while(keys.hasNext()){ 383 Hashtable items = (Hashtable) docsMap.get((String)keys.next()); 384 size+=items.size(); 385 Iterator values = items.values().iterator(); 386 while(values.hasNext()){ 387 Item item = (Item)values.next(); 388 result.appendChild(item.wrapIntoElement()); 389 } 390 } 391 392 Element selement = this.doc.createElement("size"); 393 selement.setAttribute("value",size+""); 394 result.appendChild(selement); 395 396 return result; 397 } 398 399 400 private Element getDocumentMetadata(String to, String lang, String uid, Iterator ids){ 401 402 // Build a request to obtain some document metadata 403 Element dm_message = this.doc.createElement(GSXML.MESSAGE_ELEM); 404 Element dm_request = GSXML.createBasicRequest(this.doc, GSXML.REQUEST_TYPE_PROCESS, to, lang, uid); 405 dm_message.appendChild(dm_request); 406 407 // Create a parameter list to specify the required metadata information 408 HashSet meta_names = new HashSet(); 409 meta_names.add("Title"); // the default 410 meta_names.add("root_Title"); 411 meta_names.add("Date"); 412 413 414 Element param_list = this.doc.createElement(GSXML.PARAM_ELEM+GSXML.LIST_MODIFIER); 415 416 Element param = null; 417 Iterator i = meta_names.iterator(); 418 while (i.hasNext()) { 419 String name = (String)i.next(); 420 param = this.doc.createElement(GSXML.PARAM_ELEM); 421 param_list.appendChild(param); 422 param.setAttribute(GSXML.NAME_ATT, "metadata"); 423 param.setAttribute(GSXML.VALUE_ATT, name); 424 425 } 426 427 dm_request.appendChild(param_list); 428 429 // create the doc node list for the metadata request 430 Element dm_doc_list = this.doc.createElement(GSXML.DOC_NODE_ELEM+GSXML.LIST_MODIFIER); 431 dm_request.appendChild(dm_doc_list); 432 433 while (ids.hasNext()){ 434 // Add the documentNode to the list 435 Element dm_doc_node = this.doc.createElement(GSXML.DOC_NODE_ELEM); 436 dm_doc_list.appendChild(dm_doc_node); 437 dm_doc_node.setAttribute(GSXML.NODE_ID_ATT,(String)ids.next()); 438 } 439 440 return (Element) this.router.process(dm_message); 441 442 } 443 444 445 protected Element processDisplayList(Element request) { 446 Hashtable docsMap = updateDocMap(request); 447 448 // Create a new (empty) result message 449 Element result = this.doc.createElement(GSXML.RESPONSE_ELEM); 450 451 Iterator keys = docsMap.keySet().iterator(); 452 453 while(keys.hasNext()){ 454 String collection = (String)keys.next(); 455 Hashtable items = (Hashtable)docsMap.get(collection); 456 Iterator itemItr = items.values().iterator(); 457 458 Element collectionNode = this.doc.createElement("berryList"); 459 collectionNode.setAttribute("name",collection); 460 result.appendChild(collectionNode); 461 462 while(itemItr.hasNext()){ 463 Item item = (Item)itemItr.next(); 464 Element itemElement = this.doc.createElement("item"); 465 466 collectionNode.appendChild(itemElement); 467 itemElement.setAttribute("name", item.docid); 468 itemElement.setAttribute("collection", item.collection); 469 itemElement.setAttribute("title",item.title); 470 itemElement.setAttribute("date",item.date); 471 itemElement.setAttribute("root_title",item.rootTitle); 472 } 473 } 474 475 return result; 476 477 } 478 479 480 public Element processSendMail(Element request){ 49 public class BerryBasket extends ServiceRack 50 { 51 52 static Logger logger = Logger.getLogger(org.greenstone.gsdl3.service.BerryBasket.class.getName()); 53 54 // the services on offer 55 // these strings must match what is found in the properties file 56 protected static final String ADD_ITEM_SERVICE = "AddItem"; 57 protected static final String DISPLAY_ITEMS_SERVICE = "DisplayList"; 58 protected static final String ITEM_NUM_SERVICE = "ItemNum"; 59 protected static final String DELETE_ITEMS_SERVICE = "DeleteItems"; 60 protected static final String SEND_MAIL_SERVICE = "SendMail"; 61 protected static final String DELETE_ITEM_SERVICE = "DeleteItem"; 62 63 protected static final String ITEM_PARAM = "item"; 64 protected static final String delimiter = "|"; 65 protected static final int delay = 1800000; 66 67 protected Hashtable userMap = null; 68 protected Hashtable timerMap = null; 69 protected String username = ""; 70 protected String password = ""; 71 72 /** constructor */ 73 public BerryBasket() 74 { 75 userMap = new Hashtable(); 76 timerMap = new Hashtable(); 77 } 78 79 private Hashtable updateDocMap(Element request) 80 { 81 82 String id = request.getAttribute("uid"); 83 84 if (userMap.containsKey(id)) 85 { 86 if (timerMap.containsKey(id)) 87 { 88 UserTimer timer = (UserTimer) timerMap.get(id); 89 timer.restart(); 90 } 91 return (Hashtable) userMap.get(id); 92 } 93 else 94 { 95 UserTimer timer = new UserTimer(delay, id); 96 timerMap.put(id, timer); 97 timer.start(); 98 Hashtable newDocs = new Hashtable(); 99 userMap.put(id, newDocs); 100 return newDocs; 101 } 102 } 103 104 /** configure this service */ 105 public boolean configure(Element info, Element extra_info) 106 { 107 logger.info("Configuring BerryBasket..."); 108 this.config_info = info; 109 110 // set up short_service_info_ - for now just has name and type 111 Element add_service = this.doc.createElement(GSXML.SERVICE_ELEM); 112 add_service.setAttribute(GSXML.TYPE_ATT, "gather"); // what?? 113 add_service.setAttribute(GSXML.NAME_ATT, ADD_ITEM_SERVICE); 114 this.short_service_info.appendChild(add_service); 115 116 // set up short_service_info_ - for now just has name and type 117 Element disp_service = this.doc.createElement(GSXML.SERVICE_ELEM); 118 disp_service.setAttribute(GSXML.TYPE_ATT, "gather"); // what?? 119 disp_service.setAttribute(GSXML.NAME_ATT, DISPLAY_ITEMS_SERVICE); 120 this.short_service_info.appendChild(disp_service); 121 122 // set up short_service_info_ - for now just has name and type 123 Element num_service = this.doc.createElement(GSXML.SERVICE_ELEM); 124 num_service.setAttribute(GSXML.TYPE_ATT, "gather"); // what?? 125 num_service.setAttribute(GSXML.NAME_ATT, ITEM_NUM_SERVICE); 126 this.short_service_info.appendChild(num_service); 127 128 // set up short_service_info_ - for now just has name and type 129 Element delete_service = this.doc.createElement(GSXML.SERVICE_ELEM); 130 delete_service.setAttribute(GSXML.TYPE_ATT, "gather"); // what?? 131 delete_service.setAttribute(GSXML.NAME_ATT, DELETE_ITEMS_SERVICE); 132 this.short_service_info.appendChild(delete_service); 133 134 // set up short_service_info_ - for now just has name and type 135 Element deleteone_service = this.doc.createElement(GSXML.SERVICE_ELEM); 136 deleteone_service.setAttribute(GSXML.TYPE_ATT, "gather"); // what?? 137 deleteone_service.setAttribute(GSXML.NAME_ATT, DELETE_ITEM_SERVICE); 138 this.short_service_info.appendChild(deleteone_service); 139 140 // set up short_service_info_ - for now just has name and type 141 Element mail_service = this.doc.createElement(GSXML.SERVICE_ELEM); 142 mail_service.setAttribute(GSXML.TYPE_ATT, "gather"); // what?? 143 mail_service.setAttribute(GSXML.NAME_ATT, SEND_MAIL_SERVICE); 144 this.short_service_info.appendChild(mail_service); 145 146 return true; 147 148 } 149 150 /** returns a specific service description */ 151 protected Element getServiceDescription(String service_id, String lang, String subset) 152 { 153 154 if (service_id.equals(ADD_ITEM_SERVICE)) 155 { 156 Element add_service = this.doc.createElement(GSXML.SERVICE_ELEM); 157 add_service.setAttribute(GSXML.TYPE_ATT, "gather"); // what?? 158 add_service.setAttribute(GSXML.NAME_ATT, ADD_ITEM_SERVICE); 159 return add_service; 160 } 161 if (service_id.equals(DISPLAY_ITEMS_SERVICE)) 162 { 163 164 Element disp_service = this.doc.createElement(GSXML.SERVICE_ELEM); 165 disp_service.setAttribute(GSXML.TYPE_ATT, "gather"); // what?? 166 disp_service.setAttribute(GSXML.NAME_ATT, DISPLAY_ITEMS_SERVICE); 167 return disp_service; 168 } 169 170 if (service_id.equals(ITEM_NUM_SERVICE)) 171 { 172 173 Element num_service = this.doc.createElement(GSXML.SERVICE_ELEM); 174 num_service.setAttribute(GSXML.TYPE_ATT, "gather"); // what?? 175 num_service.setAttribute(GSXML.NAME_ATT, ITEM_NUM_SERVICE); 176 return num_service; 177 } 178 179 if (service_id.equals(DELETE_ITEMS_SERVICE)) 180 { 181 182 Element del_service = this.doc.createElement(GSXML.SERVICE_ELEM); 183 del_service.setAttribute(GSXML.TYPE_ATT, "gather"); // what?? 184 del_service.setAttribute(GSXML.NAME_ATT, DELETE_ITEMS_SERVICE); 185 return del_service; 186 } 187 188 if (service_id.equals(DELETE_ITEM_SERVICE)) 189 { 190 191 Element delone_service = this.doc.createElement(GSXML.SERVICE_ELEM); 192 delone_service.setAttribute(GSXML.TYPE_ATT, "gather"); // what?? 193 delone_service.setAttribute(GSXML.NAME_ATT, DELETE_ITEM_SERVICE); 194 return delone_service; 195 } 196 197 if (service_id.equals(SEND_MAIL_SERVICE)) 198 { 199 200 Element mail_service = this.doc.createElement(GSXML.SERVICE_ELEM); 201 mail_service.setAttribute(GSXML.TYPE_ATT, "gather"); // what?? 202 mail_service.setAttribute(GSXML.NAME_ATT, SEND_MAIL_SERVICE); 203 return mail_service; 204 } 205 206 return null; 207 } 208 209 protected Element processAddItem(Element request) 210 { 211 Hashtable docsMap = updateDocMap(request); 212 481 213 // Create a new (empty) result message 482 214 Element result = this.doc.createElement(GSXML.RESPONSE_ELEM); 483 215 484 216 // Get the parameters of the request 485 Element param_list = (Element) GSXML.getChildByTagName(request, GSXML.PARAM_ELEM+GSXML.LIST_MODIFIER); 486 487 if (param_list == null) { 217 Element param_list = (Element) GSXML.getChildByTagName(request, GSXML.PARAM_ELEM + GSXML.LIST_MODIFIER); 218 if (param_list == null) 219 { 220 logger.error("BerryBasket Error: AddItem request had no paramList."); 221 return result; // Return the empty result 222 } 223 224 HashMap params = GSXML.extractParams(param_list, false); 225 226 String item = (String) params.get("item"); 227 String collection = ""; 228 int pos = item.indexOf(":"); 229 if (pos != -1) 230 { 231 collection = item.substring(0, pos); 232 item = item.substring(pos + 1); 233 } 234 235 if (docsMap.containsKey(collection)) 236 { 237 Hashtable items = (Hashtable) docsMap.get(collection); 238 if (!items.containsKey(item)) 239 { 240 Item newItem = generateItem(collection, item); 241 items.put(item, newItem); 242 result.appendChild(newItem.wrapIntoElement()); 243 } 244 } 245 else 246 { 247 Hashtable items = new Hashtable(); 248 Item newItem = generateItem(collection, item); 249 items.put(item, newItem); 250 docsMap.put(collection, items); 251 result.appendChild(newItem.wrapIntoElement()); 252 } 253 254 return result; 255 } 256 257 private Item generateItem(String collection, String id) 258 { 259 260 Item item = new Item(collection, id); 261 String to = GSPath.appendLink(collection, "DocumentMetadataRetrieve"); 262 ArrayList tmp = new ArrayList(); 263 tmp.add(id); 264 Element response = getDocumentMetadata(to, "en", "dumy", tmp.iterator()); 265 Element doc_node = (Element) response.getElementsByTagName(GSXML.DOC_NODE_ELEM).item(0); 266 267 String node_id = doc_node.getAttribute(GSXML.NODE_ID_ATT); 268 Element metadata_list = (Element) doc_node.getElementsByTagName(GSXML.METADATA_ELEM + GSXML.LIST_MODIFIER).item(0); 269 270 //assign title metadata if any 271 Element metadata = GSXML.getNamedElement(metadata_list, "metadata", "name", "Title"); 272 if (metadata != null) 273 { 274 item.title = GSXML.getNodeText(metadata).trim(); 275 } 276 //assign date metadata if any 277 metadata = GSXML.getNamedElement(metadata_list, "metadata", "name", "Date"); 278 if (metadata != null) 279 { 280 item.date = GSXML.getNodeText(metadata).trim(); 281 } 282 283 //assign root title metadata if any 284 metadata = GSXML.getNamedElement(metadata_list, "metadata", "name", "root_Title"); 285 if (metadata != null) 286 { 287 String rootTitle = GSXML.getNodeText(metadata).trim(); 288 if (!rootTitle.equals(item.title)) 289 { 290 item.rootTitle = rootTitle; 291 } 292 293 } 294 295 return item; 296 } 297 298 protected Element processDeleteItems(Element request) 299 { 300 Hashtable docsMap = updateDocMap(request); 301 302 // Create a new (empty) result message 303 Element result = this.doc.createElement(GSXML.RESPONSE_ELEM); 304 305 // Get the parameters of the request 306 Element param_list = (Element) GSXML.getChildByTagName(request, GSXML.PARAM_ELEM + GSXML.LIST_MODIFIER); 307 308 if (param_list == null) 309 { 310 logger.error("BerryBasket Error: DeleteItem request had no paramList."); 311 return result; // Return the empty result 312 } 313 314 HashMap params = GSXML.extractParams(param_list, false); 315 316 String param = (String) params.get("items"); 317 318 if (param == null) 319 return result; 320 321 String[] items = param.split("\\|"); 322 323 for (int i = 0; i < items.length; i++) 324 { 325 String item = items[i]; 326 if (item.trim().length() == 0) 327 continue; 328 String collection = ""; 329 int pos = item.indexOf(":"); 330 if (pos != -1) 331 { 332 collection = item.substring(0, pos); 333 item = item.substring(pos + 1); 334 } 335 336 if (docsMap.containsKey(collection)) 337 { 338 Hashtable itemMap = (Hashtable) docsMap.get(collection); 339 if (itemMap.containsKey(item)) 340 { 341 itemMap.remove(item); 342 } 343 if (itemMap.size() == 0) 344 { 345 docsMap.remove(collection); 346 } 347 } 348 349 } 350 351 return result; 352 } 353 354 protected Element processDeleteItem(Element request) 355 { 356 Hashtable docsMap = updateDocMap(request); 357 358 // Create a new (empty) result message 359 Element result = this.doc.createElement(GSXML.RESPONSE_ELEM); 360 361 // Get the parameters of the request 362 Element param_list = (Element) GSXML.getChildByTagName(request, GSXML.PARAM_ELEM + GSXML.LIST_MODIFIER); 363 364 if (param_list == null) 365 { 366 logger.error("BerryBasket Error: DeleteItem request had no paramList."); 367 return result; // Return the empty result 368 } 369 370 HashMap params = GSXML.extractParams(param_list, false); 371 372 String param = (String) params.get("item"); 373 374 if (param == null) 375 return result; 376 377 String item = param; 378 379 String collection = ""; 380 int pos = item.indexOf(":"); 381 382 if (pos != -1) 383 { 384 collection = item.substring(0, pos); 385 item = item.substring(pos + 1); 386 } 387 388 if (docsMap.containsKey(collection)) 389 { 390 Hashtable itemMap = (Hashtable) docsMap.get(collection); 391 if (itemMap.containsKey(item)) 392 { 393 itemMap.remove(item); 394 } 395 if (itemMap.size() == 0) 396 { 397 docsMap.remove(collection); 398 } 399 } 400 401 return result; 402 } 403 404 protected Element processItemNum(Element request) 405 { 406 Hashtable docsMap = updateDocMap(request); 407 408 // Create a new (empty) result message 409 Element result = this.doc.createElement(GSXML.RESPONSE_ELEM); 410 411 int size = 0; 412 String ids = ""; 413 Iterator keys = docsMap.keySet().iterator(); 414 415 while (keys.hasNext()) 416 { 417 Hashtable items = (Hashtable) docsMap.get((String) keys.next()); 418 size += items.size(); 419 Iterator values = items.values().iterator(); 420 while (values.hasNext()) 421 { 422 Item item = (Item) values.next(); 423 result.appendChild(item.wrapIntoElement()); 424 } 425 } 426 427 Element selement = this.doc.createElement("size"); 428 selement.setAttribute("value", size + ""); 429 result.appendChild(selement); 430 431 return result; 432 } 433 434 private Element getDocumentMetadata(String to, String lang, String uid, Iterator ids) 435 { 436 437 // Build a request to obtain some document metadata 438 Element dm_message = this.doc.createElement(GSXML.MESSAGE_ELEM); 439 Element dm_request = GSXML.createBasicRequest(this.doc, GSXML.REQUEST_TYPE_PROCESS, to, lang, uid); 440 dm_message.appendChild(dm_request); 441 442 // Create a parameter list to specify the required metadata information 443 HashSet meta_names = new HashSet(); 444 meta_names.add("Title"); // the default 445 meta_names.add("root_Title"); 446 meta_names.add("Date"); 447 448 Element param_list = this.doc.createElement(GSXML.PARAM_ELEM + GSXML.LIST_MODIFIER); 449 450 Element param = null; 451 Iterator i = meta_names.iterator(); 452 while (i.hasNext()) 453 { 454 String name = (String) i.next(); 455 param = this.doc.createElement(GSXML.PARAM_ELEM); 456 param_list.appendChild(param); 457 param.setAttribute(GSXML.NAME_ATT, "metadata"); 458 param.setAttribute(GSXML.VALUE_ATT, name); 459 460 } 461 462 dm_request.appendChild(param_list); 463 464 // create the doc node list for the metadata request 465 Element dm_doc_list = this.doc.createElement(GSXML.DOC_NODE_ELEM + GSXML.LIST_MODIFIER); 466 dm_request.appendChild(dm_doc_list); 467 468 while (ids.hasNext()) 469 { 470 // Add the documentNode to the list 471 Element dm_doc_node = this.doc.createElement(GSXML.DOC_NODE_ELEM); 472 dm_doc_list.appendChild(dm_doc_node); 473 dm_doc_node.setAttribute(GSXML.NODE_ID_ATT, (String) ids.next()); 474 } 475 476 return (Element) this.router.process(dm_message); 477 478 } 479 480 protected Element processDisplayList(Element request) 481 { 482 Hashtable docsMap = updateDocMap(request); 483 484 // Create a new (empty) result message 485 Element result = this.doc.createElement(GSXML.RESPONSE_ELEM); 486 487 Iterator keys = docsMap.keySet().iterator(); 488 489 while (keys.hasNext()) 490 { 491 String collection = (String) keys.next(); 492 Hashtable items = (Hashtable) docsMap.get(collection); 493 Iterator itemItr = items.values().iterator(); 494 495 Element collectionNode = this.doc.createElement("berryList"); 496 collectionNode.setAttribute("name", collection); 497 result.appendChild(collectionNode); 498 499 while (itemItr.hasNext()) 500 { 501 Item item = (Item) itemItr.next(); 502 Element itemElement = this.doc.createElement("item"); 503 504 collectionNode.appendChild(itemElement); 505 itemElement.setAttribute("name", item.docid); 506 itemElement.setAttribute("collection", item.collection); 507 itemElement.setAttribute("title", item.title); 508 itemElement.setAttribute("date", item.date); 509 itemElement.setAttribute("root_title", item.rootTitle); 510 } 511 } 512 513 return result; 514 515 } 516 517 public Element processSendMail(Element request) 518 { 519 // Create a new (empty) result message 520 Element result = this.doc.createElement(GSXML.RESPONSE_ELEM); 521 522 // Get the parameters of the request 523 Element param_list = (Element) GSXML.getChildByTagName(request, GSXML.PARAM_ELEM + GSXML.LIST_MODIFIER); 524 525 if (param_list == null) 526 { 488 527 logger.error("BerryBasket Error: SendMail request had no paramList."); 489 return result; 490 } 491 528 return result; // Return the empty result 529 } 530 492 531 HashMap params = GSXML.extractParams(param_list, false); 493 494 String to = (String) params.get("address");495 String subject = (String) params.get("subject");496 String content = (String) params.get("content");497 String cc = (String) params.get("cc");498 String bcc = (String) params.get("bcc");499 532 533 String to = (String) params.get("address"); 534 String subject = (String) params.get("subject"); 535 String content = (String) params.get("content"); 536 String cc = (String) params.get("cc"); 537 String bcc = (String) params.get("bcc"); 538 500 539 String mailhost = GlobalProperties.getProperty("mail.smtp.host"); 501 540 username = GlobalProperties.getProperty("mail.smtp.username"); 502 541 password = GlobalProperties.getProperty("mail.smtp.password"); 503 542 String from = GlobalProperties.getProperty("mail.from"); 504 543 505 544 String mailer = "msgsend"; 506 507 try { 508 545 546 try 547 { 548 509 549 Properties props = System.getProperties(); 510 550 511 551 //Setup smtp host and from address 512 552 // XXX - could use Session.getTransport() and Transport.connect() 513 553 // XXX - assume we're using SMTP 514 if ( mailhost != null && !mailhost.trim().equals("") ) { 554 if (mailhost != null && !mailhost.trim().equals("")) 555 { 515 556 props.put("mail.smtp.host", mailhost); 516 } else { 557 } 558 else 559 { 517 560 props.put("mail.smtp.host", "localhost"); 518 561 } 519 if ( from != null && !from.trim().equals("") ) { 562 if (from != null && !from.trim().equals("")) 563 { 520 564 props.put("mail.from", from); 521 565 } 522 566 523 567 //setup username and password to the smtp server 524 if ( username == null || username.trim().equals("") ) username = ""; 525 if ( password == null || password.trim().equals("") ) password = ""; 526 Authenticator auth = new Authenticator() { 527 protected PasswordAuthentication getPasswordAuthentication() { 528 return new PasswordAuthentication( username, password ); 568 if (username == null || username.trim().equals("")) 569 username = ""; 570 if (password == null || password.trim().equals("")) 571 password = ""; 572 Authenticator auth = new Authenticator() 573 { 574 protected PasswordAuthentication getPasswordAuthentication() 575 { 576 return new PasswordAuthentication(username, password); 529 577 } 530 578 }; 531 579 532 580 Session session = Session.getInstance(props, auth); 533 581 534 582 Message msg = new MimeMessage(session); 535 583 msg.setFrom(); 536 msg.setRecipients( Message.RecipientType.TO, InternetAddress.parse(to, false) ); 537 if ( cc != null ) { 538 msg.setRecipients(Message.RecipientType.CC, InternetAddress.parse(cc, false) ); 539 } 540 if ( bcc != null ) { 541 msg.setRecipients(Message.RecipientType.BCC, InternetAddress.parse(bcc, false) ); 584 msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to, false)); 585 if (cc != null) 586 { 587 msg.setRecipients(Message.RecipientType.CC, InternetAddress.parse(cc, false)); 588 } 589 if (bcc != null) 590 { 591 msg.setRecipients(Message.RecipientType.BCC, InternetAddress.parse(bcc, false)); 542 592 } 543 593 msg.setSubject(subject); 544 msg.setText(content.replaceAll("-------", "&"));594 msg.setText(content.replaceAll("-------", "&")); 545 595 msg.setHeader("X-Mailer", mailer); 546 596 msg.setSentDate(new Date()); 547 597 548 598 // send the thing off 549 599 Transport.send(msg); 550 600 551 601 logger.info("\nMail was sent successfully."); 552 602 result.appendChild(this.doc.createTextNode("Mail was sent successfully.")); 553 } catch (Exception e) { 603 } 604 catch (Exception e) 605 { 554 606 e.printStackTrace(); 555 607 result.appendChild(this.doc.createTextNode(e.getMessage())); 556 608 } 557 609 558 610 return result; 559 611 } 560 612 561 562 protected class Item{613 protected class Item 614 { 563 615 public String collection; 564 616 public String docid; 565 public String title=""; 566 public String query=""; 567 public String date=""; 568 public String rootTitle=""; 569 570 public Item(String coll, String id) { 617 public String title = ""; 618 public String query = ""; 619 public String date = ""; 620 public String rootTitle = ""; 621 622 public Item(String coll, String id) 623 { 571 624 this.collection = coll; 572 625 this.docid = id; 573 626 } 574 627 575 public boolean equals(Object o){ 576 if (! (o instanceof Item)){ 577 return false; 578 } 579 Item item = (Item)o; 580 String id = collection+":"+docid; 581 String idin = item.collection+":"+item.docid; 582 return id.equals(idin); 583 584 } 585 586 public String toString(){ 587 588 return collection+":"+docid+":"+"["+((!rootTitle.equals(""))?(rootTitle+":"):"")+title+"]"; 589 } 590 591 public Element wrapIntoElement(){ 592 Element itemElement = doc.createElement("item"); 593 itemElement.setAttribute("name", docid); 594 itemElement.setAttribute("collection", collection); 595 itemElement.setAttribute("title",title); 596 itemElement.setAttribute("date",date); 597 itemElement.setAttribute("root_title",rootTitle); 598 return itemElement; 599 } 600 } 601 private class UserTimer extends Timer implements ActionListener{ 602 String id=""; 603 604 public UserTimer(int delay, String id){ 605 super(delay,(ActionListener)null); 606 addActionListener(this); 607 this.id=id; 608 } 609 610 611 public void actionPerformed(ActionEvent e){ 612 userMap.remove(id); 613 timerMap.remove(id); 614 stop(); 615 } 616 617 } 618 628 public boolean equals(Object o) 629 { 630 if (!(o instanceof Item)) 631 { 632 return false; 633 } 634 Item item = (Item) o; 635 String id = collection + ":" + docid; 636 String idin = item.collection + ":" + item.docid; 637 return id.equals(idin); 638 639 } 640 641 public String toString() 642 { 643 644 return collection + ":" + docid + ":" + "[" + ((!rootTitle.equals("")) ? (rootTitle + ":") : "") + title + "]"; 645 } 646 647 public Element wrapIntoElement() 648 { 649 Element itemElement = doc.createElement("item"); 650 itemElement.setAttribute("name", docid); 651 itemElement.setAttribute("collection", collection); 652 itemElement.setAttribute("title", title); 653 itemElement.setAttribute("date", date); 654 itemElement.setAttribute("root_title", rootTitle); 655 return itemElement; 656 } 657 } 658 659 private class UserTimer extends Timer implements ActionListener 660 { 661 String id = ""; 662 663 public UserTimer(int delay, String id) 664 { 665 super(delay, (ActionListener) null); 666 addActionListener(this); 667 this.id = id; 668 } 669 670 public void actionPerformed(ActionEvent e) 671 { 672 userMap.remove(id); 673 timerMap.remove(id); 674 stop(); 675 } 676 677 } 678 619 679 }
Note:
See TracChangeset
for help on using the changeset viewer.