]> gerrit.simantics Code Review - simantics/r.git/blob - org.simantics.r.scl/src/org/simantics/r/scl/variable/RNamedItemNode.java
Share project "org.simantics.r.feature" into "https://www.simantics.org/svn/simantics"
[simantics/r.git] / org.simantics.r.scl / src / org / simantics / r / scl / variable / RNamedItemNode.java
1 package org.simantics.r.scl.variable;\r
2 \r
3 import org.rosuda.REngine.REXP;\r
4 import org.rosuda.REngine.REXPMismatchException;\r
5 import org.rosuda.REngine.RList;\r
6 \r
7 public class RNamedItemNode implements RVariableNode {\r
8 \r
9         public RNamedItemNode(RVariableNode parent, String name) {\r
10                 this.parent = parent;\r
11                 this.name = name;\r
12         }\r
13 \r
14         private RVariableNode parent;\r
15         private String name;\r
16         \r
17         @Override\r
18         public REXP getValue() {\r
19                 REXP parentValue = parent.getValue();\r
20                 if (parentValue == null || ! parentValue.isList())\r
21                         return null;\r
22                 \r
23                 RList list;\r
24                 try {\r
25                         list = parentValue.asList();\r
26                 } catch (REXPMismatchException e) {\r
27                         // Should never happen\r
28                         return null;\r
29                 }\r
30                 \r
31                 return list.at(name);\r
32         }\r
33 \r
34         @Override\r
35         public String getName() {\r
36                 return RNodeManager.NAMED_ITEM_NAME_PREFIX + name;\r
37         }\r
38 \r
39         @Override\r
40         public RVariableNode getParent() {\r
41                 return parent;\r
42         }\r
43 }\r