From 5114616a3c3bf70c16107ff915f50069a46b930b Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Tue, 23 Oct 2007 08:20:20 +0000 Subject: [PATCH] Introduce override git-svn-id: https://svn.argeo.org/slc/trunk@630 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- .../org/argeo/slc/ant/AbstractSpringArg.java | 30 ++++++++++--- .../java/org/argeo/slc/ant/OverrideArg.java | 44 +++++++++++++++++++ .../src/test/ant/applicationContext.xml | 22 ++++++++++ org.argeo.slc/src/test/ant/build.xml | 37 +++++++++++++++- .../slc/testslc/DummyTestDataObject.java | 23 ++++++++++ 5 files changed, 150 insertions(+), 6 deletions(-) create mode 100644 org.argeo.slc/src/main/java/org/argeo/slc/ant/OverrideArg.java create mode 100644 org.argeo.slc/src/test/java/org/argeo/slc/testslc/DummyTestDataObject.java diff --git a/org.argeo.slc/src/main/java/org/argeo/slc/ant/AbstractSpringArg.java b/org.argeo.slc/src/main/java/org/argeo/slc/ant/AbstractSpringArg.java index fac294592..2e2f3dfef 100644 --- a/org.argeo.slc/src/main/java/org/argeo/slc/ant/AbstractSpringArg.java +++ b/org.argeo.slc/src/main/java/org/argeo/slc/ant/AbstractSpringArg.java @@ -1,8 +1,16 @@ package org.argeo.slc.ant; +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.BuildException; + public abstract class AbstractSpringArg { + private List overrides = new Vector(); private String bean; private ApplicationContext context; @@ -14,14 +22,26 @@ public abstract class AbstractSpringArg { public void setBean(String bean) { this.bean = bean; } - - protected Object getBeanInstance(){ - return context.getBean(bean); + + protected Object getBeanInstance() { + Object obj = context.getBean(bean); + + BeanWrapper wrapper = new BeanWrapperImpl(obj); + for (OverrideArg override : overrides) { + wrapper.setPropertyValue(override.getName(), override.getObject()); + } + + return obj; } public void setContext(ApplicationContext context) { this.context = context; } - - + + public OverrideArg createOverride() { + OverrideArg propertyArg = new OverrideArg(); + propertyArg.setContext(context); + overrides.add(propertyArg); + return propertyArg; + } } diff --git a/org.argeo.slc/src/main/java/org/argeo/slc/ant/OverrideArg.java b/org.argeo.slc/src/main/java/org/argeo/slc/ant/OverrideArg.java new file mode 100644 index 000000000..6f793e4aa --- /dev/null +++ b/org.argeo.slc/src/main/java/org/argeo/slc/ant/OverrideArg.java @@ -0,0 +1,44 @@ +package org.argeo.slc.ant; + +import org.apache.tools.ant.BuildException; + +public class OverrideArg extends AbstractSpringArg { + private String name; + private Object value; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public void setValue(String value) { + if (getBean() != null) { + throw new BuildException( + "Cannot set both 'bean' and 'value' attributes."); + } + this.value = value; + } + + @Override + public void setBean(String bean) { + if (value != null) { + throw new BuildException( + "Cannot set both 'bean' and 'value' attributes."); + } + super.setBean(bean); + } + + public Object getObject() { + if (value != null) { + return value; + } else if (getBean() != null) { + return getBeanInstance(); + } else { + throw new BuildException("Value or bean not set."); + } + } + +} diff --git a/org.argeo.slc/src/test/ant/applicationContext.xml b/org.argeo.slc/src/test/ant/applicationContext.xml index eb745be88..b03c1e084 100644 --- a/org.argeo.slc/src/test/ant/applicationContext.xml +++ b/org.argeo.slc/src/test/ant/applicationContext.xml @@ -19,4 +19,26 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/org.argeo.slc/src/test/ant/build.xml b/org.argeo.slc/src/test/ant/build.xml index fdd1557d2..84208f577 100644 --- a/org.argeo.slc/src/test/ant/build.xml +++ b/org.argeo.slc/src/test/ant/build.xml @@ -1,15 +1,50 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/org.argeo.slc/src/test/java/org/argeo/slc/testslc/DummyTestDataObject.java b/org.argeo.slc/src/test/java/org/argeo/slc/testslc/DummyTestDataObject.java new file mode 100644 index 000000000..34b00d23d --- /dev/null +++ b/org.argeo.slc/src/test/java/org/argeo/slc/testslc/DummyTestDataObject.java @@ -0,0 +1,23 @@ +package org.argeo.slc.testslc; + +public class DummyTestDataObject { + private Object value; + + public Object getValue() { + return value; + } + + public void setValue(Object value) { + this.value = value; + } + + @Override + public boolean equals(Object obj) { + if (obj instanceof DummyTestDataObject) { + DummyTestDataObject dtdo = (DummyTestDataObject) obj; + return value.equals(dtdo.value); + } + return false; + } + +} -- 2.39.2