Changeset 10479
- Timestamp:
- 2005-08-11T11:19:11+12:00 (19 years ago)
- Location:
- trunk/gli/src/org/greenstone/gatherer
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/gli/src/org/greenstone/gatherer/file/FileQueue.java
r10249 r10479 446 446 ArrayList assigned_metadata = MetadataXMLFileManager.getMetadataAssignedDirectlyToFile(source_file); 447 447 // ...and remove it from the original node and assign it to the new folder 448 for (int i = 0; i < assigned_metadata.size(); i++) { 449 MetadataValue metadata_value = (MetadataValue) assigned_metadata.get(i); 450 MetadataXMLFileManager.removeMetadata((CollectionTreeNode) origin_node, metadata_value); 451 MetadataXMLFileManager.addMetadata((CollectionTreeNode) new_node, metadata_value); 452 } 448 MetadataXMLFileManager.removeMetadata((CollectionTreeNode) origin_node, assigned_metadata); 449 MetadataXMLFileManager.addMetadata((CollectionTreeNode) new_node, assigned_metadata); 453 450 } 454 451 // If it came from the workspace search for metadata assigned to the file 455 452 else if (job.source.toString().equals("Workspace")) { 456 453 ArrayList assigned_metadata = MetadataXMLFileManager.getMetadataAssignedDirectlyToExternalFile(origin_node.getFile()); 457 for (int i = 0; i < assigned_metadata.size(); i++) { 458 MetadataValue metadata_value = (MetadataValue) assigned_metadata.get(i); 459 MetadataXMLFileManager.addMetadata((CollectionTreeNode) new_node, metadata_value); 460 } 454 MetadataXMLFileManager.addMetadata((CollectionTreeNode) new_node, assigned_metadata); 461 455 } 462 456 … … 491 485 // Remove the metadata assigned directly to the file 492 486 ArrayList assigned_metadata = MetadataXMLFileManager.getMetadataAssignedDirectlyToFile(origin_node.getFile()); 493 for (int i = 0; i < assigned_metadata.size(); i++) { 494 MetadataValue metadata_value = (MetadataValue) assigned_metadata.get(i); 495 MetadataXMLFileManager.removeMetadata((CollectionTreeNode) origin_node, metadata_value); 496 } 487 MetadataXMLFileManager.removeMetadata((CollectionTreeNode) origin_node, assigned_metadata); 497 488 498 489 // Remove from model -
trunk/gli/src/org/greenstone/gatherer/metadata/MetadataXMLFile.java
r9856 r10479 52 52 53 53 54 public void addMetadata(File file, MetadataValue metadata_value)54 public void addMetadata(File file, ArrayList metadata_values) 55 55 { 56 56 // Parse the metadata.xml file … … 62 62 63 63 // Determine the file's path relative to the location of the metadata.xml file 64 File metadata_xml_file_directory = getParentFile();65 String file_relative_path = file.getAbsolutePath().substring(metadata_xml_file_directory .getAbsolutePath().length());64 String metadata_xml_file_directory_path = getParentFile().getAbsolutePath(); 65 String file_relative_path = file.getAbsolutePath().substring(metadata_xml_file_directory_path.length()); 66 66 if (file_relative_path.startsWith(File.separator)) { 67 67 file_relative_path = file_relative_path.substring(File.separator.length()); … … 79 79 } 80 80 81 // Remove any characters that are invalid in XML 82 String metadata_value_string = XMLTools.removeInvalidCharacters(metadata_value.getFullValue()); 83 84 // Square brackets need to be escaped because they are a special character in Greenstone 85 metadata_value_string = metadata_value_string.replaceAll("\\[", "["); 86 metadata_value_string = metadata_value_string.replaceAll("\\]", "]"); 87 88 // Create a new Metadata element to record this metadata 89 Element new_metadata_element = document.createElement(METADATA_ELEMENT); 90 new_metadata_element.setAttribute("name", metadata_value.getMetadataElement().getFullName()); 91 new_metadata_element.setAttribute("mode", (metadata_value.isAccumulatingMetadata() ? "accumulate" : "override")); 92 new_metadata_element.appendChild(document.createTextNode(metadata_value_string)); 93 boolean must_add_new_fileset_for_metadata = true; 81 // Find the appropriate FileSet element for this file 82 Element appropriate_fileset_element = null; 94 83 95 84 // Read all the FileSet elements in the file 96 String metadata_element_name_full = metadata_value.getMetadataElement().getFullName();97 85 NodeList fileset_elements_nodelist = document.getElementsByTagName(FILESET_ELEMENT); 98 86 for (int i = 0; i < fileset_elements_nodelist.getLength(); i++) { … … 107 95 // Only exact matches can be extended with new metadata 108 96 if (current_filename_element_value.equals(file_path_regexp)) { 109 Element description_element = (Element) current_fileset_element.getElementsByTagName(DESCRIPTION_ELEMENT).item(0); 110 boolean metadata_already_assigned = false; 111 112 // Check if this piece of metadata has already been assigned to this FileSet element 113 NodeList metadata_elements_nodelist = description_element.getElementsByTagName(METADATA_ELEMENT); 114 for (int k = 0; k < metadata_elements_nodelist.getLength(); k++) { 115 Element current_metadata_element = (Element) metadata_elements_nodelist.item(k); 116 117 // Check the metadata element name matches 118 String current_metadata_element_name_full = current_metadata_element.getAttribute("name"); 119 if (!current_metadata_element_name_full.equals(metadata_element_name_full)) { 120 continue; 121 } 122 123 // Check the metadata element value matches 124 String current_metadata_value_string = XMLTools.getElementTextValue(current_metadata_element); 125 if (!current_metadata_value_string.equals(metadata_value_string)) { 126 continue; 127 } 128 97 appropriate_fileset_element = current_fileset_element; 98 break; 99 } 100 } 101 } 102 103 // If no appropriate FileSet element exists create a new one for this file 104 if (appropriate_fileset_element == null) { 105 System.err.println("No appropriate fileset element found..."); 106 appropriate_fileset_element = document.createElement(FILESET_ELEMENT); 107 108 Element new_filename_element = document.createElement(FILENAME_ELEMENT); 109 new_filename_element.appendChild(document.createTextNode(file_path_regexp)); 110 appropriate_fileset_element.appendChild(new_filename_element); 111 112 Element new_description_element = document.createElement(DESCRIPTION_ELEMENT); 113 appropriate_fileset_element.appendChild(new_description_element); 114 115 document.getDocumentElement().appendChild(appropriate_fileset_element); 116 } 117 118 // Add each of the metadata values to the FileSet's Description element 119 Element description_element = (Element) appropriate_fileset_element.getElementsByTagName(DESCRIPTION_ELEMENT).item(0); 120 for (int i = 0; i < metadata_values.size(); i++) { 121 MetadataValue metadata_value = (MetadataValue) metadata_values.get(i); 122 String metadata_element_name_full = metadata_value.getMetadataElement().getFullName(); 123 124 // Remove any characters that are invalid in XML 125 String metadata_value_string = XMLTools.removeInvalidCharacters(metadata_value.getFullValue()); 126 127 // Square brackets need to be escaped because they are a special character in Greenstone 128 metadata_value_string = metadata_value_string.replaceAll("\\[", "["); 129 metadata_value_string = metadata_value_string.replaceAll("\\]", "]"); 130 131 // Check if this piece of metadata has already been assigned to this FileSet element 132 boolean metadata_already_assigned = false; 133 NodeList metadata_elements_nodelist = description_element.getElementsByTagName(METADATA_ELEMENT); 134 for (int k = 0; k < metadata_elements_nodelist.getLength(); k++) { 135 Element current_metadata_element = (Element) metadata_elements_nodelist.item(k); 136 137 // Check if the metadata element name matches 138 String current_metadata_element_name_full = current_metadata_element.getAttribute("name"); 139 if (current_metadata_element_name_full.equals(metadata_element_name_full)) { 140 // Check if the metadata element value matches 141 String current_metadata_value_string = XMLTools.getElementTextValue(current_metadata_element); 142 if (current_metadata_value_string.equals(metadata_value_string)) { 129 143 // Metadata already assigned 130 144 metadata_already_assigned = true; 131 145 break; 132 146 } 133 134 // If the metadata has already been assigned to this FileSet, move onto the next 135 if (metadata_already_assigned) { 136 must_add_new_fileset_for_metadata = false; 137 break; 138 } 139 140 // Accumulating metadata: add at the end 141 if (metadata_value.isAccumulatingMetadata()) { 142 description_element.appendChild(new_metadata_element); 143 } 144 // Override metadata: add at the start (so it overrides inherited metadata without affecting other assigned metadata) 145 else { 146 description_element.insertBefore(new_metadata_element, description_element.getFirstChild()); 147 } 148 149 must_add_new_fileset_for_metadata = false; 150 break; 151 } 152 } 153 } 154 155 // If the metadata didn't apply to an existing FileSet, add a new FileSet element for this metadata 156 if (must_add_new_fileset_for_metadata) { 157 Element new_fileset_element = document.createElement(FILESET_ELEMENT); 158 159 Element new_filename_element = document.createElement(FILENAME_ELEMENT); 160 new_filename_element.appendChild(document.createTextNode(file_path_regexp)); 161 new_fileset_element.appendChild(new_filename_element); 162 163 // Append the new Metadata element to the Description element of this FileSet 164 Element new_description_element = document.createElement(DESCRIPTION_ELEMENT); 165 new_description_element.appendChild(new_metadata_element); 166 new_fileset_element.appendChild(new_description_element); 167 168 document.getDocumentElement().appendChild(new_fileset_element); 147 } 148 } 149 150 // If the piece of metadata hasn't already been assigned, add it now 151 if (!metadata_already_assigned) { 152 // Create a new Metadata element to record this metadata 153 Element new_metadata_element = document.createElement(METADATA_ELEMENT); 154 new_metadata_element.setAttribute("name", metadata_value.getMetadataElement().getFullName()); 155 new_metadata_element.setAttribute("mode", (metadata_value.isAccumulatingMetadata() ? "accumulate" : "override")); 156 new_metadata_element.appendChild(document.createTextNode(metadata_value_string)); 157 158 // Accumulating metadata: add at the end 159 if (metadata_value.isAccumulatingMetadata()) { 160 description_element.appendChild(new_metadata_element); 161 } 162 // Override metadata: add at the start (so it overrides inherited metadata without affecting other assigned metadata) 163 else { 164 description_element.insertBefore(new_metadata_element, description_element.getFirstChild()); 165 } 166 } 169 167 } 170 168 … … 292 290 293 291 294 public void removeMetadata(File file, MetadataValue metadata_value)292 public void removeMetadata(File file, ArrayList metadata_values) 295 293 { 296 294 // Parse the metadata.xml file … … 302 300 303 301 // Determine the file's path relative to the location of the metadata.xml file 304 File metadata_xml_file_directory = getParentFile();305 String file_relative_path = file.getAbsolutePath().substring(metadata_xml_file_directory .getAbsolutePath().length());302 String metadata_xml_file_directory_path = getParentFile().getAbsolutePath(); 303 String file_relative_path = file.getAbsolutePath().substring(metadata_xml_file_directory_path.length()); 306 304 if (file_relative_path.startsWith(File.separator)) { 307 305 file_relative_path = file_relative_path.substring(File.separator.length()); … … 319 317 } 320 318 321 // Remove any characters that are invalid in XML 322 String metadata_value_string = XMLTools.removeInvalidCharacters(metadata_value.getFullValue()); 323 324 // Square brackets need to be escaped because they are a special character in Greenstone 325 metadata_value_string = metadata_value_string.replaceAll("\\[", "["); 326 metadata_value_string = metadata_value_string.replaceAll("\\]", "]"); 319 // Find the appropriate FileSet element for this file 320 Element appropriate_fileset_element = null; 327 321 328 322 // Read all the FileSet elements in the file … … 330 324 for (int i = 0; i < fileset_elements_nodelist.getLength(); i++) { 331 325 Element current_fileset_element = (Element) fileset_elements_nodelist.item(i); 332 boolean current_fileset_matches = false;333 326 334 327 // Check the FileName elements of the FileSet to see if we have a match … … 338 331 String current_filename_element_value = XMLTools.getElementTextValue(current_filename_element); 339 332 340 // Only exact matches can be e dited333 // Only exact matches can be extended with new metadata 341 334 if (current_filename_element_value.equals(file_path_regexp)) { 342 current_fileset_matches = true;335 appropriate_fileset_element = current_fileset_element; 343 336 break; 344 337 } 345 338 } 346 347 // The FileSet doesn't apply, so move onto the next one 348 if (current_fileset_matches == false) { 349 continue; 350 } 339 } 340 341 // If no appropriate FileSet element exists we have no idea where the metadata is 342 if (appropriate_fileset_element == null) { 343 System.err.println("Error: No appropriate FileSet element found when removing metadata..."); 344 return; 345 } 346 347 // Remove each of the metadata values from the FileSet's Description element 348 Element description_element = (Element) appropriate_fileset_element.getElementsByTagName(DESCRIPTION_ELEMENT).item(0); 349 for (int i = 0; i < metadata_values.size(); i++) { 350 MetadataValue metadata_value = (MetadataValue) metadata_values.get(i); 351 352 // Remove any characters that are invalid in XML 353 String metadata_value_string = XMLTools.removeInvalidCharacters(metadata_value.getFullValue()); 354 355 // Square brackets need to be escaped because they are a special character in Greenstone 356 metadata_value_string = metadata_value_string.replaceAll("\\[", "["); 357 metadata_value_string = metadata_value_string.replaceAll("\\]", "]"); 351 358 352 359 // Find the Metadata element to delete from the fileset 353 360 String metadata_element_name_full = metadata_value.getMetadataElement().getFullName(); 354 NodeList metadata_elements_nodelist = current_fileset_element.getElementsByTagName(METADATA_ELEMENT);361 NodeList metadata_elements_nodelist = appropriate_fileset_element.getElementsByTagName(METADATA_ELEMENT); 355 362 for (int k = 0; k < metadata_elements_nodelist.getLength(); k++) { 356 363 Element current_metadata_element = (Element) metadata_elements_nodelist.item(k); … … 358 365 // Check the metadata element name matches 359 366 String current_metadata_element_name_full = current_metadata_element.getAttribute("name"); 360 if (!current_metadata_element_name_full.equals(metadata_element_name_full)) { 361 continue; 362 } 363 364 // Check the metadata element value matches 365 String current_metadata_value_string = XMLTools.getElementTextValue(current_metadata_element); 366 if (!current_metadata_value_string.equals(metadata_value_string)) { 367 continue; 368 } 369 370 // Remove this Metadata element 371 current_metadata_element.getParentNode().removeChild(current_metadata_element); 367 if (current_metadata_element_name_full.equals(metadata_element_name_full)) { 368 // Check the metadata element value matches 369 String current_metadata_value_string = XMLTools.getElementTextValue(current_metadata_element); 370 if (current_metadata_value_string.equals(metadata_value_string)) { 371 // Remove this Metadata element 372 current_metadata_element.getParentNode().removeChild(current_metadata_element); 373 break; 374 } 375 } 372 376 } 373 377 } … … 388 392 389 393 // Determine the file's path relative to the location of the metadata.xml file 390 File metadata_xml_file_directory = getParentFile();391 String file_relative_path = file.getAbsolutePath().substring(metadata_xml_file_directory .getAbsolutePath().length());394 String metadata_xml_file_directory_path = getParentFile().getAbsolutePath(); 395 String file_relative_path = file.getAbsolutePath().substring(metadata_xml_file_directory_path.length()); 392 396 if (file_relative_path.startsWith(File.separator)) { 393 397 file_relative_path = file_relative_path.substring(File.separator.length()); -
trunk/gli/src/org/greenstone/gatherer/metadata/MetadataXMLFileManager.java
r10392 r10479 47 47 48 48 49 static public void addMetadata(CollectionTreeNode file_node, MetadataValue metadata_value)50 { 51 addMetadata(new CollectionTreeNode[] { file_node }, metadata_value );49 static public void addMetadata(CollectionTreeNode file_node, ArrayList metadata_values) 50 { 51 addMetadata(new CollectionTreeNode[] { file_node }, metadata_values); 52 52 } 53 53 … … 55 55 static public void addMetadata(CollectionTreeNode[] file_nodes, MetadataValue metadata_value) 56 56 { 57 ArrayList metadata_values = new ArrayList(); 58 metadata_values.add(metadata_value); 59 addMetadata(file_nodes, metadata_values); 60 } 61 62 63 static public void addMetadata(CollectionTreeNode[] file_nodes, ArrayList metadata_values) 64 { 65 // Check the list of metadata values is non-empty 66 if (metadata_values.isEmpty()) { 67 return; 68 } 69 57 70 // Add the metadata to each file node in turn 58 71 for (int i = 0; i < file_nodes.length; i++) { … … 69 82 if (current_file_directory.getAbsolutePath().equals(metadata_xml_file.getParentFile().getAbsolutePath())) { 70 83 applicable_metadata_xml_file_found = true; 71 metadata_xml_file.addMetadata(current_file, metadata_value );84 metadata_xml_file.addMetadata(current_file, metadata_values); 72 85 if (!modified_metadata_xml_files.contains(metadata_xml_file)) { 73 86 modified_metadata_xml_files.add(metadata_xml_file); … … 86 99 87 100 // ...and add the metadata 88 new_metadata_xml_file.addMetadata(current_file, metadata_value );101 new_metadata_xml_file.addMetadata(current_file, metadata_values); 89 102 if (!modified_metadata_xml_files.contains(new_metadata_xml_file)) { 90 103 modified_metadata_xml_files.add(new_metadata_xml_file); … … 258 271 259 272 260 static public void removeMetadata(CollectionTreeNode file_node, MetadataValue metadata_value)261 { 262 removeMetadata(new CollectionTreeNode[] { file_node }, metadata_value );273 static public void removeMetadata(CollectionTreeNode file_node, ArrayList metadata_values) 274 { 275 removeMetadata(new CollectionTreeNode[] { file_node }, metadata_values); 263 276 } 264 277 … … 266 279 static public void removeMetadata(CollectionTreeNode[] file_nodes, MetadataValue metadata_value) 267 280 { 281 ArrayList metadata_values = new ArrayList(); 282 metadata_values.add(metadata_value); 283 removeMetadata(file_nodes, metadata_values); 284 } 285 286 287 static public void removeMetadata(CollectionTreeNode[] file_nodes, ArrayList metadata_values) 288 { 289 // Check the list of metadata values is non-empty 290 if (metadata_values.isEmpty()) { 291 return; 292 } 293 268 294 // Remove the metadata from each file node in turn 269 295 for (int i = 0; i < file_nodes.length; i++) { … … 278 304 // This metadata.xml file is only potentially applicable if it is above or at the same level as the file 279 305 if (current_file_directory.getAbsolutePath().startsWith(metadata_xml_file.getParentFile().getAbsolutePath())) { 280 metadata_xml_file.removeMetadata(current_file, metadata_value );306 metadata_xml_file.removeMetadata(current_file, metadata_values); 281 307 if (!modified_metadata_xml_files.contains(metadata_xml_file)) { 282 308 modified_metadata_xml_files.add(metadata_xml_file);
Note:
See TracChangeset
for help on using the changeset viewer.