profilesservices/ProfileEngine/WrapperSrc/CProEngProfileImpl.cpp
author Pat Downey <patd@symbian.org>
Wed, 01 Sep 2010 12:20:44 +0100
branchRCL_3
changeset 25 7e0eff37aedb
parent 24 8ee96d21d9bf
permissions -rw-r--r--
Revert incorrect RCL_3 drop: Revision: 201033 Kit: 201035

/*
* Copyright (c) 2002-2004 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:  Implementation of CProEngProfileImpl.
*
*/



// INCLUDE FILES
#include    "CProEngProfileImpl.h"
#include    "CProEngProfileNameImpl.h"
#include    "CProEngTonesImpl.h"
#include    "CProEngToneSettingsImpl.h"
#include    "CProEngEngineImpl.h"
#include    <MProfileExtended.h>
#include    <MProfileEngineExtended.h>
#include    <MProfileSetTones.h>

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

// -----------------------------------------------------------------------------
// CProEngProfileImpl::CProEngProfileImpl
// -----------------------------------------------------------------------------
//
CProEngProfileImpl::CProEngProfileImpl( CProEngEngineImpl& aProfileEngine,
                                        MProfileExtended* aProfile )
    : iProfileEngine( aProfileEngine ), iProfile( aProfile )
    {
    }

// -----------------------------------------------------------------------------
// CProEngProfileImpl::ConstructL
// -----------------------------------------------------------------------------
//
void CProEngProfileImpl::ConstructL()
    {
    TUint32 flags = iProfile->ModifiableFlags();
    iProfileName = CProEngProfileNameImpl::NewL(
            iProfile->ProfileName(),
            iProfile->ProfileSetName(),
            iProfileEngine,
            flags & EProfileFlagProfileName );
    iTones = CProEngTonesImpl::NewL( 
            iProfile->ProfileTones(),
            iProfile->ProfileSetTones(),
            iProfile->ProfileExtraTones(),
            iProfile->ProfileSetExtraTones(),
            flags );
    iToneSettings = CProEngToneSettingsImpl::NewL(
            iProfile->ProfileSetTones().SetToneSettings(),
            flags );
    }

// -----------------------------------------------------------------------------
// CProEngProfileImpl::NewL
// Two-phased constructor.
// -----------------------------------------------------------------------------
//
CProEngProfileImpl* CProEngProfileImpl::NewL(
        CProEngEngineImpl& aProfileEngine,
        MProfileExtended* aProfile )
    {
    CProEngProfileImpl* self = new ( ELeave ) CProEngProfileImpl(
            aProfileEngine, aProfile );

    CleanupStack::PushL( self );
    self->ConstructL();
    CleanupStack::Pop( self );

    return self;
    }

// Destructor
CProEngProfileImpl::~CProEngProfileImpl()
    {
    delete iToneSettings;
    delete iTones;
    delete iProfileName;
    if( iProfile )
        {
        iProfile->Release();
        }
    }

// -----------------------------------------------------------------------------
// CProEngProfileImpl::Release
// -----------------------------------------------------------------------------
//
void CProEngProfileImpl::Release()
    {
    delete this;
    }

// -----------------------------------------------------------------------------
// CProEngProfileImpl::AlertForL
// -----------------------------------------------------------------------------
//
const TArray<TContactItemId> CProEngProfileImpl::AlertForL()
    {
    return iProfile->AlertForL();
    }

// -----------------------------------------------------------------------------
// CProEngProfileImpl::SetAlertForL
// -----------------------------------------------------------------------------
//
TInt CProEngProfileImpl::SetAlertForL( const TArray<TContactItemId>& aAlertFor )
    {
    TRAPD( err, iProfile->SetAlertForL( aAlertFor ) );
    if( err == KErrArgument )
        {
        return err;
        }

    User::LeaveIfError( err );

    return KErrNone;
    }

// -----------------------------------------------------------------------------
// CProEngProfileImpl::IsSilent
// -----------------------------------------------------------------------------
//
TBool CProEngProfileImpl::IsSilent() const
    {
    return iProfile->IsSilent();
    }

// -----------------------------------------------------------------------------
// CProEngProfileImpl::ProfileName
// -----------------------------------------------------------------------------
//
MProEngProfileName& CProEngProfileImpl::ProfileName() const
    {
    return *iProfileName;
    }

// -----------------------------------------------------------------------------
// CProEngProfileImpl::ProfileTones
// -----------------------------------------------------------------------------
//
MProEngTones& CProEngProfileImpl::ProfileTones() const
    {
    return *iTones;
    }

// -----------------------------------------------------------------------------
// CProEngProfileImpl::ToneSettings
// -----------------------------------------------------------------------------
//
MProEngToneSettings& CProEngProfileImpl::ToneSettings() const
    {
    return *iToneSettings;
    }

// -----------------------------------------------------------------------------
// CProEngProfileImpl::CommitChangeL
// -----------------------------------------------------------------------------
//
void CProEngProfileImpl::CommitChangeL()
    {
    if( iProfileName->AlreadyExistsL( iProfileName->Name() ) )
        {
        User::Leave( KErrAlreadyExists );
        }

    User::LeaveIfError( iTones->CheckTonesL( iProfileEngine.ToneHandler() ) );

    // Read the current tones of this profile for automated content removal
    CProEngProfileImpl* current =
        iProfileEngine.ProfilePrivateLC( iProfileName->Id() );

    // Read the current settings (as internal interface) for roll back in case
    // HandleAutomatedContentL() fails:
    MProfileExtended* currentInternal =
        iProfileEngine.ProfileEngineExtended().ProfileLC( iProfileName->Id() );

    iProfileEngine.ProfileEngineExtended().CommitChangeL( *iProfile );

    TInt err( iTones->HandleAutomatedContent( iProfileEngine.ToneHandler(),
                                              *( current->iTones ) ) );
    if( err )
        { // Roll back the original settings:
        iProfileEngine.ProfileEngineExtended().CommitChangeL(
                *currentInternal );
        }

    CleanupStack::PopAndDestroy( 2 ); // currentInternal, current
    }

//  End of File