1 package org
.argeo
.slc
.core
.execution
;
4 import java
.text
.SimpleDateFormat
;
6 import org
.apache
.commons
.logging
.Log
;
7 import org
.apache
.commons
.logging
.LogFactory
;
8 import org
.argeo
.slc
.execution
.ExecutionContext
;
9 import org
.springframework
.core
.io
.FileSystemResource
;
10 import org
.springframework
.core
.io
.Resource
;
11 import org
.springframework
.util
.Assert
;
13 public class FileExecutionResources
implements ExecutionResources
{
14 private final static Log log
= LogFactory
15 .getLog(FileExecutionResources
.class);
16 protected final static String DEFAULT_EXECUTION_RESOURCES_DIRNAME
= "executionResources";
17 public final static String DEFAULT_EXECUTION_RESOURCES_TMP_PATH
= System
18 .getProperty("java.io.tmpdir")
22 + DEFAULT_EXECUTION_RESOURCES_DIRNAME
;
25 private ExecutionContext executionContext
;
26 private String prefixDatePattern
= "yyyyMMdd_HHmmss_";
27 private SimpleDateFormat sdf
= null;
29 private Boolean withExecutionSubdirectory
= true;
31 public FileExecutionResources() {
32 // Default base directory
33 String osgiInstanceArea
= System
.getProperty("osgi.instance.area");
34 String osgiInstanceAreaDefault
= System
35 .getProperty("osgi.instance.area.default");
36 String tempDir
= System
.getProperty("java.io.tmpdir");
38 if (osgiInstanceArea
!= null) {
39 // within OSGi with -data specified
40 osgiInstanceArea
= removeFilePrefix(osgiInstanceArea
);
41 baseDir
= new File(osgiInstanceArea
+ File
.separator
42 + DEFAULT_EXECUTION_RESOURCES_DIRNAME
);
43 } else if (osgiInstanceAreaDefault
!= null) {
44 // within OSGi without -data specified
45 osgiInstanceAreaDefault
= removeFilePrefix(osgiInstanceAreaDefault
);
46 baseDir
= new File(osgiInstanceAreaDefault
+ File
.separator
47 + DEFAULT_EXECUTION_RESOURCES_DIRNAME
);
48 } else {// outside OSGi
49 baseDir
= new File(DEFAULT_EXECUTION_RESOURCES_TMP_PATH
);
53 protected SimpleDateFormat
sdf() {
54 // Lazy init in case prefix has been externally set
56 sdf
= new SimpleDateFormat(prefixDatePattern
);
60 public Resource
getWritableResource(String relativePath
) {
61 File file
= getFile(relativePath
);
62 File parentDir
= file
.getParentFile();
64 if (!parentDir
.exists()) {
65 // Creates if necessary
66 if (log
.isTraceEnabled())
67 log
.trace("Creating parent directory " + parentDir
);
70 Resource resource
= new FileSystemResource(file
);
72 if (log
.isTraceEnabled())
73 log
.trace("Returns writable resource " + resource
);
77 public File
getFile(String relativePath
) {
78 Assert
.notNull(executionContext
, "execution context is null");
80 if (withExecutionSubdirectory
) {
81 String path
= baseDir
.getPath() + File
.separator
82 + sdf().format(executionContext
.getCreationDate())
83 + executionContext
.getUuid();
84 File executionDir
= new File(path
);
86 return new File(executionDir
.getPath() + File
.separator
87 + relativePath
.replace('/', File
.separatorChar
));
89 return new File(baseDir
.getPath() + File
.separator
90 + relativePath
.replace('/', File
.separatorChar
));
94 protected String
removeFilePrefix(String url
) {
95 if (url
.startsWith("file:"))
96 return url
.substring("file:".length());
97 else if (url
.startsWith("reference:file:"))
98 return url
.substring("reference:file:".length());
103 public void setBaseDir(File baseDir
) {
104 this.baseDir
= baseDir
;
107 public void setExecutionContext(ExecutionContext executionContext
) {
108 this.executionContext
= executionContext
;
111 public void setPrefixDatePattern(String prefixDatePattern
) {
112 this.prefixDatePattern
= prefixDatePattern
;
115 public File
getBaseDir() {
119 public ExecutionContext
getExecutionContext() {
120 return executionContext
;
123 public String
getPrefixDatePattern() {
124 return prefixDatePattern
;
127 public void setWithExecutionSubdirectory(Boolean withExecutionSubdirectory
) {
128 this.withExecutionSubdirectory
= withExecutionSubdirectory
;