javauis/mmapi_qt/utils/src/mmapiutils.cpp
changeset 23 98ccebc37403
child 26 dc7c549001d5
equal deleted inserted replaced
21:2a9601315dfc 23:98ccebc37403
       
     1 /*
       
     2 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description: 
       
    15 *
       
    16 */
       
    17 #include "mmapiutils.h"
       
    18 #include "s60commonutils.h"
       
    19 using namespace java::util;
       
    20     
       
    21 enum TJavaArrayPanic
       
    22 {
       
    23     EBadOffsetIntoJavaArray,
       
    24     EWritingOverEndOfJavaArray,
       
    25     EBadOffsetIntoJavaArrayForRead,
       
    26     EReadingOverEndOfJavaArray,
       
    27 };
       
    28 
       
    29 
       
    30 /**
       
    31  * Copies data from the native to the Java array.
       
    32  * @return The number of bytes copied.
       
    33  */
       
    34 TInt MMAPIUtils::CopyToJava(JNIEnv& aJni, const TDesC8& aNativeBuffer,
       
    35                                      jbyteArray aJavaBuffer, TInt aOffset, TInt aLength)
       
    36 {
       
    37     __ASSERT_DEBUG(aOffset <= aJni.GetArrayLength(aJavaBuffer),
       
    38                    User::Panic(_L("ArrayUtils"), EBadOffsetIntoJavaArray));
       
    39     __ASSERT_DEBUG(aLength <= aJni.GetArrayLength(aJavaBuffer) - aOffset,
       
    40                    User::Panic(_L("ArrayUtils"), EWritingOverEndOfJavaArray));
       
    41 
       
    42     TInt nativeBufferLength = aNativeBuffer.Length();
       
    43     TInt length = (nativeBufferLength < aLength) ? nativeBufferLength : aLength;
       
    44     TUint8* nativeBufferPtr = const_cast<TUint8*>(aNativeBuffer.Ptr());
       
    45     jbyte* jNativeBufferPtr = reinterpret_cast<jbyte*>(nativeBufferPtr);
       
    46     aJni.SetByteArrayRegion(aJavaBuffer, aOffset, length, jNativeBufferPtr);
       
    47     return length;
       
    48 }
       
    49 
       
    50 jobjectArray MMAPIUtils::CopyToNewJavaStringArrayL(JNIEnv& aJni, const CDesCArray& aNativeArray)
       
    51 {
       
    52     jclass stringClass = aJni.FindClass("java/lang/String");
       
    53     User::LeaveIfNull(stringClass);
       
    54     //
       
    55     jobjectArray result = aJni.NewObjectArray(aNativeArray.Count(), stringClass, NULL);
       
    56     if (result != NULL)
       
    57     {
       
    58         TPtrC item;
       
    59         for (int i=0; i<aNativeArray.Count(); ++i)
       
    60         {
       
    61             item.Set(aNativeArray[i]);
       
    62             AddToJavaStringArrayL(aJni, result, i, item);
       
    63         }
       
    64     }
       
    65     return result;
       
    66 }
       
    67 
       
    68 void MMAPIUtils::AddToJavaStringArrayL(JNIEnv& aJni, jobjectArray& aContainer, TInt aPosition, const TDesC& aString)
       
    69 {
       
    70     jstring javaString = S60CommonUtils::NativeToJavaString(aJni, aString);
       
    71     User::LeaveIfNull(javaString);
       
    72     //
       
    73     aJni.SetObjectArrayElement(aContainer, aPosition, javaString);
       
    74     aJni.DeleteLocalRef(javaString);
       
    75 }