mmmw_plat/audio_metadata_reader_api/tsrc/MetaDataDisplay/src/MetaDataDisplayBlocks.cpp
changeset 0 71ca22bcf22a
child 41 a36789189b53
child 43 9894ed580e4a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmmw_plat/audio_metadata_reader_api/tsrc/MetaDataDisplay/src/MetaDataDisplayBlocks.cpp	Tue Feb 02 01:08:46 2010 +0200
@@ -0,0 +1,2311 @@
+/*
+* Copyright (c) 2002 - 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "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:  parsered informantion to display for STIF test
+*
+*/
+
+
+
+// [INCLUDE FILES] - do not remove
+#include <e32svr.h>
+#include <StifParser.h>
+#include <Stiftestinterface.h>
+#include "MetaDataDisplay.h"
+#include <mmfFormatImplementationUIDs.hrh>
+
+#include <utf.h>//added on 17,12,2008
+class CnvUtfConverter;
+
+
+// EXTERNAL DATA STRUCTURES
+//extern  ?external_data;
+
+// EXTERNAL FUNCTION PROTOTYPES  
+//extern ?external_function( ?arg_type,?arg_type );
+
+// CONSTANTS
+//const ?type ?constant_var = ?constant;
+
+// MACROS
+//#define ?macro ?macro_def
+
+// LOCAL CONSTANTS AND MACROS
+//const ?type ?constant_var = ?constant;
+//#define ?macro_name ?macro_def
+
+// MODULE DATA STRUCTURES
+//enum ?declaration
+//typedef ?declaration
+
+// LOCAL FUNCTION PROTOTYPES
+//?type ?function_name( ?arg_type, ?arg_type );
+
+// FORWARD DECLARATIONS
+//class ?FORWARD_CLASSNAME;
+
+// ============================= LOCAL FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// ?function_name ?description.
+// ?description
+// Returns: ?value_1: ?description
+//          ?value_n: ?description_line1
+//                    ?description_line2
+// -----------------------------------------------------------------------------
+//
+/*
+?type ?function_name(
+    ?arg_type arg,  // ?description
+    ?arg_type arg)  // ?description
+    {
+
+    ?code  // ?comment
+
+    // ?comment
+    ?code
+    }
+*/
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CMetaDataDisplay::Delete
+// Delete here all resources allocated and opened from test methods. 
+// Called from destructor. 
+// -----------------------------------------------------------------------------
+//
+void CMetaDataDisplay::Delete() 
+    {
+
+    }
+
+// -----------------------------------------------------------------------------
+// CMetaDataDisplay::RunMethodL
+// Run specified method. Contains also table of test mothods and their names.
+// -----------------------------------------------------------------------------
+//
+TInt CMetaDataDisplay::RunMethodL( 
+    CStifItemParser& aItem ) 
+    {
+
+    static TStifFunctionInfo const KFunctions[] =
+        {  
+        // Copy this line for every implemented function.
+        // First string is the function name used in TestScripter script file.
+        // Second is the actual implementation member function.        
+        //ADD NEW ENTRY HERE
+        // [test cases entries] - Do not remove
+        // Add test case for the header "MetaDataUtility.h"  
+        ENTRY( "TestCreateUtility", CMetaDataDisplay::TestCreateUtility ),
+        ENTRY( "TestDeleteUtility", CMetaDataDisplay::TestDeleteUtility ),
+        ENTRY( "TestOpenFile", CMetaDataDisplay::TestOpenFile ),
+        ENTRY( "TestOpenFileWithFieldL", CMetaDataDisplay::TestOpenFileWithFieldL ),
+        ENTRY( "TestOpenRFile", CMetaDataDisplay::TestOpenRFile ),
+        ENTRY( "TestOpenRFileWithFieldL", CMetaDataDisplay::TestOpenRFileWithFieldL ),
+        ENTRY( "TestOpenDesL", CMetaDataDisplay::TestOpenDesL ),
+        ENTRY( "TestOpenDesWithFieldL", CMetaDataDisplay::TestOpenDesWithFieldL ), 
+        ENTRY( "TestMetaDataCountL", CMetaDataDisplay::TestMetaDataCountL ),
+        ENTRY( "TestMetaDataFieldsL", CMetaDataDisplay::TestMetaDataFieldsL ),
+        ENTRY( "TestOpenDesLWith3paras", CMetaDataDisplay::TestOpenDesLWith3paras ),
+        ENTRY( "TestOpenDesLWith2paras", CMetaDataDisplay::TestOpenDesLWith2paras ),
+        ENTRY( "TestOpenFileLWith3paras", CMetaDataDisplay::TestOpenFileLWith3paras ),
+        ENTRY( "TestOpenFileLWith2paras", CMetaDataDisplay::TestOpenFileLWith2paras ),
+        ENTRY( "TestOpenFileLFNFeildsMime", CMetaDataDisplay::TestOpenFileLFNFeildsMime ),
+        ENTRY( "TestOpenFileLFNMime", CMetaDataDisplay::TestOpenFileLFNMime ),
+        ENTRY( "TestID3Version", CMetaDataDisplay::TestID3Version ),
+        ENTRY( "TestResetL", CMetaDataDisplay::TestResetL ),
+        ENTRY( "TestInitChunkData", CMetaDataDisplay::TestInitChunkData ),
+        ENTRY( "TestProcessChunkData", CMetaDataDisplay::TestProcessChunkData ),
+        ENTRY( "TestIsNotChunkDataMode", CMetaDataDisplay::TestIsNotChunkDataMode ),
+        ENTRY( "TestIsChunkDataMode", CMetaDataDisplay::TestIsChunkDataMode ),
+        ENTRY( "TestCloseChunkData", CMetaDataDisplay::TestCloseChunkData ),
+        ENTRY( "CreateChunkDataTester", CMetaDataDisplay::CreateChunkDataTester ),
+        ENTRY( "DestructChunkDataTester", CMetaDataDisplay::DestructChunkDataTester ),
+        
+        /*----------------------------------------------------------------------
+         * Test functions for CMetaDataFieldContainer
+         *----------------------------------------------------------------------
+         */
+        ENTRY( "GetContainerViaMetaDataUtility", CMetaDataDisplay::GetContainerViaMetaDataUtility ),
+        ENTRY( "ContainerCount", CMetaDataDisplay::ContainerCount ),
+        ENTRY( "ContainerField", CMetaDataDisplay::ContainerField ),
+        ENTRY( "ContainerField8", CMetaDataDisplay::ContainerField8 ),
+        ENTRY( "ContainerAppendLTDesCL", CMetaDataDisplay::ContainerAppendLTDesCL ),
+        ENTRY( "ContainerAppendLTDesC8L", CMetaDataDisplay::ContainerAppendLTDesC8L ),
+        ENTRY( "ContainerAt", CMetaDataDisplay::ContainerAt ),
+        ENTRY( "ContainerFieldIdAt", CMetaDataDisplay::ContainerFieldIdAt ),
+        };
+
+    const TInt count = sizeof( KFunctions ) / 
+                        sizeof( TStifFunctionInfo );
+
+    return RunInternalL( KFunctions, count, aItem );
+
+    }
+
+
+// test MetaDataFieldsL test method function
+TInt CMetaDataDisplay::DisplayFields(TInt aEntryCount, CMetaDataUtility* iMetaData, TBool aDisplay)
+	{
+	TInt i;
+	TInt j=0;
+
+	for( i = 0; i < aEntryCount; i++)
+	{
+		TMetaDataFieldId fieldId;
+		TPtrC field = iMetaData->MetaDataFieldsL().At(i, fieldId);
+
+		if(field != KNullDesC)
+		{
+		    // in case file has duplicate field ID
+		    if (iMetaDataField[fieldId])
+		        delete iMetaDataField[fieldId];
+		
+			iMetaDataField[fieldId] = field.AllocL();
+			if (aDisplay)
+			{
+			    TBuf<50> fieldName = iMetaDataFieldName[fieldId];
+			    fieldName.Append(_L("..."));
+			    iLog->Log(fieldName);
+			    // check for jpeg image
+			    if (fieldId == EMetaDataJpeg)
+			    	iLog->Log(_L("(image)"));
+			    else
+			    	iLog->Log(*iMetaDataField[fieldId]);
+			}
+			j++;
+		} // end of if(field != KNullDesC)
+	} // end of for
+
+	if (j==aEntryCount)
+		return KErrNone;
+	else
+		return KErrExpectedValueDifferent;
+
+	}
+
+
+// Clear metadata fields
+void CMetaDataDisplay::DeleteMetaDataFields()
+	{	
+    for (TInt i=0; i < KNumMetaDataField; i++)
+    if (iMetaDataField[i])
+        {
+        delete iMetaDataField[i];
+        iMetaDataField[i] = NULL;               
+        }
+	}
+
+// -----------------------------------------------------------------------------
+// CMetaDataDisplay::TestCreateUtility
+// NewL test method function.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CMetaDataDisplay::TestCreateUtility( CStifItemParser& /*aItem*/ )
+    {
+    iLog->Log(_L("CMetaDataDisplay::TestCreateUtility"));
+    TInt err = KErrNone;
+	TRAP(err, iMetaData = CMetaDataUtility::NewL());
+    if ( err != KErrNone )
+    	{
+    	iLog->Log(_L("CMetaDataDisplay::TestCreateUtility returned: %d"), err);
+    	}
+	else
+		{
+    	iLog->Log(_L("CMetaDataDisplay::TestCreateUtility returned no error"));
+    	}
+    return err;
+    }
+
+// -----------------------------------------------------------------------------
+//  CMetaDataDisplay::TestDeleteUtility
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+TInt CMetaDataDisplay::TestDeleteUtility(CStifItemParser& /*aItem*/ )
+    {
+    TInt err = KErrNone;
+    delete iMetaData;
+    iMetaData = NULL;
+	iLog->Log(_L("CMetaDataDisplay::TestDeleteUtility testing ~CMetaDataUtility end err=%d"), err);
+	return err;
+    }
+
+// -----------------------------------------------------------------------------
+// CMetaDataDisplay::TestOpenFile
+// OpenFileL test method function.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CMetaDataDisplay::TestOpenFile( CStifItemParser& aItem )
+	{
+    TInt err = KErrNone;
+	TPtrC FileNamePtr;	
+	if ( aItem.GetNextString( FileNamePtr ) == KErrNone )
+	   {
+	    TBuf<120> KFrom;
+   		KFrom.Append(KMetaDataDisplay_testPath);
+   		KFrom.Append(FileNamePtr);
+		TFileName FileName = KFrom;
+		iLog->Log(_L("Input file [%S]"), &FileNamePtr);
+		
+		TRAP(err, iMetaData->OpenFileL(FileName));
+
+		if ( err != KErrNone )
+	    	{
+	    	iLog->Log(_L("CMetaDataDisplay::TestOpenFile returned: %d"), err);
+	    	}
+		else
+			{
+	    	iLog->Log(_L("CMetaDataDisplay::TestOpenFile returned no error"));
+	    	}		    
+	}
+	return err;
+	}
+
+// -----------------------------------------------------------------------------
+// CMetaDataDisplay::TestOpenFileWithFieldL
+// OpenFileL test method function.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CMetaDataDisplay::TestOpenFileWithFieldL( CStifItemParser& aItem )
+	{
+	TInt err = KErrNone;
+	TPtrC FileNamePtr;
+	RArray<TMetaDataFieldId> aWantedFields;
+	TInt wantedField;	
+	if ( aItem.GetNextString( FileNamePtr ) == KErrNone )
+	   {
+	    TBuf<120> KFrom;
+   		KFrom.Append(KMetaDataDisplay_testPath);
+   		KFrom.Append(FileNamePtr);
+		TFileName FileName = KFrom;
+		iLog->Log(_L("Input file [%S]"), &FileNamePtr);
+		while( aItem.GetNextInt( wantedField ) == KErrNone )			
+			{
+			aWantedFields.Append(iMetaDataFieldID[wantedField]);					    		    
+			}
+		TRAP(err, iMetaData->OpenFileL( FileName, aWantedFields ));
+		aWantedFields.Close();
+		if ( err != KErrNone )
+	    	{
+	    	iLog->Log(_L("CMetaDataDisplay::TestOpenFileWithFieldL returned: %d"), err);
+	    	}
+		else
+			{
+	    	iLog->Log(_L("CMetaDataDisplay::TestOpenFileWithFieldL returned no error"));
+	    	}		
+		}
+	
+	return err;
+	}
+
+// -----------------------------------------------------------------------------
+// CMetaDataDisplay::TestOpenRFile
+// OpenFileL test method function.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CMetaDataDisplay::TestOpenRFile( CStifItemParser& aItem )
+	{
+    TInt err = KErrNone;
+	TPtrC FileNamePtr;	
+	if ( aItem.GetNextString( FileNamePtr ) == KErrNone )
+	   {
+	    TBuf<120> KFrom;
+   		KFrom.Append(KMetaDataDisplay_testPath);
+   		KFrom.Append(FileNamePtr);
+		TFileName FileName = KFrom;
+		iLog->Log(_L("Input file [%S]"), &FileNamePtr);
+		RFs	  fs;
+        RFile file;        
+    	User::LeaveIfError(fs.Connect());
+        fs.ShareProtected();
+		User::LeaveIfError(file.Open( fs, FileName, EFileRead));
+		TRAP(err, iMetaData->OpenFileL(file));
+		fs.Close();
+		if ( err != KErrNone )
+	    	{
+	    	iLog->Log(_L("CMetaDataDisplay::TestOpenRFile returned: %d"), err);
+	    	}
+		else
+			{
+	    	iLog->Log(_L("CMetaDataDisplay::TestOpenRFile returned no error"));
+	    	}		    
+	}
+	return err;
+	}
+
+// -----------------------------------------------------------------------------
+// CMetaDataDisplay::TestOpenRFileWithFieldL
+// OpenFileL test method function.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CMetaDataDisplay::TestOpenRFileWithFieldL( CStifItemParser& aItem )
+	{
+	TInt err = KErrNone;
+	TPtrC FileNamePtr;
+	RArray<TMetaDataFieldId> aWantedFields;
+	TInt wantedField;
+
+	if ( aItem.GetNextString( FileNamePtr ) == KErrNone )
+	   {
+	    TBuf<120> KFrom;
+   		KFrom.Append(KMetaDataDisplay_testPath);
+   		KFrom.Append(FileNamePtr);
+		TFileName FileName = KFrom;
+		iLog->Log(_L("Input file [%S]"), &FileNamePtr);
+		RFs	  fs;
+        RFile file;        
+    	User::LeaveIfError(fs.Connect());
+        fs.ShareProtected();
+		User::LeaveIfError(file.Open( fs, FileName, EFileRead));
+		while( aItem.GetNextInt( wantedField ) == KErrNone )			
+			{
+			aWantedFields.Append(iMetaDataFieldID[wantedField]);					    		    
+			}
+	    TRAP(err, iMetaData->OpenFileL( file, aWantedFields ));
+	    fs.Close();
+	    aWantedFields.Close();
+	    if ( err != KErrNone )
+	    	{
+	    	iLog->Log(_L("CMetaDataDisplay::TestOpenRFileWithFieldL returned: %d"), err);
+	    	}
+		else
+			{
+	    	iLog->Log(_L("CMetaDataDisplay::TestOpenRFileWithFieldL returned no error"));
+	    	}	
+	   }
+	return err;
+	}
+
+// -----------------------------------------------------------------------------
+// CMetaDataDisplay::TestOpenDesL
+// OpenDesL test method function.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CMetaDataDisplay::TestOpenDesL( CStifItemParser& aItem )
+	{
+    TInt err = KErrNone;
+	TPtrC FileNamePtr;
+
+	if ( aItem.GetNextString( FileNamePtr ) == KErrNone )
+	   {
+	    TBuf<120> KFrom;
+   		KFrom.Append(KMetaDataDisplay_testPath);
+   		KFrom.Append(FileNamePtr);
+		TFileName FileName = KFrom;
+		iLog->Log(_L("Input file [%S]"), &FileNamePtr);
+		
+		TInt FileError, SoundSize=0;
+		RFile file;
+		RFs FsSession;
+		iLog->Log(_L("Connecting to File Server Session") );
+		FileError = FsSession.Connect();
+		if (FileError)
+			{
+			iLog->Log(_L("File error FsSession.Connect() (%d)") , FileError);
+			User::LeaveIfError(FileError);
+			}
+
+		iLog->Log(_L("Opening file to get size") );
+		FileError = file.Open(FsSession, FileName, EFileStream);
+		if (FileError)
+			{
+			iLog->Log(_L("File error file.Open() (%d)") , FileError);
+			User::LeaveIfError(FileError);
+			}
+		FileError = file.Size(SoundSize);
+		iLog->Log(_L("File Size (%d)") , SoundSize);
+		if (FileError)
+			{
+			iLog->Log(_L("Error getting size") );
+			User::LeaveIfError(FileError);
+			}
+		
+		HBufC8 *SoundFile;
+		SoundFile = HBufC8::NewLC(SoundSize);
+		TPtr8 helper = SoundFile->Des();
+		helper.Append (KFrom);
+		FileError = file.Read( helper );
+		if (FileError)
+			{
+			iLog->Log(_L("Error getting file Descriptor") );
+			User::LeaveIfError(FileError);
+			}
+		
+		TRAP(err, iMetaData->OpenDesL(*SoundFile));		
+		CleanupStack::PopAndDestroy(SoundFile);
+		file.Close();
+		FsSession.Close();
+		if ( err != KErrNone )
+	    	{
+	    	iLog->Log(_L("CMetaDataDisplay::TestOpenDesL returned: %d"), err);
+	    	}
+		else
+			{
+	    	iLog->Log(_L("CMetaDataDisplay::TestOpenDesL returned no error"));
+	    	}		    
+	}
+	return err;
+	}
+
+// -----------------------------------------------------------------------------
+// CMetaDataDisplay::TestOpenDesWithFieldL
+// OpenDesL test method function.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CMetaDataDisplay::TestOpenDesWithFieldL( CStifItemParser& aItem )
+	{
+    TInt err = KErrNone;
+	TPtrC FileNamePtr;	
+	TInt wantedField;
+	RArray<TMetaDataFieldId> aWantedFields;			   	
+   	
+	if ( aItem.GetNextString( FileNamePtr ) == KErrNone )
+	   {
+	    TBuf<120> KFrom;
+   		KFrom.Append(KMetaDataDisplay_testPath);
+   		KFrom.Append(FileNamePtr);
+		TFileName FileName = KFrom;
+		iLog->Log(_L("Input file [%S]"), &FileNamePtr);
+		TInt FileError, SoundSize=0;
+		RFile file;
+		RFs FsSession;
+		iLog->Log(_L("Connecting to File Server Session") );
+		FileError = FsSession.Connect();
+		if (FileError)
+			{
+			iLog->Log(_L("File error FsSession.Connect() (%d)") , FileError);
+			User::LeaveIfError(FileError);
+			}
+
+		iLog->Log(_L("Opening file to get size") );
+		FileError = file.Open(FsSession, FileName, EFileStream);
+		if (FileError)
+			{
+			iLog->Log(_L("File error file.Open() (%d)") , FileError);
+			User::LeaveIfError(FileError);
+			}
+		FileError = file.Size(SoundSize);
+		iLog->Log(_L("File Size (%d)") , SoundSize);
+		if (FileError)
+			{
+			iLog->Log(_L("Error getting size") );
+			User::LeaveIfError(FileError);
+			}
+		
+		HBufC8 *SoundFile;
+		SoundFile = HBufC8::NewLC(SoundSize);
+		TPtr8 helper = SoundFile->Des();
+		helper.Append (KFrom);
+		FileError = file.Read( helper );
+		if (FileError)
+			{
+			iLog->Log(_L("Error getting file Descriptor") );
+			User::LeaveIfError(FileError);
+			}
+		// Get aWantedFields
+		while( aItem.GetNextInt( wantedField ) == KErrNone )			
+			{
+			aWantedFields.Append(iMetaDataFieldID[wantedField]);					    		    
+			}
+		TRAP(err, iMetaData->OpenDesL(*SoundFile, aWantedFields));
+		CleanupStack::PopAndDestroy(SoundFile);		
+		aWantedFields.Close();
+		file.Close();
+		FsSession.Close();
+		if ( err != KErrNone )
+	    	{
+	    	iLog->Log(_L("CMetaDataDisplay::TestOpenDesL returned: %d"), err);
+	    	}
+		else
+			{
+	    	iLog->Log(_L("CMetaDataDisplay::TestOpenDesL returned no error"));
+	    	}			
+	   }
+	return err;
+	}
+
+
+// -----------------------------------------------------------------------------
+// CMetaDataDisplay::TestMetaDataCountL
+// MetaDataCount test method function.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CMetaDataDisplay::TestMetaDataCountL(CStifItemParser& aItem )
+	{
+	TInt err = KErrNone;
+	TPtrC FileNamePtr;	
+	TInt count;
+	if ( aItem.GetNextString( FileNamePtr ) == KErrNone )
+	   {
+	    TBuf<120> KFrom;
+  		KFrom.Append(KMetaDataDisplay_testPath);
+  		KFrom.Append(FileNamePtr);
+		TFileName FileName = KFrom;
+		iLog->Log(_L("Input file [%S]"), &FileNamePtr);
+		
+		TRAP(err, iMetaData->OpenFileL(FileName));
+		if (!err)
+		   {
+			count = iMetaData->MetaDataCount();
+			TInt expectedEntryCount; 
+			aItem.GetNextInt(expectedEntryCount);
+			if ( count != expectedEntryCount )
+		    	{
+		    	iLog->Log(_L("CMetaDataDisplay::TestMetaDataCountL returned: %d"), count);
+		    	}
+			else
+				{
+		    	iLog->Log(_L("CMetaDataDisplay::TestMetaDataCountL returned no error"));
+		    	}	
+		   }
+	   }
+	return err;
+	}
+
+// -----------------------------------------------------------------------------
+// CMetaDataDisplay::TestMetaDataFieldsL
+// MetaDataFieldsL test method function.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CMetaDataDisplay::TestMetaDataFieldsL( CStifItemParser& aItem )
+	{
+	TInt err = KErrNone;
+	TPtrC FileNamePtr;	
+	TInt count;
+	if ( aItem.GetNextString( FileNamePtr ) == KErrNone )
+	   {
+	    TBuf<120> KFrom;
+  		KFrom.Append(KMetaDataDisplay_testPath);
+  		KFrom.Append(FileNamePtr);
+		TFileName FileName = KFrom;
+		iLog->Log(_L("Input file [%S]"), &FileNamePtr);
+		
+		TRAP(err, iMetaData->OpenFileL(FileName));
+		if (!err)
+		   {
+			count = iMetaData->MetaDataCount();
+			TInt expectedEntryCount; 
+			aItem.GetNextInt(expectedEntryCount);
+			if ( count == expectedEntryCount )
+		    	{
+		    	TInt error = DisplayFields(count, iMetaData);
+                DeleteMetaDataFields();
+                if (!error)
+				    {
+					iLog->Log(_L("Test was successful"));						
+					}
+					else
+					{
+					iLog->Log(_L("Display metadata fields error [%d]"), error);					
+					}                
+                iLog->Log(_L("CMetaDataDisplay::TestMetaDataFieldsL returned no error"));
+		    	}
+			else
+				{
+				iLog->Log(_L("CMetaDataDisplay::TestMetaDataFieldsL returned: %d"), err);
+		    	
+		    	}	
+		   }
+	   }
+	return err;
+	}
+
+
+HBufC8* CMetaDataDisplay::TestGetDescriptor8LC(const TFileName& aFileName)
+		{
+		TInt FileError, SoundSize=0;
+		RFile file;
+		RFs FsSession;
+		HBufC8 *SoundFileDes;
+	
+		iLog->Log(_L("Connecting to File Server Session") );
+		FileError = FsSession.Connect();
+		if (FileError)
+			{
+			iLog->Log(_L("File error FsSession.Connect() (%d)") , FileError);
+			User::LeaveIfError(FileError);
+			}
+	
+		iLog->Log(_L("Opening file to get size") );
+		FileError = file.Open(FsSession, aFileName, EFileStream);
+		if (FileError)
+			{
+			iLog->Log(_L("File error file.Open() (%d)") , FileError);
+			User::LeaveIfError(FileError);
+			}
+		FileError = file.Size(SoundSize);
+		iLog->Log(_L("File Size (%d)") , SoundSize);
+		if (FileError)
+			{
+			iLog->Log(_L("Error getting size") );
+			User::LeaveIfError(FileError);
+			}
+		
+	//	TPtr8 helper;
+	
+		SoundFileDes = HBufC8::NewLC(SoundSize);
+	
+		TPtr8 helper = SoundFileDes->Des();
+		FileError = file.Read( helper );
+		
+		if (FileError)
+		{
+		iLog->Log(_L("Error getting file Descriptor") );
+		User::LeaveIfError(FileError);
+		
+		}
+	
+		iLog->Log(_L("Descriptor length [%d]") , SoundFileDes->Size() );
+		file.Close();
+		FsSession.Close();
+		return SoundFileDes;
+		}
+
+HBufC8* CMetaDataDisplay::GetDescriptor8LC( const TFileName& aFileName,TBool aIsMimeUsed,TInt aSize )
+		{
+		TInt FileError, SoundSize = aSize;
+		HBufC8 *SoundFile;	
+		RFile file;
+		RFs FsSession;
+		if( SoundSize == 0 )
+			{
+			iLog->Log(_L("Connecting to File Server Session") );
+			FileError = FsSession.Connect();
+			if (FileError)
+				{
+				iLog->Log(_L("File error FsSession.Connect() (%d)") , FileError);
+				User::LeaveIfError(FileError);
+				}
+	
+			iLog->Log(_L("Opening file to get size") );
+			FileError = file.Open(FsSession, aFileName, EFileStream);
+			if (FileError)
+				{
+				iLog->Log(_L("File error file.Open() (%d)") , FileError);
+				User::LeaveIfError(FileError);
+				}
+			FileError = file.Size(SoundSize);
+			iLog->Log(_L("File Size (%d)") , SoundSize);
+			if (FileError)
+				{
+				iLog->Log(_L("Error getting size") );
+				User::LeaveIfError(FileError);
+				}
+			file.Close();
+			FsSession.Close();
+			}
+		//	TPtr8 helper;
+		if ( aIsMimeUsed )
+			{
+			_LIT(MP3MIME,"audio/mpeg");
+			SoundFile = HBufC8::NewLC( SoundSize );
+	
+			TPtr8 helper(SoundFile->Des());
+			helper.Append(MP3MIME);
+			}
+		else
+			{
+			SoundFile = HBufC8::NewLC(SoundSize);
+			TPtr8 helper = SoundFile->Des();
+			FileError = file.Read( helper );
+			if (FileError)
+			{
+			iLog->Log(_L("Error getting file Descriptor") );
+			User::LeaveIfError(FileError);
+			}
+			iLog->Log(_L("Descriptor length [%d]") , SoundFile->Size() );
+			}
+		return SoundFile;
+		}
+
+void CMetaDataDisplay::CheckID3Version()
+	{
+	iLog->Log( _L("Checking ID3 version.") );
+	TID3Version ID3Version = iMetaData->ID3Version();
+	switch( ID3Version )
+		{
+		case ENonID3:
+			iLog->Log( _L("ID3 version is ENonID3.") );
+			break;
+		case EID3Version1:
+			iLog->Log( _L("ID3 version is EID3Version1.") );
+			break;
+		case EID3Version2:
+			iLog->Log( _L("ID3 version is EID3Version2.") );
+			break;
+		}
+	iLog->Log( _L("Checking ID3 version end.") );
+	}
+
+
+// -----------------------------------------------------------------------------
+// CMetaDataDisplay::TestOpenDesLWith3paras
+// TestOpenDesLWith3paras test method function.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CMetaDataDisplay::TestOpenDesLWith3paras(CStifItemParser& aItem )
+	{
+	iLog->Log( _L("Entering TestOpenDesLWith3paras.") );
+    TInt err = KErrNone;
+	TPtrC FileNamePtr;
+	TInt isMimeUsed;
+    RArray<TMetaDataFieldId> aWantedFields;
+    TInt wantedField;
+    HBufC8 *SoundFile;
+    HBufC8 *SoundFileDes;
+	if ( aItem.GetNextString( FileNamePtr ) == KErrNone )
+	   {
+	   TBuf<120> KFrom;
+  	   KFrom.Append(KMetaDataDisplay_testPath);
+  	   KFrom.Append(FileNamePtr);
+	   TFileName FileName = KFrom;
+
+	   iLog->Log( _L("Input file [%S]"), &FileNamePtr );
+	   SoundFileDes = TestGetDescriptor8LC( FileName );
+	   if( ( err = aItem.GetNextInt( isMimeUsed ) ) == KErrNone )
+		   {
+		   if( isMimeUsed )
+			   {
+			   SoundFile = GetDescriptor8LC( FileName,ETrue );
+			   }
+		   else
+			   {
+			   SoundFile = GetDescriptor8LC( FileName,EFalse );
+			   }	   
+		   }
+	   else
+		   {
+		   iLog->Log( _L("Bad parameter is passed in.") );
+		   User::Leave( err );
+		   }
+
+	   while( !aItem.GetNextInt( wantedField ) )
+		   {
+		   aWantedFields.Append( iMetaDataFieldID[wantedField] );
+		   }
+	   if( SoundFileDes && SoundFile )
+		   {
+		   //iMetaData->OpenDesL( *SoundFileDes,aWantedFields,*SoundFile );
+		   TRAP( err, iMetaData->OpenDesL( *SoundFileDes,aWantedFields,*SoundFile ) );
+		   }
+	   else
+		   {
+		   err = KBadParameter;
+		   iLog->Log( _L("Pass in bad parameter(s): %d"), err );
+		   User::Leave( err );
+		   }
+	   if ( err != KErrNone )
+		   {
+		   iLog->Log( _L("CMetaDataDisplay::TestOpenDesLWith3paras returned: %d"), err );
+		   }
+	   else
+		   {
+		   iLog->Log( _L("CMetaDataDisplay::TestOpenDesLWith3paras returned no error") );
+		   }
+	   CleanupStack::PopAndDestroy( 2 );//SoundFileDes first ,SoundFile second
+	}
+	iLog->Log( _L("End calling TestOpenDesLWith3paras.") );
+	return err;
+	}
+// -----------------------------------------------------------------------------
+// CMetaDataDisplay::TestOpenDesLWith2paras
+// TestOpenDesLWith2paras test method function.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CMetaDataDisplay::TestOpenDesLWith2paras(CStifItemParser& aItem )
+	{
+	iLog->Log( _L("Entering TestOpenDesLWith2paras.") );
+    TInt err = KErrNone;
+	TPtrC FileNamePtr;
+	TInt isMimeUsed;
+    HBufC8 *SoundFile;
+    HBufC8 *SoundFileDes;
+	if ( aItem.GetNextString( FileNamePtr ) == KErrNone )
+	   {
+	   TBuf<120> KFrom;
+ 	   KFrom.Append(KMetaDataDisplay_testPath);
+ 	   KFrom.Append(FileNamePtr);
+   	   TFileName FileName = KFrom;
+	   iLog->Log( _L("Input file [%S]"), &FileNamePtr );
+	   SoundFileDes = TestGetDescriptor8LC( FileName );
+	   if( ( err = aItem.GetNextInt( isMimeUsed ) ) == KErrNone )
+		   {
+		   if( isMimeUsed )
+			   {
+			   SoundFile = GetDescriptor8LC( FileName,ETrue );
+			   }
+		   else
+			   {
+			   SoundFile = GetDescriptor8LC( FileName,EFalse );
+			   }	   
+		   }
+	   else
+		   {
+		   iLog->Log( _L("Bad parameter is passed in.") );
+		   User::Leave( err );
+		   }
+	   
+	   if( SoundFileDes && SoundFile )
+		   {
+		   //iMetaData->OpenDesL( *SoundFileDes,*SoundFile );
+		   TRAP( err, iMetaData->OpenDesL( *SoundFileDes,*SoundFile ) );
+		   }
+	   else
+		   {
+		   err = KBadParameter;
+		   iLog->Log( _L("Pass in bad parameter(s): %d"), err );
+		   User::Leave( err );
+		   }
+	   if ( err != KErrNone )
+		   {
+		   iLog->Log( _L("CMetaDataDisplay::TestOpenDesLWith2paras returned: %d"), err );
+		   }
+	   else
+		   {
+		   iLog->Log( _L("CMetaDataDisplay::TestOpenDesLWith2paras returned no error") );
+		   }
+	   CleanupStack::PopAndDestroy( 2 );//SoundFileDes first ,SoundFile second
+	}
+	iLog->Log( _L("End calling TestOpenDesLWith2paras.") );
+	return err;
+	}
+
+// -----------------------------------------------------------------------------
+// CMetaDataDisplay::TestOpenFileLWith3paras
+// TestOpenFileLWith3paras test method function.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CMetaDataDisplay::TestOpenFileLWith3paras(CStifItemParser& aItem )
+	{
+	iLog->Log( _L("Entering TestOpenFileLWith3paras.") );
+    TInt err = KErrNone;
+	TPtrC FileNamePtr;
+	TInt isMimeUsed;
+	TInt isCheckID3Version( 0 );	
+    RArray<TMetaDataFieldId> aWantedFields;
+    TInt wantedField;
+    HBufC8 *SoundFile;
+	if ( aItem.GetNextString( FileNamePtr ) == KErrNone )
+	   {
+	   TBuf<120> KFrom;
+ 	   KFrom.Append(KMetaDataDisplay_testPath);
+ 	   KFrom.Append(FileNamePtr);
+   	   TFileName FileName = KFrom;
+	   iLog->Log( _L("Input file [%S]"), &FileNamePtr );
+	   
+	   RFs fs;
+       RFile file;
+       User::LeaveIfError(fs.Connect());
+       fs.ShareProtected();
+       User::LeaveIfError(file.Open( fs, FileName, EFileRead));
+       TInt SoundSize;
+       TInt FileError = file.Size(SoundSize);
+       iLog->Log(_L("File Size (%d)") , SoundSize);
+       if( FileError )
+    	   {
+    	   iLog->Log( _L("Error getting size") );
+    	   User::LeaveIfError( FileError );
+    	   }
+	   if( ( err = aItem.GetNextInt( isMimeUsed ) ) == KErrNone )
+		   {
+		   if( isMimeUsed )
+			   {
+			   SoundFile = GetDescriptor8LC( FileName,ETrue,SoundSize );
+			   }
+		   else
+			   {
+			   SoundFile = GetDescriptor8LC( FileName,EFalse,SoundSize );
+			   }	   
+		   }
+	   else
+		   {
+		   iLog->Log( _L("Bad parameter is passed in.") );
+		   User::Leave( err );
+		   }
+	   
+	   aItem.GetNextInt( isCheckID3Version );
+	   
+	   while( !aItem.GetNextInt( wantedField ) )
+		   {
+		   aWantedFields.Append( iMetaDataFieldID[wantedField] );
+		   }
+	   if( SoundFile )
+		   {
+		   //iMetaData->OpenFileL( file,aWantedFields,*SoundFile );
+		   TRAP( err, iMetaData->OpenFileL( file,aWantedFields,*SoundFile ) );
+		   if( isCheckID3Version )
+			   {//TInt isCheckID3Version( 0 );	
+			   CheckID3Version();
+			   }
+		   }
+	   else
+		   {
+		   err = KBadParameter;
+		   iLog->Log( _L("Pass in bad parameter(s): %d"), err );
+		   User::Leave( err );
+		   }
+	   if ( err != KErrNone )
+		   {
+		   iLog->Log( _L("CMetaDataDisplay::TestOpenFileLWith3paras returned: %d"), err );
+		   }
+	   else
+		   {
+		   iLog->Log( _L("CMetaDataDisplay::TestOpenFileLWith3paras returned no error") );
+		   }
+	   CleanupStack::PopAndDestroy( SoundFile );
+	   file.Close();
+	   fs.Close();
+	}
+	iLog->Log( _L("End calling TestOpenFileLWith3paras.") );
+	return err;
+	}
+// -----------------------------------------------------------------------------
+// CMetaDataDisplay::TestOpenFileLWith2paras
+// TestOpenFileLWith2paras test method function.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CMetaDataDisplay::TestOpenFileLWith2paras(CStifItemParser& aItem )
+	{
+	iLog->Log( _L("Entering TestOpenFileLWith2paras.") );
+    TInt err = KErrNone;
+	TPtrC FileNamePtr;
+	TInt isMimeUsed;
+	TInt isCheckID3Version( 0 );	
+
+    HBufC8 *SoundFile;
+	if ( aItem.GetNextString( FileNamePtr ) == KErrNone )
+	   {
+	   TBuf<120> KFrom;
+ 	   KFrom.Append(KMetaDataDisplay_testPath);
+ 	   KFrom.Append(FileNamePtr);
+   	   TFileName FileName = KFrom;
+	   iLog->Log( _L("Input file [%S]"), &FileNamePtr );
+	   
+	   RFs fs;
+       RFile file;
+       User::LeaveIfError(fs.Connect());
+       //fs.ShareProtected();
+       User::LeaveIfError(file.Open( fs, FileName, EFileRead) );
+       TInt SoundSize;
+       TInt FileError = file.Size(SoundSize);
+       iLog->Log(_L("File Size (%d)") , SoundSize);
+       if( FileError )
+    	   {
+    	   iLog->Log( _L("Error getting size") );
+    	   User::LeaveIfError( FileError );
+    	   }
+	   if( ( err = aItem.GetNextInt( isMimeUsed ) ) == KErrNone )
+		   {
+		   if( isMimeUsed )
+			   {
+			   SoundFile = GetDescriptor8LC( FileName,ETrue,SoundSize );
+			   }
+		   else
+			   {
+			   SoundFile = GetDescriptor8LC( FileName,EFalse,SoundSize );
+			   }	   
+		   }
+	   else
+		   {
+		   iLog->Log( _L("Bad parameter is passed in.") );
+		   User::Leave( err );
+		   }
+	   
+	   aItem.GetNextInt( isCheckID3Version );
+	   
+	   if( SoundFile )
+		   {
+		   //iMetaData->OpenFileL( file,*SoundFile );
+		   TRAP( err, iMetaData->OpenFileL( file,*SoundFile ) );
+		   if( isCheckID3Version )
+			   {//TInt isCheckID3Version( 0 );	
+			   CheckID3Version();
+			   }
+		   }
+	   else
+		   {
+		   err = KBadParameter;
+		   iLog->Log( _L("Pass in bad parameter(s): %d"), err );
+		   User::Leave( err );
+		   }
+	   if ( err != KErrNone )
+		   {
+		   iLog->Log( _L("CMetaDataDisplay::TestOpenFileLWith2paras returned: %d"), err );
+		   }
+	   else
+		   {
+		   iLog->Log( _L("CMetaDataDisplay::TestOpenFileLWith2paras returned no error") );
+		   }
+	   CleanupStack::PopAndDestroy( SoundFile );
+	   file.Close();
+	   fs.Close();
+	   
+	}
+	iLog->Log( _L("End calling TestOpenFileLWith2paras.") );
+	return err;
+	}
+// -----------------------------------------------------------------------------
+// CMetaDataDisplay::TestOpenFileLFNFeildsMime
+// TestOpenFileLFNFeildsMime test method function.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CMetaDataDisplay::TestOpenFileLFNFeildsMime(CStifItemParser& aItem )
+	{
+	iLog->Log( _L("Entering TestOpenFileLFNFeildsMime.") );
+    TInt err = KErrNone;
+	TPtrC FileNamePtr;
+	TInt isMimeUsed;
+	TInt isCheckID3Version( 0 );	
+    RArray<TMetaDataFieldId> aWantedFields;
+    TInt wantedField;
+    HBufC8 *SoundFile;
+
+	if ( aItem.GetNextString( FileNamePtr ) == KErrNone )
+	   {
+	   TBuf<120> KFrom;
+ 	   KFrom.Append(KMetaDataDisplay_testPath);
+ 	   KFrom.Append(FileNamePtr);
+   	   TFileName FileName = KFrom;
+	   iLog->Log( _L("Input file [%S]"), &FileNamePtr );
+
+	   if( ( err = aItem.GetNextInt( isMimeUsed ) ) == KErrNone )
+		   {
+		   if( isMimeUsed )
+			   {
+			   SoundFile = GetDescriptor8LC( FileName,ETrue );
+			   }
+		   else
+			   {
+			   SoundFile = GetDescriptor8LC( FileName,EFalse );
+			   }	   
+		   }
+	   else
+		   {
+		   iLog->Log( _L("Bad parameter is passed in.") );
+		   User::Leave( err );
+		   }
+	   
+	   aItem.GetNextInt( isCheckID3Version );
+	   
+	   while( !aItem.GetNextInt( wantedField ) )
+		   {
+		   aWantedFields.Append( iMetaDataFieldID[wantedField] );
+		   }
+	   if( SoundFile )
+		   {
+		   //iMetaData->OpenFileL( FileName,aWantedFields,*SoundFile );
+		   TRAP( err, iMetaData->OpenFileL( FileName,aWantedFields,*SoundFile ) );
+		   if( isCheckID3Version )
+			   {//TInt isCheckID3Version( 0 );	
+			   CheckID3Version();
+			   }
+		   }
+	   else
+		   {
+		   err = KBadParameter;
+		   iLog->Log( _L("Pass in bad parameter(s): %d"), err );
+		   User::Leave( err );
+		   }
+	   if ( err != KErrNone )
+		   {
+		   iLog->Log( _L("CMetaDataDisplay::TestOpenFileLFNFeildsMime returned: %d"), err );
+		   }
+	   else
+		   {
+		   iLog->Log( _L("CMetaDataDisplay::TestOpenFileLFNFeildsMime returned no error") );
+		   }
+	   CleanupStack::PopAndDestroy( SoundFile );//SoundFile
+	}
+	iLog->Log( _L("End calling TestOpenFileLFNFeildsMime.") );
+	return err;
+	}
+// -----------------------------------------------------------------------------
+// CMetaDataDisplay::TestOpenFileLFNMime
+// TestOpenFileLFNMime test method function.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CMetaDataDisplay::TestOpenFileLFNMime(CStifItemParser& aItem )
+	{
+	iLog->Log( _L("Entering TestOpenFileLFNMime.") );
+    TInt err = KErrNone;
+	TPtrC FileNamePtr;
+	TInt isMimeUsed;
+	TInt isCheckID3Version( 0 );	
+    HBufC8 *SoundFile;
+
+	if ( aItem.GetNextString( FileNamePtr ) == KErrNone )
+	   {
+	   TBuf<120> KFrom;
+ 	   KFrom.Append(KMetaDataDisplay_testPath);
+ 	   KFrom.Append(FileNamePtr);
+   	   TFileName FileName = KFrom;
+	   iLog->Log( _L("Input file [%S]"), &FileNamePtr );
+
+	   if( ( err = aItem.GetNextInt( isMimeUsed ) ) == KErrNone )
+		   {
+		   if( isMimeUsed )
+			   {
+			   SoundFile = GetDescriptor8LC( FileName,ETrue );
+			   }
+		   else
+			   {
+			   SoundFile = GetDescriptor8LC( FileName,EFalse );
+			   }	   
+		   }
+	   else
+		   {
+		   iLog->Log( _L("Bad parameter is passed in.") );
+		   User::Leave( err );
+		   }
+	   aItem.GetNextInt( isCheckID3Version );
+	   if( SoundFile )
+		   {
+		   //iMetaData->OpenFileL( FileName,*SoundFile );
+		   TRAP( err, iMetaData->OpenFileL( FileName,*SoundFile ) );
+		   if( isCheckID3Version )
+			   {//TInt isCheckID3Version( 0 );	
+			   CheckID3Version();
+			   }
+		   }
+	   else
+		   {
+		   err = KBadParameter;
+		   iLog->Log( _L("Pass in bad parameter(s): %d"), err );
+		   User::Leave( err );
+		   }
+	   if ( err != KErrNone )
+		   {
+		   iLog->Log( _L("CMetaDataDisplay::TestOpenFileLFNMime returned: %d"), err );
+		   }
+	   else
+		   {
+		   iLog->Log( _L("CMetaDataDisplay::TestOpenFileLFNMime returned no error") );
+		   }
+	   CleanupStack::PopAndDestroy( SoundFile );//SoundFile
+	}
+	iLog->Log( _L("End calling TestOpenFileLFNMime.") );
+	return err;
+	}
+// -----------------------------------------------------------------------------
+// CMetaDataDisplay::TestID3Version
+// TestID3Version test method function.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CMetaDataDisplay::TestID3Version(CStifItemParser& aItem )
+	{
+	iLog->Log( _L("Entering TestID3Version.") );
+    TInt err = KErrNone;
+	TPtrC FileNamePtr;
+	TInt isMimeUsed;
+	TInt isCheckID3Version( 0 );
+    HBufC8 *SoundFile;
+
+	if ( aItem.GetNextString( FileNamePtr ) == KErrNone )
+	   {
+	   TBuf<120> KFrom;
+ 	   KFrom.Append(KMetaDataDisplay_testPath);
+ 	   KFrom.Append(FileNamePtr);
+   	   TFileName FileName = KFrom;
+	   iLog->Log( _L("Input file [%S]"), &FileNamePtr );
+
+	   if( ( err = aItem.GetNextInt( isMimeUsed ) ) == KErrNone )
+		   {
+		   if( isMimeUsed )
+			   {
+			   SoundFile = GetDescriptor8LC( FileName,ETrue );
+			   }
+		   else
+			   {
+			   SoundFile = GetDescriptor8LC( FileName,EFalse );
+			   }	   
+		   }
+	   else
+		   {
+		   iLog->Log( _L("Bad parameter is passed in.") );
+		   User::Leave( err );
+		   }
+	   aItem.GetNextInt( isCheckID3Version );
+	   if( SoundFile )
+		   {
+		   iMetaData->OpenFileL( FileName,*SoundFile );
+		   if( isCheckID3Version )
+			   {//TInt isCheckID3Version( 0 );	
+			   CheckID3Version();
+			   }
+		   }
+	   else
+		   {
+		   err = KBadParameter;
+		   iLog->Log( _L("Pass in bad parameter(s): %d"), err );
+		   User::Leave( err );
+		   }
+	   if ( err != KErrNone )
+		   {
+		   iLog->Log( _L("CMetaDataDisplay::TestID3Version returned: %d"), err );
+		   }
+	   else
+		   {
+		   iLog->Log( _L("CMetaDataDisplay::TestID3Version returned no error") );
+		   }
+	   CleanupStack::PopAndDestroy( SoundFile );//SoundFile
+	}
+	iLog->Log( _L("End calling TestID3Version.") );
+	return err;
+	}
+
+// -----------------------------------------------------------------------------
+// CMetaDataDisplay::TestResetL
+// ResetL test method function.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CMetaDataDisplay::TestResetL(CStifItemParser& /*aItem*/ )
+	{
+	iLog->Log( _L("Entering TestResetL.") );
+	TInt err = KErrNone;
+	TRAP( err,iMetaData->ResetL() );
+	if( err == KErrNone )
+		{
+		iLog->Log( _L("CMetaDataDisplay::TestResetL returned no error") );
+		}
+	else
+		{
+		iLog->Log( _L("CMetaDataDisplay::TestResetL returned: %d"), err );
+		}
+	iLog->Log( _L("End calling TestResetL.") );
+	return err;
+	}
+
+
+void CMetaDataDisplay::ProcessMetaDataL( CMetaDataUtility *metaDataUtility, 
+								        /*CMetaDataUtilityTestAppFileDetails* aFileDetails,*/
+								        TInt error )
+	{//TODO need to implement the code here
+	if ( error != KErrNone ) 
+        { 
+        // there's a problem    
+	    iLog->Log( _L("Pass in bad parameter(s): %d"), error );
+	    User::Leave( error );
+        } 
+
+    TInt count = metaDataUtility->MetaDataCount(); 
+    
+    for(TInt i = 0; i < count; i++) 
+       { 
+        TMetaDataFieldId fieldId; 
+        
+        TPtrC field = metaDataUtility->MetaDataFieldsL().At( i, fieldId ); 
+        if( field != KNullDesC ) 
+            { 
+            switch( fieldId ) 
+                { 
+            	case EMetaDataSongTitle:
+                    {
+                   // SetFileDetailL( aFileDetails->iTitle, field );
+                    iLog->Log( _L("CMetaDataDisplay::ProcessMetaDataL returned: %d"), error );
+                    break;
+                    }
+                case EMetaDataArtist:
+                    {
+                  //  SetFileDetailL( aFileDetails->iArtist, field );
+                    iLog->Log( _L("CMetaDataDisplay::ProcessMetaDataL returned: %d"), error );
+                    break;
+                    }
+                case EMetaDataAlbum:
+                    {
+                  //  SetFileDetailL( aFileDetails->iAlbum, field );
+                    iLog->Log( _L("CMetaDataDisplay::ProcessMetaDataL returned: %d"), error );
+                    break;
+                    }
+                case EMetaDataYear:
+                    {
+                  //  SetFileDetailL( aFileDetails->iYear, field );
+                    iLog->Log( _L("CMetaDataDisplay::ProcessMetaDataL returned: %d"), error );
+                    break;
+                    }
+                case EMetaDataComment:
+                    {
+                  //  SetFileDetailL( aFileDetails->iComment, field );
+                    iLog->Log( _L("CMetaDataDisplay::ProcessMetaDataL returned: %d"), error );
+                    break;
+                    }
+                case EMetaDataAlbumTrack:
+                    {
+                  //  SetFileDetailL( aFileDetails->iAlbumTrack, field );
+                    iLog->Log( _L("CMetaDataDisplay::ProcessMetaDataL returned: %d"), error );
+                    break;
+                    }
+                case EMetaDataGenre:
+                    {
+                  //  SetFileDetailL( aFileDetails->iGenre, field );
+                    iLog->Log( _L("CMetaDataDisplay::ProcessMetaDataL returned: %d"), error );
+                    break;
+                    }
+                case EMetaDataComposer:
+                    {
+                  //  SetFileDetailL( aFileDetails->iComposer, field );
+                    iLog->Log( _L("CMetaDataDisplay::ProcessMetaDataL returned: %d"), error );
+                    break;
+                    }
+                case EMetaDataCopyright:
+                    {
+                 //   SetFileDetailL( aFileDetails->iCopyright, field );
+                    iLog->Log( _L("CMetaDataDisplay::ProcessMetaDataL returned: %d"), error );
+                    break;
+                    }
+                case EMetaDataOriginalArtist:
+                    {
+                //    SetFileDetailL( aFileDetails->iOriginalArtist, field );
+                    iLog->Log( _L("CMetaDataDisplay::ProcessMetaDataL returned: %d"), error );
+                    break;
+                    }
+                case EMetaDataUserUrl:
+                case EMetaDataUrl:     
+                    {
+                //    SetFileDetailL( aFileDetails->iAudioFileWebPage, field );
+                    iLog->Log( _L("CMetaDataDisplay::ProcessMetaDataL returned: %d"), error );
+                    break;
+                    }
+               	case EMetaDataJpeg:
+	               	{
+	                //SetFileDetailL( aFileDetails->iAlbumArt, field );
+	                iLog->Log( _L("CMetaDataDisplay::ProcessMetaDataL returned: %d"), error );
+	               	break;	
+	               	}
+				case EMetaDataVendor:
+					{
+				//	SetFileDetailL( aFileDetails->iVendor, field );
+					iLog->Log( _L("CMetaDataDisplay::ProcessMetaDataL returned: %d"), error );
+                    break;	
+					}
+                case EMetaDataRating:
+                  	{
+                //  SetFileDetailL( aFileDetails->iRating, field );
+                   	iLog->Log( _L("CMetaDataDisplay::ProcessMetaDataL returned: %d"), error );
+					break;	
+                   	}
+                case EMetaDataDuration:
+	                {
+	            //    SetFileDetailL( aFileDetails->iComposer, field );
+	                iLog->Log( _L("CMetaDataDisplay::ProcessMetaDataL returned: %d"), error );
+                    break;	
+	                }
+	            default:
+                    {
+                    // nothing to do
+                    break;
+                    }
+                } 
+            }
+        }
+	}
+
+
+// -----------------------------------------------------------------------------
+// CMetaDataDisplay::TestInitChunkData
+// InitChunkData test method function.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CMetaDataDisplay::TestInitChunkData(CStifItemParser& aItem )
+	{
+	iLog->Log( _L("Entering TestInitChunkData.") );
+    TInt err = KErrNone;
+	TPtrC FileNamePtr;
+	TInt isMimeUsed;   
+    HBufC8 *SoundFile;
+    HBufC8 *SoundFileDes;
+    
+	if ( aItem.GetNextString( FileNamePtr ) == KErrNone )
+	   {
+	   TBuf<120> KFrom;
+  	   KFrom.Append(KMetaDataDisplay_testPath);
+  	   KFrom.Append(FileNamePtr);
+	   TFileName FileName = KFrom;
+
+	   iLog->Log( _L("Input file [%S]"), &FileNamePtr );
+	   SoundFileDes = TestGetDescriptor8LC( FileName );
+	   if( ( err = aItem.GetNextInt( isMimeUsed ) ) == KErrNone )
+		   {
+		   if( isMimeUsed )
+			   {
+			   SoundFile = GetDescriptor8LC( FileName,ETrue );
+			   }
+		   else
+			   {
+			   SoundFile = GetDescriptor8LC( FileName,EFalse );
+			   }	   
+		   }
+	   else
+		   {
+		   iLog->Log( _L("Bad parameter is passed in.") );
+		   User::Leave( err );
+		   }
+
+	   if( SoundFileDes && SoundFile )
+		   {		  
+		   err = iChunkDataTester->TestInitChunkDataAPI( *SoundFile );
+		   
+           if( err == KBadParameter )
+               {
+		       iLog->Log( _L("Pass in bad parameter(s): %d"), err );
+		       User::Leave( err );
+		       }
+		   else if ( err != KErrNone )
+		       {
+		       iLog->Log( _L("CMetaDataDisplay::TestInitChunkData returned: %d"), err );
+		       User::Leave( err );
+		       }
+	       else
+		       {
+		       iLog->Log( _L("CMetaDataDisplay::TestInitChunkData returned no error") );
+		       }
+		       
+		   //[Arnel and Flo]
+		   //close the metadata utility and delete the tester object          
+           //Add CMetaDataDisplay::DestructChunkDataTester to delete the tester object
+           //and call the close and delete function in cfg file
+		   }
+		   
+	   CleanupStack::PopAndDestroy( 2 );
+	   
+	}
+	iLog->Log( _L("End calling TestInitChunkData.") );
+	return err;
+	}
+
+// -----------------------------------------------------------------------------
+// CMetaDataDisplay::TestProcessChunkData
+// ProcessChunkData test method function.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CMetaDataDisplay::TestProcessChunkData(CStifItemParser& aItem )
+	{
+	iLog->Log( _L("Entering TestProcessChunkData.") );
+    TInt err = KErrNone;
+	TPtrC FileNamePtr;
+	TInt isMimeUsed;   
+    HBufC8 *SoundFile;
+    HBufC8 *SoundFileDes;
+	if ( aItem.GetNextString( FileNamePtr ) == KErrNone )
+	   {
+	   TBuf<120> KFrom;
+  	   KFrom.Append(KMetaDataDisplay_testPath);
+  	   KFrom.Append(FileNamePtr);
+	   TFileName FileName = KFrom;
+
+	   iLog->Log( _L("Input file [%S]"), &FileNamePtr );
+	   SoundFileDes = TestGetDescriptor8LC( FileName );
+	   if( ( err = aItem.GetNextInt( isMimeUsed ) ) == KErrNone )
+		   {
+		   if( isMimeUsed )
+			   {
+			   SoundFile = GetDescriptor8LC( FileName,ETrue );
+			   }
+		   else
+			   {
+			   SoundFile = GetDescriptor8LC( FileName,EFalse );
+			   }	   
+		   }
+	   else
+		   {
+		   iLog->Log( _L("Bad parameter is passed in.") );
+		   User::Leave( err );
+		   }
+
+	   if( SoundFileDes && SoundFile )
+		   {
+		   err = iChunkDataTester->TestInitChunkDataAPI( *SoundFile );
+		   if ( err == KErrNone ) 
+	           { 
+	           // error can be KErrInvalidArg (e.g., chunk size too large) 
+	           //[Arnel and Flo]
+	           // This method will also test parsing when the metadatautility reaches a
+	           // state where the data is ready to be parsed.
+	           err = iChunkDataTester->TestProcessChunkDataAPI( FileName ); 
+	           } 
+        
+	       // setup for a callback from the tester 
+		   iChunkDataTester->WaitToProcessMetaData( this ); 	
+		   
+		   //[Arnel and Flo]
+		   //In the callback, maybe you should close the metadata utility and delete the tester object?     
+		   }
+	   
+	   if ( err == KBadParameter )
+		   {		  
+		   iLog->Log( _L("Pass in bad parameter(s): %d"), err );
+		   User::Leave( err );
+		   }
+	   else if ( err != KErrNone )
+		   {
+		   iLog->Log( _L("CMetaDataDisplay::TestProcessChunkData returned: %d"), err );
+		   User::Leave( err );
+		   }
+	   else
+		   {
+		   iLog->Log( _L("CMetaDataDisplay::TestProcessChunkData returned no error") );
+		   }
+		   
+	   CleanupStack::PopAndDestroy( 2 );
+	   
+		   //[Arnel and Flo]
+		   //close the metadata utility and delete the tester object 	   
+   		   //Add CMetaDataDisplay::DestructChunkDataTester to delete the tester object
+           //and call the close and delete function in cfg file
+	}
+	iLog->Log( _L("End calling TestProcessChunkData.") );
+	return err;
+	}
+
+// -----------------------------------------------------------------------------
+// CMetaDataDisplay::TestParseChunkData
+// ParseChunkData test method function.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+//[Arnel and Flo]
+// This can be removed since parsing is also tested by TestProcessChunkData().
+
+
+// -----------------------------------------------------------------------------
+// CMetaDataDisplay::TestIsNotChunkDataMode
+// TestIsChunkDataModeAPI "not in chunk data mode" test method function.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CMetaDataDisplay::TestIsNotChunkDataMode(CStifItemParser& /*aItem*/ )
+	{
+	iLog->Log( _L("---------->Entering TestIsNotChunkDataMode") );
+	TBool isChunkDataMode = iChunkDataTester->TestIsChunkDataModeAPI();		
+	//[Flo and Arnel]
+	// The result should be "not in chunk data mode" at this point since we have not
+	// done the Init() yet.
+	
+	// The Init() must be called before calling TestIsChunkDataModeAPI()
+	// so we separate two test cases to verify whether it is in Chunk Data mode
+	if( isChunkDataMode )
+		{
+		iLog->Log( _L("It is in Chunk Data mode") );
+		User::Leave(-1);
+		}
+	else
+		{
+		iLog->Log( _L("It is not in Chunk Data mode") );
+		} 		
+	iLog->Log( _L("<----------End of TestIsNotChunkDataMode") );
+	
+		   //[Arnel and Flo]
+		   //close the metadata utility and delete the tester object 
+		   //Add CMetaDataDisplay::DestructChunkDataTester to delete the tester object
+           //and call the close and delete function in cfg file
+	return KErrNone;
+	}
+
+// -----------------------------------------------------------------------------
+// CMetaDataDisplay::TestIsChunkDataMode
+// TestIsChunkDataModeAPI "in chunk data mode" test method function.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CMetaDataDisplay::TestIsChunkDataMode(CStifItemParser& /*aItem*/ )
+	{
+	iLog->Log( _L("---------->Entering TestIsChunkDataMode") );
+	TBool isChunkDataMode = iChunkDataTester->TestIsChunkDataModeAPI();
+	
+    //[Flo and Arnel]
+    // Now, let's do the init and the result should be "in chunk data mode".
+    // InitChunkData(); // TODO: implement this
+	
+	// The Init() must be called before calling TestIsChunkDataModeAPI()
+	// so we separate two test cases to verify whether it is in Chunk Data mode
+	// and the funcation init() is called in cfg file
+	if( isChunkDataMode )
+		{
+		iLog->Log( _L("It is in Chunk Data mode") );
+		}
+	else
+		{
+		iLog->Log( _L("It is not in Chunk Data mode") );
+		User::Leave(-1);
+		}        
+    		
+	iLog->Log( _L("<----------End of TestIsChunkDataMode") );
+	
+		   //[Arnel and Flo]
+		   //close the metadata utility and delete the tester object 
+		   //Add CMetaDataDisplay::DestructChunkDataTester to delete the tester object
+           //and call the close and delete function in cfg file
+	return KErrNone;
+	}
+
+
+// -----------------------------------------------------------------------------
+// CMetaDataDisplay::TestCloseChunkData
+// CloseChunkData test method function.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CMetaDataDisplay::TestCloseChunkData(CStifItemParser& /*aItem*/ )
+	{
+	iLog->Log( _L("---------->Entering TestCloseChunkData") );
+	iChunkDataTester->TestCloseChunkDataAPI();
+	iLog->Log( _L("<----------End of TestCloseChunkData") );
+	return KErrNone;
+	}
+
+// -----------------------------------------------------------------------------
+// CMetaDataDisplay::CreateChunkDataTester
+// CreateChunkDataTester test method function.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CMetaDataDisplay::CreateChunkDataTester( CStifItemParser& /*aItem*/ )
+	{
+	iLog->Log( _L("-------->Create ChunkDataAPITester...") );
+	TInt result = KErrNone;	
+	TRAP( result,iChunkDataTester = CChunkDataAPITester::NewL() );
+	if( result == KErrNone )
+		{
+		iLog->Log( _L("Successfully create ChunkDataAPITester.") );
+		}
+	else
+		{
+		iLog->Log( _L("Fail to create ChunkDataAPITester.Error %d return."),result );
+		}
+	iLog->Log( _L("<--------The end of creation of ChunkDataAPITester.") );
+	return result;
+	}
+
+// -----------------------------------------------------------------------------
+// CMetaDataDisplay::DestructChunkDataTester
+// Delete the tester object test method function.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CMetaDataDisplay::DestructChunkDataTester( CStifItemParser& /*aItem*/ )
+	{
+	TInt err = KErrNone;
+	delete iChunkDataTester;
+	iChunkDataTester = NULL;
+	iLog->Log( _L("CMetaDataDisplay::DestructChunkDataTester testing ~CChunkDataAPITester end err=%d"), err);
+	return err;
+	}
+
+
+/******************************************************************************************
+*
+*                      Test functions for CMetaDataFieldContainer
+*
+******************************************************************************************/
+// -----------------------------------------------------------------------------
+// CMetaDataDisplay::GetContainerViaMetaDataUtility
+// CloseChunkData test method function.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CMetaDataDisplay::GetContainerViaMetaDataUtility( CStifItemParser& /*aItem*/ )
+	{
+	iLog->Log( _L("") );//A blank line makes the log file look better
+	iLog->Log( _L("Entering GetContainerViaMetaDataUtility-->") );
+	TInt result( 0 );
+	//iContainer  = &iMetaData->MetaDataFieldsL();
+	TRAP( result,iContainer  = &iMetaData->MetaDataFieldsL() );
+	if( result == KErrNone )
+		{
+		iLog->Log( _L("Succeeded to get CMetaDataFieldContainer.") );
+		}
+	else
+		{
+		iLog->Log( _L("Failed to create CMetaDataFieldContainer.Error %d returns."),result );
+		}
+	iLog->Log( _L("<--Out of GetContainerViaMetaDataUtility.") );
+	return result;
+	}
+// -----------------------------------------------------------------------------
+// CMetaDataDisplay::ContainerCount
+// CloseChunkData test method function.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CMetaDataDisplay::ContainerCount( CStifItemParser& /*aItem*/ )
+	{
+	iLog->Log( _L("") );//A blank line makes the log file look better
+	iLog->Log( _L("Entering ContainerCount-->") );
+	TInt result( 0 );
+	TInt count = iContainer->Count();
+	iLog->Log( _L("The number of meta data fields is %d."),count );
+	iLog->Log( _L("<--Out of ContainerCount.") );
+	return result;
+	}
+// -----------------------------------------------------------------------------
+// CMetaDataDisplay::ContainerField
+// CloseChunkData test method function.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CMetaDataDisplay::ContainerField( CStifItemParser& aItem )
+	{
+	iLog->Log( _L("") );//A blank line makes the log file look better
+	iLog->Log( _L("Entering ContainerField-->") );
+	TInt result( 0 );
+	TInt fieldId;
+	while( aItem.GetNextInt( fieldId ) == KErrNone )
+		{
+		if( ( 0 <= fieldId ) && ( fieldId <= 19) )
+			{
+			TMetaDataFieldId tempFieldId = (TMetaDataFieldId)fieldId;
+			TPtrC field = iContainer->Field( tempFieldId );
+			switch( tempFieldId )
+				{//There are 19 cases to be processed,I am not gonna to process all of them
+				case EUnknownMetaDataField:
+					{
+					if( field == KNullDesC() )
+						{
+						iLog->Log( _L("The content of meta data field EUnknownMetaDataField is NULL.") );
+						}
+					else
+						{
+						iLog->Log( _L("The content of meta data field EUnknownMetaDataField is [%S]."),field.Alloc() );
+						}
+					break;
+					}
+					
+				case EMetaDataSongTitle:
+					{
+					if( field == KNullDesC() )
+						{
+						iLog->Log( _L("The content of meta data field EMetaDataSongTitle is NULL.") );
+						}
+					else
+						{
+						iLog->Log( _L("The content of meta data field EMetaDataSongTitle is [%S]."),field.Alloc() );
+						}
+					break;
+					}
+					
+				case EMetaDataArtist:
+					{
+					if( field == KNullDesC() )
+						{
+						iLog->Log( _L("The content of meta data field EMetaDataArtist is NULL.") );
+						}
+					else
+						{
+						iLog->Log( _L("The content of meta data field EMetaDataArtist is [%S]."),field.Alloc() );
+						}
+					break;
+					}
+					
+				case EMetaDataAlbum:
+					{
+					if( field == KNullDesC() )
+						{
+						iLog->Log( _L("The content of meta data field EMetaDataAlbum is NULL.") );
+						}
+					else
+						{
+						iLog->Log( _L("The content of meta data field EMetaDataAlbum is [%S]."),field.Alloc() );
+						}
+					break;
+					}
+					
+				case EMetaDataDuration:
+					{
+					if( field == KNullDesC() )
+						{
+						iLog->Log( _L("The content of meta data field EMetaDataDuration is NULL.") );
+						}
+					else
+						{
+						iLog->Log( _L("The content of meta data field EMetaDataDuration is [%S]."),field.Alloc() );
+						}
+					break;
+					}
+					
+				case EMetaDataDate:
+					{
+					if( field == KNullDesC() )
+						{
+						iLog->Log( _L("The content of meta data field EMetaDataDate is NULL.") );
+						}
+					else
+						{
+						iLog->Log( _L("The content of meta data field EMetaDataDate is [%S]."),field.Alloc() );
+						}
+					break;
+					}
+					
+				default:
+					{
+					if( field == KNullDesC() )
+						{
+						iLog->Log( _L("The content of meta data field [%d] is NULL."),tempFieldId );
+						}
+					else
+						{
+						iLog->Log( _L("The content of meta data field [%d] is [%S]."),field.Alloc() );
+						}
+					break;
+					}
+				}
+			}
+		else
+			{
+			result= KBadParameter;
+			iLog->Log( _L("<--The meta data field Id you input is out of bound( 0 <= Id <= 19 ).User leaves here.") );
+			User::Leave( KBadParameter );
+			}
+		}
+	iLog->Log( _L("<--Out of ContainerField.") );
+	return result;
+	}
+// -----------------------------------------------------------------------------
+// CMetaDataDisplay::ContainerField8
+// CloseChunkData test method function.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CMetaDataDisplay::ContainerField8( CStifItemParser& aItem )
+	{
+	iLog->Log( _L("") );//A blank line makes the log file look better
+	iLog->Log( _L("Entering ContainerField8-->") );
+	TInt result( 0 );
+	TInt fieldId;
+	while( aItem.GetNextInt( fieldId ) == KErrNone )
+		{
+		if( ( 0 <= fieldId ) && ( fieldId <= 19 ) )
+			{
+			TMetaDataFieldId tempFieldId = (TMetaDataFieldId)fieldId;
+			TPtrC8 field = iContainer->Field8( tempFieldId );
+			switch( tempFieldId )
+				{//There are 19 cases to be processed,I am not gonna to process all of them
+				case EUnknownMetaDataField:
+					{
+					if( field == KNullDesC8() )
+						{
+						iLog->Log( _L("The content of meta data field EUnknownMetaDataField is NULL.") );
+						}
+					else
+						{
+						iLog->Log( _L("The content of meta data field EUnknownMetaDataField is [%S]."),field.Alloc() );
+						}
+					break;
+					}
+					
+				case EMetaDataSongTitle:
+					{
+					if( field == KNullDesC8() )
+						{
+						iLog->Log( _L("The content of meta data field EMetaDataSongTitle is NULL.") );
+						}
+					else
+						{
+						iLog->Log( _L("The content of meta data field EMetaDataSongTitle is [%S]."),field.Alloc() );
+						}
+					break;
+					}
+					
+				case EMetaDataArtist:
+					{
+					if( field == KNullDesC8() )
+						{
+						iLog->Log( _L("The content of meta data field EMetaDataArtist is NULL.") );
+						}
+					else
+						{
+						iLog->Log( _L("The content of meta data field EMetaDataArtist is [%S]."),field.Alloc() );
+						}
+					break;
+					}
+					
+				case EMetaDataAlbum:
+					{
+					if( field == KNullDesC8() )
+						{
+						iLog->Log( _L("The content of meta data field EMetaDataAlbum is NULL.") );
+						}
+					else
+						{
+						iLog->Log( _L("The content of meta data field EMetaDataAlbum is [%S]."),field.Alloc() );
+						}
+					break;
+					}
+					
+				case EMetaDataDuration:
+					{
+					if( field == KNullDesC8() )
+						{
+						iLog->Log( _L("The content of meta data field EMetaDataDuration is NULL.") );
+						}
+					else
+						{
+						iLog->Log( _L("The content of meta data field EMetaDataDuration is [%S]."),field.Alloc() );
+						}
+					break;
+					}
+					
+				case EMetaDataDate:
+					{
+					if( field == KNullDesC8() )
+						{
+						iLog->Log( _L("The content of meta data field EMetaDataDate is NULL.") );
+						}
+					else
+						{
+						iLog->Log( _L("The content of meta data field EMetaDataDate is [%S]."),field.Alloc() );
+						}
+					break;
+					}
+					
+				default:
+					{
+					if( field == KNullDesC8() )
+						{
+						iLog->Log( _L("The content of meta data field [%d] is NULL."),tempFieldId );
+						}
+					else
+						{
+						iLog->Log( _L("The content of meta data field [%d] is [%S]."),field.Alloc() );
+						}
+					break;
+					}
+				}
+			}
+		else
+			{
+			result= KBadParameter;
+			iLog->Log( _L("<--The meta data field Id you input is out of bound( 0 <= Id <= 19 ).User leaves here.") );
+			User::Leave( KBadParameter );
+			}
+		}
+	iLog->Log( _L("<--Out of ContainerField8.") );
+	return result;
+	}
+// -----------------------------------------------------------------------------
+// CMetaDataDisplay::ContainerAppendLTDesCL
+// CloseChunkData test method function.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CMetaDataDisplay::ContainerAppendLTDesCL( CStifItemParser& aItem )
+	{
+	iLog->Log( _L("") );//A blank line makes the log file look better
+	iLog->Log( _L("Entering ContainerAppendLTDesCL-->") );
+	TInt result( 0 );
+	TInt fieldId;
+	TInt NumOfFieldAppended( 0 );
+	if( aItem.GetNextInt( NumOfFieldAppended ) == KErrNone )
+		{
+		if( ( 0 < NumOfFieldAppended ) && ( NumOfFieldAppended <= 19 ) )
+			{
+			for( TInt num = NumOfFieldAppended ; (num--)>0 ; )
+				{
+				TInt fieldTemp;
+				TPtrC fieldContent;
+				if( aItem.GetNextInt( fieldTemp ) == KErrNone )
+					{
+					if( ( 0 <= fieldTemp ) && ( fieldTemp <= 19 ) )
+						{
+						fieldId = fieldTemp;
+						if( aItem.GetNextString( fieldContent ) == KErrNone )
+							{
+							iLog->Log( _L("Meta data field [%d] is being appended."),fieldId );
+							iLog->Log( _L("Content of the just appended meta data field is [%S]."),fieldContent.Alloc() );
+							TMetaDataFieldId tempFieldId = (TMetaDataFieldId)fieldId;
+							//const_cast<CMetaDataFieldContainer*>(iContainer)->AppendL( tempFieldId, fieldContent );	//TODO
+							TRAP( result,const_cast<CMetaDataFieldContainer*>(iContainer)->AppendL( tempFieldId, fieldContent ) );
+							if( result == KErrNone )
+								{
+								iLog->Log( _L("Succeeded to append meta data field [%d]."),fieldId );
+								}
+							else
+								{
+								iLog->Log( _L("Failed to append meta data field [%d].Error [%d] returns."),fieldId,result );
+								}
+							}
+						else
+							{
+							result = KBadParameter;
+							iLog->Log( _L("Pass in bad parameter.User Leave here.") );
+							User::Leave( KBadParameter );
+							}
+						}
+					else
+						{
+						result= KBadParameter;
+						iLog->Log( _L("<--The meta data field Id [%d] you input is out of bound( 0 <= Id <= 19 ).User leaves here."),fieldTemp );
+						User::Leave( KBadParameter );
+						}
+
+					}
+				else
+					{
+					result = KBadParameter;
+					iLog->Log( _L("Pass in bad parameter.User Leave here.") );
+					User::Leave( KBadParameter );
+					}
+				}
+			}
+		else if( NumOfFieldAppended == 0 )
+			{
+			result = KErrNone;
+			iLog->Log( _L("No meta data field is appended.") );
+			}
+		else
+			{
+			result= KBadParameter;
+			iLog->Log( _L("<--The meta data field number you want to input is out of bound( 0 <= Id <= 19 ).User leaves here.") );
+			User::Leave( KBadParameter );
+			}
+		}
+	else
+		{
+		result = KBadParameter;
+		iLog->Log( _L("Pass in bad parameter.User Leave here.") );
+		User::Leave( KBadParameter );
+		}
+	iLog->Log( _L("<--Out of ContainerAppendLTDesCL.") );
+	return result;
+	}
+// -----------------------------------------------------------------------------
+// CMetaDataDisplay::ContainerAppendLTDesC8L
+// CloseChunkData test method function.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CMetaDataDisplay::ContainerAppendLTDesC8L( CStifItemParser& aItem )
+	{
+	iLog->Log( _L("") );//A blank line makes the log file look better
+	iLog->Log( _L("Entering ContainerAppendLTDesC8L-->") );
+	TInt result( 0 );
+	TInt fieldId;
+	TInt NumOfFieldAppended( 0 );
+	if( aItem.GetNextInt( NumOfFieldAppended ) == KErrNone )
+		{
+		if( ( 0 < NumOfFieldAppended ) && ( NumOfFieldAppended <= 19 ) )
+			{
+			for( TInt num = NumOfFieldAppended ; (num--)>0 ; )
+				{
+				TInt fieldTemp;
+				TPtrC fieldContent;
+				if( aItem.GetNextInt( fieldTemp ) == KErrNone )
+					{
+					if( ( 0 <= fieldTemp ) && ( fieldTemp <= 19 ) )
+						{
+						fieldId = fieldTemp;
+						if( aItem.GetNextString( fieldContent ) == KErrNone )
+							{
+							iLog->Log( _L("Meta data field [%d] is being appended."),fieldId );
+							iLog->Log( _L("Content of the just appended meta data field is [%S]."),fieldContent.Alloc() );
+							TMetaDataFieldId tempFieldId = (TMetaDataFieldId)fieldId;							
+							TBuf<20> fieldBuf16;
+							fieldBuf16.Copy( fieldContent );
+							TBuf8<40> fieldBuf8;
+							CnvUtfConverter::ConvertFromUnicodeToUtf8( fieldBuf8,fieldBuf16 );
+							//const_cast<CMetaDataFieldContainer*>(iContainer)->AppendL( tempFieldId,fieldBuf8  );	//TODO 
+							TRAP( result,const_cast<CMetaDataFieldContainer*>(iContainer)->AppendL( tempFieldId,fieldBuf8  ) );
+							if( result == KErrNone )
+								{
+								iLog->Log( _L("Succeeded to append meta data field [%d]."),fieldId );
+								}
+							else
+								{
+								iLog->Log( _L("Failed to append meta data field [%d].Error [%d] returns."),fieldId,result );
+								}
+							}
+						else
+							{
+							result = KBadParameter;
+							iLog->Log( _L("Pass in bad parameter.User Leaves here.") );
+							User::Leave( KBadParameter );
+							}
+						}
+					else
+						{
+						result= KBadParameter;
+						iLog->Log( _L("<--The meta data field Id [%d] you input is out of bound( 0 <= Id <= 19 ).User leaves here."),fieldTemp );
+						User::Leave( KBadParameter );
+						}
+					}
+				else
+					{
+					result = KBadParameter;
+					iLog->Log( _L("Pass in bad parameter.User Leaves here.") );
+					User::Leave( KBadParameter );
+					}
+				}
+			}
+		else if( NumOfFieldAppended == 0 )
+			{
+			result = KErrNone;
+			iLog->Log( _L("No meta data field is appended.") );
+			}
+		else
+			{
+			result= KBadParameter;
+			iLog->Log( _L("<--The meta data field number you want to input is out of bound( 0 <= Id <= 19 ).User leaves here.") );
+			User::Leave( KBadParameter );
+			}
+		}
+	else
+		{
+		result = KBadParameter;
+		iLog->Log( _L("Pass in bad parameter.User Leaves here.") );
+		User::Leave( KBadParameter );
+		}
+	iLog->Log( _L("<--Out of ContainerAppendLTDesC8L.") );
+	return result;
+	}
+// -----------------------------------------------------------------------------
+// CMetaDataDisplay::ContainerAt
+// CloseChunkData test method function.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CMetaDataDisplay::ContainerAt( CStifItemParser& aItem )
+	{
+	iLog->Log( _L("") );//A blank line makes the log file look better
+	iLog->Log( _L("Entering ContainerAt-->") );
+	TInt result( 0 );
+	TInt position;
+	TInt paraError( aItem.GetNextInt( position ) );	
+	if( paraError == KErrNone )
+		{
+		while( paraError == KErrNone )
+			{
+			if( ( 0 <= position ) && ( position <= 19 )  )
+				{
+				TMetaDataFieldId tempFieldId;
+				TPtrC content = iContainer->At( position,tempFieldId );
+				if( content == KNullDesC() )
+					{
+					iLog->Log( _L("The content of the meta data field [%d] is NULL."),tempFieldId );
+					}
+				else
+					{
+					iLog->Log( _L("The content of the meta data field [%d] is [%S]."),tempFieldId,content.Alloc() );
+					}
+				result = KErrNone;
+				paraError= aItem.GetNextInt( position );
+				if( paraError != KErrNone )
+					{
+					iLog->Log( _L("Pass in no parameter.Get out of the while-loop-clause here.") );
+					break;
+					//User::Leave( KBadParameter );
+					}
+				}
+			else
+				{
+				result = KBadParameter;
+				iLog->Log( _L("Position must be between 0 and 19( 0<= position <= 19 ).User Leaves here.") );
+				User::Leave( KBadParameter );
+				}
+			}
+		}
+	else
+		{
+		result = KBadParameter;
+		iLog->Log( _L("Pass in no parameter.User Leaves here.") );
+		User::Leave( KBadParameter );
+		}
+	iLog->Log( _L("<--Out of ContainerAt.") );
+	return result;
+	}
+// -----------------------------------------------------------------------------
+// CMetaDataDisplay::ContainerFieldIdAt
+// CloseChunkData test method function.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CMetaDataDisplay::ContainerFieldIdAt( CStifItemParser& aItem )
+	{
+	iLog->Log( _L("") );//A blank line makes the log file look better
+	iLog->Log( _L("Entering ContainerFieldIdAt-->") );
+	TInt result( 0 );
+	TInt position;
+	TInt paraError( aItem.GetNextInt( position ) );	
+	if( paraError == KErrNone )
+		{
+		while( paraError == KErrNone )
+			{
+			if( ( 0 <= position ) && ( position <= 19 )  )
+				{
+				TMetaDataFieldId tempFieldId;
+				iContainer->FieldIdAt( position,tempFieldId );
+				iLog->Log( _L("The meta data field that the position [%d] asociates with is [%d]."),position,tempFieldId );
+				result = KErrNone;
+				paraError= aItem.GetNextInt( position );
+				if( paraError != KErrNone )
+					{
+					iLog->Log( _L("Pass in no parameter.Get out of the while-loop-clause here.") );
+					break;
+					//User::Leave( KBadParameter );
+					}
+				}
+			else
+				{
+				result = KBadParameter;
+				iLog->Log( _L("Position must be between 0 and 19( 0<= position <= 19 ).User Leaves here.") );
+				User::Leave( KBadParameter );
+				}
+			}
+		}
+	else
+		{
+		result = KBadParameter;
+		iLog->Log( _L("Pass in no parameter.User Leaves here.") );
+		User::Leave( KBadParameter );
+		}
+	iLog->Log( _L("<--Out of ContainerFieldIdAt.") );
+	return result;
+	}
+
+// -----------------------------------------------------------------------------
+// CMetaDataDisplay::?member_function
+// ?implementation_description
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+/*
+TInt CMetaDataDisplay::?member_function(
+   CItemParser& aItem )
+   {
+
+   ?code
+
+   }
+*/
+
+// ========================== OTHER EXPORTED FUNCTIONS =========================
+// None
+
+//  [End of File] - Do not remove