]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - org.argeo.slc/src/main/java/org/argeo/slc/ant/spring/AbstractSpringArg.java
Improve reporting
[gpl/argeo-slc.git] / org.argeo.slc / src / main / java / org / argeo / slc / ant / spring / AbstractSpringArg.java
index 4061f377ff21b295aa6357070d0e2f21458f0c7c..6c64235986740357cfff57a52f818b13fabe5ea2 100644 (file)
@@ -7,42 +7,54 @@ import org.springframework.beans.BeanWrapper;
 import org.springframework.beans.BeanWrapperImpl;\r
 import org.springframework.context.ApplicationContext;\r
 \r
-import org.apache.tools.ant.Location;\r
-import org.apache.tools.ant.Project;\r
 import org.apache.tools.ant.types.DataType;\r
 \r
 import org.argeo.slc.ant.SlcProjectHelper;\r
 \r
+/** Abstract Ant type wrapping a Spring bean. */\r
 public abstract class AbstractSpringArg extends DataType {\r
        private List<OverrideArg> overrides = new Vector<OverrideArg>();\r
 \r
        private String bean;\r
 \r
+       // cache bean instance to avoid reading it twice if it is a prototype\r
+       private Object beanInstance = null;\r
+\r
+       /** The <u>name</u> of the underlying bean, as set throught the attribute. */\r
        public String getBean() {\r
                return bean;\r
        }\r
 \r
+       /** Setter for the bean name. */\r
        public void setBean(String bean) {\r
                this.bean = bean;\r
        }\r
 \r
-       protected Object getBeanInstance() {\r
-               Object obj = getContext().getBean(bean);\r
-\r
-               BeanWrapper wrapper = new BeanWrapperImpl(obj);\r
-               for (OverrideArg override : overrides) {\r
-                       wrapper.setPropertyValue(override.getName(), override.getObject());\r
+       /**\r
+        * Retrieve the instance of the bean, and sets the overriden properties.\r
+        * <b>The value is cached.</b>\r
+        */\r
+       public Object getBeanInstance() {\r
+               if (beanInstance == null) {\r
+                       beanInstance = getContext().getBean(bean);\r
+\r
+                       BeanWrapper wrapper = new BeanWrapperImpl(beanInstance);\r
+                       for (OverrideArg override : overrides) {\r
+                               wrapper.setPropertyValue(override.getName(), override\r
+                                               .getObject());\r
+                       }\r
                }\r
-\r
-               return obj;\r
+               return beanInstance;\r
        }\r
 \r
+       /** Creates an override subtag. */\r
        public OverrideArg createOverride() {\r
                OverrideArg propertyArg = new OverrideArg();\r
                overrides.add(propertyArg);\r
                return propertyArg;\r
        }\r
 \r
+       /** The related Spring application context. */\r
        protected ApplicationContext getContext() {\r
                return (ApplicationContext) getProject().getReference(\r
                                SlcProjectHelper.REF_ROOT_CONTEXT);\r