+ public Resource getType(ReadGraph graph) throws DatabaseException {
+
+ Variable custom = getPossibleProperty(graph, "typeResource");
+ if(custom != null) {
+
+ Object o = custom.getPossibleValue(graph);
+ Function2<Variable,Resource,Resource> fn = (Function2<Variable,Resource,Resource>)o;
+
+ SCLContext sclContext = SCLContext.getCurrent();
+ Object oldGraph = sclContext.put("graph", graph);
+ try {
+ return (Resource)fn.apply(this, Layer0.getInstance(graph).Entity);
+ } catch (Throwable t) {
+ if (t instanceof DatabaseException)
+ throw (DatabaseException) t;
+ throw new DatabaseException(t);
+ } finally {
+ sclContext.put("graph", oldGraph);
+ }
+
+ }
+
+ Resource resource = getPossibleRepresents(graph);
+ if(resource == null) {
+ String uri = getPossiblePropertyValue(graph, "typeURI");
+ if(uri != null) return graph.syncRequest(new org.simantics.db.common.primitiverequest.Resource(uri), TransientCacheAsyncListener.<Resource>instance());
+ throw new DatabaseException("No type for " + getURI(graph));
+ }
+ return graph.getSingleType(resource);
+
+ }
+
+