]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - org.argeo.slc.core/src/main/java/org/argeo/slc/ant/SlcProjectHelper.java
Revert change of default test run
[gpl/argeo-slc.git] / org.argeo.slc.core / src / main / java / org / argeo / slc / ant / SlcProjectHelper.java
index b20abd34f96f9bda52339a1d32a254e91416d274..001ead97bd28db91d77d5bbea186bcde54aa4675 100644 (file)
@@ -3,21 +3,29 @@ package org.argeo.slc.ant;
 import java.io.File;\r
 import java.io.IOException;\r
 import java.io.InputStream;\r
+import java.net.InetAddress;\r
+import java.net.UnknownHostException;\r
 import java.util.List;\r
 import java.util.Map;\r
 import java.util.Properties;\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
@@ -35,7 +43,7 @@ public class SlcProjectHelper extends ProjectHelper2 {
        /** 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
-       private static String REF_PROJECT_PATH = "slcProjectPath";\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
@@ -160,10 +168,9 @@ public class SlcProjectHelper extends ProjectHelper2 {
        }\r
 \r
        /** Gets the path of a project (root). */\r
-       public static TreeSPath getProjectPath(Project project) {\r
-               return (TreeSPath) project.getReference(REF_PROJECT_PATH);\r
-       }\r
-\r
+       // private static TreeSPath getProjectPath(Project project) {\r
+       // return (TreeSPath) project.getReference(REF_PROJECT_PATH);\r
+       // }\r
        /** Initializes the Spring application context. */\r
        private void initSpringContext(Project project) {\r
                System.getProperties().putAll((Map<?, ?>) project.getProperties());\r
@@ -178,16 +185,17 @@ public class SlcProjectHelper extends ProjectHelper2 {
                context.registerShutdownHook();\r
                project.addReference(REF_ROOT_CONTEXT, context);\r
 \r
+               createAndRegisterSlcExecution(project);\r
                // Add build listeners declared in Spring context\r
-               Map<String, BuildListener> listeners = context.getBeansOfType(\r
-                               BuildListener.class, false, true);\r
-               for(BuildListener listener: listeners.values()){\r
-                       project.addBuildListener(listener);\r
-               }\r
+               // Map<String, BuildListener> listeners = context.getBeansOfType(\r
+               // BuildListener.class, false, true);\r
+               // for (BuildListener listener : listeners.values()) {\r
+               // project.addBuildListener(listener);\r
+               // }\r
        }\r
 \r
        /** Loads the SLC specific Ant tasks. */\r
-       private void addCustomTaskAndTypes(Project project) {\r
+       protected static void addCustomTaskAndTypes(Project project) {\r
                Properties taskdefs = getDefs(project, SLC_TASKDEFS_RESOURCE_PATH);\r
                for (Object o : taskdefs.keySet()) {\r
                        String name = o.toString();\r
@@ -210,7 +218,7 @@ public class SlcProjectHelper extends ProjectHelper2 {
                }\r
        }\r
 \r
-       private Properties getDefs(Project project, String path) {\r
+       private static Properties getDefs(Project project, String path) {\r
                Properties defs = new Properties();\r
                try {\r
                        InputStream in = project.getClass().getResourceAsStream(path);\r
@@ -221,4 +229,38 @@ public class SlcProjectHelper extends ProjectHelper2 {
                }\r
                return defs;\r
        }\r
+\r
+       protected static void createAndRegisterSlcExecution(Project project) {\r
+               SlcExecution slcExecution = new SlcExecution();\r
+               slcExecution.setUuid(UUID.randomUUID().toString());\r
+               try {\r
+                       slcExecution.setHost(InetAddress.getLocalHost().getHostName());\r
+               } catch (UnknownHostException e) {\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
+               } else {\r
+                       slcExecution.setType(SlcExecutionBuildListener.ANT_TYPE);\r
+               }\r
+\r
+               slcExecution.setUser(System.getProperty("user.name"));\r
+               slcExecution.setStatus(SlcExecution.STATUS_RUNNING);\r
+               slcExecution.getAttributes().put("ant.file",\r
+                               project.getProperty("ant.file"));\r
+\r
+               project.addReference(SlcExecutionBuildListener.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
+                               ProjectRelatedBuildListener.class, false, true);\r
+               for (ProjectRelatedBuildListener listener : listeners.values()) {\r
+                       listener.init(project);\r
+                       project.addBuildListener(listener);\r
+               }\r
+\r
+       }\r
 }\r