email/imum/Utils/Src/ImumInSettingsDataCollectionImpl.cpp
changeset 0 72b543305e3a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/email/imum/Utils/Src/ImumInSettingsDataCollectionImpl.cpp	Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,574 @@
+/*
+* Copyright (c) 2002 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:  ImumInSettingsDataCollectionImpl.cpp
+*
+*/
+
+
+// INCLUDE FILES
+#include <msvstd.h>
+#include <MuiuMsvUiServiceUtilities.h>
+#include <SendUiConsts.h>                       // Message type constants
+
+#include "ImumInSettingsDataCollectionImpl.h"
+#include "ImumDaErrorCodes.h"
+#include "ImumPanic.h"
+#include "ImumInSettingsDataArray.h"
+#include "ImumDaSettingsKeys.h"
+#include "ImumInSettingsKeys.h"
+#include "EmailUtils.H"
+#include "ImumInSettingsDataCtrl.h"
+#include "ImumInSettingsDataValidator.h"
+#include "ImumUtilsLogging.h"
+#include "ImumConstants.h"
+#include "ImumMboxDefaultData.h"
+
+// EXTERNAL DATA STRUCTURES
+// EXTERNAL FUNCTION PROTOTYPES
+// CONSTANTS
+// MACROS
+// LOCAL CONSTANTS AND MACROS
+// MODULE DATA STRUCTURES
+// LOCAL FUNCTION PROTOTYPES
+// FORWARD DECLARATIONS
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// ----------------------------------------------------------------------------
+// CImumInSettingsDataCollectionImpl::CImumInSettingsDataCollectionImpl()
+// ----------------------------------------------------------------------------
+//
+CImumInSettingsDataCollectionImpl::CImumInSettingsDataCollectionImpl(
+    const TUid& aProtocol,
+    const MImumInSettingsDataCollection* aDefaultData,
+    CImumInSettingsDataValidator& aValidator )
+    :
+    iDefaultData( aDefaultData ),
+    iProtocol( aProtocol ),
+    iValidator( aValidator ),
+    iSettings( NULL )
+    {
+    }
+
+// ----------------------------------------------------------------------------
+// CImumInSettingsDataCollectionImpl::~CImumInSettingsDataCollectionImpl()
+// ----------------------------------------------------------------------------
+//
+CImumInSettingsDataCollectionImpl::~CImumInSettingsDataCollectionImpl()
+    {
+    IMUM_CONTEXT( CImumInSettingsDataCollectionImpl::~CImumInSettingsDataCollectionImpl, 0, KLogInApi );
+    IMUM_IN();
+
+    delete iSettings;
+    iSettings = NULL;
+
+    IMUM_OUT();
+    }
+
+// ----------------------------------------------------------------------------
+// CImumInSettingsDataCollectionImpl::ConstructL()
+// ----------------------------------------------------------------------------
+//
+void CImumInSettingsDataCollectionImpl::ConstructL(
+    const TUid& aProtocol )
+    {
+    IMUM_CONTEXT( CImumInSettingsDataCollectionImpl::ConstructL, 0, KLogInApi );
+    IMUM_IN();
+
+    iSettings = CImumInSettingsDataArray::NewL();
+
+    if ( aProtocol == KSenduiMtmImap4Uid )
+        {
+        SetAttr(
+            TImumDaSettings::EKeyProtocol,
+            TImumDaSettings::EValueProtocolImap4 );
+        }
+    else if ( aProtocol == KSenduiMtmPop3Uid )
+        {
+        SetAttr(
+            TImumDaSettings::EKeyProtocol,
+            TImumDaSettings::EValueProtocolPop3 );
+        }
+    else if ( aProtocol == KSenduiMtmSmtpUid )
+        {
+        SetAttr(
+            TImumDaSettings::EKeyProtocol,
+            TImumDaSettings::EValueProtocolSmtp );
+        }
+    else if ( !aProtocol.iUid )
+        {
+        SettingsDataCollectionExceptionL(
+            TImumDaErrorCode::EParamUnsupportedProtocol );
+        }
+    else
+        {
+        SettingsDataCollectionExceptionL(
+            TImumDaErrorCode::EParamEmptyProtocol );
+        }
+
+
+    // It's possible to reset the settings, if the settings class would
+    // contain the default data. If the default data is not set, it means
+    // that the current object is the default data, so the resetting should
+    // be skipped here and the actual resetting happens in the real default
+    // data class.
+    if ( iDefaultData )
+        {
+        ResetAll();
+        }
+
+    IMUM_OUT();
+    }
+
+// ----------------------------------------------------------------------------
+// CImumInSettingsDataCollectionImpl::NewL()
+// ----------------------------------------------------------------------------
+//
+CImumInSettingsDataCollectionImpl* CImumInSettingsDataCollectionImpl::NewL(
+    const TUid& aProtocol,
+    const MImumInSettingsDataCollection* aDefaultData,
+    CImumInSettingsDataValidator& aValidator )
+    {
+    IMUM_STATIC_CONTEXT( CImumInSettingsDataCollectionImpl::NewL, 0, utils, KLogInApi );
+    IMUM_IN();
+
+    CImumInSettingsDataCollectionImpl* self = NewLC(
+        aProtocol, aDefaultData, aValidator );
+    CleanupStack::Pop( self );
+
+    IMUM_OUT();
+
+    return self;
+    }
+
+// ----------------------------------------------------------------------------
+// CImumInSettingsDataCollectionImpl::NewLC()
+// ----------------------------------------------------------------------------
+//
+CImumInSettingsDataCollectionImpl* CImumInSettingsDataCollectionImpl::NewLC(
+    const TUid& aProtocol,
+    const MImumInSettingsDataCollection* aDefaultData,
+    CImumInSettingsDataValidator& aValidator )
+    {
+    IMUM_STATIC_CONTEXT( CImumInSettingsDataCollectionImpl::NewLC, 0, utils, KLogInApi );
+    IMUM_IN();
+
+    CImumInSettingsDataCollectionImpl* self =
+        new ( ELeave ) CImumInSettingsDataCollectionImpl(
+            aProtocol, aDefaultData, aValidator );
+    CleanupStack::PushL( self );
+    self->ConstructL( aProtocol );
+
+    IMUM_OUT();
+
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// From class MImumDaSettingsDataCollection.
+// CImumInSettingsDataCollectionImpl::SetAttr()
+// ---------------------------------------------------------------------------
+//
+TInt CImumInSettingsDataCollectionImpl::SetAttr(
+    const TUint aAttributeKey,
+    const TInt aValue )
+    {
+    TInt emptyDefault = 0;
+    return ImumInSettingsDataCtrl::CreateToArray(
+        *iSettings,
+        iDefaultData,
+        aAttributeKey,
+        ECmpTInt32,
+        aValue,
+        emptyDefault );
+    }
+
+// ---------------------------------------------------------------------------
+// From class MImumDaSettingsDataCollection.
+// CImumInSettingsDataCollectionImpl::SetAttr()
+// ---------------------------------------------------------------------------
+//
+TInt CImumInSettingsDataCollectionImpl::SetAttr(
+    const TUint aAttributeKey,
+    const TInt64 aValue )
+    {
+    TInt64 emptyDefault = 0;
+    return ImumInSettingsDataCtrl::CreateToArray(
+        *iSettings,
+        iDefaultData,
+        aAttributeKey,
+        ECmpTInt64,
+        aValue,
+        emptyDefault );
+    }
+
+// ---------------------------------------------------------------------------
+// From class MImumDaSettingsDataCollection.
+// CImumInSettingsDataCollectionImpl::SetAttr()
+// ---------------------------------------------------------------------------
+//
+TInt CImumInSettingsDataCollectionImpl::SetAttr(
+    const TUint aAttributeKey,
+    const TMsvId aId )
+    {
+    TMsvId emptyDefault = 0;
+    return ImumInSettingsDataCtrl::CreateToArray(
+        *iSettings,
+        iDefaultData,
+        aAttributeKey,
+        ECmpTUint32,
+        aId,
+        emptyDefault );
+    }
+
+// ---------------------------------------------------------------------------
+// From class MImumDaSettingsDataCollection.
+// CImumInSettingsDataCollectionImpl::SetAttr()
+// ---------------------------------------------------------------------------
+//
+TInt CImumInSettingsDataCollectionImpl::SetAttr(
+    const TUint aAttributeKey,
+    const TDesC& aText )
+    {
+    RBuf emptyDefault;
+    TInt error = emptyDefault.Create( ImumTextConsts::EMaxTextLen );
+    if ( error == KErrNone )
+        {
+        error = ImumInSettingsDataCtrl::CreateToArray(
+            *iSettings,
+            iDefaultData,
+            aAttributeKey,
+            ECmpNormal,
+            aText,
+            emptyDefault );
+        }
+
+    emptyDefault.Close();
+
+    return error;
+    }
+
+// ---------------------------------------------------------------------------
+// From class MImumDaSettingsDataCollection.
+// CImumInSettingsDataCollectionImpl::SetAttr()
+// ---------------------------------------------------------------------------
+//
+TInt CImumInSettingsDataCollectionImpl::SetAttr(
+    const TUint aAttributeKey,
+    const TDesC8& aText )
+    {
+    RBuf8 emptyDefault;
+    TInt error = emptyDefault.Create( ImumTextConsts::EMaxTextLen );
+    if ( error == KErrNone )
+        {
+        error = ImumInSettingsDataCtrl::CreateToArray(
+            *iSettings,
+            iDefaultData,
+            aAttributeKey,
+            ECmpNormal8,
+            aText,
+            emptyDefault );
+        }
+
+    emptyDefault.Close();
+
+    return error;
+    }
+
+// ---------------------------------------------------------------------------
+// From class MImumDaSettingsDataCollection.
+// CImumInSettingsDataCollectionImpl::GetAttr()
+// ---------------------------------------------------------------------------
+//
+TInt CImumInSettingsDataCollectionImpl::GetAttr(
+    const TUint aAttributeKey,
+    TInt& aValue ) const
+    {
+    return ImumInSettingsDataCtrl::RetrieveFromArray(
+        *iSettings,
+        aAttributeKey,
+        ECmpTInt32,
+        aValue );
+    }
+
+// ---------------------------------------------------------------------------
+// From class MImumDaSettingsDataCollection.
+// CImumInSettingsDataCollectionImpl::GetAttr()
+// ---------------------------------------------------------------------------
+//
+TInt CImumInSettingsDataCollectionImpl::GetAttr(
+    const TUint aAttributeKey,
+    TInt64& aValue ) const
+    {
+    return ImumInSettingsDataCtrl::RetrieveFromArray(
+        *iSettings,
+        aAttributeKey,
+        ECmpTInt64,
+        aValue );
+    }
+
+// ---------------------------------------------------------------------------
+// From class MImumDaSettingsDataCollection.
+// CImumInSettingsDataCollectionImpl::GetAttr()
+// ---------------------------------------------------------------------------
+//
+TInt CImumInSettingsDataCollectionImpl::GetAttr(
+    const TUint aAttributeKey,
+    TMsvId& aId ) const
+    {
+    return ImumInSettingsDataCtrl::RetrieveFromArray(
+        *iSettings,
+        aAttributeKey,
+        ECmpTUint32,
+        aId );
+    }
+
+// ---------------------------------------------------------------------------
+// From class MImumDaSettingsDataCollection.
+// CImumInSettingsDataCollectionImpl::GetAttr()
+// ---------------------------------------------------------------------------
+//
+TInt CImumInSettingsDataCollectionImpl::GetAttr(
+    const TUint aAttributeKey,
+    TDes& aText ) const
+    {
+    return ImumInSettingsDataCtrl::RetrieveFromArray(
+        *iSettings,
+        aAttributeKey,
+        ECmpNormal,
+        aText );
+    }
+
+// ---------------------------------------------------------------------------
+// From class MImumDaSettingsDataCollection.
+// CImumInSettingsDataCollectionImpl::GetAttr()
+// ---------------------------------------------------------------------------
+//
+TInt CImumInSettingsDataCollectionImpl::GetAttr(
+    const TUint aAttributeKey,
+    TDes8& aText ) const
+    {
+    return ImumInSettingsDataCtrl::RetrieveFromArray(
+        *iSettings,
+        aAttributeKey,
+        ECmpNormal8,
+        aText );
+    }
+
+// ---------------------------------------------------------------------------
+// From class MImumDaSettingsDataCollection.
+// CImumInSettingsDataCollectionImpl::operator!=()
+// ---------------------------------------------------------------------------
+//
+TBool CImumInSettingsDataCollectionImpl::operator!=(
+    const MImumDaSettingsDataCollection& aSettingsData ) const
+    {
+    IMUM_CONTEXT( CImumInSettingsDataCollectionImpl::operator!=, 0, KLogInApi );
+    IMUM_IN();
+    IMUM_OUT();
+
+    return !( *this == aSettingsData );
+    }
+
+// ---------------------------------------------------------------------------
+// From class MImumInSettingsDataCollection.
+// CImumInSettingsDataCollectionImpl::operator!=()
+// ---------------------------------------------------------------------------
+//
+TBool CImumInSettingsDataCollectionImpl::operator!=(
+    const MImumInSettingsDataCollection& aSettingsData ) const
+    {
+    IMUM_CONTEXT( CImumInSettingsDataCollectionImpl::operator!=, 0, KLogInApi );
+    IMUM_IN();
+    IMUM_OUT();
+
+    return !( *this == aSettingsData );
+    }
+
+// ---------------------------------------------------------------------------
+// From class MImumDaSettingsDataCollection.
+// CImumInSettingsDataCollectionImpl::operator==()
+// ---------------------------------------------------------------------------
+//
+TBool CImumInSettingsDataCollectionImpl::operator==(
+    const MImumDaSettingsDataCollection& /* aSettingsData */ ) const
+    {
+    IMUM_CONTEXT( CImumInSettingsDataCollectionImpl::operator==, 0, KLogInApi );
+    IMUM_IN();
+
+    IMUM_OUT();
+
+    return ETrue;
+    }
+
+// ---------------------------------------------------------------------------
+// From class MImumInSettingsDataCollection.
+// CImumInSettingsDataCollectionImpl::operator==()
+// ---------------------------------------------------------------------------
+//
+TBool CImumInSettingsDataCollectionImpl::operator==(
+    const MImumInSettingsDataCollection& aSettingsData ) const
+    {
+    IMUM_CONTEXT( CImumInSettingsDataCollectionImpl::operator==, 0, KLogInApi );
+    IMUM_IN();
+
+    IMUM_OUT();
+    return ( *this == *static_cast<const MImumDaSettingsDataCollection*>(
+        &aSettingsData ) );
+    }
+
+// ---------------------------------------------------------------------------
+// From class MImumDaSettingsDataCollection.
+// CImumInSettingsDataCollectionImpl::Reset()
+// ---------------------------------------------------------------------------
+//
+void CImumInSettingsDataCollectionImpl::Reset( const TUint aAttributeKey )
+    {
+    IMUM_CONTEXT( CImumInSettingsDataCollectionImpl::Reset, 0, KLogInApi );
+    IMUM_IN();
+
+    iSettings->ResetAttr( aAttributeKey );
+
+    IMUM_OUT();
+    }
+
+// ---------------------------------------------------------------------------
+// From class MImumDaSettingsDataCollection.
+// CImumInSettingsDataCollectionImpl::Copy()
+// ---------------------------------------------------------------------------
+//
+TInt CImumInSettingsDataCollectionImpl::Copy(
+    const MImumDaSettingsDataCollection& /* aSettingsData */ )
+    {
+    IMUM_CONTEXT( CImumInSettingsDataCollectionImpl::Copy, 0, KLogInApi );
+    IMUM_IN();
+
+    // Currently no support for copy operation. Cloning should be used instead.
+    __ASSERT_DEBUG( EFalse, User::Panic(
+        KImumInSettingsDataCollectionImpl, KErrNotSupported ) );
+
+    IMUM_OUT();
+
+    return KErrNotSupported;
+    }
+
+// ---------------------------------------------------------------------------
+// From class MImumDaSettingsDataCollection.
+// CImumInSettingsDataCollectionImpl::Copy()
+// ---------------------------------------------------------------------------
+//
+TInt CImumInSettingsDataCollectionImpl::Copy(
+    const MImumInSettingsDataCollection& aSettingsData )
+    {
+    return Copy( *static_cast<const MImumDaSettingsDataCollection*>(
+        &aSettingsData ) );
+    }
+
+// ---------------------------------------------------------------------------
+// CImumInSettingsDataCollectionImpl::SettingsDataCollectionExceptionL()
+// ---------------------------------------------------------------------------
+//
+void CImumInSettingsDataCollectionImpl::SettingsDataCollectionExceptionL(
+    const TInt aErrorCode ) const
+    {
+    IMUM_CONTEXT( CImumInSettingsDataCollectionImpl::SettingsDataCollectionExceptionL, 0, KLogInApi );
+    IMUM_IN();
+
+    User::Leave( aErrorCode );
+    __ASSERT_DEBUG( EFalse, User::Panic(
+        KImumInSettingsDataCollectionImpl, aErrorCode ) );
+    }
+
+// ---------------------------------------------------------------------------
+// CImumInSettingsDataCollectionImpl::ValidateL()
+// ---------------------------------------------------------------------------
+//
+void CImumInSettingsDataCollectionImpl::ValidateL()
+    {
+    IMUM_CONTEXT( CImumInSettingsDataCollectionImpl::ValidateL, 0, KLogInApi );
+    IMUM_IN();
+
+    iValidator.ValidateL( *this );
+
+    IMUM_OUT();
+    }
+
+// ---------------------------------------------------------------------------
+// CImumInSettingsDataCollectionImpl::ResetAll()
+// ---------------------------------------------------------------------------
+//
+void CImumInSettingsDataCollectionImpl::ResetAll()
+    {
+    IMUM_CONTEXT( CImumInSettingsDataCollectionImpl::ResetAll, 0, KLogInApi );
+    IMUM_IN();
+
+    RArray<TUint> excludeList;
+    iSettings->ResetAll( excludeList );
+    excludeList.Close();
+
+    IMUM_OUT();
+    }
+
+// ---------------------------------------------------------------------------
+// CImumInSettingsDataCollectionImpl::Log()
+// ---------------------------------------------------------------------------
+//
+void CImumInSettingsDataCollectionImpl::Log()
+    {
+    IMUM_CONTEXT( CImumInSettingsDataCollectionImpl::Log, 0, KLogInApi );
+    IMUM_IN();
+    IMUM_OUT();
+    }
+
+// ---------------------------------------------------------------------------
+// From class .
+// CImumInSettingsDataCollectionImpl::CloneL()
+// ---------------------------------------------------------------------------
+//
+MImumInSettingsDataCollection* CImumInSettingsDataCollectionImpl::CloneL() const
+    {
+    IMUM_CONTEXT( CImumInSettingsDataCollectionImpl::Log, 0, KLogInApi );
+    IMUM_IN();
+    IMUM_OUT();
+
+    return DoCloneL();
+    }
+
+// ---------------------------------------------------------------------------
+// CImumInSettingsDataCollectionImpl::DoCloneL()
+// ---------------------------------------------------------------------------
+//
+CImumInSettingsDataCollectionImpl*
+    CImumInSettingsDataCollectionImpl::DoCloneL() const
+    {
+    IMUM_CONTEXT( CImumInSettingsDataCollectionImpl::Log, 0, KLogInApi );
+    IMUM_IN();
+
+    CImumInSettingsDataCollectionImpl* clone = NewLC(
+        iProtocol, iDefaultData, iValidator );
+
+    // Before doing anything, the previous array must be deleted to prevent
+    // any extra data to remain in the memory.
+    delete clone->iSettings;
+    clone->iSettings = iSettings->CloneL();
+
+    CleanupStack::Pop( clone );
+
+    IMUM_OUT();
+
+    return clone;
+    }
+
+
+// End of File