contentstorage/casrv/casrvmgr/src/casrvmanager.cpp
author hgs
Fri, 09 Jul 2010 14:19:08 +0300
changeset 102 8b8b34fa9751
parent 94 dbb8300717f7
permissions -rw-r--r--
201027
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,
102
hgs
parents: 94
diff changeset
    53
        Usif::RSoftwareComponentRegistry* aSoftwareRegistry,
85
7feec50967db 201003_02
hgs
parents:
diff changeset
    54
        CCaSrvEngUtils* aUtils )
7feec50967db 201003_02
hgs
parents:
diff changeset
    55
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
    56
    CCaSrvManager* self = new ( ELeave ) CCaSrvManager();
7feec50967db 201003_02
hgs
parents:
diff changeset
    57
    CleanupStack::PushL( self );
102
hgs
parents: 94
diff changeset
    58
    self->ConstructL( aCaStorageProxy, aSoftwareRegistry, aUtils);
85
7feec50967db 201003_02
hgs
parents:
diff changeset
    59
    return self;
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
//
102
hgs
parents: 94
diff changeset
    66
EXPORT_C CCaSrvManager* CCaSrvManager::NewL( CCaStorageProxy& aCaStorageProxy,
hgs
parents: 94
diff changeset
    67
        Usif::RSoftwareComponentRegistry* aSoftwareRegistry,
hgs
parents: 94
diff changeset
    68
        CCaSrvEngUtils* aUtils )
85
7feec50967db 201003_02
hgs
parents:
diff changeset
    69
    {
102
hgs
parents: 94
diff changeset
    70
    CCaSrvManager* self = CCaSrvManager::NewLC( aCaStorageProxy,
hgs
parents: 94
diff changeset
    71
	        aSoftwareRegistry, aUtils );
85
7feec50967db 201003_02
hgs
parents:
diff changeset
    72
    CleanupStack::Pop(); // self;
7feec50967db 201003_02
hgs
parents:
diff changeset
    73
    return self;
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
//
7feec50967db 201003_02
hgs
parents:
diff changeset
    78
// ---------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
    79
//
7feec50967db 201003_02
hgs
parents:
diff changeset
    80
void CCaSrvManager::ConstructL( CCaStorageProxy& aCaStorageProxy,
102
hgs
parents: 94
diff changeset
    81
        Usif::RSoftwareComponentRegistry* aSoftwareRegistry,
85
7feec50967db 201003_02
hgs
parents:
diff changeset
    82
        CCaSrvEngUtils* aUtils )
7feec50967db 201003_02
hgs
parents:
diff changeset
    83
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
    84
    iPluginParams = new TPluginParams();
7feec50967db 201003_02
hgs
parents:
diff changeset
    85
    iPluginParams->storageProxy = &aCaStorageProxy;
7feec50967db 201003_02
hgs
parents:
diff changeset
    86
    iPluginParams->engUtils = aUtils;
102
hgs
parents: 94
diff changeset
    87
    iPluginParams->softwareRegistry = aSoftwareRegistry;
85
7feec50967db 201003_02
hgs
parents:
diff changeset
    88
    LoadPluginsL();
7feec50967db 201003_02
hgs
parents:
diff changeset
    89
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
    90
7feec50967db 201003_02
hgs
parents:
diff changeset
    91
// ---------------------------------------------------------------------------
94
hgs
parents: 85
diff changeset
    92
//
hgs
parents: 85
diff changeset
    93
// ---------------------------------------------------------------------------
hgs
parents: 85
diff changeset
    94
//
hgs
parents: 85
diff changeset
    95
EXPORT_C TInt CCaSrvManager::LoadOperationErrorCodeL()
hgs
parents: 85
diff changeset
    96
    {
hgs
parents: 85
diff changeset
    97
    return iErrorCode;
hgs
parents: 85
diff changeset
    98
    }
hgs
parents: 85
diff changeset
    99
hgs
parents: 85
diff changeset
   100
// ---------------------------------------------------------------------------
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   101
// CASpaPluginManager::LoadPluginsL
7feec50967db 201003_02
hgs
parents:
diff changeset
   102
// Load plugins implementations
7feec50967db 201003_02
hgs
parents:
diff changeset
   103
// ---------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   104
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   105
void CCaSrvManager::LoadPluginsL()
7feec50967db 201003_02
hgs
parents:
diff changeset
   106
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   107
    // Read info about all implementations into infoArray
7feec50967db 201003_02
hgs
parents:
diff changeset
   108
    RImplInfoPtrArray infoArray;
7feec50967db 201003_02
hgs
parents:
diff changeset
   109
7feec50967db 201003_02
hgs
parents:
diff changeset
   110
    // Note that a special cleanup function is required to reset and destroy
7feec50967db 201003_02
hgs
parents:
diff changeset
   111
    // all items in the array, and then close it.
7feec50967db 201003_02
hgs
parents:
diff changeset
   112
    CleanupResetAndDestroyPushL( infoArray );
7feec50967db 201003_02
hgs
parents:
diff changeset
   113
    CCaSrvPlugin::ListAllImplementationsL( infoArray );
7feec50967db 201003_02
hgs
parents:
diff changeset
   114
7feec50967db 201003_02
hgs
parents:
diff changeset
   115
    // Loop through each info for each implementation
7feec50967db 201003_02
hgs
parents:
diff changeset
   116
    // and create and use each in turn
7feec50967db 201003_02
hgs
parents:
diff changeset
   117
    CCaSrvPlugin* plug;
7feec50967db 201003_02
hgs
parents:
diff changeset
   118
    for( TInt i = 0; i < infoArray.Count(); i++ )
7feec50967db 201003_02
hgs
parents:
diff changeset
   119
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   120
        // Slice off first sub-section in the data section
7feec50967db 201003_02
hgs
parents:
diff changeset
   121
        TUid current_plugin = infoArray[i]->ImplementationUid();
94
hgs
parents: 85
diff changeset
   122
        TRAPD(err, plug = CCaSrvPlugin::NewL( current_plugin, iPluginParams ));
hgs
parents: 85
diff changeset
   123
        if( KErrNone==iErrorCode )
hgs
parents: 85
diff changeset
   124
        	{
hgs
parents: 85
diff changeset
   125
        	// remember error code only if it wasn't set yet
hgs
parents: 85
diff changeset
   126
        	iErrorCode = err;
hgs
parents: 85
diff changeset
   127
        	}
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   128
        CleanupStack::PushL( plug );
7feec50967db 201003_02
hgs
parents:
diff changeset
   129
        TInt32 key = current_plugin.iUid;
7feec50967db 201003_02
hgs
parents:
diff changeset
   130
        iPluginMap.InsertL( key, plug );
7feec50967db 201003_02
hgs
parents:
diff changeset
   131
        CleanupStack::Pop( plug );
7feec50967db 201003_02
hgs
parents:
diff changeset
   132
        plug = NULL;
7feec50967db 201003_02
hgs
parents:
diff changeset
   133
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   134
    CleanupStack::PopAndDestroy( &infoArray );
7feec50967db 201003_02
hgs
parents:
diff changeset
   135
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   136
94
hgs
parents: 85
diff changeset
   137
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   138
// End of file