import java.io.File;\r
import java.net.URL;\r
import java.util.Arrays;\r
-import java.util.Collections;\r
import java.util.Map;\r
import java.util.Properties;\r
import java.util.Vector;\r
\r
-import org.springframework.context.ApplicationContext;\r
-\r
import org.apache.tools.ant.Project;\r
import org.apache.tools.ant.ProjectHelper;\r
+import org.springframework.context.ApplicationContext;\r
\r
public class AntRunner {\r
private ApplicationContext context;\r
import java.util.Properties;\r
import java.util.StringTokenizer;\r
\r
-import org.springframework.util.Log4jConfigurer;\r
-\r
import org.apache.commons.logging.Log;\r
import org.apache.commons.logging.LogFactory;\r
import org.apache.tools.ant.Project;\r
+import org.argeo.slc.core.test.WritableTestRun;\r
+import org.springframework.util.Log4jConfigurer;\r
\r
/**\r
* <p>\r
import java.util.UUID;\r
import java.util.Vector;\r
\r
-import org.springframework.beans.factory.ListableBeanFactory;\r
-import org.springframework.context.ApplicationContext;\r
-import org.springframework.context.support.AbstractApplicationContext;\r
-import org.springframework.context.support.FileSystemXmlApplicationContext;\r
-\r
import org.apache.commons.logging.Log;\r
import org.apache.commons.logging.LogFactory;\r
-import org.apache.log4j.LogManager;\r
import org.apache.tools.ant.BuildException;\r
-import org.apache.tools.ant.BuildListener;\r
import org.apache.tools.ant.Project;\r
import org.apache.tools.ant.helper.ProjectHelper2;\r
-\r
import org.argeo.slc.core.process.SlcExecution;\r
-import org.argeo.slc.core.process.SlcExecutionNotifier;\r
import org.argeo.slc.core.structure.DefaultSRegistry;\r
import org.argeo.slc.core.structure.SimpleSElement;\r
import org.argeo.slc.core.structure.StructureRegistry;\r
import org.argeo.slc.core.structure.tree.TreeSPath;\r
+import org.springframework.beans.factory.ListableBeanFactory;\r
+import org.springframework.context.support.AbstractApplicationContext;\r
+import org.springframework.context.support.FileSystemXmlApplicationContext;\r
\r
/**\r
* Custom implementation of an Ant <code>ProjectHelper</code> binding a Spring\r
import org.apache.commons.logging.Log;\r
import org.apache.commons.logging.LogFactory;\r
import org.apache.tools.ant.BuildException;\r
-\r
-import org.argeo.slc.ant.spring.AbstractSpringArg;\r
+import org.argeo.slc.ant.SlcAntConfig;\r
+import org.argeo.slc.ant.spring.SpringArg;\r
import org.argeo.slc.ant.structure.SAwareTask;\r
+import org.argeo.slc.core.build.Distribution;\r
+import org.argeo.slc.core.deploy.Deployment;\r
import org.argeo.slc.core.deploy.DeploymentData;\r
import org.argeo.slc.core.deploy.TargetData;\r
-import org.argeo.slc.core.deploy.WritableDeployment;\r
\r
/** Ant task wrapping a deployment. */\r
public class SlcDeployTask extends SAwareTask {\r
\r
private String deploymentBean = null;\r
\r
- private DeploymentDataArg deploymentDataArg;\r
- private TargetDataArg targetDataArg;\r
+ private SpringArg<DeploymentData> deploymentDataArg;\r
+ private SpringArg<TargetData> targetDataArg;\r
+ private SpringArg<Distribution> distributionArg;\r
\r
@Override\r
public void executeActions(String mode) throws BuildException {\r
- WritableDeployment deployment = (WritableDeployment) getContext()\r
- .getBean(deploymentBean);\r
+ Deployment deployment = (Deployment) getContext().getBean(\r
+ deploymentBean);\r
\r
// set overridden references\r
+ if (distributionArg != null) {\r
+ deployment.setDistribution(distributionArg.getBeanInstance());\r
+ log.trace("Overrides distribution");\r
+ }\r
+\r
if (deploymentDataArg != null) {\r
- deployment.setDeploymentData(deploymentDataArg.getDeploymentData());\r
+ deployment.setDeploymentData(deploymentDataArg.getBeanInstance());\r
log.trace("Overrides deployment data");\r
}\r
\r
if (targetDataArg != null) {\r
- deployment.setTargetData(targetDataArg.getTargetData());\r
+ deployment.setTargetData(targetDataArg.getBeanInstance());\r
log.trace("Overrides target data");\r
}\r
\r
}\r
\r
/** Creates deployment data sub tag. */\r
- public DeploymentDataArg createDeploymentData() {\r
- deploymentDataArg = new DeploymentDataArg();\r
+ public SpringArg<DeploymentData> createDeploymentData() {\r
+ deploymentDataArg = new SpringArg<DeploymentData>();\r
return deploymentDataArg;\r
}\r
\r
/** Creates target data sub tag. */\r
- public TargetDataArg createTargetData() {\r
- targetDataArg = new TargetDataArg();\r
+ public SpringArg<TargetData> createTargetData() {\r
+ targetDataArg = new SpringArg<TargetData>();\r
return targetDataArg;\r
}\r
-}\r
\r
-class DeploymentDataArg extends AbstractSpringArg {\r
- DeploymentData getDeploymentData() {\r
- return (DeploymentData) getBeanInstance();\r
+ public SpringArg<Distribution> createDistribution() {\r
+ distributionArg = new SpringArg<Distribution>();\r
+ return distributionArg;\r
}\r
-\r
-}\r
-\r
-class TargetDataArg extends AbstractSpringArg {\r
- TargetData getTargetData() {\r
- return (TargetData) getBeanInstance();\r
- }\r
-\r
}\r
+++ /dev/null
-package org.argeo.slc.ant.spring;\r
-\r
-import java.util.List;\r
-import java.util.Vector;\r
-\r
-import org.springframework.beans.BeanWrapper;\r
-import org.springframework.beans.BeanWrapperImpl;\r
-import org.springframework.beans.factory.InitializingBean;\r
-import org.springframework.context.ApplicationContext;\r
-\r
-import org.apache.commons.logging.LogFactory;\r
-import org.apache.tools.ant.types.DataType;\r
-\r
-import org.argeo.slc.ant.SlcAntException;\r
-import org.argeo.slc.ant.SlcProjectHelper;\r
-import org.argeo.slc.core.SlcException;\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
- /**\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
- setOverridenProperties(beanInstance);\r
-\r
- if (beanInstance instanceof InitializingBean) {\r
- try {\r
- ((InitializingBean) beanInstance).afterPropertiesSet();\r
- } catch (Exception e) {\r
- throw new SlcException("Could not initialize bean", e);\r
- }\r
- }\r
- }\r
- return beanInstance;\r
- }\r
- \r
- protected void setOverridenProperties(Object obj){\r
- BeanWrapper wrapper = new BeanWrapperImpl(obj);\r
- for (OverrideArg override : overrides) {\r
- if (override.getName() == null) {\r
- throw new SlcAntException(\r
- "The name of the property to override has to be set.");\r
- }\r
-\r
-// LogFactory.getLog(getClass()).debug(\r
-// "Prop " + override.getName());\r
- wrapper.setPropertyValue(override.getName(), override\r
- .getObject());\r
- }\r
- \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
- }\r
-\r
-}\r
import org.argeo.slc.core.SlcException;\r
\r
/** Ant type allowing to override bean properties. */\r
-public class OverrideArg extends AbstractSpringArg {\r
+public class OverrideArg extends SpringArg<Object> {\r
private String name;\r
private Object value;\r
private OverrideList overrideList;\r
--- /dev/null
+package org.argeo.slc.ant.spring;\r
+\r
+import java.util.List;\r
+import java.util.Vector;\r
+\r
+import org.apache.tools.ant.types.DataType;\r
+import org.argeo.slc.ant.SlcAntException;\r
+import org.argeo.slc.ant.SlcProjectHelper;\r
+import org.argeo.slc.core.SlcException;\r
+import org.springframework.beans.BeanWrapper;\r
+import org.springframework.beans.BeanWrapperImpl;\r
+import org.springframework.beans.factory.InitializingBean;\r
+import org.springframework.context.ApplicationContext;\r
+\r
+/** Abstract Ant type wrapping a Spring bean. */\r
+public class SpringArg<T> 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 T beanInstance = null;\r
+\r
+ /** The <u>name</u> of the underlying bean, as set through 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
+ /**\r
+ * Retrieve the instance of the bean, and sets the overriden properties.\r
+ * <b>The value is cached.</b>\r
+ */\r
+ public T getBeanInstance() {\r
+ if (beanInstance == null) {\r
+ beanInstance = (T)getContext().getBean(bean);\r
+ \r
+ setOverridenProperties(beanInstance);\r
+\r
+ // FIXME: why are we doing this? Could not find any object using it\r
+ if (beanInstance instanceof InitializingBean) {\r
+ try {\r
+ ((InitializingBean) beanInstance).afterPropertiesSet();\r
+ } catch (Exception e) {\r
+ throw new SlcException("Could not initialize bean", e);\r
+ }\r
+ }\r
+ }\r
+ return beanInstance;\r
+ }\r
+ \r
+ protected void setOverridenProperties(Object obj){\r
+ BeanWrapper wrapper = new BeanWrapperImpl(obj);\r
+ for (OverrideArg override : overrides) {\r
+ if (override.getName() == null) {\r
+ throw new SlcAntException(\r
+ "The name of the property to override has to be set.");\r
+ }\r
+\r
+// LogFactory.getLog(getClass()).debug(\r
+// "Prop " + override.getName());\r
+ wrapper.setPropertyValue(override.getName(), override\r
+ .getObject());\r
+ }\r
+ \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
+ }\r
+\r
+}\r
\r
import org.argeo.slc.ant.SlcAntException;\r
import org.argeo.slc.ant.SlcProjectHelper;\r
-import org.argeo.slc.ant.spring.AbstractSpringArg;\r
+import org.argeo.slc.ant.spring.SpringArg;\r
import org.argeo.slc.ant.spring.AbstractSpringTask;\r
import org.argeo.slc.core.structure.SimpleSElement;\r
import org.argeo.slc.core.structure.StructureAware;\r
public abstract class SAwareTask extends AbstractSpringTask {\r
private String path;\r
private TreeSPath treeSPath;\r
- private final List<AbstractSpringArg> sAwareArgs = new Vector<AbstractSpringArg>();\r
+ private final List<SpringArg> sAwareArgs = new Vector<SpringArg>();\r
\r
private StructureElementArg structureElementArg;\r
\r
* Includes this arg in the checks for propagation of structure related\r
* information.\r
*/\r
- protected void addSAwareArg(AbstractSpringArg arg) {\r
+ protected void addSAwareArg(SpringArg arg) {\r
sAwareArgs.add(arg);\r
}\r
\r
}\r
\r
// notify registered args\r
- for (AbstractSpringArg arg : sAwareArgs) {\r
+ for (SpringArg arg : sAwareArgs) {\r
Object obj = arg.getBeanInstance();\r
\r
if (obj instanceof StructureAware) {\r
}\r
}\r
\r
-class StructureElementArg extends AbstractSpringArg {\r
+class StructureElementArg extends SpringArg {\r
public StructureElement getStructureElement() {\r
return (StructureElement) getBeanInstance();\r
}\r
import org.apache.commons.logging.Log;\r
import org.apache.commons.logging.LogFactory;\r
import org.apache.tools.ant.BuildException;\r
-\r
import org.argeo.slc.ant.SlcAntConfig;\r
-import org.argeo.slc.ant.spring.AbstractSpringArg;\r
+import org.argeo.slc.ant.spring.SpringArg;\r
import org.argeo.slc.ant.structure.SAwareTask;\r
-import org.argeo.slc.core.SlcException;\r
import org.argeo.slc.core.deploy.DeployedSystem;\r
import org.argeo.slc.core.process.SlcExecution;\r
-import org.argeo.slc.core.process.SlcExecutionAware;\r
import org.argeo.slc.core.structure.StructureAware;\r
import org.argeo.slc.core.structure.tree.TreeSPath;\r
import org.argeo.slc.core.test.ExecutableTestRun;\r
\r
private String testRunBean = null;\r
\r
- private TestDefinitionArg testDefinitionArg;\r
- private TestDataArg testDataArg;\r
- private DeployedSystemArg deployedSystemArg;\r
- private TestResultArg testResultArg;\r
+ private SpringArg<TestDefinition> testDefinitionArg;\r
+ private SpringArg<TestData> testDataArg;\r
+ private SpringArg<DeployedSystem> deployedSystemArg;\r
+ private SpringArg<TestResult> testResultArg;\r
\r
@Override\r
public void executeActions(String mode) throws BuildException {\r
\r
// set overridden references\r
if (testDataArg != null) {\r
- testRun.setTestData(testDataArg.getTestData());\r
+ testRun.setTestData(testDataArg.getBeanInstance());\r
log.trace("Overrides test data");\r
}\r
\r
if (testDefinitionArg != null) {\r
- testRun.setTestDefinition(testDefinitionArg.getTestDefinition());\r
+ testRun.setTestDefinition(testDefinitionArg.getBeanInstance());\r
log.trace("Overrides test definition");\r
}\r
\r
if (deployedSystemArg != null) {\r
- testRun.setDeployedSystem(deployedSystemArg.getDeployedSystem());\r
+ testRun.setDeployedSystem(deployedSystemArg.getBeanInstance());\r
log.trace("Overrides deployed system");\r
}\r
\r
if (testResultArg != null) {\r
- testRun.setTestResult(testResultArg.getTestResult());\r
+ testRun.setTestResult(testResultArg.getBeanInstance());\r
log.trace("Overrides test result");\r
}\r
\r
}\r
\r
/** Creates sub tag. */\r
- public TestDefinitionArg createTestDefinition() {\r
- testDefinitionArg = new TestDefinitionArg();\r
+ public SpringArg<TestDefinition> createTestDefinition() {\r
+ testDefinitionArg = new SpringArg<TestDefinition>();\r
// only test definitions can add to path\r
addSAwareArg(testDefinitionArg);\r
return testDefinitionArg;\r
}\r
\r
/** Creates sub tag. */\r
- public TestDataArg createTestData() {\r
- testDataArg = new TestDataArg();\r
+ public SpringArg<TestData> createTestData() {\r
+ testDataArg = new SpringArg<TestData>();\r
return testDataArg;\r
}\r
\r
/** Creates sub tag. */\r
- public DeployedSystemArg createDeployedSystem() {\r
- deployedSystemArg = new DeployedSystemArg();\r
+ public SpringArg<DeployedSystem> createDeployedSystem() {\r
+ deployedSystemArg = new SpringArg<DeployedSystem>();\r
return deployedSystemArg;\r
}\r
\r
/** Creates sub tag. */\r
- public TestResultArg createTestResult() {\r
- testResultArg = new TestResultArg();\r
+ public SpringArg<TestResult> createTestResult() {\r
+ testResultArg = new SpringArg<TestResult>();\r
return testResultArg;\r
}\r
\r
return SpringUtils.loadSingleFromContext(getContext(), clss);\r
}\r
}\r
-\r
-class TestDefinitionArg extends AbstractSpringArg {\r
- TestDefinition getTestDefinition() {\r
- return (TestDefinition) getBeanInstance();\r
- }\r
-}\r
-\r
-class TestDataArg extends AbstractSpringArg {\r
- TestData getTestData() {\r
- return (TestData) getBeanInstance();\r
- }\r
-\r
-}\r
-\r
-class DeployedSystemArg extends AbstractSpringArg {\r
- DeployedSystem getDeployedSystem() {\r
- return (DeployedSystem) getBeanInstance();\r
- }\r
-\r
-}\r
-\r
-class TestResultArg extends AbstractSpringArg {\r
- TestResult getTestResult() {\r
- return (TestResult) getBeanInstance();\r
- }\r
-\r
-}\r