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=b7d7365725cdb3bb6780cbb5bf47cc855f5048cf;hpb=ad39dc06e6fcc81a50caf5c617f93f83b6cc698a;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 b7d736572..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); } @@ -142,23 +143,14 @@ public class SlcProjectHelper extends ProjectHelperImpl { // 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 { @@ -168,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; } }