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
+++ /dev/null
-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
+++ /dev/null
-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
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
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
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
\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
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
\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
\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
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
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
--- /dev/null
+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
--- /dev/null
+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
\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
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
--- /dev/null
+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
--- /dev/null
+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
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
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
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
\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
--- /dev/null
+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
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
\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
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
\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
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
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
}\r
return currPath;\r
}\r
- \r
+\r
@Override\r
- public String toString(){\r
+ public String toString() {\r
return getAsUniqueString();\r
}\r
\r
}\r
return false;\r
}\r
- \r
- \r
+\r
}\r
+++ /dev/null
-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
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
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
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
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
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
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