diff -r a3a1ae9acec6 -r da5135c61bad meetingrequest/mrpolicy/src/cmrpolicyresourceiterator.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/meetingrequest/mrpolicy/src/cmrpolicyresourceiterator.cpp Wed Mar 31 21:08:33 2010 +0300 @@ -0,0 +1,235 @@ +/* +* Copyright (c) 2007-2009 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: ESMR policymmanager implementation +* +*/ + + +#include "emailtrace.h" +#include "cmrpolicyresourceiterator.h" +// +#include "cesmrpolicy.h" +#include +#include "esmrdef.h" +// +#include "esmrinternaluid.h" +#include "cesmrcalimportexporter.h" +#include "tesmrentryfield.h" + +#include // CCoeEnv +#include + + +/// Unnamed namespace for local definitions +namespace { + +// Definition for resource id array granularity +const TInt KMRPolicyIdArrayGranularity = 4; + +/** + * Reads ESMR policy resource id table from resource. + * + * @param aReader Reference to resource reader. + * @param aResourceIdTable Reference to resource id table. + */ +void ReadResourceIdArrayL( + TResourceReader& aReader, + RArray& aResourceIdTable ) + { + TInt numOfFields = aReader.ReadInt16(); + aResourceIdTable.ReserveL( numOfFields ); + + for (TInt i = 0; i < numOfFields; ++i ) + { + TInt resourceId= aReader.ReadInt32(); + aResourceIdTable.AppendL(resourceId); + } + } + +#ifdef _DEBUG + +_LIT( KPanicCategory, "MR Policy Resource Iterator" ); + +enum TMRPolicyResourceIteratorPanic + { + EMRPolicyIteratorExhausted = 0 + }; + +void Panic( TMRPolicyResourceIteratorPanic aPanic ) + { + User::Panic( KPanicCategory, aPanic ); + } + +#endif +} // namespace + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// CMRPolicyResourceIterator::CMRPolicyResourceIterator +// --------------------------------------------------------------------------- +// +inline CMRPolicyResourceIterator::CMRPolicyResourceIterator() + : iPolicyResourceIds( KMRPolicyIdArrayGranularity ), + iArrayIndex( KErrNotFound ) + { + FUNC_LOG; + //do nothing + } + +// --------------------------------------------------------------------------- +// CMRPolicyResourceIterator::~CMRPolicyResourceIterator +// --------------------------------------------------------------------------- +// +EXPORT_C CMRPolicyResourceIterator::~CMRPolicyResourceIterator() + { + FUNC_LOG; + iPolicyResourceFile.Close(); + iPolicyResourceIds.Close(); + } + +// --------------------------------------------------------------------------- +// CMRPolicyResourceIterator::NewL +// --------------------------------------------------------------------------- +// +EXPORT_C CMRPolicyResourceIterator* CMRPolicyResourceIterator::NewL( + const TDesC& aResourceFile, + TInt aResourceId ) + { + FUNC_LOG; + + CMRPolicyResourceIterator* self = new (ELeave) CMRPolicyResourceIterator; + CleanupStack::PushL( self ); + self->ConstructL( aResourceFile, + aResourceId ); + CleanupStack::Pop(self); + + return self; + } + +// --------------------------------------------------------------------------- +// CMRPolicyResourceIterator::ConstructL +// --------------------------------------------------------------------------- +// +void CMRPolicyResourceIterator::ConstructL( + const TDesC& aResourceFile, + TInt aResourceId) + { + FUNC_LOG; + ReadPolicyFromResourceL( aResourceFile, aResourceId ); + } + +// ----------------------------------------------------------------------------- +// CMRPolicyResourceIterator::HasNext +// ----------------------------------------------------------------------------- +// +EXPORT_C TBool CMRPolicyResourceIterator::HasNext() const + { + return ( iArrayIndex < iPolicyResourceIds.Count() - 1 ); + } + +// --------------------------------------------------------------------------- +// CMRPolicyResourceIterator::NextPolicyL +// --------------------------------------------------------------------------- +// +EXPORT_C CESMRPolicy* CMRPolicyResourceIterator::NextPolicyL() + { + FUNC_LOG; + + CESMRPolicy* policy = NextPolicyLC(); + CleanupStack::Pop( policy ); + + return policy; + } + +// --------------------------------------------------------------------------- +// CMRPolicyResourceIterator::NextPolicyLC +// --------------------------------------------------------------------------- +// +EXPORT_C CESMRPolicy* CMRPolicyResourceIterator::NextPolicyLC() + { + FUNC_LOG; + + __ASSERT_DEBUG( HasNext(), Panic( EMRPolicyIteratorExhausted ) ); + + CESMRPolicy* policy = ReadPolicyLC( iPolicyResourceIds[ ++iArrayIndex ] ); + + return policy; + } + +// --------------------------------------------------------------------------- +// CMRPolicyResourceIterator::Reset +// --------------------------------------------------------------------------- +// +EXPORT_C void CMRPolicyResourceIterator::Reset() + { + FUNC_LOG; + + iArrayIndex = KErrNotFound; + } + +// --------------------------------------------------------------------------- +// CMRPolicyResourceIterator::ReadPolicyFromResourceL +// --------------------------------------------------------------------------- +// +void CMRPolicyResourceIterator::ReadPolicyFromResourceL( + const TDesC& aPolicyFile, + TInt aPolicyArrayResourceId ) + { + FUNC_LOG; + + iPolicyResourceFile.Close(); + iPolicyResourceFile.OpenL( CCoeEnv::Static()->FsSession(), aPolicyFile ); + iPolicyResourceFile.ConfirmSignatureL(); + + // R_ESMR_POLICIES + HBufC8* resourceIdBuffer = + iPolicyResourceFile.AllocReadLC( aPolicyArrayResourceId ); + + // Construct resource reader + TResourceReader reader; + reader.SetBuffer(resourceIdBuffer); + + // Read policy resource ids + iPolicyResourceIds.Reset(); + ReadResourceIdArrayL(reader, iPolicyResourceIds ); + + CleanupStack::PopAndDestroy( resourceIdBuffer ); + + } + + +// --------------------------------------------------------------------------- +// CMRPolicyResourceIterator::ReadPolicyL +// --------------------------------------------------------------------------- +// +CESMRPolicy* CMRPolicyResourceIterator::ReadPolicyLC( TInt aResourceId ) + { + FUNC_LOG; + + HBufC8* resourceBuffer = iPolicyResourceFile.AllocReadLC( aResourceId ); + + TResourceReader reader; + reader.SetBuffer(resourceBuffer); + + CESMRPolicy* policy = CESMRPolicy::NewL( iPolicyResourceFile, reader ); + + CleanupStack::PopAndDestroy( resourceBuffer ); + CleanupStack::PushL( policy ); + + return policy; + } + +// EOF +