X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.slc.core%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fslc%2Fant%2FSlcProjectHelper.java;h=4731c2284621ed10fc00a7a3af516a92be952626;hb=38033cb1dbfe8d9c3e8cb8beb8fa0e11299f7714;hp=4cc2d9d39d84b26e193980d17198a20f609ecf72;hpb=faf680e212bf3e18837c4f798587856e061273b3;p=gpl%2Fargeo-slc.git diff --git a/org.argeo.slc.core/src/main/java/org/argeo/slc/ant/SlcProjectHelper.java b/org.argeo.slc.core/src/main/java/org/argeo/slc/ant/SlcProjectHelper.java index 4cc2d9d39..4731c2284 100644 --- a/org.argeo.slc.core/src/main/java/org/argeo/slc/ant/SlcProjectHelper.java +++ b/org.argeo.slc.core/src/main/java/org/argeo/slc/ant/SlcProjectHelper.java @@ -15,7 +15,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.Project; -import org.apache.tools.ant.helper.ProjectHelperImpl; +import org.apache.tools.ant.helper.ProjectHelper2; import org.argeo.slc.core.UnsupportedException; import org.argeo.slc.core.structure.DefaultSRegistry; @@ -27,7 +27,7 @@ import org.argeo.slc.core.structure.tree.TreeSPath; * Custom implementation of an Ant ProjectHelper binding a Spring * application context and a structure registry with the Ant project. */ -public class SlcProjectHelper extends ProjectHelperImpl { +public class SlcProjectHelper extends ProjectHelper2 { private static Log log; /** The Ant reference to the Spring application context used. */ @@ -41,6 +41,7 @@ public class SlcProjectHelper extends ProjectHelperImpl { * /org/argeo/slc/ant/taskdefs.properties */ private static String SLC_TASKDEFS_RESOURCE_PATH = "/org/argeo/slc/ant/taskdefs.properties"; + private static String SLC_TYPEDEFS_RESOURCE_PATH = "/org/argeo/slc/ant/typedefs.properties"; @Override public void parse(Project project, Object source) throws BuildException { @@ -81,7 +82,7 @@ public class SlcProjectHelper extends ProjectHelperImpl { // create structure root registerProjectAndParents(project, slcAntConfig); - addSlcTasks(project); + addCustomTaskAndTypes(project); } @@ -137,24 +138,19 @@ public class SlcProjectHelper extends ProjectHelperImpl { System.getProperties().putAll((Map) project.getProperties()); String acPath = project .getUserProperty(SlcAntConfig.APPLICATION_CONTEXT_PROPERTY); + if (log.isDebugEnabled()) + log.debug("Loading Spring application context from " + acPath); + // FIXME: workaround to the removal of leading '/' by Spring + // use URL instead? AbstractApplicationContext context = new FileSystemXmlApplicationContext( - acPath); + '/' + acPath); context.registerShutdownHook(); project.addReference(REF_ROOT_CONTEXT, context); } /** Loads the SLC specific Ant tasks. */ - private void addSlcTasks(Project project) { - Properties taskdefs = new Properties(); - try { - InputStream in = project.getClass().getResourceAsStream( - SLC_TASKDEFS_RESOURCE_PATH); - taskdefs.load(in); - in.close(); - } catch (IOException e) { - throw new SlcAntException("Cannot load task definitions", e); - } - + private void addCustomTaskAndTypes(Project project) { + Properties taskdefs = getDefs(project, SLC_TASKDEFS_RESOURCE_PATH); for (Object o : taskdefs.keySet()) { String name = o.toString(); try { @@ -164,5 +160,27 @@ public class SlcProjectHelper extends ProjectHelperImpl { log.error("Unknown class for task " + name, e); } } + Properties typedefs = getDefs(project, SLC_TYPEDEFS_RESOURCE_PATH); + for (Object o : typedefs.keySet()) { + String name = o.toString(); + try { + project.addDataTypeDefinition(name, Class.forName(typedefs + .getProperty(name))); + } catch (ClassNotFoundException e) { + log.error("Unknown class for type " + name, e); + } + } + } + + private Properties getDefs(Project project, String path) { + Properties defs = new Properties(); + try { + InputStream in = project.getClass().getResourceAsStream(path); + defs.load(in); + in.close(); + } catch (IOException e) { + throw new SlcAntException("Cannot load task definitions", e); + } + return defs; } }