]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - org.argeo.slc.core/src/main/java/org/argeo/slc/ant/SlcProjectHelper.java
Introduce context at ant level
[gpl/argeo-slc.git] / org.argeo.slc.core / src / main / java / org / argeo / slc / ant / SlcProjectHelper.java
index 6ed9d9190fad04cf49790ae225899cbed92f30dc..4731c2284621ed10fc00a7a3af516a92be952626 100644 (file)
@@ -41,6 +41,7 @@ public class SlcProjectHelper extends ProjectHelper2 {
         * /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
        @Override\r
        public void parse(Project project, Object source) throws BuildException {\r
@@ -81,7 +82,7 @@ public class SlcProjectHelper extends ProjectHelper2 {
                // create structure root\r
                registerProjectAndParents(project, slcAntConfig);\r
 \r
-               addSlcTasks(project);\r
+               addCustomTaskAndTypes(project);\r
 \r
        }\r
 \r
@@ -142,23 +143,14 @@ public class SlcProjectHelper extends ProjectHelper2 {
                // FIXME: workaround to the removal of leading '/' by Spring\r
                // use URL instead?\r
                AbstractApplicationContext context = new FileSystemXmlApplicationContext(\r
-                               '/'+acPath);\r
+                               '/' + acPath);\r
                context.registerShutdownHook();\r
                project.addReference(REF_ROOT_CONTEXT, context);\r
        }\r
 \r
        /** Loads the SLC specific Ant tasks. */\r
-       private void addSlcTasks(Project project) {\r
-               Properties taskdefs = new Properties();\r
-               try {\r
-                       InputStream in = project.getClass().getResourceAsStream(\r
-                                       SLC_TASKDEFS_RESOURCE_PATH);\r
-                       taskdefs.load(in);\r
-                       in.close();\r
-               } catch (IOException e) {\r
-                       throw new SlcAntException("Cannot load task definitions", e);\r
-               }\r
-\r
+       private 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
                        try {\r
@@ -168,5 +160,27 @@ 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
+               for (Object o : typedefs.keySet()) {\r
+                       String name = o.toString();\r
+                       try {\r
+                               project.addDataTypeDefinition(name, Class.forName(typedefs\r
+                                               .getProperty(name)));\r
+                       } catch (ClassNotFoundException e) {\r
+                               log.error("Unknown class for type " + name, e);\r
+                       }\r
+               }\r
+       }\r
+\r
+       private Properties getDefs(Project project, String path) {\r
+               Properties defs = new Properties();\r
+               try {\r
+                       InputStream in = project.getClass().getResourceAsStream(path);\r
+                       defs.load(in);\r
+                       in.close();\r
+               } catch (IOException e) {\r
+                       throw new SlcAntException("Cannot load task definitions", e);\r
+               }\r
+               return defs;\r
        }\r
 }\r