]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/util/ModelTransferableGraphSourceRequest.java
Exclude fully weak relations to external resources in model TG export
[simantics/platform.git] / bundles / org.simantics.db.layer0 / src / org / simantics / db / layer0 / util / ModelTransferableGraphSourceRequest.java
index 5760f1a026cfa7ab2a5a054c27e6311b13cfe6e1..b7fe6ed7b29f4cf3c9b45358e13eb9f32544dc31 100644 (file)
@@ -438,8 +438,12 @@ public class ModelTransferableGraphSourceRequest extends UniqueRead<ModelTransfe
                                state.externals.add(transientId);
                        } else if(ExtentStatus.PENDING == status) {
                                String uri = graph.getPossibleURI(r);
-                               if(uri != null)
-                                       state.externals.add(transientId);
+                               if(uri != null) {
+                                       // All internal resources with uri have been discovered already => this must then be external
+                                       //state.externals.add(transientId);
+                                       // Pending resources are found through weak links - if they are still pending at this stage do not add an external
+                                       processor.status.put(r, ExtentStatus.EXTERNAL);
+                               }
                                else {
                                        state.pending.add(transientId);
                                        System.err.println("Pending status in export: " + NameUtils.getSafeName(graph, r, true) + " (" + graph.getPossibleURI(r) + ")");
@@ -447,6 +451,21 @@ public class ModelTransferableGraphSourceRequest extends UniqueRead<ModelTransfe
                        }
                }
 
+               // Now that we know the status of the resources lets process weak statements 
+               for(Statement stm : processor.unresolvedWeakLinks) {
+                       ExtentStatus status = processor.status.get(stm.getObject());
+                       if(ExtentStatus.INTERNAL == status) {
+                               // Weak links between internals are exported
+                               int transientId = support.getTransientId(stm.getSubject());
+                               processor.addToStream(stm.getPredicate(), stm.getObject());
+                               try {
+                                       processor.flushStatementStream(transientId, state);
+                               } catch (IOException e) {
+                                       throw new DatabaseException(e);
+                               }
+                       }
+               }
+
                if (state.monitor.isCanceled())
                        throw new CancelTransactionException();