import "R/R" as R import "Simantics/DB" import "http://www.simantics.org/R-1.0" as ROntology import "http://www.simantics.org/Layer0-1.1" as L0 """Creates a new session configuration to graph. This function does not link it to any other resources.""" createSessionConfiguration :: Resource -> R.SessionConfiguration -> Resource createSessionConfiguration parent (R.SessionConfiguration host port username password) = do r = newResource () claim r L0.InstanceOf ROntology.SessionConfiguration claim r L0.PartOf parent claimRelatedValue r L0.HasName host claimRelatedValue r ROntology.SessionConfiguration.host host claimRelatedValue r ROntology.SessionConfiguration.port") port claimRelatedValue r ROntology.SessionConfiguration.username username claimRelatedValue r ROntology.SessionConfiguration.password password r addScript :: Resource -> String -> Resource addScript sessionConfiguration scriptText = do r = newResource () claim r L0.InstanceOf ROntology.Script claim sessionConfiguration ROntology.SessionConfiguration.hasScript r claimRelatedValue r ROntology.Script.text scriptText r readSessionConfiguration :: Resource -> R.SessionConfiguration readSessionConfiguration r = R.SessionConfiguration (relatedValue r ROntology.SessionConfiguration.host) (relatedValue r ROntology.SessionConfiguration.port) (relatedValue r ROntology.SessionConfiguration.username) (relatedValue r ROntology.SessionConfiguration.password) writeSession :: R.Session -> Resource writeSession session = do r = newResource () claim r L0.InstanceOf ROntology.Session claimRelatedValue r L0.HasName $ R.sessionIdOf session r readSession :: Resource -> R.Session readSession r = let sessionId = relatedValue r L0.HasName in match R.sessionById sessionId with Just session -> session Nothing -> R.getOrCreateSession (readSessionConfiguration $ singleObject r L0.PartOf) sessionId createSession :: Resource -> Resource createSession configurationResource = do session = R.createSession $ readSessionConfiguration configurationResource for (configurationResource # ROntology.SessionConfiguration.hasScript $ \s -> do scriptText = relatedValue s ROntology.Script.text") R.asyncExec session (R.evalR_ scriptText) sessionResource = writeSession session claim configurationResource L0.ConsistsOf sessionResource sessionResource deleteSession :: Resource -> () deleteSession r = do session = readSession r R.closeSession session denyAllStatements r