Changeset 24203 for main/trunk/greenstone3/src/java/org/greenstone/gsdl3/core/FormatReceptionist.java
- Timestamp:
- 2011-06-27T11:08:35+12:00 (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
main/trunk/greenstone3/src/java/org/greenstone/gsdl3/core/FormatReceptionist.java
r22676 r24203 20 20 public class FormatReceptionist extends TransformingReceptionist { 21 21 22 22 static Logger logger = Logger.getLogger(org.greenstone.gsdl3.core.DefaultReceptionist.class.getName()); 23 23 24 /** add in the collection description to the page, then for each service, add in the service description */24 /** add in the collection description to the page, then for each service, add in the service description */ 25 25 protected void addExtraInfo(Element page) { 26 super.addExtraInfo(page);26 super.addExtraInfo(page); 27 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 28 Element page_request = (Element)GSXML.getChildByTagName(page, GSXML.PAGE_REQUEST_ELEM); 29 // if it is a system request, then we don't bother with this. 30 String action = page_request.getAttribute(GSXML.ACTION_ATT); 31 if (action.equals("s")) { 32 logger.error("HACK: don't ask for coll info if system action"); 33 return; 34 } 35 logger.debug("add extra info, page request="+this.converter.getString(page_request)); 36 // is a collection defined? 37 Element param_list = (Element)GSXML.getChildByTagName(page_request, GSXML.PARAM_ELEM+GSXML.LIST_MODIFIER); 38 if (param_list==null) { // must be the original home page 39 logger.debug(" no param list, assuming home page"); 40 return; 41 } 42 Element coll_param = GSXML.getNamedElement(param_list, GSXML.PARAM_ELEM, GSXML.NAME_ATT, GSParams.COLLECTION); 43 if (coll_param == null) { 44 logger.debug(" coll param is null, returning"); 45 return; 46 } 47 47 48 // see if the collection/cluster element is already there 49 String coll_name = coll_param.getAttribute(GSXML.VALUE_ATT); 50 String lang = page_request.getAttribute(GSXML.LANG_ATT); 51 String uid = page_request.getAttribute(GSXML.USER_ID_ATT); 52 53 boolean get_service_description = false; 54 Element page_response = (Element)GSXML.getChildByTagName(page, GSXML.PAGE_RESPONSE_ELEM); 55 if (this.language_list != null) { 56 page_response.appendChild(this.language_list); 57 } 58 Element coll_description = (Element)GSXML.getChildByTagName(page_response, GSXML.COLLECTION_ELEM); 59 if (coll_description == null) { 60 // try cluster 61 coll_description = (Element)GSXML.getChildByTagName(page_response, GSXML.CLUSTER_ELEM); 62 } 63 if (coll_description == null) { 64 // we dont have one yet - get it 65 Element coll_about_message = this.doc.createElement(GSXML.MESSAGE_ELEM); 66 Element coll_about_request = GSXML.createBasicRequest(this.doc, GSXML.REQUEST_TYPE_DESCRIBE, coll_name, lang, uid); 67 coll_about_message.appendChild(coll_about_request); 68 69 Node coll_about_response_message = this.mr.process(coll_about_message); 70 Element coll_about_response = (Element)GSXML.getChildByTagName(coll_about_response_message, GSXML.RESPONSE_ELEM); 71 if (coll_about_response == null) { 72 return; 73 } 74 coll_description = (Element)GSXML.getChildByTagName(coll_about_response, GSXML.COLLECTION_ELEM); 75 if (coll_description==null) { // may be a cluster 76 coll_description = (Element)GSXML.getChildByTagName(coll_about_response, GSXML.CLUSTER_ELEM); 77 } 78 79 if (coll_description == null) { 80 logger.error(" no collection description, returning"); 81 return; 82 } 83 // have found one, append it to the page response 84 coll_description = (Element)this.doc.importNode(coll_description, true); 85 page_response.appendChild(coll_description); 86 get_service_description = true; 87 } 48 // see if the collection/cluster element is already there 49 String coll_name = coll_param.getAttribute(GSXML.VALUE_ATT); 50 String lang = page_request.getAttribute(GSXML.LANG_ATT); 51 String uid = page_request.getAttribute(GSXML.USER_ID_ATT); 88 52 89 // have got a coll description 90 91 // now get the dispay info for the services 92 Element service_list = (Element)GSXML.getChildByTagName(coll_description, GSXML.SERVICE_ELEM+GSXML.LIST_MODIFIER); 93 if (service_list == null) { 94 logger.error(" no service list, returning"); 95 // something weird has gone wrong 96 return; 97 } 53 boolean get_service_description = false; 54 Element page_response = (Element)GSXML.getChildByTagName(page, GSXML.PAGE_RESPONSE_ELEM); 55 if (this.language_list != null) { 56 page_response.appendChild(this.language_list); 57 } 58 Element coll_description = (Element)GSXML.getChildByTagName(page_response, GSXML.COLLECTION_ELEM); 59 if (coll_description == null) { 60 // try cluster 61 coll_description = (Element)GSXML.getChildByTagName(page_response, GSXML.CLUSTER_ELEM); 62 } 63 if (coll_description == null) { 64 // we dont have one yet - get it 65 Element coll_about_message = this.doc.createElement(GSXML.MESSAGE_ELEM); 66 Element coll_about_request = GSXML.createBasicRequest(this.doc, GSXML.REQUEST_TYPE_DESCRIBE, coll_name, lang, uid); 67 coll_about_message.appendChild(coll_about_request); 98 68 99 NodeList services = service_list.getElementsByTagName(GSXML.SERVICE_ELEM); 100 if (services.getLength()==0) { 101 logger.error("DefaultReceoptionist: no services found for colllection/cluster "+ coll_name); 102 return; 103 } 104 // check one service for display items 105 if (!get_service_description) { 106 // we dont know yet if we need to get these 107 int i=1; 108 Element test_s = (Element)services.item(0); 109 while (i<services.getLength() && (test_s.getAttribute(GSXML.TYPE_ATT).equals(GSXML.SERVICE_TYPE_RETRIEVE) || test_s.getAttribute(GSXML.TYPE_ATT).equals(GSXML.SERVICE_TYPE_OAI))) { 110 test_s = (Element)services.item(i); i++; 111 } 112 if (i==services.getLength()) { 113 // we have only found retrieve or oai services, so dont need descripitons anyway 114 return; 115 } 116 if (GSXML.getChildByTagName(test_s, GSXML.DISPLAY_TEXT_ELEM) !=null) { 117 // have got descriptions already, 118 return; 119 } 120 } 69 Node coll_about_response_message = this.mr.process(coll_about_message); 70 Element coll_about_response = (Element)GSXML.getChildByTagName(coll_about_response_message, GSXML.RESPONSE_ELEM); 71 if (coll_about_response == null) { 72 return; 73 } 74 coll_description = (Element)GSXML.getChildByTagName(coll_about_response, GSXML.COLLECTION_ELEM); 75 if (coll_description==null) { // may be a cluster 76 coll_description = (Element)GSXML.getChildByTagName(coll_about_response, GSXML.CLUSTER_ELEM); 77 } 121 78 122 // if get here, we need to get the service descriptions 123 124 // we will send all the requests in a single message 125 Element info_message = this.doc.createElement(GSXML.MESSAGE_ELEM); 126 for (int i=0; i<services.getLength(); i++) { 127 Element c = (Element)services.item(i); 128 String name = c.getAttribute(GSXML.NAME_ATT); 129 String address = GSPath.appendLink(coll_name, name); 130 Element info_request = GSXML.createBasicRequest(this.doc, GSXML.REQUEST_TYPE_DESCRIBE, address, lang, uid); 131 Element req_param_list = this.doc.createElement(GSXML.PARAM_ELEM+GSXML.LIST_MODIFIER); 132 req_param_list.appendChild(GSXML.createParameter(this.doc, GSXML.SUBSET_PARAM, GSXML.DISPLAY_TEXT_ELEM+GSXML.LIST_MODIFIER)); 133 info_request.appendChild(req_param_list); 134 info_message.appendChild(info_request); 135 136 } 79 if (coll_description == null) { 80 logger.error(" no collection description, returning"); 81 return; 82 } 83 // have found one, append it to the page response 84 coll_description = (Element)this.doc.importNode(coll_description, true); 85 page_response.appendChild(coll_description); 86 get_service_description = true; 87 } 137 88 138 Element info_response = (Element)this.mr.process(info_message); 89 // have got a coll description 139 90 140 NodeList service_responses = info_response.getElementsByTagName(GSXML.RESPONSE_ELEM); 141 // check that have same number of responses as collections 142 if (services.getLength() != service_responses.getLength()) { 143 logger.error(" didn't get a response for each service - somethings gone wrong!"); 144 // for now, dont use the metadata 145 } else { 146 for (int i=0; i<services.getLength(); i++) { 147 Element c1 = (Element)services.item(i); 148 Element c2 = (Element)GSXML.getChildByTagName((Element)service_responses.item(i), GSXML.SERVICE_ELEM); 149 if (c1 !=null && c2 !=null && c1.getAttribute(GSXML.NAME_ATT).equals(c2.getAttribute(GSXML.NAME_ATT))) { 150 //add the service data into the original response 151 GSXML.mergeElements(c1, c2); 152 } else { 153 logger.debug(" response does not correspond to request!"); 154 } 155 156 } 157 } 91 // now get the dispay info for the services 92 Element service_list = (Element)GSXML.getChildByTagName(coll_description, GSXML.SERVICE_ELEM+GSXML.LIST_MODIFIER); 93 if (service_list == null) { 94 logger.error(" no service list, returning"); 95 // something weird has gone wrong 96 return; 97 } 158 98 159 // Request collection metadata 160 info_message = this.doc.createElement(GSXML.MESSAGE_ELEM); 161 String address = GSPath.appendLink(coll_name, "CoverageMetadataRetrieve"); 162 Element info_request = GSXML.createBasicRequest(this.doc, GSXML.REQUEST_TYPE_PROCESS, address, lang, uid); 163 Element req_param_list = this.doc.createElement(GSXML.PARAM_ELEM+GSXML.LIST_MODIFIER); 164 req_param_list.appendChild(GSXML.createParameter(this.doc, "metadata", "All")); // GSXML.SUBSET_PARAM, GSXML.DISPLAY_TEXT_ELEM+GSXML.LIST_MODIFIER)); 165 info_request.appendChild(req_param_list); 166 info_message.appendChild(info_request); 99 NodeList services = service_list.getElementsByTagName(GSXML.SERVICE_ELEM); 100 if (services.getLength()==0) { 101 logger.error("DefaultReceoptionist: no services found for colllection/cluster "+ coll_name); 102 return; 103 } 104 // check one service for display items 105 if (!get_service_description) { 106 // we dont know yet if we need to get these 107 int i=1; 108 Element test_s = (Element)services.item(0); 109 while (i<services.getLength() && (test_s.getAttribute(GSXML.TYPE_ATT).equals(GSXML.SERVICE_TYPE_RETRIEVE) || test_s.getAttribute(GSXML.TYPE_ATT).equals(GSXML.SERVICE_TYPE_OAI))) { 110 test_s = (Element)services.item(i); i++; 111 } 112 if (i==services.getLength()) { 113 // we have only found retrieve or oai services, so dont need descripitons anyway 114 return; 115 } 116 if (GSXML.getChildByTagName(test_s, GSXML.DISPLAY_TEXT_ELEM) !=null) { 117 // have got descriptions already, 118 return; 119 } 120 } 167 121 168 logger.error("************ Coverage Metadata request created"); 169 logger.error("************ add extra info, page request="+this.converter.getString(info_message)); 122 // if get here, we need to get the service descriptions 170 123 171 info_response = (Element)this.mr.process(info_message); 172 logger.error("************ page response="+this.converter.getString(info_response)); 124 // we will send all the requests in a single message 125 Element info_message = this.doc.createElement(GSXML.MESSAGE_ELEM); 126 for (int i=0; i<services.getLength(); i++) { 127 Element c = (Element)services.item(i); 128 String name = c.getAttribute(GSXML.NAME_ATT); 129 String address = GSPath.appendLink(coll_name, name); 130 Element info_request = GSXML.createBasicRequest(this.doc, GSXML.REQUEST_TYPE_DESCRIBE, address, lang, uid); 131 Element req_param_list = this.doc.createElement(GSXML.PARAM_ELEM+GSXML.LIST_MODIFIER); 132 req_param_list.appendChild(GSXML.createParameter(this.doc, GSXML.SUBSET_PARAM, GSXML.DISPLAY_TEXT_ELEM+GSXML.LIST_MODIFIER)); 133 info_request.appendChild(req_param_list); 134 info_message.appendChild(info_request); 173 135 174 Element coverage_metadata = (Element)GSXML.getNodeByPath(info_response, "response/metadataSetList"); 175 logger.error("************ This should be metadata set list="+this.converter.getString(coverage_metadata)); 176 if(coverage_metadata != null) 177 { 178 coverage_metadata = (Element)this.doc.importNode(coverage_metadata, true); 179 coll_description.appendChild(coverage_metadata); 180 } 181 136 } 137 138 Element info_response = (Element)this.mr.process(info_message); 139 140 NodeList service_responses = info_response.getElementsByTagName(GSXML.RESPONSE_ELEM); 141 // check that have same number of responses as collections 142 if (services.getLength() != service_responses.getLength()) { 143 logger.error(" didn't get a response for each service - somethings gone wrong!"); 144 // for now, dont use the metadata 145 } else { 146 for (int i=0; i<services.getLength(); i++) { 147 Element c1 = (Element)services.item(i); 148 Element c2 = (Element)GSXML.getChildByTagName((Element)service_responses.item(i), GSXML.SERVICE_ELEM); 149 if (c1 !=null && c2 !=null && c1.getAttribute(GSXML.NAME_ATT).equals(c2.getAttribute(GSXML.NAME_ATT))) { 150 //add the service data into the original response 151 GSXML.mergeElements(c1, c2); 152 } else { 153 logger.debug(" response does not correspond to request!"); 154 } 155 156 } 157 } 158 159 // Request collection metadata 160 info_message = this.doc.createElement(GSXML.MESSAGE_ELEM); 161 String address = GSPath.appendLink(coll_name, "CoverageMetadataRetrieve"); 162 Element info_request = GSXML.createBasicRequest(this.doc, GSXML.REQUEST_TYPE_PROCESS, address, lang, uid); 163 Element req_param_list = this.doc.createElement(GSXML.PARAM_ELEM+GSXML.LIST_MODIFIER); 164 req_param_list.appendChild(GSXML.createParameter(this.doc, "metadata", "All")); // GSXML.SUBSET_PARAM, GSXML.DISPLAY_TEXT_ELEM+GSXML.LIST_MODIFIER)); 165 info_request.appendChild(req_param_list); 166 info_message.appendChild(info_request); 167 168 logger.error("************ Coverage Metadata request created"); 169 logger.error("************ add extra info, page request="+this.converter.getString(info_message)); 170 171 info_response = (Element)this.mr.process(info_message); 172 logger.error("************ page response="+this.converter.getString(info_response)); 173 174 Element coverage_metadata = (Element)GSXML.getNodeByPath(info_response, "response/metadataSetList"); 175 logger.error("************ This should be metadata set list="+this.converter.getString(coverage_metadata)); 176 if(coverage_metadata != null) 177 { 178 coverage_metadata = (Element)this.doc.importNode(coverage_metadata, true); 179 coll_description.appendChild(coverage_metadata); 180 } 181 182 182 } 183 183 }
Note:
See TracChangeset
for help on using the changeset viewer.