menufw/hierarchynavigator/hnmetadatamodel/src/hnmdnotifyrequest.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 17 Dec 2009 08:40:49 +0200
changeset 0 f72a12da539e
permissions -rw-r--r--
Revision: 200949 Kit: 200951

/*
* Copyright (c) 2007-2008 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:  
*
*/


#include <xmlengelement.h> 
#include <xmlengdom.h>

#include "hnmdbasekey.h"
#include "hnmdmodel.h"
#include "hnservicehandler.h"
#include "hnmdservicecommand.h"
#include "hnitemid.h"
#include "hnmdnotifyrequest.h"

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
// 
CHnMdNotifyRequest* CHnMdNotifyRequest::NewL( TXmlEngElement aElement, 
        const CHnItemId & aItemId, THnMdCommonPointers* aCmnPtrs )
        
    {
    CHnMdNotifyRequest* self = CHnMdNotifyRequest::NewLC(aElement,
            aItemId, aCmnPtrs );
    CleanupStack::Pop();
    return self;
    }

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
//
CHnMdNotifyRequest* CHnMdNotifyRequest::NewLC( TXmlEngElement aElement,
        const CHnItemId & aItemId, THnMdCommonPointers* aCmnPtrs )
    {
    CHnMdNotifyRequest* self = new (ELeave) CHnMdNotifyRequest( aCmnPtrs );
    CleanupStack::PushL(self);
    self->ConstructL( aElement, aItemId );
    return self;
    }

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
//
CHnMdNotifyRequest::~CHnMdNotifyRequest()
    {
    delete iItemId;
    delete iService;
    delete iSh;
    }
 
// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
//
void CHnMdNotifyRequest::ConstructL( TXmlEngElement aElement, 
        const CHnItemId & aItemId )
    {
    ASSERT(aElement.Name() == KNotifyRequestElementName8 );

    iItemId = CHnItemId::NewL( aItemId.SuiteName(), aItemId.Id() );
    iService = CHnMdService::NewL( aElement );
    iSh = NULL;
    }
    
// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
//
CHnMdNotifyRequest::CHnMdNotifyRequest(THnMdCommonPointers* aCmnPtrs) 
    : iCmnPtrs(aCmnPtrs)
    {
    }

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
//
void CHnMdNotifyRequest::RequestNotifyL( CLiwGenericParamList& aParams, 
        TInt aCmdOptions )
    {
    if ( iSh == NULL )
        {
        CLiwGenericParamList* constructor =
            iService->EvaluateConstructorL( aParams );
        CleanupStack::PushL(constructor);
        CLiwGenericParamList* command = iService->EvaluateCommandL( aParams );
        CleanupStack::PushL( command );
    
        // Create service
        iSh = CHnServiceHandler::NewL( 
                iService->GetServiceName(), 
                iService->GetInterfaceName(), 
                iService->GetCommand().GetCommandName(),
                EServiceModeAsynchronous,
                constructor, 
                command );
    
        CleanupStack::Pop( command );
        CleanupStack::Pop( constructor );
        }
    iSh->ExecuteL( this, aCmdOptions ); 
    }

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
//     
TInt CHnMdNotifyRequest::HandleNotifyL( TInt /* aCmdId */, TInt aEventId ,
        CLiwGenericParamList& /* aEventParamList */,
        const CLiwGenericParamList& /* aInParamList */)
    {
    TInt err( KErrNone );
    
    if ( aEventId == KLiwEventInProgress )
        {
        //Filling in variant structure.
        CLiwGenericParamList* inParam = CLiwGenericParamList::NewL();
        CleanupStack::PushL( inParam );
           
        CLiwDefaultMap* map = CLiwDefaultMap::NewLC();
            
        map->InsertL( KGenreName8, TLiwVariant(iItemId->SuiteName()) );
        map->InsertL( KItemName8, TLiwVariant(iItemId->Id()) );
        
        CLiwDefaultList* list = CLiwDefaultList::NewLC();   
        
        list->AppendL( TLiwVariant( map ) );
        inParam->AppendL(TLiwGenericParam( KFilterElementItem8, TLiwVariant(list)));
        CleanupStack::PopAndDestroy( list );
        CleanupStack::PopAndDestroy( map );
        
        iCmnPtrs->iModelEventObserver->HandleModelEventL( KReevaluateMdEvent, *inParam );
    
        CleanupStack::PopAndDestroy( inParam );
        }
    
    return err;
    }