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] -> <ReadGraph> Maybe [Resource]
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 -> <Proc> 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 -> <ReadGraph, Proc> Maybe IModelingRules
+
+importJava "org.simantics.structural2.modelingRules.IModelingRules" where
+ data IModelingRules
+
+ judgeConnection :: IModelingRules -> [IConnectionPoint] -> <ReadGraph, Proc> ConnectionJudgement
+
+canTerminalBeConnected :: Resource -> Resource -> Resource -> <ReadGraph, Proc> 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 ?