/* * Copyright 2001-2008 Geert Bevin (gbevin[remove] at uwyn dot com) * Licensed under the Apache License, Version 2.0 (the "License") * $Id: BeanHandler.java 3918 2008-04-14 17:35:35Z gbevin $ */ package com.uwyn.rife.template; import com.uwyn.rife.site.FormBuilder; import com.uwyn.rife.template.exceptions.TemplateException; /** * Handles the process of setting values in a template based on a Java bean * instance. * * @author Keith Lea (keith[remove] at cs dot oswego dot edu) * @author Geert Bevin (gbevin[remove] at uwyn dot com) * @version $Revision: 3918 $ * @since 1.0 */ public interface BeanHandler { /** * Sets all values in the given template whose names match names of * properties in the given bean, preceded by the given prefix, if present. * If the given prefix is <code>null</code>, it is ignored. * <p>For example, given a class: * <pre>class Person { * private String first; * private String last; * * public String getFirstName() { return first; } * public void setFirstName(String name) { this.first = name; } * * public String getLastName() { return last; } * public void setLastName(String name) { this.last = name; } *}</pre> * <p>And given a template: * <pre>Hello <!--V 'NAME:firstName'/--> <!--V 'NAME:lastName'/-->.</pre> * <p>Calling this method with an instance of Person where * <code>first</code> was "<code>Jim</code>" and <code>last</code> was "<code>James</code>", * and the prefix "<code>NAME:</code>", would produce: * <pre>Hello Jim James.</pre> * <p>Calling this method is equivalent to calling {@link * Template#setValue(String, String) setValue} individually for each * property of the bean prefixed with the given prefix. * <p>If <code>encode</code> is <code>true</code>, this method will use * the template's {@linkplain Template#getEncoder encoder} to encode the * bean properties before setting the values. * <p>Only <em>bean properties</em> will be considered for insertion in * the template. This means only properties with a <em>getter and a setter</em> * will be considered. * * @param template the template whose values will be filled * @param bean a bean whose properties will be used to fill in values in * the template * @param prefix the prefix of values which will be filled with the given * bean's property values * @exception TemplateException if this template has no bean handling * capability; or * <p>an error occurred during the introspection of the bean * @since 1.0 */ public void setBean(Template template, Object bean, String prefix, boolean encode) throws TemplateException; /** * Reverts all values to their defaults when the identifiers match * properties of the given bean preceded by the given prefix, whether or * not those values were set with a previous call to {@link * Template#setBean(Object) }. The values of the bean's properties are * ignored. * <p>Calling this method is equivalent to calling {@link * Template#removeValue } once for the name of each property of the given * bean, prefixed with the given prefix. * * @param bean a bean whose property names will be used to determine * whether * @param prefix a prefix * @exception TemplateException if this template has no bean handling * capability; or * <p>an error occurred during the introspection of the bean * @since 1.0 */ public void removeBean(Template template, Object bean, String prefix) throws TemplateException; /** * Returns a form builder which will be used to {@linkplain * com.uwyn.rife.engine.Element#generateForm(Template, Object) generate * forms} in the corresponding template. * * @return a form builder for use with the corresponding template * @since 1.0 */ public FormBuilder getFormBuilder(); }