/* * Copyright 2003,2004 Colin Crist * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ package hermes.browser.dialog; import hermes.JNDIContextFactory; import hermes.browser.HermesBrowser; import hermes.browser.IconCache; import hermes.config.NamingConfig; import hermes.config.PropertySetConfig; import hermes.impl.LoaderSupport; import java.awt.BorderLayout; import java.awt.Frame; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Vector; import javax.swing.AbstractAction; import javax.swing.BorderFactory; import javax.swing.ComboBoxModel; import javax.swing.DefaultComboBoxModel; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JComponent; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.border.BevelBorder; import org.apache.commons.beanutils.PropertyUtils; import org.apache.log4j.Logger; import com.jidesoft.dialog.ButtonPanel; import com.jidesoft.dialog.StandardDialog; import com.jidesoft.grid.Property; import com.jidesoft.grid.PropertyPane; import com.jidesoft.grid.PropertyTable; import com.jidesoft.grid.PropertyTableModel; import com.jidesoft.swing.JideScrollPane; /** * Editor dialog for one of a list of NamingConfigs. * * @author colincrist@hermesjms.com last changed by: $Author: colincrist $ * @version $Id: EditNamingConfigDialog.java,v 1.4 2005/05/01 11:23:53 colincrist Exp $ */ public class EditNamingConfigDialog extends StandardDialog { /** * */ private static final long serialVersionUID = -3108020658142737582L; private static final Logger log = Logger.getLogger(EditNamingConfigDialog.class); private static Vector selectionHistory = new Vector(); private JPanel topPanel = new JPanel(); private List namingConfigs; private String selectedConfig; private Map namingConfigsByName = new HashMap(); private JComboBox comboBox; private JideScrollPane scrollPane = new JideScrollPane(); private JNDIContextFactory bean; private Property classpathIdProperty; private String currentSelection; private NamingConfig newConfig; /** * @param parent * @param name * @param modal */ public EditNamingConfigDialog(Frame parent, String selectedConfig, List namingConfigs) { super(parent, "JNDI InitialContext", true); this.namingConfigs = namingConfigs; this.selectedConfig = selectedConfig; setDefaultAction(new AbstractAction() { /** * */ private static final long serialVersionUID = -8231223040278773071L; public void actionPerformed(ActionEvent e) { onOK(); } }); } public EditNamingConfigDialog(Frame parent, NamingConfig newConfig, List namingConfigs) { this(parent, (String) null, namingConfigs); this.newConfig = newConfig; this.selectedConfig = newConfig.getId(); namingConfigsByName.put(newConfig.getId(), newConfig); } protected void onOK() { try { final NamingConfig config = (NamingConfig) namingConfigsByName.get(comboBox.getSelectedItem()); final Map map = PropertyUtils.describe(bean); config.setClasspathId(classpathIdProperty.getValue().toString()); if (config.getProperties() == null) { config.setProperties(new PropertySetConfig()); } else { config.getProperties().getProperty().clear(); } HermesBrowser.getConfigDAO().populatePropertySet(map, config.getProperties()); if (config == newConfig) { namingConfigs.add(config); } HermesBrowser.getBrowser().saveConfig(); HermesBrowser.getBrowser().loadConfig(); } catch (Exception e) { log.error(e.getMessage(), e); HermesBrowser.getBrowser().showErrorDialog(e); } } public JComponent createBannerPanel() { JLabel label = new JLabel(IconCache.getIcon(IconCache.JNDI_LARGE), JLabel.RIGHT); return label; } public ButtonPanel createButtonPanel() { final ButtonPanel buttonPanel = new ButtonPanel(); final JButton okButton = new JButton("OK"); final JButton cancelButton = new JButton("Cancel"); buttonPanel.addButton(okButton); buttonPanel.addButton(cancelButton); okButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { onOK(); dispose(); } }); cancelButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { dispose(); } }); buttonPanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); return buttonPanel; } private ComboBoxModel createComboBoxModel() { DefaultComboBoxModel model = new DefaultComboBoxModel(); if (newConfig != null) { model.addElement(newConfig.getId()); } for (Iterator iter = namingConfigs.iterator(); iter.hasNext();) { NamingConfig config = (NamingConfig) iter.next(); namingConfigsByName.put(config.getId(), config); model.addElement(config.getId()); if (selectedConfig == null) { selectedConfig = config.getId(); } } return model; } public JComponent createContentPanel() { topPanel.setLayout(new BorderLayout()); topPanel.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED)); comboBox = new JComboBox(createComboBoxModel()); comboBox.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { doSelectionChanged(); } }); topPanel.add(comboBox, BorderLayout.NORTH); topPanel.add(scrollPane, BorderLayout.CENTER); comboBox.setSelectedItem(selectedConfig); return topPanel; } @SuppressWarnings("unchecked") public void doSelectionChanged() { try { final String selectedConfig = (String) comboBox.getSelectedItem(); final NamingConfig config = (NamingConfig) namingConfigsByName.get(selectedConfig); final PropertySetConfig propertySet = config.getProperties(); if (currentSelection == null || !currentSelection.equals(selectedConfig)) { currentSelection = selectedConfig; bean = new JNDIContextFactory(); LoaderSupport.populateBean(bean, propertySet); final Map properties = PropertyUtils.describe(bean); final List list = new ArrayList(); classpathIdProperty = new Property("loader", "Classpath Loader to use.", String.class) { /** * */ private static final long serialVersionUID = -3071689960943636606L; private String classpathId = config.getClasspathId(); public void setValue(Object value) { classpathId = value.toString(); } public Object getValue() { return classpathId; } public boolean hasValue() { return true; } }; classpathIdProperty.setEditorContext(ClasspathIdCellEdtitor.CONTEXT); list.add(classpathIdProperty); for (Iterator iter = properties.entrySet().iterator(); iter.hasNext();) { final Map.Entry entry = (Map.Entry) iter.next(); final String propertyName = (String) entry.getKey(); final Object propertyValue = entry.getValue() != null ? entry.getValue() : ""; if (!propertyName.equals("class") && !propertyName.equals("name")) { Property displayProperty = new Property(propertyName, propertyName, PropertyUtils.getPropertyType(bean, propertyName)) { /** * */ private static final long serialVersionUID = 1751773758147906036L; public void setValue(Object value) { try { PropertyUtils.setProperty(bean, propertyName, value); } catch (Exception e) { log.error(e.getMessage(), e); } } public Object getValue() { try { return PropertyUtils.getProperty(bean, propertyName); } catch (Exception e) { log.error(e.getMessage(), e); } return null; } public boolean hasValue() { return true; } }; list.add(displayProperty); } } final PropertyTableModel model = new PropertyTableModel(list); final PropertyTable table = new PropertyTable(model); table.setAutoResizeMode(PropertyTable.AUTO_RESIZE_ALL_COLUMNS); PropertyPane pane = new PropertyPane(table); pane.addPropertyChangeListener(new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent evt) { } }); model.expandAll(); scrollPane.setViewportView(pane); } } catch (Exception e) { log.error(e.getMessage(), e); HermesBrowser.getBrowser().showErrorDialog(e); } } }