001 package org.shiftone.jrat.util;
002
003 import org.shiftone.jrat.core.JRatException;
004 import org.shiftone.jrat.util.log.Logger;
005
006 import java.beans.PropertyDescriptor;
007 import java.beans.PropertyEditor;
008 import java.beans.PropertyEditorManager;
009 import java.util.Iterator;
010 import java.util.Map;
011
012 /**
013 * @author jeff@shiftone.org (Jeff Drost)
014 */
015 public class PropertyUtil {
016
017 private static final Logger LOG = Logger.getLogger(PropertyUtil.class);
018
019 public static void setProperties(Object instance, Map properties) {
020
021 Iterator iterator = properties.entrySet().iterator();
022 Class klass = instance.getClass();
023
024 while (iterator.hasNext()) {
025
026 Map.Entry entry = (Map.Entry) iterator.next();
027 String propertyName = (String) entry.getKey();
028 String value = (String) entry.getValue();
029
030 try {
031
032 PropertyDescriptor descriptor = new PropertyDescriptor(propertyName, klass);
033 PropertyEditor propertyEditor = PropertyEditorManager.findEditor(descriptor.getPropertyType());
034
035 if (propertyEditor == null) {
036 throw new Exception("no property editor found for " + descriptor.getPropertyType().getName());
037 }
038
039 propertyEditor.setValue(instance);
040
041 LOG.info(klass.getName() + "." + propertyName + " = " + value);
042
043 propertyEditor.setAsText(value);
044 descriptor.getWriteMethod().invoke(instance, new Object[]{propertyEditor.getValue()});
045
046 } catch (Exception e) {
047
048 throw new JRatException("failed to set property "
049 + propertyName
050 + " to value "
051 + value
052 + " on class "
053 + klass.getName(), e);
054
055 }
056 }
057
058 }
059 }