+++ /dev/null
-package org.argeo.slc.ant;
-
-public interface AntConstants {
- // ANT
- /** The Ant reference to the Spring application context used. */
- public static final String REF_ROOT_CONTEXT = "slcApplicationContext";
- /** The Ant reference to the SLC structure registry used. */
- public static final String REF_STRUCTURE_REGISTRY = "slcStructureRegistry";
- /** The Ant reference to the <code>TreePath</code> of the current project */
- public static final String REF_PROJECT_PATH = "slcProjectPath";
- /**
- * Resource path to the property file listing the SLC specific Ant tasks:
- * /org/argeo/slc/ant/taskdefs.properties
- */
- public static final String SLC_TASKDEFS_RESOURCE_PATH = "/org/argeo/slc/ant/taskdefs.properties";
- /**
- * Resource path to the property file listing the SLC specific Ant types:
- * /org/argeo/slc/ant/typedefs.properties
- */
- public static final String SLC_TYPEDEFS_RESOURCE_PATH = "/org/argeo/slc/ant/typedefs.properties";
- public static final String REF_SLC_EXECUTION = "slcExecution";
-
- // SLC EXECUTION
- public static final String EXECTYPE_ANT = "org.apache.tools.ant";
- public static final String EXECTYPE_SLC_ANT = "org.argeo.slc.ant";
-
- public final static String EXECATTR_RUNTIME = "slc.runtime";
- public final static String EXECATTR_ANT_FILE = "ant.file";
- public final static String EXECATTR_ANT_TARGETS = "ant.targets";
-
- // PROPERTIES
- /** Property for the root dir (SLC root property file). */
- public final static String ROOT_DIR_PROPERTY = "slc.rootDir";
- /** Property for the conf dir (SLC root property file). */
- public final static String CONF_DIR_PROPERTY = "slc.confDir";
- /** Property for the work dir (SLC root property file). */
- public final static String WORK_DIR_PROPERTY = "slc.workDir";
- /** Name of the Spring bean used by default */
- public final static String DEFAULT_TEST_RUN_PROPERTY = "slc.defaultTestRun";
-
- /** Property for the runtime to use. */
- public final static String RUNTIME_PROPERTY = "slc.runtime";
-
- // LOG4J
- public final static String MDC_ANT_PROJECT = "slc.ant.project";
-
-}
+++ /dev/null
-package org.argeo.slc.ant;
-
-import org.apache.tools.ant.Project;
-import org.argeo.slc.process.SlcExecution;
-import org.argeo.slc.runtime.SlcExecutionContext;
-import org.springframework.context.ApplicationContext;
-
-public class AntExecutionContext implements SlcExecutionContext {
- private final Project project;
-
- public AntExecutionContext(Project project) {
- this.project = project;
- }
-
- public <T> T getBean(String name) {
- ApplicationContext context = (ApplicationContext) project
- .getReference(AntConstants.REF_ROOT_CONTEXT);
- return (T) context.getBean(name);
- }
-
- public <T> T getAntRef(String antId) {
- return (T) project.getReference(antId);
- }
-
- public SlcExecution getSlcExecution() {
- return (SlcExecution) project
- .getReference(AntConstants.REF_SLC_EXECUTION);
- }
-
- public Project getProject() {
- return project;
- }
-}
+++ /dev/null
-package org.argeo.slc.ant;\r
-\r
-import java.io.File;\r
-import java.net.URL;\r
-import java.util.Arrays;\r
-import java.util.Map;\r
-import java.util.Properties;\r
-import java.util.Vector;\r
-\r
-import org.apache.tools.ant.Project;\r
-import org.apache.tools.ant.ProjectHelper;\r
-import org.apache.tools.ant.helper.ProjectHelper2;\r
-import org.argeo.slc.SlcException;\r
-\r
-/** Run regular Ant script (that is, not SLC instrumented) */\r
-public class AntRunner {\r
- private URL buildFile;\r
- private String[] targets;\r
- private Properties properties;\r
-\r
- public AntRunner() {\r
-\r
- }\r
-\r
- public AntRunner(URL buildFile, String target, Properties properties) {\r
- this(buildFile, new String[] { target }, properties);\r
- }\r
-\r
- public AntRunner(URL buildFile, String[] targets, Properties properties) {\r
- this.buildFile = buildFile;\r
- this.targets = targets;\r
- this.properties = properties;\r
- }\r
-\r
- public void run() {\r
- Project p = new Project();\r
-\r
- String path = buildFile.getFile();\r
- p.setUserProperty("ant.file", path);\r
- p.setBaseDir(extractBaseDir(path));\r
-\r
- p.init();\r
- ProjectHelper projectHelper = new ProjectHelper2();\r
- p.addReference(ProjectHelper.PROJECTHELPER_REFERENCE, projectHelper);\r
- projectHelper.parse(p, buildFile);\r
-\r
- if (properties != null) {\r
- for (Map.Entry<Object, Object> entry : properties.entrySet()) {\r
- p.setUserProperty(entry.getKey().toString(), entry.getValue()\r
- .toString());\r
- }\r
- }\r
-\r
- p.fireBuildStarted();\r
- Throwable exception = null;\r
- try {\r
- if (targets == null) {\r
- p.executeTarget(p.getDefaultTarget());\r
- } else {\r
- p.executeTargets(new Vector<String>(Arrays.asList(targets)));\r
- }\r
- } catch (Throwable e) {\r
- exception = e;\r
- throw new SlcException("Could not run Ant script " + buildFile, e);\r
- } finally {\r
- p.fireBuildFinished(exception);\r
- }\r
-\r
- }\r
-\r
- private File extractBaseDir(String path) {\r
- String baseDir = null;\r
- if (path.length() > 1) {\r
- int indx = path.lastIndexOf('/', path.length() - 1);\r
- if (indx == -1 || indx == 0) {\r
- baseDir = "/";\r
- } else {\r
- baseDir = path.substring(0, indx) + "/";\r
- }\r
- } else {\r
- baseDir = "/";\r
- }\r
- File file = new File(baseDir);\r
- if (file.exists()) {\r
- return file;\r
- } else {\r
- return new File(System.getProperty("user.dir"));\r
- }\r
- }\r
-\r
-}\r
+++ /dev/null
-package org.argeo.slc.ant;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-import java.util.StringTokenizer;
-import java.util.Vector;
-
-import org.apache.commons.io.IOUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.log4j.Appender;
-import org.apache.log4j.LogManager;
-import org.apache.log4j.MDC;
-import org.apache.tools.ant.BuildListener;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.ProjectHelper;
-import org.apache.tools.ant.helper.ProjectHelper2;
-import org.argeo.slc.SlcException;
-import org.argeo.slc.core.structure.SimpleSElement;
-import org.argeo.slc.core.structure.tree.TreeSPath;
-import org.argeo.slc.core.structure.tree.TreeSRegistry;
-import org.argeo.slc.logging.Log4jUtils;
-import org.argeo.slc.process.SlcExecution;
-import org.argeo.slc.runtime.SlcApplication;
-import org.argeo.slc.runtime.SlcExecutionOutput;
-import org.argeo.slc.spring.SpringUtils;
-import org.argeo.slc.structure.StructureRegistry;
-import org.springframework.beans.factory.BeanFactoryUtils;
-import org.springframework.beans.factory.ListableBeanFactory;
-import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;
-import org.springframework.beans.factory.xml.XmlBeanDefinitionReader;
-import org.springframework.context.ConfigurableApplicationContext;
-import org.springframework.context.support.GenericApplicationContext;
-import org.springframework.core.io.DefaultResourceLoader;
-import org.springframework.core.io.Resource;
-import org.springframework.core.io.ResourceLoader;
-import org.springframework.util.SystemPropertyUtils;
-
-public class AntSlcApplication implements SlcApplication<AntExecutionContext> {
- private final static String DEFAULT_APP_LOG4J_PROPERTIES = "org/argeo/slc/ant/defaultAppLog4j.properties";
-
- private final static Log log = LogFactory.getLog(AntSlcApplication.class);
-
- private Resource contextLocation;
- private ConfigurableApplicationContext parentContext;
-
- private Resource rootDir;
- private Resource confDir;
- private File workDir;
-
- private Resource slcRootFile;
-
- public void execute(SlcExecution slcExecution, Properties properties,
- Map<String, Object> references,
- SlcExecutionOutput<AntExecutionContext> executionOutput) {
-
- // Properties and application logging initialization
- initSystemProperties(properties);
- Log4jUtils.initLog4j("classpath:" + DEFAULT_APP_LOG4J_PROPERTIES);
-
- log.info("\n###\n### Start SLC execution " + slcExecution.getUuid()
- + "\n###\n");
- if (log.isDebugEnabled()) {
- log.debug("rootDir=" + rootDir);
- log.debug("confDir=" + confDir);
- log.debug("workDir=" + workDir);
- }
-
- // Ant coordinates
- String scriptRelativePath = findAntScript(slcExecution);
- List<String> targets = findAntTargets(slcExecution);
-
- // Spring initialization
- ConfigurableApplicationContext ctx = createExecutionContext(slcExecution);
-
- // Ant project initialization
- Project project = new Project();
- AntExecutionContext executionContext = new AntExecutionContext(project);
- project.addReference(AntConstants.REF_ROOT_CONTEXT, ctx);
- project.addReference(AntConstants.REF_SLC_EXECUTION, slcExecution);
-
- try {
- initProject(project, properties, references);
- parseProject(project, scriptRelativePath);
-
- // Execute project
- initStructure(project, scriptRelativePath);
- runProject(project, targets);
-
- if (executionOutput != null)
- executionOutput.postExecution(executionContext);
- } finally {
- ctx.close();
- }
- }
-
- protected void initSystemProperties(Properties userProperties) {
- // Set user properties as system properties so that Spring can access
- // them
- if (userProperties != null) {
- for (Object key : userProperties.keySet()) {
- System.setProperty(key.toString(), userProperties
- .getProperty(key.toString()));
- }
- }
-
- if (System.getProperty(AntConstants.DEFAULT_TEST_RUN_PROPERTY) == null) {
- System.setProperty(AntConstants.DEFAULT_TEST_RUN_PROPERTY,
- "defaultTestRun");
- }
-
- try {
- if (rootDir != null)
- setSystemPropertyForRes(AntConstants.ROOT_DIR_PROPERTY, rootDir);
- if (confDir != null)
- setSystemPropertyForRes(AntConstants.CONF_DIR_PROPERTY, confDir);
- if (workDir != null)
- System.setProperty(AntConstants.WORK_DIR_PROPERTY, workDir
- .getCanonicalPath());
-
- // Additional properties in slc.properties file. Already set sytem
- // properties (such as the various directories) can be resolved in
- // placeholders.
- if (confDir != null) {
- Resource slcPropertiesRes = confDir
- .createRelative("slc.properties");
- if (slcPropertiesRes.exists()) {
- Properties slcProperties = new Properties();
- InputStream in = slcPropertiesRes.getInputStream();
- try {
- slcProperties.load(in);
- } finally {
- IOUtils.closeQuietly(in);
- }
-
- for (Object obj : slcProperties.keySet()) {
- String key = obj.toString();
- if (!System.getProperties().containsKey(key)) {
- String value = SystemPropertyUtils
- .resolvePlaceholders(slcProperties
- .getProperty(key));
- System.setProperty(key, value);
- }
- }
- }
- }
- } catch (Exception e) {
- throw new SlcException("Cannot init system properties.", e);
- }
- }
-
- /**
- * Set property as an absolute file path if the resource can be located on
- * the file system, or as an url.
- */
- private void setSystemPropertyForRes(String key, Resource res)
- throws IOException {
- String value = null;
- try {
- value = res.getFile().getCanonicalPath();
- } catch (IOException e) {
- value = res.getURL().toString();
- }
- System.setProperty(key, value);
- }
-
- protected ConfigurableApplicationContext createExecutionContext(
- SlcExecution slcExecution) {
- try {
-
- // Find runtime definition
- Resource runtimeRes = null;
- String runtimeStr = slcExecution.getAttributes().get(
- AntConstants.EXECATTR_RUNTIME);
- if (runtimeStr == null)
- runtimeStr = System.getProperty(AntConstants.RUNTIME_PROPERTY,
- "default");
-
- ResourceLoader rl = new DefaultResourceLoader(getClass()
- .getClassLoader());
- try {// tries absolute reference
- runtimeRes = rl.getResource(runtimeStr);
- } catch (Exception e) {
- // silent
- }
- if (runtimeRes == null || !runtimeRes.exists()) {
- if (confDir != null)
- runtimeRes = confDir.createRelative("runtime/" + runtimeStr
- + ".xml");
- }
-
- // Find runtime independent application context definition
- if (confDir != null && contextLocation == null) {
- contextLocation = confDir
- .createRelative("applicationContext.xml");
- }
-
- GenericApplicationContext ctx = new GenericApplicationContext(
- parentContext);
- ctx.setDisplayName("SLC Execution #" + slcExecution.getUuid());
-
- XmlBeanDefinitionReader xmlReader = new XmlBeanDefinitionReader(ctx);
- if (runtimeRes != null && runtimeRes.exists())
- xmlReader.loadBeanDefinitions(runtimeRes);
- else
- log.warn("No runtime context defined");
-
- if (contextLocation != null && contextLocation.exists())
- xmlReader.loadBeanDefinitions(contextLocation);
- else
- log.warn("No runtime independent application context defined");
-
- // Add property place holder
- PropertyPlaceholderConfigurer ppc = new PropertyPlaceholderConfigurer();
- ppc.setIgnoreUnresolvablePlaceholders(true);
- ctx.addBeanFactoryPostProcessor(ppc);
-
- ctx.refresh();
- return ctx;
- } catch (Exception e) {
- throw new SlcException(
- "Cannot create SLC execution application context.", e);
- }
- }
-
- protected String findAntScript(SlcExecution slcExecution) {
- String scriptStr = slcExecution.getAttributes().get(
- AntConstants.EXECATTR_ANT_FILE);
- if (scriptStr == null)
- throw new SlcException("No Ant script provided");
-
- return scriptStr;
- }
-
- protected List<String> findAntTargets(SlcExecution slcExecution) {
- String targetList = slcExecution.getAttributes().get(
- AntConstants.EXECATTR_ANT_TARGETS);
- List<String> targets = new Vector<String>();
- if (targetList != null) {
- StringTokenizer stTargets = new StringTokenizer(targetList, ",");
- while (stTargets.hasMoreTokens()) {
- targets.add(stTargets.nextToken());
- }
- }
- return targets;
- }
-
- protected void initProject(Project project, Properties properties,
- Map<String, Object> references) {
- if (properties != null) {
- for (Map.Entry<Object, Object> entry : properties.entrySet()) {
- project.setUserProperty(entry.getKey().toString(), entry
- .getValue().toString());
- }
- }
-
- if (references != null) {
- for (Map.Entry<String, Object> entry : references.entrySet()) {
- project.addReference(entry.getKey(), entry.getValue());
- }
- }
-
- // project.addBuildListener(new CommonsLoggingListener());
-
- ListableBeanFactory context = (ListableBeanFactory) project
- .getReference(AntConstants.REF_ROOT_CONTEXT);
- // Register build listeners
- Map<String, BuildListener> listeners = BeanFactoryUtils
- .beansOfTypeIncludingAncestors(context, BuildListener.class,
- false, false);
- for (BuildListener listener : listeners.values()) {
- project.addBuildListener(listener);
- }
-
- // Register log4j appenders from context
- MDC.put(AntConstants.MDC_ANT_PROJECT, project);
- Map<String, Appender> appenders = context.getBeansOfType(
- Appender.class, false, true);
- for (Appender appender : appenders.values()) {
- LogManager.getRootLogger().addAppender(appender);
- }
-
- project.init();
- addCustomTaskAndTypes(project);
- }
-
- /** Loads the SLC specific Ant tasks. */
- protected void addCustomTaskAndTypes(Project project) {
- Properties taskdefs = getDefs(project,
- AntConstants.SLC_TASKDEFS_RESOURCE_PATH);
- for (Object o : taskdefs.keySet()) {
- String name = o.toString();
- String className = taskdefs.getProperty(name);
- try {
- project.addTaskDefinition(name, Class.forName(className));
- } catch (ClassNotFoundException e) {
- log.warn("Unknown class " + className + " for task " + name);
- }
- }
- Properties typedefs = getDefs(project,
- AntConstants.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 SlcException("Cannot load task definitions", e);
- }
- return defs;
- }
-
- protected void initStructure(Project project, String scriptRelativePath) {
- // Init structure registry
- StructureRegistry<TreeSPath> registry = new TreeSRegistry();
- project.addReference(AntConstants.REF_STRUCTURE_REGISTRY, registry);
-
- // Lowest levels
- StringTokenizer st = new StringTokenizer(scriptRelativePath, "/");
- TreeSPath currPath = null;
- while (st.hasMoreTokens()) {
- String name = st.nextToken();
- if (currPath == null) {
- currPath = TreeSPath.createRootPath(name);
- } else {
- if (st.hasMoreTokens())// don't register project file
- currPath = currPath.createChild(name);
- }
- registry.register(currPath, new SimpleSElement(name));
- }
-
- // Project level
- String projectName = project.getName() != null
- && !project.getName().equals("") ? project.getName()
- : "project";
- TreeSPath projectPath = currPath.createChild(projectName);
-
- String projectDesc = project.getDescription() != null
- && !project.getDescription().equals("") ? project
- .getDescription() : projectPath.getName();
-
- registry.register(projectPath, new SimpleSElement(projectDesc));
- project.addReference(AntConstants.REF_PROJECT_PATH, projectPath);
-
- if (log.isDebugEnabled())
- log.debug("Project path: " + projectPath);
- }
-
- protected void parseProject(Project project, String scriptRelativePath) {
- try {
- Resource script = rootDir.createRelative(scriptRelativePath);
- File baseDir = null;
- try {
- File scriptFile = script.getFile();
- baseDir = scriptFile.getParentFile();
- } catch (IOException e) {// resource is not a file
- baseDir = new File(System.getProperty("user.dir"));
- }
- project.setBaseDir(baseDir);
- // Reset basedir property, in order to avoid base dir override when
- // running in Maven
- project.setProperty("basedir", baseDir.getAbsolutePath());
-
- ProjectHelper2 projectHelper = new ProjectHelper2();
- project.addReference(ProjectHelper.PROJECTHELPER_REFERENCE,
- projectHelper);
- projectHelper.parse(project, script.getURL());
- } catch (Exception e) {
- throw new SlcException("Could not parse project for script "
- + scriptRelativePath, e);
- }
-
- }
-
- protected void runProject(Project p, List<String> targets) {
- p.fireBuildStarted();
- Throwable exception = null;
- try {
- if (targets.size() == 0) {// no target defined
- p.executeTarget(p.getDefaultTarget());
- } else {
- p.executeTargets(new Vector<String>(targets));
- }
- } catch (Throwable e) {
- exception = e;
- throw new SlcException("SLC Ant execution failed", exception);
- } finally {
- p.fireBuildFinished(exception);
- }
- }
-
- public void setContextLocation(Resource contextLocation) {
- this.contextLocation = contextLocation;
- }
-
- public void setRootDir(Resource rootDir) {
- this.rootDir = rootDir;
- }
-
- public void setConfDir(Resource confDir) {
- this.confDir = confDir;
- }
-
- public void setWorkDir(File workDir) {
- this.workDir = workDir;
- }
-
- public void setParentContext(ConfigurableApplicationContext runtimeContext) {
- this.parentContext = runtimeContext;
- }
-
- public void setSlcRootFile(Resource slcRootFile) {
- this.slcRootFile = slcRootFile;
- }
-
- /**
- * Init all directories based on the SLC root file. TODO: don't override
- * already specified dirs.
- */
- public void initFromSlcRootFile() {
- // AntSlcApplication application = new AntSlcApplication();
- InputStream inRootFile = null;
- try {
- // Remove basedir property in order to avoid conflict with Maven
- // if (all.containsKey("basedir"))
- // all.remove("basedir");
-
- inRootFile = slcRootFile.getInputStream();
- Properties rootProps = loadFile(inRootFile);
-
- Resource confDir = null;
- File workDir = null;
- // Root dir
- final Resource rootDir = SpringUtils.getParent(slcRootFile);
-
- // Conf dir
- String confDirStr = rootProps
- .getProperty(AntConstants.CONF_DIR_PROPERTY);
- if (confDirStr != null)
- confDir = new DefaultResourceLoader(getClass().getClassLoader())
- .getResource(confDirStr);
-
- if (confDir == null || !confDir.exists()) {
- // confDir = rootDir.createRelative("../conf");
- confDir = SpringUtils.getParent(rootDir)
- .createRelative("conf/");
- }
-
- // Work dir
- String workDirStr = rootProps
- .getProperty(AntConstants.WORK_DIR_PROPERTY);
- if (workDirStr != null) {
- workDir = new File(workDirStr);
- }
-
- if (workDir == null || !workDir.exists()) {
- try {
- File rootDirAsFile = rootDir.getFile();
- workDir = new File(rootDirAsFile.getParent()
- + File.separator + "work").getCanonicalFile();
- } catch (IOException e) {
- workDir = new File(System.getProperty("java.io.tmpdir")
- + File.separator + "slcExecutions" + File.separator
- + slcRootFile.getURL().getPath());
- log.debug("Root dir is not a file: " + e.getMessage()
- + ", creating work dir in temp: " + workDir);
- }
- workDir.mkdirs();
- }
-
- setConfDir(confDir);
- setRootDir(rootDir);
- setWorkDir(workDir);
-
- if (log.isDebugEnabled())
- log.debug("Ant SLC application initialized based on root file "
- + slcRootFile);
- } catch (IOException e) {
- throw new SlcException(
- "Could not prepare SLC application for root file "
- + slcRootFile, e);
- } finally {
- IOUtils.closeQuietly(inRootFile);
- }
- }
-
- /** Loads the content of a file as <code>Properties</code>. */
- private Properties loadFile(InputStream in) {
- Properties p = new Properties();
- try {
- p.load(in);
- } catch (IOException e) {
- throw new SlcException("Cannot read SLC root file", e);
- }
- return p;
- }
-
-}
+++ /dev/null
-package org.argeo.slc.ant;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.InetAddress;
-import java.net.UnknownHostException;
-import java.util.Map;
-import java.util.Properties;
-import java.util.UUID;
-
-import org.apache.commons.io.IOUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.argeo.slc.SlcException;
-import org.argeo.slc.process.SlcExecution;
-import org.argeo.slc.runtime.SlcExecutionOutput;
-import org.argeo.slc.runtime.SlcRuntime;
-import org.argeo.slc.spring.SpringUtils;
-import org.springframework.core.io.DefaultResourceLoader;
-import org.springframework.core.io.FileSystemResource;
-import org.springframework.core.io.Resource;
-
-public class AntSlcRuntime implements SlcRuntime<AntExecutionContext> {
- private final static Log log = LogFactory.getLog(AntSlcRuntime.class);
-
- public final static String SLC_ROOT_FILE_NAME = "slcRoot.properties";
-
- /**
- * Simplified execution with default runtime, default target, and no
- * properties/reference arguments.
- *
- * @param script
- * path to the script
- * @param executionOutput
- * output
- *
- * @see #executeScript(String, String, String, Properties, Map,
- * SlcExecutionOutput)
- */
- public void executeScript(String script,
- SlcExecutionOutput<AntExecutionContext> executionOutput) {
- executeScript(null, script, null, null, null, executionOutput);
- }
-
- /**
- * Simplified execution with default runtime, and no properties/reference
- * arguments.
- *
- * @param script
- * path to the script
- * @param targets
- * comma separated list of targets
- * @param executionOutput
- * output
- * @see #executeScript(String, String, String, Properties, Map,
- * SlcExecutionOutput)
- */
- public void executeScript(String script, String targets,
- SlcExecutionOutput<AntExecutionContext> executionOutput) {
- executeScript(null, script, targets, null, null, executionOutput);
- }
-
- public void executeScript(String runtime, String script, String targets,
- Properties properties, Map<String, Object> references,
- SlcExecutionOutput<AntExecutionContext> executionOutput) {
-
- Resource scriptRes = findScript(script);
- Resource slcRootFile = findSlcRootFile(scriptRes);
- if (slcRootFile == null)
- throw new SlcException(
- "Could not find any SLC root file, "
- + "please configure one at the root of your scripts hierarchy.");
-
- // Create SlcExecution from arguments
- SlcExecution slcExecution = createSlcExecution(runtime, slcRootFile,
- scriptRes, targets);
-
- // Init application
- AntSlcApplication application = new AntSlcApplication();
- application.setSlcRootFile(slcRootFile);
- application.initFromSlcRootFile();
-
- // Execute test
- application.execute(slcExecution, properties, references,
- executionOutput);
- }
-
- protected Resource findScript(String scriptStr) {
- Resource scriptRes;
- if (new File(scriptStr).exists()) {
- scriptRes = new FileSystemResource(scriptStr);
- } else {
- scriptRes = new DefaultResourceLoader(Thread.currentThread()
- .getContextClassLoader()).getResource(scriptStr);
- }
- return scriptRes;
- }
-
- protected SlcExecution createSlcExecution(String runtimeStr,
- Resource slcRootFile, Resource script, String targets) {
- SlcExecution slcExecution = new SlcExecution();
- slcExecution.setUuid(UUID.randomUUID().toString());
- try {
- slcExecution.setHost(InetAddress.getLocalHost().getHostName());
- } catch (UnknownHostException e) {
- slcExecution.setHost(SlcExecution.UNKOWN_HOST);
- }
-
- slcExecution.setType(AntConstants.EXECTYPE_SLC_ANT);
-
- slcExecution.setUser(System.getProperty("user.name"));
-
- if (runtimeStr != null)
- slcExecution.getAttributes().put(AntConstants.EXECATTR_RUNTIME,
- runtimeStr);
- String scriptRelativePath = SpringUtils.extractRelativePath(SpringUtils
- .getParent(slcRootFile), script);
-
- slcExecution.getAttributes().put(AntConstants.EXECATTR_ANT_FILE,
- scriptRelativePath);
- if (targets != null)
- slcExecution.getAttributes().put(AntConstants.EXECATTR_ANT_TARGETS,
- targets);
-
- slcExecution.setStatus(SlcExecution.STATUS_SCHEDULED);
- return slcExecution;
- }
-
- /**
- * Recursively scans directories downwards until it find a file name as
- * defined by {@link #SLC_ROOT_FILE_NAME}.
- */
- protected Resource findSlcRootFile(Resource currDir) {
- if (log.isTraceEnabled())
- log.trace("Look for SLC root file in " + currDir);
-
- try {
- Resource slcRootFile = currDir.createRelative(SLC_ROOT_FILE_NAME);
- if (slcRootFile.exists()) {
- if (log.isDebugEnabled())
- log.debug("Found SLC root file: " + slcRootFile);
- return slcRootFile;
- } else {
- String currPath = currDir.getURL().getPath();
- if (currPath.equals("/") || currPath.equals("")) {
- return null;
- } else {
- return findSlcRootFile(SpringUtils.getParent(currDir));
- }
- }
- } catch (IOException e) {
- throw new SlcException("Problem when looking in SLC root file in "
- + currDir, e);
- }
- }
-}
+++ /dev/null
-package org.argeo.slc.ant;
-
-import java.util.StringTokenizer;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.tools.ant.util.FileNameMapper;
-
-public class RemoveRootDirMapper implements FileNameMapper {
- private Log log = LogFactory.getLog(RemoveRootDirMapper.class);
- private String to = "enabled";
-
- public String[] mapFileName(String sourceFileName) {
- StringTokenizer st = new StringTokenizer(sourceFileName, "/");
- boolean first = true;
- boolean skipRoot = !to.equals("disabled");
- StringBuffer buf = new StringBuffer("");
- while (st.hasMoreTokens()) {
- if (first && skipRoot) { // skip
- st.nextToken();
- first = false;
- } else {
- buf.append(st.nextToken()).append('/');
- }
- }
-
- if (log.isTraceEnabled()) {
- log.trace("Source: " + sourceFileName + " - out: " + buf);
- }
- return new String[] { buf.toString() };
- }
-
- public void setFrom(String from) {
- }
-
- public void setTo(String to) {
- this.to = to;
- }
-
-}
+++ /dev/null
-package org.argeo.slc.ant;\r
-\r
-import java.util.List;\r
-import java.util.Vector;\r
-\r
-import org.apache.log4j.AppenderSkeleton;\r
-import org.apache.log4j.Level;\r
-import org.apache.log4j.MDC;\r
-import org.apache.log4j.spi.LoggingEvent;\r
-import org.apache.tools.ant.BuildEvent;\r
-import org.apache.tools.ant.BuildListener;\r
-import org.apache.tools.ant.Project;\r
-import org.argeo.slc.SlcException;\r
-import org.argeo.slc.process.SlcExecution;\r
-import org.argeo.slc.process.SlcExecutionNotifier;\r
-import org.argeo.slc.process.SlcExecutionStep;\r
-\r
-public class SlcExecutionBuildListener extends AppenderSkeleton implements\r
- BuildListener {\r
- private List<SlcExecutionNotifier> notifiers = new Vector<SlcExecutionNotifier>();\r
-\r
- private boolean currentStepNotified = true;\r
-\r
- // CUSTOMIZATIONS\r
- /**\r
- * Whether to log Ant initialization stuff before the first target has been\r
- * called.\r
- */\r
- private boolean logBeforeFirstTarget = false;\r
- /** Whether the first target has been called. */\r
- private boolean firstTargetStarted = false;\r
-\r
- private boolean logTaskStartFinish = true;\r
-\r
- public SlcExecutionBuildListener() {\r
- // Default log level\r
- setThreshold(Level.INFO);\r
- }\r
-\r
- public void buildStarted(BuildEvent event) {\r
- SlcExecution slcExecution = getSlcExecution(event);\r
- for (SlcExecutionNotifier notifier : notifiers) {\r
- notifier.newExecution(slcExecution);\r
- }\r
- }\r
-\r
- public void buildFinished(BuildEvent event) {\r
- SlcExecution slcExecution = getSlcExecution(event);\r
- String oldStatus = slcExecution.getStatus();\r
- slcExecution.setStatus(SlcExecution.STATUS_FINISHED);\r
-\r
- for (SlcExecutionNotifier notifier : notifiers) {\r
- notifier.updateStatus(slcExecution, oldStatus, slcExecution\r
- .getStatus());\r
- }\r
- }\r
-\r
- public void messageLogged(BuildEvent event) {\r
- if (!shouldLog())\r
- return;\r
-\r
- SlcExecution slcExecution = getSlcExecution(event);\r
- if (slcExecution != null) {\r
- if (currentStepNotified) {\r
- slcExecution.getSteps().add(\r
- new SlcExecutionStep(event.getMessage()));\r
- notifyStep(slcExecution, slcExecution.currentStep());\r
- currentStepNotified = true;\r
- } else {\r
- slcExecution.currentStep().addLog(event.getMessage());\r
- }\r
- } else {\r
- // TODO: log before initialization?\r
- }\r
- }\r
-\r
- public void targetStarted(BuildEvent event) {\r
- if (!firstTargetStarted)\r
- firstTargetStarted = true;\r
-\r
- addLogStep(event, "Target " + event.getTarget().getName() + " started");\r
- }\r
-\r
- public void targetFinished(BuildEvent event) {\r
- addLogStep(event, "Target " + event.getTarget().getName() + " finished");\r
- }\r
-\r
- public void taskStarted(BuildEvent event) {\r
- if (!shouldLog())\r
- return;\r
-\r
- SlcExecution slcExecution = getSlcExecution(event);\r
- if (!currentStepNotified) {\r
- notifyStep(slcExecution, slcExecution.currentStep());\r
- currentStepNotified = true;\r
- }\r
-\r
- String msg = null;\r
- if (logTaskStartFinish)\r
- msg = "Task " + event.getTask().getTaskName() + " started";\r
-\r
- slcExecution.getSteps().add(new SlcExecutionStep(msg));\r
-\r
- currentStepNotified = false;\r
- }\r
-\r
- public void taskFinished(BuildEvent event) {\r
- if (!shouldLog())\r
- return;\r
-\r
- SlcExecution slcExecution = getSlcExecution(event);\r
- if (!currentStepNotified) {\r
-\r
- if (logTaskStartFinish)\r
- slcExecution.currentStep().addLog(\r
- "Task " + event.getTask().getTaskName() + " finished");\r
-\r
- notifyStep(slcExecution, slcExecution.currentStep());\r
- currentStepNotified = true;\r
- }\r
- }\r
-\r
- public void setNotifiers(List<SlcExecutionNotifier> notifiers) {\r
- this.notifiers = notifiers;\r
- }\r
-\r
- protected SlcExecution getSlcExecution(BuildEvent event) {\r
- return getSlcExecution(event.getProject());\r
- }\r
-\r
- protected SlcExecution getSlcExecution(Project project) {\r
- SlcExecution slcExecution = (SlcExecution) project\r
- .getReference(AntConstants.REF_SLC_EXECUTION);\r
-\r
- if (slcExecution == null)\r
- throw new SlcException("No SLC Execution registered.");\r
- return slcExecution;\r
- }\r
-\r
- protected void addLogStep(BuildEvent event, String msg) {\r
- SlcExecution slcExecution = getSlcExecution(event);\r
- slcExecution.getSteps().add(new SlcExecutionStep(msg));\r
-\r
- notifyStep(slcExecution, slcExecution.currentStep());\r
- currentStepNotified = true;\r
- }\r
-\r
- protected void notifyStep(SlcExecution slcExecution, SlcExecutionStep step) {\r
- Vector<SlcExecutionStep> additionalSteps = new Vector<SlcExecutionStep>();\r
- additionalSteps.add(step);\r
- notifySteps(slcExecution, additionalSteps);\r
- }\r
-\r
- protected void notifySteps(SlcExecution slcExecution,\r
- List<SlcExecutionStep> additionalSteps) {\r
- for (SlcExecutionNotifier notifier : notifiers) {\r
- notifier.addSteps(slcExecution, additionalSteps);\r
- }\r
- }\r
-\r
- /* Log4j methods */\r
-\r
- @Override\r
- protected void append(LoggingEvent event) {\r
- Project project = (Project) MDC.get(AntConstants.MDC_ANT_PROJECT);\r
- if (project == null) {\r
- // TODO: find a way to notify it\r
- //System.err.println("No Ant project registered in Log4j MDC.");\r
- } else {\r
- SlcExecution slcExecution = getSlcExecution(project);\r
- if (currentStepNotified) {\r
- slcExecution.getSteps().add(\r
- new SlcExecutionStep(event.getMessage().toString()));\r
- currentStepNotified = false;\r
- } else {\r
- slcExecution.currentStep()\r
- .addLog(event.getMessage().toString());\r
- }\r
- }\r
- }\r
-\r
- protected boolean shouldLog() {\r
- return logBeforeFirstTarget || firstTargetStarted;\r
- }\r
-\r
- public void close() {\r
- }\r
-\r
- public boolean requiresLayout() {\r
- return false;\r
- }\r
-\r
- public void setLogBeforeFirstTarget(boolean logBeforeFirstTarget) {\r
- this.logBeforeFirstTarget = logBeforeFirstTarget;\r
- }\r
-\r
- public void setLogTaskStartFinish(boolean logTaskStartFinish) {\r
- this.logTaskStartFinish = logTaskStartFinish;\r
- }\r
-\r
- public void setLogLevel(String logLevel) {\r
- setThreshold(Level.toLevel(logLevel));\r
- }\r
-\r
-}\r
+++ /dev/null
-package org.argeo.slc.ant.deploy;\r
-\r
-import org.apache.commons.logging.Log;\r
-import org.apache.commons.logging.LogFactory;\r
-import org.apache.tools.ant.BuildException;\r
-import org.argeo.slc.ant.spring.SpringArg;\r
-import org.argeo.slc.ant.structure.SAwareTask;\r
-import org.argeo.slc.build.Distribution;\r
-import org.argeo.slc.deploy.Deployment;\r
-import org.argeo.slc.deploy.DeploymentData;\r
-import org.argeo.slc.deploy.TargetData;\r
-\r
-/** Ant task wrapping a deployment. */\r
-public class SlcDeployTask extends SAwareTask {\r
- private Log log = LogFactory.getLog(SlcDeployTask.class);\r
-\r
- private String deploymentBean = null;\r
-\r
- private SpringArg<DeploymentData> deploymentDataArg;\r
- private SpringArg<TargetData> targetDataArg;\r
- private SpringArg<Distribution> distributionArg;\r
-\r
- @Override\r
- public void executeActions(String mode) throws BuildException {\r
- Deployment deployment = (Deployment) getContext().getBean(\r
- deploymentBean);\r
-\r
- // set overridden references\r
- if (distributionArg != null) {\r
- deployment.setDistribution(distributionArg.getInstance());\r
- log.trace("Overrides distribution");\r
- }\r
-\r
- if (deploymentDataArg != null) {\r
- deployment.setDeploymentData(deploymentDataArg.getInstance());\r
- log.trace("Overrides deployment data");\r
- }\r
-\r
- if (targetDataArg != null) {\r
- deployment.setTargetData(targetDataArg.getInstance());\r
- log.trace("Overrides target data");\r
- }\r
-\r
- deployment.run();\r
- }\r
-\r
- /**\r
- * The bean name of the test run to use. If not set the default is used.\r
- * \r
- * @see SlcAntConfig\r
- */\r
- public void setDeployment(String deploymentBean) {\r
- this.deploymentBean = deploymentBean;\r
- }\r
-\r
- /** Creates deployment data sub tag. */\r
- public SpringArg<DeploymentData> createDeploymentData() {\r
- deploymentDataArg = new SpringArg<DeploymentData>();\r
- return deploymentDataArg;\r
- }\r
-\r
- /** Creates target data sub tag. */\r
- public SpringArg<TargetData> createTargetData() {\r
- targetDataArg = new SpringArg<TargetData>();\r
- return targetDataArg;\r
- }\r
-\r
- public SpringArg<Distribution> createDistribution() {\r
- distributionArg = new SpringArg<Distribution>();\r
- return distributionArg;\r
- }\r
-}\r
+++ /dev/null
-package org.argeo.slc.ant.deploy;
-
-import java.lang.reflect.Method;
-
-import org.argeo.slc.SlcException;
-import org.argeo.slc.ant.structure.SAwareTask;
-import org.argeo.slc.deploy.DeployedSystem;
-import org.argeo.slc.deploy.DeployedSystemManager;
-
-public class SlcManagerTask extends SAwareTask {
- private String action;
- private String manager;
-
- @Override
- protected void executeActions(String mode) {
- DeployedSystemManager<DeployedSystem> systemManager = getBean(manager);
-
- try {
- Method method = systemManager.getClass().getMethod(action, null);
- method.invoke(systemManager, null);
- } catch (Exception e) {
- throw new SlcException("Cannot execute action " + action
- + " for manager " + manager, e);
- }
- }
-
- public void setAction(String action) {
- this.action = action;
- }
-
- public void setManager(String manager) {
- this.manager = manager;
- }
-
-}
+++ /dev/null
-<html>\r
-<head></head>\r
-<body>\r
-Integration of SLC Deploy in Ant.\r
-</body>\r
-</html>
\ No newline at end of file
+++ /dev/null
-<html>\r
-<head></head>\r
-<body>\r
-Bases classes for SLC Ant extensions.\r
-<h2>Introduction</h2>\r
-SLC Ant allows to integrate Ant and Spring in order to run an\r
-application based on top of SLC. Sequence of actions are defined in Ant\r
-files with specific Ant tasks referencing Spring beans implementing the\r
-SLC interfaces. The properties of these beans can be overridden at\r
-runtime in the Ant scripts.\r
-<br />\r
-SLC Ant also provides a tree-based implementation of the SLC structure\r
-which allows to uniquely identify and reference the various actions.\r
-\r
-<h2>Installation</h2>\r
-The structure will be first defined by the directory tree where the Ant\r
-files are stored. In order to define the root of this tree, you need to\r
-place in the root directory an\r
-<b>SLC Ant root file</b>\r
-(default name: slcRoot.properties).\r
-<br />\r
-In this root file you can define a configuration directory and a work\r
-directory (default values are provided if they are not explicitly set).\r
-<br />\r
-Additional properties can then be defined in files stored under the\r
-configuration directory.\r
-<br />\r
-For details about the configuration and the various properties, please\r
-refer to {@link org.argeo.slc.ant.SlcAntConfig}.\r
-\r
-<h2>Running SLC Ant</h2>\r
-SLC Ant can be run either via pure Ant scripts or programmatically using\r
-{@link org.argeo.slc.ant.AntRegistryUtil}. In both cases, make sure that\r
-SLC and its dependencies are in the classpath (Spring (always), logging\r
-system such as log4j, Hibernate, etc.).\r
-\r
-</body>\r
-</html>
\ No newline at end of file
+++ /dev/null
-package org.argeo.slc.ant.spring;\r
-\r
-import org.springframework.context.ApplicationContext;\r
-\r
-import org.apache.tools.ant.Task;\r
-\r
-import org.argeo.slc.ant.AntConstants;\r
-import org.argeo.slc.process.SlcExecution;\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
- AntConstants.REF_ROOT_CONTEXT);\r
- }\r
-\r
- /** Gets the related slc execution or null if not is registered. */\r
- protected SlcExecution getSlcExecution() {\r
- return (SlcExecution) getProject().getReference(\r
- AntConstants.REF_SLC_EXECUTION);\r
- }\r
-}\r
+++ /dev/null
-package org.argeo.slc.ant.spring;
-
-import java.util.List;
-import java.util.Vector;
-
-import org.argeo.slc.SlcException;
-
-/** List of overrides */
-public class ListArg {
- private List<OverrideArg> list = new Vector<OverrideArg>();
-
- /** Creates override sub tag. */
- public OverrideArg createOverride() {
- OverrideArg overrideArg = new OverrideArg();
- list.add(overrideArg);
- return overrideArg;
- }
-
- /** Gets as list of objects. */
- public List<Object> getAsObjectList(List<Object> originalList) {
- if (originalList != null && originalList.size() != list.size()) {
- throw new SlcException("Cannot merge lists of different sizes.");
- }
-
- List<Object> objectList = new Vector<Object>(list.size());
-
- for (int i = 0; i < list.size(); i++) {
- OverrideArg arg = list.get(i);
-
- if (originalList != null)
- arg.setOriginal(originalList.get(i));
-
- objectList.add(arg.getObject());
- }
- return objectList;
- }
-}
+++ /dev/null
-package org.argeo.slc.ant.spring;\r
-\r
-import java.util.List;\r
-import java.util.Map;\r
-import java.util.TreeMap;\r
-import java.util.Vector;\r
-\r
-import org.apache.tools.ant.BuildException;\r
-\r
-import org.argeo.slc.SlcException;\r
-\r
-public class MapArg {\r
- private List<EntryArg> entries = new Vector<EntryArg>();\r
- private Map<String, Object> map = new TreeMap<String, Object>();\r
-\r
- public EntryArg createEntry() {\r
- EntryArg arg = new EntryArg();\r
- entries.add(arg);\r
- return arg;\r
- }\r
-\r
- public Map<String, Object> getAsObjectMap(Map<String, Object> originalMap) {\r
- Map<String, Object> objectMap = new TreeMap<String, Object>();\r
- for (EntryArg arg : entries) {\r
- String key = arg.getKey();\r
-\r
- if (objectMap.containsKey(key)) {\r
- throw new SlcException("Key '" + key + "' already set.");\r
- }\r
-\r
- if (originalMap != null && originalMap.containsKey(key)\r
- && arg.getOverrideArg() != null)\r
- arg.getOverrideArg().setOriginal(originalMap.get(key));\r
-\r
- objectMap.put(key, arg.getObject());\r
-\r
- }\r
- return objectMap;\r
- }\r
-\r
- /**\r
- * Returns a cached reference if it was already called. This reference could\r
- * have been modified externally and thus not anymore be in line with the\r
- * configuration.\r
- */\r
- public Map<String, Object> getMap() {\r
- if (map.size() == 0)\r
- map = getAsObjectMap(null);\r
- return map;\r
- }\r
-\r
- public static class EntryArg {\r
- private String key;\r
- private Object valueStr;\r
- private OverrideArg overrideArg;\r
-\r
- public String getKey() {\r
- return key;\r
- }\r
-\r
- public void setKey(String key) {\r
- this.key = key;\r
- }\r
-\r
- public Object getObject() {\r
- if (overrideArg != null) {\r
- return overrideArg.getObject();\r
- } else if (valueStr != null) {\r
- return valueStr;\r
- } else {\r
- throw new BuildException("Value not set.");\r
- }\r
- }\r
-\r
- public void setValue(String value) {\r
- check();\r
- this.valueStr = value;\r
- }\r
-\r
- public OverrideArg createOverride() {\r
- check();\r
- overrideArg = new OverrideArg();\r
- return overrideArg;\r
- }\r
-\r
- private void check() {\r
- if (valueStr != null || overrideArg != null) {\r
- throw new BuildException("Value already set");\r
- }\r
- }\r
-\r
- public OverrideArg getOverrideArg() {\r
- return overrideArg;\r
- }\r
-\r
- }\r
-}\r
+++ /dev/null
-package org.argeo.slc.ant.spring;\r
-\r
-import java.util.List;\r
-import java.util.Map;\r
-\r
-import org.apache.commons.logging.Log;\r
-import org.apache.commons.logging.LogFactory;\r
-import org.apache.tools.ant.BuildException;\r
-\r
-/** Ant type allowing to override bean properties. */\r
-public class OverrideArg extends SpringArg<Object> {\r
- private final static Log log = LogFactory.getLog(OverrideArg.class);\r
-\r
- private String name;\r
- private Object value;\r
- private ListArg overrideList;\r
- private MapArg overrideMap;\r
-\r
- private Boolean merge = false;\r
-\r
- /** The name of the property to override. */\r
- public String getName() {\r
- return name;\r
- }\r
-\r
- /** Sets the name. */\r
- public void setName(String name) {\r
- this.name = name;\r
- }\r
-\r
- /** Both value and bean cannot be set. */\r
- public void setValue(String value) {\r
- checkValueAlreadySet();\r
- this.value = value;\r
- }\r
-\r
- @Override\r
- public void setBean(String bean) {\r
- checkValueAlreadySet();\r
- super.setBean(bean);\r
- }\r
-\r
- /** Creates override list sub tag. */\r
- public ListArg createList() {\r
- checkValueAlreadySet();\r
- overrideList = new ListArg();\r
- return overrideList;\r
- }\r
-\r
- public MapArg createMap() {\r
- checkValueAlreadySet();\r
- overrideMap = new MapArg();\r
- return overrideMap;\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
- if (log.isTraceEnabled())\r
- log.trace(this + "\t: Returns override object as value");\r
- return value;\r
- } else if (getBean() != null\r
- || getAntref() != null\r
- // works on original if no collection is defined\r
- || (getOriginal() != null && overrideList == null && overrideMap == null)) {\r
- if (log.isTraceEnabled())\r
- log.trace(this + "\t: Returns override object as instance");\r
- return getInstance();\r
- } else if (overrideList != null) {\r
- if (log.isTraceEnabled())\r
- log.trace(this + "\t: Returns override object as list");\r
- return overrideList.getAsObjectList((List<Object>) getOriginal());\r
- } else if (overrideMap != null) {\r
- if (log.isTraceEnabled())\r
- log.trace(this + "\t: Returns override object as map");\r
- return overrideMap\r
- .getAsObjectMap((Map<String, Object>) getOriginal());\r
- } else {\r
- throw new BuildException("Value or bean not set.");\r
- }\r
- }\r
-\r
- protected void checkValueAlreadySet() {\r
- super.checkValueAlreadySet();\r
- if (value != null || overrideList != null || overrideMap != null) {\r
- if (!getMerge()) {\r
- throw new BuildException("Value already set.");\r
- }\r
- }\r
- }\r
-\r
- public Boolean getMerge() {\r
- return merge;\r
- }\r
-\r
- public void setMerge(Boolean merge) {\r
- this.merge = merge;\r
- }\r
-\r
-}\r
+++ /dev/null
-package org.argeo.slc.ant.spring;\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
-import org.apache.tools.ant.types.DataType;\r
-import org.argeo.slc.SlcException;\r
-import org.argeo.slc.ant.AntConstants;\r
-import org.springframework.beans.BeanWrapper;\r
-import org.springframework.beans.BeanWrapperImpl;\r
-import org.springframework.beans.factory.InitializingBean;\r
-import org.springframework.context.ApplicationContext;\r
-\r
-/** Abstract Ant type wrapping a Spring bean. */\r
-public class SpringArg<T> extends DataType {\r
- private final static Log log = LogFactory.getLog(SpringArg.class);\r
-\r
- private List<OverrideArg> overrides = new Vector<OverrideArg>();\r
-\r
- private String bean;\r
- private String antref;\r
- /**\r
- * Reference to the original object, used to merge overrides. <b>this object\r
- * will be modified</b>.\r
- */\r
- private T original;\r
-\r
- // cache bean instance to avoid reading it twice if it is a prototype\r
- private T instance = null;\r
-\r
- /** The <u>name</u> of the underlying bean, as set through the attribute. */\r
- public String getBean() {\r
- return bean;\r
- }\r
-\r
- /** Setter for the bean name. */\r
- public void setBean(String bean) {\r
- checkValueAlreadySet();\r
- this.bean = bean;\r
- }\r
-\r
- public String getAntref() {\r
- return antref;\r
- }\r
-\r
- /** Sets a reference to an ant data type. */\r
- public void setAntref(String antref) {\r
- checkValueAlreadySet();\r
- this.antref = antref;\r
- }\r
-\r
- /**\r
- * Retrieve the instance of the bean, and sets the overridden properties.\r
- * <b>The value is cached.</b>\r
- */\r
- public T getInstance() {\r
- if (instance == null) {\r
- if (log.isTraceEnabled())\r
- log.trace(this + "\t: Creates instance");\r
-\r
- if (bean != null) {\r
- instance = (T) getContext().getBean(bean);\r
- if (instance == null)\r
- throw new SlcException("No object found for Spring bean "\r
- + bean);\r
- } else if (antref != null) {\r
- instance = (T) getProject().getReference(antref);\r
- if (instance == null)\r
- throw new SlcException("No object found for Ant reference "\r
- + antref);\r
- } else if (original != null) {\r
- instance = original;\r
- } else {\r
- throw new SlcException(\r
- "Don't know how to retrieve bean instance");\r
- }\r
-\r
- setOverridenProperties(instance);\r
-\r
- // FIXME: why are we doing this? Could not find any object using it\r
- if (instance instanceof InitializingBean) {\r
- try {\r
- ((InitializingBean) instance).afterPropertiesSet();\r
- } catch (Exception e) {\r
- throw new SlcException("Could not initialize bean", e);\r
- }\r
- }\r
- } else {\r
- if (log.isTraceEnabled())\r
- log.trace(this + "\t: Returns cached instance");\r
- }\r
- return instance;\r
- }\r
-\r
- protected void setOverridenProperties(Object obj) {\r
- BeanWrapper wrapper = new BeanWrapperImpl(obj);\r
- for (OverrideArg override : overrides) {\r
- if (override.getName() == null) {\r
- throw new SlcException(\r
- "The name of the property to override has to be set.");\r
- }\r
-\r
- if (log.isTraceEnabled())\r
- log.trace(this + "\t: Overrides property " + override.getName()\r
- + " with " + override);\r
-\r
- if (override.getMerge() == true) {\r
- // if override is marked as merged retrieve the value and set is\r
- // as original\r
- override.setOriginal(wrapper.getPropertyValue(override\r
- .getName()));\r
- }\r
- wrapper.setPropertyValue(override.getName(), override.getObject());\r
- }\r
-\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
- AntConstants.REF_ROOT_CONTEXT);\r
- }\r
-\r
- protected void checkValueAlreadySet() {\r
- if (antref != null || bean != null || original != null) {\r
- throw new SlcException("Instance value already defined.");\r
- }\r
- }\r
-\r
- public void setOriginal(T original) {\r
- checkValueAlreadySet();\r
- this.original = original;\r
- }\r
-\r
- public T getOriginal() {\r
- return original;\r
- }\r
-\r
- @Override\r
- public String toString() {\r
- StringBuffer buf = new StringBuffer(getClass().getSimpleName());\r
- if (bean != null) {\r
- buf.append("#bean=").append(bean);\r
- } else if (antref != null) {\r
- buf.append("#antref=").append(antref);\r
- } else if (original != null) {\r
- buf.append("#orig=").append(original.hashCode());\r
- } else {\r
- buf.append("#noid");\r
- }\r
- buf.append("#").append(hashCode());\r
- return buf.toString();\r
- }\r
-}\r
+++ /dev/null
-package org.argeo.slc.ant.spring;
-
-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.BuildException;
-
-public class SpringRegister extends AbstractSpringTask {
- private static final Log log = LogFactory.getLog(SpringRegister.class);
-
- private List<BeanArg> beans = new Vector<BeanArg>();
-
- @Override
- public void execute() throws BuildException {
- for (BeanArg bean : beans) {
- Object instance = bean.getInstance();
- if (bean.getAntid() != null) {
- getProject().addReference(bean.getAntid(), instance);
- } else {
- if (bean.getAntref() != null) {
- log
- .warn("Cannot register beans with antref (Ant reference "
- + bean.getAntref() + ")");
- } else {
- getProject().addReference(bean.getBean(), instance);
- }
- }
- }
- }
-
- public BeanArg createObject() {
- BeanArg bean = new BeanArg();
- beans.add(bean);
- return bean;
- }
-
- protected static class BeanArg extends SpringArg<Object> {
- private String antid;
-
- public String getAntid() {
- return antid;
- }
-
- public void setAntid(String antid) {
- this.antid = antid;
- }
-
- }
-}
+++ /dev/null
-<html>\r
-<head></head>\r
-<body>\r
-Integration of Spring in Ant.\r
-</body>\r
-</html>
\ No newline at end of file
+++ /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
-import org.argeo.slc.SlcException;\r
-import org.argeo.slc.ant.AntConstants;\r
-import org.argeo.slc.ant.spring.AbstractSpringTask;\r
-import org.argeo.slc.ant.spring.SpringArg;\r
-import org.argeo.slc.core.structure.SimpleSElement;\r
-import org.argeo.slc.core.structure.tree.TreeSPath;\r
-import org.argeo.slc.structure.StructureAware;\r
-import org.argeo.slc.structure.StructureElement;\r
-import org.argeo.slc.structure.StructureRegistry;\r
-\r
-/** Ant task that can be registered within a structure. */\r
-public abstract class SAwareTask extends AbstractSpringTask {\r
- private String path;\r
- private TreeSPath treeSPath;\r
- private final List<SpringArg> sAwareArgs = new Vector<SpringArg>();\r
-\r
- private StructureElementArg structureElementArg;\r
-\r
- @Override\r
- public void init() throws BuildException {\r
- StructureRegistry<TreeSPath> registry = getRegistry();\r
- Target target = getOwningTarget();\r
-\r
- TreeSPath targetPath = createTargetPath(target);\r
- SimpleSElement targetElement = (SimpleSElement) registry\r
- .getElement(createTargetPath(target));\r
-\r
- if (targetElement == null) {\r
- targetElement = new SimpleSElement(target.getDescription(),\r
- "<no target desc>");\r
- registry.register(targetPath, targetElement);\r
- }\r
- }\r
-\r
- /**\r
- * Includes this arg in the checks for propagation of structure related\r
- * information.\r
- */\r
- protected void addSAwareArg(SpringArg arg) {\r
- sAwareArgs.add(arg);\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
- if (path == null) {\r
- // register the task in the structure\r
- TreeSPath targetPath = createTargetPath(getOwningTarget());\r
- TreeSPath taskPath = targetPath.createChild(getTaskName()\r
- + targetPath.listChildren(getRegistry()).size());\r
-\r
- treeSPath = taskPath;\r
- } else {\r
- treeSPath = new TreeSPath(path);\r
- }\r
-\r
- if (getRegistry().getElement(treeSPath) == null) {\r
- // No structure element registered.\r
- if (structureElementArg != null) {\r
- getRegistry().register(treeSPath,\r
- structureElementArg.getStructureElement());\r
- } else {\r
- if (getDescription() != null) {\r
- getRegistry().register(treeSPath,\r
- new SimpleSElement(getDescription()));\r
- }\r
- }\r
- }\r
-\r
- // notify registered args\r
- for (SpringArg arg : sAwareArgs) {\r
- Object obj = arg.getInstance();\r
-\r
- if (obj instanceof StructureAware) {\r
- StructureAware<TreeSPath> sAwareT = (StructureAware<TreeSPath>) obj;\r
- sAwareT.notifyCurrentPath(getRegistry(), treeSPath);\r
- }\r
- }\r
-\r
- // execute depending on the registry mode\r
- String mode = getRegistry().getMode();\r
- if (mode.equals(StructureRegistry.ALL)) {\r
- executeActions(mode);\r
- } else if (mode.equals(StructureRegistry.ACTIVE)) {\r
- List<TreeSPath> activePaths = getRegistry().getActivePaths();\r
-\r
- if (activePaths.contains(treeSPath)) {\r
- if (activePaths.contains(treeSPath)) {\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
- public <T> T getBean(String beanName) {\r
- return (T) getContext().getBean(beanName);\r
- }\r
-\r
- /** Create a reference to an external structure element. */\r
- public StructureElementArg createStructureElement() {\r
- if (structureElementArg != null)\r
- throw new SlcException("Arg already set.");\r
- structureElementArg = new StructureElementArg();\r
- return structureElementArg;\r
- }\r
-\r
- /** Gets the underlying structure registry. */\r
- protected StructureRegistry<TreeSPath> getRegistry() {\r
- return (StructureRegistry<TreeSPath>) getProject().getReference(\r
- AntConstants.REF_STRUCTURE_REGISTRY);\r
- }\r
-\r
- /** Creates the treeSPath for a given Ant target. */\r
- protected static TreeSPath createTargetPath(Target target) {\r
- TreeSPath projectPath = (TreeSPath) target.getProject().getReference(\r
- AntConstants.REF_PROJECT_PATH);\r
- return projectPath.createChild(target.getName());\r
- }\r
-\r
- /** Gets the treeSPath under which this task is registered. */\r
- public TreeSPath getTreeSPath() {\r
- return treeSPath;\r
- }\r
-\r
- public String getLabel() {\r
- String description = super.getDescription();\r
- if (description == null) {\r
- return "<no task def>";\r
- } else {\r
- return description;\r
- }\r
- }\r
-\r
- public void setPath(String path) {\r
- this.path = path;\r
- }\r
-}\r
-\r
-class StructureElementArg extends SpringArg {\r
- public StructureElement getStructureElement() {\r
- return (StructureElement) getInstance();\r
- }\r
-}
\ No newline at end of file
+++ /dev/null
-<html>\r
-<head></head>\r
-<body>\r
-Integration of SLC Structure in Ant.\r
-</body>\r
-</html>
\ No newline at end of file
+++ /dev/null
-package org.argeo.slc.ant.test;\r
-\r
-import java.util.Collection;\r
-import java.util.List;\r
-import java.util.Map;\r
-import java.util.Vector;\r
-\r
-import org.apache.tools.ant.types.DataType;\r
-\r
-import org.argeo.slc.SlcException;\r
-import org.argeo.slc.ant.spring.MapArg;\r
-import org.argeo.slc.core.test.context.ContextUtils;\r
-import org.argeo.slc.test.context.ContextAware;\r
-import org.argeo.slc.test.context.ParentContextAware;\r
-\r
-public class ParentContextType extends DataType implements ParentContextAware {\r
- private MapArg values = null;\r
- private MapArg expectedValues = null;\r
-\r
- private String contextAnyFlag = DEFAULT_ANY_FLAG;\r
- private String contextSkipFlag = DEFAULT_SKIP_FLAG;\r
-\r
- private String basedon = null;\r
-\r
- private List<ContextAware> children = new Vector<ContextAware>();\r
-\r
- public MapArg createValues() {\r
- values = new MapArg();\r
- return values;\r
- }\r
-\r
- public MapArg createExpectedValues() {\r
- expectedValues = new MapArg();\r
- return expectedValues;\r
- }\r
-\r
- public void addChildContext(ContextAware contextAware) {\r
- children.add(contextAware);\r
- }\r
-\r
- public Collection<ContextAware> getChildContexts() {\r
- return children;\r
- }\r
-\r
- public String getContextAnyFlag() {\r
- return contextAnyFlag;\r
- }\r
-\r
- public void setContextAnyFlag(String contextAnyFlag) {\r
- this.contextAnyFlag = contextAnyFlag;\r
- }\r
-\r
- public String getContextSkipFlag() {\r
- return contextSkipFlag;\r
- }\r
-\r
- public void setContextSkipFlag(String contextSkipFlag) {\r
- this.contextSkipFlag = contextSkipFlag;\r
- }\r
-\r
- public Map<String, Object> getExpectedValues() {\r
- if (expectedValues == null)\r
- expectedValues = new MapArg();\r
- if (basedon != null) {\r
- Map<String, Object> map = getBaseContext().getExpectedValues();\r
- ContextUtils.putNotContained(expectedValues.getMap(), map);\r
- }\r
- return expectedValues.getMap();\r
- }\r
-\r
- public Map<String, Object> getValues() {\r
- if (values == null)\r
- values = new MapArg();\r
- if (basedon != null) {\r
- Map<String, Object> map = getBaseContext().getValues();\r
- ContextUtils.putNotContained(values.getMap(), map);\r
- }\r
- return values.getMap();\r
- }\r
-\r
- private ParentContextType getBaseContext() {\r
- return (ParentContextType) getProject().getReference(basedon);\r
- }\r
-\r
- public void setValues(Map<String, Object> values) {\r
- throw new SlcException("Cannot override values map.");\r
- }\r
-\r
- public void setUpdateValues(Map<String, Object> overrideValues) {\r
- getValues().putAll(overrideValues);\r
- }\r
-\r
- public void setUpdateExpectedValues(\r
- Map<String, Object> overrideExpectedValues) {\r
- getExpectedValues().putAll(overrideExpectedValues);\r
- }\r
-\r
- public void setBasedon(String basedon) {\r
- this.basedon = basedon;\r
- }\r
-\r
-}\r
+++ /dev/null
-package org.argeo.slc.ant.test;\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
-import org.argeo.slc.ant.spring.SpringArg;\r
-import org.argeo.slc.ant.structure.SAwareTask;\r
-import org.argeo.slc.structure.StructureRegistry;\r
-import org.argeo.slc.test.TestResult;\r
-\r
-/** Ant tasks closing a given result. */\r
-public class SlcCloseTestResultTask extends SAwareTask {\r
- private final static Log log = LogFactory\r
- .getLog(SlcCloseTestResultTask.class);\r
-\r
- public List<SpringArg<TestResult>> results = new Vector<SpringArg<TestResult>>();\r
-\r
- @Override\r
- public void executeActions(String mode) {\r
- if (!mode.equals(StructureRegistry.READ)) {\r
- for (SpringArg<TestResult> result : results) {\r
- try {\r
- result.getInstance().close();\r
- } catch (RuntimeException e) {\r
- log.error("Could not close result "\r
- + (result.getBean() != null ? result.getBean()\r
- : result.getAntref()), e);\r
- }\r
- }\r
- }\r
- }\r
-\r
- public SpringArg<TestResult> createResult() {\r
- SpringArg<TestResult> result = new SpringArg<TestResult>();\r
- results.add(result);\r
- return result;\r
- }\r
-}\r
+++ /dev/null
-package org.argeo.slc.ant.test;\r
-\r
-import org.argeo.slc.ant.structure.SAwareTask;\r
-import org.argeo.slc.structure.StructureAware;\r
-import org.argeo.slc.structure.StructureRegistry;\r
-import org.argeo.slc.test.TestReport;\r
-import org.argeo.slc.test.TestResult;\r
-\r
-/** Ant tasks generating a report. */\r
-public class SlcReportTask extends SAwareTask {\r
- private String result;\r
- private String report;\r
-\r
- @Override\r
- public void executeActions(String mode) {\r
- if (!mode.equals(StructureRegistry.READ)) {\r
- TestResult testResult = null;\r
- if (result != null) {\r
- testResult = (TestResult) getContext().getBean(result);\r
- }\r
- TestReport testReport = (TestReport) getContext().getBean(report);\r
- if (testReport instanceof StructureAware) {\r
- ((StructureAware) testReport).notifyCurrentPath(getRegistry(),\r
- null);\r
- }\r
- testReport.generateTestReport(testResult);\r
- }\r
- }\r
-\r
- /** Sets the bean name of the result to close. */\r
- public void setResult(String bean) {\r
- this.result = bean;\r
- }\r
-\r
- /** Sets the bean name of the report to generate. */\r
- public void setReport(String report) {\r
- this.report = report;\r
- }\r
-\r
-}\r
+++ /dev/null
-package org.argeo.slc.ant.test;\r
-\r
-import org.apache.commons.logging.Log;\r
-import org.apache.commons.logging.LogFactory;\r
-import org.apache.tools.ant.BuildException;\r
-import org.argeo.slc.ant.AntConstants;\r
-import org.argeo.slc.ant.spring.SpringArg;\r
-import org.argeo.slc.ant.structure.SAwareTask;\r
-import org.argeo.slc.core.structure.tree.TreeSPath;\r
-import org.argeo.slc.core.test.SimpleResultPart;\r
-import org.argeo.slc.core.test.SimpleTestResult;\r
-import org.argeo.slc.core.test.SimpleTestRun;\r
-import org.argeo.slc.deploy.DeployedSystem;\r
-import org.argeo.slc.process.SlcExecution;\r
-import org.argeo.slc.spring.SpringUtils;\r
-import org.argeo.slc.structure.StructureAware;\r
-import org.argeo.slc.test.ExecutableTestRun;\r
-import org.argeo.slc.test.TestData;\r
-import org.argeo.slc.test.TestDefinition;\r
-import org.argeo.slc.test.TestResult;\r
-import org.argeo.slc.test.TestResultPart;\r
-import org.argeo.slc.test.TestStatus;\r
-import org.argeo.slc.test.WritableTestRun;\r
-import org.springframework.beans.BeansException;\r
-\r
-/** Ant task wrapping a test run. */\r
-public class SlcTestTask extends SAwareTask {\r
- private Log log = LogFactory.getLog(SlcTestTask.class);\r
-\r
- private String testRunBean = null;\r
-\r
- private SpringArg<TestDefinition> testDefinitionArg;\r
- private SpringArg<TestData> testDataArg;\r
- private SpringArg<DeployedSystem> deployedSystemArg;\r
- private SpringArg<TestResult> testResultArg;\r
-\r
- @Override\r
- public void executeActions(String mode) throws BuildException {\r
- // find test run\r
- final String testRunBeanT;\r
- if (testRunBean != null) {\r
- testRunBeanT = testRunBean;\r
- } else {\r
- testRunBeanT = getProject().getProperty(\r
- AntConstants.DEFAULT_TEST_RUN_PROPERTY);\r
- }\r
- WritableTestRun testRun = null;\r
-\r
- if (testRunBeanT != null) {\r
- try {\r
- testRun = (WritableTestRun) getContext().getBean(testRunBeanT);\r
- if (log.isTraceEnabled())\r
- log.trace("Load test run bean from bean name "\r
- + testRunBeanT);\r
- } catch (BeansException e) {\r
- // silent, will try defaults\r
- }\r
- }\r
-\r
- if (testRun == null) {\r
- testRun = loadSingleFromContext(WritableTestRun.class);\r
- if (testRun == null) {\r
- testRun = new SimpleTestRun();\r
- log.trace("Created default simple test run");\r
- } else {\r
- if (log.isTraceEnabled())\r
- log.trace("Load test run from scanning Spring context");\r
- }\r
- }\r
-\r
- // set overridden references\r
- if (testDataArg != null) {\r
- testRun.setTestData(testDataArg.getInstance());\r
- log.trace("Overrides test data");\r
- }\r
-\r
- if (testDefinitionArg != null) {\r
- testRun.setTestDefinition(testDefinitionArg.getInstance());\r
- log.trace("Overrides test definition");\r
- }\r
-\r
- if (deployedSystemArg != null) {\r
- testRun.setDeployedSystem(deployedSystemArg.getInstance());\r
- log.trace("Overrides deployed system");\r
- }\r
-\r
- if (testResultArg != null) {\r
- testRun.setTestResult(testResultArg.getInstance());\r
- log.trace("Overrides test result");\r
- }\r
-\r
- // notify path to test result\r
- TestResult result = testRun.getTestResult();\r
- if (result == null) {\r
- result = loadSingleFromContext(TestResult.class);\r
- if (result == null) {\r
- result = new SimpleTestResult();\r
- log.warn("Created default simple test result");\r
- } else {\r
- if (log.isTraceEnabled())\r
- log.trace("Load test result from scanning Spring context");\r
- }\r
- testRun.setTestResult(result);\r
- }\r
-\r
- SlcExecution slcExecution = getSlcExecution();\r
- testRun.notifySlcExecution(slcExecution);\r
-\r
- if (result != null && result instanceof StructureAware) {\r
- ((StructureAware<TreeSPath>) result).notifyCurrentPath(\r
- getRegistry(), getTreeSPath());\r
- }\r
-\r
- try {\r
- ((ExecutableTestRun) testRun).run();\r
- } catch (RuntimeException e) {\r
- if (result != null) {\r
- SimpleResultPart errorPart = new SimpleResultPart(\r
- TestStatus.ERROR,\r
- "Unexpected exception when running test", e);\r
- result.addResultPart(errorPart);\r
- }\r
- throw e;\r
- }\r
- }\r
-\r
- /**\r
- * The bean name of the test run to use. If not set the default is used.\r
- * \r
- * @see SlcAntConfig\r
- */\r
- public void setTestRun(String testRunBean) {\r
- this.testRunBean = testRunBean;\r
- }\r
-\r
- /** Creates sub tag. */\r
- public SpringArg<TestDefinition> createTestDefinition() {\r
- testDefinitionArg = new SpringArg<TestDefinition>();\r
- // only test definitions can add to path\r
- addSAwareArg(testDefinitionArg);\r
- return testDefinitionArg;\r
- }\r
-\r
- /** Creates sub tag. */\r
- public SpringArg<TestData> createTestData() {\r
- testDataArg = new SpringArg<TestData>();\r
- return testDataArg;\r
- }\r
-\r
- /** Creates sub tag. */\r
- public SpringArg<DeployedSystem> createDeployedSystem() {\r
- deployedSystemArg = new SpringArg<DeployedSystem>();\r
- return deployedSystemArg;\r
- }\r
-\r
- /** Creates sub tag. */\r
- public SpringArg<TestResult> createTestResult() {\r
- testResultArg = new SpringArg<TestResult>();\r
- return testResultArg;\r
- }\r
-\r
- protected <T> T loadSingleFromContext(Class<T> clss) {\r
- return SpringUtils.loadSingleFromContext(getContext(), clss);\r
- }\r
-}\r
+++ /dev/null
-<html>\r
-<head></head>\r
-<body>\r
-Integration of SLC Test in Ant.\r
-</body>\r
-</html>
\ No newline at end of file
+++ /dev/null
-package org.argeo.slc.ant.unit;
-
-import java.io.File;
-
-import junit.framework.TestCase;
-
-import org.argeo.slc.ant.AntExecutionContext;
-import org.argeo.slc.ant.AntSlcRuntime;
-import org.argeo.slc.runtime.SlcExecutionOutput;
-
-public abstract class AntSlcApplicationTestCase extends TestCase implements
- SlcExecutionOutput<AntExecutionContext> {
-
- /** To be overriden */
- public void postExecution(AntExecutionContext executionContext) {
-
- }
-
- protected String getRootDir() {
- String rootDirPath = System.getProperty("slc.rootDir", "src/slc/root");
- if(!new File(rootDirPath).exists())
- rootDirPath = "src/main/slc/root";// try older convention
- return rootDirPath;
- }
-
- protected String getAbsoluteScript(String relative) {
- return getRootDir() + '/' + relative;
- }
-
- protected void execute(String relativeScript) {
- execute(relativeScript, null);
- }
-
- protected void execute(String relativeScript, String targets) {
- new AntSlcRuntime().executeScript(
- getAbsoluteScript(relativeScript), targets, this);
- }
-
-}
+++ /dev/null
-package org.argeo.slc.ant.unit;
-
-import java.io.File;
-import java.util.UUID;
-
-import org.argeo.slc.ant.AntConstants;
-import org.argeo.slc.ant.AntExecutionContext;
-import org.argeo.slc.ant.AntSlcApplication;
-import org.argeo.slc.process.SlcExecution;
-import org.argeo.slc.runtime.SlcExecutionOutput;
-import org.argeo.slc.unit.AbstractSpringTestCase;
-import org.springframework.core.io.FileSystemResource;
-
-public class MinimalAntClasspathTestCase extends AbstractSpringTestCase
- implements SlcExecutionOutput<AntExecutionContext> {
- protected void execute(String scriptPath) {
- AntSlcApplication slcApp = new AntSlcApplication();
- slcApp.setRootDir(new FileSystemResource(new File("src/test/resources")
- .getAbsolutePath()
- + File.separator));
- slcApp.setWorkDir(new File(System.getProperty("java.io.tmpdir")));
- slcApp.setParentContext(getContext());
-
- SlcExecution slcExecution = new SlcExecution();
- slcExecution.setUuid(UUID.randomUUID().toString());
- slcExecution.getAttributes().put(AntConstants.EXECATTR_ANT_FILE,
- scriptPath);
- slcExecution.setUser("user");
-
- slcApp.execute(slcExecution, null, null, this);
- }
-
- /** to be overridden */
- public void postExecution(AntExecutionContext executionContext) {
- }
-
-}
+++ /dev/null
-log4j.rootLogger=WARN, console, file
-
-## Levels
-log4j.logger.org.argeo=INFO
-
-## Ant (Ant error logging is to verbose)
-log4j.logger.org.apache.tools.ant.UnknownElement=OFF
-log4j.logger.org.apache.tools.ant.Target=OFF
-log4j.logger.org.apache.tools.ant.Project=OFF
-
-## Appenders
-# console uses PatternLayout.
-log4j.appender.console=org.apache.log4j.ConsoleAppender
-log4j.appender.console.layout=org.apache.log4j.PatternLayout
-log4j.appender.console.layout.ConversionPattern= %-5p %d{ISO8601} %m - %c%n
-
-# file uses PatternLayout
-log4j.appender.file=org.apache.log4j.RollingFileAppender
-log4j.appender.file.File=${slc.workDir}/log/slcApp.log
-log4j.appender.file.MaxFileSize=1MB
-log4j.appender.file.MaxBackupIndex=5
-log4j.appender.file.layout=org.apache.log4j.PatternLayout
-log4j.appender.file.layout.ConversionPattern= %-5p %d{ISO8601} %m - %c%n
+++ /dev/null
-# Tasks\r
-slc.test=org.argeo.slc.ant.test.SlcTestTask\r
-slc.deploy=org.argeo.slc.ant.deploy.SlcDeployTask\r
-slc.manager=org.argeo.slc.ant.deploy.SlcManagerTask\r
-slc.closeResult=org.argeo.slc.ant.test.SlcCloseTestResultTask\r
-slc.report=org.argeo.slc.ant.test.SlcReportTask\r
-slc.register=org.argeo.slc.ant.spring.SpringRegister\r
-slc.detached=org.argeo.slc.ant.detached.SlcDetachedTask\r
+++ /dev/null
-# Types\r
-slc.context=org.argeo.slc.ant.test.ParentContextType\r
+++ /dev/null
-package org.argeo.slc.ant;
-
-import java.util.List;
-import java.util.Map;
-import java.util.TreeMap;
-import java.util.Vector;
-
-public class DummyObject {
- private String name;
- private Long value;
- private DummyObject other;
- private List<DummyObject> children = new Vector<DummyObject>();
- private Map<String, DummyObject> map = new TreeMap<String, DummyObject>();
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public Long getValue() {
- return value;
- }
-
- public void setValue(Long value) {
- this.value = value;
- }
-
- public DummyObject getOther() {
- return other;
- }
-
- public void setOther(DummyObject other) {
- this.other = other;
- }
-
- public List<DummyObject> getChildren() {
- return children;
- }
-
- public void setChildren(List<DummyObject> children) {
- this.children = children;
- }
-
- public Map<String, DummyObject> getMap() {
- return map;
- }
-
- public void setMap(Map<String, DummyObject> map) {
- this.map = map;
- }
-
-}
+++ /dev/null
-package org.argeo.slc.ant;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.argeo.slc.ant.unit.MinimalAntClasspathTestCase;
-
-public class OverrideTest extends MinimalAntClasspathTestCase {
- private Log log = LogFactory.getLog(getClass());
-
- public void testSimpleRun() {
- execute("/org/argeo/slc/ant/buildOverride.xml");
- }
-
- @Override
- public void postExecution(AntExecutionContext executionContext) {
- log.info("Analyzing context after execution...");
-
- DummyObject dummy1UnModified = executionContext
- .getAntRef("dummy1.unmodified");
- assertEquals("dummy2", dummy1UnModified.getOther().getName());
- assertEquals(2, dummy1UnModified.getChildren().size());
- assertEquals(2, dummy1UnModified.getMap().size());
-
- DummyObject dummy1Modif1 = executionContext.getAntRef("dummy1.modif1");
- assertEquals("dummy1.modif1", dummy1Modif1.getName());
- assertEquals("dummy3", dummy1Modif1.getOther().getName());
-
- DummyObject dummy1Modif2 = executionContext.getAntRef("dummy1.modif2");
- assertEquals(1, dummy1Modif2.getChildren().size());
- assertEquals("dummy3", dummy1Modif2.getChildren().get(0).getName());
-
- DummyObject dummy1Modif3 = executionContext.getAntRef("dummy1.modif3");
- assertEquals(2, dummy1Modif3.getChildren().size());
- assertEquals("dummy3", dummy1Modif3.getChildren().get(0).getName());
- assertEquals("dummy2", dummy1Modif3.getChildren().get(1).getName());
-
- DummyObject dummy1Modif4 = executionContext.getAntRef("dummy1.modif4");
- assertEquals(2, dummy1Modif4.getChildren().size());
- assertEquals("dummy3", dummy1Modif4.getChildren().get(0).getName());
- assertEquals("dummy1.modif1", dummy1Modif4.getChildren().get(0)
- .getOther().getName());
- assertEquals("dummy2", dummy1Modif4.getChildren().get(1).getName());
- assertEquals(1, dummy1Modif4.getChildren().get(1).getChildren().size());
- assertEquals("dummy3", dummy1Modif4.getChildren().get(1).getChildren()
- .get(0).getName());
-
- DummyObject dummy1Modif5 = executionContext.getAntRef("dummy1.modif5");
- assertEquals(2, dummy1Modif5.getMap().size());
- assertEquals("dummy3", dummy1Modif5.getMap().get("key1").getName());
- assertEquals("dummy2", dummy1Modif5.getMap().get("key2").getName());
-
- DummyObject dummy1Modif6 = executionContext.getAntRef("dummy1.modif6");
- assertEquals(2, dummy1Modif6.getMap().size());
- assertEquals("dummy2.merged", dummy1Modif6.getMap().get("key1").getName());
- assertEquals("dummy3.merged", dummy1Modif6.getMap().get("key2").getName());
-
- }
-
- @Override
- protected String getApplicationContextLocation() {
- return inPackage("acOverride.xml");
- }
-
-}
+++ /dev/null
-package org.argeo.slc.ant;\r
-\r
-import org.argeo.slc.ant.unit.MinimalAntClasspathTestCase;\r
-\r
-public class SlcAntTest extends MinimalAntClasspathTestCase {\r
- // private Log log = LogFactory.getLog(getClass());\r
-\r
- public void testSimpleRun() {\r
- execute("/org/argeo/slc/ant/build.xml");\r
- }\r
-}\r
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
-
-
- <bean id="dummy1" parent="template.dummy" scope="prototype">
- <property name="name" value="dummy1" />
- <property name="other" ref="dummy2" />
- <property name="children">
- <list>
- <ref bean="dummy2" />
- <ref bean="dummy3" />
- </list>
- </property>
- <property name="map">
- <map>
- <entry key="key1">
- <ref bean="dummy2" />
- </entry>
- <entry key="key2">
- <ref bean="dummy3" />
- </entry>
- </map>
- </property>
- </bean>
-
- <bean id="dummy2" parent="template.dummy" scope="prototype">
- <property name="name" value="dummy2" />
- </bean>
-
- <bean id="dummy3" parent="template.dummy" scope="prototype">
- <property name="name" value="dummy3" />
- </bean>
-
- <!-- Templates -->
- <bean id="template.dummy" class="org.argeo.slc.ant.DummyObject"
- abstract="true">
- </bean>
-
-
-
-</beans>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>\r
-<beans xmlns="http://www.springframework.org/schema/beans"\r
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\r
- xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">\r
-\r
- <import resource="classpath:/org/argeo/slc/ant/nonDepContext.xml" />\r
-\r
- <bean id="testResult"\r
- parent="slcDefault.test.basicTreeTestResult">\r
- </bean>\r
-\r
-</beans>
\ No newline at end of file
+++ /dev/null
-<project default="test">\r
-\r
- <target name="test">\r
- <echo message="Hello World!" />\r
-\r
- <slc.test>\r
- <testDefinition bean="testDef" />\r
- <testData bean="testData1" />\r
- </slc.test>\r
-\r
- <slc.test>
- <testDefinition bean="testDef" />
- <testData bean="testData.context1" />
- </slc.test>
-
- <slc.test path="/testRoot/testContext">
- <testDefinition bean="testDef" />
- <testData bean="testData.context1" />
- </slc.test>
-
- <slc.closeResult>
- <result bean="testResult" />
- </slc.closeResult>\r
- </target>\r
-</project>
\ No newline at end of file
+++ /dev/null
-<project default="test">\r
-\r
- <target name="test">\r
- <slc.register>
- <object antid="dummy1.unmodified" bean="dummy1" />
- <object antid="dummy1.modif1" bean="dummy1">
- <override name="name" value="dummy1.modif1" />
- <override name="other" bean="dummy3" />
- </object>
- <object antid="dummy1.modif2" bean="dummy1">
- <override name="children">
- <list>
- <override bean="dummy3" />
- </list>
- </override>
- </object>
- <object antid="dummy1.modif3" bean="dummy1">
- <override name="children" merge="true">
- <list>
- <override>
- <override name="name" value="dummy3" />
- </override>
- <override>
- <override name="name" value="dummy2" />
- </override>
- </list>
- </override>
- </object>
- <object antid="dummy1.modif4" bean="dummy1">
- <override name="children" merge="true">
- <list>
- <override>
- <override name="name" value="dummy3" />
- <override name="other" antref="dummy1.modif1" />
- </override>
- <override>
- <override name="name" value="dummy2" />
- <override name="children">
- <list>
- <override bean="dummy3" />
- </list>
- </override>
- </override>
- </list>
- </override>
- </object>
- <object antid="dummy1.modif5" bean="dummy1">
- <override name="map">
- <map>
- <entry key="key1">
- <override bean="dummy3" />
- </entry>
- <entry key="key2">
- <override bean="dummy2" />
- </entry>
- </map>
- </override>
- </object>
- <object antid="dummy1.modif6" bean="dummy1">
- <override name="map" merge="true">
- <map>
- <entry key="key1">
- <override>
- <override name="name" value="dummy2.merged" />
- </override>
- </entry>
- <entry key="key2">
- <override>
- <override name="name" value="dummy3.merged" />
- </override>
- </entry>
- </map>
- </override>
- </object>
- </slc.register>\r
- </target>\r
-</project>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>\r
-<beans xmlns="http://www.springframework.org/schema/beans"\r
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\r
- xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">\r
-\r
- <import\r
- resource="classpath:/org/argeo/slc/core/test/spring/applicationContext.xml" />\r
-\r
- <bean name="testDef"\r
- class="org.argeo.slc.core.test.BasicTestDefinition" scope="prototype" />\r
-\r
- <bean name="testData1"\r
- class="org.argeo.slc.core.test.BasicTestData">\r
- <property name="expected">\r
- <value>toto</value>\r
- </property>\r
- <property name="reached">\r
- <value>toto</value>\r
- </property>\r
- </bean>\r
-\r
- <bean id="testData.context1" parent="context.template">\r
- <property name="values">\r
- <map>\r
- <entry key="reference" value="20" />\r
- <entry key="varIntern" value="60" />\r
- </map>\r
- </property>\r
- <property name="expectedValues">\r
- <map>\r
- <entry key="reference" value="21" />\r
- <entry key="varIntern" value="60" />\r
- </map>\r
- </property>\r
- </bean>\r
-\r
- <bean id="context.template"\r
- class="org.argeo.slc.core.test.context.DefaultContextTestData"\r
- abstract="true">\r
- </bean>\r
-\r
-</beans>
\ No newline at end of file