- Timestamp:
- 2005-11-30T15:55:29+13:00 (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/gli/src/org/greenstone/gatherer/cdm/IndexManager.java
r10530 r10966 55 55 static final private String MGPPINDEXES = "mgpp indexes"; 56 56 57 static final private String ALLFIELDS = "allfields"; 57 58 /** The controls for editing the indexes. */ 58 59 private Control controls = null; … … 305 306 } 306 307 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 307 336 /** Method to set the default index. 308 337 * @param index the new default Index … … 362 391 if(0 <= level_int && level_int < 3) { 363 392 String level = Index.LEVEL[level_int]; 364 if(!levels_list.contains(level)) { 365 levels_list.add(level); 366 } 393 levels_list.add(level); 367 394 level = null; 368 395 } 369 396 ArrayList sources = default_index.getSources(); 370 sources.removeAll(sources_list);371 397 sources_list.addAll(sources); 372 398 } … … 435 461 } 436 462 else { 463 // we already have mgpp indexes assigned 437 464 // Replace mg element with mgpp element 438 465 setRoot(mgpp_element); … … 441 468 mg_element.setAttribute(CollectionConfiguration.ASSIGNED_ATTRIBUTE, CollectionConfiguration.FALSE_STR); 442 469 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 } 446 474 } 447 475 // change MGPP -> MG … … 453 481 if(default_index != null) { 454 482 default_index.setAssigned(true); 483 default_index.setLevel(1); // for now 455 484 } 456 485 // 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 = mg pp_element.getElementsByTagName(CollectionConfiguration.INDEX_ELEMENT);486 NodeList indexes = mg_element.getElementsByTagName(CollectionConfiguration.INDEX_ELEMENT); 458 487 if(indexes.getLength() == 0) { 459 488 Index index = getIndex(CollectionConfiguration.TEXT_STR); … … 502 531 implements Control { 503 532 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 507 537 private JButton move_down_button; 508 538 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; 509 550 private JButton remove_button; 510 551 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; 524 568 /** Constructor. 525 569 * @see org.greenstone.gatherer.Configuration … … 537 581 new_data.add(CollectionConfiguration.TEXT_STR); 538 582 new_data.addAll(MetadataSetManager.getEveryMetadataSetElement()); 583 539 584 // Creation 540 JPanel mgindexes_panel = new JPanel();541 card_layout = new CardLayout();542 543 // MG Index Controls544 545 JPanel mg_indexes_pane = new JPanel();546 547 585 JPanel instruction_pane = new JPanel(); 548 586 JLabel title_label = new JLabel(); … … 556 594 instruction_textarea.setWrapStyleWord(true); 557 595 Dictionary.registerText(instruction_textarea, "CDM.IndexManager.Instructions"); 558 596 559 597 JPanel assigned_indexes_pane = new JPanel(); 560 598 JLabel index_label = new JLabel(); … … 563 601 index_list.setCellRenderer(new IndexListRenderer()); 564 602 index_list.setVisibleRowCount(2); 603 index_list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 604 605 565 606 JPanel movement_pane = new JPanel(); 566 567 607 move_up_button = new JButton("", JarTools.getImage("arrow-up.gif")); 568 608 move_up_button.setEnabled(false); … … 574 614 move_down_button.setMnemonic(KeyEvent.VK_D); 575 615 Dictionary.registerBoth(move_down_button, "CDM.Move.Move_Down", "CDM.Move.Move_Down_Tooltip"); 576 616 577 617 set_default_button = new GLIButton(); 578 618 set_default_button.setEnabled(false); … … 580 620 Dictionary.registerBoth(set_default_button, "CDM.IndexManager.Set_Default", "CDM.IndexManager.Set_Default_Tooltip"); 581 621 582 JPanel index_pane = new JPanel();622 JPanel new_index_pane = new JPanel(); 583 623 JPanel details_pane = new JPanel(); 584 JPanellabels_pane = new JPanel();585 JPanelboxes_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(); 587 627 588 628 JLabel name_label = new JLabel(); … … 598 638 Dictionary.registerTooltip(source_list, "CDM.IndexManager.Source_Tooltip"); 599 639 600 JLabellevel_label = new JLabel();640 level_label = new JLabel(); 601 641 Dictionary.registerText(level_label, "CDM.IndexManager.Level"); 602 642 level_combobox = new JComboBox(); … … 614 654 Dictionary.registerBoth(add_button, "CDM.IndexManager.Add_Index", "CDM.IndexManager.Add_Index_Tooltip"); 615 655 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 616 661 remove_button = new GLIButton(); 617 662 remove_button.setEnabled(false); … … 623 668 Dictionary.registerBoth(replace_button, "CDM.IndexManager.MGPP.Replace_Index", "CDM.IndexManager.MGPP.Replace_Index_Tooltip"); 624 669 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 628 678 // Listeners 629 679 add_button.addActionListener(new AddListener()); 630 680 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); 631 687 move_down_button.addActionListener(new MoveListener(false)); 632 688 move_down_button.addActionListener(CollectionDesignManager.buildcol_change_listener); 633 689 move_up_button.addActionListener(new MoveListener(true)); 634 690 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);639 691 set_default_button.addActionListener(new SetDefaultListener()); 640 692 set_default_button.addActionListener(CollectionDesignManager.buildcol_change_listener); 693 641 694 name_textfield.getDocument().addDocumentListener(new NameListener()); 642 695 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()); 645 697 source_list.addListSelectionListener(new SourceListListener()); 698 allfields_box.addItemListener(new AllfieldsCheckBoxListener()); 646 699 647 700 // Layout … … 678 731 details_pane.add(boxes_pane, BorderLayout.CENTER); 679 732 680 button_pane.setLayout(new GridLayout( 1,3));733 button_pane.setLayout(new GridLayout(2,2,5,0)); 681 734 button_pane.add(add_button); 735 button_pane.add(add_all_button); 682 736 button_pane.add(replace_button); 683 737 button_pane.add(remove_button); 684 738 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(); 701 754 } 702 755 … … 705 758 */ 706 759 public void destroy() { 707 mgppindexes_control.destroy();708 mgppindexes_control = null;709 760 } 710 761 711 762 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 } 713 770 if(instruction_textarea != null) { 714 771 instruction_textarea.setCaretPosition(0); 715 772 } 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 716 780 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 } 720 796 } 721 797 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 745 809 } 746 810 747 811 public void loseFocus() { 748 812 } 749 813 750 814 private void updateControlsWithSelectedIndex() { 751 815 … … 760 824 String name = CollectionDesignManager.collectionmeta_manager.getMetadatum("." + id).getValue(true); 761 825 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 763 830 source_list.clearTicked(); 764 831 ArrayList sources = selected_index.getSources(); … … 767 834 } 768 835 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 771 846 boolean add_enabled = false; 772 847 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()) { 784 857 Object object[] = source_list.getTicked().toArray(); 785 ArrayListsources = new ArrayList();858 sources = new ArrayList(); 786 859 for(int i = 0; i < object.length; i++) { 787 860 sources.add(object[i]); 788 861 } 789 862 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)) { 801 886 replace_enabled = true; 802 887 } 803 888 } 804 889 } 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 816 899 add_button.setEnabled(add_enabled); 817 900 replace_button.setEnabled(replace_enabled); 818 901 } 819 820 902 821 903 private class AddListener 822 904 implements ActionListener … … 825 907 { 826 908 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()) { 828 917 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 { 853 924 return; 854 925 } 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); 997 934 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) */ 1409 941 private class AddAllActionListener 1410 942 implements ActionListener { 1411 943 1412 944 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 1415 962 // 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); 1420 966 if(!model.contains(index)) { 1421 967 // Determine the metadatum value … … 1434 980 index = null; 1435 981 } 982 new_sources = null; 1436 983 // 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); 1438 1341 } 1439 1342 } … … 1458 1361 } 1459 1362 1460 private class CurrentIndexesListSelectionListener1461 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 1489 1363 private class CurrentLevelsListSelectionListener 1490 1364 implements ListSelectionListener { … … 1514 1388 } 1515 1389 } 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 1603 1391 private class EnableAddLevelListener 1604 1392 implements ActionListener, DocumentListener { … … 1631 1419 } 1632 1420 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 } 1656 1422 private class MoveLevelDownListener 1657 1423 implements ActionListener { … … 1663 1429 } 1664 1430 } 1665 1666 private class MoveIndexUpListener1667 implements ActionListener {1668 public void actionPerformed(ActionEvent event) {1669 // Retrieve the first selected item1670 Index index = (Index) current_indexes_list.getSelectedValue();1671 moveIndex(index, true);1672 current_indexes_list.setSelectedValue(index, true);1673 }1674 }1675 1676 1431 private class MoveLevelUpListener 1677 1432 implements ActionListener { … … 1683 1438 } 1684 1439 } 1685 1686 /** Replace really only replaces the string. */1687 private class ReplaceIndexActionListener1688 implements ActionListener {1689 1690 public void actionPerformed(ActionEvent event) {1691 // We'll just remove the old one and add the new one1692 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 one1696 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 name1704 CollectionDesignManager.collectionmeta_manager.removeMetadata(CollectionConfiguration.STOP_CHARACTER + index.getID());1705 // Enter new name1706 String name = index_name_field.getText();1707 // Create new metadatum1708 CollectionMeta metadatum = new CollectionMeta(CollectionConfiguration.STOP_CHARACTER + index.getID());1709 //index = null;1710 metadatum.setValue(name);1711 name = null;1712 // Assign new index1713 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 add1719 add_index_button.setEnabled(false);1720 replace_index_button.setEnabled(false);1721 }1722 }1723 1724 private class RemoveIndexActionListener1725 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 items1735 //Object[] selected_objects = current_indexes_list.getSelectedValues();1736 // Clear selection1737 //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 metadata1741 // CollectionDesignManager.collectionmeta_manager.removeMetadata(CollectionConfiguration.STOP_CHARACTER + index.getID());1742 // Remove the index1743 // removeIndex(index);1744 //}1745 // Disable remove button1746 //remove_index_button.setEnabled(false);1747 // Check if add should be reenabled1748 //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 metadata1753 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 button1767 remove_index_button.setEnabled(false);1768 }1769 // Check if add should be reenabled1770 eal.validateAddButtonIndex();1771 1772 // This will produce an event on the list, updating the other buttons1773 //if (size == 0) {1774 // We have removed the last index, should be able to add what's filled in currently, if valid1775 // validateAddButton();1776 // }1777 }1778 }1779 1780 1440 private class RemoveLevelActionListener 1781 1441 implements ActionListener { 1782 1783 private EnableAddLevelListener eal = null;1784 1785 public RemoveLevelActionListener(EnableAddLevelListener eal) {1786 this.eal = eal;1787 }1788 1442 1789 1443 public void actionPerformed(ActionEvent event) { … … 1798 1452 } 1799 1453 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 } 1814 1455 if (i==-1) { 1815 1456 // Disable remove button 1816 1457 remove_level_button.setEnabled(false); 1817 1458 } 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 } 1833 1464 1834 1465 } 1466
Note:
See TracChangeset
for help on using the changeset viewer.