ximpfw/presence/srcpresencecache/presencecacheserver/presencecacheservicestore.cpp
changeset 0 e6b17d312c8b
child 21 cfd5c2994f10
equal deleted inserted replaced
-1:000000000000 0:e6b17d312c8b
       
     1 /*
       
     2 * Copyright (c) 2008 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:  The cache stores a single array of this type. 
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 #include <s32strm.h>
       
    20 #include <ximpidentity.h>
       
    21 #include <presencebuddyinfo.h>
       
    22 
       
    23 #include "presencecacheservicestore.h"
       
    24 #include "presencecachebuddystore.h"
       
    25 #include "ximpidentityimp.h"
       
    26 #include "ximptrace.h"
       
    27 
       
    28 // ---------------------------------------------------------------------------
       
    29 // CPresenceCacheServiceStore::NewLC()
       
    30 // ---------------------------------------------------------------------------
       
    31 //
       
    32 EXPORT_C CPresenceCacheServiceStore* CPresenceCacheServiceStore::NewLC()
       
    33     {
       
    34     CPresenceCacheServiceStore* self = new( ELeave ) CPresenceCacheServiceStore;
       
    35     CleanupStack::PushL( self );
       
    36     self->ConstructL();
       
    37     return self;
       
    38     }
       
    39 
       
    40 // ---------------------------------------------------------------------------
       
    41 // CPresenceCacheServiceStore::NewL()
       
    42 // ---------------------------------------------------------------------------
       
    43 //
       
    44 EXPORT_C CPresenceCacheServiceStore* CPresenceCacheServiceStore::NewL()
       
    45     {
       
    46     CPresenceCacheServiceStore* self = NewLC();
       
    47     CleanupStack::Pop( self );
       
    48     return self;
       
    49     }
       
    50 
       
    51 // ---------------------------------------------------------------------------
       
    52 // CPresenceCacheServiceStore::~CPresenceCacheServiceStore()
       
    53 // ---------------------------------------------------------------------------
       
    54 //
       
    55 CPresenceCacheServiceStore::~CPresenceCacheServiceStore()
       
    56     {
       
    57     TInt count = iBuddyStoreCollection.Count();
       
    58     for (TInt i=0;i<count;i++)
       
    59         {
       
    60         delete iBuddyStoreCollection[i];
       
    61         }
       
    62     iBuddyStoreCollection.Close();
       
    63     if(iServiceName)
       
    64         delete iServiceName;
       
    65     }
       
    66 
       
    67 // ---------------------------------------------------------------------------
       
    68 // CPresenceCacheServiceStore::CPresenceCacheServiceStore()
       
    69 // ---------------------------------------------------------------------------
       
    70 //
       
    71 CPresenceCacheServiceStore::CPresenceCacheServiceStore(): iServiceName(NULL)
       
    72     {
       
    73     }
       
    74 
       
    75 // ---------------------------------------------------------------------------
       
    76 // CPresenceCacheServiceStore::ConstructL()
       
    77 // ---------------------------------------------------------------------------
       
    78 //
       
    79 void CPresenceCacheServiceStore::ConstructL()
       
    80     {
       
    81     }
       
    82 
       
    83 // ---------------------------------------------------------------------------
       
    84 // CPresenceCacheServiceStore::SetServiceNameL()
       
    85 // ---------------------------------------------------------------------------
       
    86 //
       
    87 void CPresenceCacheServiceStore::SetServiceNameL(TDesC& aServiceName)
       
    88     {
       
    89     if(iServiceName)
       
    90         {
       
    91         delete iServiceName;
       
    92         iServiceName = NULL;
       
    93         }
       
    94     iServiceName = aServiceName.AllocL();
       
    95     }
       
    96 
       
    97 // ---------------------------------------------------------------------------
       
    98 // CPresenceCacheServiceStore::GetObjectCollection()
       
    99 // ---------------------------------------------------------------------------
       
   100 //
       
   101 RPointerArray<CPresenceCacheBuddyStore>& CPresenceCacheServiceStore::GetObjectCollection()
       
   102     {
       
   103     return iBuddyStoreCollection;
       
   104     }
       
   105 
       
   106 // ---------------------------------------------------------------------------
       
   107 // CPresenceCacheServiceStore::ServiceName()
       
   108 // ---------------------------------------------------------------------------
       
   109 //
       
   110 TPtrC CPresenceCacheServiceStore::ServiceName() const
       
   111     {
       
   112     return *iServiceName;
       
   113     }
       
   114 
       
   115 // ---------------------------------------------------------------------------
       
   116 // CPresenceCacheServiceStore::Count()
       
   117 // ---------------------------------------------------------------------------
       
   118 //
       
   119 TInt CPresenceCacheServiceStore::Count() const
       
   120     {
       
   121     return iBuddyStoreCollection.Count();
       
   122     }
       
   123     
       
   124 // ---------------------------------------------------------------------------
       
   125 // CPresenceCacheServiceStore::PresenceCount()
       
   126 // ---------------------------------------------------------------------------
       
   127 //
       
   128 TInt CPresenceCacheServiceStore::PresenceCount() const
       
   129     {
       
   130     return iPresenceCount;
       
   131     }
       
   132     
       
   133 // ---------------------------------------------------------------------------
       
   134 // CPresenceCacheServiceStore::AddBlind()
       
   135 // ---------------------------------------------------------------------------
       
   136 //
       
   137 TInt CPresenceCacheServiceStore::AddBlind(CPresenceCacheBuddyStore* aBuddyStore)
       
   138     {
       
   139     TRACE( _L("CPresenceCacheServiceStore::AddBlind - begin") );
       
   140     TRACE_1( _L("______identity: %S"), &(aBuddyStore->BuddyId()->Identity()));
       
   141     
       
   142     if(!aBuddyStore)
       
   143         return KErrArgument;
       
   144     
       
   145     iBuddyStoreCollection.Append(aBuddyStore);
       
   146     
       
   147     // now update the presence count
       
   148     if(aBuddyStore->HasPresence())
       
   149         {
       
   150         iPresenceCount++;        
       
   151         }
       
   152         
       
   153     TRACE( _L("CPresenceCacheServiceStore::AddBlind - return"));
       
   154     return KErrNone;
       
   155     }
       
   156     
       
   157     
       
   158 // ---------------------------------------------------------------------------
       
   159 // CPresenceCacheServiceStore::AddOrReplacePresenceL()
       
   160 // ---------------------------------------------------------------------------
       
   161 //
       
   162 CPresenceCacheBuddyStore* CPresenceCacheServiceStore::AddOrReplacePresenceL
       
   163                                             (MPresenceBuddyInfo* aBuddyPresInfo)
       
   164     {
       
   165     TRACE( _L("CPresenceCacheServiceStore::AddOrReplacePresence - begin") );
       
   166     TRACE_1( _L("______identity: %S"), &(aBuddyPresInfo->BuddyId()->Identity()));
       
   167     
       
   168     
       
   169     CPresenceCacheBuddyStore* newBuddyStore(NULL);
       
   170     if(!aBuddyPresInfo)
       
   171         return newBuddyStore;
       
   172     
       
   173     TBool oldPresExists(EFalse);
       
   174     
       
   175     TInt count = iBuddyStoreCollection.Count();
       
   176     for(TInt i=0;i<count;i++)
       
   177         {
       
   178         if( (iBuddyStoreCollection[i])->EqualsIdentity(aBuddyPresInfo) )
       
   179             {
       
   180             oldPresExists = (iBuddyStoreCollection[i])->HasPresence();
       
   181             iBuddyStoreCollection[i]->SetPresenceBuddyInfo(aBuddyPresInfo);
       
   182             newBuddyStore = iBuddyStoreCollection[i];
       
   183             TRACE( _L("_________Match found") );
       
   184             break;
       
   185             }
       
   186         }
       
   187     
       
   188     //if not edited, we need to add a new buddy store    
       
   189     if(!newBuddyStore)
       
   190         {
       
   191         MXIMPIdentity* id = CXIMPIdentityImp::NewLC(aBuddyPresInfo->BuddyId()->Identity());
       
   192         newBuddyStore = CPresenceCacheBuddyStore::NewLC(this,id);
       
   193         newBuddyStore->SetPresenceBuddyInfo(aBuddyPresInfo);
       
   194         iBuddyStoreCollection.Append(newBuddyStore);
       
   195         CleanupStack::Pop(newBuddyStore); //newBuddyStore
       
   196         CleanupStack::Pop(1); //id
       
   197         }
       
   198         
       
   199     // new presence is certainly added, check whether it was existed
       
   200     if(!oldPresExists)
       
   201         {
       
   202         iPresenceCount++;        
       
   203         }
       
   204 
       
   205     TRACE( _L("CPresenceCacheServiceStore::AddOrReplacePresence - return"));
       
   206     return newBuddyStore;
       
   207     }
       
   208 
       
   209 
       
   210 // ---------------------------------------------------------------------------
       
   211 // CPresenceCacheServiceStore::RemoveBlind()
       
   212 // ---------------------------------------------------------------------------
       
   213 //
       
   214 void CPresenceCacheServiceStore::RemoveBlind(CPresenceCacheBuddyStore* aPresenceBuddyInfo)
       
   215     {
       
   216     TInt index = iBuddyStoreCollection.Find(aPresenceBuddyInfo);
       
   217     if(index>-1)
       
   218         {
       
   219         delete iBuddyStoreCollection[index];
       
   220         iBuddyStoreCollection.Remove(index);
       
   221         }
       
   222     }
       
   223 
       
   224 // ---------------------------------------------------------------------------
       
   225 // CPresenceCacheServiceStore::FindAndRemove()
       
   226 // ---------------------------------------------------------------------------
       
   227 //
       
   228 CPresenceCacheBuddyStore* CPresenceCacheServiceStore::FindAndRemove
       
   229                                     (const MXIMPIdentity& aIdentity, TInt& aErr)
       
   230     {
       
   231     TRACE( _L("CPresenceCacheServiceStore::FindAndRemove - begin") );
       
   232     TRACE_1( _L("______identity: %S"), &(aIdentity.Identity()));
       
   233     TBool oldPresExists(EFalse);
       
   234     CPresenceCacheBuddyStore* buddyStore(NULL);
       
   235     aErr = KErrNotFound;
       
   236 
       
   237     TInt count = iBuddyStoreCollection.Count();
       
   238     for(TInt i=0;i<count;i++)
       
   239         {
       
   240         if( (iBuddyStoreCollection[i])->EqualsIdentity(aIdentity) )
       
   241             {
       
   242             oldPresExists = (iBuddyStoreCollection[i])->HasPresence();
       
   243             
       
   244             //only delete presence if there are subscribers
       
   245             if((iBuddyStoreCollection[i])->HasSubscribers())
       
   246                 {
       
   247                 (iBuddyStoreCollection[i])->SetPresenceBuddyInfo(NULL);
       
   248                 buddyStore = iBuddyStoreCollection[i];
       
   249                 }
       
   250             else //if there are no subscribers remove the whole package
       
   251                 {
       
   252                 delete iBuddyStoreCollection[i];
       
   253                 iBuddyStoreCollection.Remove(i);                
       
   254                 }
       
   255             break;
       
   256             }
       
   257         }
       
   258     
       
   259     // update presence info counts
       
   260     if(oldPresExists)
       
   261         {
       
   262         iPresenceCount--;
       
   263         aErr = KErrNone;      
       
   264         }
       
   265 
       
   266     TRACE_1( _L("CPresenceCacheServiceStore::FindAndRemove - buddyStore=%d"),buddyStore );
       
   267     return buddyStore;
       
   268     }
       
   269     
       
   270 // ---------------------------------------------------------------------------
       
   271 // CPresenceCacheServiceStore::FindAndGet()
       
   272 // ---------------------------------------------------------------------------
       
   273 //
       
   274 CPresenceCacheBuddyStore* CPresenceCacheServiceStore::FindAndGet(
       
   275                                      const MXIMPIdentity& aIdentity) const
       
   276     {
       
   277     TRACE( _L("CPresenceCacheServiceStore::FindAndGet - begin") );
       
   278     TRACE_1( _L("______identity: %S"), &(aIdentity.Identity()));
       
   279     CPresenceCacheBuddyStore* buddyStore(NULL);
       
   280     
       
   281     TInt count = iBuddyStoreCollection.Count();
       
   282     for(TInt i=0;i<count;i++)
       
   283         {
       
   284         if( (iBuddyStoreCollection[i])->EqualsIdentity(aIdentity))
       
   285             {
       
   286             buddyStore = iBuddyStoreCollection[i];
       
   287             break;
       
   288             }
       
   289         }
       
   290     TRACE_1( _L("CPresenceCacheServiceStore::FindAndGet - buddyStore=%d"),buddyStore );    
       
   291     return buddyStore;
       
   292     }
       
   293 
       
   294 // ---------------------------------------------------------------------------
       
   295 // CPresenceCacheServiceStore::RemoveAllPresences()
       
   296 // ---------------------------------------------------------------------------
       
   297 //
       
   298 void CPresenceCacheServiceStore::RemoveAllPresences()
       
   299     {
       
   300     TRACE( _L("CPresenceCacheServiceStore::RemoveAllPresences - begin") );
       
   301         
       
   302     TInt count = iBuddyStoreCollection.Count();
       
   303     TRACE_1( _L("______store collection count: %d"), count);
       
   304     for(TInt i=0;i<count;i++)
       
   305         {
       
   306         (iBuddyStoreCollection[i])->RemovePresenceBuddyInfo();
       
   307         //if it doesnt have subscribers delete this whole object
       
   308         if(!(iBuddyStoreCollection[i]->HasSubscribers()))
       
   309             {
       
   310             delete iBuddyStoreCollection[i];
       
   311             iBuddyStoreCollection.Remove(i);
       
   312             count--;
       
   313             i--;
       
   314             }
       
   315         }
       
   316     iPresenceCount = 0;
       
   317     TRACE(_L("CPresenceCacheServiceStore::RemoveAllPresences - end"));    
       
   318     }
       
   319 
       
   320 // eof