*******************************************************************************/\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
\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