1 /* 2 * Copyright 2012 Olivier Godineau 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); you may not 5 * use this file except in compliance with the License. You may obtain a copy of 6 * the License at http://www.apache.org/licenses/LICENSE-2.0 7 * 8 * Unless required by applicable law or agreed to in writing, software 9 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 10 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 11 * License for the specific language governing permissions and limitations under 12 * the License. 13 */ 14 package olg.csv.bean.impl; 15 16 import olg.csv.base.Row; 17 import olg.csv.bean.getter.AbstractGetter; 18 import olg.csv.bean.parser.AbstractParser; 19 20 /** 21 * 22 * Basic property transformer. Allows to set a property from a string. 23 * 24 * @param <B> 25 * dedicated bean the PropertyProcessor deals with. 26 * 27 */ 28 public final class PropertyProcessor<B> extends AbstractPropertyProcessor<B> { 29 /** 30 * the getter. Allows to extract the property as string from a list of 31 * Strings. 32 */ 33 private final AbstractGetter getter; 34 35 /** 36 * The parser to product the property to set from a String. 37 */ 38 @SuppressWarnings("rawtypes") 39 private final AbstractParser parser; 40 41 @Override 42 public B transform(Row line, B bean) throws olg.csv.bean.parser.ParseException { 43 Object object = parser.parse(getter.get(line)); 44 45 return invoke(object, bean); 46 47 } 48 49 /** 50 * 51 * @param getter 52 * the getter that extracts the string value to parse as a 53 * property. . Must be not <code>null</code> 54 * @param parser 55 * the parser that parses the string as a property value. . Must 56 * be not <code>null</code> 57 * @param propertyName 58 * the name of the bean property. 59 * @param clazz 60 * the bean class. 61 */ 62 PropertyProcessor(AbstractGetter getter, @SuppressWarnings("rawtypes") AbstractParser parser, String propertyName, 63 Class<B> clazz) { 64 super(); 65 this.getter = getter; 66 this.parser = parser; 67 this.beanClass = clazz; 68 this.method = olg.csv.bean.Util.identifySetter(clazz, propertyName); 69 70 if (method == null) { 71 throw new IllegalArgumentException("No such setter for " + beanClass.getName() + "." + propertyName 72 + " field"); 73 } 74 75 } 76 77 }