/* Copyright 2005-2006 Tim Fennell
*
* 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.sourceforge.stripes.controller;
import net.sourceforge.stripes.action.ActionBean;
import net.sourceforge.stripes.action.ActionBeanContext;
import net.sourceforge.stripes.validation.ValidationErrors;
import net.sourceforge.stripes.config.ConfigurableComponent;
/**
* <p>Interface for class(es) responsible for taking the String/String[] properties contained in the
* HttpServletRequest and:
* <ul>
* <li>Converting them to the rich type of the property on the target JavaBean</li>
* <li>Setting the properties on the JavaBean using the appropriate mechanism</li>
* </ul>
* </p>
*
* <p>Implementations may also perform validations of the fields during binding. If validation
* errors occur then the collection of ValidationErrors contained within the ActionBeanContext
* should be populated before returning.</p>
*
* @author Tim Fennell
*/
public interface ActionBeanPropertyBinder extends ConfigurableComponent {
/**
* Populates all the properties in the request which have a matching property in the target
* bean. If additional properties exist in the request which are not present in the bean a
* message should be logged, but binding should continue without throwing any errors.
*
* @param bean the ActionBean to bind properties to
* @param context the ActionBeanContext containing the current request
* @param validate true indicates that validation should be run, false indicates that only
* type conversion should occur
*/
ValidationErrors bind(ActionBean bean, ActionBeanContext context, boolean validate);
/**
* Bind an individual property with the name specified to the bean supplied.
*
* @param bean the ActionBean to bind the property to
* @param propertyName the name (including nested, indexed and mapped property names) of the
* property being bound
* @param propertyValue the value to be bound to the property on the bean
* @throws Exception thrown if the property cannot be bound for any reason
*/
void bind(ActionBean bean, String propertyName, Object propertyValue) throws Exception;
}