package cn.org.rapid_framework.generator.provider.db.table.model.util;
import cn.org.rapid_framework.generator.provider.db.table.model.Column;
import cn.org.rapid_framework.generator.util.typemapping.DatabaseDataTypesUtils;
public class ColumnHelper {
public static String[] removeHibernateValidatorSpecialTags(String str) {
if(str == null || str.trim().length() == 0) return new String[]{};
return str.trim().replaceAll("@", "").replaceAll("\\(.*?\\)", "").trim().split("\\s+");
}
/** 得到JSR303 bean validation的验证表达式 */
public static String getHibernateValidatorExpression(Column c) {
if(!c.isPk() && !c.isNullable()) {
if(DatabaseDataTypesUtils.isString(c.getJavaType())) {
return "@NotBlank " + getNotRequiredHibernateValidatorExpression(c);
}else {
return "@NotNull " + getNotRequiredHibernateValidatorExpression(c);
}
}else {
return getNotRequiredHibernateValidatorExpression(c);
}
}
public static String getNotRequiredHibernateValidatorExpression(Column c) {
String result = "";
if(c.getSqlName().indexOf("mail") >= 0) {
result += "@Email ";
}
if(DatabaseDataTypesUtils.isString(c.getJavaType())) {
result += String.format("@Length(max=%s)",c.getSize());
}
if(DatabaseDataTypesUtils.isIntegerNumber(c.getJavaType())) {
String javaType = DatabaseDataTypesUtils.getPreferredJavaType(c.getSqlType(), c.getSize(), c.getDecimalDigits());
if(javaType.toLowerCase().indexOf("short") >= 0) {
result += " @Max("+Short.MAX_VALUE+")";
}else if(javaType.toLowerCase().indexOf("byte") >= 0) {
result += " @Max("+Byte.MAX_VALUE+")";
}
}
return result.trim();
}
/** 得到rapid validation的验证表达式 */
public static String getRapidValidation(Column c) {
String result = "";
if(c.getSqlName().indexOf("mail") >= 0) {
result += "validate-email ";
}
if(DatabaseDataTypesUtils.isFloatNumber(c.getJavaType())) {
result += "validate-number ";
}
if(DatabaseDataTypesUtils.isIntegerNumber(c.getJavaType())) {
result += "validate-integer ";
if(c.getJavaType().toLowerCase().indexOf("short") >= 0) {
result += "max-value-"+Short.MAX_VALUE;
}else if(c.getJavaType().toLowerCase().indexOf("integer") >= 0) {
result += "max-value-"+Integer.MAX_VALUE;
}else if(c.getJavaType().toLowerCase().indexOf("byte") >= 0) {
result += "max-value-"+Byte.MAX_VALUE;
}
}
return result;
}
}