]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/util/DomainProcessor3.java
Fixed SCL Console Clear Console active-state when imports are erroneous
[simantics/platform.git] / bundles / org.simantics.db.layer0 / src / org / simantics / db / layer0 / util / DomainProcessor3.java
index b55f0a3d2d0b9c1ebc4e7b2627b8793f375fafd5..20856d4ced9de92d68b013cb6c545bfc95bdfdff 100644 (file)
@@ -2,9 +2,11 @@ package org.simantics.db.layer0.util;
 
 import java.io.IOException;
 import java.io.InputStream;
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.Iterator;
+import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.TreeSet;
@@ -19,12 +21,14 @@ import org.simantics.db.ReadGraph;
 import org.simantics.db.Resource;
 import org.simantics.db.ResourceMap;
 import org.simantics.db.Statement;
+import org.simantics.db.common.StandardStatement;
 import org.simantics.db.common.primitiverequest.Value;
 import org.simantics.db.common.procedure.adapter.TransientCacheListener;
 import org.simantics.db.common.utils.NameUtils;
 import org.simantics.db.exception.CancelTransactionException;
 import org.simantics.db.exception.DatabaseException;
 import org.simantics.db.layer0.adapter.SubgraphExtent.ExtentStatus;
+import org.simantics.db.layer0.util.ConsistsOfProcess.InternalEntry;
 import org.simantics.db.layer0.util.ModelTransferableGraphSourceRequest.Expansion3;
 import org.simantics.db.service.CollectionSupport;
 import org.simantics.db.service.SerialisationSupport;
@@ -32,6 +36,7 @@ import org.simantics.db.service.TransferableGraphSupport;
 import org.simantics.graph.db.TransferableGraphSource;
 import org.simantics.layer0.Layer0;
 import org.simantics.scl.runtime.function.Function1;
+import org.simantics.utils.datastructures.Pair;
 
 import gnu.trove.list.array.TIntArrayList;
 import gnu.trove.map.hash.TIntIntHashMap;
@@ -58,7 +63,7 @@ public class DomainProcessor3 {
     Map<Resource,Boolean> isRelatedToPredicates = null;
     Set<Resource> deadPredicates = null;
     Set<Resource> strongInverseSet = null;
-
+    List<Statement> unresolvedWeakLinks = new ArrayList<>();
     TIntIntHashMap ids = null;
     ResourceMap<ExtentStatus> status = null;
     Map<Datatype, byte[]> bindings = new HashMap<Datatype, byte[]>();
@@ -364,8 +369,9 @@ public class DomainProcessor3 {
 
                 // The inverse is also weak (or there is no inverse)
                 if(!strongInverseSet.contains(predicate)) {
-
-                    addToStream(predicate, object);
+                       
+                       unresolvedWeakLinks.add(new StandardStatement(subject, predicate, object));
+                    //addToStream(predicate, object);
 
                     if(objectStatus == null) {
                         status.put(object, ExtentStatus.PENDING);
@@ -502,7 +508,11 @@ public class DomainProcessor3 {
             this.datatypeBinding = Bindings.getBindingUnchecked(Datatype.class);
             this.datatypeSerializer = graph.getService(Databoard.class).getSerializerUnchecked(this.datatypeBinding);
 
-            for(Resource r : ConsistsOfProcess.walk(graph, fringe, exclusions, ignoreVirtual)) {
+            Pair<List<InternalEntry>,Set<Resource>> pair = ConsistsOfProcess.walk(graph, status, fringe, exclusions, ignoreVirtual); 
+            state.internalEntries = pair.first;
+            
+            for(InternalEntry entry : state.internalEntries) {
+               Resource r = entry.resource;
                 if (status.put(r, ExtentStatus.INTERNAL) == null) {
                     if(ModelTransferableGraphSourceRequest.LOG) {
                         String URI = graph.getPossibleURI(r);
@@ -513,6 +523,12 @@ public class DomainProcessor3 {
                 }
             }
 
+            for(Resource unnamedChild : pair.second) {
+                if (status.put(unnamedChild, ExtentStatus.INTERNAL) == null) {
+                    fringe.add(unnamedChild);
+                }
+            }
+            
             if (state.monitor.isCanceled())
                 throw new CancelTransactionException();