/*
* 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.renderers;
import hermes.browser.ConfigDialogProxy;
import hermes.browser.MessageRenderer.Config;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import javax.swing.JComponent;
import org.apache.commons.beanutils.PropertyUtils;
import org.apache.log4j.Logger;
import com.jidesoft.grid.Property;
import com.jidesoft.grid.PropertyPane;
import com.jidesoft.grid.PropertyTable;
import com.jidesoft.grid.PropertyTableModel;
/**
* Some helper functions for creating MessageRenderers.
*
* @author colincrist@hermesjms.com
* @version $Id: RendererHelper.java,v 1.5 2005/05/16 16:41:37 colincrist Exp $
*/
public class RendererHelper
{
private static final Logger cat = Logger.getLogger(RendererHelper.class);
/**
* Create a default renderer for a Config that just contains simple
* properties (i.e. not 1:m relationships), the dialog will be a normal
* property pane.
*
* @param dialogProxy
* @return @throws
* IllegalAccessException
* @throws InvocationTargetException
* @throws NoSuchMethodException
*/
public static JComponent createDefaultConfigPanel(final ConfigDialogProxy dialogProxy) throws IllegalAccessException, InvocationTargetException,
NoSuchMethodException
{
final Config theConfig = dialogProxy.getConfig();
final List<Property> list = new ArrayList<Property>();
final Map properties = PropertyUtils.describe(theConfig);
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();
if (!propertyName.equals("class") && !propertyName.equals("name"))
{
Property displayProperty = new Property(propertyName, theConfig.getPropertyDescription(propertyName), propertyValue.getClass())
{
/**
*
*/
private static final long serialVersionUID = -4650355524853942976L;
public void setValue(Object value)
{
try
{
dialogProxy.setDirty() ;
PropertyUtils.setProperty(theConfig, propertyName, value);
}
catch (Exception e)
{
cat.error(e.getMessage(), e);
}
}
public Object getValue()
{
try
{
return PropertyUtils.getProperty(theConfig, propertyName);
}
catch (Exception e)
{
cat.error(e.getMessage(), e);
}
return null;
}
public boolean hasValue()
{
return true;
}
};
list.add(displayProperty);
}
}
PropertyTableModel model = new PropertyTableModel(list);
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)
{
dialogProxy.setDirty() ;
}
}) ;
model.expandAll();
return pane;
}
}