]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.acorn/src/org/simantics/acorn/FileIO.java
Fixing problems in the database unit testing environment with Acorn
[simantics/platform.git] / bundles / org.simantics.acorn / src / org / simantics / acorn / FileIO.java
index aa71732855bab8a6108d9fa2d837ebb3798a2839..a65d19b5b7c82770d6ce58b07b9831dcbdb51b21 100644 (file)
@@ -13,47 +13,32 @@ import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.nio.file.StandardOpenOption;
 import java.nio.file.attribute.FileAttribute;
-import java.util.HashMap;
 import java.util.HashSet;
-import java.util.Map;
 import java.util.Set;
 
 import org.simantics.databoard.file.RuntimeIOException;
 
 public class FileIO {
-       
-    private static final FileAttribute<?>[] NO_ATTRIBUTES = new FileAttribute[0];
-    
+
+    private static final FileAttribute<?>[] NO_ATTRIBUTES = {};
+
     private static final Set<OpenOption> CREATE_OPTIONS = new HashSet<>(2);
     private static final Set<OpenOption> APPEND_OPTIONS = new HashSet<>(1);
-    
+
     static {
         CREATE_OPTIONS.add(StandardOpenOption.WRITE);
         CREATE_OPTIONS.add(StandardOpenOption.CREATE);
-        
+
         APPEND_OPTIONS.add(StandardOpenOption.APPEND);
     }
-    
+
        private Path path;
        private int writePosition = 0;
 
-       private FileIO(Path path) {
+       public FileIO(Path path) {
                this.path = path;
        }
-       
-       private static Map<Path, FileIO> map = new HashMap<Path, FileIO>();
-       
-       public static FileIO get(Path path) {
-               synchronized(map) {
-                       FileIO existing = map.get(path);
-                       if(existing == null) {
-                               existing = new FileIO(path);
-                               map.put(path, existing);
-                       }
-                       return existing;
-               }
-       }
-       
+
        //private static final boolean TRACE_SWAP = false;
        private static final boolean TRACE_PERF = false;
 
@@ -66,15 +51,17 @@ public class FileIO {
                ByteBuffer bb = ByteBuffer.wrap(bytes, 0, length);
                try (FileChannel fc = FileChannel.open(path, options, NO_ATTRIBUTES)) {
             fc.write(bb);
+            
+            writePosition += length;
+            if(TRACE_PERF) {
+                long duration = System.nanoTime()-start;
+                double ds = 1e-9*duration;
+                System.err.println("Wrote " + bytes.length + " bytes @ " + 1e-6*bytes.length / ds + "MB/s");
+            }
+            return result;
+               } catch (Throwable t) {
+                   throw new IOException("An error occured file saving bytes for file " + path.toAbsolutePath().toString(), t);
                }
-               
-        writePosition += length;
-               if(TRACE_PERF) {
-                       long duration = System.nanoTime()-start;
-                       double ds = 1e-9*duration;
-                       System.err.println("Wrote " + bytes.length + " bytes @ " + 1e-6*bytes.length / ds + "MB/s");
-               }
-               return result;
        }
 
     public synchronized byte[] readBytes(int offset, int length) throws IOException {