--- /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"
+//<cmail>
+#include "cesmrpolicy.h"
+#include <esmrpolicies.rsg>
+#include "esmrdef.h"
+//</cmail>
+#include "esmrinternaluid.h"
+#include "cesmrcalimportexporter.h"
+#include "tesmrentryfield.h"
+
+#include <coemain.h>// CCoeEnv
+#include <barsread.h>
+
+
+/// 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<TInt>& 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
+