/*************************************************************************************
* 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.model;
import java.util.ArrayList;
import java.util.logging.Level;
import org.spinsuite.base.DB;
import org.spinsuite.util.Env;
import org.spinsuite.util.LogM;
import android.content.Context;
import android.database.Cursor;
import android.util.Log;
/**
* @author Yamel Senih
*
*/
public class POInfo {
/**
* Get PO Information
* @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 05/02/2014, 22:00:49
* @param ctx
* @param p_SFA_Table_ID
* @param conn
* @return
* @return POInfo
*/
public static POInfo getPOInfo(Context ctx, int p_SFA_Table_ID, DB conn){
POInfo retValue = new POInfo(ctx, p_SFA_Table_ID, conn);
return retValue;
}
/**
*
* *** Constructor ***
* @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 05/02/2014, 22:00:32
* @param ctx
* @param AD_Table_ID
* @param conn
*/
public POInfo(Context ctx, int AD_Table_ID, DB conn){
loadInfoColumn(ctx, AD_Table_ID, null, conn);
}
/** Table_ID */
private int m_SFA_Table_ID = 0;
/** Table Name */
private String m_TableName = null;
/** Is Deleteable Record */
private boolean m_IsDeleteable = false;
/** Columns */
private POInfoColumn[] m_columns = null;
/** Count Column SQL */
private int m_CountColumnSQL = 0;
public static final String MT_TABLE = "SFA_Table";
public static final String MT_COLUMN = "SFA_Column";
/**
* Load Column Information
* @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 05/02/2014, 21:54:17
* @param ctx
* @param AD_Table_ID
* @param tableName
* @return void
*/
private void loadInfoColumn(Context ctx, int AD_Table_ID, String tableName, DB p_Conn){
String sql = new String("SELECT " +
MT_TABLE + ".SFA_Table_ID, " +
MT_TABLE + ".TableName," +
MT_TABLE + ".IsDeleteable, " +
MT_COLUMN + ".AD_Element_ID, " +
MT_COLUMN + ".AD_Reference_ID, " +
MT_COLUMN + ".AD_Reference_Value_ID, " +
MT_COLUMN + ".AD_Val_Rule_ID, " +
MT_COLUMN + ".Callout, " +
MT_COLUMN + ".ColumnName, " +
MT_COLUMN + ".ColumnSQL, " +
MT_COLUMN + ".DefaultValue, " +
MT_COLUMN + ".Description, " +
MT_COLUMN + ".EntityType, " +
MT_COLUMN + ".FieldLength, " +
MT_COLUMN + ".FormatPattern, " +
MT_COLUMN + ".IsAlwaysUpdateable, " +
MT_COLUMN + ".IsCentrallyMaintained, " +
MT_COLUMN + ".IsEncrypted, " +
MT_COLUMN + ".IsIdentifier, " +
MT_COLUMN + ".IsKey, " +
MT_COLUMN + ".IsMandatory, " +
MT_COLUMN + ".IsParent, " +
MT_COLUMN + ".IsSelectionColumn, " +
MT_COLUMN + ".IsUpdateable, " +
MT_COLUMN + ".Name, " +
MT_COLUMN + ".SelectionSeqNo, " +
MT_COLUMN + ".SeqNo, " +
MT_COLUMN + ".SFA_Column_ID, " +
MT_COLUMN + ".SFA_Table_ID, " +
MT_COLUMN + ".ValueMax, " +
MT_COLUMN + ".ValueMin, " +
MT_COLUMN + ".VFormat " +
// From
"FROM SFA_Table " +
"INNER JOIN SFA_Column ON(SFA_Column.SFA_Table_ID = SFA_Table.SFA_Table_ID) " +
"WHERE SFA_Column.IsActive = 'Y' ");
if(AD_Table_ID != 0)
sql += "AND SFA_Table.SFA_Table_ID = " + AD_Table_ID;
else
sql += "AND SFA_Table.TableName = '" + tableName + "' ";
sql += " ORDER BY " + MT_COLUMN + ".Name";
LogM.log(ctx, getClass(), Level.FINE, "SQL TableInfo SQL:" + sql);
ArrayList<POInfoColumn> columns = new ArrayList<POInfoColumn>();
DB conn = null;
if(p_Conn != null)
conn = p_Conn;
else
conn = new DB(ctx);
if(!conn.isOpen())
conn.openDB(DB.READ_ONLY);
Cursor rs = null;
rs = conn.querySQL(sql, null);
if(rs.moveToFirst()){
int i = 0;
m_SFA_Table_ID = rs.getInt(i++);
m_TableName = rs.getString(i++);
m_IsDeleteable = "Y".equals(rs.getString(i++));
do{
POInfoColumn iColumn = new POInfoColumn();
iColumn.AD_Element_ID = rs.getInt(i++);
iColumn.DisplayType = rs.getInt(i++);
iColumn.AD_Reference_Value_ID = rs.getInt(i++);
iColumn.AD_Val_Rule_ID = rs.getInt(i++);
iColumn.Callout = rs.getString(i++);
iColumn.ColumnName = rs.getString(i++);
iColumn.ColumnSQL = rs.getString(i++);
iColumn.DefaultValue = rs.getString(i++);
iColumn.Description = rs.getString(i++);
iColumn.EntityType = rs.getString(i++);
iColumn.FieldLength = rs.getInt(i++);
iColumn.FormatPattern = rs.getString(i++);
iColumn.IsAlwaysUpdateable = rs.getString(i++).equals("Y");
iColumn.IsCentrallyMaintained = rs.getString(i++).equals("Y");
iColumn.IsEncrypted= rs.getString(i++).equals("Y");
iColumn.IsIdentifier= rs.getString(i++).equals("Y");
iColumn.IsKey= rs.getString(i++).equals("Y");
iColumn.IsMandatory= rs.getString(i++).equals("Y");
iColumn.IsParent= rs.getString(i++).equals("Y");
iColumn.IsSelectionColumn= rs.getString(i++).equals("Y");
iColumn.IsUpdateable= rs.getString(i++).equals("Y");
iColumn.Name = rs.getString(i++);
iColumn.SelectionSeqNo = rs.getInt(i++);
iColumn.SeqNo = rs.getInt(i++);
iColumn.SFA_Column_ID= rs.getInt(i++);
iColumn.SFA_Table_ID= rs.getInt(i++);
iColumn.ValueMax = rs.getString(i++);
iColumn.ValueMin = rs.getString(i++);
iColumn.VFormat = rs.getString(i++);
//Log.i("m_IsAlwaysUpdateable", " - " + m_ColumnName + " = " + m_IsAlwaysUpdateable);
columns.add(iColumn);
i = 3;
// Seek in Column SQL
if(iColumn.isColumnSQL())
m_CountColumnSQL ++;
}while(rs.moveToNext());
}
// Close DB
if(p_Conn == null)
conn.closeDB(rs);
// Convert Array
m_columns = new POInfoColumn[columns.size()];
columns.toArray(m_columns);
Log.d("Size ", "- " + m_columns.length);
}
/**
* Obtiene el nombre de la tabla
* @author Yamel Senih 26/02/2012, 23:42:37
* @return
* @return String
*/
public String getTableName(){
return m_TableName;
}
/**
* Verifica si los registros son eliminables
* @author Yamel Senih 07/06/2012, 09:27:31
* @return
* @return boolean
*/
public boolean isDeleteable(){
return m_IsDeleteable;
}
/**
* Obtiene el id de la tabla
* @author Yamel Senih 26/02/2012, 23:43:36
* @return
* @return int
*/
public int getSFA_Table_ID(){
return m_SFA_Table_ID;
}
/**
* Obtiene la longitud del arreglo
* @author Yamel Senih 27/02/2012, 00:27:09
* @return
* @return int
*/
public int getColumnLength(){
if(m_columns != null){
return m_columns.length;
}
return 0;
}
/**
* Obtiene la cantidad de columnas SQL
* @author Yamel Senih 26/07/2012, 11:36:52
* @return
* @return int
*/
public int getCountColumnSQL(){
return m_CountColumnSQL;
}
/**
* Obtiene el nombre de una Columna con el indice de la misma
* @author Yamel Senih 27/02/2012, 00:34:43
* @param index
* @return
* @return String
*/
public String getColumnName(int index){
if(m_columns != null || index < m_columns.length){
return m_columns[index].ColumnName;
}
return null;
}
/**
* Obtiene las columnas separadas por coma ","
* @author Yamel Senih 29/03/2012, 23:58:58
* @return
* @return String
*/
public String getColumnsInsert(){
StringBuffer columns = new StringBuffer();
if(m_columns != null){
for (int i = 0; i < m_columns.length; i++) {
if(i > 0)
columns.append(",");
columns.append(m_columns[i].ColumnName);
}
}
return columns.toString();
}
/**
* Obtiene el ID de la columna a traves del nombre de la misma
* @author Yamel Senih 27/02/2012, 00:47:51
* @param columnName
* @return
* @return int
*/
public int getAD_Column_ID(String columnName){
if(m_columns != null){
for (int i = 0; i < m_columns.length; i++) {
if(m_columns[i].ColumnName.equals(columnName))
return m_columns[i].AD_Column_ID;
}
}
return -1;
}
/**
* Obtiene el indice de la columna pasandole el nombre
* @author Yamel Senih 27/02/2012, 00:50:45
* @param columnName
* @return
* @return int
*/
public int getColumnIndex(String columnName){
columnName = columnName.trim();
if(m_columns != null){
for (int i = 0; i < m_columns.length; i++) {
if(m_columns[i].ColumnName != null
&& m_columns[i].ColumnName.equals(columnName)){
return i;
}
}
}
return -1;
}
/**
* Verifica si la columna tiene una llamada asociada
* @author Yamel Senih 08/04/2012, 18:44:09
* @param index
* @return
* @return boolean
*/
public boolean isCallout(int index){
if(m_columns != null && index >= 0){
if(m_columns[index].Callout != null
&& m_columns[index].Callout.length() != 0)
return true;
}
return false;
}
/**
* Obtiene la columna SQL a partir del nombre de la columna
* @author Yamel Senih 27/02/2012, 00:55:03
* @param columnName
* @return
* @return String
*/
public String getColumnSQL(String columnName){
int index = getColumnIndex(columnName);
if(index >= 0){
return m_columns[index].ColumnSQL;
}
return null;
}
/**
* Obtiene la columna SQL a partir del indice de la columna
* @author Yamel Senih 25/07/2012, 17:55:45
* @param index
* @return
* @return String
*/
public String getColumnSQL(int index){
if(index >= 0){
return m_columns[index].ColumnSQL;
}
return null;
}
/**
* Obtiene el tipo de Visualizacion a partir del nombre de la columna
* @author Yamel Senih 27/02/2012, 01:01:40
* @param columnName
* @return
* @return int
*/
public int getDisplayType(String columnName){
int index = getColumnIndex(columnName);
if(index >= 0){
return m_columns[index].DisplayType;
}
return 0;
}
/**
* Obtiene el tipo de Visualizacion a partir del indice de la columna
* @author Yamel Senih 30/03/2012, 22:36:55
* @param index
* @return
* @return int
*/
public int getDisplayType(int index){
if(index >= 0){
return m_columns[index].DisplayType;
}
return 0;
}
/**
* Obtiene informacion sobre si la columna es obligatoria
* @author Yamel Senih 27/02/2012, 01:02:45
* @param columnName
* @return
* @return boolean
*/
public boolean isMandatory(String columnName){
int index = getColumnIndex(columnName);
if(index >= 0){
return m_columns[index].IsMandatory;
}
return false;
}
/**
* Obtiene informacion sobre si la columna es obligatoria
* @author Yamel Senih 08/04/2012, 20:58:03
* @param index
* @return
* @return boolean
*/
public boolean isMandatory(int index){
if(index >= 0){
return m_columns[index].IsMandatory;
}
return false;
}
/**
* Obtiene la logica predeterminada de la columna
* @author Yamel Senih 27/02/2012, 01:04:19
* @param columnName
* @return
* @return String
*/
public String getDefaultValue(String columnName){
int index = getColumnIndex(columnName);
if(index >= 0){
return m_columns[index].DefaultValue;
}
return null;
}
/**
* Obtiene la logica predeterminada de la columna
* @author Yamel Senih 30/03/2012, 23:42:02
* @param index
* @return
* @return String
*/
public String getDefaultValue(int index){
if(index >= 0){
return m_columns[index].DefaultValue;
}
return null;
}
/**
* Obtiene informacion sobre si es actualizable
* @author Yamel Senih 27/02/2012, 01:05:24
* @param columnName
* @return
* @return boolean
*/
public boolean isUpdateable(String columnName){
int index = getColumnIndex(columnName);
if(index >= 0){
return m_columns[index].IsUpdateable;
}
return false;
}
public boolean isUpdateable(int index){
if(index >= 0){
return m_columns[index].IsUpdateable;
}
return false;
}
/**
* Obtiene informacion sobre el atributo IsAlwaysUpdateable
* @author Yamel Senih 28/05/2012, 09:24:10
* @param columnName
* @return
* @return boolean
*/
public boolean isAlwaysUpdateable(String columnName){
int index = getColumnIndex(columnName);
if(index >= 0){
return m_columns[index].IsAlwaysUpdateable;
}
return false;
}
/**
* Obtiene informacion sobre el atributo IsAlwaysUpdateable
* @author Yamel Senih 28/05/2012, 09:25:03
* @param index
* @return
* @return boolean
*/
public boolean isAlwaysUpdateable(int index){
if(index >= 0){
return m_columns[index].IsAlwaysUpdateable;
}
return false;
}
/**
* Obtiene la etiqueta de la columna
* @author Yamel Senih 27/02/2012, 01:06:27
* @param columnName
* @return
* @return String
*/
public String getName(String columnName){
int index = getColumnIndex(columnName);
if(index >= 0){
return m_columns[index].Name;
}
return null;
}
/**
* Obtiene el nombre para mostrar de la columna
* @author Yamel Senih 08/04/2012, 18:22:05
* @param index
* @return
* @return String
*/
public String getName(int index){
if(index >= 0){
return m_columns[index].Name;
}
return null;
}
/**
* Obtiene informacion sobre si es traducida o no
* @author Yamel Senih 27/02/2012, 01:07:24
* @param columnName
* @return
* @return boolean
*/
/*public boolean getIsTranslated(String columnName){
int index = getColumnIndex(columnName);
if(index >= 0){
return m_columns[index].IsTranslated;
}
return false;
}*/
/**
* Obtiene informacion sobre si es encriptada
* @author Yamel Senih 27/02/2012, 01:08:04
* @param columnName
* @return
* @return boolean
*/
public boolean isEncrypted(String columnName){
int index = getColumnIndex(columnName);
if(index >= 0){
return m_columns[index].IsEncrypted;
}
return false;
}
/**
* Obtiene la longitud de la columna
* @author Yamel Senih 27/02/2012, 01:08:52
* @param columnName
* @return
* @return int
*/
public int getFieldLength(String columnName){
int index = getColumnIndex(columnName);
if(index >= 0){
return m_columns[index].FieldLength;
}
return -1;
}
/**
* Obtiene el valor minimo de la columna
* @author Yamel Senih 27/02/2012, 01:09:37
* @param columName
* @return
* @return String
*/
public String getValueMin(String columName){
int index = getColumnIndex(columName);
if(index >= 0){
return m_columns[index].ValueMin;
}
return null;
}
/**
* Obtiene si la Columna es SQL
* a partir del Nombre de la Columna
* @author Yamel Senih 25/07/2012, 17:47:04
* @param columnName
* @return
* @return boolean
*/
public boolean isColumnSQL(String columnName){
int index = getColumnIndex(columnName);
if(index >= 0){
return m_columns[index].isColumnSQL();
}
return false;
}
/**
* Obtiene si la Columna es SQL
* a partir del indice de la Columna
* @author Yamel Senih 25/07/2012, 17:47:53
* @param index
* @return
* @return boolean
*/
public boolean isColumnSQL(int index){
if(index >= 0){
return m_columns[index].isColumnSQL();
}
return false;
}
/**
* Obtiene el valor Maximo de la columna
* @author Yamel Senih 27/02/2012, 01:10:09
* @param columnName
* @return
* @return String
*/
public String getValueMax(String columnName){
int index = getColumnIndex(columnName);
if(index >= 0){
return m_columns[index].ValueMax;
}
return null;
}
/**
* Convierte los valores de un parametro value
* a su valor dependiendo del tipo de columna
* @author Yamel Senih 27/03/2012, 02:29:02
* @param index
* @param value
* @return
* @return Object
*/
public Object parseType(int index, Object value){
if(index >= 0){
}
return null;
}
/**
* Convierte los valores de un parametro value
* a su valor dependiendo del tipo de columna
* @author Yamel Senih 27/03/2012, 02:30:41
* @param columName
* @param value
* @return
* @return Object
*/
public Object parseType(String columName, Object value){
int index = getColumnIndex(columName);
if(index >= 0){
return m_columns[index].ValueMax;
}
return null;
}
/**
* Obtiene el valor de la columna si es Virtual o no
* @author Yamel Senih 10/08/2012, 11:19:00
* @param ctx
* @param infoColumn
* @param index
* @return
* @return String
*/
public static String getColumnNameForSelect(Context ctx, POInfo infoColumn, int index){
String value = "''";
if(!infoColumn.isColumnSQL(index)){
value = infoColumn.getTableName() + "." + infoColumn.getColumnName(index);
} else {
// Parse SQL Column
String columnSQL = Env.parseContext(ctx, infoColumn.getColumnSQL(index), false);
value = columnSQL;
}
return value;
}
/**
* Get PO Info Column
* @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 27/02/2014, 19:35:36
* @param columnName
* @return
* @return POInfoColumn
*/
public POInfoColumn getPOInfoColumn(String columnName){
int index = getColumnIndex(columnName);
if(index >= 0){
return m_columns[index];
}
return null;
}
/**
* Get PO Info Column
* @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 27/02/2014, 19:36:41
* @param index
* @return
* @return POInfoColumn
*/
public POInfoColumn getPOInfoColumn(int index){
if(index >= 0){
return m_columns[index];
}
return null;
}
}