From badf9bb44d12177bea24679106d7122f51584ebc Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Thu, 19 Jun 2008 16:54:58 +0000 Subject: [PATCH] New runtime end to end (working) git-svn-id: https://svn.argeo.org/slc/trunk@1255 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- .../org/argeo/slc/ant/AntSlcApplication.java | 36 +++++++----- .../java/org/argeo/slc/ant/SlcAntConfig.java | 7 +-- .../org/argeo/slc/ant/SlcAntConstants.java | 2 + .../org/argeo/slc/ant/test/SlcTestTask.java | 5 +- .../org/argeo/slc/cli/DefaultSlcRuntime.java | 55 +++++++++++++------ .../main/java/org/argeo/slc/cli/SlcMain.java | 1 + 6 files changed, 67 insertions(+), 39 deletions(-) diff --git a/org.argeo.slc.agent/src/main/java/org/argeo/slc/ant/AntSlcApplication.java b/org.argeo.slc.agent/src/main/java/org/argeo/slc/ant/AntSlcApplication.java index 76865aef5..1a69c493b 100644 --- a/org.argeo.slc.agent/src/main/java/org/argeo/slc/ant/AntSlcApplication.java +++ b/org.argeo.slc.agent/src/main/java/org/argeo/slc/ant/AntSlcApplication.java @@ -17,6 +17,7 @@ import org.apache.tools.ant.Project; import org.apache.tools.ant.ProjectHelper; import org.apache.tools.ant.helper.ProjectHelper2; import org.apache.tools.ant.listener.CommonsLoggingListener; +import org.argeo.slc.core.SlcException; import org.argeo.slc.core.process.SlcExecution; import org.argeo.slc.core.structure.DefaultSRegistry; import org.argeo.slc.core.structure.SimpleSElement; @@ -47,6 +48,20 @@ public class AntSlcApplication { public void init() { try { + try { + if (rootDir != null) + System.setProperty(SlcAntConstants.ROOT_DIR_PROPERTY, + rootDir.getURL().toString()); + if (confDir != null) + System.setProperty(SlcAntConstants.CONF_DIR_PROPERTY, + confDir.getURL().toString()); + } catch (IOException e) { + throw new SlcAntException("Cannot interpret dir as URL.", e); + } + if (workDir != null) + System.setProperty(SlcAntConstants.WORK_DIR_PROPERTY, workDir + .toString()); + if (confDir != null && contextLocation == null) { contextLocation = confDir .createRelative("applicationContext.xml"); @@ -70,24 +85,13 @@ public class AntSlcApplication { public SlcExecutionContext execute(SlcExecution slcExecution, Properties properties, Map references) { + log.info("### Start SLC execution " + slcExecution.getUuid() + " ###"); if (log.isDebugEnabled()) { - log.debug("### Start SLC execution " + slcExecution.getUuid() - + " ###"); log.debug("rootDir=" + rootDir); log.debug("confDir=" + confDir); log.debug("workDir=" + workDir); } - if (rootDir != null) - properties.put(SlcAntConstants.ROOT_DIR_PROPERTY, rootDir - .toString()); - if (confDir != null) - properties.put(SlcAntConstants.CONF_DIR_PROPERTY, confDir - .toString()); - if (workDir != null) - properties.put(SlcAntConstants.WORK_DIR_PROPERTY, workDir - .toString()); - // Ant coordinates Resource script = findAntScript(slcExecution); List targets = findAntTargets(slcExecution); @@ -133,7 +137,7 @@ public class AntSlcApplication { log.trace("script(absolute)=" + script); if (script.exists()) return script; - + script = new FileSystemResource(scriptStr); if (log.isTraceEnabled()) log.trace("script(fs)=" + script); @@ -169,6 +173,11 @@ public class AntSlcApplication { .toString())); } + if (System.getProperty(SlcAntConstants.DEFAULT_TEST_RUN_PROPERTY) == null) { + System.setProperty(SlcAntConstants.DEFAULT_TEST_RUN_PROPERTY, + "defaultTestRun"); + } + try { GenericApplicationContext ctx = new GenericApplicationContext( context); @@ -253,7 +262,6 @@ public class AntSlcApplication { } log.debug("scriptPath=" + scriptPath); - List dirNames = new Vector(); StringTokenizer st = new StringTokenizer(scriptPath, "/"); TreeSPath currPath = null; while (st.hasMoreTokens()) { diff --git a/org.argeo.slc.agent/src/main/java/org/argeo/slc/ant/SlcAntConfig.java b/org.argeo.slc.agent/src/main/java/org/argeo/slc/ant/SlcAntConfig.java index 61b78cc7c..4c8981c17 100644 --- a/org.argeo.slc.agent/src/main/java/org/argeo/slc/ant/SlcAntConfig.java +++ b/org.argeo.slc.agent/src/main/java/org/argeo/slc/ant/SlcAntConfig.java @@ -117,9 +117,6 @@ public class SlcAntConfig { // SLC CONF PROPERTIES /** Path to the root Spring application context */ public static String APPLICATION_CONTEXT_PROPERTY = "slc.applicationContext"; - /** Name of the Spring bean used by default */ - public static String DEFAULT_TEST_RUN_PROPERTY = "slc.defaultTestRun"; - // SLC LOCAL PROPERTIES /** Property for the dir label (SLC local property file). */ public static String DIR_LABEL_PROPERTY = "slc.dirLabel"; @@ -239,8 +236,8 @@ public class SlcAntConfig { + "/applicationContext.xml"); } // Default test run - if (all.getProperty(DEFAULT_TEST_RUN_PROPERTY) == null) { - all.setProperty(DEFAULT_TEST_RUN_PROPERTY, "defaultTestRun"); + if (all.getProperty(SlcAntConstants.DEFAULT_TEST_RUN_PROPERTY) == null) { + all.setProperty(SlcAntConstants.DEFAULT_TEST_RUN_PROPERTY, "defaultTestRun"); } // Default log4j diff --git a/org.argeo.slc.agent/src/main/java/org/argeo/slc/ant/SlcAntConstants.java b/org.argeo.slc.agent/src/main/java/org/argeo/slc/ant/SlcAntConstants.java index 2a8405e35..a170b1e33 100644 --- a/org.argeo.slc.agent/src/main/java/org/argeo/slc/ant/SlcAntConstants.java +++ b/org.argeo.slc.agent/src/main/java/org/argeo/slc/ant/SlcAntConstants.java @@ -30,5 +30,7 @@ public interface SlcAntConstants { 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"; } diff --git a/org.argeo.slc.agent/src/main/java/org/argeo/slc/ant/test/SlcTestTask.java b/org.argeo.slc.agent/src/main/java/org/argeo/slc/ant/test/SlcTestTask.java index ece9d3506..651ccad7b 100644 --- a/org.argeo.slc.agent/src/main/java/org/argeo/slc/ant/test/SlcTestTask.java +++ b/org.argeo.slc.agent/src/main/java/org/argeo/slc/ant/test/SlcTestTask.java @@ -4,6 +4,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.tools.ant.BuildException; import org.argeo.slc.ant.SlcAntConfig; +import org.argeo.slc.ant.SlcAntConstants; import org.argeo.slc.ant.spring.SpringArg; import org.argeo.slc.ant.structure.SAwareTask; import org.argeo.slc.core.deploy.DeployedSystem; @@ -38,8 +39,8 @@ public class SlcTestTask extends SAwareTask { if (testRunBean != null) { testRunBeanT = testRunBean; } else { - testRunBeanT = getProject().getUserProperty( - SlcAntConfig.DEFAULT_TEST_RUN_PROPERTY); + testRunBeanT = getProject().getProperty( + SlcAntConstants.DEFAULT_TEST_RUN_PROPERTY); } WritableTestRun testRun = null; diff --git a/org.argeo.slc.agent/src/main/java/org/argeo/slc/cli/DefaultSlcRuntime.java b/org.argeo.slc.agent/src/main/java/org/argeo/slc/cli/DefaultSlcRuntime.java index 15aca3d86..7bb77e578 100644 --- a/org.argeo.slc.agent/src/main/java/org/argeo/slc/cli/DefaultSlcRuntime.java +++ b/org.argeo.slc.agent/src/main/java/org/argeo/slc/cli/DefaultSlcRuntime.java @@ -36,8 +36,11 @@ public class DefaultSlcRuntime extends SimpleSlcRuntime implements public SlcExecutionContext executeScript(Resource script, Properties properties, Map references) { - if (runtimeContext == null) - runtimeContext = new GenericApplicationContext(); + if (runtimeContext == null) { + GenericApplicationContext ctx = new GenericApplicationContext(); + ctx.refresh(); + runtimeContext = ctx; + } SlcExecution slcExecution = new SlcExecution(); slcExecution.setUuid(UUID.randomUUID().toString()); @@ -51,8 +54,13 @@ public class DefaultSlcRuntime extends SimpleSlcRuntime implements slcExecution.setUser(System.getProperty("user.name")); slcExecution.setStatus(SlcExecution.STATUS_RUNNING); - slcExecution.getAttributes().put(SlcAntConstants.EXECATTR_ANT_FILE, - script.toString()); + try { + slcExecution.getAttributes().put(SlcAntConstants.EXECATTR_ANT_FILE, + script.getURL().toString()); + } catch (IOException e) { + throw new SlcException("Cannot interpret script " + script + + " as URL.", e); + } AntSlcApplication application = new AntSlcApplication(); prepareApplication(slcExecution, application, script); @@ -80,7 +88,7 @@ public class DefaultSlcRuntime extends SimpleSlcRuntime implements Resource confDir = null; File workDir = null; // Root dir - final Resource rootDir = getParentOfFile(slcRootFile); + final Resource rootDir = getParent(slcRootFile); // Conf dir String confDirStr = rootProps @@ -89,7 +97,8 @@ public class DefaultSlcRuntime extends SimpleSlcRuntime implements confDir = runtimeContext.getResource(confDirStr); if (confDir == null || !confDir.exists()) { - confDir = rootDir.createRelative("../conf"); + // confDir = rootDir.createRelative("../conf"); + confDir = getParent(rootDir).createRelative("conf/"); } // Work dir @@ -116,8 +125,10 @@ public class DefaultSlcRuntime extends SimpleSlcRuntime implements application.setConfDir(confDir); application.setRootDir(rootDir); application.setWorkDir(workDir); - + application.setSlcRuntime(this); + + application.init(); } catch (IOException e) { throw new SlcException( "Could not prepare SLC application for SLC execution " @@ -161,7 +172,7 @@ public class DefaultSlcRuntime extends SimpleSlcRuntime implements if (currPath.equals("/") || currPath.equals("")) { return null; } else { - return findSlcRootFile(getParentOfDir(currDir)); + return findSlcRootFile(getParent(currDir)); } // int indx = currPath.lastIndexOf('/',currPath.length()-1); @@ -197,19 +208,27 @@ public class DefaultSlcRuntime extends SimpleSlcRuntime implements return p; } - private Resource getParentOfDir(Resource dir) { + private Resource getParent(Resource res) { try { - return dir.createRelative(".."); - } catch (IOException e) { - throw new SlcException("Cannot get parent for resource " + dir, e); - } - } + if (res.getURL().getPath().equals("/")) + return null; - private Resource getParentOfFile(Resource file) { - try { - return file.createRelative("."); + String urlStr = res.getURL().toString(); + if (urlStr.charAt(urlStr.length() - 1) == '/') + urlStr = urlStr.substring(0, urlStr.length() - 2); + + String parentUrlStr = urlStr.substring(0, urlStr.lastIndexOf('/')); + return runtimeContext.getResource(parentUrlStr + '/'); } catch (IOException e) { - throw new SlcException("Cannot get parent for resource " + file, e); + throw new SlcException("Cannot get parent for resource " + res, e); } } + + // private Resource getParentOfFile(Resource file) { + // try { + // return file.createRelative("."); + // } catch (IOException e) { + // throw new SlcException("Cannot get parent for resource " + file, e); + // } + // } } diff --git a/org.argeo.slc.agent/src/main/java/org/argeo/slc/cli/SlcMain.java b/org.argeo.slc.agent/src/main/java/org/argeo/slc/cli/SlcMain.java index 6184c5a76..821e0f679 100644 --- a/org.argeo.slc.agent/src/main/java/org/argeo/slc/cli/SlcMain.java +++ b/org.argeo.slc.agent/src/main/java/org/argeo/slc/cli/SlcMain.java @@ -91,6 +91,7 @@ public class SlcMain { printUsage(); } + // Execution if (mode.equals(Mode.single)) { DefaultSlcRuntime runtime = new DefaultSlcRuntime(); runtime.executeScript(new FileSystemResource(script), properties, -- 2.39.2