package cn.jimmyshi.beanquery.selectors;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Selector that cast the item to the type used to construct the BeanSelector
* instance.
*
*/
public class BeanSelector<T> extends DefaultSelector<T> {
private transient Logger logger = LoggerFactory.getLogger(BeanSelector.class);
private Class<T> itemClass;
public BeanSelector(Class<T> itemClass) {
this.itemClass = itemClass;
}
/**
* If the item is null, return null. If the item is instance of the
* constructor parameter itemClass, return the type cast result, otherwise,
* return null.
*/
@Override
public T select(Object item) {
if (item == null) {
return null;
}
if (itemClass.isInstance(item)) {
return itemClass.cast(item);
}
logger.debug("item [{}] is not assignable to class [{}], returning null", item, itemClass);
return null;
}
@Override
public String toString() {
return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE,false);
}
}