From b8a515f67e062be8691996797fae25c33e31dd0f Mon Sep 17 00:00:00 2001 From: patrykb0802 Date: Tue, 6 May 2025 17:32:08 +0200 Subject: [PATCH 1/3] #2497 Add display format as Hex numbers or binary numbers --- .../WEB-INF/jsp/pointEdit/textRenderer.jsp | 8 ++ .../mango/view/text/BaseTextRenderer.java | 2 + .../mango/view/text/BinaryRenderer.java | 79 +++++++++++++++++++ .../mango/view/text/BinaryTextRenderer.java | 2 +- .../mango/view/text/HexadecimalRenderer.java | 72 +++++++++++++++++ .../mango/web/dwr/DataPointEditDwr.java | 15 ++-- webapp-resources/messages_de.properties | 4 +- webapp-resources/messages_en.properties | 2 + webapp-resources/messages_es.properties | 2 + webapp-resources/messages_fi.properties | 4 +- webapp-resources/messages_fr.properties | 4 +- webapp-resources/messages_lu.properties | 2 + webapp-resources/messages_nl.properties | 4 +- webapp-resources/messages_pl.properties | 4 +- webapp-resources/messages_pt.properties | 2 + webapp-resources/messages_ru.properties | 4 +- webapp-resources/messages_zh.properties | 4 +- 17 files changed, 196 insertions(+), 18 deletions(-) create mode 100644 src/com/serotonin/mango/view/text/BinaryRenderer.java create mode 100644 src/com/serotonin/mango/view/text/HexadecimalRenderer.java diff --git a/WebContent/WEB-INF/jsp/pointEdit/textRenderer.jsp b/WebContent/WEB-INF/jsp/pointEdit/textRenderer.jsp index 8c99507500..db8b400f87 100644 --- a/WebContent/WEB-INF/jsp/pointEdit/textRenderer.jsp +++ b/WebContent/WEB-INF/jsp/pointEdit/textRenderer.jsp @@ -160,6 +160,10 @@ "/> + + + + @@ -248,6 +252,10 @@ } else if (typeName == "textRendererTime") DataPointEditDwr.setTimeTextRenderer($get("textRendererTimeFormat"), $get("textRendererTimeConversionExponent"), callback); + else if (typeName == "textRendererHexadecimal") + DataPointEditDwr.setHexadecimalRenderer(callback); + else if (typeName == "textRendererBinaryNumber") + DataPointEditDwr.setBinaryRenderer(callback); else callback(); }; diff --git a/src/com/serotonin/mango/view/text/BaseTextRenderer.java b/src/com/serotonin/mango/view/text/BaseTextRenderer.java index 30b1646ae5..bd45786a69 100644 --- a/src/com/serotonin/mango/view/text/BaseTextRenderer.java +++ b/src/com/serotonin/mango/view/text/BaseTextRenderer.java @@ -45,6 +45,8 @@ static void ensureDefinitions() { List d = new ArrayList(); d.add(AnalogRenderer.getDefinition()); d.add(BinaryTextRenderer.getDefinition()); + d.add(BinaryRenderer.getDefinition()); + d.add(HexadecimalRenderer.getDefinition()); d.add(MultistateRenderer.getDefinition()); d.add(NoneRenderer.getDefinition()); d.add(PlainRenderer.getDefinition()); diff --git a/src/com/serotonin/mango/view/text/BinaryRenderer.java b/src/com/serotonin/mango/view/text/BinaryRenderer.java new file mode 100644 index 0000000000..d5e251afd8 --- /dev/null +++ b/src/com/serotonin/mango/view/text/BinaryRenderer.java @@ -0,0 +1,79 @@ +package com.serotonin.mango.view.text; + +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; + +import com.serotonin.json.JsonRemoteEntity; +import com.serotonin.mango.DataTypes; +import com.serotonin.mango.rt.dataImage.types.MangoValue; +import com.serotonin.mango.view.ImplDefinition; + +@JsonRemoteEntity +public class BinaryRenderer extends BaseTextRenderer { + public static final String TYPE_NAME = "textRendererBinaryNumber"; + + private static ImplDefinition definition = new ImplDefinition( + TYPE_NAME, + "BINARY", + "textRenderer.binary.number", + new int[] { DataTypes.NUMERIC } + ); + + public static ImplDefinition getDefinition() { + return definition; + } + + public BinaryRenderer() { + // no op + } + + @Override + public String getTypeName() { + return TYPE_NAME; + } + + @Override + public ImplDefinition getDef() { + return definition; + } + + @Override + public String getMetaText() { + return null; + } + + @Override + protected String getTextImpl(MangoValue value, int hint) { + if (value == null) + return UNKNOWN_VALUE; + + long i = (long) value.getDoubleValue(); + String bin = Long.toBinaryString(i); + int groups = (bin.length() + 3) / 4; + int totalBits = groups * 4; + String padded = String.format("%" + totalBits + "s", bin).replace(' ', '0'); + StringBuilder sb = new StringBuilder(); + for (int g = 0; g < groups; g++) { + if (g > 0) sb.append(' '); + sb.append(padded, g * 4, g * 4 + 4); + } + return sb.toString(); + } + + @Override + protected String getColourImpl(MangoValue value) { + return null; + } + + private static final long serialVersionUID = -1; + private static final int version = 1; + + private void writeObject(ObjectOutputStream out) throws IOException { + out.writeInt(version); + } + + private void readObject(ObjectInputStream in) throws IOException { + in.readInt(); // version + } +} diff --git a/src/com/serotonin/mango/view/text/BinaryTextRenderer.java b/src/com/serotonin/mango/view/text/BinaryTextRenderer.java index eebc4da103..cf68f6e82e 100644 --- a/src/com/serotonin/mango/view/text/BinaryTextRenderer.java +++ b/src/com/serotonin/mango/view/text/BinaryTextRenderer.java @@ -39,7 +39,7 @@ */ @JsonRemoteEntity public class BinaryTextRenderer extends BaseTextRenderer { - private static ImplDefinition definition = new ImplDefinition(BinaryTextRenderer.TYPE_NAME, "BINARY", + private static ImplDefinition definition = new ImplDefinition(BinaryTextRenderer.TYPE_NAME, "BINARY (T/F)", "textRenderer.binary", new int[] { DataTypes.BINARY }); public static ImplDefinition getDefinition() { diff --git a/src/com/serotonin/mango/view/text/HexadecimalRenderer.java b/src/com/serotonin/mango/view/text/HexadecimalRenderer.java new file mode 100644 index 0000000000..d0f4b1a26b --- /dev/null +++ b/src/com/serotonin/mango/view/text/HexadecimalRenderer.java @@ -0,0 +1,72 @@ +package com.serotonin.mango.view.text; + +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; + +import com.serotonin.json.JsonRemoteEntity; +import com.serotonin.mango.DataTypes; +import com.serotonin.mango.rt.dataImage.types.MangoValue; +import com.serotonin.mango.view.ImplDefinition; + + +@JsonRemoteEntity +public class HexadecimalRenderer extends BaseTextRenderer { + public static final String TYPE_NAME = "textRendererHexadecimal"; + + private static ImplDefinition definition = new ImplDefinition( + TYPE_NAME, + "HEX", + "textRenderer.hex", + new int[] { DataTypes.NUMERIC } + ); + + public static ImplDefinition getDefinition() { + return definition; + } + + public HexadecimalRenderer() { + // no op + } + + @Override + public String getTypeName() { + return TYPE_NAME; + } + + @Override + public ImplDefinition getDef() { + return definition; + } + + @Override + public String getMetaText() { + return null; + } + + @Override + protected String getTextImpl(MangoValue value, int hint) { + if (value == null) + return UNKNOWN_VALUE; + + long i = (long) value.getDoubleValue(); + String hex = Long.toHexString(i).toUpperCase(); + return "0x" + hex; + } + + @Override + protected String getColourImpl(MangoValue value) { + return null; + } + + private static final long serialVersionUID = -1; + private static final int version = 1; + + private void writeObject(ObjectOutputStream out) throws IOException { + out.writeInt(version); + } + + private void readObject(ObjectInputStream in) throws IOException { + in.readInt(); + } +} diff --git a/src/com/serotonin/mango/web/dwr/DataPointEditDwr.java b/src/com/serotonin/mango/web/dwr/DataPointEditDwr.java index 990befaf4a..7039043dbf 100644 --- a/src/com/serotonin/mango/web/dwr/DataPointEditDwr.java +++ b/src/com/serotonin/mango/web/dwr/DataPointEditDwr.java @@ -30,16 +30,7 @@ import com.serotonin.mango.view.chart.StatisticsChartRenderer; import com.serotonin.mango.view.chart.TableChartRenderer; import com.serotonin.mango.view.event.*; -import com.serotonin.mango.view.text.AnalogRenderer; -import com.serotonin.mango.view.text.BinaryTextRenderer; -import com.serotonin.mango.view.text.MultistateRenderer; -import com.serotonin.mango.view.text.MultistateValue; -import com.serotonin.mango.view.text.NoneRenderer; -import com.serotonin.mango.view.text.PlainRenderer; -import com.serotonin.mango.view.text.RangeRenderer; -import com.serotonin.mango.view.text.RangeValue; -import com.serotonin.mango.view.text.TextRenderer; -import com.serotonin.mango.view.text.TimeRenderer; +import com.serotonin.mango.view.text.*; import com.serotonin.mango.vo.DataPointVO; import com.serotonin.mango.vo.User; import com.serotonin.mango.vo.event.PointEventDetectorVO; @@ -118,6 +109,10 @@ public void setRangeRenderer(String format, List values) { setTextRenderer(r); } + public void setHexadecimalRenderer() {setTextRenderer(new HexadecimalRenderer()); } + + public void setBinaryRenderer(){setTextRenderer(new BinaryRenderer());} + public void setTimeTextRenderer(String format, int conversionExponent) { setTextRenderer(new TimeRenderer(format, conversionExponent)); } diff --git a/webapp-resources/messages_de.properties b/webapp-resources/messages_de.properties index cd1c5e16c2..115c422a38 100644 --- a/webapp-resources/messages_de.properties +++ b/webapp-resources/messages_de.properties @@ -3453,4 +3453,6 @@ systemSettings.amChart.valuesLimit=Values Limit systemSettings.amChart.limitFactor=Limit factor systemSettings.amChartsSaved=AmCharts settings have been saved systemSettings.scadaConfTitle=Scada-LTS environment settings -systemSettings.scadaConfCheck=Check configuration \ No newline at end of file +systemSettings.scadaConfCheck=Check configuration +textRenderer.binary.number=Binary number +textRenderer.hex=Hexadecimal \ No newline at end of file diff --git a/webapp-resources/messages_en.properties b/webapp-resources/messages_en.properties index d48be0555b..7269a7d7f9 100644 --- a/webapp-resources/messages_en.properties +++ b/webapp-resources/messages_en.properties @@ -3457,3 +3457,5 @@ systemSettings.amChart.limitFactor=Limit factor systemSettings.amChartsSaved=AmCharts settings have been saved systemSettings.scadaConfTitle=Scada-LTS environment settings systemSettings.scadaConfCheck=Check configuration +textRenderer.binary.number=Binary number +textRenderer.hex=Hexadecimal \ No newline at end of file diff --git a/webapp-resources/messages_es.properties b/webapp-resources/messages_es.properties index af6cc6cdd5..a93c054210 100644 --- a/webapp-resources/messages_es.properties +++ b/webapp-resources/messages_es.properties @@ -3497,3 +3497,5 @@ systemSettings.amChart.limitFactor=Limit factor systemSettings.amChartsSaved=AmCharts settings have been saved systemSettings.scadaConfTitle=Scada-LTS environment settings systemSettings.scadaConfCheck=Check configuration +textRenderer.binary.number=Binary number +textRenderer.hex=Hexadecimal \ No newline at end of file diff --git a/webapp-resources/messages_fi.properties b/webapp-resources/messages_fi.properties index dfa7fed56a..51f4eddc99 100644 --- a/webapp-resources/messages_fi.properties +++ b/webapp-resources/messages_fi.properties @@ -3581,4 +3581,6 @@ systemSettings.amChart.valuesLimit=Values Limit systemSettings.amChart.limitFactor=Limit factor systemSettings.amChartsSaved=AmCharts settings have been saved systemSettings.scadaConfTitle=Scada-LTS environment settings -systemSettings.scadaConfCheck=Check configuration \ No newline at end of file +systemSettings.scadaConfCheck=Check configuration +textRenderer.binary.number=Binary number +textRenderer.hex=Hexadecimal \ No newline at end of file diff --git a/webapp-resources/messages_fr.properties b/webapp-resources/messages_fr.properties index 2fa995fef3..5ff85b45ee 100644 --- a/webapp-resources/messages_fr.properties +++ b/webapp-resources/messages_fr.properties @@ -3450,4 +3450,6 @@ systemSettings.amChart.valuesLimit=Values Limit systemSettings.amChart.limitFactor=Limit factor systemSettings.amChartsSaved=AmCharts settings have been saved systemSettings.scadaConfTitle=Scada-LTS environment settings -systemSettings.scadaConfCheck=Check configuration \ No newline at end of file +systemSettings.scadaConfCheck=Check configuration +textRenderer.binary.number=Binary number +textRenderer.hex=Hexadecimal \ No newline at end of file diff --git a/webapp-resources/messages_lu.properties b/webapp-resources/messages_lu.properties index 60ae7d7e8f..757259eca6 100644 --- a/webapp-resources/messages_lu.properties +++ b/webapp-resources/messages_lu.properties @@ -3470,3 +3470,5 @@ systemSettings.amChart.limitFactor=Limit factor systemSettings.amChartsSaved=AmCharts settings have been saved systemSettings.scadaConfTitle=Scada-LTS environment settings systemSettings.scadaConfCheck=Check configuration +textRenderer.binary.number=Binary number +textRenderer.hex=Hexadecimal \ No newline at end of file diff --git a/webapp-resources/messages_nl.properties b/webapp-resources/messages_nl.properties index b6e5c8e6d3..3359c01642 100644 --- a/webapp-resources/messages_nl.properties +++ b/webapp-resources/messages_nl.properties @@ -3571,4 +3571,6 @@ systemSettings.amChart.valuesLimit=Values Limit systemSettings.amChart.limitFactor=Limit factor systemSettings.amChartsSaved=AmCharts settings have been saved systemSettings.scadaConfTitle=Scada-LTS environment settings -systemSettings.scadaConfCheck=Check configuration \ No newline at end of file +systemSettings.scadaConfCheck=Check configuration +textRenderer.binary.number=Binary number +textRenderer.hex=Hexadecimal \ No newline at end of file diff --git a/webapp-resources/messages_pl.properties b/webapp-resources/messages_pl.properties index 67d022d7a8..254f0bf29a 100644 --- a/webapp-resources/messages_pl.properties +++ b/webapp-resources/messages_pl.properties @@ -3593,4 +3593,6 @@ systemSettings.amChart.valuesLimit=Values Limit systemSettings.amChart.limitFactor=Limit factor systemSettings.amChartsSaved=AmCharts settings have been saved systemSettings.scadaConfTitle=Scada-LTS environment settings -systemSettings.scadaConfCheck=Check configuration \ No newline at end of file +systemSettings.scadaConfCheck=Check configuration +textRenderer.binary.number=Binary number +textRenderer.hex=Hexadecimal diff --git a/webapp-resources/messages_pt.properties b/webapp-resources/messages_pt.properties index da768e8004..6208a29f72 100644 --- a/webapp-resources/messages_pt.properties +++ b/webapp-resources/messages_pt.properties @@ -3609,3 +3609,5 @@ systemSettings.amChart.limitFactor=Limit factor systemSettings.amChartsSaved=AmCharts settings have been saved systemSettings.scadaConfTitle=Scada-LTS environment settings systemSettings.scadaConfCheck=Check configuration +textRenderer.binary.number=Binary number +textRenderer.hex=Hexadecimal \ No newline at end of file diff --git a/webapp-resources/messages_ru.properties b/webapp-resources/messages_ru.properties index 75ff083ec9..569c96f393 100644 --- a/webapp-resources/messages_ru.properties +++ b/webapp-resources/messages_ru.properties @@ -3604,4 +3604,6 @@ systemSettings.amChart.valuesLimit=Values Limit systemSettings.amChart.limitFactor=Limit factor systemSettings.amChartsSaved=AmCharts settings have been saved systemSettings.scadaConfTitle=Scada-LTS environment settings -systemSettings.scadaConfCheck=Check configuration \ No newline at end of file +systemSettings.scadaConfCheck=Check configuration +textRenderer.binary.number=Binary number +textRenderer.hex=Hexadecimal \ No newline at end of file diff --git a/webapp-resources/messages_zh.properties b/webapp-resources/messages_zh.properties index 6394874f3c..d91c6804ad 100644 --- a/webapp-resources/messages_zh.properties +++ b/webapp-resources/messages_zh.properties @@ -3556,4 +3556,6 @@ systemSettings.amChart.valuesLimit=Values Limit systemSettings.amChart.limitFactor=Limit factor systemSettings.amChartsSaved=AmCharts settings have been saved systemSettings.scadaConfTitle=Scada-LTS environment settings -systemSettings.scadaConfCheck=Check configuration \ No newline at end of file +systemSettings.scadaConfCheck=Check configuration +textRenderer.binary.number=Binary number +textRenderer.hex=Hexadecimal \ No newline at end of file From 5150b7cda581321535cddbddb9096781e0f13e1f Mon Sep 17 00:00:00 2001 From: patrykb0802 Date: Wed, 7 May 2025 09:45:59 +0200 Subject: [PATCH 2/3] #2497 Add display format as Hex numbers or binary numbers --- src/com/serotonin/mango/view/text/BaseTextRenderer.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/com/serotonin/mango/view/text/BaseTextRenderer.java b/src/com/serotonin/mango/view/text/BaseTextRenderer.java index bd45786a69..05f96c9fb5 100644 --- a/src/com/serotonin/mango/view/text/BaseTextRenderer.java +++ b/src/com/serotonin/mango/view/text/BaseTextRenderer.java @@ -45,13 +45,13 @@ static void ensureDefinitions() { List d = new ArrayList(); d.add(AnalogRenderer.getDefinition()); d.add(BinaryTextRenderer.getDefinition()); - d.add(BinaryRenderer.getDefinition()); - d.add(HexadecimalRenderer.getDefinition()); d.add(MultistateRenderer.getDefinition()); d.add(NoneRenderer.getDefinition()); d.add(PlainRenderer.getDefinition()); d.add(RangeRenderer.getDefinition()); d.add(TimeRenderer.getDefinition()); + d.add(BinaryRenderer.getDefinition()); + d.add(HexadecimalRenderer.getDefinition()); definitions = d; } } From 303e18ee794a3307f908e498ff19fa32bd198dbf Mon Sep 17 00:00:00 2001 From: patrykb0802 Date: Mon, 19 Jan 2026 13:14:14 +0100 Subject: [PATCH 3/3] #2497 Add display format as Hex numbers or binary numbers --- src/com/serotonin/mango/view/text/BaseTextRenderer.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/com/serotonin/mango/view/text/BaseTextRenderer.java b/src/com/serotonin/mango/view/text/BaseTextRenderer.java index 05f96c9fb5..0849e901d4 100644 --- a/src/com/serotonin/mango/view/text/BaseTextRenderer.java +++ b/src/com/serotonin/mango/view/text/BaseTextRenderer.java @@ -214,6 +214,10 @@ else if (def == RangeRenderer.getDefinition()) clazz = RangeRenderer.class; else if (def == TimeRenderer.getDefinition()) clazz = TimeRenderer.class; + else if (def == BinaryRenderer.getDefinition()) + clazz = BinaryRenderer.class; + else if (def == HexadecimalRenderer.getDefinition()) + clazz = HexadecimalRenderer.class; else throw new ShouldNeverHappenException("What's this?: " + def.getName());