menufw/hierarchynavigator/hnutilities/src/hnmdkeyfactory.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 "hnmdbasekey.h"
#include "hnmdstring8key.h"
#include "hnmdintegerkey.h"
#include "hnmdinteger64key.h"
#include "hnmduintegerkey.h"
#include "hnmduidkey.h"
#include "hnmdbooleankey.h"
#include "hnmdstring16key.h"
#include "hnmdmapkey.h"
#include "hnmdlistkey.h"
#include "hnmdundefkey.h"
#include "hnglobals.h"
#include "hnmdkeyfactory.h"


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

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
//
EXPORT_C CHnMdBaseKey* HnMdKeyFactory::CreateLC( TXmlEngElement aElement )
    {
    CHnMdBaseKey* self = NULL;
    
    // First we are testing if the key contains any
    // runtime alterable parameters. If so, they have to be constructed 
    // differently
//    if ( aElement.HasAttributeL( KValueAttrName8) && 
//            aElement.HasAttributeL( KTypeAttrName8 ) ) 
//        {
//        TXmlEngAttr keyValue = aElement.AttributeNodeL( KValueAttrName8 );
//        TXmlEngAttr keyType = aElement.AttributeNodeL( KTypeAttrName8 );
//        if ( keyValue.Value().Find( HnEvent::KEventArgNamespace) 
//                != KErrNotFound)
//            {
//            self = CHnMdDynamicKey::NewL( keyType.Value() );
//            }
//        }
    
    if ( aElement.HasAttributeL( KTypeAttrName8 ) )
        {
        TXmlEngAttr type = aElement.AttributeNodeL( KTypeAttrName8 );
        const TPtrC8 &name = type.Value();
        self = HnMdKeyFactory::CreateL( name );
        }
    else
        {
        self = CHnMdMapKey::NewL();
        }
    
    CleanupStack::PushL( self );
    self->BaseConstructL( aElement );
    return self;
    }

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
//
EXPORT_C CHnMdBaseKey* HnMdKeyFactory::CreateL( TXmlEngElement aElement )
    {
    CHnMdBaseKey* self = HnMdKeyFactory::CreateLC( aElement );
    CleanupStack::Pop( self );
    return self;
    }

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
//
EXPORT_C CHnMdBaseKey* HnMdKeyFactory::CreateL(
    const TDesC8& aName,
    const TDesC8& aType,
    const TDesC8& aValue )
    {
    CHnMdBaseKey* self = HnMdKeyFactory::CreateL( aType );
    CleanupStack::PushL( self );
    self->SetValueL( aValue );
    self->SetKeyNameL( aName );
    CleanupStack::Pop( self );
    return self;
    }

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
//
EXPORT_C CHnMdBaseKey* HnMdKeyFactory::CreateL(
    const TDesC8& aName,
    const TDesC8& aType,
    const TDesC& aValue )
    {
    CHnMdBaseKey* self = HnMdKeyFactory::CreateL( aType );
    CleanupStack::PushL( self );
    self->SetValueL( aValue );
    self->SetKeyNameL( aName );
    CleanupStack::Pop( self );
    return self;
    }
// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
//
CHnMdBaseKey* HnMdKeyFactory::CreateL( const TDesC8& aType )
    {
    CHnMdBaseKey* key = NULL;
    
    if ( !aType.Compare( KKeyTypeString ) )
        {
        key = CHnMdString16Key::NewL(); //String
        }
    else if ( !aType.Compare( KKeyTypeString8 ) )
        {
        key = CHnMdString8Key::NewL(); //String8
        }
    else if ( !aType.Compare( KKeyTypeInteger ) )
        {
        key = CHnMdIntegerKey::NewL(); //Integer
        }
    else if ( !aType.Compare( KKeyTypeInteger64 ) )
        {
        key = CHnMdInteger64Key::NewL(); //Integer64
        }
    else if ( !aType.Compare( KKeyTypeUInteger ) )
        {
        key = CHnMdUIntegerKey::NewL(); //Unsigned Integer
        }
    else if ( !aType.Compare( KKeyTypeUid ) )
        {
        key = CHnMdUidKey::NewL(); //Uid
        }
    else if ( !aType.Compare( KKeyTypeBoolean ) )
        {
        key = CHnMdBooleanKey::NewL(); //Boolean
        }
    else if ( !aType.Compare( KKeyTypeString16 ) )
        {
        key = CHnMdString16Key::NewL(); //String16
        }
    else if ( !aType.Compare( KKeyTypeMap ) )
        {
        key = CHnMdMapKey::NewL(); //Map
        }
    else if ( !aType.Compare( KKeyTypeList ) )
        {
        key = CHnMdListKey::NewL(); //List
        }
    else
        {
        key = CHnMdUndefKey::NewL(); //Undefined
        }

    return key;
    }