]> git.argeo.org Git - gpl/argeo-slc.git/blob - org.argeo.slc/src/main/java/org/argeo/slc/ant/spring/AbstractSpringArg.java
Revert HSQL DB changes (still force shutdown, but reuse connection)
[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. <b>The value is cached.</b>
35 */
36 public Object getBeanInstance() {
37 if (beanInstance == null) {
38 beanInstance = getContext().getBean(bean);
39
40 BeanWrapper wrapper = new BeanWrapperImpl(beanInstance);
41 for (OverrideArg override : overrides) {
42 wrapper.setPropertyValue(override.getName(), override
43 .getObject());
44 }
45 }
46 return beanInstance;
47 }
48
49 /** Creates an override subtag. */
50 public OverrideArg createOverride() {
51 OverrideArg propertyArg = new OverrideArg();
52 overrides.add(propertyArg);
53 return propertyArg;
54 }
55
56 /** The related Spring application context. */
57 protected ApplicationContext getContext() {
58 return (ApplicationContext) getProject().getReference(
59 SlcProjectHelper.REF_ROOT_CONTEXT);
60 }
61
62 }