Changeset 4625 for trunk


Ignore:
Timestamp:
2003-06-12T18:07:10+12:00 (21 years ago)
Author:
mdewsnip
Message:

Added a new ModelBuilder which is a bit cleaner than the old one, and handles correctly some cases the old one doesn't. Hasn't had a lot of testing tho'.

File:
1 edited

Legend:

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

    r4604 r4625  
    277277    if(0 <= row && row < current_metadata.size()) {
    278278        Metadata entry = (Metadata) current_metadata.get(row);
    279         ///ystem.err.println("There are " + file_nodes.length + " selected files.");
    280         ///ystem.err.println("This metadata is attached to " + entry.getCount() + " of them.");
     279        // System.err.println("Of the " + file_nodes.length + " selected files, " + entry + " is attached to " + entry.getCount() + " of them.");
     280        // System.err.println("There are " + file_nodes.length + " selected files.");
     281        // System.err.println("This metadata is attached to " + entry.getCount() + " of them.");
    281282        if(entry.getCount() == file_nodes.length) {
    282283        return true;
     
    380381    }
    381382
     383
    382384    private class ModelBuilder
     385    extends Thread {
     386
     387    public boolean complete = false;
     388    public Metadata selected_metadata = null;;
     389    private boolean had_warning = false;
     390
     391    public void run()
     392    {
     393        if (!Gatherer.c_man.ready()) {
     394        System.err.println("Not ready!");
     395        return;
     396        }
     397
     398        // System.err.println("Building metadata model...");
     399        Vector elements = Gatherer.c_man.getCollection().msm.getElements();
     400        ArrayList known_elements = new ArrayList();
     401        current_metadata.clear();
     402
     403        for (int i = 0; i < file_nodes.length; i++) {
     404        File current_file = file_nodes[i].getFile();
     405        // System.err.println("File: " + current_file);
     406
     407        // Get the currently assigned metadata for this file
     408        ArrayList metadata = Gatherer.c_man.getCollection().gdm.getAllMetadata(current_file);
     409        for (int j = 0; j < metadata.size(); j++) {
     410            Metadata metadatum = (Metadata) metadata.get(j);
     411            // System.err.println("  Metadatum: " + metadatum + " (" + metadatum.getCount() + ")");
     412
     413            // If a piece of metadata is at folder level, display the warning
     414            if (!metadatum.isFileLevel()) {
     415            showInheritedMetadataWarning();
     416            }
     417
     418            // If the piece of metadata is in the list, increment its count
     419            int index = current_metadata.indexOf(metadatum);
     420            if (index >= 0) {
     421            Metadata existing = (Metadata) current_metadata.get(index);
     422            existing.inc();
     423            }
     424            // Otherwise add it to the list
     425            else {
     426            metadatum.setCount(1);
     427            index = add(current_metadata, metadatum);
     428            fireTableRowsInserted(index, index);
     429
     430            // Remember we have seen this element
     431            ElementWrapper element = metadatum.getElement();
     432            if (known_elements.contains(element) == false) {
     433                known_elements.add(element);
     434            }
     435            }
     436        }
     437        }
     438
     439        // Make sure each element has a piece of metadata (even if blank)
     440        for (int i = 0; i < elements.size(); i++) {
     441        ElementWrapper element = (ElementWrapper) elements.get(i);
     442        // System.err.println("Element: " + element);
     443
     444        // If we haven't seen this metadata element, add it now
     445        if (!known_elements.contains(element)) {
     446            Metadata metadatum = new Metadata(element);
     447            metadatum.setCount(file_nodes.length);
     448
     449            // Add it to the table
     450            int index = add(current_metadata, metadatum);
     451            fireTableRowsInserted(index, index);
     452        }
     453        }
     454
     455        // Sort the metadata and update the table
     456        Gatherer.g_man.metaedit_pane.validateMetadataTable();
     457        Collections.sort(current_metadata, MSMUtils.METADATA_COMPARATOR);
     458        fireTableDataChanged();
     459
     460        // Processing complete
     461        complete = true;
     462
     463        // If while processing we've been asked to select a certain metadata, do it now
     464        if (selected_metadata != null) {
     465        setSelectedMetadata(selected_metadata);
     466        }
     467    }
     468
     469
     470    private void showInheritedMetadataWarning()
     471    {
     472        if (!had_warning) {
     473        had_warning = true;
     474        Runnable task = new Runnable() {
     475            public void run() {
     476                WarningDialog dialog = new WarningDialog("warning.InheritedMetadata", false);
     477                dialog.display();
     478                dialog.dispose();
     479                dialog = null;
     480            }
     481            };
     482        SwingUtilities.invokeLater(task);
     483        }
     484    }
     485    }
     486
     487
     488    private class OldModelBuilder
    383489    extends Thread {
    384490
     
    391497    public void run() {
    392498        if(Gatherer.c_man != null && Gatherer.c_man.ready()) {
     499        System.err.println("Building metadata model...");
    393500        Vector elements = Gatherer.c_man.getCollection().msm.getElements();
    394501        // Show some visual indication that building is occuring.
     
    403510        for(int i = 0; i < file_nodes.length; i++) {
    404511            File current_file = file_nodes[i].getFile();
     512            System.err.println("File: " + current_file);
    405513            // The current assigned metadata for this file.
    406514            ArrayList metadatum = Gatherer.c_man.getCollection().gdm.getAllMetadata(current_file);
     515            System.err.println("Pieces of metadata: " + metadatum.size());
    407516            for(int j = 0; j < metadatum.size(); j++) {
    408517            Metadata data = (Metadata) metadatum.get(j);
     518            System.err.println("  Metadata value: " + data);
    409519            // Determine the target list by the metadata level
    410520            ArrayList modified_metadata;
     
    463573        }
    464574                // Add entries for the currently unassigned metadata. You can determine these as the difference between elements and known_elements.
     575        System.err.println("Number of elements: " + elements.size());
     576        System.err.println("Number of known elements: " + known_elements.size());
    465577        for(int k = 0; k < elements.size(); k++) {
    466578            // For each key.
    467579            ElementWrapper element = (ElementWrapper) elements.get(k);
     580            System.err.println("Element " + k + ": " + element);
    468581            if(!known_elements.contains(element)) {
     582            System.err.println("(Doesn't contain)");
    469583            Metadata data = new Metadata(element);
    470584            int index = add(unassigned_metadata, data);
     
    475589            //else if(current_view == SHOW_ALL) {
    476590            if((index = current_metadata.indexOf(data)) == -1) {
     591                System.err.println("Adding " + data + " to " + current_metadata);
    477592                index = add(current_metadata, data);
    478593                fireTableRowsInserted(index, index);
Note: See TracChangeset for help on using the changeset viewer.