]> gerrit.simantics Code Review - simantics/r.git/blob - org.simantics.r.scl/src/org/simantics/r/scl/variable/RListItemNode.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 / RListItemNode.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 RListItemNode implements RVariableNode {\r
8 \r
9         private RVariableNode parent;\r
10         private int index;\r
11         \r
12         public RListItemNode(RVariableNode parent, int index) {\r
13                 this.index = index;\r
14                 this.parent = parent;\r
15         }\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(index);\r
32         }\r
33 \r
34         @Override\r
35         public String getName() {\r
36                 return RNodeManager.INDEXED_ITEM_NAME_PREFIX + Integer.toString(index);\r
37         }\r
38 \r
39         @Override\r
40         public RVariableNode getParent() {\r
41                 return parent;\r
42         }\r
43 }\r