contentstorage/casrv/casrvmgr/src/casrvmanager.cpp
author hgs
Fri, 14 May 2010 17:24:44 +0300
changeset 94 dbb8300717f7
parent 85 7feec50967db
child 102 8b8b34fa9751
permissions -rw-r--r--
201019
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
85
7feec50967db 201003_02
hgs
parents:
diff changeset
     1
/*
7feec50967db 201003_02
hgs
parents:
diff changeset
     2
 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
7feec50967db 201003_02
hgs
parents:
diff changeset
     3
 * All rights reserved.
7feec50967db 201003_02
hgs
parents:
diff changeset
     4
 * This component and the accompanying materials are made available
7feec50967db 201003_02
hgs
parents:
diff changeset
     5
 * under the terms of "Eclipse Public License v1.0"
7feec50967db 201003_02
hgs
parents:
diff changeset
     6
 * which accompanies this distribution, and is available
7feec50967db 201003_02
hgs
parents:
diff changeset
     7
 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
7feec50967db 201003_02
hgs
parents:
diff changeset
     8
 *
7feec50967db 201003_02
hgs
parents:
diff changeset
     9
 * Initial Contributors:
7feec50967db 201003_02
hgs
parents:
diff changeset
    10
 * Nokia Corporation - initial contribution.
7feec50967db 201003_02
hgs
parents:
diff changeset
    11
 *
7feec50967db 201003_02
hgs
parents:
diff changeset
    12
 * Contributors:
7feec50967db 201003_02
hgs
parents:
diff changeset
    13
 *
7feec50967db 201003_02
hgs
parents:
diff changeset
    14
 * Description: casrvmanager.cpp
7feec50967db 201003_02
hgs
parents:
diff changeset
    15
 *
7feec50967db 201003_02
hgs
parents:
diff changeset
    16
 */
7feec50967db 201003_02
hgs
parents:
diff changeset
    17
7feec50967db 201003_02
hgs
parents:
diff changeset
    18
#include <mmf/common/mmfcontrollerpluginresolver.h> // for CleanupResetAndDestroyPushL
7feec50967db 201003_02
hgs
parents:
diff changeset
    19
#include "casrvplugin.h"
7feec50967db 201003_02
hgs
parents:
diff changeset
    20
#include "casrvmanager.h"
7feec50967db 201003_02
hgs
parents:
diff changeset
    21
7feec50967db 201003_02
hgs
parents:
diff changeset
    22
// ---------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
    23
//
7feec50967db 201003_02
hgs
parents:
diff changeset
    24
// ---------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
    25
//
7feec50967db 201003_02
hgs
parents:
diff changeset
    26
CCaSrvManager::CCaSrvManager()
7feec50967db 201003_02
hgs
parents:
diff changeset
    27
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
    28
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
    29
7feec50967db 201003_02
hgs
parents:
diff changeset
    30
// ---------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
    31
//
7feec50967db 201003_02
hgs
parents:
diff changeset
    32
// ---------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
    33
//
7feec50967db 201003_02
hgs
parents:
diff changeset
    34
CCaSrvManager::~CCaSrvManager()
7feec50967db 201003_02
hgs
parents:
diff changeset
    35
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
    36
    THashMapIter<TInt32, CCaSrvPlugin*> iter( iPluginMap );
7feec50967db 201003_02
hgs
parents:
diff changeset
    37
    for( CCaSrvPlugin* const * ptr =
7feec50967db 201003_02
hgs
parents:
diff changeset
    38
            (CCaSrvPlugin* const * ) iter.NextValue(); ptr; ptr
7feec50967db 201003_02
hgs
parents:
diff changeset
    39
            = (CCaSrvPlugin* const * ) iter.NextValue() )
7feec50967db 201003_02
hgs
parents:
diff changeset
    40
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
    41
        delete (CCaSrvPlugin* ) ( *ptr );
7feec50967db 201003_02
hgs
parents:
diff changeset
    42
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
    43
    iPluginMap.Close();
7feec50967db 201003_02
hgs
parents:
diff changeset
    44
7feec50967db 201003_02
hgs
parents:
diff changeset
    45
    delete iPluginParams;
7feec50967db 201003_02
hgs
parents:
diff changeset
    46
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
    47
7feec50967db 201003_02
hgs
parents:
diff changeset
    48
// ---------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
    49
//
7feec50967db 201003_02
hgs
parents:
diff changeset
    50
// ---------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
    51
//
7feec50967db 201003_02
hgs
parents:
diff changeset
    52
CCaSrvManager* CCaSrvManager::NewLC( CCaStorageProxy& aCaStorageProxy,
7feec50967db 201003_02
hgs
parents:
diff changeset
    53
        CCaSrvEngUtils* aUtils )
7feec50967db 201003_02
hgs
parents:
diff changeset
    54
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
    55
    CCaSrvManager* self = new ( ELeave ) CCaSrvManager();
7feec50967db 201003_02
hgs
parents:
diff changeset
    56
    CleanupStack::PushL( self );
7feec50967db 201003_02
hgs
parents:
diff changeset
    57
    self->ConstructL( aCaStorageProxy, aUtils );
7feec50967db 201003_02
hgs
parents:
diff changeset
    58
    return self;
7feec50967db 201003_02
hgs
parents:
diff changeset
    59
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
    60
7feec50967db 201003_02
hgs
parents:
diff changeset
    61
// ---------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
    62
//
7feec50967db 201003_02
hgs
parents:
diff changeset
    63
// ---------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
    64
//
7feec50967db 201003_02
hgs
parents:
diff changeset
    65
EXPORT_C CCaSrvManager* CCaSrvManager::NewL(
7feec50967db 201003_02
hgs
parents:
diff changeset
    66
        CCaStorageProxy& aCaStorageProxy, CCaSrvEngUtils* aUtils )
7feec50967db 201003_02
hgs
parents:
diff changeset
    67
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
    68
    CCaSrvManager* self = CCaSrvManager::NewLC( aCaStorageProxy, aUtils );
7feec50967db 201003_02
hgs
parents:
diff changeset
    69
    CleanupStack::Pop(); // self;
7feec50967db 201003_02
hgs
parents:
diff changeset
    70
    return self;
7feec50967db 201003_02
hgs
parents:
diff changeset
    71
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
    72
7feec50967db 201003_02
hgs
parents:
diff changeset
    73
// ---------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
    74
//
7feec50967db 201003_02
hgs
parents:
diff changeset
    75
// ---------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
    76
//
7feec50967db 201003_02
hgs
parents:
diff changeset
    77
void CCaSrvManager::ConstructL( CCaStorageProxy& aCaStorageProxy,
7feec50967db 201003_02
hgs
parents:
diff changeset
    78
        CCaSrvEngUtils* aUtils )
7feec50967db 201003_02
hgs
parents:
diff changeset
    79
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
    80
    iPluginParams = new TPluginParams();
7feec50967db 201003_02
hgs
parents:
diff changeset
    81
    iPluginParams->storageProxy = &aCaStorageProxy;
7feec50967db 201003_02
hgs
parents:
diff changeset
    82
    iPluginParams->engUtils = aUtils;
7feec50967db 201003_02
hgs
parents:
diff changeset
    83
7feec50967db 201003_02
hgs
parents:
diff changeset
    84
    LoadPluginsL();
7feec50967db 201003_02
hgs
parents:
diff changeset
    85
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
    86
7feec50967db 201003_02
hgs
parents:
diff changeset
    87
// ---------------------------------------------------------------------------
94
hgs
parents: 85
diff changeset
    88
//
hgs
parents: 85
diff changeset
    89
// ---------------------------------------------------------------------------
hgs
parents: 85
diff changeset
    90
//
hgs
parents: 85
diff changeset
    91
EXPORT_C TInt CCaSrvManager::LoadOperationErrorCodeL()
hgs
parents: 85
diff changeset
    92
    {
hgs
parents: 85
diff changeset
    93
    return iErrorCode;
hgs
parents: 85
diff changeset
    94
    }
hgs
parents: 85
diff changeset
    95
hgs
parents: 85
diff changeset
    96
// ---------------------------------------------------------------------------
85
7feec50967db 201003_02
hgs
parents:
diff changeset
    97
// CASpaPluginManager::LoadPluginsL
7feec50967db 201003_02
hgs
parents:
diff changeset
    98
// Load plugins implementations
7feec50967db 201003_02
hgs
parents:
diff changeset
    99
// ---------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   100
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   101
void CCaSrvManager::LoadPluginsL()
7feec50967db 201003_02
hgs
parents:
diff changeset
   102
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   103
    // Read info about all implementations into infoArray
7feec50967db 201003_02
hgs
parents:
diff changeset
   104
    RImplInfoPtrArray infoArray;
7feec50967db 201003_02
hgs
parents:
diff changeset
   105
7feec50967db 201003_02
hgs
parents:
diff changeset
   106
    // Note that a special cleanup function is required to reset and destroy
7feec50967db 201003_02
hgs
parents:
diff changeset
   107
    // all items in the array, and then close it.
7feec50967db 201003_02
hgs
parents:
diff changeset
   108
    CleanupResetAndDestroyPushL( infoArray );
7feec50967db 201003_02
hgs
parents:
diff changeset
   109
    CCaSrvPlugin::ListAllImplementationsL( infoArray );
7feec50967db 201003_02
hgs
parents:
diff changeset
   110
7feec50967db 201003_02
hgs
parents:
diff changeset
   111
    // Loop through each info for each implementation
7feec50967db 201003_02
hgs
parents:
diff changeset
   112
    // and create and use each in turn
7feec50967db 201003_02
hgs
parents:
diff changeset
   113
    CCaSrvPlugin* plug;
7feec50967db 201003_02
hgs
parents:
diff changeset
   114
    for( TInt i = 0; i < infoArray.Count(); i++ )
7feec50967db 201003_02
hgs
parents:
diff changeset
   115
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   116
        // Slice off first sub-section in the data section
7feec50967db 201003_02
hgs
parents:
diff changeset
   117
        TUid current_plugin = infoArray[i]->ImplementationUid();
94
hgs
parents: 85
diff changeset
   118
        TRAPD(err, plug = CCaSrvPlugin::NewL( current_plugin, iPluginParams ));
hgs
parents: 85
diff changeset
   119
        if( KErrNone==iErrorCode )
hgs
parents: 85
diff changeset
   120
        	{
hgs
parents: 85
diff changeset
   121
        	// remember error code only if it wasn't set yet
hgs
parents: 85
diff changeset
   122
        	iErrorCode = err;
hgs
parents: 85
diff changeset
   123
        	}
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   124
        CleanupStack::PushL( plug );
7feec50967db 201003_02
hgs
parents:
diff changeset
   125
        TInt32 key = current_plugin.iUid;
7feec50967db 201003_02
hgs
parents:
diff changeset
   126
        iPluginMap.InsertL( key, plug );
7feec50967db 201003_02
hgs
parents:
diff changeset
   127
        CleanupStack::Pop( plug );
7feec50967db 201003_02
hgs
parents:
diff changeset
   128
        plug = NULL;
7feec50967db 201003_02
hgs
parents:
diff changeset
   129
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   130
    CleanupStack::PopAndDestroy( &infoArray );
7feec50967db 201003_02
hgs
parents:
diff changeset
   131
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   132
94
hgs
parents: 85
diff changeset
   133
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   134
// End of file