package jbCAP;

import jVARIANT.VARIANT;
import jVARIANT.VARENUM;
import java.util.ArrayList;
import java.util.Arrays;

/** @file bCapVariables.java
 *
 *  @brief b-CAP client library
 *
 *  @version	1.2
 *	@date		2014/5/26
 *	@author		DENSO WAVE (m)
 *
 */
public class bCapVariables extends bCapCollectionTmpl{
	private int m_iParent;
	
	protected bCapVariables(int iHandle, bCapSocket sock, int iParent)
	{
		m_hr = 0;
		m_iParent = iParent;
		m_iHandle = iHandle;
		m_bCapSock = sock;
		m_objArray = new ArrayList<bCapObjectTmpl>();
	}
	
	public bCapVariable Item(int index)
	{
		return (bCapVariable)super.Item(new VARIANT(VARENUM.VT_I4, index));
	}
	
	public bCapVariable Item(VARIANT index)
	{
		return (bCapVariable)super.Item(index);
	}
	
	public void Remove(bCapVariable var){
		Remove((bCapObjectTmpl)var);
	}
	
	public bCapVariable Add(String strName, String strOption)
	{
		bCapPacket msg = new bCapPacket();

		switch(m_iParent)
		{
		case 0:
			msg.m_ID = 9; // Controller_GetVariable
			break;
		case 1:
			msg.m_ID = 26; // Extension_GetVariable
			break;
		case 2:
			msg.m_ID = 38; // File_GetVariable
			break;
		case 3:
			msg.m_ID = 62; // Robot_GetVariable
			break;
		case 4:
			msg.m_ID = 85; // Task_GetVariable
			break;
		default:
			return null;
		}

		VARIANT[] vnt = new VARIANT[3];
		vnt[0] = new VARIANT(VARENUM.VT_I4, m_iHandle);
		vnt[1] = new VARIANT(VARENUM.VT_BSTR, strName);
		vnt[2] = new VARIANT(VARENUM.VT_BSTR, strOption);
		msg.m_vntArray.addAll(Arrays.asList(vnt));
		
		msg = m_bCapSock.SendMessage(msg);

		m_hr = msg.m_ID;
		
		if(msg.m_vntArray.size() == 1 && msg.m_vntArray.get(0).VariantGetType() == VARENUM.VT_I4)
		{
			bCapVariable var = new bCapVariable((Integer)msg.m_vntArray.get(0).VariantGetObject(), m_bCapSock);
			
			m_objArray.add(var);
			
			return var;
		}
		else
		{
			return null;
		}
	}
}
