X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.modeling%2Fscl%2FSimantics%2FRouteGraph.scl;fp=bundles%2Forg.simantics.modeling%2Fscl%2FSimantics%2FRouteGraph.scl;h=cacec102b700763288fcf09a132d21b22c859f77;hp=fff5de896f86e59ea495456d70d2c3b44d78eee2;hb=e5db6157fd8722c946613d4e46d7aaf6bfa92609;hpb=ca33d642807f24adfe6a34147700058923dcdd92 diff --git a/bundles/org.simantics.modeling/scl/Simantics/RouteGraph.scl b/bundles/org.simantics.modeling/scl/Simantics/RouteGraph.scl index fff5de896..cacec102b 100644 --- a/bundles/org.simantics.modeling/scl/Simantics/RouteGraph.scl +++ b/bundles/org.simantics.modeling/scl/Simantics/RouteGraph.scl @@ -6,6 +6,8 @@ import "http://www.simantics.org/Structural-1.2" as STR import "http://www.simantics.org/Diagram-2.2" as DIA import "http://www.simantics.org/Modeling-1.2" as MOD +import "Logging" as LOGGER + importJava "org.simantics.modeling.scl.RouteGraphMatching" where matchRouteGraph :: [Resource] -> Integer -> [Integer] -> Maybe [Resource] @@ -140,4 +142,44 @@ modifyRouteGraph structure modis = ra = ArrayList.fromList nodes for modis (executeAtomicModification connection ra) ArrayList.freeze ra - Nothing -> fail "Couldn't resolve route graph structure." \ No newline at end of file + Nothing -> fail "Couldn't resolve route graph structure." + +// Connection and terminal judgements +importJava "org.simantics.structural2.modelingRules.CPTerminal" where + makeIConnectionPoint :: Resource -> Resource -> IConnectionPoint + +importJava "org.simantics.structural2.modelingRules.ConnectionJudgementType" where + data ConnectionJudgementType + LEGAL :: ConnectionJudgementType + ILLEGAL :: ConnectionJudgementType + CANBEMADELEGAL :: ConnectionJudgementType + +importJava "org.simantics.structural2.modelingRules.ConnectionJudgement" where + data ConnectionJudgement + @private + @JavaName "type" + getConnectionJudgementType :: ConnectionJudgement -> ConnectionJudgementType + +importJava "org.simantics.structural2.modelingRules.IConnectionPoint" where + data IConnectionPoint + + +importJava "org.simantics.modeling.ModelingUtils" where + getModelingRules :: Resource -> Maybe IModelingRules + +importJava "org.simantics.structural2.modelingRules.IModelingRules" where + data IModelingRules + + judgeConnection :: IModelingRules -> [IConnectionPoint] -> ConnectionJudgement + +canTerminalBeConnected :: Resource -> Resource -> Resource -> Boolean +canTerminalBeConnected diagram component terminal = match getModelingRules diagram with + Just modelingRules -> do + cpTerminal = makeIConnectionPoint component terminal + connectionJudgement = judgeConnection modelingRules [cpTerminal] + canBeConnected = getConnectionJudgementType connectionJudgement == LEGAL + LOGGER.info $ "canBeConnected : \(canBeConnected)" + canBeConnected + Nothing -> do + LOGGER.warn $ "No modeling rules available for diagram \(diagram) to resolve connection judgement" + False // true or false when no modeling rules available ?