imservices/instantmessagingcache/imcacheclient/src/cimcachefactory.cpp
author hgs
Wed, 03 Nov 2010 22:25:05 +0530
changeset 52 3d676fce9a4e
parent 51 61fad867f68e
permissions -rw-r--r--
201044_02
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
51
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* Initial Contributors:
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
*
hgs
parents:
diff changeset
    12
* Contributors:
hgs
parents:
diff changeset
    13
*
hgs
parents:
diff changeset
    14
* Description:  factory class to create access and updateer class implementation
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
hgs
parents:
diff changeset
    19
hgs
parents:
diff changeset
    20
// INCLUDE FILES
hgs
parents:
diff changeset
    21
#include    "cimcachefactory.h"
hgs
parents:
diff changeset
    22
hgs
parents:
diff changeset
    23
#include	"cimcacheupdater.h"
hgs
parents:
diff changeset
    24
#include	"mimcacheupdater.h"
hgs
parents:
diff changeset
    25
#include	"cimcacheaccessor.h"
hgs
parents:
diff changeset
    26
#include	"mimcacheaccessor.h"
hgs
parents:
diff changeset
    27
#include	"cimcacheclient.h"
hgs
parents:
diff changeset
    28
// logs
hgs
parents:
diff changeset
    29
#include    "imcachedebugtrace.h"
hgs
parents:
diff changeset
    30
hgs
parents:
diff changeset
    31
// ============================ MEMBER FUNCTIONS ===============================
hgs
parents:
diff changeset
    32
 // -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    33
// CIMCacheFactory::Instance
hgs
parents:
diff changeset
    34
//see whether there is an instance in the TLS
hgs
parents:
diff changeset
    35
//if not create the instance and set the same in TLS
hgs
parents:
diff changeset
    36
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    37
//
hgs
parents:
diff changeset
    38
 EXPORT_C CIMCacheFactory* CIMCacheFactory::InstanceL()
hgs
parents:
diff changeset
    39
    {
hgs
parents:
diff changeset
    40
     TRACE( T_LIT("CIMCacheFactory::InstanceL begin") );
hgs
parents:
diff changeset
    41
     CIMCacheFactory *factory = static_cast<CIMCacheFactory*>( Dll::Tls() );
hgs
parents:
diff changeset
    42
    
hgs
parents:
diff changeset
    43
     if ( ! factory )
hgs
parents:
diff changeset
    44
        {
hgs
parents:
diff changeset
    45
        // no existing instance, create a new one
hgs
parents:
diff changeset
    46
        factory = CIMCacheFactory::NewL();
hgs
parents:
diff changeset
    47
        CleanupStack::PushL( factory );
hgs
parents:
diff changeset
    48
        User::LeaveIfError( Dll::SetTls( static_cast<TAny*>( factory ) ) );
hgs
parents:
diff changeset
    49
        CleanupStack::Pop( factory );
hgs
parents:
diff changeset
    50
        }
hgs
parents:
diff changeset
    51
     TRACE( T_LIT("CIMCacheFactory::InstanceL end") );
hgs
parents:
diff changeset
    52
     factory->IncrementReference();
hgs
parents:
diff changeset
    53
     return factory;
hgs
parents:
diff changeset
    54
    }    
hgs
parents:
diff changeset
    55
 // -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    56
// CIMCacheFactory::NewL
hgs
parents:
diff changeset
    57
// Two-phased constructor.
hgs
parents:
diff changeset
    58
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    59
//
hgs
parents:
diff changeset
    60
CIMCacheFactory* CIMCacheFactory::NewL()
hgs
parents:
diff changeset
    61
	{
hgs
parents:
diff changeset
    62
    TRACE( T_LIT("CIMCacheFactory::NewL begin") );
hgs
parents:
diff changeset
    63
    CIMCacheFactory* self = new ( ELeave ) CIMCacheFactory() ;
hgs
parents:
diff changeset
    64
    CleanupStack::PushL( self );
hgs
parents:
diff changeset
    65
    self->ConstructL();
hgs
parents:
diff changeset
    66
    CleanupStack::Pop( self );  //self
hgs
parents:
diff changeset
    67
    TRACE( T_LIT("CIMCacheFactory::NewL end") );
hgs
parents:
diff changeset
    68
    return self;
hgs
parents:
diff changeset
    69
	}
hgs
parents:
diff changeset
    70
hgs
parents:
diff changeset
    71
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    72
// CIMCacheFactory::Release()
hgs
parents:
diff changeset
    73
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    74
// 	       
hgs
parents:
diff changeset
    75
EXPORT_C void CIMCacheFactory::Release()
hgs
parents:
diff changeset
    76
    {
hgs
parents:
diff changeset
    77
    TRACE( T_LIT("CIMCacheFactory::Release start") );
hgs
parents:
diff changeset
    78
    //if any instance in TLS get the same and delete it    
hgs
parents:
diff changeset
    79
    CIMCacheFactory *factory = static_cast<CIMCacheFactory*>( Dll::Tls() );
hgs
parents:
diff changeset
    80
    if ( factory &&  !(factory->DecrementReference()))
hgs
parents:
diff changeset
    81
    if ( factory )
hgs
parents:
diff changeset
    82
        {
hgs
parents:
diff changeset
    83
        delete factory;
hgs
parents:
diff changeset
    84
        Dll::SetTls( NULL );
hgs
parents:
diff changeset
    85
        }
hgs
parents:
diff changeset
    86
    TRACE( T_LIT("CIMCacheFactory::Release end") );
hgs
parents:
diff changeset
    87
    }
hgs
parents:
diff changeset
    88
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    89
// CIMCacheFactory::IncrementReference()
hgs
parents:
diff changeset
    90
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    91
//
hgs
parents:
diff changeset
    92
void CIMCacheFactory::IncrementReference()
hgs
parents:
diff changeset
    93
    {
hgs
parents:
diff changeset
    94
    TRACE( T_LIT("CIMCacheFactory::IncrementReference ") );
hgs
parents:
diff changeset
    95
    iReferenceCount++;   
hgs
parents:
diff changeset
    96
    }
hgs
parents:
diff changeset
    97
hgs
parents:
diff changeset
    98
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    99
// CPresenceCacheServer::DecrementReference()
hgs
parents:
diff changeset
   100
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   101
//
hgs
parents:
diff changeset
   102
TInt CIMCacheFactory::DecrementReference()
hgs
parents:
diff changeset
   103
    {
hgs
parents:
diff changeset
   104
    TRACE( T_LIT("CIMCacheFactory::DecrementReference ") );
hgs
parents:
diff changeset
   105
    iReferenceCount--; 
hgs
parents:
diff changeset
   106
    return iReferenceCount;    
hgs
parents:
diff changeset
   107
    }
hgs
parents:
diff changeset
   108
    
hgs
parents:
diff changeset
   109
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   110
// CIMCacheFactory::CIMCacheFactory()
hgs
parents:
diff changeset
   111
// C++ default constructor can NOT contain any code, that
hgs
parents:
diff changeset
   112
// might leave.
hgs
parents:
diff changeset
   113
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   114
// 
hgs
parents:
diff changeset
   115
CIMCacheFactory::CIMCacheFactory()
hgs
parents:
diff changeset
   116
	{
hgs
parents:
diff changeset
   117
	}
hgs
parents:
diff changeset
   118
hgs
parents:
diff changeset
   119
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   120
// CIMCacheFactory::~CIMCacheFactory()
hgs
parents:
diff changeset
   121
// Symbian OS desstructor 
hgs
parents:
diff changeset
   122
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   123
//
hgs
parents:
diff changeset
   124
CIMCacheFactory::~CIMCacheFactory()
hgs
parents:
diff changeset
   125
	{
hgs
parents:
diff changeset
   126
	TRACE( T_LIT("CIMCacheFactory::~CIMCacheFactory start") );
hgs
parents:
diff changeset
   127
	iUpdaterArray.ResetAndDestroy();
hgs
parents:
diff changeset
   128
	iAccessorArray.ResetAndDestroy();
hgs
parents:
diff changeset
   129
	delete iServerKeepAlive;
hgs
parents:
diff changeset
   130
	TRACE( T_LIT("CIMCacheFactory::~CIMCacheFactory end") );
hgs
parents:
diff changeset
   131
	}
hgs
parents:
diff changeset
   132
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   133
// CIMCacheFactory::ConstructL()
hgs
parents:
diff changeset
   134
// Symbian OS default constructor can leave.
hgs
parents:
diff changeset
   135
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   136
//
hgs
parents:
diff changeset
   137
void CIMCacheFactory::ConstructL( )
hgs
parents:
diff changeset
   138
	{
hgs
parents:
diff changeset
   139
	TRACE( T_LIT("CIMCacheFactory::ConstructL start") );
hgs
parents:
diff changeset
   140
	iServerKeepAlive = new(ELeave) CIMCacheClient(); // CSI: 74 # this needs to be like this
hgs
parents:
diff changeset
   141
	TRACE( T_LIT("CIMCacheFactory::ConstructL end") );
hgs
parents:
diff changeset
   142
	}
hgs
parents:
diff changeset
   143
hgs
parents:
diff changeset
   144
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   145
// CIMCacheFactory::CreateUpdaterL()
hgs
parents:
diff changeset
   146
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   147
//
hgs
parents:
diff changeset
   148
EXPORT_C MIMCacheUpdater* CIMCacheFactory::CreateUpdaterL(TInt aServiceId,
hgs
parents:
diff changeset
   149
															const TDesC& aUserId ,
hgs
parents:
diff changeset
   150
															TBool aRegistrationNeeded )
hgs
parents:
diff changeset
   151
    {
hgs
parents:
diff changeset
   152
    TRACE( T_LIT("CIMCacheFactory::CreateAccessL begin") );
hgs
parents:
diff changeset
   153
    
hgs
parents:
diff changeset
   154
    CIMCacheUpdater* updater = NULL;
hgs
parents:
diff changeset
   155
hgs
parents:
diff changeset
   156
	TInt count = iUpdaterArray.Count();
hgs
parents:
diff changeset
   157
	for( TInt i = 0; i < count; ++i )
hgs
parents:
diff changeset
   158
		{
hgs
parents:
diff changeset
   159
		if( iUpdaterArray[i]->ServiceId() == aServiceId )
hgs
parents:
diff changeset
   160
			{
hgs
parents:
diff changeset
   161
			updater = iUpdaterArray[i];
hgs
parents:
diff changeset
   162
			break;
hgs
parents:
diff changeset
   163
			}
hgs
parents:
diff changeset
   164
		}
hgs
parents:
diff changeset
   165
	if( !updater ) 
hgs
parents:
diff changeset
   166
		{
hgs
parents:
diff changeset
   167
		updater = CIMCacheUpdater::NewL( aServiceId, aUserId, aRegistrationNeeded );
hgs
parents:
diff changeset
   168
		iUpdaterArray.Append(updater);
hgs
parents:
diff changeset
   169
		}
hgs
parents:
diff changeset
   170
		
hgs
parents:
diff changeset
   171
    TRACE( T_LIT("CIMCacheFactory::CreateAccessL end") );
hgs
parents:
diff changeset
   172
    return updater;
hgs
parents:
diff changeset
   173
    }
hgs
parents:
diff changeset
   174
hgs
parents:
diff changeset
   175
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   176
// CIMCacheFactory::CreateAccessorL()
hgs
parents:
diff changeset
   177
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   178
//
hgs
parents:
diff changeset
   179
EXPORT_C MIMCacheAccessor* CIMCacheFactory::CreateAccessorL(TInt aServiceId,
hgs
parents:
diff changeset
   180
															const TDesC& aUserId  )
hgs
parents:
diff changeset
   181
    {
hgs
parents:
diff changeset
   182
    TRACE( T_LIT("CIMCacheFactory::CreateAccessL begin") );
hgs
parents:
diff changeset
   183
    
hgs
parents:
diff changeset
   184
    CIMCacheAccessor* accessor = NULL;
hgs
parents:
diff changeset
   185
hgs
parents:
diff changeset
   186
	TInt count = iAccessorArray.Count();
hgs
parents:
diff changeset
   187
	for( TInt i = 0; i < count; ++i )
hgs
parents:
diff changeset
   188
		{
hgs
parents:
diff changeset
   189
		if( iAccessorArray[i]->ServiceId() == aServiceId )
hgs
parents:
diff changeset
   190
			{
hgs
parents:
diff changeset
   191
			accessor = iAccessorArray[i];
hgs
parents:
diff changeset
   192
			break;
hgs
parents:
diff changeset
   193
			}
hgs
parents:
diff changeset
   194
		}
hgs
parents:
diff changeset
   195
	if( !accessor ) 
hgs
parents:
diff changeset
   196
		{
hgs
parents:
diff changeset
   197
		accessor = CIMCacheAccessor::NewL( aServiceId, aUserId );
hgs
parents:
diff changeset
   198
		iAccessorArray.Append(accessor);
hgs
parents:
diff changeset
   199
		}
hgs
parents:
diff changeset
   200
		
hgs
parents:
diff changeset
   201
    TRACE( T_LIT("CIMCacheFactory::CreateAccessL end") );
hgs
parents:
diff changeset
   202
    return accessor;
hgs
parents:
diff changeset
   203
    }
hgs
parents:
diff changeset
   204
//  End of File
hgs
parents:
diff changeset
   205