]> gerrit.simantics Code Review - simantics/district.git/blobdiff - org.simantics.district.network/scl/Simantics/District.scl
Additions to district features
[simantics/district.git] / org.simantics.district.network / scl / Simantics / District.scl
index 8025c9adea127991bf78d7f98ff3b0644ec6998e..c92cc4cc6e97b88cbbe9dee9b971f52f43d06c85 100644 (file)
@@ -1,4 +1,8 @@
 import "Simantics/DB"
+import "Simantics/Ontologies"
+
+import "Map" as Map
+import "MSet" as MSet
 
 importJava "org.simantics.district.network.DistrictNetworkUtil" where
     calculateDistance :: Resource -> Resource -> <ReadGraph> Double
@@ -7,4 +11,70 @@ importJava "org.simantics.district.network.ModelledCRS" where
     xToLongitude :: Double -> <Proc> Double
     yToLatitude :: Double -> <Proc> Double
     longitudeToX :: Double -> <Proc> Double
-    latitudeToY :: Double -> <Proc> Double
\ No newline at end of file
+    latitudeToY :: Double -> <Proc> Double
+
+findBrokenConnections :: Resource -> <ReadGraph, Proc> ()
+findBrokenConnections diagram = do
+    elements = objectsWithType diagram L0.ConsistsOf DIA.DefinedElement
+    print $ "Found " + show (length elements) + " elements from diagram"
+    symbols = MMap.create ()
+    iter (\el -> do
+        symbol = singleObject el L0.InstanceOf
+        print $ "Found symbol " + uriOf symbol
+        ccs = collectionToList $ objects_ symbol L0.ConsistsOf
+        connectionPointRelations = filter (\cc -> isSubrelationOf cc  STR.IsConnectedTo) ccs
+        print $ "Found " + show (length connectionPointRelations) + " cprs"
+        iter (\cpr -> do
+            connectionPoints = objectsWithType el cpr DIA.Connector
+            print $ "Found " + show (length connectionPoints) + " cps"
+            if length connectionPoints > 1 /*|| length connectionPoints == 0*/
+            then do
+                // get existing map
+                print $ "Found " + show (length connectionPoints) + " connections for element " + nameOf el
+                instances = match MMap.get symbols (uriOf symbol) with
+                    Just m -> m
+                    Nothing -> do
+                        set = MSet.create ()
+                        MMap.put symbols (uriOf symbol) set
+                        set
+                ignore $ MSet.add instances $ singleObject el MOD.ElementToComponent
+            else ()
+            ()
+        ) connectionPointRelations
+    ) elements
+    MMap.iter (\key val -> do
+        print key
+        MSet.iter (\v -> print (nameOf v)) val
+        ()
+    ) symbols 
+    ()
+
+translateAllElements :: Resource -> <WriteGraph, Proc> ()
+translateAllElements diagram = do
+    print $ "Translating elements of diagram " + uriOf diagram 
+    elements = objectsWithType diagram L0.ConsistsOf DIA.DefinedElement
+    print $ "Found " + show (length elements) + " elements from diagram"
+    iter (\el -> do
+        connectionPoints = objectsWithType el STR.IsConnectedTo DIA.Connector
+        print $ "Found " + show (length connectionPoints) + " connections for element " + nameOf el
+    ) elements
+
+
+translateElement :: Resource -> <WriteGraph, Proc> ()
+translateElement elem = do
+    connectionPoints = objectsWithType elem STR.IsConnectedTo DIA.Connector
+    if length connectionPoints < 5
+    then do //this we can handle
+        areConnected = MSet.create ()
+        iter (\cp -> do
+            aconnector = singleObject cp  DIA.AreConnected
+            //otherElem
+            ()
+        ) []
+        //if length areConnected == 2
+        //then do // this we can handle - only two symbols
+        //    ()
+        //else ()
+        ()
+    else ()
+    ()