]> git.argeo.org Git - gpl/argeo-slc.git/commitdiff
Improve Spring/Ant bridge
authorMathieu Baudier <mbaudier@argeo.org>
Tue, 10 Jun 2008 11:17:49 +0000 (11:17 +0000)
committerMathieu Baudier <mbaudier@argeo.org>
Tue, 10 Jun 2008 11:17:49 +0000 (11:17 +0000)
Change close result task

git-svn-id: https://svn.argeo.org/slc/trunk@1229 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

14 files changed:
org.argeo.slc.agent/src/main/java/org/argeo/slc/ant/AntRegistryUtil.java
org.argeo.slc.agent/src/main/java/org/argeo/slc/ant/AntSlcApplication.java [new file with mode: 0644]
org.argeo.slc.agent/src/main/java/org/argeo/slc/ant/BasicSlcProjectHelper.java
org.argeo.slc.agent/src/main/java/org/argeo/slc/ant/SlcAntConstants.java [new file with mode: 0644]
org.argeo.slc.agent/src/main/java/org/argeo/slc/ant/SlcExecutionBuildListener.java
org.argeo.slc.agent/src/main/java/org/argeo/slc/ant/SlcProjectHelper.java
org.argeo.slc.agent/src/main/java/org/argeo/slc/ant/spring/AbstractSpringTask.java
org.argeo.slc.agent/src/main/java/org/argeo/slc/ant/spring/OverrideArg.java
org.argeo.slc.agent/src/main/java/org/argeo/slc/ant/spring/SpringArg.java
org.argeo.slc.agent/src/main/java/org/argeo/slc/ant/spring/SpringRegister.java [new file with mode: 0644]
org.argeo.slc.agent/src/main/java/org/argeo/slc/ant/structure/SAwareTask.java
org.argeo.slc.agent/src/main/java/org/argeo/slc/ant/test/SlcCloseTestResultTask.java
org.argeo.slc.agent/src/main/resources/org/argeo/slc/ant/taskdefs.properties
org.argeo.slc.agent/src/test/resources/org/argeo/slc/ant/build.xml

index 1646fbccd0a919b9932859723408743a4f88ad2b..476384cd2f91051c99f015abde998e63906482c4 100644 (file)
@@ -31,7 +31,7 @@ public class AntRegistryUtil {
                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
@@ -53,7 +53,7 @@ public class AntRegistryUtil {
                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
diff --git a/org.argeo.slc.agent/src/main/java/org/argeo/slc/ant/AntSlcApplication.java b/org.argeo.slc.agent/src/main/java/org/argeo/slc/ant/AntSlcApplication.java
new file mode 100644 (file)
index 0000000..2d2c3ed
--- /dev/null
@@ -0,0 +1,34 @@
+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();
+               
+       }
+}
index 73e1c46a73ad56d89ccf2e3fcfdef5c217050624..ef50f05558d07211b8eba637710b94b7e32602da 100644 (file)
@@ -23,12 +23,12 @@ public class BasicSlcProjectHelper extends ProjectHelper2 {
                // 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
diff --git a/org.argeo.slc.agent/src/main/java/org/argeo/slc/ant/SlcAntConstants.java b/org.argeo.slc.agent/src/main/java/org/argeo/slc/ant/SlcAntConstants.java
new file mode 100644 (file)
index 0000000..c76dac6
--- /dev/null
@@ -0,0 +1,28 @@
+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";
+
+}
index 2b373a08219db1c663df007c4948026fddf2bede..420f48dd6bf8150bf0f6899d676e64892fe98dab 100644 (file)
@@ -17,11 +17,6 @@ import org.springframework.context.support.AbstractApplicationContext;
 \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
@@ -49,7 +44,7 @@ public class SlcExecutionBuildListener extends AppenderSkeleton implements
                }\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
@@ -154,7 +149,7 @@ public class SlcExecutionBuildListener extends AppenderSkeleton implements
                                        + " 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
@@ -201,7 +196,7 @@ public class SlcExecutionBuildListener extends AppenderSkeleton implements
 \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
index 51392cbddbd14c485aab5d902be62883eea3a332..e9275ad874679e7340ed3f862140f97f85626ab0 100644 (file)
@@ -32,19 +32,6 @@ import org.springframework.context.support.FileSystemXmlApplicationContext;
 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
@@ -101,7 +88,7 @@ public class SlcProjectHelper extends ProjectHelper2 {
 \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
@@ -118,7 +105,7 @@ public class SlcProjectHelper extends ProjectHelper2 {
        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
@@ -158,7 +145,7 @@ public class SlcProjectHelper extends ProjectHelper2 {
                        }\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
@@ -177,7 +164,7 @@ public class SlcProjectHelper extends ProjectHelper2 {
                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
@@ -190,7 +177,7 @@ public class SlcProjectHelper extends ProjectHelper2 {
 \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
@@ -200,7 +187,7 @@ public class SlcProjectHelper extends ProjectHelper2 {
                                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
@@ -233,10 +220,10 @@ public class SlcProjectHelper extends ProjectHelper2 {
                        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
@@ -244,12 +231,12 @@ public class SlcProjectHelper extends ProjectHelper2 {
                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
index 925140fa5b0888834f24df99bfc31626e53f35c3..ebc14c215b92463c4bb1659c364abd9a2854b810 100644 (file)
@@ -4,8 +4,7 @@ import org.springframework.context.ApplicationContext;
 \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
@@ -14,12 +13,12 @@ public abstract class AbstractSpringTask extends Task {
        /** 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
index 3dd26c844f7e2f5aa3189b8812ad7622dc6a8c00..4a2db0b0c4077aaa500ed4ccb8333486d13c8abc 100644 (file)
@@ -13,7 +13,6 @@ public class OverrideArg extends SpringArg<Object> {
        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
@@ -25,12 +24,6 @@ public class OverrideArg extends SpringArg<Object> {
                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
@@ -63,28 +56,20 @@ public class OverrideArg extends SpringArg<Object> {
        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
index cd85f89c7373b5efcd7220b8d4a34b30efcd9eed..d94384d5ca70410508e2f6ed9c3af889f306e55a 100644 (file)
@@ -3,9 +3,10 @@ package org.argeo.slc.ant.spring;
 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
@@ -17,6 +18,7 @@ public class SpringArg<T> extends DataType {
        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
@@ -28,16 +30,40 @@ public class SpringArg<T> extends DataType {
 \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
@@ -78,7 +104,13 @@ public class SpringArg<T> extends DataType {
        /** 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
diff --git a/org.argeo.slc.agent/src/main/java/org/argeo/slc/ant/spring/SpringRegister.java b/org.argeo.slc.agent/src/main/java/org/argeo/slc/ant/spring/SpringRegister.java
new file mode 100644 (file)
index 0000000..c550e3d
--- /dev/null
@@ -0,0 +1,51 @@
+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;
+               }
+
+       }
+}
index 830c13ae3cfeb0f8fffcfb66d32d718786401165..8402efd0dc709c3f96c98db5b3f5b4f640e480e3 100644 (file)
@@ -6,8 +6,8 @@ import java.util.Vector;
 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
@@ -125,13 +125,13 @@ public abstract class SAwareTask extends AbstractSpringTask {
        /** 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
index bc0c2ba1ab70f9662a0ca7a98590e4b7e501b43b..9eeb1e0cf81fdbed2783b7fc6eb888cae16bde0a 100644 (file)
@@ -1,24 +1,40 @@
 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
index f532c6d169ff9693d9c6eb051541aca5742ac60e..190a72fc0061fc6e4e8ff4195d62b539afd6e745 100644 (file)
@@ -4,3 +4,4 @@ slc.deploy=org.argeo.slc.ant.deploy.SlcDeployTask
 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
index f2ea5c52c8444767a4c62ab55b233a9c2f8245e3..84ea6980d8eeff6e7a713f0be467e661503ced33 100644 (file)
@@ -2,17 +2,19 @@
 \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