// ==========================================================================
// Author: Yee Hsu
// Date: 3/2/2006
// File: JNI.cpp
//
// Desc: JNI implementation for a Java created JNI header file.
// This is the JNI workaround for a native port done in C++
// which provides a working JNI interface for Java developers
// ==========================================================================
// ObjectJNI.cpp : Defines the entry point for the DLL application.
//
#include "stdafx.h"
#include "Object.h"
#include "ObjectExports.h"
using namespace OBJECT;
/* Global Variables */
CObject* g_pObject = NULL;
JNIEXPORT jboolean JNICALL Java_Object_Init(JNIEnv *env, jobject obj, jstring jstr)
{
int nLicense = 0;
if (!g_pObject)
{
g_pObject = (CObject*) UVObjectCreate();
}
if (g_pObject)
{
const char *str = env->GetStringUTFChars(jstr, 0);
nLicense = g_pObject->Init(str);
env->ReleaseStringUTFChars(jstr, str);
}
return (nLicense == 1 ? JNI_TRUE : JNI_FALSE);
}
JNIEXPORT jboolean JNICALL Java_Object_ParseXmlFile(JNIEnv *env, jobject obj, jstring jstr)
{
// TODO: Add your implementation code here
jboolean ret = JNI_FALSE;
const char *str = env->GetStringUTFChars(jstr, 0);
if (g_pObject->ParseXmlFile(str, PARSE_ALL))
ret = JNI_TRUE;
env->ReleaseStringUTFChars(jstr, str);
return ret;
}
JNIEXPORT jstring JNICALL Java_Object_InvokeMethod
(JNIEnv *env, jobject obj, jint nMethodId, jint nuId, jint nhId, jstring jstr)
{
// TODO: Add your implementation code here
jstring jReturnCode = NULL;
CObject::ReturnCode rcRes = CObject::rcInternalError;
enum CObject::InvokeMethodId eMethId = (CObject::InvokeMethodId) nMethodId;
const char *str = env->GetStringUTFChars(jstr, 0);
switch (eMethId)
{
case CObject::_Meth1:
case CObject::_Meth2:
rcRes = g_pObject->InvokeMethod(eMethId, nhId, str, NULL);
// determine return code value and return via jstring
switch (rcRes)
{
case CObject::rcOk:
jReturnCode = env->NewStringUTF("rcOk");
break;
default:
jReturnCode = env->NewStringUTF("rcError");
break;
}
break;
case CObject::_Meth3:
jReturnCode = env->NewStringUTF("rcNotImplemented");
break;
default:
jReturnCode = env->NewStringUTF("rcError");
break;
}
env->ReleaseStringUTFChars(jstr, str);
//env->ReleaseStringUTFChars(jReturnCode, NULL); // may have memory leak
return jReturnCode;
}
JNIEXPORT jboolean JNICALL Java_Object_Term(JNIEnv *env, jobject obj)
{
// TODO: Add your implementation code here
if (g_pObject)
{
UVObjectFree(g_pObject);
}
g_pObject = NULL;
return JNI_TRUE;
}