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 }