/** *######################################################################### * * A component of the Gatherer application, part of the Greenstone digital * library suite from the New Zealand Digital Library Project at the * University of Waikato, New Zealand. * *

* * Author: Shaoqun Wu, Greenstone Digital Library, University of Waikato * *

* * Copyright (C) 2006 New Zealand Digital Library Project * *

* * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * *

* * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * *

* * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. *######################################################################## */ package org.greenstone.gatherer.gems; import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; import java.util.ArrayList; import java.util.HashMap; import java.util.Collection; import java.util.Vector; import org.greenstone.gatherer.Configuration; import org.greenstone.gatherer.Dictionary; import org.greenstone.gatherer.gui.ModalDialog; import org.greenstone.gatherer.gui.GLIButton; public class NewMetadataSetPrompt extends ModalDialog { static private Dimension SIZE = new Dimension(500, 320); private ArrayList available_metadata_sets; private ArrayList listeners; private JButton ok_button = null; private JButton cancel_button = null; private JComboBox base_metadata_combo; private NewMetadataSetPrompt self; private MetadataSetManager meta_manager; private JTextArea description_textarea = null; private JTextField title_field; private JTextField namespace_field; private boolean cancelled = false; public NewMetadataSetPrompt(Frame parent,MetadataSetManager msm) { super(parent, true); self = this; listeners = new ArrayList(); meta_manager = msm; setSize(SIZE); setTitle(Dictionary.get("GEMS.NewMetadataSetPrompt.Title")); JPanel content_pane = (JPanel) getContentPane(); content_pane.setOpaque(true); content_pane.setComponentOrientation(Dictionary.getOrientation()); JLabel instruction_label = new JLabel(Dictionary.get("GEMS.NewMetadataSetPrompt.Instructions")); instruction_label.setOpaque(true); instruction_label.setComponentOrientation(Dictionary.getOrientation()); JLabel title_label = new JLabel(Dictionary.get("GEMS.NewMetadataSetPrompt.Metadata_Title")); title_label.setOpaque(true); title_label.setComponentOrientation(Dictionary.getOrientation()); title_field = new JTextField(); title_field.setComponentOrientation(Dictionary.getOrientation()); JPanel title_pane = new JPanel(new BorderLayout(5,5)); title_pane.setComponentOrientation(Dictionary.getOrientation()); title_pane.add(title_label,BorderLayout.LINE_START); title_pane.add(title_field, BorderLayout.CENTER); JLabel namespace_label = new JLabel(Dictionary.get("GEMS.NewMetadataSetPrompt.Metadata_Namespace")); namespace_label.setComponentOrientation(Dictionary.getOrientation()); namespace_label.setOpaque(true); namespace_field = new JTextField(); namespace_field.setComponentOrientation(Dictionary.getOrientation()); JPanel namespace_pane = new JPanel(new BorderLayout(5,5)); namespace_pane.setComponentOrientation(Dictionary.getOrientation()); namespace_pane.add(namespace_label,BorderLayout.LINE_START); namespace_pane.add(namespace_field, BorderLayout.CENTER); JPanel info_pane = new JPanel(); info_pane.setComponentOrientation(Dictionary.getOrientation()); info_pane.setLayout(new BorderLayout(5,5)); info_pane.add(instruction_label,BorderLayout.NORTH); info_pane.add(title_pane,BorderLayout.CENTER); info_pane.add(namespace_pane,BorderLayout.SOUTH); JLabel description_label = new JLabel(Dictionary.get("GEMS.Set_Description")); description_label.setOpaque(true); description_label.setComponentOrientation(Dictionary.getOrientation()); description_textarea = new JTextArea(); description_textarea.setComponentOrientation(Dictionary.getOrientation()); description_textarea.setLineWrap(true); description_textarea.setWrapStyleWord(true); JPanel description_pane = new JPanel(); description_pane.setComponentOrientation(Dictionary.getOrientation()); description_pane.setLayout(new BorderLayout()); description_pane.add(description_label,BorderLayout.NORTH); description_pane.add(new JScrollPane(description_textarea),BorderLayout.CENTER); JLabel base_label = new JLabel(Dictionary.get("GEMS.NewMetadataSetPrompt.Base_MetadataSet")); base_label.setOpaque(true); base_label.setComponentOrientation(Dictionary.getOrientation()); base_metadata_combo = new JComboBox(); base_metadata_combo.setRenderer(new MetadatSetListCellRenderer()); base_metadata_combo.setComponentOrientation(Dictionary.getOrientation()); JPanel base_pane = new JPanel(new BorderLayout(5,5)); base_pane.setComponentOrientation(Dictionary.getOrientation()); base_pane.add(base_label,BorderLayout.LINE_START); base_pane.add(base_metadata_combo, BorderLayout.CENTER); JPanel button_pane = new JPanel(); button_pane.setComponentOrientation(Dictionary.getOrientation()); ok_button = new GLIButton(Dictionary.get("General.OK"), Dictionary.get("General.OK_Tooltip")); cancel_button = new GLIButton(Dictionary.get("General.Cancel"), Dictionary.get("General.Cancel_Tooltip")); // Add listeners ok_button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { if (createNewSet()) { self.dispose(); } // else if that returned false, then we leave the // prompt there for them to change their input } }); cancel_button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { cancelled = true; self.dispose(); } }); button_pane.setLayout(new GridLayout(1,2)); button_pane.add(ok_button); button_pane.add(cancel_button); JPanel bottom_pane = new JPanel(new GridLayout(2,1,5,5)); bottom_pane.add(base_pane); bottom_pane.add(button_pane); content_pane.setLayout(new BorderLayout(5,5)); content_pane.add(info_pane, BorderLayout.NORTH); content_pane.add(description_pane, BorderLayout.CENTER); content_pane.add(bottom_pane, BorderLayout.SOUTH); content_pane.setBorder(BorderFactory.createEmptyBorder(5,5,5,5)); // Show Dimension screen_size = Configuration.screen_size; setLocation((screen_size.width - SIZE.width) / 2, (screen_size.height - SIZE.height) / 2); setVisible(false); } public void display(){ cancelled = false; available_metadata_sets = meta_manager.getAvailableMetadataSets(); Vector data = new Vector((Collection)available_metadata_sets); data.add(0,Dictionary.get("GEMS.NewMetadataSetPrompt.New_Metadata")); DefaultComboBoxModel model = new DefaultComboBoxModel(data); title_field.setText(""); namespace_field.setText(""); description_textarea.setText(""); base_metadata_combo.setModel(model); setVisible(true); } public boolean isCancelled() { return cancelled; } public void addMetadataSetListener(MetadataSetListener msl){ listeners.add(msl); } private boolean createNewSet() { String title = title_field.getText(); String namespace = namespace_field.getText(); String description = description_textarea.getText(); if (title == null || title.trim().equals("")){ JOptionPane.showMessageDialog(self, Dictionary.get("GEMS.NewMetadataSetPrompt.Title_Error_Message"), Dictionary.get("GEMS.NewMetadataSetPrompt.Title_Error"), JOptionPane.ERROR_MESSAGE); return false; } if (namespace == null || namespace.trim().equals("")){ JOptionPane.showMessageDialog(self, Dictionary.get("GEMS.NewMetadataSetPrompt.Namespace_Error_Message"), Dictionary.get("GEMS.NewMetadataSetPrompt.Namespace_Error"), JOptionPane.ERROR_MESSAGE); return false; } //check namespace conflict if (meta_manager.isNamespaceAlreadyUsed(namespace)) { int result = JOptionPane.showOptionDialog(null,Dictionary.get("GEMS.Namespace_Conflict_Message"), Dictionary.get("GEMS.Namespace_Conflict"),JOptionPane.DEFAULT_OPTION, JOptionPane.QUESTION_MESSAGE,null,GEMSConstants.DIALOG_OPTIONS,GEMSConstants.DIALOG_OPTIONS[0] ); if (result != JOptionPane.OK_OPTION) return false; } Object selectedValue = base_metadata_combo.getSelectedItem(); if (selectedValue != null ){ MetadataSetInfo meta_info = null; if ((selectedValue instanceof MetadataSetInfo)){ meta_info = (MetadataSetInfo)selectedValue; } else{ meta_info = new MetadataSetInfo(); } meta_info.setNew(true); // clear all the language dependent attributes meta_info.setLanguageDependentAttributes(new ArrayList()); meta_info.setMetadataSetName(title); meta_info.setMetadataSetDescription(description); meta_info.setNamespace(namespace); meta_info.setCurrentLanguage(meta_manager.getCurrentLanguage()); notifyListeners(meta_info); } return true; } private void notifyListeners(MetadataSetInfo set_info){ MetadataSetEvent mse = new MetadataSetEvent(set_info); for(int i=0;i