]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - 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
diff --git a/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/diagram/monitor/RealizedFormatterAdapter.java b/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/diagram/monitor/RealizedFormatterAdapter.java
new file mode 100644 (file)
index 0000000..c2f5211
--- /dev/null
@@ -0,0 +1,71 @@
+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