⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pim_item.c

📁 java 1.1 gemini 08_16
💻 C
📖 第 1 页 / 共 5 页
字号:

    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 + -