]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.graph.compiler/src/org/simantics/graph/compiler/GraphCompiler.java
Platform startup performance improvements
[simantics/platform.git] / bundles / org.simantics.graph.compiler / src / org / simantics / graph / compiler / GraphCompiler.java
index 98852bcefafc4962bc90e3e64ae4b15c1b1549d0..53060b767d072409834403e10bb810c870203e51 100644 (file)
@@ -11,16 +11,16 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Formatter;
 import java.util.Locale;
+import java.util.TreeMap;
 
 import org.simantics.databoard.Bindings;
 import org.simantics.databoard.Files;
 import org.simantics.databoard.adapter.AdaptException;
+import org.simantics.databoard.binding.Binding;
 import org.simantics.databoard.binding.error.BindingException;
-import org.simantics.databoard.binding.error.RuntimeBindingConstructionException;
 import org.simantics.databoard.binding.mutable.Variant;
 import org.simantics.databoard.container.DataContainer;
 import org.simantics.databoard.container.DataContainers;
-import org.simantics.databoard.serialization.SerializationException;
 import org.simantics.graph.compiler.internal.parsing.Parsing;
 import org.simantics.graph.compiler.internal.procedures.AddConsistsOf;
 import org.simantics.graph.compiler.internal.procedures.ApplyTemplates;
@@ -39,6 +39,7 @@ import org.simantics.graph.compiler.internal.validation.ValidateGraph;
 import org.simantics.graph.query.CompositeGraph;
 import org.simantics.graph.query.Paths;
 import org.simantics.graph.query.TransferableGraphConversion;
+import org.simantics.graph.representation.Extensions;
 import org.simantics.graph.representation.TransferableGraph1;
 import org.simantics.graph.store.GraphStore;
 import org.simantics.ltk.FileSource;
@@ -56,18 +57,31 @@ public class GraphCompiler {
        }
        
        public static TransferableGraph1 read(InputStream stream) throws AdaptException, IOException {
-               DataContainer container = DataContainers.readFile(new DataInputStream(stream));
-               stream.close();
-               return (TransferableGraph1)container.content.getValue(TransferableGraph1.BINDING);
+               try (InputStream in = stream) {
+                       DataContainer container = DataContainers.readFile(new DataInputStream(stream));
+                       return (TransferableGraph1)container.content.getValue(TransferableGraph1.BINDING);
+               }
        }
        
        public static InputStream write(TransferableGraph1 tg) throws BindingException, IOException {
+               Binding binding = TransferableGraph1.BINDING;
+               int hashCode = binding.hashValue(tg);
+               TreeMap<String, Variant> metadata = new TreeMap<>();
+               metadata.put(Extensions.CACHED_HASHCODE, new Variant(Bindings.INTEGER, hashCode));
                byte[] buffer = DataContainers.writeFile(
-                               new DataContainer("graph", 1, new Variant(TransferableGraph1.BINDING, tg))
+                               new DataContainer("graph", 1, metadata, new Variant(binding, tg))
                                );
                return new ByteArrayInputStream(buffer);
        }
        
+       public static void write(File file, TransferableGraph1 tg) throws BindingException, IOException {
+               Binding binding = TransferableGraph1.BINDING;
+               int hashCode = binding.hashValue(tg);
+               TreeMap<String, Variant> metadata = new TreeMap<>();
+               metadata.put(Extensions.CACHED_HASHCODE, new Variant(Bindings.INTEGER, hashCode));
+               DataContainers.writeFile(file, new DataContainer("graph", 1, metadata, new Variant(binding, tg)));
+       }
+       
        public static CompilationResult compile(
                String Layer0Version,
                        Collection<ISource> sources, 
@@ -200,9 +214,10 @@ public class GraphCompiler {
        
        public static void reportTime(String taskName, long beginTime, long endTime) {
                StringBuilder sb = new StringBuilder();
-           Formatter formatter = new Formatter(sb, Locale.US);
-           formatter.format("%-25s %8.4f ms", taskName, (endTime - beginTime)*1e-6);
-                  
+               @SuppressWarnings("resource")
+               Formatter formatter = new Formatter(sb, Locale.US);
+               formatter.format("%-25s %8.4f ms", taskName, (endTime - beginTime)*1e-6);
+
                out.println(sb.toString());
        }