remotemgmt_plat/syncml_ds_customization_api/tsrc/exampledevinfextdataplugin/src/exampledevinfextdatacontainerplugin.cpp
author hgs
Thu, 19 Aug 2010 17:35:34 +0530
changeset 60 eb6690d0d439
permissions -rw-r--r--
201033

/*
* Copyright (c) 2010 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:  Example Device Info Extension Data Container Plugin source file.
*
*/

// EXTERNAL INCLUDES
#include <e32base.h>

// CLASS HEADER
#include "exampledevinfextdatacontainerplugin.h"

// -----------------------------------------------------------------------------
// CExampleDevInfExtDataContainerPlugin::CExampleDevInfExtDataContainerPlugin()
// -----------------------------------------------------------------------------
CExampleDevInfExtDataContainerPlugin::CExampleDevInfExtDataContainerPlugin()
    {
    }

// -----------------------------------------------------------------------------
// void CExampleDevInfExtDataContainerPlugin::ConstructL()
// -----------------------------------------------------------------------------
void CExampleDevInfExtDataContainerPlugin::ConstructL()
    {
    }

// -----------------------------------------------------------------------------
// CExampleDevInfExtDataContainerPlugin* CExampleDevInfExtDataContainerPlugin::NewL()
// -----------------------------------------------------------------------------
CExampleDevInfExtDataContainerPlugin* CExampleDevInfExtDataContainerPlugin::NewL()
    {
    CExampleDevInfExtDataContainerPlugin* self = 
        new (ELeave) CExampleDevInfExtDataContainerPlugin();
    CleanupStack::PushL( self );
    self->ConstructL();
    CleanupStack::Pop( self );
    return self;
    }
    
// -----------------------------------------------------------------------------
// CExampleDevInfExtDataContainerPlugin::~CExampleDevInfExtDataContainerPlugin()
// -----------------------------------------------------------------------------
CExampleDevInfExtDataContainerPlugin::~CExampleDevInfExtDataContainerPlugin()
    {
    for( TInt i = 0; i < iExtensionArray.Count(); i++ )
        {
        iExtensionArray[ i ].iXValArray.Close();
        }
    iExtensionArray.Close();
    }

// -----------------------------------------------------------------------------
// TInt CExampleDevInfExtDataContainerPlugin::GetExtensionCountL()
// -----------------------------------------------------------------------------
TInt CExampleDevInfExtDataContainerPlugin::GetExtensionCountL()
    {
    return iExtensionArray.Count();
    }

// -----------------------------------------------------------------------------
// const TDesC8& CExampleDevInfExtDataContainerPlugin::GetExtNameL()
// -----------------------------------------------------------------------------
const TDesC8& CExampleDevInfExtDataContainerPlugin::GetExtNameL( TInt aExtIndex )
    {
    if( aExtIndex < 0 || aExtIndex >= iExtensionArray.Count() )
        {
        // Illegal index
        User::Leave( KErrArgument );
        }

    return iExtensionArray[ aExtIndex ].iXNam;
    }

// -----------------------------------------------------------------------------
// TInt CExampleDevInfExtDataContainerPlugin::GetExtValueCountL()
// -----------------------------------------------------------------------------
TInt CExampleDevInfExtDataContainerPlugin::GetExtValueCountL( TInt aExtIndex )
    {
    if( aExtIndex < 0 || aExtIndex >= iExtensionArray.Count() )
        {
        // Illegal index
        User::Leave( KErrArgument );
        }

    return iExtensionArray[ aExtIndex ].iXValArray.Count();
    }

// -----------------------------------------------------------------------------
// const TDesC8& CExampleDevInfExtDataContainerPlugin::GetExtValueL()
// -----------------------------------------------------------------------------
const TDesC8& CExampleDevInfExtDataContainerPlugin::GetExtValueL( TInt aExtIndex, 
    TInt aValueIndex )
    {

    // Check for illegal indices
    if( aExtIndex < 0 || aExtIndex >= iExtensionArray.Count() )
        {
        User::Leave( KErrArgument );
        }
    if( aValueIndex < 0 || 
        aValueIndex >= iExtensionArray[ aExtIndex ].iXValArray.Count() )
        {
        User::Leave( KErrArgument );
        }

    return iExtensionArray[ aExtIndex ].iXValArray[ aValueIndex ];
    }

// -----------------------------------------------------------------------------
// void CExampleDevInfExtDataContainerPlugin::ClearExtensions()
// -----------------------------------------------------------------------------
void CExampleDevInfExtDataContainerPlugin::ClearExtensions()
    {
    for( TInt i = 0; i < iExtensionArray.Count(); i++ )
        {
        iExtensionArray[ i ].iXValArray.Reset();
        }
    iExtensionArray.Reset();
    }

// -----------------------------------------------------------------------------
// void CExampleDevInfExtDataContainerPlugin::InsertExtension()
// -----------------------------------------------------------------------------
void CExampleDevInfExtDataContainerPlugin::InsertExtension(
    const TDesC8& aXNam, const TDesC8& aXVal )
    {
    TInt index = FindExtensionIndex( aXNam );
    if( index != KErrNotFound )
        {
        AddXValToItem( index, aXVal );
        }
    else
        {
        AddNewXValItem( aXNam, aXVal );
        }
    }

// -----------------------------------------------------------------------------
// void CExampleDevInfExtDataContainerPlugin::RemoveExtension()
// -----------------------------------------------------------------------------
void CExampleDevInfExtDataContainerPlugin::RemoveExtension( const TDesC8& aXNam )
    {
    TInt index = FindExtensionIndex( aXNam );
    if( index != KErrNotFound )
        {
        iExtensionArray.Remove( index );    
        }
    }

// -----------------------------------------------------------------------------
// void CExampleDevInfExtDataContainerPlugin::FindExtensionIndex()
// -----------------------------------------------------------------------------
TInt CExampleDevInfExtDataContainerPlugin::FindExtensionIndex( 
    const TDesC8& aXNam )
    {
    TInt index = KErrNotFound;

    for( TInt i = 0; i < iExtensionArray.Count(); i++ )
        {
        TExampleDevInfExtExtensionItem item = iExtensionArray[ i ];
        if( aXNam.Compare( item.iXNam ) == 0 )
            {
            index = i;
            break;
            }
        }
    return index;
    }

// -----------------------------------------------------------------------------
// void CExampleDevInfExtDataContainerPlugin::AddXValToItem()
// -----------------------------------------------------------------------------
void CExampleDevInfExtDataContainerPlugin::AddXValToItem(
        const TInt aIndex, const TDesC8& aXVal )
    {
    ASSERT( aIndex >= 0 );
    ASSERT( aIndex < iExtensionArray.Count() );

    if( aXVal.Length() == 0 )
        {
        // No XVal set, do not insert anything to XVal array
        return;
        }
    else if( aXVal.Length() <= KExtensionElementMaxLength )
        {
        iExtensionArray[ aIndex ].iXValArray.Append( aXVal );
        }
    else
        {
        iExtensionArray[ aIndex ].iXValArray.Append( 
            aXVal.Left( KExtensionElementMaxLength ) );
        }
    }

// -----------------------------------------------------------------------------
// void CExampleDevInfExtDataContainerPlugin::AddNewXValItem()
// -----------------------------------------------------------------------------
void CExampleDevInfExtDataContainerPlugin::AddNewXValItem( 
    const TDesC8& aXNam, const TDesC8& aXVal )
    {    
    TExampleDevInfExtExtensionItem item;

    // Insert XNam
    if( aXNam.Length() <= KExtensionElementMaxLength )
        {
        item.iXNam = aXNam;
        }
    else
        {
        item.iXNam = aXNam.Left( KExtensionElementMaxLength );
        }

    // Insert XVal
    if( aXVal.Length() > 0 )
        {
        if( aXVal.Length() <= KExtensionElementMaxLength )
            {
            item.iXValArray.Append( aXVal );
            }
        else
            {
            item.iXValArray.Append( aXVal.Left( KExtensionElementMaxLength ) );
            }
        }

    // Add to extension array as a new entry
    iExtensionArray.Append( item );
    }

// End of file