📄 generatemodel.java
字号:
sb.append(columnName).append(".length() > ").append(fieldLength)
.append("){log.warning(\"Length > ")
.append(fieldLength).append(" - truncated\");")
.append(columnName).append(" = ")
.append(columnName).append(".substring(0,").append(fieldLength-1).append(");}");
}
//
sb.append (setValue).append(" (\"").append (columnName).append ("\", ")
.append (columnName).append (");");
}
sb.append("}");
// Mandatory call in constructor
if (isMandatory)
{
mandatory.append("set").append(columnName).append(" (");
if (clazz.equals(Integer.class))
mandatory.append("0");
else if (clazz.equals(Boolean.class))
{
if (defaultValue.indexOf('Y') != -1)
mandatory.append(true);
else
mandatory.append("false");
}
else if (clazz.equals(BigDecimal.class))
mandatory.append("Env.ZERO");
else if (clazz.equals(Timestamp.class))
mandatory.append("new Timestamp(System.currentTimeMillis())");
else
mandatory.append("null");
mandatory.append(");");
if (defaultValue.length() > 0)
mandatory.append("// ").append(defaultValue).append(Env.NL);
}
// ****** Get Comment ******
sb.append("/** Get ").append(Name);
if (Description != null && Description.length() > 0)
sb.append(".\n").append(Description);
sb.append(" */\n");
// Get ********
String getValue = "get_Value";
if (IsEncrypted)
getValue = "get_ValueE";
sb.append("public ").append(dataType);
if (clazz.equals(Boolean.class))
{
sb.append(" is");
if (columnName.toLowerCase().startsWith("is"))
sb.append(columnName.substring(2));
else
sb.append(columnName);
}
else
sb.append(" get").append(columnName);
sb.append("() {");
if (clazz.equals(Integer.class))
sb.append("Integer ii = (Integer)")
.append(getValue).append("(\"").append(columnName).append("\");"
+ "if (ii == null)"
+ " return 0;"
+ "return ii.intValue();");
else if (clazz.equals(BigDecimal.class))
sb.append("BigDecimal bd = (BigDecimal)").append(getValue)
.append("(\"").append(columnName).append("\");"
+ "if (bd == null)"
+ " return Env.ZERO;"
+ "return bd;");
else if (clazz.equals(Boolean.class))
sb.append("Object oo = ").append(getValue)
.append("(\"").append(columnName).append("\");"
+ "if (oo != null) { if (oo instanceof Boolean) return ((Boolean)oo).booleanValue(); return \"Y\".equals(oo);}"
+ "return false;");
else if (dataType.equals("Object"))
sb.append("return ").append(getValue)
.append("(\"").append(columnName).append("\");");
else
sb.append("return (").append(dataType).append(")").append(getValue)
.append("(\"").append(columnName).append("\");");
sb.append("}");
//
return sb.toString();
} // createColumnMethods
/**
* Add List Validation
* @param sb buffer - example:
if (NextAction.equals("N") || NextAction.equals("F"));
else throw new IllegalArgumentException ("NextAction Invalid value - Reference_ID=219 - N - F");
* @param AD_Reference_ID reference
* @param columnName column
* @param nullable the validation must allow null values
* @return static parameter - Example:
public static final int NEXTACTION_AD_Reference_ID=219;
public static final String NEXTACTION_None = "N";
public static final String NEXTACTION_FollowUp = "F";
*/
private String addListValidation (StringBuffer sb, int AD_Reference_ID,
String columnName, boolean nullable)
{
StringBuffer retValue = new StringBuffer();
retValue.append("\n/** ").append(columnName).append(" AD_Reference_ID=").append(AD_Reference_ID) .append(" */\n")
.append("public static final int ").append(columnName.toUpperCase())
.append("_AD_Reference_ID=").append(AD_Reference_ID).append(";");
//
boolean found = false;
StringBuffer values = new StringBuffer("Reference_ID=")
.append(AD_Reference_ID);
StringBuffer statement = new StringBuffer();
if (nullable)
statement.append("if (").append(columnName).append(" == null");
//
String sql = "SELECT Value, Name FROM AD_Ref_List WHERE AD_Reference_ID=?";
PreparedStatement pstmt = null;
try
{
pstmt = DB.prepareStatement(sql, null);
pstmt.setInt(1, AD_Reference_ID);
ResultSet rs = pstmt.executeQuery();
while (rs.next())
{
String value = rs.getString(1);
values.append(" - ").append(value);
if (statement.length() == 0)
statement.append("if (").append(columnName)
.append(".equals(\"").append(value).append("\")");
else
statement.append(" || ").append(columnName)
.append(".equals(\"").append(value).append("\")");
if (!found)
{
found = true;
sb.append("if (")
.append (columnName).append (" == null)"
+ " throw new IllegalArgumentException (\"")
.append(columnName).append(" is mandatory\");");
}
// Name (SmallTalkNotation)
String name = rs.getString(2);
char[] nameArray = name.toCharArray();
StringBuffer nameClean = new StringBuffer();
boolean initCap = true;
for (int i = 0; i < nameArray.length; i++)
{
char c = nameArray[i];
if (Character.isJavaIdentifierPart(c))
{
if (initCap)
nameClean.append(Character.toUpperCase(c));
else
nameClean.append(c);
initCap = false;
}
else
{
if (c == '+')
nameClean.append("Plus");
else if (c == '-')
nameClean.append("_");
else if (c == '>')
{
if (name.indexOf('<') == -1) // ignore <xx>
nameClean.append("Gt");
}
else if (c == '<')
{
if (name.indexOf('>') == -1) // ignore <xx>
nameClean.append("Le");
}
else if (c == '!')
nameClean.append("Not");
else if (c == '=')
nameClean.append("Eq");
else if (c == '~')
nameClean.append("Like");
initCap = true;
}
}
retValue.append("/** ").append(name).append(" = ").append(value).append(" */\n");
retValue.append("public static final String ").append(columnName.toUpperCase())
.append("_").append(nameClean)
.append(" = \"").append(value).append("\";");
}
rs.close();
pstmt.close();
pstmt = null;
}
catch (Exception e)
{
log.log(Level.SEVERE, sql, e);
found = false;
}
finally
{
try
{
if (pstmt != null)
pstmt.close ();
}
catch (Exception e)
{}
pstmt = null;
}
statement.append(")"
+ "; "
+ "else "
+ "throw new IllegalArgumentException (\"").append(columnName)
.append(" Invalid value - \" + ").append(columnName)
.append(" + \" - ").append(values).append("\");");
//
if (found && !columnName.equals("EntityType"))
sb.append (statement);
return retValue.toString();
} // addListValidation
/**
* Create getKeyNamePair() method with first identifier
* @param columnName name
* * @param displayType int
@return method code
*/
private StringBuffer createKeyNamePair (String columnName, int displayType)
{
String method = "get" + columnName + "()";
if (displayType != DisplayType.String)
method = "String.valueOf(" + method + ")";
StringBuffer sb = new StringBuffer("public KeyNamePair getKeyNamePair() "
+ "{return new KeyNamePair(get_ID(), ").append(method).append(");}");
return sb;
} // createKeyNamePair
/**************************************************************************
* Write to file
* @param sb string buffer
* @param fileName file name
*/
private void writeToFile (StringBuffer sb, String fileName)
{
try
{
File out = new File (fileName);
FileWriter fw = new FileWriter (out);
for (int i = 0; i < sb.length(); i++)
{
char c = sb.charAt(i);
// after
if (c == ';' || c == '}')
{
fw.write (c);
if (sb.substring(i+1).startsWith("//"))
fw.write('\t');
else
fw.write(Env.NL);
}
// before & after
else if (c == '{')
{
fw.write(Env.NL);
fw.write (c);
fw.write(Env.NL);
}
else
fw.write (c);
}
fw.flush ();
fw.close ();
float size = out.length();
size /= 1024;
log.info(out.getAbsolutePath() + " - " + size + " kB");
}
catch (Exception ex)
{
log.log(Level.SEVERE, fileName, ex);
}
} // writeToFile
/**
* String representation
* @return string representation
*/
public String toString()
{
StringBuffer sb = new StringBuffer ("GenerateModel[")
.append("]");
return sb.toString();
} // toString
/**************************************************************************
* Generate PO Model Class.
* <pre>
* Example: java GenerateModel.class mydirectory myPackage 'U','A'
* would generate entity type User and Application classes into mydirectory.
* Without parameters, the default is used:
* C:\Compiere\compiere-all\extend\src\compiere\model\ compiere.model 'U','A'
* </pre>
* @param args directory package entityType
* - directory where to save the generated file
* - package of the classes to be generated
* - entityType to be generated
*/
public static void main (String[] args)
{
org.compiere.Compiere.startupEnvironment(true);
CLogMgt.setLevel(Level.FINE);
// CLogMgt.setLevel(Level.ALL);
log.info("Generate Model $Revision: 1.52 $");
log.info("----------------------------------");
// first parameter
String directory = "C:\\Compiere\\compiere-all\\extend\\src\\compiere\\model\\";
if (args.length > 0)
directory = args[0];
if (directory == null || directory.length() == 0)
{
System.err.println("No Directory");
System.exit(1);
}
log.info("Directory: " + directory);
// second parameter
String packageName = "compiere.model";
if (args.length > 1)
packageName = args[1];
if (packageName == null || packageName.length() == 0)
{
System.err.println("No package");
System.exit(1);
}
log.info("Package: " + packageName);
// third parameter
String entityType = "'U','A'"; // User, Application
if (args.length > 2)
entityType = args[2];
if (entityType == null || entityType.length() == 0)
{
System.err.println("No EntityType");
System.exit(1);
}
StringBuffer sql = new StringBuffer("EntityType IN (")
.append(entityType).append(")");
log.info(sql.toString());
log.info("----------------------------------");
// complete sql
sql.insert(0, "SELECT AD_Table_ID "
+ "FROM AD_Table "
+ "WHERE (TableName IN ('RV_WarehousePrice','RV_BPartner')" // special views
+ " OR IsView='N')"
+ " AND TableName NOT LIKE '%_Trl' AND ");
sql.append(" ORDER BY TableName");
//
int count = 0;
PreparedStatement pstmt = null;
try
{
pstmt = DB.prepareStatement(sql.toString(), null);
ResultSet rs = pstmt.executeQuery();
while (rs.next())
{
new GenerateModel(rs.getInt(1), directory, packageName);
count++;
}
rs.close();
pstmt.close();
pstmt = null;
}
catch (Exception e)
{
log.severe("main - " + e);
}
finally
{
try
{
if (pstmt != null)
pstmt.close ();
}
catch (Exception e)
{}
pstmt = null;
}
log.info("Generated = " + count);
} // main
} // GenerateModel
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -