// Path: core/src/main/java/net/sf/beanlib/PropertyInfo.java
// public class PropertyInfo {
// 
//     private final String propertyName;
// 
//     private final Object fromBean;
// 
//     private final Object toBean;
// 
//     public PropertyInfo(String propertyName, Object fromBean, Object toBean) {
//         this.propertyName = propertyName;
//         this.fromBean = fromBean;
//         this.toBean = toBean;
//     }
// 
//     /** Returns the property name. */
//     public String getPropertyName() {
//         return propertyName;
//     }
// 
//     /** Returns the Java Bean from which the property is read. */
//     public Object getFromBean() {
//         return fromBean;
//     }
// 
//     /** Returns the Java Bean to which the property is to be written. */
//     public Object getToBean() {
//         return toBean;
//     }
// 
//     @Override
//     public String toString() {
//         return ToStringBuilder.reflectionToString(this, ToStringStyle.MULTI_LINE_STYLE);
//     }
// }


import java.util.ArrayList;
import java.util.List;
import net.sf.beanlib.PropertyInfo;
                for (CustomBeanTransformerSpi.Factory f : customBeanTransformerFactories) {
                    this.customTransformerFactories.add(f);
                }
            }
        }

        public Factory appendCustomerBeanTransformerFactory(CustomBeanTransformerSpi.Factory customBeanTransformerFactory) {
            this.customTransformerFactories.add(customBeanTransformerFactory);
            return this;
        }

        @Override
        public CustomBeanTransformerSpi newCustomBeanTransformer(BeanTransformerSpi contextBeanTransformer) {
            ChainedCustomBeanTransformer chained = new ChainedCustomBeanTransformer();

            for (CustomBeanTransformerSpi.Factory f : customTransformerFactories) {
                chained.appendCustomerBeanTransformer(f.newCustomBeanTransformer(contextBeanTransformer));
            }
            return chained;
        }
    }

    private ChainedCustomBeanTransformer() {}

    private ChainedCustomBeanTransformer appendCustomerBeanTransformer(CustomBeanTransformerSpi c) {
        this.customTransformers.add(c);
        return this;
    }

    @Override
// Path: core/src/main/java/net/sf/beanlib/PropertyInfo.java
// public class PropertyInfo {
// 
//     private final String propertyName;
// 
//     private final Object fromBean;
// 
//     private final Object toBean;
// 
//     public PropertyInfo(String propertyName, Object fromBean, Object toBean) {
//         this.propertyName = propertyName;
//         this.fromBean = fromBean;
//         this.toBean = toBean;
//     }
// 
//     /** Returns the property name. */
//     public String getPropertyName() {
//         return propertyName;
//     }
// 
//     /** Returns the Java Bean from which the property is read. */
//     public Object getFromBean() {
//         return fromBean;
//     }
// 
//     /** Returns the Java Bean to which the property is to be written. */
//     public Object getToBean() {
//         return toBean;
//     }
// 
//     @Override
//     public String toString() {
//         return ToStringBuilder.reflectionToString(this, ToStringStyle.MULTI_LINE_STYLE);
//     }
// }


// Path: core/src/main/java/net/sf/beanlib/spi/ChainedCustomBeanTransformer.java
import java.util.ArrayList;
import java.util.List;
import net.sf.beanlib.PropertyInfo;

                for (CustomBeanTransformerSpi.Factory f : customBeanTransformerFactories) {
                    this.customTransformerFactories.add(f);
                }
            }
        }

        public Factory appendCustomerBeanTransformerFactory(CustomBeanTransformerSpi.Factory customBeanTransformerFactory) {
            this.customTransformerFactories.add(customBeanTransformerFactory);
            return this;
        }

        @Override
        public CustomBeanTransformerSpi newCustomBeanTransformer(BeanTransformerSpi contextBeanTransformer) {
            ChainedCustomBeanTransformer chained = new ChainedCustomBeanTransformer();

            for (CustomBeanTransformerSpi.Factory f : customTransformerFactories) {
                chained.appendCustomerBeanTransformer(f.newCustomBeanTransformer(contextBeanTransformer));
            }
            return chained;
        }
    }

    private ChainedCustomBeanTransformer() {}

    private ChainedCustomBeanTransformer appendCustomerBeanTransformer(CustomBeanTransformerSpi c) {
        this.customTransformers.add(c);
        return this;
    }

    @Override
    public boolean isTransformable(Object from, Class<?> toClass, PropertyInfo propertyInfo) {