Changeset 18836

Show
Ignore:
Timestamp:
30.03.2009 13:05:30 (10 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

Files:
1 modified

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) {