📄 po.java
字号:
/**
* Load record with m_ID[0]
*/
protected void load ()
{
String keyColumn = m_KeyColumns[0];
if (getColumnIndex(keyColumn) < 0)
throw new UnsupportedOperationException("PO.load - TableColumn not found: " + keyColumn);
StringBuffer sql = new StringBuffer("SELECT ");
int size = getColumnCount();
for (int i = 0; i < size; i++)
{
if (i != 0)
sql.append(",");
sql.append(getColumnName(i));
}
sql.append(" FROM ").append(getTableName())
.append(" WHERE ").append(keyColumn).append("=?");
//
int index = -1;
if (Log.isTraceLevel(10))
log.debug("load - " + keyColumn + "=" + m_IDs[0]);
try
{
PreparedStatement pstmt = DB.prepareStatement(sql.toString());
pstmt.setInt(1, m_IDs[0]);
ResultSet rs = pstmt.executeQuery();
if (rs.next())
{
// load column values
for (index = 0; index < size; index++)
{
Class clazz = p_info.getColumnClass(index);
if (clazz == Integer.class)
m_oldValues[index] = new Integer(rs.getInt(index+1));
else if (clazz == BigDecimal.class)
m_oldValues[index] = rs.getBigDecimal(index+1);
else if (clazz == Boolean.class)
m_oldValues[index] = new Boolean ("Y".equals(rs.getString(index+1)));
else if (clazz == Timestamp.class)
m_oldValues[index] = rs.getTimestamp(index+1);
else if (clazz == String.class)
m_oldValues[index] = rs.getString(index+1);
else
m_oldValues[index] = loadSpecial(rs, index);
if (rs.wasNull() && m_oldValues[index] != null)
m_oldValues[index] = null;
if (Log.isTraceLevel(10))
log.debug(String.valueOf(index) + ": " + p_info.getColumnName(index) + "(" + p_info.getColumnClass(index) + ") = " + m_oldValues[index]);
}
}
else
{
log.error("load - NO Data found for " + m_KeyColumns[0] + "=" + m_IDs[0]);
m_IDs = new int[] {0};
}
rs.close();
pstmt.close();
m_createNew = false;
// reset new values
m_newValues = new Object[size];
}
catch (SQLException e)
{
log.error ("load - ID=" + m_IDs[0]
+ ", Index=" + index + ", Column=" + getColumnName(index)
+ ", " + p_info.toString(index)
+ ", SQL=" + sql.toString(), e);
}
} // load
/**
* Load from the current position of a ResultSet
* @param rs result set
*/
protected void load (ResultSet rs)
{
int size = getColumnCount();
int index = 0;
if (Log.isTraceLevel(10))
log.debug("load (rs)");
try
{
// load column values
for (index = 0; index < size; index++)
{
String columnName = p_info.getColumnName(index);
Class clazz = p_info.getColumnClass(index);
if (clazz == Integer.class)
m_oldValues[index] = new Integer(rs.getInt(columnName));
else if (clazz == BigDecimal.class)
m_oldValues[index] = rs.getBigDecimal(columnName);
else if (clazz == Boolean.class)
m_oldValues[index] = new Boolean ("Y".equals(rs.getString(columnName)));
else if (clazz == Timestamp.class)
m_oldValues[index] = rs.getTimestamp(columnName);
else if (clazz == String.class)
m_oldValues[index] = rs.getString(columnName);
else
m_oldValues[index] = loadSpecial(rs, index);
if (rs.wasNull() && m_oldValues[index] != null)
m_oldValues[index] = null;
if (Log.isTraceLevel(10))
log.debug(String.valueOf(index) + ": " + p_info.getColumnName(index) + "(" + p_info.getColumnClass(index) + ") = " + m_oldValues[index]);
}
m_createNew = false;
}
catch (SQLException e)
{
log.error (p_info.getTableName() + "_PO.load rs - Index="
+ index + ", Column=" + getColumnName(index), e);
}
} // load
/**
* Load Special data (images, ..).
* To be extended by sub-classes
* @param rs result set
* @param index zero based index
* @return value value
* @throws SQLException
*/
protected Object loadSpecial (ResultSet rs, int index) throws SQLException
{
if (Log.isTraceLevel(Log.l4_Data))
log.debug("loadSpecial - " + p_info.getColumnName(index));
return null;
} // loadSpecial
/**
* Load Defaults
*/
protected void loadDefaults()
{
setStandardDefaults();
//
/** @todo defaults from Field */
// MField.getDefault(p_info.getDefaultLogic(i));
} // loadDefaults
/**
* Set Default values.
* Client, Org, Created/Updated, *By, IsActive
*/
protected void setStandardDefaults()
{
int size = getColumnCount();
for (int i = 0; i < size; i++)
{
String colName = p_info.getColumnName(i);
// Set Standard Values
if (colName.endsWith("tedBy"))
m_newValues[i] = new Integer (Env.getContextAsInt(p_ctx, "#AD_User_ID"));
else if (colName.equals("Created") || colName.equals("Updated"))
m_newValues[i] = new Timestamp (System.currentTimeMillis());
else if (colName.equals(getTableName() + "_ID")) // KeyColumn
m_newValues[i] = new Integer(0);
else if (colName.equals("IsActive"))
m_newValues[i] = new Boolean(true);
else if (colName.equals("AD_Client_ID"))
m_newValues[i] = new Integer(Env.getContextAsInt(p_ctx, "#AD_Client_ID"));
else if (colName.equals("AD_Org_ID"))
m_newValues[i] = new Integer(Env.getContextAsInt(p_ctx, "#AD_Org_ID"));
}
} // setDefaults
/**
* Are all mandatory Fields filled (i.e. can we save)?.
* Stops at first null mandatory field
* @return true if all mandatory fields are ok
*/
protected boolean isMandatoryOK()
{
int size = getColumnCount();
for (int i = 0; i < size; i++)
{
if (p_info.isColumnMandatory(i))
{
if (getValue(i) == null || getValue(i).equals(NULL))
{
log.info("isMandatoryOK " + p_info.getColumnName(i));
return false;
}
}
}
return true;
} // isMandatoryOK
/************************************************************************/
/**
* Set AD_Client
* @param AD_Client_ID client
*/
final void setAD_Client_ID (int AD_Client_ID)
{
setValueNoCheck ("AD_Client_ID", new Integer(AD_Client_ID));
} // setAD_Client_ID
/**
* Get AD_Client
* @return AD_Client_ID
*/
public final int getAD_Client_ID()
{
return ((Integer)getValue("AD_Client_ID")).intValue();
} // getAD_Client_ID
/**
* Set AD_Org
* @param AD_Org_ID org
*/
final void setAD_Org_ID (int AD_Org_ID)
{
setValueNoCheck ("AD_Org_ID", new Integer(AD_Org_ID));
} // setAD_Org_ID
/**
* Get AD_Org
* @return AD_Org_ID
*/
public final int getAD_Org_ID()
{
return ((Integer)getValue("AD_Org_ID")).intValue();
} // getAD_Org_ID
/**
* Set Active
* @param active active
*/
public final void setActive (boolean active)
{
setValue("IsActive", new Boolean(active));
} // setActive
/**
* Is Active
* @return is active
*/
public final boolean isActive()
{
Boolean bb = (Boolean)getValue("IsActive");
if (bb != null)
return bb.booleanValue();
return false;
} // isActive
/************************************************************************/
/**
* Update Value or create new record
* @return true if saved
*/
public boolean save()
{
log.info("save - " + p_info.getTableName() + " ID=" + m_IDs[0]);
// New
if (!m_createNew && m_IDs[0] == 0)
m_createNew = true;
if (m_createNew)
return saveNew();
//
boolean changes = false;
StringBuffer sql = new StringBuffer ("UPDATE ");
sql.append(getTableName()).append( " SET ");
int size = getColumnCount();
for (int i = 0; i < size; i++)
{
// we have a change
if (m_newValues[i] != null)
{
if (changes)
sql.append(", ");
sql.append(p_info.getColumnName(i)).append("=");
// values
if (m_newValues[i] == NULL)
sql.append("NULL");
else if (p_info.getColumnClass(i) == Integer.class || p_info.getColumnClass(i) == BigDecimal.class)
sql.append(m_newValues[i]);
else if (p_info.getColumnClass(i) == Boolean.class)
{
String value = "'N'";
if (((Boolean)m_newValues[i]).booleanValue())
value = "'Y'";
sql.append(value);
}
else if (p_info.getColumnClass(i) == Timestamp.class)
sql.append(DB.TO_DATE((Timestamp)m_newValues[i],p_info.getColumnDisplayType(i) == DisplayType.Date));
else
sql.append(DB.TO_STRING(m_newValues[i].toString()));
changes = true;
} // changed field
} // for all fields
//
sql.append(getWhereClause());
/** @todo optimistic locking goes here */
if (changes)
{
int no = DB.executeUpdate(sql.toString());
return saveComplete (false, no == 1);
}
// nothing changed, so OK
return saveComplete (false, true);
} // save
/**
* Create New Record
* @return true if new record inserted
*/
private boolean saveNew()
{
// Set ID for single key - Multi-Key values need explicitly be set previously
if (m_IDs.length == 1)
{
String CompiereSys = Env.getContext(p_ctx, "#CompiereSys");
m_IDs[0] = DB.getKeyNextNo(getAD_Client_ID(), CompiereSys, getTableName());
setValueNoCheck(m_KeyColumns[0], new Integer (m_IDs[0]));
}
log.info("saveNew - " + p_info.getTableName() + " ID=" + m_IDs[0]);
// SQL
StringBuffer sql = new StringBuffer("INSERT INTO ");
sql.append(getTableName()).append(" (");
int size = getColumnCount();
for (int i = 0; i < size; i++)
{
if (i > 0)
sql.append(",");
sql.append(p_info.getColumnName(i));
}
sql.append(") VALUES (");
for (int i = 0; i < size; i++)
{
if (i > 0)
sql.append(",");
Object value = getValue(i);
// Based on class of definition, not class of value
Class c = p_info.getColumnClass(i);
try
{
//
if (c == Object.class) // may have need to deal with null values differently
sql.append (saveNewSpecial (value, i));
else if (value == null || value.equals (NULL))
sql.append ("NULL");
else if (c == Integer.class)
sql.append (((Integer)value).intValue ());
else if (c == BigDecimal.class)
sql.append (((BigDecimal)value).toString ());
else if (c == Boolean.class)
sql.append (((Boolean)value).booleanValue () ? "'Y'"
: "'N'");
else if (c == Timestamp.class)
sql.append (DB.TO_DATE ((Timestamp)value,
p_info.getColumnDisplayType (i) == DisplayType.Date));
else if (c == String.class)
sql.append (DB.TO_STRING ((String)value));
else
sql.append (saveNewSpecial (value, i));
}
catch (Exception e)
{
log.error("PO.saveNew - " + p_info.toString(i), e);
throw new RuntimeException (e);
}
}
sql.append(")");
//
int no = DB.executeUpdate(sql.toString());
if (no == 1)
load(); // re-read Info
else
log.error("PO.saveNew - Not inserted - " + sql.toString());
//
return saveComplete(true, no == 1);
} // createNew
/**
* Create Single/Multi Key Where Clause
* @return where clause
*/
private String getWhereClause()
{
StringBuffer sb = new StringBuffer(" WHERE ");
for (int i = 0; i < m_IDs.length; i++)
{
if (i != 0)
sb.append(" AND ");
sb.append(m_KeyColumns[i]).append("=").append(m_IDs[i]);
}
return sb.toString();
} // getWhereClause
/**
* Save Special Data.
* To be extended by sub-classes
* @param value value
* @param index index
* @return SQL code for INSERT VALUES clause
*/
protected String saveNewSpecial (Object value, int index)
{
String colName = p_info.getColumnName(index);
String colClass = p_info.getColumnClass(index).toString();
String colValue = value == null ? "null" : value.getClass().toString();
log.error("PO.saveNewSpecial - Unknown class for column " + colName
+ " (" + colClass + ") - Value=" + colValue);
if (value == null)
return "NULL";
return value.toString();
} // saveNewSpecial
/**
* Save new or update complete.
* To be extended by sub-classes
* @param newRecord new record
* @param success success
* @return true if save complete (if not overwritten true)
*/
protected boolean saveComplete (boolean newRecord, boolean success)
{
log.debug("saveComplete - Success=" + success);
return success;
} // saveComplete
/*************************************************************************/
/**
* Delete Current Record
* @return true if deleted
*/
public boolean delete()
{
if (m_IDs[0] == 0) // new
return true;
StringBuffer sql = new StringBuffer ("DELETE ");
sql.append(getTableName()).append(getWhereClause());
//
int no = DB.executeUpdate(sql.toString());
if (no == 0)
m_IDs[0] = 0;
return no == 1;
} // delete
/*************************************************************************/
/**
* Dump Record
*/
public void dump ()
{
if (Log.isTraceLevel(8))
{
log.debug (getWhereClause ());
for (int i = 0; i < getColumnCount (); i++)
dump (i);
}
} // dump
/**
* Dump column
* @param index index
*/
public void dump (int index)
{
StringBuffer sb = new StringBuffer(" ").append(index);
if (index < 0 || index >= getColumnCount())
{
log.debug(sb.append(": invalid").toString());
return;
}
sb.append(": ").append(getColumnName(index))
.append(" = ").append(m_oldValues[index])
.append(" (").append(m_newValues[index]).append(")");
log.debug(sb.toString());
} // dump
/*************************************************************************/
/**
* Get All IDs of Table
* @param TableName table name (key column with _ID)
* @param WhereClause optional where clause
* @return array of IDs
*/
public static int[] getAllIDs (String TableName, String WhereClause)
{
ArrayList list = new ArrayList();
StringBuffer sql = new StringBuffer("SELECT ");
sql.append(TableName).append("_ID FROM ").append(TableName);
if (WhereClause != null && WhereClause.length() > 0)
sql.append(" WHERE ").append(WhereClause);
try
{
PreparedStatement pstmt = DB.prepareStatement(sql.toString());
ResultSet rs = pstmt.executeQuery();
while (rs.next())
list.add(new Integer(rs.getInt(1)));
rs.close();
pstmt.close();
}
catch (SQLException e)
{
s_log.error("getAllIDs\nSQL=" + sql.toString(), e);
}
// Convert to array
int[] retValue = new int[list.size()];
for (int i = 0; i < retValue.length; i++)
retValue[i] = ((Integer)list.get(i)).intValue();
return retValue;
} // getAllIDs
} // PO
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -