From: Mathieu Baudier Date: Tue, 23 Oct 2007 19:07:24 +0000 (+0000) Subject: Introduce active paths X-Git-Tag: argeo-slc-2.1.7~3208 X-Git-Url: http://git.argeo.org/?a=commitdiff_plain;h=40768ea8b087bc653a49c2400045f4c191e8e3b4;p=gpl%2Fargeo-slc.git Introduce active paths git-svn-id: https://svn.argeo.org/slc/trunk@633 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 new file mode 100644 index 000000000..c495b9253 --- /dev/null +++ b/org.argeo.slc/src/main/java/org/argeo/slc/ant/AntRegistryUtil.java @@ -0,0 +1,81 @@ +package org.argeo.slc.ant; + +import java.io.File; +import java.util.List; +import java.util.Vector; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.tools.ant.Project; +import org.apache.tools.ant.ProjectHelper; + +import org.argeo.slc.core.structure.StructureElement; +import org.argeo.slc.core.structure.StructurePath; +import org.argeo.slc.core.structure.StructureRegistry; + +public class AntRegistryUtil { + private static Log log = LogFactory.getLog(AntRegistryUtil.class); + + public static StructureRegistry readRegistry(File antFile) { + + Project p = new Project(); + p.setUserProperty("ant.file", antFile.getAbsolutePath()); + p.init(); + ProjectHelper helper = new SlcProjectHelper(); + p.addReference("ant.projectHelper", helper); + helper.parse(p, antFile); + + StructureRegistry registry = (StructureRegistry) p + .getReference(SlcProjectHelper.REF_STRUCTURE_REGISTRY); + registry.setMode(StructureRegistry.READ); + + p.executeTarget(p.getDefaultTarget()); + return registry; + } + + public static void runActive(File antFile, List activePaths) { + + Project p = new Project(); + p.setUserProperty("ant.file", antFile.getAbsolutePath()); + p.init(); + ProjectHelper helper = new SlcProjectHelper(); + p.addReference("ant.projectHelper", helper); + helper.parse(p, antFile); + + StructureRegistry registry = (StructureRegistry) p + .getReference(SlcProjectHelper.REF_STRUCTURE_REGISTRY); + registry.setMode(StructureRegistry.ACTIVE); + registry.setActivePaths(activePaths); + p.executeTarget(p.getDefaultTarget()); + } + + public static void main(String[] args) { + File antFile = new File( + "C:/dev/workspaces/default/org.argeo.slc/src/test/ant/build.xml"); + System + .setProperty(SlcProjectHelper.PROP_APPLICATION_CONTEXT, + "C:/dev/workspaces/default/org.argeo.slc/src/test/ant/applicationContext.xml"); + StructureRegistry registry = AntRegistryUtil.readRegistry(antFile); + + StringBuffer buf = new StringBuffer(""); + + int count = 0; + List activePaths = new Vector(); + for (StructureElement element : registry.listElements()) { + buf.append(element.getPath()); + if (count != 0 && count % 2 == 0) { + // skip + } else { + activePaths.add(element.getPath()); + buf.append(" <"); + } + buf.append('\n'); + count++; + } + log.info(buf); + + runActive(antFile, activePaths); + + } + +} 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 index 2d34f8405..1b648bed4 100644 --- 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 @@ -1,18 +1,19 @@ package org.argeo.slc.ant; import org.argeo.slc.ant.spring.AbstractSpringArg; -import org.argeo.slc.core.structure.tree.DefaultTreeSAware; +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 DefaultTreeSAware parentSAware; + private TreeSAware parentSAware; @Override protected Object getBeanInstance() { Object obj = super.getBeanInstance(); - if (obj instanceof DefaultTreeSAware && parentSAware!=null) { - DefaultTreeSAware sAware = (DefaultTreeSAware) obj; + if (obj instanceof TreeSAware && parentSAware != null) { + TreeSAware sAware = (TreeSAware) obj; TreeSElement parentElement = (TreeSElement) parentSAware .getElement(); String name = getBean() + parentElement.getChildren().size(); @@ -20,15 +21,17 @@ public abstract class SAwareArg extends AbstractSpringArg { 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(DefaultTreeSAware parentSAware) { + 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 index 089c55828..ef438c32e 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/SAwareTask.java @@ -1,5 +1,7 @@ package org.argeo.slc.ant; +import java.util.List; + import org.apache.tools.ant.BuildException; import org.apache.tools.ant.Target; @@ -7,16 +9,16 @@ 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 DefaultTreeSAware sAware = new DefaultTreeSAware(); + protected final TreeSAware sAware = new DefaultTreeSAware(); @Override public void init() throws BuildException { - StructureRegistry registry = (StructureRegistry) getProject() - .getReference(SlcProjectHelper.REF_STRUCTURE_REGISTRY); + StructureRegistry registry = getRegistry(); Target target = getOwningTarget(); TreeSElement projectElement = (TreeSElement) registry .getElement(SlcProjectHelper.getProjectPath(getProject())); @@ -38,6 +40,27 @@ public abstract class SAwareTask extends AbstractSpringTask { 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()); 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 f0afc92ef..79160073b 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,13 +7,13 @@ 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.StructurePath; 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"; + //public static String PROP_REGISTRY_MODE = "org.argeo.slc.slcRegistryMode"; public static String REF_ROOT_CONTEXT = "slcApplicationContext"; public static String REF_STRUCTURE_REGISTRY = "slcStructureRegistry"; @@ -27,18 +27,19 @@ public class SlcProjectHelper extends ProjectHelperImpl { ApplicationContext context = new FileSystemXmlApplicationContext(acPath); project.addReference(REF_ROOT_CONTEXT, context); - // init structure register - TreeSRegistry registry = new TreeSRegistry(); - project.addReference(REF_STRUCTURE_REGISTRY, registry); + // init structure register if it does not exist + TreeSRegistry registry = new TreeSRegistry(); + project.addReference(REF_STRUCTURE_REGISTRY, registry); - // call the underlying implementation to do the actual work - super.parse(project, source); + // call the underlying implementation to do the actual work + super.parse(project, source); - String projectDescription = project.getDescription() != null ? project - .getDescription() : "Root"; - TreeSElement element = TreeSElement.createRootElelment( - getProjectPathName(project), projectDescription); - registry.register(element); + String projectDescription = project.getDescription() != null ? project + .getDescription() + : "Root"; + TreeSElement element = TreeSElement.createRootElelment( + getProjectPathName(project), projectDescription); + registry.register(element); } private static void stdOut(Object o) { 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 4dcd31a3b..15983aa08 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 @@ -4,8 +4,6 @@ import org.apache.tools.ant.BuildException; import org.argeo.slc.ant.SAwareArg; import org.argeo.slc.ant.SAwareTask; -import org.argeo.slc.ant.spring.AbstractSpringArg; -import org.argeo.slc.ant.spring.AbstractSpringTask; import org.argeo.slc.core.test.TestData; import org.argeo.slc.core.test.TestDefinition; @@ -15,7 +13,7 @@ public class SlcTestTask extends SAwareTask { private TestDataArg testDataArg; @Override - public void execute() throws BuildException { + public void executeActions(String mode) throws BuildException { TestDefinition testDefinition = testDefinitionArg.getTestDefinition(); testDefinition.setTestData(testDataArg.getTestData()); testDefinition.execute(); 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 bbbb00531..99ce86cd8 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 @@ -3,6 +3,4 @@ package org.argeo.slc.core.structure; public interface StructureElement { public StructurePath getPath(); public String getDescription(); - public Boolean getActive(); - public void setActive(Boolean active); } 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 3856fad6e..f574784d8 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 @@ -3,9 +3,19 @@ package org.argeo.slc.core.structure; import java.util.List; public interface StructureRegistry { + public static String READ = "READ"; + public static String ALL = "ALL"; + public static String ACTIVE = "ACTIVE"; + public void register(StructureElement element); public void register(StructureAware structureAware); public List listElements(); public StructureElement getElement(StructurePath path); + + public void setMode(String mode); + public String getMode(); + + public List getActivePaths(); + public void setActivePaths(List activePaths); } 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 a5d9c21fb..aca54d273 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,13 +3,12 @@ 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 StructureAware{ +public class DefaultTreeSAware implements TreeSAware{ private TreeSElement element; - private List children = new Vector(); + private List children = new Vector(); public StructureElement getElement() { return element; @@ -20,13 +19,18 @@ public class DefaultTreeSAware implements StructureAware{ } public void onRegister(StructureRegistry registry) { - for(StructureAware sAware : children){ + for(TreeSAware sAware : children){ registry.register(sAware.getElement()); sAware.onRegister(registry); } } - public void addChild(StructureAware sAware){ + public void addChild(TreeSAware sAware){ children.add(sAware); } + + public List getChildren() { + 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 new file mode 100644 index 000000000..d25e805a3 --- /dev/null +++ b/org.argeo.slc/src/main/java/org/argeo/slc/core/structure/tree/TreeSAware.java @@ -0,0 +1,12 @@ +package org.argeo.slc.core.structure.tree; + +import java.util.List; + +import org.argeo.slc.core.structure.StructureAware; + +public interface TreeSAware extends StructureAware{ + public void setElement(TreeSElement element); + + 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 3c0ba12c2..14f97770d 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 @@ -9,7 +9,6 @@ import org.argeo.slc.core.structure.StructurePath; public class TreeSElement implements StructureElement { private String description; private TreeSPath path; - private Boolean active; private List children = new Vector(); @@ -25,14 +24,6 @@ public class TreeSElement implements StructureElement { return path; } - public Boolean getActive() { - return active; - } - - public void setActive(Boolean active) { - this.active = active; - } - public List getChildren() { return children; } 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 index b52b71d8e..38c12add2 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/tree/TreeSRegistry.java @@ -16,6 +16,9 @@ public class TreeSRegistry implements StructureRegistry { 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); @@ -51,4 +54,22 @@ public class TreeSRegistry implements StructureRegistry { } 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/test/ant/build.xml b/org.argeo.slc/src/test/ant/build.xml index ca90d0da3..76fa1c79b 100644 --- a/org.argeo.slc/src/test/ant/build.xml +++ b/org.argeo.slc/src/test/ant/build.xml @@ -1,10 +1,12 @@ - + + A Test project + - + @@ -26,11 +28,11 @@ - + - - + + 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 e63e197e7..c3cd254ad 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 @@ -1,8 +1,12 @@ package org.argeo.slc.testslc; +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.test.TestData; -public class DummyTestData implements TestData { +public class DummyTestData extends DefaultTreeSAware implements TestData { private Object reached; private Object expected; @@ -22,4 +26,18 @@ public class DummyTestData implements TestData { this.expected = expected; } + @Override + public void onRegister(StructureRegistry registry) { + if (expected instanceof TreeSAware) { + TreeSAware sAware = (TreeSAware) expected; + TreeSElement element = ((TreeSElement) getElement()).createChild( + "expected" + getChildren().size(), ""); + sAware.setElement(element); + addChild(sAware); + } + super.onRegister(registry); + } + + + } diff --git a/org.argeo.slc/src/test/java/org/argeo/slc/testslc/DummyTestDataObject.java b/org.argeo.slc/src/test/java/org/argeo/slc/testslc/DummyTestDataObject.java index 34b00d23d..61a2df97a 100644 --- a/org.argeo.slc/src/test/java/org/argeo/slc/testslc/DummyTestDataObject.java +++ b/org.argeo.slc/src/test/java/org/argeo/slc/testslc/DummyTestDataObject.java @@ -1,8 +1,10 @@ package org.argeo.slc.testslc; -public class DummyTestDataObject { - private Object value; +import org.argeo.slc.core.structure.tree.DefaultTreeSAware; +public class DummyTestDataObject extends DefaultTreeSAware{ + private Object value; + public Object getValue() { return value; }