Ignore:
Timestamp:
2006-07-07T13:20:30+12:00 (18 years ago)
Author:
kjdon
Message:

changed a bit of parsing - buildtypes, levels, searchtypes have changed

File:
1 edited

Legend:

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

    r11048 r12096  
    5858    static public Document document;
    5959
    60     static public void main(String[] args) {
    61     if(args.length >= 1) {
    62         File file = new File(args[0]);
    63         CollectionConfiguration collect_cfg = new CollectionConfiguration(file);
    64         collect_cfg.save(true);
    65         collect_cfg.save(false);
    66         collect_cfg = null;
    67     }
    68     else {
    69         System.out.println("Usage: CollectionConfiguration <filename>");
    70     }
    71     }
    72 
    7360    /** 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.
    7461     * @param target_element the command Element to be inserted
     
    232219        return levelsToString(command_element);
    233220    }
     221    else if(command_element_name.equals(LEVEL_DEFAULT_ELEMENT)) {
     222        return levelDefaultToString(command_element);
     223    }
    234224    else if(command_element_name.equals(COLLECTIONMETADATA_ELEMENT)) {
    235225        return metadataToString(command_element, show_extracted_namespace);
     
    250240        return pluginToString(command_element, show_extracted_namespace);
    251241    }
    252     else if(command_element_name.equals(SEARCHTYPE_ELEMENT)) {
    253         return searchtypeToString(command_element);
    254     }
     242// else if(command_element_name.equals(SEARCHTYPE_ELEMENT)) {
     243//      return searchtypeToString(command_element);
     244// }
    255245    else if(command_element_name.equals(SUBCOLLECTION_ELEMENT)) {
    256246        return subcollectionToString(command_element, show_extracted_namespace);
     
    310300
    311301    /** Gives the preferred ordering of commands */
    312     static final private String[] COMMAND_ORDER = {StaticStrings.COLLECTIONMETADATA_CREATOR_ELEMENT, StaticStrings.COLLECTIONMETADATA_MAINTAINER_ELEMENT, StaticStrings.COLLECTIONMETADATA_PUBLIC_ELEMENT,  StaticStrings.SEARCHTYPE_ELEMENT, StaticStrings.BUILDTYPE_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};
     302    static final private String[] COMMAND_ORDER = {StaticStrings.COLLECTIONMETADATA_CREATOR_ELEMENT, StaticStrings.COLLECTIONMETADATA_MAINTAINER_ELEMENT, StaticStrings.COLLECTIONMETADATA_PUBLIC_ELEMENT,  /*StaticStrings.SEARCHTYPE_ELEMENT,*/ StaticStrings.BUILDTYPE_ELEMENT, StaticStrings.PLUGIN_ELEMENT, StaticStrings.INDEXES_ELEMENT, StaticStrings.INDEX_DEFAULT_ELEMENT, StaticStrings.LEVELS_ELEMENT, StaticStrings.LEVEL_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};
    313303
    314304    /** ************************** Public Data Members ***************************/
     
    323313    {
    324314    this.collect_cfg_file = collect_cfg_file;
    325     // If collect_cfg is xml we can load it straight away
    326     String collect_config_name = collect_cfg_file.getName();
    327     if(collect_config_name.equals(COLLECTCONFIGURATION_XML)) {
    328         document = XMLTools.parseXMLFile(collect_cfg_file);
    329     }
    330     // Otherwise if this is a legacy collect.cfg file then read in the template and send to magic parser
    331     else if(collect_config_name.equals(COLLECT_CFG)) {
    332         document = XMLTools.parseXMLFile("xml/CollectionConfig.xml", true);
    333         parse(collect_cfg_file);
    334     }
     315    // parse the XML template
     316    document = XMLTools.parseXMLFile("xml/CollectionConfig.xml", true);
     317    parse(collect_cfg_file);
     318   
    335319    }
    336320
     
    410394
    411395    }
    412     /** Retrieve or create the searchtype element. */
    413     public Element getSearchType() {
    414     ///ystem.err.println("Get or create element by tag name: " + name);
    415     Element document_element = document.getDocumentElement();
    416     NodeList elements = document_element.getElementsByTagName(SEARCHTYPE_ELEMENT);
    417     int elements_length = elements.getLength();
    418     if(elements_length > 0) {
    419         document_element = null;
    420         return (Element) elements.item(0);
    421     }
    422     // Create the element
    423     Element element = document.createElement(SEARCHTYPE_ELEMENT);
    424     Node target_node = findInsertionPoint(element);
    425     if(target_node != null) {
    426         document_element.insertBefore(element, target_node);
    427     }
    428     else {
    429         document_element.appendChild(element);
    430     }
    431     document_element = null;
    432     // Append a default search type node - form
    433     Element a_searchtype_element = CollectionDesignManager.collect_config.document.createElement(CollectionConfiguration.CONTENT_ELEMENT);
    434     a_searchtype_element.setAttribute(CollectionConfiguration.NAME_ATTRIBUTE, SearchTypeManager.SEARCH_TYPES[0]);
    435     element.appendChild(a_searchtype_element);
    436     return element;
    437     }
     396//     /** Retrieve or create the searchtype element. */
     397//     public Element getSearchType() {
     398// ///ystem.err.println("Get or create element by tag name: " + name);
     399// Element document_element = document.getDocumentElement();
     400// NodeList elements = document_element.getElementsByTagName(SEARCHTYPE_ELEMENT);
     401// int elements_length = elements.getLength();
     402// if(elements_length > 0) {
     403//      document_element = null;
     404//      return (Element) elements.item(0);
     405// }
     406// // Create the element
     407// Element element = document.createElement(SEARCHTYPE_ELEMENT);
     408// Node target_node = findInsertionPoint(element);
     409// if(target_node != null) {
     410//      document_element.insertBefore(element, target_node);
     411// }
     412// else {
     413//      document_element.appendChild(element);
     414// }
     415// document_element = null;
     416// // Append a default search type node - form
     417// Element a_searchtype_element = CollectionDesignManager.collect_config.document.createElement(CollectionConfiguration.CONTENT_ELEMENT);
     418// a_searchtype_element.setAttribute(CollectionConfiguration.NAME_ATTRIBUTE, SearchTypeManager.SEARCH_TYPES[0]);
     419// element.appendChild(a_searchtype_element);
     420// return element;
     421//     }
    438422
    439423    /** Retrieve or create the subindexes Element. */
     
    452436
    453437    public void save() {
    454     save(false);
    455     }
    456 
    457     public void save(boolean force_xml) {
    458438    if(collect_cfg_file.exists()) {
    459439        File original_file = new File(collect_cfg_file.getParentFile(), COLLECT_CFG);
     
    466446        }
    467447    }
    468     if(force_xml || collect_cfg_file.getName().equals(COLLECTCONFIGURATION_XML)) {
    469         ///ystem.err.println("Writing XML");
    470         XMLTools.writeXMLFile(new File(collect_cfg_file.getParentFile(), COLLECTCONFIGURATION_XML), document);
    471     }
    472     else {
    473         ///ystem.err.println("Writing text");
    474         try {       
    475         OutputStream ostream = new FileOutputStream(collect_cfg_file);
    476         Writer file_writer = new OutputStreamWriter(ostream, ENCODING);
    477         //FileWriter file_writer = new FileWriter(collect_cfg_file, false);
    478         BufferedWriter buffered_writer = new BufferedWriter(file_writer);
    479         Element collect_config_element = document.getDocumentElement();
    480         NodeList command_elements = collect_config_element.getChildNodes();
    481         boolean just_wrote_newline = false; // Prevent two or more newlines in a row
    482         for(int i = 0; i < command_elements.getLength(); i++) {
    483             Node command_node = command_elements.item(i);
    484             if(command_node instanceof Element) {
    485             Element command_element = (Element) command_node;
    486             // The only thing left are NewLine elements
    487             if(command_element.getNodeName().equals(NEWLINE_ELEMENT) && !just_wrote_newline) {
     448   
     449    try {       
     450        OutputStream ostream = new FileOutputStream(collect_cfg_file);
     451        Writer file_writer = new OutputStreamWriter(ostream, ENCODING);
     452        //FileWriter file_writer = new FileWriter(collect_cfg_file, false);
     453        BufferedWriter buffered_writer = new BufferedWriter(file_writer);
     454        Element collect_config_element = document.getDocumentElement();
     455        NodeList command_elements = collect_config_element.getChildNodes();
     456        boolean just_wrote_newline = false; // Prevent two or more newlines in a row
     457        for(int i = 0; i < command_elements.getLength(); i++) {
     458        Node command_node = command_elements.item(i);
     459        if(command_node instanceof Element) {
     460            Element command_element = (Element) command_node;
     461            // The only thing left are NewLine elements
     462            if(command_element.getNodeName().equals(NEWLINE_ELEMENT) && !just_wrote_newline) {
     463            buffered_writer.newLine();
     464            just_wrote_newline = true;
     465            }
     466            // Anything else we write to file, but only if it has been assigned, the exception being the Indexes element which just get commented if unassigned (a side effect of MG && MGPP compatibility)
     467            else if(!command_element.getAttribute(ASSIGNED_ATTRIBUTE).equals(FALSE_STR) || command_element.getNodeName().equals(INDEXES_ELEMENT) || command_element.getNodeName().equals(INDEX_DEFAULT_ELEMENT) || command_element.getNodeName().equals(LEVELS_ELEMENT) || command_element.getNodeName().equals(LEVEL_DEFAULT_ELEMENT)){
     468            String command;
     469            // format statements we write out with ex. still present
     470            if (command_element.getNodeName().equals(FORMAT_ELEMENT)) {
     471                command = toString(command_element, true);
     472            } else {
     473                command = toString(command_element, false);
     474            }
     475            if(command != null && command.length()> 0 ) {
     476                write(buffered_writer, command);
    488477                buffered_writer.newLine();
    489                 just_wrote_newline = true;
    490             }
    491             // Anything else we write to file, but only if it has been assigned, the exception being the Indexes element which just get commented if unassigned (a side effect of MG && MGPP compatibility)
    492             else if(!command_element.getAttribute(ASSIGNED_ATTRIBUTE).equals(FALSE_STR) || command_element.getNodeName().equals(INDEXES_ELEMENT) || command_element.getNodeName().equals(INDEX_DEFAULT_ELEMENT) || command_element.getNodeName().equals(LEVELS_ELEMENT)){
    493                 String command;
    494                 // format statements we write out with ex. still present
    495                 if (command_element.getNodeName().equals(FORMAT_ELEMENT)) {
    496                 command = toString(command_element, true);
    497                 } else {
    498                 command = toString(command_element, false);
    499                 }
    500                 if(command != null && command.length()> 0 ) {
    501                 write(buffered_writer, command);
    502                 buffered_writer.newLine();
    503                 just_wrote_newline = false;
    504                 }
    505             }
    506             }
    507         }
    508         buffered_writer.close();
    509 
    510         // If we're using a remote Greenstone server, upload the new collect.cfg file
    511         if (Gatherer.isGsdlRemote) {
    512             String collection_name = Gatherer.c_man.getCollection().getName();
    513             RemoteGreenstoneServer.uploadCollectionFile(collection_name, collect_cfg_file);
    514         }
    515         }
    516         catch (Exception exception) {
    517         DebugStream.println("Error in CollectionConfiguration.save(boolean): " + exception);
    518         DebugStream.printStackTrace(exception);
    519         }
    520     }
     478                just_wrote_newline = false;
     479            }
     480            }
     481        }
     482        }
     483        buffered_writer.close();
     484       
     485        // If we're using a remote Greenstone server, upload the new collect.cfg file
     486        if (Gatherer.isGsdlRemote) {
     487        String collection_name = Gatherer.c_man.getCollection().getName();
     488        RemoteGreenstoneServer.uploadCollectionFile(collection_name, collect_cfg_file);
     489        }
     490    }
     491    catch (Exception exception) {
     492        DebugStream.println("Error in CollectionConfiguration.save(boolean): " + exception);
     493        DebugStream.printStackTrace(exception);
     494    }
     495   
    521496    }
    522497
     
    763738    text.append(TAB_CHARACTER);
    764739    text.append(TAB_CHARACTER);
    765     NodeList content_elements = command_element.getElementsByTagName(CONTENT_ELEMENT);
     740    NodeList content_elements = command_element.getElementsByTagName(LEVEL_ELEMENT);
    766741    int content_elements_length = content_elements.getLength();
    767742    // Don't output anything if no levels are set.
     
    776751    return text.substring(0, text.length() - 1);
    777752    }
     753
     754    static private String levelDefaultToString(Element command_element) {
     755    StringBuffer text = new StringBuffer("");
     756    if(command_element.getAttribute(ASSIGNED_ATTRIBUTE).equals(FALSE_STR)) {
     757        text.append("#");
     758    }
     759    text.append(LEVEL_DEFAULT_STR);
     760    text.append(TAB_CHARACTER);
     761    text.append(command_element.getAttribute(NAME_ATTRIBUTE));
     762    return text.toString();
     763    }
     764   
     765   
    778766
    779767    static private String metadataToString(Element command_element, boolean text_value) {
     
    907895            command_element = parseLevels(command_str);
    908896            }
     897            if(command_element == null && (command_type.equals(LEVEL_DEFAULT_STR) || command_type.equals(COMMENTED_LEVEL_DEFAULT_STR))) {
     898           
     899            command_element = parseLevelDefault(command_str);
     900            }
     901
    909902            if(command_element == null && command_type.equals(COLLECTIONMETADATA_STR)) {
    910903            command_element = parseMetadata(tokenizer); // Revised to handle multiple lines
     
    916909            command_element = parsePlugin(command_str);
    917910            }
     911            // leave here for backwards compatibility
    918912            if(command_element == null && command_type.equals(SEARCHTYPE_STR)) {
    919913            command_element = parseSearchType(command_str);
     
    11471141    return command_element;
    11481142    }
    1149     private Element parseBuildType(String command_str) {
    1150     Element command_element = null;
    1151     try {
    1152         StringTokenizer tokenizer = new StringTokenizer(command_str);
    1153         if(tokenizer.countTokens() >= 2) {
    1154         command_element = document.createElement(INDEX_DEFAULT_ELEMENT);
    1155         command_element.setAttribute(ASSIGNED_ATTRIBUTE, ((tokenizer.nextToken()).equals(INDEX_DEFAULT_STR) ? TRUE_STR : FALSE_STR));
    1156         String index_str = tokenizer.nextToken();
    1157         command_element.setAttribute(LEVEL_ATTRIBUTE, index_str.substring(0, index_str.indexOf(StaticStrings.COLON_CHARACTER)));
    1158         String content_str = index_str.substring(index_str.indexOf(StaticStrings.COLON_CHARACTER) + 1);
    1159         StringTokenizer content_tokenizer = new StringTokenizer(content_str, StaticStrings.COMMA_CHARACTER);
    1160         while(content_tokenizer.hasMoreTokens()) {
    1161             Element content_element = document.createElement(CONTENT_ELEMENT);
    1162             content_element.setAttribute(NAME_ATTRIBUTE, content_tokenizer.nextToken());
    1163             command_element.appendChild(content_element);
    1164             content_element = null;
    1165         }
    1166         content_tokenizer = null;
    1167         content_str = null;
    1168         content_str = null;
    1169         index_str = null;
    1170         }
    1171         tokenizer = null;
    1172     }
    1173     catch (Exception exception) {
    1174     }
    1175     return command_element;
    1176     }
    11771143
    11781144    private Element parseLanguage(String command_str) {
     
    12261192        command_element.setAttribute(ASSIGNED_ATTRIBUTE, (command.equals(LEVELS_STR) ? TRUE_STR : FALSE_STR));
    12271193        while(tokenizer.hasMoreTokens()) {
    1228             Element level_element = document.createElement(CONTENT_ELEMENT);
     1194            Element level_element = document.createElement(LEVEL_ELEMENT);
    12291195            level_element.setAttribute(NAME_ATTRIBUTE, tokenizer.nextToken());
    12301196            command_element.appendChild(level_element);
     
    12351201    }
    12361202    catch(Exception exception) {
     1203    }
     1204    return command_element;
     1205    }
     1206
     1207    private Element parseLevelDefault(String command_str) {
     1208    Element command_element = null;
     1209    try {
     1210        StringTokenizer tokenizer = new StringTokenizer(command_str);
     1211        if(tokenizer.countTokens() >= 2) {
     1212        command_element = document.createElement(LEVEL_DEFAULT_ELEMENT);
     1213        command_element.setAttribute(ASSIGNED_ATTRIBUTE, ((tokenizer.nextToken()).equals(LEVEL_DEFAULT_STR) ? TRUE_STR : FALSE_STR)); // is it commented out or not?
     1214        command_element.setAttribute(NAME_ATTRIBUTE, tokenizer.nextToken());
     1215        }
     1216       
     1217        tokenizer = null;
     1218    }
     1219    catch (Exception exception) {
    12371220    }
    12381221    return command_element;
     
    13851368    }
    13861369
     1370    /* search types are now handled as formats - leave this here to convert in case we have an old config file */
    13871371    private Element parseSearchType(String command_str) {
    13881372    Element command_element = null;
    13891373    try {
    13901374        StringTokenizer tokenizer = new StringTokenizer(command_str);
    1391         // First token is command type (levels)
     1375        // First token is command type (searchtype)
    13921376        tokenizer.nextToken();
    13931377        if(tokenizer.hasMoreTokens()) {
    1394         command_element = document.createElement(SEARCHTYPE_ELEMENT);
    1395         command_element.setAttribute(ASSIGNED_ATTRIBUTE, TRUE_STR);
     1378        command_element = document.createElement(FORMAT_ELEMENT);
     1379        command_element.setAttribute(NAME_ATTRIBUTE, "SearchTypes");
     1380        String value = tokenizer.nextToken();
    13961381        while(tokenizer.hasMoreTokens()) {
    1397             Element search_element = document.createElement(CONTENT_ELEMENT);
    1398             search_element.setAttribute(NAME_ATTRIBUTE, tokenizer.nextToken());
    1399             command_element.appendChild(search_element);
    1400             search_element = null;
    1401         }
     1382            value += ","+tokenizer.nextToken();
     1383        }
     1384        value = Codec.transform(value, Codec.GREENSTONE_TO_DOM);
     1385        XMLTools.setValue(command_element, value);
     1386       
    14021387        }
    14031388    }
Note: See TracChangeset for help on using the changeset viewer.