- Timestamp:
- 2002-11-26T13:55:24+13:00 (21 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/gsdl3/src/java/org/greenstone/gsdl3/action/PageAction.java
r3512 r3568 14 14 public class PageAction extends Action { 15 15 16 public Stringprocess (Element message) {16 public Element process (Element message) { 17 17 18 Element request = (Element) message.getElementsByTagName(GSXML.REQUEST_ELEM).item(0);18 Element request = (Element) GSXML.getChildByTagName(message, GSXML.REQUEST_ELEM); 19 19 // the page name is the subaction 20 20 String page_name = request.getAttribute(GSXML.SUBACTION_ATT); 21 21 if (page_name.equals("")) { // if no page specified, assume home page 22 page_name = "home"; 23 } 24 22 25 // create the return page tree 23 26 Element page = doc_.createElement(GSXML.PAGE_ELEM); 24 page.setAttribute(GSXML.LANG_ATT, message.getAttribute(GSXML.LANG_ATT));25 // add the lang stuff from xml_in26 page.appendChild(doc_.importNode(GSXML.getChildByTagName(message, GSXML. TRANSLATION_ELEM), true));27 // add the system stuff from xml_in27 page.setAttribute(GSXML.LANG_ATT, request.getAttribute(GSXML.LANG_ATT)); 28 // add the lang stuff from message 29 page.appendChild(doc_.importNode(GSXML.getChildByTagName(message, GSXML.DISPLAY_ELEM), true)); 30 // add the system stuff from message 28 31 page.appendChild(doc_.importNode(GSXML.getChildByTagName(message, GSXML.CONFIGURATION_ELEM), true)); 29 30 if (page_name.equals("")) { 31 // for now send an error. change to always display the home page? 32 return GSHTML.errorPage(" page action specified, but no page specified"); 33 } 32 34 33 if (page_name.equals("home")) { 35 34 return homePage(page, request); … … 37 36 return aboutPage(page, request); 38 37 } else { 39 return GSHTML.errorPage("page: "+page_name+" not yet implemented"); 38 System.err.println("PageAction Error: unimplemented page specified!"); 39 return null; 40 40 } 41 41 } 42 43 44 protected String homePage(Element page, Element orig_message) { 42 43 protected Element homePage(Element page, Element orig_message) { 45 44 46 // first, get the list of collections from mr 47 45 // first, get the message router info 48 46 Element coll_list_message = doc_.createElement(GSXML.MESSAGE_ELEM); 49 coll_list_message.setAttribute(GSXML.LANG_ATT, page.getAttribute(GSXML.LANG_ATT));50 47 Element coll_list_request = doc_.createElement(GSXML.REQUEST_ELEM); 51 48 coll_list_message.appendChild(coll_list_request); 52 49 coll_list_request.setAttribute(GSXML.TYPE_ATT, GSXML.REQUEST_TYPE_DESCRIBE); 53 //coll_list_request.setAttribute("info", "collectionList");54 50 coll_list_request.setAttribute(GSXML.LANG_ATT, page.getAttribute(GSXML.LANG_ATT)); 51 System.out.println("PageAction: getting mesage router description."); 55 52 Element coll_list_response = (Element)mr_.process(coll_list_message); 56 53 if (coll_list_response==null) { 57 return GSHTML.errorPage("couldn't query the mr about collections"); 54 System.err.println("PageAction Error: couldn't query the message router!"); 55 return null; 58 56 } 59 57 60 // second, get the metadata for each collection 58 // second, get the metadata for each collection - we only want specific 59 // elements but for now, we'll just get it all 61 60 NodeList colls = coll_list_response.getElementsByTagName(GSXML.COLLECTION_ELEM); 62 63 //Element metadata_message = doc_.createElement(GSXML.MESSAGE_ELEM); 64 //metadata_message.setAttribute(GSXML.LANG_ATT, page.getAttribute(GSXML.LANG_ATT)); 65 //Element metadata_request = doc_.createElement(GSXML.REQUEST_ELEM); 66 //metadata_message.appendChild(metadata_request); 67 //metadata_request.setAttribute(GSXML.TYPE_ATT, GSXML.REQUEST_TYPE_DESCRIBE); 61 // we will send all the requests in a single message 62 Element metadata_message = doc_.createElement(GSXML.MESSAGE_ELEM); 68 63 for (int i=0; i<colls.getLength(); i++) { 69 Element metadata_message = doc_.createElement(GSXML.MESSAGE_ELEM);70 metadata_message.setAttribute(GSXML.LANG_ATT, page.getAttribute(GSXML.LANG_ATT));71 64 Element metadata_request = doc_.createElement(GSXML.REQUEST_ELEM); 65 metadata_request.setAttribute(GSXML.TYPE_ATT, GSXML.REQUEST_TYPE_DESCRIBE); 66 metadata_request.setAttribute(GSXML.LANG_ATT, page.getAttribute(GSXML.LANG_ATT)); 67 Element c = (Element)colls.item(i); 68 String name = c.getAttribute(GSXML.NAME_ATT); 69 metadata_request.setAttribute(GSXML.TO_ATT, name); // overwrites the old value 70 // add this request to the message 72 71 metadata_message.appendChild(metadata_request); 73 metadata_request.setAttribute(GSXML.TYPE_ATT, GSXML.REQUEST_TYPE_DESCRIBE); 74 75 // get the metadata for each one 76 Element c = (Element)colls.item(i); 77 String name = c.getAttribute(GSXML.NAME_ATT); 78 System.out.println("getting metadata for coll "+name); 79 80 metadata_request.setAttribute(GSXML.TO_ATT, name); // overwrites the old value 81 System.out.println("metadata message = \n"+converter_.getString(metadata_message)); 82 Element metadata_response = (Element)mr_.process(metadata_message); 83 Element coll = (Element)metadata_response.getElementsByTagName(GSXML.COLLECTION_ELEM).item(0); 84 if (coll==null) { 85 System.out.println("coll is null, in \n"+converter_.getString(metadata_response)); 72 } 73 System.out.println("PageAction: getting metadata for each collection."); 74 Element metadata_response = (Element)mr_.process(metadata_message); 75 76 NodeList coll_responses = metadata_response.getElementsByTagName(GSXML.COLLECTION_ELEM); 77 // check that have same number of responses as collections 78 if (colls.getLength() != coll_responses.getLength()) { 79 System.err.println("PageAction Error: didn't get a response for each collection - somethings gone wrong!"); 80 // for now, dont use the metadata 81 } else { 82 for (int i=0; i<colls.getLength(); i++) { 83 Element c1 = (Element)colls.item(i); 84 Element c2 = (Element)coll_responses.item(i); 85 if (c1.getAttribute(GSXML.NAME_ATT).equals(c2.getAttribute(GSXML.NAME_ATT))) { 86 // add the metadata to the original response 87 GSXML.mergeMetadataLists(c1, c2); // add the metadata to the original response 88 } else { 89 System.err.println("PageAction Error: response does not correspond to request!"); 90 } 91 86 92 } 87 GSXML.mergeMetadataLists(c, coll); // add the metadata to the original response88 93 } 89 94 … … 96 101 Document style_doc = converter_.getDOM(new File(stylesheet)); 97 102 GSXSLT.absoluteIncludePaths(style_doc, config_); 98 //System.out.println("page="); 99 //System.out.println(converter_.getString(page)); 100 return transformer_.transform(style_doc, page); 103 return (Element)transformer_.transform(style_doc, page); 101 104 102 103 105 } // homePage 104 106 105 protected StringaboutPage(Element page, Element request) {107 protected Element aboutPage(Element page, Element request) { 106 108 107 109 // extract the params from the cgi-request, 108 // first convert short to long names109 110 Element cgi_paramList = (Element)GSXML.getChildByTagName(request, GSXML.PARAM_ELEM+GSXML.LIST_MODIFIER); 110 cgi_.toLong(cgi_paramList);111 111 HashMap params = GSXML.extractParams(cgi_paramList); 112 112 … … 116 116 } 117 117 if (coll_name == null || coll_name.equals("")) { 118 return GSHTML.errorPage("about page - need to specify coll name or cluster name"); 118 System.err.println("PageAction Error: about page requested with no collection or cluster specified!"); 119 return null; 119 120 } 120 121 122 // get the collection or cluster description 121 123 Element coll_about_message = doc_.createElement(GSXML.MESSAGE_ELEM); 122 coll_about_message.setAttribute(GSXML.LANG_ATT, page.getAttribute(GSXML.LANG_ATT));123 124 124 Element coll_about_request = doc_.createElement(GSXML.REQUEST_ELEM); 125 125 coll_about_message.appendChild(coll_about_request); 126 126 coll_about_request.setAttribute(GSXML.TYPE_ATT, GSXML.REQUEST_TYPE_DESCRIBE); 127 127 coll_about_request.setAttribute(GSXML.TO_ATT, coll_name); 128 128 coll_about_request.setAttribute(GSXML.LANG_ATT, page.getAttribute(GSXML.LANG_ATT)); 129 129 130 Element coll_about_response = (Element)mr_.process(coll_about_message); 130 131 131 // System.out.println("coll response=");132 //System.out.println(converter_.getString(coll_about_response));133 132 // add the response to the page 134 133 page.appendChild(doc_.importNode(GSXML.getChildByTagName(coll_about_response, GSXML.RESPONSE_ELEM), true)); … … 138 137 Document style_doc = converter_.getDOM(new File(stylesheet)); 139 138 GSXSLT.absoluteIncludePaths(style_doc, config_); 140 return transformer_.transform(style_doc, page);139 return (Element)transformer_.transform(style_doc, page); 141 140 142 141
Note:
See TracChangeset
for help on using the changeset viewer.