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

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





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

#include "nsmldmdevinfoadapter.h"
#include "nsmldebug.h"
#include "nsmlphoneinfo.h"
#include "nsmlunicodeconverter.h"
#include "nsmlconstants.h"
#include "nsmldmconst.h"
#include "nsmldmdevdetailadapter.h"


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

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



// -----------------------------------------------------------------------------
// CNSmlDmDevInfoAdapter::~CNSmlDmDevInfoAdapter()
// -----------------------------------------------------------------------------
CNSmlDmDevInfoAdapter::~CNSmlDmDevInfoAdapter()
    {
    _DBG_FILE("CNSmlDmDevInfoAdapter::~CNSmlDmDevInfoAdapter(): begin");
    FeatureManager::UnInitializeLib();
    _DBG_FILE("CNSmlDmDevInfoAdapter::~CNSmlDmDevInfoAdapter(): end");
    }
    
// -----------------------------------------------------------------------------
// CNSmlDmDevInfoAdapter::CNSmlDmDevInfoAdapter()
// -----------------------------------------------------------------------------

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

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


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


// -----------------------------------------------------------------------------
//  CNSmlDmDevInfoAdapter::DDFStructureL()
//
// -----------------------------------------------------------------------------
void CNSmlDmDevInfoAdapter::DDFStructureL( MSmlDmDDFObject& aDDF )
    {
    _DBG_FILE("CNSmlDmDevInfoAdapter::DDFStructureL(): begin");
    
    TSmlDmAccessTypes accessTypes;
    accessTypes.SetGet();
    // DevInfo
    MSmlDmDDFObject& devInfo = aDDF.AddChildObjectL( KNSmlDMDevInfoNodeName );
    devInfo.SetAccessTypesL( accessTypes ); 
    devInfo.SetScopeL( MSmlDmDDFObject::EPermanent );
    devInfo.SetDescriptionL( KNSmlDMDevInfoDescription );
    // Man  
    MSmlDmDDFObject& man = devInfo.AddChildObjectL(KNSmlDMDevInfoManNodeName);
    SetLeafPropertiesL( man, accessTypes, KNSmlDMDevInfoManDescription );
    // Mod  
    MSmlDmDDFObject& mod = devInfo.AddChildObjectL(KNSmlDMDevInfoModNodeName );
    SetLeafPropertiesL( mod, accessTypes, KNSmlDMDevInfoModDescription );
    // DevId    
    MSmlDmDDFObject& devid = devInfo.AddChildObjectL( KNSmlDMDevInfoDevIdNodeName);
    SetLeafPropertiesL( devid, accessTypes, KNSmlDMDevInfoDevIdDescription ); 
    // Lang 
    MSmlDmDDFObject& lang = devInfo.AddChildObjectL(KNSmlDMDevInfoLangNodeName );
    SetLeafPropertiesL( lang, accessTypes, KNSmlDMDevInfoLangDescription ); 
    // DmV  
    MSmlDmDDFObject& dmv = devInfo.AddChildObjectL(KNSmlDMDevInfoDmVNodeName);
    SetLeafPropertiesL( dmv, accessTypes, KNSmlDMDevInfoDmVDescription );
    // Ext
    MSmlDmDDFObject& ext = devInfo.AddChildObjectL(KNSmlDMDevInfoExtNodeName );
    ext.SetAccessTypesL( accessTypes );
    ext.SetScopeL( MSmlDmDDFObject::EPermanent );
    ext.SetDescriptionL( KNSmlDMDevInfoExtDescription );
    // ModDDF   
    MSmlDmDDFObject& modDDF = ext.AddChildObjectL( KNSmlDMDevInfoModDDFNodeName);
    SetLeafPropertiesL( modDDF, accessTypes, KNSmlDMDevInfoModDDFDescription );
    // ModDevDet    
    MSmlDmDDFObject& modDevDet = ext.AddChildObjectL(KNSmlDMDevInfoModDevDetNodeName );
    SetLeafPropertiesL( modDevDet, accessTypes, KNSmlDMDevInfoModDevDetDescription );
    _DBG_FILE("CNSmlDmDevInfoAdapter::DDFStructureL(): end");
    }

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


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


// -----------------------------------------------------------------------------
//  CNSmlDmDevInfoAdapter::FetchLeafObjectL( const TDesC8& aURI, const TDesC8& aLUID, 
// const TDesC8& aType, const TInt aResultsRef, const TInt aStatusRef )
// -----------------------------------------------------------------------------
void CNSmlDmDevInfoAdapter::FetchLeafObjectL( const TDesC8& aURI, 
                                              const TDesC8& /*aLUID*/, 
                                              const TDesC8& aType, 
                                              const TInt aResultsRef, 
                                              const TInt aStatusRef )
    {
    _DBG_FILE("CNSmlDmDevInfoAdapter::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");
    }


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

    if ( segment == KNSmlDMDevInfoNodeName )
        {
        currentURISegmentList->InsertL( currentURISegmentList->Size(), KNSmlDMDevInfoManNodeName() );
        currentURISegmentList->InsertL( currentURISegmentList->Size(), KNSmlDMDevInfoSeparator() );
        currentURISegmentList->InsertL( currentURISegmentList->Size(), KNSmlDMDevInfoModNodeName() );
        currentURISegmentList->InsertL( currentURISegmentList->Size(), KNSmlDMDevInfoSeparator() );
        currentURISegmentList->InsertL( currentURISegmentList->Size(), KNSmlDMDevInfoDevIdNodeName() );
        currentURISegmentList->InsertL( currentURISegmentList->Size(), KNSmlDMDevInfoSeparator() );
        currentURISegmentList->InsertL( currentURISegmentList->Size(), KNSmlDMDevInfoLangNodeName() );
        currentURISegmentList->InsertL( currentURISegmentList->Size(), KNSmlDMDevInfoSeparator() );
        currentURISegmentList->InsertL( currentURISegmentList->Size(), KNSmlDMDevInfoDmVNodeName() );
        currentURISegmentList->InsertL( currentURISegmentList->Size(), KNSmlDMDevInfoSeparator() );
        currentURISegmentList->InsertL( currentURISegmentList->Size(), KNSmlDMDevInfoExtNodeName() );
        }
    else
    if ( segment == KNSmlDMDevInfoExtNodeName )
        {
        currentURISegmentList->InsertL( currentURISegmentList->Size(), KNSmlDMDevInfoModDDFNodeName() );
        currentURISegmentList->InsertL( currentURISegmentList->Size(), KNSmlDMDevInfoSeparator() );
        currentURISegmentList->InsertL( currentURISegmentList->Size(), KNSmlDMDevInfoModDevDetNodeName() );
        }
    else
        {
        retValue = CSmlDmAdapter::EError;
        }
    iDmCallback->SetStatusL( aStatusRef, retValue );
    iDmCallback->SetResultsL( aResultsRef, *currentURISegmentList, KNullDesC8 );
    CleanupStack::PopAndDestroy(); //currentURISegmentList
    _DBG_FILE("CNSmlDmDevInfoAdapter::ChildURIListL(): end");
    }


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

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


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

    _DBG_FILE("CNSmlDmDevInfoAdapter::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("CNSmlDmDevInfoAdapter::FetchLeafObjectSizeL(): end");
    }
    

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

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

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

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

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

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

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

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

// -----------------------------------------------------------------------------
// CNSmlDmDevDetailAdapter::FetchLeafObjectL()
// -----------------------------------------------------------------------------
CSmlDmAdapter::TError CNSmlDmDevInfoAdapter::FetchLeafObjectL( const TDesC8& aURI, 
                                                               CBufBase& aObject )
    {
    _DBG_FILE("CNSmlDmInfoAdapter::FetchLeafObjectL(): begin");
    CSmlDmAdapter::TError retValue = CSmlDmAdapter::EOk;
    TInt ret = aURI.LocateReverse(KNSmlDMDevInfoSeparator()[0]);
    if ( ret == KErrNotFound ) 
        {
        retValue = CSmlDmAdapter::EError;
        }
    else
        {
        TInt len = aURI.Length() - (ret + 1);
        TPtrC8 segment = aURI.Right( len );
        if ( segment == KNSmlDMDevInfoManNodeName ||
             segment == KNSmlDMDevInfoModNodeName ||
             segment == KNSmlDMDevInfoDevIdNodeName )
            {
            CNSmlPhoneInfo* phoneInfo = CNSmlPhoneInfo::NewLC();
            HBufC* phonedata = HBufC::NewLC( 50 );
            TPtr phonedataPtr = phonedata->Des();  
            if ( segment == KNSmlDMDevInfoManNodeName )
                {
                phoneInfo->PhoneDataL( CNSmlPhoneInfo::EPhoneManufacturer, phonedataPtr );
                }
            if ( segment == KNSmlDMDevInfoModNodeName )
                {
                phoneInfo->PhoneDataL( CNSmlPhoneInfo::EPhoneModelId, phonedataPtr );
                }
            if ( segment == KNSmlDMDevInfoDevIdNodeName )
                {
                phoneInfo->PhoneDataL( CNSmlPhoneInfo::EPhoneSerialNumber, phonedataPtr );
                }
            HBufC8* phonedataInUTF8 = NULL;
            NSmlUnicodeConverter::HBufC8InUTF8LC( *phonedata, phonedataInUTF8 );
            aObject.InsertL( 0, *phonedataInUTF8 );
            CleanupStack::PopAndDestroy( 3 ); //phonedataInUTF8, phonedata, phoneInfo
            }
        else
        if ( segment == KNSmlDMDevInfoLangNodeName )
            { 
            TLanguage language = User::Language();
            TBuf8<2> langCode;
            switch ( language )
                {
                case ELangEnglish: 
                case ELangAmerican:
                case ELangAustralian:
                case ELangNewZealand:
                case ELangCanadianEnglish:
                case ELangInternationalEnglish:
                case ELangSouthAfricanEnglish:
                    langCode = KNSmlDMEnglish;
                    break; 
                case ELangFrench:
                case ELangSwissFrench:
                case ELangBelgianFrench:
                case ELangInternationalFrench:
                case ELangCanadianFrench:
                    langCode = KNSmlDMFrench;
                    break;
                case ELangGerman:
                case ELangSwissGerman:
                case ELangAustrian:
                    langCode = KNSmlDMGerman;
                    break;
                case ELangSpanish:
                case ELangInternationalSpanish:
                case ELangLatinAmericanSpanish:
                    langCode = KNSmlDMSpanish;
                    break;
                case ELangItalian:
                case ELangSwissItalian:
                    langCode = KNSmlDMItalian;
                    break;
                case ELangSwedish:
                case ELangFinlandSwedish:
                    langCode = KNSmlDMSwedish;
                    break;
                case ELangDanish:
                    langCode = KNSmlDMDanish;
                    break;
                case ELangNorwegian:
                case ELangNorwegianNynorsk:
                    langCode = KNSmlDMNorwegian;
                    break;
                case ELangFinnish:
                    langCode = KNSmlDMFinnish;
                    break;
                case ELangPortuguese:
                case ELangBrazilianPortuguese:
                    langCode = KNSmlDMPortuguese;
                    break;
                case ELangTurkish:
                case ELangCyprusTurkish:
                    langCode = KNSmlDMTurkish;
                    break;
                case ELangIcelandic:
                    langCode = KNSmlDMIcelandic;
                    break;
                case ELangRussian:
                    langCode = KNSmlDMRussian;
                    break;
                case ELangHungarian:
                    langCode = KNSmlDMHungarian;
                    break;
                case ELangDutch:
                case ELangBelgianFlemish:
                    langCode = KNSmlDMDutch;
                    break;
                case ELangCzech:
                    langCode = KNSmlDMCzech;
                    break;
                case ELangSlovak:
                    langCode = KNSmlDMSlovak;
                    break;
                case ELangPolish:
                    langCode = KNSmlDMPolish;
                    break;
                case ELangSlovenian:
                    langCode = KNSmlDMSlovenian;
                    break;
                case ELangTaiwanChinese:
                case ELangHongKongChinese:
                case ELangPrcChinese:
                    langCode = KNSmlDMChinese;
                    break;
                case ELangJapanese:
                    langCode = KNSmlDMJapanese;
                    break;
                case ELangThai:
                    langCode = KNSmlDMThai;
                    break;
                case ELangAfrikaans:
                    langCode = KNSmlDMAfrikaans;
                    break;
                case ELangAlbanian:
                    langCode = KNSmlDMAlbanian;
                    break;
                case ELangAmharic:
                    langCode = KNSmlDMAmharic;
                    break;
                case ELangArabic:
                    langCode = KNSmlDMArabic;
                    break;
                case ELangArmenian:
                    langCode = KNSmlDMArmenian;
                    break;
                case ELangTagalog:
                    langCode = KNSmlDMTagalog;
                    break;
                case ELangBelarussian:
                    langCode = KNSmlDMBelarussian;
                    break;
                case ELangBengali:
                    langCode = KNSmlDMBengali;
                    break;
                case ELangBulgarian:
                    langCode = KNSmlDMBulgarian;
                    break;
                case ELangBurmese:
                    langCode = KNSmlDMBurmese;
                    break;
                case ELangCatalan:
                    langCode = KNSmlDMCatalan;
                    break;
                case ELangCroatian:
                    langCode = KNSmlDMCroatian;
                    break;
                case ELangEstonian:
                    langCode = KNSmlDMEstonian;
                    break;
                case ELangFarsi:
                    langCode = KNSmlDMFarsi;
                    break;
                case ELangScotsGaelic:
                    langCode = KNSmlDMScotsGaelic;
                    break;
                case ELangGeorgian:
                    langCode = KNSmlDMGeorgian;
                    break;
                case ELangGreek:
                case ELangCyprusGreek:
                    langCode = KNSmlDMGreek;
                    break;
                case ELangGujarati:
                    langCode = KNSmlDMGujarati;
                    break;
                case ELangHebrew:
                    langCode = KNSmlDMHebrew;
                    break;
                case ELangHindi:
                    langCode = KNSmlDMHindi;
                    break;
                case ELangIndonesian:
                    langCode = KNSmlDMIndonesian;
                    break;
                case ELangIrish:
                    langCode = KNSmlDMIrish;
                    break;
                case ELangKannada:
                    langCode = KNSmlDMKannada;
                    break;
                case ELangKazakh:
                    langCode = KNSmlDMKazakh;
                    break;
                case ELangKorean:
                    langCode = KNSmlDMKorean;
                    break;
                case ELangLao:
                    langCode = KNSmlDMLao;
                    break;
                case ELangLatvian:
                    langCode = KNSmlDMLatvian;
                    break;
                case ELangLithuanian:
                    langCode = KNSmlDMLithuanian;
                    break;
                case ELangMacedonian:
                    langCode = KNSmlDMMacedonian;
                    break;
                case ELangMalay:
                    langCode = KNSmlDMMalay;
                    break;
                case ELangMalayalam:
                    langCode = KNSmlDMMalayalam;
                    break;
                case ELangMarathi:
                    langCode = KNSmlDMMarathi;
                    break;
                case ELangMoldavian:
                    langCode = KNSmlDMMoldavian;
                    break;
                case ELangMongolian:
                    langCode = KNSmlDMMongolian;
                    break;
                case ELangPunjabi:
                    langCode = KNSmlDMPunjabi;
                    break;
                case ELangRomanian:
                    langCode = KNSmlDMRomanian;
                    break;
                case ELangSerbian:
                    langCode = KNSmlDMSerbian;
                    break;
                case ELangSinhalese:
                    langCode = KNSmlDMSinhalese;
                    break;
                case ELangSomali:
                    langCode = KNSmlDMSomali;
                    break;
                case ELangSwahili:
                    langCode = KNSmlDMSwahili;
                    break;
                case ELangTamil:
                    langCode = KNSmlDMTamil;
                    break;
                case ELangTelugu:
                    langCode = KNSmlDMTelugu;
                    break;
                case ELangTibetan:
                    langCode = KNSmlDMTibetan;
                    break;
                case ELangTigrinya:
                    langCode = KNSmlDMTigrinya;
                    break;
                case ELangTurkmen:
                    langCode = KNSmlDMTurkmen;
                    break;
                case ELangUkrainian:
                    langCode = KNSmlDMUkrainian;
                    break;
                case ELangUrdu:
                    langCode = KNSmlDMUrdu;
                    break;
                case ELangVietnamese:
                    langCode = KNSmlDMVietnamese;
                    break;
                case ELangWelsh:
                    langCode = KNSmlDMWelsh;
                    break;
                case ELangZulu:
                    langCode = KNSmlDMZulu;
                    break;
                default:
                    langCode = KNSmlDMEnglish;
                }
            aObject.InsertL( 0, langCode );
            }
        else
        if ( segment == KNSmlDMDevInfoDmVNodeName )
            {
            if(!FeatureManager::FeatureSupported( KFeatureIdSyncMlDm112  ))
                aObject.InsertL( 0, KNSmlDMDmV12 );
            else
            aObject.InsertL( 0, KNSmlDMDmV );
            }
        else
        if ( segment == KNSmlDMDevInfoModDDFNodeName )
            {

            }
        else
        if ( segment == KNSmlDMDevInfoModDevDetNodeName )
            {
            TUid implUID;
            implUID.iUid = KNSmlDMDevDetailAdapterImplUid;
            
            TAny* nPtr = NULL;
            MSmlDmCallback& aDmNull = reinterpret_cast<MSmlDmCallback&>(nPtr);
            CNSmlDmDevDetailAdapter* devDetAdapter = 
                reinterpret_cast<CNSmlDmDevDetailAdapter*>(CSmlDmAdapter::NewL( implUID, aDmNull ) );
            CleanupStack::PushL(devDetAdapter);
            TInt checkSumDevDet = devDetAdapter->DevDetailValueCrcL();
            TBuf8<16> stringCheckSumDevDet; 
            stringCheckSumDevDet.Num( checkSumDevDet );
            aObject.InsertL( 0, stringCheckSumDevDet );
            CleanupStack::PopAndDestroy(); // devDetAdapter
            }
        else
            {
            retValue = CSmlDmAdapter::EError;
            }
        }
    _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(KNSmlDMDevInfoAdapterImplUid, CNSmlDmDevInfoAdapter::NewL)
    };

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

// End of file