Ignore:
Timestamp:
2004-10-13T14:48:20+13:00 (20 years ago)
Author:
mdewsnip
Message:

Finally committing the (many) changes to the GLI to use the new metadata code... I hope this doesn't have too many bugs in it and committing it now doesn't stuff anyone up! (Katherine said I could commit it, so blame her if anything goes wrong).

File:
1 edited

Legend:

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

    r8243 r8313  
    3232import java.util.*;
    3333import javax.swing.*;
     34import javax.swing.border.*;
    3435import javax.swing.event.*;
    3536import org.greenstone.gatherer.Configuration;
    3637import org.greenstone.gatherer.Dictionary;
    3738import org.greenstone.gatherer.Gatherer;
    38 import org.greenstone.gatherer.checklist.CheckList;
    39 import org.greenstone.gatherer.checklist.Entry;
    40 import org.greenstone.gatherer.cdm.ElementWrapper;
    41 import org.greenstone.gatherer.msm.MetadataSet;
    42 import org.greenstone.gatherer.util.StaticStrings;
     39import org.greenstone.gatherer.metadata.MetadataElement;
     40import org.greenstone.gatherer.metadata.MetadataSet;
     41import org.greenstone.gatherer.metadata.MetadataSetManager;
     42import org.greenstone.gatherer.metadata.MetadataTools;
    4343import org.greenstone.gatherer.util.Utility;
    44 import org.w3c.dom.*;
     44
    4545
    4646public class NewCollectionMetadataPrompt
     
    4848
    4949    private boolean cancelled = true;
    50     private CheckList sets_list;
    5150    private JDialog self;
    5251    private JList elements_list;
     52    private MetadataSetList sets_list;
    5353    static private Dimension size = new Dimension(700, 380);
    5454
     
    6868    setModal(true);
    6969    setSize(size);
    70    
    71 
    72     // And the remaining metadata sets.
    73     ArrayList sets = new ArrayList();
    74     // Determine what collections are available.
    75     File metadata_directory = new File(Utility.METADATA_DIR);
    76     File[] possible_mdses = metadata_directory.listFiles();
    77     for(int i = 0; i < possible_mdses.length; i++) {
    78         String name = possible_mdses[i].getName();
    79         if(name.endsWith(StaticStrings.METADATA_SET_EXTENSION) && !name.equals(Utility.EXTRACTED_METADATA_NAMESPACE + StaticStrings.METADATA_SET_EXTENSION)) {
    80         sets.add(new MetadataSet(possible_mdses[i]));
    81         }
     70
     71    // Show the metadata sets (except extracted!) available in the GLI "metadata" folder
     72    ArrayList sets = MetadataSetManager.listMetadataSets(new File(Utility.METADATA_DIR));
     73    ArrayList metadata_set_list_entries = new ArrayList();
     74    for (int i = 0; i < sets.size(); i++) {
     75        MetadataSet metadata_set = (MetadataSet) sets.get(i);
     76
     77        // Don't show the extracted metadata set
     78        if (metadata_set.getNamespace().equals(MetadataSetManager.EXTRACTED_METADATA_NAMESPACE)) {
     79        continue;
     80        }
     81
     82        metadata_set_list_entries.add(new MetadataSetListEntry(metadata_set));
    8283    }
    8384
     
    9798    sets_list_label.setOpaque(false);
    9899    Dictionary.setText(sets_list_label, "NewCollectionPrompt.Select_MDS");
    99     sets_list = new CheckList(sets, true);
     100    sets_list = new MetadataSetList();
     101    sets_list.setListData(new Vector(metadata_set_list_entries));
     102    sets_list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    100103
    101104    JPanel elements_list_pane = new JPanel();
     
    103106    Dictionary.setText(elements_list_label, "NewCollectionPrompt.Metadata_Elements");
    104107    elements_list = new JList();
     108    elements_list.setCellRenderer(new MetadataElementListCellRenderer());
    105109    elements_list.setBackground(Configuration.getColor("coloring.collection_tree_background", false));
    106110    elements_list.setForeground(Configuration.getColor("coloring.collection_tree_foreground", false));
    107111    elements_list.setSelectionBackground(Configuration.getColor("coloring.collection_tree_background", false));
    108112    elements_list.setSelectionForeground(Configuration.getColor("coloring.collection_tree_foreground", false));
     113
     114    // Select the Dublin Core metadata set by default, at Ian's request
     115    sets_list.selectDublinCoreMetadataSet();
    109116
    110117    JPanel button_pane = new JPanel();
     
    119126    ok_button.addActionListener(new OKButtonListener());
    120127    cancel_button.addActionListener(new CancelButtonListener());
    121     sets_list.addListSelectionListener(new MetadataListSelectionListener());
    122128
    123129    // Display
     
    157163
    158164    public ArrayList getSets() {
    159     return sets_list.getSelected();
     165    return sets_list.getSelectedMetadataSets();
    160166    }
    161167
     
    163169    return cancelled;
    164170    }
     171
    165172
    166173    private class CancelButtonListener
     
    172179    }
    173180
    174     public class MetadataListSelectionListener
    175     implements ListSelectionListener {
    176     public void valueChanged(ListSelectionEvent event) {
    177         if(!sets_list.isSelectionEmpty()) {
    178         // Retrieve the selected set.
    179         Entry entry = (Entry) sets_list.getSelectedValue();
    180         MetadataSet set = (MetadataSet) entry.getObject();
    181         entry = null;
    182         // Build a model from its elements.
    183         NodeList elements = set.getElements();
    184         set = null;
    185         Vector elements_model = new Vector();
    186         for(int i = 0; i < elements.getLength(); i++) {
    187             elements_model.add(new ElementWrapper(elements.item(i)));
    188         }
    189         elements = null;
    190         Collections.sort(elements_model);
    191         elements_list.setListData(elements_model);
    192         elements_model = null;
    193         }
    194         else {
    195         elements_list.setListData(new String[0]);
    196         }
    197     }
    198     }
    199 
    200     public class OKButtonListener
     181
     182    private class MetadataSetList
     183    extends JList
     184    {
     185    public MetadataSetList()
     186    {
     187        super();
     188        addListSelectionListener(new MetadataSetListSelectionListener());
     189        addMouseListener(new MetadataSetListSelectionListener());
     190        setCellRenderer(new MetadataSetListCellRenderer());
     191    }
     192
     193
     194    public ArrayList getSelectedMetadataSets()
     195    {
     196        ArrayList selected_metadata_sets = new ArrayList();
     197
     198        ListModel model = (ListModel) getModel();
     199        for (int i = 0; i < model.getSize(); i++) {
     200        MetadataSetListEntry metadata_set_list_entry = (MetadataSetListEntry) model.getElementAt(i);
     201        if (metadata_set_list_entry.isSelected()) {
     202            selected_metadata_sets.add(metadata_set_list_entry.getMetadataSet());
     203        }
     204        }
     205
     206        return selected_metadata_sets;
     207    }
     208
     209
     210    /** Hack special-case code, used to select the Dublin Core metadata set by default */
     211    public void selectDublinCoreMetadataSet()
     212    {
     213        ListModel model = (ListModel) getModel();
     214        for (int i = 0; i < model.getSize(); i++) {
     215        MetadataSetListEntry metadata_set_list_entry = (MetadataSetListEntry) model.getElementAt(i);
     216        if (metadata_set_list_entry.getMetadataSet().getNamespace().equals("dc")) {
     217            metadata_set_list_entry.setSelected(true);
     218            metadata_set_list_entry.grabFocus();
     219            setSelectedIndex(i);
     220        }
     221        }
     222    }
     223
     224
     225    private class MetadataSetListCellRenderer
     226        extends JLabel
     227        implements ListCellRenderer {
     228
     229        public Component getListCellRendererComponent(JList list, Object value, int index, boolean is_selected, boolean cell_has_focus)
     230        {
     231        JCheckBox checkbox = (JCheckBox) value;
     232        checkbox.setBackground(is_selected ? list.getSelectionBackground() : list.getBackground());
     233        checkbox.setForeground(is_selected ? list.getSelectionForeground() : list.getForeground());
     234        checkbox.setBorderPainted(true);
     235        checkbox.setEnabled(list.isEnabled());
     236        checkbox.setFont(list.getFont());
     237        checkbox.setFocusPainted(false);
     238        checkbox.setBorder((is_selected) ? UIManager.getBorder("List.focusCellHighlightBorder") : new EmptyBorder(1, 1, 1, 1));
     239        return checkbox;
     240        }
     241    }
     242
     243
     244    private class MetadataSetListSelectionListener
     245        extends MouseAdapter
     246        implements ListSelectionListener {
     247
     248        public void mousePressed(MouseEvent e)
     249        {
     250        JList list = (JList) e.getSource();
     251        int index = list.locationToIndex(e.getPoint());
     252        MetadataSetListEntry metadata_set_list_entry = (MetadataSetListEntry) list.getModel().getElementAt(index);
     253        metadata_set_list_entry.setSelected(!metadata_set_list_entry.isSelected());
     254        metadata_set_list_entry.grabFocus();
     255
     256        // Fire a selection changed event
     257        fireSelectionValueChanged(index, index, false);
     258        }
     259
     260        public void valueChanged(ListSelectionEvent event)
     261        {
     262        if (!sets_list.isSelectionEmpty()) {
     263            // Retrieve the selected set
     264            MetadataSetListEntry metadata_set_list_entry = (MetadataSetListEntry) sets_list.getSelectedValue();
     265            MetadataSet set = (MetadataSet) metadata_set_list_entry.getMetadataSet();
     266            elements_list.setListData(new Vector(set.getMetadataSetElements()));
     267        }
     268        else {
     269            elements_list.setListData(new String[0]);
     270        }
     271        }
     272    }
     273    }
     274
     275
     276    private class MetadataSetListEntry
     277    extends JCheckBox
     278    {
     279    private MetadataSet metadata_set = null;
     280
     281    public MetadataSetListEntry(MetadataSet metadata_set)
     282    {
     283        this.metadata_set = metadata_set;
     284    }
     285
     286    public MetadataSet getMetadataSet()
     287    {
     288        return metadata_set;
     289    }
     290
     291    public String getText()
     292    {
     293        if (metadata_set == null) {
     294        return null;
     295        }
     296
     297        String interface_language_code = Configuration.getLanguage();
     298        String metadata_set_name = MetadataTools.getMetadataSetAttribute(metadata_set, "Name", interface_language_code, "en");
     299        return metadata_set_name + " (" + metadata_set.getNamespace() + ")";
     300    }
     301    }
     302
     303
     304    private class OKButtonListener
    201305    implements ActionListener {
    202306    public void actionPerformed(ActionEvent event) {
    203307        // See if the user has selected no metadata sets, and if so confirm thats what they really want.
    204         ArrayList selected_sets = sets_list.getSelected();
     308        ArrayList selected_sets = sets_list.getSelectedMetadataSets();
    205309        cancelled = false;
    206310        if(selected_sets.size() == 0) {
Note: See TracChangeset for help on using the changeset viewer.