Skip to content

Commit 010be78

Browse files
committed
CSSTUDIO-3605 Report error for unsupported number formats when converting to HEX representation.
1 parent 82cebbd commit 010be78

File tree

1 file changed

+29
-18
lines changed

1 file changed

+29
-18
lines changed

core/ui/src/main/java/org/phoebus/ui/vtype/FormatOptionHandler.java

Lines changed: 29 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import java.util.List;
1414
import java.util.Locale;
1515
import java.util.Objects;
16+
import java.util.Optional;
1617
import java.util.concurrent.ConcurrentHashMap;
1718
import java.util.logging.Level;
1819
import java.util.logging.Logger;
@@ -223,36 +224,46 @@ private static String formatNumber(final Number value, final Display display,
223224
if (option == FormatOption.HEX)
224225
{
225226
final StringBuilder buf = new StringBuilder();
226-
long longValue;
227+
Optional<Long> maybeLongValue;
227228
if (value instanceof Byte valueByte) {
228-
longValue = Byte.toUnsignedLong(valueByte);
229+
maybeLongValue = Optional.of(Byte.toUnsignedLong(valueByte));
229230
} else if (value instanceof Short valueShort) {
230-
longValue = Short.toUnsignedLong(valueShort);
231+
maybeLongValue = Optional.of(Short.toUnsignedLong(valueShort));
231232
} else if (value instanceof Integer valueInt) {
232-
longValue = Integer.toUnsignedLong(valueInt);
233+
maybeLongValue = Optional.of(Integer.toUnsignedLong(valueInt));
233234
} else if (value instanceof Long valueLong) {
234-
longValue = valueLong;
235+
maybeLongValue = Optional.of(valueLong);
235236
} else if (value instanceof Float valueFloat) {
236-
longValue = valueFloat.longValue();
237+
maybeLongValue = Optional.of(valueFloat.longValue());
237238
} else if (value instanceof Double valueDouble) {
238-
longValue = valueDouble.longValue();
239+
maybeLongValue = Optional.of(valueDouble.longValue());
239240
} else if (value instanceof UByte valueUByte) {
240-
longValue = valueUByte.longValue();
241+
maybeLongValue = Optional.of(valueUByte.longValue());
241242
} else if (value instanceof UShort valueUShort) {
242-
longValue = valueUShort.longValue();
243+
maybeLongValue = Optional.of(valueUShort.longValue());
243244
} else if (value instanceof UInteger valueUInteger) {
244-
longValue = valueUInteger.longValue();
245+
maybeLongValue = Optional.of(valueUInteger.longValue());
245246
} else if (value instanceof ULong valueULong) {
246-
longValue = valueULong.longValue();
247+
maybeLongValue = Optional.of(valueULong.longValue());
247248
} else {
248-
longValue = value.longValue();
249+
maybeLongValue = Optional.empty();
249250
}
250-
String hexString = Long.toHexString(longValue);
251-
buf.append(hexString.toUpperCase());
252-
for (int i=buf.length(); i<precision; ++i)
253-
buf.insert(0, '0');
254-
buf.insert(0, "0x");
255-
return buf.toString();
251+
252+
if (maybeLongValue.isPresent()) {
253+
long longValue = maybeLongValue.get();
254+
String hexString = Long.toHexString(longValue);
255+
buf.append(hexString.toUpperCase());
256+
for (int i=buf.length(); i<precision; ++i)
257+
buf.insert(0, '0');
258+
buf.insert(0, "0x");
259+
return buf.toString();
260+
} else {
261+
String numberFormat = value.getClass().getSimpleName();
262+
Logger.getLogger(FormatOptionHandler.class.getPackageName())
263+
.log(Level.WARNING, "Error: Number format is unsupported for conversion to HEX format: " + numberFormat);
264+
return "ERROR: Unsupported number format: " + numberFormat;
265+
}
266+
256267
}
257268
if (option == FormatOption.STRING)
258269
return new String(new byte[] { value.byteValue() });

0 commit comments

Comments
 (0)