deviceupdatesui/deviceupdates/src/nsmldmsyncprofilelist.cpp
author hgs
Tue, 13 Jul 2010 03:42:03 +0530
changeset 43 88e14c3d4c4f
parent 36 9eefb50e711a
permissions -rw-r--r--
201019

/*
* Copyright (c) 2005-2006 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:  Methods for CNSmlDMSyncProfile
*
*/


#include <SyncMLTransportProperties.h>
#include <centralrepository.h>
#include <featmgr.h>
#include "nsmldmsyncprivatecrkeys.h"
#include "nsmldmsyncprofilelist.h"
#include "nsmldmsyncprofile.h"
#include "nsmldmsyncdebug.h"
#include "nsmldmsyncappengine.h"
#include "nsmldmsyncutil.h"

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

// -----------------------------------------------------------------------------
// CNSmlDMSyncProfileList::NewL
//
// Two-phased constructor.
// -----------------------------------------------------------------------------
//
CNSmlDMSyncProfileList* CNSmlDMSyncProfileList::NewL( 
                                                CNSmlDMSyncAppEngine* aEngine )
    {
    FLOG( "[OMADM] CNSmlDMSyncProfileList::NewL:");
    
    CNSmlDMSyncProfileList* self = 
                                new(ELeave) CNSmlDMSyncProfileList( aEngine );
	CleanupStack::PushL(self);
	self->ConstructL();
	CleanupStack::Pop( self );
	return self;
    }

// -----------------------------------------------------------------------------
// Destructor.
// -----------------------------------------------------------------------------
//
CNSmlDMSyncProfileList::~CNSmlDMSyncProfileList()
    {
    FLOG( "[OMADM] CNSmlDMSyncProfileList::~CNSmlDMSyncProfileList():" );
    
	iList.Close();
    }

// -----------------------------------------------------------------------------
// CNSmlDMSyncProfileList::ConstructL
//
// Symbian 2nd phase constructor can leave.
// -----------------------------------------------------------------------------
//
void CNSmlDMSyncProfileList::ConstructL(void)
    {
    FLOG( "[OMADM] CNSmlDMSyncProfileList::ConstructL:" );
    
    }

// -----------------------------------------------------------------------------
// CNSmlDMSyncProfileList::CNSmlDMSyncProfileList.
// -----------------------------------------------------------------------------
//
CNSmlDMSyncProfileList::CNSmlDMSyncProfileList( CNSmlDMSyncAppEngine* aEngine )
	{
	FLOG( "[OMADM] CNSmlDMSyncProfileList::CNSmlDMSyncProfileList:" );
	
	iEngine = aEngine;
	}

// -----------------------------------------------------------------------------
// CNSmlDMSyncProfileList::Count
// -----------------------------------------------------------------------------
//
TInt CNSmlDMSyncProfileList::Count()
	{
	return iList.Count();
	}

// -----------------------------------------------------------------------------
// CNSmlDMSyncProfileList::Item
// -----------------------------------------------------------------------------
//
TNSmlDMSyncProfileItem CNSmlDMSyncProfileList::Item(TInt aIndex)
	{
	if ( ( aIndex < 0 ) || ( aIndex >= Count() ) )
	    {
		TUtil::Panic(KErrGeneral);
	    }

	return iList[aIndex];
	}

// -----------------------------------------------------------------------------
// CNSmlDMSyncProfileList::FindProfile
// -----------------------------------------------------------------------------
//
TInt CNSmlDMSyncProfileList::FindProfile(const TDesC& aProfileName)
	{
	FLOG( "[OMADM] CNSmlDMSyncProfileList::FindProfile:" );
	
	for ( TInt index = 0; index < Count(); index++ )
		{
		TPtrC ptr = Item(index).Name();
		if ( ptr.Compare( aProfileName ) == 0 )
			{
			return index;
			}
		}
	return KErrNotFound;
	}

// -----------------------------------------------------------------------------
// ReplaceProfileItemL
// -----------------------------------------------------------------------------
//
void CNSmlDMSyncProfileList::ReplaceProfileItemL( 
                                        TNSmlDMSyncProfileItem& aProfileItem )
	{
	// remove old profile with same id
	Remove( aProfileItem.iProfileId );
	// add new profile 
    User::LeaveIfError( iList.Append(aProfileItem) );
    Sort();
	}
	
// -----------------------------------------------------------------------------
// CNSmlDMSyncProfileList::ReadProfileItemL
// -----------------------------------------------------------------------------
//
void CNSmlDMSyncProfileList::ReadProfileItemL( TInt aIndex )
	{
	FLOG("[OMADM] CNSmlDMSyncProfileList::ReadProfileItemL:" );
	
    CNSmlDMSyncProfile* profile = iEngine->OpenProfileL( aIndex, ESmlOpenRead );
	
	TNSmlDMSyncProfileItem item = ReadProfileItemL( profile );
	item.iMandatoryCheck = CheckMandatoryDataL( profile );
	ReplaceProfileItemL( item );
	iEngine->CloseProfile();
	}

// -----------------------------------------------------------------------------
// CNSmlDMSyncProfileList::ReadProfileItemsL
// -----------------------------------------------------------------------------
//
void CNSmlDMSyncProfileList::ReadProfileItemsL()
	{
	ReadProfileItemsL( EFalse );
	}

// -----------------------------------------------------------------------------
// CNSmlDMSyncProfileList::ReadProfileItemsL
// -----------------------------------------------------------------------------
//
void CNSmlDMSyncProfileList::ReadProfileItemsL( TBool aIncludeHidden )
	{
	FLOG( "[OMADM] CNSmlDMSyncProfileList::ReadProfileItemsL:" );
	
	RArray<TSmlProfileId> arr;
    iEngine->Session()->ListProfilesL( arr, ESmlDevMan );
   	CleanupClosePushL(arr);
    TNSmlDMSyncProfileItem item;

    TBool fotaSupported = FeatureManager::FeatureSupported( KFeatureIdSyncMlDmFota );
    TBuf<KBufSize256> fotaProfileId;

    if ( fotaSupported && !aIncludeHidden )
    	{
        CRepository* centrep = CRepository::NewL( KCRUidNSmlDMSyncApp );
        if ( centrep->Get( KNSmlDMFotaHiddenProfileIdKey, fotaProfileId ) != KErrNone )
            {
            fotaProfileId.Zero();
            }
        FTRACE( FPrint(
            _L("[OMADM] CNSmlDMSyncProfileList::ReadProfileItemsL() hidden FOTA profile id = \"%S\""),
            &fotaProfileId ) );
        delete centrep;
    	}
    
	for ( TInt index = 0; index < arr.Count(); index++ )
		{
	    TRAPD( error, iEngine->OpenProfileL( arr[index], ESmlOpenRead ) );
	    if ( error == KErrNone )
	        {
	        TRAPD( retVal, item = ReadProfileItemL( iEngine->Profile() ) );

            TBuf<KBufSize256> profileId;
            iEngine->Profile()->GetServerId( profileId );
            if ( (retVal == KErrNone)
                && ( fotaProfileId.Compare(profileId) != 0 ) )
                {
                iList.Append( item );
                }

            iEngine->CloseProfile();
	        }
		}
    CleanupStack::PopAndDestroy( &arr );
	}

// -----------------------------------------------------------------------------
// CNSmlDMSyncProfileList::ReadProfileItemL
// -----------------------------------------------------------------------------
//
TNSmlDMSyncProfileItem CNSmlDMSyncProfileList::ReadProfileItemL( 
                                                CNSmlDMSyncProfile* aProfile )
	{
	FLOG( "[OMADM] CNSmlDMSyncProfileList::ReadProfileItemL:" );
	
	TNSmlDMSyncProfileItem item;
	item.iApplicationId = aProfile->CreatorId();
	TBuf<KBufSize> buf;
	aProfile->GetName( buf );
	item.SetName( buf );
	item.SetId( aProfile->ProfileId() );
	item.iSynced    = aProfile->IsSynced();
	item.iLastSync  = aProfile->LastSync();
	item.iLastSuccessSync = aProfile->LastSuccessSync();
	item.iBearer    = aProfile->BearerType();
    item.iActive    = EFalse;
    if ( aProfile->SASyncState() != ESASyncStateDisable )
    	{
    	item.iActive = ETrue;
    	}
	item.iDeleteAllowed = aProfile->DeleteAllowed();
	item.iProfileLocked = aProfile->ProfileLocked();
	
	// check whether all mandatory data exist
	item.iMandatoryCheck = CheckMandatoryDataL( aProfile );
	return item;	
    }

// -----------------------------------------------------------------------------
// CNSmlDMSyncProfileList::Reset
// -----------------------------------------------------------------------------
//
void CNSmlDMSyncProfileList::Reset()
	{
	FLOG( "[OMADM] CNSmlDMSyncProfileList::Reset:" );
	
	iList.Reset();
	}

// -----------------------------------------------------------------------------
// CNSmlDMSyncProfileList::Remove
// -----------------------------------------------------------------------------
//
void CNSmlDMSyncProfileList::Remove( TInt aProfileId )
	{
	FLOG( "[OMADM] CNSmlDMSyncProfileList::Remove:" );
	
	for ( TInt index = 0; index < Count(); index++ )
		{
		TNSmlDMSyncProfileItem item = iList[index];
		if ( item.iProfileId == aProfileId )
			{
			iList.Remove( index );
			return;
			}
		}
	}

// -----------------------------------------------------------------------------
// CNSmlDMSyncProfileList::CheckMandatoryDataL
// -----------------------------------------------------------------------------
//
TInt CNSmlDMSyncProfileList::CheckMandatoryDataL( CNSmlDMSyncProfile* aProfile )
	{
	FLOG( "[OMADM] CNSmlDMSyncProfileList::CheckMandatoryDataL:" );

	TBuf<KBufSize> buf;
	TInt num;

	aProfile->GetName( buf );
	if ( TUtil::IsEmpty( buf ) )
		{
		return EMandatoryNoProfileName;
		}

	aProfile->GetHostAddress( buf, num );
	if ( TUtil::IsEmpty( buf ) )
		{
		return EMandatoryNoHostAddress;
		}

    return EMandatoryOk;
	}

// -----------------------------------------------------------------------------
// CNSmlDMSyncProfileList::IsEmpty
// -----------------------------------------------------------------------------
//
TBool CNSmlDMSyncProfileList::IsEmpty( const TDesC& aText )
	{
	FLOG( "[OMADM] CNSmlDMSyncProfileList::IsEmpty:" );
	
	for ( TInt index = 0; index < aText.Length(); index++ )
		{
		TChar character = aText[index];
		if ( !character.IsSpace() )
			{
			return EFalse;
			}
		}
	return ETrue;
	}
	
// -----------------------------------------------------------------------------
// Sort
// -----------------------------------------------------------------------------
//
void CNSmlDMSyncProfileList::Sort()
	{
	iList.Sort( TLinearOrder<TNSmlDMSyncProfileItem>(
	                                    TNSmlDMSyncProfileItem::CompareItem) );
	}

// End of File