/*
* Copyright (c) 2002 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:  This class is used to post events to the java.
*
*/


//  INCLUDE FILES
#include <logger.h>

#include "cmmasnapshotevent.h"
#include "mmapiutils.h"

CMMASnapshotEvent::CMMASnapshotEvent(jobject aNotifyObject,
                                     jmethodID aHandleEventMethod,
                                     TInt aError,
                                     HBufC8* aImageBuffer,
                                     TDisposability aDisposable):
        CMMAEvent(aNotifyObject,
                  aHandleEventMethod,
                  aDisposable)
{
    iEventData = aError;
    iImageBuffer = aImageBuffer;
}

CMMASnapshotEvent::~CMMASnapshotEvent()
{
    // image buffer need to be deleted if
    // event server hasn't sent this event before
    // middlet is destroyed
    delete iImageBuffer;
}

void CMMASnapshotEvent::Dispatch(JNIEnv& aJni)
{
    LOG(EJavaMMAPI, EInfo, "MMA::CMMASnapshotEvent::Dispatch");

    // create java byte array
    jbyteArray byteArray;
    if (iImageBuffer)
    {
        byteArray = aJni.NewByteArray(iImageBuffer->Size());
        if (byteArray)
        {
            MMAPIUtils::CopyToJava(aJni,
                                   *iImageBuffer,
                                   byteArray,
                                   0,
                                   iImageBuffer->Size());
        }
    }
    else
    {
        byteArray = aJni.NewByteArray(0);
    }

    if (!byteArray)
    {
        delete iImageBuffer;
        iImageBuffer = NULL; // otherwise double delete in destructor

        LOG(EJavaMMAPI, EInfo, "MMA::CMMASnapshotEvent::Dispatch - Failed to create ByteArray");
        return;
    }


    aJni.CallVoidMethod(iListenerObject,
                        iHandleEventMethod,
                        iEventData,
                        byteArray);

    delete iImageBuffer;
    iImageBuffer = NULL; // otherwise double delete in destructor
}

//  END OF FILE
