Changeset 8574


Ignore:
Timestamp:
2004-11-16T16:15:38+13:00 (19 years ago)
Author:
kjdon
Message:

now uses the macro resolver instead of the replacements arraylist

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/gsdl3/src/java/org/greenstone/gsdl3/service/GS2Retrieve.java

    r6873 r8574  
    7979    protected Element config_info = null; // the xml from the config file
    8080
    81     protected ArrayList replacements = null;
     81    protected GS2MacroResolver macro_resolver = null;
     82
    8283    /** constructor */
    8384    protected GS2Retrieve()
    8485    {
    8586    this.gdbm_src = new GDBMWrapper();
     87    this.macro_resolver = new GS2MacroResolver();
    8688    }
    8789
     
    114116        System.err.println("GS2Retrieve Error: Could not open GDBM database!");
    115117        return false;
     118    }
     119
     120    // look for document display format
     121    String path = GSPath.appendLink(GSXML.DISPLAY_ELEM, GSXML.FORMAT_ELEM);
     122    Element display_format = (Element)GSXML.getNodeByPath(extra_info, path);
     123    if (display_format != null) {
     124        this.format_info_map.put(DOCUMENT_CONTENT_RETRIEVE_SERVICE, this.doc.importNode(display_format, true));
     125        // shoudl we make a copy?
     126    }
     127
     128    // set up the macro resolver
     129    Element replacement_elem = (Element)GSXML.getChildByTagName(extra_info, "replaceList");
     130    if (replacement_elem != null) {
     131        NodeList replaces = replacement_elem.getElementsByTagName("replace");
     132        for (int i=0; i<replaces.getLength(); i++) {
     133        Element e = (Element)replaces.item(i);
     134        String from = e.getAttribute("macro");
     135        String to = e.getAttribute("text");
     136        if (to.equals("")) {
     137            String key = e.getAttribute("key");
     138            String bundle = e.getAttribute("bundle");
     139            macro_resolver.addMacro(from, bundle, key);
     140        } else {
     141            macro_resolver.addMacro(from, to);
     142        }
     143        }
    116144    }
    117145
     
    181209    }
    182210
    183     // look for document display format
    184     String path = GSPath.appendLink(GSXML.DISPLAY_ELEM, GSXML.FORMAT_ELEM);
    185     Element display_format = (Element)GSXML.getNodeByPath(extra_info, path);
    186     if (display_format != null) {
    187         this.format_info_map.put(DOCUMENT_CONTENT_RETRIEVE_SERVICE, this.doc.importNode(display_format, true));
    188         // shoudl we make a copy?
    189     }
    190 
    191     // set up the replacement list
    192     Element replacement_elem = (Element)GSXML.getChildByTagName(extra_info, "replaceList");
    193     if (replacement_elem != null) {
    194         this.replacements = new ArrayList();
    195         NodeList replaces = replacement_elem.getElementsByTagName("replace");
    196         for (int i=0; i<replaces.getLength(); i++) {
    197         Element e = (Element)replaces.item(i);
    198         String from = e.getAttribute("from");
    199         String to = e.getAttribute("to");
    200         System.out.println("replace "+from+" with "+to);
    201         this.replacements.add(from);
    202         this.replacements.add(to);
    203         }
    204     }
    205211    return true;
    206212    }
     
    510516    result.setAttribute(GSXML.TYPE_ATT, GSXML.REQUEST_TYPE_PROCESS);
    511517
    512 
     518    String lang = request.getAttribute(GSXML.LANG_ATT);
    513519    Element query_doc_list = (Element) GSXML.getChildByTagName(request, node_name+GSXML.LIST_MODIFIER);
    514520    if (query_doc_list == null) {
     
    689695
    690696    String node_name;
    691    
     697    String lang = request.getAttribute(GSXML.LANG_ATT);
    692698    String service_name;
    693699    if (type==DOCUMENT) {
     
    763769            String key = (String)it.next();
    764770            String value = info.getInfo(key);
    765             GSXML.addMetadata(this.doc, node_meta_list, key, replaceMacros(value));
     771            GSXML.addMetadata(this.doc, node_meta_list, key, this.macro_resolver.resolveMacros(value, lang));
    766772        }
    767773        } else { // just get the selected ones
     
    769775        for (int m = 0; m < metadata_list.size(); m++) {
    770776            String metadata = (String) metadata_list.get(m);
    771             String value = getMetadata(node_id, info, metadata);
     777            String value = getMetadata(node_id, info, metadata, lang);
    772778            if (!value.equals("")) {
    773779            GSXML.addMetadata(this.doc, node_meta_list, metadata, value);
     
    781787
    782788    protected String getMetadata(String node_id, DBInfo info,
    783                  String metadata) {
     789                 String metadata, String lang) {
    784790    boolean multiple = false;
    785791    String relation = "";
     
    788794    if (pos ==-1) {
    789795        // just a plain meta entry eg dc.Title
    790         return replaceMacros((String)info.getInfo(metadata));
     796        return macro_resolver.resolveMacros((String)info.getInfo(metadata), lang);
    791797    }
    792798   
     
    848854
    849855    if (!multiple) {
    850         result.append(replaceMacros(relation_info.getInfo(metadata)));
     856        result.append(this.macro_resolver.resolveMacros(relation_info.getInfo(metadata), lang));
    851857    } else {
    852858        // we have multiple meta
     
    860866            result.append(separator);
    861867            }
    862             result.append(replaceMacros((String)values.elementAt(i)));
     868            result.append(this.macro_resolver.resolveMacros((String)values.elementAt(i), lang));
    863869        }
    864870        }
     
    877883        if (!multiple) {
    878884        result.insert(0, separator);
    879         result.insert(0, replaceMacros(relation_info.getInfo(metadata)));
     885        result.insert(0, this.macro_resolver.resolveMacros(relation_info.getInfo(metadata), lang));
    880886        } else {
    881887        Vector values = relation_info.getMultiInfo(metadata);
     
    883889            for (int i=values.size()-1; i>=0; i--) {
    884890            result.insert(0, separator);
    885             result.insert(0, replaceMacros((String)values.elementAt(i)));
     891            result.insert(0, this.macro_resolver.resolveMacros((String)values.elementAt(i), lang));
    886892            }
    887893        }
     
    894900    }
    895901   
    896 
    897     protected String replaceMacros(String text) {
    898     if (this.replacements == null) {
    899         return text;
    900     }
    901     for (int i=0; i<this.replacements.size()-1; i+=2) {
    902         String from  = (String)this.replacements.get(i);
    903         String to = (String)this.replacements.get(i+1);
    904         text = text.replaceAll(from, to);
    905     }
    906     return text;
    907     }
    908902    /** Retrieve the content of a document - implemented by concrete subclasses */
    909903    protected abstract Element processDocumentContentRetrieve(Element request);
Note: See TracChangeset for help on using the changeset viewer.