1 package org.simantics.db.layer0.adapter;
\r
3 import org.simantics.common.format.Formatter;
\r
4 import org.simantics.databoard.Bindings;
\r
5 import org.simantics.db.AsyncReadGraph;
\r
6 import org.simantics.db.ReadGraph;
\r
7 import org.simantics.db.Resource;
\r
8 import org.simantics.db.adaption.Adapter;
\r
9 import org.simantics.db.exception.DatabaseException;
\r
10 import org.simantics.db.layer0.variable.Variable;
\r
11 import org.simantics.db.procedure.AsyncProcedure;
\r
12 import org.simantics.db.request.Read;
\r
13 import org.simantics.layer0.Layer0;
\r
15 public class LiteralVariableStringAdapter implements Adapter<String, Variable> {
\r
18 public void adapt(AsyncReadGraph g, final Resource source, final Variable variable, final AsyncProcedure<String> procedure) {
\r
19 g.asyncRequest(new Read<String>() {
\r
22 public String perform(ReadGraph graph) throws DatabaseException {
\r
24 Resource literal = variable.getPossibleRepresents(graph);
\r
25 String label = graph.getPossibleRelatedAdapter(literal, graph.getService(Layer0.class).HasLabel, String.class);
\r
26 if(label != null) return label;
\r
27 String name = graph.getPossibleRelatedValue(literal, graph.getService(Layer0.class).HasName, Bindings.STRING);
\r
28 if(name != null) return name;
\r
30 Object value = variable.getValue(graph);
\r
31 Formatter formatter = graph.getPossibleContextualAdapter(literal, variable, Variable.class, Formatter.class);
\r
32 if(formatter != null) {
\r
33 return formatter.format(value);
\r
35 return value == null ? "<no value>" : value.toString();
\r