From 6e6998e19852f8209f955c0d2c773feca161d4d0 Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Wed, 24 Oct 2007 15:01:48 +0000 Subject: [PATCH] Improve documentation. Fix issue with propagation to beans git-svn-id: https://svn.argeo.org/slc/trunk@637 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- .../org/argeo/slc/ant/AntRegistryUtil.java | 2 +- .../java/org/argeo/slc/ant/SAwareArg.java | 37 --------- .../org/argeo/slc/ant/SlcProjectHelper.java | 6 +- .../slc/ant/spring/AbstractSpringArg.java | 9 ++ .../slc/ant/spring/AbstractSpringTask.java | 2 + .../org/argeo/slc/ant/spring/OverrideArg.java | 8 +- .../argeo/slc/ant/structure/SAwareArg.java | 82 +++++++++++++++++++ .../slc/ant/{ => structure}/SAwareTask.java | 33 ++++++-- .../org/argeo/slc/ant/test/SlcTestTask.java | 11 +-- ...eeSRegistry.java => DefaultSRegistry.java} | 31 ++----- .../slc/core/structure/PropagatingSAware.java | 19 +++++ .../slc/core/structure/StructureAware.java | 8 +- .../slc/core/structure/StructureElement.java | 4 + .../slc/core/structure/StructurePath.java | 11 +++ .../slc/core/structure/StructureRegistry.java | 45 +++++++++- .../slc/core/structure/WritableSAware.java | 10 +++ .../structure/tree/DefaultTreeSAware.java | 22 +++-- .../slc/core/structure/tree/TreeSAware.java | 13 ++- .../slc/core/structure/tree/TreeSElement.java | 6 ++ .../slc/core/structure/tree/TreeSPath.java | 20 +++-- .../test/IncompatibleTestDataException.java | 7 +- .../org/argeo/slc/core/test/TestData.java | 4 + .../argeo/slc/core/test/TestDefinition.java | 8 +- .../org/argeo/slc/core/test/TestResult.java | 1 + .../java/org/argeo/slc/core/test/TestRun.java | 1 + .../org/argeo/slc/testslc/DummyTestData.java | 4 +- 26 files changed, 304 insertions(+), 100 deletions(-) delete mode 100644 org.argeo.slc/src/main/java/org/argeo/slc/ant/SAwareArg.java create mode 100644 org.argeo.slc/src/main/java/org/argeo/slc/ant/structure/SAwareArg.java rename org.argeo.slc/src/main/java/org/argeo/slc/ant/{ => structure}/SAwareTask.java (68%) rename org.argeo.slc/src/main/java/org/argeo/slc/core/structure/{tree/TreeSRegistry.java => DefaultSRegistry.java} (55%) create mode 100644 org.argeo.slc/src/main/java/org/argeo/slc/core/structure/PropagatingSAware.java create mode 100644 org.argeo.slc/src/main/java/org/argeo/slc/core/structure/WritableSAware.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 index c495b9253..a871d6fde 100644 --- 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 @@ -63,7 +63,7 @@ public class AntRegistryUtil { List activePaths = new Vector(); for (StructureElement element : registry.listElements()) { buf.append(element.getPath()); - if (count != 0 && count % 2 == 0) { + if (count != 0 && count % 3 == 0) { // skip } else { activePaths.add(element.getPath()); 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 index 1b648bed4..000000000 --- a/org.argeo.slc/src/main/java/org/argeo/slc/ant/SAwareArg.java +++ /dev/null @@ -1,37 +0,0 @@ -package org.argeo.slc.ant; - -import org.argeo.slc.ant.spring.AbstractSpringArg; -import org.argeo.slc.core.structure.StructureRegistry; -import org.argeo.slc.core.structure.tree.TreeSAware; -import org.argeo.slc.core.structure.tree.TreeSElement; - -public abstract class SAwareArg extends AbstractSpringArg { - private TreeSAware parentSAware; - - @Override - protected Object getBeanInstance() { - Object obj = super.getBeanInstance(); - - if (obj instanceof TreeSAware && parentSAware != null) { - TreeSAware sAware = (TreeSAware) obj; - TreeSElement parentElement = (TreeSElement) parentSAware - .getElement(); - String name = getBean() + parentElement.getChildren().size(); - TreeSElement element = parentElement.createChild(name, - getDescription() != null ? getDescription() - : ""); - sAware.setElement(element); - - parentSAware.addChild(sAware); - StructureRegistry registry = (StructureRegistry) getProject() - .getReference(SlcProjectHelper.REF_STRUCTURE_REGISTRY); - registry.register(sAware); - } - return obj; - } - - public void setParentSAware(TreeSAware parentSAware) { - this.parentSAware = parentSAware; - } - -} diff --git a/org.argeo.slc/src/main/java/org/argeo/slc/ant/SlcProjectHelper.java b/org.argeo.slc/src/main/java/org/argeo/slc/ant/SlcProjectHelper.java index 79160073b..2eb703e90 100644 --- a/org.argeo.slc/src/main/java/org/argeo/slc/ant/SlcProjectHelper.java +++ b/org.argeo.slc/src/main/java/org/argeo/slc/ant/SlcProjectHelper.java @@ -7,9 +7,9 @@ import org.apache.tools.ant.BuildException; import org.apache.tools.ant.Project; import org.apache.tools.ant.helper.ProjectHelperImpl; +import org.argeo.slc.core.structure.DefaultSRegistry; import org.argeo.slc.core.structure.tree.TreeSElement; import org.argeo.slc.core.structure.tree.TreeSPath; -import org.argeo.slc.core.structure.tree.TreeSRegistry; public class SlcProjectHelper extends ProjectHelperImpl { public static String PROP_APPLICATION_CONTEXT = "org.argeo.slc.slcRootContext"; @@ -28,7 +28,7 @@ public class SlcProjectHelper extends ProjectHelperImpl { project.addReference(REF_ROOT_CONTEXT, context); // init structure register if it does not exist - TreeSRegistry registry = new TreeSRegistry(); + DefaultSRegistry registry = new DefaultSRegistry(); project.addReference(REF_STRUCTURE_REGISTRY, registry); // call the underlying implementation to do the actual work @@ -46,7 +46,7 @@ public class SlcProjectHelper extends ProjectHelperImpl { System.out.println(o); } - static TreeSPath getProjectPath(Project project) { + public static TreeSPath getProjectPath(Project project) { return TreeSPath.createChild(null, getProjectPathName(project)); } diff --git a/org.argeo.slc/src/main/java/org/argeo/slc/ant/spring/AbstractSpringArg.java b/org.argeo.slc/src/main/java/org/argeo/slc/ant/spring/AbstractSpringArg.java index 4061f377f..86757751b 100644 --- a/org.argeo.slc/src/main/java/org/argeo/slc/ant/spring/AbstractSpringArg.java +++ b/org.argeo.slc/src/main/java/org/argeo/slc/ant/spring/AbstractSpringArg.java @@ -13,19 +13,26 @@ import org.apache.tools.ant.types.DataType; import org.argeo.slc.ant.SlcProjectHelper; +/** Abstract Ant type wrapping a Spring bean. */ public abstract class AbstractSpringArg extends DataType { private List overrides = new Vector(); private String bean; + /** The name of the underlying bean, as set throught the attribute. */ public String getBean() { return bean; } + /** Setter for the bean name. */ public void setBean(String bean) { this.bean = bean; } + /** + * Retrieve the instance of the bean. If teh underlying Spring bean is a + * prototype, it will instanciated each time. + */ protected Object getBeanInstance() { Object obj = getContext().getBean(bean); @@ -37,12 +44,14 @@ public abstract class AbstractSpringArg extends DataType { return obj; } + /** Creates an override subtag.*/ public OverrideArg createOverride() { OverrideArg propertyArg = new OverrideArg(); overrides.add(propertyArg); return propertyArg; } + /** The related Spring application context.*/ protected ApplicationContext getContext() { return (ApplicationContext) getProject().getReference( SlcProjectHelper.REF_ROOT_CONTEXT); diff --git a/org.argeo.slc/src/main/java/org/argeo/slc/ant/spring/AbstractSpringTask.java b/org.argeo.slc/src/main/java/org/argeo/slc/ant/spring/AbstractSpringTask.java index dfe954ebe..c732fd074 100644 --- a/org.argeo.slc/src/main/java/org/argeo/slc/ant/spring/AbstractSpringTask.java +++ b/org.argeo.slc/src/main/java/org/argeo/slc/ant/spring/AbstractSpringTask.java @@ -6,8 +6,10 @@ import org.apache.tools.ant.Task; import org.argeo.slc.ant.SlcProjectHelper; +/** Abstract Ant task providing access to a Spring context.*/ public abstract class AbstractSpringTask extends Task { + /** Gets the related Spring context.*/ protected ApplicationContext getContext() { return (ApplicationContext) getProject().getReference( SlcProjectHelper.REF_ROOT_CONTEXT); diff --git a/org.argeo.slc/src/main/java/org/argeo/slc/ant/spring/OverrideArg.java b/org.argeo.slc/src/main/java/org/argeo/slc/ant/spring/OverrideArg.java index 85a6e2c89..80eb4731b 100644 --- a/org.argeo.slc/src/main/java/org/argeo/slc/ant/spring/OverrideArg.java +++ b/org.argeo.slc/src/main/java/org/argeo/slc/ant/spring/OverrideArg.java @@ -2,11 +2,12 @@ package org.argeo.slc.ant.spring; import org.apache.tools.ant.BuildException; - +/** Ant type allowing to override bean properties. */ public class OverrideArg extends AbstractSpringArg { private String name; private Object value; + /** The nbame of the property to override. */ public String getName() { return name; } @@ -15,6 +16,7 @@ public class OverrideArg extends AbstractSpringArg { this.name = name; } + /** Both value and bean cannot be set. */ public void setValue(String value) { if (getBean() != null) { throw new BuildException( @@ -32,6 +34,10 @@ public class OverrideArg extends AbstractSpringArg { super.setBean(bean); } + /** + * The related object: the value if a value had been set or an instance of + * the bean if not. + */ public Object getObject() { if (value != null) { return value; 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 index 000000000..e96033b31 --- /dev/null +++ b/org.argeo.slc/src/main/java/org/argeo/slc/ant/structure/SAwareArg.java @@ -0,0 +1,82 @@ +package org.argeo.slc.ant.structure; + +import java.util.Collections; +import java.util.List; +import java.util.Vector; + +import org.springframework.util.CollectionUtils; + +import org.argeo.slc.ant.SlcProjectHelper; +import org.argeo.slc.ant.spring.AbstractSpringArg; +import org.argeo.slc.core.structure.PropagatingSAware; +import org.argeo.slc.core.structure.StructureAware; +import org.argeo.slc.core.structure.StructureElement; +import org.argeo.slc.core.structure.StructureRegistry; +import org.argeo.slc.core.structure.tree.TreeSAware; +import org.argeo.slc.core.structure.tree.TreeSElement; + +/** Ant types allowing to propagate structure informations.*/ +public abstract class SAwareArg extends AbstractSpringArg{ + //private TreeSAware parentSAware; + + @Override + protected Object getBeanInstance() { + Object obj = super.getBeanInstance(); +/* + if (obj instanceof TreeSAware && parentSAware != null) { + TreeSAware sAware = (TreeSAware) obj; + TreeSElement parentElement = (TreeSElement) parentSAware + .getElement(); + String name = getBean() + parentElement.getChildren().size(); + TreeSElement element = parentElement.createChild(name, + getDescription() != null ? getDescription() + : ""); + sAware.setElement(element); + + parentSAware.addToPropagationList(sAware); +// StructureRegistry registry = (StructureRegistry) getProject() +// .getReference(SlcProjectHelper.REF_STRUCTURE_REGISTRY); +// registry.register(parentSAware); + } + */ + return obj; + } + + public void init(TreeSAware parentSAware){ + + Object obj = super.getBeanInstance(); + + if (obj instanceof TreeSAware && parentSAware != null) { + TreeSAware sAware = (TreeSAware) obj; + TreeSElement parentElement = (TreeSElement) parentSAware + .getElement(); + String name = getBean() + parentElement.getChildren().size(); + TreeSElement element = parentElement.createChild(name, + getDescription() != null ? getDescription() + : ""); + sAware.setElement(element); + + parentSAware.addToPropagationList(sAware); +// StructureRegistry registry = (StructureRegistry) getProject() +// .getReference(SlcProjectHelper.REF_STRUCTURE_REGISTRY); +// registry.register(parentSAware); + } + } + +// public void setParentSAware(TreeSAware parentSAware) { +// this.parentSAware = parentSAware; +// } + + + public StructureElement getElement() { + // TODO Auto-generated method stub + return null; + } + + public void onRegister(StructureRegistry registry) { + // TODO Auto-generated method stub + + } + + +} 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/structure/SAwareTask.java similarity index 68% rename from org.argeo.slc/src/main/java/org/argeo/slc/ant/SAwareTask.java rename to org.argeo.slc/src/main/java/org/argeo/slc/ant/structure/SAwareTask.java index ef438c32e..3defcd73f 100644 --- a/org.argeo.slc/src/main/java/org/argeo/slc/ant/SAwareTask.java +++ b/org.argeo.slc/src/main/java/org/argeo/slc/ant/structure/SAwareTask.java @@ -1,10 +1,12 @@ -package org.argeo.slc.ant; +package org.argeo.slc.ant.structure; import java.util.List; +import java.util.Vector; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.Target; +import org.argeo.slc.ant.SlcProjectHelper; import org.argeo.slc.ant.spring.AbstractSpringTask; import org.argeo.slc.core.structure.StructurePath; import org.argeo.slc.core.structure.StructureRegistry; @@ -13,8 +15,10 @@ import org.argeo.slc.core.structure.tree.TreeSAware; import org.argeo.slc.core.structure.tree.TreeSElement; import org.argeo.slc.core.structure.tree.TreeSPath; +/** Ant task that can be registered within a structure. */ public abstract class SAwareTask extends AbstractSpringTask { protected final TreeSAware sAware = new DefaultTreeSAware(); + protected final List sAwareArgs = new Vector(); @Override public void init() throws BuildException { @@ -37,30 +41,49 @@ public abstract class SAwareTask extends AbstractSpringTask { + targetElement.getChildren().size(), getDescription() != null ? getDescription() : ""); sAware.setElement(taskElement); - registry.register(sAware); } @Override + /** + * Called by Ant at runtime. Decides whether to call the actions depending + * of the mode of the underlying structure registry. + * + * @see #executeActions + * @see StructureRegistry + */ public final void execute() throws BuildException { + for(SAwareArg arg : sAwareArgs){ + arg.init(sAware); + } + + getRegistry().register(sAware); + String mode = getRegistry().getMode(); if (mode.equals(StructureRegistry.ALL)) { executeActions(mode); } else if (mode.equals(StructureRegistry.ACTIVE)) { List activePaths = getRegistry().getActivePaths(); - if (activePaths.contains(sAware.getElement().getPath())) { - executeActions(mode); - } + + StructurePath targetPath = createTargetPath(getOwningTarget()); + if(activePaths.contains(targetPath)){ + if (activePaths.contains(sAware.getElement().getPath())) { + executeActions(mode); + } + } } } + /** Actions to be executed by the implementor. */ protected abstract void executeActions(String mode); + /** Gets the underlying structure registry. */ protected StructureRegistry getRegistry() { return (StructureRegistry) getProject().getReference( SlcProjectHelper.REF_STRUCTURE_REGISTRY); } + /** Creates the path for a given Ant target. */ protected static StructurePath createTargetPath(Target target) { TreeSPath projectPath = SlcProjectHelper.getProjectPath(target .getProject()); diff --git a/org.argeo.slc/src/main/java/org/argeo/slc/ant/test/SlcTestTask.java b/org.argeo.slc/src/main/java/org/argeo/slc/ant/test/SlcTestTask.java index 15983aa08..a82538786 100644 --- a/org.argeo.slc/src/main/java/org/argeo/slc/ant/test/SlcTestTask.java +++ b/org.argeo.slc/src/main/java/org/argeo/slc/ant/test/SlcTestTask.java @@ -2,11 +2,12 @@ package org.argeo.slc.ant.test; import org.apache.tools.ant.BuildException; -import org.argeo.slc.ant.SAwareArg; -import org.argeo.slc.ant.SAwareTask; +import org.argeo.slc.ant.structure.SAwareArg; +import org.argeo.slc.ant.structure.SAwareTask; import org.argeo.slc.core.test.TestData; import org.argeo.slc.core.test.TestDefinition; +/** Ant task wrapping a test run.*/ public class SlcTestTask extends SAwareTask { private TestDefinitionArg testDefinitionArg; @@ -17,17 +18,17 @@ public class SlcTestTask extends SAwareTask { TestDefinition testDefinition = testDefinitionArg.getTestDefinition(); testDefinition.setTestData(testDataArg.getTestData()); testDefinition.execute(); - } + } public TestDefinitionArg createTestDefinition() { testDefinitionArg = new TestDefinitionArg(); - testDefinitionArg.setParentSAware(sAware); + sAwareArgs.add(testDefinitionArg); return testDefinitionArg; } public TestDataArg createTestData() { testDataArg = new TestDataArg(); - testDataArg.setParentSAware(sAware); + sAwareArgs.add(testDataArg); return testDataArg; } } 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/DefaultSRegistry.java similarity index 55% rename from org.argeo.slc/src/main/java/org/argeo/slc/core/structure/tree/TreeSRegistry.java rename to org.argeo.slc/src/main/java/org/argeo/slc/core/structure/DefaultSRegistry.java index 38c12add2..3d6317078 100644 --- 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/DefaultSRegistry.java @@ -1,4 +1,4 @@ -package org.argeo.slc.core.structure.tree; +package org.argeo.slc.core.structure; import java.util.List; import java.util.Vector; @@ -6,16 +6,12 @@ import java.util.Vector; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.argeo.slc.core.structure.StructureAware; -import org.argeo.slc.core.structure.StructureElement; -import org.argeo.slc.core.structure.StructurePath; -import org.argeo.slc.core.structure.StructureRegistry; +/** Default implementation of a StructureRegistry.*/ +public class DefaultSRegistry implements StructureRegistry { + private static Log log = LogFactory.getLog(DefaultSRegistry.class); -public class TreeSRegistry implements StructureRegistry { - private static Log log = LogFactory.getLog(TreeSRegistry.class); - - private List elements = new Vector(); - private List paths = new Vector(); + private List elements = new Vector(); + private List paths = new Vector(); private String mode = StructureRegistry.ALL; private List activePaths; @@ -25,9 +21,9 @@ public class TreeSRegistry implements StructureRegistry { } public void register(StructureElement element) { - TreeSElement treeSElement = checkElement(element); + StructureElement treeSElement = element; elements.add(treeSElement); - paths.add((TreeSPath) treeSElement.getPath()); + paths.add( treeSElement.getPath()); log.debug("Registered " + treeSElement.getPath() + " (desc: " + treeSElement.getDescription() + " position: " + elements.size() + ")"); @@ -47,14 +43,6 @@ public class TreeSRegistry implements StructureRegistry { } } - protected TreeSElement checkElement(StructureElement element) { - if (!(element instanceof TreeSElement)) { - throw new RuntimeException("Element class " + element.getClass() - + " is not supported."); - } - return (TreeSElement) element; - } - public String getMode() { return mode; } @@ -70,6 +58,5 @@ public class TreeSRegistry implements StructureRegistry { public void setActivePaths(List activePaths) { this.activePaths = activePaths; } - - + } 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 index 000000000..72072fd7c --- /dev/null +++ b/org.argeo.slc/src/main/java/org/argeo/slc/core/structure/PropagatingSAware.java @@ -0,0 +1,19 @@ +package org.argeo.slc.core.structure; + +import java.util.List; + +/** Structure aware object able to propagate registrtaion.*/ +public interface PropagatingSAware extends StructureAware { + /** + * Adds a structure aware to which registration should be propagated. The + * passed object will be registered when this object will be + * registered itself, so it should not have been registered before. It doesn't + * have to be consistent with the tree structure defined by tree based + * registry elements (although it will often make more sense). + */ + public void addToPropagationList(StructureAware sAware); + + /** Returns the list of structure aware to propagate to. */ + public List getPropagationList(); + +} diff --git a/org.argeo.slc/src/main/java/org/argeo/slc/core/structure/StructureAware.java b/org.argeo.slc/src/main/java/org/argeo/slc/core/structure/StructureAware.java index 8389ddaa2..b88e5d22e 100644 --- a/org.argeo.slc/src/main/java/org/argeo/slc/core/structure/StructureAware.java +++ b/org.argeo.slc/src/main/java/org/argeo/slc/core/structure/StructureAware.java @@ -1,7 +1,13 @@ package org.argeo.slc.core.structure; +/** + * Wrapper for an element, which is able to propagate registration to + * sub-elements. + */ public interface StructureAware { + /** Get the wrapped element.*/ public StructureElement getElement(); - /** Called after registration.*/ + + /** Called after registration. */ public void onRegister(StructureRegistry registry); } diff --git a/org.argeo.slc/src/main/java/org/argeo/slc/core/structure/StructureElement.java b/org.argeo.slc/src/main/java/org/argeo/slc/core/structure/StructureElement.java index 99ce86cd8..b7400d58a 100644 --- a/org.argeo.slc/src/main/java/org/argeo/slc/core/structure/StructureElement.java +++ b/org.argeo.slc/src/main/java/org/argeo/slc/core/structure/StructureElement.java @@ -1,6 +1,10 @@ package org.argeo.slc.core.structure; +/** Atomic element holding the reference to the element which is structured. */ public interface StructureElement { + /** Path to this element. */ public StructurePath getPath(); + + /** Description of this element. */ public String getDescription(); } diff --git a/org.argeo.slc/src/main/java/org/argeo/slc/core/structure/StructurePath.java b/org.argeo.slc/src/main/java/org/argeo/slc/core/structure/StructurePath.java index 6df30499c..452dc9514 100644 --- a/org.argeo.slc/src/main/java/org/argeo/slc/core/structure/StructurePath.java +++ b/org.argeo.slc/src/main/java/org/argeo/slc/core/structure/StructurePath.java @@ -1,5 +1,16 @@ package org.argeo.slc.core.structure; +/** + * Path allowing to uniquely identify a StructureElement within a + * registry. + * + * @see StructureElement + * @see StructurePath + */ public interface StructurePath { + /** + * Unique representation as a string. Most implementation will also provide + * a mean to interpret this string. + */ public String getAsUniqueString(); } diff --git a/org.argeo.slc/src/main/java/org/argeo/slc/core/structure/StructureRegistry.java b/org.argeo.slc/src/main/java/org/argeo/slc/core/structure/StructureRegistry.java index f574784d8..3ffb2d26f 100644 --- a/org.argeo.slc/src/main/java/org/argeo/slc/core/structure/StructureRegistry.java +++ b/org.argeo.slc/src/main/java/org/argeo/slc/core/structure/StructureRegistry.java @@ -2,20 +2,57 @@ package org.argeo.slc.core.structure; import java.util.List; +/** Registry where the whole structure is stored. */ public interface StructureRegistry { + /** Read mode: the structure is only read. */ public static String READ = "READ"; + /** All mode: everything is executed regardless of the active paths. */ public static String ALL = "ALL"; + /** Active mode: only teh active paths are executed. */ public static String ACTIVE = "ACTIVE"; - + + /** Adds an element to the registry. */ public void register(StructureElement element); + + /** + * Adds the wrapped element of a SructureAware, and + * propagates the registration. + */ public void register(StructureAware structureAware); + + /** Lists all registered elements. */ public List listElements(); - + + /** Gets a element based on its path. */ public StructureElement getElement(StructurePath path); - + + /** + * Set the interpreter mode: read, all or active. + * + * @see #READ + * @see #ALL + * @see #ACTIVE + */ public void setMode(String mode); + + /** + * Gets the current interpreter mode. + * + * @see #READ + * @see #ALL + * @see #ACTIVE + */ public String getMode(); - + + /** + * Gets the list of active paths, which will be run if executed in + * ACTIVE mode. + */ public List getActivePaths(); + + /** + * Sets the list of active path, which will be run if executed in + * ACTIVE mode. + */ public void setActivePaths(List activePaths); } 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 index 000000000..a5dcaea22 --- /dev/null +++ b/org.argeo.slc/src/main/java/org/argeo/slc/core/structure/WritableSAware.java @@ -0,0 +1,10 @@ +package org.argeo.slc.core.structure; + +import org.argeo.slc.core.structure.tree.TreeSElement; + +/** Structure aware object in which the wrapped element can be externally set. */ +public interface WritableSAware extends StructureAware { + /** Sets the wrapped element. */ + public void setElement(StructureElement element); + +} diff --git a/org.argeo.slc/src/main/java/org/argeo/slc/core/structure/tree/DefaultTreeSAware.java b/org.argeo.slc/src/main/java/org/argeo/slc/core/structure/tree/DefaultTreeSAware.java index aca54d273..0e470f4e1 100644 --- a/org.argeo.slc/src/main/java/org/argeo/slc/core/structure/tree/DefaultTreeSAware.java +++ b/org.argeo.slc/src/main/java/org/argeo/slc/core/structure/tree/DefaultTreeSAware.java @@ -3,34 +3,40 @@ package org.argeo.slc.core.structure.tree; import java.util.List; import java.util.Vector; +import org.argeo.slc.core.structure.StructureAware; import org.argeo.slc.core.structure.StructureElement; import org.argeo.slc.core.structure.StructureRegistry; -public class DefaultTreeSAware implements TreeSAware{ - private TreeSElement element; - private List children = new Vector(); +/** + * Default implementation of TreeSAware for tree based + * registries, using TreeSPath. Convenient to be wrapped in + * classes which cannot extend it. + */ +public class DefaultTreeSAware implements TreeSAware { + private StructureElement element; + private List children = new Vector(); public StructureElement getElement() { return element; } - public void setElement(TreeSElement element) { + public void setElement(StructureElement element) { this.element = element; } public void onRegister(StructureRegistry registry) { - for(TreeSAware sAware : children){ + for (StructureAware sAware : children) { registry.register(sAware.getElement()); sAware.onRegister(registry); } } - public void addChild(TreeSAware sAware){ + public void addToPropagationList(StructureAware sAware) { children.add(sAware); } - public List getChildren() { + public List getPropagationList() { return children; } - + } 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 index d25e805a3..ca5a5711d 100644 --- 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 @@ -2,11 +2,16 @@ package org.argeo.slc.core.structure.tree; import java.util.List; +import org.argeo.slc.core.structure.PropagatingSAware; import org.argeo.slc.core.structure.StructureAware; +import org.argeo.slc.core.structure.WritableSAware; -public interface TreeSAware extends StructureAware{ - public void setElement(TreeSElement element); +/** + * Provides methods to externally propagate tree related informations in tree + * based registries. + * + * @see TreeSElement + */ +public interface TreeSAware extends WritableSAware, PropagatingSAware { - public void addChild(TreeSAware sAware); - public List getChildren(); } diff --git a/org.argeo.slc/src/main/java/org/argeo/slc/core/structure/tree/TreeSElement.java b/org.argeo.slc/src/main/java/org/argeo/slc/core/structure/tree/TreeSElement.java index 14f97770d..6e3ff04a8 100644 --- a/org.argeo.slc/src/main/java/org/argeo/slc/core/structure/tree/TreeSElement.java +++ b/org.argeo.slc/src/main/java/org/argeo/slc/core/structure/tree/TreeSElement.java @@ -6,6 +6,12 @@ import java.util.Vector; import org.argeo.slc.core.structure.StructureElement; import org.argeo.slc.core.structure.StructurePath; +/** + * Implementation of StructureElement for tree based registries, + * using TreeSPath + * + * @see TreeSPath + */ public class TreeSElement implements StructureElement { private String description; private TreeSPath path; diff --git a/org.argeo.slc/src/main/java/org/argeo/slc/core/structure/tree/TreeSPath.java b/org.argeo.slc/src/main/java/org/argeo/slc/core/structure/tree/TreeSPath.java index 94d22b592..524f8adfb 100644 --- a/org.argeo.slc/src/main/java/org/argeo/slc/core/structure/tree/TreeSPath.java +++ b/org.argeo.slc/src/main/java/org/argeo/slc/core/structure/tree/TreeSPath.java @@ -4,7 +4,13 @@ import java.util.StringTokenizer; import org.argeo.slc.core.structure.StructurePath; +/** + * Path for tree based StructureRegistry implementations. + * + * @see TreeSRegistry + */ public class TreeSPath implements StructurePath { + /** Default character to use a separator: #. */ public static Character DEFAULT_SEPARATOR = '#'; private TreeSPath parent; @@ -16,18 +22,22 @@ public class TreeSPath implements StructurePath { return parentStr + separator + name; } + /** The separator actually used by this path. */ public Character getSeparator() { return separator; } + /** Gets the parent path. */ public TreeSPath getParent() { return parent; } + /** Gets the name part of the path. */ public String getName() { return name; } + /** Create a child path based on a parent path and a name. */ public static TreeSPath createChild(TreeSPath parent, String name) { TreeSPath path = new TreeSPath(); path.parent = parent; @@ -35,7 +45,8 @@ public class TreeSPath implements StructurePath { return path; } - public static TreeSPath createTreeSPath(String path, Character separator) { + /** Parses a string to a path. */ + public static TreeSPath parseToCreatePath(String path, Character separator) { StringTokenizer st = new StringTokenizer(path, Character .toString(separator)); @@ -49,9 +60,9 @@ public class TreeSPath implements StructurePath { } return currPath; } - + @Override - public String toString(){ + public String toString() { return getAsUniqueString(); } @@ -63,6 +74,5 @@ public class TreeSPath implements StructurePath { } return false; } - - + } diff --git a/org.argeo.slc/src/main/java/org/argeo/slc/core/test/IncompatibleTestDataException.java b/org.argeo.slc/src/main/java/org/argeo/slc/core/test/IncompatibleTestDataException.java index 664cb1aac..dcf075f9b 100644 --- a/org.argeo.slc/src/main/java/org/argeo/slc/core/test/IncompatibleTestDataException.java +++ b/org.argeo.slc/src/main/java/org/argeo/slc/core/test/IncompatibleTestDataException.java @@ -1,9 +1,14 @@ package org.argeo.slc.core.test; +/** + * Excception to throw when a test definition cannot interpret the provided tets + * data. + */ public class IncompatibleTestDataException extends RuntimeException { static final long serialVersionUID = 1l; - public IncompatibleTestDataException(TestData testData, TestDefinition testDefinition) { + public IncompatibleTestDataException(TestData testData, + TestDefinition testDefinition) { super("TestData " + testData.getClass() + " is not compatible with TestDefinition " + testDefinition.getClass()); diff --git a/org.argeo.slc/src/main/java/org/argeo/slc/core/test/TestData.java b/org.argeo.slc/src/main/java/org/argeo/slc/core/test/TestData.java index e3fddca4f..4105e0925 100644 --- a/org.argeo.slc/src/main/java/org/argeo/slc/core/test/TestData.java +++ b/org.argeo.slc/src/main/java/org/argeo/slc/core/test/TestData.java @@ -1,5 +1,9 @@ package org.argeo.slc.core.test; +/** + * Any data required by a test in order to run: configuration, expected, + * reached, etc. + */ public interface TestData { } diff --git a/org.argeo.slc/src/main/java/org/argeo/slc/core/test/TestDefinition.java b/org.argeo.slc/src/main/java/org/argeo/slc/core/test/TestDefinition.java index 3d1b4eddb..2eaf7bc8a 100644 --- a/org.argeo.slc/src/main/java/org/argeo/slc/core/test/TestDefinition.java +++ b/org.argeo.slc/src/main/java/org/argeo/slc/core/test/TestDefinition.java @@ -1,7 +1,13 @@ package org.argeo.slc.core.test; +/** + * The programmatic definition of a test, which will be associated with test + * data within a test run. + */ public interface TestDefinition { + /** Perform the test. */ public void execute(); - + + /** Initialize the test data */ public void setTestData(TestData testData); } diff --git a/org.argeo.slc/src/main/java/org/argeo/slc/core/test/TestResult.java b/org.argeo.slc/src/main/java/org/argeo/slc/core/test/TestResult.java index 82b3e19a8..d88d2de56 100644 --- a/org.argeo.slc/src/main/java/org/argeo/slc/core/test/TestResult.java +++ b/org.argeo.slc/src/main/java/org/argeo/slc/core/test/TestResult.java @@ -1,5 +1,6 @@ package org.argeo.slc.core.test; +/** The result of a test (NOT YET IMPLEMENTED)*/ public interface TestResult { } diff --git a/org.argeo.slc/src/main/java/org/argeo/slc/core/test/TestRun.java b/org.argeo.slc/src/main/java/org/argeo/slc/core/test/TestRun.java index 8ca012f37..f77169707 100644 --- a/org.argeo.slc/src/main/java/org/argeo/slc/core/test/TestRun.java +++ b/org.argeo.slc/src/main/java/org/argeo/slc/core/test/TestRun.java @@ -1,5 +1,6 @@ package org.argeo.slc.core.test; +/** The actual run of a test (NOT YET IMPLEMENTED)*/ public interface TestRun { } diff --git a/org.argeo.slc/src/test/java/org/argeo/slc/testslc/DummyTestData.java b/org.argeo.slc/src/test/java/org/argeo/slc/testslc/DummyTestData.java index c3cd254ad..738c03eeb 100644 --- a/org.argeo.slc/src/test/java/org/argeo/slc/testslc/DummyTestData.java +++ b/org.argeo.slc/src/test/java/org/argeo/slc/testslc/DummyTestData.java @@ -31,9 +31,9 @@ public class DummyTestData extends DefaultTreeSAware implements TestData { if (expected instanceof TreeSAware) { TreeSAware sAware = (TreeSAware) expected; TreeSElement element = ((TreeSElement) getElement()).createChild( - "expected" + getChildren().size(), ""); + "expected" + getPropagationList().size(), ""); sAware.setElement(element); - addChild(sAware); + addToPropagationList(sAware); } super.onRegister(registry); } -- 2.39.2