helper.parse(p, antFile);\r
\r
StructureRegistry registry = (StructureRegistry) p\r
- .getReference(SlcProjectHelper.REF_STRUCTURE_REGISTRY);\r
+ .getReference(SlcAntConstants.REF_STRUCTURE_REGISTRY);\r
registry.setMode(StructureRegistry.READ);\r
\r
p.executeTarget(p.getDefaultTarget());\r
helper.parse(p, antFile);\r
\r
StructureRegistry registry = (StructureRegistry) p\r
- .getReference(SlcProjectHelper.REF_STRUCTURE_REGISTRY);\r
+ .getReference(SlcAntConstants.REF_STRUCTURE_REGISTRY);\r
registry.setMode(StructureRegistry.ACTIVE);\r
registry.setActivePaths(activePaths);\r
\r
--- /dev/null
+package org.argeo.slc.ant;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.StringTokenizer;
+import java.util.Vector;
+
+import org.apache.tools.ant.Project;
+import org.argeo.slc.core.process.SlcExecution;
+import org.argeo.slc.runtime.SlcRuntime;
+import org.springframework.core.io.Resource;
+
+public class AntSlcApplication {
+ private SlcRuntime slcRuntime;
+
+ private Resource contextLocation;
+
+ public void execute(SlcExecution slcExecution, Properties properties,
+ Map<String, Object> references) {
+
+ // Ant coordinates
+ String script = slcExecution.getAttributes().get(SlcAntConstants.EXECATTR_ANT_FILE);
+ String targetList = slcExecution.getAttributes().get(SlcAntConstants.EXECATTR_ANT_TARGETS);
+ List<String> targets = new Vector<String>();
+ StringTokenizer stTargets = new StringTokenizer(targetList,",");
+ while(stTargets.hasMoreTokens()){
+ targets.add(stTargets.nextToken());
+ }
+
+ Project project = new Project();
+
+ }
+}
// FIXME\r
registry.register(projectPath, new SimpleSElement("ROOT"));\r
\r
- project.addReference(SlcProjectHelper.REF_STRUCTURE_REGISTRY, registry);\r
- project.addReference(SlcProjectHelper.REF_PROJECT_PATH, projectPath);\r
+ project.addReference(SlcAntConstants.REF_STRUCTURE_REGISTRY, registry);\r
+ project.addReference(SlcAntConstants.REF_PROJECT_PATH, projectPath);\r
\r
super.parse(project, source);\r
\r
- project.addReference(SlcProjectHelper.REF_ROOT_CONTEXT, context);\r
+ project.addReference(SlcAntConstants.REF_ROOT_CONTEXT, context);\r
SlcProjectHelper.createAndRegisterSlcExecution(project);\r
\r
SlcProjectHelper.addCustomTaskAndTypes(project);\r
--- /dev/null
+package org.argeo.slc.ant;
+
+public interface SlcAntConstants {
+
+ /** The Ant reference to the Spring application context used. */
+ public static final String REF_ROOT_CONTEXT = "slcApplicationContext";
+ /** The Ant reference to the SLC structure registry used. */
+ public static final String REF_STRUCTURE_REGISTRY = "slcStructureRegistry";
+ /** The Ant reference to the <code>TreePath</code> of the current project */
+ public static final String REF_PROJECT_PATH = "slcProjectPath";
+ /**
+ * Resource path to the property file listing the SLC specific Ant tasks:
+ * /org/argeo/slc/ant/taskdefs.properties
+ */
+ public static final String SLC_TASKDEFS_RESOURCE_PATH = "/org/argeo/slc/ant/taskdefs.properties";
+ /**
+ * Resource path to the property file listing the SLC specific Ant types:
+ * /org/argeo/slc/ant/typedefs.properties
+ */
+ public static final String SLC_TYPEDEFS_RESOURCE_PATH = "/org/argeo/slc/ant/typedefs.properties";
+ public static final String EXECTYPE_ANT = "org.apache.tools.ant";
+ public static final String EXECTYPE_SLC_ANT = "org.argeo.slc.ant";
+ public static final String REF_SLC_EXECUTION = "slcExecution";
+
+ public final static String EXECATTR_ANT_FILE = "ant.file";
+ public final static String EXECATTR_ANT_TARGETS = "ant.targets";
+
+}
\r
public class SlcExecutionBuildListener extends AppenderSkeleton implements\r
ProjectRelatedBuildListener {\r
- public static final String ANT_TYPE = "org.apache.tools.ant";\r
- public static final String SLC_ANT_TYPE = "org.argeo.slc.ant";\r
-\r
- public static final String REF_SLC_EXECUTION = "slcExecution";\r
-\r
private Project project;\r
\r
// to avoid stack overflow when logging for log4j\r
}\r
\r
SlcExecution slcExecution = (SlcExecution) project\r
- .getReference(REF_SLC_EXECUTION);\r
+ .getReference(SlcAntConstants.REF_SLC_EXECUTION);\r
if (slcExecution == null)\r
throw new SlcAntException("No SLC Execution registered.");\r
\r
+ " not consistent with listener project " + project);\r
\r
SlcExecution slcExecution = (SlcExecution) project\r
- .getReference(REF_SLC_EXECUTION);\r
+ .getReference(SlcAntConstants.REF_SLC_EXECUTION);\r
\r
if (slcExecution == null)\r
throw new SlcAntException("No SLC Execution registered.");\r
\r
try {\r
SlcExecution slcExecution = (SlcExecution) project\r
- .getReference(REF_SLC_EXECUTION);\r
+ .getReference(SlcAntConstants.REF_SLC_EXECUTION);\r
if (slcExecution != null) {\r
if (currentStepNotified) {\r
slcExecution.getSteps().add(\r
public class SlcProjectHelper extends ProjectHelper2 {\r
private static Log log;\r
\r
- /** The Ant reference to the Spring application context used. */\r
- public static String REF_ROOT_CONTEXT = "slcApplicationContext";\r
- /** The Ant reference to the SLC structure registry used. */\r
- public static String REF_STRUCTURE_REGISTRY = "slcStructureRegistry";\r
- /** The Ant reference to the <code>TreePath</code> of the current project */\r
- public static String REF_PROJECT_PATH = "slcProjectPath";\r
- /**\r
- * Resource path to the property file listing the SLC specific Ant tasks:\r
- * /org/argeo/slc/ant/taskdefs.properties\r
- */\r
- private static String SLC_TASKDEFS_RESOURCE_PATH = "/org/argeo/slc/ant/taskdefs.properties";\r
- private static String SLC_TYPEDEFS_RESOURCE_PATH = "/org/argeo/slc/ant/typedefs.properties";\r
-\r
protected SlcAntConfig slcAntConfig = null;\r
\r
@Override\r
\r
// Init structure registry\r
DefaultSRegistry registry = new DefaultSRegistry();\r
- project.addReference(REF_STRUCTURE_REGISTRY, registry);\r
+ project.addReference(SlcAntConstants.REF_STRUCTURE_REGISTRY, registry);\r
}\r
\r
/**\r
private void registerProjectAndParents(Project project,\r
SlcAntConfig slcAntConfig) {\r
StructureRegistry<TreeSPath> registry = (StructureRegistry<TreeSPath>) project\r
- .getReference(REF_STRUCTURE_REGISTRY);\r
+ .getReference(SlcAntConstants.REF_STRUCTURE_REGISTRY);\r
File rootDir = new File(project\r
.getUserProperty(SlcAntConfig.ROOT_DIR_PROPERTY))\r
.getAbsoluteFile();\r
}\r
registry.register(currPath, element);\r
}\r
- project.addReference(REF_PROJECT_PATH, currPath);\r
+ project.addReference(SlcAntConstants.REF_PROJECT_PATH, currPath);\r
}\r
\r
/** Gets the path of a project (root). */\r
AbstractApplicationContext context = new FileSystemXmlApplicationContext(\r
'/' + acPath);\r
context.registerShutdownHook();\r
- project.addReference(REF_ROOT_CONTEXT, context);\r
+ project.addReference(SlcAntConstants.REF_ROOT_CONTEXT, context);\r
\r
createAndRegisterSlcExecution(project);\r
// Add build listeners declared in Spring context\r
\r
/** Loads the SLC specific Ant tasks. */\r
protected static void addCustomTaskAndTypes(Project project) {\r
- Properties taskdefs = getDefs(project, SLC_TASKDEFS_RESOURCE_PATH);\r
+ Properties taskdefs = getDefs(project, SlcAntConstants.SLC_TASKDEFS_RESOURCE_PATH);\r
for (Object o : taskdefs.keySet()) {\r
String name = o.toString();\r
try {\r
log.error("Unknown class for task " + name, e);\r
}\r
}\r
- Properties typedefs = getDefs(project, SLC_TYPEDEFS_RESOURCE_PATH);\r
+ Properties typedefs = getDefs(project, SlcAntConstants.SLC_TYPEDEFS_RESOURCE_PATH);\r
for (Object o : typedefs.keySet()) {\r
String name = o.toString();\r
try {\r
slcExecution.setHost(SlcExecution.UNKOWN_HOST);\r
}\r
\r
- if (project.getReference(SlcProjectHelper.REF_ROOT_CONTEXT) != null) {\r
- slcExecution.setType(SlcExecutionBuildListener.SLC_ANT_TYPE);\r
+ if (project.getReference(SlcAntConstants.REF_ROOT_CONTEXT) != null) {\r
+ slcExecution.setType(SlcAntConstants.EXECTYPE_SLC_ANT);\r
} else {\r
- slcExecution.setType(SlcExecutionBuildListener.ANT_TYPE);\r
+ slcExecution.setType(SlcAntConstants.EXECTYPE_ANT);\r
}\r
\r
slcExecution.setUser(System.getProperty("user.name"));\r
slcExecution.getAttributes().put("ant.file",\r
project.getProperty("ant.file"));\r
\r
- project.addReference(SlcExecutionBuildListener.REF_SLC_EXECUTION,\r
+ project.addReference(SlcAntConstants.REF_SLC_EXECUTION,\r
slcExecution);\r
\r
// Add build listeners declared in Spring context\r
Map<String, ProjectRelatedBuildListener> listeners = ((ListableBeanFactory) project\r
- .getReference(REF_ROOT_CONTEXT)).getBeansOfType(\r
+ .getReference(SlcAntConstants.REF_ROOT_CONTEXT)).getBeansOfType(\r
ProjectRelatedBuildListener.class, false, true);\r
for (ProjectRelatedBuildListener listener : listeners.values()) {\r
listener.init(project);\r
\r
import org.apache.tools.ant.Task;\r
\r
-import org.argeo.slc.ant.SlcExecutionBuildListener;\r
-import org.argeo.slc.ant.SlcProjectHelper;\r
+import org.argeo.slc.ant.SlcAntConstants;\r
import org.argeo.slc.core.process.SlcExecution;\r
\r
/** Abstract Ant task providing access to a Spring context. */\r
/** Gets the related Spring context. */\r
protected ApplicationContext getContext() {\r
return (ApplicationContext) getProject().getReference(\r
- SlcProjectHelper.REF_ROOT_CONTEXT);\r
+ SlcAntConstants.REF_ROOT_CONTEXT);\r
}\r
\r
/** Gets the related slc execution or null if not is registered. */\r
protected SlcExecution getSlcExecution() {\r
return (SlcExecution) getProject().getReference(\r
- SlcExecutionBuildListener.REF_SLC_EXECUTION);\r
+ SlcAntConstants.REF_SLC_EXECUTION);\r
}\r
}\r
private Object value;\r
private OverrideList overrideList;\r
private MapArg overrideMap;\r
- private String antref;\r
\r
/** The name of the property to override. */\r
public String getName() {\r
this.name = name;\r
}\r
\r
- /** Sets a reference to an ant data type. */\r
- public void setAntref(String antref) {\r
- checkValueAlreadySet();\r
- this.antref = antref;\r
- }\r
-\r
/** Both value and bean cannot be set. */\r
public void setValue(String value) {\r
checkValueAlreadySet();\r
public Object getObject() {\r
if (value != null) {\r
return value;\r
- } else if (getBean() != null) {\r
+ } else if (getBean() != null || getAntref() != null) {\r
return getBeanInstance();\r
} else if (overrideList != null) {\r
return overrideList.getAsObjectList();\r
} else if (overrideMap != null) {\r
return overrideMap.getMap();\r
- } else if (antref != null) {\r
- Object obj = getProject().getReference(antref);\r
- if (obj == null) {\r
- throw new SlcException("No object found for reference "\r
- + antref);\r
- }\r
- setOverridenProperties(obj);\r
- return obj;\r
} else {\r
throw new BuildException("Value or bean not set.");\r
}\r
}\r
\r
- private void checkValueAlreadySet() {\r
- if (value != null || overrideList != null || antref != null\r
- || getBean() != null || overrideMap != null) {\r
+ protected void checkValueAlreadySet() {\r
+ super.checkValueAlreadySet();\r
+ if (value != null || overrideList != null || overrideMap != null) {\r
throw new BuildException("Value already set.");\r
}\r
}\r
import java.util.List;\r
import java.util.Vector;\r
\r
+import org.apache.tools.ant.BuildException;\r
import org.apache.tools.ant.types.DataType;\r
+import org.argeo.slc.ant.SlcAntConstants;\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
private List<OverrideArg> overrides = new Vector<OverrideArg>();\r
\r
private String bean;\r
+ private String antref;\r
\r
// cache bean instance to avoid reading it twice if it is a prototype\r
private T beanInstance = null;\r
\r
/** Setter for the bean name. */\r
public void setBean(String bean) {\r
+ checkValueAlreadySet();\r
this.bean = bean;\r
}\r
\r
+ public String getAntref() {\r
+ return antref;\r
+ }\r
+\r
+ /** Sets a reference to an ant data type. */\r
+ public void setAntref(String antref) {\r
+ checkValueAlreadySet();\r
+ this.antref = antref;\r
+ }\r
+\r
/**\r
- * Retrieve the instance of the bean, and sets the overriden properties.\r
+ * Retrieve the instance of the bean, and sets the overridden properties.\r
* <b>The value is cached.</b>\r
*/\r
public T getBeanInstance() {\r
if (beanInstance == null) {\r
- beanInstance = (T) getContext().getBean(bean);\r
+ if (bean != null) {\r
+ beanInstance = (T) getContext().getBean(bean);\r
+ if (beanInstance == null)\r
+ throw new SlcAntException(\r
+ "No object found for Spring bean " + bean);\r
+ } else if (antref != null) {\r
+ beanInstance = (T) getProject().getReference(antref);\r
+ if (beanInstance == null)\r
+ throw new SlcAntException(\r
+ "No object found for Ant reference " + antref);\r
+ } else {\r
+ throw new SlcAntException(\r
+ "Don't know how to retrieve bean instance");\r
+ }\r
\r
setOverridenProperties(beanInstance);\r
\r
/** The related Spring application context. */\r
protected ApplicationContext getContext() {\r
return (ApplicationContext) getProject().getReference(\r
- SlcProjectHelper.REF_ROOT_CONTEXT);\r
+ SlcAntConstants.REF_ROOT_CONTEXT);\r
+ }\r
+\r
+ protected void checkValueAlreadySet() {\r
+ if (antref != null || bean != null) {\r
+ throw new BuildException("Value already set.");\r
+ }\r
}\r
\r
}\r
--- /dev/null
+package org.argeo.slc.ant.spring;
+
+import java.util.List;
+import java.util.Vector;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.tools.ant.BuildException;
+
+public class SpringRegister extends AbstractSpringTask {
+ private static final Log log = LogFactory.getLog(SpringRegister.class);
+
+ private List<BeanArg> beans = new Vector<BeanArg>();
+
+ @Override
+ public void execute() throws BuildException {
+ for (BeanArg bean : beans) {
+ Object instance = bean.getBeanInstance();
+ if (bean.getAntid() != null) {
+ getProject().addReference(bean.getAntid(), instance);
+ } else {
+ if (bean.getAntref() != null) {
+ log
+ .warn("Cannot register beans with antref (Ant reference "
+ + bean.getAntref() + ")");
+ } else {
+ getProject().addReference(bean.getBean(), instance);
+ }
+ }
+ }
+ }
+
+ public BeanArg createObject() {
+ BeanArg bean = new BeanArg();
+ beans.add(bean);
+ return bean;
+ }
+
+ protected static class BeanArg extends SpringArg<Object> {
+ private String antid;
+
+ public String getAntid() {
+ return antid;
+ }
+
+ public void setAntid(String antid) {
+ this.antid = antid;
+ }
+
+ }
+}
import org.apache.tools.ant.BuildException;\r
import org.apache.tools.ant.Target;\r
\r
+import org.argeo.slc.ant.SlcAntConstants;\r
import org.argeo.slc.ant.SlcAntException;\r
-import org.argeo.slc.ant.SlcProjectHelper;\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
/** Gets the underlying structure registry. */\r
protected StructureRegistry<TreeSPath> getRegistry() {\r
return (StructureRegistry<TreeSPath>) getProject().getReference(\r
- SlcProjectHelper.REF_STRUCTURE_REGISTRY);\r
+ SlcAntConstants.REF_STRUCTURE_REGISTRY);\r
}\r
\r
/** Creates the treeSPath for a given Ant target. */\r
protected static TreeSPath createTargetPath(Target target) {\r
TreeSPath projectPath = (TreeSPath) target.getProject().getReference(\r
- SlcProjectHelper.REF_PROJECT_PATH);\r
+ SlcAntConstants.REF_PROJECT_PATH);\r
return projectPath.createChild(target.getName());\r
}\r
\r
package org.argeo.slc.ant.test;\r
\r
+import java.util.List;\r
+import java.util.Vector;\r
+\r
+import org.apache.commons.logging.Log;\r
+import org.apache.commons.logging.LogFactory;\r
+import org.argeo.slc.ant.spring.SpringArg;\r
import org.argeo.slc.ant.structure.SAwareTask;\r
import org.argeo.slc.core.structure.StructureRegistry;\r
import org.argeo.slc.core.test.TestResult;\r
\r
/** Ant tasks closing a given result. */\r
public class SlcCloseTestResultTask extends SAwareTask {\r
- private String result;\r
+ private final static Log log = LogFactory\r
+ .getLog(SlcCloseTestResultTask.class);\r
+\r
+ public List<SpringArg<TestResult>> results = new Vector<SpringArg<TestResult>>();\r
\r
@Override\r
public void executeActions(String mode) {\r
if (!mode.equals(StructureRegistry.READ)) {\r
- TestResult testResult = (TestResult) getContext().getBean(result);\r
- testResult.close();\r
+ for (SpringArg<TestResult> result : results) {\r
+ try {\r
+ result.getBeanInstance().close();\r
+ } catch (RuntimeException e) {\r
+ log.error("Could not close result "\r
+ + (result.getBean() != null ? result.getBean()\r
+ : result.getAntref()), e);\r
+ }\r
+ }\r
}\r
}\r
\r
- /** Sets the bean name of the result to close. */\r
- public void setResult(String bean) {\r
- this.result = bean;\r
+ public SpringArg<TestResult> createResult() {\r
+ SpringArg<TestResult> result = new SpringArg<TestResult>();\r
+ results.add(result);\r
+ return result;\r
}\r
-\r
}\r
slc.manager=org.argeo.slc.ant.deploy.SlcManagerTask\r
slc.closeResult=org.argeo.slc.ant.test.SlcCloseTestResultTask\r
slc.report=org.argeo.slc.ant.test.SlcReportTask\r
+slc.register=org.argeo.slc.ant.spring.SpringRegister\r
\r
<target name="test">\r
<echo message="Hello World!" />\r
- \r
+\r
<slc.test path="/testRoot/testPath">\r
- <testDefinition bean="testDef"/>\r
- <testData bean="testData1"/>\r
+ <testDefinition bean="testDef" />\r
+ <testData bean="testData1" />\r
</slc.test>\r
- \r
+\r
<slc.test path="/testRoot/testContext">\r
- <testDefinition bean="testDef"/>\r
- <testData bean="testData.context1"/>\r
+ <testDefinition bean="testDef" />\r
+ <testData bean="testData.context1" />\r
</slc.test>\r
- \r
- <slc.closeResult result="testResult" />\r
+\r
+ <slc.closeResult>
+ <result bean="testResult" />
+ </slc.closeResult>\r
</target>\r
</project>
\ No newline at end of file