X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/5873e2ce9c66711a168e9b419f0d1b6384ce1ffa..907e0ad42ebe9ac4074648201519ecc10d1f8812:/src/java/jxbt_utilities.c diff --git a/src/java/jxbt_utilities.c b/src/java/jxbt_utilities.c index aa2b5c61ce..6b11b8b0c2 100644 --- a/src/java/jxbt_utilities.c +++ b/src/java/jxbt_utilities.c @@ -1,16 +1,12 @@ -/* - * $Id$ - * - * Various JNI helper functions - * - * Copyright 2006,2007 Martin Quinson, Malek Cherier All right reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the license (GNU LGPL) which comes with this package. - * - */ - -#include /* abort */ +/* Various JNI helper functions */ + +/* Copyright (c) 2007, 2008, 2009, 2010. The SimGrid Team. + * All rights reserved. */ + +/* This program is free software; you can redistribute it and/or modify it + * under the terms of the license (GNU LGPL) which comes with this package. */ + +#include /* abort */ #include "xbt/misc.h" #include "xbt/sysdep.h" #include "xbt/str.h" @@ -20,11 +16,12 @@ /* JNI GETTERS */ /* *********** */ -jclass jxbt_get_class(JNIEnv* env, const char*name) { +jclass jxbt_get_class(JNIEnv * env, const char *name) +{ jclass cls = (*env)->FindClass(env, name); - - if(!cls) { - char *m=bprintf("Class %s not found",name); + + if (!cls) { + char *m = bprintf("Class %s not found", name); jxbt_throw_jni(env, m); free(m); return NULL; @@ -33,25 +30,29 @@ jclass jxbt_get_class(JNIEnv* env, const char*name) { return cls; } -jmethodID jxbt_get_jmethod(JNIEnv* env, jclass cls, - const char *name,const char *signature) { +jmethodID jxbt_get_jmethod(JNIEnv * env, jclass cls, + const char *name, const char *signature) +{ jmethodID id; if (!cls) return 0; - id = (*env)->GetMethodID(env, cls, name,signature); - - if(!id) { + id = (*env)->GetMethodID(env, cls, name, signature); + + if (!id) { - jmethodID tostr_id = (*env)->GetMethodID(env, cls, "getName", "()Ljava/lang/String;"); - jstring jclassname = (jstring) (*env)->CallObjectMethod(env, cls, tostr_id, NULL); + jmethodID tostr_id = + (*env)->GetMethodID(env, cls, "getName", "()Ljava/lang/String;"); + jstring jclassname = + (jstring) (*env)->CallObjectMethod(env, cls, tostr_id, NULL); const char *classname = (*env)->GetStringUTFChars(env, jclassname, 0); - char *m=bprintf("Cannot find method %s(%s) in %s", name, signature ,classname); + char *m = bprintf("Cannot find method %s(%s) in %s", name, signature, + classname); - (*env)->ReleaseStringUTFChars(env, jclassname, classname); + (*env)->ReleaseStringUTFChars(env, jclassname, classname); - jxbt_throw_jni(env,m); + jxbt_throw_jni(env, m); free(m); return 0; @@ -60,23 +61,82 @@ jmethodID jxbt_get_jmethod(JNIEnv* env, jclass cls, return id; } -jmethodID jxbt_get_smethod(JNIEnv* env, const char *classname, - const char *name,const char *signature) { - - jclass cls; +jmethodID jxbt_get_static_jmethod(JNIEnv * env, jclass cls, + const char *name, const char *signature) +{ + jmethodID id; + + if (!cls) + return 0; + id = (*env)->GetStaticMethodID(env, cls, name, signature); + + if (!id) { + + jmethodID tostr_id = + (*env)->GetMethodID(env, cls, "getName", "()Ljava/lang/String;"); + jstring jclassname = + (jstring) (*env)->CallObjectMethod(env, cls, tostr_id, NULL); + const char *classname = (*env)->GetStringUTFChars(env, jclassname, 0); + + char *m = + bprintf("Cannot find static method %s(%s) in %s", name, signature, + classname); + + (*env)->ReleaseStringUTFChars(env, jclassname, classname); + + jxbt_throw_jni(env, m); + + free(m); + return 0; + } + + return id; +} + +jmethodID jxbt_get_static_smethod(JNIEnv * env, const char *classname, + const char *name, const char *signature) +{ + + jclass cls; + jmethodID id; + cls = jxbt_get_class(env, classname); + + if (!cls) + return 0; + + id = (*env)->GetStaticMethodID(env, cls, name, signature); + + if (!id) { + char *m = + bprintf("Cannot find static method %s(%s) in %s", name, signature, + classname); + + jxbt_throw_jni(env, m); + + free(m); + return 0; + } + return id; +} + +jmethodID jxbt_get_smethod(JNIEnv * env, const char *classname, + const char *name, const char *signature) +{ - jmethodID id; - cls = jxbt_get_class(env,classname); + jclass cls; + jmethodID id; + cls = jxbt_get_class(env, classname); if (!cls) return 0; - id = (*env)->GetMethodID(env, cls, name,signature); - - if(!id) { - char *m=bprintf("Cannot find method %s(%s) in %s", name, signature,classname); + id = (*env)->GetMethodID(env, cls, name, signature); - jxbt_throw_jni(env,m); + if (!id) { + char *m = bprintf("Cannot find method %s(%s) in %s", name, signature, + classname); + + jxbt_throw_jni(env, m); free(m); return 0; @@ -84,24 +144,28 @@ jmethodID jxbt_get_smethod(JNIEnv* env, const char *classname, return id; } -jfieldID jxbt_get_jfield(JNIEnv* env, jclass cls, - const char *name, const char *signature) { +jfieldID jxbt_get_jfield(JNIEnv * env, jclass cls, + const char *name, const char *signature) +{ jfieldID id; if (!cls) return 0; id = (*env)->GetFieldID(env, cls, name, signature); - - if(!id) { - jmethodID getname_id = (*env)->GetMethodID(env, cls, "getName", "()Ljava/lang/String;"); - jstring jclassname = (jstring) (*env)->CallObjectMethod(env,cls, getname_id, NULL); + + if (!id) { + jmethodID getname_id = + (*env)->GetMethodID(env, cls, "getName", "()Ljava/lang/String;"); + jstring jclassname = + (jstring) (*env)->CallObjectMethod(env, cls, getname_id, NULL); const char *classname = (*env)->GetStringUTFChars(env, jclassname, 0); - char *m=bprintf("Cannot find field %s %s in %s",signature, name, classname); + char *m = bprintf("Cannot find field %s %s in %s", signature, name, + classname); - (*env)->ReleaseStringUTFChars(env, jclassname, classname); + (*env)->ReleaseStringUTFChars(env, jclassname, classname); - jxbt_throw_jni(env,m); + jxbt_throw_jni(env, m); free(m); return 0; @@ -110,20 +174,22 @@ jfieldID jxbt_get_jfield(JNIEnv* env, jclass cls, return id; } -jfieldID jxbt_get_sfield(JNIEnv* env, const char *classname, - const char *name, const char *signature) { - jclass cls = jxbt_get_class(env,classname); +jfieldID jxbt_get_sfield(JNIEnv * env, const char *classname, + const char *name, const char *signature) +{ + jclass cls = jxbt_get_class(env, classname); jfieldID id; if (!cls) return 0; id = (*env)->GetFieldID(env, cls, name, signature); - - if(!id) { - char *m=bprintf("Cannot find field %s %s in %s",signature, name, classname); - jxbt_throw_jni(env,m); + if (!id) { + char *m = bprintf("Cannot find field %s %s in %s", signature, name, + classname); + + jxbt_throw_jni(env, m); free(m); return 0; @@ -135,51 +201,96 @@ jfieldID jxbt_get_sfield(JNIEnv* env, const char *classname, /* ***************** */ /* EXCEPTION RAISING */ /* ***************** */ -static void jxbt_throw_by_name(JNIEnv* env,const char* name, char *msg) { - jclass cls = (*env)->FindClass(env, name); +static void jxbt_throw_by_name(JNIEnv * env, const char *name, char *msg) +{ + jclass cls = (*env)->FindClass(env, name); - xbt_assert2(cls,"%s (Plus severe error: class %s not found)\n", - msg,name); + xbt_assert2(cls, "%s (Plus severe error: class %s not found)\n", msg, + name); - (*env)->ThrowNew(env,cls,msg); + (*env)->ThrowNew(env, cls, msg); - free(msg); + free(msg); } /* Errors in MSG */ -void jxbt_throw_jni(JNIEnv* env,const char* msg) { +void jxbt_throw_jni(JNIEnv * env, const char *msg) +{ jxbt_throw_by_name(env, - "simgrid/msg/JniException", - bprintf("Internal or JNI error: %s",msg)); + "simgrid/msg/JniException", + bprintf("Internal or JNI error: %s", msg)); } -void jxbt_throw_notbound(JNIEnv* env,const char* kind, void *pointer) { + +void jxbt_throw_notbound(JNIEnv * env, const char *kind, void *pointer) +{ jxbt_throw_by_name(env, - "simgrid/msg/JniException", - bprintf("Internal error: %s %p not bound",kind, pointer)); + "simgrid/msg/JniException", + bprintf("Internal error: %s %p not bound", kind, + pointer)); } -void jxbt_throw_native(JNIEnv* env,char* msg) { +void jxbt_throw_native(JNIEnv * env, char *msg) +{ jxbt_throw_by_name(env, "simgrid/msg/NativeException", msg); } /* *** */ -void jxbt_throw_null(JNIEnv* env, char* msg) { +void jxbt_throw_null(JNIEnv * env, char *msg) +{ jxbt_throw_by_name(env, "java/lang/NullPointerException", msg); } - /* Errors on user side */ -void jxbt_throw_illegal(JNIEnv* env, char* msg) { +void jxbt_throw_illegal(JNIEnv * env, char *msg) +{ jxbt_throw_by_name(env, "java/lang/IllegalArgumentException", msg); } -void jxbt_throw_host_not_found(JNIEnv* env, const char *invalid_name) { + +void jxbt_throw_host_not_found(JNIEnv * env, const char *invalid_name) +{ jxbt_throw_by_name(env, - "simgrid/msg/HostNotFoundException", - bprintf("No such host: %s",invalid_name)); + "simgrid/msg/HostNotFoundException", + bprintf("No such host: %s", invalid_name)); } -void jxbt_throw_process_not_found(JNIEnv* env, const char *invalid_name) { + +void jxbt_throw_process_not_found(JNIEnv * env, const char *invalid_name) +{ jxbt_throw_by_name(env, - "simgrid/msg/ProcessNotFoundException", - bprintf("No such process: %s",invalid_name)); + "simgrid/msg/ProcessNotFoundException", + bprintf("No such process: %s", invalid_name)); +} + +// tranfert failure +void jxbt_throw_transfer_failure(JNIEnv * env, char *details) +{ + + jxbt_throw_by_name(env, "simgrid/msg/TransferFailureException", details); + +} + +// host failure Exception +void jxbt_throw_host_failure(JNIEnv * env, char *details) +{ + + jxbt_throw_by_name(env, + "simgrid/msg/HostFailureException", + bprintf("Host Failure %s", details)); + +} + +// time out failure Exception +void jxbt_throw_time_out_failure(JNIEnv * env, char *details) +{ + + jxbt_throw_by_name(env, "simgrid/msg/TimeoutException", details); + +} + +// task Cancelled exception +void jxbt_throw_task_cancelled(JNIEnv * env, char *details) +{ + + jxbt_throw_by_name(env, "simgrid/msg/TaskCancelledException", details); + }