baseapitest/basesvs/validation/f32/sfsrv/src/T_FormatData.cpp
changeset 0 a41df078684a
child 15 4122176ea935
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseapitest/basesvs/validation/f32/sfsrv/src/T_FormatData.cpp	Mon Oct 19 15:55:17 2009 +0100
@@ -0,0 +1,427 @@
+/*
+* 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:
+*
+*/
+
+/**
+@test
+@internalComponent
+
+This contains CT_FormatData
+*/
+
+//	User includes
+#include "T_FormatData.h"
+
+/*@{*/
+///	Parameters
+_LIT(KRFsName,							"RFs");
+_LIT(KDrive,							"drive");
+_LIT(KFormat,							"format");
+_LIT(KSpecialInfo,						"specialinfo");
+_LIT(KAsync,							"async");
+_LIT(KEnd,								"end");
+_LIT(KCount,							"count");
+
+//	Format mode
+_LIT(KFormatHighDensity,				"EHighDensity");
+_LIT(KFormatLowDensity,					"ELowDensity");
+_LIT(KFormatFullFormat,					"EFullFormat");
+_LIT(KFormatQuickFormat,				"EQuickFormat");
+_LIT(KFormatSpecialFormat,				"ESpecialFormat");
+_LIT(KFormatForceErase,					"EForceErase");
+
+///	Commands
+_LIT(KCmdNew,							"new");
+_LIT(KCmdDestructor,					"~");
+_LIT(KCmdOpen,							"Open");
+_LIT(KCmdClose,							"Close");
+_LIT(KCmdNext,							"Next");
+/*@}*/
+
+CT_FormatData* CT_FormatData::NewL()
+/**
+ * Two phase constructor
+ */
+	{
+	CT_FormatData* ret = new ( ELeave ) CT_FormatData();
+	CleanupStack::PushL( ret );
+	ret->ConstructL();
+	CleanupStack::Pop( ret );
+	return ret;
+	}
+
+CT_FormatData::CT_FormatData()
+:	iFormat( NULL )
+,	iNext( NULL )
+,	iCount( 0 )
+,	iCountNextEnd( 0 )
+/**
+ * Protected constructor. First phase construction
+ */
+	{
+	}
+
+void CT_FormatData::ConstructL()
+/**
+ * Protected constructor. Second phase construction
+ */
+	{
+	iNext = CActiveCallback::NewL( *this );
+	}
+
+CT_FormatData::~CT_FormatData()
+/**
+ * Destructor.
+ */
+	{
+	delete iNext;
+	iNext = NULL;
+	DoCleanup();
+	}
+
+void CT_FormatData::DoCleanup()
+/**
+ * Contains cleanup implementation
+ */
+	{
+	//Deleting RFormat.
+	if(iFormat != NULL)
+		{
+		INFO_PRINTF1( _L("Deleting current RFormat") );
+		delete iFormat;
+		iFormat = NULL;
+		}
+	}
+
+TAny* CT_FormatData::GetObject()
+/**
+ * Return a pointer to the object that the data wraps
+ *
+ * @return	pointer to the object that the data wraps
+ */
+	{
+	return iFormat;
+	}
+
+TBool CT_FormatData::DoCommandL( const TTEFFunction& aCommand, const TTEFSectionName& aSection, const TInt aAsyncErrorIndex )
+/**
+ * Process a command read from the ini file
+ *
+ * @param	aCommand requiring command to be processed
+ * @param	aSection the section in the ini file requiring the command to be processed
+ * @param	aAsyncErrorIndex the index of asynchronous command error code belongs to.
+ *
+ * @leave	system wide error
+ *
+ * @return	ETrue if the command is processed
+ */
+	{
+	TBool retVal = ETrue;
+
+	if ( aCommand == KCmdNew )
+		{
+		DoCmdNewL();
+		}
+	else if ( aCommand == KCmdDestructor )
+		{
+		DoCmdDestructor();
+		}
+	else if ( aCommand == KCmdOpen )
+		{
+		DoCmdOpenL( aSection );
+		}
+	else if ( aCommand == KCmdClose )
+		{
+		DoCmdClose();
+		}
+	else if ( aCommand == KCmdNext )
+		{
+		DoCmdNext( aSection, aAsyncErrorIndex );
+		}
+	else
+		{
+		retVal = EFalse;
+		}
+	return retVal;
+	}
+
+void CT_FormatData::DoCmdNewL()
+/**
+ * Creates new RFormat class instance
+ */
+	{
+	//Deletes previous RFormat class instance if it was already created.
+	DoCleanup();
+
+	INFO_PRINTF1( _L("Create new RFormat class instance") );
+
+	// do create
+	TRAPD( err, iFormat = new ( ELeave ) RFormat() );
+	if ( err != KErrNone )
+		{
+		ERR_PRINTF2( _L("new error %d"), err );
+		SetError( err );
+		}
+	}
+
+void CT_FormatData::DoCmdDestructor()
+/**
+ * Destroy RFormat the object
+ */
+	{
+	DoCleanup();
+	}
+
+void CT_FormatData::DoCmdOpenL( const TDesC& aSection )
+/**
+ * RFormat::Open
+ *
+ * @leave	system wide error
+ */
+	{
+	TBool	dataOk = ETrue;
+
+	RFs*	rfsObject = NULL;
+	TPtrC	rfsObjectName;
+	if ( GET_MANDATORY_STRING_PARAMETER( KRFsName, aSection, rfsObjectName ) )
+		{
+		TRAPD( err, rfsObject = ( RFs* )GetDataObjectL( rfsObjectName ));
+		
+		if ( err != KErrNone )
+			{
+			ERR_PRINTF1( _L("Error with fileserver"));
+			SetBlockResult( EFail );
+			}
+		}
+	else
+		{
+		dataOk = EFalse;
+		}
+
+	TPtrC	drive;
+	if ( !GET_MANDATORY_STRING_PARAMETER( KDrive, aSection, drive ) )
+		{
+		dataOk = EFalse;
+		}
+
+	TUint	formatMode = 0;
+	if ( !GetFormatMode( KFormat, aSection, formatMode ) )
+		{
+		dataOk = EFalse;
+		}
+
+	if ( dataOk )
+		{
+		TInt	err = KErrNone;
+
+		TPtrC	specialInfo;
+		if ( GET_OPTIONAL_STRING_PARAMETER( KSpecialInfo, aSection, specialInfo ) )
+			{
+			HBufC8*	buf = HBufC8::NewLC( specialInfo.Length() );
+			buf->Des().Copy( specialInfo );
+			err = iFormat->Open( *rfsObject, drive, formatMode, iCount, buf->Des() );
+			CleanupStack::PopAndDestroy( buf );
+			}
+		else
+			{
+			err = iFormat->Open( *rfsObject, drive, formatMode, iCount );
+			}
+		INFO_PRINTF2( _L("iCount %d"), iCount );
+		iCountPckg = iCount;
+		if ( err != KErrNone )
+			{
+			ERR_PRINTF2( _L("Open() error %d"), err );
+			SetError( err );
+			}
+		}
+	}
+
+void CT_FormatData::DoCmdClose()
+/**
+ * RFormat::Close
+ */
+	{
+	iFormat->Close();
+	}
+
+void CT_FormatData::DoCmdNext( const TDesC& aSection, const TInt aAsyncErrorIndex )
+/**
+ * RFormat::Next
+ */
+	{
+	TBool	async = EFalse;
+	GET_OPTIONAL_BOOL_PARAMETER( KAsync, aSection, async );
+
+	iCountNextEnd = 0;
+	GET_OPTIONAL_INT_PARAMETER( KEnd, aSection, iCountNextEnd );
+	
+	GET_OPTIONAL_INT_PARAMETER( KCount, aSection, iCount );
+
+	if ( async )
+		{
+		iFormat->Next( iCountPckg, iNext->iStatus );
+		iNext->Activate( aAsyncErrorIndex );
+		IncOutstanding();
+		}
+	else
+		{
+		TInt	err = KErrNone;
+		while ( ( iCount > iCountNextEnd ) && ( err == KErrNone ) )
+			{
+			err = iFormat->Next( iCount );
+			INFO_PRINTF2( _L("iCount %d"), iCount );
+			}
+		if ( err != KErrNone )
+			{
+			ERR_PRINTF2( _L("Next() error %d"), err );
+			SetError( err );
+			}
+		}
+	}
+
+TBool CT_FormatData::GetFormatMode( const TDesC& aParameterName, const TDesC& aSection, TUint& aFormatMode )
+	{
+	aFormatMode = 0;
+
+	TPtrC	formatStr;
+	TBool	ret = GET_MANDATORY_STRING_PARAMETER( aParameterName, aSection, formatStr );
+	if ( ret )
+		{
+		if ( !ConvertToFormatMode( formatStr, aFormatMode ) )
+			{
+			TInt	intTemp;
+			ret = GET_MANDATORY_INT_PARAMETER( aParameterName, aSection, intTemp );
+			if ( ret )
+				{
+				aFormatMode = intTemp;
+				}
+			}
+		}
+
+	return ret;
+	}
+
+TBool CT_FormatData::ConvertToFormatMode( const TDesC& aFormatModeStr, TUint& aFormatMode )
+	{
+	TBool	ret = ETrue;
+	if ( aFormatModeStr == KFormatHighDensity )
+		{
+		aFormatMode = EHighDensity;
+		}
+	else if ( aFormatModeStr == KFormatLowDensity )
+		{
+		aFormatMode = ELowDensity;
+		}
+	else if ( aFormatModeStr == KFormatFullFormat )
+		{
+		aFormatMode = EFullFormat;
+		}
+	else if ( aFormatModeStr == KFormatQuickFormat )
+		{
+		aFormatMode = EQuickFormat;
+		}
+	else if ( aFormatModeStr == KFormatSpecialFormat )
+		{
+		aFormatMode = ESpecialFormat;
+		}
+	else if ( aFormatModeStr == KFormatForceErase )
+		{
+		aFormatMode = EForceErase;
+		}
+	else
+		{
+		TInt	location = aFormatModeStr.Match( _L("*|*") );
+		if( location != KErrNotFound )
+			{
+			//Converting Left part of the data
+			TPtrC		tempStr = aFormatModeStr.Left( location );
+			ret = ConvertToFormatMode( tempStr, aFormatMode );
+
+			//Converting right data can be with another "|"
+			tempStr.Set( aFormatModeStr.Mid( location + 1 ) );
+
+			TUint	formatModeTmp;
+			if ( ConvertToFormatMode( tempStr, formatModeTmp ) )
+				{
+				aFormatMode |= formatModeTmp;
+				}
+			else
+				{
+				ret = EFalse;
+				}
+			}
+		else
+			{
+			ret = EFalse;
+			}
+		}
+
+	return ret;
+	}
+
+void CT_FormatData::RunL( CActive* aActive, TInt aIndex )
+	{
+	if ( aActive == iNext )
+		{
+		TInt	err = aActive->iStatus.Int();
+		if( err != KErrNone )
+			{
+			ERR_PRINTF2( _L("DoCancel Error %d"), err );
+			SetAsyncError( aIndex, err );
+			DecOutstanding();
+			}
+		else
+			{
+			// Reset the outstanding request state
+			INFO_PRINTF2( _L("RunL iCount %d"), iCountPckg() );
+			if ( iCountPckg() > iCountNextEnd )
+				{
+				iFormat->Next( iCountPckg, iNext->iStatus );
+				iNext->Activate( aIndex );
+				}
+			else
+				{
+				DecOutstanding();
+				}
+			}
+		}
+	else
+		{
+ 		ERR_PRINTF1( _L("Stray RunL signal") );
+ 		SetBlockResult( EFail );
+		}
+	}
+
+void CT_FormatData::DoCancel( CActive* aActive, TInt aIndex )
+	{
+	if ( aActive == iNext )
+		{
+		TInt	err = aActive->iStatus.Int();
+		if( err != KErrNone )
+			{
+			ERR_PRINTF2( _L("DoCancel Error %d"), err );
+			SetAsyncError( aIndex, err );
+			}
+
+		// Reset the outstanding request state
+		DecOutstanding();
+		}
+	else
+		{
+ 		ERR_PRINTF1( _L("Stray RunL signal") );
+ 		SetBlockResult( EFail );
+		}
+	}