3 import "Simantics/DB"
\r
4 import "http://www.simantics.org/R-1.0" as ROntology
\r
5 import "http://www.simantics.org/Layer0-1.1" as L0
\r
7 """Creates a new session configuration to graph. This function does
\r
8 not link it to any other resources."""
\r
9 createSessionConfiguration :: Resource -> R.SessionConfiguration -> <WriteGraph> Resource
\r
10 createSessionConfiguration parent (R.SessionConfiguration host port username password) = do
\r
12 claim r L0.InstanceOf ROntology.SessionConfiguration
\r
13 claim r L0.PartOf parent
\r
14 claimRelatedValue r L0.HasName host
\r
15 claimRelatedValue r ROntology.SessionConfiguration.host host
\r
16 claimRelatedValue r ROntology.SessionConfiguration.port port
\r
17 claimRelatedValue r ROntology.SessionConfiguration.username username
\r
18 claimRelatedValue r ROntology.SessionConfiguration.password password
\r
21 addScript :: Resource -> String -> <WriteGraph> Resource
\r
22 addScript sessionConfiguration scriptText = do
\r
24 claim r L0.InstanceOf ROntology.Script
\r
25 claim sessionConfiguration ROntology.SessionConfiguration.hasScript r
\r
26 claimRelatedValue r ROntology.Script.text scriptText
\r
29 readSessionConfiguration :: Resource -> <ReadGraph> R.SessionConfiguration
\r
30 readSessionConfiguration r = R.SessionConfiguration
\r
31 (relatedValue r ROntology.SessionConfiguration.host)
\r
32 (relatedValue r ROntology.SessionConfiguration.port)
\r
33 (relatedValue r ROntology.SessionConfiguration.username)
\r
34 (relatedValue r ROntology.SessionConfiguration.password)
\r
36 writeSession :: R.Session -> <WriteGraph> Resource
\r
37 writeSession session = do
\r
39 claim r L0.InstanceOf ROntology.Session
\r
40 claimRelatedValue r L0.HasName $ R.sessionIdOf session
\r
43 readSession :: Resource -> <ReadGraph,Proc> R.Session
\r
45 sessionId = relatedValue r L0.HasName
\r
46 in match R.sessionById sessionId with
\r
47 Just session -> session
\r
48 Nothing -> R.getOrCreateSession (readSessionConfiguration $ singleObject r L0.PartOf) sessionId
\r
51 createSession :: Resource -> <WriteGraph,Proc> Resource
\r
52 createSession configurationResource = do
\r
53 session = R.createSession $ readSessionConfiguration configurationResource
\r
54 for (configurationResource # ROntology.SessionConfiguration.hasScript) $ \s -> do
\r
55 scriptText = relatedValue s ROntology.Script.text
\r
56 R.asyncExec session (R.evalR_ scriptText)
\r
57 sessionResource = writeSession session
\r
58 claim configurationResource L0.ConsistsOf sessionResource
\r
61 deleteSession :: Resource -> <WriteGraph,Proc> ()
\r
62 deleteSession r = do
\r
63 session = readSession r
\r
64 R.closeSession session
\r