1 package org.simantics.db.layer0.request;
\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
12 public class ResourceURIToVariable extends UnaryRead<String, Variable> implements ReadExt {
\r
14 public ResourceURIToVariable(String uri) {
\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
25 public Variable perform(ReadGraph graph) throws DatabaseException {
\r
27 if("http://".equals(parameter) || "http:/".equals(parameter)) {
\r
28 return new StandardGraphChildVariable(null, null, graph.getRootLibrary());
\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
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
44 public boolean isImmutable(ReadGraph graph) throws DatabaseException {
\r
49 public int getType() {
\r
50 return RequestFlags.IMMEDIATE_UPDATE;
\r