]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/request/ResourceURIToVariable.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.db.layer0 / src / org / simantics / db / layer0 / request / ResourceURIToVariable.java
1 package org.simantics.db.layer0.request;\r
2 \r
3 import org.simantics.databoard.util.URIStringUtils;\r
4 import org.simantics.db.ReadGraph;\r
5 import org.simantics.db.common.request.UnaryRead;\r
6 import org.simantics.db.exception.DatabaseException;\r
7 import org.simantics.db.layer0.variable.StandardGraphChildVariable;\r
8 import org.simantics.db.layer0.variable.Variable;\r
9 import org.simantics.db.request.ReadExt;\r
10 import org.simantics.db.request.RequestFlags;\r
11 \r
12 public class ResourceURIToVariable extends UnaryRead<String, Variable> implements ReadExt {\r
13 \r
14         public ResourceURIToVariable(String uri) {\r
15                 super(uri);\r
16         }\r
17         \r
18     public static int split(String uri) {\r
19         int pos = uri.lastIndexOf(URIStringUtils.NAMESPACE_PATH_SEPARATOR);\r
20         int pos2 = uri.lastIndexOf(URIStringUtils.NAMESPACE_LOCAL_SEPARATOR);\r
21         return Math.max(pos, pos2);\r
22     }\r
23         \r
24         @Override\r
25         public Variable perform(ReadGraph graph) throws DatabaseException {\r
26                 \r
27         if("http://".equals(parameter) || "http:/".equals(parameter)) {\r
28                 return new StandardGraphChildVariable(null, null, graph.getRootLibrary());\r
29         } else {\r
30             int childPos = parameter.lastIndexOf(URIStringUtils.NAMESPACE_PATH_SEPARATOR);\r
31             int propertyPos = parameter.lastIndexOf(URIStringUtils.NAMESPACE_LOCAL_SEPARATOR);\r
32             if(childPos > propertyPos)  {\r
33                 Variable parent = graph.syncRequest(new ResourceURIToVariable(parameter.substring(0, childPos)));\r
34                 return parent.getChild(graph, URIStringUtils.unescape(parameter.substring(childPos + 1, parameter.length())));\r
35             } else {\r
36                 Variable parent = graph.syncRequest(new ResourceURIToVariable(parameter.substring(0, propertyPos)));\r
37                 return parent.getProperty(graph, URIStringUtils.unescape(parameter.substring(propertyPos + 1, parameter.length())));\r
38             }\r
39         }\r
40         \r
41         }\r
42 \r
43         @Override\r
44         public boolean isImmutable(ReadGraph graph) throws DatabaseException {\r
45                 return false;\r
46         }\r
47 \r
48         @Override\r
49         public int getType() {\r
50                 return RequestFlags.IMMEDIATE_UPDATE;\r
51         }\r
52 \r
53 }\r