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..0849e901d4 100644 --- a/src/com/serotonin/mango/view/text/BaseTextRenderer.java +++ b/src/com/serotonin/mango/view/text/BaseTextRenderer.java @@ -50,6 +50,8 @@ static void ensureDefinitions() { d.add(PlainRenderer.getDefinition()); d.add(RangeRenderer.getDefinition()); d.add(TimeRenderer.getDefinition()); + d.add(BinaryRenderer.getDefinition()); + d.add(HexadecimalRenderer.getDefinition()); definitions = d; } } @@ -212,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()); 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 68f2aaec90..b53999a76a 100644 --- a/webapp-resources/messages_de.properties +++ b/webapp-resources/messages_de.properties @@ -3454,7 +3454,9 @@ 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 validate.unsupportedDataType=Data type {0} is not supported dsEdit.checkFile.found=File OK! dsEdit.checkFile.notFound=File not found! -scadalts.security.js.validator.error=Script is invalid! \ No newline at end of file +scadalts.security.js.validator.error=Script is invalid! diff --git a/webapp-resources/messages_en.properties b/webapp-resources/messages_en.properties index ba5a2c3893..70ca8c53fc 100644 --- a/webapp-resources/messages_en.properties +++ b/webapp-resources/messages_en.properties @@ -3457,8 +3457,9 @@ 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 validate.unsupportedDataType=Data type {0} is not supported - dsEdit.checkFile.found=File OK! dsEdit.checkFile.notFound=File not found! -scadalts.security.js.validator.error=Script is invalid! \ No newline at end of file +scadalts.security.js.validator.error=Script is invalid! diff --git a/webapp-resources/messages_es.properties b/webapp-resources/messages_es.properties index 5c1d9509f2..dd80afef07 100644 --- a/webapp-resources/messages_es.properties +++ b/webapp-resources/messages_es.properties @@ -3497,8 +3497,9 @@ 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 validate.unsupportedDataType=Data type {0} is not supported - dsEdit.checkFile.found=File OK! dsEdit.checkFile.notFound=File not found! -scadalts.security.js.validator.error=Script is invalid! \ No newline at end of file +scadalts.security.js.validator.error=Script is invalid! diff --git a/webapp-resources/messages_fi.properties b/webapp-resources/messages_fi.properties index b282d209de..253963e497 100644 --- a/webapp-resources/messages_fi.properties +++ b/webapp-resources/messages_fi.properties @@ -3582,8 +3582,9 @@ 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 validate.unsupportedDataType=Data type {0} is not supported - dsEdit.checkFile.found=File OK! dsEdit.checkFile.notFound=File not found! -scadalts.security.js.validator.error=Script is invalid! \ No newline at end of file +scadalts.security.js.validator.error=Script is invalid! diff --git a/webapp-resources/messages_fr.properties b/webapp-resources/messages_fr.properties index 5a321e1a49..f0ad425a0f 100644 --- a/webapp-resources/messages_fr.properties +++ b/webapp-resources/messages_fr.properties @@ -3451,8 +3451,9 @@ 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 validate.unsupportedDataType=Data type {0} is not supported - dsEdit.checkFile.found=File OK! dsEdit.checkFile.notFound=File not found! -scadalts.security.js.validator.error=Script is invalid! \ No newline at end of file +scadalts.security.js.validator.error=Script is invalid! diff --git a/webapp-resources/messages_lu.properties b/webapp-resources/messages_lu.properties index fccb65f0c0..d96e907297 100644 --- a/webapp-resources/messages_lu.properties +++ b/webapp-resources/messages_lu.properties @@ -3470,8 +3470,9 @@ 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 validate.unsupportedDataType=Data type {0} is not supported - dsEdit.checkFile.found=File OK! dsEdit.checkFile.notFound=File not found! -scadalts.security.js.validator.error=Script is invalid! \ No newline at end of file +scadalts.security.js.validator.error=Script is invalid! diff --git a/webapp-resources/messages_nl.properties b/webapp-resources/messages_nl.properties index 272420eb5a..2f6f1d78ba 100644 --- a/webapp-resources/messages_nl.properties +++ b/webapp-resources/messages_nl.properties @@ -3572,8 +3572,9 @@ 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 validate.unsupportedDataType=Data type {0} is not supported - dsEdit.checkFile.found=File OK! dsEdit.checkFile.notFound=File not found! -scadalts.security.js.validator.error=Script is invalid! \ No newline at end of file +scadalts.security.js.validator.error=Script is invalid! diff --git a/webapp-resources/messages_pl.properties b/webapp-resources/messages_pl.properties index 04a3a8a05c..d8d72068ad 100644 --- a/webapp-resources/messages_pl.properties +++ b/webapp-resources/messages_pl.properties @@ -3594,8 +3594,9 @@ 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 validate.unsupportedDataType=Data type {0} is not supported - dsEdit.checkFile.found=File OK! dsEdit.checkFile.notFound=File not found! -scadalts.security.js.validator.error=Script is invalid! \ No newline at end of file +scadalts.security.js.validator.error=Script is invalid! diff --git a/webapp-resources/messages_pt.properties b/webapp-resources/messages_pt.properties index d4f4a6d62d..ded9a3ad9e 100644 --- a/webapp-resources/messages_pt.properties +++ b/webapp-resources/messages_pt.properties @@ -3609,8 +3609,9 @@ 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 validate.unsupportedDataType=Data type {0} is not supported - dsEdit.checkFile.found=Arquivo OK! dsEdit.checkFile.notFound=Arquivo não encontrado! scadalts.security.js.validator.error=Script is invalid! diff --git a/webapp-resources/messages_ru.properties b/webapp-resources/messages_ru.properties index 8a21cce10e..c7a32e56f8 100644 --- a/webapp-resources/messages_ru.properties +++ b/webapp-resources/messages_ru.properties @@ -3605,8 +3605,9 @@ 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 validate.unsupportedDataType=Data type {0} is not supported - dsEdit.checkFile.found=File OK! dsEdit.checkFile.notFound=File not found! -scadalts.security.js.validator.error=Script is invalid! \ No newline at end of file +scadalts.security.js.validator.error=Script is invalid! diff --git a/webapp-resources/messages_zh.properties b/webapp-resources/messages_zh.properties index 6ab23cf0ff..a4d44968c9 100644 --- a/webapp-resources/messages_zh.properties +++ b/webapp-resources/messages_zh.properties @@ -3557,8 +3557,9 @@ 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 validate.unsupportedDataType=Data type {0} is not supported - dsEdit.checkFile.found=File OK! dsEdit.checkFile.notFound=File not found! -scadalts.security.js.validator.error=Script is invalid! \ No newline at end of file +scadalts.security.js.validator.error=Script is invalid!