// Path: core/src/main/java/net/sf/beanlib/provider/collector/PublicSetterMethodCollector.java
// public class PublicSetterMethodCollector implements BeanMethodCollector {
// 
//     @Override
//     public Method[] collect(Object bean) {
//         // Get all the public member methods of the class or interface,
//         // including those declared by the class or interface and
//         // those inherited from superclasses and superinterfaces.
//         Method[] ma = bean.getClass().getMethods();
//         List<Method> list = new ArrayList<Method>();
// 
//         for (Method m : ma) {
//             if (m.getParameterTypes().length == 1) {
//                 if (m.getName().startsWith(getMethodPrefix())) {
//                     list.add(m);
//                 }
//             }
//         }
//         return list.toArray(new Method[list.size()]);
//     }
// 
//     @Override
//     public String getMethodPrefix() {
//         return "set";
//     }
// }
// 
// Path: core/src/main/java/net/sf/beanlib/provider/finder/PublicReaderMethodFinder.java
// public class PublicReaderMethodFinder implements BeanMethodFinder {
// 
//     @Override
//     public Method find(final String propertyName, Object bean) {
//         String s = propertyName;
// 
//         if (Character.isLowerCase(propertyName.charAt(0))) {
//             s = propertyName.substring(0, 1).toUpperCase();
// 
//             if (propertyName.length() > 1) {
//                 s += propertyName.substring(1);
//             }
//         }
//         Class<?> beanClass = bean.getClass();
//         try {
//             // Find the public member method of the class or interface,
//             // recursively on super classes and interfaces as necessary.
//             Method m = beanClass.getMethod("get" + s);
//             if (m.getParameterTypes().length == 0) {
//                 return m;
//             }
//         } catch (NoSuchMethodException ignore) {}
//         try {
//             Method m = beanClass.getMethod("is" + s);
//             if (m.getParameterTypes().length == 0) {
//                 return m;
//             }
//         } catch (NoSuchMethodException ignore) {}
//         return null;
//     }
// }


import net.sf.beanlib.provider.collector.PublicSetterMethodCollector;
import net.sf.beanlib.provider.finder.PublicReaderMethodFinder;
/*
 * Copyright 2007 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;


/**
 * Base configuration for a Bean Populator.
 *
 * @author Joe D. Velopar
 */
public class BeanPopulatorBaseConfig implements Cloneable {

    // BeanPopulatorBaseSpi configurations
    private BeanMethodCollector setterMethodCollector = new PublicSetterMethodCollector();

// Path: core/src/main/java/net/sf/beanlib/provider/collector/PublicSetterMethodCollector.java
// public class PublicSetterMethodCollector implements BeanMethodCollector {
// 
//     @Override
//     public Method[] collect(Object bean) {
//         // Get all the public member methods of the class or interface,
//         // including those declared by the class or interface and
//         // those inherited from superclasses and superinterfaces.
//         Method[] ma = bean.getClass().getMethods();
//         List<Method> list = new ArrayList<Method>();
// 
//         for (Method m : ma) {
//             if (m.getParameterTypes().length == 1) {
//                 if (m.getName().startsWith(getMethodPrefix())) {
//                     list.add(m);
//                 }
//             }
//         }
//         return list.toArray(new Method[list.size()]);
//     }
// 
//     @Override
//     public String getMethodPrefix() {
//         return "set";
//     }
// }
// 
// Path: core/src/main/java/net/sf/beanlib/provider/finder/PublicReaderMethodFinder.java
// public class PublicReaderMethodFinder implements BeanMethodFinder {
// 
//     @Override
//     public Method find(final String propertyName, Object bean) {
//         String s = propertyName;
// 
//         if (Character.isLowerCase(propertyName.charAt(0))) {
//             s = propertyName.substring(0, 1).toUpperCase();
// 
//             if (propertyName.length() > 1) {
//                 s += propertyName.substring(1);
//             }
//         }
//         Class<?> beanClass = bean.getClass();
//         try {
//             // Find the public member method of the class or interface,
//             // recursively on super classes and interfaces as necessary.
//             Method m = beanClass.getMethod("get" + s);
//             if (m.getParameterTypes().length == 0) {
//                 return m;
//             }
//         } catch (NoSuchMethodException ignore) {}
//         try {
//             Method m = beanClass.getMethod("is" + s);
//             if (m.getParameterTypes().length == 0) {
//                 return m;
//             }
//         } catch (NoSuchMethodException ignore) {}
//         return null;
//     }
// }


// Path: core/src/main/java/net/sf/beanlib/spi/BeanPopulatorBaseConfig.java
import net.sf.beanlib.provider.collector.PublicSetterMethodCollector;
import net.sf.beanlib.provider.finder.PublicReaderMethodFinder;

/*
 * Copyright 2007 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;


/**
 * Base configuration for a Bean Populator.
 *
 * @author Joe D. Velopar
 */
public class BeanPopulatorBaseConfig implements Cloneable {

    // BeanPopulatorBaseSpi configurations
    private BeanMethodCollector setterMethodCollector = new PublicSetterMethodCollector();

    private BeanMethodFinder readerMethodFinder = new PublicReaderMethodFinder();