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