- Timestamp:
- 2004-09-23T14:42:33+12:00 (20 years ago)
- Location:
- trunk/gli/src/org/greenstone/gatherer/metadata
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/gli/src/org/greenstone/gatherer/metadata/DocXMLFile.java
r8134 r8140 24 24 { 25 25 super(doc_xml_file_path); 26 26 } 27 28 29 public ArrayList getMetadataExtractedFromFile(File file) 30 { 31 // Build up a list of metadata extracted from this file 32 ArrayList metadata_values = new ArrayList(); 33 34 String file_relative_path = file.getAbsolutePath(); 35 int import_index = file_relative_path.indexOf("import"); 36 if (import_index != -1) { 37 file_relative_path = file_relative_path.substring(import_index + "import".length() + 1); 38 } 39 40 // Check whether this doc.xml file contains extracted metadata for the specified file 41 boolean contains_extracted_metadata_for_file = false; 42 for (int i = 0; i < files_in_doc_xml_file.size(); i++) { 43 if (file_relative_path.equals(files_in_doc_xml_file.get(i))) { 44 contains_extracted_metadata_for_file = true; 45 break; 46 } 47 } 48 49 // ...it doesn't 50 if (!contains_extracted_metadata_for_file) { 51 return metadata_values; 52 } 53 54 // Parse the doc.xml file 55 System.err.println("Applicable doc.xml file: " + this); 56 Document document = XMLTools.parseXMLFile(this); 57 if (document == null) { 58 System.err.println("Error: Could not parse doc.xml file " + getAbsolutePath()); 59 return metadata_values; 60 } 61 62 MetadataSet extracted_metadata_set = MetadataSetManager.getMetadataSet(MetadataSetManager.EXTRACTED_METADATA_NAMESPACE); 63 64 // Read all the Archive elements in the file 65 NodeList archive_elements_nodelist = document.getElementsByTagName(ARCHIVE_ELEMENT); 66 for (int i = 0; i < archive_elements_nodelist.getLength(); i++) { 67 Element current_archive_element = (Element) archive_elements_nodelist.item(i); 68 69 // Read the child Section elements of the archive (but not all descendants) 70 ArrayList child_section_elements = XMLTools.getChildElementsByTagName(current_archive_element, SECTION_ELEMENT); 71 for (int j = 0; j < child_section_elements.size(); j++) { 72 Element current_section_element = (Element) child_section_elements.get(j); 73 74 // Read the Description elements of this section only (not child sections as well) 75 ArrayList child_description_elements = XMLTools.getChildElementsByTagName(current_section_element, DESCRIPTION_ELEMENT); 76 for (int k = 0; k < child_description_elements.size(); k++) { 77 Element current_description_element = (Element) child_description_elements.get(k); 78 79 // Read all the Metadata elements in this description element 80 NodeList metadata_elements_nodelist = current_description_element.getElementsByTagName(METADATA_ELEMENT); 81 for (int l = 0; l < metadata_elements_nodelist.getLength(); l++) { 82 Element current_metadata_element = (Element) metadata_elements_nodelist.item(l); 83 String metadata_element_name_full = current_metadata_element.getAttribute("name"); 84 85 // If the metadata has a namespace it isn't extracted metadata, so we're not interested 86 String metadata_set_namespace = MetadataTools.getMetadataSetNamespace(metadata_element_name_full); 87 if (!metadata_set_namespace.equals("")) { 88 continue; 89 } 90 91 // Extracted metadata! 92 String metadata_element_name = metadata_element_name_full; 93 94 // Ignore lower-case metadata elements (gsdlsourcefilename, gsdlassocfile etc.) 95 // and those starting with '/' (/srclink) 96 char first_character = metadata_element_name.charAt(0); 97 if (Character.isLowerCase(first_character) || first_character == '/') { 98 continue; 99 } 100 101 MetadataElement metadata_element = extracted_metadata_set.getMetadataElement(metadata_element_name); 102 103 // Value trees are not stored for extracted metadata, so create a new value tree node now 104 String current_metadata_element_value = XMLTools.getElementTextValue(current_metadata_element); 105 metadata_element.addMetadataValue(current_metadata_element_value); 106 MetadataValueTreeNode metadata_value_tree_node = metadata_element.getMetadataValueTreeNode(current_metadata_element_value); 107 108 // Add the new metadata value to the list 109 MetadataValue metadata_value = new MetadataValue(metadata_element, metadata_value_tree_node); 110 metadata_values.add(metadata_value); 111 } 112 } 113 } 114 } 115 116 return metadata_values; 117 } 118 119 120 public void skimFile() 121 { 27 122 MetadataSet extracted_metadata_set = MetadataSetManager.getMetadataSet(MetadataSetManager.EXTRACTED_METADATA_NAMESPACE); 28 123 … … 106 201 } 107 202 } 108 109 110 public ArrayList getMetadataExtractedFromFile(File file)111 {112 // Build up a list of metadata extracted from this file113 ArrayList metadata_values = new ArrayList();114 115 String file_relative_path = file.getAbsolutePath();116 int import_index = file_relative_path.indexOf("import");117 if (import_index != -1) {118 file_relative_path = file_relative_path.substring(import_index + "import".length() + 1);119 }120 121 // Check whether this doc.xml file contains extracted metadata for the specified file122 boolean contains_extracted_metadata_for_file = false;123 for (int i = 0; i < files_in_doc_xml_file.size(); i++) {124 if (file_relative_path.equals(files_in_doc_xml_file.get(i))) {125 contains_extracted_metadata_for_file = true;126 break;127 }128 }129 130 // ...it doesn't131 if (!contains_extracted_metadata_for_file) {132 return metadata_values;133 }134 135 // Parse the doc.xml file136 System.err.println("Applicable doc.xml file: " + this);137 Document document = XMLTools.parseXMLFile(this);138 if (document == null) {139 System.err.println("Error: Could not parse doc.xml file " + getAbsolutePath());140 return metadata_values;141 }142 143 MetadataSet extracted_metadata_set = MetadataSetManager.getMetadataSet(MetadataSetManager.EXTRACTED_METADATA_NAMESPACE);144 145 // Read all the Archive elements in the file146 NodeList archive_elements_nodelist = document.getElementsByTagName(ARCHIVE_ELEMENT);147 for (int i = 0; i < archive_elements_nodelist.getLength(); i++) {148 Element current_archive_element = (Element) archive_elements_nodelist.item(i);149 150 // Read the child Section elements of the archive (but not all descendants)151 ArrayList child_section_elements = XMLTools.getChildElementsByTagName(current_archive_element, SECTION_ELEMENT);152 for (int j = 0; j < child_section_elements.size(); j++) {153 Element current_section_element = (Element) child_section_elements.get(j);154 155 // Read the Description elements of this section only (not child sections as well)156 ArrayList child_description_elements = XMLTools.getChildElementsByTagName(current_section_element, DESCRIPTION_ELEMENT);157 for (int k = 0; k < child_description_elements.size(); k++) {158 Element current_description_element = (Element) child_description_elements.get(k);159 160 // Read all the Metadata elements in this description element161 NodeList metadata_elements_nodelist = current_description_element.getElementsByTagName(METADATA_ELEMENT);162 for (int l = 0; l < metadata_elements_nodelist.getLength(); l++) {163 Element current_metadata_element = (Element) metadata_elements_nodelist.item(l);164 String metadata_element_name_full = current_metadata_element.getAttribute("name");165 166 // If the metadata has a namespace it isn't extracted metadata, so we're not interested167 String metadata_set_namespace = MetadataTools.getMetadataSetNamespace(metadata_element_name_full);168 if (!metadata_set_namespace.equals("")) {169 continue;170 }171 172 // Extracted metadata!173 String metadata_element_name = metadata_element_name_full;174 175 // Ignore lower-case metadata elements (gsdlsourcefilename, gsdlassocfile etc.)176 // and those starting with '/' (/srclink)177 char first_character = metadata_element_name.charAt(0);178 if (Character.isLowerCase(first_character) || first_character == '/') {179 continue;180 }181 182 MetadataElement metadata_element = extracted_metadata_set.getMetadataElement(metadata_element_name);183 184 // Value trees are not stored for extracted metadata, so create a new value tree node now185 String current_metadata_element_value = XMLTools.getElementTextValue(current_metadata_element);186 metadata_element.addMetadataValue(current_metadata_element_value);187 MetadataValueTreeNode metadata_value_tree_node = metadata_element.getMetadataValueTreeNode(current_metadata_element_value);188 189 // Add the new metadata value to the list190 MetadataValue metadata_value = new MetadataValue(metadata_element, metadata_value_tree_node);191 metadata_values.add(metadata_value);192 }193 }194 }195 }196 197 return metadata_values;198 }199 203 } -
trunk/gli/src/org/greenstone/gatherer/metadata/DocXMLFileManager.java
r8013 r8140 57 57 { 58 58 DocXMLFile doc_xml_file = new DocXMLFile(doc_xml_file_file.getAbsolutePath()); 59 doc_xml_file.skimFile(); 59 60 doc_xml_files.add(doc_xml_file); 60 61 } -
trunk/gli/src/org/greenstone/gatherer/metadata/MetadataSetManager.java
r8129 r8140 4 4 import java.io.*; 5 5 import java.util.*; 6 import org.greenstone.gatherer.gui.MetadataImportMappingPrompt; 6 7 7 8 … … 119 120 120 121 122 static public String mapUnloadedMetadataElement(String metadata_element_name) 123 { 124 // Check if we have an import mapping for this metadata element 125 String target_metadata_element_name_full = ProfileXMLFileManager.getMetadataElementFor(metadata_element_name); 126 if (target_metadata_element_name_full != null) { 127 // Yes, so return it 128 return target_metadata_element_name_full; 129 } 130 131 // If there are no metadata sets loaded then there is nothing to map the element into 132 if (metadata_sets.size() <= 1) { 133 return null; 134 } 135 136 // Ask the user how they want to deal with this element 137 MetadataImportMappingPrompt metadata_import_mapping_prompt = new MetadataImportMappingPrompt(metadata_element_name); 138 int result = metadata_import_mapping_prompt.getResult(); 139 140 // !!! Add the element into an existing metadata set 141 if (result == MetadataImportMappingPrompt.ADD_BUTTON_PRESSED) { 142 MetadataSet target_metadata_set = metadata_import_mapping_prompt.getSelectedMetadataSet(); 143 System.err.println("Added to " + target_metadata_set); 144 // target_metadata_element_name_full = 145 } 146 147 // Replace the element with an element in an existing metadata set 148 if (result == MetadataImportMappingPrompt.REPLACE_BUTTON_PRESSED) { 149 MetadataElement target_metadata_element = metadata_import_mapping_prompt.getSelectedMetadataElement(); 150 target_metadata_element_name_full = target_metadata_element.getFullName(); 151 } 152 153 // Ignore the element 154 if (result == MetadataImportMappingPrompt.IGNORE_BUTTON_PRESSED) { 155 target_metadata_element_name_full = ""; 156 } 157 158 // Store this import mapping for future elements with the same name 159 ProfileXMLFileManager.mapElement(metadata_element_name, target_metadata_element_name_full); 160 161 return target_metadata_element_name_full; 162 } 163 164 121 165 static public void unloadMetadataSet(MetadataSet metadata_set) 122 166 { -
trunk/gli/src/org/greenstone/gatherer/metadata/MetadataXMLFile.java
r8137 r8140 4 4 import java.io.*; 5 5 import java.util.*; 6 import org.greenstone.gatherer.gui.MetadataImportMappingPrompt;7 6 import org.greenstone.gatherer.util.XMLTools; 8 7 import org.w3c.dom.*; … … 23 22 { 24 23 super(metadata_xml_file_path); 25 26 boolean file_changed = false;27 28 // Parse the metadata.xml file29 System.err.println("Loading metadata.xml file " + metadata_xml_file_path + "...");30 Document document = XMLTools.parseXMLFile(this);31 if (document == null) {32 System.err.println("Error: Could not parse metadata.xml file " + getAbsolutePath());33 return;34 }35 36 // Read all the Metadata elements in the file37 NodeList metadata_elements_nodelist = document.getElementsByTagName(METADATA_ELEMENT);38 for (int i = 0; i < metadata_elements_nodelist.getLength(); i++) {39 Element current_metadata_element = (Element) metadata_elements_nodelist.item(i);40 String metadata_element_name_full = current_metadata_element.getAttribute("name");41 42 // If the metadata element is in an unloaded metadata set give the option of mapping it into a loaded set43 String metadata_set_namespace = MetadataTools.getMetadataSetNamespace(metadata_element_name_full);44 MetadataSet metadata_set = MetadataSetManager.getMetadataSet(metadata_set_namespace);45 if (metadata_set == null) {46 // Check if we have an import mapping for this metadata element47 String target_metadata_element_name_full = ProfileXMLFileManager.getMetadataElementFor(metadata_element_name_full);48 if (target_metadata_element_name_full == null && MetadataSetManager.getMetadataSets().size() > 1) {49 // No, so ask the user how they want to deal with this element50 MetadataImportMappingPrompt metadata_import_mapping_prompt = new MetadataImportMappingPrompt(metadata_element_name_full);51 int result = metadata_import_mapping_prompt.getResult();52 53 // !!! Add the element into an existing metadata set54 if (result == MetadataImportMappingPrompt.ADD_BUTTON_PRESSED) {55 MetadataSet target_metadata_set = metadata_import_mapping_prompt.getSelectedMetadataSet();56 System.err.println("Added to " + target_metadata_set);57 // target_metadata_element_name_full =58 }59 60 // Replace the element with an element in an existing metadata set61 if (result == MetadataImportMappingPrompt.REPLACE_BUTTON_PRESSED) {62 MetadataElement target_metadata_element = metadata_import_mapping_prompt.getSelectedMetadataElement();63 target_metadata_element_name_full = target_metadata_element.getFullName();64 }65 66 // Ignore the element67 if (result == MetadataImportMappingPrompt.IGNORE_BUTTON_PRESSED) {68 target_metadata_element_name_full = "";69 }70 71 // Store this import mapping for future elements with the same name72 ProfileXMLFileManager.mapElement(metadata_element_name_full, target_metadata_element_name_full);73 }74 75 // System.err.println(metadata_element_name_full + " -> " + target_metadata_element_name_full);76 77 // Skip this element if we still don't have a loaded element for it78 if (target_metadata_element_name_full == null || target_metadata_element_name_full.equals("")) {79 continue;80 }81 82 // Update the metadata.xml file to have the new element name83 current_metadata_element.setAttribute("name", target_metadata_element_name_full);84 file_changed = true;85 86 metadata_element_name_full = target_metadata_element_name_full;87 metadata_set_namespace = MetadataTools.getMetadataSetNamespace(metadata_element_name_full);88 metadata_set = MetadataSetManager.getMetadataSet(metadata_set_namespace);89 }90 91 String metadata_element_name = MetadataTools.getMetadataElementName(metadata_element_name_full);92 MetadataElement metadata_element = metadata_set.getMetadataElement(metadata_element_name);93 94 String current_metadata_element_value = XMLTools.getElementTextValue(current_metadata_element);95 metadata_element.addMetadataValue(current_metadata_element_value);96 }97 98 // Rewrite the metadata.xml file if it has changed99 if (file_changed) {100 XMLTools.writeXMLFile(this, document);101 }102 24 } 103 25 … … 248 170 for (int k = 0; k < metadata_elements_nodelist.getLength(); k++) { 249 171 Element current_metadata_element = (Element) metadata_elements_nodelist.item(k); 250 String current_metadata_element_name_full = current_metadata_element.getAttribute("name");251 252 String metadata_set_namespace = MetadataTools.getMetadataSetNamespace( current_metadata_element_name_full);172 String metadata_element_name_full = current_metadata_element.getAttribute("name"); 173 174 String metadata_set_namespace = MetadataTools.getMetadataSetNamespace(metadata_element_name_full); 253 175 MetadataSet metadata_set = MetadataSetManager.getMetadataSet(metadata_set_namespace); 254 176 255 // If the metadata set isn't loaded , we're not interested in the metadata177 // If the metadata set isn't loaded give the option of mapping the element into a loaded set 256 178 if (metadata_set == null) { 257 continue; 258 } 259 260 String metadata_element_name = MetadataTools.getMetadataElementName(current_metadata_element_name_full); 179 String target_metadata_element_name_full = MetadataSetManager.mapUnloadedMetadataElement(metadata_element_name_full); 180 if (target_metadata_element_name_full == null || target_metadata_element_name_full.equals("")) { 181 // Skip this element if we still don't have a loaded element for it 182 continue; 183 } 184 185 metadata_element_name_full = target_metadata_element_name_full; 186 metadata_set_namespace = MetadataTools.getMetadataSetNamespace(metadata_element_name_full); 187 metadata_set = MetadataSetManager.getMetadataSet(metadata_set_namespace); 188 } 189 190 String metadata_element_name = MetadataTools.getMetadataElementName(metadata_element_name_full); 261 191 MetadataElement metadata_element = metadata_set.getMetadataElement(metadata_element_name); 262 192 … … 267 197 268 198 // Square brackets need to be escaped because they are a special character in Greenstone 269 String current_metadata_element_value = XMLTools.getElementTextValue(current_metadata_element);270 current_metadata_element_value = current_metadata_element_value.replaceAll("[", "[");271 current_metadata_element_value = current_metadata_element_value.replaceAll("]", "]");272 273 MetadataValueTreeNode metadata_value_tree_node = metadata_element.getMetadataValueTreeNode( current_metadata_element_value);274 275 // If there is no metadata value tree node for this value, something bad has happened199 String metadata_element_value = XMLTools.getElementTextValue(current_metadata_element); 200 metadata_element_value = metadata_element_value.replaceAll("[", "["); 201 metadata_element_value = metadata_element_value.replaceAll("]", "]"); 202 203 MetadataValueTreeNode metadata_value_tree_node = metadata_element.getMetadataValueTreeNode(metadata_element_value); 204 205 // If there is no metadata value tree node for this value, create it 276 206 if (metadata_value_tree_node == null) { 277 System.err.println("Error: Could not find value tree node for metadata value \"" + current_metadata_element_value + "\""); 278 continue; 207 System.err.println("Note: No value tree node for metadata value \"" + metadata_element_value + "\""); 208 metadata_element.addMetadataValue(metadata_element_value); 209 metadata_value_tree_node = metadata_element.getMetadataValueTreeNode(metadata_element_value); 279 210 } 280 211 … … 369 300 XMLTools.writeXMLFile(this, document); 370 301 } 302 303 304 public void skimFile() 305 { 306 boolean file_changed = false; 307 308 // Parse the metadata.xml file 309 System.err.println("Skimming metadata.xml file " + this + "..."); 310 Document document = XMLTools.parseXMLFile(this); 311 if (document == null) { 312 System.err.println("Error: Could not parse metadata.xml file " + getAbsolutePath()); 313 return; 314 } 315 316 // Read all the Metadata elements in the file 317 NodeList metadata_elements_nodelist = document.getElementsByTagName(METADATA_ELEMENT); 318 for (int i = 0; i < metadata_elements_nodelist.getLength(); i++) { 319 Element current_metadata_element = (Element) metadata_elements_nodelist.item(i); 320 String metadata_element_name_full = current_metadata_element.getAttribute("name"); 321 322 String metadata_set_namespace = MetadataTools.getMetadataSetNamespace(metadata_element_name_full); 323 MetadataSet metadata_set = MetadataSetManager.getMetadataSet(metadata_set_namespace); 324 325 // If the metadata set isn't loaded give the option of mapping the element into a loaded set 326 if (metadata_set == null) { 327 String target_metadata_element_name_full = MetadataSetManager.mapUnloadedMetadataElement(metadata_element_name_full); 328 if (target_metadata_element_name_full == null || target_metadata_element_name_full.equals("")) { 329 // Skip this element if we still don't have a loaded element for it 330 continue; 331 } 332 333 // Update the metadata.xml file to have the new element name 334 current_metadata_element.setAttribute("name", target_metadata_element_name_full); 335 file_changed = true; 336 337 metadata_element_name_full = target_metadata_element_name_full; 338 metadata_set_namespace = MetadataTools.getMetadataSetNamespace(metadata_element_name_full); 339 metadata_set = MetadataSetManager.getMetadataSet(metadata_set_namespace); 340 } 341 342 String metadata_element_name = MetadataTools.getMetadataElementName(metadata_element_name_full); 343 MetadataElement metadata_element = metadata_set.getMetadataElement(metadata_element_name); 344 345 String metadata_element_value = XMLTools.getElementTextValue(current_metadata_element); 346 metadata_element.addMetadataValue(metadata_element_value); 347 } 348 349 // Rewrite the metadata.xml file if it has changed 350 if (file_changed) { 351 XMLTools.writeXMLFile(this, document); 352 } 353 } 371 354 } -
trunk/gli/src/org/greenstone/gatherer/metadata/MetadataXMLFileManager.java
r8137 r8140 79 79 File child_file = directory_files[i]; 80 80 if (!child_file.isDirectory() && child_file.getName().equals("metadata.xml")) { 81 System.err.println("Found: " + child_file);82 applicable_metadata_xml_files.add( new MetadataXMLFile(child_file.getAbsolutePath()));81 // It is very important that shallower files come before deeper ones 82 applicable_metadata_xml_files.add(0, new MetadataXMLFile(child_file.getAbsolutePath())); 83 83 } 84 84 } … … 195 195 { 196 196 MetadataXMLFile metadata_xml_file = new MetadataXMLFile(metadata_xml_file_file.getAbsolutePath()); 197 metadata_xml_file.skimFile(); 197 198 metadata_xml_files.add(metadata_xml_file); 198 199 return metadata_xml_file;
Note:
See TracChangeset
for help on using the changeset viewer.