meetingrequest/mrpolicy/src/cesmrpolicy.cpp
changeset 0 8466d47a6819
child 16 4ce476e64c59
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/meetingrequest/mrpolicy/src/cesmrpolicy.cpp	Thu Dec 17 08:39:21 2009 +0200
@@ -0,0 +1,367 @@
+/*
+* 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 policy implementation
+*
+*/
+
+
+//<cmail>
+#include "emailtrace.h"
+#include "cesmrpolicy.h"
+
+#include <e32base.h>
+#include <coemain.h>
+#include <barsread.h>
+
+#include "esmrdef.h"
+//</cmail>
+#include "tesmrentryfield.h"
+
+/// Unnamed namespace for local definitions
+namespace {
+
+// Definition for flag position
+const TInt KFlagPosition = 1;
+
+#ifdef _DEBUG
+
+// Definition for min flag position
+const TInt KMinFlagPosition = 0;
+
+// Definition for policy panic string
+_LIT( KESMRPolicy, "ESMRPolicy" );
+
+// Policy panic codes
+enum TESMRPolicyPanic
+    {
+    EESMRPolicyInvalidCommand = 1,  // Invalid command
+    EESMRPolicyInvalidRole          // Invalid role
+    };
+
+/**
+ * Raises policy panic.
+ *
+ * @param aPanic Panic code.
+ */
+void Panic( TESMRPolicyPanic aPanic )
+    {
+
+    User::Panic( KESMRPolicy, aPanic );
+    }
+
+#endif
+
+/**
+ * Reads ESMR field table from resource.
+ *
+ * @param aReader Reference to resource reader.
+ * @param aFieldTable Reference to field table.
+ */
+void ReadESMRFieldTableL(
+        TResourceReader& aReader,
+        RArray<TESMREntryField>& aFieldTable )
+    {
+    // The first WORD contains the number
+    // of DATA structs within the resource
+    TInt numOfFields = aReader.ReadInt16();
+
+    for (TInt i(0); i < numOfFields; i++ )
+        {
+        TESMREntryField field;
+
+        field.iFieldId =
+            static_cast<TESMREntryFieldId>( aReader.ReadInt16() );
+
+        field.iFieldViewMode =
+            static_cast<TESMRFieldType>( aReader.ReadInt16() );
+
+        field.iFieldMode =
+            static_cast<TESMRFieldMode>( aReader.ReadInt16() );
+
+        aFieldTable.AppendL(field);
+        }
+    }
+
+/**
+ * Reads ESMR command table from resource.
+ *
+ * @param aReader Reference to resource reader.
+ * @param aCommandTable Reference to command table.
+ */
+void ReadESMRCommandTableL(
+        TResourceReader& aReader,
+        RArray<TESMRCommand>& aCommandTable )
+    {
+    // The first WORD contains the number
+    // of DATA structs within the resource
+    TInt numOfFields = aReader.ReadInt16();
+    for (TInt i(0); i < numOfFields; i++ )
+        {
+        TESMRCommand command =
+            static_cast<TESMRCommand>( aReader.ReadInt32());
+        aCommandTable.AppendL(command);
+        }
+    }
+
+/**
+ * Compares entry fields by id.
+ *
+ * @param @aLhs Reference to left hand side object
+ * @param @aRhs Reference to right hand side object
+ */
+TBool MatchesById(
+        const TESMREntryField &aLhs,
+        const TESMREntryField &aRhs )
+    {
+    return aLhs.iFieldId == aRhs.iFieldId;
+    }
+
+}  // namespace
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// CESMRPolicy::CESMRPolicy
+// ---------------------------------------------------------------------------
+//
+inline CESMRPolicy::CESMRPolicy()
+:   iPolicyId(EESMRPolicyUnspecified),
+    iViewMode(EESMRViewUndef)
+    {
+    FUNC_LOG;
+    }
+
+// ---------------------------------------------------------------------------
+// CESMRPolicy::~CESMRPolicy
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CESMRPolicy::~CESMRPolicy()
+    {
+    FUNC_LOG;
+    iMRFields.Reset();
+    iDefaultCommands.Reset();
+    iAdditionalCommands.Reset();
+    }
+
+// ---------------------------------------------------------------------------
+// CESMRPolicy::NewL
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CESMRPolicy* CESMRPolicy::NewL()
+    {
+    FUNC_LOG;
+
+    CESMRPolicy* self = new (ELeave) CESMRPolicy();
+
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CESMRPolicy::NewL
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CESMRPolicy* CESMRPolicy::NewL(
+        RResourceFile& aRFile,
+        TResourceReader& aReader )
+    {
+    FUNC_LOG;
+
+    CESMRPolicy* self = new (ELeave) CESMRPolicy();
+    CleanupStack::PushL( self );
+    self->ConstructL( aRFile, aReader );
+    CleanupStack::Pop(self);
+
+
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CESMRPolicy::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CESMRPolicy::ConstructL(
+        RResourceFile& aRFile,
+        TResourceReader& aReader )
+    {
+    FUNC_LOG;
+
+    ReadFromResourceL( aRFile, aReader );
+
+    }
+
+// ---------------------------------------------------------------------------
+// CESMRPolicy::ReadFromResourceL
+// ---------------------------------------------------------------------------
+//
+void CESMRPolicy::ReadFromResourceL(
+        RResourceFile& aRFile,
+        TResourceReader& aReader )
+    {
+    FUNC_LOG;
+
+    iEventType = static_cast<TESMRCalendarEventType>(aReader.ReadInt16() );
+    iPolicyId = static_cast<TESMRPolicyID>( aReader.ReadInt16() );
+    iViewMode = static_cast<TESMRViewMode>( aReader.ReadInt16() );
+    iRoleFlags.iFlags = aReader.ReadInt16();
+    iAllowedApp = static_cast<TESMRUsingApp>( aReader.ReadInt16() );
+
+    TInt defaultFieldIdLink    = aReader.ReadInt32();
+    TInt defaultCommandLink    = aReader.ReadInt32();
+    TInt additionalCommandLink = aReader.ReadInt32();
+
+    HBufC8* resourceBuffer = NULL;
+
+    iMRFields.Reset();
+    if ( defaultFieldIdLink )
+        {
+        resourceBuffer = aRFile.AllocReadLC(defaultFieldIdLink);
+        aReader.SetBuffer(resourceBuffer);
+        ReadESMRFieldTableL( aReader, iMRFields );
+        CleanupStack::PopAndDestroy( resourceBuffer );
+        resourceBuffer = NULL;
+        }
+
+    iDefaultCommands.Reset();
+    if ( defaultCommandLink )
+        {
+        resourceBuffer = aRFile.AllocReadLC(defaultCommandLink);
+        aReader.SetBuffer(resourceBuffer);
+        ReadESMRCommandTableL( aReader, iDefaultCommands );
+        CleanupStack::PopAndDestroy( resourceBuffer );
+        resourceBuffer = NULL;
+        }
+
+    iAdditionalCommands.Reset();
+    if ( additionalCommandLink )
+        {
+        resourceBuffer = aRFile.AllocReadLC(additionalCommandLink);
+        aReader.SetBuffer(resourceBuffer);
+        ReadESMRCommandTableL( aReader, iAdditionalCommands );
+        CleanupStack::PopAndDestroy( resourceBuffer );
+        resourceBuffer = NULL;
+        }
+
+    }
+
+// ---------------------------------------------------------------------------
+// CESMRPolicy::IsFieldIncluded
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TBool CESMRPolicy::IsFieldIncluded(
+        TESMREntryFieldId aFieldId ) const
+    {
+    FUNC_LOG;
+
+    TESMREntryField field;
+    field.iFieldId = aFieldId;
+
+    TInt index = iMRFields.Find( field, MatchesById );
+
+
+    return index != KErrNotFound;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CESMRPolicy::FieldL
+// ---------------------------------------------------------------------------
+//
+EXPORT_C const TESMREntryField& CESMRPolicy::FieldL(
+        TESMREntryFieldId aFieldId ) const
+    {
+    FUNC_LOG;
+
+    TESMREntryField field;
+    field.iFieldId = aFieldId;
+
+    TInt index = iMRFields.Find( field, MatchesById );
+    if ( KErrNotFound == index )
+        {
+
+        User::Leave( KErrNotFound );
+        }
+
+
+    return iMRFields[index];
+    }
+
+// ---------------------------------------------------------------------------
+// CESMRPolicy::IsDefaultCommand
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TBool CESMRPolicy::IsDefaultCommand( TInt aCommand ) const
+    {
+    FUNC_LOG;
+
+    __ASSERT_DEBUG( aCommand >= EESMRCmdAcceptMR,
+                    Panic(EESMRPolicyInvalidCommand) );
+
+    TESMRCommand command =
+            static_cast<TESMRCommand>( aCommand );
+
+    TInt commandFound( iDefaultCommands.Find( command ) );
+
+
+    return KErrNotFound !=  commandFound;
+    }
+
+// ---------------------------------------------------------------------------
+// CESMRPolicy::IsAdditionalCommand
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TBool CESMRPolicy::IsAdditionalCommand( TInt aCommand ) const
+    {
+    FUNC_LOG;
+
+    __ASSERT_DEBUG( aCommand > EESMRCmdAcceptMR &&
+                    aCommand <= EESMRCmdDeleteMR,
+                    Panic(EESMRPolicyInvalidCommand) );
+
+    TESMRCommand command =
+            static_cast<TESMRCommand>( aCommand );
+
+    TInt commandFound( iAdditionalCommands.Find( command ) );
+
+
+    return KErrNotFound !=  commandFound;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CESMRPolicy::IsRoleIncluded
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TBool CESMRPolicy::IsRoleIncluded( TESMRRole aRole ) const
+    {
+    FUNC_LOG;
+
+    TInt flagPosition = static_cast<TInt>(aRole) - KFlagPosition;
+    __ASSERT_DEBUG( aRole >= KMinFlagPosition, Panic(EESMRPolicyInvalidRole) );
+
+
+    return iRoleFlags.IsSet( flagPosition );
+    }
+
+// -----------------------------------------------------------------------------
+// CESMRPolicy::EventType
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TESMRCalendarEventType CESMRPolicy::EventType() const
+    {
+    FUNC_LOG;
+    return iEventType;
+    }
+
+// EOF
+