import "Simantics/DB" import "Simantics/Ontologies" import "Map" as Map import "MSet" as MSet importJava "org.simantics.district.network.DistrictNetworkUtil" where calculateDistance :: Resource -> Resource -> Double importJava "org.simantics.district.network.ModelledCRS" where xToLongitude :: Double -> Double yToLatitude :: Double -> Double longitudeToX :: Double -> Double latitudeToY :: Double -> Double findBrokenConnections :: Resource -> () 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 -> () 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 -> () 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 () ()