]> gerrit.simantics Code Review - simantics/r.git/blob - org.simantics.r/src/org/simantics/r/RVariableBuilder.java
6c0366f22fb5bf2c303426e02df978fedf10768d
[simantics/r.git] / org.simantics.r / src / org / simantics / r / RVariableBuilder.java
1 /*******************************************************************************\r
2  * Copyright (c) 2014, 2016 Association for Decentralized Information Management\r
3  * in Industry THTH ry.\r
4  * All rights reserved. This program and the accompanying materials\r
5  * are made available under the terms of the Eclipse Public License v1.0\r
6  * which accompanies this distribution, and is available at\r
7  * http://www.eclipse.org/legal/epl-v10.html\r
8  *\r
9  * Contributors:\r
10  *     VTT Technical Research Centre of Finland - initial API and implementation\r
11  *     Semantum Oy\r
12  *******************************************************************************/\r
13 package org.simantics.r;\r
14 \r
15 import org.rosuda.REngine.Rserve.RserveException;\r
16 import org.simantics.databoard.Bindings;\r
17 import org.simantics.db.ReadGraph;\r
18 import org.simantics.db.Resource;\r
19 import org.simantics.db.exception.DatabaseException;\r
20 import org.simantics.db.layer0.variable.NodeManagerVariableBuilder;\r
21 import org.simantics.db.layer0.variable.NodeSupport;\r
22 import org.simantics.db.layer0.variable.StandardGraphChildVariable;\r
23 import org.simantics.db.layer0.variable.Variable;\r
24 import org.simantics.db.layer0.variable.VariableNode;\r
25 import org.simantics.layer0.Layer0;\r
26 import org.simantics.r.scl.RSession;\r
27 import org.simantics.r.scl.RSessionConfiguration;\r
28 import org.simantics.r.scl.RSessionManager;\r
29 import org.simantics.r.scl.variable.RVariableNode;\r
30 import org.simantics.simulator.variable.NodeManager;\r
31 \r
32 public class RVariableBuilder extends NodeManagerVariableBuilder {\r
33 \r
34     @Override\r
35     public Variable buildChild(ReadGraph graph, Variable parent, VariableNode node, Resource child) throws DatabaseException {\r
36         Layer0 L0 = Layer0.getInstance(graph);\r
37         RResource R = RResource.getInstance(graph);\r
38         String name = graph.getRelatedValue(child, L0.HasName, Bindings.STRING);\r
39         RSession session = RSessionManager.getSession(name);\r
40         if(session == null) {\r
41             Resource conf = graph.getSingleObject(child, L0.PartOf);\r
42             RSessionConfiguration configuration = new RSessionConfiguration(\r
43                     graph.<String>getRelatedValue(conf, R.SessionConfiguration_host, Bindings.STRING),\r
44                     graph.<Integer>getRelatedValue(conf, R.SessionConfiguration_port, Bindings.INTEGER),\r
45                     graph.<String>getRelatedValue(conf, R.SessionConfiguration_username, Bindings.STRING),\r
46                     graph.<String>getRelatedValue(conf, R.SessionConfiguration_password, Bindings.STRING));\r
47             try {\r
48                 session = RSessionManager.getOrCreateSession(configuration, name);\r
49             } catch (RserveException e) {\r
50                 throw new DatabaseException(e);\r
51             }\r
52         }\r
53         \r
54         NodeSupport<?> support = getNodeSupport(graph, name);\r
55         NodeManager<RVariableNode> nodeManager = session.getNodeManager();\r
56         return new StandardGraphChildVariable(parent, new VariableNode(support, nodeManager), child);\r
57     }\r
58 \r
59     @Override\r
60     protected NodeSupport<?> getNodeSupport(ReadGraph graph, String sessionName) throws DatabaseException {\r
61         return RSessionManager.getOrCreateNodeSupport(sessionName);\r
62     }\r
63 \r
64     @Override\r
65     protected Object getRoot(ReadGraph graph, NodeSupport<?> support, String sessionName) throws DatabaseException {\r
66         return support.manager;\r
67     }\r
68 \r
69 }\r