in plc4j/integrations/apache-nifi/nifi-plc4x-processors/src/main/java/org/apache/plc4x/nifi/util/Plc4xCommon.java [80:134]
private static DataType getDataType(final Object valueOriginal) {
PlcValue value = (PlcValue) valueOriginal;
// 8 bits
if (value instanceof PlcBOOL && value.isBoolean())
return RecordFieldType.BOOLEAN.getDataType();
if (value instanceof PlcBYTE && (value.isByte() || value.isShort()))
return RecordFieldType.SHORT.getDataType();
if (value instanceof PlcCHAR && value.isShort())
return RecordFieldType.STRING.getDataType();
if ((value instanceof PlcSINT || value instanceof PlcUSINT) && (value.isShort() || value.isInteger()))
return RecordFieldType.SHORT.getDataType();
// 16 bits
if (value instanceof PlcWORD && (value.isInteger() || value.isShort()))
return RecordFieldType.STRING.getDataType();
if (value instanceof PlcINT && value.isInteger())
return RecordFieldType.INT.getDataType();
if (value instanceof PlcUINT && value.isInteger())
return RecordFieldType.INT.getDataType();
if (value instanceof PlcWCHAR || value instanceof PlcDWORD)
return RecordFieldType.STRING.getDataType();
// 32 bits
if (value instanceof PlcREAL && value.isFloat())
return RecordFieldType.FLOAT.getDataType();
if ((value instanceof PlcDINT) && value.isInteger())
return RecordFieldType.INT.getDataType();
if (value instanceof PlcDWORD && value.isInteger())
return RecordFieldType.STRING.getDataType();
// 64 bits
if ((value instanceof PlcLINT || value instanceof PlcUDINT) && value.isLong())
return RecordFieldType.LONG.getDataType();
if (value instanceof PlcULINT)
return RecordFieldType.BIGINT.getDataType();
if (value instanceof PlcLREAL && value.isDouble())
return RecordFieldType.DOUBLE.getDataType();
if (value instanceof PlcLWORD && (value.isLong() || value.isBigInteger()))
return RecordFieldType.STRING.getDataType();
// Dates and time
if (value instanceof PlcDATE && value.isDate())
return RecordFieldType.DATE.getDataType();
if (value instanceof PlcDATE_AND_TIME && value.isDateTime())
return RecordFieldType.TIME.getDataType();
if (value instanceof PlcTIME && value.isTime())
return RecordFieldType.TIME.getDataType();
if (value instanceof PlcTIME_OF_DAY && value.isTime())
return RecordFieldType.TIME.getDataType();
// Everything else to string
return RecordFieldType.STRING.getDataType();
}