From: Mathieu Baudier Date: Mon, 11 May 2009 13:41:01 +0000 (+0000) Subject: Introduce a factory bean to use execution resources X-Git-Tag: argeo-slc-2.1.7~1892 X-Git-Url: http://git.argeo.org/?a=commitdiff_plain;h=5ae9dc81ad1c3ddfa99a8456b0c5263dd483642d;p=gpl%2Fargeo-slc.git Introduce a factory bean to use execution resources git-svn-id: https://svn.argeo.org/slc/trunk@2433 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- diff --git a/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/core/execution/ExecutionResourcesFactoryBean.java b/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/core/execution/ExecutionResourcesFactoryBean.java new file mode 100644 index 000000000..68ff63ef6 --- /dev/null +++ b/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/core/execution/ExecutionResourcesFactoryBean.java @@ -0,0 +1,34 @@ +package org.argeo.slc.core.execution; + +import org.springframework.beans.factory.FactoryBean; +import org.springframework.core.io.Resource; +import org.springframework.util.Assert; + +/** Workaround when execution placedholders needs to be passed.*/ +public class ExecutionResourcesFactoryBean implements FactoryBean { + private ExecutionResources executionResources; + private String relativePath; + + public Object getObject() throws Exception { + Assert.notNull(executionResources, "executionResources is null"); + Assert.notNull(relativePath, "relativePath is null"); + return executionResources.getWritableResource(relativePath); + } + + public Class getObjectType() { + return Resource.class; + } + + public boolean isSingleton() { + return true; + } + + public void setExecutionResources(ExecutionResources executionResources) { + this.executionResources = executionResources; + } + + public void setRelativePath(String relativePath) { + this.relativePath = relativePath; + } + +} diff --git a/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/core/execution/FileExecutionResources.java b/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/core/execution/FileExecutionResources.java index e6530832a..a023fc7f5 100644 --- a/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/core/execution/FileExecutionResources.java +++ b/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/core/execution/FileExecutionResources.java @@ -14,12 +14,20 @@ public class FileExecutionResources implements ExecutionResources { private final static Log log = LogFactory .getLog(FileExecutionResources.class); protected final static String DEFAULT_EXECUTION_RESOURCES_DIRNAME = "executionResources"; + public final static String DEFAULT_EXECUTION_RESOURCES_TMP_PATH = System + .getProperty("java.io.tmpdir") + + File.separator + + "slc" + + File.separator + + DEFAULT_EXECUTION_RESOURCES_DIRNAME; private File baseDir; private ExecutionContext executionContext; private String prefixDatePattern = "yyyyMMdd_HHmmss_"; private SimpleDateFormat sdf = null; + private Boolean withExecutionSubdirectory = true; + public FileExecutionResources() { // Default base directory String osgiInstanceArea = System.getProperty("osgi.instance.area"); @@ -38,8 +46,7 @@ public class FileExecutionResources implements ExecutionResources { baseDir = new File(osgiInstanceAreaDefault + File.separator + DEFAULT_EXECUTION_RESOURCES_DIRNAME); } else {// outside OSGi - baseDir = new File(tempDir + File.separator + "slc" - + File.separator + DEFAULT_EXECUTION_RESOURCES_DIRNAME); + baseDir = new File(DEFAULT_EXECUTION_RESOURCES_TMP_PATH); } } @@ -61,6 +68,7 @@ public class FileExecutionResources implements ExecutionResources { parentDir.mkdirs(); } Resource resource = new FileSystemResource(file); + if (log.isTraceEnabled()) log.trace("Returns writable resource " + resource); return resource; @@ -69,13 +77,18 @@ public class FileExecutionResources implements ExecutionResources { public File getFile(String relativePath) { Assert.notNull(executionContext, "execution context is null"); - String path = baseDir.getPath() + File.separator - + sdf().format(executionContext.getCreationDate()) - + executionContext.getUuid(); - File executionDir = new File(path); - - return new File(executionDir.getPath() + File.separator - + relativePath.replace('/', File.separatorChar)); + if (withExecutionSubdirectory) { + String path = baseDir.getPath() + File.separator + + sdf().format(executionContext.getCreationDate()) + + executionContext.getUuid(); + File executionDir = new File(path); + + return new File(executionDir.getPath() + File.separator + + relativePath.replace('/', File.separatorChar)); + } else { + return new File(baseDir.getPath() + File.separator + + relativePath.replace('/', File.separatorChar)); + } } protected String removeFilePrefix(String url) { @@ -110,4 +123,9 @@ public class FileExecutionResources implements ExecutionResources { public String getPrefixDatePattern() { return prefixDatePattern; } + + public void setWithExecutionSubdirectory(Boolean withExecutionSubdirectory) { + this.withExecutionSubdirectory = withExecutionSubdirectory; + } + } diff --git a/runtime/org.argeo.slc.support.simple/src/main/resources/org/argeo/slc/core/execution/templates.xml b/runtime/org.argeo.slc.support.simple/src/main/resources/org/argeo/slc/core/execution/templates.xml index 12ee7d478..5f022268d 100644 --- a/runtime/org.argeo.slc.support.simple/src/main/resources/org/argeo/slc/core/execution/templates.xml +++ b/runtime/org.argeo.slc.support.simple/src/main/resources/org/argeo/slc/core/execution/templates.xml @@ -7,4 +7,8 @@ + + \ No newline at end of file diff --git a/runtime/org.argeo.slc.support.simple/src/test/java/org/argeo/slc/core/execution/FileExecutionResourcesSpringTest.java b/runtime/org.argeo.slc.support.simple/src/test/java/org/argeo/slc/core/execution/FileExecutionResourcesSpringTest.java new file mode 100644 index 000000000..0d1223a49 --- /dev/null +++ b/runtime/org.argeo.slc.support.simple/src/test/java/org/argeo/slc/core/execution/FileExecutionResourcesSpringTest.java @@ -0,0 +1,53 @@ +package org.argeo.slc.core.execution; + +import java.io.File; + +public class FileExecutionResourcesSpringTest extends + AbstractExecutionFlowTestCase { + private String basePath = FileExecutionResources.DEFAULT_EXECUTION_RESOURCES_TMP_PATH; + + public void testSimple() throws Exception { + File file = getFile("subdir/writeTo"); + try { + assertFalse(file.exists()); + configureAndExecuteSlcFlow("executionResources.xml", + "executionResources.simple"); + assertTrue(file.exists()); + } finally { + file.deleteOnExit(); + } + } + + public void testPlaceholderPass() throws Exception { + File file = getFile("subdir/60"); + try { + assertFalse(file.exists()); + configureAndExecuteSlcFlow("executionResources.xml", + "executionResources.placeholderPass"); + assertTrue(file.exists()); + } finally { + file.deleteOnExit(); + } + } + + /** + * Test that it generate the wrong file because of issue when using + * execution placeholder in contructor-arg + */ + public void testPlaceholderFail() throws Exception { + File file = getFile("subdir/@{var}"); + try { + assertFalse(file.exists()); + configureAndExecuteSlcFlow("executionResources.xml", + "executionResources.placeholderFail"); + assertTrue(file.exists()); + } finally { + file.deleteOnExit(); + } + } + + protected File getFile(String relativePath) { + return new File(basePath + File.separator + + relativePath.replace('/', File.separatorChar)); + } +} diff --git a/runtime/org.argeo.slc.support.simple/src/test/resources/org/argeo/slc/core/execution/executionResources.xml b/runtime/org.argeo.slc.support.simple/src/test/resources/org/argeo/slc/core/execution/executionResources.xml new file mode 100644 index 000000000..8b0f4400b --- /dev/null +++ b/runtime/org.argeo.slc.support.simple/src/test/resources/org/argeo/slc/core/execution/executionResources.xml @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file