/*
* Copyright (c) 2006-2007 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of the License "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:  Includes wrapper over Clogevent.
*
*/

#ifndef SAPIEVENT_H
#define SAPIEVENT_H

#include <logwrap.h>
#include <cntdef.h>

/**
* CLogsEvent:this is a wrapper class for the symbian CLogEvent class.
*/

class CLogsEvent : public CBase
    {
    public :

        /**
        * NewL: Two phased construction
        */

        IMPORT_C static CLogsEvent *NewL() ;

        /**
        * NewLC: Creates an instance of CLogSyncServiceClass
        * Two Phased constructor
        * returns newly allocated object.
        */

        static CLogsEvent* NewLC() ;

        /**
        * Default Destructor
        */

        ~CLogsEvent() ;

        /**
        * Sets unique id to identify event type.
        */

        inline  void SetEventType(TUid aEventTypeId)
            {
            iLogEvent->SetEventType(aEventTypeId);
            }

        /**
        * Sets the duration of the event.
        */

        inline void SetDuration(TLogDuration aDuration)
            {
            iLogEvent->SetDuration(aDuration);
            }
            
        /**
        * Sets the durationType of the event.
        */    
            
        inline void SetDurationType(TLogDurationType aDurationType)
            {
            iLogEvent->SetDurationType( aDurationType );
            }
    
        /**
        * Sets the subject of the event.
        */

        inline void SetSubject(const TDesC &aSubject)
            {
            iLogEvent->SetSubject(aSubject);
            }

        /**
        * Sets the time of the event.
        */

        inline void SetTime(const TTime &aTime)
            {
            iLogEvent->SetTime(aTime);
            }

        /**
        * Sets the number associated with the event..
        */

        inline void SetNumber(const TDesC &aNumber)
            {
            iLogEvent->SetNumber(aNumber);
            }

        /**
        * Sets the remote party associated with the event.
        */

        inline void SetRemoteParty(const TDesC &aRemote)
            {
            iLogEvent->SetRemoteParty(aRemote);
            }

        /**
        * Sets the Direction of the .event
        */

        IMPORT_C void SetDirection(TInt aDirection) ;


        /**
        * Sets the contact id.
        */

        inline void SetContact(TContactItemId aContact)
            {
            iLogEvent->SetContact(aContact);
            }

        /**
        * Sets description of event type
        */

        inline void SetDescription(const TDesC &aDescription)
            {
            iLogEvent->SetDescription(aDescription);
            }

        /**
        * Sets data of event type
        */
        inline void SetDataL(const TDesC8 &aData)
            {
            iLogEvent->SetDataL(aData);
            }

        /**
        * Sets link value
        */

        inline void SetLink(TLogLink aLink)
            {
            iLogEvent->SetLink(aLink);
            }

        /**
        *  Sets status of event
        */

        IMPORT_C void SetStatus(TInt aStatus) ;


        /**
        * Sets unique id to identify event type.
        *  @param aEvent, event details to be copied
        */

        inline void SetEvent(const CLogEvent& aEvent)
            {
            iLogEvent->CopyL(aEvent) ;
            }

        /**
        *  get logid
        */

        inline TLogId Id()
            {
            return iLogEvent->Id() ;
            }

        /**
        *  copy function
        */

        inline  void Copy(CLogEvent* aEvent)
            {
            iLogEvent->CopyL(*aEvent);
            }

        /**
        *  gets eventtype
        */

        TUid getEventType() const
            {
            return iLogEvent->EventType();
            }

        /**
        *  gets eventduration
        */

        TLogDuration getDuration() const
            {
            return iLogEvent->Duration();
            }

        /**
        *  gets subject
        */

        const TDesC& getSubject() const
            {
            return iLogEvent->Subject() ;
            }

        /**
        *  gets time
        */

        TTime getTime() const
            {
            return iLogEvent->Time();
            }

        /**
        *  gets number
        */

        const TDesC& getNumber() const
            {
            return iLogEvent->Number();
            }

        /**
        *  gets remoteparty
        */

        const TDesC& getRemoteParty() const
            {
            return iLogEvent->RemoteParty();
            }

        /**
        *  gets direction
        */

        const TDesC& getDirection() const
            {
            return iLogEvent->Direction();
            }

        /**
        *  gets contactid
        */

        TContactItemId getContact() const
            {
            return iLogEvent->Contact();
            }

        /**
        *  gets description
        */

        const TDesC& getDescription() const
            {
            return iLogEvent->Description();
            }

        /**
        *  gets data
        */


        const TDesC8& getDataL() const
            {
            return iLogEvent->Data();
            }

        /**
        *  gets linkvalue
        */


        TLogLink getLink() const
            {
            return iLogEvent->Link();
            }

        /**
        *  gets status
        */

        const TDesC& getStatus() const
            {
            return iLogEvent->Status();
            }

        /**
        * getEvents: Gets the event .
        */

        inline CLogEvent* getEvent()
            {
            return iLogEvent ;
            }

        /**
        *  setid function
        */

        inline void SetId(TLogId aId)
            {
            iLogEvent->SetId(aId);
            }

        /**
        * Gets the flag associated with the event
        */

        inline TLogFlags Flags()
            {
            return iLogEvent->Flags() ;
            }

        /**
        * Gets the flags associated with the event
        * @param aFlags , flags to be set
        */

        inline void SetFlags(TLogFlags aFlags)
            {
            iLogEvent->SetFlags(aFlags) ;
            }

    protected:

        /**
        * ConstructL(): Internal method to construct members
        */

        void ConstructL() ;

        /**
        * Default constructor
        */

        CLogsEvent() ;

    private:

        /**
        *  contains the details of an event
        */

        CLogEvent* iLogEvent;

        /**
        * Required for the Setting Direction and the status for
        * the event
        */

        RFs iFs ;
        CLogClient *iLogClient ;

    };


#endif