email/imum/Utils/Src/ImumInSettingsDataImpl.cpp
changeset 0 72b543305e3a
equal deleted inserted replaced
-1:000000000000 0:72b543305e3a
       
     1 /*
       
     2 * Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:  ImumInSettingsDataImpl.cpp
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 // INCLUDE FILES
       
    20 #include <e32base.h>
       
    21 #include <SendUiConsts.h>
       
    22 
       
    23 #include "ImumInternalApiImpl.h"
       
    24 #include "ImumInSettingsDataImpl.h"
       
    25 #include "ImumInSettingsDataCollectionImpl.h"
       
    26 #include "ImumInMailboxServicesImpl.h"
       
    27 #include "ImumDaErrorCodes.h"
       
    28 #include "ImumPanic.h"
       
    29 #include "ImumMboxDefaultData.h"
       
    30 #include "ImumInSettingsDataArray.h"
       
    31 #include "ImumDaSettingsKeys.h"
       
    32 #include "ImumInSettingsKeys.h"
       
    33 #include "ImumInSettingsDataCtrl.h"
       
    34 #include "ImumInSettingsDataValidator.h"
       
    35 #include "ImumUtilsLogging.h"
       
    36 #include "ImumConstants.h"
       
    37 
       
    38 // EXTERNAL DATA STRUCTURES
       
    39 // EXTERNAL FUNCTION PROTOTYPES
       
    40 // CONSTANTS
       
    41 // MACROS
       
    42 // LOCAL CONSTANTS AND MACROS
       
    43 // MODULE DATA STRUCTURES
       
    44 // LOCAL FUNCTION PROTOTYPES
       
    45 // FORWARD DECLARATIONS
       
    46 
       
    47 // ============================ MEMBER FUNCTIONS ===============================
       
    48 
       
    49 // ----------------------------------------------------------------------------
       
    50 // CImumInSettingsDataImpl::CImumInSettingsDataImpl()
       
    51 // ----------------------------------------------------------------------------
       
    52 //
       
    53 CImumInSettingsDataImpl::CImumInSettingsDataImpl(
       
    54     CImumInternalApiImpl& aMailboxApi,
       
    55     const CImumMboxDefaultData* aDefaultData )
       
    56     :
       
    57     iConnectionSettings( NULL ),
       
    58     iSettings( NULL ),
       
    59     iValidator( NULL ),
       
    60     iDefaultData( aDefaultData ),
       
    61     iMailboxApi( aMailboxApi )
       
    62     {
       
    63     }
       
    64 
       
    65 // ----------------------------------------------------------------------------
       
    66 // CImumInSettingsDataImpl::~CImumInSettingsDataImpl()
       
    67 // ----------------------------------------------------------------------------
       
    68 //
       
    69 CImumInSettingsDataImpl::~CImumInSettingsDataImpl()
       
    70     {
       
    71     IMUM_CONTEXT( CImumInSettingsDataImpl::~CImumInSettingsDataImpl, 0, KLogInApi );
       
    72     IMUM_IN();
       
    73 
       
    74     iDefaultData = NULL;
       
    75     if ( iConnectionSettings )
       
    76         {
       
    77         iConnectionSettings->ResetAndDestroy();
       
    78         }
       
    79 
       
    80     delete iConnectionSettings;
       
    81     iConnectionSettings = NULL;
       
    82     delete iSettings;
       
    83     iSettings = NULL;
       
    84     delete iValidator;
       
    85     iValidator = NULL;
       
    86 
       
    87     IMUM_OUT();
       
    88     }
       
    89 
       
    90 // ----------------------------------------------------------------------------
       
    91 // CImumInSettingsDataImpl::ConstructL()
       
    92 // ----------------------------------------------------------------------------
       
    93 //
       
    94 void CImumInSettingsDataImpl::ConstructL(
       
    95     const TUid& aProtocol )
       
    96     {
       
    97     IMUM_CONTEXT( CImumInSettingsDataImpl::ConstructL, 0, KLogInApi );
       
    98     IMUM_IN();
       
    99 
       
   100     iSettings = iDefaultData->CloneSettingsL();
       
   101     iConnectionSettings =
       
   102         new ( ELeave ) CImumInConnSettings( KImumInConnSettingsGranularity );
       
   103 
       
   104     // Prepare the settings structure
       
   105     if ( aProtocol == KSenduiMtmImap4Uid )
       
   106         {
       
   107         AddInSetL( aProtocol );
       
   108         AddInSetL( KSenduiMtmSmtpUid );
       
   109         }
       
   110     else if ( aProtocol == KSenduiMtmPop3Uid )
       
   111         {
       
   112         AddInSetL( aProtocol );
       
   113         AddInSetL( KSenduiMtmSmtpUid );
       
   114         }
       
   115     else if ( aProtocol == KSenduiMtmSmtpUid )
       
   116         {
       
   117         SettingsDataExceptionL( TImumDaErrorCode::EParamNotReceivingProtocol );
       
   118         }
       
   119     else if ( aProtocol.iUid )
       
   120         {
       
   121         SettingsDataExceptionL( TImumDaErrorCode::EParamUnsupportedProtocol );
       
   122         }
       
   123     else
       
   124         {
       
   125         // Empty, will be defined later
       
   126         }
       
   127 
       
   128     IMUM_OUT();
       
   129     }
       
   130 
       
   131 // ----------------------------------------------------------------------------
       
   132 // CImumInSettingsDataImpl::NewL()
       
   133 // ----------------------------------------------------------------------------
       
   134 //
       
   135 CImumInSettingsDataImpl* CImumInSettingsDataImpl::NewL(
       
   136     CImumInternalApiImpl& aMailboxApi,
       
   137     const TUid& aProtocol,
       
   138     const CImumMboxDefaultData* aDefaultData )
       
   139     {
       
   140     IMUM_STATIC_CONTEXT( CImumInSettingsDataImpl::NewL, 0, utils, KLogInApi );
       
   141     IMUM_IN();
       
   142 
       
   143     CImumInSettingsDataImpl* self =
       
   144         NewLC( aMailboxApi, aProtocol, aDefaultData );
       
   145     CleanupStack::Pop( self );
       
   146 
       
   147     IMUM_OUT();
       
   148 
       
   149     return self;
       
   150     }
       
   151 
       
   152 // ----------------------------------------------------------------------------
       
   153 // CImumInSettingsDataImpl::NewLC()
       
   154 // ----------------------------------------------------------------------------
       
   155 //
       
   156 CImumInSettingsDataImpl* CImumInSettingsDataImpl::NewLC(
       
   157     CImumInternalApiImpl& aMailboxApi,
       
   158     const TUid& aProtocol,
       
   159     const CImumMboxDefaultData* aDefaultData )
       
   160     {
       
   161     IMUM_STATIC_CONTEXT( CImumInSettingsDataImpl::NewLC, 0, utils, KLogInApi );
       
   162     IMUM_IN();
       
   163 
       
   164     CImumInSettingsDataImpl* self =
       
   165         new ( ELeave ) CImumInSettingsDataImpl( aMailboxApi, aDefaultData );
       
   166     CleanupStack::PushL( self );
       
   167     self->ConstructL( aProtocol );
       
   168 
       
   169     IMUM_OUT();
       
   170 
       
   171     return self;
       
   172     }
       
   173 
       
   174 // ================ INTERFACE IMPLEMENTATION ================
       
   175 
       
   176 // ---------------------------------------------------------------------------
       
   177 // CImumInSettingsDataImpl::SelectDefaultData()
       
   178 // ---------------------------------------------------------------------------
       
   179 //
       
   180 const CImumInSettingsDataCollectionImpl*
       
   181     CImumInSettingsDataImpl::SelectDefaultData(
       
   182         const TUid& aProtocol,
       
   183         const CImumMboxDefaultData* aDefaultData ) const
       
   184     {
       
   185     if ( aDefaultData )
       
   186         {
       
   187         switch ( aProtocol.iUid )
       
   188             {
       
   189             case KSenduiMtmImap4UidValue:
       
   190                 return aDefaultData->DefaultConnectionData(
       
   191                     EImumMboxDefaultDataIndexImap4 );
       
   192 
       
   193             case KSenduiMtmPop3UidValue:
       
   194                 return aDefaultData->DefaultConnectionData(
       
   195                     EImumMboxDefaultDataIndexPop3 );
       
   196 
       
   197             case KSenduiMtmSmtpUidValue:
       
   198                 return aDefaultData->DefaultConnectionData(
       
   199                     EImumMboxDefaultDataIndexSmtp );
       
   200 
       
   201             default:
       
   202                 break;
       
   203             }
       
   204         }
       
   205 
       
   206     return NULL;
       
   207     }
       
   208 
       
   209 
       
   210 // ---------------------------------------------------------------------------
       
   211 // From class CImumDaSettingsData.
       
   212 // CImumInSettingsDataImpl::AddSetL()
       
   213 // ---------------------------------------------------------------------------
       
   214 //
       
   215 MImumDaSettingsDataCollection& CImumInSettingsDataImpl::AddSetL(
       
   216     const TUid& aProtocol )
       
   217     {
       
   218     return AddInSetL( aProtocol );
       
   219     }
       
   220 
       
   221 // ---------------------------------------------------------------------------
       
   222 // From class CImumDaSettingsData.
       
   223 // CImumInSettingsDataImpl::AddInSetL()
       
   224 // ---------------------------------------------------------------------------
       
   225 //
       
   226 MImumInSettingsDataCollection& CImumInSettingsDataImpl::AddInSetL(
       
   227     const TUid& aProtocol )
       
   228     {
       
   229     IMUM_CONTEXT( CImumInSettingsDataImpl::AddInSetL, 0, KLogInApi );
       
   230     IMUM_IN();
       
   231 
       
   232     // Clone the connection settings from the default data object
       
   233     CImumInSettingsDataCollectionImpl* connSettings =
       
   234         iDefaultData->CloneConnectionSettingsL( aProtocol );
       
   235     CleanupStack::PushL( connSettings );
       
   236     iConnectionSettings->AppendL( connSettings );
       
   237     CleanupStack::Pop( connSettings );
       
   238 
       
   239     IMUM_OUT();
       
   240 
       
   241     return *connSettings;
       
   242     }
       
   243 
       
   244 // ---------------------------------------------------------------------------
       
   245 // From class CImumDaSettingsData.
       
   246 // CImumInSettingsDataImpl::DelSetL()
       
   247 // ---------------------------------------------------------------------------
       
   248 //
       
   249 void CImumInSettingsDataImpl::DelSetL( const TUint aIndex )
       
   250     {
       
   251     IMUM_CONTEXT( CImumInSettingsDataImpl::DelSetL, 0, KLogInApi );
       
   252     IMUM_IN();
       
   253 
       
   254     // Check that index con
       
   255     if ( aIndex < iConnectionSettings->Count() )
       
   256         {
       
   257         delete ( *iConnectionSettings )[aIndex];
       
   258         iConnectionSettings->Delete( aIndex );
       
   259         }
       
   260     else
       
   261         {
       
   262         SettingsDataExceptionL( TImumDaErrorCode::EConnectionIndexOverflow );
       
   263         }
       
   264 
       
   265     IMUM_OUT();
       
   266     }
       
   267 
       
   268 
       
   269 // ---------------------------------------------------------------------------
       
   270 // From class CImumDaSettingsData.
       
   271 // CImumInSettingsDataImpl::DelSetL()
       
   272 // ---------------------------------------------------------------------------
       
   273 //
       
   274 void CImumInSettingsDataImpl::DelSetL(
       
   275     const MImumDaSettingsDataCollection& aSettingsDataCollection )
       
   276     {
       
   277     IMUM_CONTEXT( CImumInSettingsDataImpl::DelSetL, 0, KLogInApi );
       
   278     IMUM_IN();
       
   279 
       
   280     TBool deleted = EFalse;
       
   281 
       
   282     for ( TInt setting = iConnectionSettings->Count();
       
   283         --setting >= 0 && !deleted; )
       
   284         {
       
   285         if ( *( *iConnectionSettings )[setting] == aSettingsDataCollection )
       
   286             {
       
   287             delete ( *iConnectionSettings )[setting];
       
   288             iConnectionSettings->Delete( setting );
       
   289             deleted = ETrue;
       
   290             }
       
   291         }
       
   292 
       
   293     IMUM_OUT();
       
   294     }
       
   295 
       
   296 // ---------------------------------------------------------------------------
       
   297 // From class CImumDaSettingsData.
       
   298 // CImumInSettingsDataImpl::GetSet()
       
   299 // ---------------------------------------------------------------------------
       
   300 //
       
   301 MImumDaSettingsDataCollection& CImumInSettingsDataImpl::GetSetL(
       
   302     const TUint aIndex ) const
       
   303     {
       
   304     return GetInSetL( aIndex );
       
   305     }
       
   306 
       
   307 // ---------------------------------------------------------------------------
       
   308 // From class CImumInSettingsData.
       
   309 // CImumInSettingsDataImpl::GetSet()
       
   310 // ---------------------------------------------------------------------------
       
   311 //
       
   312 MImumInSettingsDataCollection& CImumInSettingsDataImpl::GetInSetL(
       
   313     const TUint aIndex ) const
       
   314     {
       
   315     IMUM_CONTEXT( CImumInSettingsDataImpl::GetInSetL, 0, KLogInApi );
       
   316     IMUM_IN();
       
   317 
       
   318     MImumInSettingsDataCollection* settings = NULL;
       
   319 
       
   320     // Check that index con
       
   321     if ( aIndex < iConnectionSettings->Count() )
       
   322         {
       
   323         settings = iConnectionSettings->At( aIndex );
       
   324         }
       
   325     else
       
   326         {
       
   327         SettingsDataExceptionL( TImumDaErrorCode::EConnectionIndexOverflow );
       
   328         }
       
   329 
       
   330     IMUM_OUT();
       
   331 
       
   332     return *settings;
       
   333     }
       
   334 
       
   335 // ---------------------------------------------------------------------------
       
   336 // From class CImumDaSettingsData.
       
   337 // CImumInSettingsDataImpl::Validate()
       
   338 // ---------------------------------------------------------------------------
       
   339 //
       
   340 TInt CImumInSettingsDataImpl::Validate()
       
   341     {
       
   342     IMUM_CONTEXT( CImumInSettingsDataImpl::Validate, 0, KLogInApi );
       
   343     IMUM_IN();
       
   344 
       
   345     TRAPD( error, ValidateL() );
       
   346 
       
   347     IMUM_OUT();
       
   348 
       
   349     return error;
       
   350     }
       
   351 
       
   352 // ---------------------------------------------------------------------------
       
   353 // From class CImumDaSettingsData.
       
   354 // CImumInSettingsDataImpl::SetAttr()
       
   355 // ---------------------------------------------------------------------------
       
   356 //
       
   357 TInt CImumInSettingsDataImpl::SetAttr(
       
   358     const TUint aAttributeKey,
       
   359     const TInt aValue )
       
   360     {
       
   361     TInt defaultValue = 0;
       
   362     return ImumInSettingsDataCtrl::CreateToArray(
       
   363         *iSettings,
       
   364         iDefaultData,
       
   365         aAttributeKey,
       
   366         ECmpTInt32,
       
   367         aValue,
       
   368         defaultValue );
       
   369     }
       
   370 
       
   371 // ---------------------------------------------------------------------------
       
   372 // From class CImumDaSettingsData.
       
   373 // CImumInSettingsDataImpl::SetAttr()
       
   374 // ---------------------------------------------------------------------------
       
   375 //
       
   376 TInt CImumInSettingsDataImpl::SetAttr(
       
   377     const TUint aAttributeKey,
       
   378     const TInt64 aValue )
       
   379     {
       
   380     TInt64 defaultValue = 0;
       
   381     return ImumInSettingsDataCtrl::CreateToArray(
       
   382         *iSettings,
       
   383         iDefaultData,
       
   384         aAttributeKey,
       
   385         ECmpTInt64,
       
   386         aValue,
       
   387         defaultValue );
       
   388     }
       
   389 
       
   390 // ---------------------------------------------------------------------------
       
   391 // From class CImumDaSettingsData.
       
   392 // CImumInSettingsDataImpl::SetAttr()
       
   393 // ---------------------------------------------------------------------------
       
   394 //
       
   395 TInt CImumInSettingsDataImpl::SetAttr(
       
   396     const TUint aAttributeKey,
       
   397     const TMsvId aId )
       
   398     {
       
   399     TMsvId defaultValue = 0;
       
   400     return ImumInSettingsDataCtrl::CreateToArray(
       
   401         *iSettings,
       
   402         iDefaultData,
       
   403         aAttributeKey,
       
   404         ECmpTUint32,
       
   405         aId,
       
   406         defaultValue );
       
   407     }
       
   408 
       
   409 // ---------------------------------------------------------------------------
       
   410 // From class CImumDaSettingsData.
       
   411 // CImumInSettingsDataImpl::SetAttr()
       
   412 // ---------------------------------------------------------------------------
       
   413 //
       
   414 TInt CImumInSettingsDataImpl::SetAttr(
       
   415     const TUint aAttributeKey,
       
   416     const TDesC& aText )
       
   417     {
       
   418     RBuf emptyDefault;
       
   419     TInt error = emptyDefault.Create( ImumTextConsts::EMaxTextLen );
       
   420     if ( error == KErrNone )
       
   421         {
       
   422         error = ImumInSettingsDataCtrl::CreateToArray(
       
   423             *iSettings,
       
   424             iDefaultData,
       
   425             aAttributeKey,
       
   426             ECmpNormal,
       
   427             aText,
       
   428             emptyDefault );
       
   429         }
       
   430 
       
   431     emptyDefault.Close();
       
   432 
       
   433     return error;
       
   434     }
       
   435 
       
   436 // ---------------------------------------------------------------------------
       
   437 // From class CImumDaSettingsData.
       
   438 // CImumInSettingsDataImpl::SetAttr()
       
   439 // ---------------------------------------------------------------------------
       
   440 //
       
   441 TInt CImumInSettingsDataImpl::SetAttr(
       
   442     const TUint aAttributeKey,
       
   443     const TDesC8& aText )
       
   444     {
       
   445     RBuf8 emptyDefault;
       
   446     TInt error = emptyDefault.Create( ImumTextConsts::EMaxTextLen );
       
   447     if ( error == KErrNone )
       
   448         {
       
   449         error = ImumInSettingsDataCtrl::CreateToArray(
       
   450             *iSettings,
       
   451             iDefaultData,
       
   452             aAttributeKey,
       
   453             ECmpNormal8,
       
   454             aText,
       
   455             emptyDefault );
       
   456         }
       
   457 
       
   458     emptyDefault.Close();
       
   459 
       
   460     return error;
       
   461     }
       
   462 
       
   463 // ---------------------------------------------------------------------------
       
   464 // From class CImumDaSettingsData.
       
   465 // CImumInSettingsDataImpl::GetAttr()
       
   466 // ---------------------------------------------------------------------------
       
   467 //
       
   468 TInt CImumInSettingsDataImpl::GetAttr(
       
   469     const TUint aAttributeKey,
       
   470     TInt& aValue ) const
       
   471     {
       
   472     return ImumInSettingsDataCtrl::RetrieveFromArray(
       
   473         *iSettings,
       
   474         aAttributeKey,
       
   475         ECmpTInt32,
       
   476         aValue );
       
   477     }
       
   478 
       
   479 // ---------------------------------------------------------------------------
       
   480 // From class CImumDaSettingsData.
       
   481 // CImumInSettingsDataImpl::GetAttr()
       
   482 // ---------------------------------------------------------------------------
       
   483 //
       
   484 TInt CImumInSettingsDataImpl::GetAttr(
       
   485     const TUint aAttributeKey,
       
   486     TInt64& aValue ) const
       
   487     {
       
   488     return ImumInSettingsDataCtrl::RetrieveFromArray(
       
   489         *iSettings,
       
   490         aAttributeKey,
       
   491         ECmpTInt64,
       
   492         aValue );
       
   493     }
       
   494 
       
   495 // ---------------------------------------------------------------------------
       
   496 // From class CImumDaSettingsData.
       
   497 // CImumInSettingsDataImpl::GetAttr()
       
   498 // ---------------------------------------------------------------------------
       
   499 //
       
   500 TInt CImumInSettingsDataImpl::GetAttr(
       
   501     const TUint aAttributeKey,
       
   502     TMsvId& aId ) const
       
   503     {
       
   504     return ImumInSettingsDataCtrl::RetrieveFromArray(
       
   505         *iSettings,
       
   506         aAttributeKey,
       
   507         ECmpTUint32,
       
   508         aId );
       
   509     }
       
   510 
       
   511 // ---------------------------------------------------------------------------
       
   512 // From class CImumDaSettingsData.
       
   513 // CImumInSettingsDataImpl::GetAttr()
       
   514 // ---------------------------------------------------------------------------
       
   515 //
       
   516 TInt CImumInSettingsDataImpl::GetAttr(
       
   517     const TUint aAttributeKey,
       
   518     TDes& aText ) const
       
   519     {
       
   520     return ImumInSettingsDataCtrl::RetrieveFromArray(
       
   521         *iSettings,
       
   522         aAttributeKey,
       
   523         ECmpNormal,
       
   524         aText );
       
   525     }
       
   526 
       
   527 // ---------------------------------------------------------------------------
       
   528 // From class CImumDaSettingsData.
       
   529 // CImumInSettingsDataImpl::GetAttr()
       
   530 // ---------------------------------------------------------------------------
       
   531 //
       
   532 TInt CImumInSettingsDataImpl::GetAttr(
       
   533     const TUint aAttributeKey,
       
   534     TDes8& aText ) const
       
   535     {
       
   536     return ImumInSettingsDataCtrl::RetrieveFromArray(
       
   537         *iSettings,
       
   538         aAttributeKey,
       
   539         ECmpNormal8,
       
   540         aText );
       
   541     }
       
   542 
       
   543 // ---------------------------------------------------------------------------
       
   544 // From class CImumDaSettingsData.
       
   545 // CImumInSettingsDataImpl::operator!=()
       
   546 // ---------------------------------------------------------------------------
       
   547 //
       
   548 TBool CImumInSettingsDataImpl::operator!=(
       
   549     const CImumDaSettingsData& /* aSettingsData */ ) const
       
   550     {
       
   551     IMUM_CONTEXT( CImumInSettingsDataImpl::operator!=, 0, KLogInApi );
       
   552     IMUM_IN();
       
   553 
       
   554     __ASSERT_DEBUG( EFalse,
       
   555         User::Panic( KImumInSettingsDataImpl,
       
   556         TImumDaErrorCode::EUnsupportedOperation ) );
       
   557 
       
   558     IMUM_OUT();
       
   559 
       
   560     return EFalse;
       
   561     }
       
   562 
       
   563 // ---------------------------------------------------------------------------
       
   564 // From class CImumInSettingsData.
       
   565 // CImumInSettingsDataImpl::operator!=()
       
   566 // ---------------------------------------------------------------------------
       
   567 //
       
   568 TBool CImumInSettingsDataImpl::operator!=(
       
   569     const CImumInSettingsData& /* aSettingsData */ ) const
       
   570     {
       
   571     IMUM_CONTEXT( CImumInSettingsDataImpl::operator!=, 0, KLogInApi );
       
   572     IMUM_IN();
       
   573 
       
   574     __ASSERT_DEBUG( EFalse,
       
   575         User::Panic( KImumInSettingsDataImpl,
       
   576         TImumDaErrorCode::EUnsupportedOperation ) );
       
   577 
       
   578     IMUM_OUT();
       
   579 
       
   580     return EFalse;
       
   581     }
       
   582 
       
   583 // ---------------------------------------------------------------------------
       
   584 // From class CImumDaSettingsData.
       
   585 // CImumInSettingsDataImpl::operator==()
       
   586 // ---------------------------------------------------------------------------
       
   587 //
       
   588 TBool CImumInSettingsDataImpl::operator==(
       
   589     const CImumDaSettingsData& /* aSettingsData */ ) const
       
   590     {
       
   591     IMUM_CONTEXT( CImumInSettingsDataImpl::operator==, 0, KLogInApi );
       
   592     IMUM_IN();
       
   593 
       
   594     __ASSERT_DEBUG( EFalse,
       
   595         User::Panic( KImumInSettingsDataImpl,
       
   596         TImumDaErrorCode::EUnsupportedOperation ) );
       
   597 
       
   598     IMUM_OUT();
       
   599 
       
   600     return EFalse;
       
   601     }
       
   602 
       
   603 // ---------------------------------------------------------------------------
       
   604 // From class CImumInSettingsData.
       
   605 // CImumInSettingsDataImpl::operator==()
       
   606 // ---------------------------------------------------------------------------
       
   607 //
       
   608 TBool CImumInSettingsDataImpl::operator==(
       
   609     const CImumInSettingsData& /* aSettingsData */ ) const
       
   610     {
       
   611     IMUM_CONTEXT( CImumInSettingsDataImpl::operator==, 0, KLogInApi );
       
   612     IMUM_IN();
       
   613 
       
   614     __ASSERT_DEBUG( EFalse,
       
   615         User::Panic( KImumInSettingsDataImpl,
       
   616         TImumDaErrorCode::EUnsupportedOperation ) );
       
   617 
       
   618     IMUM_OUT();
       
   619 
       
   620     return EFalse;
       
   621     }
       
   622 
       
   623 // ---------------------------------------------------------------------------
       
   624 // From class CImumDaSettingsData.
       
   625 // CImumInSettingsDataImpl::operator[]()
       
   626 // ---------------------------------------------------------------------------
       
   627 //
       
   628 MImumDaSettingsDataCollection& CImumInSettingsDataImpl::operator[](
       
   629     const TUint aIndex ) const
       
   630     {
       
   631     IMUM_CONTEXT( CImumInSettingsDataImpl::operator, 0, KLogInApi );
       
   632     IMUM_IN();
       
   633 
       
   634     __ASSERT_DEBUG( aIndex < iConnectionSettings->Count(),
       
   635         User::Panic( KImumInSettingsDataImpl,
       
   636         TImumDaErrorCode::EConnectionIndexOverflow ) );
       
   637 
       
   638     IMUM_OUT();
       
   639 
       
   640     return *iConnectionSettings->At( aIndex );
       
   641     }
       
   642 
       
   643 // ---------------------------------------------------------------------------
       
   644 // From class CImumDaSettingsData.
       
   645 // CImumInSettingsDataImpl::Reset()
       
   646 // ---------------------------------------------------------------------------
       
   647 //
       
   648 void CImumInSettingsDataImpl::Reset( const TUint aAttributeKey )
       
   649     {
       
   650     iSettings->ResetAttr( aAttributeKey );
       
   651     }
       
   652 
       
   653 // ---------------------------------------------------------------------------
       
   654 // From class CImumDaSettingsData.
       
   655 // CImumInSettingsDataImpl::ResetAll()
       
   656 // ---------------------------------------------------------------------------
       
   657 //
       
   658 void CImumInSettingsDataImpl::ResetAll()
       
   659     {
       
   660     IMUM_CONTEXT( CImumInSettingsDataImpl::ResetAll, 0, KLogInApi );
       
   661     IMUM_IN();
       
   662 
       
   663     // Default data is up to date, so do the actual resetting of the
       
   664     // settings
       
   665     for ( TInt connSet = iConnectionSettings->Count(); --connSet >= 0; )
       
   666         {
       
   667         iConnectionSettings->At( connSet )->ResetAll();
       
   668         }
       
   669 
       
   670     RArray<TUint> excludeList;
       
   671     iSettings->ResetAll( excludeList );
       
   672     excludeList.Close();
       
   673 
       
   674     IMUM_OUT();
       
   675     }
       
   676 
       
   677 
       
   678 // ---------------------------------------------------------------------------
       
   679 // From class CImumDaSettingsData.
       
   680 // CImumInSettingsDataImpl::Copy()
       
   681 // ---------------------------------------------------------------------------
       
   682 //
       
   683 TInt CImumInSettingsDataImpl::Copy( const CImumInSettingsData& aSettingsData )
       
   684     {
       
   685     return Copy( *static_cast<const CImumDaSettingsData*>( &aSettingsData ) );
       
   686     }
       
   687 
       
   688 // ---------------------------------------------------------------------------
       
   689 // From class CImumInSettingsData.
       
   690 // CImumInSettingsDataImpl::Copy()
       
   691 // ---------------------------------------------------------------------------
       
   692 //
       
   693 TInt CImumInSettingsDataImpl::Copy( const CImumDaSettingsData& aSettingsData )
       
   694     {
       
   695     IMUM_CONTEXT( CImumInSettingsDataImpl::Copy, 0, KLogInApi );
       
   696     IMUM_IN();
       
   697 
       
   698     __ASSERT_DEBUG( EFalse,
       
   699         User::Panic( KImumInSettingsDataImpl,
       
   700         TImumDaErrorCode::EUnsupportedOperation ) );
       
   701 
       
   702     TInt error = TImumDaErrorCode::ENoError;
       
   703     for ( TInt connSet = iConnectionSettings->Count();
       
   704           --connSet >= 0 && !error; )
       
   705         {
       
   706         error = iConnectionSettings->At( connSet )->Copy( aSettingsData[connSet] );
       
   707         }
       
   708 
       
   709     IMUM_OUT();
       
   710 
       
   711     return error;
       
   712     }
       
   713 
       
   714 // ---------------------------------------------------------------------------
       
   715 // From class CImumDaSettingsData.
       
   716 // CImumInSettingsDataImpl::Log()
       
   717 // ---------------------------------------------------------------------------
       
   718 //
       
   719 void CImumInSettingsDataImpl::Log() const
       
   720     {
       
   721     IMUM_CONTEXT( CImumInSettingsDataImpl::Log, 0, KLogInApi );
       
   722     IMUM_IN();
       
   723 
       
   724 #ifdef __DEBUG
       
   725     // First, validate the connection settings
       
   726     for ( TInt connSet = iConnectionSettings->Count(); --connSet >= 0; )
       
   727         {
       
   728         iConnectionSettings->At( connSet )->Log();
       
   729         }
       
   730 #endif // __DEBUG
       
   731 
       
   732     IMUM_OUT();
       
   733     }
       
   734 
       
   735 // ================ GENERAL IMPLEMENTATION ================
       
   736 
       
   737 // ---------------------------------------------------------------------------
       
   738 // CImumInSettingsDataImpl::SettingsDataExceptionL()
       
   739 // ---------------------------------------------------------------------------
       
   740 //
       
   741 void CImumInSettingsDataImpl::SettingsDataExceptionL(
       
   742     const TInt aErrorCode ) const
       
   743     {
       
   744     IMUM_CONTEXT( CImumInSettingsDataImpl::SettingsDataExceptionL, 0, KLogInApi );
       
   745     IMUM_IN();
       
   746 
       
   747     User::Leave( aErrorCode );
       
   748     __ASSERT_DEBUG( EFalse, User::Panic(
       
   749         KImumInSettingsDataImpl, aErrorCode ) );
       
   750     }
       
   751 
       
   752 // ---------------------------------------------------------------------------
       
   753 // CImumInSettingsDataImpl::ValidatorL()
       
   754 // ---------------------------------------------------------------------------
       
   755 //
       
   756 CImumInSettingsDataValidator& CImumInSettingsDataImpl::ValidatorL()
       
   757     {
       
   758     if ( !iValidator )
       
   759         {
       
   760         // Create settings validator
       
   761         iValidator = CImumInSettingsDataValidator::NewL( iMailboxApi );
       
   762         }
       
   763 
       
   764     return *iValidator;
       
   765     }
       
   766 
       
   767 
       
   768 // ---------------------------------------------------------------------------
       
   769 // CImumInSettingsDataImpl::ValidateL()
       
   770 // ---------------------------------------------------------------------------
       
   771 //
       
   772 void CImumInSettingsDataImpl::ValidateL()
       
   773     {
       
   774     IMUM_CONTEXT( CImumInSettingsDataImpl::ValidateL, 0, KLogInApi );
       
   775     IMUM_IN();
       
   776 
       
   777     ValidatorL().ValidateL( *this );
       
   778 
       
   779     IMUM_OUT();
       
   780     }
       
   781 
       
   782 // ---------------------------------------------------------------------------
       
   783 // CImumInSettingsDataImpl::ConnectionSettingsCount()
       
   784 // ---------------------------------------------------------------------------
       
   785 //
       
   786 TInt CImumInSettingsDataImpl::ConnectionSettingsCount()
       
   787     {
       
   788     return iConnectionSettings->Count();
       
   789     }
       
   790 
       
   791 // ---------------------------------------------------------------------------
       
   792 // From class CImumInSettingsData.
       
   793 // CImumInSettingsDataImpl::CloneL()
       
   794 // ---------------------------------------------------------------------------
       
   795 //
       
   796 CImumInSettingsData* CImumInSettingsDataImpl::CloneL() const
       
   797     {
       
   798     IMUM_CONTEXT( CImumInSettingsDataImpl::CloneL, 0, KLogInApi );
       
   799     IMUM_IN();
       
   800 
       
   801     // When cloning, the default data object must be added to the new data.
       
   802     // This guarrantees also, that there will be only one default data object.
       
   803     CImumInSettingsDataImpl* clone = NewLC(
       
   804         iMailboxApi,
       
   805         TUid::Uid( 0 ),
       
   806         iMailboxApi.MailboxServicesImplL().DefaultDataObjectL() );
       
   807 
       
   808     for ( TInt connection = KErrNotFound;
       
   809         ++connection < iConnectionSettings->Count(); )
       
   810         {
       
   811         clone->iConnectionSettings->AppendL(
       
   812             iConnectionSettings->At( connection )->DoCloneL() );
       
   813         }
       
   814 
       
   815     // Before doing anything, the previous array must be delete to prevent
       
   816     // any extra data to remain in the memory.
       
   817     delete clone->iSettings;
       
   818     clone->iSettings = iSettings->CloneL();
       
   819 
       
   820     CleanupStack::Pop( clone );
       
   821 
       
   822     IMUM_OUT();
       
   823 
       
   824     return clone;
       
   825     }
       
   826