Changeset 9331


Ignore:
Timestamp:
2005-03-09T11:20:04+13:00 (19 years ago)
Author:
mdewsnip
Message:

Changed the adding/replacing/removing of metadata so it all happens on the main thread and the interface shows a busy cursor and "locks up". This sounds bad but in reality you don't want people messing with things before the operation has started or while it is processing. Also, it is only noticable when adding/replacing/removing metadata to many files, and it makes the metadata table refreshing look nicer too.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/gli/src/org/greenstone/gatherer/gui/EnrichPane.java

    r9166 r9331  
    108108    private JButton remove;
    109109    /** The button, which when clicked, updates the selected metadata from the selected records. */
    110     private JButton update;
     110    private JButton replace;
    111111    /** This button creates an editor dialog to allow for an expanded area to type in text. */
    112112    private JButton expand;
     
    143143    Dictionary.registerBoth(add, "EnrichPane.Accumulate", "EnrichPane.Accumulate_Tooltip");
    144144
    145     update = new GLIButton();
    146     update.addActionListener(this);
    147     update.setEnabled(false);
    148     update.setMnemonic(KeyEvent.VK_P);
    149     update.setPreferredSize(Utility.MINIMUM_BUTTON_SIZE);
    150     Dictionary.registerBoth(update, "EnrichPane.Overwrite", "EnrichPane.Overwrite_Tooltip");
     145    replace = new GLIButton();
     146    replace.addActionListener(this);
     147    replace.setEnabled(false);
     148    replace.setMnemonic(KeyEvent.VK_P);
     149    replace.setPreferredSize(Utility.MINIMUM_BUTTON_SIZE);
     150    Dictionary.registerBoth(replace, "EnrichPane.Overwrite", "EnrichPane.Overwrite_Tooltip");
    151151
    152152    remove = new GLIButton();
     
    184184    Object esrc = event.getSource();
    185185
    186     // Add button pressed
    187     if (esrc == add) {
     186    // One of the metadata editing buttons was pressed
     187    if (esrc == add || esrc == replace || esrc == remove) {
     188        // Double-check that some files and a metadata element have been selected
     189        MetadataValueTableEntry selected_metadata_value_table_entry = metadata_value_table.getSelectedMetadataValueTableEntry();
     190        if (file_nodes == null || selected_metadata_value_table_entry == null) {
     191        return;
     192        }
     193
     194        // If we're adding metadata to folders display the warning
     195        if (esrc == add && !file_nodes[0].isLeaf()) {
     196        WarningDialog dialog = new WarningDialog("warning.DirectoryLevelMetadata", null, true);
     197        int dialog_result = dialog.display();
     198        dialog.dispose();
     199
     200        if (dialog_result != JOptionPane.OK_OPTION) {
     201            return;
     202        }
     203        }
     204
     205        // Lock the interface so nothing can be changed while the metadata edit is being processed
     206        Gatherer.g_man.wait(true);
     207
     208        // Add button pressed
     209        if (esrc == add) {
     210        MetadataElement metadata_element = metadata_value_table.getSelectedMetadataElement();
     211        MetadataValueTreeNode metadata_value_tree_node = metadata_element.addMetadataValue(metadata_value_tree.getSelectedValue());
     212        MetadataValue metadata_value = new MetadataValue(metadata_element, metadata_value_tree_node);
     213        metadata_value.setIsAccumulatingMetadata(true);
     214        (new AppendMetadataTask(metadata_value)).run();
     215        }
     216
     217        // Replace button pressed
     218        else if (esrc == replace) {
     219        MetadataElement metadata_element = metadata_value_table.getSelectedMetadataElement();
     220        MetadataValueTreeNode metadata_value_tree_node = metadata_element.addMetadataValue(metadata_value_tree.getSelectedValue());
     221        MetadataValue metadata_value = new MetadataValue(metadata_element, metadata_value_tree_node);
     222        metadata_value.setIsAccumulatingMetadata(!metadata_value_table.getSelectedMetadataValueTableEntry().isInheritedMetadata());
     223        (new ReplaceMetadataTask(metadata_value, selected_metadata_value_table_entry)).run();
     224        }
     225
     226        // Remove button pressed
     227        else if (esrc == remove) {
     228        (new RemoveMetadataTask(selected_metadata_value_table_entry)).run();
     229        }
     230
     231        // Note that the collection's metadata has been changed
    188232        Gatherer.c_man.getCollection().setMetadataChanged(true);
    189         MetadataElement metadata_element = metadata_value_table.getSelectedMetadataElement();
    190         MetadataValueTreeNode metadata_value_tree_node = metadata_element.addMetadataValue(metadata_value_tree.getSelectedValue());
    191         MetadataValue metadata_value = new MetadataValue(metadata_element, metadata_value_tree_node);
    192         metadata_value.setIsAccumulatingMetadata(true);
    193         (new AppendMetadataTask(metadata_value)).start();
    194     }
    195 
    196     // Replace button pressed
    197     else if (esrc == update) {
    198         Gatherer.c_man.getCollection().setMetadataChanged(true);
    199         MetadataElement metadata_element = metadata_value_table.getSelectedMetadataElement();
    200         MetadataValueTreeNode metadata_value_tree_node = metadata_element.addMetadataValue(metadata_value_tree.getSelectedValue());
    201         MetadataValue metadata_value = new MetadataValue(metadata_element, metadata_value_tree_node);
    202         metadata_value.setIsAccumulatingMetadata(!metadata_value_table.getSelectedMetadataValueTableEntry().isInheritedMetadata());
    203         (new UpdateMetadataTask(metadata_value)).start();
    204     }
    205 
    206     // Remove button pressed
    207     else if (esrc == remove) {
    208         Gatherer.c_man.getCollection().setMetadataChanged(true);
    209         (new RemoveMetadataTask()).start();
    210233    }
    211234
     
    530553    public void run()
    531554    {
    532         if (file_nodes == null || metadata_value == null) {
    533         return;
    534         }
    535 
    536         // If we're adding metadata to folders display the warning
    537         if (!file_nodes[0].isLeaf()) {
    538         WarningDialog dialog = new WarningDialog("warning.DirectoryLevelMetadata", null, true);
    539         int dialog_result = dialog.display();
    540         dialog.dispose();
    541 
    542         if (dialog_result != JOptionPane.OK_OPTION) {
    543             return;
    544         }
    545         }
    546 
    547555        // Edit metadata.xml files to add the metadata
    548556        MetadataXMLFileManager.addMetadata(file_nodes, metadata_value);
     
    552560        metadata_value_table.rebuildAndSelectRowWithValueClosestTo(metadata_value);
    553561        metadata_edit_event = false;
     562
     563        // Operation finished, so turn busy cursor off
     564        Gatherer.g_man.wait(false);
    554565    }
    555566    }
    556567
    557568
    558     private class UpdateMetadataTask
     569    private class ReplaceMetadataTask
    559570    extends Thread
    560571    {
    561572    private MetadataValue metadata_value = null;
    562 
    563     private UpdateMetadataTask(MetadataValue metadata_value)
     573    private MetadataValueTableEntry selected_metadata_value_table_entry = null;
     574
     575    private ReplaceMetadataTask(MetadataValue metadata_value, MetadataValueTableEntry selected_metadata_value_table_entry)
    564576    {
    565577        this.metadata_value = metadata_value;
     578        this.selected_metadata_value_table_entry = selected_metadata_value_table_entry;
    566579    }
    567580
    568581    public void run()
    569582    {
    570         MetadataValueTableEntry selected_metadata_value_table_entry = metadata_value_table.getSelectedMetadataValueTableEntry();
    571         if (selected_metadata_value_table_entry == null || file_nodes == null || metadata_value == null) {
    572         return;
    573         }
    574 
    575583        // Edit metadata.xml files to replace the metadata
    576584        MetadataXMLFileManager.removeMetadata(file_nodes, selected_metadata_value_table_entry);
     
    581589        metadata_value_table.rebuildAndSelectRowWithValueClosestTo(metadata_value);
    582590        metadata_edit_event = false;
     591
     592        // Operation finished, so turn busy cursor off
     593        Gatherer.g_man.wait(false);
    583594    }
    584595    }
     
    588599    extends Thread
    589600    {
     601    private MetadataValueTableEntry selected_metadata_value_table_entry = null;
     602
     603    private RemoveMetadataTask(MetadataValueTableEntry selected_metadata_value_table_entry)
     604    {
     605        this.selected_metadata_value_table_entry = selected_metadata_value_table_entry;
     606    }
     607
    590608    public void run()
    591609    {
    592         MetadataValueTableEntry selected_metadata_value_table_entry = metadata_value_table.getSelectedMetadataValueTableEntry();
    593         if (selected_metadata_value_table_entry == null || file_nodes == null) {
    594         return;
    595         }
    596 
    597610        // Edit metadata.xml files to remove the metadata
    598611        MetadataXMLFileManager.removeMetadata(file_nodes, selected_metadata_value_table_entry);
     
    602615        metadata_value_table.rebuildAndSelectRowWithValueClosestTo(selected_metadata_value_table_entry);
    603616        metadata_edit_event = false;
     617
     618        // Operation finished, so turn busy cursor off
     619        Gatherer.g_man.wait(false);
    604620    }
    605621    }
     
    10241040        button_pane.setLayout(new GridLayout());
    10251041        button_pane.add(add);
    1026         button_pane.add(update);
     1042        button_pane.add(replace);
    10271043        button_pane.add(remove);
    10281044
     
    11981214
    11991215            // Nothing to replace or remove
    1200             update.setEnabled(false);
     1216            replace.setEnabled(false);
    12011217            remove.setEnabled(false);
    12021218            return;
     
    12061222        if (getSelectedValue().equals(metadata_value_table_entry.getFullValue())) {
    12071223            // Can't replace
    1208             update.setEnabled(false);
     1224            replace.setEnabled(false);
    12091225
    12101226            // Adding, however, is dependant on whether the selected metadata is common or uncommon. If the later then you can append so as to make it common.
     
    12141230            // Can append or replace, if something has been entered
    12151231            add.setEnabled((getSelectedValue().length() > 0));
    1216             update.setEnabled((getSelectedValue().length() > 0));
     1232            replace.setEnabled((getSelectedValue().length() > 0));
    12171233        }
    12181234
Note: See TracChangeset for help on using the changeset viewer.