/*
* Copyright (c) 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 "creator_traces.h"
#include "creator_scriptelementfactory.h"
#include "creator_contactelement.h"
#include "creator_calendarelement.h"
#include "creator_messageelement.h"
#include "creator_fileelement.h"
#include "creator_browserelement.h"
#include "creator_logelement.h"
#include "creator_noteelement.h"
#include "creator_impselement.h"
#include "creator_landmarkelement.h"
#include "creator_mailboxelement.h"
#include "creator_connectionmethodelement.h"

CCreatorScriptElement* TCreatorScriptElementFactory::CreateElementL(CCreatorEngine* aEngine, const TDesC& aElementName, const TDesC& aContext )
    {   
    LOGSTRING2("TCreatorScriptElementFactory::CreateElementL: %S", &aElementName);
    
    if( aContext.Length() >= KFields().Length() && 
    	aContext.Right(KFields().Length()) == KFields)
    	{
    	// This is a field element under 'fields'.
    	return CCreatorScriptElement::NewL(aEngine, aElementName, aContext);
    	}    
    else if( aElementName == creatorcontact::KContact )
        {
        return CCreatorContactElement::NewL(aEngine, aElementName, aContext);  
        }
    else if( aElementName == creatorcontact::KContactSet)
        {
        return CCreatorContactSetElement::NewL(aEngine, aElementName, aContext);
        }
    else if( aElementName == creatorcontact::KContactGroup )
        {
        return CCreatorContactGroupElement::NewL(aEngine, aElementName, aContext);
        }
    else if( aElementName == KFields)
        {
        return CCreatorScriptElement::NewL(aEngine, aElementName, aContext);
        }
    else if( aElementName == KScript )
        {
        return CCreatorScriptRoot::NewL(aEngine, aElementName, aContext);
        }
    else if( aElementName == creatorcalendar::KCalendar )
        {
        return CCreatorCalendarElement::NewL(aEngine, aElementName, aContext);
        }
    else if( aElementName == creatormsg::KMessage )
        {
        return CCreatorMessageElement::NewL(aEngine, aElementName, aContext);
        }
    else if( aElementName == creatorfile::KFile )
        {
        return CCreatorFileElement::NewL(aEngine, aElementName, aContext);
        }
    else if( aElementName == creatorbrowser::KBookmark ||
            aElementName == creatorbrowser::KBookmarkFolder ||
            aElementName == creatorbrowser::KSavedPage ||
            aElementName == creatorbrowser::KSavedPageFolder )
        {
        return CCreatorBrowserElement::NewL(aEngine, aElementName, aContext);
        }
    else if( aElementName == creatorlog::KLog )
        {
        return CCreatorLogElement::NewL(aEngine, aElementName, aContext);
        }
    else if( aElementName == creatornote::KNote )
        {
        return CCreatorNoteElement::NewL(aEngine, aElementName, aContext);
        }
	#ifdef __PRESENCE
    else if( aElementName == creatorimps::KImpsServer )
        {
        return CCreatorImpsServerElement::NewL(aEngine, aElementName, aContext);
        }
	#endif // __PRESENCE
    else if( aElementName == creatorlandmark::KLandmark )
        {
        return CCreatorLandmarkElement::NewL(aEngine, aElementName, aContext);
        }
    else if( aElementName == creatormailbox::Kmailbox )
        {
        return CCreatorMailboxElement::NewL(aEngine, aElementName, aContext);
        }
    else if( aElementName == creatorconnectionmethod::KCm )
    	{
    	return CCreatorConnectionMethodElement::NewL(aEngine, aElementName, aContext);
    	}
    else
        {
        return CCreatorScriptElement::NewL(aEngine, aElementName, aContext);
        }       
    }
