Changeset 3363 for trunk/gsdl3/src/java/org/greenstone/gsdl3/action
- Timestamp:
- 2002-08-20T10:39:06+12:00 (22 years ago)
- Location:
- trunk/gsdl3/src/java/org/greenstone/gsdl3/action
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/gsdl3/src/java/org/greenstone/gsdl3/action/Action.java
r3340 r3363 5 5 // XML classes 6 6 import org.w3c.dom.Node; 7 import org.w3c.dom.Element; 7 8 import org.w3c.dom.Document; 8 9 9 abstract public class Action implements ModuleInterface{10 abstract public class Action { 10 11 11 12 protected ConfigVars config_=null; … … 15 16 /** a converter class to parse XML and create Docs */ 16 17 protected XMLConverter converter_=null; 18 /** cgi args conveter */ 19 protected CGIArgConverter cgi_=null; 17 20 /** a transformer class to transform xml using xslt */ 18 21 protected XMLTransformer transformer_=null; … … 38 41 } 39 42 43 public void setCGIConverter(CGIArgConverter cgi) { 44 cgi_ = cgi; 45 } 40 46 public void configure() { 41 47 // does nothing yet … … 45 51 * and returns the page of results - may be in html/xml/other 46 52 * depending on the output att of the request */ 47 abstract public String process(String xml_in);48 49 /*Document doc = converter_.getDOM(xml_in);53 public String process(String xml_in) { 54 55 Element message = converter_.getDOM(xml_in).getDocumentElement(); 50 56 51 Node res = process(doc);52 return converter_.getString(res); // does this work for html? */ 57 return process(message); 58 } 53 59 54 public Node process(Node xml_in){ 55 return xml_in; // for now 56 } 60 abstract public String process(Element xml_in); 61 57 62 58 63 } -
trunk/gsdl3/src/java/org/greenstone/gsdl3/action/BrowseAction.java
r3340 r3363 11 11 12 12 13 public String process ( String xml_in) {13 public String process (Element message) { 14 14 15 Element message = converter_.getDOM(xml_in).getDocumentElement();16 15 Element request = (Element)message.getElementsByTagName("request").item(0); 17 16 -
trunk/gsdl3/src/java/org/greenstone/gsdl3/action/PageAction.java
r3340 r3363 12 12 public class PageAction extends Action { 13 13 14 15 public String process (String xml_in) { 14 public String process (Element message) { 16 15 17 Element message = converter_.getDOM(xml_in).getDocumentElement();18 16 Element request = (Element)message.getElementsByTagName("request").item(0); 19 20 17 String info = request.getAttribute("info"); 21 18 // remove the page/ bit 22 19 info = GSPath.removeFirstLink(info); 23 20 String page_name = GSPath.getFirstLink(info); 21 22 // create the return page tree 23 Element page = doc_.createElement("page"); 24 page.setAttribute("lang", message.getAttribute("lang")); 25 // add the lang stuff from xml_in 26 page.appendChild(doc_.importNode(GSXML.getChildByTagName(message, "translate"), true)); 27 // add the system stuff from xml_in 28 page.appendChild(doc_.importNode(GSXML.getChildByTagName(message, "config"), true)); 29 24 30 if (page_name.equals("")) { 25 31 // for now send an error. change to always display the home page? … … 27 33 } 28 34 if (page_name.equals("home")) { 29 return homePage( request);35 return homePage(page, request); 30 36 } else if (page_name.equals("about")) { 31 return aboutPage( request);37 return aboutPage(page, request); 32 38 } else { 33 39 return GSHTML.errorPage("page: "+page_name+" not yet implemented"); … … 35 41 } 36 42 37 protected String homePage(Element request) { 43 44 protected String homePage(Element page, Element orig_message) { 38 45 39 46 // first, get the list of collections from mr 40 47 41 48 Element coll_list_message = doc_.createElement("message"); 49 coll_list_message.setAttribute("lang", page.getAttribute("lang")); 42 50 Element coll_list_request = doc_.createElement("request"); 43 51 coll_list_message.appendChild(coll_list_request); … … 53 61 System.out.println(converter_.getString(coll_list_response)); 54 62 63 // second, get the metadata for each collection 55 64 NodeList colls = coll_list_response.getElementsByTagName("collection"); 56 65 57 66 Element metadata_message = doc_.createElement("message"); 67 metadata_message.setAttribute("lang", page.getAttribute("lang")); 58 68 Element metadata_request = doc_.createElement("request"); 59 69 metadata_message.appendChild(metadata_request); … … 70 80 } 71 81 72 //return GSHTML.htmlSafe(converter_.getString(coll_list_response));73 //now the full response is in coll_list_response74 //String stylesheet = GSFile.stylesheetPath(gsdl_home_, site_home_,75 // display_home_, "home.xsl");76 String stylesheet = GSFile.stylesheetPath(config_, "home.xsl");77 78 Element system = doc_.createElement("system");79 //Element sitename = doc_.createElement("sitename");80 system.setAttribute("sitename", "localsite");81 coll_list_response.appendChild(coll_list_response.getOwnerDocument().importNode(system, true));82 83 82 System.out.println("the second xml response is"); 84 83 System.out.println(converter_.getString(coll_list_response)); 85 84 85 //now the full response is in coll_list_response 86 87 // add it in to the page xml tree 88 page.appendChild(doc_.importNode(GSXML.getChildByTagName(coll_list_response, "response"), true)); 89 90 String stylesheet = GSFile.stylesheetPath(config_, "home.xsl"); 86 91 String transformed_result = transformer_.transform(stylesheet, 87 coll_list_response);92 page); 88 93 return transformed_result; 89 94 90 95 } // homePage 91 96 92 protected String aboutPage(Element request) {97 protected String aboutPage(Element page, Element request) { 93 98 94 99 // get the params out 95 HashMap params = GSXML.extractParams((Element)GSXML.get ChildByTagName(request, "paramList"));100 HashMap params = GSXML.extractParams((Element)GSXML.getNodeByPath(request, "paramList")); 96 101 String coll_name = (String)params.get("c"); 97 String lang = (String)params.get("l"); 98 if (lang==null || lang.equals("")) { 99 lang="en"; // the default 100 } 101 System.out.println("lang="+lang); 102 102 103 Element coll_about_message = doc_.createElement("message"); 103 //coll_about_message.setAttribute("xml:lang", lang); 104 coll_about_message.setAttribute("lang", page.getAttribute("lang")); 105 104 106 Element coll_about_request = doc_.createElement("request"); 105 107 coll_about_message.appendChild(coll_about_request); 106 108 coll_about_request.setAttribute("type", "describe"); 107 109 coll_about_request.setAttribute("to", coll_name); 110 108 111 Element coll_about_response = (Element)mr_.process(coll_about_message); 109 coll_about_response.setAttribute("lang", lang); 110 //return GSHTML.htmlSafe(converter_.getString(coll_about_response)); 111 //String stylesheet = GSFile.stylesheetPath(gsdl_home_, site_home_, 112 // display_home_, "about.xsl"); 112 113 114 // add the response to the page 115 page.appendChild(doc_.importNode(GSXML.getChildByTagName(coll_about_response, "response"), true)); 116 117 // process using the stylesheet 113 118 String stylesheet = GSFile.stylesheetPath(config_, "about.xsl"); 114 119 115 System.out.println("stylesheet="+stylesheet);120 //System.out.println("response="+converter_.getString(page)); 116 121 String transformed_result = transformer_.transform(stylesheet, 117 coll_about_response);122 page); 118 123 return transformed_result; 119 124 -
trunk/gsdl3/src/java/org/greenstone/gsdl3/action/QueryAction.java
r3340 r3363 10 10 11 11 import java.util.HashMap; 12 import java.util.Map; 13 //import java.util.Map; 14 import java.util.Iterator; 12 15 13 16 public class QueryAction extends Action { 14 17 15 18 16 public String process (String xml_in) { 17 18 Element message = converter_.getDOM(xml_in).getDocumentElement(); 19 public String process (Element message) { 20 21 22 // create the return page tree 23 Element page = doc_.createElement("page"); 24 page.setAttribute("lang", message.getAttribute("lang")); 25 // add the lang stuff from message 26 page.appendChild(doc_.importNode(GSXML.getChildByTagName(message, "translate"), true)); 27 // add the system stuff from message 28 page.appendChild(doc_.importNode(GSXML.getChildByTagName(message, "config"), true)); 29 19 30 Element request = (Element)message.getElementsByTagName("request").item(0); 20 21 31 String info = request.getAttribute("info"); 22 32 // remove the q/ bit … … 29 39 30 40 if (query_type.equals("text")) { 31 return textQuery( request);41 return textQuery(page, request); 32 42 } 33 43 if (query_type.equals("field")) { 34 return fieldQuery( request);35 } 36 return unknownQuery( request);44 return fieldQuery(page, request); 45 } 46 return unknownQuery(page, request); 37 47 38 48 39 49 } 40 50 41 protected String textQuery(Element request) { 42 43 Element query_request = doc_.createElement("message"); 44 query_request.appendChild(doc_.importNode(request, true)); 45 51 // we may be able to generalize this for all query types? 52 protected String textQuery(Element page, Element request) { 53 54 // chack that the stylesheet is present - cant output a page without one. we may adapt this to use unknownquery stylesheet? - or ask for one from the MR 46 55 String stylesheet = GSFile.stylesheetPath(config_, "textquery.xsl"); 47 48 //String stylesheet = GSFile.stylesheetPath(gsdl_home_, site_home_,49 // display_home_, "textquery.xsl");50 56 if (stylesheet==null) { 51 57 return GSHTML.errorPage("textquery stylesheet not found!"); 52 58 } 53 54 HashMap params = GSXML.extractParams((Element)GSXML.getChildByTagName(request, "paramList")); 59 60 // extract the params from the cgi-request, and check that we have a coll specified 61 // first convert short to long names 62 Element cgi_paramList = (Element)GSXML.getChildByTagName(request, "paramList"); 63 cgi_.toLong(cgi_paramList); 64 HashMap params = GSXML.extractParams(cgi_paramList); 65 66 String collection = (String)params.get("c"); 67 if (collection == null || collection.equals("")) { 68 return GSHTML.errorPage("textquery, need to specify a colleciton!"); 69 } 70 71 // the first part of the data for the page is the cgi-params 72 Element cgi_request = (Element)doc_.importNode(request, true); 73 page.appendChild(cgi_request); 74 75 // get the service info from the MR - this will probably need to be cached somehow later on. and add as a description node to the cgi-request - this doesn't work. change to add the specified value as a current attribute to the param - need to do somthing different for query 76 77 Element mr_info_message = doc_.createElement("message"); 78 Element mr_info_request = doc_.createElement("request"); 79 mr_info_message.appendChild(mr_info_request); 80 mr_info_request.setAttribute("type", "describe"); 81 82 String to = collection; 83 to = GSPath.appendLink(to, "TextQuery"); 84 mr_info_request.setAttribute("to", to); 85 86 Element mr_info_response = (Element) mr_.process(mr_info_message); 87 System.err.println("describe response for service"); 88 System.err.println(converter_.getString(mr_info_response)); 89 Element description = doc_.createElement("description"); 90 // just param list for now - may need content info too 91 Node pl = GSXML.getNodeByPath(mr_info_response, "response/service/paramList"); 92 if (pl ==null) { 93 System.out.println("pl is null"); 94 } 95 else { 96 System.out.println("pl name is "+pl.getNodeName()); 97 } 98 Element imported_paramList = (Element)doc_.importNode(pl, true); 99 System.out.println("imported param list="); 100 System.out.println(converter_.getString(imported_paramList)); 101 // convert the name to short 102 cgi_.addShortNames(imported_paramList); 103 System.out.println("converted param list="); 104 System.out.println(converter_.getString(imported_paramList)); 105 106 description.appendChild(imported_paramList); 107 108 // for each param in page_request, set the current value if present 109 //actually, prob dont need to know the default value, just which one to display - overwrite the default att? 110 111 Element param = (Element)imported_paramList.getFirstChild(); 112 while (param !=null) { 113 if (param.getNodeName().equals("param")) { // just in case 114 String name = param.getAttribute("name"); 115 String current = (String)params.get(name); 116 System.out.println("name="+name+", current="+current); 117 if (current !=null && !current.equals("")) { 118 param.setAttribute("default", current); 119 } 120 } 121 param = (Element)param.getNextSibling(); 122 } 123 System.out.println("adapted param list="); 124 System.out.println(converter_.getString(imported_paramList)); 125 126 cgi_request.appendChild(description); 127 128 // check the query string 55 129 String query = (String)params.get("q"); 130 56 131 if (query==null|| query.equals("")) { 57 // if there is no q set, just output the search box58 S tring transformed_result = transformer_.transform(stylesheet,59 query_request);60 return transforme d_result;132 // if there is no q set, just output the search form 133 System.out.println("the plain page with no query data"); 134 System.out.println(converter_.getString(page)); 135 return transformer_.transform(stylesheet, page); 61 136 } 62 137 63 138 // else do the request, output search box and results 64 Element mr_message = doc_.createElement("message"); 65 Element mr_request = doc_.createElement("request"); 66 mr_message.appendChild(mr_request); 67 68 mr_request.setAttribute("type", "query"); 69 String to = (String)params.get("c"); // collection name 70 to = GSPath.appendLink(to, "TextQuery"); 71 mr_request.setAttribute("to", to); 72 73 // ignore paramList for now 139 Element mr_query_message = doc_.createElement("message"); 140 Element mr_query_request = doc_.createElement("request"); 141 mr_query_message.appendChild(mr_query_request); 142 143 mr_query_request.setAttribute("type", "query"); 144 mr_query_request.setAttribute("to", to); 145 146 // paramList 74 147 Element paramList = doc_.createElement("paramList"); 75 mr_request.appendChild(paramList); 148 mr_query_request.appendChild(paramList); 149 150 Iterator i = params.entrySet().iterator(); 151 while (i.hasNext()) { 152 Map.Entry e = (Map.Entry)i.next(); 153 String name = cgi_.toLong((String)e.getKey()); 154 if (!name.equals("")) { 155 String value = (String)e.getValue(); 156 // if (!name.equals("c")) { 157 Element p = doc_.createElement("param"); 158 p.setAttribute("name", name); 159 p.setAttribute("value", value); 160 paramList.appendChild(p); 161 // } 162 } 163 } 76 164 77 165 // content - contains the query string 78 Element content = doc_.createElement("content");79 Text text = doc_.createTextNode(query);80 content.appendChild(text);81 mr_ request.appendChild(content);82 //return GSHTML.errorPage(GSHTML.htmlSafe(converter_.getString(mr_message)));83 84 Element result1 = (Element)mr_.process(mr_message); 166 Element query_content = doc_.createElement("content"); 167 Text query_text = doc_.createTextNode(query); 168 query_content.appendChild(query_text); 169 mr_query_request.appendChild(query_content); 170 171 Element mr_query_response = (Element)mr_.process(mr_query_message); 172 85 173 // this result is the list of docs. 86 174 // now take that list, and get the Titles 87 175 // for now, just create a whole new request 88 176 89 Element resource_list = (Element)result1.getElementsByTagName("resourceList").item(0); // should always be a resource list - but it may be empty90 91 Element first_resource = (Element)GSXML.getChildByTagName(resource_list, "resource");92 if (first_resource == null) { // no docs found - dont bother getting metadata 93 Element result_response = (Element)GSXML.getChildByTagName( result1, "response");177 // check that there are some resources - for now check the list, but later should use a numdocs metadata elem 178 Element resource_list = (Element)GSXML.getNodeByPath(mr_query_response, "response/content/resourceList"); // resourceList not present if no docs found 179 if (resource_list == null) { 180 181 Element result_response = (Element)GSXML.getChildByTagName(mr_query_response, "response"); 94 182 95 query_request.appendChild(doc_.importNode(result_response, true)); 96 97 String transformed_result = transformer_.transform(stylesheet, 98 query_request); 99 100 return transformed_result; 101 } 183 page.appendChild(doc_.importNode(result_response, true)); 184 System.out.println("the page with empty response"); 185 System.out.println(converter_.getString(page)); 186 return transformer_.transform(stylesheet, page); 187 } 188 189 // we have a doc list, so get the metadata - for now, get title. 190 // can we dynamically decide what metadata to get? 102 191 // get the Title metadata 103 Element mr_me ssage2= doc_.createElement("message");104 Element mr_ request2= doc_.createElement("request");105 mr_me ssage2.appendChild(mr_request2);106 107 mr_ request2.setAttribute("type", "query");108 to = (String)params.get("c"); // collection name109 to = GSPath.appendLink(to, "MetadataRetrieve");110 mr_request2.setAttribute("to", to);111 Element content2= doc_.createElement("content");112 mr_ request2.appendChild(content2);192 Element mr_metadata_message = doc_.createElement("message"); 193 Element mr_metadata_request = doc_.createElement("request"); 194 mr_metadata_message.appendChild(mr_metadata_request); 195 196 mr_metadata_request.setAttribute("type", "query"); 197 to = GSPath.appendLink(collection, "MetadataRetrieve"); 198 mr_metadata_request.setAttribute("to", to); 199 200 Element meta_content = doc_.createElement("content"); 201 mr_metadata_request.appendChild(meta_content); 113 202 114 203 // the first part of the content is the doc list 115 content2.appendChild(doc_.importNode(resource_list, true));204 meta_content.appendChild(doc_.importNode(resource_list, true)); 116 205 117 206 // the second part of the content is the metadata list … … 120 209 title.setAttribute("name", "Title"); 121 210 metadata_list.appendChild(title); 122 content2.appendChild(metadata_list); 123 124 //return GSHTML.errorPage(GSHTML.htmlSafe(converter_.getString(mr_request2))); 125 Element result2 = (Element)mr_.process(mr_message2); 126 127 Element result2_response = (Element)GSXML.getChildByTagName(result2, "response"); 128 129 query_request.appendChild(doc_.importNode(result2_response, true)); 130 //return GSHTML.errorPage(GSHTML.htmlSafe(converter_.getString(query_request))); 131 132 String transformed_result = transformer_.transform(stylesheet, 133 query_request); 134 135 return transformed_result; 136 137 } 138 139 protected String fieldQuery(Element request) { 211 meta_content.appendChild(metadata_list); 212 213 System.out.println("the metadata request to mr"); 214 System.out.println(converter_.getString(mr_metadata_message)); 215 216 Element mr_metadata_response = (Element)mr_.process(mr_metadata_message); 217 218 Element result_response = (Element)GSXML.getChildByTagName(mr_metadata_response, "response"); 219 220 page.appendChild(doc_.importNode(result_response, true)); 221 222 System.out.println("the page with full response"); 223 System.out.println(converter_.getString(page)); 224 225 return transformer_.transform(stylesheet, page); 226 227 } 228 229 protected String fieldQuery(Element page, Element request) { 140 230 return GSHTML.errorPage("field query not implemented"); 141 231 142 232 143 233 } 144 protected String unknownQuery(Element request) {234 protected String unknownQuery(Element page, Element request) { 145 235 146 236 return GSHTML.errorPage("unknown query subtype - unknown query not implemented"); -
trunk/gsdl3/src/java/org/greenstone/gsdl3/action/ResourceAction.java
r3340 r3363 10 10 import java.util.HashMap; 11 11 public class ResourceAction extends Action { 12 13 12 14 public String process (String xml_in) {15 13 16 Element message = converter_.getDOM(xml_in).getDocumentElement(); 17 Element request = (Element)message.getElementsByTagName("request").item(0); 14 // could pass in action name, and have it dynamically decide the name 15 16 public String process (Element message) { 18 17 19 // could pass in aciton name, and have it dynamically decide the name18 // find the stylesheet 20 19 String stylesheet = GSFile.stylesheetPath(config_, "resource.xsl"); 21 20 22 //String stylesheet = GSFile.stylesheetPath(gsdl_home_, site_home_,23 // display_home_, "resource.xsl");24 21 if (stylesheet==null) { 25 22 return GSHTML.errorPage("resource stylesheet not found!"); 26 23 } 27 24 28 25 // for now, info="r" eventually we may want to change to r/text r/assoc 29 26 // or something 30 31 HashMap params = GSXML.extractParams((Element)request.getElementsByTagName("paramList").item(0)); 32 27 Element request = (Element)message.getElementsByTagName("request").item(0); 28 29 Element cgi_paramList = (Element)GSXML.getChildByTagName(request, "paramList"); 30 cgi_.toLong(cgi_paramList); 31 HashMap params = GSXML.extractParams(cgi_paramList); 32 33 33 String resource_name = (String)params.get("r"); 34 34 if (resource_name == null || resource_name.equals("")) { … … 36 36 return GSHTML.errorPage("no resource specified"); 37 37 } 38 39 40 // create the return page tree 41 Element page = doc_.createElement("page"); 42 page.setAttribute("lang", message.getAttribute("lang")); 43 // add the lang stuff from message 44 page.appendChild(doc_.importNode(GSXML.getChildByTagName(message, "translate"), true)); 45 // add the config stuff from message 46 page.appendChild(doc_.importNode(GSXML.getChildByTagName(message, "config"), true)); 47 48 38 49 39 50 // build up the mr request 40 41 51 Element mr_message = doc_.createElement("message"); 42 52 Element mr_request = doc_.createElement("request"); … … 61 71 content.appendChild(resource_list); 62 72 63 //return GSHTML.errorPage(GSHTML.htmlSafe(converter_.getString(mr_message))); 64 Element result = (Element)mr_.process(mr_message); 65 //return GSHTML.errorPage(GSHTML.htmlSafe(converter_.getString(mr_message)+"<p>"+converter_.getString(result))); 73 Element mr_result = (Element)mr_.process(mr_message); 66 74 67 // create a new Element 68 Element page = doc_.createElement("message"); 75 // add the results to the page 69 76 page.appendChild(doc_.importNode(request, true)); 70 page.appendChild(doc_.importNode(GSXML.getChildByTagName( result, "response"), true));71 //message.appendChild(doc_.importNode(GSXML.getChildByTagName(result, "response"), true));77 page.appendChild(doc_.importNode(GSXML.getChildByTagName(mr_result, "response"), true)); 78 72 79 73 80 String transformed_result = transformer_.transform(stylesheet, page);
Note:
See TracChangeset
for help on using the changeset viewer.