--- /dev/null
+package org.argeo.slc.ant;\r
+\r
+import java.io.File;\r
+import java.util.List;\r
+import java.util.Vector;\r
+\r
+import org.apache.commons.logging.Log;\r
+import org.apache.commons.logging.LogFactory;\r
+import org.apache.tools.ant.Project;\r
+import org.apache.tools.ant.ProjectHelper;\r
+\r
+import org.argeo.slc.core.structure.StructureElement;\r
+import org.argeo.slc.core.structure.StructurePath;\r
+import org.argeo.slc.core.structure.StructureRegistry;\r
+\r
+public class AntRegistryUtil {\r
+ private static Log log = LogFactory.getLog(AntRegistryUtil.class);\r
+\r
+ public static StructureRegistry readRegistry(File antFile) {\r
+\r
+ Project p = new Project();\r
+ p.setUserProperty("ant.file", antFile.getAbsolutePath());\r
+ p.init();\r
+ ProjectHelper helper = new SlcProjectHelper();\r
+ p.addReference("ant.projectHelper", helper);\r
+ helper.parse(p, antFile);\r
+\r
+ StructureRegistry registry = (StructureRegistry) p\r
+ .getReference(SlcProjectHelper.REF_STRUCTURE_REGISTRY);\r
+ registry.setMode(StructureRegistry.READ);\r
+\r
+ p.executeTarget(p.getDefaultTarget());\r
+ return registry;\r
+ }\r
+\r
+ public static void runActive(File antFile, List<StructurePath> activePaths) {\r
+\r
+ Project p = new Project();\r
+ p.setUserProperty("ant.file", antFile.getAbsolutePath());\r
+ p.init();\r
+ ProjectHelper helper = new SlcProjectHelper();\r
+ p.addReference("ant.projectHelper", helper);\r
+ helper.parse(p, antFile);\r
+\r
+ StructureRegistry registry = (StructureRegistry) p\r
+ .getReference(SlcProjectHelper.REF_STRUCTURE_REGISTRY);\r
+ registry.setMode(StructureRegistry.ACTIVE);\r
+ registry.setActivePaths(activePaths);\r
+ p.executeTarget(p.getDefaultTarget());\r
+ }\r
+\r
+ public static void main(String[] args) {\r
+ File antFile = new File(\r
+ "C:/dev/workspaces/default/org.argeo.slc/src/test/ant/build.xml");\r
+ System\r
+ .setProperty(SlcProjectHelper.PROP_APPLICATION_CONTEXT,\r
+ "C:/dev/workspaces/default/org.argeo.slc/src/test/ant/applicationContext.xml");\r
+ StructureRegistry registry = AntRegistryUtil.readRegistry(antFile);\r
+\r
+ StringBuffer buf = new StringBuffer("");\r
+\r
+ int count = 0;\r
+ List<StructurePath> activePaths = new Vector<StructurePath>();\r
+ for (StructureElement element : registry.listElements()) {\r
+ buf.append(element.getPath());\r
+ if (count != 0 && count % 2 == 0) {\r
+ // skip\r
+ } else {\r
+ activePaths.add(element.getPath());\r
+ buf.append(" <");\r
+ }\r
+ buf.append('\n');\r
+ count++;\r
+ }\r
+ log.info(buf);\r
+\r
+ runActive(antFile, activePaths);\r
+\r
+ }\r
+\r
+}\r
package org.argeo.slc.ant;\r
\r
import org.argeo.slc.ant.spring.AbstractSpringArg;\r
-import org.argeo.slc.core.structure.tree.DefaultTreeSAware;\r
+import org.argeo.slc.core.structure.StructureRegistry;\r
+import org.argeo.slc.core.structure.tree.TreeSAware;\r
import org.argeo.slc.core.structure.tree.TreeSElement;\r
\r
public abstract class SAwareArg extends AbstractSpringArg {\r
- private DefaultTreeSAware parentSAware;\r
+ private TreeSAware parentSAware;\r
\r
@Override\r
protected Object getBeanInstance() {\r
Object obj = super.getBeanInstance();\r
\r
- if (obj instanceof DefaultTreeSAware && parentSAware!=null) {\r
- DefaultTreeSAware sAware = (DefaultTreeSAware) obj;\r
+ if (obj instanceof TreeSAware && parentSAware != null) {\r
+ TreeSAware sAware = (TreeSAware) obj;\r
TreeSElement parentElement = (TreeSElement) parentSAware\r
.getElement();\r
String name = getBean() + parentElement.getChildren().size();\r
getDescription() != null ? getDescription()\r
: "<no bean desc>");\r
sAware.setElement(element);\r
- \r
+\r
parentSAware.addChild(sAware);\r
+ StructureRegistry registry = (StructureRegistry) getProject()\r
+ .getReference(SlcProjectHelper.REF_STRUCTURE_REGISTRY);\r
+ registry.register(sAware);\r
}\r
return obj;\r
}\r
\r
- public void setParentSAware(DefaultTreeSAware parentSAware) {\r
+ public void setParentSAware(TreeSAware parentSAware) {\r
this.parentSAware = parentSAware;\r
}\r
\r
- \r
}\r
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.core.structure.StructurePath;\r
import org.argeo.slc.core.structure.StructureRegistry;\r
import org.argeo.slc.core.structure.tree.DefaultTreeSAware;\r
+import org.argeo.slc.core.structure.tree.TreeSAware;\r
import org.argeo.slc.core.structure.tree.TreeSElement;\r
import org.argeo.slc.core.structure.tree.TreeSPath;\r
\r
public abstract class SAwareTask extends AbstractSpringTask {\r
- protected final DefaultTreeSAware sAware = new DefaultTreeSAware();\r
+ protected final TreeSAware sAware = new DefaultTreeSAware();\r
\r
@Override\r
public void init() throws BuildException {\r
- StructureRegistry registry = (StructureRegistry) getProject()\r
- .getReference(SlcProjectHelper.REF_STRUCTURE_REGISTRY);\r
+ StructureRegistry registry = getRegistry();\r
Target target = getOwningTarget();\r
TreeSElement projectElement = (TreeSElement) registry\r
.getElement(SlcProjectHelper.getProjectPath(getProject()));\r
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
import org.apache.tools.ant.Project;\r
import org.apache.tools.ant.helper.ProjectHelperImpl;\r
\r
-import org.argeo.slc.core.structure.StructurePath;\r
import org.argeo.slc.core.structure.tree.TreeSElement;\r
import org.argeo.slc.core.structure.tree.TreeSPath;\r
import org.argeo.slc.core.structure.tree.TreeSRegistry;\r
\r
public class SlcProjectHelper extends ProjectHelperImpl {\r
public static String PROP_APPLICATION_CONTEXT = "org.argeo.slc.slcRootContext";\r
+ //public static String PROP_REGISTRY_MODE = "org.argeo.slc.slcRegistryMode";\r
public static String REF_ROOT_CONTEXT = "slcApplicationContext";\r
public static String REF_STRUCTURE_REGISTRY = "slcStructureRegistry";\r
\r
ApplicationContext context = new FileSystemXmlApplicationContext(acPath);\r
project.addReference(REF_ROOT_CONTEXT, context);\r
\r
- // init structure register\r
- TreeSRegistry registry = new TreeSRegistry();\r
- project.addReference(REF_STRUCTURE_REGISTRY, registry);\r
+ // init structure register if it does not exist\r
+ TreeSRegistry registry = new TreeSRegistry();\r
+ project.addReference(REF_STRUCTURE_REGISTRY, registry);\r
\r
- // call the underlying implementation to do the actual work\r
- super.parse(project, source);\r
+ // call the underlying implementation to do the actual work\r
+ super.parse(project, source);\r
\r
- String projectDescription = project.getDescription() != null ? project\r
- .getDescription() : "Root";\r
- TreeSElement element = TreeSElement.createRootElelment(\r
- getProjectPathName(project), projectDescription);\r
- registry.register(element);\r
+ String projectDescription = project.getDescription() != null ? project\r
+ .getDescription()\r
+ : "Root";\r
+ TreeSElement element = TreeSElement.createRootElelment(\r
+ getProjectPathName(project), projectDescription);\r
+ registry.register(element);\r
}\r
\r
private static void stdOut(Object o) {\r
\r
import org.argeo.slc.ant.SAwareArg;\r
import org.argeo.slc.ant.SAwareTask;\r
-import org.argeo.slc.ant.spring.AbstractSpringArg;\r
-import org.argeo.slc.ant.spring.AbstractSpringTask;\r
import org.argeo.slc.core.test.TestData;\r
import org.argeo.slc.core.test.TestDefinition;\r
\r
private TestDataArg testDataArg;\r
\r
@Override\r
- public void execute() throws BuildException {\r
+ public void executeActions(String mode) throws BuildException {\r
TestDefinition testDefinition = testDefinitionArg.getTestDefinition();\r
testDefinition.setTestData(testDataArg.getTestData());\r
testDefinition.execute();\r
public interface StructureElement {\r
public StructurePath getPath();\r
public String getDescription();\r
- public Boolean getActive();\r
- public void setActive(Boolean active);\r
}\r
import java.util.List;\r
\r
public interface StructureRegistry {\r
+ public static String READ = "READ";\r
+ public static String ALL = "ALL";\r
+ public static String ACTIVE = "ACTIVE";\r
+ \r
public void register(StructureElement element);\r
public void register(StructureAware structureAware);\r
public List<StructureElement> listElements();\r
\r
public StructureElement getElement(StructurePath path);\r
+ \r
+ public void setMode(String mode);\r
+ public String getMode();\r
+ \r
+ public List<StructurePath> getActivePaths();\r
+ public void setActivePaths(List<StructurePath> activePaths);\r
}\r
import java.util.List;\r
import java.util.Vector;\r
\r
-import org.argeo.slc.core.structure.StructureAware;\r
import org.argeo.slc.core.structure.StructureElement;\r
import org.argeo.slc.core.structure.StructureRegistry;\r
\r
-public class DefaultTreeSAware implements StructureAware{\r
+public class DefaultTreeSAware implements TreeSAware{\r
private TreeSElement element;\r
- private List<StructureAware> children = new Vector<StructureAware>();\r
+ private List<TreeSAware> children = new Vector<TreeSAware>();\r
\r
public StructureElement getElement() {\r
return element;\r
}\r
\r
public void onRegister(StructureRegistry registry) {\r
- for(StructureAware sAware : children){\r
+ for(TreeSAware sAware : children){\r
registry.register(sAware.getElement());\r
sAware.onRegister(registry);\r
}\r
}\r
\r
- public void addChild(StructureAware sAware){\r
+ public void addChild(TreeSAware sAware){\r
children.add(sAware);\r
}\r
+\r
+ public List<TreeSAware> getChildren() {\r
+ return children;\r
+ }\r
+ \r
}\r
--- /dev/null
+package org.argeo.slc.core.structure.tree;\r
+\r
+import java.util.List;\r
+\r
+import org.argeo.slc.core.structure.StructureAware;\r
+\r
+public interface TreeSAware extends StructureAware{\r
+ public void setElement(TreeSElement element);\r
+\r
+ public void addChild(TreeSAware sAware);\r
+ public List<TreeSAware> getChildren();\r
+}\r
public class TreeSElement implements StructureElement {\r
private String description;\r
private TreeSPath path;\r
- private Boolean active;\r
\r
private List<TreeSElement> children = new Vector<TreeSElement>();\r
\r
return path;\r
}\r
\r
- public Boolean getActive() {\r
- return active;\r
- }\r
-\r
- public void setActive(Boolean active) {\r
- this.active = active;\r
- }\r
-\r
public List<TreeSElement> getChildren() {\r
return children;\r
}\r
\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
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
-<project default="test">\r
+<project default="test" name="testProject">\r
+ <description>A Test project</description>\r
+ \r
<taskdef name="slc.test" classname="org.argeo.slc.ant.test.SlcTestTask" />\r
\r
<target name="test" depends="testSimple,testObj">\r
</target>\r
\r
- <target name="testSimple">\r
+ <target name="testSimple" description="A simple test">\r
<!-- Success -->\r
<slc.test>\r
<testDefinition bean="dummyTestDefinition" />\r
</slc.test>\r
</target>\r
\r
- <target name="testObj">\r
+ <target name="testObj" description="An object test">\r
<!-- Success -->\r
<slc.test>\r
- <testDefinition bean="dummyTestDefinition" />\r
- <testData bean="dummyTestDataObjOK" />\r
+ <testDefinition bean="dummyTestDefinition"/>\r
+ <testData bean="dummyTestDataObjOK" description="A dummy testDef"/>\r
</slc.test>\r
\r
<!-- Failure -->\r
package org.argeo.slc.testslc;\r
\r
+import org.argeo.slc.core.structure.StructureRegistry;\r
+import org.argeo.slc.core.structure.tree.DefaultTreeSAware;\r
+import org.argeo.slc.core.structure.tree.TreeSAware;\r
+import org.argeo.slc.core.structure.tree.TreeSElement;\r
import org.argeo.slc.core.test.TestData;\r
\r
-public class DummyTestData implements TestData {\r
+public class DummyTestData extends DefaultTreeSAware implements TestData {\r
private Object reached;\r
private Object expected;\r
\r
this.expected = expected;\r
}\r
\r
+ @Override\r
+ public void onRegister(StructureRegistry registry) {\r
+ if (expected instanceof TreeSAware) {\r
+ TreeSAware sAware = (TreeSAware) expected;\r
+ TreeSElement element = ((TreeSElement) getElement()).createChild(\r
+ "expected" + getChildren().size(), "<no desc>");\r
+ sAware.setElement(element);\r
+ addChild(sAware);\r
+ }\r
+ super.onRegister(registry);\r
+ }\r
+ \r
+ \r
+\r
}\r
package org.argeo.slc.testslc;\r
\r
-public class DummyTestDataObject {\r
- private Object value;\r
+import org.argeo.slc.core.structure.tree.DefaultTreeSAware;\r
\r
+public class DummyTestDataObject extends DefaultTreeSAware{\r
+ private Object value;\r
+ \r
public Object getValue() {\r
return value;\r
}\r