in empire-db-jakarta-faces/src/main/java/org/apache/empire/jakarta/controls/TextInputControl.java [502:554]
protected int getMaxInputLength(InputInfo ii)
{
// check custom
String maxlen = getFormatOption(ii, "maxlength:");
if (StringUtils.isNotEmpty(maxlen))
{
int ml = ObjectUtils.getInteger(maxlen);
if (ml > 0)
return ml;
}
Column col = ii.getColumn();
// cast to DBTableColumn
DataType type = col.getDataType();
if (type == DataType.CHAR || type == DataType.VARCHAR)
return (int) Math.round(col.getSize());
if (type == DataType.AUTOINC || type == DataType.INTEGER)
return 10;
if (type == DataType.FLOAT)
return 18;
if (type == DataType.DECIMAL)
{ // check precision and scale
double size = col.getSize();
int prec = (int) Math.round(size);
if (prec == 0)
return 0;
int len = prec;
// scale
int scale = ((int) (size * 10) - (prec * 10));
if (scale > 0)
len++; // Dezimaltrenner
// thousand separator ?
Object groupSep = col.getAttribute(Column.COLATTR_NUMBER_GROUPSEP);
if (groupSep != null && ObjectUtils.getBoolean(groupSep))
len += ((prec - scale - 1) / 3);
// sign?
Object minVal = col.getAttribute(Column.COLATTR_MINVALUE);
if (minVal == null || ObjectUtils.getInteger(minVal) < 0)
len++; // Vorzeichen
// fertig
return len;
}
if (type == DataType.BOOL)
return 1;
if (type == DataType.DATE)
return 10;
if (type == DataType.DATETIME || type == DataType.TIMESTAMP)
return 16;
if (type == DataType.CLOB)
return 0; // unlimited (use 0x7FFFFFFF instead?)
// undefined!
log.info("No max-length available for data type {}.", type);
return 0;
}