/*************************************************************************************
* 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.view.lookup;
import java.util.ArrayList;
import java.util.logging.Level;
import org.spinsuite.base.DB;
import org.spinsuite.util.DisplayLookupSpinner;
import org.spinsuite.util.DisplayType;
import org.spinsuite.util.LogM;
import android.content.Context;
import android.database.Cursor;
import android.util.AttributeSet;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
/**
* @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a>
*
*/
public class VLookupSpinner extends VLookup {
/**
* *** Constructor ***
* @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 19/02/2014, 08:27:59
* @param context
*/
public VLookupSpinner(Context context) {
super(context);
init();
}
/**
* *** Constructor ***
* @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 19/02/2014, 08:27:59
* @param context
* @param attrs
*/
public VLookupSpinner(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
/**
* *** Constructor ***
* @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 19/02/2014, 08:27:59
* @param context
* @param attrs
* @param defStyle
*/
public VLookupSpinner(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init();
}
/**
* *** Constructor ***
* @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 19/02/2014, 08:27:59
* @param context
* @param m_field
*/
public VLookupSpinner(Context context, InfoField m_field) {
super(context, m_field);
init();
}
/** String */
private Spinner v_Spinner = null;
/** Syntax Error */
private boolean isSyntaxError = false;
//
@Override
protected void init() {
v_Spinner = new Spinner(getContext());
//
setEnabled(!m_field.IsReadOnly);
// Add to View
addView(v_Spinner);
// Load Data
load();
}
/**
* Get Position from value
* @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 16/03/2014, 11:32:32
* @param value
* @return
* @return int
*/
private int getPosition(Object value){
int pos = -1;
for(int i = 0; i < v_Spinner.getCount(); i++){
DisplayLookupSpinner ds = (DisplayLookupSpinner) v_Spinner.getItemAtPosition(i);
if(m_field.DisplayType == DisplayType.LIST){
if(ds.getIDToString() != null
&& ds.getIDToString().equals((String) value)){
pos = i;
break;
}
} else {
if(ds.getIDAsInteger() == (Integer)value){
pos = i;
break;
}
}
}
//
return pos;
}
@Override
public void setValue(Object value) {
if(value == null)
return;
int pos = getPosition(value);
// Reload
if(pos == -1
&& !isSyntaxError) {
// Load
load();
// Set Value
pos = getPosition(value);
}
//
if(pos > -1)
v_Spinner.setSelection(pos);
}
@Override
public Object getValue() {
DisplayLookupSpinner item = (DisplayLookupSpinner) v_Spinner.getSelectedItem();
if(item != null) {
if(m_field.DisplayType != DisplayType.LIST)
return item.getIDAsInteger();
else
return item.getIDToString();
}
return null;
}
@Override
public boolean isEmpty() {
Object value = getValue();
if(value != null){
if(value instanceof Integer){
if(((Integer)value) > -1)
return false;
}
}
return true;
}
@Override
public View getChildView() {
return v_Spinner;
}
/**
* Load Data
* @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 25/02/2014, 23:27:09
* @return void
*/
private void load(){
try{
LookupDisplayType lookup = new LookupDisplayType(getContext(), m_field);
DB conn = new DB(getContext());
DB.loadConnection(conn, DB.READ_ONLY);
Cursor rs = null;
// Query
rs = conn.querySQL(lookup.getSQL(), null);
ArrayList<DisplayLookupSpinner> data = new ArrayList<DisplayLookupSpinner>();
if(rs.moveToFirst()){
if(!m_field.IsMandatory) {
if(m_field.DisplayType == DisplayType.LIST)
data.add(new DisplayLookupSpinner(null, null));
else
data.add(new DisplayLookupSpinner(-1, null));
}
// Loop
do{
if(m_field.DisplayType == DisplayType.LIST)
data.add(new DisplayLookupSpinner(rs.getString(0), rs.getString(1)));
else
data.add(new DisplayLookupSpinner(rs.getInt(0), rs.getString(1)));
}while(rs.moveToNext());
ArrayAdapter<DisplayLookupSpinner> sp_adapter =
new ArrayAdapter<DisplayLookupSpinner>(getContext(), android.R.layout.simple_spinner_item, data);
sp_adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
v_Spinner.setAdapter(sp_adapter);
}
// Close
DB.closeConnection(conn);
} catch(Exception e){
isSyntaxError = true;
LogM.log(getContext(), getClass(), Level.SEVERE, "Error in Load", e);
}
}
/**
* Is Syntax Error
* @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 16/03/2014, 11:36:25
* @return
* @return boolean
*/
public boolean isSyntaxError(){
return isSyntaxError;
}
@Override
public void setEnabled(boolean enabled) {
super.setEnabled(enabled);
v_Spinner.setEnabled(enabled);
}
@Override
public String getDisplayValue() {
// Get Value
DisplayLookupSpinner item = (DisplayLookupSpinner) v_Spinner.getSelectedItem();
//
if(item != null)
return item.getValueAsString();
return null;
}
}