hermes.browser.dialog.EditNamingConfigDialog.java Source code

Java tutorial

Introduction

Here is the source code for hermes.browser.dialog.EditNamingConfigDialog.java

Source

/* 
 * 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);
        }
    }
}