]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.graphfile/src/org/simantics/graphfile/util/GraphFileUtil.java
Sync git svn branch with SVN repository r33345.
[simantics/platform.git] / bundles / org.simantics.graphfile / src / org / simantics / graphfile / util / GraphFileUtil.java
index 3f668a0519c7b962cca1285d408171121937b0ca..9fdbf62c7b5ba4c96c5ce2d5fc5781de000496b6 100644 (file)
  *******************************************************************************/\r
 package org.simantics.graphfile.util;\r
 \r
+import java.io.ByteArrayInputStream;\r
 import java.io.File;\r
 import java.io.FileInputStream;\r
 import java.io.FileOutputStream;\r
 import java.io.IOException;\r
+import java.io.InputStream;\r
 import java.nio.ByteBuffer;\r
 import java.nio.channels.FileChannel;\r
 import java.nio.file.Path;\r
@@ -239,11 +241,25 @@ public class GraphFileUtil {
                \r
        }\r
        \r
-       public static void writeDataToGraph(WriteGraph graph, byte data[], Resource graphFile) throws IOException, ManyObjectsForFunctionalRelationException, ServiceException {\r
-               \r
+       public static void writeDataToGraph(WriteGraph graph, byte data[], Resource graphFile) throws IOException, DatabaseException {\r
                GraphFileResource gf = GraphFileResource.getInstance(graph);\r
-               graph.claimLiteral(graphFile, gf.HasFiledata, data);\r
-               graph.claimLiteral(graphFile, gf.LastModified, 0L);\r
+               if (USE_RANDOM_ACCESS_BINARY) {\r
+                       Resource fileData = graph.getPossibleObject(graphFile, gf.HasFiledata);\r
+                       if (fileData == null) {\r
+                               Layer0 l0 = Layer0.getInstance(graph);\r
+                               ClusteringSupport cs = graph.getService(ClusteringSupport.class);\r
+                               fileData = graph.newResource(cs.createCluster());\r
+                               graph.claim(fileData, l0.InstanceOf, l0.ByteArray);\r
+                               graph.claim(graphFile, gf.HasFiledata, fileData);\r
+                               graph.createRandomAccessBinary(fileData, Bindings.BYTE_ARRAY.type(), data);\r
+                       } else {\r
+                               InputStream input = new ByteArrayInputStream(data);\r
+                               LiteralFileUtil.copyStreamToRandomAccessBinary(graph, input, fileData);\r
+                       }\r
+               } else {\r
+                       graph.claimLiteral(graphFile, gf.HasFiledata, data);\r
+               }\r
+               graph.claimLiteral(graphFile, gf.LastModified, System.currentTimeMillis());\r
        }\r
        \r
        /**\r