Changeset 4267


Ignore:
Timestamp:
2003-05-12T15:53:26+12:00 (21 years ago)
Author:
kjdon
Message:

coll description now returns lang specific metadata

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/gsdl3/src/java/org/greenstone/gsdl3/collection/ServiceCluster.java

    r4141 r4267  
    4747    protected static final String CONFIG_ENCODING = "utf-8";
    4848
     49    protected static final String DEFAULT_LANG = "en"; // hack for now, should be read from the coll cfg file? or site cfg file for cluster
     50   
    4951    /** base directory for the site that this cluster belongs to*/
    5052    protected String site_home = null;
     
    7173    /** list of services */
    7274    protected Element service_list = null;
    73     /** list of Metadata */
     75    /** list of Metadata - lang independent */
    7476    protected Element metadata_list = null;
     77    /** language specific stuff */
     78    protected Element lang_specific_metadata_list = null;
    7579    /** the element that will have any descriptions passed back in */
    7680    protected Element description = null;
     
    172176    }
    173177   
    174     /** adds metadata from a metadataList into the metadata_list xml */
     178    /** adds metadata from a metadataList into the metadata_list xml
     179     * language independent stuff goes inot the main list, lang dependent stuff
     180     * goes into a separate element, like:
     181     * <metadataList><metadata name="Title"><metadata name="Title" lang="en">xxx</metadata><metadata name="Title" lang="fr">yyy</metadata></metadata></metadataList>
     182     * this is a bit wasteful on space but is the easiest to process (that I've thought of so far)
     183     */
    175184    protected boolean addMetadata(Element metadata_list) {
     185   
    176186    NodeList metanodes = metadata_list.getElementsByTagName(GSXML.METADATA_ELEM);
    177187    if (metanodes.getLength()>0) { 
    178188        for(int k=0; k<metanodes.getLength(); k++) {
    179         this.metadata_list.appendChild(this.doc.importNode(metanodes.item(k),true));
     189        Element m = (Element) metanodes.item(k);
     190        String lang = m.getAttribute(GSXML.LANG_ATT);
     191        if (lang==null||lang.equals("")) {
     192            // just add it to the normal list
     193            this.metadata_list.appendChild(this.doc.importNode(m,true));
     194        } else {
     195            String name = m.getAttribute(GSXML.NAME_ATT);
     196            // add it to the lang-dependent list
     197            if (this.lang_specific_metadata_list == null) {
     198            this.lang_specific_metadata_list = this.doc.createElement(GSXML.METADATA_ELEM+GSXML.LIST_MODIFIER);
     199            }
     200            Element this_meta = GSXML.getNamedElement(this.lang_specific_metadata_list, GSXML.METADATA_ELEM, GSXML.NAME_ATT, name);
     201            if (this_meta==null) {
     202            this_meta = this.doc.createElement(GSXML.METADATA_ELEM);
     203            this_meta.setAttribute(GSXML.NAME_ATT, name);
     204            this.lang_specific_metadata_list.appendChild(this_meta);
     205            }
     206           
     207            this_meta.appendChild(this.doc.importNode(m, true));
     208           
     209        }
    180210        }
    181211    }       
     
    329359    response.setAttribute(GSXML.FROM_ATT, this.cluster_name);
    330360    String type = request.getAttribute(GSXML.TYPE_ATT);
     361    String lang = request.getAttribute(GSXML.LANG_ATT);
    331362    response.setAttribute(GSXML.TYPE_ATT, type);
    332363   
     
    339370        if (param_list == null) {
    340371        description.appendChild(this.service_list);
    341         description.appendChild(this.metadata_list);
     372        description.appendChild(oneLanguageMetadata( lang));
    342373        return response;
    343374        }
     
    354385            description.appendChild(this.service_list);
    355386            } else if (info.equals(GSXML.METADATA_ELEM+GSXML.LIST_MODIFIER)) {
    356             description.appendChild(this.metadata_list);
     387            description.appendChild(oneLanguageMetadata(lang));
    357388            }
    358389        }
     
    470501
    471502    }
     503
     504    /** takes a metadata list and deletes any items that are not in the right lang, if there is a correct one present.
     505     * its a bit of a hack */
     506    protected Element oneLanguageMetadata(String lang) {
     507   
     508    Element meta_list = (Element)this.metadata_list.cloneNode(true);
     509    // go through and add lang dependent ones unwanted elements
     510    NodeList metas = this.lang_specific_metadata_list.getChildNodes();
     511    for (int i=0; i<metas.getLength(); i++) {
     512        Element m = (Element) metas.item(i);
     513        // find the child with the correct language
     514        Element new_m = GSXML.getNamedElement(m, GSXML.METADATA_ELEM, GSXML.LANG_ATT, lang);
     515        if (new_m==null) {
     516        // use the default lang
     517        new_m = GSXML.getNamedElement(m, GSXML.METADATA_ELEM, GSXML.LANG_ATT, DEFAULT_LANG);
     518        }
     519        if (new_m==null) {
     520        // just get the first one
     521        new_m = (Element)GSXML.getChildByTagName(m, GSXML.METADATA_ELEM);
     522        }
     523        meta_list.appendChild(this.doc.importNode(new_m, true));
     524    }
     525    return meta_list;
     526   
     527    }
    472528}
    473529
Note: See TracChangeset for help on using the changeset viewer.