X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=org.simantics.r%2Fscl%2FR%2FRConfiguration.scl;h=05217d7902e0c0cf8406ee3995045901f8a210dc;hb=a1970c4294dcbca8f74d9e8e9cff4e81387e56c6;hp=eff8d8894761b8af2cda811a9bd848734d34fd17;hpb=2e278cf242c87a7851c68d6c5f03f169e28d3a7e;p=simantics%2Fr.git diff --git a/org.simantics.r/scl/R/RConfiguration.scl b/org.simantics.r/scl/R/RConfiguration.scl index eff8d88..05217d7 100644 --- a/org.simantics.r/scl/R/RConfiguration.scl +++ b/org.simantics.r/scl/R/RConfiguration.scl @@ -4,7 +4,7 @@ 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 +"""Creates a new session configuration to graph as a part of the parent resource. This function does not link it to any other resources.""" createSessionConfiguration :: Resource -> R.SessionConfiguration -> Resource createSessionConfiguration parent (R.SessionConfiguration host port username password) = do @@ -13,11 +13,12 @@ createSessionConfiguration parent (R.SessionConfiguration host port username pas 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.port port claimRelatedValue r ROntology.SessionConfiguration.username username claimRelatedValue r ROntology.SessionConfiguration.password password r +"""Add an R script into the session configuration resource. The script is executed when a new session is opened with the createSession function.""" addScript :: Resource -> String -> Resource addScript sessionConfiguration scriptText = do r = newResource () @@ -26,6 +27,7 @@ addScript sessionConfiguration scriptText = do claimRelatedValue r ROntology.Script.text scriptText r +"""Read session configuration from the database.""" readSessionConfiguration :: Resource -> R.SessionConfiguration readSessionConfiguration r = R.SessionConfiguration (relatedValue r ROntology.SessionConfiguration.host) @@ -33,6 +35,7 @@ readSessionConfiguration r = R.SessionConfiguration (relatedValue r ROntology.SessionConfiguration.username) (relatedValue r ROntology.SessionConfiguration.password) +"""Write an R session into the database.""" writeSession :: R.Session -> Resource writeSession session = do r = newResource () @@ -40,24 +43,35 @@ writeSession session = do claimRelatedValue r L0.HasName $ R.sessionIdOf session r +"""Execute the scripts defined for a session configuration using the given session.""" +executeScripts :: Resource -> R.Session -> () +executeScripts configurationResource session = for (configurationResource # ROntology.SessionConfiguration.hasScript) $ \s -> do + scriptText = relatedValue s ROntology.Script.text + R.asyncExec session (R.evalR_ scriptText) + +"""Read an R session from the database. If the session has been closed, a new session is opened with the +same configuration.""" 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 + Just session -> session + Nothing -> do + configurationResource = singleObject r L0.PartOf + session = R.getOrCreateSession (readSessionConfiguration $ configurationResource) sessionId + executeScripts configurationResource session + session - +"""Create a session based on a given session configuration resource.""" 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) + executeScripts configurationResource session sessionResource = writeSession session claim configurationResource L0.ConsistsOf sessionResource sessionResource +"""Delete a session resource and close the session that it represents.""" deleteSession :: Resource -> () deleteSession r = do session = readSession r