package net.sf.minuteProject.plugin.roo;
import static net.sf.minuteProject.utils.ConvertUtils.isDateType;
import static net.sf.minuteProject.utils.ConvertUtils.isNumberType;
import static net.sf.minuteProject.utils.ConvertUtils.isStringType;
import static net.sf.minuteProject.utils.ConvertUtils.isBooleanType;
import net.sf.minuteProject.configuration.bean.model.data.Column;
import static net.sf.minuteProject.utils.ColumnUtils.isLengthPrecisionColumn;
import static net.sf.minuteProject.db.type.FieldType.*;
import net.sf.minuteProject.utils.ConvertUtils;
import net.sf.minuteProject.utils.FormatUtils;
import net.sf.minuteProject.utils.java.JavaUtils;
import net.sf.minuteProject.utils.sql.SqlUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
public class RooUtils {
static Logger log = Logger.getLogger(RooUtils.class);
public static String getRooConsoleType (Column column){
return StringUtils.lowerCase(ConvertUtils.getJavaTypeFromDBType(column));
}
public static String getRooTypeChunk (Column column){
return StringUtils.lowerCase(ConvertUtils.getJavaTypeFromDBType(column));
}
public static RooColumn getRooColumn (Column column) {
RooColumn rooColumn = new RooColumn();
String type = column.getType();
// System.out.println(">>> type = "+type+" for "+column.getName()+" isString? "+isStringType (type));
if (isStringType (type)) {
rooColumn.setRooConsoleType("string");
rooColumn.setTypeChunk("");
} else if (isDateType (type)) {
rooColumn.setRooConsoleType("date");
rooColumn.setTypeChunk(getRooColumnTypeChunck("java.lang.Date"));
} else if (isNumberType (type)) {
rooColumn.setRooConsoleType("number");
rooColumn.setTypeChunk(getRooColumnTypeChunck(getNumberType(type)));
} else if (isBooleanType (type)) {
rooColumn.setRooConsoleType("boolean");
rooColumn.setTypeChunk(getRooColumnTypeChunck("java.lang.Boolean"));
}else {
log.error(">> untreated type "+type +" add th");
}
// mandatory value
rooColumn.setNotNullChunk ((column.isRequired())?"--notNull":"");
rooColumn.setMinSizeChunk("");//TODO with enrichment
rooColumn.setSizeMaxChunk (isLengthPrecisionColumn(column)?"--sizeMax "+column.getSizeAsInt():"");
rooColumn.setColumnVariableName (getRooEntityFieldVariable(column));
rooColumn.setColumnClassName(getRooEntityClassName(column));
return rooColumn;
}
private static String getRooColumnTypeChunck (String value) {
return "--type "+value;
}
private static String getNumberType(String dBType) {
if (BIGINT.toString().equals(dBType)) return "java.lang.Long";
if (DECIMAL.toString().equals(dBType)) return "java.lang.Double";
if (INTEGER.toString().equals(dBType)) return "java.lang.Integer";
return "";
}
public static String getRooEntityFieldVariable (Column column) {
return getRooEntityFieldVariable(column.getName());
}
public static String getRooEntityClassName (Column column) {
return getRooEntityClassName(column.getName());
}
private static String getRooEntityClassName(String name) {
String nameLC = StringUtils.lowerCase(name);
String s = FormatUtils.getJavaName(name);
if (SqlUtils.isReservedWord(nameLC) || JavaUtils.isReservedWord(nameLC))
return s+"_";
return s;
}
private static String getRooEntityFieldVariable(String name) {
String nameLC = StringUtils.lowerCase(name);
String s = FormatUtils.getJavaNameVariable(name);
if (SqlUtils.isReservedWord(nameLC) || JavaUtils.isReservedWord(nameLC))
return s+"_";
return s;
}
}