/*
* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies). 
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of the License "Eclipse Public License v1.0"
* which accompanies this distribution, and is available
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
*
* Initial Contributors:
* Nokia Corporation - initial contribution.
*
* Contributors:
*
* Description:
*
*/

#include "T_GraphicsUtil.h"
#include "T_DataWsSpriteBase.h"

/*@{*/
//Commands
_LIT(KCmdActivate,							"Activate");
_LIT(KCmdAppendMember,						"AppendMember");
_LIT(KCmdUpdateMember,						"UpdateMember");
_LIT(KCmdClose,  					        "Close");

// Fields
_LIT(KFldIndex, 			 				"index");
_LIT(KFldOneParameter,			 			"oneparameter");
_LIT(KFldSpriteMember,						"spritemember");
///	Logging
_LIT(KLogError,								"Error=%d");
_LIT(KLogMissingParameter,					"Missing parameter '%S'");


_LIT(KLogActivate,                          "execute Activate()");
_LIT(KLogAppendMember,                      "execute AppendMember(const TSpriteMember &aMemberData)");
_LIT(KLogUpdateMember,                      "execute UpdateMember(TInt aIndex)");
_LIT(KLogUpdateMember2,                     "execute UpdateMember(TInt aIndex, const TSpriteMember &aMemberData)");
_LIT(KLogClose,                             "execute Close()");
/*@}*/

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CT_DataWsSpriteBase::CT_DataWsSpriteBase():CDataWrapperBase()
	{
	}

MWsClientClass* CT_DataWsSpriteBase::GetClientClass() const
	{
	return GetWsSpriteBase();
	}
/**
* Process a command read from the ini file
*
* @param aCommand			the command to process
* @param aSection			the entry in the ini file requiring the command to be processed
* @param aAsyncErrorIndex	index of command. used for async calls
*
* @return ETrue if the command is processed
*/
TBool CT_DataWsSpriteBase::DoCommandL(const TTEFFunction& aCommand, const TTEFSectionName& aSection, const TInt /*aAsyncErrorIndex*/)
	{
	TBool	ret = ETrue;

	if ( aCommand==KCmdActivate )
		{
		DoCmdActivate();
		}
	else if ( aCommand==KCmdAppendMember )
		{
		DoCmdAppendMemberL(aSection);
		}
	else if ( aCommand==KCmdUpdateMember )
		{
		DoCmdUpdateMemberL(aSection);
		}
	else if ( aCommand==KCmdClose )
		{
		DoCmdClose();
		}
	else
		{
		ret=EFalse;
		}

	return ret;
	}

/**
 * Process Activate command
 *
 * @param: None
 *
 * @return: None
 */
void CT_DataWsSpriteBase::DoCmdActivate()
	{
	// Execute command and log parameters
	INFO_PRINTF1(KLogActivate);
	TInt nErr=GetWsSpriteBase()->Activate();

	if(nErr!=KErrNone)
	{
	ERR_PRINTF2(KLogError, nErr);
	SetError(nErr);	
	}

	// No command return value and output parameter to display and check
	}

/**
 * Process AppendMember command
 *
 * @param: aSection			the entry in the ini file requiring the command to be processed
 *
 * @return: None
 */
void CT_DataWsSpriteBase::DoCmdAppendMemberL(const TDesC& aSection)
	{
	// Execute command and log parameters
	INFO_PRINTF1(KLogAppendMember);
	
	//Init TSpriteMember 
	TSpriteMember spriteMember;	
	
	if ( !CT_GraphicsUtil::GetSpriteMemberL(*this, aSection, KFldSpriteMember, spriteMember) )
		{
		ERR_PRINTF2(KLogMissingParameter, &KFldSpriteMember);
		SetBlockResult(EFail);
		}
	
	TInt returnCode=GetWsSpriteBase()->AppendMember(spriteMember);
	
	if(KErrNone!=returnCode)
		{
		ERR_PRINTF2(KLogError, returnCode);
		SetError(returnCode);
		}

	// No command return value and output parameter to display and check
	}

/**
 * Process UpdateMember command
 *
 * @param: aSection			the entry in the ini file requiring the command to be processed
 *
 * @return: None
 */
void CT_DataWsSpriteBase::DoCmdUpdateMemberL(const TDesC& aSection)
	{
	TBool	dataOk=ETrue;
	//get update index
	TInt datIndex;
	
	if ( !GetIntFromConfig(aSection, KFldIndex, datIndex) )
		{
		dataOk=EFalse;
		ERR_PRINTF2(KLogMissingParameter, &KFldIndex);
		}
	//get if one parameter
	TBool bOneParameter=TRUE;
	
	if ( !GetBoolFromConfig(aSection, KFldOneParameter, bOneParameter) )
		{
		dataOk=EFalse;
		ERR_PRINTF2(KLogMissingParameter, &KFldOneParameter);
		}
		
	//Init  new TSpriteMember 
	TSpriteMember spriteMember;	
	
	if ( !CT_GraphicsUtil::GetSpriteMemberL(*this, aSection, KFldSpriteMember, spriteMember) )
		{
		if(!bOneParameter)
			{
			dataOk=EFalse;
			ERR_PRINTF2(KLogMissingParameter, &KFldSpriteMember);
			SetBlockResult(EFail);
			}
		}
	
	if(dataOk)
		{
		TInt returnCode=KErrNone;
		
		if(bOneParameter)
			{
			INFO_PRINTF1(KLogUpdateMember);
			GetWsSpriteBase()->UpdateMember(datIndex);
			}
		else
		    {
			INFO_PRINTF1(KLogUpdateMember2);
			returnCode=GetWsSpriteBase()->UpdateMember(datIndex,spriteMember);
			}
		
		if(returnCode!=KErrNone)
			{
			ERR_PRINTF2(KLogError, returnCode);
			SetError(returnCode);
			}
		}
	// No command return value and output parameter to display and check
	}

/**
 * Process Close command
 *
 * @param: None
 *
 * @return: None
 */
void CT_DataWsSpriteBase::DoCmdClose()
	{
	// Execute command and log parameters
	INFO_PRINTF1(KLogClose);
	GetWsSpriteBase()->Close();
	}
