hermes.browser.dialog.GeneralRendererConfigPanel.java Source code

Java tutorial

Introduction

Here is the source code for hermes.browser.dialog.GeneralRendererConfigPanel.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.browser.ConfigDialogProxy;
import hermes.browser.HermesBrowser;
import hermes.browser.MessageRenderer;
import hermes.browser.MessageRenderer.Config;
import hermes.browser.model.ListConfigTableModel;
import hermes.config.HermesConfig;
import hermes.config.RendererConfig;

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

import javax.swing.BorderFactory;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTable;
import javax.swing.border.BevelBorder;
import javax.swing.border.Border;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.DefaultTableColumnModel;
import javax.swing.table.TableColumn;

import org.apache.commons.beanutils.BeanUtils;
import org.apache.log4j.Logger;

/**
 * @author colincrist@hermesjms.com
 * @version $Id: GeneralRendererConfigPanel.java,v 1.4 2004/07/21 19:46:15
 *          colincrist Exp $
 */
public class GeneralRendererConfigPanel extends AbstractRendererConfigPanel {
    /**
     * 
     */
    private static final long serialVersionUID = -6544267911909301502L;
    private static final Logger log = Logger.getLogger(GeneralRendererConfigPanel.class);
    private JScrollPane bottomSP = new JScrollPane();
    private JTable classTable = new JTable();
    private Map configChanges = new HashMap();
    private ListConfigTableModel configModel;
    private PreferencesDialog dialog;
    private HermesConfig hermesConfig;
    private JLabel infoLabel1 = new JLabel();
    private Set newLoaderConfigs = new HashSet();
    private JSplitPane splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT);

    private JScrollPane topSP = new JScrollPane();

    public GeneralRendererConfigPanel(PreferencesDialog dialog) {
        this.dialog = dialog;

        init();
    }

    public void doRendererSelected(ListSelectionEvent e) {
        if (!e.getValueIsAdjusting() && classTable.getSelectedRow() >= 0) {
            String rendererName = (String) configModel.getValueAt(classTable.getSelectedRow(), 0);

            try {
                final MessageRenderer renderer = HermesBrowser.getRendererManager().getRendererByName(rendererName);
                final ConfigDialogProxy proxy = (ConfigDialogProxy) configChanges
                        .get(renderer.getClass().getName());

                JComponent configPanel = null;

                if (proxy != null && (configPanel = renderer.getConfigPanel(proxy)) != null) {
                    bottomSP.setViewportView(configPanel);

                    configChanges.put(renderer.getClass().getName(), proxy);
                } else {

                    bottomSP.setViewportView(new JLabel("No properties"));
                }
            } catch (Exception ex) {
                add(new JLabel(ex.getMessage()), BorderLayout.SOUTH);

                log.error(ex.getMessage(), ex);
            }
        }
    }

    private void init() {
        Border border = BorderFactory.createBevelBorder(BevelBorder.RAISED);
        JPanel topPanel = new JPanel();

        topPanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
        topPanel.setLayout(new GridLayout(1, 2));

        infoLabel1.setText("Message Renderers");

        setLayout(new BorderLayout());
        setBorder(BorderFactory.createTitledBorder(border, "Renderers"));

        topPanel.add(infoLabel1);
        topSP.setViewportView(classTable);

        classTable.putClientProperty("terminateEditOnFocusLost", Boolean.TRUE);

        add(topPanel, BorderLayout.NORTH);
        add(splitPane, BorderLayout.CENTER);

        splitPane.add(topSP, "top");
        splitPane.add(bottomSP, "bottom");
        splitPane.setDividerLocation(200);

        // splitPane.setShowGripper(true) ;

        classTable.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
            public void valueChanged(ListSelectionEvent e) {
                doRendererSelected(e);
            }
        });

    }

    public void initState() {
        configChanges.clear();

        for (final MessageRenderer renderer : HermesBrowser.getRendererManager().getRenderers()) {
            try {
                final String className = renderer.getClass().getName();
                final Map properties = BeanUtils.describe(renderer);
                final MessageRenderer.Config rendererConfig = renderer.getConfig() != null ? renderer.getConfig()
                        : renderer.createConfig();

                if (rendererConfig != null) {
                    BeanUtils.populate(rendererConfig, properties);

                    final ConfigDialogProxy proxy = new ConfigDialogProxy() {
                        public Config getConfig() {
                            return rendererConfig;
                        }

                        public void setDirty() {
                            dialog.setDirty();
                        }
                    };

                    configChanges.put(className, proxy);
                }
            } catch (Exception e) {
                log.error(e.getMessage(), e);
            }
        }
    }

    public void setHermesConfig(HermesConfig hermesConfig) {
        this.hermesConfig = hermesConfig;

        initState();

        configModel = new ListConfigTableModel();

        for (MessageRenderer rConfig : HermesBrowser.getRendererManager().getRenderers()) {

            configModel.addItem(rConfig.getDisplayName());

        }

        classTable.setModel(configModel);

        DefaultTableColumnModel cm = new DefaultTableColumnModel();
        cm.addColumn(new TableColumn());

        classTable.setColumnModel(cm);
    }

    public void updateModel() {
        if (configModel != null && hermesConfig != null) {
            hermesConfig.getRenderer().clear();

            for (Iterator iter = configModel.getRows().iterator(); iter.hasNext();) {
                RendererConfig rConfig = new RendererConfig();
                MessageRenderer renderer = HermesBrowser.getRendererManager()
                        .getRendererByName((String) iter.next());
                rConfig.setClassName(renderer.getClass().getName());

                hermesConfig.getRenderer().add(rConfig);

                ConfigDialogProxy proxy = (ConfigDialogProxy) configChanges.get(rConfig.getClassName());

                if (proxy != null) {
                    try {
                        Map props = BeanUtils.describe(proxy.getConfig());

                        HermesBrowser.getConfigDAO().setRendererProperties(hermesConfig, rConfig.getClassName(),
                                props);
                    } catch (Exception e) {
                        log.error(e.getMessage(), e);
                    }
                }
            }
        }
    }

}