]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/diagram/monitor/RealizedFormatterAdapter.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.modeling.ui / src / org / simantics / modeling / ui / diagram / monitor / RealizedFormatterAdapter.java
1 package org.simantics.modeling.ui.diagram.monitor;\r
2 \r
3 import java.text.DecimalFormat;\r
4 import java.text.DecimalFormatSymbols;\r
5 import java.util.Locale;\r
6 \r
7 import org.simantics.common.format.Formatter;\r
8 import org.simantics.databoard.Bindings;\r
9 import org.simantics.db.ReadGraph;\r
10 import org.simantics.db.RelationContext;\r
11 import org.simantics.db.Resource;\r
12 import org.simantics.db.common.adaption.SimpleContextualAdapter;\r
13 import org.simantics.db.exception.DatabaseException;\r
14 import org.simantics.diagram.stubs.DiagramResource;\r
15 import org.simantics.layer0.Layer0;\r
16 \r
17 public class RealizedFormatterAdapter extends SimpleContextualAdapter<Formatter, RelationContext> {\r
18 \r
19         @Override\r
20         public Formatter adapt(ReadGraph graph, Resource source, RelationContext context) throws DatabaseException {\r
21 \r
22                 Layer0 L0 = Layer0.getInstance(graph);\r
23                 DiagramResource DIA = DiagramResource.getInstance(graph);\r
24                 Resource formatter = context.getStatement().getObject();\r
25 \r
26                 String definition = graph.getRelatedValue(formatter, DIA.RealizedFormatter_HasDefinition, Bindings.STRING);\r
27                 final String label = graph.getPossibleRelatedAdapter(formatter, L0.HasLabel, String.class);\r
28                 final DecimalFormat format = new DecimalFormat(definition, DecimalFormatSymbols.getInstance(Locale.US));\r
29                 final String toString = label + " (" + definition + ")";\r
30 \r
31                 return new Formatter() {\r
32 \r
33                         private String formatNumber(Number v) {\r
34                                 double dv = v.doubleValue();\r
35                                 if (Double.isInfinite(dv)) {\r
36                                         return (dv == Double.POSITIVE_INFINITY) ? "\u221E" : "-\u221E";\r
37                                 } else if (Double.isNaN(dv)) {\r
38                                         return "NaN";\r
39                                 } else {\r
40                                         return format.format(v);\r
41                                 }\r
42                         }\r
43 \r
44                         @Override\r
45                         public String format(Object object) {\r
46                                 if (object instanceof Number) {\r
47                                         Number num = (Number) object;\r
48                                         return formatNumber(num);\r
49                                 }\r
50                                 else if(object instanceof String) {\r
51                                         try {\r
52                                                 Double d = Double.parseDouble((String)object);\r
53                                                 return formatNumber(d);\r
54                                         } catch (NumberFormatException e) {\r
55                                                 return (String)object;\r
56                                         }\r
57                                 } else {\r
58                                         return object != null ? object.toString() : "";\r
59                                 }\r
60                         }\r
61 \r
62                         @Override\r
63                         public String toString() {\r
64                                 return toString;\r
65                         }\r
66 \r
67                 };\r
68 \r
69         }\r
70 \r
71 }\r