omadm/omadmextensions/adapters/browseradapter/src/nsmlbrowseradapter.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 17 Dec 2009 08:40:12 +0200
changeset 0 3ce708148e4d
child 14 4699373c9af8
permissions -rw-r--r--
Revision: 200949 Kit: 200951

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





//INCLUDE FILES
#include <implementationproxy.h> // For TImplementationProxy definition
#include "nsmldmimpluids.h"


#include "nsmldebug.h"
#include "nsmlconstants.h"
#include "nsmldmconst.h"
#include "nsmlbrowseradapter.h"
#include "nsmldmiapmatcher.h"

#include <centralrepository.h>
#include <BrowserUiSDKCRKeys.h>
#include <commdb.h>
#include <cdbcols.h>             // CommsDB columname defs
#include <ApUtils.h>

#ifndef __WINS__
                                    // This lowers the unnecessary compiler warning (armv5) to remark.
                                    // "Warning: #174-D: expression has no effect..." is caused by 
                                    // DBG_ARGS8 macro in no-debug builds.
#pragma diag_remark 174
#endif
const TInt KUserDefined = 0;


const TUint KNSmlDMBrowserAdapterImplUid = 0x1028335F;


// -----------------------------------------------------------------------------
// CNSmlDmBrowserAdapter* CNSmlDmBrowserAdapter::NewL( )
// -----------------------------------------------------------------------------
CNSmlDmBrowserAdapter* CNSmlDmBrowserAdapter::NewL(MSmlDmCallback* aDmCallback )
    {
    _DBG_FILE("CNSmlDmBrowserAdapter::NewL(): begin");
    CNSmlDmBrowserAdapter* self = NewLC( aDmCallback );
    CleanupStack::Pop();
    _DBG_FILE("CNSmlDmBrowserAdapter::NewL(): end");
    return self;
    }

// -----------------------------------------------------------------------------
// CNSmlDmBrowserAdapter* CNSmlDmBrowserAdapter::NewLC( )
// -----------------------------------------------------------------------------
CNSmlDmBrowserAdapter* CNSmlDmBrowserAdapter::NewLC(MSmlDmCallback* aDmCallback )
    {
    _DBG_FILE("CNSmlDmBrowserAdapter::NewLC(): begin");
    CNSmlDmBrowserAdapter* self = new (ELeave) CNSmlDmBrowserAdapter(aDmCallback);
    CleanupStack::PushL(self);
    self->iDmCallback = aDmCallback;
    _DBG_FILE("CNSmlDmBrowserAdapter::NewLC(): end");
    return self;
    }



// -----------------------------------------------------------------------------
// CNSmlDmBrowserAdapter::~CNSmlDmBrowserAdapter()
// -----------------------------------------------------------------------------
CNSmlDmBrowserAdapter::~CNSmlDmBrowserAdapter()
    {
    _DBG_FILE("CNSmlDmBrowserAdapter::~CNSmlDmBrowserAdapter(): begin");
    _DBG_FILE("CNSmlDmBrowserAdapter::~CNSmlDmBrowserAdapter(): end");
    }
    
// -----------------------------------------------------------------------------
// CNSmlDmBrowserAdapter::CNSmlDmBrowserAdapter()
// -----------------------------------------------------------------------------

CNSmlDmBrowserAdapter::CNSmlDmBrowserAdapter(TAny* aEcomArguments):CSmlDmAdapter(aEcomArguments)
    {
    _DBG_FILE("CNSmlDmBrowserAdapter::CNSmlDmBrowserAdapter(aEcomArguments): begin");
    _DBG_FILE("CNSmlDmBrowserAdapter::CNSmlDmBrowserAdapter(aEcomArguments): end"); 
    }

// -----------------------------------------------------------------------------
// CNSmlDmBrowserAdapter::SetLeafPropertiesL()
// -----------------------------------------------------------------------------
void CNSmlDmBrowserAdapter::SetLeafPropertiesL( MSmlDmDDFObject& aObject, 
                                                const TSmlDmAccessTypes& aAccessTypes, 
                                                const TDesC8& aDescription ) const
    {
    aObject.SetAccessTypesL( aAccessTypes );
    aObject.SetScopeL( MSmlDmDDFObject::EPermanent );
    aObject.SetDFFormatL( MSmlDmDDFObject::EChr );
    aObject.AddDFTypeMimeTypeL( KNSmlDMBrowserAdapterTextPlain );
    aObject.SetDescriptionL( aDescription );
    }


// -----------------------------------------------------------------------------
//  CNSmlDmBrowserAdapter::DDFVersionL()
// -----------------------------------------------------------------------------
void CNSmlDmBrowserAdapter::DDFVersionL(CBufBase& aDDFVersion)
    {
    _DBG_FILE("CNSmlDmBrowserAdapter::DDFVersionL(TDes& aDDFVersion): begin");
    aDDFVersion.InsertL(0,KNSmlDMBrowserAdapterDDFVersion);
    _DBG_FILE("CNSmlDmBrowserAdapter::DDFVersionL(TDes& aDDFVersion): end");
    }


// -----------------------------------------------------------------------------
//  CNSmlDmBrowserAdapter::DDFStructureL()
//
// -----------------------------------------------------------------------------
void CNSmlDmBrowserAdapter::DDFStructureL( MSmlDmDDFObject& aDDF )
    {
    _DBG_FILE("CNSmlDmBrowserAdapter::DDFStructureL(): begin");
    
    TSmlDmAccessTypes accessTypes;
    accessTypes.SetGet();
    
    TSmlDmAccessTypes accessSetTypes;
    accessSetTypes.SetGet();
    accessSetTypes.SetAdd();
    accessSetTypes.SetReplace();
    
    MSmlDmDDFObject& dmBrowserAdap = aDDF.AddChildObjectL( KNSmlDMBrowserAdapterNodeName );
    dmBrowserAdap.SetAccessTypesL( accessTypes ); 
    dmBrowserAdap.SetScopeL( MSmlDmDDFObject::EPermanent );
    dmBrowserAdap.SetDescriptionL( KNSmlDMBrowserAdapterDescription );
  
    MSmlDmDDFObject& toNapID = dmBrowserAdap.AddChildObjectL(KNSmlDMBrowserAdapterAPNode);
    toNapID.SetAccessTypesL( accessSetTypes );
    toNapID.SetScopeL( MSmlDmDDFObject::EDynamic );
    toNapID.SetDFFormatL( MSmlDmDDFObject::EChr );
    toNapID.AddDFTypeMimeTypeL( KNSmlDMBrowserAdapterTextPlain );
    toNapID.SetDescriptionL( KNSmlDMBrowserAdapterAPNodeDescription );
    
    MSmlDmDDFObject& startpageURL = dmBrowserAdap.AddChildObjectL(KNSmlDMBrowserAdapterStartpageURL);
    startpageURL.SetAccessTypesL( accessSetTypes );
    startpageURL.SetScopeL( MSmlDmDDFObject::EPermanent );
    startpageURL.SetDFFormatL( MSmlDmDDFObject::EChr );
    startpageURL.AddDFTypeMimeTypeL( KNSmlDMBrowserAdapterTextPlain );
    startpageURL.SetDescriptionL( KNSmlDMBrowserStartpageURLDescription );
    _DBG_FILE("CNSmlDmBrowserAdapter::DDFStructureL(): end");
    }

// -----------------------------------------------------------------------------
//  CNSmlDmBrowserAdapter::UpdateLeafObjectL()
// -----------------------------------------------------------------------------
void CNSmlDmBrowserAdapter::UpdateLeafObjectL( const TDesC8& aURI, 
                                               const TDesC8& aLUID, 
                                               const TDesC8& aObject, 
                                               const TDesC8& aType, 
                                               const TInt aStatusRef )
    {
    _DBG_FILE("CNSmlDmBrowserAdapter::UpdateLeafObjectL(): begin");
    
     CSmlDmAdapter::TError retValue = CSmlDmAdapter::EOk;
    TInt ret = aURI.LocateReverse(KNSmlURISeparator()[0]);
    if ( ret == KErrNotFound ) 
        {
        retValue = CSmlDmAdapter::EError;
        iDmCallback->SetStatusL( aStatusRef, retValue );
        }
    else
        {
        iDmCallback->SetStatusL( aStatusRef, CSmlDmAdapter::EOk );
        TInt len = aURI.Length() - (ret + 1);
        TPtrC8 segment = aURI.Right( len );
        
    	DBG_ARGS8(_S8(" Value being set  URI - <%S> <%S> "), &aURI, &aObject );
                      
		if (segment == KNSmlDMBrowserAdapterAPNode )
            {
              // Get IAP ID and then set the browser setting 
            TInt err = KErrNone;  
            CNSmlDMIAPMatcher* iapmatch = CNSmlDMIAPMatcher::NewL( &Callback() );
            CleanupStack::PushL(iapmatch);
            
            TInt iap = iapmatch->IAPIdFromURIL( aObject );

            CleanupStack::PopAndDestroy(); // iapmatch
            
            if ( iap != KErrNotFound )
                {
                CCommsDatabase* commDb = CCommsDatabase::NewL();
                CleanupStack::PushL(commDb);
                CApUtils* aputils = CApUtils::NewLC(*commDb);
                TRAP(err, iap = aputils->WapIdFromIapIdL( iap ) );
                DBG_ARGS(_S("IAP = %d"), iap);

                CleanupStack::PopAndDestroy(2); //commdb,aputils

                if( err == KErrNone)
                    {
                    CRepository* repository = CRepository::NewLC( KCRUidBrowser );
    
				    // Force the browser to use the User Defined AP selection mode.
    				User::LeaveIfError( repository->Set( KBrowserAccessPointSelectionMode,
                                         KUserDefined ) );
    				// This sets the accesspoint default for browser.
    				User::LeaveIfError( repository->Set( KBrowserDefaultAccessPoint,
                                         iap ) );
				    CleanupStack::PopAndDestroy(); // repository
    
                    }
                else
                    {
                    _DBG_FILE("CNSmlDmMMSAdapter::UpdateDataL(): \
                    err!=KErrNone");
                    iDmCallback->SetStatusL( aStatusRef, CSmlDmAdapter::EInvalidObject );
                     
                    }
                }
            else
                {
                _DBG_FILE("CNSmlDmMMSAdapter::UpdateDataL(): status = \
                CSmlDmAdapter::EInvalidObject");
              	iDmCallback->SetStatusL( aStatusRef, CSmlDmAdapter::EInvalidObject );
                }
            }
		else if(segment == KNSmlDMBrowserAdapterStartpageURL )
		    {
		    	// To Get the Browser Start page URL
		    TBuf<KMaxLengthStartpageName> aBuf;
		    TInt aErr;
		    aBuf.Zero();
		    aBuf.Copy(aObject);

            if(aBuf.Length() == 0 || aBuf.Length() > KMaxLengthStartpageName)
                {
                _DBG_FILE("CNSmlDmBrowserAdapter::UpdateLeafObjectL(): Error Zero Length String");
                iDmCallback->SetStatusL( aStatusRef, CSmlDmAdapter::EInvalidObject);
                return;
                }
                
		    
		    CRepository* repository = CRepository::NewLC( KCRUidBrowser );
		        
		    if(repository)
		        {
		        _DBG_FILE("CNSmlDmBrowserAdapter::UpdateLeafObjectL(): Before Set for StartPage");
		        User::LeaveIfError( aErr = repository->Set( KBrowserNGStartpageURL,aBuf));
		        if(aErr != KErrNone)
                    {
                    _DBG_FILE("CNSmlDmBrowserAdapter::UpdateLeafObjectL(): Error in Cenrep Set");
                    iDmCallback->SetStatusL( aStatusRef, CSmlDmAdapter::EError);
					return;
                    }
		        _DBG_FILE("CNSmlDmBrowserAdapter::UpdateLeafObjectL(): Before Set for StartPageType");
		        User::LeaveIfError( aErr = repository->Set( KBrowserNGHomepageType,KBrowserHomePageUDefined));
                if(aErr != KErrNone)
                    {
                    _DBG_FILE("CNSmlDmBrowserAdapter::UpdateLeafObjectL(): Error in Cenrep Set");
                    iDmCallback->SetStatusL( aStatusRef, CSmlDmAdapter::EError);
                    return;
                    }

		        }
		    _DBG_FILE("CNSmlDmBrowserAdapter::UpdateLeafObjectL(): Before Setting status to OK");
            CleanupStack::PopAndDestroy(); // repository
            iDmCallback->SetStatusL( aStatusRef, CSmlDmAdapter::EOk );
		        
		    }
        else
            {
            iDmCallback->SetStatusL( aStatusRef, CSmlDmAdapter::EOk );
            }   
        }
        
    _DBG_FILE("CNSmlDmBrowserAdapter::UpdateLeafObjectL(): end");
    }


// -----------------------------------------------------------------------------
// CNSmlDmBrowserAdapter::DeleteObjectL()
// -----------------------------------------------------------------------------
void CNSmlDmBrowserAdapter::DeleteObjectL( const TDesC8& /*aURI*/, 
                                           const TDesC8& /*aLUID*/, 
                                           const TInt aStatusRef )
    {
    _DBG_FILE("CNSmlDmBrowserAdapter::DeleteLeafObjectL( ): begin");
    _DBG_FILE("CNSmlDmBrowserAdapter::DeleteLeafObjectL( ): end");
    iDmCallback->SetStatusL( aStatusRef, CSmlDmAdapter::EError );
    }


// -----------------------------------------------------------------------------
//  CNSmlDmBrowserAdapter::FetchLeafObjectL( const TDesC8& aURI, const TDesC8& aLUID, 
// const TDesC8& aType, const TInt aResultsRef, const TInt aStatusRef )
// -----------------------------------------------------------------------------
void CNSmlDmBrowserAdapter::FetchLeafObjectL( const TDesC8& aURI, 
                                              const TDesC8& /*aLUID*/, 
                                              const TDesC8& aType, 
                                              const TInt aResultsRef, 
                                              const TInt aStatusRef )
    {
    _DBG_FILE("CNSmlDmBrowserAdapter::FetchLeafObjectL(): begin");
    
    CBufBase *object = CBufFlat::NewL( 1 );
    CleanupStack::PushL( object );
    
    CSmlDmAdapter::TError retValue = FetchLeafObjectL( aURI, *object );
    
    iDmCallback->SetStatusL( aStatusRef, retValue );
    iDmCallback->SetResultsL( aResultsRef, *object, aType );
    CleanupStack::PopAndDestroy(); //object
    _DBG_FILE("CNSmlDmDevInfoAdapt+er::FetchLeafObjectL(): end");
    }


// -----------------------------------------------------------------------------
//  CNSmlDmBrowserAdapter::ChildURIListL( const TDesC& aURI, 
// const TDesC& aParentLUID, const CArrayFix<TSmlDmMappingInfo>& aPreviousURISegmentList, 
// const TInt aResultsRef, const TInt aStatusRef )
// -----------------------------------------------------------------------------
void CNSmlDmBrowserAdapter::ChildURIListL( const TDesC8& aURI, 
                                           const TDesC8& /*aParentLUID*/, 
                                           const CArrayFix<TSmlDmMappingInfo>& /*aPreviousURISegmentList*/, 
                                           const TInt aResultsRef, 
                                           const TInt aStatusRef )
    {
    _DBG_FILE("CNSmlDmBrowserAdapter::ChildURIListL(): begin");
    CSmlDmAdapter::TError retValue = CSmlDmAdapter::EOk;
    CBufBase* currentURISegmentList = CBufFlat::NewL( 1 );
    CleanupStack::PushL( currentURISegmentList );
    TInt ret = aURI.LocateReverse(KNSmlURISeparator()[0]);
    if ( ret == KErrNotFound ) 
        {
        ret = -1;
        }
    TInt len = aURI.Length() - ( ret + 1 );
    TPtrC8 segment = aURI.Right( len );

    if ( segment == KNSmlDMBrowserAdapterNodeName )
        {
        currentURISegmentList->InsertL( currentURISegmentList->Size(), KNSmlDMBrowserAdapterBrowserNodes() );
        }
    
    else
        {
        retValue = CSmlDmAdapter::EError;
        }
    iDmCallback->SetStatusL( aStatusRef, retValue );
    iDmCallback->SetResultsL( aResultsRef, *currentURISegmentList, KNullDesC8 );
    CleanupStack::PopAndDestroy(); //currentURISegmentList
    _DBG_FILE("CNSmlDmBrowserAdapter::ChildURIListL(): end");
    }


// -----------------------------------------------------------------------------
// CNSmlDmBrowserAdapter::AddNodeObjectL( const TDesC8& aURI, 
// const TDesC8& aParentLUID, const TInt aStatusRef )
// -----------------------------------------------------------------------------
void CNSmlDmBrowserAdapter::AddNodeObjectL( const TDesC8& /*aURI*/, 
                                            const TDesC8& /*aParentLUID*/, 
                                            const TInt aStatusRef )
    {
    _DBG_FILE("CNSmlDmBrowserAdapter::AddNodeObjectL(): begin");
    iDmCallback->SetStatusL( aStatusRef, CSmlDmAdapter::EError );
    _DBG_FILE("CNSmlDmBrowserAdapter::AddNodeObjectL(): end");
    }

// -----------------------------------------------------------------------------
//  CNSmlDmBrowserAdapter::UpdateLeafObjectL()
// -----------------------------------------------------------------------------
void CNSmlDmBrowserAdapter::UpdateLeafObjectL( const TDesC8& /*aURI*/, 
                                               const TDesC8& /*aLUID*/, 
                                               RWriteStream*& /*aStream*/, 
                                               const TDesC8& /*aType*/, 
                                               const TInt aStatusRef )
    {
    _DBG_FILE("CNSmlDmBrowserAdapter::UpdateLeafObjectL(): stream: begin");
    iDmCallback->SetStatusL( aStatusRef, CSmlDmAdapter::EError );
    _DBG_FILE("CNSmlDmBrowserAdapter::UpdateLeafObjectL(): stream: end");
    }


// -----------------------------------------------------------------------------
//  CNSmlDmBrowserAdapter::FetchLeafObjectSizeL( const TDesC8& aURI, 
//  const TDesC8& aLUID, const TDesC8& aType, TInt aResultsRef, TInt aStatusRef )
// -----------------------------------------------------------------------------
void CNSmlDmBrowserAdapter::FetchLeafObjectSizeL( const TDesC8& aURI, 
                                                  const TDesC8& /*aLUID*/, 
                                                  const TDesC8& aType, 
                                                  const TInt aResultsRef, 
                                                  const TInt aStatusRef )
    {

    _DBG_FILE("CNSmlDmBrowserAdapter::FetchLeafObjectSizeL(): begin");
    
    CBufBase *object = CBufFlat::NewL( 1 );
    CleanupStack::PushL( object );
    CSmlDmAdapter::TError retValue = FetchLeafObjectL( aURI, *object );
        
    TInt objSizeInBytes = object->Size();
    TBuf8<2> stringObjSizeInBytes;
    stringObjSizeInBytes.Num( objSizeInBytes );
    object->Reset();
    object->InsertL( 0, stringObjSizeInBytes );
    
    iDmCallback->SetStatusL( aStatusRef, retValue );
    iDmCallback->SetResultsL( aResultsRef, *object, aType );
    CleanupStack::PopAndDestroy(); //object
    _DBG_FILE("CNSmlDmBrowserAdapter::FetchLeafObjectSizeL(): end");
    }
    

// -----------------------------------------------------------------------------
//  CNSmlDmBrowserAdapter::ExecuteCommandL( const TDesC8& aURI, 
//  const TDesC8& aParentLUID, TDesC8& aArgument, const TDesC8& aType, TInt aStatusRef )
// -----------------------------------------------------------------------------
void CNSmlDmBrowserAdapter::ExecuteCommandL( const TDesC8& aURI, const TDesC8& aLUID, const TDesC8& aArgument, const TDesC8& aType, const TInt aStatusRef )
    {
    _DBG_FILE("CNSmlDmBrowserAdapter::ExecuteCommandL(): begin");
    iDmCallback->SetStatusL( aStatusRef, CSmlDmAdapter::EError );
    _DBG_FILE("CNSmlDmBrowserAdapter::ExecuteCommandL(): end");
    }

// -----------------------------------------------------------------------------
//  CNSmlDmBrowserAdapter::ExecuteCommandL( const TDesC8& aURI, 
//  const TDesC8& aParentLUID, RWriteStream*& aStream, const TDesC8& aType, 
//  TInt aStatusRef )
// -----------------------------------------------------------------------------
void CNSmlDmBrowserAdapter::ExecuteCommandL( const TDesC8& /*aURI*/, 
                                             const TDesC8& /*aParentLUID*/, 
                                             RWriteStream*& /*aStream*/, 
                                             const TDesC8& /*aType*/, 
                                             const TInt aStatusRef )
    {
    _DBG_FILE("CNSmlDmBrowserAdapter::ExecuteCommandL(): stream: begin");
    iDmCallback->SetStatusL( aStatusRef, CSmlDmAdapter::EError );
    _DBG_FILE("CNSmlDmBrowserAdapter::ExecuteCommandL(): stream: end");
    }

// -----------------------------------------------------------------------------
//  CNSmlDmBrowserAdapter::CopyCommandL( const TDesC8& aTargetURI, const TDesC8& 
//  aSourceURI, const TDesC8& aSourceLUID, const TDesC8& /*aType*/, TInt aStatusRef )
// -----------------------------------------------------------------------------
void CNSmlDmBrowserAdapter::CopyCommandL( const TDesC8& /*aTargetURI*/, const TDesC8& 
                                          /*aTargetLUID*/, const TDesC8& /*aSourceURI*/, 
                                          const TDesC8& /*aSourceLUID*/, 
                                          const TDesC8& /*aType*/, TInt aStatusRef )
    {
    _DBG_FILE("CNSmlDmBrowserAdapter::CopyCommandL(): begin");
    iDmCallback->SetStatusL( aStatusRef, CSmlDmAdapter::EError );
    _DBG_FILE("CNSmlDmBrowserAdapter::CopyCommandL(): end");
    }

// --------------------------------------
//  CNSmlDmBrowserAdapter::StartAtomicL()
// --------------------------------------
void CNSmlDmBrowserAdapter::StartAtomicL()
    {
    _DBG_FILE("CNSmlDmBrowserAdapter::StartAtomicL(): begin");
    _DBG_FILE("CNSmlDmBrowserAdapter::StartAtomicL(): end");
    }
    
// ---------------------------------------
//  CNSmlDmBrowserAdapter::CommitAtomicL()
// ---------------------------------------
void CNSmlDmBrowserAdapter::CommitAtomicL()
    {
    _DBG_FILE("CNSmlDmBrowserAdapter::CommitAtomicL(): begin");
    _DBG_FILE("CNSmlDmBrowserAdapter::CommitAtomicL(): end");
    }

// -----------------------------------------
//  CNSmlDmBrowserAdapter::RollbackAtomicL()
// -----------------------------------------
void CNSmlDmBrowserAdapter::RollbackAtomicL()
    {
    _DBG_FILE("CNSmlDmBrowserAdapter::RollbackAtomicL(): begin");
    _DBG_FILE("CNSmlDmBrowserAdapter::RollbackAtomicL(): end");
    }

// -----------------------------------------------------------
//  CNSmlDmBrowserAdapter::StreamingSupport( TInt& aItemSize )
// -----------------------------------------------------------  
TBool CNSmlDmBrowserAdapter::StreamingSupport( TInt& /*aItemSize*/ )
    {
    _DBG_FILE("CNSmlDmBrowserAdapter::StreamingSupport(): begin");
    _DBG_FILE("CNSmlDmBrowserAdapter::StreamingSupport(): end");
    return EFalse;
    }

// ------------------------------------------
//  CNSmlDmBrowserAdapter::StreamCommittedL()
// ------------------------------------------
void CNSmlDmBrowserAdapter::StreamCommittedL()
    {
    _DBG_FILE("CNSmlDmBrowserAdapter::StreamCommittedL(): begin");
    _DBG_FILE("CNSmlDmBrowserAdapter::StreamCommittedL(): end");
    }

// --------------------------------------------------
//  CNSmlDmBrowserAdapter::CompleteOutstandingCmdsL()
// --------------------------------------------------   
void CNSmlDmBrowserAdapter::CompleteOutstandingCmdsL()
    {
    _DBG_FILE("CNSmlDmBrowserAdapter::CompleteOutstandingCmdsL(): begin");
    _DBG_FILE("CNSmlDmBrowserAdapter::CompleteOutstandingCmdsL(): end");    
    }

// -----------------------------------------------------------------------------
// CNSmlDmDevDetailAdapter::FetchLeafObjectL()
// -----------------------------------------------------------------------------
CSmlDmAdapter::TError CNSmlDmBrowserAdapter::FetchLeafObjectL( const TDesC8& aURI, 
                                                               CBufBase& aObject )
    {
    _DBG_FILE("CNSmlDmInfoAdapter::FetchLeafObjectL(): begin");
    CSmlDmAdapter::TError retValue = CSmlDmAdapter::EOk;
    TInt ret = aURI.LocateReverse(KNSmlURISeparator()[0]);
    TInt err = KErrNone;
    if ( ret == KErrNotFound ) 
        {
        retValue = CSmlDmAdapter::EError;
        }
    else
        {
        TInt len = aURI.Length() - (ret + 1);
        TPtrC8 segment = aURI.Right( len );
        
        if(segment == KNSmlDMBrowserAdapterAPNode)
            {
            TInt iap ;
            CRepository* repository = CRepository::NewLC( KCRUidBrowser );
    
		    // Force the browser to use the User Defined AP selection mode.
    		TInt selectionMode;
    		User::LeaveIfError( repository->Get( KBrowserAccessPointSelectionMode,
                                         selectionMode ) );
    		if (selectionMode != KUserDefined)                                          
        		{
         		retValue= CSmlDmAdapter::ENotFound;
		         
        		CleanupStack::PopAndDestroy(); // repository
        		}
       		else
        		{
        		// This sets the accesspoint default for browser.
    			User::LeaveIfError( repository->Get( KBrowserDefaultAccessPoint,
                                         iap ) );
    			CleanupStack::PopAndDestroy(); // repository
            
            	CCommsDatabase* commDb = CCommsDatabase::NewL();
                CleanupStack::PushL(commDb);
                CApUtils* aputils = CApUtils::NewLC(*commDb);
                TRAP(err, iap = aputils->IapIdFromWapIdL( iap ) );
                DBG_ARGS(_S("IAP = %d"), iap);

        
        	if( iap != -1 && err == KErrNone )
            	{
            	CNSmlDMIAPMatcher* iapmatch = CNSmlDMIAPMatcher::NewL( &Callback() );
            	CleanupStack::PushL(iapmatch);
    
            	HBufC8* uri8 = iapmatch->URIFromIAPIdL( iap );
                
            if( uri8 )
                {
                CleanupStack::PushL(uri8);
                aObject.InsertL(0,uri8->Des());
                retValue= CSmlDmAdapter::EOk;
                
                CleanupStack::PopAndDestroy(); // uri8
                }
            else
                {
                retValue= CSmlDmAdapter::ENotFound;
                
                }    
            CleanupStack::PopAndDestroy(); // iapMatch
            
            }
            else
                {
                retValue= CSmlDmAdapter::ENotFound;
                }
                CleanupStack::PopAndDestroy(); // apUrils
                CleanupStack::PopAndDestroy(); // commDb
            }
        }
        else if(segment == KNSmlDMBrowserAdapterStartpageURL)
            {
            	// To Set the Browser Start page URL
            TBuf8<KMaxLengthStartpageName> aName;
            CRepository* centrep( NULL);
            aName.Zero();
            centrep = CRepository::NewLC(KCRUidBrowser);

            if ( centrep )
                {
                TFullName temp;
                
                if (centrep->Get( KBrowserNGStartpageURL, temp )==KErrNone && temp.Length() )
                    {
                    _DBG_FILE("CNSmlDmBrowserAdapter::FetchLeafObjectL(): Got the value for start page");
                    temp.Trim();
                    aName.Copy(temp);
                    }
                CleanupStack::PopAndDestroy(centrep);
                }
            aObject.InsertL(0,aName);
            retValue= CSmlDmAdapter::EOk;   
            }
    
        }
    _DBG_FILE("CNSmlDmInfoAdapter::FetchLeafObjectL(): end");
    return retValue;
    }

// -----------------------------------------------------------------------------
//
// -----------------------------------------------------------------------------
#ifndef IMPLEMENTATION_PROXY_ENTRY
#define IMPLEMENTATION_PROXY_ENTRY(aUid, aFuncPtr)  {{aUid},(aFuncPtr)}
#endif

const TImplementationProxy ImplementationTable[] = 
    {
        IMPLEMENTATION_PROXY_ENTRY(KNSmlDMBrowserAdapterImplUid, CNSmlDmBrowserAdapter::NewL)
    };

// -----------------------------------------------------------------------------
//
// -----------------------------------------------------------------------------
EXPORT_C const TImplementationProxy* ImplementationGroupProxy( TInt& aTableCount )
    {
    _DBG_FILE("ImplementationGroupProxy() for CNSmlDmBrowserAdapter: begin");
    aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy);
    _DBG_FILE("ImplementationGroupProxy() for CNSmlDmBrowserAdapter: end");
    return ImplementationTable;
    }

// End of file