Ignore:
Timestamp:
2002-08-20T10:39:06+12:00 (22 years ago)
Author:
kjdon
Message:

modified

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  
    55// XML classes
    66import org.w3c.dom.Node;
     7import org.w3c.dom.Element;
    78import org.w3c.dom.Document;
    89
    9 abstract public class Action implements ModuleInterface{
     10abstract public class Action {
    1011
    1112    protected ConfigVars config_=null;
     
    1516    /** a converter class to parse XML and create Docs */
    1617    protected XMLConverter converter_=null;
     18    /** cgi args conveter */
     19    protected CGIArgConverter cgi_=null;
    1720    /** a transformer class to transform xml using xslt */
    1821    protected XMLTransformer transformer_=null;
     
    3841    }
    3942
     43    public void setCGIConverter(CGIArgConverter cgi) {
     44    cgi_ = cgi;
     45    }
    4046    public void configure() {
    4147    // does nothing yet
     
    4551     * and returns the page of results - may be in html/xml/other
    4652     * 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();
    5056   
    51       Node res = process(doc);
    52     return converter_.getString(res); // does this work for html? */
     57    return process(message);
     58    }
    5359   
    54     public Node process(Node xml_in){
    55     return xml_in; // for now
    56     }
     60    abstract public String process(Element xml_in);
     61   
    5762
    5863}
  • trunk/gsdl3/src/java/org/greenstone/gsdl3/action/BrowseAction.java

    r3340 r3363  
    1111   
    1212
    13     public String process (String xml_in) {
     13    public String process (Element message) {
    1414
    15     Element message = converter_.getDOM(xml_in).getDocumentElement();
    1615    Element request = (Element)message.getElementsByTagName("request").item(0);
    1716   
  • trunk/gsdl3/src/java/org/greenstone/gsdl3/action/PageAction.java

    r3340 r3363  
    1212public class PageAction extends Action {
    1313
    14 
    15     public String process (String xml_in) {
     14    public String process (Element message) {
    1615   
    17     Element message = converter_.getDOM(xml_in).getDocumentElement();
    1816    Element request = (Element)message.getElementsByTagName("request").item(0);
    19 
    2017    String info = request.getAttribute("info");
    2118    // remove the page/ bit
    2219    info = GSPath.removeFirstLink(info);
    2320    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
    2430    if (page_name.equals("")) {
    2531        // for now send an error. change to always display the home page?
     
    2733    }
    2834    if (page_name.equals("home")) {
    29         return homePage(request);
     35        return homePage(page, request);
    3036    } else if (page_name.equals("about")) {
    31         return aboutPage(request);
     37        return aboutPage(page, request);
    3238    } else {
    3339        return GSHTML.errorPage("page: "+page_name+" not yet implemented");
     
    3541    }
    3642
    37     protected String homePage(Element request) {
     43
     44    protected String homePage(Element page, Element orig_message) {
    3845   
    3946    // first, get the list of collections from mr
    4047   
    4148    Element coll_list_message = doc_.createElement("message");
     49    coll_list_message.setAttribute("lang", page.getAttribute("lang"));
    4250    Element coll_list_request = doc_.createElement("request");
    4351    coll_list_message.appendChild(coll_list_request);
     
    5361    System.out.println(converter_.getString(coll_list_response));
    5462
     63    // second, get the metadata for each collection
    5564    NodeList colls = coll_list_response.getElementsByTagName("collection");
    5665   
    5766    Element metadata_message = doc_.createElement("message");
     67    metadata_message.setAttribute("lang", page.getAttribute("lang"));
    5868    Element metadata_request = doc_.createElement("request");
    5969    metadata_message.appendChild(metadata_request);
     
    7080    }
    7181
    72     //return GSHTML.htmlSafe(converter_.getString(coll_list_response));
    73     //now the full response is in coll_list_response
    74     //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    
    8382    System.out.println("the second xml response is");
    8483    System.out.println(converter_.getString(coll_list_response));
    8584
     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");
    8691    String transformed_result = transformer_.transform(stylesheet,
    87                                coll_list_response);   
     92                               page);   
    8893    return transformed_result;
    8994             
    9095    } // homePage
    9196
    92     protected String aboutPage(Element request) {
     97    protected String aboutPage(Element page, Element request) {
    9398
    9499    // get the params out
    95     HashMap params = GSXML.extractParams((Element)GSXML.getChildByTagName(request, "paramList"));
     100    HashMap params = GSXML.extractParams((Element)GSXML.getNodeByPath(request, "paramList"));
    96101    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
    102103    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
    104106    Element coll_about_request = doc_.createElement("request");
    105107    coll_about_message.appendChild(coll_about_request);
    106108    coll_about_request.setAttribute("type", "describe");
    107109    coll_about_request.setAttribute("to", coll_name);
     110
    108111    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
    113118    String stylesheet = GSFile.stylesheetPath(config_, "about.xsl");
    114119
    115     System.out.println("stylesheet="+stylesheet);
     120    //System.out.println("response="+converter_.getString(page));
    116121    String transformed_result = transformer_.transform(stylesheet,
    117                                coll_about_response);   
     122                               page);   
    118123    return transformed_result;
    119124   
  • trunk/gsdl3/src/java/org/greenstone/gsdl3/action/QueryAction.java

    r3340 r3363  
    1010
    1111import java.util.HashMap;
     12import java.util.Map;
     13//import java.util.Map;
     14import java.util.Iterator;
    1215
    1316public class QueryAction extends Action {
    1417   
    1518
    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
    1930    Element request = (Element)message.getElementsByTagName("request").item(0);
    20    
    2131    String info = request.getAttribute("info");
    2232    // remove the q/ bit
     
    2939
    3040    if (query_type.equals("text")) {
    31         return textQuery(request);
     41        return textQuery(page, request);
    3242    }
    3343    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);
    3747
    3848   
    3949    }
    4050   
    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
    4655    String stylesheet = GSFile.stylesheetPath(config_, "textquery.xsl");
    47    
    48     //String stylesheet = GSFile.stylesheetPath(gsdl_home_, site_home_,
    49     //                    display_home_, "textquery.xsl");
    5056    if (stylesheet==null) {
    5157        return GSHTML.errorPage("textquery stylesheet not found!");
    5258    }
    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
    55129    String query = (String)params.get("q");
     130
    56131    if (query==null|| query.equals("")) {
    57         // if there is no q set, just output the search box
    58         String transformed_result = transformer_.transform(stylesheet,
    59                                    query_request);   
    60         return transformed_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);       
    61136    }
    62137   
    63138    // 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
    74147    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    }
    76164
    77165    // 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
    85173    // this result is the list of docs.
    86174    // now take that list, and get the Titles
    87175    // for now, just create a whole new request
    88176
    89     Element resource_list = (Element)result1.getElementsByTagName("resourceList").item(0); // should always be a resource list - but it may be empty
    90 
    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");
    94182       
    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?
    102191    // get the Title metadata
    103     Element mr_message2 = doc_.createElement("message");
    104     Element mr_request2 = doc_.createElement("request");
    105     mr_message2.appendChild(mr_request2);
    106 
    107     mr_request2.setAttribute("type", "query");
    108     to = (String)params.get("c"); // collection name
    109     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);
    113202
    114203    // 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));
    116205
    117206    // the second part of the content is the metadata list
     
    120209    title.setAttribute("name", "Title");
    121210    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) {
    140230    return GSHTML.errorPage("field query not implemented");
    141231
    142232
    143233    }
    144     protected String unknownQuery(Element request) {
     234    protected String unknownQuery(Element page, Element request) {
    145235
    146236    return GSHTML.errorPage("unknown query subtype - unknown query not implemented");
  • trunk/gsdl3/src/java/org/greenstone/gsdl3/action/ResourceAction.java

    r3340 r3363  
    1010import java.util.HashMap;
    1111public class ResourceAction extends Action {
    12    
    1312
    14     public String process (String xml_in) {
    1513
    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) {
    1817
    19     // could pass in aciton name, and have it dynamically decide the name
     18    // find the stylesheet
    2019    String stylesheet = GSFile.stylesheetPath(config_, "resource.xsl");
    2120
    22     //String stylesheet = GSFile.stylesheetPath(gsdl_home_, site_home_,
    23     //                    display_home_, "resource.xsl");
    2421    if (stylesheet==null) {
    2522        return GSHTML.errorPage("resource stylesheet not found!");
    2623    }
    27    
     24
    2825    // for now, info="r" eventually we may want to change to r/text r/assoc
    2926    // 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
    3333    String resource_name = (String)params.get("r");
    3434    if (resource_name == null || resource_name.equals("")) {
     
    3636        return GSHTML.errorPage("no resource specified");
    3737    }
     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
    3849
    3950    // build up the mr request
    40 
    4151    Element mr_message = doc_.createElement("message");
    4252    Element mr_request = doc_.createElement("request");
     
    6171    content.appendChild(resource_list);
    6272
    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);
    6674
    67     // create a new Element
    68     Element page = doc_.createElement("message");
     75    // add the results to the page
    6976    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   
    7279
    7380    String transformed_result = transformer_.transform(stylesheet, page);
Note: See TracChangeset for help on using the changeset viewer.