- Timestamp:
- 2004-10-13T14:48:20+13:00 (20 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/gli/src/org/greenstone/gatherer/gui/NewCollectionMetadataPrompt.java
r8243 r8313 32 32 import java.util.*; 33 33 import javax.swing.*; 34 import javax.swing.border.*; 34 35 import javax.swing.event.*; 35 36 import org.greenstone.gatherer.Configuration; 36 37 import org.greenstone.gatherer.Dictionary; 37 38 import 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; 39 import org.greenstone.gatherer.metadata.MetadataElement; 40 import org.greenstone.gatherer.metadata.MetadataSet; 41 import org.greenstone.gatherer.metadata.MetadataSetManager; 42 import org.greenstone.gatherer.metadata.MetadataTools; 43 43 import org.greenstone.gatherer.util.Utility; 44 import org.w3c.dom.*; 44 45 45 46 46 public class NewCollectionMetadataPrompt … … 48 48 49 49 private boolean cancelled = true; 50 private CheckList sets_list;51 50 private JDialog self; 52 51 private JList elements_list; 52 private MetadataSetList sets_list; 53 53 static private Dimension size = new Dimension(700, 380); 54 54 … … 68 68 setModal(true); 69 69 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)); 82 83 } 83 84 … … 97 98 sets_list_label.setOpaque(false); 98 99 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); 100 103 101 104 JPanel elements_list_pane = new JPanel(); … … 103 106 Dictionary.setText(elements_list_label, "NewCollectionPrompt.Metadata_Elements"); 104 107 elements_list = new JList(); 108 elements_list.setCellRenderer(new MetadataElementListCellRenderer()); 105 109 elements_list.setBackground(Configuration.getColor("coloring.collection_tree_background", false)); 106 110 elements_list.setForeground(Configuration.getColor("coloring.collection_tree_foreground", false)); 107 111 elements_list.setSelectionBackground(Configuration.getColor("coloring.collection_tree_background", false)); 108 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(); 109 116 110 117 JPanel button_pane = new JPanel(); … … 119 126 ok_button.addActionListener(new OKButtonListener()); 120 127 cancel_button.addActionListener(new CancelButtonListener()); 121 sets_list.addListSelectionListener(new MetadataListSelectionListener());122 128 123 129 // Display … … 157 163 158 164 public ArrayList getSets() { 159 return sets_list.getSelected ();165 return sets_list.getSelectedMetadataSets(); 160 166 } 161 167 … … 163 169 return cancelled; 164 170 } 171 165 172 166 173 private class CancelButtonListener … … 172 179 } 173 180 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 201 305 implements ActionListener { 202 306 public void actionPerformed(ActionEvent event) { 203 307 // 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(); 205 309 cancelled = false; 206 310 if(selected_sets.size() == 0) {
Note:
See TracChangeset
for help on using the changeset viewer.