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 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.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;
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[]>();
// 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);
this.datatypeBinding = Bindings.getBindingUnchecked(Datatype.class);
this.datatypeSerializer = graph.getService(Databoard.class).getSerializerUnchecked(this.datatypeBinding);
- state.internalEntries = ConsistsOfProcess.walk(graph, status, 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;
}
}
+ for(Resource unnamedChild : pair.second) {
+ if (status.put(unnamedChild, ExtentStatus.INTERNAL) == null) {
+ fringe.add(unnamedChild);
+ }
+ }
+
if (state.monitor.isCanceled())
throw new CancelTransactionException();