simpledatamodeladapter/src/presensepluginlocalstore.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Mon, 15 Mar 2010 12:42:13 +0200
branchRCL_3
changeset 8 aca99fb8a3dd
parent 0 c8caa15ef882
child 11 b4758b4b2d20
permissions -rw-r--r--
Revision: 201009 Kit: 201010

/*
* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
* which accompanies this distribution, and is available
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
*
* Initial Contributors:
* Nokia Corporation - initial contribution.
*
* Contributors:
*
* Description:  IETF SIMPLE Protocol implementation for XIMP Framework
*
*/


#include <aknutils.h>
#include "presencepluginlocalstore.h"
#include "presencelogger.h"

_LIT( KContactId, "ContactId" );
_LIT( KContactTable, "Contacts" );
_LIT( KStorageExtn, ".db" );
_LIT( KDbPath, "c:\\MeCo\\" );


// ======== MEMBER FUNCTIONS ========

// ---------------------------------------------------------------------------
// CPresencePluginLocalstore::CPresencePluginLocalstore
// ---------------------------------------------------------------------------
//
CPresencePluginLocalstore::CPresencePluginLocalstore()
    {
    }


// ---------------------------------------------------------------------------
// CPresencePluginLocalstore::ConstructL()
// ---------------------------------------------------------------------------
//
void CPresencePluginLocalstore::ConstructL( const TDesC& aServiceName )
    {
    DP_SDA( "CPresencePluginLocalstore::ConstructL Start" );

    iLocalDBName =
        HBufC::NewL( aServiceName.Length()+ KStorageExtn().Length() );
    TPtr localDBNamePtr = iLocalDBName->Des();
    localDBNamePtr.Append( aServiceName );

    _LIT( KSpecialChar, "/\\:*?<>\"" );
    AknTextUtils::StripCharacters( localDBNamePtr, KSpecialChar );
    localDBNamePtr.Append( KStorageExtn() );

    DP_SDA2( "CPresencePluginLocalstore::ConstructL - localDBName: %S" , &localDBNamePtr );

    User::LeaveIfError( iFs.Connect() );
    if ( DbExists() )
        {
        DP_SDA( "CPresencePluginLocalstore::ConstructL - DB exists" );
        OpenDbL();
        }
    else
        {
        DP_SDA( "CPresencePluginLocalstore::ConstructL - DB does not exist LEAVE!" );
        User::Leave( KErrNotReady );
        }

    User::LeaveIfError( iTable.Open( iDb, KContactTable ) );
    iColset = iDb.ColSetL( KContactTable );

    DP_SDA( "CPresencePluginLocalstore::ConstructL End" );
    }


// ---------------------------------------------------------------------------
// CPresencePluginLocalstore::NewL()
// ---------------------------------------------------------------------------
//
CPresencePluginLocalstore* CPresencePluginLocalstore::NewL(
    const TDesC& aServiceName )
    {
    CPresencePluginLocalstore* self =
        CPresencePluginLocalstore::NewLC( aServiceName );
    CleanupStack::Pop( self );
    return self;
    }


// ---------------------------------------------------------------------------
// CPresencePluginLocalstore::NewLC()
// ---------------------------------------------------------------------------
//
CPresencePluginLocalstore* CPresencePluginLocalstore::NewLC(
    const TDesC& aServiceName )
    {
    CPresencePluginLocalstore* self =
        new( ELeave ) CPresencePluginLocalstore();
    CleanupStack::PushL( self );
    self->ConstructL( aServiceName );
    return self;
    }


// ---------------------------------------------------------------------------
// CPresencePluginLocalstore::~CPresencePluginLocalstore()
// ---------------------------------------------------------------------------
//
CPresencePluginLocalstore::~CPresencePluginLocalstore()
    {
    DP_SDA( "CPresencePluginLocalstore::~CPresencePluginLocalstore Start" );

    delete iLocalDBName;
    delete iFileStore;
    delete iColset;

    iTable.Close();
    iDb.Close();
    iFs.Close();

    DP_SDA( "CPresencePluginLocalstore::~CPresencePluginLocalstore End" );
    }


// ---------------------------------------------------------------------------
// CPresencePluginLocalstore::OpenDbL
// ---------------------------------------------------------------------------
//
void CPresencePluginLocalstore::OpenDbL()
    {
    DP_SDA( "CPresencePluginLocalstore::OpenDbL() Start" );

    TBuf< KMaxPath > storagePath;
    storagePath.Append( KDbPath );
    storagePath.Append( *iLocalDBName );
    iFileStore = CPermanentFileStore::OpenL( iFs, storagePath,
        EFileShareReadersOrWriters|EFileWrite );
    iFileStore->SetTypeL( iFileStore->Layout() );
    iDb.OpenL( iFileStore, iFileStore->Root() );

    DP_SDA( "CPresencePluginLocalstore::OpenDbL() End" );
    }


// ---------------------------------------------------------------------------
// CPresencePluginLocalstore::DbExists
// ---------------------------------------------------------------------------
//
TBool CPresencePluginLocalstore::DbExists()
    {
    DP_SDA( "CPresencePluginLocalstore::DbExists() Start" );

    TBool ret( ETrue );
    RFile temp;
    TBuf< KMaxPath > storagePath;
    storagePath.Append( KDbPath );
    storagePath.Append( *iLocalDBName );

    TInt err( temp.Open( iFs, *( &storagePath ),
        EFileShareReadersOrWriters|EFileRead ) );
    TInt size( 0 );

    if ( KErrNone == err )
        {
        temp.Size( size );
        }

    temp.Close();

    if ( ( 0 == size ) || ( KErrNone != err ) )
        {
        ret = EFalse;
        }

    DP_SDA( "CPresencePluginLocalstore::DbExists() End" );
    return ret;
    }


// ---------------------------------------------------------------------------
// CPresencePluginLocalstore::SeekRowL()
// ---------------------------------------------------------------------------
//
TBool CPresencePluginLocalstore::SeekRowAtContactColL(
    TInt32& aIdentifier )
    {
    DP_SDA( "CPresencePluginLocalstore::SeekRowAtContactColL() Start" );

    TBool ret( EFalse );
    TDbColNo colNo = iColset->ColNo( KContactId );
    iTable.BeginningL();

    while ( iTable.NextL() )
        {
        DP_SDA( "CPresencePluginLocalstore::SeekRowAtContactColL() - next found" );
        iTable.GetL();
        if ( iTable.ColInt32( colNo ) == aIdentifier )
            {
            ret = ETrue;
            break;
            }
        }

    DP_SDA2( "CPresencePluginLocalstore::SeekRowAtContactColL() End - ret = %d", ret );
    return ret;
    }