Improve documentation.
authorMathieu Baudier <mbaudier@argeo.org>
Wed, 24 Oct 2007 15:01:48 +0000 (15:01 +0000)
committerMathieu Baudier <mbaudier@argeo.org>
Wed, 24 Oct 2007 15:01:48 +0000 (15:01 +0000)
Fix issue with propagation to beans

git-svn-id: https://svn.argeo.org/slc/trunk@637 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

28 files changed:
org.argeo.slc/src/main/java/org/argeo/slc/ant/AntRegistryUtil.java
org.argeo.slc/src/main/java/org/argeo/slc/ant/SAwareArg.java [deleted file]
org.argeo.slc/src/main/java/org/argeo/slc/ant/SAwareTask.java [deleted file]
org.argeo.slc/src/main/java/org/argeo/slc/ant/SlcProjectHelper.java
org.argeo.slc/src/main/java/org/argeo/slc/ant/spring/AbstractSpringArg.java
org.argeo.slc/src/main/java/org/argeo/slc/ant/spring/AbstractSpringTask.java
org.argeo.slc/src/main/java/org/argeo/slc/ant/spring/OverrideArg.java
org.argeo.slc/src/main/java/org/argeo/slc/ant/structure/SAwareArg.java [new file with mode: 0644]
org.argeo.slc/src/main/java/org/argeo/slc/ant/structure/SAwareTask.java [new file with mode: 0644]
org.argeo.slc/src/main/java/org/argeo/slc/ant/test/SlcTestTask.java
org.argeo.slc/src/main/java/org/argeo/slc/core/structure/DefaultSRegistry.java [new file with mode: 0644]
org.argeo.slc/src/main/java/org/argeo/slc/core/structure/PropagatingSAware.java [new file with mode: 0644]
org.argeo.slc/src/main/java/org/argeo/slc/core/structure/StructureAware.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/StructurePath.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/WritableSAware.java [new file with mode: 0644]
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
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/TreeSPath.java
org.argeo.slc/src/main/java/org/argeo/slc/core/structure/tree/TreeSRegistry.java [deleted file]
org.argeo.slc/src/main/java/org/argeo/slc/core/test/IncompatibleTestDataException.java
org.argeo.slc/src/main/java/org/argeo/slc/core/test/TestData.java
org.argeo.slc/src/main/java/org/argeo/slc/core/test/TestDefinition.java
org.argeo.slc/src/main/java/org/argeo/slc/core/test/TestResult.java
org.argeo.slc/src/main/java/org/argeo/slc/core/test/TestRun.java
org.argeo.slc/src/test/java/org/argeo/slc/testslc/DummyTestData.java

index c495b9253616202f293c84b869130482e69679e4..a871d6fde5c31be2bac1149701cb8d075cfdef82 100644 (file)
@@ -63,7 +63,7 @@ public class AntRegistryUtil {
                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
+                       if (count != 0 && count % 3 == 0) {\r
                                // skip\r
                        } else {\r
                                activePaths.add(element.getPath());\r
diff --git a/org.argeo.slc/src/main/java/org/argeo/slc/ant/SAwareArg.java b/org.argeo.slc/src/main/java/org/argeo/slc/ant/SAwareArg.java
deleted file mode 100644 (file)
index 1b648be..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-package org.argeo.slc.ant;\r
-\r
-import org.argeo.slc.ant.spring.AbstractSpringArg;\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 TreeSAware parentSAware;\r
-\r
-       @Override\r
-       protected Object getBeanInstance() {\r
-               Object obj = super.getBeanInstance();\r
-\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
-                       TreeSElement element = parentElement.createChild(name,\r
-                                       getDescription() != null ? getDescription()\r
-                                                       : "<no bean desc>");\r
-                       sAware.setElement(element);\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(TreeSAware parentSAware) {\r
-               this.parentSAware = parentSAware;\r
-       }\r
-\r
-}\r
diff --git a/org.argeo.slc/src/main/java/org/argeo/slc/ant/SAwareTask.java b/org.argeo.slc/src/main/java/org/argeo/slc/ant/SAwareTask.java
deleted file mode 100644 (file)
index ef438c3..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-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
-import org.argeo.slc.ant.spring.AbstractSpringTask;\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
-public abstract class SAwareTask extends AbstractSpringTask {\r
-       protected final TreeSAware sAware = new DefaultTreeSAware();\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
-               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
-               }\r
-\r
-               TreeSElement taskElement = targetElement.createChild(getTaskName()\r
-                               + targetElement.getChildren().size(),\r
-                               getDescription() != null ? getDescription() : "<no task desc>");\r
-               sAware.setElement(taskElement);\r
-               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
-               return TreeSPath.createChild(projectPath, target.getName());\r
-       }\r
-}\r
index 79160073b66ae6d79e919dbacfa34a30ecdd1297..2eb703e90689a0bb06e82483b0e1e86f9d6ac6f7 100644 (file)
@@ -7,9 +7,9 @@ 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.DefaultSRegistry;\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
@@ -28,7 +28,7 @@ public class SlcProjectHelper extends ProjectHelperImpl {
                project.addReference(REF_ROOT_CONTEXT, context);\r
 \r
                // init structure register if it does not exist\r
-                       TreeSRegistry registry = new TreeSRegistry();\r
+               DefaultSRegistry registry = new DefaultSRegistry();\r
                        project.addReference(REF_STRUCTURE_REGISTRY, registry);\r
 \r
                        // call the underlying implementation to do the actual work\r
@@ -46,7 +46,7 @@ public class SlcProjectHelper extends ProjectHelperImpl {
                System.out.println(o);\r
        }\r
 \r
-       static TreeSPath getProjectPath(Project project) {\r
+       public static TreeSPath getProjectPath(Project project) {\r
                return TreeSPath.createChild(null, getProjectPathName(project));\r
        }\r
 \r
index 4061f377ff21b295aa6357070d0e2f21458f0c7c..86757751bd556d1bd03bb936a5bf04f7198bcdb0 100644 (file)
@@ -13,19 +13,26 @@ import org.apache.tools.ant.types.DataType;
 \r
 import org.argeo.slc.ant.SlcProjectHelper;\r
 \r
+/** Abstract Ant type wrapping a Spring bean. */\r
 public abstract class AbstractSpringArg extends DataType {\r
        private List<OverrideArg> overrides = new Vector<OverrideArg>();\r
 \r
        private String bean;\r
 \r
+       /** The <u>name</u> of the underlying bean, as set throught the attribute. */\r
        public String getBean() {\r
                return bean;\r
        }\r
 \r
+       /** Setter for the bean name. */\r
        public void setBean(String bean) {\r
                this.bean = bean;\r
        }\r
 \r
+       /**\r
+        * Retrieve the instance of the bean. <b>If teh underlying Spring bean is a\r
+        * prototype, it will instanciated each time.</b>\r
+        */\r
        protected Object getBeanInstance() {\r
                Object obj = getContext().getBean(bean);\r
 \r
@@ -37,12 +44,14 @@ public abstract class AbstractSpringArg extends DataType {
                return obj;\r
        }\r
 \r
+       /** Creates an override subtag.*/\r
        public OverrideArg createOverride() {\r
                OverrideArg propertyArg = new OverrideArg();\r
                overrides.add(propertyArg);\r
                return propertyArg;\r
        }\r
 \r
+       /** The related Spring application context.*/\r
        protected ApplicationContext getContext() {\r
                return (ApplicationContext) getProject().getReference(\r
                                SlcProjectHelper.REF_ROOT_CONTEXT);\r
index dfe954ebe791af2340f77e4a3e2344d3cfd1cff1..c732fd074384c7364fde36c5207865674dc0b71a 100644 (file)
@@ -6,8 +6,10 @@ import org.apache.tools.ant.Task;
 \r
 import org.argeo.slc.ant.SlcProjectHelper;\r
 \r
+/** Abstract Ant task providing access to a Spring context.*/\r
 public abstract class AbstractSpringTask extends Task {\r
 \r
+       /** Gets the related Spring context.*/\r
        protected ApplicationContext getContext() {\r
                return (ApplicationContext) getProject().getReference(\r
                                SlcProjectHelper.REF_ROOT_CONTEXT);\r
index 85a6e2c89100f55de07adfe7d15f7a5098aaf91b..80eb4731b388390a90f67222d034d2f63cb55197 100644 (file)
@@ -2,11 +2,12 @@ package org.argeo.slc.ant.spring;
 \r
 import org.apache.tools.ant.BuildException;\r
 \r
-\r
+/** Ant type allowing to override bean properties. */\r
 public class OverrideArg extends AbstractSpringArg {\r
        private String name;\r
        private Object value;\r
 \r
+       /** The nbame of the property to override. */\r
        public String getName() {\r
                return name;\r
        }\r
@@ -15,6 +16,7 @@ public class OverrideArg extends AbstractSpringArg {
                this.name = name;\r
        }\r
 \r
+       /** Both value and bean cannot be set. */\r
        public void setValue(String value) {\r
                if (getBean() != null) {\r
                        throw new BuildException(\r
@@ -32,6 +34,10 @@ public class OverrideArg extends AbstractSpringArg {
                super.setBean(bean);\r
        }\r
 \r
+       /**\r
+        * The related object: the value if a value had been set or an instance of\r
+        * the bean if not.\r
+        */\r
        public Object getObject() {\r
                if (value != null) {\r
                        return value;\r
diff --git a/org.argeo.slc/src/main/java/org/argeo/slc/ant/structure/SAwareArg.java b/org.argeo.slc/src/main/java/org/argeo/slc/ant/structure/SAwareArg.java
new file mode 100644 (file)
index 0000000..e96033b
--- /dev/null
@@ -0,0 +1,82 @@
+package org.argeo.slc.ant.structure;\r
+\r
+import java.util.Collections;\r
+import java.util.List;\r
+import java.util.Vector;\r
+\r
+import org.springframework.util.CollectionUtils;\r
+\r
+import org.argeo.slc.ant.SlcProjectHelper;\r
+import org.argeo.slc.ant.spring.AbstractSpringArg;\r
+import org.argeo.slc.core.structure.PropagatingSAware;\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
+import org.argeo.slc.core.structure.tree.TreeSAware;\r
+import org.argeo.slc.core.structure.tree.TreeSElement;\r
+\r
+/** Ant types allowing to propagate structure informations.*/\r
+public abstract class SAwareArg extends AbstractSpringArg{\r
+       //private TreeSAware parentSAware;\r
+\r
+       @Override\r
+       protected Object getBeanInstance() {\r
+               Object obj = super.getBeanInstance();\r
+/*\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
+                       TreeSElement element = parentElement.createChild(name,\r
+                                       getDescription() != null ? getDescription()\r
+                                                       : "<no bean desc>");\r
+                       sAware.setElement(element);\r
+\r
+                       parentSAware.addToPropagationList(sAware);\r
+//                     StructureRegistry registry = (StructureRegistry) getProject()\r
+//                                     .getReference(SlcProjectHelper.REF_STRUCTURE_REGISTRY);\r
+//                     registry.register(parentSAware);\r
+               }\r
+               */\r
+               return obj;\r
+       }\r
+\r
+       public void init(TreeSAware parentSAware){\r
+               \r
+               Object obj = super.getBeanInstance();\r
+               \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
+                       TreeSElement element = parentElement.createChild(name,\r
+                                       getDescription() != null ? getDescription()\r
+                                                       : "<no bean desc>");\r
+                       sAware.setElement(element);\r
+\r
+                       parentSAware.addToPropagationList(sAware);\r
+//                     StructureRegistry registry = (StructureRegistry) getProject()\r
+//                                     .getReference(SlcProjectHelper.REF_STRUCTURE_REGISTRY);\r
+//                     registry.register(parentSAware);\r
+               }\r
+       }\r
+       \r
+//     public void setParentSAware(TreeSAware parentSAware) {\r
+//             this.parentSAware = parentSAware;\r
+//     }\r
+\r
+\r
+       public StructureElement getElement() {\r
+               // TODO Auto-generated method stub\r
+               return null;\r
+       }\r
+\r
+       public void onRegister(StructureRegistry registry) {\r
+               // TODO Auto-generated method stub\r
+               \r
+       }\r
+\r
+       \r
+}\r
diff --git a/org.argeo.slc/src/main/java/org/argeo/slc/ant/structure/SAwareTask.java b/org.argeo.slc/src/main/java/org/argeo/slc/ant/structure/SAwareTask.java
new file mode 100644 (file)
index 0000000..3defcd7
--- /dev/null
@@ -0,0 +1,92 @@
+package org.argeo.slc.ant.structure;\r
+\r
+import java.util.List;\r
+import java.util.Vector;\r
+\r
+import org.apache.tools.ant.BuildException;\r
+import org.apache.tools.ant.Target;\r
+\r
+import org.argeo.slc.ant.SlcProjectHelper;\r
+import org.argeo.slc.ant.spring.AbstractSpringTask;\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
+\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
+               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
+               }\r
+\r
+               TreeSElement taskElement = targetElement.createChild(getTaskName()\r
+                               + targetElement.getChildren().size(),\r
+                               getDescription() != null ? getDescription() : "<no task desc>");\r
+               sAware.setElement(taskElement);\r
+       }\r
+\r
+       @Override\r
+       /**\r
+        * Called by Ant at runtime. Decides whether to call the actions depending\r
+        * of the mode of the underlying structure registry.\r
+        * \r
+        * @see #executeActions\r
+        * @see StructureRegistry\r
+        */\r
+       public final void execute() throws BuildException {\r
+               for(SAwareArg arg : sAwareArgs){\r
+                       arg.init(sAware);\r
+               }\r
+               \r
+               getRegistry().register(sAware);\r
+               \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
+                                       executeActions(mode);\r
+                               }\r
+                       }                       \r
+               }\r
+\r
+       }\r
+\r
+       /** Actions to be executed by the implementor. */\r
+       protected abstract void executeActions(String mode);\r
+\r
+       /** Gets the underlying structure registry. */\r
+       protected StructureRegistry getRegistry() {\r
+               return (StructureRegistry) getProject().getReference(\r
+                               SlcProjectHelper.REF_STRUCTURE_REGISTRY);\r
+       }\r
+\r
+       /** Creates the path for a given Ant target. */\r
+       protected static StructurePath createTargetPath(Target target) {\r
+               TreeSPath projectPath = SlcProjectHelper.getProjectPath(target\r
+                               .getProject());\r
+               return TreeSPath.createChild(projectPath, target.getName());\r
+       }\r
+}\r
index 15983aa08d322d01129577f1c078de7a34134b63..a82538786b419f20504718a0fef5866b7d645885 100644 (file)
@@ -2,11 +2,12 @@ package org.argeo.slc.ant.test;
 \r
 import org.apache.tools.ant.BuildException;\r
 \r
-import org.argeo.slc.ant.SAwareArg;\r
-import org.argeo.slc.ant.SAwareTask;\r
+import org.argeo.slc.ant.structure.SAwareArg;\r
+import org.argeo.slc.ant.structure.SAwareTask;\r
 import org.argeo.slc.core.test.TestData;\r
 import org.argeo.slc.core.test.TestDefinition;\r
 \r
+/** Ant task wrapping a test run.*/\r
 public class SlcTestTask extends SAwareTask {\r
 \r
        private TestDefinitionArg testDefinitionArg;\r
@@ -17,17 +18,17 @@ public class SlcTestTask extends SAwareTask {
                TestDefinition testDefinition = testDefinitionArg.getTestDefinition();\r
                testDefinition.setTestData(testDataArg.getTestData());\r
                testDefinition.execute();\r
-       }\r
+       }       \r
 \r
        public TestDefinitionArg createTestDefinition() {\r
                testDefinitionArg = new TestDefinitionArg();\r
-               testDefinitionArg.setParentSAware(sAware);\r
+               sAwareArgs.add(testDefinitionArg);\r
                return testDefinitionArg;\r
        }\r
 \r
        public TestDataArg createTestData() {\r
                testDataArg = new TestDataArg();\r
-               testDataArg.setParentSAware(sAware);\r
+               sAwareArgs.add(testDataArg);\r
                return testDataArg;\r
        }\r
 }\r
diff --git a/org.argeo.slc/src/main/java/org/argeo/slc/core/structure/DefaultSRegistry.java b/org.argeo.slc/src/main/java/org/argeo/slc/core/structure/DefaultSRegistry.java
new file mode 100644 (file)
index 0000000..3d63170
--- /dev/null
@@ -0,0 +1,62 @@
+package org.argeo.slc.core.structure;\r
+\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
+\r
+/** Default implementation of a <code>StructureRegistry</code>.*/\r
+public class DefaultSRegistry implements StructureRegistry {\r
+       private static Log log = LogFactory.getLog(DefaultSRegistry.class);\r
+\r
+       private List<StructureElement> elements = new Vector<StructureElement>();\r
+       private List<StructurePath> paths = new Vector<StructurePath>();\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
+       }\r
+\r
+       public void register(StructureElement element) {\r
+               StructureElement treeSElement = element;\r
+               elements.add(treeSElement);\r
+               paths.add( treeSElement.getPath());\r
+               log.debug("Registered " + treeSElement.getPath() + " (desc: "\r
+                               + treeSElement.getDescription() + " position: "\r
+                               + elements.size() + ")");\r
+       }\r
+\r
+       public void register(StructureAware structureAware) {\r
+               register(structureAware.getElement());\r
+               structureAware.onRegister(this);\r
+       }\r
+\r
+       public StructureElement getElement(StructurePath path) {\r
+               int index = paths.indexOf(path);\r
+               if (index >= 0) {\r
+                       return elements.get(index);\r
+               } else {// not found\r
+                       return null;\r
+               }\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
diff --git a/org.argeo.slc/src/main/java/org/argeo/slc/core/structure/PropagatingSAware.java b/org.argeo.slc/src/main/java/org/argeo/slc/core/structure/PropagatingSAware.java
new file mode 100644 (file)
index 0000000..72072fd
--- /dev/null
@@ -0,0 +1,19 @@
+package org.argeo.slc.core.structure;\r
+\r
+import java.util.List;\r
+\r
+/** Structure aware object able to propagate registrtaion.*/\r
+public interface PropagatingSAware extends StructureAware {\r
+       /**\r
+        * Adds a structure aware to which registration should be propagated. The\r
+        * passed object will be registered when this object will be\r
+        * registered itself, so it should not have been registered before. <b>It doesn't\r
+        * have to be consistent with the tree structure defined by tree based\r
+        * registry elements (although it will often make more sense)</b>.\r
+        */\r
+       public void addToPropagationList(StructureAware sAware);\r
+\r
+       /** Returns the list of structure aware to propagate to. */\r
+       public List<StructureAware> getPropagationList();\r
+\r
+}\r
index 8389ddaa22bf67816c852d90b2f1c11a9cab3955..b88e5d22ead8456ab515bad0966b9af4064b4287 100644 (file)
@@ -1,7 +1,13 @@
 package org.argeo.slc.core.structure;\r
 \r
+/**\r
+ * Wrapper for an element, which is able to propagate registration to\r
+ * sub-elements.\r
+ */\r
 public interface StructureAware {\r
+       /** Get the wrapped element.*/\r
        public StructureElement getElement();\r
-       /** Called <b>after</b> registration.*/\r
+\r
+       /** Called <b>after</b> registration. */\r
        public void onRegister(StructureRegistry registry);\r
 }\r
index 99ce86cd8922f815b4b53a01dfdd3598d9d28e62..b7400d58ad31ebef723eecfa703b7a9d5f6c8d79 100644 (file)
@@ -1,6 +1,10 @@
 package org.argeo.slc.core.structure;\r
 \r
+/** Atomic element holding the reference to the element which is structured. */\r
 public interface StructureElement {\r
+       /** Path to this element. */\r
        public StructurePath getPath();\r
+\r
+       /** Description of this element. */\r
        public String getDescription();\r
 }\r
index 6df30499cc37e3c328db177468c8aaeb903cc8eb..452dc951472163d44783e9ac83ae51e0fe18507a 100644 (file)
@@ -1,5 +1,16 @@
 package org.argeo.slc.core.structure;\r
 \r
+/**\r
+ * Path allowing to uniquely identify a <code>StructureElement</code> within a\r
+ * registry.\r
+ * \r
+ * @see StructureElement\r
+ * @see StructurePath\r
+ */\r
 public interface StructurePath {\r
+       /**\r
+        * Unique representation as a string. Most implementation will also provide\r
+        * a mean to interpret this string.\r
+        */\r
        public String getAsUniqueString();\r
 }\r
index f574784d85b118b2095fdf79ec7319f35634b0f2..3ffb2d26ff1caa15139f4794d7deafe312139e6a 100644 (file)
@@ -2,20 +2,57 @@ package org.argeo.slc.core.structure;
 \r
 import java.util.List;\r
 \r
+/** Registry where the whole structure is stored. */\r
 public interface StructureRegistry {\r
+       /** Read mode: the structure is only read. */\r
        public static String READ = "READ";\r
+       /** All mode: everything is executed regardless of the active paths. */\r
        public static String ALL = "ALL";\r
+       /** Active mode: only teh active paths are executed. */\r
        public static String ACTIVE = "ACTIVE";\r
-       \r
+\r
+       /** Adds an element to the registry. */\r
        public void register(StructureElement element);\r
+\r
+       /**\r
+        * Adds the wrapped element of a <code>SructureAware</code>, and\r
+        * propagates the registration.\r
+        */\r
        public void register(StructureAware structureAware);\r
+\r
+       /** Lists <b>all</b> registered elements. */\r
        public List<StructureElement> listElements();\r
-       \r
+\r
+       /** Gets a element based on its path. */\r
        public StructureElement getElement(StructurePath path);\r
-       \r
+\r
+       /**\r
+        * Set the interpreter mode: read, all or active.\r
+        * \r
+        * @see #READ\r
+        * @see #ALL\r
+        * @see #ACTIVE\r
+        */\r
        public void setMode(String mode);\r
+\r
+       /**\r
+        * Gets the current interpreter mode.\r
+        * \r
+        * @see #READ\r
+        * @see #ALL\r
+        * @see #ACTIVE\r
+        */\r
        public String getMode();\r
-       \r
+\r
+       /**\r
+        * Gets the list of active paths, which will be run if executed in\r
+        * <code>ACTIVE</code> mode.\r
+        */\r
        public List<StructurePath> getActivePaths();\r
+\r
+       /**\r
+        * Sets the list of active path, which will be run if executed in\r
+        * <code>ACTIVE</code> mode.\r
+        */\r
        public void setActivePaths(List<StructurePath> activePaths);\r
 }\r
diff --git a/org.argeo.slc/src/main/java/org/argeo/slc/core/structure/WritableSAware.java b/org.argeo.slc/src/main/java/org/argeo/slc/core/structure/WritableSAware.java
new file mode 100644 (file)
index 0000000..a5dcaea
--- /dev/null
@@ -0,0 +1,10 @@
+package org.argeo.slc.core.structure;\r
+\r
+import org.argeo.slc.core.structure.tree.TreeSElement;\r
+\r
+/** Structure aware object in which the wrapped element can be externally set. */\r
+public interface WritableSAware extends StructureAware {\r
+       /** Sets the wrapped element. */\r
+       public void setElement(StructureElement element);\r
+\r
+}\r
index aca54d2735666fa96dea72775698778d4adb3a06..0e470f4e18618dc93bb50783a6b974ac2042e50b 100644 (file)
@@ -3,34 +3,40 @@ 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 TreeSAware{\r
-       private TreeSElement element;\r
-       private List<TreeSAware> children = new Vector<TreeSAware>();\r
+/**\r
+ * Default implementation of <code>TreeSAware</code> for tree based\r
+ * registries, using <code>TreeSPath</code>. Convenient to be wrapped in\r
+ * classes which cannot extend it.\r
+ */\r
+public class DefaultTreeSAware implements TreeSAware {\r
+       private StructureElement element;\r
+       private List<StructureAware> children = new Vector<StructureAware>();\r
 \r
        public StructureElement getElement() {\r
                return element;\r
        }\r
 \r
-       public void setElement(TreeSElement element) {\r
+       public void setElement(StructureElement element) {\r
                this.element = element;\r
        }\r
 \r
        public void onRegister(StructureRegistry registry) {\r
-               for(TreeSAware sAware : children){\r
+               for (StructureAware sAware : children) {\r
                        registry.register(sAware.getElement());\r
                        sAware.onRegister(registry);\r
                }\r
        }\r
 \r
-       public void addChild(TreeSAware sAware){\r
+       public void addToPropagationList(StructureAware sAware) {\r
                children.add(sAware);\r
        }\r
 \r
-       public List<TreeSAware> getChildren() {\r
+       public List<StructureAware> getPropagationList() {\r
                return children;\r
        }\r
-       \r
+\r
 }\r
index d25e805a3b97c7102f46bc9fc8e5ed0c87823bc7..ca5a5711db0ceecd4559eab6fdb842039d51b63a 100644 (file)
@@ -2,11 +2,16 @@ package org.argeo.slc.core.structure.tree;
 \r
 import java.util.List;\r
 \r
+import org.argeo.slc.core.structure.PropagatingSAware;\r
 import org.argeo.slc.core.structure.StructureAware;\r
+import org.argeo.slc.core.structure.WritableSAware;\r
 \r
-public interface TreeSAware extends StructureAware{\r
-       public void setElement(TreeSElement element);\r
+/**\r
+ * Provides methods to externally propagate tree related informations in tree\r
+ * based registries.\r
+ * \r
+ * @see TreeSElement\r
+ */\r
+public interface TreeSAware extends WritableSAware, PropagatingSAware {\r
 \r
-       public void addChild(TreeSAware sAware);\r
-       public List<TreeSAware> getChildren();\r
 }\r
index 14f97770de924ace3bd604ab80773a47c661d20b..6e3ff04a86625b5ab3769d14b1b6c634f2cc306e 100644 (file)
@@ -6,6 +6,12 @@ import java.util.Vector;
 import org.argeo.slc.core.structure.StructureElement;\r
 import org.argeo.slc.core.structure.StructurePath;\r
 \r
+/**\r
+ * Implementation of <code>StructureElement</code> for tree based registries,\r
+ * using <code>TreeSPath</code>\r
+ * \r
+ * @see TreeSPath\r
+ */\r
 public class TreeSElement implements StructureElement {\r
        private String description;\r
        private TreeSPath path;\r
index 94d22b592b6195ca6789e1569ea9a4d8fe8a3a06..524f8adfba769b06e25ae613d309b81af11016e8 100644 (file)
@@ -4,7 +4,13 @@ import java.util.StringTokenizer;
 \r
 import org.argeo.slc.core.structure.StructurePath;\r
 \r
+/**\r
+ * Path for tree based <code>StructureRegistry</code> implementations.\r
+ * \r
+ * @see TreeSRegistry\r
+ */\r
 public class TreeSPath implements StructurePath {\r
+       /** Default character to use a separator: #. */\r
        public static Character DEFAULT_SEPARATOR = '#';\r
 \r
        private TreeSPath parent;\r
@@ -16,18 +22,22 @@ public class TreeSPath implements StructurePath {
                return parentStr + separator + name;\r
        }\r
 \r
+       /** The separator actually used by this path. */\r
        public Character getSeparator() {\r
                return separator;\r
        }\r
 \r
+       /** Gets the parent path. */\r
        public TreeSPath getParent() {\r
                return parent;\r
        }\r
 \r
+       /** Gets the name part of the path. */\r
        public String getName() {\r
                return name;\r
        }\r
 \r
+       /** Create a child path based on a parent path and a name. */\r
        public static TreeSPath createChild(TreeSPath parent, String name) {\r
                TreeSPath path = new TreeSPath();\r
                path.parent = parent;\r
@@ -35,7 +45,8 @@ public class TreeSPath implements StructurePath {
                return path;\r
        }\r
 \r
-       public static TreeSPath createTreeSPath(String path, Character separator) {\r
+       /** Parses a string to a path. */\r
+       public static TreeSPath parseToCreatePath(String path, Character separator) {\r
                StringTokenizer st = new StringTokenizer(path, Character\r
                                .toString(separator));\r
 \r
@@ -49,9 +60,9 @@ public class TreeSPath implements StructurePath {
                }\r
                return currPath;\r
        }\r
-       \r
+\r
        @Override\r
-       public String toString(){\r
+       public String toString() {\r
                return getAsUniqueString();\r
        }\r
 \r
@@ -63,6 +74,5 @@ public class TreeSPath implements StructurePath {
                }\r
                return false;\r
        }\r
-       \r
-       \r
+\r
 }\r
diff --git a/org.argeo.slc/src/main/java/org/argeo/slc/core/structure/tree/TreeSRegistry.java b/org.argeo.slc/src/main/java/org/argeo/slc/core/structure/tree/TreeSRegistry.java
deleted file mode 100644 (file)
index 38c12ad..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-package org.argeo.slc.core.structure.tree;\r
-\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
-\r
-import org.argeo.slc.core.structure.StructureAware;\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 TreeSRegistry implements StructureRegistry {\r
-       private static Log log = LogFactory.getLog(TreeSRegistry.class);\r
-\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
-       }\r
-\r
-       public void register(StructureElement element) {\r
-               TreeSElement treeSElement = checkElement(element);\r
-               elements.add(treeSElement);\r
-               paths.add((TreeSPath) treeSElement.getPath());\r
-               log.debug("Registered " + treeSElement.getPath() + " (desc: "\r
-                               + treeSElement.getDescription() + " position: "\r
-                               + elements.size() + ")");\r
-       }\r
-\r
-       public void register(StructureAware structureAware) {\r
-               register(structureAware.getElement());\r
-               structureAware.onRegister(this);\r
-       }\r
-\r
-       public StructureElement getElement(StructurePath path) {\r
-               int index = paths.indexOf(path);\r
-               if (index >= 0) {\r
-                       return elements.get(index);\r
-               } else {// not found\r
-                       return null;\r
-               }\r
-       }\r
-\r
-       protected TreeSElement checkElement(StructureElement element) {\r
-               if (!(element instanceof TreeSElement)) {\r
-                       throw new RuntimeException("Element class " + element.getClass()\r
-                                       + " is not supported.");\r
-               }\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 664cb1aacb98ffa694172eedcb5afd0d562e8acc..dcf075f9bb268a082e7338e22cea0da3975e8af9 100644 (file)
@@ -1,9 +1,14 @@
 package org.argeo.slc.core.test;\r
 \r
+/**\r
+ * Excception to throw when a test definition cannot interpret the provided tets\r
+ * data.\r
+ */\r
 public class IncompatibleTestDataException extends RuntimeException {\r
        static final long serialVersionUID = 1l;\r
 \r
-       public IncompatibleTestDataException(TestData testData, TestDefinition testDefinition) {\r
+       public IncompatibleTestDataException(TestData testData,\r
+                       TestDefinition testDefinition) {\r
                super("TestData " + testData.getClass()\r
                                + " is not compatible with TestDefinition "\r
                                + testDefinition.getClass());\r
index e3fddca4f86b086ef245fc4901eb4c5b79c684c1..4105e092588dd520ce197ac4383aadf75fa56549 100644 (file)
@@ -1,5 +1,9 @@
 package org.argeo.slc.core.test;\r
 \r
+/**\r
+ * Any data required by a test in order to run: configuration, expected,\r
+ * reached, etc.\r
+ */\r
 public interface TestData {\r
 \r
 }\r
index 3d1b4eddb97a925d7f186dd663987b19efe9916d..2eaf7bc8a0a78a17a660e54751cf5759659b5fd1 100644 (file)
@@ -1,7 +1,13 @@
 package org.argeo.slc.core.test;\r
 \r
+/**\r
+ * The programmatic definition of a test, which will be associated with test\r
+ * data within a test run.\r
+ */\r
 public interface TestDefinition {\r
+       /** Perform the test. */\r
        public void execute();\r
-       \r
+\r
+       /** Initialize the test data */\r
        public void setTestData(TestData testData);\r
 }\r
index 82b3e19a8d9677e820c5e3b81ccb3c62aa0924b8..d88d2de567e98fe216e896a8296bcb266b6af080 100644 (file)
@@ -1,5 +1,6 @@
 package org.argeo.slc.core.test;\r
 \r
+/** The result of a test (<b>NOT YET IMPLEMENTED</b>)*/\r
 public interface TestResult {\r
 \r
 }\r
index 8ca012f37d159d91ded53b50f03e7cd6bc56da7e..f77169707991edeea5bb9a01b29dc28772233e8e 100644 (file)
@@ -1,5 +1,6 @@
 package org.argeo.slc.core.test;\r
 \r
+/** The actual run of a test (<b>NOT YET IMPLEMENTED</b>)*/\r
 public interface TestRun {\r
 \r
 }\r
index c3cd254ad2baf95d5935bfca06b4af268c26aea0..738c03eeb0747dfd80a2959ec2402c0f17fc6c9e 100644 (file)
@@ -31,9 +31,9 @@ public class DummyTestData extends DefaultTreeSAware implements TestData {
                if (expected instanceof TreeSAware) {\r
                        TreeSAware sAware = (TreeSAware) expected;\r
                        TreeSElement element = ((TreeSElement) getElement()).createChild(\r
-                                       "expected" + getChildren().size(), "<no desc>");\r
+                                       "expected" + getPropagationList().size(), "<no desc>");\r
                        sAware.setElement(element);\r
-                       addChild(sAware);\r
+                       addToPropagationList(sAware);\r
                }\r
                super.onRegister(registry);\r
        }\r