Changeset 18836


Ignore:
Timestamp:
03/30/09 13:05:30 (12 years ago)
Author:
kjdon
Message:

committing bugfix 18639 to branch - plugin and classifiers both look for metadata names in argument values and convert to internal names and remove ex metadata. Made a new method, modifyMetadataArgumentValue, that implements this, and pluginToString and classifyToSTring both call it instead of duplicating code. Now it takes into account strings that may have whitepace and commas in their own right, eg ', ' as a formatting option. So don't trim and remove commas unless necessary. a fix to #510

File:
1 edited

Legend:

Unmodified
Added
Removed
  • gli/branches/2.81-fixed/src/org/greenstone/gatherer/cdm/CollectionConfiguration.java

    r17844 r18836  
    446446          text.append (option_element.getAttribute (StaticStrings.NAME_ATTRIBUTE));
    447447          String value_str = XMLTools.getValue (option_element);
     448          value_str = modifyMetadataArgumentValue(value_str);
     449          if (value_str.length () > 0) {
     450        text.append (StaticStrings.SPACE_CHARACTER);
     451        text.append(value_str);
     452          }
    448453             
    449                 // Convert metadata element names to internal names, and remove extracted metadata namespaces
    450                 if (value_str.length () > 0) {
    451                     StringTokenizer string_tokenizer = new StringTokenizer (value_str, ",");
    452                     StringBuffer value_buffer = new StringBuffer ();
    453                     while (string_tokenizer.hasMoreElements ()) {
    454                         String raw_token = (String) string_tokenizer.nextElement ();
    455                         String token = raw_token.trim ();
    456                         MetadataElement metadata_element = MetadataTools.getMetadataElementWithDisplayName (token);
    457                         if (metadata_element != null) {
    458                             token = metadata_element.getFullName ();
    459                         }
    460                        
    461                         if (token.startsWith (StaticStrings.EXTRACTED_NAMESPACE)) {
    462                             token = token.substring (StaticStrings.EXTRACTED_NAMESPACE.length ());
    463                         }
    464                         value_buffer.append (token);
    465                         if (string_tokenizer.hasMoreElements ()) {
    466                             value_buffer.append (",");
    467                         }
    468                     }
    469                     value_str = value_buffer.toString ();
    470                 }
    471                
    472                 text.append (StaticStrings.SPACE_CHARACTER);
    473                 if (value_str.indexOf (StaticStrings.SPACE_CHARACTER) == -1) {
    474                     text.append (value_str);
    475                 }
    476                 else {
    477                     text.append (StaticStrings.SPEECH_CHARACTER);
    478                     text.append (value_str);
    479                     text.append (StaticStrings.SPEECH_CHARACTER);
    480                 }
    481                 value_str = null;
     454          value_str = null;
    482455            }
    483456            option_element = null;
     
    15481521          text.append (option_element.getAttribute (StaticStrings.NAME_ATTRIBUTE));
    15491522          String value_str = XMLTools.getValue (option_element);
    1550 
    15511523         
    1552           // Convert metadata element names to internal names, and remove extracted metadata namespaces
     1524          value_str = modifyMetadataArgumentValue(value_str);
     1525          // are there any valid cases of "" args??
    15531526          if (value_str.length () > 0) {
    1554         StringTokenizer string_tokenizer = new StringTokenizer (value_str, ",");
    1555         StringBuffer value_buffer = new StringBuffer ();
    1556         while (string_tokenizer.hasMoreElements ()) {
    1557           String raw_token = (String) string_tokenizer.nextElement ();
    1558           String token = raw_token.trim ();
    1559           MetadataElement metadata_element = MetadataTools.getMetadataElementWithDisplayName (token);
    1560           if (metadata_element != null) {
    1561             token = metadata_element.getFullName ();
    1562           }
    1563                        
    1564           if (token.startsWith (StaticStrings.EXTRACTED_NAMESPACE)) {
    1565             token = token.substring (StaticStrings.EXTRACTED_NAMESPACE.length ());
    1566           }
    1567           value_buffer.append (token);
    1568           if (string_tokenizer.hasMoreElements ()) {
    1569             value_buffer.append (",");
    1570           }
    1571         }
    1572         value_str = value_buffer.toString ();
     1527        text.append (StaticStrings.SPACE_CHARACTER);
     1528        text.append(value_str);
    15731529          }
    1574 
    1575           // if(!show_extracted_namespace && value_str.startsWith (StaticStrings.EXTRACTED_NAMESPACE)) {
    1576           //            value_str = value_str.substring (StaticStrings.EXTRACTED_NAMESPACE.length ());
    1577           //        }
    1578           if(value_str.length () > 0) {
    1579         text.append (StaticStrings.SPACE_CHARACTER);
    1580         if(value_str.indexOf (StaticStrings.SPACE_CHARACTER) == -1) {
    1581           text.append (value_str);
    1582         }
    1583         else {
    1584           text.append (StaticStrings.SPEECH_CHARACTER);
    1585           text.append (value_str);
    1586           text.append (StaticStrings.SPEECH_CHARACTER);
    1587         }
    1588           }
     1530         
    15891531          value_str = null;
    15901532        }
     
    15961538    return text.toString ();
    15971539    }
     1540
     1541    // Convert metadata element names to internal names, and remove extracted metadata namespaces
     1542  static private String modifyMetadataArgumentValue(String value_str) {
     1543    if (value_str.length () == 0) {
     1544      return value_str;
     1545    }
     1546   
     1547    // final true arg to return delims as tokens
     1548    StringTokenizer string_tokenizer = new StringTokenizer (value_str, ",", true);
     1549    StringBuffer value_buffer = new StringBuffer ();
     1550    while (string_tokenizer.hasMoreElements ()) {
     1551      String raw_token = (String) string_tokenizer.nextElement ();
     1552      String token = raw_token.trim ();
     1553      boolean modified_token = false;
     1554      // not a delimiter token
     1555      if (!raw_token.equals(",")) {
     1556    MetadataElement metadata_element = MetadataTools.getMetadataElementWithDisplayName (token);
     1557    if (metadata_element != null) {
     1558      token = metadata_element.getFullName ();
     1559      modified_token = true;
     1560    }
     1561   
     1562    if (token.startsWith (StaticStrings.EXTRACTED_NAMESPACE)) {
     1563      token = token.substring (StaticStrings.EXTRACTED_NAMESPACE.length ());
     1564      modified_token = true;
     1565    }
     1566      }
     1567      if (modified_token) {
     1568    value_buffer.append (token);
     1569      } else {
     1570    // we may have had whitespace etc that was part of the string
     1571    value_buffer.append (raw_token);
     1572      }
     1573    }
     1574   
     1575   
     1576    if(value_buffer.length () == 0) {
     1577      return "";
     1578    }
     1579    if(value_str.indexOf (StaticStrings.SPACE_CHARACTER) == -1) {
     1580      return value_buffer.toString();
     1581    }
     1582   
     1583    // it must contain a space, so we surround the value with quotes
     1584    value_buffer.insert(0, StaticStrings.SPEECH_CHARACTER);
     1585    value_buffer.append(StaticStrings.SPEECH_CHARACTER);
     1586    return value_buffer.toString();
     1587
     1588  }
    15981589   
    15991590    static private String searchtypeToString (Element command_element) {
Note: See TracChangeset for help on using the changeset viewer.