-package org.simantics.modeling.symbolEditor;\r
-\r
-import org.simantics.databoard.Bindings;\r
-import org.simantics.db.Resource;\r
-import org.simantics.db.WriteGraph;\r
-import org.simantics.db.exception.DatabaseException;\r
-import org.simantics.diagram.stubs.DiagramResource;\r
-import org.simantics.layer0.Layer0;\r
-import org.simantics.layer0.utils.direct.GraphUtils;\r
-import org.simantics.modeling.ModelingResources;\r
-import org.simantics.structural.stubs.StructuralResource2;\r
-import org.simantics.structural2.utils.StructuralUtils;\r
-\r
-public class PopulateTerminal {\r
-\r
- public static void addToGraph(WriteGraph g, Resource symbolDiagram, Resource relation, Resource terminal) throws DatabaseException {\r
- StructuralResource2 STR = StructuralResource2.getInstance(g);\r
- DiagramResource DIA = DiagramResource.getInstance(g);\r
- ModelingResources MOD = ModelingResources.getInstance(g);\r
- Layer0 L0 = Layer0.getInstance(g);\r
-\r
- Resource definedElement = g.getSingleObject(symbolDiagram, STR.Defines);\r
-\r
- // Check for existing terminal relation in\r
- // the current defined element before creating new ones.\r
- Resource terminalRelation = null;\r
- for (Resource terminalRel : StructuralUtils.getConnectionRelations(g, definedElement)) {\r
- for (Resource connectionRel : g.getObjects(terminalRel, MOD.DiagramConnectionRelationToConnectionRelation)) {\r
- if (relation.equals(connectionRel)) {\r
- // Don't create new diagram-side terminal relation if one already\r
- // exists for the same connection relation.\r
- terminalRelation = terminalRel;\r
- break;\r
- }\r
- }\r
- }\r
-\r
- if (terminalRelation == null) {\r
- terminalRelation = GraphUtils.create(g,\r
-// L0.SubrelationOf, STR.IsConnectedTo,\r
- MOD.DiagramConnectionRelationToConnectionRelation, relation,\r
- L0.PartOf, definedElement\r
- );\r
- g.claim(terminalRelation, L0.SubrelationOf, null, STR.IsConnectedTo);\r
- Resource inverse = GraphUtils.create(g,\r
-// L0.SubrelationOf, STR.Connects, \r
- L0.PartOf, terminalRelation, \r
- L0.HasName, "Inverse");\r
- g.claim(inverse, L0.SubrelationOf, null, STR.Connects);\r
- g.claim(terminalRelation, L0.InverseOf, inverse);\r
- String name = g.getPossibleRelatedValue(relation, L0.HasName, Bindings.STRING);\r
- if(name != null)\r
- g.claimLiteral(terminalRelation, L0.HasName, name);\r
-\r
- boolean interfaceGeneratesComponentExternally = !g.hasStatement(relation, MOD.GeneratesConnectionComponentInternally);\r
- for(Resource type : g.getObjects(relation, MOD.ImpliesDiagramConnectionRelationType)) {\r
- // #6636: Only instantiate type if it does not generate a component\r
- // when interface is marked to generate component internally.\r
- boolean shouldInstantiate = interfaceGeneratesComponentExternally || \r
- g.getAssertedObjects(type, MOD.DiagramConnectionRelationToComponentType).isEmpty();\r
- if (shouldInstantiate)\r
- g.claim(terminalRelation, L0.InstanceOf, type);\r
- }\r
-\r
- StructuralUtils.addConnectionPoint(g, definedElement, terminalRelation);\r
- }\r
-\r
- g.claim(terminal, DIA.HasConnectionPoint, terminalRelation);\r
- }\r
- \r
-}\r
+package org.simantics.modeling.symbolEditor;
+
+import org.simantics.databoard.Bindings;
+import org.simantics.db.Resource;
+import org.simantics.db.WriteGraph;
+import org.simantics.db.exception.DatabaseException;
+import org.simantics.diagram.stubs.DiagramResource;
+import org.simantics.layer0.Layer0;
+import org.simantics.layer0.utils.direct.GraphUtils;
+import org.simantics.modeling.ModelingResources;
+import org.simantics.structural.stubs.StructuralResource2;
+import org.simantics.structural2.utils.StructuralUtils;
+
+public class PopulateTerminal {
+
+ public static void addToGraph(WriteGraph g, Resource symbolDiagram, Resource relation, Resource terminal) throws DatabaseException {
+ StructuralResource2 STR = StructuralResource2.getInstance(g);
+ DiagramResource DIA = DiagramResource.getInstance(g);
+ ModelingResources MOD = ModelingResources.getInstance(g);
+ Layer0 L0 = Layer0.getInstance(g);
+
+ Resource definedElement = g.getSingleObject(symbolDiagram, STR.Defines);
+
+ // Check for existing terminal relation in
+ // the current defined element before creating new ones.
+ Resource terminalRelation = null;
+ for (Resource terminalRel : StructuralUtils.getConnectionRelations(g, definedElement)) {
+ for (Resource connectionRel : g.getObjects(terminalRel, MOD.DiagramConnectionRelationToConnectionRelation)) {
+ if (relation.equals(connectionRel)) {
+ // Don't create new diagram-side terminal relation if one already
+ // exists for the same connection relation.
+ terminalRelation = terminalRel;
+ break;
+ }
+ }
+ }
+
+ if (terminalRelation == null) {
+ terminalRelation = GraphUtils.create(g,
+// L0.SubrelationOf, STR.IsConnectedTo,
+ MOD.DiagramConnectionRelationToConnectionRelation, relation,
+ L0.PartOf, definedElement
+ );
+ g.claim(terminalRelation, L0.SubrelationOf, null, STR.IsConnectedTo);
+ Resource inverse = GraphUtils.create(g,
+// L0.SubrelationOf, STR.Connects,
+ L0.PartOf, terminalRelation,
+ L0.HasName, "Inverse");
+ g.claim(inverse, L0.SubrelationOf, null, STR.Connects);
+ g.claim(terminalRelation, L0.InverseOf, inverse);
+ String name = g.getPossibleRelatedValue(relation, L0.HasName, Bindings.STRING);
+ if(name != null)
+ g.claimLiteral(terminalRelation, L0.HasName, name);
+
+ boolean interfaceGeneratesComponentExternally = !g.hasStatement(relation, MOD.GeneratesConnectionComponentInternally);
+ for(Resource type : g.getObjects(relation, MOD.ImpliesDiagramConnectionRelationType)) {
+ // #6636: Only instantiate type if it does not generate a component
+ // when interface is marked to generate component internally.
+ boolean shouldInstantiate = interfaceGeneratesComponentExternally ||
+ g.getAssertedObjects(type, MOD.DiagramConnectionRelationToComponentType).isEmpty();
+ if (shouldInstantiate)
+ g.claim(terminalRelation, L0.InstanceOf, type);
+ }
+
+ StructuralUtils.addConnectionPoint(g, definedElement, terminalRelation);
+ }
+
+ g.claim(terminal, DIA.HasConnectionPoint, terminalRelation);
+ }
+
+}