Reverting back commit Revision: 5580 - (wrongly commented meant for core trunk)

This commit is contained in:
Redhuan D. Oon 2008-07-06 08:46:38 +00:00
parent 2d299caecd
commit ae9e30aa84
4 changed files with 39 additions and 164 deletions

View File

@ -49,13 +49,7 @@ public abstract class AbstractElementHandler implements ElementHandler {
*
*/
public int get_ID (Properties ctx, String tableName, String name) {
return IDFinder.get_ID("Name", tableName, name, getClientId(ctx), getTrxName(ctx));
}
/** red1 - overloading to handle extra Name or DocumentNo argument
* occurs for cases that doesn't use name in Data such as C_Order.DocumentNo
*/
public int get_ID (String lookUpName, Properties ctx, String tableName, String name) {
return IDFinder.get_ID(lookUpName, tableName, name, getClientId(ctx), getTrxName(ctx));
return IDFinder.get_ID(tableName, name, getClientId(ctx), getTrxName(ctx));
}
/**
@ -229,8 +223,8 @@ public abstract class AbstractElementHandler implements ElementHandler {
* @param tableName
* @param name
*/
public int getIDbyName (Properties ctx, String tableName, String name, String lookupField) {
return IDFinder.getIDbyName(lookupField, tableName, name, getClientId(ctx), getTrxName(ctx));
public int getIDbyName (Properties ctx, String tableName, String name) {
return IDFinder.getIDbyName(tableName, name, getClientId(ctx), getTrxName(ctx));
}
/**

View File

@ -47,13 +47,13 @@ public class IDFinder {
* @param trxName
*
*/
public static int get_ID (String lookUpField, String tableName, String name, int AD_Client_ID, String trxName) {
public static int get_ID (String tableName, String name, int AD_Client_ID, String trxName) {
int id = 0;
//construct cache key
StringBuffer key = new StringBuffer();
key.append(tableName)
.append("."+lookUpField+"=") //red1 - to allow for DocumentNo in C_Orders
.append(".Name=")
.append(name);
if (!tableName.startsWith("AD_"))
key.append(" and AD_Client_ID=").append(AD_Client_ID);
@ -66,7 +66,7 @@ public class IDFinder {
.append(tableName)
.append("_ID from ")
.append(tableName)
.append(" where "+lookUpField+"=?");//red1 - to allow for DocumentNo in C_Orders
.append(" where name=?");
if (!tableName.startsWith("AD_"))
sqlB = sqlB.append(" and AD_Client_ID=?");
@ -351,7 +351,7 @@ public class IDFinder {
* @param AD_Client_ID
* @param trxName
*/
public static int getIDbyName (String lookupField, String tableName, String name, int AD_Client_ID, String trxName) {
public static int getIDbyName (String tableName, String name, int AD_Client_ID, String trxName) {
int id = 0;
//construct cache key
@ -371,9 +371,8 @@ public class IDFinder {
.append("_ID ")
.append("FROM ")
.append(tableName)
.append(" WHERE ")
.append(lookupField) //red1 - i.e. Name or DocumentNo
.append("=?");
.append(" ")
.append("WHERE name=?");
if (!tableName.startsWith("AD_"))
sql.append(" AND AD_Client_ID=?");
try {

View File

@ -62,7 +62,7 @@ public class DataElementHandler extends AbstractElementHandler {
if (elementValue.equals("adempieredata") || elementValue.equals("data")) {
log.info(elementValue);
if (atts.getValue("clientname") != null) {
int AD_Client_ID = IDFinder.get_ID("Name","AD_Client", atts.getValue("clientname"), getClientId(ctx), getTrxName(ctx));
int AD_Client_ID = IDFinder.get_ID("AD_Client", atts.getValue("clientname"), getClientId(ctx), getTrxName(ctx));
Env.setContext(ctx, "AD_Client_ID", AD_Client_ID);
log.info("adempieredata: client set to "+AD_Client_ID+" "+atts.getValue("clientname"));
}
@ -97,25 +97,19 @@ public class DataElementHandler extends AbstractElementHandler {
String d_rowname = atts.getValue("name");
// name can be null if there are keyXname attributes.
//red1 - Using DocumentNo also (done in CREATE routine at bottom)
String lookUpField = "Name";
if ("C_Order_ID".equals(atts.getValue("key1name")))
lookUpField = "DocumentNo";
if (!d_rowname.equals("")){
int id = get_ID(lookUpField, ctx, d_tablename, d_rowname);
int id = get_ID(ctx, d_tablename, d_rowname);
genericPO = new GenericPO(d_tablename, ctx, id, getTrxName(ctx));
if (id > 0){
AD_Backup_ID = copyRecord(ctx,d_tablename,genericPO);
objectStatus = "Update";
//TODO red1 - new problem arises where child details i.e. OrderLines need to be updated, complex and so easiest may be to delete all first, then create.
}
else{
objectStatus = "New";
AD_Backup_ID =0;
}
}
// keyXname and lookupkeyXname.
//red1 - this should be redundant, because u cannot safely look up via PK ID as key, when above Name/DocNo is sufficient
// keyXname and lookupkeyXname.
else {
String sql = "select * from "+d_tablename;
String whereand = " where";
@ -137,7 +131,7 @@ public class DataElementHandler extends AbstractElementHandler {
ResultSet rs = pstmt.executeQuery();
if (rs.next()) {
objectStatus = "New"; //red1 - not "Update" as lookUpName in effect
objectStatus = "Update";
genericPO = new GenericPO(d_tablename, ctx, rs, getTrxName(ctx));
rs.close();
pstmt.close();
@ -168,20 +162,20 @@ public class DataElementHandler extends AbstractElementHandler {
// for debug GenericPO.
if (false) {
POInfo poInfo = POInfo.getPOInfo(ctx, get_ID(lookUpField,ctx, "AD_Table", d_tablename), getTrxName(ctx));
POInfo poInfo = POInfo.getPOInfo(ctx, get_ID(ctx, "AD_Table", d_tablename), getTrxName(ctx));
if (poInfo == null)
log.info("poInfo is null.");
for (int i = 0; i < poInfo.getColumnCount(); i++) {
log.info(d_tablename+" column: "+poInfo.getColumnName(i));
}
}
// globalqss: set AD_Client_ID to the client set in adempieredata
// globalqss: set AD_Client_ID to the client setted in adempieredata
if (getClientId(ctx) > 0 && genericPO.getAD_Client_ID() != getClientId(ctx))
genericPO.set_ValueOfColumn("AD_Client_ID", getClientId(ctx));
// if new. TODO: no defaults for keyXname.
if (!d_rowname.equals("") && ((Integer)(genericPO.get_Value(d_tablename+"_ID"))).intValue() == 0) {
log.info("new genericPO, table: "+d_tablename+" name:"+d_rowname);
genericPO.set_ValueOfColumn(lookUpField, d_rowname); //red1 - to handle Name or DocumentName for SO
genericPO.set_ValueOfColumn("Name", d_rowname);
// Set defaults.
//TODO: get defaults from configuration
HashMap defaults = new HashMap();
@ -266,13 +260,7 @@ public class DataElementHandler extends AbstractElementHandler {
if (atts.getValue("lookupname") != null && !"".equals(atts.getValue("lookupname"))) {
// globalqss - bring support from XML2AD to lookupname
String m_tablename = atts.getValue("name").substring(0, atts.getValue("name").length()-3);
//red1 - convert other names to proper names i.e. SalesRep > AD_User
if (m_tablename.equals("SalesRep"))
m_tablename="AD_User";
String lookupIDentifier = "Name"; //red1 - lookupIDentifier such as Name or DocumentNo
if (atts.getValue("name").equals("C_Order_ID"))
lookupIDentifier = "DocumentNo";
genericPO.set_ValueOfColumn(atts.getValue("name"), new Integer(getIDbyName(ctx, m_tablename, atts.getValue("lookupname"), lookupIDentifier)));
genericPO.set_ValueOfColumn(atts.getValue("name"), new Integer(getIDbyName(ctx, m_tablename, atts.getValue("lookupname"))));
}
}
}
@ -312,35 +300,26 @@ public class DataElementHandler extends AbstractElementHandler {
for (i=1 ;i <= columns;i++){
col_Name = meta.getColumnName(i).toUpperCase();
if (col_Name.equals("NAME") && rs.getObject("name") != null)
nameatts = ""+rs.getObject("name");
//red1 - capture PK other name for lookup also
if (col_Name.equals("DOCUMENTNO") && rs.getObject("DOCUMENTNO") != null)
nameatts = ""+rs.getObject("DocumentNo");
//red1 - only for fields ending in _ID to save redundant processing time
if ("_ID".equals(col_Name.substring(col_Name.length()-3, col_Name.length())))
{
String sql2 = "SELECT ColumnName FROM AD_Column "
+ "WHERE isKey = 'Y' AND "
+ "AD_Table_ID = ? AND "
+ "Upper(ColumnName)= '"+col_Name+"'";
String cName = DB.getSQLValueString(null,sql2,table_id);
if (cName != null){
if (key1 == 0 ){ //red1 - remove cName.toUpperCase().equals(col_Name) &&
atts.addAttribute("","","key1name","CDATA",cName);
atts.addAttribute("","","lookupkey1name","CDATA",""+rs.getObject(col_Name));
key1 = 1;
}
else if (key1 == 1 ){ //red1 - remove cName.toUpperCase().equals(col_Name) &&
atts.addAttribute("","","key2name","CDATA",cName);
atts.addAttribute("","","lookupkey2name","CDATA",""+rs.getObject(col_Name));
key1 = 2;
}
}
nameatts = ""+rs.getObject("name");
String sql2 = "SELECT ColumnName FROM AD_Column "
+ "WHERE isKey = 'Y' AND "
+ "AD_Table_ID = ? AND "
+ "Upper(ColumnName)= '"+col_Name+"'";
String cName = DB.getSQLValueString(null,sql2,table_id);
if (cName != null){
if (cName.toUpperCase().equals(col_Name) && key1 == 0 ){
atts.addAttribute("","","key1name","CDATA",cName);
atts.addAttribute("","","lookupkey1name","CDATA",""+rs.getObject(col_Name));
key1 = 1;
}
else if (cName.toUpperCase().equals(col_Name) && key1 == 1 ){
atts.addAttribute("","","key2name","CDATA",cName);
atts.addAttribute("","","lookupkey2name","CDATA",""+rs.getObject(col_Name));
key1 = 2;
}
}
}
atts.addAttribute("","","name","CDATA",nameatts);
// this is to ensure flushing of old values
if ( key1 == 0 ){
atts.addAttribute("","","key1name","CDATA","");
atts.addAttribute("","","lookupkey1name","CDATA","");
@ -353,10 +332,10 @@ public class DataElementHandler extends AbstractElementHandler {
document.startElement("","","drow",atts);
for (i=1 ;i <= columns;i++){
atts.clear();
col_Name = meta.getColumnName(i).toUpperCase();
col_Name = meta.getColumnName(i).toUpperCase();
String sql2 = "Select A.ColumnName, B.Name "
+ "From AD_Column A, AD_Reference B "
+ "Where Upper(A.columnname) = ? and "
+ "Where Upper(A.columnname) = ? and "
+ "A.AD_TABLE_ID = ? and "
+ "A.AD_Reference_ID = B.AD_Reference_ID";
PreparedStatement pstmt = null;
@ -368,45 +347,14 @@ public class DataElementHandler extends AbstractElementHandler {
ResultSet rs1 = pstmt.executeQuery();
while (rs1.next()){
//added 9/3/05
//red1 20/05/08 - FK ID Begins where commented
String exactCase = rs1.getString("ColumnName"); // red1 to retain the leading cap case for exact = table column's content
int flag = 0; //red1 - flag to ensure value if lookupname not done
atts.clear();
atts.addAttribute("","","name","CDATA", rs1.getString("ColumnName"));
atts.addAttribute("","","class","CDATA", rs1.getString("Name"));
if (rs1.getString("Name").equals("Date")||rs1.getString("Name").equals("Date+Time")||rs1.getString("Name").equals("Time"))
atts.addAttribute("","","value","CDATA", "" + rs.getTimestamp(i));
else
//red1 - here is where the FK ID lookup check happens
//red1 - looking for fields ending in _ID, confirm its a tablename and return its Name from its ID in the FK table
if ("_ID".equals(col_Name.substring(col_Name.length()-3, col_Name.length())))
{
String colName_without_ID = exactCase.substring(0, exactCase.length()-3);
if (!colName_without_ID.equals(table_Name))
{
//red1 - need to convert other names to proper names i.e. SalesRep > AD_User
if (colName_without_ID.equals("SalesRep")) colName_without_ID="AD_User";
String sqlvalue = "Select TableName from AD_Table where TableName = '"+colName_without_ID+"'";
//red1 - Select TableName from AD_Table where TableName = colName_without_ID
String tableName = DB.getSQLValueByValue(null, sqlvalue);
//red1 - lookup DB>TableName(present_ID)
if (tableName!=null && rs.getObject(i)!=null){ // red1 - to skip if nothing in field
sqlvalue = "Select Name, AD_Client_ID from "+tableName+" where "+colName_without_ID+"_ID="+rs.getObject(i); //red1 colName_without_ID+"_ID is to solve SalesRep>AD_User case
//red1 - to handle DocumentNo FK IDentifier in C_OrderLine //AD_Client_ID to resolve that for System record do not do lookupName, just return native ID
if (table_Name.equals("C_OrderLine") && (colName_without_ID.equals("C_Order")))
sqlvalue = "SELECT DocumentNo, AD_Client_ID FROM "+tableName+" where "+colName_without_ID+"_ID="+rs.getObject(i);
String valueName = DB.getSQLValueByValueClient(null, sqlvalue);
if (valueName!=null){
atts.addAttribute("","","lookupname","CDATA", "" + valueName);
flag = 1;
//red1 - FK ID end
}
}
}
}
if (flag==0)
atts.addAttribute("","","value","CDATA", "" + rs.getObject(i));
atts.addAttribute("","","value","CDATA", "" + rs.getObject(i));
if (!rs1.getString("ColumnName").equals("Created")&&!rs1.getString("ColumnName").equals("CreatedBy")&&
!rs1.getString("ColumnName").equals("Updated")&&!rs1.getString("ColumnName").equals("UpdatedBy")){
document.startElement("","","dcolumn",atts);

View File

@ -1104,73 +1104,7 @@ public final class DB
}
return retValue;
} // getRowSet
/** -- red1 --
* Get One String Value from sql
* @param trxName trx
* @param sql sql
* @return only value or null
*/
public static String getSQLValueByValue (String trxName, String sql)
{
String retValue = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try
{
pstmt = prepareStatement(sql, trxName);
rs = pstmt.executeQuery();
if (rs.next())
retValue = rs.getString(1);
else
log.fine("No Value " + sql);
}
catch (Exception e)
{
log.log(Level.SEVERE, sql, e);
}
finally
{
close(rs);
close(pstmt);
rs= null;
pstmt = null;
}
return retValue;
} // getSQLValue String
public static String getSQLValueByValueClient (String trxName, String sql)
{
String retValue = null;
int AD_Client_ID = 0;
PreparedStatement pstmt = null;
ResultSet rs = null;
try
{
pstmt = prepareStatement(sql, trxName);
rs = pstmt.executeQuery();
if (rs.next()){
retValue = rs.getString(1);
AD_Client_ID = rs.getInt(2); //red1 - to check if Client is SYSTEM then do not lookup
if (AD_Client_ID==0) retValue = null;
}
else
log.fine("No Value " + sql);
}
catch (Exception e)
{
log.log(Level.SEVERE, sql, e);
}
finally
{
close(rs);
close(pstmt);
rs= null;
pstmt = null;
}
return retValue;
} // getSQLValueClient String
/**
* Get Value from sql
* @param trxName trx