From: Mathieu Baudier Date: Wed, 30 Jan 2008 18:26:21 +0000 (+0000) Subject: Introduce context at ant level X-Git-Tag: argeo-slc-2.1.7~3070 X-Git-Url: http://git.argeo.org/?a=commitdiff_plain;h=38033cb1dbfe8d9c3e8cb8beb8fa0e11299f7714;p=gpl%2Fargeo-slc.git Introduce context at ant level git-svn-id: https://svn.argeo.org/slc/trunk@937 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- diff --git a/org.argeo.slc.core/src/main/java/org/argeo/slc/ant/SlcProjectHelper.java b/org.argeo.slc.core/src/main/java/org/argeo/slc/ant/SlcProjectHelper.java index 6ed9d9190..4731c2284 100644 --- a/org.argeo.slc.core/src/main/java/org/argeo/slc/ant/SlcProjectHelper.java +++ b/org.argeo.slc.core/src/main/java/org/argeo/slc/ant/SlcProjectHelper.java @@ -41,6 +41,7 @@ public class SlcProjectHelper extends ProjectHelper2 { * /org/argeo/slc/ant/taskdefs.properties */ private static String SLC_TASKDEFS_RESOURCE_PATH = "/org/argeo/slc/ant/taskdefs.properties"; + private static String SLC_TYPEDEFS_RESOURCE_PATH = "/org/argeo/slc/ant/typedefs.properties"; @Override public void parse(Project project, Object source) throws BuildException { @@ -81,7 +82,7 @@ public class SlcProjectHelper extends ProjectHelper2 { // create structure root registerProjectAndParents(project, slcAntConfig); - addSlcTasks(project); + addCustomTaskAndTypes(project); } @@ -142,23 +143,14 @@ public class SlcProjectHelper extends ProjectHelper2 { // FIXME: workaround to the removal of leading '/' by Spring // use URL instead? AbstractApplicationContext context = new FileSystemXmlApplicationContext( - '/'+acPath); + '/' + acPath); context.registerShutdownHook(); project.addReference(REF_ROOT_CONTEXT, context); } /** Loads the SLC specific Ant tasks. */ - private void addSlcTasks(Project project) { - Properties taskdefs = new Properties(); - try { - InputStream in = project.getClass().getResourceAsStream( - SLC_TASKDEFS_RESOURCE_PATH); - taskdefs.load(in); - in.close(); - } catch (IOException e) { - throw new SlcAntException("Cannot load task definitions", e); - } - + private void addCustomTaskAndTypes(Project project) { + Properties taskdefs = getDefs(project, SLC_TASKDEFS_RESOURCE_PATH); for (Object o : taskdefs.keySet()) { String name = o.toString(); try { @@ -168,5 +160,27 @@ public class SlcProjectHelper extends ProjectHelper2 { log.error("Unknown class for task " + name, e); } } + Properties typedefs = getDefs(project, SLC_TYPEDEFS_RESOURCE_PATH); + for (Object o : typedefs.keySet()) { + String name = o.toString(); + try { + project.addDataTypeDefinition(name, Class.forName(typedefs + .getProperty(name))); + } catch (ClassNotFoundException e) { + log.error("Unknown class for type " + name, e); + } + } + } + + private Properties getDefs(Project project, String path) { + Properties defs = new Properties(); + try { + InputStream in = project.getClass().getResourceAsStream(path); + defs.load(in); + in.close(); + } catch (IOException e) { + throw new SlcAntException("Cannot load task definitions", e); + } + return defs; } } 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 6c6423598..b7a63c9d2 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 @@ -5,11 +5,14 @@ import java.util.Vector; import org.springframework.beans.BeanWrapper; import org.springframework.beans.BeanWrapperImpl; +import org.springframework.beans.factory.InitializingBean; import org.springframework.context.ApplicationContext; +import org.apache.commons.logging.LogFactory; import org.apache.tools.ant.types.DataType; import org.argeo.slc.ant.SlcProjectHelper; +import org.argeo.slc.core.SlcException; /** Abstract Ant type wrapping a Spring bean. */ public abstract class AbstractSpringArg extends DataType { @@ -40,9 +43,18 @@ public abstract class AbstractSpringArg extends DataType { BeanWrapper wrapper = new BeanWrapperImpl(beanInstance); for (OverrideArg override : overrides) { + LogFactory.getLog(getClass()).debug("Prop "+override.getName()); wrapper.setPropertyValue(override.getName(), override .getObject()); } + + if (beanInstance instanceof InitializingBean) { + try { + ((InitializingBean) beanInstance).afterPropertiesSet(); + } catch (Exception e) { + throw new SlcException("Could not initialize bean", e); + } + } } return beanInstance; } diff --git a/org.argeo.slc.core/src/main/java/org/argeo/slc/ant/spring/MapArg.java b/org.argeo.slc.core/src/main/java/org/argeo/slc/ant/spring/MapArg.java new file mode 100644 index 000000000..3bab27f95 --- /dev/null +++ b/org.argeo.slc.core/src/main/java/org/argeo/slc/ant/spring/MapArg.java @@ -0,0 +1,55 @@ +package org.argeo.slc.ant.spring; + +import java.util.List; +import java.util.Map; +import java.util.TreeMap; +import java.util.Vector; + +import org.argeo.slc.core.SlcException; + +public class MapArg { + private List entries = new Vector(); + private Map map = new TreeMap(); + + public EntryArg createEntry() { + EntryArg arg = new EntryArg(); + entries.add(arg); + return arg; + } + + public Map getMap() { + if (map.size() == 0) { + for (EntryArg arg : entries) { + String key = arg.getKey(); + if (map.containsKey(key)) { + throw new SlcException("Key '" + key + "' already set."); + } else { + map.put(key, arg.getValue()); + } + } + } + return map; + } + + public static class EntryArg { + private String key; + private Object value; + + public String getKey() { + return key; + } + + public void setKey(String key) { + this.key = key; + } + + public Object getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + + } +} 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 20508a6e8..00b267660 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 @@ -5,11 +5,14 @@ import java.util.Vector; import org.apache.tools.ant.BuildException; +import org.argeo.slc.core.SlcException; + /** Ant type allowing to override bean properties. */ public class OverrideArg extends AbstractSpringArg { private String name; private Object value; private OverrideList overrideList; + private String antref; /** The name of the property to override. */ public String getName() { @@ -21,9 +24,17 @@ public class OverrideArg extends AbstractSpringArg { this.name = name; } + /** 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."); + } + this.antref = antref; + } + /** Both value and bean cannot be set. */ public void setValue(String value) { - if (getBean() != null || overrideList != null) { + if (getBean() != null || overrideList != null || antref != null) { throw new BuildException("Value already set."); } this.value = value; @@ -31,7 +42,7 @@ public class OverrideArg extends AbstractSpringArg { @Override public void setBean(String bean) { - if (value != null || overrideList != null) { + if (value != null || overrideList != null || antref != null) { throw new BuildException("Value already set."); } super.setBean(bean); @@ -61,6 +72,13 @@ public class OverrideArg extends AbstractSpringArg { return getBeanInstance(); } else if (overrideList != null) { return overrideList.getAsObjectList(); + } else if (antref != null) { + Object obj = getProject().getReference(antref); + if (obj == null) { + throw new SlcException("No object found for reference " + + antref); + } + return obj; } else { throw new BuildException("Value or bean not set."); } 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 new file mode 100644 index 000000000..fe457399f --- /dev/null +++ b/org.argeo.slc.core/src/main/java/org/argeo/slc/ant/test/ParentContextArg.java @@ -0,0 +1,64 @@ +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/core/test/context/AbstractContextTestData.java b/org.argeo.slc.core/src/main/java/org/argeo/slc/core/test/context/AbstractContextTestData.java deleted file mode 100644 index ee7aad068..000000000 --- a/org.argeo.slc.core/src/main/java/org/argeo/slc/core/test/context/AbstractContextTestData.java +++ /dev/null @@ -1,14 +0,0 @@ -package org.argeo.slc.core.test.context; - -import org.argeo.slc.core.test.TestData; -import org.argeo.slc.core.test.TestDataProvider; -import org.argeo.slc.core.test.TestDataUtils; - -public class AbstractContextTestData extends SimpleContextAware implements - TestData, TestDataProvider { - - public T getTestData(Class clss, String key) { - return TestDataUtils.getItSelf(clss, this); - } - -} diff --git a/org.argeo.slc.core/src/main/java/org/argeo/slc/core/test/context/ContextAware.java b/org.argeo.slc.core/src/main/java/org/argeo/slc/core/test/context/ContextAware.java index f882679db..5e411831e 100644 --- a/org.argeo.slc.core/src/main/java/org/argeo/slc/core/test/context/ContextAware.java +++ b/org.argeo.slc.core/src/main/java/org/argeo/slc/core/test/context/ContextAware.java @@ -3,14 +3,15 @@ package org.argeo.slc.core.test.context; import java.util.Map; public interface ContextAware { + public final static String DEFAULT_SKIP_FLAG = "!"; + public final static String DEFAULT_ANY_FLAG = "*"; + public Map getValues(); public void setValues(Map values); public Map getExpectedValues(); - public void setExpectedValues(Map expectedValues); - public String getContextSkipFlag(); public String getContextAnyFlag(); diff --git a/org.argeo.slc.core/src/main/java/org/argeo/slc/core/test/context/DefaultContextTestData.java b/org.argeo.slc.core/src/main/java/org/argeo/slc/core/test/context/DefaultContextTestData.java new file mode 100644 index 000000000..a39a91539 --- /dev/null +++ b/org.argeo.slc.core/src/main/java/org/argeo/slc/core/test/context/DefaultContextTestData.java @@ -0,0 +1,14 @@ +package org.argeo.slc.core.test.context; + +import org.argeo.slc.core.test.TestData; +import org.argeo.slc.core.test.TestDataProvider; +import org.argeo.slc.core.test.TestDataUtils; + +public class DefaultContextTestData extends SimpleContextAware implements + TestData, TestDataProvider { + + public T getTestData(Class clss, String key) { + return TestDataUtils.getItSelf(clss, this); + } + +} diff --git a/org.argeo.slc.core/src/main/java/org/argeo/slc/core/test/context/SimpleContextAware.java b/org.argeo.slc.core/src/main/java/org/argeo/slc/core/test/context/SimpleContextAware.java index eee918c64..c4fb5ab40 100644 --- a/org.argeo.slc.core/src/main/java/org/argeo/slc/core/test/context/SimpleContextAware.java +++ b/org.argeo.slc.core/src/main/java/org/argeo/slc/core/test/context/SimpleContextAware.java @@ -13,8 +13,8 @@ public class SimpleContextAware implements ContextAware, InitializingBean { private Map values = new TreeMap(); private Map expectedValues = new TreeMap(); - private String contextSkipFlag = "!"; - private String contextAnyFlag = "*"; + private String contextSkipFlag = DEFAULT_SKIP_FLAG; + private String contextAnyFlag = DEFAULT_ANY_FLAG; public Map getValues() { return values; diff --git a/org.argeo.slc.core/src/main/java/org/argeo/slc/hibernate/structure/tree/TreeSRegistryDaoHibernate.java b/org.argeo.slc.core/src/main/java/org/argeo/slc/hibernate/structure/tree/TreeSRegistryDaoHibernate.java index 15a7cede5..286bee6e0 100644 --- a/org.argeo.slc.core/src/main/java/org/argeo/slc/hibernate/structure/tree/TreeSRegistryDaoHibernate.java +++ b/org.argeo.slc.core/src/main/java/org/argeo/slc/hibernate/structure/tree/TreeSRegistryDaoHibernate.java @@ -53,8 +53,8 @@ public class TreeSRegistryDaoHibernate extends HibernateDaoSupport implements syncPath(registry, localRegistry, parent); } - if (log.isDebugEnabled()) - log.debug("Synchronize path " + path); + if (log.isTraceEnabled()) + log.trace("Synchronize path " + path); if (registry.getElement(path) == null) { if (localRegistry != null) { 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 new file mode 100644 index 000000000..c1fb47772 --- /dev/null +++ b/org.argeo.slc.core/src/main/resources/org/argeo/slc/ant/typedefs.properties @@ -0,0 +1,2 @@ +# Types +slc.context=org.argeo.slc.ant.test.ParentContextArg diff --git a/org.argeo.slc.core/src/test/java/org/argeo/slc/core/test/context/applicationContext.xml b/org.argeo.slc.core/src/test/java/org/argeo/slc/core/test/context/applicationContext.xml deleted file mode 100644 index f42523595..000000000 --- a/org.argeo.slc.core/src/test/java/org/argeo/slc/core/test/context/applicationContext.xml +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/org.argeo.slc.core/src/test/resources/log4j.properties b/org.argeo.slc.core/src/test/resources/log4j.properties index b92b4cca7..8eb8b0c9c 100644 --- a/org.argeo.slc.core/src/test/resources/log4j.properties +++ b/org.argeo.slc.core/src/test/resources/log4j.properties @@ -3,7 +3,7 @@ log4j.rootLogger=INFO, console ## Levels # Slc -log4j.logger.org.argeo.slc=TRACE +log4j.logger.org.argeo.slc=DEBUG # Spring log4j.logger.org.springframework=INFO # Hibernate diff --git a/org.argeo.slc.core/src/test/resources/org/argeo/slc/core/test/context/applicationContext.xml b/org.argeo.slc.core/src/test/resources/org/argeo/slc/core/test/context/applicationContext.xml new file mode 100644 index 000000000..f42523595 --- /dev/null +++ b/org.argeo.slc.core/src/test/resources/org/argeo/slc/core/test/context/applicationContext.xml @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file