]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/adapter/LiteralVariableStringAdapter.java
Sync git svn branch with SVN repository r33389.
[simantics/platform.git] / bundles / org.simantics.db.layer0 / src / org / simantics / db / layer0 / adapter / LiteralVariableStringAdapter.java
1 package org.simantics.db.layer0.adapter;\r
2 \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
14 \r
15 public class LiteralVariableStringAdapter implements Adapter<String, Variable> {\r
16 \r
17     @Override\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
20 \r
21                         @Override\r
22                         public String perform(ReadGraph graph) throws DatabaseException {\r
23                                 \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
29                                 \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
34                                 } else {\r
35                                         return value == null ? "<no value>" : value.toString();\r
36                                 }\r
37                                 \r
38                         }\r
39                 \r
40         }, procedure);\r
41     }\r
42     \r
43 }\r