httpfilters/cookie/ManagerSrc/CookieClientDataArray.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Wed, 13 Oct 2010 15:09:28 +0300
branchRCL_3
changeset 53 c59bddbfd7b9
parent 40 a0da872af3fa
permissions -rw-r--r--
Revision: 201038 Kit: 201041

/*
 * CookieClientDataArray.cpp
 *
 *  Created on: Dec 18, 2009
 *      Author: mohanti
 */

//System Includes
#include <e32cmn.h>
#include <e32base.h>
#include <e32std.h>

//User Includes
#include "CookieClientDataArray.h"
#include "cookiemanagerclient.h"
#include "CookieArray.h"
#include "CookieLogger.h"
#include "CookieClientData.h"

//Constatnts
const TInt KCookieArrayGranularity = 10;


// ---------------------------------------------------------
// CCookieClientDataArray::New
// ---------------------------------------------------------
//

CCookieClientDataArray* CCookieClientDataArray::New()
    {
    CCookieClientDataArray* arrayInstance = new CCookieClientDataArray();
	if (arrayInstance)
		{
		arrayInstance->Init();
		}
    return arrayInstance ;
    }

CCookieClientDataArray::CCookieClientDataArray()
    {
    }

void CCookieClientDataArray::Init()
    {
    iCookieClientData = new RPointerArray<CCookieClientData>(KCookieArrayGranularity);
    }    

// ---------------------------------------------------------
// CCookieClientDataArray::~CCookieClientDataArray
// ---------------------------------------------------------
//
CCookieClientDataArray::~CCookieClientDataArray()
    {
    CLOG( ( EClient, 0, _L( "-> CCookieClientDataArray::~CCookieClientDataArray" ) ) );
    if(iCookieClientData && iCookieClientData->Count())
        {
         iCookieClientData->ResetAndDestroy();
         iCookieClientData->Close();
         //delete iCookieClientData;
         iCookieClientData = NULL;
        }
    CLOG( ( EClient, 0, _L( "<- CCookieClientDataArray::~CCookieClientDataArray" ) ) );
    }

// ---------------------------------------------------------
// CCookieClientDataArray::Count
// ---------------------------------------------------------
//
TInt CCookieClientDataArray::Count()const
    {
     if (iCookieClientData)
       return iCookieClientData->Count();
     else 
       return 0;
    }

// ---------------------------------------------------------
// CCookieClientDataArray::Compress
// ---------------------------------------------------------
//
void CCookieClientDataArray::AddClientGroupDataL(CCookieClientData* aCookieClientData)
    {
    CLOG( ( EClient, 0, _L( "-> CCookieClientDataArray::AddGroupDataL" ) ) );
    iCookieClientData->AppendL(aCookieClientData);
    CLOG( ( EClient, 0, _L( "<- CCookieClientDataArray::AddGroupDataL" ) ) );
    }

// ---------------------------------------------------------
// CCookieClientDataArray::Compress
// ---------------------------------------------------------
//
void CCookieClientDataArray::Compress()
    {
    CLOG( ( EClient, 0, _L( "-> CCookieClientDataArray::Compress" ) ) );
    iCookieClientData->Compress();
    CLOG( ( EClient, 0, _L( "<- CCookieClientDataArray::Compress" ) ) );
    }

// ---------------------------------------------------------
// CCookieClientDataArray::operator[]
// ---------------------------------------------------------
//
CCookieClientData* CCookieClientDataArray::operator[](TInt aIndex) const
    {
    return (*iCookieClientData)[aIndex];
    }

// ---------------------------------------------------------
// CCookieClientDataArray::At
// ---------------------------------------------------------
//
CCookieClientData* CCookieClientDataArray::At(TInt aIndex) const
    {
    return (*iCookieClientData)[ aIndex ];
    }
// ---------------------------------------------------------
// CCookieClientDataArray::Find
// ---------------------------------------------------------
//
CCookieClientData*  CCookieClientDataArray::Find(const TUint32& aGroupId, const TUint32& aWidgetUid )
    {
    CLOG( ( EClient, 0, _L( "-> CCookieClientDataArray::Find GroupId = %x, WidgetUid = %x" ),aGroupId,aWidgetUid ) );
    TInt total = Count();
    TBool WidgetUidFound = EFalse;
    TInt index = 0;
    for ( TInt i = 0;i<total;i++ )
        {
         if (At(i)->GetGroupId()== aGroupId && (At(i)->GetCookieSharableFlag()))
           {
            WidgetUidFound = ETrue;
            index = i;
            break;
           }
         else if (At(i)->GetGroupId()== aGroupId && !(At(i)->GetCookieSharableFlag()) 
            && (At(i)->GetWidgetUid()== aWidgetUid))
           {
            WidgetUidFound = ETrue;
            index = i;
            break;
           }
        }
  if ( WidgetUidFound )
      {
      CLOG( ( EClient, 0, _L( "<- CCookieClientDataArray::Find found with index = %d" ),index ) );
      return At(index);
      }
  else
      {
      CLOG( ( EClient, 0, _L( "<- CCookieClientDataArray::Find not found " ) ) );
      return NULL;
      }
    }
// ---------------------------------------------------------
// CCookieClientDataArray::FindIndex
// ---------------------------------------------------------
//
TInt CCookieClientDataArray::FindIndex(const TUint32& aGroupId, const TUint32& aWidgetUid,TInt& aIndex )
    {
    CLOG( ( EClient, 0, _L( "-> CCookieClientDataArray::FindIndex GroupId = %x,WidgetUid = %x" )
            ,aGroupId,aWidgetUid ) );
    TInt total = Count();
    TBool WidgetUidFound = EFalse;
    TInt index = 0;
    for ( TInt i = 0;i<total;i++ )
        {
         if (At(i)->GetGroupId()== aGroupId && (At(i)->GetCookieSharableFlag()))
           {
            WidgetUidFound = ETrue;
            index = i;
            break;
           }
         else if (At(i)->GetGroupId()== aGroupId && !(At(i)->GetCookieSharableFlag()) 
            && (At(i)->GetWidgetUid()== aWidgetUid))
           {
            WidgetUidFound = ETrue;
            index = i;
            break;
           }
        }
  if ( WidgetUidFound )
      {
      aIndex = index;
      CLOG( ( EClient, 0, _L( "<- CCookieClientDataArray::FindIndex found with index = %d" ),index ) );
      return KErrNone;
      }
  else
      {
      CLOG( ( EClient, 0, _L( "<- CCookieClientDataArray::FindIndex not found " ) ) );
      return KErrNotFound;
      }
    }

// ---------------------------------------------------------
// CCookieClientDataArray::CookieArray
// ---------------------------------------------------------
//
CCookieArray* CCookieClientDataArray::CookieArray(TInt aIndex)
    {
    CLOG( ( EClient, 0, _L( "-> CCookieClientDataArray::CookieArray Index =%d" ),aIndex ) );
    CCookieClientData* cookieclientdata = At(aIndex);
    return cookieclientdata->CookieArray();
    }


// ---------------------------------------------------------
// CCookieClientDataArray::Remove
// ---------------------------------------------------------
//
void CCookieClientDataArray::Remove(TInt aIndex)
    {
    CLOG( ( EClient, 0, _L( "-> CCookieClientDataArray::Remove %d" ), aIndex ) );
    delete (*iCookieClientData)[ aIndex ];
    iCookieClientData->Remove(aIndex);
    iCookieClientData->Compress();
    CLOG( ( EClient, 0, _L( "<- CCookieClientDataArray::Remove " )) );
    }


// ---------------------------------------------------------
// CCookieClientDataArray::DestroyGroupData
// ---------------------------------------------------------
//
TInt CCookieClientDataArray::DestroyClientData(const TUint32 aAppUid)
    {
    CLOG( ( EClient, 0, _L( "-> CCookieClientDataArray::DestroyClientData" ) ) );
    TUint32 groupid = RProcess().SecureId().iId;
    TInt index = -1;
    TInt err = FindIndex(groupid,aAppUid,index);
    if ( err == KErrNone )
      {
       Remove(index);
      }
    CLOG( ( EClient, 0, _L( "<- CCookieClientDataArray::DestroyClientData removed index = %d" ),index ) );
    return err;
    }
//EOF