]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/variable/VariablesImpl.java
Merge commit 'ad8333027322fda6b9a8a524c7a7e15a54c52f38'
[simantics/platform.git] / bundles / org.simantics.db.layer0 / src / org / simantics / db / layer0 / variable / VariablesImpl.java
1 /*******************************************************************************\r
2  * Copyright (c) 2007, 2010 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  *******************************************************************************/\r
12 package org.simantics.db.layer0.variable;\r
13 \r
14 import org.simantics.db.ReadGraph;\r
15 import org.simantics.db.Resource;\r
16 import org.simantics.db.exception.DatabaseException;\r
17 \r
18 public final class VariablesImpl {\r
19 \r
20         public final static int nextSeparator(String path, int startPosition) {\r
21                 int len = path.length();\r
22                 for (int i = startPosition; i < len; ++i) {\r
23                         char c = path.charAt(i);\r
24                         if (c == '/' || c == '#')\r
25                                 return i;\r
26                 }\r
27                 return -1;\r
28         }\r
29         \r
30     public final static Resource getFirst(ReadGraph graph, Resource type, String path, int startPosition) throws DatabaseException {\r
31 \r
32         int position = nextSeparator(path, startPosition);\r
33         if (position == -1) {\r
34             Resource r = graph.getResource(path);\r
35             if (graph.isInstanceOf(r, type))\r
36                 return r;\r
37             return null;\r
38         }\r
39         \r
40         Resource r = graph.getResource(path.substring(0, position));\r
41         if (graph.isInstanceOf(r, type)) {\r
42             return r;\r
43         } else {\r
44             return getFirst(graph, type, path, position + 1);\r
45         }\r
46 \r
47     }\r
48 \r
49 }\r