source: trunk/gli/src/org/greenstone/gatherer/gui/NewCollectionMetadataPrompt.java@ 8313

Last change on this file since 8313 was 8313, checked in by mdewsnip, 20 years ago

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).

  • Property svn:keywords set to Author Date Id Revision
File size: 11.0 KB
Line 
1/**
2 *#########################################################################
3 *
4 * A component of the Gatherer application, part of the Greenstone digital
5 * library suite from the New Zealand Digital Library Project at the
6 * University of Waikato, New Zealand.
7 *
8 * Author: John Thompson, Greenstone Digital Library, University of Waikato
9 *
10 * Copyright (C) 1999 New Zealand Digital Library Project
11 *
12 * This program is free software; you can redistribute it and/or modify
13 * it under the terms of the GNU General Public License as published by
14 * the Free Software Foundation; either version 2 of the License, or
15 * (at your option) any later version.
16 *
17 * This program is distributed in the hope that it will be useful,
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 * GNU General Public License for more details.
21 *
22 * You should have received a copy of the GNU General Public License
23 * along with this program; if not, write to the Free Software
24 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
25 *########################################################################
26 */
27package org.greenstone.gatherer.gui;
28
29import java.awt.*;
30import java.awt.event.*;
31import java.io.*;
32import java.util.*;
33import javax.swing.*;
34import javax.swing.border.*;
35import javax.swing.event.*;
36import org.greenstone.gatherer.Configuration;
37import org.greenstone.gatherer.Dictionary;
38import org.greenstone.gatherer.Gatherer;
39import org.greenstone.gatherer.metadata.MetadataElement;
40import org.greenstone.gatherer.metadata.MetadataSet;
41import org.greenstone.gatherer.metadata.MetadataSetManager;
42import org.greenstone.gatherer.metadata.MetadataTools;
43import org.greenstone.gatherer.util.Utility;
44
45
46public class NewCollectionMetadataPrompt
47 extends ModalDialog {
48
49 private boolean cancelled = true;
50 private JDialog self;
51 private JList elements_list;
52 private MetadataSetList sets_list;
53 static private Dimension size = new Dimension(700, 380);
54
55 public NewCollectionMetadataPrompt() {
56 this(false);
57 }
58 public NewCollectionMetadataPrompt(boolean existing_coll) {
59 super(Gatherer.g_man, true);
60 this.self = this;
61 if (existing_coll) {
62 setJMenuBar(new SimpleMenuBar("openingacollection"));
63 Dictionary.setText(this, "NewCollectionPrompt.Metadata_Title_Existing");
64 } else {
65 setJMenuBar(new SimpleMenuBar("creatingacollection"));
66 Dictionary.setText(this, "NewCollectionPrompt.Title");
67 }
68 setModal(true);
69 setSize(size);
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));
83 }
84
85 // Creation
86 JPanel content_pane = (JPanel) getContentPane();
87
88 JPanel instructions_panel = new JPanel();
89 JLabel instructions_label1 = new JLabel();
90 Dictionary.setText(instructions_label1, "NewCollectionPrompt.Metadata_Instructions1");
91 JLabel instructions_label2 = new JLabel();
92 Dictionary.setText(instructions_label2, "NewCollectionPrompt.Metadata_Instructions2");
93
94 JPanel center_pane = new JPanel();
95
96 JPanel sets_list_pane = new JPanel();
97 JLabel sets_list_label = new JLabel();
98 sets_list_label.setOpaque(false);
99 Dictionary.setText(sets_list_label, "NewCollectionPrompt.Select_MDS");
100 sets_list = new MetadataSetList();
101 sets_list.setListData(new Vector(metadata_set_list_entries));
102 sets_list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
103
104 JPanel elements_list_pane = new JPanel();
105 JLabel elements_list_label = new JLabel();
106 Dictionary.setText(elements_list_label, "NewCollectionPrompt.Metadata_Elements");
107 elements_list = new JList();
108 elements_list.setCellRenderer(new MetadataElementListCellRenderer());
109 elements_list.setBackground(Configuration.getColor("coloring.collection_tree_background", false));
110 elements_list.setForeground(Configuration.getColor("coloring.collection_tree_foreground", false));
111 elements_list.setSelectionBackground(Configuration.getColor("coloring.collection_tree_background", false));
112 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();
116
117 JPanel button_pane = new JPanel();
118 JButton ok_button = new GLIButton();
119 ok_button.setMnemonic(KeyEvent.VK_O);
120 Dictionary.setBoth(ok_button, "General.OK", "General.OK_Tooltip");
121 JButton cancel_button = new GLIButton();
122 cancel_button.setMnemonic(KeyEvent.VK_C);
123 Dictionary.setBoth(cancel_button, "General.Cancel", "General.Pure_Cancel_Tooltip");
124
125 // Connection
126 ok_button.addActionListener(new OKButtonListener());
127 cancel_button.addActionListener(new CancelButtonListener());
128
129 // Display
130 instructions_panel.setLayout(new GridLayout(2,1));
131 instructions_panel.add(instructions_label1);
132 instructions_panel.add(instructions_label2);
133
134 sets_list_pane.setLayout(new BorderLayout());
135 sets_list_pane.add(sets_list_label, BorderLayout.NORTH);
136 sets_list_pane.add(new JScrollPane(sets_list), BorderLayout.CENTER);
137
138 elements_list_pane.setLayout(new BorderLayout());
139 elements_list_pane.add(elements_list_label, BorderLayout.NORTH);
140 elements_list_pane.add(new JScrollPane(elements_list), BorderLayout.CENTER);
141
142 center_pane.setBorder(BorderFactory.createEmptyBorder(5,0,0,0));
143 center_pane.setLayout(new GridLayout(2,1,0,5));
144 center_pane.add(sets_list_pane);
145 center_pane.add(elements_list_pane);
146
147 button_pane.setBorder(BorderFactory.createEmptyBorder(5,0,0,0));
148 button_pane.setLayout(new GridLayout(1,2,5,0));
149 button_pane.add(ok_button);
150 button_pane.add(cancel_button);
151
152 content_pane.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
153 content_pane.setLayout(new BorderLayout());
154 content_pane.add(instructions_panel, BorderLayout.NORTH);
155 content_pane.add(center_pane, BorderLayout.CENTER);
156 content_pane.add(button_pane, BorderLayout.SOUTH);
157
158 // Show
159 Dimension screen_size = Configuration.screen_size;
160 setLocation((screen_size.width - size.width) / 2, (screen_size.height - size.height) / 2);
161 setVisible(true);
162 }
163
164 public ArrayList getSets() {
165 return sets_list.getSelectedMetadataSets();
166 }
167
168 public boolean isCancelled() {
169 return cancelled;
170 }
171
172
173 private class CancelButtonListener
174 implements ActionListener {
175 public void actionPerformed(ActionEvent event) {
176 cancelled = true;
177 self.dispose();
178 }
179 }
180
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
305 implements ActionListener {
306 public void actionPerformed(ActionEvent event) {
307 // See if the user has selected no metadata sets, and if so confirm thats what they really want.
308 ArrayList selected_sets = sets_list.getSelectedMetadataSets();
309 cancelled = false;
310 if(selected_sets.size() == 0) {
311 WarningDialog dialog = new WarningDialog("warning.NoMetadataSetsSelected", true);
312 if(dialog.display() == JOptionPane.OK_OPTION) {
313 // Otherwise we are free to go
314 self.dispose();
315 }
316 dialog.dispose();
317 dialog = null;
318 }
319 else {
320 self.dispose();
321 }
322 }
323 }
324}
Note: See TracBrowser for help on using the repository browser.