    001/*
    002 * Licensed to the Apache Software Foundation (ASF) under one or more
    003 * contributor license agreements.  See the NOTICE file distributed with
    004 * this work for additional information regarding copyright ownership.
    005 * The ASF licenses this file to You under the Apache License, Version 2.0
    006 * (the "License"); you may not use this file except in compliance with
    007 * the License.  You may obtain a copy of the License at
    008 *
    009 *      http://www.apache.org/licenses/LICENSE-2.0
    010 *
    011 * Unless required by applicable law or agreed to in writing, software
    012 * distributed under the License is distributed on an "AS IS" BASIS,
    013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    014 * See the License for the specific language governing permissions and
    015 * limitations under the License.
    016 */
    017package org.apache.commons.dbutils;
    018
    019/**
    020 * Defines how to handle properties when constructing a bean from a {@link java.sql.ResultSet}. Instances coerce values into a target types.
    021 */
    022public interface PropertyHandler {
    023
    024    /**
    025     * Stores the given {@code value} into an instance of type {@code parameter}. This method is only called if {@link #match(Class, Object)} return true.
    026     *
    027     * @param parameter The type of the target parameter.
    028     * @param value     The value to set.
    029     * @return The converted value or the original value if something doesn't work out.
    030     */
    031    Object apply(Class<?> parameter, Object value);
    032
    033    /**
    034     * Tests whether to handle setting {@code value} into an instance of {@code parameter}.
    035     *
    036     * @param parameter The type of the target parameter.
    037     * @param value     The value to be set.
    038     * @return true is this property handler can/wants to handle this value; false otherwise.
    039     */
    040    boolean match(Class<?> parameter, Object value);
    041}