Changeset 9874 for trunk/gsdl3/src/java/org/greenstone/gsdl3/action
- Timestamp:
- 2005-05-16T11:02:50+12:00 (19 years ago)
- Location:
- trunk/gsdl3/src/java/org/greenstone/gsdl3/action
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/gsdl3/src/java/org/greenstone/gsdl3/action/Action.java
r8832 r9874 52 52 public String process(String xml_in) { 53 53 54 Element message = this.converter.getDOM(xml_in).getDocumentElement(); 55 56 Element result = process(message); 54 Document message_doc = this.converter.getDOM(xml_in); 55 if (message_doc == null) { 56 System.err.println("Action.process(String) Error: Couldn't parse request"); 57 System.err.println(xml_in); 58 return null; 59 } 60 Element result = process(message_doc.getDocumentElement()); 57 61 return this.converter.getString(result); 58 62 } … … 115 119 } 116 120 121 protected boolean processErrorElements(Element message, Element page) { 122 NodeList error_nodes = message.getElementsByTagName(GSXML.ERROR_ELEM); 123 if (error_nodes.getLength()==0) { 124 return false; 125 } 126 Document owner = page.getOwnerDocument(); 127 for (int i=0; i<error_nodes.getLength(); i++) { 128 page.appendChild(owner.importNode(error_nodes.item(i), true)); 129 } 130 return true; 131 } 117 132 } 118 133 -
trunk/gsdl3/src/java/org/greenstone/gsdl3/action/DocumentAction.java
r9007 r9874 209 209 // Process the document structure retrieve message 210 210 Element ds_response_message = (Element) this.mr.process(ds_message); 211 211 if (processErrorElements(ds_response_message, page_response)) { 212 return result; 213 } 214 212 215 // get the info and print out 213 216 String path = GSPath.appendLink(GSXML.RESPONSE_ELEM, GSXML.DOC_NODE_ELEM+GSXML.LIST_MODIFIER); … … 309 312 doc_list.appendChild(doc_node); 310 313 Element dm_response_message = (Element) this.mr.process(dm_message); 314 if (processErrorElements(dm_response_message, page_response)) { 315 return result; 316 } 311 317 312 318 String path = GSPath.appendLink(GSXML.RESPONSE_ELEM, GSXML.DOC_NODE_ELEM+GSXML.LIST_MODIFIER); … … 348 354 System.err.println("request = "+converter.getString(dc_message)); 349 355 Element dc_response_message = (Element) this.mr.process(dc_message); 356 if (processErrorElements(dc_response_message, page_response)) { 357 return result; 358 } 359 350 360 Element dc_response_doc_list = (Element) GSXML.getNodeByPath(dc_response_message, path); 351 361 … … 536 546 HashMap params = GSXML.extractParams(cgi_param_list, false); 537 547 538 539 String service_name = (String)((HashMap)params.get("p")).get(GSParams.SERVICE); 548 HashMap previous_params = (HashMap)params.get("p"); 549 if (previous_params == null) { 550 return dc_response_doc_content; 551 } 552 String service_name = (String)previous_params.get(GSParams.SERVICE); 540 553 if (service_name == null || !service_name.endsWith("Query")) { // hack for now - we only do highlighting if we were in a query last - ie not if we were in a browse thingy 541 554 System.err.println("DocumentAction: invalid service, not doing highlighting"); -
trunk/gsdl3/src/java/org/greenstone/gsdl3/action/GS2BrowseAction.java
r8575 r9874 126 126 horizontal_at_top = true; 127 127 } 128 if (top_id.equals(classifier_node) && horizontal_at_top) { 128 // *** TODO need to fix this 129 //if (top_id.equals(classifier_node) && horizontal_at_top) { 129 130 // we have asked for a top node - if the first list is horizontal, we will select the first element of that list 130 // this is a hack. also it craps out if the classifier really isn't horizontalAtTop. 131 classifier_node = classifier_node+".1";131 // this is a hack. also it craps out if the classifier really isn't horizontalAtTop. - 132 //classifier_node = classifier_node+".1"; 132 133 133 }134 //} 134 135 135 136 // get the browse structure for the selected node -
trunk/gsdl3/src/java/org/greenstone/gsdl3/action/QueryAction.java
r9264 r9874 60 60 String to = GSPath.appendLink(collection, service_name); 61 61 62 // part of the response is the service description 63 // for now get this again from the service. 64 // this will probably need to be cached somehow later on. 65 Element mr_info_message = this.doc.createElement(GSXML.MESSAGE_ELEM); 66 Element mr_info_request = GSXML.createBasicRequest(this.doc, GSXML.REQUEST_TYPE_DESCRIBE, to, lang, uid); 67 mr_info_message.appendChild(mr_info_request); 68 62 if (request_type.indexOf("d")!=-1) { 63 // we have been asked for the service description 64 Element mr_info_message = this.doc.createElement(GSXML.MESSAGE_ELEM); 65 Element mr_info_request = GSXML.createBasicRequest(this.doc, GSXML.REQUEST_TYPE_DESCRIBE, to, lang, uid); 66 mr_info_message.appendChild(mr_info_request); 67 68 // process the message 69 Element mr_info_response = (Element) this.mr.process(mr_info_message); 70 // the response 71 Element service_response = (Element)GSXML.getChildByTagName(mr_info_response, GSXML.RESPONSE_ELEM); 72 73 Element service_description = (Element)this.doc.importNode(GSXML.getChildByTagName(service_response, GSXML.SERVICE_ELEM), true); 74 page_response.appendChild(service_description); 75 } 76 77 if (request_type.indexOf("r") == -1) { 78 // just a display request, no actual processing to do 79 return page_response; 80 } 81 82 // check that we have some service params 83 HashMap service_params = (HashMap)params.get("s1"); 84 if (service_params == null) { // no query 85 return page_response; 86 } 87 88 // create the query request 89 Element mr_query_message = this.doc.createElement(GSXML.MESSAGE_ELEM); 90 Element mr_query_request = GSXML.createBasicRequest(this.doc, GSXML.REQUEST_TYPE_PROCESS, to, lang, uid); 91 mr_query_message.appendChild(mr_query_request); 92 93 Element query_param_list = this.doc.createElement(GSXML.PARAM_ELEM + GSXML.LIST_MODIFIER); 94 GSXML.addParametersToList(this.doc, query_param_list, service_params); 95 mr_query_request.appendChild(query_param_list); 96 69 97 // also get the format stuff now if there is some 70 98 Element format_request = GSXML.createBasicRequest(this.doc, GSXML.REQUEST_TYPE_FORMAT, to, lang, uid); 71 mr_info_message.appendChild(format_request); 72 73 // process the messages 74 Element mr_info_response = (Element) this.mr.process(mr_info_message); 75 76 // the two responses 77 NodeList responses = mr_info_response.getElementsByTagName(GSXML.RESPONSE_ELEM); 78 Element service_response = (Element)responses.item(0); 79 Element format_response = (Element)responses.item(1); 80 81 Element service_description = (Element)this.doc.importNode(GSXML.getChildByTagName(service_response, GSXML.SERVICE_ELEM), true); 82 page_response.appendChild(service_description); 83 84 if (request_type.equals("d")) {// just a display request 85 return page_response; 86 } 87 99 mr_query_message.appendChild(format_request); 100 101 // do the query 102 Element mr_query_response = (Element)this.mr.process(mr_query_message); 103 104 // check for errors 105 if (processErrorElements(mr_query_response, page_response)) { 106 return page_response; 107 } 108 109 NodeList responses = mr_query_response.getElementsByTagName(GSXML.RESPONSE_ELEM); 110 Element query_response = (Element) responses.item(0); 111 Element format_response = (Element) responses.item(1); 112 113 Element query_result_metadata_list = (Element) GSXML.getChildByTagName(query_response, GSXML.METADATA_ELEM+GSXML.LIST_MODIFIER); 114 if (query_result_metadata_list == null) { 115 System.err.println("QueryAction: Warning: No query result metadata.\n"); 116 } else { // add it into the page response 117 page_response.appendChild(this.doc.importNode(query_result_metadata_list, true)); 118 } 119 120 Element query_term_info_list = (Element) GSXML.getChildByTagName(query_response, GSXML.TERM_ELEM+GSXML.LIST_MODIFIER); 121 if (query_term_info_list == null) { 122 System.err.println("QueryAction: Warning: No query term information.\n"); 123 } else { // add it into the page response 124 page_response.appendChild(this.doc.importNode(query_term_info_list, true)); 125 } 126 127 // check that there are some documents - for now check the list, but later should use a numdocs metadata elem 128 Element document_list = (Element)GSXML.getChildByTagName(query_response, GSXML.DOC_NODE_ELEM+GSXML.LIST_MODIFIER); 129 // documentList not present if no docs found 130 if (document_list == null) { 131 return page_response; 132 } 133 134 // now we check to see if there is metadata already - some search services return predefined metadata. if there is some, don't do a metadata request 135 NodeList doc_metadata = document_list.getElementsByTagName(GSXML.METADATA_ELEM+GSXML.LIST_MODIFIER); 136 if (doc_metadata.getLength()>0) { 137 System.err.println("have already found metadata!"); 138 // append the doc list to the result 139 page_response.appendChild(this.doc.importNode(document_list, true)); 140 return page_response; 141 } 142 143 // get the metadata elements needed from the format statement if any 88 144 HashSet metadata_names = new HashSet(); 89 145 metadata_names.add("Title"); … … 98 154 extractMetadataNames(format_elem, metadata_names); 99 155 } 100 101 // do the query102 Element mr_query_message = this.doc.createElement(GSXML.MESSAGE_ELEM);103 Element mr_query_request = GSXML.createBasicRequest(this.doc, GSXML.REQUEST_TYPE_PROCESS, to, lang, uid);104 mr_query_message.appendChild(mr_query_request);105 106 // paramList107 HashMap service_params = (HashMap)params.get("s1");108 if (service_params == null) { // no query109 return page_response;110 }111 Element query_param_list = this.doc.createElement(GSXML.PARAM_ELEM + GSXML.LIST_MODIFIER);112 GSXML.addParametersToList(this.doc, query_param_list, service_params);113 ///ystem.out.println("service params are "+this.converter.getString(query_param_list));114 mr_query_request.appendChild(query_param_list);115 116 // do the query117 Element mr_query_response = (Element)this.mr.process(mr_query_message);118 119 //. check for errors120 String path = GSPath.appendLink(GSXML.RESPONSE_ELEM, GSXML.ERROR_ELEM);121 Element error_elem = (Element) GSXML.getNodeByPath(mr_query_response, path);122 if (error_elem != null) {123 // should we continue?? perhaps have a kind of error - information vs fatal??124 System.err.println("found an error elem");125 page_response.appendChild(this.doc.importNode(error_elem, true));126 return page_response;127 }128 path = GSPath.appendLink(GSXML.RESPONSE_ELEM, GSXML.METADATA_ELEM+GSXML.LIST_MODIFIER);129 Element query_result_metadata_list = (Element) GSXML.getNodeByPath(mr_query_response, path);130 if (query_result_metadata_list == null) {131 System.err.println("QueryAction: Warning: No query result metadata.\n");132 } else { // add it into the page response133 page_response.appendChild(this.doc.importNode(query_result_metadata_list, true));134 }135 136 path = GSPath.appendLink(GSXML.RESPONSE_ELEM, GSXML.TERM_ELEM+GSXML.LIST_MODIFIER);137 Element query_term_info_list = (Element) GSXML.getNodeByPath(mr_query_response, path);138 if (query_term_info_list == null) {139 System.err.println("QueryAction: Warning: No query term information.\n");140 } else { // add it into the page response141 page_response.appendChild(this.doc.importNode(query_term_info_list, true));142 }143 144 // check that there are some documents - for now check the list, but later should use a numdocs metadata elem145 path = GSPath.appendLink(GSXML.RESPONSE_ELEM, GSXML.DOC_NODE_ELEM+GSXML.LIST_MODIFIER);146 147 Element document_list = (Element)GSXML.getNodeByPath(mr_query_response,148 path);149 // documentList not present if no docs found150 if (document_list == null) {151 return page_response;152 }153 156 154 157 // paging of the results is done here - we filter the list to remove unwanted entries before retrieving metadata 155 Element filtered_doc_list = filterDocList(params, service_description, document_list); 156 157 // now we check to see if there is metadata already - some search services return predefined metadata. if there is some, don't do a metadata request 158 NodeList doc_metadata = document_list.getElementsByTagName(GSXML.METADATA_ELEM+GSXML.LIST_MODIFIER); 159 if (doc_metadata.getLength()>0) { 160 System.err.println("have already found metadata!"); 161 // append the doc list to the result 162 page_response.appendChild(this.doc.importNode(document_list, true)); 163 return page_response; 164 } 158 Element filtered_doc_list = filterDocList(params, service_params, document_list); 159 165 160 // do the metadata request on the filtered list 166 161 Element mr_metadata_message = this.doc.createElement(GSXML.MESSAGE_ELEM); … … 176 171 mr_metadata_request.appendChild(dm_param_list); 177 172 178 179 173 // add in the doc node list too 180 174 mr_metadata_request.appendChild(filtered_doc_list); 181 175 182 176 Element mr_metadata_response = (Element) this.mr.process(mr_metadata_message); 183 184 path = GSPath.appendLink(GSXML.RESPONSE_ELEM, GSXML.DOC_NODE_ELEM+GSXML.LIST_MODIFIER); 185 Element query_result_document_list = (Element) GSXML.getNodeByPath(mr_metadata_response, path); 186 177 // check for errors 178 processErrorElements(mr_metadata_response, page_response); 179 180 Element metadata_response = (Element) GSXML.getChildByTagName(mr_metadata_response, GSXML.RESPONSE_ELEM); 181 182 Element query_result_document_list = (Element) GSXML.getChildByTagName(metadata_response, GSXML.DOC_NODE_ELEM+GSXML.LIST_MODIFIER); 183 187 184 if (query_result_document_list != null) { 188 185 page_response.appendChild(this.doc.importNode(query_result_document_list, true)); 189 186 } 190 191 System.out.println("Query page:\n" + this.converter.getPrettyString(page_response));187 188 ///ystem.out.println("Query page:\n" + this.converter.getPrettyString(page_response)); 192 189 return page_response; 193 190 } 194 191 195 192 /** this filters out some of the doc results for result paging */ 196 protected Element filterDocList(HashMap params, Element service_description, Element orig_doc_list) { 197 198 // check in the service descripiton to see if hitsPerpage is a param 199 Element service_p_list = (Element)GSXML.getChildByTagName(service_description, GSXML.PARAM_ELEM+GSXML.LIST_MODIFIER); 200 Element hits_param = GSXML.getNamedElement(service_p_list, GSXML.PARAM_ELEM, GSXML.NAME_ATT, "hitsPerPage"); 201 202 boolean service_paging = false; 203 if (hits_param != null) { 204 service_paging = true; 205 } 206 if (service_paging) { 207 // the service is doing the paging, so we want to display all of teh returned docs 193 protected Element filterDocList(HashMap params, HashMap service_params, Element orig_doc_list) { 194 195 // check the hits_per_page param - is it a service param?? 196 String hits_pp = (String) service_params.get("hitsPerPage"); 197 if (hits_pp != null) { 198 // the service is doing the paging, so we want to display all of the returned docs 208 199 return (Element)this.doc.importNode(orig_doc_list, true); 209 200 } 210 201 211 Stringhits_pp = (String)params.get("hitsPerPage");202 hits_pp = (String)params.get("hitsPerPage"); 212 203 int hits = 20; 213 204 if (hits_pp != null && !hits_pp.equals("")) {
Note:
See TracChangeset
for help on using the changeset viewer.