homescreensrv_plat/sapi_homescreenplugin/tsrc/hspsconfigurationif/src/mt_hspsliwlistprinter.cpp
changeset 0 79c6a41cd166
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/homescreensrv_plat/sapi_homescreenplugin/tsrc/hspsconfigurationif/src/mt_hspsliwlistprinter.cpp	Thu Dec 17 08:54:17 2009 +0200
@@ -0,0 +1,249 @@
+/*
+* Copyright (c) 2008 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:  Prints liw list to a file.
+*
+*/
+
+
+#include <liwcommon.h>
+#include <flogger.h>
+
+#include "mt_hspsliwlistprinter.h"
+
+
+// File logging macros
+// filename
+_LIT(KLog,"printliw.log");
+// additional path
+_LIT(KLogFolder,"hspsprintdom");
+#define _LOGT(aDescription) RFileLogger::Write( KLogFolder,	KLog, EFileLoggingModeOverwrite, aDescription );    
+#define _LOGTFRM1(a,b) RFileLogger::WriteFormat( KLogFolder, KLog, EFileLoggingModeOverwrite, (a), (b) ) 
+#define _LOGTFRM2(a,b,c) RFileLogger::WriteFormat( KLogFolder, KLog, EFileLoggingModeOverwrite, (a),(b),(c) ); 
+#define _LOGTFRM3(a,b,c,d) RFileLogger::WriteFormat( KLogFolder, KLog, EFileLoggingModeOverwrite, (a),(b),(c),(d) ); 
+// indentation delimiter
+_LIT8(KDelim8, "\t" );
+_LIT(KDelim, "\t" );
+
+//------------------------------------------------------------------------------
+// Constuctor
+//------------------------------------------------------------------------------
+CHspsLiwListPrinter::CHspsLiwListPrinter()
+	{
+	iDepth = 0;
+	}
+
+//------------------------------------------------------------------------------
+// Destructor
+//------------------------------------------------------------------------------
+CHspsLiwListPrinter::~CHspsLiwListPrinter()
+	{
+	}
+
+//------------------------------------------------------------------------------
+// Symbian constructor
+//------------------------------------------------------------------------------
+CHspsLiwListPrinter* CHspsLiwListPrinter::NewLC()
+	{
+	CHspsLiwListPrinter* self = new (ELeave)CHspsLiwListPrinter();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+//------------------------------------------------------------------------------
+// Symbian constructor
+//------------------------------------------------------------------------------
+CHspsLiwListPrinter* CHspsLiwListPrinter::NewL()
+	{
+	CHspsLiwListPrinter* self=CHspsLiwListPrinter::NewLC();
+	CleanupStack::Pop( self ); // self;
+	return self;
+	}
+
+//------------------------------------------------------------------------------
+// 2nd tier constructor
+//------------------------------------------------------------------------------
+void CHspsLiwListPrinter::ConstructL()
+	{
+	}
+
+//------------------------------------------------------------------------------
+// Prints liw list to a file.
+//------------------------------------------------------------------------------
+void CHspsLiwListPrinter::PrintLiwListL( CLiwGenericParamList& aLiwList )
+	{
+	// implementation for GetActiveAppConf and GetPluginConf that has map
+	// as base root.      
+	iDepth = 0;
+	TInt count = aLiwList.Count();
+	for( TInt i = 0; i < count; i++ )
+		{
+		//get Generic param and check for param id and name.
+		TLiwGenericParam param = aLiwList[i];
+		//Check for the param identifier:
+		LIW::TGenericParamId identifier = param.SemanticId();
+		//print semanticId:
+		_LOGTFRM1(_L8(" SemanticId: %d"), identifier );
+		if( identifier == LIW::EGenericParamError )
+			{
+			_LOGT(_L8(" ERROR: EGenericParamError") );
+			}
+		//get generic param name.
+		//print name.
+		_LOGT( param.Name() );
+		//get Variant
+		TLiwVariant value = param.Value();
+		//get variant type.
+		PrintVariantL( value );
+		}
+	}
+
+//------------------------------------------------------------------------------
+// Parses variant type for printing.
+//------------------------------------------------------------------------------
+void CHspsLiwListPrinter::PrintVariantL( TLiwVariant value )
+	{
+	LIW::TVariantTypeId variantId = value.TypeId();
+	if( variantId == LIW::EVariantTypeDesC8 )
+		{
+		PrintString8L( value );
+		}
+	else if( variantId == LIW::EVariantTypeDesC )
+		{
+		PrintStringL( value );
+		}
+	else if ( variantId == LIW::EVariantTypeMap )
+		{
+		HBufC* text = GetFixedTextLC( _L("<Map>"), iDepth, KDelim );
+		_LOGT( *text );
+		CleanupStack::PopAndDestroy( text );
+		PrintMapL( value );
+		}
+	else if ( variantId == LIW::EVariantTypeList )
+		{
+		HBufC* text = GetFixedTextLC( _L("<List>"), iDepth, KDelim );
+		_LOGT( *text );
+		CleanupStack::PopAndDestroy( text );
+		PrintListL( value );
+		}
+	else 
+		{
+		_LOGT(_L8("--- TODO: Unknown --- "));
+		}
+	}
+
+//------------------------------------------------------------------------------
+// Prints map type variant.
+//------------------------------------------------------------------------------
+void CHspsLiwListPrinter::PrintMapL( TLiwVariant value )
+	{
+	//get map from the variant.
+	//get map values.
+	const CLiwMap* map = value.AsMap();
+	TInt count = map->Count();
+	for( TInt i = 0; i < count; i++ )
+		{
+		HBufC* index = GetFixedTextLC( _L("---"), iDepth, KDelim );
+		_LOGT( *index );
+		CleanupStack::PopAndDestroy( index );
+		TBuf8<100> buf; //TODO: bad solution...
+		map->AtL( i, buf);
+		HBufC8* text = GetFixedText8LC( buf, iDepth, KDelim8 );
+		_LOGT( *text );
+		CleanupStack::PopAndDestroy( text );
+		TLiwVariant value;
+		map->FindL( buf, value );
+		PrintVariantL( value );
+		value.Reset();
+		}
+	}
+
+//------------------------------------------------------------------------------
+// Prints string type variant.
+//------------------------------------------------------------------------------
+void CHspsLiwListPrinter::PrintStringL( TLiwVariant value )
+	{
+	TPtrC textValue = value.AsDes();
+	HBufC* text = GetFixedTextLC( textValue, iDepth, KDelim );
+	_LOGT( *text );
+	CleanupStack::PopAndDestroy( text );
+	}
+
+//------------------------------------------------------------------------------
+// Prints string type variant.
+//------------------------------------------------------------------------------
+void CHspsLiwListPrinter::PrintString8L( TLiwVariant value )
+	{
+	TPtrC8 textValue = value.AsData();
+	HBufC8* text = GetFixedText8LC( textValue, iDepth, KDelim8 );
+	_LOGT( *text );
+	CleanupStack::PopAndDestroy( text );
+	}
+
+//------------------------------------------------------------------------------
+// Prints list type variant.
+//------------------------------------------------------------------------------
+void CHspsLiwListPrinter::PrintListL( TLiwVariant value )
+	{
+	iDepth++;
+	const CLiwList* list = value.AsList();
+	TInt count = list->Count();
+	for( TInt i = 0; i < count; i++ )
+		{
+		HBufC* index = GetFixedTextLC( _L("---"), iDepth, KDelim );
+		_LOGT( *index );
+		CleanupStack::PopAndDestroy( index );
+		TLiwVariant value;
+		list->AtL( i, value );
+		PrintVariantL( value );
+		value.Reset();
+		}
+	iDepth--;
+	}
+
+//------------------------------------------------------------------------------
+// Utility method for generating a custom text descriptor.
+// Adds indentation to a text string. 8 bit variant.
+//------------------------------------------------------------------------------
+HBufC8* CHspsLiwListPrinter::GetFixedText8LC( const TDesC8& aText, 
+											 const TInt aDepth, 
+											 const TDesC8& aDelim )
+	{
+	HBufC8 *buf = HBufC8::NewLC( aDepth * aDelim.Length() + aText.Length() + 1 );	
+	TInt i = 0;
+	for( ; i < aDepth; i++ )
+		{
+		buf->Des().Append( aDelim );
+		}
+	buf->Des().Append( aText );
+	return buf;
+	}
+
+//------------------------------------------------------------------------------
+// Debug utility for generating a custom text descriptor.
+// Adds indentation to a text string. 8 bit variant.
+//------------------------------------------------------------------------------
+HBufC* CHspsLiwListPrinter::GetFixedTextLC( const TDesC& aText, 
+											 const TInt aDepth, 
+											 const TDesC& aDelim )
+	{
+	HBufC *buf = HBufC::NewLC( aDepth * aDelim.Length() + aText.Length() + 1 );	
+	TInt i = 0;
+	for( ; i < aDepth; i++ )
+		{
+		buf->Des().Append( aDelim );
+		}
+	buf->Des().Append( aText );
+	return buf;
+	}