/* * Copyright 2000 Perforce Software. All rights reserved. * * This file is part of Perforce - the FAST SCM System. * * Author: Michael Bishop * * Tabs: 4 spaces * * This is just JNI glue to make the java calls go through to the * native Error object. * * The philosophy behind the Java glue is that, all of the native * objects are created natively. The pointer to that object is * passed to java where it stores it as an int. The value of that * int is actually a pointer in memory to the native object. * In this way, java can pass that int back to C code where it can * be casted to a C object pointer. When the java object is garbage * collected, it calls native code to delete the native pointer. * * All methods that are exposed with a java call are simply passed * through to native code where the native call is made. * */ #include "stdhdrs.h" #include "error.h" #include "clienterror.h" #include "strbuf.h" #include "error_jni.h" #include "JNIStringUtil.h" /* * Class: com_perforce_client_api_P4Error * Method: nNewInstance * Signature: ()I */ JNIEXPORT jint JNICALL Java_com_perforce_client_api_P4Error_nNewInstance (JNIEnv *, jclass) { return (jint)new Error(); } /* * Class: com_perforce_client_api_P4Error * Method: nDeleteInstance * Signature: (I)V */ JNIEXPORT void JNICALL Java_com_perforce_client_api_P4Error_nDeleteInstance (JNIEnv *, jclass, jint jRef) { delete (Error *)jRef; } /* * Class: com_perforce_client_api_P4Error * Method: nFmt * Signature: (I)Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_com_perforce_client_api_P4Error_nFmt (JNIEnv * env, jclass, jint jRef) { Error * ref = (Error *)jRef; StrBuf msg; ref->Fmt( &msg ); return cstring_to_jstring( env, msg.Text() ); } /* * Class: com_perforce_client_api_P4Error * Method: getErrorIdNames * Signature: ()[Ljava/lang/String; */ JNIEXPORT jobjectArray JNICALL Java_com_perforce_client_api_P4Error_nGetErrorIdNames (JNIEnv * env, jclass) { static const char * names[] = { "Connect", "BadFlag", "ClobberFile", "MkDir", "Eof", "CantEdit", "NoMerger", "MacError", "ToolServer2", "ToolServer", "ToolCmdCreate", "ToolCmdSend", "Memory", "CantFindApp", "BadSignature", NULL }; return charptrptrNullEnded_to_jStringArray( env, names ); } /* * Class: com_perforce_client_api_P4Error * Method: getErrorIdFmts * Signature: ()[Ljava/lang/String; */ JNIEXPORT jobjectArray JNICALL Java_com_perforce_client_api_P4Error_nGetErrorIdFmts (JNIEnv * env, jclass) { static const char * fmts[] = { ErrClient::Connect.fmt, ErrClient::BadFlag.fmt, ErrClient::ClobberFile.fmt, ErrClient::MkDir.fmt, ErrClient::Eof.fmt, ErrClient::CantEdit.fmt, ErrClient::NoMerger.fmt, ErrClient::MacError.fmt, ErrClient::ToolServer2.fmt, ErrClient::ToolServer.fmt, ErrClient::ToolCmdCreate.fmt, ErrClient::ToolCmdSend.fmt, ErrClient::Memory.fmt, ErrClient::CantFindApp.fmt, ErrClient::BadSignature.fmt, NULL }; return charptrptrNullEnded_to_jStringArray( env, fmts ); } /* * Class: com_perforce_client_api_P4Error * Method: getErrorIdPtrs * Signature: ()[I */ JNIEXPORT jintArray JNICALL Java_com_perforce_client_api_P4Error_nGetErrorIdPtrs (JNIEnv * env, jclass) { static long errorPtrtable[] = { (long)&(ErrClient::Connect), (long)&(ErrClient::BadFlag), (long)&(ErrClient::ClobberFile), (long)&(ErrClient::MkDir), (long)&(ErrClient::Eof), (long)&(ErrClient::CantEdit), (long)&(ErrClient::NoMerger), (long)&(ErrClient::MacError), (long)&(ErrClient::ToolServer2), (long)&(ErrClient::ToolServer), (long)&(ErrClient::ToolCmdCreate), (long)&(ErrClient::ToolCmdSend), (long)&(ErrClient::Memory), (long)&(ErrClient::CantFindApp), (long)&(ErrClient::BadSignature) }; return intArray_to_jintArray(env, errorPtrtable, 15 ); } /* * Class: com_perforce_client_api_P4Error * Method: aAbort * Signature: (I)V */ JNIEXPORT void JNICALL Java_com_perforce_client_api_P4Error_nAbort (JNIEnv *, jclass, jint jRef) { ((Error *)jRef)->Abort(); } /* * Class: com_perforce_client_api_P4Error * Method: nSetErrorId * Signature: (II)V */ JNIEXPORT void JNICALL Java_com_perforce_client_api_P4Error_nSetErrorId (JNIEnv *, jclass, jint jRef, jint jErrorId) { Error * ref = (Error *)jRef; ref->Set( *((ErrorId *)jErrorId) ); } /* * Class: com_perforce_client_api_P4Error * Method: nSetMessage * Signature: (ILjava/lang/String;)V */ JNIEXPORT void JNICALL Java_com_perforce_client_api_P4Error_nSetMessage (JNIEnv * env, jclass, jint jRef, jstring jMessage) { char * message = jstring_to_cstring( env, jMessage ); if ( message ) { Error * ref = (Error *)jRef; *ref << message; delete message; } } /* * Class: com_perforce_client_api_P4Error * Method: nTest * Signature: (I)Z */ JNIEXPORT jboolean JNICALL Java_com_perforce_client_api_P4Error_nTest (JNIEnv *, jclass, jint jRef) { Error * ref = (Error *)jRef; return (jboolean)ref->Test(); }
# | Change | User | Description | Committed | |
---|---|---|---|---|---|
#1 | 430 | Michael Bishop |
Initial checkin. Seems to work. Not very much testing. Not very much documentation. Some more commenting needs to take place. But, it's there to experiment with. |