X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.graph%2Fsrc%2Forg%2Fsimantics%2Fgraph%2Frefactoring%2FTransferableGraphHasher.java;fp=bundles%2Forg.simantics.graph%2Fsrc%2Forg%2Fsimantics%2Fgraph%2Frefactoring%2FTransferableGraphHasher.java;h=e1cf3f6f4b7612cc55c1de5799224fd1defd3322;hp=0000000000000000000000000000000000000000;hb=77921feee3f8331ab54796ff0832921405bea874;hpb=9436bf9b21fc26aa7eb41d128ebe42c9668cedf4 diff --git a/bundles/org.simantics.graph/src/org/simantics/graph/refactoring/TransferableGraphHasher.java b/bundles/org.simantics.graph/src/org/simantics/graph/refactoring/TransferableGraphHasher.java new file mode 100644 index 000000000..e1cf3f6f4 --- /dev/null +++ b/bundles/org.simantics.graph/src/org/simantics/graph/refactoring/TransferableGraphHasher.java @@ -0,0 +1,56 @@ +package org.simantics.graph.refactoring; + +import java.nio.file.Path; +import java.nio.file.Paths; + +import org.simantics.databoard.Bindings; +import org.simantics.databoard.adapter.AdaptException; +import org.simantics.databoard.binding.Binding; +import org.simantics.databoard.binding.error.BindingException; +import org.simantics.databoard.binding.mutable.Variant; +import org.simantics.databoard.container.DataContainer; +import org.simantics.databoard.container.DataContainers; +import org.simantics.graph.representation.Extensions; +import org.simantics.graph.representation.TransferableGraph1; + +/** + * @author Tuukka Lehtonen + * @since 1.34.0 + */ +public class TransferableGraphHasher { + + public static int hashTG(TransferableGraph1 tg) throws BindingException { + return TransferableGraph1.BINDING.hashValue(tg); + } + + public static DataContainer addHashToTG(DataContainer tgContainer, TransferableGraph1 tg) throws BindingException { + Binding tgb = TransferableGraph1.BINDING; + tgContainer.metadata.put(Extensions.CACHED_HASHCODE, new Variant(Bindings.INTEGER, hashTG(tg))); + tgContainer.content = new Variant(tgb, tg); + return tgContainer; + } + + public static DataContainer addHashToTG(DataContainer tgContainer) throws BindingException, AdaptException { + return addHashToTG(tgContainer, (TransferableGraph1) tgContainer.content.getValue(TransferableGraph1.BINDING)); + } + + public static void hashTG(Path input, Path output) throws Exception { + System.out.format("Adding cached hash value to transferable graph%n\t" + input.toString() + "%nto%n\t" + output.toString()); + DataContainers.writeFile(output.toFile(), + addHashToTG( + DataContainers.readFile(input.toFile(), TransferableGraph1.BINDING) )); + } + + public static void main(String[] args) throws Exception { + if (args.length == 0) { + System.out.println("Required arguments: []"); + } else if (args.length == 1) { + // In-place hash + Path p = Paths.get(args[0]); + hashTG(p, p); + } else { + hashTG(Paths.get(args[0]), Paths.get(args[1])); + } + } + +}