From: Mathieu Baudier Date: Fri, 1 Feb 2008 09:10:16 +0000 (+0000) Subject: Add map override X-Git-Tag: argeo-slc-2.1.7~3068 X-Git-Url: http://git.argeo.org/?a=commitdiff_plain;ds=inline;h=365feedf6431b7b24e23ccb8af532545b11b2e73;p=gpl%2Fargeo-slc.git Add map override git-svn-id: https://svn.argeo.org/slc/trunk@939 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- diff --git a/org.argeo.slc.core/src/main/java/org/argeo/slc/ant/spring/AbstractSpringArg.java b/org.argeo.slc.core/src/main/java/org/argeo/slc/ant/spring/AbstractSpringArg.java index b7a63c9d2..6096f1f63 100644 --- a/org.argeo.slc.core/src/main/java/org/argeo/slc/ant/spring/AbstractSpringArg.java +++ b/org.argeo.slc.core/src/main/java/org/argeo/slc/ant/spring/AbstractSpringArg.java @@ -11,6 +11,7 @@ import org.springframework.context.ApplicationContext; import org.apache.commons.logging.LogFactory; import org.apache.tools.ant.types.DataType; +import org.argeo.slc.ant.SlcAntException; import org.argeo.slc.ant.SlcProjectHelper; import org.argeo.slc.core.SlcException; @@ -40,13 +41,8 @@ public abstract class AbstractSpringArg extends DataType { public Object getBeanInstance() { if (beanInstance == null) { beanInstance = getContext().getBean(bean); - - BeanWrapper wrapper = new BeanWrapperImpl(beanInstance); - for (OverrideArg override : overrides) { - LogFactory.getLog(getClass()).debug("Prop "+override.getName()); - wrapper.setPropertyValue(override.getName(), override - .getObject()); - } + + setOverridenProperties(beanInstance); if (beanInstance instanceof InitializingBean) { try { @@ -58,6 +54,22 @@ public abstract class AbstractSpringArg extends DataType { } return beanInstance; } + + protected void setOverridenProperties(Object obj){ + BeanWrapper wrapper = new BeanWrapperImpl(obj); + for (OverrideArg override : overrides) { + if (override.getName() == null) { + throw new SlcAntException( + "The name of the property to override has to be set."); + } + +// LogFactory.getLog(getClass()).debug( +// "Prop " + override.getName()); + wrapper.setPropertyValue(override.getName(), override + .getObject()); + } + + } /** Creates an override subtag. */ public OverrideArg createOverride() { diff --git a/org.argeo.slc.core/src/main/java/org/argeo/slc/ant/spring/OverrideArg.java b/org.argeo.slc.core/src/main/java/org/argeo/slc/ant/spring/OverrideArg.java index 00b267660..5c0dc3e69 100644 --- a/org.argeo.slc.core/src/main/java/org/argeo/slc/ant/spring/OverrideArg.java +++ b/org.argeo.slc.core/src/main/java/org/argeo/slc/ant/spring/OverrideArg.java @@ -12,6 +12,7 @@ public class OverrideArg extends AbstractSpringArg { private String name; private Object value; private OverrideList overrideList; + private MapArg overrideMap; private String antref; /** The name of the property to override. */ @@ -26,41 +27,35 @@ public class OverrideArg extends AbstractSpringArg { /** Sets a reference to an ant data type. */ public void setAntref(String antref) { - if (value != null || overrideList != null || getBean() != null) { - throw new BuildException("Value already set."); - } + checkValueAlreadySet(); this.antref = antref; } /** Both value and bean cannot be set. */ public void setValue(String value) { - if (getBean() != null || overrideList != null || antref != null) { - throw new BuildException("Value already set."); - } + checkValueAlreadySet(); this.value = value; } @Override public void setBean(String bean) { - if (value != null || overrideList != null || antref != null) { - throw new BuildException("Value already set."); - } + checkValueAlreadySet(); super.setBean(bean); } /** Creates override list sub tag. */ public OverrideList createList() { - if (value != null || getBean() != null) { - throw new BuildException("Value already set."); - } - if (overrideList == null) { - overrideList = new OverrideList(); - } else { - throw new BuildException("Only one list can be declared"); - } + checkValueAlreadySet(); + overrideList = new OverrideList(); return overrideList; } + public MapArg createMap() { + checkValueAlreadySet(); + overrideMap = new MapArg(); + return overrideMap; + } + /** * The related object: the value if a value had been set or an instance of * the bean if not. @@ -72,18 +67,28 @@ public class OverrideArg extends AbstractSpringArg { return getBeanInstance(); } else if (overrideList != null) { return overrideList.getAsObjectList(); + } else if (overrideMap != null) { + return overrideMap.getMap(); } else if (antref != null) { Object obj = getProject().getReference(antref); if (obj == null) { throw new SlcException("No object found for reference " + antref); } + setOverridenProperties(obj); return obj; } else { throw new BuildException("Value or bean not set."); } } + private void checkValueAlreadySet() { + if (value != null || overrideList != null || antref != null + || getBean() != null || overrideMap != null) { + throw new BuildException("Value already set."); + } + } + /** List of overrides */ protected class OverrideList { private List list = new Vector(); diff --git a/org.argeo.slc.core/src/main/java/org/argeo/slc/ant/test/ParentContextArg.java b/org.argeo.slc.core/src/main/java/org/argeo/slc/ant/test/ParentContextArg.java deleted file mode 100644 index fe457399f..000000000 --- a/org.argeo.slc.core/src/main/java/org/argeo/slc/ant/test/ParentContextArg.java +++ /dev/null @@ -1,64 +0,0 @@ -package org.argeo.slc.ant.test; - -import java.util.Collection; -import java.util.List; -import java.util.Map; -import java.util.TreeMap; -import java.util.Vector; - -import org.apache.tools.ant.types.DataType; - -import org.argeo.slc.ant.spring.MapArg; -import org.argeo.slc.core.SlcException; -import org.argeo.slc.core.test.context.ContextAware; -import org.argeo.slc.core.test.context.ParentContextAware; - -public class ParentContextArg extends DataType implements ParentContextAware { - private MapArg values = null; - private MapArg expectedValues = null; - - private List children = new Vector(); - - public MapArg createValues() { - values = new MapArg(); - return values; - } - - public MapArg createExpectedValues() { - expectedValues = new MapArg(); - return expectedValues; - } - - public void addChildContext(ContextAware contextAware) { - children.add(contextAware); - } - - public Collection getChildContexts() { - return children; - } - - public String getContextAnyFlag() { - return DEFAULT_ANY_FLAG; - } - - public String getContextSkipFlag() { - return DEFAULT_SKIP_FLAG; - } - - public Map getExpectedValues() { - if (expectedValues == null) - expectedValues = new MapArg(); - return expectedValues.getMap(); - } - - public Map getValues() { - if (values == null) - values = new MapArg(); - return values.getMap(); - } - - public void setValues(Map values) { - throw new SlcException("Cannot override values map."); - } - -} diff --git a/org.argeo.slc.core/src/main/java/org/argeo/slc/ant/test/ParentContextType.java b/org.argeo.slc.core/src/main/java/org/argeo/slc/ant/test/ParentContextType.java new file mode 100644 index 000000000..b6b541d78 --- /dev/null +++ b/org.argeo.slc.core/src/main/java/org/argeo/slc/ant/test/ParentContextType.java @@ -0,0 +1,71 @@ +package org.argeo.slc.ant.test; + +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.Vector; + +import org.apache.tools.ant.types.DataType; + +import org.argeo.slc.ant.spring.MapArg; +import org.argeo.slc.core.SlcException; +import org.argeo.slc.core.test.context.ContextAware; +import org.argeo.slc.core.test.context.ParentContextAware; + +public class ParentContextType extends DataType implements ParentContextAware { + private MapArg values = null; + private MapArg expectedValues = null; + + private List children = new Vector(); + + public MapArg createValues() { + values = new MapArg(); + return values; + } + + public MapArg createExpectedValues() { + expectedValues = new MapArg(); + return expectedValues; + } + + public void addChildContext(ContextAware contextAware) { + children.add(contextAware); + } + + public Collection getChildContexts() { + return children; + } + + public String getContextAnyFlag() { + return DEFAULT_ANY_FLAG; + } + + public String getContextSkipFlag() { + return DEFAULT_SKIP_FLAG; + } + + public Map getExpectedValues() { + if (expectedValues == null) + expectedValues = new MapArg(); + return expectedValues.getMap(); + } + + public Map getValues() { + if (values == null) + values = new MapArg(); + return values.getMap(); + } + + public void setValues(Map values) { + throw new SlcException("Cannot override values map."); + } + + public void setUpdateValues(Map overrideValues) { + getValues().putAll(overrideValues); + } + + public void setUpdateExpectedValues( + Map overrideExpectedValues) { + getExpectedValues().putAll(overrideExpectedValues); + } +} diff --git a/org.argeo.slc.core/src/main/java/org/argeo/slc/unit/test/tree/UnitTestTreeUtil.java b/org.argeo.slc.core/src/main/java/org/argeo/slc/unit/test/tree/UnitTestTreeUtil.java new file mode 100644 index 000000000..da0fae6b0 --- /dev/null +++ b/org.argeo.slc.core/src/main/java/org/argeo/slc/unit/test/tree/UnitTestTreeUtil.java @@ -0,0 +1,26 @@ +package org.argeo.slc.unit.test.tree; + +import junit.framework.TestCase; + +import org.argeo.slc.core.structure.tree.TreeSPath; +import org.argeo.slc.core.test.SimpleResultPart; +import org.argeo.slc.core.test.tree.PartSubList; +import org.argeo.slc.core.test.tree.TreeTestResult; + +/** Utilities for unit tests. */ +public class UnitTestTreeUtil { + /** Assert one part of a tree test result. */ + public static void assertPart(TreeTestResult testResult, String pathStr, + int index, Integer status, String message) { + TreeSPath path = TreeSPath.parseToCreatePath(pathStr); + PartSubList list = testResult.getResultParts().get(path); + SimpleResultPart part = (SimpleResultPart) list.getParts().get(index); + TestCase.assertEquals(status, part.getStatus()); + TestCase.assertEquals(message, part.getMessage()); + } + + /** Makes sure this is a singleton */ + private UnitTestTreeUtil() { + + } +} diff --git a/org.argeo.slc.core/src/main/resources/org/argeo/slc/ant/typedefs.properties b/org.argeo.slc.core/src/main/resources/org/argeo/slc/ant/typedefs.properties index c1fb47772..0cb3b2c46 100644 --- a/org.argeo.slc.core/src/main/resources/org/argeo/slc/ant/typedefs.properties +++ b/org.argeo.slc.core/src/main/resources/org/argeo/slc/ant/typedefs.properties @@ -1,2 +1,2 @@ # Types -slc.context=org.argeo.slc.ant.test.ParentContextArg +slc.context=org.argeo.slc.ant.test.ParentContextType