Ignore:
Timestamp:
2005-05-12T12:24:38+12:00 (19 years ago)
Author:
mdewsnip
Message:

Major changes to the metadata value table and tree in the Enrich pane. The metadata value table now allows direct editing in the table -- hopefully much more obvious to the user. Classes involved have been untangled and are much more re-usable. Special code for replacing metadata has been added, which uses a more direct and efficient method rather than removing then adding metadata as before. And many many minor tidy-ups.

File:
1 edited

Legend:

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

    r8783 r9856  
    77 * Author: Michael Dewsnip, NZDL Project, University of Waikato, NZ
    88 *
    9  * Copyright (C) 2004 New Zealand Digital Library Project
     9 * Copyright (C) 2005 New Zealand Digital Library Project
    1010 *
    1111 * This program is free software; you can redistribute it and/or modify
     
    4040{
    4141    static private ArrayList metadata_xml_files = new ArrayList();
     42    /** The objects listening for MetadataChanged events. */
     43    static private ArrayList metadata_changed_listeners = new ArrayList();
    4244
    4345
     
    8385        }
    8486    }
     87
     88    // Let any listeners know that the metadata has changed
     89    fireMetadataChangedEvent(file_nodes);
     90    }
     91
     92
     93    static public void addMetadataChangedListener(MetadataChangedListener metadata_changed_listener)
     94    {
     95    metadata_changed_listeners.add(metadata_changed_listener);
    8596    }
    8697
     
    89100    {
    90101    metadata_xml_files.clear();
     102    }
     103
     104
     105    static private void fireMetadataChangedEvent(CollectionTreeNode[] file_nodes)
     106    {
     107    // Send the event off to all the MetadataChangedListeners
     108    for (int i = 0; i < metadata_changed_listeners.size(); i++) {
     109        ((MetadataChangedListener) metadata_changed_listeners.get(i)).metadataChanged(file_nodes);
     110    }
    91111    }
    92112
     
    254274        }
    255275    }
     276
     277    // Let any listeners know that the metadata has changed
     278    fireMetadataChangedEvent(file_nodes);
     279    }
     280
     281
     282    static public void removeMetadataChangedListener(MetadataChangedListener metadata_changed_listener)
     283    {
     284    metadata_changed_listeners.remove(metadata_changed_listener);
     285    }
     286
     287
     288    static public void replaceMetadata(CollectionTreeNode[] file_nodes, MetadataValue old_metadata_value, MetadataValue new_metadata_value)
     289    {
     290    // Replace the metadata in each file node in turn
     291    for (int i = 0; i < file_nodes.length; i++) {
     292        File current_file = file_nodes[i].getFile();
     293        DebugStream.println("Replacing metadata in " + current_file.getAbsolutePath());
     294
     295        // Find which metadata.xml file needs editing
     296        File current_file_directory = (current_file.isDirectory() ? current_file : current_file.getParentFile());
     297        for (int j = 0; j < metadata_xml_files.size(); j++) {
     298        MetadataXMLFile metadata_xml_file = (MetadataXMLFile) metadata_xml_files.get(j);
     299
     300        // This metadata.xml file is only applicable if it is at the same level as the file
     301        if (current_file_directory.getAbsolutePath().equals(metadata_xml_file.getParentFile().getAbsolutePath())) {
     302            metadata_xml_file.replaceMetadata(current_file, old_metadata_value, new_metadata_value);
     303        }
     304        }
     305    }
     306
     307    // Let any listeners know that the metadata has changed
     308    fireMetadataChangedEvent(file_nodes);
    256309    }
    257310
Note: See TracChangeset for help on using the changeset viewer.