X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.slc.core%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fslc%2Fant%2Fspring%2FAbstractSpringArg.java;fp=org.argeo.slc.core%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fslc%2Fant%2Fspring%2FAbstractSpringArg.java;h=6c64235986740357cfff57a52f818b13fabe5ea2;hb=faf680e212bf3e18837c4f798587856e061273b3;hp=0000000000000000000000000000000000000000;hpb=5764eb4717599e8df700094e7f0360a155e2a3bb;p=gpl%2Fargeo-slc.git diff --git a/org.argeo.slc.core/src/main/java/org/argeo/slc/ant/spring/AbstractSpringArg.java b/org.argeo.slc.core/src/main/java/org/argeo/slc/ant/spring/AbstractSpringArg.java new file mode 100644 index 000000000..6c6423598 --- /dev/null +++ b/org.argeo.slc.core/src/main/java/org/argeo/slc/ant/spring/AbstractSpringArg.java @@ -0,0 +1,63 @@ +package org.argeo.slc.ant.spring; + +import java.util.List; +import java.util.Vector; + +import org.springframework.beans.BeanWrapper; +import org.springframework.beans.BeanWrapperImpl; +import org.springframework.context.ApplicationContext; + +import org.apache.tools.ant.types.DataType; + +import org.argeo.slc.ant.SlcProjectHelper; + +/** Abstract Ant type wrapping a Spring bean. */ +public abstract class AbstractSpringArg extends DataType { + private List overrides = new Vector(); + + private String bean; + + // cache bean instance to avoid reading it twice if it is a prototype + private Object beanInstance = null; + + /** The name of the underlying bean, as set throught the attribute. */ + public String getBean() { + return bean; + } + + /** Setter for the bean name. */ + public void setBean(String bean) { + this.bean = bean; + } + + /** + * Retrieve the instance of the bean, and sets the overriden properties. + * The value is cached. + */ + public Object getBeanInstance() { + if (beanInstance == null) { + beanInstance = getContext().getBean(bean); + + BeanWrapper wrapper = new BeanWrapperImpl(beanInstance); + for (OverrideArg override : overrides) { + wrapper.setPropertyValue(override.getName(), override + .getObject()); + } + } + return beanInstance; + } + + /** Creates an override subtag. */ + public OverrideArg createOverride() { + OverrideArg propertyArg = new OverrideArg(); + overrides.add(propertyArg); + return propertyArg; + } + + /** The related Spring application context. */ + protected ApplicationContext getContext() { + return (ApplicationContext) getProject().getReference( + SlcProjectHelper.REF_ROOT_CONTEXT); + } + +}