BeanContext.java
package fr.sii.ogham.core.template.context;
import java.util.Map;
import fr.sii.ogham.core.exception.template.BeanContextException;
import fr.sii.ogham.core.exception.template.ContextException;
import fr.sii.ogham.core.exception.util.BeanWrapperException;
import fr.sii.ogham.core.util.BeanUtils;
import fr.sii.ogham.core.util.EqualsBuilder;
import fr.sii.ogham.core.util.HashCodeBuilder;
import fr.sii.ogham.core.util.bean.MapBeanReadWrapper;
/**
* Template context that provides variable values using a Java object. Each
* property name of the object acts as a potential template variable name. Each
* property value acts as a potential template variable value.
*
* The variables can contain dot character (.) to indicate nested properties. A
* nested property is a property on a child object. For example, if the provided
* Java object looks like:
*
* <pre>
* public class NestedBean {
* private SimpleBean nested;
*
* public NestedBean(SimpleBean nested) {
* super();
* this.nested = nested;
* }
*
* public SimpleBean getNested() {
* return nested;
* }
*
* public static class SimpleBean {
* private String value;
*
* public SimpleBean(String value) {
* super();
* this.value = value;
* }
*
* public String getValue() {
* return value;
* }
*
* }
* }
* </pre>
*
* Then the value of the nested object is accessible through the template
* variable name "nested.value".
*
* @author Aurélien Baudet
* @see BeanUtils More information about bean conversion
*/
public class BeanContext implements Context {
/**
* A Java object that is the source for the variable substitutions
*/
private Object bean;
/**
* Register the bean to use for variable substitutions.
*
* @param bean
* the bean to use as source for the variable substitutions
*/
public BeanContext(Object bean) {
super();
this.bean = bean;
}
@Override
public Map<String, Object> getVariables() throws ContextException {
try {
return new MapBeanReadWrapper(bean);
} catch (BeanWrapperException e) {
throw new BeanContextException("Failed to generate context from bean", bean, e);
}
}
@Override
public String toString() {
return bean.toString();
}
@Override
public int hashCode() {
return new HashCodeBuilder().append(bean).hashCode();
}
@Override
public boolean equals(Object obj) {
return new EqualsBuilder(this, obj).appendFields("bean").isEqual();
}
}