meetingrequest/mrpolicy/src/cmrpolicyresourceiterator.cpp
branchRCL_3
changeset 12 4ce476e64c59
--- /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
+