Changeset 4080


Ignore:
Timestamp:
2003-04-02T15:59:59+12:00 (21 years ago)
Author:
kjdon
Message:

what metadata to ask for is now dynamically determined from the xslt using a method from GSXSLT.java

Location:
trunk/gsdl3/src/java/org/greenstone/gsdl3/action
Files:
2 edited

Legend:

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

    r3998 r4080  
    1010
    1111import java.util.HashMap;
     12import java.util.Vector;
    1213import java.io.File;
    1314
     
    115116    }
    116117   
    117    
    118118    // create a classifier elem to return in the page
    119119    Element page_classifier = doc_.createElement(GSXML.CLASSIFIER_ELEM);
     
    123123    String top_id = OID.getTop(classifier_node);
    124124    page_classifier.setAttribute(GSXML.NAME_ATT, top_id);
    125        
     125
     126    // add in the format info into the stylesheet
     127    System.out.println("transforming format:"+converter_.getString(format_response));
     128    Element format_elem = getAndTransformFormat(format_response);
     129    System.out.println("transformed format:"+converter_.getString(format_elem));
     130    if (format_elem != null) {
     131        Element this_format = GSXML.getNamedElement(format_elem, GSXML.CLASSIFIER_ELEM, GSXML.NAME_ATT, top_id);
     132        if (this_format != null) {
     133        GSXSLT.mergeStylesheets(style_doc, this_format);
     134        }
     135    }
     136           
    126137    // get the browse structure for the selected node
    127138    Element classify_message = doc_.createElement(GSXML.MESSAGE_ELEM);
     
    183194    }
    184195
     196   
    185197    // get the metadata for each classifier node,
    186198    // then for each document node
     199
    187200    Element metadata_message = doc_.createElement(GSXML.MESSAGE_ELEM);
    188201
     
    190203    boolean did_documents = false;
    191204   
    192     // Create a parameter list to specify the required metadata information
    193     // for now get Title
    194     Element meta_param_list = doc_.createElement(GSXML.PARAM_ELEM+GSXML.LIST_MODIFIER);
    195     Element meta_param = doc_.createElement(GSXML.PARAM_ELEM);
    196     meta_param_list.appendChild(meta_param);
    197     meta_param.setAttribute(GSXML.NAME_ATT, "metadata");
    198     meta_param.setAttribute(GSXML.VALUE_ATT, "Source");
    199     meta_param = doc_.createElement(GSXML.PARAM_ELEM);
    200     meta_param_list.appendChild(meta_param);
    201     meta_param.setAttribute(GSXML.NAME_ATT, "metadata");
    202     meta_param.setAttribute(GSXML.VALUE_ATT, "Keyword");
    203     meta_param = doc_.createElement(GSXML.PARAM_ELEM);
    204     meta_param_list.appendChild(meta_param);
    205     meta_param.setAttribute(GSXML.NAME_ATT, "metadata");
    206     meta_param.setAttribute(GSXML.VALUE_ATT, "Title");
    207        
    208     // if there are classifier nodes (I think there always will be)
     205   
     206    // if there are classifier nodes
    209207    // create a metadata request for the classifier, and add it to
    210208    // the the message
    211209    cl_nodes = page_classifier.getElementsByTagName(GSXML.CLASS_NODE_ELEM);
    212        
     210   
    213211    if (cl_nodes.getLength() > 0) {
    214212        did_classifier = true;
     
    219217        cl_meta_request.setAttribute(GSXML.LANG_ATT, lang);
    220218       
    221         cl_meta_request.appendChild(meta_param_list);
    222        
    223219        Element new_cl_nodes_list = doc_.createElement(GSXML.CLASS_NODE_ELEM+GSXML.LIST_MODIFIER);
    224220        cl_meta_request.appendChild(new_cl_nodes_list);
     
    230226        new_cl_nodes_list.appendChild(cl);
    231227        }
    232     }
    233    
     228
     229        // create and add in the param list
     230        Vector classifier_metadata = GSXSLT.extractWantedMetadata(style_doc, GSXML.CLASS_NODE_ELEM);
     231        if (classifier_metadata.isEmpty()) {
     232        System.err.println("BrowseAction: no classifier metadata specified!!");
     233        did_classifier = false;
     234        metadata_message.removeChild(cl_meta_request);
     235        } else {
     236        Element meta_param_list = GSXML.createMetadataParamList(doc_, classifier_metadata);
     237        cl_meta_request.appendChild(meta_param_list);
     238        }
     239
     240    }
     241
    234242    // if there are document nodes in the classification (happens
    235243    // sometimes), create a second request for document metadata and
     
    244252        doc_meta_request.setAttribute(GSXML.LANG_ATT, lang);
    245253       
    246         // for now, use the same metadata list - this will probably change once we look at format statements
    247         doc_meta_request.appendChild(meta_param_list.cloneNode(true));
    248        
    249254        Element doc_list = doc_.createElement(GSXML.DOC_NODE_ELEM+GSXML.LIST_MODIFIER);
    250255        doc_meta_request.appendChild(doc_list);
     
    257262        }
    258263
    259     }
    260 
     264        // create and add in the param list
     265        Vector doc_metadata = GSXSLT.extractWantedMetadata(style_doc, GSXML.DOC_NODE_ELEM);
     266        if (doc_metadata.isEmpty()) {
     267        System.err.println("BrowseAction: no document metadata specified!!");
     268        did_documents = false;
     269        metadata_message.removeChild(doc_meta_request);
     270        } else {
     271        Element meta_param_list = GSXML.createMetadataParamList(doc_, doc_metadata);
     272        doc_meta_request.appendChild(meta_param_list);
     273        }
     274
     275
     276    }
     277   
    261278    // process the metadata requests
    262279    Element metadata_response = (Element)mr_.process(metadata_message);
     
    288305    }
    289306       
    290     // add in the format info
    291     Element format_elem = getAndTransformFormat(format_response);
    292     if (format_elem != null) {
    293         Element this_format = GSXML.getNamedElement(format_elem, GSXML.CLASSIFIER_ELEM, GSXML.NAME_ATT, top_id);
    294         if (this_format != null) {
    295         GSXSLT.mergeStylesheets(style_doc, this_format);
    296         }
    297     }
    298    
    299     System.out.println("(BrowseAction) Page:\n" + converter_.getPrettyString(page));
     307
     308    //System.out.println("(BrowseAction) Page:\n" + converter_.getPrettyString(page));
    300309
    301310    // transform the page
  • trunk/gsdl3/src/java/org/greenstone/gsdl3/action/QueryAction.java

    r3999 r4080  
    1111
    1212import java.util.HashMap;
     13import java.util.Vector;
    1314import java.util.Map;
    1415import java.util.Iterator;
     
    155156    }
    156157   
     158    // add in the format info to the stylesheet if there is any
     159    Element format_elem = getAndTransformFormat(format_response);
     160    if (format_elem != null) {
     161        GSXSLT.mergeStylesheets(style_doc, format_elem);
     162    }
     163
     164
    157165    // do the query
    158166    Element mr_query_message = doc_.createElement(GSXML.MESSAGE_ELEM);
     
    163171    Element query_param_list = (Element)doc_.importNode(cgi_param_list, true);
    164172    mr_query_request.appendChild(query_param_list);
     173
     174    // do the query
    165175        Element mr_query_response = (Element)mr_.process(mr_query_message);
    166176
     
    169179    if (query_result_metadata_list == null) {
    170180        System.err.println("QueryAction: Warning: No query result metadata.\n");
    171     }
     181    } else { // add it into the page response
     182        page_response.appendChild(doc_.importNode(query_result_metadata_list, true));
     183    }
     184   
    172185    path = GSPath.appendLink(GSXML.RESPONSE_ELEM, GSXML.TERM_ELEM+GSXML.LIST_MODIFIER);
    173186    Element query_term_info_list = (Element) GSXML.getNodeByPath(mr_query_response, path);
    174187    if (query_term_info_list == null) {
    175188        System.err.println("QueryAction: Warning: No query term information.\n");
    176     }
    177 
    178     // this result is the list of docs.
    179     // now take that list, and get the Titles
    180     // for now, just create a whole new request
    181    
     189    } else { // add it into the page response
     190        page_response.appendChild(doc_.importNode(query_term_info_list, true));
     191    }
     192
    182193    // check that there are some documents - for now check the list, but later should use a numdocs metadata elem
    183194    path = GSPath.appendLink(GSXML.RESPONSE_ELEM, GSXML.DOC_NODE_ELEM+GSXML.LIST_MODIFIER);
     
    187198    // documentList not present if no docs found
    188199    if (document_list == null) {
    189        
    190         //Element result_response = (Element)GSXML.getChildByTagName(mr_query_response, GSXML.RESPONSE_ELEM);
    191 
    192         //page.appendChild(doc_.importNode(result_response, true));
    193200        GSXSLT.absoluteIncludePaths(style_doc, config_);
    194201        return (Element)transformer_.transform(style_doc, page);   
     
    196203    }
    197204   
    198     // add in the format info
    199     Element format_elem = getAndTransformFormat(format_response);
    200     if (format_elem != null) {
    201         GSXSLT.mergeStylesheets(style_doc, format_elem);
    202     }
    203 
    204     // we have a doc list, so get the metadata - for now, get title.
    205     // can we dynamically decide what metadata to get?
     205   
     206    // we have a doc list, so get the metadata - look through the stylesheet to determine what metadata to ask for
     207
     208    Vector document_metadata = GSXSLT.extractWantedMetadata(style_doc, GSXML.DOC_NODE_ELEM);
     209    if (document_metadata.isEmpty()) {
     210        System.err.println("no document metadata specified!!");
     211        // we dont need to do the metadata request, just append the original doc list and return the page
     212        page_response.appendChild(doc_.importNode(document_list, true));
     213        GSXSLT.absoluteIncludePaths(style_doc, config_);
     214        return (Element)transformer_.transform(style_doc, page);
     215
     216    }
     217    // we have to do the metadata request
     218
    206219    Element mr_metadata_message = doc_.createElement(GSXML.MESSAGE_ELEM);
    207220    Element mr_metadata_request = doc_.createElement(GSXML.REQUEST_ELEM);
     
    213226    mr_metadata_request.setAttribute(GSXML.TO_ATT, to);
    214227
    215     // Create a parameter list to specify the required metadata information
    216     Element dm_param_list = doc_.createElement(GSXML.PARAM_ELEM+GSXML.LIST_MODIFIER);
     228    Element dm_param_list = GSXML.createMetadataParamList(doc_, document_metadata);
    217229    mr_metadata_request.appendChild(dm_param_list);
    218     Element dm_param = doc_.createElement(GSXML.PARAM_ELEM);
    219     dm_param_list.appendChild(dm_param);
    220     dm_param.setAttribute(GSXML.NAME_ATT, "metadata");
    221     dm_param.setAttribute(GSXML.VALUE_ATT, "Title");
    222 
     230   
     231   
     232    // add in the doc node list too
    223233    mr_metadata_request.appendChild(doc_.importNode(document_list, true));
    224234    Element mr_metadata_response = (Element) mr_.process(mr_metadata_message); 
     
    229239    if (query_result_document_list != null) {
    230240        page_response.appendChild(doc_.importNode(query_result_document_list, true));
    231     }
    232     // If there is some metadata about the query results, add it in
    233     if (query_result_metadata_list != null) {
    234         page_response.appendChild(doc_.importNode(query_result_metadata_list, true));
    235     }
    236     // If there is some metadata about the query results, add it in
    237     if (query_term_info_list != null) {
    238         page_response.appendChild(doc_.importNode(query_term_info_list, true));
    239241    }
    240242
Note: See TracChangeset for help on using the changeset viewer.