📄 pim_item.c
字号:
KNI_StartHandles(1);
KNI_DeclareHandle(stringids); /* int array */
KNI_GetParameterAsObject(4, stringids);
id_size = KNI_GetIntArrayElement(stringids, 0);
KNI_EndHandles();
for (i = 0, currStringArrayIndex = 0; i < id_size; i++, currStringArrayIndex++)
{
KNI_StartHandles(3);
KNI_DeclareHandle(string);
KNI_DeclareHandle(stringids); /* int array */
KNI_DeclareHandle(stringvalues); /* stringarray */
KNI_GetParameterAsObject(4, stringids);
KNI_GetParameterAsObject(5, stringvalues);
currField = KNI_GetIntArrayElement(stringids, i * 3 + 1);
currIndex = KNI_GetIntArrayElement(stringids, i * 3 + 2);
currAttrib = KNI_GetIntArrayElement(stringids, i * 3 + 3);
KNI_GetObjectArrayElement(stringvalues, currStringArrayIndex, string);
slen = KNI_GetStringLength(string);
if (slen > (sizeof(buffer) / 2) - 1)
{
slen = (sizeof(buffer) / 2) - 1;
}
KNI_GetStringRegion(string, 0, slen, (jchar*) buffer);
buffer[slen*2] = buffer[slen*2+1] = 0;
KNI_EndHandles();
switch (currField)
{
case C_FORMATTED_ADDR:
FAILED_WITH_EXC(pContact, put_FormattedAddress, buffer);
break;
case C_FORMATTED_NAME:
FAILED_WITH_EXC(pContact, put_FormattedName, buffer);
break;
case C_NICKNAME:
FAILED_WITH_EXC(pContact, put_NickName, buffer);
break;
case C_EMAIL:
FAILED_WITH_EXC(pContact, put_EmailAddress, (buffer));
break;
case C_TEL:
if (currAttrib & C_ATTR_MOBILE)
{
FAILED_WITH_EXC(pContact, put_MobileNumber, (buffer));
}
else if (currAttrib & C_ATTR_HOME)
{
FAILED_WITH_EXC(pContact, put_HomeNumber, (buffer));
}
else if (currAttrib & C_ATTR_WORK)
{
FAILED_WITH_EXC(pContact, put_OfficeNumber, (buffer));
}
else if (currAttrib & C_ATTR_FAX)
{
FAILED_WITH_EXC(pContact, put_FaxNumber, (buffer));
}
else
{
FAILED_WITH_EXC(pContact, put_MobileNumber, (buffer));
}
break;
case C_NOTE:
FAILED_WITH_EXC(pContact, put_ContactNote, (buffer));
break;
case C_ORG:
FAILED_WITH_EXC(pContact, put_CompanyName, (buffer));
break;
case C_TITLE:
FAILED_WITH_EXC(pContact, put_JobTitle, (buffer));
break;
case C_URL:
FAILED_WITH_EXC(pContact, put_WebPage, (buffer));
break;
}
}
KNI_StartHandles(1);
KNI_DeclareHandle(longvalues); /* long array */
KNI_GetParameterAsObject(8, longvalues);
id_size = (kal_int32)KNI_GetLongArrayElement(longvalues, 0);
KNI_EndHandles();
for (i = 0, currStringArrayIndex = 0; i < id_size; i++, currStringArrayIndex++)
{
KNI_StartHandles(1);
KNI_DeclareHandle(longvalues); /* long array */
KNI_GetParameterAsObject(8, longvalues);
currField = (kal_int32)KNI_GetLongArrayElement(longvalues, i * 4 + 1);
currIndex = (kal_int32)KNI_GetLongArrayElement(longvalues, i * 4 + 2);
currAttrib = (kal_int32)KNI_GetLongArrayElement(longvalues, i * 4 + 3);
currFieldVal = (kal_int64)KNI_GetLongArrayElement(longvalues, i * 4 + 4);
KNI_EndHandles();
switch (currField)
{
case C_BIRTHDAY:
FAILED_WITH_EXC(pContact, put_Birthday, currFieldVal);
break;
}
}
id_size = KNI_GetParameterAsInt(10);
/* get category */
if(id_size > 0 )
{
KNI_StartHandles(2);
KNI_DeclareHandle(category); /* string */
KNI_DeclareHandle(categories); /* string array */
KNI_GetParameterAsObject(9, categories);
KNI_GetObjectArrayElement(categories, 1, category);
slen = KNI_GetStringLength(category);
if (slen > (sizeof(buffer) / 2) - 1)
{
slen = (sizeof(buffer) / 2) - 1;
}
KNI_GetStringRegion(category, 0, slen, (jchar*) buffer);
buffer[slen*2] = buffer[slen*2+1] = 0;
KNI_EndHandles();
FAILED_WITH_EXC(pContact, put_CategoryIndex, pim_getIndexOfCategory(dbhandle, buffer));
}
return KAL_TRUE;
}
/*****************************************************************************
* FUNCTION
* Java_com_ibm_oti_pim_PIMItemImpl_commitN
* DESCRIPTION
* private native int commitN(int listType, int handle, int rechandle, int[] stringids, byte[][] stringvalues, int[] byteids, byte[] bytevalues, long[] longvalues, String[] categories, int numcats)
* PARAMETERS
* void
* RETURNS
*****************************************************************************/
KNIEXPORT KNI_RETURNTYPE_INT
Java_com_ibm_oti_pim_PIMItemImpl_commitN(void)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
kal_int32 listtype = KNI_GetParameterAsInt(1);
kal_int32 dbhandle = KNI_GetParameterAsInt(2);
kal_int32 rechandle = KNI_GetParameterAsInt(3);
kal_int32 loadSuccessful = KAL_FALSE;
void *item = NULL;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
JPIM_DEBUG(TRACE_FUNC, FUNC_J2ME_PIMITEMIMPL_COMMITN);
switch (listtype)
{
case CONTACT_LIST:
loadSuccessful = loadContactFromJavaLayer(dbhandle, &(pim_cntx.contact));
item = &(pim_cntx.contact);
break;
case EVENT_LIST:
loadSuccessful = loadEventFromJavaLayer(dbhandle, &(pim_cntx.event));
item = &(pim_cntx.event);
break;
case TODO_LIST:
PIM_THROW(PIM, "", FEATURE_NOT_SUPPORTED);
break;
default:
PIM_THROW(ILLARG, "", GENERAL_ERROR);
}
if (!loadSuccessful)
{
KNI_ReturnInt(-1);
}
if (rechandle == -1) /* add new entry */
{
switch (listtype)
{
case CONTACT_LIST:
THROW_FAILED_WITH_EXEC(
addContact(dbhandle, &rechandle, (IContact*) item),
CONTACT_LIST,
{ /* */ } );
/* clean the cache, we can get the newest data latter */
pim_cntx.cdbh = 0xFFFF;
pim_cntx.contact.sort_index = 0xFF;
pim_cntx.contact.store_index = 0xFF;
break;
case EVENT_LIST:
THROW_FAILED_WITH_EXEC(
addEvent(dbhandle, &rechandle, (IEvent*) item),
EVENT_LIST,
{ /* */ } );
pim_cntx.edbh = 0xFFFF;
pim_cntx.event.index = 0xFF;
pim_cntx.event.handle = 0xFF;
break;
case TODO_LIST:
PIM_THROW(PIM, "", FEATURE_NOT_SUPPORTED);
break;
default:
PIM_THROW(ILLARG, "", GENERAL_ERROR);
}
}
else /* update new entry */
{
switch (listtype)
{
case CONTACT_LIST:
THROW_FAILED_WITH_EXEC(
updateContact(dbhandle, &rechandle, (IContact*) item),
CONTACT_LIST,
{ /* */ } );
/* clean the cache, we can get the newest data latter */
pim_cntx.cdbh = 0xFFFF;
pim_cntx.contact.sort_index = 0xFF;
pim_cntx.contact.store_index = 0xFF;
break;
case EVENT_LIST:
THROW_FAILED_WITH_EXEC(
updateEvent(dbhandle, &rechandle, (IEvent*) item),
EVENT_LIST,
{ /* */ } );
pim_cntx.edbh = 0xFFFF;
pim_cntx.event.index = 0xFF;
pim_cntx.event.handle = 0xFF;
break;
case TODO_LIST:
PIM_THROW(PIM, "", FEATURE_NOT_SUPPORTED);
break;
default:
PIM_THROW(ILLARG, "", GENERAL_ERROR);
}
}
KNI_ReturnInt(rechandle);
}
/*****************************************************************************
* FUNCTION
* countValuesForContact
* DESCRIPTION
*
* PARAMETERS
* pContact [?]
* field [IN]
* RETURNS
*
*****************************************************************************/
static kal_int32 countValuesForContact(IContact *pContact, kal_int32 field)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
kal_int32 count = 0;
kal_char *tempFieldVal = NULL;
kal_int64 tempDateVal = 0;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
if (pContact == NULL)
{
return 0;
}
switch (field)
{
case C_FORMATTED_ADDR:
FAILED_WITH_EXC(pContact, get_FormattedAddress, &tempFieldVal);
if (NOT_EMPTY(tempFieldVal))
{
count++;
JPIM_DEBUG_1(TRACE_FUNC, FUNC_J2ME_COUNTVALUESFORCONTACT, C_FORMATTED_ADDR);
}
break;
case C_FORMATTED_NAME:
FAILED_WITH_EXC(pContact, get_FormattedName, &tempFieldVal);
if (NOT_EMPTY(tempFieldVal))
{
count++;
JPIM_DEBUG_1(TRACE_FUNC, FUNC_J2ME_COUNTVALUESFORCONTACT, C_FORMATTED_NAME);
}
break;
case C_NICKNAME:
FAILED_WITH_EXC(pContact, get_NickName, &tempFieldVal);
if (NOT_EMPTY(tempFieldVal))
{
count++;
JPIM_DEBUG_1(TRACE_FUNC, FUNC_J2ME_COUNTVALUESFORCONTACT, C_NICKNAME);
}
break;
case C_EMAIL:
FAILED_WITH_EXC(pContact, get_EmailAddress, &tempFieldVal);
if (NOT_EMPTY(tempFieldVal))
{
count++;
JPIM_DEBUG_1(TRACE_FUNC, FUNC_J2ME_COUNTVALUESFORCONTACT, C_EMAIL);
}
break;
case C_TEL:
FAILED_WITH_EXC(pContact, get_MobileNumber, &tempFieldVal);
if (NOT_EMPTY(tempFieldVal))
{
count++;
JPIM_DEBUG_1(TRACE_FUNC, FUNC_J2ME_COUNTVALUESFORCONTACT, C_TEL*10+1);
}
FAILED_WITH_EXC(pContact, get_HomeNumber, &tempFieldVal);
if (NOT_EMPTY(tempFieldVal))
{
count++;
JPIM_DEBUG_1(TRACE_FUNC, FUNC_J2ME_COUNTVALUESFORCONTACT, C_TEL*10+2);
}
FAILED_WITH_EXC(pContact, get_OfficeNumber, &tempFieldVal);
if (NOT_EMPTY(tempFieldVal))
{
count++;
JPIM_DEBUG_1(TRACE_FUNC, FUNC_J2ME_COUNTVALUESFORCONTACT, C_TEL*10+3);
}
FAILED_WITH_EXC(pContact, get_FaxNumber, &tempFieldVal);
if (NOT_EMPTY(tempFieldVal))
{
count++;
JPIM_DEBUG_1(TRACE_FUNC, FUNC_J2ME_COUNTVALUESFORCONTACT, C_TEL*10+4);
}
break;
case C_NOTE:
FAILED_WITH_EXC(pContact, get_ContactNote, &tempFieldVal);
if (NOT_EMPTY(tempFieldVal))
{
count++;
JPIM_DEBUG_1(TRACE_FUNC, FUNC_J2ME_COUNTVALUESFORCONTACT, C_NOTE);
}
break;
case C_ORG:
FAILED_WITH_EXC(pContact, get_CompanyName, &tempFieldVal);
if (NOT_EMPTY(tempFieldVal))
{
count++;
JPIM_DEBUG_1(TRACE_FUNC, FUNC_J2ME_COUNTVALUESFORCONTACT, C_ORG);
}
break;
case C_TITLE:
FAILED_WITH_EXC(pContact, get_JobTitle, &tempFieldVal);
if (NOT_EMPTY(tempFieldVal))
{
count++;
JPIM_DEBUG_1(TRACE_FUNC, FUNC_J2ME_COUNTVALUESFORCONTACT, C_TITLE);
}
break;
case C_URL:
FAILED_WITH_EXC(pContact, get_WebPage, &tempFieldVal);
if (NOT_EMPTY(tempFieldVal))
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -