Ignore:
Timestamp:
2012-05-23T21:01:47+12:00 (12 years ago)
Author:
ak19
Message:

For image-e, the OpenDialog was displaying the Chinese collection display name and description (zh was the last language code in collectionConfig.xml for which name and description were defined). Now the code first looks for any meta specified for the gli lang annd if not, then for any meta specified for the default language (en), and if that's not there, the it finally falls back to using the value of the first language for which the metadata is specified.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • main/trunk/gli/src/org/greenstone/gatherer/collection/BasicCollectionConfiguration.java

    r22455 r25666  
    3939import java.io.*;
    4040import java.util.ArrayList;
     41import org.greenstone.gatherer.Configuration;
    4142import org.greenstone.gatherer.DebugStream;
    4243import org.greenstone.gatherer.Dictionary;
     
    168169        Node displayItemListNode = XMLTools.getChildByTagName(root, StaticStrings.DISPLAYITEMLIST_STR);
    169170
     171        // Get the metadataList and displayItemList metadata for the current gli language
     172        String default_language = StaticStrings.ENGLISH_LANGUAGE_STR; // is this always the case?
     173        String gli_language_code = Configuration.getLanguage(); // definitely returns some language code
     174
    170175        if (metadataListNode != null) {
    171176          ArrayList metadata_list = XMLTools.getChildElementsByTagName((Element)metadataListNode, StaticStrings.METADATA_STR);
     177
     178          String fallback_lang_creator = "";
     179          String fallback_lang_maintainer = "";
     180          String fallback_lang_is_public = "";
     181         
    172182          for (int i=0; i<metadata_list.size(); i++) {
    173183            Element meta = (Element) metadata_list.get(i);
    174184            String meta_name = meta.getAttribute(StaticStrings.NAME_ATTRIBUTE);
     185
     186            // want to get the metadata matching GLI's language, or else fall back on the default language
     187            // version, or else fall back onto the first value for any language provided for the metadata
     188            String meta_lang = meta.getAttribute(StaticStrings.LANG_ATTRIBUTE); // returns "" if no such attribute
     189            if(meta_lang.equals("")) {
     190            meta_lang = default_language;
     191            }
     192           
    175193            if (meta_name.equals(StaticStrings.COLLECTIONMETADATA_CREATOR_STR)) {
    176               creator = XMLTools.getNodeText(meta);
     194            if (meta_lang.equals(gli_language_code)) { // metadata's language matched the requested language
     195                creator = XMLTools.getNodeText(meta);
     196            } else if (meta_lang.equals(default_language)) { // meta_lang matched fall back language
     197                fallback_lang_creator = XMLTools.getNodeText(meta);
     198            } else if (creator.equals("") && fallback_lang_creator.equals("")) { // resort to first value for meta we can find
     199                fallback_lang_creator = XMLTools.getNodeText(meta);
     200            }
    177201            } else if (meta_name.equals(StaticStrings.COLLECTIONMETADATA_MAINTAINER_STR)) {
    178               maintainer = XMLTools.getNodeText(meta);
     202            if (meta_lang.equals(gli_language_code)) {
     203                maintainer = XMLTools.getNodeText(meta);
     204            } else if (meta_lang.equals(default_language)) {
     205                fallback_lang_maintainer = XMLTools.getNodeText(meta);
     206            } else if (maintainer.equals("") && fallback_lang_maintainer.equals("")) { // resort to first value for meta we can find
     207                fallback_lang_maintainer = XMLTools.getNodeText(meta);
     208            }
    179209            } else if (meta_name.equals(StaticStrings.COLLECTIONMETADATA_PUBLIC_STR)) {
    180               is_public = XMLTools.getNodeText(meta);
    181             }
    182           }
    183          
     210            if (meta_lang.equals(gli_language_code)) {
     211                is_public = XMLTools.getNodeText(meta);
     212            } else if (meta_lang.equals(default_language)) {
     213                fallback_lang_is_public = XMLTools.getNodeText(meta);
     214            } else if (is_public.equals("") && fallback_lang_is_public.equals("")) { // resort to first value for meta we can find
     215                fallback_lang_is_public = XMLTools.getNodeText(meta);
     216            }
     217            }       
     218          }
     219          // if no metadata found for the requested language, use the one set in the default language
     220          if(creator.equals("")) {
     221              creator = fallback_lang_creator;
     222          }
     223          if(maintainer.equals("")) {
     224              maintainer = fallback_lang_maintainer;
     225          }
     226          if(is_public.equals("")) {
     227              is_public = fallback_lang_is_public;
     228          }
    184229        }
     230
     231
    185232        if (displayItemListNode != null) {
    186233          ArrayList display_list = XMLTools.getChildElementsByTagName((Element)displayItemListNode, StaticStrings.DISPLAYITEM_STR);
     234
     235          String fallback_lang_name = "";
     236          String fallback_lang_description = "";
     237
    187238          for (int i=0; i<display_list.size(); i++) {
    188239            Element meta = (Element) display_list.get(i);
    189240            String meta_name = meta.getAttribute(StaticStrings.NAME_ATTRIBUTE);
     241            String meta_lang = meta.getAttribute(StaticStrings.LANG_ATTRIBUTE);
     242            if(meta_lang.equals("")) {
     243            meta_lang = default_language;
     244            }
     245
    190246            if (meta_name.equals(StaticStrings.NAME_STR)) {
    191               name = XMLTools.getNodeText(meta);
     247            if (meta_lang.equals(gli_language_code)) {
     248                name = XMLTools.getNodeText(meta);
     249            } else if (meta_lang.equals(default_language)) {
     250                fallback_lang_name = XMLTools.getNodeText(meta);
     251            } else if (name.equals("") && fallback_lang_name.equals("")) {
     252                fallback_lang_name = XMLTools.getNodeText(meta);
     253            }
    192254            } else if (meta_name.equals(StaticStrings.DESCRIPTION_STR)) {
    193               description = XMLTools.getNodeText(meta);
     255            if (meta_lang.equals(gli_language_code)) {
     256                description = XMLTools.getNodeText(meta);
     257            } else if (meta_lang.equals(default_language)) {
     258                fallback_lang_description = XMLTools.getNodeText(meta);
     259            } else if (description.equals("") && fallback_lang_description.equals("")) {
     260                fallback_lang_description = XMLTools.getNodeText(meta);
     261            }
    194262            }
    195263           
     264          }
     265
     266          if(name.equals("")) {
     267              name = fallback_lang_name;             
     268          }
     269          if(description.equals("")) {
     270              description = fallback_lang_description;
    196271          }
    197272        }
Note: See TracChangeset for help on using the changeset viewer.