Changeset 10966 for trunk/gli


Ignore:
Timestamp:
2005-11-30T15:55:29+13:00 (18 years ago)
Author:
kjdon
Message:

huge shake up. removed the MGPPControls class, as it was almost a copy of the IndexControls class. there is only one index design panel now, but a couple of bits get switched in and out depending on whether we are in mgpp or mg mode. the mgpp level stuff is in a new class - MGPPLevelPanel, and this gets added as a tab if needed along with the tabbedpane

File:
1 edited

Legend:

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

    r10530 r10966  
    5555    static final private String MGPPINDEXES = "mgpp indexes";
    5656
     57    static final private String ALLFIELDS = "allfields";
    5758    /** The controls for editing the indexes. */
    5859    private Control controls = null;
     
    305306    }
    306307
     308    /* replace an index in the list. new index may have the same sources but a
     309       different name, or may be a new index altogether */
     310    private void replaceIndex(Index old_index, Index new_index,
     311                  CollectionMeta coll_meta) {
     312    if (old_index == null || new_index == null || coll_meta == null) {
     313        return;
     314    }
     315    if (!old_index.getID().equals(new_index.getID()) && contains(new_index)) {
     316        // shoudl we output an error??
     317        System.err.println("new index is already in the list, but is not the old one");
     318        return;
     319    }
     320    // Remove the old index coll meta
     321    CollectionDesignManager.collectionmeta_manager.removeMetadata(CollectionConfiguration.STOP_CHARACTER + old_index.getID());
     322    // Add the new coll meta
     323    CollectionDesignManager.collectionmeta_manager.addMetadatum(coll_meta);
     324
     325    // get the position of the old one
     326    int position = indexOf(old_index);
     327    // remove it
     328    remove(old_index);
     329    // add the new one at that position
     330    add(position, new_index);
     331
     332    // Schedule the collection for saving
     333    Gatherer.c_man.configurationChanged();
     334    }
     335
    307336    /** Method to set the default index.
    308337     * @param index the new default Index
     
    362391            if(0 <= level_int && level_int < 3) {
    363392            String level = Index.LEVEL[level_int];
    364             if(!levels_list.contains(level)) {
    365                 levels_list.add(level);
    366             }
     393            levels_list.add(level);
    367394            level = null;
    368395            }
    369396            ArrayList sources = default_index.getSources();
    370             sources.removeAll(sources_list);
    371397            sources_list.addAll(sources);
    372398        }
     
    435461        }
    436462        else {
     463        // we already have mgpp indexes assigned
    437464        // Replace mg element with mgpp element
    438465        setRoot(mgpp_element);
     
    441468        mg_element.setAttribute(CollectionConfiguration.ASSIGNED_ATTRIBUTE, CollectionConfiguration.FALSE_STR);
    442469        mg_element = null;
    443         if(default_index != null) {
    444         default_index.setAssigned(false);
    445         }
     470        if(default_index != null) {
     471        //default_index.setAssigned(false);
     472        default_index.setLevel(-1);
     473        }
    446474    }
    447475    // change MGPP -> MG
     
    453481        if(default_index != null) {
    454482        default_index.setAssigned(true);
     483        default_index.setLevel(1); // for now
    455484        }
    456485        // 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);
     486        NodeList indexes = mg_element.getElementsByTagName(CollectionConfiguration.INDEX_ELEMENT);
    458487        if(indexes.getLength() == 0) {
    459488        Index index = getIndex(CollectionConfiguration.TEXT_STR);
     
    502531    implements Control {
    503532
    504     private CardLayout card_layout;
    505     private CheckList source_list;
    506     private JButton add_button;
     533    private JTextArea instruction_textarea;
     534
     535    private JList index_list;
     536
    507537    private JButton move_down_button;
    508538    private JButton move_up_button;
     539    private JButton set_default_button;
     540
     541    private JTextField name_textfield ;
     542    private CheckList source_list;
     543    // mg uses a level box
     544    private JComboBox level_combobox;
     545    // mgpp has a allfields selector
     546    private JCheckBox allfields_box;
     547
     548    private JButton add_button;
     549    private JButton add_all_button;
    509550    private JButton remove_button;
    510551    private JButton replace_button;
    511     private JButton set_default_button;
    512     private JComboBox level_combobox;
    513     private JList index_list;
    514     private JTextArea instruction_textarea;
    515     private JTextField name_textfield ;
    516     // when we are in mgpp mode, we want to remove the mg listener
    517     // the underlying model is the same between the two JLists, and
    518     // both listeners get notified when the model changes, but the mg
    519     // listener doesn't care about mgpp events
    520     private ListSelectionListener index_list_listener;
    521    
    522     private MGPPControl mgppindexes_control;
    523 
     552
     553    // soem panels that we need to manipulate later on
     554    private JPanel boxes_pane;
     555    private JPanel labels_pane;
     556    private JLabel level_label;
     557    private JPanel allfields_pane;
     558   
     559    // we add in a tabbed pane for mgpp mode
     560    private JTabbedPane tabbed_pane;
     561    // the main index set up pane
     562    private JPanel main_index_pane;
     563
     564    // for the levels tab in mgpp mode
     565    private MGPPLevelsPanel mgpplevels_pane;
     566
     567    private boolean mgpp_enabled = false;
    524568    /** Constructor.
    525569     * @see org.greenstone.gatherer.Configuration
     
    537581        new_data.add(CollectionConfiguration.TEXT_STR);
    538582        new_data.addAll(MetadataSetManager.getEveryMetadataSetElement());
     583       
    539584        // Creation
    540         JPanel mgindexes_panel = new JPanel();
    541         card_layout = new CardLayout();
    542 
    543         // MG Index Controls
    544 
    545         JPanel mg_indexes_pane = new JPanel();
    546 
    547585        JPanel instruction_pane = new JPanel();
    548586        JLabel title_label = new JLabel();
     
    556594        instruction_textarea.setWrapStyleWord(true);
    557595        Dictionary.registerText(instruction_textarea, "CDM.IndexManager.Instructions");
    558 
     596       
    559597        JPanel assigned_indexes_pane = new JPanel();
    560598        JLabel index_label = new JLabel();
     
    563601        index_list.setCellRenderer(new IndexListRenderer());
    564602        index_list.setVisibleRowCount(2);
     603        index_list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
     604       
     605       
    565606        JPanel movement_pane = new JPanel();
    566 
    567607        move_up_button = new JButton("", JarTools.getImage("arrow-up.gif"));
    568608        move_up_button.setEnabled(false);
     
    574614        move_down_button.setMnemonic(KeyEvent.VK_D);
    575615        Dictionary.registerBoth(move_down_button, "CDM.Move.Move_Down", "CDM.Move.Move_Down_Tooltip");
    576 
     616       
    577617        set_default_button = new GLIButton();
    578618        set_default_button.setEnabled(false);
     
    580620        Dictionary.registerBoth(set_default_button, "CDM.IndexManager.Set_Default", "CDM.IndexManager.Set_Default_Tooltip");
    581621
    582         JPanel index_pane = new JPanel();
     622        JPanel new_index_pane = new JPanel();
    583623        JPanel details_pane = new JPanel();
    584         JPanel labels_pane = new JPanel();
    585         JPanel boxes_pane = new JPanel();
    586         JPanel content_pane = new JPanel();
     624        labels_pane = new JPanel();
     625        boxes_pane = new JPanel();
     626        main_index_pane = new JPanel();
    587627
    588628        JLabel name_label = new JLabel();
     
    598638        Dictionary.registerTooltip(source_list, "CDM.IndexManager.Source_Tooltip");
    599639
    600         JLabel level_label = new JLabel();
     640        level_label = new JLabel();
    601641        Dictionary.registerText(level_label, "CDM.IndexManager.Level");
    602642        level_combobox = new JComboBox();
     
    614654        Dictionary.registerBoth(add_button, "CDM.IndexManager.Add_Index", "CDM.IndexManager.Add_Index_Tooltip");
    615655
     656        add_all_button = new GLIButton();
     657        add_all_button.setEnabled(true);
     658        add_all_button.setMnemonic(KeyEvent.VK_L);
     659        Dictionary.registerBoth(add_all_button, "CDM.IndexManager.MGPP.Add_All_Metadata", "CDM.IndexManager.MGPP.Add_All_Metadata_Tooltip");
     660
    616661        remove_button = new GLIButton();
    617662        remove_button.setEnabled(false);
     
    623668        Dictionary.registerBoth(replace_button, "CDM.IndexManager.MGPP.Replace_Index", "CDM.IndexManager.MGPP.Replace_Index_Tooltip");
    624669
    625         // This class is getting a little crowded, so I'll generate the many mgpp controls in a inner class.
    626         mgppindexes_control = new MGPPControl();
    627 
     670        allfields_pane = new JPanel();
     671        allfields_box = new JCheckBox();
     672        JLabel allfields_label = new JLabel();
     673        Dictionary.registerText(allfields_label, "CDM.IndexManager.Allfields_Index");
     674        allfields_pane.setLayout(new BorderLayout());
     675        allfields_pane.add(allfields_box, BorderLayout.WEST);
     676        allfields_pane.add(allfields_label, BorderLayout.CENTER);
     677       
    628678        // Listeners
    629679        add_button.addActionListener(new AddListener());
    630680        add_button.addActionListener(CollectionDesignManager.buildcol_change_listener);
     681        add_all_button.addActionListener(new AddAllActionListener());
     682        add_all_button.addActionListener(CollectionDesignManager.buildcol_change_listener);
     683        remove_button.addActionListener(new RemoveListener());
     684        remove_button.addActionListener(CollectionDesignManager.buildcol_change_listener);
     685        replace_button.addActionListener(new ReplaceListener());
     686        replace_button.addActionListener(CollectionDesignManager.buildcol_change_listener);
    631687        move_down_button.addActionListener(new MoveListener(false));
    632688        move_down_button.addActionListener(CollectionDesignManager.buildcol_change_listener);
    633689        move_up_button.addActionListener(new MoveListener(true));
    634690        move_up_button.addActionListener(CollectionDesignManager.buildcol_change_listener);
    635         remove_button.addActionListener(new RemoveListener());
    636         remove_button.addActionListener(CollectionDesignManager.buildcol_change_listener);
    637         replace_button.addActionListener(new ReplaceListener());
    638         replace_button.addActionListener(CollectionDesignManager.buildcol_change_listener);
    639691        set_default_button.addActionListener(new SetDefaultListener());
    640692        set_default_button.addActionListener(CollectionDesignManager.buildcol_change_listener);
     693
    641694        name_textfield.getDocument().addDocumentListener(new NameListener());
    642695        level_combobox.addItemListener(new LevelListener());
    643         // Create the index_list_listener but don't add in to the list - this gets done in gainFocus, we don't want it twice.
    644         index_list_listener = new IndexListListener();
     696        index_list.addListSelectionListener(new IndexListListener());
    645697        source_list.addListSelectionListener(new SourceListListener());
     698        allfields_box.addItemListener(new AllfieldsCheckBoxListener());
    646699
    647700        // Layout
     
    678731        details_pane.add(boxes_pane, BorderLayout.CENTER);
    679732
    680         button_pane.setLayout(new GridLayout(1,3));
     733        button_pane.setLayout(new GridLayout(2,2,5,0));
    681734        button_pane.add(add_button);
     735        button_pane.add(add_all_button);
    682736        button_pane.add(replace_button);
    683737        button_pane.add(remove_button);
    684738
    685         index_pane.setLayout(new BorderLayout());
    686         index_pane.add(details_pane, BorderLayout.CENTER);
    687         index_pane.add(button_pane, BorderLayout.SOUTH);
    688 
    689         content_pane.setLayout(new BorderLayout());
    690         content_pane.add(assigned_indexes_pane, BorderLayout.NORTH);
    691         content_pane.add(index_pane, BorderLayout.CENTER);
    692 
    693         mgindexes_panel.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
    694         mgindexes_panel.setLayout(new BorderLayout());
    695         mgindexes_panel.add(instruction_pane, BorderLayout.NORTH);
    696         mgindexes_panel.add(content_pane, BorderLayout.CENTER);
    697 
    698         setLayout(card_layout);
    699         add(mgindexes_panel, MGINDEXES);
    700         add(mgppindexes_control, MGPPINDEXES);
     739        new_index_pane.setLayout(new BorderLayout());
     740        new_index_pane.add(details_pane, BorderLayout.CENTER);
     741        new_index_pane.add(button_pane, BorderLayout.SOUTH);
     742
     743        main_index_pane.setLayout(new BorderLayout());
     744        main_index_pane.add(assigned_indexes_pane, BorderLayout.NORTH);
     745        main_index_pane.add(new_index_pane, BorderLayout.CENTER);
     746
     747        setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
     748        setLayout(new BorderLayout());
     749        add(instruction_pane, BorderLayout.NORTH);
     750        add(main_index_pane, BorderLayout.CENTER);
     751
     752        // for later, if we go to MGPP mode
     753        tabbed_pane = new JTabbedPane();
    701754    }
    702755
     
    705758     */
    706759    public void destroy() {
    707         mgppindexes_control.destroy();
    708         mgppindexes_control = null;
    709760    }
    710761
    711762    public void gainFocus() {
    712         boolean mgpp_enabled = CollectionDesignManager.searchtype_manager.isSearchTypeEnabled();
     763        boolean old_mgpp_enabled = mgpp_enabled;
     764        mgpp_enabled = CollectionDesignManager.searchtype_manager.isSearchTypeEnabled();
     765        boolean changed_state = (old_mgpp_enabled != mgpp_enabled);
     766        if (changed_state) {
     767        // reset the underlying indexes and levels elements
     768        setMGPPEnabled(mgpp_enabled);
     769        }
    713770        if(instruction_textarea != null) {
    714771        instruction_textarea.setCaretPosition(0);
    715772        }
     773        /* reset the source list - may have built between then and now */
     774        ArrayList new_data = new ArrayList();
     775        new_data.add(CollectionConfiguration.TEXT_STR);
     776        new_data.addAll(MetadataSetManager.getEveryMetadataSetElement());
     777        source_list.setListData(new_data);
     778        new_data = null;
     779       
    716780        if(mgpp_enabled) {
    717         // remove the mg index list listener first
    718         index_list.removeListSelectionListener(index_list_listener);
    719         mgppindexes_control.gainFocus();
     781        if (changed_state) {
     782            // switch the variable bits
     783            boxes_pane.remove(level_combobox);
     784            labels_pane.remove(level_label);
     785            boxes_pane.add(allfields_pane, BorderLayout.SOUTH);
     786            //put back the tabbed pane
     787            remove(main_index_pane);
     788            add(tabbed_pane, BorderLayout.CENTER);
     789            tabbed_pane.insertTab(Dictionary.get("CDM.IndexManager.MGPP.Indexes"), null, main_index_pane, null, 0);
     790            if (mgpplevels_pane == null) {
     791            mgpplevels_pane = new MGPPLevelsPanel();
     792            tabbed_pane.insertTab(Dictionary.get("CDM.IndexManager.MGPP.Levels"), null, mgpplevels_pane, null, 1);
     793            }
     794           
     795        }
    720796        }
    721797        else {
    722         // remove the mgpp listener first
    723         mgppindexes_control.removeIndexListListener();
    724         // add the mg listener back in
    725         index_list.addListSelectionListener(index_list_listener);
    726         // Reload the assigned indexes list.
    727         ArrayList new_data = new ArrayList();
    728         new_data.add(CollectionConfiguration.TEXT_STR);
    729         new_data.addAll(MetadataSetManager.getEveryMetadataSetElement());
    730         // reset the model in the list and combobox
    731         source_list.setListData(new_data);
    732         new_data = null;
    733         // refresh the indexList
    734         index_list.updateUI();
    735         // if there is one selected, fill in the controls
    736         updateControlsWithSelectedIndex();
    737         }
    738         // Bring the appropriate card to the front
    739         if(mgpp_enabled) {
    740         card_layout.show(this, MGPPINDEXES);
    741         }
    742         else {
    743         card_layout.show(this, MGINDEXES);
    744         }
     798        if (changed_state) {
     799            boxes_pane.remove(allfields_pane);
     800            boxes_pane.add(level_combobox, BorderLayout.SOUTH);
     801            labels_pane.add(level_label, BorderLayout.SOUTH);
     802            remove(tabbed_pane);
     803            tabbed_pane.remove(0);
     804            add(main_index_pane, BorderLayout.CENTER);
     805        }
     806        }
     807        updateControlsWithSelectedIndex();
     808       
    745809    }
    746810
    747811    public void loseFocus() {
    748812    }
    749 
     813   
    750814    private void updateControlsWithSelectedIndex() {
    751815       
     
    760824        String name = CollectionDesignManager.collectionmeta_manager.getMetadatum("." + id).getValue(true);
    761825        name_textfield.setText(name);
    762         level_combobox.setSelectedIndex(selected_index.getLevel());
     826        if (!mgpp_enabled) {
     827        level_combobox.setSelectedIndex(selected_index.getLevel());
     828        }
     829        // TODO: need to set all fields if necessary
    763830        source_list.clearTicked();
    764831        ArrayList sources = selected_index.getSources();
     
    767834    }
    768835   
    769     private void validateAddButton()
    770     {
     836    private void validateAddButton() {
     837
     838        String new_index_name = name_textfield.getText();
     839        // indexes must have a name
     840        if (new_index_name.length() == 0) {
     841        add_button.setEnabled(false);
     842        replace_button.setEnabled(false);
     843        return;
     844        }
     845       
    771846        boolean add_enabled = false;
    772847        boolean replace_enabled = false;
    773 
    774         // Indexes must have a name
    775         if (name_textfield.getText().length() == 0) {
    776         add_enabled = false;
    777         }
    778         // Can't add a new index if no sources are selected
    779         else if (source_list.isNothingTicked()) {
    780         add_enabled = false;
    781         }
    782         // If we get this far, create a dummy index and see if it's already assigned in the collection
    783         else {
     848       
     849        Index index;
     850        ArrayList sources;
     851        if (mgpp_enabled && allfields_box.isSelected()) {
     852        sources = new ArrayList();
     853        sources.add(ALLFIELDS);
     854        index = new Index(sources);
     855
     856        } else if (!source_list.isNothingTicked()) {
    784857        Object object[] = source_list.getTicked().toArray();
    785         ArrayList sources = new ArrayList();
     858        sources = new ArrayList();
    786859        for(int i = 0; i < object.length; i++) {
    787860            sources.add(object[i]);
    788861        }
    789862        object = null;
    790         Index index = new Index(level_combobox.getSelectedIndex(), sources);
    791         sources = null;
    792         if (model.contains(index)) {
    793             add_enabled = false;
    794 
    795             // Here we need to check if we have changed the name - if so, we can enable the replace button
    796             if (index_list.getSelectedIndex() != -1) {
    797             Index selected_index = (Index)index_list.getSelectedValue();
    798             String name = name_textfield.getText();
    799             String index_name = CollectionDesignManager.collectionmeta_manager.getMetadatum(CollectionConfiguration.STOP_CHARACTER+selected_index.getID()).getValue(true);
    800             if (!index_name.equals(name)){
     863       
     864        if (mgpp_enabled) {
     865            index = new Index(sources);
     866        } else {
     867            index = new Index(level_combobox.getSelectedIndex(), sources);
     868        }
     869        } else {
     870        add_button.setEnabled(false);
     871        replace_button.setEnabled(false);
     872        return;
     873        }
     874        sources = null;
     875        if (model.contains(index)) {
     876        add_enabled = false;
     877        // may be able to replace if the index selected is the same but with a different name
     878        if (index_list.getSelectedIndex() != -1) {
     879            String id = index.getID();
     880           
     881            String selected_index_id = ((Index)index_list.getSelectedValue()).getID();
     882            if (id.equals(selected_index_id)) {
     883            // check the name
     884            String existing_index_name = CollectionDesignManager.collectionmeta_manager.getMetadatum(CollectionConfiguration.STOP_CHARACTER+id).getValue(true);
     885            if (!existing_index_name.equals(new_index_name)) {
    801886                replace_enabled = true;
    802887            }
    803888            }
    804889        }
    805         else {
    806             add_enabled = true;
    807 
    808             // We have a new index, do we have something selected in the index list? if so, enable the replace button
    809             if (index_list.getSelectedIndex() != -1) {
    810             replace_enabled = true;
    811             }
    812         }
    813         }
    814 
    815         // We should now know the add_button state
     890        } else {
     891        add_enabled = true;
     892        if (index_list.getSelectedIndex() != -1) {
     893            // there is something selected, so we can replace
     894            replace_enabled = true;
     895        }
     896        }
     897       
     898        // We should now know the button state
    816899        add_button.setEnabled(add_enabled);
    817900        replace_button.setEnabled(replace_enabled);
    818901    }
    819 
    820 
     902   
    821903    private class AddListener
    822904        implements ActionListener
     
    825907        {
    826908        String name = name_textfield.getText();
    827         if (!source_list.isNothingTicked() && name.length() != 0) {
     909        if (name.length() == 0) return;
     910        Index index;
     911        if (mgpp_enabled && allfields_box.isSelected()) {
     912            ArrayList sources = new ArrayList();
     913            sources.add(ALLFIELDS);
     914            index = new Index(sources);
     915        }
     916        else if (!source_list.isNothingTicked()) {
    828917            ArrayList sources = source_list.getTicked();
    829             Index index = new Index(level_combobox.getSelectedIndex(), sources);
    830 
    831             // Before we add the index to the model, we have to add the collection metadata for this
    832             CollectionMeta metadatum = new CollectionMeta(CollectionConfiguration.STOP_CHARACTER + index.getID());
    833             metadatum.setValue(name);
    834 
    835             // Finally, add the index
    836             addIndex(index, metadatum);
    837             index_list.setSelectedValue(index, true);
    838         }
    839         }
    840     }
    841 
    842 
    843     /** Listens for selections within the list on the IndexManager controls, and if a change is detected enables, or disables, controls appropriately. */
    844     private class IndexListListener
    845         implements ListSelectionListener
    846     {
    847         /** This method is called whenever the source list selection changes. When it does we need to fill in the various parts of the list description panel
    848          * @param event A <strong>ListSelectionEvent</strong> containing further information about the list selection.
    849          */
    850         public void valueChanged(ListSelectionEvent event)
    851         {
    852         if (event.getValueIsAdjusting()) {
     918            if(mgpp_enabled) {
     919            index = new Index(sources);
     920            } else {
     921            index = new Index(level_combobox.getSelectedIndex(), sources);
     922            }
     923        } else {
    853924            return;
    854925        }
    855 
    856         Object value = index_list.getSelectedValue();
    857         if (value == null) {
    858             move_down_button.setEnabled(false);
    859             move_up_button.setEnabled(false);
    860             remove_button.setEnabled(false);
    861             replace_button.setEnabled(false);
    862             set_default_button.setEnabled(false);
    863             return;
    864         }
    865 
    866         // Enable the buttons appropriately
    867         remove_button.setEnabled(true);
    868         set_default_button.setEnabled(default_index == null || !default_index.equals(value));
    869         int i = index_list.getSelectedIndex();
    870         int size = index_list.getModel().getSize();
    871         if (i > 0) {
    872             move_up_button.setEnabled(true);
    873         }
    874         else {
    875             move_up_button.setEnabled(false);
    876         }
    877         if (i < size-1){
    878             move_down_button.setEnabled(true);
    879         }
    880         else {
    881             move_down_button.setEnabled(false);
    882         }
    883 
    884         // Need to fill in the rest of the bits
    885         updateControlsWithSelectedIndex();     
    886         }
    887     }
    888 
    889     private class IndexListRenderer
    890         extends DefaultListCellRenderer {
    891 
    892         /** Return a component that has been configured to display the specified value. */
    893         public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
    894         JLabel component = (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
    895         if(default_index != null && default_index.equals(value)) {
    896             component.setText(component.getText() + " " + Dictionary.get("CDM.IndexManager.Default_Index_Indicator"));
    897         }
    898         return component;
    899         }
    900 
    901     }
    902 
    903     private class LevelListener
    904         implements ItemListener {
    905         public void itemStateChanged(ItemEvent event) {
    906         if(event.getStateChange() == ItemEvent.SELECTED) {
    907             // just want to validate the add button
    908             validateAddButton();
    909 
    910         }
    911         }
    912     }
    913 
    914     private class MoveListener
    915         implements ActionListener {
    916 
    917         private boolean move_up;
    918 
    919         public MoveListener(boolean move_up) {
    920         this.move_up = move_up;
    921         }
    922 
    923         public void actionPerformed(ActionEvent event) {
    924         // Retrieve the selected index
    925         Index index = (Index) index_list.getSelectedValue();
    926         if(index != null) {
    927             moveIndex(index, move_up);
    928             // Ensure the index that moved is still selected
    929             index_list.setSelectedValue(index, true);
    930             index = null;
    931         }
    932         }
    933     }
    934 
    935 
    936     /** Listens for key presses within the name field, and enabled or disables controls as appropriate. */
    937     private class NameListener
    938         implements DocumentListener
    939     {
    940         public void changedUpdate(DocumentEvent e)
    941         {
    942         validateAddButton();
    943         }
    944 
    945         public void insertUpdate(DocumentEvent e)
    946         {
    947         validateAddButton();
    948         }
    949 
    950         public void removeUpdate(DocumentEvent e)
    951         {
    952         validateAddButton();
    953         }
    954     }
    955 
    956 
    957     private class RemoveListener
    958         implements ActionListener
    959     {
    960         public void actionPerformed(ActionEvent event)
    961         {
    962         int i = index_list.getSelectedIndex();
    963         if (i != -1) {
    964             removeIndex((Index) index_list.getSelectedValue());
    965         }
    966         int size = index_list.getModel().getSize();
    967         if (i == size) {
    968             i--;
    969         }
    970         index_list.setSelectedIndex(i);
    971 
    972         // This will produce an event on the list, updating the other buttons
    973         if (size == 0) {
    974             // We have removed the last index, should be able to add what's filled in currently, if valid
    975             validateAddButton();
    976         }
    977         }
    978     }
    979 
    980 
    981     private class ReplaceListener
    982         implements ActionListener
    983     {
    984         public void actionPerformed(ActionEvent event)
    985         {
    986         if (index_list.isSelectionEmpty()) {
    987             // This should never happen, but just in case...
    988             replace_button.setEnabled(false);
    989             return;
    990         }
    991 
    992         // We'll just remove the old one and add the new one
    993         removeIndex((Index) index_list.getSelectedValue());
    994         replace_button.setEnabled(false);
    995         add_button.setEnabled(true);
    996         add_button.doClick();
     926         
     927        // Before we add the index to the model, we have to add the collection metadata for this
     928        CollectionMeta metadatum = new CollectionMeta(CollectionConfiguration.STOP_CHARACTER + index.getID());
     929        metadatum.setValue(name);
     930       
     931        // Finally, add the index
     932        addIndex(index, metadatum);
     933        index_list.setSelectedValue(index, true);
    997934        add_button.setEnabled(false);
    998         }
    999     }
    1000 
    1001 
    1002     private class SetDefaultListener
    1003         implements ActionListener {
    1004 
    1005         public void actionPerformed(ActionEvent event) {
    1006         Index index = (Index) index_list.getSelectedValue();
    1007         if(index != null) {
    1008             setDefault(index);
    1009             // This should cause a repaint of just the desired row
    1010             index_list.setSelectedValue(index, true);
    1011         }
    1012         set_default_button.setEnabled(false);
    1013         }
    1014     }
    1015 
    1016 
    1017     private class SourceListListener
    1018         implements ListSelectionListener
    1019     {
    1020         public void valueChanged(ListSelectionEvent event)
    1021         {
    1022         validateAddButton();
    1023         }
    1024     }
    1025     }
    1026 
    1027     private class MGPPControl
    1028     extends JPanel {
    1029 
    1030     private GComboBox index_combobox;
    1031     private GComboBox level_combobox;
    1032     private JButton add_index_button;
    1033     private JButton add_all_button;
    1034     private JButton add_level_button;
    1035     private JButton move_index_down_button;
    1036     private JButton move_level_down_button;
    1037     private JButton move_index_up_button;
    1038     private JButton move_level_up_button;
    1039     private JButton replace_index_button;
    1040     private JButton remove_index_button;
    1041     private JButton remove_level_button;
    1042     private JLabel current_levels_label;
    1043     private JLabel current_indexes_label;
    1044     private JLabel index_label;
    1045     private JLabel index_name_label;
    1046     private JLabel level_label;
    1047     private JLabel level_name_label;
    1048     private JLabel move_index_down_label;
    1049     private JLabel move_level_down_label;
    1050     private JLabel move_index_up_label;
    1051     private JLabel move_level_up_label;
    1052     private JLabel title_label;
    1053     private JList current_levels_list;
    1054     private JList current_indexes_list;
    1055     private JTabbedPane tabbed_pane;
    1056     private JTextArea instructions_textarea;
    1057     private JTextField index_name_field;
    1058     private JTextField level_name_field;
    1059    
    1060     // when we are in mg mode, we want to remove the mgpp listener
    1061     // the underlying model is the same between the two JLists, and
    1062     // both listeners get notified when the model changes, but the mgpp
    1063     // listener doesn't care about mg events
    1064     private ListSelectionListener mgpp_index_list_listener;
    1065    
    1066     public MGPPControl() {
    1067         // Create Indexes
    1068         JPanel indexes_panel = new JPanel();
    1069 
    1070         JPanel current_indexes_panel = new JPanel();
    1071 
    1072         current_indexes_label = new JLabel();
    1073         Dictionary.registerText(current_indexes_label, "CDM.IndexManager.MGPP.Current_Indexes");
    1074         current_indexes_list = new JList(model);
    1075         current_indexes_list.setVisibleRowCount(5);
    1076         current_indexes_list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    1077 
    1078         JPanel index_movement_panel = new JPanel();
    1079 
    1080         move_index_up_button = new JButton("", JarTools.getImage("arrow-up.gif"));
    1081         move_index_up_button.setEnabled(false);
    1082         move_index_up_button.setMnemonic(KeyEvent.VK_U);
    1083         Dictionary.registerBoth(move_index_up_button, "CDM.Move.Move_Up", "CDM.Move.Move_Up_Tooltip");
    1084 
    1085         move_index_down_button = new JButton("", JarTools.getImage("arrow-down.gif"));
    1086         move_index_down_button.setEnabled(false);
    1087         move_index_down_button.setMnemonic(KeyEvent.VK_D);
    1088         Dictionary.registerBoth(move_index_down_button, "CDM.Move.Move_Down", "CDM.Move.Move_Down_Tooltip");
    1089 
    1090         JPanel index_spacer_panel = new JPanel();
    1091         JPanel index_body_panel = new JPanel();
    1092         JPanel index_details_panel = new JPanel();
    1093         JPanel index_labels_panel = new JPanel();
    1094 
    1095         index_name_label = new JLabel();
    1096         Dictionary.registerText(index_name_label, "CDM.IndexManager.Index_Name");
    1097 
    1098         index_name_field = new JTextField();
    1099         index_name_field.setPreferredSize(FIELD_SIZE);
    1100         Dictionary.registerTooltip(index_name_field, "CDM.IndexManager.Index_Name_Tooltip");
    1101 
    1102         JPanel index_boxes_panel = new JPanel();
    1103 
    1104         index_label = new JLabel("CDM.IndexManager.MGPP.Index");
    1105         Dictionary.registerText(index_label, "CDM.IndexManager.MGPP.Index");
    1106 
    1107         index_combobox = new GComboBox();
    1108         index_combobox.setPreferredSize(FIELD_SIZE);
    1109         index_combobox.setBackgroundNonSelectionColor(Configuration.getColor("coloring.editable_background", false));
    1110         index_combobox.setBackgroundSelectionColor(Configuration.getColor("coloring.collection_selection_background", false));
    1111         index_combobox.setEditable(false);  // Warning: setting this to true opens a big can of worms
    1112         index_combobox.setTextNonSelectionColor(Configuration.getColor("coloring.workspace_tree_foreground", false));
    1113         index_combobox.setTextSelectionColor(Configuration.getColor("coloring.collection_selection_foreground", false));
    1114         Dictionary.registerTooltip(index_combobox, "CDM.IndexManager.MGPP.Index_Tooltip");
    1115 
    1116         JPanel index_button_panel = new JPanel();
    1117 
    1118         add_index_button = new GLIButton();
    1119         add_index_button.setEnabled(false);
    1120         add_index_button.setMnemonic(KeyEvent.VK_A);
    1121         Dictionary.registerBoth(add_index_button, "CDM.IndexManager.Add_Index", "CDM.IndexManager.Add_Index_Tooltip");
    1122 
    1123         add_all_button = new GLIButton();
    1124         add_all_button.setEnabled(true);
    1125         add_all_button.setMnemonic(KeyEvent.VK_L);
    1126         Dictionary.registerBoth(add_all_button, "CDM.IndexManager.MGPP.Add_All_Metadata", "CDM.IndexManager.MGPP.Add_All_Metadata_Tooltip");
    1127 
    1128         replace_index_button = new GLIButton();
    1129         replace_index_button.setEnabled(false);
    1130         replace_index_button.setMnemonic(KeyEvent.VK_C);
    1131         Dictionary.registerBoth(replace_index_button, "CDM.IndexManager.MGPP.Replace_Index", "CDM.IndexManager.MGPP.Replace_Index_Tooltip");
    1132 
    1133         remove_index_button = new GLIButton();
    1134         remove_index_button.setEnabled(false);
    1135         remove_index_button.setMnemonic(KeyEvent.VK_A);
    1136         Dictionary.registerBoth(remove_index_button, "CDM.IndexManager.Remove_Index", "CDM.IndexManager.Remove_Index_Tooltip");
    1137 
    1138         JPanel index_empty_panel = new JPanel();
    1139 
    1140         // Connect Indexes
    1141         EnableAddIndexListener index_eal = new EnableAddIndexListener();
    1142         add_index_button.addActionListener(new AddIndexActionListener());
    1143         add_all_button.addActionListener(new AddAllActionListener());
    1144        
    1145         // Create the index_list_listener but don't add in to the list - this gets done in gainFocus, we don't want it twice.
    1146         mgpp_index_list_listener = new CurrentIndexesListSelectionListener();
    1147         index_combobox.addActionListener(index_eal);
    1148         ((JTextField)index_combobox.getEditor().getEditorComponent()).getDocument().addDocumentListener(index_eal);
    1149         index_name_field.getDocument().addDocumentListener(index_eal);
    1150         move_index_down_button.addActionListener(new MoveIndexDownListener());
    1151         move_index_up_button.addActionListener(new MoveIndexUpListener());
    1152         replace_index_button.addActionListener(new ReplaceIndexActionListener());
    1153         remove_index_button.addActionListener(new RemoveIndexActionListener(index_eal));
    1154 
    1155         // Layout Indexes
    1156         index_movement_panel.setLayout(new GridLayout(2,1));
    1157         index_movement_panel.add(move_index_up_button);
    1158         index_movement_panel.add(move_index_down_button);
    1159 
    1160         current_indexes_panel.setLayout(new BorderLayout());
    1161         current_indexes_panel.add(current_indexes_label, BorderLayout.NORTH);
    1162         current_indexes_panel.add(new JScrollPane(current_indexes_list), BorderLayout.CENTER);
    1163         current_indexes_panel.add(index_movement_panel, BorderLayout.EAST);
    1164 
    1165 
    1166         index_labels_panel.setLayout(new GridLayout(2,1));
    1167         index_labels_panel.add(index_name_label);
    1168         index_labels_panel.add(index_label);
    1169 
    1170         index_boxes_panel.setLayout(new GridLayout(2,1));
    1171         index_boxes_panel.add(index_name_field);
    1172         index_boxes_panel.add(index_combobox);
    1173 
    1174         index_details_panel.setLayout(new BorderLayout(5,0));
    1175         index_details_panel.add(index_labels_panel, BorderLayout.WEST);
    1176         index_details_panel.add(index_boxes_panel, BorderLayout.CENTER);
    1177 
    1178         index_button_panel.setBorder(BorderFactory.createEmptyBorder(5,0,0,0));
    1179         index_button_panel.setLayout(new GridLayout(2,2,5,0));
    1180         index_button_panel.add(add_index_button);
    1181         index_button_panel.add(add_all_button);
    1182         index_button_panel.add(replace_index_button);
    1183         index_button_panel.add(remove_index_button);
    1184 
    1185         index_body_panel.setBorder(BorderFactory.createEmptyBorder(5,0,0,0));
    1186         index_body_panel.setLayout(new BorderLayout());
    1187         index_body_panel.add(index_details_panel, BorderLayout.CENTER);
    1188         index_body_panel.add(index_button_panel, BorderLayout.SOUTH);
    1189 
    1190         index_spacer_panel.setLayout(new BorderLayout());
    1191         index_spacer_panel.add(index_body_panel, BorderLayout.NORTH);
    1192         index_spacer_panel.add(index_empty_panel, BorderLayout.CENTER);
    1193 
    1194         indexes_panel.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
    1195         indexes_panel.setLayout(new BorderLayout());
    1196         indexes_panel.add(current_indexes_panel, BorderLayout.NORTH);
    1197         indexes_panel.add(index_spacer_panel, BorderLayout.CENTER);
    1198 
    1199         // Create Levels
    1200         JPanel levels_panel = new JPanel();
    1201 
    1202         JPanel current_levels_panel = new JPanel();
    1203 
    1204         current_levels_label = new JLabel();
    1205         Dictionary.registerText(current_levels_label, "CDM.IndexManager.MGPP.Current_Levels");
    1206 
    1207         current_levels_list = new JList(levels_model);
    1208         current_levels_list.setVisibleRowCount(5);
    1209         current_levels_list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    1210         JPanel level_movement_panel = new JPanel();
    1211 
    1212         move_level_up_button = new JButton("", JarTools.getImage("arrow-up.gif"));
    1213         move_level_up_button.setEnabled(false);
    1214         move_level_up_button.setMnemonic(KeyEvent.VK_U);
    1215         Dictionary.registerBoth(move_level_up_button, "CDM.Move.Move_Up", "CDM.Move.Move_Up_Tooltip");
    1216 
    1217         move_level_down_button = new JButton("", JarTools.getImage("arrow-down.gif"));
    1218         move_level_down_button.setEnabled(false);
    1219         move_level_down_button.setMnemonic(KeyEvent.VK_D);
    1220         Dictionary.registerBoth(move_level_down_button, "CDM.Move.Move_Down", "CDM.Move.Move_Down_Tooltip");
    1221 
    1222         JPanel level_spacer_panel = new JPanel();
    1223         JPanel level_body_panel = new JPanel();
    1224         JPanel level_details_panel = new JPanel();
    1225         JPanel level_labels_panel = new JPanel();
    1226         JPanel level_boxes_panel = new JPanel();
    1227 
    1228         level_name_label = new JLabel();
    1229         Dictionary.registerText(level_name_label, "CDM.IndexManager.MGPP.Level_Name");
    1230 
    1231         level_name_field = new JTextField();
    1232         level_name_field.setPreferredSize(FIELD_SIZE);
    1233         Dictionary.registerTooltip(level_name_field, "CDM.IndexManager.MGPP.Level_Name_Tooltip");
    1234 
    1235 
    1236         level_label = new JLabel();
    1237         Dictionary.registerText(level_label, "CDM.IndexManager.MGPP.Level");
    1238 
    1239         level_combobox = new GComboBox(Index.LEVEL);
    1240         level_combobox.setPreferredSize(FIELD_SIZE);
    1241         level_combobox.setBackgroundNonSelectionColor(Configuration.getColor("coloring.editable_background", false));
    1242         level_combobox.setBackgroundSelectionColor(Configuration.getColor("coloring.collection_selection_background", false));
    1243         level_combobox.setEditable(false);
    1244         level_combobox.setTextNonSelectionColor(Configuration.getColor("coloring.workspace_tree_foreground", false));
    1245         level_combobox.setTextSelectionColor(Configuration.getColor("coloring.collection_selection_foreground", false));
    1246         Dictionary.registerTooltip(level_combobox, "CDM.IndexManager.Level_Tooltip");
    1247 
    1248         JPanel level_button_panel = new JPanel();
    1249 
    1250         add_level_button = new GLIButton("CDM.IndexManager.MGPP.Add_Level");
    1251         add_level_button.setEnabled(false);
    1252         add_level_button.setMnemonic(KeyEvent.VK_A);
    1253         Dictionary.registerBoth(add_level_button, "CDM.IndexManager.MGPP.Add_Level", "CDM.IndexManager.MGPP.Add_Level_Tooltip");
    1254 
    1255         remove_level_button = new GLIButton("CDM.IndexManager.MGPP.Remove_Level");
    1256         remove_level_button.setEnabled(false);
    1257         remove_level_button.setMnemonic(KeyEvent.VK_A);
    1258         Dictionary.registerBoth(remove_level_button, "CDM.IndexManager.MGPP.Remove_Level", "CDM.IndexManager.MGPP.Remove_Level_Tooltip");
    1259 
    1260         JPanel level_empty_panel = new JPanel();
    1261 
    1262         // Connect Levels
    1263         EnableAddLevelListener level_eal = new EnableAddLevelListener();
    1264         add_level_button.addActionListener(new AddLevelActionListener());
    1265         current_levels_list.addListSelectionListener(new CurrentLevelsListSelectionListener());
    1266         level_combobox.addActionListener(level_eal);
    1267         ((JTextField)level_combobox.getEditor().getEditorComponent()).getDocument().addDocumentListener(level_eal);
    1268         level_name_field.getDocument().addDocumentListener(level_eal);
    1269         move_level_down_button.addActionListener(new MoveLevelDownListener());
    1270         move_level_up_button.addActionListener(new MoveLevelUpListener());
    1271         remove_level_button.addActionListener(new RemoveLevelActionListener(level_eal));
    1272         // Layout Levels
    1273 
    1274         level_movement_panel.setLayout(new GridLayout(2,1));
    1275         level_movement_panel.add(move_level_up_button);
    1276         level_movement_panel.add(move_level_down_button);
    1277 
    1278         current_levels_panel.setLayout(new BorderLayout());
    1279         current_levels_panel.add(current_levels_label, BorderLayout.NORTH);
    1280         current_levels_panel.add(new JScrollPane(current_levels_list), BorderLayout.CENTER);
    1281         current_levels_panel.add(level_movement_panel, BorderLayout.EAST);
    1282 
    1283         level_labels_panel.setLayout(new GridLayout(2,1));
    1284         level_labels_panel.add(level_name_label);
    1285         level_labels_panel.add(level_label);
    1286 
    1287         level_boxes_panel.setLayout(new GridLayout(2,1));
    1288         level_boxes_panel.add(level_name_field);
    1289         level_boxes_panel.add(level_combobox);
    1290 
    1291         level_details_panel.setLayout(new BorderLayout(5,0));
    1292         level_details_panel.add(level_labels_panel, BorderLayout.WEST);
    1293         level_details_panel.add(level_boxes_panel, BorderLayout.CENTER);
    1294 
    1295         level_button_panel.setBorder(BorderFactory.createEmptyBorder(5,0,0,0));
    1296         level_button_panel.setLayout(new GridLayout(1,2,5,0));
    1297         level_button_panel.add(add_level_button);
    1298         level_button_panel.add(remove_level_button);
    1299 
    1300         level_body_panel.setBorder(BorderFactory.createEmptyBorder(5,0,0,0));
    1301         level_body_panel.setLayout(new BorderLayout());
    1302         level_body_panel.add(level_details_panel, BorderLayout.CENTER);
    1303         level_body_panel.add(level_button_panel, BorderLayout.SOUTH);
    1304 
    1305         level_spacer_panel.setLayout(new BorderLayout());
    1306         level_spacer_panel.add(level_body_panel, BorderLayout.NORTH);
    1307         level_spacer_panel.add(level_empty_panel, BorderLayout.CENTER);
    1308 
    1309         levels_panel.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
    1310         levels_panel.setLayout(new BorderLayout());
    1311         levels_panel.add(current_levels_panel, BorderLayout.NORTH);
    1312         levels_panel.add(level_spacer_panel, BorderLayout.CENTER);
    1313 
    1314         // Create General
    1315         JPanel header_panel = new JPanel();
    1316 
    1317         title_label = new JLabel();
    1318         title_label.setHorizontalAlignment(JLabel.CENTER);
    1319         Dictionary.registerText(title_label, "CDM.IndexManager.MGPP.Title");
    1320 
    1321         instructions_textarea = new JTextArea();
    1322         instructions_textarea.setEditable(false);
    1323         instructions_textarea.setLineWrap(true);
    1324         instructions_textarea.setRows(6);
    1325         instructions_textarea.setWrapStyleWord(true);
    1326         Dictionary.registerText(instructions_textarea, "CDM.IndexManager.MGPP.Instructions");
    1327 
    1328         tabbed_pane = new JTabbedPane();
    1329 
    1330         // Layout General
    1331         header_panel.setBorder(BorderFactory.createEmptyBorder(0,0,2,0));
    1332         header_panel.setLayout(new BorderLayout());
    1333         header_panel.add(title_label, BorderLayout.NORTH);
    1334         header_panel.add(new JScrollPane(instructions_textarea), BorderLayout.CENTER);
    1335 
    1336         tabbed_pane.add(Dictionary.get("CDM.IndexManager.MGPP.Indexes"), indexes_panel);
    1337         tabbed_pane.add(Dictionary.get("CDM.IndexManager.MGPP.Levels"), levels_panel);
    1338 
    1339         setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
    1340         setLayout(new BorderLayout());
    1341         add(header_panel, BorderLayout.NORTH);
    1342         add(tabbed_pane, BorderLayout.CENTER);
    1343     }
    1344 
    1345     public void destroy() {
    1346     }
    1347 
    1348     public void gainFocus() {
    1349         // add in the mgpp listener
    1350         current_indexes_list.addListSelectionListener(mgpp_index_list_listener);
    1351         // Reload the assigned indexes list.
    1352         index_combobox.removeAllItems();
    1353         index_combobox.addItem(CollectionConfiguration.ALLFIELDS_STR);
    1354         index_combobox.addItem(CollectionConfiguration.METADATA_STR);
    1355         index_combobox.addItem(CollectionConfiguration.TEXT_STR);
    1356         ArrayList every_metadata_set_element = MetadataSetManager.getEveryMetadataSetElement();
    1357         for(int i = 0; i < every_metadata_set_element.size(); i++) {
    1358         index_combobox.addItem(every_metadata_set_element.get(i));
    1359         }
    1360         // Ensure the level manager has at least documents assigned
    1361         if(levels_model.getSize() == 0) {
    1362         Level level = new Level(CollectionConfiguration.DOCUMENT_STR);
    1363         // Create new metadatum
    1364         CollectionMeta metadatum = new CollectionMeta(CollectionConfiguration.STOP_CHARACTER + CollectionConfiguration.DOCUMENT_STR);
    1365         metadatum.setValue(CollectionConfiguration.DOCUMENT_STR);
    1366         // Assign new level
    1367         addLevel(level, metadatum);     
    1368         level = null;
    1369         }
    1370 
    1371         // refresh
    1372         current_indexes_list.updateUI();
    1373     }
    1374    
    1375     public void removeIndexListListener() {
    1376 
    1377         current_indexes_list.removeListSelectionListener(mgpp_index_list_listener);
    1378     }
    1379    
    1380     private class AddIndexActionListener
    1381         implements ActionListener {
    1382         public void actionPerformed(ActionEvent event) {
    1383         // Retrieve the name
    1384         String name = index_name_field.getText();
    1385         // Retrieve the source
    1386         Object source = index_combobox.getSelectedItem();
    1387 
    1388         // If this object isn't yet in the combobox add it.
    1389         if(index_combobox.getSelectedIndex() == -1) {
    1390             index_combobox.insertItemAt(source, index_combobox.getItemCount());
    1391         }
    1392         // Create new index
    1393         ArrayList sources = new ArrayList();
    1394         sources.add(source);
    1395         Index index = new Index(sources);
    1396         if(!model.contains(index)) {
    1397             // Create new metadatum
    1398             CollectionMeta metadatum = new CollectionMeta(CollectionConfiguration.STOP_CHARACTER + index.getID());
    1399             metadatum.setValue(name);
    1400             // Assign new index
    1401             addIndex(index, metadatum);
    1402             current_indexes_list.setSelectedValue(index, true);
    1403         }
    1404         // Done. Disable add
    1405         add_index_button.setEnabled(false);
    1406         }
    1407     }
    1408 
     935       
     936        }
     937    }
     938
     939    /** add all sources as indexes. for MG, this adds them in one combined
     940        index, for MGPP this adds them as individual indexes (fields) */
    1409941    private class AddAllActionListener
    1410942        implements ActionListener {
    1411943
    1412944        public void actionPerformed(ActionEvent event) {
    1413         for(int i = 0; i < index_combobox.getItemCount(); i++) {
    1414             Object source = index_combobox.getItemAt(i);
     945        ArrayList all_sources = source_list.getAll();
     946        if (!mgpp_enabled) {
     947            Index index = new Index(level_combobox.getSelectedIndex(), all_sources);
     948            if (!model.contains(index)) {
     949            CollectionMeta metadatum = new CollectionMeta(CollectionConfiguration.STOP_CHARACTER + index.getID());
     950            metadatum.setValue("all fields"); // need a good name
     951            addIndex(index, metadatum);
     952            }
     953            all_sources = null;
     954            index = null;
     955            return;
     956        }
     957       
     958        ArrayList new_sources = new ArrayList();
     959        for(int i = 0; i < all_sources.size(); i++) {
     960            Object source = all_sources.get(i);
     961
    1415962            // Create new index
    1416             ArrayList sources = new ArrayList();
    1417             sources.add(source);
    1418             Index index = new Index(sources);
    1419             sources = null;
     963            new_sources.clear();
     964            new_sources.add(source);
     965            Index index = new Index(new_sources);
    1420966            if(!model.contains(index)) {
    1421967            // Determine the metadatum value
     
    1434980            index = null;
    1435981        }
     982        new_sources = null;
    1436983        // Done. Disable add
    1437         add_index_button.setEnabled(false);
     984        add_button.setEnabled(false);
     985        }
     986    }
     987
     988    private class AllfieldsCheckBoxListener
     989        implements ItemListener
     990    {
     991        public void itemStateChanged(ItemEvent event) {
     992        if (event.getStateChange() == ItemEvent.SELECTED) {
     993            source_list.setEnabled(false);
     994        } else if (event.getStateChange() == ItemEvent.DESELECTED) {
     995            source_list.setEnabled(true);
     996        }
     997        validateAddButton();
     998        }
     999
     1000    }
     1001    /** Listens for selections within the list on the IndexManager controls, and if a change is detected enables, or disables, controls appropriately. */
     1002    private class IndexListListener
     1003        implements ListSelectionListener
     1004    {
     1005        /** This method is called whenever the source list selection changes. When it does we need to fill in the various parts of the list description panel
     1006         * @param event A <strong>ListSelectionEvent</strong> containing further information about the list selection.
     1007         */
     1008        public void valueChanged(ListSelectionEvent event)
     1009        {
     1010        if (event.getValueIsAdjusting()) {
     1011            return;
     1012        }
     1013
     1014        Object value = index_list.getSelectedValue();
     1015        if (value == null) {
     1016            move_down_button.setEnabled(false);
     1017            move_up_button.setEnabled(false);
     1018            remove_button.setEnabled(false);
     1019            replace_button.setEnabled(false);
     1020            set_default_button.setEnabled(false);
     1021            return;
     1022        }
     1023
     1024        // Enable the buttons appropriately
     1025        remove_button.setEnabled(true);
     1026        set_default_button.setEnabled(default_index == null || !default_index.equals(value));
     1027        int i = index_list.getSelectedIndex();
     1028        int size = index_list.getModel().getSize();
     1029        move_up_button.setEnabled((i>0));
     1030        move_down_button.setEnabled((i<size-1));
     1031
     1032        // Need to fill in the rest of the bits
     1033        updateControlsWithSelectedIndex();     
     1034        }
     1035    }
     1036
     1037    private class IndexListRenderer
     1038        extends DefaultListCellRenderer {
     1039
     1040        /** Return a component that has been configured to display the specified value. */
     1041        public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
     1042        JLabel component = (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
     1043        if(default_index != null && default_index.equals(value)) {
     1044            component.setText(component.getText() + " " + Dictionary.get("CDM.IndexManager.Default_Index_Indicator"));
     1045        }
     1046        return component;
     1047        }
     1048
     1049    }
     1050
     1051    private class LevelListener
     1052        implements ItemListener {
     1053        public void itemStateChanged(ItemEvent event) {
     1054        if(event.getStateChange() == ItemEvent.SELECTED) {
     1055            // just want to validate the add button
     1056            validateAddButton();
     1057
     1058        }
     1059        }
     1060    }
     1061
     1062    private class MoveListener
     1063        implements ActionListener {
     1064
     1065        private boolean move_up;
     1066
     1067        public MoveListener(boolean move_up) {
     1068        this.move_up = move_up;
     1069        }
     1070
     1071        public void actionPerformed(ActionEvent event) {
     1072        // Retrieve the selected index
     1073        Index index = (Index) index_list.getSelectedValue();
     1074        if(index != null) {
     1075            moveIndex(index, move_up);
     1076            // Ensure the index that moved is still selected
     1077            index_list.setSelectedValue(index, true);
     1078            index = null;
     1079        }
     1080        }
     1081    }
     1082
     1083
     1084    /** Listens for key presses within the name field, and enabled or disables controls as appropriate. */
     1085    private class NameListener
     1086        implements DocumentListener
     1087    {
     1088        public void changedUpdate(DocumentEvent e)
     1089        {
     1090        validateAddButton();
     1091        }
     1092
     1093        public void insertUpdate(DocumentEvent e)
     1094        {
     1095        validateAddButton();
     1096        }
     1097
     1098        public void removeUpdate(DocumentEvent e)
     1099        {
     1100        validateAddButton();
     1101        }
     1102    }
     1103
     1104
     1105    private class RemoveListener
     1106        implements ActionListener
     1107    {
     1108        public void actionPerformed(ActionEvent event)
     1109        {
     1110        int i = index_list.getSelectedIndex();
     1111        if (i != -1) {
     1112            removeIndex((Index) index_list.getSelectedValue());
     1113        }
     1114        int size = index_list.getModel().getSize();
     1115        if (i == size) {
     1116            i--;
     1117        }
     1118        index_list.setSelectedIndex(i);
     1119
     1120        // This will produce an event on the list, updating the other buttons
     1121        if (size == 0) {
     1122            // We have removed the last index, should be able to add what's filled in currently, if valid
     1123            validateAddButton();
     1124        }
     1125        }
     1126    }
     1127
     1128
     1129    private class ReplaceListener
     1130        implements ActionListener
     1131    {
     1132        public void actionPerformed(ActionEvent event)
     1133        {
     1134        if (index_list.isSelectionEmpty()) {
     1135            // This should never happen, but just in case...
     1136            replace_button.setEnabled(false);
     1137            return;
     1138        }
     1139       
     1140        String name = name_textfield.getText();
     1141        if (!source_list.isNothingTicked() && name.length() != 0) {
     1142            ArrayList sources = source_list.getTicked();
     1143            Index index;
     1144            if (mgpp_enabled) {
     1145            index = new Index(sources);
     1146            } else {
     1147            index = new Index(level_combobox.getSelectedIndex(), sources);
     1148            }
     1149            // Create the new collection meta
     1150            CollectionMeta metadatum = new CollectionMeta(CollectionConfiguration.STOP_CHARACTER + index.getID());
     1151            metadatum.setValue(name);
     1152
     1153            // replace the index
     1154            replaceIndex((Index) index_list.getSelectedValue(), index, metadatum);
     1155            index_list.setSelectedValue(index, true);
     1156
     1157        }
     1158        add_button.setEnabled(false);
     1159        replace_button.setEnabled(false);
     1160        }
     1161    }
     1162
     1163
     1164    private class SetDefaultListener
     1165        implements ActionListener {
     1166
     1167        public void actionPerformed(ActionEvent event) {
     1168        Index index = (Index) index_list.getSelectedValue();
     1169        if(index != null) {
     1170            setDefault(index);
     1171            // This should cause a repaint of just the desired row
     1172            index_list.setSelectedValue(index, true);
     1173        }
     1174        set_default_button.setEnabled(false);
     1175        }
     1176    }
     1177
     1178
     1179    private class SourceListListener
     1180        implements ListSelectionListener
     1181    {
     1182        public void valueChanged(ListSelectionEvent event)
     1183        {
     1184        validateAddButton();
     1185        }
     1186    }
     1187    }
     1188
     1189    private class MGPPLevelsPanel
     1190    extends JPanel {
     1191
     1192    private JList current_levels_list;
     1193   
     1194    private JButton move_level_down_button;
     1195    private JButton move_level_up_button;
     1196
     1197    private GComboBox level_combobox;
     1198    private JTextField level_name_field;
     1199
     1200    private JButton add_level_button;
     1201    private JButton remove_level_button;
     1202           
     1203    public MGPPLevelsPanel() {
     1204
     1205        JPanel current_levels_panel = new JPanel();
     1206
     1207        JLabel current_levels_label = new JLabel();
     1208        Dictionary.registerText(current_levels_label, "CDM.IndexManager.MGPP.Current_Levels");
     1209
     1210        current_levels_list = new JList(levels_model);
     1211        current_levels_list.setVisibleRowCount(5);
     1212        current_levels_list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
     1213        JPanel level_movement_panel = new JPanel();
     1214
     1215        move_level_up_button = new JButton("", JarTools.getImage("arrow-up.gif"));
     1216        move_level_up_button.setEnabled(false);
     1217        move_level_up_button.setMnemonic(KeyEvent.VK_U);
     1218        Dictionary.registerBoth(move_level_up_button, "CDM.Move.Move_Up", "CDM.Move.Move_Up_Tooltip");
     1219
     1220        move_level_down_button = new JButton("", JarTools.getImage("arrow-down.gif"));
     1221        move_level_down_button.setEnabled(false);
     1222        move_level_down_button.setMnemonic(KeyEvent.VK_D);
     1223        Dictionary.registerBoth(move_level_down_button, "CDM.Move.Move_Down", "CDM.Move.Move_Down_Tooltip");
     1224
     1225        JPanel level_spacer_panel = new JPanel();
     1226        JPanel level_body_panel = new JPanel();
     1227        JPanel level_details_panel = new JPanel();
     1228        JPanel level_labels_panel = new JPanel();
     1229        JPanel level_boxes_panel = new JPanel();
     1230
     1231        JLabel level_name_label = new JLabel();
     1232        Dictionary.registerText(level_name_label, "CDM.IndexManager.MGPP.Level_Name");
     1233
     1234        level_name_field = new JTextField();
     1235        level_name_field.setPreferredSize(FIELD_SIZE);
     1236        Dictionary.registerTooltip(level_name_field, "CDM.IndexManager.MGPP.Level_Name_Tooltip");
     1237
     1238
     1239        JLabel level_label = new JLabel();
     1240        Dictionary.registerText(level_label, "CDM.IndexManager.MGPP.Level");
     1241
     1242        level_combobox = new GComboBox(Index.LEVEL);
     1243        level_combobox.setPreferredSize(FIELD_SIZE);
     1244        level_combobox.setBackgroundNonSelectionColor(Configuration.getColor("coloring.editable_background", false));
     1245        level_combobox.setBackgroundSelectionColor(Configuration.getColor("coloring.collection_selection_background", false));
     1246        level_combobox.setEditable(false);
     1247        level_combobox.setTextNonSelectionColor(Configuration.getColor("coloring.workspace_tree_foreground", false));
     1248        level_combobox.setTextSelectionColor(Configuration.getColor("coloring.collection_selection_foreground", false));
     1249        Dictionary.registerTooltip(level_combobox, "CDM.IndexManager.Level_Tooltip");
     1250
     1251        JPanel level_button_panel = new JPanel();
     1252
     1253        add_level_button = new GLIButton("CDM.IndexManager.MGPP.Add_Level");
     1254        add_level_button.setEnabled(false);
     1255        add_level_button.setMnemonic(KeyEvent.VK_A);
     1256        Dictionary.registerBoth(add_level_button, "CDM.IndexManager.MGPP.Add_Level", "CDM.IndexManager.MGPP.Add_Level_Tooltip");
     1257
     1258        remove_level_button = new GLIButton("CDM.IndexManager.MGPP.Remove_Level");
     1259        remove_level_button.setEnabled(false);
     1260        remove_level_button.setMnemonic(KeyEvent.VK_A);
     1261        Dictionary.registerBoth(remove_level_button, "CDM.IndexManager.MGPP.Remove_Level", "CDM.IndexManager.MGPP.Remove_Level_Tooltip");
     1262
     1263        JPanel level_empty_panel = new JPanel();
     1264
     1265        // Connect Levels
     1266        EnableAddLevelListener level_eal = new EnableAddLevelListener();
     1267        add_level_button.addActionListener(new AddLevelActionListener());
     1268        current_levels_list.addListSelectionListener(new CurrentLevelsListSelectionListener());
     1269        level_combobox.addActionListener(level_eal);
     1270        // not editable
     1271        //((JTextField)level_combobox.getEditor().getEditorComponent()).getDocument().addDocumentListener(level_eal);
     1272        level_name_field.getDocument().addDocumentListener(level_eal);
     1273        move_level_down_button.addActionListener(new MoveLevelDownListener());
     1274        move_level_up_button.addActionListener(new MoveLevelUpListener());
     1275        remove_level_button.addActionListener(new RemoveLevelActionListener());
     1276        // Layout Levels
     1277
     1278        level_movement_panel.setLayout(new GridLayout(2,1));
     1279        level_movement_panel.add(move_level_up_button);
     1280        level_movement_panel.add(move_level_down_button);
     1281
     1282        current_levels_panel.setLayout(new BorderLayout());
     1283        current_levels_panel.add(current_levels_label, BorderLayout.NORTH);
     1284        current_levels_panel.add(new JScrollPane(current_levels_list), BorderLayout.CENTER);
     1285        current_levels_panel.add(level_movement_panel, BorderLayout.EAST);
     1286
     1287        level_labels_panel.setLayout(new GridLayout(2,1));
     1288        level_labels_panel.add(level_name_label);
     1289        level_labels_panel.add(level_label);
     1290
     1291        level_boxes_panel.setLayout(new GridLayout(2,1));
     1292        level_boxes_panel.add(level_name_field);
     1293        level_boxes_panel.add(level_combobox);
     1294
     1295        level_details_panel.setLayout(new BorderLayout(5,0));
     1296        level_details_panel.add(level_labels_panel, BorderLayout.WEST);
     1297        level_details_panel.add(level_boxes_panel, BorderLayout.CENTER);
     1298
     1299        level_button_panel.setBorder(BorderFactory.createEmptyBorder(5,0,0,0));
     1300        level_button_panel.setLayout(new GridLayout(1,2,5,0));
     1301        level_button_panel.add(add_level_button);
     1302        level_button_panel.add(remove_level_button);
     1303
     1304        level_body_panel.setBorder(BorderFactory.createEmptyBorder(5,0,0,0));
     1305        level_body_panel.setLayout(new BorderLayout());
     1306        level_body_panel.add(level_details_panel, BorderLayout.CENTER);
     1307        level_body_panel.add(level_button_panel, BorderLayout.SOUTH);
     1308
     1309        level_spacer_panel.setLayout(new BorderLayout());
     1310        level_spacer_panel.add(level_body_panel, BorderLayout.NORTH);
     1311        level_spacer_panel.add(level_empty_panel, BorderLayout.CENTER);
     1312
     1313        setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
     1314        setLayout(new BorderLayout());
     1315        add(current_levels_panel, BorderLayout.NORTH);
     1316        add(level_spacer_panel, BorderLayout.CENTER);
     1317    }
     1318   
     1319    public void gainFocus() {
     1320        // Ensure the level manager has at least documents assigned
     1321        if(levels_model.getSize() == 0) {
     1322        Level level = new Level(CollectionConfiguration.DOCUMENT_STR);
     1323        // Create new metadatum
     1324        CollectionMeta metadatum = new CollectionMeta(CollectionConfiguration.STOP_CHARACTER + CollectionConfiguration.DOCUMENT_STR);
     1325        metadatum.setValue(CollectionConfiguration.DOCUMENT_STR);
     1326        // Assign new level
     1327        addLevel(level, metadatum);     
     1328        level = null;
     1329        }
     1330    }
     1331
     1332    /** Change the enable state of the add button depending on the current value in the search type combobox. */
     1333    public void validateAddButtonLevel() {
     1334        String name = level_name_field.getText();
     1335        Object selected_object = level_combobox.getSelectedItem();
     1336        if(name.length() > 0 && selected_object != null) {
     1337        add_level_button.setEnabled(getLevel((String)selected_object) == null);
     1338        }
     1339        else {
     1340        add_level_button.setEnabled(false);
    14381341        }
    14391342    }
     
    14581361    }
    14591362
    1460     private class CurrentIndexesListSelectionListener
    1461         implements ListSelectionListener {
    1462         public void valueChanged(ListSelectionEvent event) {
    1463         if(event.getValueIsAdjusting()) {
    1464             return;
    1465         }
    1466        
    1467         Index index = (Index)current_indexes_list.getSelectedValue();
    1468         if(index != null) {
    1469             String full_text = index.toString();
    1470             if(full_text.indexOf("\"") != -1) {
    1471             index_name_field.setText(index.getName());
    1472             }
    1473             ArrayList sources = index.getSources();
    1474             index_combobox.setSelectedItem(sources.get(0));
    1475            
    1476            
    1477             move_index_down_button.setEnabled((model.indexOf(index) < model.getSize() - 1));
    1478             move_index_up_button.setEnabled((model.indexOf(index) > 0));
    1479             remove_index_button.setEnabled(true);
    1480         }
    1481         else {
    1482             move_index_down_button.setEnabled(false);
    1483             move_index_up_button.setEnabled(false);
    1484             remove_index_button.setEnabled(false);
    1485         }
    1486         }       
    1487     }
    1488 
    14891363    private class CurrentLevelsListSelectionListener
    14901364        implements ListSelectionListener {
     
    15141388        }
    15151389    }
    1516 
    1517     private class EnableAddIndexListener
    1518         implements ActionListener, DocumentListener {
    1519         /** Called whenever a selection action occurs on the combobox.
    1520          * @param  event an ActionEvent containing information about the selection event
    1521          */
    1522         public void actionPerformed(ActionEvent event) {
    1523         validateAddButtonIndex();
    1524         }
    1525 
    1526         /** Gives notification that an attribute or set of attributes changed.
    1527          * @param  event a DocumentEvent containing information about the text changed
    1528          */
    1529         public void changedUpdate(DocumentEvent event) {
    1530         validateAddButtonIndex();
    1531         }
    1532 
    1533         /** Gives notification that there was an insert into the document.
    1534          * @param  event a DocumentEvent containing information about the text added
    1535          */
    1536         public void insertUpdate(DocumentEvent event) {
    1537         validateAddButtonIndex();
    1538         }
    1539 
    1540         /** Gives notification that a portion of the document has been removed.
    1541          * @param  event a DocumentEvent containing information about the text removed
    1542          */
    1543         public void removeUpdate(DocumentEvent event) {
    1544         validateAddButtonIndex();
    1545         }
    1546 
    1547         /** Change the enable state of the add button depending on the current value in the search type combobox. */
    1548         public void validateAddButtonIndex() {
    1549         String name = index_name_field.getText();
    1550         Object selected_object = index_combobox.getSelectedItem();
    1551         boolean add_enabled = false;
    1552         boolean replace_enabled = false;
    1553 
    1554         if(name.length() > 0 && selected_object != null) {
    1555             // Unfortunately we have to generate a valid id
    1556             String id = null;
    1557             // Special cases
    1558             if (selected_object instanceof String && (selected_object.equals(CollectionConfiguration.ALLFIELDS_STR) || selected_object.equals(CollectionConfiguration.METADATA_STR) || selected_object.equals(CollectionConfiguration.TEXT_STR))) {
    1559             id = (String) selected_object;
    1560             }
    1561             else if (selected_object instanceof MetadataElement) {
    1562             id = ((MetadataElement) selected_object).getFullName();
    1563             }
    1564             else {
    1565             System.err.println("Internal Error: Unexpected selected_object in IndexManager.");
    1566             return;
    1567             }
    1568             if(id.startsWith(StaticStrings.EXTRACTED_NAMESPACE)) {
    1569             id = id.substring(StaticStrings.EXTRACTED_NAMESPACE.length());
    1570             }
    1571            
    1572             Index index = getIndex(id);
    1573             if(index == null) {
    1574             add_enabled = true;
    1575             // we have a new index. is something selected? if so, we can replace
    1576             if (current_indexes_list.getSelectedIndex() != -1) {
    1577                 replace_enabled = true;
    1578             }
    1579             }
    1580             else {
    1581             // the index is already there
    1582             add_enabled = false;
    1583             // but if the name is changed, we can do a replace
    1584             if(!name.equals(index.getName())) {
    1585                 replace_enabled = true;
    1586             }
    1587            
    1588             }
    1589         }
    1590         else {
    1591             add_enabled = false;
    1592             replace_enabled = false;
    1593            
    1594         }
    1595 
    1596         // We should now know the button state
    1597         add_index_button.setEnabled(add_enabled);
    1598         replace_index_button.setEnabled(replace_enabled);
    1599        
    1600         }
    1601     }
    1602 
     1390   
    16031391    private class EnableAddLevelListener
    16041392        implements ActionListener, DocumentListener {
     
    16311419        }
    16321420   
    1633         /** Change the enable state of the add button depending on the current value in the search type combobox. */
    1634         public void validateAddButtonLevel() {
    1635         String name = level_name_field.getText();
    1636         Object selected_object = level_combobox.getSelectedItem();
    1637         if(name.length() > 0 && selected_object != null) {
    1638             add_level_button.setEnabled(getLevel((String)selected_object) == null);
    1639         }
    1640         else {
    1641             add_level_button.setEnabled(false);
    1642         }
    1643         }
    1644     }
    1645 
    1646     private class MoveIndexDownListener
    1647         implements ActionListener {
    1648         public void actionPerformed(ActionEvent event) {
    1649         // Retrieve the first selected item
    1650         Index index = (Index) current_indexes_list.getSelectedValue();
    1651         moveIndex(index, false);
    1652         current_indexes_list.setSelectedValue(index, true);
    1653         }
    1654     }
    1655 
     1421    }
    16561422    private class MoveLevelDownListener
    16571423        implements ActionListener {
     
    16631429        }
    16641430    }
    1665 
    1666     private class MoveIndexUpListener
    1667         implements ActionListener {
    1668         public void actionPerformed(ActionEvent event) {
    1669         // Retrieve the first selected item
    1670         Index index = (Index) current_indexes_list.getSelectedValue();
    1671         moveIndex(index, true);
    1672         current_indexes_list.setSelectedValue(index, true);
    1673         }
    1674     }
    1675 
    16761431    private class MoveLevelUpListener
    16771432        implements ActionListener {
     
    16831438        }
    16841439    }
    1685 
    1686     /** Replace really only replaces the string. */
    1687     private class ReplaceIndexActionListener
    1688         implements ActionListener {
    1689 
    1690         public void actionPerformed(ActionEvent event) {
    1691         // We'll just remove the old one and add the new one
    1692         removeIndex((Index) current_indexes_list.getSelectedValue());
    1693         replace_index_button.setEnabled(false);
    1694         add_index_button.setEnabled(true);
    1695         add_index_button.doClick(); // this adds the new one
    1696         add_index_button.setEnabled(false);
    1697        
    1698         //Object[] selected_objects = current_indexes_list.getSelectedValues();
    1699         //if(selected_objects.length == 1) {
    1700         Index index = (Index)current_indexes_list.getSelectedValue();
    1701         if (index != null) {
    1702         //Index index = (Index) selected_objects[0];
    1703             // Remove old name
    1704             CollectionDesignManager.collectionmeta_manager.removeMetadata(CollectionConfiguration.STOP_CHARACTER + index.getID());
    1705             // Enter new name
    1706             String name = index_name_field.getText();
    1707             // Create new metadatum
    1708             CollectionMeta metadatum = new CollectionMeta(CollectionConfiguration.STOP_CHARACTER + index.getID());
    1709             //index = null;
    1710             metadatum.setValue(name);
    1711             name = null;
    1712             // Assign new index
    1713             CollectionDesignManager.collectionmeta_manager.addMetadatum(metadatum);
    1714             metadatum = null;
    1715         }
    1716         //current_indexes_list.setSelectedValue(selected_objects[0], true);
    1717         current_indexes_list.setSelectedValue(index, true);
    1718         // Done. Disable add
    1719         add_index_button.setEnabled(false);
    1720         replace_index_button.setEnabled(false);
    1721         }
    1722     }
    1723 
    1724     private class RemoveIndexActionListener
    1725         implements ActionListener {
    1726 
    1727         private EnableAddIndexListener eal = null;
    1728 
    1729         public RemoveIndexActionListener(EnableAddIndexListener eal) {
    1730         this.eal = eal;
    1731         }
    1732 
    1733         public void actionPerformed(ActionEvent event) {
    1734         // Retrieve the selected items
    1735         //Object[] selected_objects = current_indexes_list.getSelectedValues();
    1736         // Clear selection
    1737         //current_indexes_list.clearSelection();
    1738         //for(int i = 0; i < selected_objects.length; i++) {
    1739         //    Index index = (Index) selected_objects[i];
    1740             // Remove any related metadata
    1741         //    CollectionDesignManager.collectionmeta_manager.removeMetadata(CollectionConfiguration.STOP_CHARACTER + index.getID());
    1742             // Remove the index
    1743         //    removeIndex(index);
    1744         //}
    1745         // Disable remove button
    1746         //remove_index_button.setEnabled(false);
    1747         // Check if add should be reenabled
    1748         //eal.validateAddButtonIndex();
    1749         int i = current_indexes_list.getSelectedIndex();
    1750         if (i != -1) {
    1751             Index index = (Index) current_indexes_list.getSelectedValue();
    1752             // Remove any related metadata
    1753             CollectionDesignManager.collectionmeta_manager.removeMetadata(CollectionConfiguration.STOP_CHARACTER + index.getID());
    1754             removeIndex(index);
    1755            
    1756         //if (i != -1) {
    1757         //removeIndex((Index) index_list.getSelectedValue());
    1758             //}
    1759             int size = current_indexes_list.getModel().getSize();
    1760             if (i == size) {
    1761             i--;
    1762             }
    1763             current_indexes_list.setSelectedIndex(i);
    1764         }
    1765         if (i==-1) {
    1766             // empty list, disable remove button
    1767             remove_index_button.setEnabled(false);
    1768         }
    1769         // Check if add should be reenabled
    1770         eal.validateAddButtonIndex();
    1771 
    1772         // This will produce an event on the list, updating the other buttons
    1773         //if (size == 0) {
    1774             // We have removed the last index, should be able to add what's filled in currently, if valid
    1775         // validateAddButton();
    1776         //  }
    1777         }
    1778     }
    1779 
    17801440    private class RemoveLevelActionListener
    17811441        implements ActionListener {
    1782 
    1783         private EnableAddLevelListener eal = null;
    1784 
    1785         public RemoveLevelActionListener(EnableAddLevelListener eal) {
    1786         this.eal = eal;
    1787         }
    17881442
    17891443        public void actionPerformed(ActionEvent event) {
     
    17981452            }
    17991453            current_levels_list.setSelectedIndex(i);
    1800         }
    1801         // Retrieve the selected items
    1802         //Object[] selected_objects = current_levels_list.getSelectedValues();
    1803         // Clear selection
    1804         //current_levels_list.clearSelection();
    1805         //for(int i = 0; i < selected_objects.length; i++) {
    1806        
    1807             //Level level = (Level) selected_objects[i];
    1808             // Remove any related metadata
    1809             //CollectionDesignManager.collectionmeta_manager.removeMetadata(CollectionConfiguration.STOP_CHARACTER + level.getLevel());
    1810             // Remove the index
    1811             //removeLevel(level);
    1812         //}
    1813        
     1454        }       
    18141455        if (i==-1) {
    18151456            // Disable remove button
    18161457            remove_level_button.setEnabled(false);
    18171458        }
    1818         // If there are no levels left, put document back in
    1819 //      if(levels_model.getSize() == 0) {
    1820 //          Level level = new Level(CollectionConfiguration.DOCUMENT_STR);
    1821 //          // Create new metadatum
    1822 //          CollectionMeta metadatum = new CollectionMeta(CollectionConfiguration.STOP_CHARACTER + CollectionConfiguration.DOCUMENT_STR);
    1823 //          metadatum.setValue(CollectionConfiguration.DOCUMENT_STR);
    1824 //          // Assign new level
    1825 //          addLevel(level, metadatum);     
    1826 //          level = null;
    1827 //      }
    1828         // Check if add should be reenabled
    1829         eal.validateAddButtonLevel();
    1830         }
    1831     }
    1832     } // MGPPControls
     1459        validateAddButtonLevel();
     1460        }
     1461    }
     1462
     1463    }
    18331464
    18341465}
     1466
Note: See TracChangeset for help on using the changeset viewer.