--- /dev/null
+package org.simantics.modeling.ui.diagram.monitor;\r
+\r
+import java.text.DecimalFormat;\r
+import java.text.DecimalFormatSymbols;\r
+import java.util.Locale;\r
+\r
+import org.simantics.common.format.Formatter;\r
+import org.simantics.databoard.Bindings;\r
+import org.simantics.db.ReadGraph;\r
+import org.simantics.db.RelationContext;\r
+import org.simantics.db.Resource;\r
+import org.simantics.db.common.adaption.SimpleContextualAdapter;\r
+import org.simantics.db.exception.DatabaseException;\r
+import org.simantics.diagram.stubs.DiagramResource;\r
+import org.simantics.layer0.Layer0;\r
+\r
+public class RealizedFormatterAdapter extends SimpleContextualAdapter<Formatter, RelationContext> {\r
+\r
+ @Override\r
+ public Formatter adapt(ReadGraph graph, Resource source, RelationContext context) throws DatabaseException {\r
+\r
+ Layer0 L0 = Layer0.getInstance(graph);\r
+ DiagramResource DIA = DiagramResource.getInstance(graph);\r
+ Resource formatter = context.getStatement().getObject();\r
+\r
+ String definition = graph.getRelatedValue(formatter, DIA.RealizedFormatter_HasDefinition, Bindings.STRING);\r
+ final String label = graph.getPossibleRelatedAdapter(formatter, L0.HasLabel, String.class);\r
+ final DecimalFormat format = new DecimalFormat(definition, DecimalFormatSymbols.getInstance(Locale.US));\r
+ final String toString = label + " (" + definition + ")";\r
+\r
+ return new Formatter() {\r
+\r
+ private String formatNumber(Number v) {\r
+ double dv = v.doubleValue();\r
+ if (Double.isInfinite(dv)) {\r
+ return (dv == Double.POSITIVE_INFINITY) ? "\u221E" : "-\u221E";\r
+ } else if (Double.isNaN(dv)) {\r
+ return "NaN";\r
+ } else {\r
+ return format.format(v);\r
+ }\r
+ }\r
+\r
+ @Override\r
+ public String format(Object object) {\r
+ if (object instanceof Number) {\r
+ Number num = (Number) object;\r
+ return formatNumber(num);\r
+ }\r
+ else if(object instanceof String) {\r
+ try {\r
+ Double d = Double.parseDouble((String)object);\r
+ return formatNumber(d);\r
+ } catch (NumberFormatException e) {\r
+ return (String)object;\r
+ }\r
+ } else {\r
+ return object != null ? object.toString() : "";\r
+ }\r
+ }\r
+\r
+ @Override\r
+ public String toString() {\r
+ return toString;\r
+ }\r
+\r
+ };\r
+\r
+ }\r
+\r
+}\r