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

File:
1 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
Note: See TracChangeset for help on using the changeset viewer.