]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - org.argeo.slc/src/main/java/org/argeo/slc/ant/structure/SAwareTask.java
Simplify structure framework
[gpl/argeo-slc.git] / org.argeo.slc / src / main / java / org / argeo / slc / ant / structure / SAwareTask.java
index 3defcd73f756de28d1af8ff7fc5bc337c4e023a1..befa20864ce2d58cd485daddc24084e3a5d1b245 100644 (file)
@@ -7,42 +7,44 @@ import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.Target;\r
 \r
 import org.argeo.slc.ant.SlcProjectHelper;\r
+import org.argeo.slc.ant.spring.AbstractSpringArg;\r
 import org.argeo.slc.ant.spring.AbstractSpringTask;\r
+import org.argeo.slc.core.structure.StructureAware;\r
 import org.argeo.slc.core.structure.StructurePath;\r
 import org.argeo.slc.core.structure.StructureRegistry;\r
 import org.argeo.slc.core.structure.tree.DefaultTreeSAware;\r
-import org.argeo.slc.core.structure.tree.TreeSAware;\r
 import org.argeo.slc.core.structure.tree.TreeSElement;\r
 import org.argeo.slc.core.structure.tree.TreeSPath;\r
 \r
 /** Ant task that can be registered within a structure. */\r
 public abstract class SAwareTask extends AbstractSpringTask {\r
-       protected final TreeSAware sAware = new DefaultTreeSAware();\r
-       protected final List<SAwareArg> sAwareArgs = new Vector<SAwareArg>();\r
+       private final DefaultTreeSAware sAware = new DefaultTreeSAware();\r
+       private final List<AbstractSpringArg> sAwareArgs = new Vector<AbstractSpringArg>();\r
 \r
        @Override\r
        public void init() throws BuildException {\r
                StructureRegistry registry = getRegistry();\r
                Target target = getOwningTarget();\r
-               TreeSElement projectElement = (TreeSElement) registry\r
-                               .getElement(SlcProjectHelper.getProjectPath(getProject()));\r
+\r
+               TreeSPath targetPath = createTargetPath(target);\r
                TreeSElement targetElement = (TreeSElement) registry\r
                                .getElement(createTargetPath(target));\r
 \r
                if (targetElement == null) {\r
-                       // create target element\r
-                       targetElement = projectElement.createChild(target.getName(), target\r
-                                       .getDescription() != null ? target.getDescription()\r
-                                       : "<no target>");\r
-                       registry.register(targetElement);\r
+                       targetElement = new TreeSElement(target.getDescription(),\r
+                                       "<no target desc>");\r
+                       registry.register(targetPath, targetElement);\r
                }\r
 \r
-               TreeSElement taskElement = targetElement.createChild(getTaskName()\r
-                               + targetElement.getChildren().size(),\r
-                               getDescription() != null ? getDescription() : "<no task desc>");\r
+               TreeSElement taskElement = new TreeSElement(getDescription(),\r
+                               "<no task desc>");\r
                sAware.setElement(taskElement);\r
        }\r
 \r
+       protected void addSAwareArg(AbstractSpringArg arg) {\r
+               sAwareArgs.add(arg);\r
+       }\r
+\r
        @Override\r
        /**\r
         * Called by Ant at runtime. Decides whether to call the actions depending\r
@@ -52,24 +54,34 @@ public abstract class SAwareTask extends AbstractSpringTask {
         * @see StructureRegistry\r
         */\r
        public final void execute() throws BuildException {\r
-               for(SAwareArg arg : sAwareArgs){\r
-                       arg.init(sAware);\r
+               // init registered args\r
+               for (AbstractSpringArg arg : sAwareArgs) {\r
+                       Object obj = arg.getBeanInstance();\r
+\r
+                       if (obj instanceof StructureAware && sAware != null) {\r
+                               StructureAware sAwareT = (StructureAware) obj;\r
+                               sAware.addToPropagationList(arg.getBean(), sAwareT);\r
+                       }\r
                }\r
-               \r
-               getRegistry().register(sAware);\r
-               \r
+\r
+               // register the task in the structure\r
+               TreeSPath targetPath = createTargetPath(getOwningTarget());\r
+               TreeSPath taskPath = targetPath.createChild(getTaskName()\r
+                               + targetPath.listChildren(getRegistry()).size());\r
+               getRegistry().register(taskPath, sAware);\r
+\r
+               // execute depending on the registry mode\r
                String mode = getRegistry().getMode();\r
                if (mode.equals(StructureRegistry.ALL)) {\r
                        executeActions(mode);\r
                } else if (mode.equals(StructureRegistry.ACTIVE)) {\r
                        List<StructurePath> activePaths = getRegistry().getActivePaths();\r
-                       \r
-                       StructurePath targetPath = createTargetPath(getOwningTarget());\r
-                       if(activePaths.contains(targetPath)){\r
-                               if (activePaths.contains(sAware.getElement().getPath())) {\r
+\r
+                       if (activePaths.contains(targetPath)) {\r
+                               if (activePaths.contains(taskPath)) {\r
                                        executeActions(mode);\r
                                }\r
-                       }                       \r
+                       }\r
                }\r
 \r
        }\r
@@ -84,9 +96,9 @@ public abstract class SAwareTask extends AbstractSpringTask {
        }\r
 \r
        /** Creates the path for a given Ant target. */\r
-       protected static StructurePath createTargetPath(Target target) {\r
+       protected static TreeSPath createTargetPath(Target target) {\r
                TreeSPath projectPath = SlcProjectHelper.getProjectPath(target\r
                                .getProject());\r
-               return TreeSPath.createChild(projectPath, target.getName());\r
+               return projectPath.createChild(target.getName());\r
        }\r
 }\r