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