// 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 net.sf.beanlib.PropertyInfo;
/*
 * Copyright 2008 The Apache Software Foundation.
 *
 * Licensed under the Apache License, Version 2.0 (the "License")
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package net.sf.beanlib.spi;


/**
 * @author Hanson Char
 */
public class TrivialCustomBeanTransformerFactories {

    /** Returns the factory of a custom transformer that is always not applicable. */
    public static CustomBeanTransformerSpi.Factory getNoopCustomTransformerFactory() {
        return NoopCustomTransformer.FACTORY;
    }

    /** Returns a custom transformer that is always not applicable. */
    public static CustomBeanTransformerSpi getNoopCustomTransformer() {
        return NoopCustomTransformer.SINGLETON;
    }

    /**
     * Returns the factory of a custom transformer that always performs identical transformation (ie returns the same
     * input instance).
     */
    public static CustomBeanTransformerSpi.Factory getIdentityCustomTransformerFactory() {
        return IdentityCustomTransformer.FACTORY;
    }

    /**
     * Returns a custom transformer that always performs identical transformation (ie returns the same input instance).
     */
    public static CustomBeanTransformerSpi getIdentityCustomTransformer() {
        return IdentityCustomTransformer.SINGLETON;
    }

    /** Returns the factory a custom transformer that always transforms to null. */
    public static CustomBeanTransformerSpi.Factory getNullCustomTransformerFactory() {
        return NullCustomTransformer.FACTORY;
    }

    /** Returns a custom transformer that always transforms to null. */
    public static CustomBeanTransformerSpi getNullCustomTransformer() {
        return NullCustomTransformer.SINGLETON;
    }

    /** Used to delay loading class until necessary. */
    private static class NoopCustomTransformer {
        /** Factory of a transformer that performs no custom transformation. */
        static final CustomBeanTransformerSpi.Factory FACTORY = new CustomBeanTransformerSpi.Factory() {
            @Override
            public CustomBeanTransformerSpi newCustomBeanTransformer(BeanTransformerSpi contextBeanTransformer) {
                return SINGLETON;
            }
        };
        /** Performs no custom transformation. */
        static final CustomBeanTransformerSpi SINGLETON = new CustomBeanTransformerSpi() {
            @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/TrivialCustomBeanTransformerFactories.java
import net.sf.beanlib.PropertyInfo;

/*
 * Copyright 2008 The Apache Software Foundation.
 *
 * Licensed under the Apache License, Version 2.0 (the "License")
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package net.sf.beanlib.spi;


/**
 * @author Hanson Char
 */
public class TrivialCustomBeanTransformerFactories {

    /** Returns the factory of a custom transformer that is always not applicable. */
    public static CustomBeanTransformerSpi.Factory getNoopCustomTransformerFactory() {
        return NoopCustomTransformer.FACTORY;
    }

    /** Returns a custom transformer that is always not applicable. */
    public static CustomBeanTransformerSpi getNoopCustomTransformer() {
        return NoopCustomTransformer.SINGLETON;
    }

    /**
     * Returns the factory of a custom transformer that always performs identical transformation (ie returns the same
     * input instance).
     */
    public static CustomBeanTransformerSpi.Factory getIdentityCustomTransformerFactory() {
        return IdentityCustomTransformer.FACTORY;
    }

    /**
     * Returns a custom transformer that always performs identical transformation (ie returns the same input instance).
     */
    public static CustomBeanTransformerSpi getIdentityCustomTransformer() {
        return IdentityCustomTransformer.SINGLETON;
    }

    /** Returns the factory a custom transformer that always transforms to null. */
    public static CustomBeanTransformerSpi.Factory getNullCustomTransformerFactory() {
        return NullCustomTransformer.FACTORY;
    }

    /** Returns a custom transformer that always transforms to null. */
    public static CustomBeanTransformerSpi getNullCustomTransformer() {
        return NullCustomTransformer.SINGLETON;
    }

    /** Used to delay loading class until necessary. */
    private static class NoopCustomTransformer {
        /** Factory of a transformer that performs no custom transformation. */
        static final CustomBeanTransformerSpi.Factory FACTORY = new CustomBeanTransformerSpi.Factory() {
            @Override
            public CustomBeanTransformerSpi newCustomBeanTransformer(BeanTransformerSpi contextBeanTransformer) {
                return SINGLETON;
            }
        };
        /** Performs no custom transformation. */
        static final CustomBeanTransformerSpi SINGLETON = new CustomBeanTransformerSpi() {
            @Override
            public boolean isTransformable(Object from, Class<?> toClass, PropertyInfo propertyInfo) {