00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include "fennel/common/CommonPreamble.h"
00025 #include "fennel/farrago/JavaErrorTarget.h"
00026 #include "fennel/farrago/JavaExcn.h"
00027
00028 #include "boost/lexical_cast.hpp"
00029
00030 FENNEL_BEGIN_CPPFILE("$Id: //open/dev/fennel/farrago/JavaErrorTarget.cpp#7 $");
00031
00032 #define JAVAERRORTARGET_TYPE_STR ("JavaErrorTarget")
00033
00034 JavaErrorTarget::JavaErrorTarget(jobject javaErrorInit)
00035 {
00036 JniEnvAutoRef pEnv;
00037
00038 JniUtil::incrementHandleCount(JAVAERRORTARGET_TYPE_STR, this);
00039 javaError = pEnv->NewGlobalRef(javaErrorInit);
00040
00041 jclass classErrorTarget = pEnv->FindClass(
00042 "net/sf/farrago/fennel/FennelJavaErrorTarget");
00043 methNotifyError = pEnv->GetMethodID(
00044 classErrorTarget,
00045 "handleRowError",
00046 "(Ljava/lang/String;ZLjava/lang/String;Ljava/nio/ByteBuffer;I)Ljava/lang/Object;");
00047 }
00048
00049 JavaErrorTarget::~JavaErrorTarget()
00050 {
00051 JniEnvAutoRef pEnv;
00052
00053 pEnv->DeleteGlobalRef(javaError);
00054 JniUtil::decrementHandleCount(JAVAERRORTARGET_TYPE_STR, this);
00055 javaError = NULL;
00056 }
00057
00058 void JavaErrorTarget::notifyError(
00059 const std::string &source,
00060 ErrorLevel level,
00061 const std::string &message,
00062 void *address,
00063 long capacity,
00064 int index)
00065 {
00066 JniEnvAutoRef pEnv;
00067
00068
00069
00070
00071 jstring javaSource = pEnv->NewStringUTF(source.c_str());
00072 JniLocalRefReaper javaSourceReaper(pEnv, javaSource);
00073 jboolean javaIsWarning = (level == ROW_WARNING) ? true : false;
00074 jstring javaMessage = pEnv->NewStringUTF(message.c_str());
00075 JniLocalRefReaper javaMessageReaper(pEnv, javaMessage);
00076 jobject javaByteBuffer =
00077 pEnv->NewDirectByteBuffer(address, capacity);
00078 JniLocalRefReaper javaByteBufferReaper(pEnv, javaByteBuffer);
00079 jint javaIndex = index;
00080
00081 pEnv->CallObjectMethod(
00082 javaError, methNotifyError,
00083 javaSource, javaIsWarning, javaMessage,
00084 javaByteBuffer, javaIndex);
00085 }
00086
00087 FENNEL_END_CPPFILE("$Id: //open/dev/fennel/farrago/JavaErrorTarget.cpp#7 $");
00088
00089