Changeset 9997


Ignore:
Timestamp:
2005-06-01T14:14:45+12:00 (19 years ago)
Author:
kjdon
Message:

lots of changes. made the mgpp index and level lists behave like others - can only select one item at a time, adding and removing leaves the selected item a sensible one. when switching between mg and mgpp controls we remove and add the appropriate index list listeners - don't want the mg listener getting mgpp events and vice versa. I think thats about it.

File:
1 edited

Legend:

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

    r9552 r9997  
    112112    if(!levels_model.contains(level)) {
    113113        CollectionDesignManager.collectionmeta_manager.addMetadatum(metadatum);
    114         // Retrieve the currently last index
     114        // Retrieve the currently last level
    115115        if(levels_model.getSize() > 0) {
    116116        Level last_level = (Level)levels_model.getElementAt(levels_model.getSize() - 1);
     
    193193    for(int i = 0; i < levels_model_size; i++) {
    194194        Level level = (Level) levels_model.getElementAt(i);
    195         if(level.getName().equals(name)) {
     195        if(level.getLevel().equals(name)) {
    196196        return level;
    197197        }
     
    205205    // Determine the current position of the index
    206206    int position = indexOf(index);
    207     if (position == -1) {
     207    // Determine if it can be moved, ie if its not already at the top trying to move up, or at the bottom trying to move down.
     208    if(position == -1) {
    208209        return;
    209210    }
    210 
    211     // Attempt to move the index up
     211    if(position == 0 && move_up) {
     212        return;
     213    }
     214    if(position == (getSize()) - 1 && !move_up) {
     215        return;
     216    }
     217   
     218    // Ok, move up
    212219    if (move_up) {
    213         // Check it's not already at the top
    214         if (position == 0) {
    215         return;
    216         }
    217 
    218         // Retrieve the index at position - 1
    219         Index preceeding_index = (Index) getElementAt(position - 1);
    220 
    221         // This automatically removes the index first, as an Element can only exist once in a particular document
    222         addBefore(index, preceeding_index);
    223     }
    224 
    225     // Attempt to move the index down
     220        position--;
     221        remove(index);
     222        add(position, index);
     223    }
     224
     225    // Or move down
    226226    else {
    227         // Check it's not already at the bottom
    228         if (position == (getSize()) - 1) {
    229         return;
    230         }
    231 
    232         // Retrieve the index at position + 1
    233         Index following_index = (Index) getElementAt(position + 1);
    234 
    235         // This automatically removes the index first, as an Element can only exist once in a particular document
    236         addAfter(index, following_index);
     227        position++;
     228        remove(index);
     229        add(position, index);
    237230    }
    238231
     
    255248        return;
    256249    }
    257     // Ok, move the level
     250    // Ok, move up
    258251    if(move_up) {
    259         // Retrieve the level at position - 1
    260         Level previous_level = (Level) levels_model.getElementAt(position - 1);
    261         // And add before. This will automatically remove the level first, as an Element can only exist once in a particular document
    262         levels_model.addBefore(level, previous_level);
    263     }
     252        position--;
     253        levels_model.remove(level);
     254        levels_model.add(position, level);
     255    }
     256    // Or move down
    264257    else {
    265         // Retrieve the level at position + 1
    266         Level next_level = (Level) levels_model.getElementAt(position + 1);
    267         // And add after. This will automatically remove the level first, as an Element can only exist once in a particular document
    268         levels_model.addAfter(level, next_level);
     258        position++;
     259        levels_model.remove(level);
     260        levels_model.add(position, level);
    269261    }
    270262    // Schedule the collection for saving
    271263    Gatherer.c_man.configurationChanged();
    272264    }
    273 
     265   
    274266    /** Method to remove a certain index.
    275267     * @param index the Index to remove.
     
    304296    if(level != null) {
    305297        // Remove any current metadata from this level
    306         CollectionDesignManager.collectionmeta_manager.removeMetadata(CollectionConfiguration.STOP_CHARACTER + level.getName());
     298        CollectionDesignManager.collectionmeta_manager.removeMetadata(CollectionConfiguration.STOP_CHARACTER + level.getLevel());
    307299        // Remove the level
    308300        levels_model.remove(level);
     
    346338     */
    347339    public void setMGPPEnabled(boolean state) {
    348     if(state != root.getAttribute(CollectionConfiguration.MGPP_ATTRIBUTE).equals(CollectionConfiguration.TRUE_STR)) {
    349         if(state) {
    350         Element mg_element = root;
    351         // Retrieve and assign the MGPP indexes element.
    352         Element mgpp_element = CollectionDesignManager.collect_config.getMGPPIndexes();
    353         mgpp_element.setAttribute(CollectionConfiguration.ASSIGNED_ATTRIBUTE, CollectionConfiguration.TRUE_STR);
    354         levels_model.root.setAttribute(CollectionConfiguration.ASSIGNED_ATTRIBUTE, CollectionConfiguration.TRUE_STR);
    355         // If the MGPP indexes element is empty (ie was created by CollectionConfiguration), generate new MGPP index from the existing index
    356         NodeList indexes = mgpp_element.getElementsByTagName(CollectionConfiguration.INDEX_ELEMENT);
    357         if(indexes.getLength() == 0) {
    358             ArrayList levels_list = new ArrayList();
    359             ArrayList sources_list = new ArrayList();
    360             // We first use details from the default index if any
    361             if(default_index != null) {
    362             int level_int = default_index.getLevel();
    363             if(0 <= level_int && level_int < 3) {
    364                 String level = Index.LEVEL[level_int];
    365                 if(!levels_list.contains(level)) {
    366                 levels_list.add(level);
    367                 }
    368                 level = null;
     340    if(state == root.getAttribute(CollectionConfiguration.MGPP_ATTRIBUTE).equals(CollectionConfiguration.TRUE_STR)) {
     341        // we are not changing state
     342        return;
     343       
     344    }
     345    // change MG -> MGPP
     346    if(state) {
     347        Element mg_element = root;
     348        // Retrieve and assign the MGPP indexes element.
     349        Element mgpp_element = CollectionDesignManager.collect_config.getMGPPIndexes();
     350        mgpp_element.setAttribute(CollectionConfiguration.ASSIGNED_ATTRIBUTE, CollectionConfiguration.TRUE_STR);
     351        levels_model.root.setAttribute(CollectionConfiguration.ASSIGNED_ATTRIBUTE, CollectionConfiguration.TRUE_STR);
     352        // If the MGPP indexes element is empty (ie was created by CollectionConfiguration), generate new MGPP index from the existing index
     353        NodeList indexes = mgpp_element.getElementsByTagName(CollectionConfiguration.INDEX_ELEMENT);
     354        if(indexes.getLength() == 0) {
     355        ArrayList levels_list = new ArrayList();
     356        ArrayList sources_list = new ArrayList();
     357        // We first use details from the default index if any
     358        if(default_index != null) {
     359            int level_int = default_index.getLevel();
     360            if(0 <= level_int && level_int < 3) {
     361            String level = Index.LEVEL[level_int];
     362            if(!levels_list.contains(level)) {
     363                levels_list.add(level);
    369364            }
    370             ArrayList sources = default_index.getSources();
    371             sources.removeAll(sources_list);
    372             sources_list.addAll(sources);
    373             }
    374             int size = getSize();
    375             for(int i = 0; i < size; i++) {
    376             Index index = (Index) getElementAt(i);
    377             int level_int = index.getLevel();
    378             if(0 <= level_int && level_int < 3) {
    379                 String level = Index.LEVEL[level_int];
    380                 if(!levels_list.contains(level)) {
    381                 levels_list.add(level);
    382                 }
    383                 level = null;
     365            level = null;
     366            }
     367            ArrayList sources = default_index.getSources();
     368            sources.removeAll(sources_list);
     369            sources_list.addAll(sources);
     370        }
     371        int size = getSize();
     372        for(int i = 0; i < size; i++) {
     373            Index index = (Index) getElementAt(i);
     374            int level_int = index.getLevel();
     375            if(0 <= level_int && level_int < 3) {
     376            String level = Index.LEVEL[level_int];
     377            if(!levels_list.contains(level)) {
     378                levels_list.add(level);
    384379            }
    385             ArrayList sources = index.getSources();
    386             sources.removeAll(sources_list);
    387             sources_list.addAll(sources);
    388             index = null;
    389             }
    390             // Replace mg element with mgpp element
    391             setRoot(mgpp_element);
    392 
    393             // We now have a list of sources and a list of levels, so create new indexes and levels based on these
    394             int sources_list_size = sources_list.size();
    395             for(int j = 0; j < sources_list_size; j++) {
    396             Object source_object = sources_list.get(j);
    397             String source_str = null;
    398             if(source_object instanceof MetadataElement) {
    399                 source_str = ((MetadataElement) source_object).getFullName();
    400             }
    401             else {
    402                 source_str = source_object.toString();
    403             }
    404             ArrayList new_sources = new ArrayList();
    405             new_sources.add(source_object);
    406             source_object = null;
    407             Index new_index = new Index(new_sources);
     380            level = null;
     381            }
     382            ArrayList sources = index.getSources();
     383            sources.removeAll(sources_list);
     384            sources_list.addAll(sources);
     385            index = null;
     386        }
     387        // Replace mg element with mgpp element
     388        setRoot(mgpp_element);
     389       
     390        // We now have a list of sources and a list of levels, so create new indexes and levels based on these
     391        int sources_list_size = sources_list.size();
     392        for(int j = 0; j < sources_list_size; j++) {
     393            Object source_object = sources_list.get(j);
     394            String source_str = null;
     395            if(source_object instanceof MetadataElement) {
     396            source_str = ((MetadataElement) source_object).getFullName();
     397            }
     398            else {
     399            source_str = source_object.toString();
     400            }
     401            ArrayList new_sources = new ArrayList();
     402            new_sources.add(source_object);
     403            source_object = null;
     404            Index new_index = new Index(new_sources);
     405            // Try to retrieve existing metadatum
     406            source_str = new_index.getID();
     407            CollectionMeta metadatum = CollectionDesignManager.collectionmeta_manager.getMetadatum(CollectionConfiguration.STOP_CHARACTER + source_str, false);
     408            // If no metadata was found, add new pseudo metadata using the id
     409            if(metadatum == null) {
     410            metadatum = new CollectionMeta(CollectionConfiguration.STOP_CHARACTER + source_str);
     411            metadatum.setAssigned(true);
     412            metadatum.setValue(source_str);
     413            }
     414            // If it was found, ensure it is assigned
     415            else {
     416            metadatum.setAssigned(true);
     417            }
     418            source_str = null;
     419            addIndex(new_index, metadatum);
     420            metadatum = null;
     421            new_index = null;
     422            new_sources = null;
     423            source_str = null;
     424        }
     425        int levels_list_size = levels_list.size();
     426        for(int k = 0; k < levels_list_size; k++) {
     427            Level new_level = new Level((String)levels_list.get(k));
     428            if(!levels_model.contains(new_level)) {
     429            levels_model.add(levels_model.getSize(), new_level);
     430            }
     431            new_level = null;
     432        }
     433        }
     434        else {
     435        // Replace mg element with mgpp element
     436        setRoot(mgpp_element);
     437        }
     438        // Unassign MG element and default index
     439        mg_element.setAttribute(CollectionConfiguration.ASSIGNED_ATTRIBUTE, CollectionConfiguration.FALSE_STR);
     440        mg_element = null;
     441        if(default_index != null) {
     442        default_index.setAssigned(false);
     443        }
     444    }
     445    // change MGPP -> MG
     446    else {
     447        Element mgpp_element = root;
     448        // Retrieve and assign MG element and default index element
     449        Element mg_element = CollectionDesignManager.collect_config.getMGIndexes();
     450        mg_element.setAttribute(CollectionConfiguration.ASSIGNED_ATTRIBUTE, CollectionConfiguration.TRUE_STR);
     451        if(default_index != null) {
     452        default_index.setAssigned(true);
     453        }
     454        // If mg element has no indexes, and the current mgpp index include a text one, then generate text indexes for each of the registered levels.
     455        NodeList indexes = mgpp_element.getElementsByTagName(CollectionConfiguration.INDEX_ELEMENT);
     456        if(indexes.getLength() == 0) {
     457        Index index = getIndex(CollectionConfiguration.TEXT_STR);
     458        if(index != null) {
     459            // Replace mgpp element with mg element
     460            setRoot(mg_element);
     461            int level_size = levels_model.getSize();
     462            for(int i = 0; i < level_size; i++) {
     463            Level level = (Level) levels_model.getElementAt(i);
     464            Index new_index = new Index(level.getLevel(), index.getSources());
    408465            // Try to retrieve existing metadatum
    409             source_str = new_index.getID();
     466            String source_str = new_index.getID();
    410467            CollectionMeta metadatum = CollectionDesignManager.collectionmeta_manager.getMetadatum(CollectionConfiguration.STOP_CHARACTER + source_str, false);
    411468            // If no metadata was found, add new pseudo metadata using the id
     
    421478            source_str = null;
    422479            addIndex(new_index, metadatum);
    423             metadatum = null;
    424480            new_index = null;
    425             new_sources = null;
    426             source_str = null;
    427             }
    428             int levels_list_size = levels_list.size();
    429             for(int k = 0; k < levels_list_size; k++) {
    430             Level new_level = new Level((String)levels_list.get(k));
    431             if(!levels_model.contains(new_level)) {
    432                 levels_model.add(levels_model.getSize(), new_level);
    433             }
    434             new_level = null;
    435             }
    436         }
    437         else {
    438             // Replace mg element with mgpp element
    439             setRoot(mgpp_element);
    440         }
    441         // Unassign MG element and default index
    442         mg_element.setAttribute(CollectionConfiguration.ASSIGNED_ATTRIBUTE, CollectionConfiguration.FALSE_STR);
    443         mg_element = null;
    444         if(default_index != null) {
    445             default_index.setAssigned(false);
     481            level = null;
     482            }
    446483        }
    447484        }
    448485        else {
    449         Element mgpp_element = root;
    450         // Retrieve and assign MG element and default index element
    451         Element mg_element = CollectionDesignManager.collect_config.getMGIndexes();
    452         mg_element.setAttribute(CollectionConfiguration.ASSIGNED_ATTRIBUTE, CollectionConfiguration.TRUE_STR);
    453         if(default_index != null) {
    454             default_index.setAssigned(true);
    455         }
    456         // If mg element has no indexes, and the current mgpp index include a text one, then generate text indexes for each of the registered levels.
    457         NodeList indexes = mgpp_element.getElementsByTagName(CollectionConfiguration.INDEX_ELEMENT);
    458         if(indexes.getLength() == 0) {
    459             Index index = getIndex(CollectionConfiguration.TEXT_STR);
    460             if(index != null) {
    461             // Replace mgpp element with mg element
    462             setRoot(mg_element);
    463             int level_size = levels_model.getSize();
    464             for(int i = 0; i < level_size; i++) {
    465                 Level level = (Level) levels_model.getElementAt(i);
    466                 Index new_index = new Index(level.getName(), index.getSources());
    467                 // Try to retrieve existing metadatum
    468                 String source_str = new_index.getID();
    469                 CollectionMeta metadatum = CollectionDesignManager.collectionmeta_manager.getMetadatum(CollectionConfiguration.STOP_CHARACTER + source_str, false);
    470                 // If no metadata was found, add new pseudo metadata using the id
    471                 if(metadatum == null) {
    472                 metadatum = new CollectionMeta(CollectionConfiguration.STOP_CHARACTER + source_str);
    473                 metadatum.setAssigned(true);
    474                 metadatum.setValue(source_str);
    475                 }
    476                 // If it was found, ensure it is assigned
    477                 else {
    478                 metadatum.setAssigned(true);
    479                 }
    480                 source_str = null;
    481                 addIndex(new_index, metadatum);
    482                 new_index = null;
    483                 level = null;
    484             }
    485             }
    486         }
    487         else {
    488             // Replace mgpp element with mg element
    489             setRoot(mg_element);
    490         }
    491         // Unassign mgpp element and levels
    492         mgpp_element.setAttribute(CollectionConfiguration.ASSIGNED_ATTRIBUTE, CollectionConfiguration.FALSE_STR);
    493         levels_model.root.setAttribute(CollectionConfiguration.ASSIGNED_ATTRIBUTE, CollectionConfiguration.FALSE_STR);
    494         }
    495     }
     486        // Replace mgpp element with mg element
     487        setRoot(mg_element);
     488        }
     489        // Unassign mgpp element and levels
     490        mgpp_element.setAttribute(CollectionConfiguration.ASSIGNED_ATTRIBUTE, CollectionConfiguration.FALSE_STR);
     491        levels_model.root.setAttribute(CollectionConfiguration.ASSIGNED_ATTRIBUTE, CollectionConfiguration.FALSE_STR);
     492    }
     493   
    496494    }
    497 
     495   
    498496
    499497    /** This class creates a set of controls for editing the indexes. */
     
    514512    private JTextArea instruction_textarea;
    515513    private JTextField name_textfield ;
    516 
     514    // when we are in mgpp mode, we want to remove the mg listener
     515    // the underlying model is the same between the two JLists, and
     516    // both listeners get notified when the model changes, but the mg
     517    // listener doesn't care about mgpp events
     518    private ListSelectionListener index_list_listener;
     519   
    517520    private MGPPControl mgppindexes_control;
    518521
     
    630633        name_textfield.getDocument().addDocumentListener(new NameListener());
    631634        level_combobox.addItemListener(new LevelListener());
    632         index_list.addListSelectionListener(new IndexListListener());
     635        // Create the index_list_listener but don't add in to the list - this gets done in gainFocus, we don't want it twice.
     636        index_list_listener = new IndexListListener();
    633637        source_list.addListSelectionListener(new SourceListListener());
    634638
     
    689693    }
    690694
     695   
    691696    /* Destructor, removes persistant listeners from the Dictionary.
    692697     */
     
    702707        }
    703708        if(mgpp_enabled) {
     709        // remove the mg index list listener first
     710        index_list.removeListSelectionListener(index_list_listener);
    704711        mgppindexes_control.gainFocus();
    705712        }
    706713        else {
     714        // remove the mgpp listener first
     715        mgppindexes_control.removeIndexListListener();
     716        // add the mg listener back in
     717        index_list.addListSelectionListener(index_list_listener);
    707718        // Reload the assigned indexes list.
    708719        ArrayList new_data = new ArrayList();
     
    945956            removeIndex((Index) index_list.getSelectedValue());
    946957        }
    947 
    948958        int size = index_list.getModel().getSize();
    949959        if (i == size) {
     
    10191029    private JButton move_index_up_button;
    10201030    private JButton move_level_up_button;
    1021     private JButton replace_button;
     1031    private JButton replace_index_button;
    10221032    private JButton remove_index_button;
    10231033    private JButton remove_level_button;
     
    10391049    private JTextField index_name_field;
    10401050    private JTextField level_name_field;
    1041 
     1051   
     1052    // when we are in mg mode, we want to remove the mgpp listener
     1053    // the underlying model is the same between the two JLists, and
     1054    // both listeners get notified when the model changes, but the mgpp
     1055    // listener doesn't care about mg events
     1056    private ListSelectionListener mgpp_index_list_listener;
     1057   
    10421058    public MGPPControl() {
    10431059        // Create Indexes
     
    10501066        current_indexes_list = new JList(model);
    10511067        current_indexes_list.setVisibleRowCount(5);
     1068        current_indexes_list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    10521069
    10531070        JPanel index_movement_panel = new JPanel();
     
    11011118        Dictionary.registerBoth(add_all_button, "CDM.IndexManager.MGPP.Add_All_Metadata", "CDM.IndexManager.MGPP.Add_All_Metadata_Tooltip");
    11021119
    1103         replace_button = new GLIButton();
    1104         replace_button.setEnabled(false);
    1105         replace_button.setMnemonic(KeyEvent.VK_C);
    1106         Dictionary.registerBoth(replace_button, "CDM.IndexManager.MGPP.Replace_Index", "CDM.IndexManager.MGPP.Replace_Index_Tooltip");
     1120        replace_index_button = new GLIButton();
     1121        replace_index_button.setEnabled(false);
     1122        replace_index_button.setMnemonic(KeyEvent.VK_C);
     1123        Dictionary.registerBoth(replace_index_button, "CDM.IndexManager.MGPP.Replace_Index", "CDM.IndexManager.MGPP.Replace_Index_Tooltip");
    11071124
    11081125        remove_index_button = new GLIButton();
     
    11171134        add_index_button.addActionListener(new AddIndexActionListener());
    11181135        add_all_button.addActionListener(new AddAllActionListener());
    1119         current_indexes_list.addListSelectionListener(new CurrentIndexesListSelectionListener());
     1136       
     1137        // Create the index_list_listener but don't add in to the list - this gets done in gainFocus, we don't want it twice.
     1138        mgpp_index_list_listener = new CurrentIndexesListSelectionListener();
    11201139        index_combobox.addActionListener(index_eal);
    11211140        ((JTextField)index_combobox.getEditor().getEditorComponent()).getDocument().addDocumentListener(index_eal);
     
    11231142        move_index_down_button.addActionListener(new MoveIndexDownListener());
    11241143        move_index_up_button.addActionListener(new MoveIndexUpListener());
    1125         replace_button.addActionListener(new ReplaceIndexActionListener());
     1144        replace_index_button.addActionListener(new ReplaceIndexActionListener());
    11261145        remove_index_button.addActionListener(new RemoveIndexActionListener(index_eal));
    11271146
     
    11531172        index_button_panel.add(add_index_button);
    11541173        index_button_panel.add(add_all_button);
    1155         index_button_panel.add(replace_button);
     1174        index_button_panel.add(replace_index_button);
    11561175        index_button_panel.add(remove_index_button);
    11571176
     
    11801199        current_levels_list = new JList(levels_model);
    11811200        current_levels_list.setVisibleRowCount(5);
    1182 
     1201        current_levels_list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    11831202        JPanel level_movement_panel = new JPanel();
    11841203
     
    12161235        level_combobox.setBackgroundNonSelectionColor(Configuration.getColor("coloring.editable_background", false));
    12171236        level_combobox.setBackgroundSelectionColor(Configuration.getColor("coloring.collection_selection_background", false));
    1218         level_combobox.setEditable(true);
     1237        level_combobox.setEditable(false);
    12191238        level_combobox.setTextNonSelectionColor(Configuration.getColor("coloring.workspace_tree_foreground", false));
    12201239        level_combobox.setTextSelectionColor(Configuration.getColor("coloring.collection_selection_foreground", false));
     
    13221341
    13231342    public void gainFocus() {
     1343        // add in the mgpp listener
     1344        current_indexes_list.addListSelectionListener(mgpp_index_list_listener);
    13241345        // Reload the assigned indexes list.
    13251346        index_combobox.removeAllItems();
     
    13451366        current_indexes_list.updateUI();
    13461367    }
    1347 
     1368   
     1369    public void removeIndexListListener() {
     1370
     1371        current_indexes_list.removeListSelectionListener(mgpp_index_list_listener);
     1372    }
     1373   
    13481374    private class AddIndexActionListener
    13491375        implements ActionListener {
     
    13681394            // Assign new index
    13691395            addIndex(index, metadatum);
     1396            current_indexes_list.setSelectedValue(index, true);
    13701397        }
    13711398        // Done. Disable add
     
    14131440        // Retrieve the source
    14141441        String source = (String)level_combobox.getSelectedItem();
    1415         // If this object isn't yet in the combobox add it.
    1416         if(level_combobox.getSelectedIndex() == -1) {
    1417             level_combobox.insertItemAt(source, level_combobox.getItemCount());
    1418         }
    14191442        Level level = new Level(source);
    14201443        // Create new metadatum
     
    14221445        metadatum.setValue(name);
    14231446        // Assign new level
     1447        int size = levels_model.getSize();
    14241448        addLevel(level, metadatum);
    1425         // Done. Disable add
     1449        current_levels_list.setSelectedValue(level, true);
    14261450        add_level_button.setEnabled(false);
    14271451        }
     
    14311455        implements ListSelectionListener {
    14321456        public void valueChanged(ListSelectionEvent event) {
    1433         if(!event.getValueIsAdjusting()) {
    1434             Index index = (Index)current_indexes_list.getSelectedValue();
    1435             Object[] selected_objects = current_indexes_list.getSelectedValues();
    1436             if(selected_objects.length == 1) {
    1437             String full_text = index.toString();
    1438             if(full_text.indexOf("\"") != -1) {
    1439                 index_name_field.setText(index.getName());
    1440             }
    1441             ArrayList sources = index.getSources();
    1442             index_combobox.setSelectedItem(sources.get(0));
    1443             }
    1444             if(index != null) {
    1445             move_index_down_button.setEnabled((model.indexOf(index) < model.getSize() - 1));
    1446             move_index_up_button.setEnabled((model.indexOf(index) > 0));
    1447             remove_index_button.setEnabled(true);
    1448             }
    1449             else {
    1450             move_index_down_button.setEnabled(false);
    1451             move_index_up_button.setEnabled(false);
    1452             remove_index_button.setEnabled(false);
    1453             }
    1454         }
    1455         }
     1457        if(event.getValueIsAdjusting()) {
     1458            return;
     1459        }
     1460       
     1461        Index index = (Index)current_indexes_list.getSelectedValue();
     1462        if(index != null) {
     1463            String full_text = index.toString();
     1464            if(full_text.indexOf("\"") != -1) {
     1465            index_name_field.setText(index.getName());
     1466            }
     1467            ArrayList sources = index.getSources();
     1468            index_combobox.setSelectedItem(sources.get(0));
     1469           
     1470           
     1471            move_index_down_button.setEnabled((model.indexOf(index) < model.getSize() - 1));
     1472            move_index_up_button.setEnabled((model.indexOf(index) > 0));
     1473            remove_index_button.setEnabled(true);
     1474        }
     1475        else {
     1476            move_index_down_button.setEnabled(false);
     1477            move_index_up_button.setEnabled(false);
     1478            remove_index_button.setEnabled(false);
     1479        }
     1480        }       
    14561481    }
    14571482
     
    14591484        implements ListSelectionListener {
    14601485        public void valueChanged(ListSelectionEvent event) {
    1461         if(!event.getValueIsAdjusting()) {
    1462             Level level = (Level)current_levels_list.getSelectedValue();
    1463             if(level != null) {
    1464             move_level_down_button.setEnabled((levels_model.indexOf(level) < levels_model.getSize() - 1));
    1465             move_level_up_button.setEnabled((levels_model.indexOf(level) > 0));
    1466             remove_level_button.setEnabled(!level.getName().equals(CollectionConfiguration.DOCUMENT_STR) || levels_model.getSize() > 1);
    1467             }
    1468             else {
    1469             move_level_down_button.setEnabled(false);
    1470             move_level_up_button.setEnabled(false);
    1471             remove_level_button.setEnabled(false);
    1472             }
     1486       
     1487        if(event.getValueIsAdjusting()) {
     1488            return;
     1489        }
     1490       
     1491        Level level = (Level)current_levels_list.getSelectedValue();
     1492        if(level != null) {
     1493            String full_text = level.toString();
     1494            if(full_text.indexOf("\"") != -1) {
     1495            level_name_field.setText(level.getName());
     1496            }
     1497            String level_id = level.getLevel();
     1498            level_combobox.setSelectedItem(level_id);
     1499            move_level_down_button.setEnabled((levels_model.indexOf(level) < levels_model.getSize() - 1));
     1500            move_level_up_button.setEnabled((levels_model.indexOf(level) > 0));
     1501            remove_level_button.setEnabled(true);
     1502        }
     1503        else {
     1504            move_level_down_button.setEnabled(false);
     1505            move_level_up_button.setEnabled(false);
     1506            remove_level_button.setEnabled(false);
    14731507        }
    14741508        }
     
    15091543        String name = index_name_field.getText();
    15101544        Object selected_object = index_combobox.getSelectedItem();
     1545        boolean add_enabled = false;
     1546        boolean replace_enabled = false;
     1547
    15111548        if(name.length() > 0 && selected_object != null) {
    15121549            // Unfortunately we have to generate a valid id
     
    15261563            id = id.substring(StaticStrings.EXTRACTED_NAMESPACE.length());
    15271564            }
     1565           
    15281566            Index index = getIndex(id);
    15291567            if(index == null) {
    1530             add_index_button.setEnabled(true);
    1531             replace_button.setEnabled(false);
     1568            add_enabled = true;
     1569            // we have a new index. is something selected? if so, we can replace
     1570            if (current_indexes_list.getSelectedIndex() != -1) {
     1571                replace_enabled = true;
     1572            }
    15321573            }
    15331574            else {
    1534             add_index_button.setEnabled(false);
    1535             replace_button.setEnabled(!name.equals(index.getName()));
     1575            // the index is already there
     1576            add_enabled = false;
     1577            // but if the name is changed, we can do a replace
     1578            if(!name.equals(index.getName())) {
     1579                replace_enabled = true;
     1580            }
     1581           
    15361582            }
    15371583        }
    15381584        else {
    1539             add_index_button.setEnabled(false);
    1540         }
     1585            add_enabled = false;
     1586            replace_enabled = false;
     1587           
     1588        }
     1589
     1590        // We should now know the button state
     1591        add_index_button.setEnabled(add_enabled);
     1592        replace_index_button.setEnabled(replace_enabled);
     1593       
    15411594        }
    15421595    }
     
    16301683
    16311684        public void actionPerformed(ActionEvent event) {
    1632         Object[] selected_objects = current_indexes_list.getSelectedValues();
    1633         if(selected_objects.length == 1) {
    1634             Index index = (Index) selected_objects[0];
     1685        // We'll just remove the old one and add the new one
     1686        removeIndex((Index) current_indexes_list.getSelectedValue());
     1687        replace_index_button.setEnabled(false);
     1688        add_index_button.setEnabled(true);
     1689        add_index_button.doClick(); // this adds the new one
     1690        add_index_button.setEnabled(false);
     1691       
     1692        //Object[] selected_objects = current_indexes_list.getSelectedValues();
     1693        //if(selected_objects.length == 1) {
     1694        Index index = (Index)current_indexes_list.getSelectedValue();
     1695        if (index != null) {
     1696        //Index index = (Index) selected_objects[0];
    16351697            // Remove old name
    16361698            CollectionDesignManager.collectionmeta_manager.removeMetadata(CollectionConfiguration.STOP_CHARACTER + index.getID());
     
    16391701            // Create new metadatum
    16401702            CollectionMeta metadatum = new CollectionMeta(CollectionConfiguration.STOP_CHARACTER + index.getID());
    1641             index = null;
     1703            //index = null;
    16421704            metadatum.setValue(name);
    16431705            name = null;
     
    16461708            metadatum = null;
    16471709        }
    1648         current_indexes_list.setSelectedValue(selected_objects[0], true);
     1710        //current_indexes_list.setSelectedValue(selected_objects[0], true);
     1711        current_indexes_list.setSelectedValue(index, true);
    16491712        // Done. Disable add
    16501713        add_index_button.setEnabled(false);
    1651         replace_button.setEnabled(false);
     1714        replace_index_button.setEnabled(false);
    16521715        }
    16531716    }
     
    16641727        public void actionPerformed(ActionEvent event) {
    16651728        // Retrieve the selected items
    1666         Object[] selected_objects = current_indexes_list.getSelectedValues();
     1729        //Object[] selected_objects = current_indexes_list.getSelectedValues();
    16671730        // Clear selection
    1668         current_indexes_list.clearSelection();
    1669         for(int i = 0; i < selected_objects.length; i++) {
    1670             Index index = (Index) selected_objects[i];
     1731        //current_indexes_list.clearSelection();
     1732        //for(int i = 0; i < selected_objects.length; i++) {
     1733        //    Index index = (Index) selected_objects[i];
     1734            // Remove any related metadata
     1735        //    CollectionDesignManager.collectionmeta_manager.removeMetadata(CollectionConfiguration.STOP_CHARACTER + index.getID());
     1736            // Remove the index
     1737        //    removeIndex(index);
     1738        //}
     1739        // Disable remove button
     1740        //remove_index_button.setEnabled(false);
     1741        // Check if add should be reenabled
     1742        //eal.validateAddButtonIndex();
     1743        int i = current_indexes_list.getSelectedIndex();
     1744        if (i != -1) {
     1745            Index index = (Index) current_indexes_list.getSelectedValue();
    16711746            // Remove any related metadata
    16721747            CollectionDesignManager.collectionmeta_manager.removeMetadata(CollectionConfiguration.STOP_CHARACTER + index.getID());
    1673             // Remove the index
    16741748            removeIndex(index);
    1675         }
    1676         // Disable remove button
    1677         remove_index_button.setEnabled(false);
     1749           
     1750        //if (i != -1) {
     1751        //removeIndex((Index) index_list.getSelectedValue());
     1752            //}
     1753            int size = current_indexes_list.getModel().getSize();
     1754            if (i == size) {
     1755            i--;
     1756            }
     1757            current_indexes_list.setSelectedIndex(i);
     1758        }
     1759        if (i==-1) {
     1760            // empty list, disable remove button
     1761            remove_index_button.setEnabled(false);
     1762        }
    16781763        // Check if add should be reenabled
    16791764        eal.validateAddButtonIndex();
     1765
     1766        // This will produce an event on the list, updating the other buttons
     1767        //if (size == 0) {
     1768            // We have removed the last index, should be able to add what's filled in currently, if valid
     1769        // validateAddButton();
     1770        //  }
    16801771        }
    16811772    }
     
    16911782
    16921783        public void actionPerformed(ActionEvent event) {
     1784       
     1785        int i = current_levels_list.getSelectedIndex();
     1786        if (i != -1) {
     1787            Level level = (Level) current_levels_list.getSelectedValue();
     1788            CollectionDesignManager.collectionmeta_manager.removeMetadata(CollectionConfiguration.STOP_CHARACTER + level.getLevel());
     1789            removeLevel(level);
     1790            if (i == current_levels_list.getModel().getSize()) {
     1791            i--;
     1792            }
     1793            current_levels_list.setSelectedIndex(i);
     1794        }
    16931795        // Retrieve the selected items
    1694         Object[] selected_objects = current_levels_list.getSelectedValues();
     1796        //Object[] selected_objects = current_levels_list.getSelectedValues();
    16951797        // Clear selection
    1696         current_levels_list.clearSelection();
    1697         for(int i = 0; i < selected_objects.length; i++) {
    1698             Level level = (Level) selected_objects[i];
     1798        //current_levels_list.clearSelection();
     1799        //for(int i = 0; i < selected_objects.length; i++) {
     1800       
     1801            //Level level = (Level) selected_objects[i];
    16991802            // Remove any related metadata
    1700             CollectionDesignManager.collectionmeta_manager.removeMetadata(CollectionConfiguration.STOP_CHARACTER + level.getName());
     1803            //CollectionDesignManager.collectionmeta_manager.removeMetadata(CollectionConfiguration.STOP_CHARACTER + level.getLevel());
    17011804            // Remove the index
    1702             removeLevel(level);
    1703         }
    1704         // Disable remove button
    1705         remove_level_button.setEnabled(false);
     1805            //removeLevel(level);
     1806        //}
     1807       
     1808        if (i==-1) {
     1809            // Disable remove button
     1810            remove_level_button.setEnabled(false);
     1811        }
    17061812        // If there are no levels left, put document back in
    1707         if(levels_model.getSize() == 0) {
    1708             Level level = new Level(CollectionConfiguration.DOCUMENT_STR);
    1709             // Create new metadatum
    1710             CollectionMeta metadatum = new CollectionMeta(CollectionConfiguration.STOP_CHARACTER + CollectionConfiguration.DOCUMENT_STR);
    1711             metadatum.setValue(CollectionConfiguration.DOCUMENT_STR);
    1712             // Assign new level
    1713             addLevel(level, metadatum);     
    1714             level = null;
    1715         }
     1813//      if(levels_model.getSize() == 0) {
     1814//          Level level = new Level(CollectionConfiguration.DOCUMENT_STR);
     1815//          // Create new metadatum
     1816//          CollectionMeta metadatum = new CollectionMeta(CollectionConfiguration.STOP_CHARACTER + CollectionConfiguration.DOCUMENT_STR);
     1817//          metadatum.setValue(CollectionConfiguration.DOCUMENT_STR);
     1818//          // Assign new level
     1819//          addLevel(level, metadatum);     
     1820//          level = null;
     1821//      }
    17161822        // Check if add should be reenabled
    17171823        eal.validateAddButtonLevel();
Note: See TracChangeset for help on using the changeset viewer.