X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.structural2%2Fsrc%2Forg%2Fsimantics%2Fstructural2%2Fvariables%2FConnectionBrowser.java;h=11a49f01705e002a73a44c7e1d2d36aa90d4fafc;hb=c433e87787fb162d3f5d966678aaedf491266080;hp=4a40723ef70110071c47447f57d952110738c02d;hpb=4b2ffb1be3b95a8d7b87fc9267e2b3921643a9b3;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.structural2/src/org/simantics/structural2/variables/ConnectionBrowser.java b/bundles/org.simantics.structural2/src/org/simantics/structural2/variables/ConnectionBrowser.java index 4a40723ef..11a49f017 100644 --- a/bundles/org.simantics.structural2/src/org/simantics/structural2/variables/ConnectionBrowser.java +++ b/bundles/org.simantics.structural2/src/org/simantics/structural2/variables/ConnectionBrowser.java @@ -17,8 +17,8 @@ import org.simantics.db.common.procedure.adapter.TransientCacheAsyncListener; import org.simantics.db.common.request.BinaryRead; import org.simantics.db.common.request.ResourceRead; import org.simantics.db.common.request.TransientUnaryRead; -import org.simantics.db.common.utils.CommonDBUtils; import org.simantics.db.common.utils.NameUtils; +import org.simantics.db.common.utils.NearestOwnerFinder; import org.simantics.db.exception.DatabaseException; import org.simantics.db.exception.NoSingleResultException; import org.simantics.db.layer0.exception.MissingVariableException; @@ -35,8 +35,6 @@ import org.simantics.structural2.Functions.InterfaceResolution; import org.simantics.structural2.queries.ConnectionSet; import org.simantics.structural2.utils.StructuralUtils; import org.simantics.structural2.utils.StructuralUtils.StructuralComponentClass; -import org.simantics.structural2.variables.StandardProceduralChildVariable.FixedConnection; -import org.simantics.utils.datastructures.Pair; import gnu.trove.map.hash.THashMap; import gnu.trove.set.hash.THashSet; @@ -276,7 +274,7 @@ public class ConnectionBrowser { for (Resource composite : graph.getObjects(join, STR.JoinsComposite)) ancestorGenerators.add(composite); } - Resource ancestor = ancestorGenerators.size() == 1 ? ancestorGenerators.iterator().next() : CommonDBUtils.getNearestOwner(graph, ancestorGenerators); + Resource ancestor = ancestorGenerators.size() == 1 ? ancestorGenerators.iterator().next() : NearestOwnerFinder.getNearestOwnerFromDirectOwners(graph, ancestorGenerators); List result = colls.createList(); result.add(ancestor); @@ -337,14 +335,9 @@ public class ConnectionBrowser { Variable conn = child.getPossibleProperty(graph, cp); FixedConnection fc = (FixedConnection)conn.getValue(graph); - Set result = new THashSet(1+fc.cps.size()); - result.add(new ComponentConnectionDescriptor(child, cp));// (graph, STR, curConfiguration, "/" + c.name + "#" + conn.getName(graph))); - for(Pair cpzz : fc.cps) { - if(cpzz.first == null) { - throw new DatabaseException("Lifted connection was not resolved."); - } - result.add(new PairConnectionDescriptor(curConfiguration, cpzz)); - } + Set result = new THashSet(1+fc.size()); + result.add(new ComponentConnectionDescriptor(child, cp)); + fc.addConnectionDescriptors(graph, curConfiguration, result); return result; } else { @@ -631,47 +624,41 @@ public class ConnectionBrowser { needDrill = new THashSet(climbed.size()); needDrill.add(desc); } else { + if(relationType != null) { + if(!filterByRelationType(graph, desc, relationType)) + continue; + } if(result == null) result = new THashSet(climbed.size()); result.add(desc); } } - if(needDrill == null) { - /* - * All descriptors were already flat - just take case of filtering - */ - if(relationType != null) { - ArrayList filtered = new ArrayList(climbed.size()); - for(VariableConnectionPointDescriptor desc : climbed) - if(filterByRelationType(graph, desc, relationType)) - filtered.add(desc); - return filtered; - } else { - return climbed; + if(needDrill != null) { + /* + * There were some descriptors that require drill + */ + for(VariableConnectionPointDescriptor top : needDrill) { + Collection drilled = drill(graph, top); + if(drilled != null) { + for(VariableConnectionPointDescriptor drill : drilled) { + if(relationType != null) { + if(!filterByRelationType(graph, drill, relationType)) + continue; + } + if(result == null) + result = new THashSet(climbed.size()); + result.add(drill); + } + } } } - - /* - * There were some descriptors that require drill - */ - for(VariableConnectionPointDescriptor top : needDrill) { - Collection drilled = drill(graph, top); - if(drilled != null) { - for(VariableConnectionPointDescriptor drill : drilled) { - if(relationType != null) { - if(!filterByRelationType(graph, drill, relationType)) - continue; - } - if(result == null) - result = new THashSet(climbed.size()); - result.add(drill); - } - } + if (result != null) { + return result; + } else { + return Collections.emptySet(); } - return result; - } private static boolean filterByRelationType(ReadGraph graph, VariableConnectionPointDescriptor desc, Resource relationType) throws DatabaseException {