]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/util/DomainProcessor3.java
Clean up and support internal seed resources in tg export
[simantics/platform.git] / bundles / org.simantics.db.layer0 / src / org / simantics / db / layer0 / util / DomainProcessor3.java
index 20856d4ced9de92d68b013cb6c545bfc95bdfdff..c7bc380e5435cbe5e359185448d006de8eda7a45 100644 (file)
@@ -28,7 +28,7 @@ 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.ConsistsOfProcess.ConsistsOfProcessEntry;
 import org.simantics.db.layer0.util.ModelTransferableGraphSourceRequest.Expansion3;
 import org.simantics.db.service.CollectionSupport;
 import org.simantics.db.service.SerialisationSupport;
@@ -57,7 +57,6 @@ public class DomainProcessor3 {
     int id = 0;
 
     Set<Resource> fringe = null;
-    Set<Resource> exclusions = null;
     Function1<Statement,ExclusionDecision> exclusionFunction = null;
     Set<Resource> predicates = null;
     Map<Resource,Boolean> isRelatedToPredicates = null;
@@ -108,7 +107,6 @@ public class DomainProcessor3 {
         ids = state.ids;
         status = cs.createMap(ExtentStatus.class);
         predicates = cs.createSet();
-        exclusions = cs.createSet();
         exclusionFunction = conf.exclusionFunction;
         fringe = new TreeSet<Resource>();
         isRelatedToPredicates = cs.createMap(Boolean.class);
@@ -117,17 +115,10 @@ public class DomainProcessor3 {
 
         for(Map.Entry<Resource, ExtentStatus> entry : conf.preStatus.entrySet()) {
             status.put(entry.getKey(), entry.getValue());
-            if(ExtentStatus.EXCLUDED.equals(entry.getValue())) exclusions.add(entry.getKey());
-            if(ExtentStatus.INTERNAL.equals(entry.getValue())) fringe.add(entry.getKey());
         }
 
        if(PROFILE)
                startupTime += System.nanoTime();
-       
-//        for(RootSpec p : conf.roots) {
-//             if(p.internal)
-//                     fringe.add(p.resource);
-//        }
 
     }
     
@@ -185,10 +176,10 @@ public class DomainProcessor3 {
                
                 if(graph.isSubrelationOf(predicate, L0.IsRelatedTo)) {
                        isRelatedTo = Boolean.TRUE;
-                    if(ModelTransferableGraphSourceRequest.LOG) ModelTransferableGraphSourceRequest.log("isRelatedToPredicates4 => " + NameUtils.getSafeName(graph, predicate));
+                    if(ModelTransferableGraphSourceRequest.DEBUG) ModelTransferableGraphSourceRequest.log("isRelatedToPredicates4 => " + NameUtils.getSafeName(graph, predicate));
                 } else {
                     if (!graph.hasStatement(predicate)) {
-                        if(ModelTransferableGraphSourceRequest.LOG) ModelTransferableGraphSourceRequest.log("FOUND DEAD PREDICATE (no statements): " + predicate);
+                        if(ModelTransferableGraphSourceRequest.DEBUG) ModelTransferableGraphSourceRequest.log("FOUND DEAD PREDICATE (no statements): " + predicate);
                         deadPredicates.add(predicate);
                         // Prevents ModelTransferableGraphSource from
                         // trying to export these statements.
@@ -219,14 +210,13 @@ public class DomainProcessor3 {
                 Resource predicate = stm.getPredicate();
                 Resource object = stm.getObject();
 
-                if (exclusions.contains(object) || exclusions.contains(predicate))
-                    continue;
+                if(ExtentStatus.EXCLUDED.equals(status.get(predicate))) continue;
+                if(ExtentStatus.EXCLUDED.equals(status.get(object))) continue;
                 
                 if (exclusionFunction != null) {
                        ExclusionDecision decision = exclusionFunction.apply(stm);
                        if(ExclusionDecision.EXCLUDE_OBJECT.equals(decision)) {
                                status.put(object, ExtentStatus.EXCLUDED);
-                               exclusions.add(object);
                                continue;
                        }
                 }
@@ -239,10 +229,10 @@ public class DomainProcessor3 {
                         if(predicates.add(inverse)) schedule.add(inverse);
                         state.inverses.put(support.getTransientId(predicate), support.getTransientId(inverse));
                         state.inverses.put(support.getTransientId(inverse), support.getTransientId(predicate));
-                        if(ModelTransferableGraphSourceRequest.LOG) ModelTransferableGraphSourceRequest.log("INVERSE FOR " + graph.getPossibleURI(predicate) + " => " + graph.getPossibleURI(inverse));
+                        if(ModelTransferableGraphSourceRequest.DEBUG) ModelTransferableGraphSourceRequest.log("INVERSE FOR " + graph.getPossibleURI(predicate) + " => " + graph.getPossibleURI(inverse));
                     } else {
                         state.inverses.put(support.getTransientId(predicate), 0);
-                        if(ModelTransferableGraphSourceRequest.LOG) ModelTransferableGraphSourceRequest.log("NO INVERSE FOR " + graph.getPossibleURI(predicate));
+                        if(ModelTransferableGraphSourceRequest.DEBUG) ModelTransferableGraphSourceRequest.log("NO INVERSE FOR " + graph.getPossibleURI(predicate));
                     }
 
                 }
@@ -277,7 +267,7 @@ public class DomainProcessor3 {
     public void processValue(ReadGraph graph, Resource subject, int sId, final DomainProcessorState state) throws DatabaseException, IOException {
         final InputStream valueStream = tgs.getValueStream(graph, subject);
         if (valueStream != null) {
-            if(ModelTransferableGraphSourceRequest.LOG) ModelTransferableGraphSourceRequest.log("[VALUE] " + NameUtils.getSafeName(graph, subject, true));
+            if(ModelTransferableGraphSourceRequest.DEBUG) ModelTransferableGraphSourceRequest.log("[VALUE] " + NameUtils.getSafeName(graph, subject, true));
             state.valueOutput.writeInt(sId);
 
             if (conf.values) {
@@ -343,12 +333,12 @@ public class DomainProcessor3 {
         Boolean isRelatedTo = isRelatedToPredicates.get(predicate);
         if ((objectStatus !=  ExtentStatus.EXCLUDED) && isRelatedTo) {
 
-            if(ModelTransferableGraphSourceRequest.LOG) logStatementWithExtent(graph, "related", objectStatus, subject, predicate, object);
+            if(ModelTransferableGraphSourceRequest.DEBUG) logStatementWithExtent(graph, "related", objectStatus, subject, predicate, object);
 
             addToStream(predicate, object);
 
             if(objectStatus == null || objectStatus == ExtentStatus.PENDING) {
-                if(ModelTransferableGraphSourceRequest.LOG) ModelTransferableGraphSourceRequest.log("[ADDED TO FRINGE] " + NameUtils.getSafeName(graph, object));
+                if(ModelTransferableGraphSourceRequest.DEBUG) ModelTransferableGraphSourceRequest.log("[ADDED TO FRINGE] " + NameUtils.getSafeName(graph, object));
                 fringe.add(object);
             }
 
@@ -356,14 +346,14 @@ public class DomainProcessor3 {
 
             // Dead predicate
             if (deadPredicates.contains(predicate)) {
-                if(ModelTransferableGraphSourceRequest.LOG) logStatementWithExtent(graph, "excluding statement with dead predicate ", objectStatus, subject, predicate, object);
+                if(ModelTransferableGraphSourceRequest.DEBUG) logStatementWithExtent(graph, "excluding statement with dead predicate ", objectStatus, subject, predicate, object);
                 return;
             }
 
             // Weak predicate
             if(objectStatus == ExtentStatus.EXCLUDED) {
 
-                if(ModelTransferableGraphSourceRequest.LOG) logStatementWithExtent(graph, "weak reference to excluded object ", objectStatus, subject, predicate, object);
+                if(ModelTransferableGraphSourceRequest.DEBUG) logStatementWithExtent(graph, "weak reference to excluded object ", objectStatus, subject, predicate, object);
 
             } else {
 
@@ -377,11 +367,11 @@ public class DomainProcessor3 {
                         status.put(object, ExtentStatus.PENDING);
                     }
 
-                    if(ModelTransferableGraphSourceRequest.LOG) logStatementWithExtent(graph, "fully weak internal", objectStatus, subject, predicate, object);
+                    if(ModelTransferableGraphSourceRequest.DEBUG) logStatementWithExtent(graph, "fully weak internal", objectStatus, subject, predicate, object);
 
                 } else {
 
-                    if(ModelTransferableGraphSourceRequest.LOG) logStatementWithExtent(graph, "strong inverse internal ", objectStatus, subject, predicate, object);
+                    if(ModelTransferableGraphSourceRequest.DEBUG) logStatementWithExtent(graph, "strong inverse internal ", objectStatus, subject, predicate, object);
 
                 }
 
@@ -428,7 +418,7 @@ public class DomainProcessor3 {
         }
 
         status.put(subject, ExtentStatus.INTERNAL);
-        if(ModelTransferableGraphSourceRequest.LOG) ModelTransferableGraphSourceRequest.log("[INTERNAL] " + NameUtils.getSafeName(graph, subject, true));
+        if(ModelTransferableGraphSourceRequest.DEBUG) ModelTransferableGraphSourceRequest.log("[INTERNAL] " + NameUtils.getSafeName(graph, subject, true));
 
         int sId = support.getTransientId(subject);
 
@@ -476,12 +466,12 @@ public class DomainProcessor3 {
             }
 
             ExtentStatus subjectStatus = status.get(subject);
-            if(ModelTransferableGraphSourceRequest.LOG && subjectStatus != null) ModelTransferableGraphSourceRequest.log("EXISTING STATUS FOR " + graph.getPossibleURI(subject) + " - " + subjectStatus);
+            if(ModelTransferableGraphSourceRequest.DEBUG && subjectStatus != null) ModelTransferableGraphSourceRequest.log("EXISTING STATUS FOR " + graph.getPossibleURI(subject) + " - " + subjectStatus);
             if(subjectStatus == ExtentStatus.EXTERNAL || subjectStatus == ExtentStatus.EXCLUDED) continue;
             if(partOf && (subjectStatus == null || ExtentStatus.PENDING == subjectStatus) && graph.getPossibleURI(subject) != null) {
 
                 status.put(subject, ExtentStatus.EXTERNAL);
-                if(ModelTransferableGraphSourceRequest.LOG) {
+                if(ModelTransferableGraphSourceRequest.DEBUG) {
                     String uri = graph.getPossibleURI(subject);
                     if(uri == null) ModelTransferableGraphSourceRequest.log("[EXTERNAL]: No URI for " + subject);
                     else ModelTransferableGraphSourceRequest.log("[EXTERNAL] " + uri);
@@ -508,13 +498,13 @@ public class DomainProcessor3 {
             this.datatypeBinding = Bindings.getBindingUnchecked(Datatype.class);
             this.datatypeSerializer = graph.getService(Databoard.class).getSerializerUnchecked(this.datatypeBinding);
 
-            Pair<List<InternalEntry>,Set<Resource>> pair = ConsistsOfProcess.walk(graph, status, fringe, exclusions, ignoreVirtual); 
+            Pair<List<ConsistsOfProcessEntry>,Set<Resource>> pair = ConsistsOfProcess.walk(graph, status, conf.seeds, ignoreVirtual); 
             state.internalEntries = pair.first;
             
-            for(InternalEntry entry : state.internalEntries) {
+            for(ConsistsOfProcessEntry entry : state.internalEntries) {
                Resource r = entry.resource;
                 if (status.put(r, ExtentStatus.INTERNAL) == null) {
-                    if(ModelTransferableGraphSourceRequest.LOG) {
+                    if(ModelTransferableGraphSourceRequest.DEBUG) {
                         String URI = graph.getPossibleURI(r);
                         if(URI != null) ModelTransferableGraphSourceRequest.log("URI INTERNAL " + URI);
                         else ModelTransferableGraphSourceRequest.log("URI has no URI for " + r);
@@ -555,7 +545,7 @@ public class DomainProcessor3 {
     }
 
     void logStatementWithExtent(ReadGraph graph, String header, ExtentStatus status, int sId, int pId, int oId) throws DatabaseException {
-        if(ModelTransferableGraphSourceRequest.LOG) {
+        if(ModelTransferableGraphSourceRequest.DEBUG) {
             SerialisationSupport support = graph.getService(SerialisationSupport.class);
             String s = NameUtils.getURIOrSafeNameInternal(graph, support.getResource(sId));
             String p = NameUtils.getURIOrSafeNameInternal(graph, support.getResource(pId));
@@ -565,7 +555,7 @@ public class DomainProcessor3 {
     }
 
     void logStatementWithExtent(ReadGraph graph, String header, ExtentStatus status, Resource sId, Resource pId, Resource oId) throws DatabaseException {
-        if(ModelTransferableGraphSourceRequest.LOG) {
+        if(ModelTransferableGraphSourceRequest.DEBUG) {
             String s = NameUtils.getURIOrSafeNameInternal(graph, sId);
             String p = NameUtils.getURIOrSafeNameInternal(graph, pId);
             String o = NameUtils.getURIOrSafeNameInternal(graph, oId);