From: Mathieu Baudier Date: Wed, 4 Jun 2008 08:22:52 +0000 (+0000) Subject: Improve spring arguments X-Git-Tag: argeo-slc-2.1.7~2858 X-Git-Url: http://git.argeo.org/?a=commitdiff_plain;h=847af36ba908ea3285a16e17d809a2b29f207b0a;p=gpl%2Fargeo-slc.git Improve spring arguments git-svn-id: https://svn.argeo.org/slc/trunk@1183 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- diff --git a/org.argeo.slc.agent/src/main/java/org/argeo/slc/ant/AntRunner.java b/org.argeo.slc.agent/src/main/java/org/argeo/slc/ant/AntRunner.java index da88eafa1..09de703d8 100644 --- a/org.argeo.slc.agent/src/main/java/org/argeo/slc/ant/AntRunner.java +++ b/org.argeo.slc.agent/src/main/java/org/argeo/slc/ant/AntRunner.java @@ -3,15 +3,13 @@ package org.argeo.slc.ant; import java.io.File; import java.net.URL; import java.util.Arrays; -import java.util.Collections; import java.util.Map; import java.util.Properties; import java.util.Vector; -import org.springframework.context.ApplicationContext; - import org.apache.tools.ant.Project; import org.apache.tools.ant.ProjectHelper; +import org.springframework.context.ApplicationContext; public class AntRunner { private ApplicationContext context; diff --git a/org.argeo.slc.agent/src/main/java/org/argeo/slc/ant/SlcAntConfig.java b/org.argeo.slc.agent/src/main/java/org/argeo/slc/ant/SlcAntConfig.java index 9b2824886..a68f21026 100644 --- a/org.argeo.slc.agent/src/main/java/org/argeo/slc/ant/SlcAntConfig.java +++ b/org.argeo.slc.agent/src/main/java/org/argeo/slc/ant/SlcAntConfig.java @@ -7,11 +7,11 @@ import java.util.Map; import java.util.Properties; import java.util.StringTokenizer; -import org.springframework.util.Log4jConfigurer; - import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.tools.ant.Project; +import org.argeo.slc.core.test.WritableTestRun; +import org.springframework.util.Log4jConfigurer; /** *

diff --git a/org.argeo.slc.agent/src/main/java/org/argeo/slc/ant/SlcProjectHelper.java b/org.argeo.slc.agent/src/main/java/org/argeo/slc/ant/SlcProjectHelper.java index 001ead97b..51392cbdd 100644 --- a/org.argeo.slc.agent/src/main/java/org/argeo/slc/ant/SlcProjectHelper.java +++ b/org.argeo.slc.agent/src/main/java/org/argeo/slc/ant/SlcProjectHelper.java @@ -11,25 +11,19 @@ import java.util.Properties; import java.util.UUID; import java.util.Vector; -import org.springframework.beans.factory.ListableBeanFactory; -import org.springframework.context.ApplicationContext; -import org.springframework.context.support.AbstractApplicationContext; -import org.springframework.context.support.FileSystemXmlApplicationContext; - import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.apache.log4j.LogManager; import org.apache.tools.ant.BuildException; -import org.apache.tools.ant.BuildListener; import org.apache.tools.ant.Project; import org.apache.tools.ant.helper.ProjectHelper2; - import org.argeo.slc.core.process.SlcExecution; -import org.argeo.slc.core.process.SlcExecutionNotifier; import org.argeo.slc.core.structure.DefaultSRegistry; import org.argeo.slc.core.structure.SimpleSElement; import org.argeo.slc.core.structure.StructureRegistry; import org.argeo.slc.core.structure.tree.TreeSPath; +import org.springframework.beans.factory.ListableBeanFactory; +import org.springframework.context.support.AbstractApplicationContext; +import org.springframework.context.support.FileSystemXmlApplicationContext; /** * Custom implementation of an Ant ProjectHelper binding a Spring diff --git a/org.argeo.slc.agent/src/main/java/org/argeo/slc/ant/deploy/SlcDeployTask.java b/org.argeo.slc.agent/src/main/java/org/argeo/slc/ant/deploy/SlcDeployTask.java index 36c22547b..8e6fc63b1 100644 --- a/org.argeo.slc.agent/src/main/java/org/argeo/slc/ant/deploy/SlcDeployTask.java +++ b/org.argeo.slc.agent/src/main/java/org/argeo/slc/ant/deploy/SlcDeployTask.java @@ -3,12 +3,13 @@ package org.argeo.slc.ant.deploy; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.tools.ant.BuildException; - -import org.argeo.slc.ant.spring.AbstractSpringArg; +import org.argeo.slc.ant.SlcAntConfig; +import org.argeo.slc.ant.spring.SpringArg; import org.argeo.slc.ant.structure.SAwareTask; +import org.argeo.slc.core.build.Distribution; +import org.argeo.slc.core.deploy.Deployment; import org.argeo.slc.core.deploy.DeploymentData; import org.argeo.slc.core.deploy.TargetData; -import org.argeo.slc.core.deploy.WritableDeployment; /** Ant task wrapping a deployment. */ public class SlcDeployTask extends SAwareTask { @@ -16,22 +17,28 @@ public class SlcDeployTask extends SAwareTask { private String deploymentBean = null; - private DeploymentDataArg deploymentDataArg; - private TargetDataArg targetDataArg; + private SpringArg deploymentDataArg; + private SpringArg targetDataArg; + private SpringArg distributionArg; @Override public void executeActions(String mode) throws BuildException { - WritableDeployment deployment = (WritableDeployment) getContext() - .getBean(deploymentBean); + Deployment deployment = (Deployment) getContext().getBean( + deploymentBean); // set overridden references + if (distributionArg != null) { + deployment.setDistribution(distributionArg.getBeanInstance()); + log.trace("Overrides distribution"); + } + if (deploymentDataArg != null) { - deployment.setDeploymentData(deploymentDataArg.getDeploymentData()); + deployment.setDeploymentData(deploymentDataArg.getBeanInstance()); log.trace("Overrides deployment data"); } if (targetDataArg != null) { - deployment.setTargetData(targetDataArg.getTargetData()); + deployment.setTargetData(targetDataArg.getBeanInstance()); log.trace("Overrides target data"); } @@ -48,28 +55,19 @@ public class SlcDeployTask extends SAwareTask { } /** Creates deployment data sub tag. */ - public DeploymentDataArg createDeploymentData() { - deploymentDataArg = new DeploymentDataArg(); + public SpringArg createDeploymentData() { + deploymentDataArg = new SpringArg(); return deploymentDataArg; } /** Creates target data sub tag. */ - public TargetDataArg createTargetData() { - targetDataArg = new TargetDataArg(); + public SpringArg createTargetData() { + targetDataArg = new SpringArg(); return targetDataArg; } -} -class DeploymentDataArg extends AbstractSpringArg { - DeploymentData getDeploymentData() { - return (DeploymentData) getBeanInstance(); + public SpringArg createDistribution() { + distributionArg = new SpringArg(); + return distributionArg; } - -} - -class TargetDataArg extends AbstractSpringArg { - TargetData getTargetData() { - return (TargetData) getBeanInstance(); - } - } diff --git a/org.argeo.slc.agent/src/main/java/org/argeo/slc/ant/spring/AbstractSpringArg.java b/org.argeo.slc.agent/src/main/java/org/argeo/slc/ant/spring/AbstractSpringArg.java deleted file mode 100644 index 6096f1f63..000000000 --- a/org.argeo.slc.agent/src/main/java/org/argeo/slc/ant/spring/AbstractSpringArg.java +++ /dev/null @@ -1,87 +0,0 @@ -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.beans.factory.InitializingBean; -import org.springframework.context.ApplicationContext; - -import org.apache.commons.logging.LogFactory; -import org.apache.tools.ant.types.DataType; - -import org.argeo.slc.ant.SlcAntException; -import org.argeo.slc.ant.SlcProjectHelper; -import org.argeo.slc.core.SlcException; - -/** 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); - - setOverridenProperties(beanInstance); - - if (beanInstance instanceof InitializingBean) { - try { - ((InitializingBean) beanInstance).afterPropertiesSet(); - } catch (Exception e) { - throw new SlcException("Could not initialize bean", e); - } - } - } - return beanInstance; - } - - protected void setOverridenProperties(Object obj){ - BeanWrapper wrapper = new BeanWrapperImpl(obj); - for (OverrideArg override : overrides) { - if (override.getName() == null) { - throw new SlcAntException( - "The name of the property to override has to be set."); - } - -// LogFactory.getLog(getClass()).debug( -// "Prop " + override.getName()); - wrapper.setPropertyValue(override.getName(), override - .getObject()); - } - - } - - /** 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); - } - -} diff --git a/org.argeo.slc.agent/src/main/java/org/argeo/slc/ant/spring/OverrideArg.java b/org.argeo.slc.agent/src/main/java/org/argeo/slc/ant/spring/OverrideArg.java index 5c0dc3e69..3dd26c844 100644 --- a/org.argeo.slc.agent/src/main/java/org/argeo/slc/ant/spring/OverrideArg.java +++ b/org.argeo.slc.agent/src/main/java/org/argeo/slc/ant/spring/OverrideArg.java @@ -8,7 +8,7 @@ import org.apache.tools.ant.BuildException; import org.argeo.slc.core.SlcException; /** Ant type allowing to override bean properties. */ -public class OverrideArg extends AbstractSpringArg { +public class OverrideArg extends SpringArg { private String name; private Object value; private OverrideList overrideList; diff --git a/org.argeo.slc.agent/src/main/java/org/argeo/slc/ant/spring/SpringArg.java b/org.argeo.slc.agent/src/main/java/org/argeo/slc/ant/spring/SpringArg.java new file mode 100644 index 000000000..fb073014c --- /dev/null +++ b/org.argeo.slc.agent/src/main/java/org/argeo/slc/ant/spring/SpringArg.java @@ -0,0 +1,85 @@ +package org.argeo.slc.ant.spring; + +import java.util.List; +import java.util.Vector; + +import org.apache.tools.ant.types.DataType; +import org.argeo.slc.ant.SlcAntException; +import org.argeo.slc.ant.SlcProjectHelper; +import org.argeo.slc.core.SlcException; +import org.springframework.beans.BeanWrapper; +import org.springframework.beans.BeanWrapperImpl; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.context.ApplicationContext; + +/** Abstract Ant type wrapping a Spring bean. */ +public class SpringArg extends DataType { + private List overrides = new Vector(); + + private String bean; + + // cache bean instance to avoid reading it twice if it is a prototype + private T beanInstance = null; + + /** The name of the underlying bean, as set through 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 T getBeanInstance() { + if (beanInstance == null) { + beanInstance = (T)getContext().getBean(bean); + + setOverridenProperties(beanInstance); + + // FIXME: why are we doing this? Could not find any object using it + if (beanInstance instanceof InitializingBean) { + try { + ((InitializingBean) beanInstance).afterPropertiesSet(); + } catch (Exception e) { + throw new SlcException("Could not initialize bean", e); + } + } + } + return beanInstance; + } + + protected void setOverridenProperties(Object obj){ + BeanWrapper wrapper = new BeanWrapperImpl(obj); + for (OverrideArg override : overrides) { + if (override.getName() == null) { + throw new SlcAntException( + "The name of the property to override has to be set."); + } + +// LogFactory.getLog(getClass()).debug( +// "Prop " + override.getName()); + wrapper.setPropertyValue(override.getName(), override + .getObject()); + } + + } + + /** 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); + } + +} diff --git a/org.argeo.slc.agent/src/main/java/org/argeo/slc/ant/structure/SAwareTask.java b/org.argeo.slc.agent/src/main/java/org/argeo/slc/ant/structure/SAwareTask.java index d248a3870..84a199b75 100644 --- a/org.argeo.slc.agent/src/main/java/org/argeo/slc/ant/structure/SAwareTask.java +++ b/org.argeo.slc.agent/src/main/java/org/argeo/slc/ant/structure/SAwareTask.java @@ -8,7 +8,7 @@ import org.apache.tools.ant.Target; import org.argeo.slc.ant.SlcAntException; import org.argeo.slc.ant.SlcProjectHelper; -import org.argeo.slc.ant.spring.AbstractSpringArg; +import org.argeo.slc.ant.spring.SpringArg; import org.argeo.slc.ant.spring.AbstractSpringTask; import org.argeo.slc.core.structure.SimpleSElement; import org.argeo.slc.core.structure.StructureAware; @@ -20,7 +20,7 @@ import org.argeo.slc.core.structure.tree.TreeSPath; public abstract class SAwareTask extends AbstractSpringTask { private String path; private TreeSPath treeSPath; - private final List sAwareArgs = new Vector(); + private final List sAwareArgs = new Vector(); private StructureElementArg structureElementArg; @@ -44,7 +44,7 @@ public abstract class SAwareTask extends AbstractSpringTask { * Includes this arg in the checks for propagation of structure related * information. */ - protected void addSAwareArg(AbstractSpringArg arg) { + protected void addSAwareArg(SpringArg arg) { sAwareArgs.add(arg); } @@ -82,7 +82,7 @@ public abstract class SAwareTask extends AbstractSpringTask { } // notify registered args - for (AbstractSpringArg arg : sAwareArgs) { + for (SpringArg arg : sAwareArgs) { Object obj = arg.getBeanInstance(); if (obj instanceof StructureAware) { @@ -150,7 +150,7 @@ public abstract class SAwareTask extends AbstractSpringTask { } } -class StructureElementArg extends AbstractSpringArg { +class StructureElementArg extends SpringArg { public StructureElement getStructureElement() { return (StructureElement) getBeanInstance(); } diff --git a/org.argeo.slc.agent/src/main/java/org/argeo/slc/ant/test/SlcTestTask.java b/org.argeo.slc.agent/src/main/java/org/argeo/slc/ant/test/SlcTestTask.java index 6f2411c00..263242fb7 100644 --- a/org.argeo.slc.agent/src/main/java/org/argeo/slc/ant/test/SlcTestTask.java +++ b/org.argeo.slc.agent/src/main/java/org/argeo/slc/ant/test/SlcTestTask.java @@ -3,14 +3,11 @@ package org.argeo.slc.ant.test; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.tools.ant.BuildException; - import org.argeo.slc.ant.SlcAntConfig; -import org.argeo.slc.ant.spring.AbstractSpringArg; +import org.argeo.slc.ant.spring.SpringArg; import org.argeo.slc.ant.structure.SAwareTask; -import org.argeo.slc.core.SlcException; import org.argeo.slc.core.deploy.DeployedSystem; import org.argeo.slc.core.process.SlcExecution; -import org.argeo.slc.core.process.SlcExecutionAware; import org.argeo.slc.core.structure.StructureAware; import org.argeo.slc.core.structure.tree.TreeSPath; import org.argeo.slc.core.test.ExecutableTestRun; @@ -28,10 +25,10 @@ public class SlcTestTask extends SAwareTask { private String testRunBean = null; - private TestDefinitionArg testDefinitionArg; - private TestDataArg testDataArg; - private DeployedSystemArg deployedSystemArg; - private TestResultArg testResultArg; + private SpringArg testDefinitionArg; + private SpringArg testDataArg; + private SpringArg deployedSystemArg; + private SpringArg testResultArg; @Override public void executeActions(String mode) throws BuildException { @@ -64,22 +61,22 @@ public class SlcTestTask extends SAwareTask { // set overridden references if (testDataArg != null) { - testRun.setTestData(testDataArg.getTestData()); + testRun.setTestData(testDataArg.getBeanInstance()); log.trace("Overrides test data"); } if (testDefinitionArg != null) { - testRun.setTestDefinition(testDefinitionArg.getTestDefinition()); + testRun.setTestDefinition(testDefinitionArg.getBeanInstance()); log.trace("Overrides test definition"); } if (deployedSystemArg != null) { - testRun.setDeployedSystem(deployedSystemArg.getDeployedSystem()); + testRun.setDeployedSystem(deployedSystemArg.getBeanInstance()); log.trace("Overrides deployed system"); } if (testResultArg != null) { - testRun.setTestResult(testResultArg.getTestResult()); + testRun.setTestResult(testResultArg.getBeanInstance()); log.trace("Overrides test result"); } @@ -118,28 +115,28 @@ public class SlcTestTask extends SAwareTask { } /** Creates sub tag. */ - public TestDefinitionArg createTestDefinition() { - testDefinitionArg = new TestDefinitionArg(); + public SpringArg createTestDefinition() { + testDefinitionArg = new SpringArg(); // only test definitions can add to path addSAwareArg(testDefinitionArg); return testDefinitionArg; } /** Creates sub tag. */ - public TestDataArg createTestData() { - testDataArg = new TestDataArg(); + public SpringArg createTestData() { + testDataArg = new SpringArg(); return testDataArg; } /** Creates sub tag. */ - public DeployedSystemArg createDeployedSystem() { - deployedSystemArg = new DeployedSystemArg(); + public SpringArg createDeployedSystem() { + deployedSystemArg = new SpringArg(); return deployedSystemArg; } /** Creates sub tag. */ - public TestResultArg createTestResult() { - testResultArg = new TestResultArg(); + public SpringArg createTestResult() { + testResultArg = new SpringArg(); return testResultArg; } @@ -147,30 +144,3 @@ public class SlcTestTask extends SAwareTask { return SpringUtils.loadSingleFromContext(getContext(), clss); } } - -class TestDefinitionArg extends AbstractSpringArg { - TestDefinition getTestDefinition() { - return (TestDefinition) getBeanInstance(); - } -} - -class TestDataArg extends AbstractSpringArg { - TestData getTestData() { - return (TestData) getBeanInstance(); - } - -} - -class DeployedSystemArg extends AbstractSpringArg { - DeployedSystem getDeployedSystem() { - return (DeployedSystem) getBeanInstance(); - } - -} - -class TestResultArg extends AbstractSpringArg { - TestResult getTestResult() { - return (TestResult) getBeanInstance(); - } - -}