Changeset 6852 for trunk/gli


Ignore:
Timestamp:
2004-02-20T11:58:12+13:00 (20 years ago)
Author:
mdewsnip
Message:

Fixed up tabbing.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/gli/src/org/greenstone/gatherer/cdm/CollectionConfiguration.java

    r6770 r6852  
    5353    static public Document document;
    5454
    55     static public void main(String[] args) {
     55    static public void main(String[] args) {
    5656    if(args.length >= 1) {
    57         File file = new File(args[0]);
    58         CollectionConfiguration collect_cfg = new CollectionConfiguration(file);
    59         collect_cfg.save(true);
    60         collect_cfg.save(false);
    61         collect_cfg = null;
     57        File file = new File(args[0]);
     58        CollectionConfiguration collect_cfg = new CollectionConfiguration(file);
     59        collect_cfg.save(true);
     60        collect_cfg.save(false);
     61        collect_cfg = null;
    6262    }
    6363    else {
    64         System.out.println("Usage: CollectionConfiguration <filename>");
    65     }
    66     }
    67 
    68     /** Find the best insertion position for the given DOM Element. This should try to match command tag, and if found should then try to group by name or type (eg CollectionMeta), or append to end is no such grouping exists (eg PlugIns). Failing a command match it will check against the command order for the best insertion location.
    69     * @param target_element the command Element to be inserted
    70     * @return the Element which the given command should be inserted before, or null to append to end of list
    71     */
    72     static public Node findInsertionPoint(Element target_element) {
     64        System.out.println("Usage: CollectionConfiguration <filename>");
     65    }
     66    }
     67
     68    /** Find the best insertion position for the given DOM Element. This should try to match command tag, and if found should then try to group by name or type (eg CollectionMeta), or append to end is no such grouping exists (eg PlugIns). Failing a command match it will check against the command order for the best insertion location.
     69    * @param target_element the command Element to be inserted
     70    * @return the Element which the given command should be inserted before, or null to append to end of list
     71    */
     72    static public Node findInsertionPoint(Element target_element) {
    7373    ///ystem.err.println("Find insertion point: " + target_element.getNodeName());
    7474    String target_element_name = target_element.getNodeName();
     
    7878    // If we found matching elements, then we have our most likely insertion location, so check within for groupings
    7979    if(matching_elements.getLength() != 0) {
    80         ///ystem.err.println("Found matching elements.");
    81         // Only CollectionMeta are grouped.
    82         if(target_element_name.equals(COLLECTIONMETADATA_ELEMENT)) {
     80        ///ystem.err.println("Found matching elements.");
     81        // Only CollectionMeta are grouped.
     82        if(target_element_name.equals(COLLECTIONMETADATA_ELEMENT)) {
    8383        ///ystem.err.println("Dealing with collection metadata");
    8484        // Special case: CollectionMeta can be added at either the start or end of a collection configuration file. However the start position is reserved for special metadata, so if no non-special metadata can be found we must append to the end.
    8585        // So if the command to be added is special add it immediately after any other special command
    8686        if(target_element.getAttribute(SPECIAL_ATTRIBUTE).equals(TRUE_STR)) {
    87             int index = 0;
    88             Element matched_element = (Element) matching_elements.item(index);
    89             Element sibling_element = (Element) matched_element.getNextSibling();
    90             while(sibling_element.getAttribute(SPECIAL_ATTRIBUTE).equals(TRUE_STR)) {
     87            int index = 0;
     88            Element matched_element = (Element) matching_elements.item(index);
     89            Element sibling_element = (Element) matched_element.getNextSibling();
     90            while(sibling_element.getAttribute(SPECIAL_ATTRIBUTE).equals(TRUE_STR)) {
    9191            index++;
    9292            matched_element = (Element) matching_elements.item(index);
    9393            sibling_element = (Element) matched_element.getNextSibling();
    94             }
    95             if(sibling_element.getNodeName().equals(NEWLINE_ELEMENT)) {
     94            }
     95            if(sibling_element.getNodeName().equals(NEWLINE_ELEMENT)) {
    9696            Element newline_element = document.createElement(NEWLINE_ELEMENT);
    9797            document_element.insertBefore(newline_element, sibling_element);
    98             }
    99             return sibling_element;
     98            }
     99            return sibling_element;
    100100        }
    101101        // Otherwise try to find a matching 'name' and add after the last one in that group.
    102102        else {
    103             int index = 0;
    104             target_element_name = target_element.getAttribute(NAME_ATTRIBUTE);
    105             boolean found = false;
    106             // Skip all of the special metadata
    107             Element matched_element = (Element) matching_elements.item(index);
    108             while(matched_element.getAttribute(SPECIAL_ATTRIBUTE).equals(TRUE_STR)) {
     103            int index = 0;
     104            target_element_name = target_element.getAttribute(NAME_ATTRIBUTE);
     105            boolean found = false;
     106            // Skip all of the special metadata
     107            Element matched_element = (Element) matching_elements.item(index);
     108            while(matched_element.getAttribute(SPECIAL_ATTRIBUTE).equals(TRUE_STR)) {
    109109            index++;
    110110            matched_element = (Element) matching_elements.item(index);
    111             }
    112             // Begin search
    113             while(!found && matched_element != null) {
     111            }
     112            // Begin search
     113            while(!found && matched_element != null) {
    114114            if(matched_element.getAttribute(NAME_ATTRIBUTE).equals(target_element_name)) {
    115                 found = true;
     115                found = true;
    116116            }
    117117            else {
    118                 index++;
    119                 matched_element = (Element) matching_elements.item(index);
     118                index++;
     119                matched_element = (Element) matching_elements.item(index);
    120120            }
    121             }
    122             // If we found a match, we need to continue checking until we find the last name match.
    123             if(found) {
     121            }
     122            // If we found a match, we need to continue checking until we find the last name match.
     123            if(found) {
    124124            index++;
    125125            Element previous_sibling = matched_element;
    126126            Element sibling_element = (Element) matching_elements.item(index);
    127127            while(sibling_element != null && sibling_element.getAttribute(NAME_ATTRIBUTE).equals(target_element_name)) {
    128                 previous_sibling = sibling_element;
    129                 index++;
    130                 sibling_element = (Element) matching_elements.item(index);
     128                previous_sibling = sibling_element;
     129                index++;
     130                sibling_element = (Element) matching_elements.item(index);
    131131            }
    132132            // Previous sibling now holds the command immediately before where we want to add, so find its next sibling and add to that. In this one case we can ignore new lines!
    133133            return previous_sibling.getNextSibling();
    134             }
    135             // If not found we just add after last metadata element
    136             else {
     134            }
     135            // If not found we just add after last metadata element
     136            else {
    137137            Element last_element = (Element) matching_elements.item(matching_elements.getLength() - 1);
    138138            return last_element.getNextSibling();
    139             }
    140         }
    141 
    142         }
    143         else {
     139            }
     140        }
     141
     142        }
     143        else {
    144144        ///ystem.err.println("Not dealing with collection meta.");
    145145        Element matched_element = (Element) matching_elements.item(matching_elements.getLength() - 1);
     
    147147        Node sibling_element = matched_element.getNextSibling();
    148148        if(sibling_element != null && sibling_element.getNodeName().equals(NEWLINE_ELEMENT)) {
    149             Element newline_element = document.createElement(NEWLINE_ELEMENT);
    150             document_element.insertBefore(newline_element, sibling_element);
     149            Element newline_element = document.createElement(NEWLINE_ELEMENT);
     150            document_element.insertBefore(newline_element, sibling_element);
    151151        }
    152152        return sibling_element; // Note that this may be null
    153         }
     153        }
    154154    }
    155155    ///ystem.err.println("No matching elements found.");
     
    157157    int command_index = -1;
    158158    for(int i = 0; command_index == -1 && i < COMMAND_ORDER.length; i++) {
    159         if(COMMAND_ORDER[i].equals(target_element_name)) {
     159        if(COMMAND_ORDER[i].equals(target_element_name)) {
    160160        command_index = i;
    161         }
     161        }
    162162    }
    163163    ///ystem.err.println("Command index is: " + command_index);
     
    166166    ///ystem.err.println("Searching before the target command.");
    167167    while(preceeding_index >= 0) {
    168         matching_elements = document_element.getElementsByTagName(COMMAND_ORDER[preceeding_index]);
    169         // If we've found a match
    170         if(matching_elements.getLength() > 0) {
     168        matching_elements = document_element.getElementsByTagName(COMMAND_ORDER[preceeding_index]);
     169        // If we've found a match
     170        if(matching_elements.getLength() > 0) {
    171171        // We add after the last element
    172172        Element matched_element = (Element) matching_elements.item(matching_elements.getLength() - 1);
     
    174174        Node sibling_element = matched_element.getNextSibling();
    175175        if(sibling_element != null && sibling_element.getNodeName().equals(NEWLINE_ELEMENT)) {
    176             Element newline_element = document.createElement(NEWLINE_ELEMENT);
    177             document_element.insertBefore(newline_element, sibling_element);
     176            Element newline_element = document.createElement(NEWLINE_ELEMENT);
     177            document_element.insertBefore(newline_element, sibling_element);
    178178        }
    179179        return sibling_element; // Note that this may be null
    180         }
    181         preceeding_index--;
     180        }
     181        preceeding_index--;
    182182    }
    183183    // If all that fails, we now move backwards through the commands
     
    185185    ///ystem.err.println("Searching after the target command.");
    186186    while(susceeding_index < COMMAND_ORDER.length) {
    187         matching_elements = document_element.getElementsByTagName(COMMAND_ORDER[susceeding_index]);
    188         // If we've found a match
    189         if(matching_elements.getLength() > 0) {
     187        matching_elements = document_element.getElementsByTagName(COMMAND_ORDER[susceeding_index]);
     188        // If we've found a match
     189        if(matching_elements.getLength() > 0) {
    190190        // We add before the first element
    191191        Element matched_element = (Element) matching_elements.item(0);
     
    193193        Node sibling_element = matched_element.getPreviousSibling();
    194194        if(sibling_element != null && sibling_element.getNodeName().equals(NEWLINE_ELEMENT)) {
    195             Element newline_element = document.createElement(NEWLINE_ELEMENT);
    196             document_element.insertBefore(newline_element, sibling_element);
     195            Element newline_element = document.createElement(NEWLINE_ELEMENT);
     196            document_element.insertBefore(newline_element, sibling_element);
    197197        }
    198198        return sibling_element; // Note that this may be null
    199         }
    200         susceeding_index++;
     199        }
     200        susceeding_index++;
    201201    }
    202202    // Well. Apparently there are no other commands in this collection configuration. So append away...
    203203    return null;
    204     }
    205 
    206     static public String toString(Element command_element, boolean show_extracted_namespace) {
     204    }
     205
     206    static public String toString(Element command_element, boolean show_extracted_namespace) {
    207207    String command_element_name = command_element.getNodeName();
    208208    if(command_element_name.equals(CLASSIFY_ELEMENT)) {
    209         return self.classifyToString(command_element, show_extracted_namespace);
     209        return self.classifyToString(command_element, show_extracted_namespace);
    210210    }
    211211    else if(command_element_name.equals(FORMAT_ELEMENT)) {
    212         return self.formatToString(command_element, show_extracted_namespace);
     212        return self.formatToString(command_element, show_extracted_namespace);
    213213    }
    214214    else if(command_element_name.equals(INDEXES_ELEMENT)) {
    215         return self.indexesToString(command_element, show_extracted_namespace);
     215        return self.indexesToString(command_element, show_extracted_namespace);
    216216    }
    217217    else if(command_element_name.equals(INDEX_DEFAULT_ELEMENT)) {
    218         return self.indexDefaultToString(command_element, show_extracted_namespace);
     218        return self.indexDefaultToString(command_element, show_extracted_namespace);
    219219    }
    220220    else if(command_element_name.equals(LANGUAGES_ELEMENT)) {
    221         return self.languagesToString(command_element);
     221        return self.languagesToString(command_element);
    222222    }
    223223    else if(command_element_name.equals(LANGUAGE_DEFAULT_ELEMENT)) {
    224         return self.languageDefaultToString(command_element);
     224        return self.languageDefaultToString(command_element);
    225225    }
    226226    else if(command_element_name.equals(LEVELS_ELEMENT)) {
    227         return self.levelsToString(command_element);
     227        return self.levelsToString(command_element);
    228228    }
    229229    else if(command_element_name.equals(COLLECTIONMETADATA_ELEMENT)) {
    230         return self.metadataToString(command_element, show_extracted_namespace);
     230        return self.metadataToString(command_element, show_extracted_namespace);
    231231    }
    232232    else if(command_element_name.equals(COLLECTIONMETADATA_CREATOR_ELEMENT)) {
    233         return self.metadataToString(command_element, show_extracted_namespace);
     233        return self.metadataToString(command_element, show_extracted_namespace);
    234234    }
    235235    else if(command_element_name.equals(COLLECTIONMETADATA_MAINTAINER_ELEMENT)) {
    236         return self.metadataToString(command_element, show_extracted_namespace);
     236        return self.metadataToString(command_element, show_extracted_namespace);
    237237    }
    238238    else if(command_element_name.equals(COLLECTIONMETADATA_PUBLIC_ELEMENT)) {
    239         return self.metadataToString(command_element, show_extracted_namespace);
     239        return self.metadataToString(command_element, show_extracted_namespace);
    240240    }
    241241    else if(command_element_name.equals(COLLECTIONMETADATA_BETA_ELEMENT)) {
    242         return self.metadataToString(command_element, show_extracted_namespace);
     242        return self.metadataToString(command_element, show_extracted_namespace);
    243243    }
    244244    else if(command_element_name.equals(PLUGIN_ELEMENT)) {
    245         return self.pluginToString(command_element, show_extracted_namespace);
     245        return self.pluginToString(command_element, show_extracted_namespace);
    246246    }
    247247    else if(command_element_name.equals(SEARCHTYPE_ELEMENT)) {
    248         return self.searchtypeToString(command_element);
     248        return self.searchtypeToString(command_element);
    249249    }
    250250    else if(command_element_name.equals(SUBCOLLECTION_ELEMENT)) {
    251         return self.subcollectionToString(command_element, show_extracted_namespace);
     251        return self.subcollectionToString(command_element, show_extracted_namespace);
    252252    }
    253253    else if(command_element_name.equals(SUBCOLLECTION_DEFAULT_INDEX_ELEMENT)) {
    254         return self.subcollectionDefaultIndexToString(command_element);
     254        return self.subcollectionDefaultIndexToString(command_element);
    255255    }
    256256    else if(command_element_name.equals(SUBCOLLECTION_INDEXES_ELEMENT)) {
    257         return self.subcollectionIndexesToString(command_element);
     257        return self.subcollectionIndexesToString(command_element);
    258258    }
    259259    else if(command_element_name.equals(SUPERCOLLECTION_ELEMENT)) {
    260         return self.supercollectionToString(command_element);
     260        return self.supercollectionToString(command_element);
    261261    }
    262262    else if(command_element_name.equals(UNKNOWN_ELEMENT)) {
    263         return self.unknownToString(command_element);
     263        return self.unknownToString(command_element);
    264264    }
    265265    return "";
    266     }
    267 
    268     /** Parses arguments from a tokenizer and returns a HashMap of mappings. The tricky bit here is that not all entries in the HashMap are name->value pairs, as some arguments are boolean and are turned on by their presence. Arguments are denoted by a '-' prefix.
    269     * @param tokenizer a CommandTokenizer based on the unconsumed portion of a command string
    270     * @return a HashMap containing the arguments parsed
    271     */
    272     static public HashMap parseArguments(CommandTokenizer tokenizer) {
     266    }
     267
     268    /** Parses arguments from a tokenizer and returns a HashMap of mappings. The tricky bit here is that not all entries in the HashMap are name->value pairs, as some arguments are boolean and are turned on by their presence. Arguments are denoted by a '-' prefix.
     269    * @param tokenizer a CommandTokenizer based on the unconsumed portion of a command string
     270    * @return a HashMap containing the arguments parsed
     271    */
     272    static public HashMap parseArguments(CommandTokenizer tokenizer) {
    273273    HashMap arguments = new HashMap();
    274274    String name = null;
    275275    String value = null;
    276276    while(tokenizer.hasMoreTokens() || name != null) {
    277         // First we retrieve a name if we need one.
    278         if(name == null) {
     277        // First we retrieve a name if we need one.
     278        if(name == null) {
    279279        name = tokenizer.nextToken();
    280         }
    281         // Now we attempt to retrieve a value
    282         if(tokenizer.hasMoreTokens()) {
     280        }
     281        // Now we attempt to retrieve a value
     282        if(tokenizer.hasMoreTokens()) {
    283283        value = tokenizer.nextToken();
    284284        // Test if the value is actually a name, and if so add the name by itself, then put value into name so that it is parsed correctly during the next loop.
    285285        if(value.startsWith(StaticStrings.MINUS_CHARACTER)) {
    286             arguments.put(name, null);
    287             name = value;
     286            arguments.put(name, null);
     287            name = value;
    288288        }
    289289        // Otherwise we have a typical name->value pair ready to go
    290290        else {
    291             arguments.put(name, value);
    292             name = null;
    293         }
    294         }
    295         // Otherwise its a binary flag
    296         else {
     291            arguments.put(name, value);
     292            name = null;
     293        }
     294        }
     295        // Otherwise its a binary flag
     296        else {
    297297        arguments.put(name, null);
    298298        name = null;
    299         }
     299        }
    300300    }
    301301    return arguments;
    302     }
    303 
    304     static private ArrayList known_metadata;
    305 
    306     static private CollectionConfiguration self;
    307 
    308     static final private String EXTRACTED_PREFIX = Utility.EXTRACTED_METADATA_NAMESPACE + MSMUtils.NS_SEP;
    309     /** Gives the preferred ordering of commands */
    310     static final private String[] COMMAND_ORDER = {StaticStrings.COLLECTIONMETADATA_CREATOR_ELEMENT, StaticStrings.COLLECTIONMETADATA_MAINTAINER_ELEMENT, StaticStrings.COLLECTIONMETADATA_PUBLIC_ELEMENT, StaticStrings.COLLECTIONMETADATA_BETA_ELEMENT, StaticStrings.SEARCHTYPE_ELEMENT, StaticStrings.PLUGIN_ELEMENT, StaticStrings.INDEXES_ELEMENT, StaticStrings.LEVELS_ELEMENT, StaticStrings.INDEX_DEFAULT_ELEMENT, StaticStrings.LANGUAGES_ELEMENT, StaticStrings.LANGUAGE_DEFAULT_ELEMENT, StaticStrings.SUBCOLLECTION_ELEMENT, StaticStrings.SUBCOLLECTION_INDEXES_ELEMENT, StaticStrings.SUBCOLLECTION_DEFAULT_INDEX_ELEMENT, StaticStrings.SUPERCOLLECTION_ELEMENT, StaticStrings.CLASSIFY_ELEMENT, StaticStrings.FORMAT_ELEMENT, StaticStrings.COLLECTIONMETADATA_ELEMENT};
    311 
    312     /** ************************** Public Data Members ***************************/
     302    }
     303
     304    static private ArrayList known_metadata;
     305
     306    static private CollectionConfiguration self;
     307
     308    static final private String EXTRACTED_PREFIX = Utility.EXTRACTED_METADATA_NAMESPACE + MSMUtils.NS_SEP;
     309    /** Gives the preferred ordering of commands */
     310    static final private String[] COMMAND_ORDER = {StaticStrings.COLLECTIONMETADATA_CREATOR_ELEMENT, StaticStrings.COLLECTIONMETADATA_MAINTAINER_ELEMENT, StaticStrings.COLLECTIONMETADATA_PUBLIC_ELEMENT, StaticStrings.COLLECTIONMETADATA_BETA_ELEMENT, StaticStrings.SEARCHTYPE_ELEMENT, StaticStrings.PLUGIN_ELEMENT, StaticStrings.INDEXES_ELEMENT, StaticStrings.LEVELS_ELEMENT, StaticStrings.INDEX_DEFAULT_ELEMENT, StaticStrings.LANGUAGES_ELEMENT, StaticStrings.LANGUAGE_DEFAULT_ELEMENT, StaticStrings.SUBCOLLECTION_ELEMENT, StaticStrings.SUBCOLLECTION_INDEXES_ELEMENT, StaticStrings.SUBCOLLECTION_DEFAULT_INDEX_ELEMENT, StaticStrings.SUPERCOLLECTION_ELEMENT, StaticStrings.CLASSIFY_ELEMENT, StaticStrings.FORMAT_ELEMENT, StaticStrings.COLLECTIONMETADATA_ELEMENT};
     311
     312    /** ************************** Public Data Members ***************************/
    313313
    314314    /** ************************** Private Data Members ***************************/
     
    363363    }
    364364
    365     public Element getCreator() {
     365    public Element getCreator() {
    366366    Element element = getOrCreateElementByTagName(COLLECTIONMETADATA_CREATOR_ELEMENT, null, null);
    367367    element.setAttribute(NAME_ATTRIBUTE, COLLECTIONMETADATA_CREATOR_STR);
    368368    element.setAttribute(SPECIAL_ATTRIBUTE, TRUE_STR);
    369369    return element;
    370     }
    371 
    372     public Element getDocumentElement() {
     370    }
     371
     372    public Element getDocumentElement() {
    373373    return document.getDocumentElement();
    374     }
    375 
    376     public File getFile() {
     374    }
     375
     376    public File getFile() {
    377377    return collect_config_file;
    378     }
    379 
    380     /** Retrieve or create the languages Element. */
    381     public Element getLanguages() {
     378    }
     379
     380    /** Retrieve or create the languages Element. */
     381    public Element getLanguages() {
    382382    return getOrCreateElementByTagName(LANGUAGES_ELEMENT, null, null);
    383     }
    384 
    385     public Element getLevels() {
     383    }
     384
     385    public Element getLevels() {
    386386    return getOrCreateElementByTagName(LEVELS_ELEMENT, null, null);
    387     }
    388 
    389     public Element getMaintainer() {
     387    }
     388
     389    public Element getMaintainer() {
    390390    Element element = getOrCreateElementByTagName(COLLECTIONMETADATA_MAINTAINER_ELEMENT, null, null);
    391391    element.setAttribute(NAME_ATTRIBUTE, COLLECTIONMETADATA_MAINTAINER_STR);
    392392    element.setAttribute(SPECIAL_ATTRIBUTE, TRUE_STR);
    393393    return element;
    394     }
    395 
    396     /** Retrieve or create the indexes Element. Note that this method behaves differently from the other getBlah methods, in that it also has to keep in mind that indexes come in two flavours, MG and MGPP. */
    397     public Element getMGIndexes() {
     394    }
     395
     396    /** Retrieve or create the indexes Element. Note that this method behaves differently from the other getBlah methods, in that it also has to keep in mind that indexes come in two flavours, MG and MGPP. */
     397    public Element getMGIndexes() {
    398398    return getOrCreateElementByTagName(INDEXES_ELEMENT, MGPP_ATTRIBUTE, FALSE_STR);
    399     }
    400 
    401     public Element getMGPPIndexes() {
     399    }
     400
     401    public Element getMGPPIndexes() {
    402402    return getOrCreateElementByTagName(INDEXES_ELEMENT, MGPP_ATTRIBUTE, TRUE_STR);
    403     }
    404 
    405     public Element getPublic() {
     403    }
     404
     405    public Element getPublic() {
    406406    Element element = getOrCreateElementByTagName(COLLECTIONMETADATA_PUBLIC_ELEMENT, null, null);
    407407    element.setAttribute(NAME_ATTRIBUTE, COLLECTIONMETADATA_PUBLIC_STR);
    408408    element.setAttribute(SPECIAL_ATTRIBUTE, TRUE_STR);
    409409    return element;
    410     }
    411 
    412     /** Retrieve or create the searchtype element. */
    413     public Element getSearchType() {
     410    }
     411
     412    /** Retrieve or create the searchtype element. */
     413    public Element getSearchType() {
    414414    ///ystem.err.println("Get or create element by tag name: " + name);
    415415    Element document_element = document.getDocumentElement();
     
    417417    int elements_length = elements.getLength();
    418418    if(elements_length > 0) {
    419         document_element = null;
    420         return (Element) elements.item(0);
     419        document_element = null;
     420        return (Element) elements.item(0);
    421421    }
    422422    // Create the element
     
    424424    Node target_node = findInsertionPoint(element);
    425425    if(target_node != null) {
    426         document_element.insertBefore(element, target_node);
     426        document_element.insertBefore(element, target_node);
    427427    }
    428428    else {
    429         document_element.appendChild(element);
     429        document_element.appendChild(element);
    430430    }
    431431    document_element = null;
     
    435435    element.appendChild(a_searchtype_element);
    436436    return element;
    437     }
    438 
    439     /** Retrieve or create the subindexes Element. */
    440     public Element getSubIndexes() {
     437    }
     438
     439    /** Retrieve or create the subindexes Element. */
     440    public Element getSubIndexes() {
    441441    return getOrCreateElementByTagName(SUBCOLLECTION_INDEXES_ELEMENT, null, null);
    442     }
    443 
    444     /** Retrieve or create the supercollections Element. */
    445     public Element getSuperCollection() {
     442    }
     443
     444    /** Retrieve or create the supercollections Element. */
     445    public Element getSuperCollection() {
    446446    return getOrCreateElementByTagName(SUPERCOLLECTION_ELEMENT, null, null);
    447     }
    448 
    449     public boolean ready() {
     447    }
     448
     449    public boolean ready() {
    450450    return document != null;
    451     }
    452 
    453     public void save() {
     451    }
     452
     453    public void save() {
    454454    save(false);
    455     }
     455    }
    456456
    457457    public void save(boolean force_xml) {
     
    514514    }
    515515
    516     /** ************************** Private Methods ***************************/
    517 
    518     private String classifyToString(Element command_element, boolean show_extracted_namespace) {
     516    /** ************************** Private Methods ***************************/
     517
     518    private String classifyToString(Element command_element, boolean show_extracted_namespace) {
    519519    StringBuffer text = new StringBuffer(CLASSIFY_STR);
    520520    text.append(TAB_CHARACTER);
     
    524524    int option_elements_length = option_elements.getLength();
    525525    for(int j = 0; j < option_elements_length; j++) {
    526         Element option_element = (Element) option_elements.item(j);
    527         if(option_element.getAttribute(ASSIGNED_ATTRIBUTE).equals(TRUE_STR)) {
     526        Element option_element = (Element) option_elements.item(j);
     527        if(option_element.getAttribute(ASSIGNED_ATTRIBUTE).equals(TRUE_STR)) {
    528528        text.append(StaticStrings.MINUS_CHARACTER);
    529529        text.append(option_element.getAttribute(NAME_ATTRIBUTE));
    530530        String value_str = MSMUtils.getValue(option_element);
    531531        if(value_str.length() > 0) {
    532             // If the value happens to be the identifier of an extracted metadata element, then remove the namespace.
    533             if(!show_extracted_namespace && value_str.startsWith(EXTRACTED_PREFIX)) {
     532            // If the value happens to be the identifier of an extracted metadata element, then remove the namespace.
     533            if(!show_extracted_namespace && value_str.startsWith(EXTRACTED_PREFIX)) {
    534534            value_str = value_str.substring(EXTRACTED_PREFIX.length());
    535             }
    536             text.append(SPACE_CHARACTER);
    537             if(value_str.indexOf(SPACE_CHARACTER) == -1) {
     535            }
     536            text.append(SPACE_CHARACTER);
     537            if(value_str.indexOf(SPACE_CHARACTER) == -1) {
    538538            text.append(value_str);
    539             }
    540             else {
     539            }
     540            else {
    541541            text.append(SPEECH_CHARACTER);
    542542            text.append(value_str);
    543543            text.append(SPEECH_CHARACTER);
    544             }
     544            }
    545545        }
    546546        value_str = null;
    547547        if(j < option_elements_length - 1) {
    548             text.append(SPACE_CHARACTER);
    549         }
    550         }
    551         option_element = null;
     548            text.append(SPACE_CHARACTER);
     549        }
     550        }
     551        option_element = null;
    552552    }
    553553    option_elements = null;
    554554    return text.toString();
    555     }
    556 
    557     private String formatToString(Element command_element, boolean show_extracted_namespace) {
     555    }
     556
     557    private String formatToString(Element command_element, boolean show_extracted_namespace) {
    558558    StringBuffer text = new StringBuffer(FORMAT_STR);
    559559    text.append(SPACE_CHARACTER);
     
    562562    String value_str = command_element.getAttribute(VALUE_ATTRIBUTE);
    563563    if(value_str.length() != 0) {
    564         text.append(value_str);
     564        text.append(value_str);
    565565    }
    566566    else {
    567        // Remember to encode format string to Greenstone specification
    568        value_str = Codec.transform(MSMUtils.getValue(command_element), Codec.DOM_TO_GREENSTONE);
    569        // Remove any references to a namespace for extracted metadata
    570        if(!show_extracted_namespace) {
    571           value_str.replaceAll(EXTRACTED_PREFIX, "");
    572        }
    573        text.append(SPEECH_CHARACTER);
    574        text.append(value_str);
    575        text.append(SPEECH_CHARACTER);
     567        // Remember to encode format string to Greenstone specification
     568        value_str = Codec.transform(MSMUtils.getValue(command_element), Codec.DOM_TO_GREENSTONE);
     569        // Remove any references to a namespace for extracted metadata
     570        if(!show_extracted_namespace) {
     571        value_str.replaceAll(EXTRACTED_PREFIX, "");
     572        }
     573        text.append(SPEECH_CHARACTER);
     574        text.append(value_str);
     575        text.append(SPEECH_CHARACTER);
    576576    }
    577577    value_str = null;
    578578    return text.toString();
    579     }
    580 
    581     /** Retrieve or create the indexes Element. */
    582     private Element getOrCreateElementByTagName(String name, String conditional_attribute, String required_value) {
     579    }
     580
     581    /** Retrieve or create the indexes Element. */
     582    private Element getOrCreateElementByTagName(String name, String conditional_attribute, String required_value) {
    583583    Element document_element = document.getDocumentElement();
    584584    NodeList elements = document_element.getElementsByTagName(name);
    585585    int elements_length = elements.getLength();
    586586    if(elements_length > 0) {
    587         if(conditional_attribute == null) {
     587        if(conditional_attribute == null) {
    588588        document_element = null;
    589589        return (Element) elements.item(0);
    590         }
    591         else {
     590        }
     591        else {
    592592        for(int i = 0; i < elements_length; i++) {
    593             Element element = (Element) elements.item(i);
    594             if(element.getAttribute(conditional_attribute).equals(required_value)) {
     593            Element element = (Element) elements.item(i);
     594            if(element.getAttribute(conditional_attribute).equals(required_value)) {
    595595            document_element = null;
    596596            return element;
    597             }
    598             element = null;
    599         }
    600         }
     597            }
     598            element = null;
     599        }
     600        }
    601601    }
    602602    // Create the element
     
    604604    // If there was a property set it
    605605    if(conditional_attribute != null) {
    606         element.setAttribute(conditional_attribute, required_value);
     606        element.setAttribute(conditional_attribute, required_value);
    607607    }
    608608    Node target_node = findInsertionPoint(element);
    609609    if(target_node != null) {
    610         document_element.insertBefore(element, target_node);
     610        document_element.insertBefore(element, target_node);
    611611    }
    612612    else {
    613         document_element.appendChild(element);
     613        document_element.appendChild(element);
    614614    }
    615615    document_element = null;
    616616    return element;
    617     }
    618 
    619     private String indexesToString(Element command_element, boolean show_extracted_namespace) {
     617    }
     618
     619    private String indexesToString(Element command_element, boolean show_extracted_namespace) {
    620620    boolean comment_only = false;
    621621    StringBuffer text = new StringBuffer("");
    622622    if(command_element.getAttribute(ASSIGNED_ATTRIBUTE).equals(FALSE_STR)) {
    623         text.append("#");
    624         comment_only = true;
     623        text.append("#");
     624        comment_only = true;
    625625    }
    626626    text.append(INDEX_STR);
    627627    text.append(TAB_CHARACTER);
    628628    if(!comment_only) {
    629         text.append(TAB_CHARACTER);
     629        text.append(TAB_CHARACTER);
    630630    }
    631631    NodeList index_elements = command_element.getElementsByTagName(INDEX_ELEMENT);
    632632    if (index_elements.getLength() == 0) { // no indexes
    633         return "";
     633        return "";
    634634    }
    635635    // For each index, write its level, a colon, then concatenate its child content elements into a single comma separated list
    636636    int index_elements_length = index_elements.getLength();
    637637    for(int j = 0; j < index_elements_length; j++) {
    638         Element index_element = (Element) index_elements.item(j);
    639         String level_str = index_element.getAttribute(LEVEL_ATTRIBUTE);
    640         if(level_str.length() > 0) {
     638        Element index_element = (Element) index_elements.item(j);
     639        String level_str = index_element.getAttribute(LEVEL_ATTRIBUTE);
     640        if(level_str.length() > 0) {
    641641        text.append(level_str);
    642642        text.append(StaticStrings.COLON_CHARACTER);
    643         }
    644         NodeList content_elements = index_element.getElementsByTagName(CONTENT_ELEMENT);
    645         int content_elements_length = content_elements.getLength();
    646         // Don't output anything if no indexes are set
    647         if(content_elements_length == 0) {
     643        }
     644        NodeList content_elements = index_element.getElementsByTagName(CONTENT_ELEMENT);
     645        int content_elements_length = content_elements.getLength();
     646        // Don't output anything if no indexes are set
     647        if(content_elements_length == 0) {
    648648        return null;
    649         }
    650         for(int k = 0; k < content_elements_length; k++) {
     649        }
     650        for(int k = 0; k < content_elements_length; k++) {
    651651        Element content_element = (Element) content_elements.item(k);
    652652        String name_str = content_element.getAttribute(NAME_ATTRIBUTE);
    653653        if(!show_extracted_namespace && name_str.startsWith(EXTRACTED_PREFIX)) {
    654             name_str = name_str.substring(EXTRACTED_PREFIX.length());
     654            name_str = name_str.substring(EXTRACTED_PREFIX.length());
    655655        }
    656656        text.append(name_str);
    657657        name_str = null;
    658658        if(k < content_elements_length - 1) {
    659             text.append(StaticStrings.COMMA_CHARACTER);
     659            text.append(StaticStrings.COMMA_CHARACTER);
    660660        }
    661661        content_element = null;
    662         }
    663         if(j < index_elements_length - 1) {
     662        }
     663        if(j < index_elements_length - 1) {
    664664        text.append(SPACE_CHARACTER);
    665         }
    666         content_elements = null;
    667         index_element = null;
     665        }
     666        content_elements = null;
     667        index_element = null;
    668668    }
    669669    index_elements = null;
    670670    return text.toString();
    671     }
    672 
    673     private String indexDefaultToString(Element command_element, boolean show_extracted_namespace) {
     671    }
     672
     673    private String indexDefaultToString(Element command_element, boolean show_extracted_namespace) {
    674674    StringBuffer text = new StringBuffer("");
    675675    if(command_element.getAttribute(ASSIGNED_ATTRIBUTE).equals(FALSE_STR)) {
    676         text.append("#");
     676        text.append("#");
    677677    }
    678678    text.append(INDEX_DEFAULT_STR);
     
    683683    int content_elements_length = content_elements.getLength();
    684684    for(int j = 0; j < content_elements_length; j++) {
    685         Element content_element = (Element) content_elements.item(j);
    686         String name_str = content_element.getAttribute(NAME_ATTRIBUTE);
    687         if(!show_extracted_namespace && name_str.startsWith(EXTRACTED_PREFIX)) {
     685        Element content_element = (Element) content_elements.item(j);
     686        String name_str = content_element.getAttribute(NAME_ATTRIBUTE);
     687        if(!show_extracted_namespace && name_str.startsWith(EXTRACTED_PREFIX)) {
    688688        name_str = name_str.substring(EXTRACTED_PREFIX.length());
    689         }
    690         text.append(name_str);
    691         name_str = null;
    692         if(j < content_elements_length - 1) {
     689        }
     690        text.append(name_str);
     691        name_str = null;
     692        if(j < content_elements_length - 1) {
    693693        text.append(StaticStrings.COMMA_CHARACTER);
    694         }
    695         content_element = null;
     694        }
     695        content_element = null;
    696696    }
    697697    content_elements = null;
    698698    return text.toString();
    699     }
    700 
    701     private String languagesToString(Element command_element) {
     699    }
     700
     701    private String languagesToString(Element command_element) {
    702702    StringBuffer text = new StringBuffer(LANGUAGES_STR);
    703703    text.append(TAB_CHARACTER);
     
    706706    int language_elements_length = language_elements.getLength();
    707707    if(language_elements_length == 0) {
    708         return null;
     708        return null;
    709709    }
    710710    for(int j = 0; j < language_elements_length; j++) {
    711         Element language_element = (Element) language_elements.item(j);
    712         text.append(language_element.getAttribute(NAME_ATTRIBUTE));
    713         if(j < language_elements_length - 1) {
     711        Element language_element = (Element) language_elements.item(j);
     712        text.append(language_element.getAttribute(NAME_ATTRIBUTE));
     713        if(j < language_elements_length - 1) {
    714714        text.append(SPACE_CHARACTER);
    715         }
     715        }
    716716    }
    717717    return text.toString();
    718     }
    719 
    720     private String languageDefaultToString(Element command_element) {
     718    }
     719
     720    private String languageDefaultToString(Element command_element) {
    721721    StringBuffer text = new StringBuffer(LANGUAGE_DEFAULT_STR);
    722722    text.append(TAB_CHARACTER);
    723723    text.append(command_element.getAttribute(NAME_ATTRIBUTE));
    724724    return text.toString();
    725     }
    726 
    727     private String levelsToString(Element command_element) {
     725    }
     726
     727    private String levelsToString(Element command_element) {
    728728    StringBuffer text = new StringBuffer("");
    729729    if(!command_element.getAttribute(ASSIGNED_ATTRIBUTE).equals(TRUE_STR)) {
    730         text.append("#");
     730        text.append("#");
    731731    }
    732732    text.append(LEVELS_STR);
     
    737737    // Don't output anything if no levels are set.
    738738    if(content_elements_length == 0) {
    739         return null;
     739        return null;
    740740    }
    741741    for(int i = 0; i < content_elements_length; i++) {
    742         Element content_element = (Element) content_elements.item(i);
    743         text.append(content_element.getAttribute(NAME_ATTRIBUTE));
    744         text.append(SPACE_CHARACTER);
     742        Element content_element = (Element) content_elements.item(i);
     743        text.append(content_element.getAttribute(NAME_ATTRIBUTE));
     744        text.append(SPACE_CHARACTER);
    745745    }
    746746    return text.substring(0, text.length() - 1);
    747     }
    748 
    749     static public String metadataToString(Element command_element, boolean text_value) {
     747    }
     748
     749    static public String metadataToString(Element command_element, boolean text_value) {
    750750    boolean special = false;
    751751    // If there is no value attribute, then we don't write anything
     
    754754    // If the name is one of the special four, we don't write the collectionmeta first. Note the maintainer collectionmeta is singled out for 'prittying' reasons.
    755755    if(name_str.equals(COLLECTIONMETADATA_MAINTAINER_STR)) {
    756         text.append(name_str);
    757         text.append(TAB_CHARACTER);
    758         special = true;
     756        text.append(name_str);
     757        text.append(TAB_CHARACTER);
     758        special = true;
    759759    }
    760760    else if(name_str.equals(COLLECTIONMETADATA_BETA_STR) || name_str.equals(COLLECTIONMETADATA_CREATOR_STR) || name_str.equals(COLLECTIONMETADATA_PUBLIC_STR)) {
    761         text.append(name_str);
    762         text.append(TAB_CHARACTER);
    763         text.append(TAB_CHARACTER);
    764         special = true;
     761        text.append(name_str);
     762        text.append(TAB_CHARACTER);
     763        text.append(TAB_CHARACTER);
     764        special = true;
    765765    }
    766766    else {
    767         text.append(COLLECTIONMETADATA_STR);
    768         text.append(TAB_CHARACTER);
    769         text.append(name_str);
    770         text.append(SPACE_CHARACTER);
    771         String language_str = command_element.getAttribute(LANGUAGE_ATTRIBUTE);
    772         // If this is element is in english, and it is the first one found, we don't need to write the language argument.
    773         //if(!language_str.equals(ENGLISH_LANGUAGE_STR) || known_metadata == null || known_metadata.contains(name_str)) {
    774         // changed so that we always write the language string
    775         text.append(LBRACKET_CHARACTER);
    776         text.append(LANGUAGE_ARGUMENT);
    777         text.append(language_str);
    778         text.append(RBRACKET_CHARACTER);
    779         text.append(SPACE_CHARACTER);
    780         //}
    781         if(known_metadata != null) {
     767        text.append(COLLECTIONMETADATA_STR);
     768        text.append(TAB_CHARACTER);
     769        text.append(name_str);
     770        text.append(SPACE_CHARACTER);
     771        String language_str = command_element.getAttribute(LANGUAGE_ATTRIBUTE);
     772        // If this is element is in english, and it is the first one found, we don't need to write the language argument.
     773        //if(!language_str.equals(ENGLISH_LANGUAGE_STR) || known_metadata == null || known_metadata.contains(name_str)) {
     774        // changed so that we always write the language string
     775        text.append(LBRACKET_CHARACTER);
     776        text.append(LANGUAGE_ARGUMENT);
     777        text.append(language_str);
     778        text.append(RBRACKET_CHARACTER);
     779        text.append(SPACE_CHARACTER);
     780        //}
     781        if(known_metadata != null) {
    782782        known_metadata.add(name_str);
    783         }
    784         language_str = null;
     783        }
     784        language_str = null;
    785785    }
    786786    name_str = null;
     
    789789    // The value string we retrieved will be encoded for xml, so we now decode it - to text if text_value set. This parameter was originally show_extracted_namespace, but sincethis is only true for 'toString()' commands from within the CDM, its good enough to determine if this toString() will be used to display on screen, or write to collect.cfg
    790790    if(text_value == CollectionMeta.TEXT) {
    791         value_str = Codec.transform(value_str, Codec.DOM_TO_TEXT);
     791        value_str = Codec.transform(value_str, Codec.DOM_TO_TEXT);
    792792    }
    793793    else {
    794         value_str = Codec.transform(value_str, Codec.DOM_TO_GREENSTONE);
     794        value_str = Codec.transform(value_str, Codec.DOM_TO_GREENSTONE);
    795795    }
    796796
    797797    // We don't wrap the email addresses in quotes, nor the other special metadata
    798798    if(special) {
    799         text.append(value_str);
     799        text.append(value_str);
    800800    }
    801801    else {
    802         text.append(SPEECH_CHARACTER);
    803         text.append(value_str);
    804         text.append(SPEECH_CHARACTER);
     802        text.append(SPEECH_CHARACTER);
     803        text.append(value_str);
     804        text.append(SPEECH_CHARACTER);
    805805    }
    806806    value_str = null;
    807807    return text.toString();
    808     }
     808    }
    809809
    810810    /** Parse a collect.cfg into a DOM model representation. */
     
    838838        buffered_reader_one = null;
    839839        reader_one = null;
    840         input_stream_one = null;   
     840        input_stream_one = null;
    841841
    842842        Element collect_cfg_element = document.getDocumentElement();
     
    10961096    Element command_element = null;
    10971097    try {
    1098         CommandTokenizer tokenizer = new CommandTokenizer(command_str);
    1099         // Check the token count. The token count from a command tokenizer isn't guarenteed to be correct, but it does give the maximum number of available tokens according to the underlying StringTokenizer (some of which may actually be append together by the CommandTokenizer as being a single argument).
    1100         if(tokenizer.countTokens() >= 2) {  // Must support "classify Phind" (no args)
     1098        CommandTokenizer tokenizer = new CommandTokenizer(command_str);
     1099        // Check the token count. The token count from a command tokenizer isn't guarenteed to be correct, but it does give the maximum number of available tokens according to the underlying StringTokenizer (some of which may actually be append together by the CommandTokenizer as being a single argument).
     1100        if(tokenizer.countTokens() >= 2) {  // Must support "classify Phind" (no args)
    11011101        command_element = document.createElement(CLASSIFY_ELEMENT);
    11021102        // First token is classify
     
    11091109        Iterator names = arguments.keySet().iterator();
    11101110        while(names.hasNext()) {
    1111             String name = (String) names.next();
    1112             String value = (String) arguments.get(name); // Can be null
    1113             // The metadata argument gets added as the content attribute
    1114             if(name.equals(METADATA_ARGUMENT) && value != null) {
     1111            String name = (String) names.next();
     1112            String value = (String) arguments.get(name); // Can be null
     1113            // The metadata argument gets added as the content attribute
     1114            if(name.equals(METADATA_ARGUMENT) && value != null) {
    11151115            // The metadata argument must be the fully qualified name of a metadata element, so if it doesn't yet have a namespace, append the extracted metadata namespace.
    11161116            if(value.indexOf(MSMUtils.NS_SEP) == -1) {
    1117                 value = Utility.EXTRACTED_METADATA_NAMESPACE + MSMUtils.NS_SEP + value;
     1117                value = Utility.EXTRACTED_METADATA_NAMESPACE + MSMUtils.NS_SEP + value;
    11181118            }
    11191119            //command_element.setAttribute(CONTENT_ATTRIBUTE, value);
    1120             }
    1121             // Everything else is an Option Element
    1122             Element option_element = document.createElement(OPTION_ELEMENT);
    1123             option_element.setAttribute(NAME_ATTRIBUTE, name.substring(1));
    1124             if(value != null) {
     1120            }
     1121            // Everything else is an Option Element
     1122            Element option_element = document.createElement(OPTION_ELEMENT);
     1123            option_element.setAttribute(NAME_ATTRIBUTE, name.substring(1));
     1124            if(value != null) {
    11251125            // Remove any speech marks appended in strings containing whitespace
    11261126            if(value.startsWith(SPEECH_CHARACTER) && value.endsWith(SPEECH_CHARACTER)) {
    1127                 value = value.substring(1, value.length() - 1);
     1127                value = value.substring(1, value.length() - 1);
    11281128            }
    11291129            MSMUtils.setValue(option_element, value);
    1130             }
    1131             option_element.setAttribute(ASSIGNED_ATTRIBUTE, TRUE_STR);
    1132             option_element.setAttribute(CUSTOM_ATTRIBUTE, TRUE_STR);
    1133             command_element.appendChild(option_element);
    1134             option_element = null;
    1135             name = null;
    1136             value = null;
     1130            }
     1131            option_element.setAttribute(ASSIGNED_ATTRIBUTE, TRUE_STR);
     1132            option_element.setAttribute(CUSTOM_ATTRIBUTE, TRUE_STR);
     1133            command_element.appendChild(option_element);
     1134            option_element = null;
     1135            name = null;
     1136            value = null;
    11371137        }
    11381138        names = null;
    11391139        arguments = null;
    1140         }
    1141         tokenizer = null;
     1140        }
     1141        tokenizer = null;
    11421142    }
    11431143    catch(Exception error) {
    11441144    }
    11451145    return command_element;
    1146     }
     1146    }
    11471147
    11481148    private Element parseFormat(CommandTokenizer tokenizer) {
     
    11781178    }
    11791179
    1180     private Element parseIndex(String command_str) {
     1180    private Element parseIndex(String command_str) {
    11811181    Element command_element = null;
    11821182    try {
    1183         StringTokenizer tokenizer = new StringTokenizer(command_str);
    1184         String command = tokenizer.nextToken();
    1185         command_element = document.createElement(INDEXES_ELEMENT);
    1186         command_element.setAttribute(ASSIGNED_ATTRIBUTE, (command.equals(INDEX_STR) ? TRUE_STR : FALSE_STR));
    1187         command = null;
    1188         if(!tokenizer.hasMoreTokens()) {
     1183        StringTokenizer tokenizer = new StringTokenizer(command_str);
     1184        String command = tokenizer.nextToken();
     1185        command_element = document.createElement(INDEXES_ELEMENT);
     1186        command_element.setAttribute(ASSIGNED_ATTRIBUTE, (command.equals(INDEX_STR) ? TRUE_STR : FALSE_STR));
     1187        command = null;
     1188        if(!tokenizer.hasMoreTokens()) {
    11891189
    11901190        // there are no indexes
     
    11931193        tokenizer = null;
    11941194        return command_element;
    1195         }
    1196 
    1197         while(tokenizer.hasMoreTokens()) {
     1195        }
     1196
     1197        while(tokenizer.hasMoreTokens()) {
    11981198        Element index_element = document.createElement(INDEX_ELEMENT);
    11991199        String index_str = tokenizer.nextToken();
     
    12011201        boolean old_index;
    12021202        if(index_str.indexOf(COLON_CHARACTER) != -1) {
    1203             old_index = true;
    1204             index_element.setAttribute(LEVEL_ATTRIBUTE, index_str.substring(0, index_str.indexOf(StaticStrings.COLON_CHARACTER)));
    1205             index_str = index_str.substring(index_str.indexOf(StaticStrings.COLON_CHARACTER) + 1);
    1206             command_element.setAttribute(MGPP_ATTRIBUTE, FALSE_STR);
     1203            old_index = true;
     1204            index_element.setAttribute(LEVEL_ATTRIBUTE, index_str.substring(0, index_str.indexOf(StaticStrings.COLON_CHARACTER)));
     1205            index_str = index_str.substring(index_str.indexOf(StaticStrings.COLON_CHARACTER) + 1);
     1206            command_element.setAttribute(MGPP_ATTRIBUTE, FALSE_STR);
    12071207        }
    12081208        else {
    1209             command_element.setAttribute(MGPP_ATTRIBUTE, TRUE_STR);
    1210             old_index = false;
     1209            command_element.setAttribute(MGPP_ATTRIBUTE, TRUE_STR);
     1210            old_index = false;
    12111211        }
    12121212        StringTokenizer content_tokenizer = new StringTokenizer(index_str, StaticStrings.COMMA_CHARACTER);
    12131213        while(content_tokenizer.hasMoreTokens()) {
    1214             Element content_element = document.createElement(CONTENT_ELEMENT);
    1215             String content_str = content_tokenizer.nextToken();
    1216             // Since the contents of indexes have to be certain keywords, or metadata elements, if the content isn't a keyword and doesn't yet have a namespace, append the extracted metadata namespace.
    1217             if(content_str.indexOf(MSMUtils.NS_SEP) == -1) {
     1214            Element content_element = document.createElement(CONTENT_ELEMENT);
     1215            String content_str = content_tokenizer.nextToken();
     1216            // Since the contents of indexes have to be certain keywords, or metadata elements, if the content isn't a keyword and doesn't yet have a namespace, append the extracted metadata namespace.
     1217            if(content_str.indexOf(MSMUtils.NS_SEP) == -1) {
    12181218            if(content_str.equals(StaticStrings.TEXT_STR) || (!old_index && content_str.equals(StaticStrings.ALLFIELDS_STR))) {
    12191219                // Our special strings are OK.
    12201220            }
    12211221            else {
    1222                 content_str = Utility.EXTRACTED_METADATA_NAMESPACE + MSMUtils.NS_SEP + content_str;
     1222                content_str = Utility.EXTRACTED_METADATA_NAMESPACE + MSMUtils.NS_SEP + content_str;
    12231223            }
    1224             }
    1225             content_element.setAttribute(NAME_ATTRIBUTE, content_str);
    1226             index_element.appendChild(content_element);
    1227             content_element = null;
     1224            }
     1225            content_element.setAttribute(NAME_ATTRIBUTE, content_str);
     1226            index_element.appendChild(content_element);
     1227            content_element = null;
    12281228        }
    12291229        content_tokenizer = null;
     
    12311231        command_element.appendChild(index_element);
    12321232        index_element = null;
    1233         }
    1234         tokenizer = null;
     1233        }
     1234        tokenizer = null;
    12351235    }
    12361236    catch (Exception exception) {
    1237         exception.printStackTrace();
     1237        exception.printStackTrace();
    12381238    }
    12391239    return command_element;
    1240     }
    1241 
    1242     private Element parseIndexDefault(String command_str) {
     1240    }
     1241
     1242    private Element parseIndexDefault(String command_str) {
    12431243    Element command_element = null;
    12441244    try {
    1245         StringTokenizer tokenizer = new StringTokenizer(command_str);
    1246         if(tokenizer.countTokens() >= 2) {
     1245        StringTokenizer tokenizer = new StringTokenizer(command_str);
     1246        if(tokenizer.countTokens() >= 2) {
    12471247        command_element = document.createElement(INDEX_DEFAULT_ELEMENT);
    12481248        command_element.setAttribute(ASSIGNED_ATTRIBUTE, ((tokenizer.nextToken()).equals(INDEX_DEFAULT_STR) ? TRUE_STR : FALSE_STR));
     
    12521252        StringTokenizer content_tokenizer = new StringTokenizer(content_str, StaticStrings.COMMA_CHARACTER);
    12531253        while(content_tokenizer.hasMoreTokens()) {
    1254             Element content_element = document.createElement(CONTENT_ELEMENT);
    1255             content_element.setAttribute(NAME_ATTRIBUTE, content_tokenizer.nextToken());
    1256             command_element.appendChild(content_element);
    1257             content_element = null;
     1254            Element content_element = document.createElement(CONTENT_ELEMENT);
     1255            content_element.setAttribute(NAME_ATTRIBUTE, content_tokenizer.nextToken());
     1256            command_element.appendChild(content_element);
     1257            content_element = null;
    12581258        }
    12591259        content_tokenizer = null;
     
    12611261        content_str = null;
    12621262        index_str = null;
    1263         }
    1264         tokenizer = null;
     1263        }
     1264        tokenizer = null;
    12651265    }
    12661266    catch (Exception exception) {
    12671267    }
    12681268    return command_element;
    1269     }
    1270 
    1271     private Element parseLanguage(String command_str) {
     1269    }
     1270
     1271    private Element parseLanguage(String command_str) {
    12721272    Element command_element = null;
    12731273    try {
    1274         StringTokenizer tokenizer = new StringTokenizer(command_str);
    1275         tokenizer.nextToken();
    1276         if(tokenizer.hasMoreTokens()) {
     1274        StringTokenizer tokenizer = new StringTokenizer(command_str);
     1275        tokenizer.nextToken();
     1276        if(tokenizer.hasMoreTokens()) {
    12771277        command_element = document.createElement(LANGUAGES_ELEMENT);
    12781278        while(tokenizer.hasMoreTokens()) {
    1279             Element language_element = document.createElement(LANGUAGE_ELEMENT);
    1280             language_element.setAttribute(NAME_ATTRIBUTE, tokenizer.nextToken());
    1281             command_element.appendChild(language_element);
    1282             language_element = null;
    1283         }
    1284         }
    1285         tokenizer = null;
     1279            Element language_element = document.createElement(LANGUAGE_ELEMENT);
     1280            language_element.setAttribute(NAME_ATTRIBUTE, tokenizer.nextToken());
     1281            command_element.appendChild(language_element);
     1282            language_element = null;
     1283        }
     1284        }
     1285        tokenizer = null;
    12861286    }
    12871287    catch (Exception exception) {
    12881288    }
    12891289    return command_element;
    1290     }
    1291 
    1292     private Element parseLanguageDefault(String command_str) {
     1290    }
     1291
     1292    private Element parseLanguageDefault(String command_str) {
    12931293    Element command_element = null;
    12941294    try {
    1295         StringTokenizer tokenizer = new StringTokenizer(command_str);
    1296         if(tokenizer.countTokens() >= 2) {
     1295        StringTokenizer tokenizer = new StringTokenizer(command_str);
     1296        if(tokenizer.countTokens() >= 2) {
    12971297        command_element = document.createElement(LANGUAGE_DEFAULT_ELEMENT);
    12981298        tokenizer.nextToken();
     
    13011301        command_element.setAttribute(ASSIGNED_ATTRIBUTE, StaticStrings.TRUE_STR);
    13021302        default_language_str = null;
    1303         }
    1304         tokenizer = null;
     1303        }
     1304        tokenizer = null;
    13051305    }
    13061306    catch (Exception exception) {
    13071307    }
    13081308    return command_element;
    1309     }
    1310 
    1311     private Element parseLevels(String command_str) {
     1309    }
     1310
     1311    private Element parseLevels(String command_str) {
    13121312    Element command_element = null;
    13131313    try {
    1314         StringTokenizer tokenizer = new StringTokenizer(command_str);
    1315         // First token is command type (levels)
    1316         String command = tokenizer.nextToken();
    1317         if(tokenizer.hasMoreTokens()) {
     1314        StringTokenizer tokenizer = new StringTokenizer(command_str);
     1315        // First token is command type (levels)
     1316        String command = tokenizer.nextToken();
     1317        if(tokenizer.hasMoreTokens()) {
    13181318        command_element = document.createElement(LEVELS_ELEMENT);
    13191319        command_element.setAttribute(ASSIGNED_ATTRIBUTE, (command.equals(LEVELS_STR) ? TRUE_STR : FALSE_STR));
    13201320        while(tokenizer.hasMoreTokens()) {
    1321             Element level_element = document.createElement(CONTENT_ELEMENT);
    1322             level_element.setAttribute(NAME_ATTRIBUTE, tokenizer.nextToken());
    1323             command_element.appendChild(level_element);
    1324             level_element = null;
    1325         }
    1326         }
    1327         command = null;
     1321            Element level_element = document.createElement(CONTENT_ELEMENT);
     1322            level_element.setAttribute(NAME_ATTRIBUTE, tokenizer.nextToken());
     1323            command_element.appendChild(level_element);
     1324            level_element = null;
     1325        }
     1326        }
     1327        command = null;
    13281328    }
    13291329    catch(Exception exception) {
    13301330    }
    13311331    return command_element;
    1332     }
     1332    }
    13331333
    13341334    private Element parseMetadata(CommandTokenizer tokenizer) {
     
    13711371    }
    13721372
    1373     private Element parseMetadataSpecial(String command_str) {
     1373    private Element parseMetadataSpecial(String command_str) {
    13741374    Element command_element = null;
    13751375    try {
    1376         StringTokenizer tokenizer = new StringTokenizer(command_str);
    1377         if(tokenizer.countTokens() >= 2) {
     1376        StringTokenizer tokenizer = new StringTokenizer(command_str);
     1377        if(tokenizer.countTokens() >= 2) {
    13781378        String name_str = tokenizer.nextToken();
    13791379        String value_str = tokenizer.nextToken();
    13801380        if(name_str.equals(COLLECTIONMETADATA_BETA_STR)) {
    1381             command_element = document.createElement(COLLECTIONMETADATA_BETA_ELEMENT);
     1381            command_element = document.createElement(COLLECTIONMETADATA_BETA_ELEMENT);
    13821382        }
    13831383        else if(name_str.equals(COLLECTIONMETADATA_CREATOR_STR)) {
    1384             command_element = document.createElement(COLLECTIONMETADATA_CREATOR_ELEMENT);
     1384            command_element = document.createElement(COLLECTIONMETADATA_CREATOR_ELEMENT);
    13851385        }
    13861386        else if(name_str.equals(COLLECTIONMETADATA_MAINTAINER_STR)) {
    1387             command_element = document.createElement(COLLECTIONMETADATA_MAINTAINER_ELEMENT);
     1387            command_element = document.createElement(COLLECTIONMETADATA_MAINTAINER_ELEMENT);
    13881388        }
    13891389        else if(name_str.equals(COLLECTIONMETADATA_PUBLIC_STR)) {
    1390             command_element = document.createElement(COLLECTIONMETADATA_PUBLIC_ELEMENT);
     1390            command_element = document.createElement(COLLECTIONMETADATA_PUBLIC_ELEMENT);
    13911391        }
    13921392        if(command_element != null) {
    1393             command_element.setAttribute(NAME_ATTRIBUTE, name_str);
    1394             command_element.setAttribute(LANGUAGE_ATTRIBUTE, ENGLISH_LANGUAGE_STR);
    1395             command_element.setAttribute(SPECIAL_ATTRIBUTE, TRUE_STR);
    1396             command_element.setAttribute(ASSIGNED_ATTRIBUTE, TRUE_STR);
    1397             if(value_str.startsWith(SPEECH_CHARACTER) && value_str.endsWith(SPEECH_CHARACTER)) {
     1393            command_element.setAttribute(NAME_ATTRIBUTE, name_str);
     1394            command_element.setAttribute(LANGUAGE_ATTRIBUTE, ENGLISH_LANGUAGE_STR);
     1395            command_element.setAttribute(SPECIAL_ATTRIBUTE, TRUE_STR);
     1396            command_element.setAttribute(ASSIGNED_ATTRIBUTE, TRUE_STR);
     1397            if(value_str.startsWith(SPEECH_CHARACTER) && value_str.endsWith(SPEECH_CHARACTER)) {
    13981398            value_str = value_str.substring(1, value_str.length() - 1);
    1399             }
    1400             MSMUtils.setValue(command_element, value_str);
     1399            }
     1400            MSMUtils.setValue(command_element, value_str);
    14011401        }
    14021402        value_str = null;
    14031403        name_str = null;
    1404         }
    1405         tokenizer = null;
     1404        }
     1405        tokenizer = null;
    14061406    }
    14071407    catch (Exception exception) {
    14081408    }
    14091409    return command_element;
    1410     }
    1411 
    1412     private Element parsePlugIn(String command_str) {
     1410    }
     1411
     1412    private Element parsePlugIn(String command_str) {
    14131413    Element command_element = null;
    14141414    boolean use_metadata_files = false;
    14151415    try {
    1416         CommandTokenizer tokenizer = new CommandTokenizer(command_str);
    1417         // Check the token count. The token count from a command tokenizer isn't guarenteed to be correct, but it does give the maximum number of available tokens according to the underlying StringTokenizer (some of which may actually be append together by the CommandTokenizer as being a single argument).
    1418         if(tokenizer.countTokens() >= 2) {
     1416        CommandTokenizer tokenizer = new CommandTokenizer(command_str);
     1417        // Check the token count. The token count from a command tokenizer isn't guarenteed to be correct, but it does give the maximum number of available tokens according to the underlying StringTokenizer (some of which may actually be append together by the CommandTokenizer as being a single argument).
     1418        if(tokenizer.countTokens() >= 2) {
    14191419        command_element = document.createElement(PLUGIN_ELEMENT);
    14201420        // First token is plugin
     
    14281428        Iterator names = arguments.keySet().iterator();
    14291429        while(names.hasNext()) {
    1430             String name = (String) names.next();
    1431             String value = (String) arguments.get(name); // Can be null
    1432             Element option_element = document.createElement(OPTION_ELEMENT);
    1433             if(name.substring(1).equals(USE_METADATA_FILES_ARGUMENT)) {
     1430            String name = (String) names.next();
     1431            String value = (String) arguments.get(name); // Can be null
     1432            Element option_element = document.createElement(OPTION_ELEMENT);
     1433            if(name.substring(1).equals(USE_METADATA_FILES_ARGUMENT)) {
    14341434            use_metadata_files = true;
    1435             }
    1436             option_element.setAttribute(NAME_ATTRIBUTE, name.substring(1));
    1437             option_element.setAttribute(ASSIGNED_ATTRIBUTE, TRUE_STR);
    1438             option_element.setAttribute(CUSTOM_ATTRIBUTE, TRUE_STR); // All arguments are considered to be custom until matched against base plugins arguments
    1439             if(value != null) {
     1435            }
     1436            option_element.setAttribute(NAME_ATTRIBUTE, name.substring(1));
     1437            option_element.setAttribute(ASSIGNED_ATTRIBUTE, TRUE_STR);
     1438            option_element.setAttribute(CUSTOM_ATTRIBUTE, TRUE_STR); // All arguments are considered to be custom until matched against base plugins arguments
     1439            if(value != null) {
    14401440            // Remove any speech marks appended in strings containing whitespace
    14411441            if(value.startsWith(SPEECH_CHARACTER) && value.endsWith(SPEECH_CHARACTER)) {
    1442                 value = value.substring(1, value.length() - 1);
     1442                value = value.substring(1, value.length() - 1);
    14431443            }
    14441444            if(name.equals(METADATA_ARGUMENT)) {
    14451445                // The metadata argument must be the fully qualified name of a metadata element, so if it doesn't yet have a namespace, append the extracted metadata namespace.
    1446                 if(value.indexOf(MSMUtils.NS_SEP) == -1) {
     1446                if(value.indexOf(MSMUtils.NS_SEP) == -1) {
    14471447                value = Utility.EXTRACTED_METADATA_NAMESPACE + MSMUtils.NS_SEP + value;
    1448                 }
     1448                }
    14491449            }
    14501450            MSMUtils.setValue(option_element, value);
    1451             }
    1452             command_element.appendChild(option_element);
    1453             option_element = null;
    1454             name = null;
    1455             value = null;
     1451            }
     1452            command_element.appendChild(option_element);
     1453            option_element = null;
     1454            name = null;
     1455            value = null;
    14561456        }
    14571457
     
    14701470        names = null;
    14711471        arguments = null;
    1472         }
    1473         tokenizer = null;
     1472        }
     1473        tokenizer = null;
    14741474    }
    14751475    catch(Exception exception) {
    14761476    }
    14771477    return command_element;
    1478     }
    1479 
    1480     private Element parseSearchType(String command_str) {
     1478    }
     1479
     1480    private Element parseSearchType(String command_str) {
    14811481    Element command_element = null;
    14821482    try {
    1483         StringTokenizer tokenizer = new StringTokenizer(command_str);
    1484         // First token is command type (levels)
    1485         tokenizer.nextToken();
    1486         if(tokenizer.hasMoreTokens()) {
     1483        StringTokenizer tokenizer = new StringTokenizer(command_str);
     1484        // First token is command type (levels)
     1485        tokenizer.nextToken();
     1486        if(tokenizer.hasMoreTokens()) {
    14871487        command_element = document.createElement(SEARCHTYPE_ELEMENT);
    14881488        command_element.setAttribute(ASSIGNED_ATTRIBUTE, TRUE_STR);
    14891489        while(tokenizer.hasMoreTokens()) {
    1490             Element search_element = document.createElement(CONTENT_ELEMENT);
    1491             search_element.setAttribute(NAME_ATTRIBUTE, tokenizer.nextToken());
    1492             command_element.appendChild(search_element);
    1493             search_element = null;
    1494         }
    1495         }
     1490            Element search_element = document.createElement(CONTENT_ELEMENT);
     1491            search_element.setAttribute(NAME_ATTRIBUTE, tokenizer.nextToken());
     1492            command_element.appendChild(search_element);
     1493            search_element = null;
     1494        }
     1495        }
    14961496    }
    14971497    catch(Exception exception) {
    14981498    }
    14991499    return command_element;
    1500     }
    1501 
    1502     private Element parseSubCollection(String command_str) {
     1500    }
     1501
     1502    private Element parseSubCollection(String command_str) {
    15031503    Element command_element = null;
    15041504    try {
    1505         CommandTokenizer tokenizer = new CommandTokenizer(command_str);
    1506         if(tokenizer.countTokens() >= 3) {
     1505        CommandTokenizer tokenizer = new CommandTokenizer(command_str);
     1506        if(tokenizer.countTokens() >= 3) {
    15071507        command_element = document.createElement(SUBCOLLECTION_ELEMENT);
    15081508        // First token is command type
     
    15161516        // Set inclusion/exclusion flag, remove any exclaimation mark and the speech marks
    15171517        if(exclusion) {
    1518             full_pattern_str = full_pattern_str.substring(2, full_pattern_str.length() - 1);
    1519             command_element.setAttribute(TYPE_ATTRIBUTE, EXCLUDE_STR);
     1518            full_pattern_str = full_pattern_str.substring(2, full_pattern_str.length() - 1);
     1519            command_element.setAttribute(TYPE_ATTRIBUTE, EXCLUDE_STR);
    15201520        }
    15211521        else {
    1522             full_pattern_str = full_pattern_str.substring(1, full_pattern_str.length() - 1);
    1523             command_element.setAttribute(TYPE_ATTRIBUTE, INCLUDE_STR);
     1522            full_pattern_str = full_pattern_str.substring(1, full_pattern_str.length() - 1);
     1523            command_element.setAttribute(TYPE_ATTRIBUTE, INCLUDE_STR);
    15241524        }
    15251525        StringTokenizer pattern_tokenizer = new StringTokenizer(full_pattern_str, SEPARATOR_CHARACTER);
    15261526        if(pattern_tokenizer.countTokens() >= 2) {
    1527             String content_str = pattern_tokenizer.nextToken();
    1528             // Since the contents of indexes have to be certain keywords, or metadata elements, if the content isn't a keyword and doesn't yet have a namespace, append the extracted metadata namespace.
    1529             if(!content_str.equals(StaticStrings.FILENAME_STR) && content_str.indexOf(MSMUtils.NS_SEP) == -1) {
     1527            String content_str = pattern_tokenizer.nextToken();
     1528            // Since the contents of indexes have to be certain keywords, or metadata elements, if the content isn't a keyword and doesn't yet have a namespace, append the extracted metadata namespace.
     1529            if(!content_str.equals(StaticStrings.FILENAME_STR) && content_str.indexOf(MSMUtils.NS_SEP) == -1) {
    15301530            content_str = Utility.EXTRACTED_METADATA_NAMESPACE + MSMUtils.NS_SEP + content_str;
    1531             }
    1532             command_element.setAttribute(CONTENT_ATTRIBUTE, content_str);
    1533             MSMUtils.setValue(command_element, pattern_tokenizer.nextToken());
    1534             if(pattern_tokenizer.hasMoreTokens()) {
     1531            }
     1532            command_element.setAttribute(CONTENT_ATTRIBUTE, content_str);
     1533            MSMUtils.setValue(command_element, pattern_tokenizer.nextToken());
     1534            if(pattern_tokenizer.hasMoreTokens()) {
    15351535            command_element.setAttribute(OPTIONS_ATTRIBUTE, pattern_tokenizer.nextToken());
    1536             }
     1536            }
    15371537        }
    15381538        pattern_tokenizer = null;
    1539         }
     1539        }
    15401540    }
    15411541    catch(Exception exception) {
    1542         exception.printStackTrace();
     1542        exception.printStackTrace();
    15431543    }
    15441544    return command_element;
    1545     }
    1546 
    1547     private Element parseSubCollectionDefaultIndex(String command_str) {
     1545    }
     1546
     1547    private Element parseSubCollectionDefaultIndex(String command_str) {
    15481548    Element command_element = null;
    15491549    try {
    1550         StringTokenizer tokenizer = new StringTokenizer(command_str);
    1551         if(tokenizer.countTokens() == 2) {
     1550        StringTokenizer tokenizer = new StringTokenizer(command_str);
     1551        if(tokenizer.countTokens() == 2) {
    15521552        command_element = document.createElement(SUBCOLLECTION_DEFAULT_INDEX_ELEMENT);
    15531553        tokenizer.nextToken();
     
    15561556        StringTokenizer content_tokenizer = new StringTokenizer(content_str, StaticStrings.COMMA_CHARACTER);
    15571557        while(content_tokenizer.hasMoreTokens()) {
    1558             Element content_element = document.createElement(CONTENT_ELEMENT);
    1559             content_element.setAttribute(NAME_ATTRIBUTE, content_tokenizer.nextToken());
    1560             command_element.appendChild(content_element);
    1561             content_element = null;
     1558            Element content_element = document.createElement(CONTENT_ELEMENT);
     1559            content_element.setAttribute(NAME_ATTRIBUTE, content_tokenizer.nextToken());
     1560            command_element.appendChild(content_element);
     1561            content_element = null;
    15621562        }
    15631563        content_tokenizer = null;
    15641564        content_str = null;
    1565         }
    1566         tokenizer = null;
     1565        }
     1566        tokenizer = null;
    15671567    }
    15681568    catch(Exception exception) {
    15691569    }
    15701570    return command_element;
    1571     }
    1572 
    1573     private Element parseSubCollectionIndex(String command_str) {
     1571    }
     1572
     1573    private Element parseSubCollectionIndex(String command_str) {
    15741574    Element command_element = null;
    15751575    try {
    1576         StringTokenizer tokenizer = new StringTokenizer(command_str);
    1577         tokenizer.nextToken();
    1578         if(tokenizer.hasMoreTokens()) {
     1576        StringTokenizer tokenizer = new StringTokenizer(command_str);
     1577        tokenizer.nextToken();
     1578        if(tokenizer.hasMoreTokens()) {
    15791579        command_element = document.createElement(SUBCOLLECTION_INDEXES_ELEMENT);
    1580         }
    1581         while(tokenizer.hasMoreTokens()) {
     1580        }
     1581        while(tokenizer.hasMoreTokens()) {
    15821582        Element subcollectionindex_element = document.createElement(INDEX_ELEMENT);
    15831583        //command_element.setAttribute(CONTENT_ATTRIBUTE, tokenizer.nextToken());
     
    15851585        StringTokenizer content_tokenizer = new StringTokenizer(content_str, StaticStrings.COMMA_CHARACTER);
    15861586        while(content_tokenizer.hasMoreTokens()) {
    1587             Element content_element = document.createElement(CONTENT_ELEMENT);
    1588             content_element.setAttribute(NAME_ATTRIBUTE, content_tokenizer.nextToken());
    1589             subcollectionindex_element.appendChild(content_element);
    1590             content_element = null;
     1587            Element content_element = document.createElement(CONTENT_ELEMENT);
     1588            content_element.setAttribute(NAME_ATTRIBUTE, content_tokenizer.nextToken());
     1589            subcollectionindex_element.appendChild(content_element);
     1590            content_element = null;
    15911591        }
    15921592        content_tokenizer = null;
     
    15941594        command_element.appendChild(subcollectionindex_element);
    15951595        subcollectionindex_element = null;
    1596         }
    1597         tokenizer = null;
     1596        }
     1597        tokenizer = null;
    15981598    }
    15991599    catch (Exception exception) {
    16001600    }
    16011601    return command_element;
    1602     }
    1603 
    1604     private Element parseSuperCollection(String command_str) {
     1602    }
     1603
     1604    private Element parseSuperCollection(String command_str) {
    16051605    Element command_element = null;
    16061606    try {
    1607         StringTokenizer tokenizer = new StringTokenizer(command_str);
    1608         if(tokenizer.countTokens() >= 3) {
     1607        StringTokenizer tokenizer = new StringTokenizer(command_str);
     1608        if(tokenizer.countTokens() >= 3) {
    16091609        command_element = document.createElement(SUPERCOLLECTION_ELEMENT);
    16101610        tokenizer.nextToken();
    16111611        while(tokenizer.hasMoreTokens()) {
    1612             Element collection_element = document.createElement(COLLECTION_ELEMENT);
    1613             collection_element.setAttribute(NAME_ATTRIBUTE, tokenizer.nextToken());
    1614             command_element.appendChild(collection_element);
    1615             collection_element = null;
    1616         }
    1617         }
    1618         tokenizer = null;
     1612            Element collection_element = document.createElement(COLLECTION_ELEMENT);
     1613            collection_element.setAttribute(NAME_ATTRIBUTE, tokenizer.nextToken());
     1614            command_element.appendChild(collection_element);
     1615            collection_element = null;
     1616        }
     1617        }
     1618        tokenizer = null;
    16191619    }
    16201620    catch(Exception exception) {
    16211621    }
    16221622    return command_element;
    1623     }
    1624 
    1625     private String pluginToString(Element command_element, boolean show_extracted_namespace) {
     1623    }
     1624
     1625    private String pluginToString(Element command_element, boolean show_extracted_namespace) {
    16261626    StringBuffer text = new StringBuffer();
    16271627    if(!command_element.getAttribute(SEPARATOR_ATTRIBUTE).equals(TRUE_STR)) {
    1628         text.append(PLUGIN_STR);
    1629         text.append(TAB_CHARACTER);
    1630         text.append(TAB_CHARACTER);
    1631         text.append(command_element.getAttribute(TYPE_ATTRIBUTE));
    1632         // Retrieve, and output, the arguments
    1633         NodeList option_elements = command_element.getElementsByTagName(OPTION_ELEMENT);
    1634         int option_elements_length = option_elements.getLength();
    1635         if(option_elements_length > 0) {
     1628        text.append(PLUGIN_STR);
     1629        text.append(TAB_CHARACTER);
     1630        text.append(TAB_CHARACTER);
     1631        text.append(command_element.getAttribute(TYPE_ATTRIBUTE));
     1632        // Retrieve, and output, the arguments
     1633        NodeList option_elements = command_element.getElementsByTagName(OPTION_ELEMENT);
     1634        int option_elements_length = option_elements.getLength();
     1635        if(option_elements_length > 0) {
    16361636        text.append(SPACE_CHARACTER);
    16371637        for(int j = 0; j < option_elements_length; j++) {
    1638             Element option_element = (Element) option_elements.item(j);
    1639             if(option_element.getAttribute(ASSIGNED_ATTRIBUTE).equals(TRUE_STR)) {
     1638            Element option_element = (Element) option_elements.item(j);
     1639            if(option_element.getAttribute(ASSIGNED_ATTRIBUTE).equals(TRUE_STR)) {
    16401640            text.append(StaticStrings.MINUS_CHARACTER);
    16411641            text.append(option_element.getAttribute(NAME_ATTRIBUTE));
    16421642            String value_str = MSMUtils.getValue(option_element);
    16431643            if(!show_extracted_namespace && value_str.startsWith(EXTRACTED_PREFIX)) {
    1644                 value_str = value_str.substring(EXTRACTED_PREFIX.length());
     1644                value_str = value_str.substring(EXTRACTED_PREFIX.length());
    16451645            }
    16461646            if(value_str.length() > 0) {
    1647                 text.append(SPACE_CHARACTER);
    1648                 if(value_str.indexOf(SPACE_CHARACTER) == -1) {
     1647                text.append(SPACE_CHARACTER);
     1648                if(value_str.indexOf(SPACE_CHARACTER) == -1) {
    16491649                text.append(value_str);
    1650                 }
    1651                 else {
     1650                }
     1651                else {
    16521652                text.append(SPEECH_CHARACTER);
    16531653                text.append(value_str);
    16541654                text.append(SPEECH_CHARACTER);
    1655                 }
     1655                }
    16561656            }
    16571657            value_str = null;
    16581658            if(j < option_elements_length - 1) {
    1659                 text.append(SPACE_CHARACTER);
     1659                text.append(SPACE_CHARACTER);
    16601660            }
    1661             }
    1662             option_element = null;
    1663         }
    1664         }
    1665         option_elements = null;
     1661            }
     1662            option_element = null;
     1663        }
     1664        }
     1665        option_elements = null;
    16661666    }
    16671667    return text.toString();
    1668     }
    1669 
    1670     private String searchtypeToString(Element command_element) {
     1668    }
     1669
     1670    private String searchtypeToString(Element command_element) {
    16711671    if(command_element.getAttribute(ASSIGNED_ATTRIBUTE).equals(TRUE_STR)) {
    1672         StringBuffer text = new StringBuffer(SEARCHTYPE_STR);
    1673         text.append(TAB_CHARACTER);
    1674         NodeList search_elements = command_element.getElementsByTagName(CONTENT_ELEMENT);
    1675         int search_elements_length = search_elements.getLength();
    1676         for(int i = 0; i < search_elements_length; i++) {
     1672        StringBuffer text = new StringBuffer(SEARCHTYPE_STR);
     1673        text.append(TAB_CHARACTER);
     1674        NodeList search_elements = command_element.getElementsByTagName(CONTENT_ELEMENT);
     1675        int search_elements_length = search_elements.getLength();
     1676        for(int i = 0; i < search_elements_length; i++) {
    16771677        Element search_element = (Element) search_elements.item(i);
    16781678        text.append(search_element.getAttribute(NAME_ATTRIBUTE));
    16791679        text.append(SPACE_CHARACTER);
    1680         }
    1681         return text.substring(0, text.length() - 1);
     1680        }
     1681        return text.substring(0, text.length() - 1);
    16821682    }
    16831683    else {
    1684         return null;
    1685     }
    1686     }
    1687 
    1688     private String subcollectionToString(Element command_element, boolean show_extracted_namespace) {
     1684        return null;
     1685    }
     1686    }
     1687
     1688    private String subcollectionToString(Element command_element, boolean show_extracted_namespace) {
    16891689    StringBuffer text = new StringBuffer(SUBCOLLECTION_STR);
    16901690    text.append(SPACE_CHARACTER);
     
    16941694    text.append(SPEECH_CHARACTER);
    16951695    if(command_element.getAttribute(TYPE_ATTRIBUTE).equals(EXCLUDE_STR)) {
    1696         text.append(EXCLAIMATION_CHARACTER);
     1696        text.append(EXCLAIMATION_CHARACTER);
    16971697    }
    16981698    String content_str = command_element.getAttribute(CONTENT_ATTRIBUTE);
    16991699    if(!show_extracted_namespace && content_str.startsWith(EXTRACTED_PREFIX)) {
    1700         content_str = content_str.substring(EXTRACTED_PREFIX.length());
     1700        content_str = content_str.substring(EXTRACTED_PREFIX.length());
    17011701    }
    17021702    text.append(content_str);
     
    17071707    String options_str = command_element.getAttribute(OPTIONS_ATTRIBUTE);
    17081708    if(options_str.length() > 0) {
    1709         text.append(options_str);
     1709        text.append(options_str);
    17101710    }
    17111711    options_str = null;
    17121712    text.append(SPEECH_CHARACTER);
    17131713    return text.toString();
    1714     }
    1715 
    1716     private String subcollectionDefaultIndexToString(Element command_element) {
     1714    }
     1715
     1716    private String subcollectionDefaultIndexToString(Element command_element) {
    17171717    StringBuffer text = new StringBuffer(SUBCOLLECTION_DEFAULT_INDEX_STR);
    17181718    text.append(TAB_CHARACTER);
     
    17201720    int content_elements_length = content_elements.getLength();
    17211721    for(int j = 0; j < content_elements_length; j++) {
    1722         Element content_element = (Element) content_elements.item(j);
    1723         text.append(content_element.getAttribute(NAME_ATTRIBUTE));
    1724         if(j < content_elements_length - 1) {
     1722        Element content_element = (Element) content_elements.item(j);
     1723        text.append(content_element.getAttribute(NAME_ATTRIBUTE));
     1724        if(j < content_elements_length - 1) {
    17251725        text.append(StaticStrings.COMMA_CHARACTER);
    1726         }
     1726        }
    17271727    }
    17281728    return text.toString();
    1729     }
    1730 
    1731     private String subcollectionIndexesToString(Element command_element) {
     1729    }
     1730
     1731    private String subcollectionIndexesToString(Element command_element) {
    17321732    StringBuffer text = new StringBuffer(SUBCOLLECTION_INDEX_STR);
    17331733    text.append(TAB_CHARACTER);
     
    17361736    int subcollectionindex_elements_length = subcollectionindex_elements.getLength();
    17371737    if(subcollectionindex_elements_length == 0) {
    1738         return null;
     1738        return null;
    17391739    }
    17401740    for(int j = 0; j < subcollectionindex_elements_length; j++) {
    1741         Element subcollectionindex_element = (Element) subcollectionindex_elements.item(j);
    1742         NodeList content_elements = subcollectionindex_element.getElementsByTagName(CONTENT_ELEMENT);
    1743         int content_elements_length = content_elements.getLength();
    1744         for(int k = 0; k < content_elements_length; k++) {
     1741        Element subcollectionindex_element = (Element) subcollectionindex_elements.item(j);
     1742        NodeList content_elements = subcollectionindex_element.getElementsByTagName(CONTENT_ELEMENT);
     1743        int content_elements_length = content_elements.getLength();
     1744        for(int k = 0; k < content_elements_length; k++) {
    17451745        Element content_element = (Element) content_elements.item(k);
    17461746        text.append(content_element.getAttribute(NAME_ATTRIBUTE));
    17471747        if(k < content_elements_length - 1) {
    1748             text.append(StaticStrings.COMMA_CHARACTER);
    1749         }
    1750         }
    1751         if(j < subcollectionindex_elements_length - 1) {
     1748            text.append(StaticStrings.COMMA_CHARACTER);
     1749        }
     1750        }
     1751        if(j < subcollectionindex_elements_length - 1) {
    17521752        text.append(SPACE_CHARACTER);
    1753         }
     1753        }
    17541754    }
    17551755    return text.toString();
    1756     }
    1757 
    1758     private String supercollectionToString(Element command_element) {
     1756    }
     1757
     1758    private String supercollectionToString(Element command_element) {
    17591759    NodeList content_elements = command_element.getElementsByTagName(COLLECTION_ELEMENT);
    17601760    int content_elements_length = content_elements.getLength();
    17611761    if(content_elements_length > 1) {
    1762         StringBuffer text = new StringBuffer(SUPERCOLLECTION_STR);
    1763         text.append(TAB_CHARACTER);
    1764         for(int j = 0; j < content_elements_length; j++) {
     1762        StringBuffer text = new StringBuffer(SUPERCOLLECTION_STR);
     1763        text.append(TAB_CHARACTER);
     1764        for(int j = 0; j < content_elements_length; j++) {
    17651765        Element content_element = (Element) content_elements.item(j);
    17661766        text.append(content_element.getAttribute(NAME_ATTRIBUTE));
    17671767        if(j < content_elements_length - 1) {
    1768             text.append(SPACE_CHARACTER);
    1769         }
    1770         }
    1771         return text.toString();
     1768            text.append(SPACE_CHARACTER);
     1769        }
     1770        }
     1771        return text.toString();
    17721772    }
    17731773    return null;
    1774     }
    1775 
    1776     private String unknownToString(Element command_element) {
     1774    }
     1775
     1776    private String unknownToString(Element command_element) {
    17771777    return MSMUtils.getValue(command_element);
    1778     }
    1779 
    1780     /** Write the text to the buffer. This is used so we don't have to worry about storing intermediate String values just so we can calaulate length and offset.
    1781     * @param writer the BufferedWriter to which the str will be written
    1782     * @param str the String to be written
    1783     */
    1784     private void write(BufferedWriter writer, String str)
     1778    }
     1779
     1780    /** Write the text to the buffer. This is used so we don't have to worry about storing intermediate String values just so we can calaulate length and offset.
     1781    * @param writer the BufferedWriter to which the str will be written
     1782    * @param str the String to be written
     1783    */
     1784    private void write(BufferedWriter writer, String str)
    17851785    throws IOException {
    17861786    writer.write(str, 0, str.length());
    1787     }
     1787    }
    17881788}
Note: See TracChangeset for help on using the changeset viewer.