From d47f40b5d798eb0f3814ddd166749f13ca96a258 Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Thu, 7 May 2009 15:07:48 +0000 Subject: [PATCH] Attachments management git-svn-id: https://svn.argeo.org/slc/trunk@2419 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- .../conf/attachments.xml | 57 +++++++++++++++++++ .../org.argeo.slc.demo.basic/conf/basic.xml | 22 ++++++- .../resources/org/argeo/slc/castor/msg.xml | 4 ++ .../attachment/FileAttachmentsStorage.java | 20 ++++++- .../slc/core/attachment/SimpleAttachment.java | 4 +- .../core/execution/ExecutionResources.java | 7 +++ .../execution/FileExecutionResources.java | 51 +++++++++++++++++ .../argeo/slc/core/execution/tasks/Echo.java | 22 +++++++ .../slc/core/test/tree/ResultAttributes.java | 14 +++++ .../slc/core/test/tree/TreeTestResult.java | 9 +-- .../org/argeo/slc/core/execution/spring.xml | 1 + .../argeo/slc/core/execution/templates.xml | 10 ++++ 12 files changed, 210 insertions(+), 11 deletions(-) create mode 100644 demo/site/org.argeo.slc.demo.basic/conf/attachments.xml create mode 100644 runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/core/execution/ExecutionResources.java create mode 100644 runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/core/execution/FileExecutionResources.java create mode 100644 runtime/org.argeo.slc.support.simple/src/main/resources/org/argeo/slc/core/execution/templates.xml diff --git a/demo/site/org.argeo.slc.demo.basic/conf/attachments.xml b/demo/site/org.argeo.slc.demo.basic/conf/attachments.xml new file mode 100644 index 000000000..b6e693458 --- /dev/null +++ b/demo/site/org.argeo.slc.demo.basic/conf/attachments.xml @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/demo/site/org.argeo.slc.demo.basic/conf/basic.xml b/demo/site/org.argeo.slc.demo.basic/conf/basic.xml index 686fc5f63..5c1eed7fd 100644 --- a/demo/site/org.argeo.slc.demo.basic/conf/basic.xml +++ b/demo/site/org.argeo.slc.demo.basic/conf/basic.xml @@ -54,16 +54,21 @@ + + + + + + - - + - + @@ -103,5 +108,16 @@ + + + + + + + + + + \ No newline at end of file diff --git a/runtime/org.argeo.slc.support.castor/src/main/resources/org/argeo/slc/castor/msg.xml b/runtime/org.argeo.slc.support.castor/src/main/resources/org/argeo/slc/castor/msg.xml index e523bbdf2..0ba1fdeed 100644 --- a/runtime/org.argeo.slc.support.castor/src/main/resources/org/argeo/slc/castor/msg.xml +++ b/runtime/org.argeo.slc.support.castor/src/main/resources/org/argeo/slc/castor/msg.xml @@ -133,6 +133,10 @@ + + + diff --git a/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/core/attachment/FileAttachmentsStorage.java b/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/core/attachment/FileAttachmentsStorage.java index 1f1089bb2..02e1c8d91 100644 --- a/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/core/attachment/FileAttachmentsStorage.java +++ b/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/core/attachment/FileAttachmentsStorage.java @@ -11,9 +11,23 @@ import org.apache.commons.io.IOUtils; import org.argeo.slc.SlcException; public class FileAttachmentsStorage implements AttachmentsStorage { - private File attachmentsDirectory = new File(System - .getProperty("java.io.tmpdir") - + File.separator + "slcAttachments"); + private File attachmentsDirectory; + + public FileAttachmentsStorage() { + String osgiInstanceArea = System.getProperty("osgi.instance.area"); + if (osgiInstanceArea != null) { + if (osgiInstanceArea.startsWith("file:")) + osgiInstanceArea = osgiInstanceArea.substring("file:".length()); + attachmentsDirectory = new File(osgiInstanceArea + File.separator + + "executionResources"); + } + + if (attachmentsDirectory == null) { + String tempDir = System.getProperty("java.io.tmpdir"); + attachmentsDirectory = new File(tempDir + File.separator + + "slcAttachments"); + } + } public void retrieveAttachment(Attachment attachment, OutputStream outputStream) { diff --git a/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/core/attachment/SimpleAttachment.java b/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/core/attachment/SimpleAttachment.java index f5ee9df67..23dad53f1 100644 --- a/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/core/attachment/SimpleAttachment.java +++ b/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/core/attachment/SimpleAttachment.java @@ -1,7 +1,9 @@ package org.argeo.slc.core.attachment; +import java.util.UUID; + public class SimpleAttachment implements Attachment { - private String uuid; + private String uuid = UUID.randomUUID().toString(); private String name; private String contentType; diff --git a/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/core/execution/ExecutionResources.java b/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/core/execution/ExecutionResources.java new file mode 100644 index 000000000..f10de57dd --- /dev/null +++ b/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/core/execution/ExecutionResources.java @@ -0,0 +1,7 @@ +package org.argeo.slc.core.execution; + +import org.springframework.core.io.Resource; + +public interface ExecutionResources { + public Resource getWritableResource(String 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 new file mode 100644 index 000000000..e35ff0014 --- /dev/null +++ b/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/core/execution/FileExecutionResources.java @@ -0,0 +1,51 @@ +package org.argeo.slc.core.execution; + +import java.io.File; + +import org.argeo.slc.execution.ExecutionContext; +import org.springframework.core.io.FileSystemResource; +import org.springframework.core.io.Resource; + +public class FileExecutionResources implements ExecutionResources { + private File baseDir; + private ExecutionContext executionContext; + + public FileExecutionResources() { + String osgiInstanceArea = System.getProperty("osgi.instance.area"); + if (osgiInstanceArea != null) { + if (osgiInstanceArea.startsWith("file:")) + osgiInstanceArea = osgiInstanceArea.substring("file:".length()); + baseDir = new File(osgiInstanceArea + File.separator + + "executionResources"); + } + + if (baseDir == null) { + String tempDir = System.getProperty("java.io.tmpdir"); + baseDir = new File(tempDir + File.separator + + "slcExecutionResources"); + } + } + + public Resource getWritableResource(String relativePath) { + File file = getFile(relativePath); + file.getParentFile().mkdirs(); + return new FileSystemResource(file); + } + + public File getFile(String relativePath) { + File executionDir = new File(baseDir.getPath() + File.separator + + executionContext.getUuid()); + if (!executionDir.exists()) + executionDir.mkdirs(); + return new File(executionDir.getPath() + File.separator + relativePath); + } + + public void setBaseDir(File baseDir) { + this.baseDir = baseDir; + } + + public void setExecutionContext(ExecutionContext executionContext) { + this.executionContext = executionContext; + } + +} diff --git a/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/core/execution/tasks/Echo.java b/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/core/execution/tasks/Echo.java index 5c9328990..07ec879aa 100644 --- a/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/core/execution/tasks/Echo.java +++ b/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/core/execution/tasks/Echo.java @@ -1,16 +1,34 @@ package org.argeo.slc.core.execution.tasks; +import java.io.File; +import java.io.IOException; + +import org.apache.commons.io.FileUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.argeo.slc.SlcException; +import org.springframework.core.io.Resource; public class Echo implements Runnable { private final static Log defaultLog = LogFactory.getLog(Echo.class); + private Resource writeTo = null; private Log log; private String message; public void run() { log().info(message); + + if (writeTo != null) { + try { + File file = writeTo.getFile(); + if (log().isDebugEnabled()) + log().debug("Write to " + file); + FileUtils.writeStringToFile(file, message); + } catch (IOException e) { + throw new SlcException("Could not write to " + writeTo, e); + } + } } protected Log log() { @@ -25,4 +43,8 @@ public class Echo implements Runnable { this.message = message; } + public void setWriteTo(Resource writeTo) { + this.writeTo = writeTo; + } + } diff --git a/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/core/test/tree/ResultAttributes.java b/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/core/test/tree/ResultAttributes.java index 3a2c842e3..ec09ce51f 100644 --- a/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/core/test/tree/ResultAttributes.java +++ b/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/core/test/tree/ResultAttributes.java @@ -1,13 +1,18 @@ package org.argeo.slc.core.test.tree; +import java.util.ArrayList; import java.util.Date; import java.util.Hashtable; +import java.util.List; import java.util.Map; +import org.argeo.slc.core.attachment.SimpleAttachment; + public class ResultAttributes { private String uuid = null; private Date closeDate = null; private Map attributes = new Hashtable(); + private List attachments = new ArrayList(); public ResultAttributes() { super(); @@ -18,6 +23,7 @@ public class ResultAttributes { this.uuid = ttr.getUuid(); this.attributes = ttr.getAttributes(); this.closeDate = ttr.getCloseDate(); + this.attachments = ttr.getAttachments(); } public String getUuid() { @@ -44,4 +50,12 @@ public class ResultAttributes { this.closeDate = closeDate; } + public List getAttachments() { + return attachments; + } + + public void setAttachments(List attachments) { + this.attachments = attachments; + } + } diff --git a/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/core/test/tree/TreeTestResult.java b/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/core/test/tree/TreeTestResult.java index c7fa530ac..9ab13e9dc 100644 --- a/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/core/test/tree/TreeTestResult.java +++ b/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/core/test/tree/TreeTestResult.java @@ -13,6 +13,7 @@ import org.apache.commons.logging.LogFactory; import org.argeo.slc.SlcException; import org.argeo.slc.core.attachment.Attachment; import org.argeo.slc.core.attachment.AttachmentsEnabled; +import org.argeo.slc.core.attachment.SimpleAttachment; import org.argeo.slc.core.structure.tree.TreeSPath; import org.argeo.slc.structure.StructureAware; import org.argeo.slc.structure.StructureElement; @@ -46,7 +47,7 @@ public class TreeTestResult implements TestResult, StructureAware, private SortedMap resultParts = new TreeMap(); private SortedMap elements = new TreeMap(); - private List attachments = new ArrayList(); + private List attachments = new ArrayList(); private Map attributes = new TreeMap(); @@ -219,16 +220,16 @@ public class TreeTestResult implements TestResult, StructureAware, this.warnIfAlreadyClosed = warnIfAlreadyClosed; } - public List getAttachments() { + public List getAttachments() { return attachments; } - public void setAttachments(List attachments) { + public void setAttachments(List attachments) { this.attachments = attachments; } public void addAttachment(Attachment attachment) { - attachments.add(attachment); + attachments.add((SimpleAttachment) attachment); synchronized (listeners) { for (TestResultListener listener : listeners) { if (listener instanceof TreeTestResultListener) diff --git a/runtime/org.argeo.slc.support.simple/src/main/resources/org/argeo/slc/core/execution/spring.xml b/runtime/org.argeo.slc.support.simple/src/main/resources/org/argeo/slc/core/execution/spring.xml index ef7d1499e..663ea3cb5 100644 --- a/runtime/org.argeo.slc.support.simple/src/main/resources/org/argeo/slc/core/execution/spring.xml +++ b/runtime/org.argeo.slc.support.simple/src/main/resources/org/argeo/slc/core/execution/spring.xml @@ -8,6 +8,7 @@ http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd"> + 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 new file mode 100644 index 000000000..12ee7d478 --- /dev/null +++ b/runtime/org.argeo.slc.support.simple/src/main/resources/org/argeo/slc/core/execution/templates.xml @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file -- 2.39.2