00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00023 #ifndef __vtkJVMManager_h
00024 #define __vtkJVMManager_h
00025
00026 #include "vtkObject.h"
00027
00028 #include <jni.h>
00029
00030 class vtkJVMManagerInternal;
00031 class vtkStringArray;
00032
00033
00034 class jvariant
00035 {
00036 public:
00037 jvariant() { this->Type = 0; }
00038 jvariant(jboolean z) { this->Value.z = z; this->Type = 'Z'; }
00039 jvariant(jbyte b) { this->Value.b = b; this->Type = 'B'; }
00040 jvariant(jchar c) { this->Value.c = c; this->Type = 'C'; }
00041 jvariant(jshort s) { this->Value.s = s; this->Type = 'S'; }
00042 jvariant(jint i) { this->Value.i = i; this->Type = 'I'; }
00043 jvariant(jlong j) { this->Value.j = j; this->Type = 'J'; }
00044 jvariant(jfloat f) { this->Value.f = f; this->Type = 'F'; }
00045 jvariant(jdouble d) { this->Value.d = d; this->Type = 'D'; }
00046 jvariant(jobject l) { this->Value.l = l; this->Type = 'L'; }
00047 #if 1
00048 operator jboolean() { return (this->Type == 'Z') ? this->Value.z : 0; }
00049 operator jbyte() { return (this->Type == 'B') ? this->Value.b : 0; }
00050 operator jchar() { return (this->Type == 'C') ? this->Value.c : 0; }
00051 operator jshort() { return (this->Type == 'S') ? this->Value.s : 0; }
00052 operator jint() { return (this->Type == 'I') ? this->Value.i : 0; }
00053 operator jlong() { return (this->Type == 'J') ? this->Value.j : 0; }
00054 operator jfloat() { return (this->Type == 'F') ? this->Value.f : 0.0f; }
00055 operator jdouble() { return (this->Type == 'D') ? this->Value.d : 0.0; }
00056 operator jobject() { return (this->Type == 'L') ? this->Value.l : 0; }
00057 operator jstring() { return (this->Type == 'L') ? reinterpret_cast<jstring>(this->Value.l) : 0; }
00058 #else
00059 operator jboolean() { return this->Value.z; }
00060 operator jbyte() { return this->Value.b; }
00061 operator jchar() { return this->Value.c; }
00062 operator jshort() { return this->Value.s; }
00063 operator jint() { return this->Value.i; }
00064 operator jlong() { return this->Value.j; }
00065 operator jfloat() { return this->Value.f; }
00066 operator jdouble() { return this->Value.d; }
00067 operator jobject() { return this->Value.l; }
00068 operator jstring() { return reinterpret_cast<jstring>(this->Value.l); }
00069 #endif
00070 jvalue Value;
00071 char Type;
00072 };
00073
00074
00075 class VTK_GRAPHICS_JAVA_EXPORT vtkJVMManager : public vtkObject
00076 {
00077 public:
00078 static vtkJVMManager *New();
00079 vtkTypeMacro(vtkJVMManager,vtkObject);
00080 void PrintSelf(ostream& os, vtkIndent indent);
00081
00085 static void AddClassPath(const char * path);
00086
00088 static void RemoveAllClassPaths();
00089
00093 static void AddLibraryPath(const char * path);
00094
00096 static void RemoveAllLibraryPaths();
00097
00099
00100 vtkSetMacro(MaximumHeapSizeMB, unsigned int);
00101 vtkGetMacro(MaximumHeapSizeMB, unsigned int);
00103
00106 void CreateJVM();
00107
00111 void AddArgument(jvariant arg);
00112
00115 void RemoveAllArguments();
00116
00117
00118 const char* GetStringCharacters(jstring str);
00119 void ReleaseStringCharacters(jstring str, const char* cstr);
00120 jstring NewString(const char* str);
00121 jobjectArray NewObjectArray(const char* name, int length);
00122 void SetObjectArrayElement(jobjectArray arr, int i, jobject obj);
00123 jobject GetObjectArrayElement(jobjectArray arr, int i);
00124 jobject NewObject(const char* name, const char* signature);
00125 jobject NewObject(const char* name, const char* signature, jvariant arg1);
00126 jobject NewObject(const char* name, const char* signature, jvariant arg1, jvariant arg2);
00127 jobject NewObject(const char* name, const char* signature, jvariant arg1, jvariant arg2, jvariant arg3);
00128 jvariant CallMethod(jobject obj, const char* name, const char* signature);
00129 jvariant CallMethod(jobject obj, const char* name, const char* signature, jvariant arg1);
00130 jvariant CallMethod(jobject obj, const char* name, const char* signature, jvariant arg1, jvariant arg2);
00131 jvariant CallMethod(jobject obj, const char* name, const char* signature, jvariant arg1, jvariant arg2, jvariant arg3);
00132 jvariant CallStaticMethod(const char* clazz, const char* name, const char* signature);
00133 jvariant CallStaticMethod(const char* clazz, const char* name, const char* signature, jvariant arg1);
00134 jvariant CallStaticMethod(const char* clazz, const char* name, const char* signature, jvariant arg1, jvariant arg2);
00135 jvariant CallStaticMethod(const char* clazz, const char* name, const char* signature, jvariant arg1, jvariant arg2, jvariant arg3);
00136 JNIEnv* GetEnvironment();
00137
00138
00139 bool ExceptionRaised();
00140 void DescribeException();
00141
00142 protected:
00143 vtkJVMManager();
00144 ~vtkJVMManager();
00145
00146
00147 vtkJVMManagerInternal* Internal;
00148 static vtkStringArray* ClassPaths;
00149 static vtkStringArray* LibraryPaths;
00150 unsigned int MaximumHeapSizeMB;
00151
00152
00153 private:
00154 vtkJVMManager(const vtkJVMManager&);
00155 void operator=(const vtkJVMManager&);
00156 };
00157
00158 #endif
00159