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.IBeanProcessor; 18 19 /** 20 * 21 * Complex property transformer. Typically the case when we need to instanciate 22 * a bean from a list of Strings we want to set as a property of our final bean. 23 * 24 * @param <B> 25 * bean this property Processor deals with. 26 * 27 */ 28 public final class ComplexPropertyProcessor<B> extends AbstractPropertyProcessor<B> { 29 /** 30 * the transformer used to product a bean from a list of Strings 31 */ 32 @SuppressWarnings("rawtypes") 33 private final IBeanProcessor transformer; 34 35 /** 36 * 37 * @param transformer 38 * the transformer which products the value of the property to 39 * set 40 * @param beanClass 41 * the class of the bean to return. Must be not <code>null</code> 42 * @param propertyName 43 * the name of the property to set. Must be not <code>null</code> 44 */ 45 46 ComplexPropertyProcessor(@SuppressWarnings("rawtypes") IBeanProcessor transformer, Class<B> beanClass, 47 String propertyName) { 48 super(); 49 this.transformer = transformer; 50 this.beanClass = beanClass; 51 this.method = olg.csv.bean.Util.identifySetter(beanClass, propertyName); 52 if (method == null) { 53 throw new IllegalArgumentException("No such setter for " + beanClass.getName() + "." + propertyName 54 + " field"); 55 } 56 } 57 58 public B transform(Row line, B bean) throws olg.csv.bean.parser.ParseException { 59 60 Object field = transformer.transform(line); 61 return invoke(field, bean); 62 63 } 64 65 }