Changeset 12096
- Timestamp:
- 2006-07-07T13:20:30+12:00 (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/gli/src/org/greenstone/gatherer/cdm/CollectionConfiguration.java
r11048 r12096 58 58 static public Document document; 59 59 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 73 60 /** 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. 74 61 * @param target_element the command Element to be inserted … … 232 219 return levelsToString(command_element); 233 220 } 221 else if(command_element_name.equals(LEVEL_DEFAULT_ELEMENT)) { 222 return levelDefaultToString(command_element); 223 } 234 224 else if(command_element_name.equals(COLLECTIONMETADATA_ELEMENT)) { 235 225 return metadataToString(command_element, show_extracted_namespace); … … 250 240 return pluginToString(command_element, show_extracted_namespace); 251 241 } 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 // } 255 245 else if(command_element_name.equals(SUBCOLLECTION_ELEMENT)) { 256 246 return subcollectionToString(command_element, show_extracted_namespace); … … 310 300 311 301 /** 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}; 313 303 314 304 /** ************************** Public Data Members ***************************/ … … 323 313 { 324 314 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 335 319 } 336 320 … … 410 394 411 395 } 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 element423 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 - form433 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 // } 438 422 439 423 /** Retrieve or create the subindexes Element. */ … … 452 436 453 437 public void save() { 454 save(false);455 }456 457 public void save(boolean force_xml) {458 438 if(collect_cfg_file.exists()) { 459 439 File original_file = new File(collect_cfg_file.getParentFile(), COLLECT_CFG); … … 466 446 } 467 447 } 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); 488 477 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 521 496 } 522 497 … … 763 738 text.append(TAB_CHARACTER); 764 739 text.append(TAB_CHARACTER); 765 NodeList content_elements = command_element.getElementsByTagName( CONTENT_ELEMENT);740 NodeList content_elements = command_element.getElementsByTagName(LEVEL_ELEMENT); 766 741 int content_elements_length = content_elements.getLength(); 767 742 // Don't output anything if no levels are set. … … 776 751 return text.substring(0, text.length() - 1); 777 752 } 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 778 766 779 767 static private String metadataToString(Element command_element, boolean text_value) { … … 907 895 command_element = parseLevels(command_str); 908 896 } 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 909 902 if(command_element == null && command_type.equals(COLLECTIONMETADATA_STR)) { 910 903 command_element = parseMetadata(tokenizer); // Revised to handle multiple lines … … 916 909 command_element = parsePlugin(command_str); 917 910 } 911 // leave here for backwards compatibility 918 912 if(command_element == null && command_type.equals(SEARCHTYPE_STR)) { 919 913 command_element = parseSearchType(command_str); … … 1147 1141 return command_element; 1148 1142 } 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 }1177 1143 1178 1144 private Element parseLanguage(String command_str) { … … 1226 1192 command_element.setAttribute(ASSIGNED_ATTRIBUTE, (command.equals(LEVELS_STR) ? TRUE_STR : FALSE_STR)); 1227 1193 while(tokenizer.hasMoreTokens()) { 1228 Element level_element = document.createElement( CONTENT_ELEMENT);1194 Element level_element = document.createElement(LEVEL_ELEMENT); 1229 1195 level_element.setAttribute(NAME_ATTRIBUTE, tokenizer.nextToken()); 1230 1196 command_element.appendChild(level_element); … … 1235 1201 } 1236 1202 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) { 1237 1220 } 1238 1221 return command_element; … … 1385 1368 } 1386 1369 1370 /* search types are now handled as formats - leave this here to convert in case we have an old config file */ 1387 1371 private Element parseSearchType(String command_str) { 1388 1372 Element command_element = null; 1389 1373 try { 1390 1374 StringTokenizer tokenizer = new StringTokenizer(command_str); 1391 // First token is command type ( levels)1375 // First token is command type (searchtype) 1392 1376 tokenizer.nextToken(); 1393 1377 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(); 1396 1381 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 1402 1387 } 1403 1388 }
Note:
See TracChangeset
for help on using the changeset viewer.