From: Mathieu Baudier Date: Wed, 24 Oct 2007 15:01:48 +0000 (+0000) Subject: Improve documentation. X-Git-Tag: argeo-slc-2.1.7~3206 X-Git-Url: http://git.argeo.org/?a=commitdiff_plain;h=6e6998e19852f8209f955c0d2c773feca161d4d0;p=gpl%2Fargeo-slc.git Improve documentation. Fix issue with propagation to beans git-svn-id: https://svn.argeo.org/slc/trunk@637 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- 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/SAwareTask.java b/org.argeo.slc/src/main/java/org/argeo/slc/ant/SAwareTask.java deleted file mode 100644 index ef438c32e..000000000 --- a/org.argeo.slc/src/main/java/org/argeo/slc/ant/SAwareTask.java +++ /dev/null @@ -1,69 +0,0 @@ -package org.argeo.slc.ant; - -import java.util.List; - -import org.apache.tools.ant.BuildException; -import org.apache.tools.ant.Target; - -import org.argeo.slc.ant.spring.AbstractSpringTask; -import org.argeo.slc.core.structure.StructurePath; -import org.argeo.slc.core.structure.StructureRegistry; -import org.argeo.slc.core.structure.tree.DefaultTreeSAware; -import org.argeo.slc.core.structure.tree.TreeSAware; -import org.argeo.slc.core.structure.tree.TreeSElement; -import org.argeo.slc.core.structure.tree.TreeSPath; - -public abstract class SAwareTask extends AbstractSpringTask { - protected final TreeSAware sAware = new DefaultTreeSAware(); - - @Override - public void init() throws BuildException { - StructureRegistry registry = getRegistry(); - Target target = getOwningTarget(); - TreeSElement projectElement = (TreeSElement) registry - .getElement(SlcProjectHelper.getProjectPath(getProject())); - TreeSElement targetElement = (TreeSElement) registry - .getElement(createTargetPath(target)); - - if (targetElement == null) { - // create target element - targetElement = projectElement.createChild(target.getName(), target - .getDescription() != null ? target.getDescription() - : ""); - registry.register(targetElement); - } - - TreeSElement taskElement = targetElement.createChild(getTaskName() - + targetElement.getChildren().size(), - getDescription() != null ? getDescription() : ""); - sAware.setElement(taskElement); - registry.register(sAware); - } - - @Override - public final void execute() throws BuildException { - 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); - } - } - - } - - protected abstract void executeActions(String mode); - - protected StructureRegistry getRegistry() { - return (StructureRegistry) getProject().getReference( - SlcProjectHelper.REF_STRUCTURE_REGISTRY); - } - - protected static StructurePath createTargetPath(Target target) { - TreeSPath projectPath = SlcProjectHelper.getProjectPath(target - .getProject()); - return TreeSPath.createChild(projectPath, target.getName()); - } -} 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/structure/SAwareTask.java b/org.argeo.slc/src/main/java/org/argeo/slc/ant/structure/SAwareTask.java new file mode 100644 index 000000000..3defcd73f --- /dev/null +++ b/org.argeo.slc/src/main/java/org/argeo/slc/ant/structure/SAwareTask.java @@ -0,0 +1,92 @@ +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; +import org.argeo.slc.core.structure.tree.DefaultTreeSAware; +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 { + StructureRegistry registry = getRegistry(); + Target target = getOwningTarget(); + TreeSElement projectElement = (TreeSElement) registry + .getElement(SlcProjectHelper.getProjectPath(getProject())); + TreeSElement targetElement = (TreeSElement) registry + .getElement(createTargetPath(target)); + + if (targetElement == null) { + // create target element + targetElement = projectElement.createChild(target.getName(), target + .getDescription() != null ? target.getDescription() + : ""); + registry.register(targetElement); + } + + TreeSElement taskElement = targetElement.createChild(getTaskName() + + targetElement.getChildren().size(), + getDescription() != null ? getDescription() : ""); + sAware.setElement(taskElement); + } + + @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(); + + 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()); + return TreeSPath.createChild(projectPath, target.getName()); + } +} 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/DefaultSRegistry.java b/org.argeo.slc/src/main/java/org/argeo/slc/core/structure/DefaultSRegistry.java new file mode 100644 index 000000000..3d6317078 --- /dev/null +++ b/org.argeo.slc/src/main/java/org/argeo/slc/core/structure/DefaultSRegistry.java @@ -0,0 +1,62 @@ +package org.argeo.slc.core.structure; + +import java.util.List; +import java.util.Vector; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +/** Default implementation of a StructureRegistry.*/ +public class DefaultSRegistry implements StructureRegistry { + private static Log log = LogFactory.getLog(DefaultSRegistry.class); + + private List elements = new Vector(); + private List paths = new Vector(); + private String mode = StructureRegistry.ALL; + + private List activePaths; + + public List listElements() { + return new Vector(elements); + } + + public void register(StructureElement element) { + StructureElement treeSElement = element; + elements.add(treeSElement); + paths.add( treeSElement.getPath()); + log.debug("Registered " + treeSElement.getPath() + " (desc: " + + treeSElement.getDescription() + " position: " + + elements.size() + ")"); + } + + public void register(StructureAware structureAware) { + register(structureAware.getElement()); + structureAware.onRegister(this); + } + + public StructureElement getElement(StructurePath path) { + int index = paths.indexOf(path); + if (index >= 0) { + return elements.get(index); + } else {// not found + return null; + } + } + + public String getMode() { + return mode; + } + + public void setMode(String mode) { + this.mode = mode; + } + + public List getActivePaths() { + return activePaths; + } + + 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/structure/tree/TreeSRegistry.java b/org.argeo.slc/src/main/java/org/argeo/slc/core/structure/tree/TreeSRegistry.java deleted file mode 100644 index 38c12add2..000000000 --- a/org.argeo.slc/src/main/java/org/argeo/slc/core/structure/tree/TreeSRegistry.java +++ /dev/null @@ -1,75 +0,0 @@ -package org.argeo.slc.core.structure.tree; - -import java.util.List; -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; - -public class TreeSRegistry implements StructureRegistry { - private static Log log = LogFactory.getLog(TreeSRegistry.class); - - private List elements = new Vector(); - private List paths = new Vector(); - private String mode = StructureRegistry.ALL; - - private List activePaths; - - public List listElements() { - return new Vector(elements); - } - - public void register(StructureElement element) { - TreeSElement treeSElement = checkElement(element); - elements.add(treeSElement); - paths.add((TreeSPath) treeSElement.getPath()); - log.debug("Registered " + treeSElement.getPath() + " (desc: " - + treeSElement.getDescription() + " position: " - + elements.size() + ")"); - } - - public void register(StructureAware structureAware) { - register(structureAware.getElement()); - structureAware.onRegister(this); - } - - public StructureElement getElement(StructurePath path) { - int index = paths.indexOf(path); - if (index >= 0) { - return elements.get(index); - } else {// not found - return null; - } - } - - 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; - } - - public void setMode(String mode) { - this.mode = mode; - } - - public List getActivePaths() { - return activePaths; - } - - public void setActivePaths(List activePaths) { - this.activePaths = activePaths; - } - - -} 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); }