Changeset 5901


Ignore:
Timestamp:
2003-11-19T15:11:46+13:00 (20 years ago)
Author:
jmt12
Message:

Completed the TranslationView manager so that it actually shows the fragment table containing all of the languages at use within the collections metadata regardless of whether a text fragment in that language has been assigned to this feature

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/gli/src/org/greenstone/gatherer/cdm/TranslationView.java

    r5752 r5901  
    189189
    190190    TranslationControl() {
    191         fragment_table_model = new FragmentTableModel(new ArrayList());
     191        fragment_table_model = new FragmentTableModel("", new TreeSet(), new ArrayList());
    192192        // Creation
    193193        JPanel header_panel = new JPanel();
     
    370370            fragment_table.clearSelection();
    371371            ArrayList metadata = CollectionDesignManager.collectionmeta_manager.getMetadata(selected_feature.getName());
    372             fragment_table_model.setData(metadata);
     372            fragment_table_model.setData(selected_feature.getName(), CollectionDesignManager.collectionmeta_manager.getLanguages(), metadata);
    373373            int index = fragment_table_model.getMetadataIndexByLanguage(language);
     374            ///ystem.err.println("I want to select the row " + index + " out of " + metadata.size());
    374375            fragment_table.setRowSelectionInterval(index, index);
    375376            metadatum = null;
     
    377378            selected_feature = null;
    378379            translation_text = null;
    379             replace_button.setEnabled(true);
     380            remove_button.setEnabled(true);
    380381        }
    381382        add_button.setEnabled(false);
     
    443444            // Update the text fragment table.
    444445            fragment_table.clearSelection();
    445             fragment_table_model.setData(CollectionDesignManager.collectionmeta_manager.getMetadata(selected_feature.getName()));
     446            fragment_table_model.setData(selected_feature.getName(), CollectionDesignManager.collectionmeta_manager.getLanguages(), CollectionDesignManager.collectionmeta_manager.getMetadata(selected_feature.getName()));
    446447            selected_feature = null;
    447448            // Now we check whatever value is currently selected in the combobox to see if it is valid to add.
     
    451452                CollectionMeta metadata = fragment_table_model.getMetadata(index);
    452453                fragment_table.setRowSelectionInterval(index, index);
    453                 translation_area.setText(metadata.getValue(CollectionMeta.TEXT));
     454                if(metadata != null) {
     455                translation_area.setText(metadata.getValue(CollectionMeta.TEXT));
     456                }
     457                else {
     458                translation_area.setText("");
     459                }
    454460                metadata = null;
    455461            }
     
    464470            default_area.setText("");
    465471            fragment_table.clearSelection();
    466             fragment_table_model.setData(new ArrayList());
     472            fragment_table_model.setData("", new TreeSet(), new ArrayList());
    467473            translation_area.setText("");
    468474            // Update and disable the text area
     
    479485        public void valueChanged(ListSelectionEvent event) {
    480486        if(!event.getValueIsAdjusting() && !ignore_event) {
     487            ignore_event = true;
    481488            ///ystem.err.println("FragmentListSelectionListener");
    482489            int index = -1;
    483490            if((index = fragment_table.getSelectedRow()) != -1) {
    484491            // A row has been selected. Retrieve the collection metadata.
    485             CollectionMeta metadata = fragment_table_model.getMetadata(index);
    486             if(metadata != null) {
     492            CollectionMeta metadatum = fragment_table_model.getMetadata(index);
     493            if(metadatum != null) {
    487494                // Update the combobox to show the current language.
    488                 String language = metadata.getLanguage();
     495                String language = metadatum.getLanguage();
    489496                ///ystem.err.println("Searching for the language: " + language_name);
    490497                for(int i = 0; i < language_combobox.getItemCount(); i++) {
     
    493500                }
    494501                }
     502                translation_area.setText(metadatum.getValue(CollectionMeta.TEXT));
     503                remove_button.setEnabled(!metadatum.isDummy());
    495504            }
    496             translation_area.setText(metadata.getValue(CollectionMeta.TEXT));
    497             remove_button.setEnabled(true);
     505            else {
     506                remove_button.setEnabled(false);
     507            }
    498508            }
    499509            else {
     
    501511            remove_button.setEnabled(false);
    502512            }
     513            ignore_event = false;
    503514        }
    504515        }
     
    509520
    510521        private ArrayList metadata;
    511 
    512         FragmentTableModel(ArrayList metadata) {
     522        private String feature_name;
     523        private TreeSet languages;
     524
     525        FragmentTableModel(String feature_name, TreeSet languages, ArrayList metadata) {
     526        this.feature_name = feature_name;
     527        this.languages = languages;
    513528        this.metadata = metadata;
    514529        }
    515530        public int getRowCount() {
    516            // The row count is equal to the maximum number of languages currently assigned in the collection. This is cache to speed up construction. Essentially we go through every feature determining what language fragments have been assigned.
    517 
    518 
    519            return metadata.size();
     531           // The row count is equal to the maximum number of languages currently assigned in the collection.
     532        return languages.size();
    520533        }
    521534        public int getColumnCount() {
     
    533546        }
    534547
     548        /** Attempt to retrieve the metadata associated with a certain row - however not all rows actually have metadata with them (say the French row where no metadata has been set).
     549         * @param row the row number as an int
     550         * @return the CollectionMeta requested, which may be a dummy metadata pair
     551         */
    535552        public CollectionMeta getMetadata(int row) {
    536         if(0 <= row && row < metadata.size()) {
    537             return (CollectionMeta) metadata.get(row);
    538         }
     553        // Determine what language we are talking about
     554        String language = null;
     555        Iterator language_iterator = languages.iterator();
     556        int current_row = 0;
     557        while(current_row != row && language_iterator.hasNext()) {
     558            language_iterator.next();
     559            current_row++;
     560        }
     561        if(current_row == row) {
     562            language = (String) language_iterator.next();
     563            return getMetadata(language);
     564        }
     565        language_iterator = null;
    539566        return null;
    540567        }
    541568
    542         public int getMetadataIndexByLanguage(String language) {
     569        public CollectionMeta getMetadata(String language) {
     570        // Attempt to retrieve metadata with that language
    543571        for(int i = 0; i < metadata.size(); i++) {
    544572            CollectionMeta metadatum = (CollectionMeta) metadata.get(i);
    545             if(language.equals(metadatum.getLanguage())) {
    546             return i;
    547             }
    548         }
     573            if(metadatum.getLanguage().equals(language)) {
     574            return metadatum;
     575            }
     576        }
     577        return new CollectionMeta(feature_name, language, true);
     578        }
     579
     580        public int getMetadataIndexByLanguage(String language) {
     581        ///ystem.err.println("Find the index for the language " + language + " (out of " + languages.size() + ")");
     582        // First we have to iterate to the correct place
     583        Iterator language_iterator = languages.iterator();
     584        int current_row = 0;
     585        while(language_iterator.hasNext()) {
     586            String target = (String)language_iterator.next();
     587            if(language.equals(target)) {
     588            ///ystem.err.println("Matches " + target);
     589            return current_row;
     590            }
     591            else {
     592            ///ystem.err.println("Doesn't match " + target);
     593            current_row++;
     594            }
     595        }
     596        ///ystem.err.println("No such language in model: -1");
    549597        return -1;
    550598        }
    551599
    552600        public Object getValueAt(int row, int column) {
    553         if(0 <= row && row < metadata.size()) {
    554             CollectionMeta metadatum = (CollectionMeta) metadata.get(row);
    555             switch(column) {
    556             case 0:
    557             return CollectionDesignManager.language_manager.getLanguageName(metadatum.getLanguage());
    558             default:
    559             return metadatum.getValue(CollectionMeta.TEXT);
    560             }
     601        if(0 <= row && row < languages.size()) {
     602            // First we have to iterate to the correct place
     603            Iterator language_iterator = languages.iterator();
     604            int current_row = 0;
     605            while(current_row != row && language_iterator.hasNext()) {
     606            language_iterator.next();
     607            current_row++;
     608            }
     609            if(current_row == row) {
     610            String language = (String)language_iterator.next();
     611            if(column == 0) {
     612                return CollectionDesignManager.language_manager.getLanguageName(language);
     613            }
     614            else {
     615                CollectionMeta metadatum = getMetadata(language);
     616                return metadatum.getValue(CollectionMeta.TEXT);
     617            }
     618            }
     619            language_iterator = null;
    561620        }
    562621        return "#Error";
     
    568627        }
    569628
    570         public void setData(ArrayList metadata) {
     629        public void setData(String feature_name, TreeSet languages, ArrayList metadata) {
     630        this.feature_name = feature_name;
     631        this.languages = languages;
    571632        this.metadata = metadata;
    572633        fireTableDataChanged();
     
    646707        // Determine if add should be enabled. You can only add if the current text fragment doesn't already exist in the fragment table for the given language
    647708        String language = (String) language_combobox.getSelectedItem();
    648         add_button.setEnabled(translation_text.length() > 0 && fragment_table_model.getMetadataIndexByLanguage(language) == -1);
     709        CollectionMeta metadatum = fragment_table_model.getMetadata(language);
     710        add_button.setEnabled(translation_text.length() > 0 && (metadatum.isDummy() || fragment_table_model.getMetadataIndexByLanguage(language) == -1));
    649711        language = null;
    650712        // Determine if replace should be enabled. Replace is only enabled it the text fragment is different from the one in the current fragment table selection.
    651713        if(fragment_table.getSelectedRowCount() > 0) {
    652             replace_button.setEnabled(!translation_text.equals(fragment_table.getValueAt(fragment_table.getSelectedRow(), 1)));
     714            replace_button.setEnabled(!metadatum.isDummy() && !translation_text.equals(fragment_table.getValueAt(fragment_table.getSelectedRow(), 1)));
    653715        }
    654716        // Nothing selected, nothing to replace
Note: See TracChangeset for help on using the changeset viewer.