]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.modeling/scl/Simantics/RouteGraph.scl
IConnectionPoint and canBeConnected-checking util to SCL
[simantics/platform.git] / bundles / org.simantics.modeling / scl / Simantics / RouteGraph.scl
index fff5de896f86e59ea495456d70d2c3b44d78eee2..cacec102b700763288fcf09a132d21b22c859f77 100644 (file)
@@ -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] -> <ReadGraph> 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 -> <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 ?