Changeset 32991
- Timestamp:
- 2019-04-05T14:58:22+13:00 (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
main/trunk/greenstone3/src/java/org/greenstone/gsdl3/action/PageAction.java
r32945 r32991 19 19 public class PageAction extends Action 20 20 { 21 static Logger logger = Logger.getLogger(org.greenstone.gsdl3.action.PageAction.class.getName()); 22 23 public static final String HOME_PAGE = "home"; 21 22 static Logger logger = Logger.getLogger(org.greenstone.gsdl3.action.PageAction.class.getName()); 23 24 public static final String HOME_PAGE = "home"; 24 25 public static final String ABOUT_PAGE = "about"; 25 26 public static final String PREFS_PAGE = "pref"; 26 27 public static final String GLI4GS3_PAGE = "gli4gs3"; 28 public static final String VERIFY_PAGE = "verify"; 27 29 28 30 // this gets set to the groupInfo service name if there is one. … … 53 55 page_name = HOME_PAGE; 54 56 } 57 55 58 Element result = doc.createElement(GSXML.MESSAGE_ELEM); 56 59 Element response; … … 58 61 { 59 62 response = homePage(request); 60 //} else if (page_name.equals(ABOUT_PAGE)) { 61 } 62 else if (page_name.equals(ABOUT_PAGE) || page_name.equals(PREFS_PAGE)) 63 { 64 response = aboutOrPrefsPage(request, page_name); 63 65 64 } 66 65 else if (page_name.equals(GLI4GS3_PAGE)) 67 66 { 68 67 response = gli4gs3Page(request); 69 } 70 else 71 { // unknown page 72 response = unknownPage(request); 73 } 74 75 Element formatMessage = doc.createElement(GSXML.MESSAGE_ELEM); 76 Element formatRequest = GSXML.createBasicRequest(doc, GSXML.REQUEST_TYPE_FORMAT, collection, new UserContext(request)); 77 formatMessage.appendChild(formatRequest); 78 Element formatResponseMessage = (Element) this.mr.process(formatMessage); 79 Element formatResponse = (Element) GSXML.getChildByTagName(formatResponseMessage, GSXML.RESPONSE_ELEM); 80 81 Element globalFormat = (Element) GSXML.getChildByTagName(formatResponse, GSXML.FORMAT_ELEM); 82 if (globalFormat != null) 83 { 84 response.appendChild(response.getOwnerDocument().importNode(globalFormat, true)); 85 } 68 } else if (collection.equals("")) { 69 // we are not in a collection. eg could be library prefs or other page 70 response = generalLibraryPage(request, page_name); 71 } else { 72 // we are in a collection 73 response = collectionPage(request, page_name, collection); 74 } 75 86 76 87 77 result.appendChild(doc.importNode(response, true)); … … 90 80 return result; 91 81 } 82 83 // A general library page just adds site metadata and interface options. 84 // customise: prefs: add language list 85 protected Element generalLibraryPage(Element request, String page_name) { 86 87 Document doc = XMLConverter.newDOM(); 88 UserContext userContext = new UserContext(request); 89 Element response = doc.createElement(GSXML.RESPONSE_ELEM); 90 addSiteMetadata(response, userContext); 91 addInterfaceOptions(response); 92 if (page_name.equals(PREFS_PAGE) && this.language_list != null) { 93 response.appendChild(doc.importNode(this.language_list, true)); 94 } 95 return response; 96 } 97 98 protected Element collectionPage(Element request, String page_name, String collection) { 99 100 Document doc = XMLConverter.newDOM(); 101 102 UserContext userContext = new UserContext(request); 103 // extract the params from the cgi-request, 104 Element cgi_paramList = (Element) GSXML.getChildByTagName(request, GSXML.PARAM_ELEM + GSXML.LIST_MODIFIER); 105 HashMap<String, Serializable> params = GSXML.extractParams(cgi_paramList, false); 106 107 // get the collection or cluster description 108 Element coll_about_message = doc.createElement(GSXML.MESSAGE_ELEM); 109 110 Element coll_about_request = GSXML.createBasicRequest(doc, GSXML.REQUEST_TYPE_DESCRIBE, collection, userContext); 111 coll_about_message.appendChild(coll_about_request); 112 113 Element coll_about_response = (Element) this.mr.process(coll_about_message); 114 115 Element response = (Element) GSXML.getChildByTagName(coll_about_response, GSXML.RESPONSE_ELEM); 116 117 if (response == null) { 118 // what should we be returning? 119 return null; 120 } 121 122 //add the site metadata 123 addSiteMetadata(response, userContext); 124 addInterfaceOptions(response); 125 126 if (page_name.equals(PREFS_PAGE) && this.language_list != null) { 127 response.appendChild(response.getOwnerDocument().importNode(this.language_list, true)); 128 } 129 130 // is this collection part of a group? 131 String group = (String) params.get(GSParams.GROUP); 132 if (group != null && !group.equals("")) { 133 // ...yes it is. get the group path info 134 Element group_info_response = getGroupInfo(group, userContext); 135 Element path_list = (Element) GSXML.getChildByTagName(group_info_response, 136 GSXML.PATH_ELEM + GSXML.LIST_MODIFIER); 137 if (path_list != null) { 138 response.appendChild(response.getOwnerDocument().importNode(path_list, true)); 139 } 140 } 141 142 if (page_name.equals(ABOUT_PAGE)) { 143 // get service descriptions. Actually only want displayItems 144 NodeList services = coll_about_response.getElementsByTagName(GSXML.SERVICE_ELEM); 145 if (services.getLength() > 0) 146 { 147 sendMultipleRequests(doc, services, collection, GSXML.REQUEST_TYPE_DESCRIBE, userContext); 148 } 149 150 } 151 // old code had adding a ct param to the paramList - for about/prefs page, only used for gs2 interface. Since we don't support that anymore, am leaving it out. 152 153 // add the global collection format info 154 Element formatMessage = doc.createElement(GSXML.MESSAGE_ELEM); 155 Element formatRequest = GSXML.createBasicRequest(doc, GSXML.REQUEST_TYPE_FORMAT, collection, userContext); 156 formatMessage.appendChild(formatRequest); 157 Element formatResponseMessage = (Element) this.mr.process(formatMessage); 158 Element formatResponse = (Element) GSXML.getChildByTagName(formatResponseMessage, GSXML.RESPONSE_ELEM); 159 160 Element globalFormat = (Element) GSXML.getChildByTagName(formatResponse, GSXML.FORMAT_ELEM); 161 if (globalFormat != null) 162 { 163 response.appendChild(response.getOwnerDocument().importNode(globalFormat, true)); 164 } 165 166 if (page_name.equals(VERIFY_PAGE)) { 167 addSecurityInfo(request, collection, response); 168 } 169 170 return response; 171 } 172 92 173 93 174 protected Element homePage(Element request) 94 175 { 95 176 Document doc = XMLConverter.newDOM(); 96 97 177 98 178 UserContext userContext = new UserContext(request); … … 151 231 152 232 if (!this.groupInfoServiceName.equals("NO_GROUPS")) { 153 154 233 String group = null; 155 234 Element cgi_paramList = (Element) GSXML.getChildByTagName(request, GSXML.PARAM_ELEM + GSXML.LIST_MODIFIER); … … 170 249 if (collection_list != null) { 171 250 info_response.appendChild(doc.importNode(collection_list, true)); 251 } else { 252 logger.warn("Home page had no collection list"); 172 253 } 173 254 Element group_list = (Element) GSXML.getChildByTagName(group_info_response, … … 211 292 sendMultipleRequests(doc, colls, null, GSXML.REQUEST_TYPE_DESCRIBE, userContext); 212 293 } 213 } 294 } 214 295 215 296 // get metadata for any services … … 264 345 } 265 346 266 protected Element aboutOrPrefsPage(Element request, String page_name) 267 { 268 Document doc = XMLConverter.newDOM(); 269 270 UserContext userContext = new UserContext(request); 271 // extract the params from the cgi-request, 272 Element cgi_paramList = (Element) GSXML.getChildByTagName(request, GSXML.PARAM_ELEM + GSXML.LIST_MODIFIER); 273 HashMap<String, Serializable> params = GSXML.extractParams(cgi_paramList, false); 274 275 String coll_name = (String) params.get(GSParams.COLLECTION); 276 if (coll_name == null || coll_name.equals("")) 277 { 278 // return a response with no collection info - must be prefs from home page 279 Element response = doc.createElement(GSXML.RESPONSE_ELEM); 280 addSiteMetadata(response, userContext); 281 addInterfaceOptions(response); 282 if (this.language_list != null) { 283 response.appendChild(doc.importNode(this.language_list, true)); 284 } 285 return response; 286 } 287 288 // get the collection or cluster description 289 Element coll_about_message = doc.createElement(GSXML.MESSAGE_ELEM); 290 291 Element coll_about_request = GSXML.createBasicRequest(doc, GSXML.REQUEST_TYPE_DESCRIBE, coll_name, userContext); 292 coll_about_message.appendChild(coll_about_request); 293 Element coll_about_response = (Element) this.mr.process(coll_about_message); 294 295 // add collection type attribute to paramList 296 String col_type = ""; 297 NodeList collect_elem = coll_about_response.getElementsByTagName(GSXML.COLLECTION_ELEM); 298 if (collect_elem.getLength() != 0) 299 { 300 for (int i = 0; i < collect_elem.getLength(); i++) 301 { 302 Element e = (Element) collect_elem.item(i); 303 col_type = e.getAttribute(GSXML.TYPE_ATT); 304 } 305 } 306 else 307 { 308 logger.error(GSXML.COLLECTION_ELEM + " element is null"); 309 } 310 311 // adding a ct param to paramlist. only needed for gs2 interface, not default 312 NodeList paramList_list = request.getElementsByTagName(GSXML.PARAM_ELEM + GSXML.LIST_MODIFIER); 313 if (paramList_list.getLength() != 0) 314 { 315 for (int i = 0; i < paramList_list.getLength(); i++) 316 { 317 Element e = (Element) paramList_list.item(i); 318 Element ct = GSXML.createParameter(request.getOwnerDocument(), GSParams.COLLECTION_TYPE, col_type.equalsIgnoreCase("mg") ? "0" : "1"); 319 e.appendChild(ct); 320 } 321 } 322 else 323 { 324 logger.info("paramList is null!!"); 325 } 326 327 if (coll_about_response == null) 328 { 329 return null; 330 } 331 332 // second, get the info for each service - we only want display items 333 // but for now, we'll just get it all 334 NodeList services = coll_about_response.getElementsByTagName(GSXML.SERVICE_ELEM); 335 if (services.getLength() > 0) 336 { 337 sendMultipleRequests(doc, services, coll_name, GSXML.REQUEST_TYPE_DESCRIBE, userContext); 338 } 339 340 Element response = (Element) GSXML.getChildByTagName(coll_about_response, GSXML.RESPONSE_ELEM); 341 342 // is this collection part of a group? 343 String group = (String) params.get(GSParams.GROUP); 344 if (group != null && !group.equals("")) { 345 // ...yes it is. get the group path info 346 Element group_info_response = getGroupInfo(group, userContext); 347 Element path_list = (Element) GSXML.getChildByTagName(group_info_response, 348 GSXML.PATH_ELEM + GSXML.LIST_MODIFIER); 349 if (path_list != null) { 350 response.appendChild(response.getOwnerDocument().importNode(path_list, true)); 351 } 352 } 353 354 //add the site metadata 355 addSiteMetadata(response, userContext); 356 addInterfaceOptions(response); 357 if (page_name.equals(PREFS_PAGE) && this.language_list != null) { 358 response.appendChild(response.getOwnerDocument().importNode(this.language_list, true)); 359 } 360 return response; 361 } 362 363 364 /** if we dont know the page type, use this method */ 365 protected Element unknownPage(Element request) 366 { 367 Document doc = XMLConverter.newDOM(); 368 369 UserContext userContext = new UserContext(request); 370 String page_name = request.getAttribute(GSXML.SUBACTION_ATT); 371 372 // extract the params from the cgi-request, 373 Element cgi_paramList = (Element) GSXML.getChildByTagName(request, GSXML.PARAM_ELEM + GSXML.LIST_MODIFIER); 374 HashMap<String, Serializable> params = GSXML.extractParams(cgi_paramList, false); 375 376 String coll_name = (String) params.get(GSParams.COLLECTION); 377 if (coll_name == null || coll_name.equals("")) 378 { 379 // just return an empty response 380 Element response = doc.createElement(GSXML.RESPONSE_ELEM); 381 addSiteMetadata(response, userContext); 382 addInterfaceOptions(response); 383 return response; 384 } 385 386 // else get the coll description - actually this is the same as for the about page - should we merge these two methods?? 387 388 // if there is a service specified should we get the service description instead?? 389 // get the collection or cluster description 390 Element coll_about_message = doc.createElement(GSXML.MESSAGE_ELEM); 391 392 Element coll_about_request = GSXML.createBasicRequest(doc, GSXML.REQUEST_TYPE_DESCRIBE, coll_name, userContext); 393 coll_about_message.appendChild(coll_about_request); 394 395 Element coll_about_response = (Element) this.mr.process(coll_about_message); 396 397 Element response = (Element) GSXML.getChildByTagName(coll_about_response, GSXML.RESPONSE_ELEM); 398 399 //add the site metadata 400 addSiteMetadata(response, userContext); 401 addInterfaceOptions(response); 402 403 return response; 404 405 } 347 348 protected boolean addSecurityInfo(Element request, String collection, Element response) { 349 logger.error("in add security"); 350 Document doc = XMLConverter.newDOM(); 351 Element securityMessage = doc.createElement(GSXML.MESSAGE_ELEM); 352 Element securityRequest = GSXML.createBasicRequest(doc, GSXML.REQUEST_TYPE_SECURITY, collection, new UserContext(request)); 353 securityMessage.appendChild(securityRequest); 354 355 Element securityResponse = (Element) GSXML.getChildByTagName(this.mr.process(securityMessage), GSXML.RESPONSE_ELEM); 356 logger.error("security response = "+XMLConverter.getPrettyString(securityResponse)); 357 358 Document r_doc = response.getOwnerDocument(); 359 // just get the top level node and attributes 360 // Element new_sec = (Element)r_doc.importNode(securityResponse, true); //createElement(GSXML.SECURITY_ELEMENT); 361 Element new_sec = GSXML.duplicateWithNewName(r_doc, securityResponse, "security", true); 362 // just in case this is present 363 new_sec.removeAttribute("secretKey"); 364 logger.error("new security element = "+XMLConverter.getPrettyString(new_sec)); 365 response.appendChild(new_sec); 366 return true; 367 368 } 406 369 407 370 protected boolean sendMultipleRequests(Document doc, NodeList items, String path_prefix, String request_type, UserContext userContext)
Note:
See TracChangeset
for help on using the changeset viewer.