X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.structural2%2Fsrc%2Forg%2Fsimantics%2Fstructural2%2Fvariables%2FConnectionBrowser.java;h=7f43f59d171bb0177c855d869026457a256cffa6;hp=ac1dceceb3ddfce6739ece5c01909ebc7c618c7a;hb=7402926f3949dbb38e9f8f45e864ba4dd65b59b9;hpb=bc24b049b5ec56feb66793df675a6db78860e28f 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 ac1dceceb..7f43f59d1 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 @@ -1,8 +1,5 @@ package org.simantics.structural2.variables; -import gnu.trove.map.hash.THashMap; -import gnu.trove.set.hash.THashSet; - import java.util.ArrayList; import java.util.Collection; import java.util.Collections; @@ -36,9 +33,14 @@ import org.simantics.structural.stubs.StructuralResource2; import org.simantics.structural2.Functions; 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; + public class ConnectionBrowser { /** @@ -79,7 +81,7 @@ public class ConnectionBrowser { Resource relation = graph.getInverse(stat.getPredicate()); //System.out.println(NameUtils.getSafeName(graph, component) + "." + NameUtils.getSafeName(graph, relation)); Resource boundConnection = graph.getPossibleObject(relation, STR.IsBoundBy); - Resource type = graph.getPossibleObject(component, L0.InstanceOf); + Resource type = StructuralUtils.getComponentType(graph, configuration, component); Resource def = type != null ? graph.getPossibleObject(type, STR.IsDefinedBy) : null; if(boundConnection != null && def != null) { // The connection point is bound in component type @@ -383,6 +385,21 @@ public class ConnectionBrowser { } + public static void reportDescriptor(ReadGraph graph, VariableConnectionPointDescriptor d) throws DatabaseException { + + if(d instanceof ActualConnectionDescriptor) { + ActualConnectionDescriptor d2 = (ActualConnectionDescriptor)d; + + System.err.println("--ActualConnectionPointDescriptor2"); + System.err.println("---root: " + d2.root.getURI(graph)); + System.err.println("---component: " + graph.getPossibleURI(d2.component)); + System.err.println("---type: " + graph.getPossibleURI(d2.componentType)); + System.err.println("---cp: " + graph.getPossibleURI(d2.cp)); + System.err.println("---var: " + d2.getVariable(graph).getURI(graph)); + } + + } + public static class ConnectionVariables extends BinaryRead, Collection> { private ConnectionVariables(Variable parameter1, List parameter2) { @@ -427,6 +444,7 @@ public class ConnectionBrowser { @Override public Collection perform(ReadGraph graph) throws DatabaseException { if(parameter == null) return Collections.emptyList(); + Layer0 L0 = Layer0.getInstance(graph); StructuralResource2 STR = StructuralResource2.getInstance(graph); ArrayList result = null; for(int i=1;i(); - result.add(new ActualConnectionDescriptor(parameter, component, connectionPoint)); + String componentName = graph.getRelatedValue(component, L0.HasName, Bindings.STRING); + Variable possibleChild = parameter.getPossibleChild(graph, componentName); + if(possibleChild != null) { + result.add(new ActualConnectionDescriptor(parameter, component, possibleChild.getType(graph), connectionPoint)); + } else { + throw new DatabaseException("No child with name " + componentName + " could be resolved for variable " + parameter.getURI(graph)); + } } } if(result == null) return Collections.emptyList(); @@ -453,12 +477,8 @@ public class ConnectionBrowser { @Override public Boolean perform(ReadGraph graph) throws DatabaseException { - StructuralResource2 STR = StructuralResource2.getInstance(graph); - - if(graph.isInstanceOf(resource, STR.ProceduralComponentType)) return false; - if(graph.hasStatement(resource, STR.IsDefinedBy)) return false; - - return true; + StructuralComponentClass clazz = StructuralComponentClass.get(graph, resource); + return StructuralComponentClass.PRIMITIVE.equals(clazz); } @@ -591,28 +611,42 @@ public class ConnectionBrowser { public static Collection doFlatten(ReadGraph graph, Variable child, Resource cp, Resource relationType) throws DatabaseException { - Collection climbed = climb(graph, child, cp, null); - boolean needDrill = false; + Set result = null; + Set needDrill = null; + + Collection climbed = climb(graph, child, cp, null); for(VariableConnectionPointDescriptor desc : climbed) { if(!desc.isLeaf(graph)) { - needDrill = true; - break; + if(needDrill == null) + needDrill = new THashSet(climbed.size()); + needDrill.add(desc); + } else { + if(result == null) + result = new THashSet(climbed.size()); + result.add(desc); } } - if(!needDrill) { + 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; } - return climbed; } - THashSet result = new THashSet(climbed.size()); - for(VariableConnectionPointDescriptor top : climbed) { + + /* + * There were some descriptors that require drill + */ + for(VariableConnectionPointDescriptor top : needDrill) { Collection drilled = drill(graph, top); if(drilled != null) { for(VariableConnectionPointDescriptor drill : drilled) { @@ -620,6 +654,8 @@ public class ConnectionBrowser { if(!filterByRelationType(graph, drill, relationType)) continue; } + if(result == null) + result = new THashSet(climbed.size()); result.add(drill); } }