--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javaextensions/pim/jni/src/pimlistimpl.cpp Tue Apr 27 16:30:29 2010 +0300
@@ -0,0 +1,594 @@
+/*
+* 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: PIMListImpl JNI wrapper.
+ *
+*/
+
+
+// INCLUDE FILES
+
+#include "com_nokia_mj_impl_pim_PIMListImpl.h"
+#include "pimbaselist.h"
+#include "pimbaseitem.h"
+#include "pimcommon.h"
+#include "pimutils.h"
+#include "pimpanics.h"
+#include "cpimlist.h"
+#include "logger.h"
+#include "s60commonutils.h" // need to be removed once localisation is finalised
+
+// CONSTANTS
+
+/**
+ * Represents the type of label fetched from the framework. Used in
+ * the common implementation of all three label getting operations.
+ */
+enum TPIMLabelType
+{
+ EPIMLabelTypeField = com_nokia_mj_impl_pim_PIMListImpl_LABEL_TYPE_FIELD,
+
+ EPIMLabelTypeAttribute = com_nokia_mj_impl_pim_PIMListImpl_LABEL_TYPE_ATTRIBUTE,
+
+ EPIMLabelTypeArrayElement = com_nokia_mj_impl_pim_PIMListImpl_LABEL_TYPE_ARRAY_ELEMENT
+};
+
+/**
+ * Represents enumeration (item listing) type in different enumeration
+ * operations.
+ */
+enum TPIMEnumerationType
+{
+ EPIMEnumerationTypeAll = com_nokia_mj_impl_pim_PIMListImpl_ENUMERATION_ITEMS_ALL,
+
+ EPIMEnumerationTypeMatchingItem = com_nokia_mj_impl_pim_PIMListImpl_ENUMERATION_ITEMS_MATCHING_ITEM,
+
+ EPIMEnumerationTypeMatchingString = com_nokia_mj_impl_pim_PIMListImpl_ENUMERATION_ITEMS_MATCHING_STRING,
+
+ EPIMEnumerationTypeMatchingCategory = com_nokia_mj_impl_pim_PIMListImpl_ENUMERATION_ITEMS_MATCHING_CATEGORY
+};
+
+JNIEXPORT void
+JNICALL Java_com_nokia_mj_impl_pim_PIMListImpl__1dispose(
+ JNIEnv* /*aJniEnv*/,
+ jobject /*aPeer*/,
+ jint aListHandle)
+{
+ JELOG2(EPim);
+ pimbaselist* list = reinterpret_cast< pimbaselist*>(aListHandle);
+ delete list;
+}
+
+JNIEXPORT jint
+JNICALL Java_com_nokia_mj_impl_pim_PIMListImpl__1createItem(
+ JNIEnv* aJniEnv,
+ jobject /*aPeer*/,
+ jint aListHandle,
+ jintArray aError)
+{
+ JELOG2(EPim);
+ pimbaselist* list = reinterpret_cast< pimbaselist*>(aListHandle);
+ pimbaseitem* item = NULL;
+ int error = 0;
+ try
+ {
+ item = list->createItem();
+ }
+ catch (int aErr)
+ {
+ error = aErr;
+ }
+ SetJavaErrorCode(aJniEnv, aError, error);
+ // We now own the item (through the handle)
+ return reinterpret_cast<int>(item);
+}
+
+JNIEXPORT jint
+JNICALL Java_com_nokia_mj_impl_pim_PIMListImpl__1removeItem(
+ JNIEnv* /*aJniEnv*/,
+ jobject /*aPeer*/,
+ jint aListHandle,
+ jint aItemHandle)
+{
+ JELOG2(EPim);
+ pimbaselist* list = reinterpret_cast< pimbaselist*>(aListHandle);
+ pimbaseitem* item = reinterpret_cast< pimbaseitem *>(aItemHandle);
+ int error = 0;
+ try
+ {
+ list->removeItem(item);
+ }
+ catch (int err)
+ {
+ error = err;
+ }
+ return error;
+}
+
+JNIEXPORT jint
+JNICALL Java_com_nokia_mj_impl_pim_PIMListImpl__1addCommittedItem(
+ JNIEnv* /*aJniEnv*/,
+ jobject /*aPeer*/,
+ jint aListHandle,
+ jint aItemHandle)
+{
+ JELOG2(EPim);
+ pimbaselist* list = reinterpret_cast< pimbaselist*>(aListHandle);
+ pimbaseitem* item = reinterpret_cast< pimbaseitem *>(aItemHandle);
+ int error = 0;
+ // Ownership of the item retains with the Java side peer item object.
+ try
+ {
+ list->addCommittedItem(item);
+ }
+ catch (int err)
+ {
+ error = err;
+ }
+ return error;
+}
+
+JNIEXPORT jstring
+JNICALL Java_com_nokia_mj_impl_pim_PIMListImpl__1getName(
+ JNIEnv* aJniEnv,
+ jobject /*aPeer*/,
+ jint aListHandle)
+{
+ JELOG2(EPim);
+ pimbaselist* list = reinterpret_cast< pimbaselist*>(aListHandle);
+ jstring javaName = javaName =list->getName(aJniEnv);
+ // We now own the name
+ return javaName; // if NULL, it indicates error
+}
+
+JNIEXPORT jint
+JNICALL Java_com_nokia_mj_impl_pim_PIMListImpl__1close(
+ JNIEnv* /*aJniEnv*/,
+ jobject /*aPeer*/,
+ jint aListHandle)
+{
+ JELOG2(EPim);
+ pimbaselist* list = reinterpret_cast< pimbaselist*>(aListHandle);
+ int error = 0;
+ try
+ {
+ list->close();
+ }
+ catch (int aError)
+ {
+ error = aError;
+ }
+ return error;
+}
+
+JNIEXPORT jintArray
+JNICALL Java_com_nokia_mj_impl_pim_PIMListImpl__1items(
+ JNIEnv* aJniEnv,
+ jobject /*aPeer*/,
+ jint aListHandle,
+ jint aEnumerationType,
+ jint aMatchingItemHandle,
+ jstring aStringArg,
+ jintArray aError)
+{
+ JELOG2(EPim);
+ pimbaselist* list = reinterpret_cast< pimbaselist*>(aListHandle);
+ int enumerationType;
+ switch (aEnumerationType)
+ {
+ case EPIMEnumerationTypeAll:
+ enumerationType = EPIMItemAll;
+ break;
+ case EPIMEnumerationTypeMatchingItem:
+ enumerationType = EPIMItemMatchingItem;
+ break;
+ case EPIMEnumerationTypeMatchingString:
+ enumerationType = EPIMItemMatchingString;
+ break;
+ case EPIMEnumerationTypeMatchingCategory:
+ enumerationType = EPIMItemMatchingCategory;
+ break;
+ default:
+ enumerationType = EPIMItemCorrupt;
+ }
+
+ jintArray itemHandles =list->callItemsByEnumerationType(
+ aJniEnv,
+ enumerationType,
+ aMatchingItemHandle,
+ aStringArg,
+ aError);
+
+ return itemHandles;
+}
+
+JNIEXPORT jobjectArray
+JNICALL Java_com_nokia_mj_impl_pim_PIMListImpl__1getCategories(
+ JNIEnv* aJniEnv,
+ jobject /*aPeer*/,
+ jint aListHandle,
+ jintArray aError)
+{
+ JELOG2(EPim);
+ pimbaselist* list = reinterpret_cast< pimbaselist*>(aListHandle);
+ jobjectArray javaCategories = list->getCategories(aJniEnv, aError);
+ // Ownership of the categories is not transferred.
+ return javaCategories;
+}
+
+JNIEXPORT jboolean
+JNICALL Java_com_nokia_mj_impl_pim_PIMListImpl__1isCategory(
+ JNIEnv* aJniEnv,
+ jobject /*aPeer*/,
+ jint aListHandle,
+ jstring aCategory,
+ jintArray aError)
+{
+ JELOG2(EPim);
+ pimbaselist* list = reinterpret_cast< pimbaselist*>(aListHandle);
+
+ jboolean isCategory = list->isCategory(
+ aCategory, aJniEnv, aError);
+ return isCategory;
+}
+
+JNIEXPORT void
+JNICALL Java_com_nokia_mj_impl_pim_PIMListImpl__1addCategory(
+ JNIEnv* aJniEnv,
+ jobject /*aPeer*/,
+ jint aListHandle,
+ jstring aCategory,
+ jintArray aError)
+{
+ JELOG2(EPim);
+ pimbaselist* list = reinterpret_cast< pimbaselist*>(aListHandle);
+
+ list->addCategory(aCategory,aJniEnv,aError);
+}
+
+JNIEXPORT jintArray
+JNICALL Java_com_nokia_mj_impl_pim_PIMListImpl__1deleteCategory(
+ JNIEnv* aJniEnv,
+ jobject /*aPeer*/,
+ jint aListHandle,
+ jstring aCategory,
+ jintArray aError)
+{
+ JELOG2(EPim);
+ pimbaselist* list = reinterpret_cast< pimbaselist*>(aListHandle);
+
+ jintArray itemHandles = list->deleteCategory(aCategory,aJniEnv, aError);
+
+ return itemHandles;
+}
+
+JNIEXPORT jint
+JNICALL Java_com_nokia_mj_impl_pim_PIMListImpl__1renameCategory(
+ JNIEnv* aJniEnv,
+ jobject /*aPeer*/,
+ jint aListHandle,
+ jstring aCurrentCategory,
+ jstring aNewCategory)
+{
+ JELOG2(EPim);
+ pimbaselist* list = reinterpret_cast< pimbaselist*>(aListHandle);
+
+ jint error = list->renameCategory(
+ aCurrentCategory, aNewCategory, aJniEnv);
+
+ return error;
+}
+
+JNIEXPORT jint
+JNICALL Java_com_nokia_mj_impl_pim_PIMListImpl__1maxCategories(
+ JNIEnv* /*aJniEnv*/,
+ jobject /*aPeer*/,
+ jint aListHandle)
+{
+ JELOG2(EPim);
+ pimbaselist* list = reinterpret_cast< pimbaselist*>(aListHandle);
+ jint maxCategories = list->maxCategories();
+ return maxCategories;
+}
+
+JNIEXPORT jboolean
+JNICALL Java_com_nokia_mj_impl_pim_PIMListImpl__1isSupportedField(
+ JNIEnv* /*aJniEnv*/,
+ jobject /*aPeer*/,
+ jint aListHandle,
+ jint aField)
+{
+ JELOG2(EPim);
+ pimbaselist* list = reinterpret_cast< pimbaselist*>(aListHandle);
+ jboolean isSupportedField = isSupportedField = list->isSupportedField(aField);
+ return isSupportedField;
+}
+
+JNIEXPORT jintArray
+JNICALL Java_com_nokia_mj_impl_pim_PIMListImpl__1getSupportedFields(
+ JNIEnv* aJniEnv,
+ jobject /*aPeer*/,
+ jint aListHandle)
+{
+ JELOG2(EPim);
+ pimbaselist* list = reinterpret_cast< pimbaselist*>(aListHandle);
+ jintArray javaFields = list->getSupportedFields(aJniEnv);
+ return javaFields; // NULL indicates error
+}
+
+JNIEXPORT jboolean
+JNICALL Java_com_nokia_mj_impl_pim_PIMListImpl__1isSupportedAttribute(
+ JNIEnv* /*aJniEnv*/,
+ jobject /*aPeer*/,
+ jint aListHandle,
+ jint aField,
+ jint aAttribute)
+{
+ JELOG2(EPim);
+ pimbaselist* list = reinterpret_cast< pimbaselist*>(aListHandle);
+ jboolean isSupportedAttribute = list->isSupportedAttribute(
+ aField,
+ aAttribute);
+ return isSupportedAttribute;
+}
+
+JNIEXPORT jintArray
+JNICALL Java_com_nokia_mj_impl_pim_PIMListImpl__1getSupportedAttributes(
+ JNIEnv* aJniEnv,
+ jobject /*aPeer*/,
+ jint aListHandle,
+ jint aField,
+ jintArray aError)
+{
+ JELOG2(EPim);
+ pimbaselist* list = reinterpret_cast< pimbaselist*>(aListHandle);
+
+ jintArray javaAttributes = list->getSupportedAttributes(
+ aField,
+ aJniEnv,
+ aError);
+
+ return javaAttributes;
+}
+
+JNIEXPORT jboolean
+JNICALL Java_com_nokia_mj_impl_pim_PIMListImpl__1isSupportedArrayElement(
+ JNIEnv* /*aJniEnv*/,
+ jobject /*aPeer*/,
+ jint aListHandle,
+ jint aStringArrayField,
+ jint aStringArrayElement)
+{
+ JELOG2(EPim);
+ pimbaselist* list = reinterpret_cast< pimbaselist*>(aListHandle);
+ jboolean isSupportedArrayElement = list->isSupportedArrayElement(
+ aStringArrayField,
+ aStringArrayElement);
+
+ return isSupportedArrayElement;
+}
+
+JNIEXPORT jintArray
+JNICALL Java_com_nokia_mj_impl_pim_PIMListImpl__1getSupportedArrayElements(
+ JNIEnv* aJniEnv,
+ jobject /*aPeer*/,
+ jint aListHandle,
+ jint aStringArrayField,
+ jintArray aError)
+{
+ JELOG2(EPim);
+ pimbaselist* list = reinterpret_cast< pimbaselist*>(aListHandle);
+
+ jintArray javaElements = list->getSupportedArrayElements(
+ aStringArrayField,
+ aJniEnv,
+ aError);
+
+ return javaElements;
+}
+
+JNIEXPORT jint
+JNICALL Java_com_nokia_mj_impl_pim_PIMListImpl__1getFieldDataType(
+ JNIEnv* aJniEnv,
+ jobject /*aPeer*/,
+ jint aListHandle,
+ jint aField,
+ jintArray aError)
+{
+ JELOG2(EPim);
+ pimbaselist* list = reinterpret_cast< pimbaselist*>(aListHandle);
+ jint fieldDataType = list->getFieldDataType(
+ aField,
+ aJniEnv,
+ aError);
+ return fieldDataType;
+}
+
+/**
+ * Calls GetFieldLabelL, GetAttributeLabelL or GetArrayElementLabelL
+ * as indicated by the aLabelType argument.
+ *
+ * @param aList The list to which the call is delegated.
+ * @param aLabelType Label type (field, attribute, array element).
+ * @param aLabelSpecElems Label specification elements which specify
+ * the requested label.
+ * @param aLabelSpecLen Length of the label specification.
+ * @param aRetVal The label. Ownership of the label is transferred to
+ * caller.
+ */
+LOCAL_C void CallGetLabelL(CPIMList* aList, jint aLabelType,
+ jint* aLabelSpecElems, jint /*aLabelSpecLen*/, HBufC** aRetVal)
+{
+ if (aLabelType == EPIMLabelTypeField)
+ {
+ *aRetVal = aList->GetFieldLabelL(aLabelSpecElems[0]); // field constant
+ }
+ else if (aLabelType == EPIMLabelTypeAttribute)
+ {
+ *aRetVal = aList->GetAttributeLabelL(aLabelSpecElems[0]); // attribute constant
+ }
+ else if (aLabelType == EPIMLabelTypeArrayElement)
+ {
+ *aRetVal = aList->GetArrayElementLabelL(aLabelSpecElems[0], // string array field constant
+ aLabelSpecElems[1]); // string array element constant
+ }
+ else
+ {
+ // We should never end up here
+ User::Panic(KPIMPanicCategory, EPIMPanicInvalidState);
+ }
+}
+
+JNIEXPORT jstring
+JNICALL Java_com_nokia_mj_impl_pim_PIMListImpl__1getLabel(
+ JNIEnv* aJniEnv,
+ jobject /*aPeer*/,
+ jint aListHandle,
+ jint aLabelType,
+ jintArray aLabelSpec,
+ jintArray aError)
+{
+ JELOG2(EPim);
+ pimbaselist* baseList = reinterpret_cast< pimbaselist*>(aListHandle);
+ CPIMList* list = static_cast< CPIMList*>(baseList);
+
+ TInt labelSpecLen = aJniEnv->GetArrayLength(aLabelSpec);
+ jint* labelSpecElems = aJniEnv->GetIntArrayElements(aLabelSpec, NULL);
+
+ if (!labelSpecElems)
+ {
+ SetJavaErrorCode(aJniEnv, aError, KErrNoMemory);
+ return NULL;
+ }
+
+ HBufC* label = NULL;
+
+ TInt error = 0;
+ TRAP(error, CallGetLabelL(
+ list,
+ aLabelType,
+ labelSpecElems,
+ labelSpecLen,
+ &label));
+
+ SetJavaErrorCode(aJniEnv, aError, error);
+ aJniEnv->ReleaseIntArrayElements(aLabelSpec, labelSpecElems, 0);
+
+ // The label might be NULL on error
+ if (error != KErrNone || !label)
+ {
+ return NULL;
+ }
+
+ // We now own the label
+
+ jstring javaLabel = java::util::S60CommonUtils::NativeToJavaString(*aJniEnv, *label);
+ delete label;
+
+ if (!javaLabel)
+ {
+ SetJavaErrorCode(aJniEnv, aError, KErrNoMemory);
+ }
+
+ return javaLabel;
+}
+
+JNIEXPORT jint
+JNICALL Java_com_nokia_mj_impl_pim_PIMListImpl__1maxValues(
+ JNIEnv* aJniEnv,
+ jobject /*aPeer*/,
+ jint aListHandle,
+ jint aField,
+ jintArray aError)
+{
+ JELOG2(EPim);
+ pimbaselist* list = reinterpret_cast< pimbaselist*>(aListHandle);
+ jint maxValues = list->maxValues(
+ aField,
+ aJniEnv,
+ aError);
+
+ return maxValues;
+}
+
+JNIEXPORT jint
+JNICALL Java_com_nokia_mj_impl_pim_PIMListImpl__1stringArraySize(
+ JNIEnv* aJniEnv,
+ jobject /*aPeer*/,
+ jint aListHandle,
+ jint aStringArrayField,
+ jintArray aError)
+{
+ JELOG2(EPim);
+ pimbaselist* list = reinterpret_cast< pimbaselist*>(aListHandle);
+
+ int stringArraySize = list->stringArraySize(
+ aStringArrayField,
+ aError,
+ aJniEnv);
+
+ return stringArraySize;
+}
+
+/**
+ * Calls CPIMList::UpdateListL() for given list and converts the
+ * result into set of JNI handles.
+ *
+ * New handles are made and set for new items and the items are added
+ * to the Event Source.
+ *
+ * @param aJniEnv JNIEnv for jintArray manipulation.
+ * @param aList The list for which the update is called and the list
+ * of new and removed items is got.
+ * @param aMatchingItem An item from which the initialized fields
+ * can be fetched and loaded from the database to all items
+ * @param aNewAndRemovedItemHandles Pointer to a jintArray (pointer
+ * to a pointer) through which the resulting array of new
+ * and removed item handles are returned.
+ *
+ * @par Leaving:
+ * @li Any - internal error.
+ */
+
+JNIEXPORT jintArray
+JNICALL Java_com_nokia_mj_impl_pim_PIMListImpl__1updateList(
+ JNIEnv* aJniEnv,
+ jobject /*aPeer*/,
+ jint aListHandle,
+ jint aMatchingItemHandle,
+ jintArray aError)
+{
+ JELOG2(EPim);
+ pimbaseitem* matchingItem = NULL;
+ if (aMatchingItemHandle)
+ {
+ matchingItem = reinterpret_cast< pimbaseitem *>(aMatchingItemHandle);
+ }
+
+ pimbaselist* list = reinterpret_cast< pimbaselist*>(aListHandle);
+ jintArray newAndRemovedItemHandles = NULL;
+ try
+ {
+ newAndRemovedItemHandles = list->updateList(aJniEnv,
+ matchingItem);
+ SetJavaErrorCode(aJniEnv, aError, 0);
+ }
+ catch (int error)
+ {
+ SetJavaErrorCode(aJniEnv, aError, error);
+ }
+
+ return newAndRemovedItemHandles;
+}
+
+// End of File