/************************************************************************************* * Product: SFAndroid (Sales Force Mobile) * * This program is free software; you can redistribute it and/or modify it * * under the terms version 2 of the GNU General Public License as published * * by the Free Software Foundation. This program is distributed in the hope * * that it will be useful, but WITHOUT ANY WARRANTY; without even the implied * * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * * with this program; if not, write to the Free Software Foundation, Inc., * * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * * For the text or an alternative of this public license, you may reach us * * Copyright (C) 2012-2014 E.R.P. Consultores y Asociados, S.A. All Rights Reserved. * * Contributor(s): Yamel Senih www.erpconsultoresyasociados.com * *************************************************************************************/ package org.spinsuite.process; import java.math.BigDecimal; import java.util.Date; import java.util.ArrayList; import java.util.logging.Level; import org.spinsuite.base.DB; import org.spinsuite.process.ProcessInfoLog; import org.spinsuite.util.ActivityParameter; import org.spinsuite.util.Env; import org.spinsuite.util.LogM; import android.content.Context; import android.database.Cursor; /** * @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> * */ public class ProcessInfo { /** Title of the Process/Report */ private String m_Title; /** Process ID */ private int m_AD_Process_ID = 0; /** Table ID if the Process */ private int m_Table_ID = 0; /** Record ID if the Process */ private int m_Record_ID = 0; /** User_ID */ private int m_AD_User_ID = 0; /** Client_ID */ private int m_AD_Client_ID = 0; /** Report View */ private int m_AD_ReportView_ID = 0; /** Print Format */ private int m_AD_PrintFormat_ID = 0; /** Class Name */ private String m_ClassName = null; /** Procedure Name */ private String m_ProcedureName = null; /** Name */ private String m_Value = null; /** Help */ private String m_Help = null; /** Description */ private String m_Description = null; /** Is a Report */ private boolean m_IsReport = false; /** Is Server Process */ private boolean m_IsServerProcess = false; /** Show Help */ private String m_ShowHelp = null; /** Summary of Execution */ private String m_Summary = ""; /** Execution had an error */ private boolean m_Error = false; /** Window No */ private int m_WindowNo = 0; /** Process Field Parameter */ private InfoPara[] m_processFields = null; /** Log Info */ private ArrayList<ProcessInfoLog> m_logs = null; /** Log Info */ private ProcessInfoParameter[] m_parameter = null; /** Context */ private Context ctx = null; /** Connection */ private DB conn = null; /** Handle Connection */ private boolean m_IsHandleConnection = false; private static final int HEADER_INDEX = 9; /** Show Help */ public static final String SHOW_HELP_REF_SHOW_HELP = "Y"; /** Don't Show Help */ public static final String SHOW_HELP_REF_DONT_SHOW_HELP = "N"; /** Run Silently - Take Defaults */ public static final String SHOW_HELP_REF_RUN_SILENTLY = "S"; /** * String representation * @return String representation */ public String toString(){ StringBuffer sb = new StringBuffer("ProcessInfo["); sb.append(m_Title) .append(",Process_ID=").append(m_AD_Process_ID); if (m_Record_ID != 0) sb.append(",Record_ID=").append(m_Record_ID); if (m_ClassName != null) sb.append(",ClassName=").append(m_ClassName); // .append(getLogInfo(false)); sb.append("]"); return sb.toString(); } // toString /** * * *** Constructor *** * @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 19/03/2014, 23:25:19 * @param ctx * @param m_AD_Process_ID * @param m_AD_Table_ID * @param m_Record_ID * @param m_WindowNo * @param conn */ public ProcessInfo (Context ctx, int m_AD_Process_ID, int m_AD_Table_ID, int m_Record_ID, int m_WindowNo, DB conn){ this.ctx = ctx; this.m_AD_Process_ID = m_AD_Process_ID; this.m_Table_ID = m_AD_Table_ID; this.m_Record_ID = m_Record_ID; this.m_WindowNo = m_WindowNo; this.conn = conn; // Load Meta-data loadProcess(); } /** * * *** Constructor *** * @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 20/03/2014, 15:16:13 * @param ctx * @param m_AD_Process_ID * @param conn */ public ProcessInfo(Context ctx, int m_AD_Process_ID, DB conn){ this(ctx, m_AD_Process_ID, 0, 0, 0, conn); } /** * With Activity Parameter * *** Constructor *** * @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 20/03/2014, 21:37:11 * @param ctx * @param activityParam * @param conn */ public ProcessInfo(Context ctx, ActivityParameter activityParam, DB conn){ this(ctx, activityParam.getAD_Process_ID(), activityParam.getFrom_SFA_Table_ID(), activityParam.getFrom_Record_ID(), activityParam.getWindowNo(), conn); } /** * Load Process Meta-data * @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 20/03/2014, 15:34:33 * @return * @return boolean */ private boolean loadProcess(){ boolean loaded = false; // if(conn == null){ conn = new DB(ctx); setIsHandleConnection(true); } else setIsHandleConnection(false); // Load Connection DB.loadConnection(conn, DB.READ_ONLY); // Open Database conn.openDB(DB.READ_ONLY); String language = Env.getAD_Language(ctx); boolean isBaseLanguage = Env.isBaseLanguage(ctx); // SQL StringBuffer sql = new StringBuffer(); // if Base Language if(isBaseLanguage){ sql.append("SELECT p.Name, p.Description, p.Help, " + "p.ClassName, p.ProcedureName, p.isReport, p.ShowHelp, p.AD_ReportView_ID, p.AD_PrintFormat_ID, " + "pp.AD_Process_Para_ID, pp.AD_Element_ID, pp.AD_Reference_ID, " + "pp.AD_Reference_Value_ID, pp.AD_Val_Rule_ID, " + "pp.ColumnName, pp.Name, pp.Description, pp.Help, pp.DefaultValue, pp.DefaultValue2, pp.EntityType, " + "pp.FieldLength, pp.SeqNo, pp.IsCentrallyMaintained, pp.IsActive, " + "pp.IsMandatory, pp.IsRange, pp.ValueMax, pp.ValueMin, pp.VFormat " + "FROM AD_Process p " + "LEFT JOIN AD_Process_Para pp ON(pp.AD_Process_ID = p.AD_Process_ID) "); } else { sql.append("SELECT pt.Name, pt.Description, pt.Help, " + "p.ClassName, p.ProcedureName, p.isReport, p.ShowHelp, p.AD_ReportView_ID, p.AD_PrintFormat_ID, " + "pp.AD_Process_Para_ID, pp.AD_Element_ID, pp.AD_Reference_ID, " + "pp.AD_Reference_Value_ID, pp.AD_Val_Rule_ID, " + "pp.ColumnName, ppt.Name, ppt.Description, ppt.Help, pp.DefaultValue, pp.DefaultValue2, pp.EntityType, " + "pp.FieldLength, pp.SeqNo, pp.IsCentrallyMaintained, pp.IsActive, " + "pp.IsMandatory, pp.IsRange, pp.ValueMax, pp.ValueMin, pp.VFormat " + "FROM AD_Process p "); // Translation sql.append("LEFT JOIN AD_Process_Trl pt ON(pt.AD_Process_ID = p.AD_Process_ID AND pt.AD_Language = '") .append(language).append("') "); // Process Parameter sql.append("LEFT JOIN AD_Process_Para pp ON(pp.AD_Process_ID = p.AD_Process_ID) "); // Process Parameter Translation sql.append("LEFT JOIN AD_Process_Para_Trl ppt ON(ppt.AD_Process_Para_ID = pp.AD_Process_Para_ID AND ppt.AD_Language = '") .append(language).append("') "); } // Where Clause sql.append("WHERE pp.IsActive = 'Y' " + "AND p.AD_Process_ID = ").append(m_AD_Process_ID).append(" "); // Order By sql.append("ORDER BY pp.SeqNo"); // LogM.log(ctx, getClass(), Level.FINE, "SQL=" + sql); Cursor rs = conn.querySQL(sql.toString(), null); // Parameter Meta-data ArrayList<InfoPara> fields = new ArrayList<InfoPara>(); if(rs.moveToFirst()){ int i = 0; String booleanValue = null; // New Process Info setTitle(rs.getString(i++)); setDescription(rs.getString(i++)); setHelp(rs.getString(i++)); setClassName(rs.getString(i++)); setProcedureName(rs.getString(i++)); booleanValue = rs.getString(i++); setIsReport((booleanValue != null && booleanValue.equals("Y"))); setShowHelp(rs.getString(i++)); setAD_ReportView_ID(rs.getInt(i++)); setAD_PrintFormat_ID(rs.getInt(i++)); // Loop for Parameters do { // New Field InfoPara iFieldPara = new InfoPara(); iFieldPara.AD_Process_Para_ID = rs.getInt(i++); iFieldPara.AD_Element_ID = rs.getInt(i++); iFieldPara.DisplayType = rs.getInt(i++); iFieldPara.AD_Reference_Value_ID = rs.getInt(i++); iFieldPara.AD_Val_Rule_ID = rs.getInt(i++); iFieldPara.ColumnName = rs.getString(i++); iFieldPara.Name = rs.getString(i++); iFieldPara.Description = rs.getString(i++); iFieldPara.Help = rs.getString(i++); iFieldPara.DefaultValue = rs.getString(i++); iFieldPara.DefaultValue2 = rs.getString(i++); iFieldPara.EntityType = rs.getString(i++); iFieldPara.FieldLength = rs.getInt(i++); iFieldPara.SeqNo = rs.getInt(i++); booleanValue = rs.getString(i++); iFieldPara.IsCentrallyMaintained = (booleanValue != null && booleanValue.equals("Y")); booleanValue = rs.getString(i++); iFieldPara.IsActive= (booleanValue != null && booleanValue.equals("Y")); booleanValue = rs.getString(i++); iFieldPara.IsMandatory= (booleanValue != null && booleanValue.equals("Y")); booleanValue = rs.getString(i++); iFieldPara.IsRange = (booleanValue != null && booleanValue.equals("Y")); iFieldPara.ValueMax = rs.getString(i++); iFieldPara.ValueMin = rs.getString(i++); iFieldPara.VFormat = rs.getString(i++); // Add to Array fields.add(iFieldPara); i = HEADER_INDEX; }while(rs.moveToNext()); // Set Fields m_processFields = new InfoPara[fields.size()]; // Populate Array fields.toArray(m_processFields); // Is Loaded loaded = true; } // Close Connection if(isHandleConnection()) DB.closeConnection(conn); return loaded; } /************************************************************************** * Set Summary * @param summary summary (will be translated) */ public void setSummary (String summary){ m_Summary = summary; } // setSummary /** * Method getSummary * @return String */ public String getSummary (){ return m_Summary; } // getSummary /** * Method setSummary * @param translatedSummary String * @param error boolean */ public void setSummary (String translatedSummary, boolean error){ setSummary (translatedSummary); setError(error); } // setSummary /** * Method addSummary * @param additionalSummary String */ public void addSummary (String additionalSummary){ m_Summary += additionalSummary; } // addSummary /** * Method setError * @param error boolean */ public void setError (boolean error){ m_Error = error; } // setError /** * Method isError * @return boolean */ public boolean isError (){ return m_Error; } // isError /** * Get Report View * @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 20/03/2014, 14:44:05 * @return * @return int */ public int getAD_ReportView_ID(){ return m_AD_ReportView_ID; } /** * Get Report View * @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 20/03/2014, 14:44:24 * @param AD_ReportView_ID * @return void */ public void setAD_ReportView_ID(int AD_ReportView_ID){ m_AD_ReportView_ID = AD_ReportView_ID; } /** * Get AD Print Format * @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 24/03/2014, 09:54:14 * @return * @return int */ public int getAD_PrintFormat_ID(){ return m_AD_PrintFormat_ID; } /** * Set Print Format * @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 24/03/2014, 09:53:46 * @param AD_PrintFormat_ID * @return void */ public void setAD_PrintFormat_ID(int AD_PrintFormat_ID){ m_AD_PrintFormat_ID = AD_PrintFormat_ID; } /** * Method getAD_Process_ID * @return int */ public int getAD_Process_ID(){ return m_AD_Process_ID; } /** * Method setAD_Process_ID * @param AD_Process_ID int */ public void setAD_Process_ID(int AD_Process_ID){ m_AD_Process_ID = AD_Process_ID; } /** * Method getClassName * @return String or null */ public String getClassName(){ return m_ClassName; } /** * Method setClassName * @param ClassName String */ public void setClassName(String ClassName){ m_ClassName = ClassName; if (m_ClassName != null && m_ClassName.length() == 0) m_ClassName = null; } // setClassName /** * Method getTable_ID * @return int */ public int getTable_ID(){ return m_Table_ID; } /** * Method setTable_ID * @param AD_Table_ID int */ public void setTable_ID(int AD_Table_ID){ m_Table_ID = AD_Table_ID; } /** * Method getRecord_ID * @return int */ public int getRecord_ID(){ return m_Record_ID; } /** * Method setRecord_ID * @param Record_ID int */ public void setRecord_ID(int Record_ID){ m_Record_ID = Record_ID; } /** * Method getTitle * @return String */ public String getTitle(){ return m_Title; } /** * Method setTitle * @param Title String */ public void setTitle (String Title){ m_Title = Title; } // setTitle /** * Method setAD_Client_ID * @param AD_Client_ID int */ public void setAD_Client_ID (int AD_Client_ID){ m_AD_Client_ID = AD_Client_ID; } /** * Method getAD_Client_ID * @return Integer */ public Integer getAD_Client_ID(){ return m_AD_Client_ID; } /** * Method setAD_User_ID * @param AD_User_ID int */ public void setAD_User_ID (int AD_User_ID){ m_AD_User_ID = AD_User_ID; } /** * Method getAD_User_ID * @return Integer */ public Integer getAD_User_ID(){ return m_AD_User_ID; } /** * Get Procedure Name * @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 20/03/2014, 14:45:09 * @return * @return String */ public String getProcedureName(){ return m_ProcedureName; } /** * Set Procedure Name * @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 20/03/2014, 14:45:57 * @param ProcedureName * @return void */ public void setProcedureName(String ProcedureName){ m_ProcedureName = ProcedureName; } /** * Get Value * @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 20/03/2014, 14:46:22 * @return * @return String */ public String getValue(){ return m_Value; } /** * Set Process Value * @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 20/03/2014, 14:46:56 * @param Value * @return void */ public void setValue(String Value){ m_Value = Value; } /** * Get Description * @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 20/03/2014, 14:47:26 * @return * @return String */ public String getDescription(){ return m_Description; } /** * Set Description * @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 20/03/2014, 14:48:15 * @param Description * @return void */ public void setDescription(String Description){ m_Description = Description; } /** * Is Report * @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 20/03/2014, 14:48:55 * @return * @return boolean */ public boolean isReport(){ return m_IsReport; } /** * Set Is Report * @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 20/03/2014, 15:06:18 * @param isReport * @return void */ public void setIsReport(boolean isReport){ this.m_IsReport = isReport; } /** * Get Show Help * @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 20/03/2014, 17:53:09 * @return * @return String */ public String getShowHelp(){ return m_ShowHelp; } /** * Set Help * @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 20/03/2014, 17:56:19 * @param help * @return void */ public void setHelp(String help){ this.m_Help = help; } /** * Get Help * @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 20/03/2014, 17:56:39 * @return * @return String */ public String getHelp(){ return m_Help; } /** * Set Show Help * @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 20/03/2014, 17:53:53 * @param showHelp * @return void */ public void setShowHelp(String showHelp){ this.m_ShowHelp = showHelp; } /** * Set Is Server Process * @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 21/03/2014, 14:48:28 * @param m_IsServerProcess * @return void */ public void setIsServerProcess(boolean m_IsServerProcess){ this.m_IsServerProcess = m_IsServerProcess; } /** * Is Server Process * @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 21/03/2014, 14:48:54 * @return * @return boolean */ public boolean isServerProcess(){ return m_IsServerProcess; } /************************************************************************** * Get Parameter * @return Parameter Array */ public ProcessInfoParameter[] getParameter(){ return m_parameter; } // getParameter /** * Set Parameter * @param parameter Parameter Array */ public void setParameter (ProcessInfoParameter[] parameter) { m_parameter = parameter; } // setParameter /** * Return Process Field Parameters for Grid * @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 20/03/2014, 21:32:40 * @return * @return VOInfoPara[] */ public InfoPara[] getProcessInfoPara(){ return m_processFields; } /** * Set Window No * @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 20/03/2014, 21:20:22 * @param m_WindowNo * @return void */ public void setWindowNo(int m_WindowNo){ this.m_WindowNo = m_WindowNo; } /** * Get Window No * @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 20/03/2014, 21:21:15 * @return * @return int */ public int getWindowNo() { return m_WindowNo; } /** * Get Context * @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 20/03/2014, 21:33:51 * @return * @return Context */ public Context getCtx(){ return ctx; } /** * Get Connection and Current Transaction * @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 20/03/2014, 21:34:11 * @return * @return DB */ public DB getConnection(){ return conn; } /** * Set Is HandleConnection * @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 21/03/2014, 15:56:43 * @param m_IsHandleConnection * @return void */ public void setIsHandleConnection(boolean m_IsHandleConnection) { this.m_IsHandleConnection = m_IsHandleConnection; } /** * Is Handle Connection * @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 21/03/2014, 15:57:14 * @return * @return boolean */ public boolean isHandleConnection() { return m_IsHandleConnection; } /************************************************************************** * Add to Log * @param Log_ID Log ID * @param P_ID Process ID * @param P_Date Process Date * @param P_Number Process Number * @param P_Msg Process Message */ public void addLog (int Log_ID, int P_ID, Date P_Date, BigDecimal P_Number, String P_Msg){ addLog (new ProcessInfoLog (Log_ID, P_ID, P_Date, P_Number, P_Msg)); } // addLog /** * Add to Log * @param P_ID Process ID * @param P_Date Process Date * @param P_Number Process Number * @param P_Msg Process Message */ public void addLog (int P_ID, Date P_Date, BigDecimal P_Number, String P_Msg){ addLog (new ProcessInfoLog (P_ID, P_Date, P_Number, P_Msg)); } // addLog /** * Add to Log * @param logEntry log entry */ public void addLog (ProcessInfoLog logEntry){ if (logEntry == null) return; if (m_logs == null) m_logs = new ArrayList<ProcessInfoLog>(); m_logs.add (logEntry); } // addLog /** * Method getLogs * @return ProcessInfoLog[] */ public ProcessInfoLog[] getLogs(){ if (m_logs == null) return null; ProcessInfoLog[] logs = new ProcessInfoLog[m_logs.size()]; m_logs.toArray (logs); return logs; } // getLogs }