Ignore:
Timestamp:
2002-11-26T13:55:24+13:00 (21 years ago)
Author:
kjdon
Message:

tidied up a bit, uses new page structure and new display elements

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/gsdl3/src/java/org/greenstone/gsdl3/action/PageAction.java

    r3512 r3568  
    1414public class PageAction extends Action {
    1515
    16     public String process (Element message) {
     16    public Element process (Element message) {
    1717   
    18     Element request = (Element)message.getElementsByTagName(GSXML.REQUEST_ELEM).item(0);
     18    Element request = (Element) GSXML.getChildByTagName(message, GSXML.REQUEST_ELEM);
    1919    // the page name is the subaction
    2020    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   
    2225    // create the return page tree
    2326    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_in
    26     page.appendChild(doc_.importNode(GSXML.getChildByTagName(message, GSXML.TRANSLATION_ELEM), true));
    27     // add the system stuff from xml_in
     27    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
    2831    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   
    3433    if (page_name.equals("home")) {
    3534        return homePage(page, request);
     
    3736        return aboutPage(page, request);
    3837    } else {
    39         return GSHTML.errorPage("page: "+page_name+" not yet implemented");
     38        System.err.println("PageAction Error: unimplemented page specified!");
     39        return null;
    4040    }
    4141    }
    42 
    43 
    44     protected String homePage(Element page, Element orig_message) {
     42   
     43    protected Element homePage(Element page, Element orig_message) {
    4544   
    46     // first, get the list of collections from mr
    47    
     45    // first, get the message router info
    4846    Element coll_list_message = doc_.createElement(GSXML.MESSAGE_ELEM);
    49     coll_list_message.setAttribute(GSXML.LANG_ATT, page.getAttribute(GSXML.LANG_ATT));
    5047    Element coll_list_request = doc_.createElement(GSXML.REQUEST_ELEM);
    5148    coll_list_message.appendChild(coll_list_request);
    5249    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.");
    5552    Element coll_list_response = (Element)mr_.process(coll_list_message);
    5653    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;
    5856    }
    5957   
    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
    6160    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);
    6863    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));
    7164        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
    7271        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       
    8692        }
    87         GSXML.mergeMetadataLists(c, coll); // add the metadata to the original response
    8893    }
    8994
     
    96101    Document style_doc = converter_.getDOM(new File(stylesheet));
    97102    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);       
    101104   
    102              
    103105    } // homePage
    104106
    105     protected String aboutPage(Element page, Element request) {
     107    protected Element aboutPage(Element page, Element request) {
    106108
    107109    // extract the params from the cgi-request,
    108     // first convert short to long names
    109110    Element cgi_paramList = (Element)GSXML.getChildByTagName(request, GSXML.PARAM_ELEM+GSXML.LIST_MODIFIER);
    110     cgi_.toLong(cgi_paramList);
    111111    HashMap params = GSXML.extractParams(cgi_paramList);
    112112   
     
    116116    }
    117117    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;
    119120    }
    120 
     121   
     122    // get the collection or cluster description
    121123    Element coll_about_message = doc_.createElement(GSXML.MESSAGE_ELEM);
    122     coll_about_message.setAttribute(GSXML.LANG_ATT, page.getAttribute(GSXML.LANG_ATT));
    123 
    124124    Element coll_about_request = doc_.createElement(GSXML.REQUEST_ELEM);
    125125    coll_about_message.appendChild(coll_about_request);
    126126    coll_about_request.setAttribute(GSXML.TYPE_ATT, GSXML.REQUEST_TYPE_DESCRIBE);
    127127    coll_about_request.setAttribute(GSXML.TO_ATT, coll_name);
    128 
     128    coll_about_request.setAttribute(GSXML.LANG_ATT, page.getAttribute(GSXML.LANG_ATT));
     129   
    129130    Element coll_about_response = (Element)mr_.process(coll_about_message);
    130131
    131     //  System.out.println("coll response=");
    132     //System.out.println(converter_.getString(coll_about_response));
    133132    // add the response to the page
    134133    page.appendChild(doc_.importNode(GSXML.getChildByTagName(coll_about_response, GSXML.RESPONSE_ELEM), true));
     
    138137    Document style_doc = converter_.getDOM(new File(stylesheet));
    139138    GSXSLT.absoluteIncludePaths(style_doc, config_);
    140     return transformer_.transform(style_doc, page);   
     139    return (Element)transformer_.transform(style_doc, page);   
    141140
    142141   
Note: See TracChangeset for help on using the changeset viewer.