Changeset 8128 for trunk/gli


Ignore:
Timestamp:
2004-09-21T11:19:32+12:00 (20 years ago)
Author:
mdewsnip
Message:

More work on opening legacy collections and dealing with non-namespaced metadata.

Location:
trunk/gli/src/org/greenstone/gatherer/metadata
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/gli/src/org/greenstone/gatherer/metadata/MetadataXMLFile.java

    r8127 r8128  
    2424    super(metadata_xml_file_path);
    2525
     26    boolean file_changed = false;
     27
    2628    // Parse the metadata.xml file
    2729    Document document = XMLTools.parseXMLFile(this);
     
    3739        String metadata_element_name_full = current_metadata_element.getAttribute("name");
    3840
     41        // If the metadata element is in an unloaded metadata set give the option of mapping it into a loaded set
    3942        String metadata_set_namespace = MetadataTools.getMetadataSetNamespace(metadata_element_name_full);
    4043        MetadataSet metadata_set = MetadataSetManager.getMetadataSet(metadata_set_namespace);
    4144        if (metadata_set == null) {
    4245        // Check if we have an import mapping for this metadata element
    43         String mapped_metadata_element_name_full = ProfileXMLFileManager.getMetadataElementFor(metadata_element_name_full);
    44         System.err.println("  Mapped " + metadata_element_name_full + " to: " + mapped_metadata_element_name_full);
    45         if (mapped_metadata_element_name_full == null) {
    46             new MetadataImportMappingPrompt(metadata_element_name_full);
    47         }
    48 
    49         // Skip this element if the metadata set isn't loaded
    50         continue;
     46        String target_metadata_element_name_full = ProfileXMLFileManager.getMetadataElementFor(metadata_element_name_full);
     47        if (target_metadata_element_name_full == null) {
     48            // No, so ask the user how they want to deal with this element
     49            MetadataImportMappingPrompt metadata_import_mapping_prompt = new MetadataImportMappingPrompt(metadata_element_name_full);
     50            int result = metadata_import_mapping_prompt.getResult();
     51
     52            // !!! Add the element into an existing metadata set
     53            if (result == MetadataImportMappingPrompt.ADD_BUTTON_PRESSED) {
     54            MetadataSet target_metadata_set = metadata_import_mapping_prompt.getSelectedMetadataSet();
     55            System.err.println("Added to " + target_metadata_set);
     56            // target_metadata_element_name_full =
     57            }
     58
     59            // Map the element to an element in an existing metadata set
     60            if (result == MetadataImportMappingPrompt.MAP_BUTTON_PRESSED) {
     61            MetadataElement target_metadata_element = metadata_import_mapping_prompt.getSelectedMetadataElement();
     62            target_metadata_element_name_full = target_metadata_element.getFullName();
     63            }
     64
     65            // Ignore the element
     66            if (result == MetadataImportMappingPrompt.IGNORE_BUTTON_PRESSED) {
     67            target_metadata_element_name_full = "";
     68            }
     69
     70            // Store this import mapping for future elements with the same name
     71            ProfileXMLFileManager.mapElement(metadata_element_name_full, target_metadata_element_name_full);
     72        }
     73
     74        System.err.println(metadata_element_name_full + " -> " + target_metadata_element_name_full);
     75
     76        // Skip this element if we still don't have a loaded element for it
     77        if (target_metadata_element_name_full == null || target_metadata_element_name_full.equals("")) {
     78            continue;
     79        }
     80
     81        // Update the metadata.xml file to have the new element name
     82        current_metadata_element.setAttribute("name", target_metadata_element_name_full);
     83        file_changed = true;
     84
     85        metadata_element_name_full = target_metadata_element_name_full;
     86        metadata_set_namespace = MetadataTools.getMetadataSetNamespace(metadata_element_name_full);
     87        metadata_set = MetadataSetManager.getMetadataSet(metadata_set_namespace);
    5188        }
    5289
     
    5693        String current_metadata_element_value = XMLTools.getElementTextValue(current_metadata_element);
    5794        metadata_element.addMetadataValue(current_metadata_element_value);
     95    }
     96
     97    // Rewrite the metadata.xml file if it has changed
     98    if (file_changed) {
     99        XMLTools.writeXMLFile(this, document);
    58100    }
    59101    }
  • trunk/gli/src/org/greenstone/gatherer/metadata/ProfileXMLFile.java

    r8127 r8128  
    33
    44import java.io.*;
    5 import java.util.*;
    65import org.greenstone.gatherer.util.XMLTools;
    76import org.w3c.dom.*;
     
    1211    extends File
    1312{
    14     private HashMap metadata_import_mapping = new HashMap();
    15 
    16 
    1713    public ProfileXMLFile(String profile_xml_file_path)
    1814    {
    1915    super(profile_xml_file_path);
     16    }
    2017
     18
     19    public String getMetadataElementFor(String source_metadata_element_name_full)
     20    {
    2121    // Parse the profile.xml file
    22     System.err.println("Loading profile.xml file " + profile_xml_file_path + "...");
     22    Document document = XMLTools.parseXMLFile(this);
     23    if (document == null) {
     24        System.err.println("Error: Could not parse profile.xml file " + getAbsolutePath());
     25        return null;
     26    }
     27
     28    // Read all the Action elements in the file
     29    NodeList action_elements_nodelist = document.getElementsByTagName("Action");
     30    for (int i = 0; i < action_elements_nodelist.getLength(); i++) {
     31        Element current_action_element = (Element) action_elements_nodelist.item(i);
     32
     33        // Does this action map the desired element?
     34        if (current_action_element.getAttribute("source").equals(source_metadata_element_name_full)) {
     35        return current_action_element.getAttribute("target");
     36        }
     37    }
     38
     39    // No import mapping for this element
     40    return null;
     41    }
     42
     43
     44    public void mapElement(String source_metadata_element_name_full, String target_metadata_element_name_full)
     45    {
     46    // Parse the profile.xml file
    2347    Document document = XMLTools.parseXMLFile(this);
    2448    if (document == null) {
     
    2650        return;
    2751    }
    28     }
    2952
     53    // Create a new Action element to record this mapping
     54    Element new_action_element = document.createElement("Action");
     55    new_action_element.setAttribute("source", source_metadata_element_name_full);
     56    new_action_element.setAttribute("target", target_metadata_element_name_full);
     57    document.getDocumentElement().appendChild(new_action_element);
    3058
    31     public String getMetadataElementFor(String metadata_element_name_full)
    32     {
    33     return (String) metadata_import_mapping.get(metadata_element_name_full);
     59    // Rewrite the profile.xml file
     60    XMLTools.writeXMLFile(this, document);
    3461    }
    3562}
  • trunk/gli/src/org/greenstone/gatherer/metadata/ProfileXMLFileManager.java

    r8127 r8128  
    1313
    1414
    15     static public ProfileXMLFile loadProfileXMLFile(File directory)
     15    static public void loadProfileXMLFile(File directory)
    1616    {
    1717    // Make sure the directory (metadata) exists
     
    2727
    2828    profile_xml_file = new ProfileXMLFile(profile_xml_file_file.getAbsolutePath());
    29     return profile_xml_file;
    3029    }
    3130
     
    3534    return profile_xml_file.getMetadataElementFor(metadata_element_name_full);
    3635    }
     36
     37
     38    static public void mapElement(String metadata_element_name_full, String target_metadata_element_name_full)
     39    {
     40    profile_xml_file.mapElement(metadata_element_name_full, target_metadata_element_name_full);
     41    }
    3742}
Note: See TracChangeset for help on using the changeset viewer.