Introduce active paths
authorMathieu Baudier <mbaudier@argeo.org>
Tue, 23 Oct 2007 19:07:24 +0000 (19:07 +0000)
committerMathieu Baudier <mbaudier@argeo.org>
Tue, 23 Oct 2007 19:07:24 +0000 (19:07 +0000)
git-svn-id: https://svn.argeo.org/slc/trunk@633 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

14 files changed:
org.argeo.slc/src/main/java/org/argeo/slc/ant/AntRegistryUtil.java [new file with mode: 0644]
org.argeo.slc/src/main/java/org/argeo/slc/ant/SAwareArg.java
org.argeo.slc/src/main/java/org/argeo/slc/ant/SAwareTask.java
org.argeo.slc/src/main/java/org/argeo/slc/ant/SlcProjectHelper.java
org.argeo.slc/src/main/java/org/argeo/slc/ant/test/SlcTestTask.java
org.argeo.slc/src/main/java/org/argeo/slc/core/structure/StructureElement.java
org.argeo.slc/src/main/java/org/argeo/slc/core/structure/StructureRegistry.java
org.argeo.slc/src/main/java/org/argeo/slc/core/structure/tree/DefaultTreeSAware.java
org.argeo.slc/src/main/java/org/argeo/slc/core/structure/tree/TreeSAware.java [new file with mode: 0644]
org.argeo.slc/src/main/java/org/argeo/slc/core/structure/tree/TreeSElement.java
org.argeo.slc/src/main/java/org/argeo/slc/core/structure/tree/TreeSRegistry.java
org.argeo.slc/src/test/ant/build.xml
org.argeo.slc/src/test/java/org/argeo/slc/testslc/DummyTestData.java
org.argeo.slc/src/test/java/org/argeo/slc/testslc/DummyTestDataObject.java

diff --git a/org.argeo.slc/src/main/java/org/argeo/slc/ant/AntRegistryUtil.java b/org.argeo.slc/src/main/java/org/argeo/slc/ant/AntRegistryUtil.java
new file mode 100644 (file)
index 0000000..c495b92
--- /dev/null
@@ -0,0 +1,81 @@
+package org.argeo.slc.ant;\r
+\r
+import java.io.File;\r
+import java.util.List;\r
+import java.util.Vector;\r
+\r
+import org.apache.commons.logging.Log;\r
+import org.apache.commons.logging.LogFactory;\r
+import org.apache.tools.ant.Project;\r
+import org.apache.tools.ant.ProjectHelper;\r
+\r
+import org.argeo.slc.core.structure.StructureElement;\r
+import org.argeo.slc.core.structure.StructurePath;\r
+import org.argeo.slc.core.structure.StructureRegistry;\r
+\r
+public class AntRegistryUtil {\r
+       private static Log log = LogFactory.getLog(AntRegistryUtil.class);\r
+\r
+       public static StructureRegistry readRegistry(File antFile) {\r
+\r
+               Project p = new Project();\r
+               p.setUserProperty("ant.file", antFile.getAbsolutePath());\r
+               p.init();\r
+               ProjectHelper helper = new SlcProjectHelper();\r
+               p.addReference("ant.projectHelper", helper);\r
+               helper.parse(p, antFile);\r
+\r
+               StructureRegistry registry = (StructureRegistry) p\r
+                               .getReference(SlcProjectHelper.REF_STRUCTURE_REGISTRY);\r
+               registry.setMode(StructureRegistry.READ);\r
+\r
+               p.executeTarget(p.getDefaultTarget());\r
+               return registry;\r
+       }\r
+\r
+       public static void runActive(File antFile, List<StructurePath> activePaths) {\r
+\r
+               Project p = new Project();\r
+               p.setUserProperty("ant.file", antFile.getAbsolutePath());\r
+               p.init();\r
+               ProjectHelper helper = new SlcProjectHelper();\r
+               p.addReference("ant.projectHelper", helper);\r
+               helper.parse(p, antFile);\r
+\r
+               StructureRegistry registry = (StructureRegistry) p\r
+               .getReference(SlcProjectHelper.REF_STRUCTURE_REGISTRY);\r
+               registry.setMode(StructureRegistry.ACTIVE);\r
+               registry.setActivePaths(activePaths);\r
+               p.executeTarget(p.getDefaultTarget());\r
+       }\r
+\r
+       public static void main(String[] args) {\r
+               File antFile = new File(\r
+                               "C:/dev/workspaces/default/org.argeo.slc/src/test/ant/build.xml");\r
+               System\r
+                               .setProperty(SlcProjectHelper.PROP_APPLICATION_CONTEXT,\r
+                                               "C:/dev/workspaces/default/org.argeo.slc/src/test/ant/applicationContext.xml");\r
+               StructureRegistry registry = AntRegistryUtil.readRegistry(antFile);\r
+\r
+               StringBuffer buf = new StringBuffer("");\r
+\r
+               int count = 0;\r
+               List<StructurePath> activePaths = new Vector<StructurePath>();\r
+               for (StructureElement element : registry.listElements()) {\r
+                       buf.append(element.getPath());\r
+                       if (count != 0 && count % 2 == 0) {\r
+                               // skip\r
+                       } else {\r
+                               activePaths.add(element.getPath());\r
+                               buf.append(" <");\r
+                       }\r
+                       buf.append('\n');\r
+                       count++;\r
+               }\r
+               log.info(buf);\r
+\r
+               runActive(antFile, activePaths);\r
+\r
+       }\r
+\r
+}\r
index 2d34f8405bbf176d8bc36cb295242dc24bae6ba5..1b648bed41a6460d9fd23be96f21563c7785adbf 100644 (file)
@@ -1,18 +1,19 @@
 package org.argeo.slc.ant;\r
 \r
 import org.argeo.slc.ant.spring.AbstractSpringArg;\r
-import org.argeo.slc.core.structure.tree.DefaultTreeSAware;\r
+import org.argeo.slc.core.structure.StructureRegistry;\r
+import org.argeo.slc.core.structure.tree.TreeSAware;\r
 import org.argeo.slc.core.structure.tree.TreeSElement;\r
 \r
 public abstract class SAwareArg extends AbstractSpringArg {\r
-       private DefaultTreeSAware parentSAware;\r
+       private TreeSAware parentSAware;\r
 \r
        @Override\r
        protected Object getBeanInstance() {\r
                Object obj = super.getBeanInstance();\r
 \r
-               if (obj instanceof DefaultTreeSAware && parentSAware!=null) {\r
-                       DefaultTreeSAware sAware = (DefaultTreeSAware) obj;\r
+               if (obj instanceof TreeSAware && parentSAware != null) {\r
+                       TreeSAware sAware = (TreeSAware) obj;\r
                        TreeSElement parentElement = (TreeSElement) parentSAware\r
                                        .getElement();\r
                        String name = getBean() + parentElement.getChildren().size();\r
@@ -20,15 +21,17 @@ public abstract class SAwareArg extends AbstractSpringArg {
                                        getDescription() != null ? getDescription()\r
                                                        : "<no bean desc>");\r
                        sAware.setElement(element);\r
-                       \r
+\r
                        parentSAware.addChild(sAware);\r
+                       StructureRegistry registry = (StructureRegistry) getProject()\r
+                                       .getReference(SlcProjectHelper.REF_STRUCTURE_REGISTRY);\r
+                       registry.register(sAware);\r
                }\r
                return obj;\r
        }\r
 \r
-       public void setParentSAware(DefaultTreeSAware parentSAware) {\r
+       public void setParentSAware(TreeSAware parentSAware) {\r
                this.parentSAware = parentSAware;\r
        }\r
 \r
-       \r
 }\r
index 089c55828624a32a593d230794510a0ba1f45f3f..ef438c32e014083cf7e0624ea6ef34dc4a2e4ba1 100644 (file)
@@ -1,5 +1,7 @@
 package org.argeo.slc.ant;\r
 \r
+import java.util.List;\r
+\r
 import org.apache.tools.ant.BuildException;\r
 import org.apache.tools.ant.Target;\r
 \r
@@ -7,16 +9,16 @@ import org.argeo.slc.ant.spring.AbstractSpringTask;
 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
 public abstract class SAwareTask extends AbstractSpringTask {\r
-       protected final DefaultTreeSAware sAware = new DefaultTreeSAware();\r
+       protected final TreeSAware sAware = new DefaultTreeSAware();\r
 \r
        @Override\r
        public void init() throws BuildException {\r
-               StructureRegistry registry = (StructureRegistry) getProject()\r
-                               .getReference(SlcProjectHelper.REF_STRUCTURE_REGISTRY);\r
+               StructureRegistry registry = getRegistry();\r
                Target target = getOwningTarget();\r
                TreeSElement projectElement = (TreeSElement) registry\r
                                .getElement(SlcProjectHelper.getProjectPath(getProject()));\r
@@ -38,6 +40,27 @@ public abstract class SAwareTask extends AbstractSpringTask {
                registry.register(sAware);\r
        }\r
 \r
+       @Override\r
+       public final void execute() throws BuildException {\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
+                       if (activePaths.contains(sAware.getElement().getPath())) {\r
+                               executeActions(mode);\r
+                       }\r
+               }\r
+\r
+       }\r
+\r
+       protected abstract void executeActions(String mode);\r
+\r
+       protected StructureRegistry getRegistry() {\r
+               return (StructureRegistry) getProject().getReference(\r
+                               SlcProjectHelper.REF_STRUCTURE_REGISTRY);\r
+       }\r
+\r
        protected static StructurePath createTargetPath(Target target) {\r
                TreeSPath projectPath = SlcProjectHelper.getProjectPath(target\r
                                .getProject());\r
index f0afc92efd7788bb79a9faa807377b9234a8d49b..79160073b66ae6d79e919dbacfa34a30ecdd1297 100644 (file)
@@ -7,13 +7,13 @@ import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.Project;\r
 import org.apache.tools.ant.helper.ProjectHelperImpl;\r
 \r
-import org.argeo.slc.core.structure.StructurePath;\r
 import org.argeo.slc.core.structure.tree.TreeSElement;\r
 import org.argeo.slc.core.structure.tree.TreeSPath;\r
 import org.argeo.slc.core.structure.tree.TreeSRegistry;\r
 \r
 public class SlcProjectHelper extends ProjectHelperImpl {\r
        public static String PROP_APPLICATION_CONTEXT = "org.argeo.slc.slcRootContext";\r
+       //public static String PROP_REGISTRY_MODE = "org.argeo.slc.slcRegistryMode";\r
        public static String REF_ROOT_CONTEXT = "slcApplicationContext";\r
        public static String REF_STRUCTURE_REGISTRY = "slcStructureRegistry";\r
 \r
@@ -27,18 +27,19 @@ public class SlcProjectHelper extends ProjectHelperImpl {
                ApplicationContext context = new FileSystemXmlApplicationContext(acPath);\r
                project.addReference(REF_ROOT_CONTEXT, context);\r
 \r
-               // init structure register\r
-               TreeSRegistry registry = new TreeSRegistry();\r
-               project.addReference(REF_STRUCTURE_REGISTRY, registry);\r
+               // init structure register if it does not exist\r
+                       TreeSRegistry registry = new TreeSRegistry();\r
+                       project.addReference(REF_STRUCTURE_REGISTRY, registry);\r
 \r
-               // call the underlying implementation to do the actual work\r
-               super.parse(project, source);\r
+                       // call the underlying implementation to do the actual work\r
+                       super.parse(project, source);\r
 \r
-               String projectDescription = project.getDescription() != null ? project\r
-                               .getDescription() : "Root";\r
-               TreeSElement element = TreeSElement.createRootElelment(\r
-                               getProjectPathName(project), projectDescription);\r
-               registry.register(element);\r
+                       String projectDescription = project.getDescription() != null ? project\r
+                                       .getDescription()\r
+                                       : "Root";\r
+                       TreeSElement element = TreeSElement.createRootElelment(\r
+                                       getProjectPathName(project), projectDescription);\r
+                       registry.register(element);\r
        }\r
 \r
        private static void stdOut(Object o) {\r
index 4dcd31a3bc6677d2f3b9befe27c082753b41048d..15983aa08d322d01129577f1c078de7a34134b63 100644 (file)
@@ -4,8 +4,6 @@ import org.apache.tools.ant.BuildException;
 \r
 import org.argeo.slc.ant.SAwareArg;\r
 import org.argeo.slc.ant.SAwareTask;\r
-import org.argeo.slc.ant.spring.AbstractSpringArg;\r
-import org.argeo.slc.ant.spring.AbstractSpringTask;\r
 import org.argeo.slc.core.test.TestData;\r
 import org.argeo.slc.core.test.TestDefinition;\r
 \r
@@ -15,7 +13,7 @@ public class SlcTestTask extends SAwareTask {
        private TestDataArg testDataArg;\r
 \r
        @Override\r
-       public void execute() throws BuildException {\r
+       public void executeActions(String mode) throws BuildException {\r
                TestDefinition testDefinition = testDefinitionArg.getTestDefinition();\r
                testDefinition.setTestData(testDataArg.getTestData());\r
                testDefinition.execute();\r
index bbbb00531f41cf797361bbc09953ceaf964ae3dc..99ce86cd8922f815b4b53a01dfdd3598d9d28e62 100644 (file)
@@ -3,6 +3,4 @@ package org.argeo.slc.core.structure;
 public interface StructureElement {\r
        public StructurePath getPath();\r
        public String getDescription();\r
-       public Boolean getActive();\r
-       public void setActive(Boolean active);\r
 }\r
index 3856fad6e3697c87dfd860327e74dec7d40005a8..f574784d85b118b2095fdf79ec7319f35634b0f2 100644 (file)
@@ -3,9 +3,19 @@ package org.argeo.slc.core.structure;
 import java.util.List;\r
 \r
 public interface StructureRegistry {\r
+       public static String READ = "READ";\r
+       public static String ALL = "ALL";\r
+       public static String ACTIVE = "ACTIVE";\r
+       \r
        public void register(StructureElement element);\r
        public void register(StructureAware structureAware);\r
        public List<StructureElement> listElements();\r
        \r
        public StructureElement getElement(StructurePath path);\r
+       \r
+       public void setMode(String mode);\r
+       public String getMode();\r
+       \r
+       public List<StructurePath> getActivePaths();\r
+       public void setActivePaths(List<StructurePath> activePaths);\r
 }\r
index a5d9c21fbfce7f164184ac9eac22c2ac21fc77a5..aca54d2735666fa96dea72775698778d4adb3a06 100644 (file)
@@ -3,13 +3,12 @@ package org.argeo.slc.core.structure.tree;
 import java.util.List;\r
 import java.util.Vector;\r
 \r
-import org.argeo.slc.core.structure.StructureAware;\r
 import org.argeo.slc.core.structure.StructureElement;\r
 import org.argeo.slc.core.structure.StructureRegistry;\r
 \r
-public class DefaultTreeSAware implements StructureAware{\r
+public class DefaultTreeSAware implements TreeSAware{\r
        private TreeSElement element;\r
-       private List<StructureAware> children = new Vector<StructureAware>();\r
+       private List<TreeSAware> children = new Vector<TreeSAware>();\r
 \r
        public StructureElement getElement() {\r
                return element;\r
@@ -20,13 +19,18 @@ public class DefaultTreeSAware implements StructureAware{
        }\r
 \r
        public void onRegister(StructureRegistry registry) {\r
-               for(StructureAware sAware : children){\r
+               for(TreeSAware sAware : children){\r
                        registry.register(sAware.getElement());\r
                        sAware.onRegister(registry);\r
                }\r
        }\r
 \r
-       public void addChild(StructureAware sAware){\r
+       public void addChild(TreeSAware sAware){\r
                children.add(sAware);\r
        }\r
+\r
+       public List<TreeSAware> getChildren() {\r
+               return children;\r
+       }\r
+       \r
 }\r
diff --git a/org.argeo.slc/src/main/java/org/argeo/slc/core/structure/tree/TreeSAware.java b/org.argeo.slc/src/main/java/org/argeo/slc/core/structure/tree/TreeSAware.java
new file mode 100644 (file)
index 0000000..d25e805
--- /dev/null
@@ -0,0 +1,12 @@
+package org.argeo.slc.core.structure.tree;\r
+\r
+import java.util.List;\r
+\r
+import org.argeo.slc.core.structure.StructureAware;\r
+\r
+public interface TreeSAware extends StructureAware{\r
+       public void setElement(TreeSElement element);\r
+\r
+       public void addChild(TreeSAware sAware);\r
+       public List<TreeSAware> getChildren();\r
+}\r
index 3c0ba12c20ceed864ec64e0233950b56220e2261..14f97770de924ace3bd604ab80773a47c661d20b 100644 (file)
@@ -9,7 +9,6 @@ import org.argeo.slc.core.structure.StructurePath;
 public class TreeSElement implements StructureElement {\r
        private String description;\r
        private TreeSPath path;\r
-       private Boolean active;\r
 \r
        private List<TreeSElement> children = new Vector<TreeSElement>();\r
 \r
@@ -25,14 +24,6 @@ public class TreeSElement implements StructureElement {
                return path;\r
        }\r
 \r
-       public Boolean getActive() {\r
-               return active;\r
-       }\r
-\r
-       public void setActive(Boolean active) {\r
-               this.active = active;\r
-       }\r
-\r
        public List<TreeSElement> getChildren() {\r
                return children;\r
        }\r
index b52b71d8e50b70a6ec960e6c1a1ae7df2f0d3f97..38c12add23f614285d1b75a4474319567d1e41a5 100644 (file)
@@ -16,6 +16,9 @@ public class TreeSRegistry implements StructureRegistry {
 \r
        private List<TreeSElement> elements = new Vector<TreeSElement>();\r
        private List<TreeSPath> paths = new Vector<TreeSPath>();\r
+       private String mode = StructureRegistry.ALL;\r
+\r
+       private List<StructurePath> activePaths;\r
 \r
        public List<StructureElement> listElements() {\r
                return new Vector<StructureElement>(elements);\r
@@ -51,4 +54,22 @@ public class TreeSRegistry implements StructureRegistry {
                }\r
                return (TreeSElement) element;\r
        }\r
+\r
+       public String getMode() {\r
+               return mode;\r
+       }\r
+\r
+       public void setMode(String mode) {\r
+               this.mode = mode;\r
+       }\r
+\r
+       public List<StructurePath> getActivePaths() {\r
+               return activePaths;\r
+       }\r
+\r
+       public void setActivePaths(List<StructurePath> activePaths) {\r
+               this.activePaths = activePaths;\r
+       }\r
+       \r
+       \r
 }\r
index ca90d0da3282551142bddc71b68a1c6029a555e7..76fa1c79bb05203916e8a961ef0a3dfded78bd74 100644 (file)
@@ -1,10 +1,12 @@
-<project default="test">\r
+<project default="test" name="testProject">\r
+       <description>A Test project</description>\r
+       \r
        <taskdef name="slc.test" classname="org.argeo.slc.ant.test.SlcTestTask" />\r
 \r
        <target name="test" depends="testSimple,testObj">\r
        </target>\r
 \r
-       <target name="testSimple">\r
+       <target name="testSimple" description="A simple test">\r
                <!-- Success -->\r
                <slc.test>\r
                        <testDefinition bean="dummyTestDefinition" />\r
                </slc.test>\r
        </target>\r
        \r
-       <target name="testObj">\r
+       <target name="testObj" description="An object test">\r
                <!-- Success -->\r
                <slc.test>\r
-                       <testDefinition bean="dummyTestDefinition" />\r
-                       <testData bean="dummyTestDataObjOK" />\r
+                       <testDefinition bean="dummyTestDefinition"/>\r
+                       <testData bean="dummyTestDataObjOK"  description="A dummy testDef"/>\r
                </slc.test>\r
 \r
                <!-- Failure -->\r
index e63e197e710d779b6bc23606028dcc27fb0743f7..c3cd254ad2baf95d5935bfca06b4af268c26aea0 100644 (file)
@@ -1,8 +1,12 @@
 package org.argeo.slc.testslc;\r
 \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.test.TestData;\r
 \r
-public class DummyTestData implements TestData {\r
+public class DummyTestData extends DefaultTreeSAware implements TestData {\r
        private Object reached;\r
        private Object expected;\r
 \r
@@ -22,4 +26,18 @@ public class DummyTestData implements TestData {
                this.expected = expected;\r
        }\r
 \r
+       @Override\r
+       public void onRegister(StructureRegistry registry) {\r
+               if (expected instanceof TreeSAware) {\r
+                       TreeSAware sAware = (TreeSAware) expected;\r
+                       TreeSElement element = ((TreeSElement) getElement()).createChild(\r
+                                       "expected" + getChildren().size(), "<no desc>");\r
+                       sAware.setElement(element);\r
+                       addChild(sAware);\r
+               }\r
+               super.onRegister(registry);\r
+       }\r
+       \r
+       \r
+\r
 }\r
index 34b00d23d023f579aefcdc642329a8dc333d3332..61a2df97ada8075ec6d6eca3ebe0656635dc5a67 100644 (file)
@@ -1,8 +1,10 @@
 package org.argeo.slc.testslc;\r
 \r
-public class DummyTestDataObject {\r
-       private Object value;\r
+import org.argeo.slc.core.structure.tree.DefaultTreeSAware;\r
 \r
+public class DummyTestDataObject extends DefaultTreeSAware{\r
+       private Object value;\r
+       \r
        public Object getValue() {\r
                return value;\r
        }\r