]> git.argeo.org Git - gpl/argeo-slc.git/blob - 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
1 package org.argeo.slc.ant.spring;
2
3 import java.util.List;
4 import java.util.Vector;
5
6 import org.springframework.beans.BeanWrapper;
7 import org.springframework.beans.BeanWrapperImpl;
8 import org.springframework.context.ApplicationContext;
9
10 import org.apache.tools.ant.types.DataType;
11
12 import org.argeo.slc.ant.SlcProjectHelper;
13
14 /** Abstract Ant type wrapping a Spring bean. */
15 public abstract class AbstractSpringArg extends DataType {
16 private List<OverrideArg> overrides = new Vector<OverrideArg>();
17
18 private String bean;
19
20 // cache bean instance to avoid reading it twice if it is a prototype
21 private Object beanInstance = null;
22
23 /** The <u>name</u> of the underlying bean, as set throught the attribute. */
24 public String getBean() {
25 return bean;
26 }
27
28 /** Setter for the bean name. */
29 public void setBean(String bean) {
30 this.bean = bean;
31 }
32
33 /**
34 * Retrieve the instance of the bean, and sets the overriden properties.
35 * <b>The value is cached.</b>
36 */
37 public Object getBeanInstance() {
38 if (beanInstance == null) {
39 beanInstance = getContext().getBean(bean);
40
41 BeanWrapper wrapper = new BeanWrapperImpl(beanInstance);
42 for (OverrideArg override : overrides) {
43 wrapper.setPropertyValue(override.getName(), override
44 .getObject());
45 }
46 }
47 return beanInstance;
48 }
49
50 /** Creates an override subtag. */
51 public OverrideArg createOverride() {
52 OverrideArg propertyArg = new OverrideArg();
53 overrides.add(propertyArg);
54 return propertyArg;
55 }
56
57 /** The related Spring application context. */
58 protected ApplicationContext getContext() {
59 return (ApplicationContext) getProject().getReference(
60 SlcProjectHelper.REF_ROOT_CONTEXT);
61 }
62
63 }