]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.graph.db/src/org/simantics/graph/db/TransferableGraphs.java
Allow changing failOnMissing behaviour for migrated TG import.
[simantics/platform.git] / bundles / org.simantics.graph.db / src / org / simantics / graph / db / TransferableGraphs.java
index 6aa24637e4a075792121eace6f5b81447d722e6a..7b1a177045a0f4537299282f7a07c7e50fc8c32c 100644 (file)
@@ -182,10 +182,15 @@ public class TransferableGraphs {
     }
 
     public static ImportResult importGraph1(Session session, VirtualGraph vg, final TransferableGraphSource tg, IImportAdvisor advisor_, TGStatusMonitor monitor) throws DatabaseException {
+       return importGraph1(session, vg, tg, advisor_, monitor, null);
+    }
+    
+    public static ImportResult importGraph1(Session session, VirtualGraph vg, final TransferableGraphSource tg, IImportAdvisor advisor_, TGStatusMonitor monitor, Boolean failOnMissing) throws DatabaseException {
         
         final IImportAdvisor2 advisor = (advisor_ instanceof IImportAdvisor2) ? ((IImportAdvisor2)advisor_) : new WrapperAdvisor(advisor_);
 
-               final StreamingTransferableGraphImportProcess process = new StreamingTransferableGraphImportProcess(session, vg, tg, advisor);
+               final StreamingTransferableGraphImportProcess process = failOnMissing == null ? new StreamingTransferableGraphImportProcess(session, vg, tg, advisor, monitor)
+                                                                                                                                                                         : new StreamingTransferableGraphImportProcess(session, vg, tg, advisor, monitor, failOnMissing);
                session.syncRequest(new ReadRequest() {
                        @Override
                        public void run(ReadGraph graph) throws DatabaseException {
@@ -440,15 +445,23 @@ public class TransferableGraphs {
        }
 
        public static void writeTransferableGraph(RequestProcessor processor, String format, int version, TreeMap<String, Variant> metadata, TransferableGraphSource source, File target, TGStatusMonitor monitor) throws Exception {
-               final Serializer datatypeSerializer = Bindings.getSerializerUnchecked(Datatype.class);
                try (RandomAccessBinary out = new BinaryFile(target, 128*1024)) {
-                       DataContainer container = new DataContainer(format, version, metadata, null);
-                       DataContainers.writeHeader(out, container);
-                       datatypeSerializer.serialize((DataOutput) out, Datatypes.getDatatypeUnchecked(TransferableGraph1.class));
-                       writeTransferableGraph(processor, source, out, monitor);
+                       DataContainers.writeHeader(out, new DataContainer(format, version, metadata, null));
+                       writeTransferableGraphVariant(processor, source, out, monitor);
+               }
+       }
+
+       public static void writeTransferableGraph(RequestProcessor processor, TransferableGraphSource source, File target, TGStatusMonitor monitor) throws Exception {
+               try (RandomAccessBinary out = new BinaryFile(target, 128*1024)) {
+                       writeTransferableGraphVariant(processor, source, out, monitor);
                }
        }
 
+       public static void writeTransferableGraphVariant(RequestProcessor processor, TransferableGraphSource source, RandomAccessBinary out, TGStatusMonitor monitor) throws Exception {
+               Bindings.getSerializerUnchecked(Datatype.class).serialize(out, Datatypes.getDatatypeUnchecked(TransferableGraph1.class));
+               writeTransferableGraph(processor, source, out, monitor);
+       }
+
        private static TGStatusMonitor safeMonitor(TGStatusMonitor mon) {
                return mon == null ? TGStatusMonitor.NULL_MONITOR : mon;
        }
@@ -589,15 +602,14 @@ public class TransferableGraphs {
 
        public static TransferableGraph1 create(ReadGraph graph, TransferableGraphSource source) throws DatabaseException {
                
-               final TIntArrayList statements = new TIntArrayList();
-               final ArrayList<Value> values = new ArrayList<>();
-               final ArrayList<Identity> identities = new ArrayList<>();
-               
                try {
 
+                       ArrayList<Identity> identities = new ArrayList<>(source.getIdentityCount());
+                       source.forIdentities(graph, i -> identities.add(i));
+                       TIntArrayList statements = new TIntArrayList(source.getStatementCount());
                        source.forStatements(graph, r -> statements.addAll(r));
+                       ArrayList<Value> values = new ArrayList<>(source.getValueCount());
                        source.forValues(graph, v -> values.add(v));
-                       source.forIdentities(graph, i -> identities.add(i));
 
                        return new TransferableGraph1(source.getResourceCount(), 
                                        identities.toArray(new Identity[identities.size()]),