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
/** 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
}\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
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
}\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
}\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