X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.graphfile%2Fsrc%2Forg%2Fsimantics%2Fgraphfile%2Futil%2FGraphFileUtil.java;h=9fdbf62c7b5ba4c96c5ce2d5fc5781de000496b6;hp=3f668a0519c7b962cca1285d408171121937b0ca;hb=0b471805f017da83d715a0d8409f53bdd009d31e;hpb=145a2884933f2ffdd48d6835729e58f1152d274e diff --git a/bundles/org.simantics.graphfile/src/org/simantics/graphfile/util/GraphFileUtil.java b/bundles/org.simantics.graphfile/src/org/simantics/graphfile/util/GraphFileUtil.java index 3f668a051..9fdbf62c7 100644 --- a/bundles/org.simantics.graphfile/src/org/simantics/graphfile/util/GraphFileUtil.java +++ b/bundles/org.simantics.graphfile/src/org/simantics/graphfile/util/GraphFileUtil.java @@ -11,10 +11,12 @@ *******************************************************************************/ package org.simantics.graphfile.util; +import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; +import java.io.InputStream; import java.nio.ByteBuffer; import java.nio.channels.FileChannel; import java.nio.file.Path; @@ -239,11 +241,25 @@ public class GraphFileUtil { } - public static void writeDataToGraph(WriteGraph graph, byte data[], Resource graphFile) throws IOException, ManyObjectsForFunctionalRelationException, ServiceException { - + public static void writeDataToGraph(WriteGraph graph, byte data[], Resource graphFile) throws IOException, DatabaseException { GraphFileResource gf = GraphFileResource.getInstance(graph); - graph.claimLiteral(graphFile, gf.HasFiledata, data); - graph.claimLiteral(graphFile, gf.LastModified, 0L); + if (USE_RANDOM_ACCESS_BINARY) { + Resource fileData = graph.getPossibleObject(graphFile, gf.HasFiledata); + if (fileData == null) { + Layer0 l0 = Layer0.getInstance(graph); + ClusteringSupport cs = graph.getService(ClusteringSupport.class); + fileData = graph.newResource(cs.createCluster()); + graph.claim(fileData, l0.InstanceOf, l0.ByteArray); + graph.claim(graphFile, gf.HasFiledata, fileData); + graph.createRandomAccessBinary(fileData, Bindings.BYTE_ARRAY.type(), data); + } else { + InputStream input = new ByteArrayInputStream(data); + LiteralFileUtil.copyStreamToRandomAccessBinary(graph, input, fileData); + } + } else { + graph.claimLiteral(graphFile, gf.HasFiledata, data); + } + graph.claimLiteral(graphFile, gf.LastModified, System.currentTimeMillis()); } /**