Changeset 5113


Ignore:
Timestamp:
2003-08-07T16:56:42+12:00 (21 years ago)
Author:
kjdon
Message:

now the recept adds in a collection description for each page, which includes descriptions for each service. the services can now be listed on each page in a nav bar or the like.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/gsdl3/src/java/org/greenstone/gsdl3/core/DefaultReceptionist.java

    r4990 r5113  
    2929    Element param_list = (Element)GSXML.getChildByTagName(page_request, GSXML.PARAM_ELEM+GSXML.LIST_MODIFIER);
    3030    if (param_list==null) { // must be the original home page
     31        System.out.println("DefaultReceptionist: no param list, assuming home page");
    3132        return;
    3233    }
    3334    Element coll_param = GSXML.getNamedElement(param_list, GSXML.PARAM_ELEM, GSXML.NAME_ATT, GSParams.COLLECTION);
    3435    if (coll_param == null) {
     36        System.out.println("DefaultReceptionist: coll param is null, returning");
    3537        return;
    3638    }
    3739    String action = page_request.getAttribute(GSXML.ACTION_ATT);
    3840    if (action.equals("p")) {
     41        System.out.println("DefaultReceptionist: page action, so returning");
    3942        return;
    4043    }
     
    5356        coll_description = (Element)GSXML.getChildByTagName(coll_about_response, GSXML.CLUSTER_ELEM);
    5457    }
    55     if (coll_description != null) {
    56         Element page_response = (Element)GSXML.getChildByTagName(page, GSXML.PAGE_RESPONSE_ELEM);
    57         page_response.appendChild(this.doc.importNode(coll_description, true));
     58    if (coll_description == null) {
     59        System.out.println("DefaultReceptionist: no collection description, returning");
     60        return;
    5861    }
     62   
     63    Element page_response = (Element)GSXML.getChildByTagName(page, GSXML.PAGE_RESPONSE_ELEM);
     64    Element new_coll_description = (Element)this.doc.importNode(coll_description, true);
     65    page_response.appendChild(new_coll_description);
     66   
     67    // now get the dispay info for the services
     68    Element service_list = (Element)GSXML.getChildByTagName(new_coll_description, GSXML.SERVICE_ELEM+GSXML.LIST_MODIFIER);
     69    if (service_list == null) {
     70        System.out.println("DefaultReceptionist: no service list, returning");
     71        // something weird has gone wrong
     72        return;
     73    }
     74
     75    NodeList services = service_list.getElementsByTagName(GSXML.SERVICE_ELEM);
     76    // we will send all the requests in a single message
     77    Element info_message = this.doc.createElement(GSXML.MESSAGE_ELEM);
     78    for (int i=0; i<services.getLength(); i++) {
     79        Element c = (Element)services.item(i);
     80        String name = c.getAttribute(GSXML.NAME_ATT);
     81        String address = GSPath.appendLink(collection, name);
     82        Element info_request = GSXML.createBasicRequest(this.doc,  GSXML.REQUEST_TYPE_DESCRIBE, address, lang);
     83        info_message.appendChild(info_request);
     84    }
     85
     86    Element info_response = (Element)this.mr.process(info_message);
     87
     88    NodeList service_responses = info_response.getElementsByTagName(GSXML.RESPONSE_ELEM);
     89    // check that have same number of responses as collections
     90    if (services.getLength() != service_responses.getLength()) {
     91        System.err.println("DefaultReceptionist Error: didn't get a response for each service - somethings gone wrong!");
     92        // for now, dont use the metadata
     93    } else {
     94        for (int i=0; i<services.getLength(); i++) {
     95        Element c1 = (Element)services.item(i);
     96        Element c2 = (Element)GSXML.getChildByTagName((Element)service_responses.item(i), GSXML.SERVICE_ELEM);
     97        if (c1.getAttribute(GSXML.NAME_ATT).equals(c2.getAttribute(GSXML.NAME_ATT))) {
     98            //add the service data into the original response
     99            GSXML.mergeElements(c1, c2);
     100        } else {
     101            System.err.println("DefaultReceptionist Error: response does not correspond to request!");
     102        }
     103       
     104        }
     105    }
     106   
    59107    }
    60108}
Note: See TracChangeset for help on using the changeset viewer.