X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;ds=sidebyside;f=bundles%2Forg.simantics.graphfile%2Fsrc%2Forg%2Fsimantics%2Fgraphfile%2Futil%2FGraphFileUtil.java;h=9fdbf62c7b5ba4c96c5ce2d5fc5781de000496b6;hb=refs%2Fchanges%2F32%2F232%2F2;hp=d106f474663d0de50b2fbef0916238f1da162d81;hpb=969bd23cab98a79ca9101af33334000879fb60c5;p=simantics%2Fplatform.git 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 d106f4746..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,12 +11,15 @@ *******************************************************************************/ 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; import java.util.Collection; import java.util.HashMap; import java.util.Map; @@ -29,6 +32,7 @@ import org.simantics.db.Resource; import org.simantics.db.WriteGraph; import org.simantics.db.common.request.ReadRequest; import org.simantics.db.common.request.WriteRequest; +import org.simantics.db.common.request.WriteResultRequest; import org.simantics.db.common.utils.LiteralFileUtil; import org.simantics.db.exception.DatabaseException; import org.simantics.db.exception.DoesNotContainValueException; @@ -237,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()); } /** @@ -540,4 +558,22 @@ public class GraphFileUtil { } } } + + public static Resource createFileReference(final Resource parent, final Path path) throws DatabaseException { + return Simantics.getSession().syncRequest(new WriteResultRequest() { + + @Override + public Resource perform(WriteGraph graph) throws DatabaseException { + Layer0 L0 = Layer0.getInstance(graph); + GraphFileResource GF = GraphFileResource.getInstance(graph); + Resource file = graph.newResource(); + graph.claim(file, L0.PartOf, parent); + graph.claim(file, L0.InstanceOf, GF.File); + String name = path.getFileName().toString(); + graph.claimLiteral(file, L0.HasName, name, Bindings.STRING); + graph.claimLiteral(file, GF.SystemPath, path.toAbsolutePath().toString(), Bindings.STRING); + return file; + } + }); + } }