/* * 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 ClientApi 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 "clientapi.h" #include "clientapi_jni.h" #include "JNIStringUtil.h" /* * Class: com_perforce_client_api_ClientApi * Method: nNewInstance * Signature: ()I */ JNIEXPORT jint JNICALL Java_com_perforce_client_api_ClientApi_nNewInstance (JNIEnv *, jclass) { // // Return a simple integer that is the memory location // of the native object // return (jint) new ClientApi(); } /* * Class: com_perforce_client_api_ClientApi * Method: nDeleteInstance * Signature: (I)V */ JNIEXPORT void JNICALL Java_com_perforce_client_api_ClientApi_nDeleteInstance (JNIEnv *, jclass, jint ref) { // // Delete the native reference we get from the // integer // delete (ClientApi *)ref; } /* * Class: com_perforce_client_api_ClientApi * Method: nSetCwd * Signature: (ILjava/lang/String;)V */ JNIEXPORT void JNICALL Java_com_perforce_client_api_ClientApi_nSetCwd (JNIEnv * env, jclass, jint jRef, jstring jcwd) { ClientApi * ref = (ClientApi *)jRef; char * cwd = jstring_to_cstring( env, jcwd ); ref->SetCwd( cwd ); free( cwd ); } /* * Class: com_perforce_client_api_ClientApi * Method: nSetUser * Signature: (ILjava/lang/String;)V */ JNIEXPORT void JNICALL Java_com_perforce_client_api_ClientApi_nSetUser (JNIEnv *env, jclass, jint jRef, jstring jUser) { ClientApi * ref = (ClientApi *)jRef; char * user = jstring_to_cstring( env, jUser ); ref->SetUser( user ); free( user ); } /* * Class: com_perforce_client_api_ClientApi * Method: nSetProtocol * Signature: (ILjava/lang/String;Ljava/lang/String;)V */ JNIEXPORT void JNICALL Java_com_perforce_client_api_ClientApi_nSetProtocol (JNIEnv *env, jclass, jint jRef, jstring jP, jstring jV) { ClientApi * ref = (ClientApi *)jRef; char * p = jstring_to_cstring( env, jP ); char * v = jstring_to_cstring( env, jV ); ref->SetProtocol( p, v ); free( p ); free( v ); } /* * Class: com_perforce_client_api_ClientApi * Method: nGetProtocol * Signature: (ILjava/lang/String;)Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_com_perforce_client_api_ClientApi_nGetProtocol (JNIEnv *env, jclass, jint jRef, jstring jV) { ClientApi * ref = (ClientApi *)jRef; char * v = jstring_to_cstring( env, jV ); StrPtr * temp = ref->GetProtocol( v ); return cstring_to_jstring( env, temp->Text() ); } /* * Class: com_perforce_client_api_ClientApi * Method: nSetVar * Signature: (ILjava/lang/String;Ljava/lang/String;)V */ JNIEXPORT void JNICALL Java_com_perforce_client_api_ClientApi_nSetVar (JNIEnv * env, jclass, jint jRef, jstring jVar, jstring jValue) { ClientApi * ref = (ClientApi *)jRef; char * var = jstring_to_cstring( env, jVar ); char * value = jstring_to_cstring( env, jValue ); { StrRef temp( value ); ref->SetVar( var, &temp ); } free( var ); free( value ); } /* * Class: com_perforce_client_api_ClientApi * Method: nSetVarV * Signature: (ILjava/lang/String;)V */ JNIEXPORT void JNICALL Java_com_perforce_client_api_ClientApi_nSetVarV (JNIEnv * env, jclass, jint jRef, jstring jArg) { ClientApi * ref = (ClientApi *)jRef; char * arg = jstring_to_cstring( env, jArg ); ref->SetVarV( arg ); free( arg ); } /* * Class: com_perforce_client_api_ClientApi * Method: nSetArgv * Signature: (I[Ljava/lang/String;)V */ JNIEXPORT void JNICALL Java_com_perforce_client_api_ClientApi_nSetArgv (JNIEnv * env, jclass, jint jRef, jobjectArray jStringArray) { ClientApi * ref = (ClientApi *)jRef; unsigned long argc; char ** argv = jStringArray_to_charptrptr( env, jStringArray, &argc ); ref->SetArgv( argc, argv ); // // Dispose of our charptr array by iterating through each one // and freeing it. // if ( argv ) { int i = 0; for ( i = 0; i < argc; i++ ) { if( argv[i] ) { free( argv[i] ); } } free( argv ); } } /* * Class: com_perforce_client_api_ClientApi * Method: nGetVar * Signature: (ILjava/lang/String;)Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_com_perforce_client_api_ClientApi_nGetVar (JNIEnv * env, jclass, jint jRef, jstring jName ) { ClientApi * ref = (ClientApi *)jRef; char * cName = jstring_to_cstring( env, jName ); jstring jValue = cstring_to_jstring( env, ref->GetVar( cName )->Text() ); delete cName; return jValue; } /* * Class: com_perforce_client_api_ClientApi * Method: nInit * Signature: (II)V */ JNIEXPORT void JNICALL Java_com_perforce_client_api_ClientApi_nInit (JNIEnv *, jclass, jint jRef, jint jErrorRef) { ClientApi * ref = (ClientApi *)jRef; Error * errorRef = (Error *)jErrorRef; ref->Init( errorRef ); } /* * Class: com_perforce_client_api_ClientApi * Method: nRun * Signature: (ILjava/lang/String;I)V */ JNIEXPORT void JNICALL Java_com_perforce_client_api_ClientApi_nRun (JNIEnv * env, jclass, jint jRef, jstring jFunc, jint jClientUser) { ClientApi * ref = (ClientApi *)jRef; ClientUser * ui = (ClientUser *)jClientUser; char * func = jstring_to_cstring( env, jFunc ); ref->Run( func, ui ); free( func ); } /* * Class: com_perforce_client_api_ClientApi * Method: nEnd * Signature: (II)I */ JNIEXPORT jint JNICALL Java_com_perforce_client_api_ClientApi_nEnd (JNIEnv *, jclass, jint jRef, jint jErrorRef) { ClientApi * ref = (ClientApi *)jRef; return ref->Final( (Error *)jErrorRef ); } /* * Class: com_perforce_client_api_ClientApi * Method: nDropped * Signature: (I)I */ JNIEXPORT jint JNICALL Java_com_perforce_client_api_ClientApi_nDropped (JNIEnv *, jclass, jint jRef) { ClientApi * ref = (ClientApi *)jRef; return ref->Dropped(); } /* * Class: com_perforce_client_api_ClientApi * Method: nRunTag * Signature: (ILjava/lang/String;I)V */ JNIEXPORT void JNICALL Java_com_perforce_client_api_ClientApi_nRunTag (JNIEnv * env, jclass, jint jRef, jstring jFunc, jint jUi) { ClientApi * ref = (ClientApi *)jRef; ClientUser * ui = (ClientUser *)jUi; char * func = jstring_to_cstring( env, jFunc ); ref->RunTag( func, ui ); delete func; } /* * Class: com_perforce_client_api_ClientApi * Method: nWaitTag * Signature: (I)V */ JNIEXPORT void JNICALL Java_com_perforce_client_api_ClientApi_nWaitTag__I (JNIEnv *, jclass, jint jRef) { ClientApi * ref = (ClientApi *)jRef; ref->WaitTag(); } /* * Class: com_perforce_client_api_ClientApi * Method: nWaitTag * Signature: (II)V */ JNIEXPORT void JNICALL Java_com_perforce_client_api_ClientApi_nWaitTag__II (JNIEnv *, jclass, jint jRef, jint jUi) { ClientApi * ref = (ClientApi *)jRef; ClientUser * ui = (ClientUser *)jUi; ref->WaitTag( ui ); } /* * Class: com_perforce_client_api_ClientApi * Method: nSetClient * Signature: (ILjava/lang/String;)V */ JNIEXPORT void JNICALL Java_com_perforce_client_api_ClientApi_nSetClient (JNIEnv * env, jclass, jint jRef, jstring jClient) { ClientApi * ref = (ClientApi *)jRef; char * client = jstring_to_cstring( env, jClient ); ref->SetClient( client ); free( client ); } /* * Class: com_perforce_client_api_ClientApi * Method: nSetHost * Signature: (ILjava/lang/String;)V */ JNIEXPORT void JNICALL Java_com_perforce_client_api_ClientApi_nSetHost (JNIEnv * env, jclass, jint jRef, jstring jHost) { ClientApi * ref = (ClientApi *)jRef; char * host = jstring_to_cstring( env, jHost ); ref->SetHost( host ); free( host ); } /* * Class: com_perforce_client_api_ClientApi * Method: nSetPassword * Signature: (ILjava/lang/String;)V */ JNIEXPORT void JNICALL Java_com_perforce_client_api_ClientApi_nSetPassword (JNIEnv * env, jclass, jint jRef, jstring jPassword) { ClientApi * ref = (ClientApi *)jRef; char * password = jstring_to_cstring( env, jPassword ); ref->SetPassword( password ); free( password ); } /* * Class: com_perforce_client_api_ClientApi * Method: nSetPort * Signature: (ILjava/lang/String;)V */ JNIEXPORT void JNICALL Java_com_perforce_client_api_ClientApi_nSetPort (JNIEnv * env, jclass, jint jRef, jstring jPort) { ClientApi * ref = (ClientApi *)jRef; char * port = jstring_to_cstring( env, jPort ); ref->SetPassword( port ); free( port ); } /* * Class: com_perforce_client_api_ClientApi * Method: nDefineClient * Signature: (ILjava/lang/String;I)V */ JNIEXPORT void JNICALL Java_com_perforce_client_api_ClientApi_nDefineClient (JNIEnv * env, jclass, jint jRef, jstring jC, jint jErrorRef) { ClientApi * ref = (ClientApi *)jRef; char * c = jstring_to_cstring( env, jC ); ref->DefineClient( c, (Error *)jErrorRef ); delete c; } /* * Class: com_perforce_client_api_ClientApi * Method: nDefineHost * Signature: (ILjava/lang/String;I)V */ JNIEXPORT void JNICALL Java_com_perforce_client_api_ClientApi_nDefineHost (JNIEnv * env, jclass, jint jRef, jstring jC, jint jErrorRef) { ClientApi * ref = (ClientApi *)jRef; char * c = jstring_to_cstring( env, jC ); ref->DefineHost( c, (Error *)jErrorRef ); delete c; } /* * Class: com_perforce_client_api_ClientApi * Method: nDefinePassword * Signature: (ILjava/lang/String;I)V */ JNIEXPORT void JNICALL Java_com_perforce_client_api_ClientApi_nDefinePassword (JNIEnv * env, jclass, jint jRef, jstring jC, jint jErrorRef) { ClientApi * ref = (ClientApi *)jRef; char * c = jstring_to_cstring( env, jC ); ref->DefinePassword( c, (Error *)jErrorRef ); delete c; } /* * Class: com_perforce_client_api_ClientApi * Method: nDefinePort * Signature: (ILjava/lang/String;I)V */ JNIEXPORT void JNICALL Java_com_perforce_client_api_ClientApi_nDefinePort (JNIEnv * env, jclass, jint jRef, jstring jC, jint jErrorRef) { ClientApi * ref = (ClientApi *)jRef; char * c = jstring_to_cstring( env, jC ); ref->DefinePort( c, (Error *)jErrorRef ); delete c; } /* * Class: com_perforce_client_api_ClientApi * Method: nDefineUser * Signature: (ILjava/lang/String;I)V */ JNIEXPORT void JNICALL Java_com_perforce_client_api_ClientApi_nDefineUser (JNIEnv * env, jclass, jint jRef, jstring jC, jint jErrorRef) { ClientApi * ref = (ClientApi *)jRef; char * c = jstring_to_cstring( env, jC ); ref->DefineUser( c, (Error *)jErrorRef ); delete c; } /* * Class: com_perforce_client_api_ClientApi * Method: nGetCwd * Signature: (I)Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_com_perforce_client_api_ClientApi_nGetCwd (JNIEnv * env, jclass, jint jRef) { ClientApi * ref = (ClientApi *)jRef; return cstring_to_jstring( env, ref->GetCwd().Text() ); } /* * Class: com_perforce_client_api_ClientApi * Method: nGetClient * Signature: (I)Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_com_perforce_client_api_ClientApi_nGetClient (JNIEnv * env, jclass, jint jRef) { ClientApi * ref = (ClientApi *)jRef; return cstring_to_jstring( env, ref->GetClient().Text() ); } /* * Class: com_perforce_client_api_ClientApi * Method: nGetHost * Signature: (I)Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_com_perforce_client_api_ClientApi_nGetHost (JNIEnv * env, jclass, jint jRef) { ClientApi * ref = (ClientApi *)jRef; return cstring_to_jstring( env, ref->GetHost().Text() ); } /* * Class: com_perforce_client_api_ClientApi * Method: nGetOs * Signature: (I)Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_com_perforce_client_api_ClientApi_nGetOs (JNIEnv * env, jclass, jint jRef) { ClientApi * ref = (ClientApi *)jRef; return cstring_to_jstring( env, ref->GetOs().Text() ); } /* * Class: com_perforce_client_api_ClientApi * Method: nGetPassword * Signature: (I)Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_com_perforce_client_api_ClientApi_nGetPassword (JNIEnv * env, jclass, jint jRef) { ClientApi * ref = (ClientApi *)jRef; return cstring_to_jstring( env, ref->GetPassword().Text() ); } /* * Class: com_perforce_client_api_ClientApi * Method: nGetPort * Signature: (I)Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_com_perforce_client_api_ClientApi_nGetPort (JNIEnv * env, jclass, jint jRef) { ClientApi * ref = (ClientApi *)jRef; return cstring_to_jstring( env, ref->GetPort().Text() ); } /* * Class: com_perforce_client_api_ClientApi * Method: nGetUser * Signature: (I)Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_com_perforce_client_api_ClientApi_nGetUser (JNIEnv * env, jclass, jint jRef) { ClientApi * ref = (ClientApi *)jRef; return cstring_to_jstring( env, ref->GetUser().Text() ); }
# | Change | User | Description | Committed | |
---|---|---|---|---|---|
#2 | 7937 | Michael Bishop | /Users/mbishop/dev/public_1666/mbishop_mac/guest/michael_bishop/P4APIForJava/java/com/perforce/client/Main.java | ||
#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. |