]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/core/attachment/FileAttachmentsStorage.java
Fix SVN issues
[gpl/argeo-slc.git] / runtime / org.argeo.slc.support.simple / src / main / java / org / argeo / slc / core / attachment / FileAttachmentsStorage.java
index 1f1089bb263aedb58ffed903eaaf467d0d1f1341..0e70805c061c602f10e678d9063ef176f503d060 100644 (file)
@@ -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
+                                       + "slcAttachments");
+               }
+
+               if (attachmentsDirectory == null) {
+                       String tempDir = System.getProperty("java.io.tmpdir");
+                       attachmentsDirectory = new File(tempDir + File.separator
+                                       + "slcAttachments");
+               }
+       }
 
        public void retrieveAttachment(Attachment attachment,
                        OutputStream outputStream) {
@@ -22,8 +36,9 @@ public class FileAttachmentsStorage implements AttachmentsStorage {
                try {
                        byte[] buffer = new byte[1024 * 1024];
                        in = new FileInputStream(file);
-                       while (in.read(buffer) >= 0) {
-                               outputStream.write(buffer);
+                       int read = -1;
+                       while ((read = in.read(buffer)) >= 0) {
+                               outputStream.write(buffer, 0, read);
                        }
                } catch (IOException e) {
                        throw new SlcException("Cannot write attachment " + attachment