X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.modeling%2Fsrc%2Forg%2Fsimantics%2Fmodeling%2FsymbolEditor%2FPopulateTerminal.java;h=a78da50dea8d2baff73b47c93c2b3286cfcc992a;hp=b028ec2d2786f0815bf328a8d47e476b223b082a;hb=refs%2Fchanges%2F38%2F238%2F2;hpb=24e2b34260f219f0d1644ca7a138894980e25b14 diff --git a/bundles/org.simantics.modeling/src/org/simantics/modeling/symbolEditor/PopulateTerminal.java b/bundles/org.simantics.modeling/src/org/simantics/modeling/symbolEditor/PopulateTerminal.java index b028ec2d2..a78da50de 100644 --- a/bundles/org.simantics.modeling/src/org/simantics/modeling/symbolEditor/PopulateTerminal.java +++ b/bundles/org.simantics.modeling/src/org/simantics/modeling/symbolEditor/PopulateTerminal.java @@ -1,71 +1,71 @@ -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); - } - -} +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); + } + +}