From 23ef87294b0ff598b11271240eabba14bd837c0c Mon Sep 17 00:00:00 2001 From: Arnaud Jelmoni <arnaud.jelmoni@keyconsulting.fr> Date: Tue, 1 Dec 2020 16:00:49 +0000 Subject: [PATCH] TANGOARCH-628 / TANGOARCH-634 --- .../snap/api/tools/SnapAttributeExtract.java | 82 ++++++++----------- .../api/tools/SnapAttributesExtractTest.java | 72 ++++++++++++++++ 2 files changed, 107 insertions(+), 47 deletions(-) create mode 100644 src/test/java/fr/soleil/archiving/snap/api/tools/SnapAttributesExtractTest.java diff --git a/src/main/java/fr/soleil/archiving/snap/api/tools/SnapAttributeExtract.java b/src/main/java/fr/soleil/archiving/snap/api/tools/SnapAttributeExtract.java index 40999ee..60b4ce6 100644 --- a/src/main/java/fr/soleil/archiving/snap/api/tools/SnapAttributeExtract.java +++ b/src/main/java/fr/soleil/archiving/snap/api/tools/SnapAttributeExtract.java @@ -592,20 +592,7 @@ public class SnapAttributeExtract extends SnapAttribute { writable = snapAttributeLight.getWritable(); } - /* - * public int getData_type() { return data_type; } - * - * public void setData_type(int data_type) { this.data_type = data_type; } - * - * public int getData_format() { return data_format; } - * - * public void setData_format(int data_format) { this.data_format = - * data_format; } - * - * public int getWritable() { return writable; } - * - * public void setWritable(int writable) { this.writable = writable; } - */ + // Everything here is already available in SnapAttribute public String valueToString(final int pos) { final String nullvalue = "NULL"; @@ -613,12 +600,13 @@ public class SnapAttributeExtract extends SnapAttribute { if (getValue() == null) { return nullvalue; } - if (getValue() instanceof Object[]) { - final Object[] valTab = (Object[]) getValue(); - if (valTab[pos] == null) { - return nullvalue; - } - } + if (getValue() instanceof Object[]) { + final Object[] valTab = (Object[]) getValue(); + if ((writable == AttrWriteType._READ_WITH_WRITE || writable == AttrWriteType._READ_WRITE) + && valTab[pos] == null) { + return nullvalue; + } + } switch (dataFormat) { case AttrDataFormat._SCALAR: @@ -650,7 +638,7 @@ public class SnapAttributeExtract extends SnapAttribute { switch (dataType) { case TangoConst.Tango_DEV_BOOLEAN: final boolean[] valb = (boolean[]) getValue(); - if (valb != null) { + if (valb != null && valb.length > 0) { for (int i = 0; i < valb.length - 1; i++) { value += valb[i] + SnapConst.CLOB_SEPARATOR; } @@ -659,7 +647,7 @@ public class SnapAttributeExtract extends SnapAttribute { break; case TangoConst.Tango_DEV_STRING: final String[] valstr = (String[]) getValue(); - if (valstr != null) { + if (valstr != null && valstr.length > 0) { for (int i = 0; i < valstr.length - 1; i++) { value += valstr[i] + SnapConst.CLOB_SEPARATOR; } @@ -669,7 +657,7 @@ public class SnapAttributeExtract extends SnapAttribute { case TangoConst.Tango_DEV_CHAR: case TangoConst.Tango_DEV_UCHAR: final byte[] valc = (byte[]) getValue(); - if (valc != null) { + if (valc != null && valc.length > 0) { for (int i = 0; i < valc.length - 1; i++) { value += valc[i] + SnapConst.CLOB_SEPARATOR; } @@ -680,7 +668,7 @@ public class SnapAttributeExtract extends SnapAttribute { case TangoConst.Tango_DEV_LONG: case TangoConst.Tango_DEV_ULONG: final int[] vall = (int[]) getValue(); - if (vall != null) { + if (vall != null && vall.length > 0) { for (int i = 0; i < vall.length - 1; i++) { value += vall[i] + SnapConst.CLOB_SEPARATOR; } @@ -690,7 +678,7 @@ public class SnapAttributeExtract extends SnapAttribute { case TangoConst.Tango_DEV_USHORT: case TangoConst.Tango_DEV_SHORT: final short[] vals = (short[]) getValue(); - if (vals != null) { + if (vals != null && vals.length > 0) { for (int i = 0; i < vals.length - 1; i++) { value += vals[i] + SnapConst.CLOB_SEPARATOR; } @@ -699,7 +687,7 @@ public class SnapAttributeExtract extends SnapAttribute { break; case TangoConst.Tango_DEV_FLOAT: final float[] valf = (float[]) getValue(); - if (valf != null) { + if (valf != null && valf.length > 0) { for (int i = 0; i < valf.length - 1; i++) { value += valf[i] + SnapConst.CLOB_SEPARATOR; } @@ -708,7 +696,7 @@ public class SnapAttributeExtract extends SnapAttribute { break; case TangoConst.Tango_DEV_DOUBLE: final double[] vald = (double[]) getValue(); - if (vald != null) { + if (vald != null && vald.length > 0) { for (int i = 0; i < vald.length - 1; i++) { value += vald[i] + SnapConst.CLOB_SEPARATOR; } @@ -725,7 +713,7 @@ public class SnapAttributeExtract extends SnapAttribute { switch (dataType) { case TangoConst.Tango_DEV_BOOLEAN: final boolean[] valb = (boolean[]) temp[pos]; - if (valb != null) { + if (valb != null && valb.length > 0) { for (int i = 0; i < valb.length - 1; i++) { value += valb[i] + SnapConst.CLOB_SEPARATOR; } @@ -734,7 +722,7 @@ public class SnapAttributeExtract extends SnapAttribute { break; case TangoConst.Tango_DEV_STRING: final String[] valstr = (String[]) temp[pos]; - if (valstr != null) { + if (valstr != null && valstr.length > 0) { for (int i = 0; i < valstr.length - 1; i++) { value += valstr[i] + SnapConst.CLOB_SEPARATOR; } @@ -744,7 +732,7 @@ public class SnapAttributeExtract extends SnapAttribute { case TangoConst.Tango_DEV_CHAR: case TangoConst.Tango_DEV_UCHAR: final byte[] valc = (byte[]) temp[pos]; - if (valc != null) { + if (valc != null && valc.length > 0) { for (int i = 0; i < valc.length - 1; i++) { value += valc[i] + SnapConst.CLOB_SEPARATOR; } @@ -755,7 +743,7 @@ public class SnapAttributeExtract extends SnapAttribute { case TangoConst.Tango_DEV_LONG: case TangoConst.Tango_DEV_ULONG: final int[] vall = (int[]) temp[pos]; - if (vall != null) { + if (vall != null && vall.length > 0) { for (int i = 0; i < vall.length - 1; i++) { value += vall[i] + SnapConst.CLOB_SEPARATOR; } @@ -765,7 +753,7 @@ public class SnapAttributeExtract extends SnapAttribute { case TangoConst.Tango_DEV_USHORT: case TangoConst.Tango_DEV_SHORT: final short[] vals = (short[]) temp[pos]; - if (vals != null) { + if (vals != null && vals.length > 0) { for (int i = 0; i < vals.length - 1; i++) { value += vals[i] + SnapConst.CLOB_SEPARATOR; } @@ -774,7 +762,7 @@ public class SnapAttributeExtract extends SnapAttribute { break; case TangoConst.Tango_DEV_FLOAT: final float[] valf = (float[]) temp[pos]; - if (valf != null) { + if (valf != null && valf.length > 0) { for (int i = 0; i < valf.length - 1; i++) { value += valf[i] + SnapConst.CLOB_SEPARATOR; } @@ -783,7 +771,7 @@ public class SnapAttributeExtract extends SnapAttribute { break; case TangoConst.Tango_DEV_DOUBLE: final double[] vald = (double[]) temp[pos]; - if (vald != null) { + if (vald != null && vald.length > 0) { for (int i = 0; i < vald.length - 1; i++) { value += vald[i] + SnapConst.CLOB_SEPARATOR; } @@ -801,7 +789,7 @@ public class SnapAttributeExtract extends SnapAttribute { switch (dataType) { case TangoConst.Tango_DEV_BOOLEAN: final boolean[] valb = (boolean[]) getValue(); - if (valb != null) { + if (valb != null && valb.length > 0) { for (int i = 0; i < valb.length - 1; i++) { value += valb[i] + SnapConst.CLOB_SEPARATOR; } @@ -810,7 +798,7 @@ public class SnapAttributeExtract extends SnapAttribute { break; case TangoConst.Tango_DEV_STRING: final String[] valstr = (String[]) getValue(); - if (valstr != null) { + if (valstr != null && valstr.length > 0) { for (int i = 0; i < valstr.length - 1; i++) { value += valstr[i] + SnapConst.CLOB_SEPARATOR; } @@ -830,7 +818,7 @@ public class SnapAttributeExtract extends SnapAttribute { case TangoConst.Tango_DEV_LONG: case TangoConst.Tango_DEV_ULONG: final int[] vall = (int[]) getValue(); - if (vall != null) { + if (vall != null && vall.length > 0) { for (int i = 0; i < vall.length - 1; i++) { value += vall[i] + SnapConst.CLOB_SEPARATOR; } @@ -840,7 +828,7 @@ public class SnapAttributeExtract extends SnapAttribute { case TangoConst.Tango_DEV_USHORT: case TangoConst.Tango_DEV_SHORT: final short[] vals = (short[]) getValue(); - if (vals != null) { + if (vals != null && vals.length > 0) { for (int i = 0; i < vals.length - 1; i++) { value += vals[i] + SnapConst.CLOB_SEPARATOR; } @@ -849,7 +837,7 @@ public class SnapAttributeExtract extends SnapAttribute { break; case TangoConst.Tango_DEV_FLOAT: final float[] valf = (float[]) getValue(); - if (valf != null) { + if (valf != null && valf.length > 0) { for (int i = 0; i < valf.length - 1; i++) { value += valf[i] + SnapConst.CLOB_SEPARATOR; } @@ -858,7 +846,7 @@ public class SnapAttributeExtract extends SnapAttribute { break; case TangoConst.Tango_DEV_DOUBLE: final double[] vald = (double[]) getValue(); - if (vald != null) { + if (vald != null && vald.length > 0) { for (int i = 0; i < vald.length - 1; i++) { value += vald[i] + SnapConst.CLOB_SEPARATOR; } @@ -875,7 +863,7 @@ public class SnapAttributeExtract extends SnapAttribute { switch (dataType) { case TangoConst.Tango_DEV_BOOLEAN: final boolean[] valb = (boolean[]) temp[pos]; - if (valb != null) { + if (valb != null && valb.length > 0) { for (int i = 0; i < valb.length - 1; i++) { value += valb[i] + SnapConst.CLOB_SEPARATOR; } @@ -884,7 +872,7 @@ public class SnapAttributeExtract extends SnapAttribute { break; case TangoConst.Tango_DEV_STRING: final String[] valstr = (String[]) temp[pos]; - if (valstr != null) { + if (valstr != null && valstr.length > 0) { for (int i = 0; i < valstr.length - 1; i++) { value += valstr[i] + SnapConst.CLOB_SEPARATOR; } @@ -894,7 +882,7 @@ public class SnapAttributeExtract extends SnapAttribute { case TangoConst.Tango_DEV_CHAR: case TangoConst.Tango_DEV_UCHAR: final byte[] valc = (byte[]) temp[pos]; - if (valc != null) { + if (valc != null && valc.length > 0) { for (int i = 0; i < valc.length - 1; i++) { value += valc[i] + SnapConst.CLOB_SEPARATOR; } @@ -904,7 +892,7 @@ public class SnapAttributeExtract extends SnapAttribute { case TangoConst.Tango_DEV_LONG: case TangoConst.Tango_DEV_ULONG: final int[] vall = (int[]) temp[pos]; - if (vall != null) { + if (vall != null && vall.length > 0) { for (int i = 0; i < vall.length - 1; i++) { value += vall[i] + SnapConst.CLOB_SEPARATOR; } @@ -914,7 +902,7 @@ public class SnapAttributeExtract extends SnapAttribute { case TangoConst.Tango_DEV_USHORT: case TangoConst.Tango_DEV_SHORT: final short[] vals = (short[]) temp[pos]; - if (vals != null) { + if (vals != null && vals.length > 0) { for (int i = 0; i < vals.length - 1; i++) { value += vals[i] + SnapConst.CLOB_SEPARATOR; } @@ -923,7 +911,7 @@ public class SnapAttributeExtract extends SnapAttribute { break; case TangoConst.Tango_DEV_FLOAT: final float[] valf = (float[]) temp[pos]; - if (valf != null) { + if (valf != null && valf.length > 0) { for (int i = 0; i < valf.length - 1; i++) { value += valf[i] + SnapConst.CLOB_SEPARATOR; } @@ -932,7 +920,7 @@ public class SnapAttributeExtract extends SnapAttribute { break; case TangoConst.Tango_DEV_DOUBLE: final double[] vald = (double[]) temp[pos]; - if (vald != null) { + if (vald != null && vald.length > 0) { for (int i = 0; i < vald.length - 1; i++) { value += vald[i] + SnapConst.CLOB_SEPARATOR; } diff --git a/src/test/java/fr/soleil/archiving/snap/api/tools/SnapAttributesExtractTest.java b/src/test/java/fr/soleil/archiving/snap/api/tools/SnapAttributesExtractTest.java new file mode 100644 index 0000000..d567dd3 --- /dev/null +++ b/src/test/java/fr/soleil/archiving/snap/api/tools/SnapAttributesExtractTest.java @@ -0,0 +1,72 @@ +package fr.soleil.archiving.snap.api.tools; + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; + +import fr.esrf.Tango.AttrDataFormat; +import fr.esrf.Tango.AttrWriteType; +import fr.esrf.TangoDs.TangoConst; + +public class SnapAttributesExtractTest { + @Test + public void ScalareToStingTest() { + + testReadWrite(99, AttrDataFormat._SCALAR, "0.0", "1.0", "NULL"); + testReadWrite(TangoConst.Tango_DEV_STRING,AttrDataFormat._SCALAR, "read", "write", "NULL"); + testReadWrite(TangoConst.Tango_DEV_STATE, AttrDataFormat._SCALAR, "0", "1", "NULL"); + testReadWrite(TangoConst.Tango_DEV_UCHAR, AttrDataFormat._SCALAR, "0", "1", "NULL"); + testReadWrite(TangoConst.Tango_DEV_LONG, AttrDataFormat._SCALAR, "0", "1", "NULL"); + testReadWrite(TangoConst.Tango_DEV_ULONG, AttrDataFormat._SCALAR, "0", "1", "NULL"); + testReadWrite(TangoConst.Tango_DEV_BOOLEAN, AttrDataFormat._SCALAR, "true", "false", "NULL"); + testReadWrite(TangoConst.Tango_DEV_SHORT, AttrDataFormat._SCALAR, "0", "1", "NULL"); + testReadWrite(TangoConst.Tango_DEV_FLOAT, AttrDataFormat._SCALAR, "0.0", "1.0", "NULL"); + testReadWrite(TangoConst.Tango_DEV_DOUBLE, AttrDataFormat._SCALAR, "0.0", "1.0", "NULL"); + + } + + @Test + public void SpectrumToStringTest() { + testReadWrite(TangoConst.Tango_DEV_STRING, AttrDataFormat._SPECTRUM, "[test,test]", "[test]", "[]"); + testReadWrite(TangoConst.Tango_DEV_UCHAR, AttrDataFormat._SPECTRUM, "[0]", "[1]", "[]"); + testReadWrite(TangoConst.Tango_DEV_LONG, AttrDataFormat._SPECTRUM, "[0]", "[1]", "[]"); + testReadWrite(TangoConst.Tango_DEV_ULONG, AttrDataFormat._SPECTRUM, "[0]", "[1]", "[]"); + testReadWrite(TangoConst.Tango_DEV_BOOLEAN, AttrDataFormat._SPECTRUM, "[true]", "[false]", "[]"); + testReadWrite(TangoConst.Tango_DEV_SHORT, AttrDataFormat._SPECTRUM, "[0]", "[1]", "[]"); + testReadWrite(TangoConst.Tango_DEV_FLOAT, AttrDataFormat._SPECTRUM, "[0.0]", "[1.0]", "[]"); + testReadWrite(TangoConst.Tango_DEV_DOUBLE, AttrDataFormat._SPECTRUM, "[0.0]", "[1.0]", "[]"); + + testReadWrite(TangoConst.Tango_DEV_STRING, AttrDataFormat._SPECTRUM, "[test,test,test3]", "[test,test2]", "[]"); + testReadWrite(TangoConst.Tango_DEV_UCHAR, AttrDataFormat._SPECTRUM, "[0,1]", "[1,0]", "[]"); + testReadWrite(TangoConst.Tango_DEV_LONG, AttrDataFormat._SPECTRUM, "[0,1]", "[1,0]", "[]"); + testReadWrite(TangoConst.Tango_DEV_ULONG, AttrDataFormat._SPECTRUM, "[0,1]", "[1,0]", "[]"); + testReadWrite(TangoConst.Tango_DEV_BOOLEAN, AttrDataFormat._SPECTRUM, "[true,false]", "[false,true]", "[]"); + testReadWrite(TangoConst.Tango_DEV_SHORT, AttrDataFormat._SPECTRUM, "[0,1]", "[1,0]", "[]"); + testReadWrite(TangoConst.Tango_DEV_FLOAT, AttrDataFormat._SPECTRUM, "[0.0,1.0]", "[1.0,2.0]", "[]"); + testReadWrite(TangoConst.Tango_DEV_DOUBLE, AttrDataFormat._SPECTRUM, "[0.0,1.0]", "[1.0,2.0]", "[]"); + } + + private void testReadWrite(int dataType,int dataFormat, String readStringValue, String writeStringValue, String emptyValue) { + String[] args = { "test", "0", "" + dataType , "" + dataFormat, + "", readStringValue, writeStringValue }; + args[4] = "" + AttrWriteType._READ; + SnapAttributeExtract sae = new SnapAttributeExtract(args); + assertEquals(readStringValue, sae.valueToString(0)); + assertEquals(emptyValue, sae.valueToString(1)); + + args[4] = "" + AttrWriteType._WRITE; + sae = new SnapAttributeExtract(args); + assertEquals(emptyValue, sae.valueToString(0)); + assertEquals(writeStringValue, sae.valueToString(1)); + + args[4] = "" + AttrWriteType._READ_WITH_WRITE; + sae = new SnapAttributeExtract(args); + assertEquals(readStringValue, sae.valueToString(0)); + assertEquals(writeStringValue, sae.valueToString(1)); + + args[4] = "" + AttrWriteType._READ_WRITE; + sae = new SnapAttributeExtract(args); + assertEquals(readStringValue, sae.valueToString(0)); + assertEquals(writeStringValue, sae.valueToString(1)); + } +} -- GitLab