Changeset 8711


Ignore:
Timestamp:
2004-11-30T16:50:25+13:00 (19 years ago)
Author:
mdewsnip
Message:

Prevented assigning the same piece of metadata to metadata.xml files multiple times.

File:
1 edited

Legend:

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

    r8667 r8711  
    9090
    9191    // Create a new Metadata element to record this metadata
    92     Element new_metadata_value_element = document.createElement(METADATA_ELEMENT);
    93     new_metadata_value_element.setAttribute("name", metadata_value.getMetadataElement().getFullName());
    94     new_metadata_value_element.setAttribute("mode", (metadata_value.isAccumulatingMetadata() ? "accumulate" : "override"));
    95     new_metadata_value_element.appendChild(document.createTextNode(metadata_value_string));
    96     boolean have_added_metadata = false;
     92    Element new_metadata_element = document.createElement(METADATA_ELEMENT);
     93    new_metadata_element.setAttribute("name", metadata_value.getMetadataElement().getFullName());
     94    new_metadata_element.setAttribute("mode", (metadata_value.isAccumulatingMetadata() ? "accumulate" : "override"));
     95    new_metadata_element.appendChild(document.createTextNode(metadata_value_string));
     96    boolean must_add_new_fileset_for_metadata = true;
    9797
    9898    // Read all the FileSet elements in the file
     
    109109        // Only exact matches can be extended with new metadata
    110110        if (current_filename_element_value.equals(file_path_regexp)) {
    111             // Append the new Metadata element to the Description element of this FileSet
    112111            Element description_element = (Element) current_fileset_element.getElementsByTagName(DESCRIPTION_ELEMENT).item(0);
     112            boolean metadata_already_assigned = false;
     113
     114            // Check if this piece of metadata has already been assigned to this FileSet element
     115            NodeList metadata_elements_nodelist = description_element.getElementsByTagName(METADATA_ELEMENT);
     116            for (int k = 0; k < metadata_elements_nodelist.getLength(); k++) {
     117            Element current_metadata_element = (Element) metadata_elements_nodelist.item(k);
     118            if (metadata_value_string.equals(XMLTools.getElementTextValue(current_metadata_element))) {
     119                metadata_already_assigned = true;
     120                break;
     121            }
     122            }
     123
     124            // If the metadata has already been assigned to this FileSet, move onto the next
     125            if (metadata_already_assigned) {
     126            must_add_new_fileset_for_metadata = false;
     127            break;
     128            }
    113129
    114130            // Accumulating metadata: add at the end
    115131            if (metadata_value.isAccumulatingMetadata()) {
    116             description_element.appendChild(new_metadata_value_element);
     132            description_element.appendChild(new_metadata_element);
    117133            }
    118134            // Override metadata: add at the start (so it overrides inherited metadata without affecting other assigned metadata)
    119135            else {
    120             description_element.insertBefore(new_metadata_value_element, description_element.getFirstChild());
    121             }
    122 
    123             have_added_metadata = true;
     136            description_element.insertBefore(new_metadata_element, description_element.getFirstChild());
     137            }
     138
     139            must_add_new_fileset_for_metadata = false;
    124140            break;
    125141        }
     
    127143    }
    128144
    129     // Check if the metadata was added to an existing FileSet
    130     if (!have_added_metadata) {
    131         // It wasn't, so create a new FileSet element for it
     145    // If the metadata didn't apply to an existing FileSet, add a new FileSet element for this metadata
     146    if (must_add_new_fileset_for_metadata) {
    132147        Element new_fileset_element = document.createElement(FILESET_ELEMENT);
    133148
     
    138153        // Append the new Metadata element to the Description element of this FileSet
    139154        Element new_description_element = document.createElement(DESCRIPTION_ELEMENT);
    140         new_description_element.appendChild(new_metadata_value_element);
     155        new_description_element.appendChild(new_metadata_element);
    141156        new_fileset_element.appendChild(new_description_element);
    142157
Note: See TracChangeset for help on using the changeset viewer.