1 package org.simantics.db.layer0.property;
\r
3 import java.util.ArrayList;
\r
4 import java.util.Collections;
\r
6 import org.simantics.databoard.Bindings;
\r
7 import org.simantics.databoard.binding.Binding;
\r
8 import org.simantics.db.ReadGraph;
\r
9 import org.simantics.db.Resource;
\r
10 import org.simantics.db.Statement;
\r
11 import org.simantics.db.exception.DatabaseException;
\r
12 import org.simantics.operation.Layer0X;
\r
15 * @author Antti Villberg
\r
16 * TODO: consider removing since this doesn't seem to be used.
\r
18 public class Properties {
\r
20 public static <T> T getPossibleRelatedValue(ReadGraph graph, Resource resource, Resource relation, Binding binding) throws DatabaseException {
\r
22 T result = graph.getPossibleRelatedValue(resource, relation, binding);
\r
23 if(result != null) return result;
\r
26 Layer0X L0X = Layer0X.getInstance(graph);
\r
27 ArrayList<OrderedResource> order = new ArrayList<OrderedResource>();
\r
28 for(Statement stm : graph.getStatements(resource, L0X.ObtainsProperty)) {
\r
29 Integer position = graph.getRelatedValue(stm.getPredicate(), L0X.NaturalNumberOrderRelation, Bindings.INTEGER);
\r
30 order.add(new OrderedResource(position, stm.getObject()));
\r
32 Collections.sort(order);
\r
33 for(OrderedResource or : order) {
\r
34 result = getPossibleRelatedValue(graph, or.r, relation, binding);
\r
35 if(result != null) return result;
\r
44 public static <T> T getPossibleRelatedAdapter(ReadGraph graph, Resource resource, Resource relation, Class<T> clazz) throws DatabaseException {
\r
46 T result = graph.getPossibleRelatedAdapter(resource, relation, clazz);
\r
47 if(result != null) return result;
\r
50 Layer0X L0X = Layer0X.getInstance(graph);
\r
51 ArrayList<OrderedResource> order = new ArrayList<OrderedResource>();
\r
52 for(Statement stm : graph.getStatements(resource, L0X.ObtainsProperty)) {
\r
53 Integer position = graph.getRelatedValue(stm.getPredicate(), L0X.NaturalNumberOrderRelation, Bindings.INTEGER);
\r
54 order.add(new OrderedResource(position, stm.getObject()));
\r
56 Collections.sort(order);
\r
57 for(OrderedResource or : order) {
\r
58 result = getPossibleRelatedAdapter(graph, or.r, relation, clazz);
\r
59 if(result != null) return result;
\r