VTK
|
00001 /*========================================================================= 00002 00003 Program: Visualization Toolkit 00004 Module: vtkJVMManager.h 00005 00006 Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen 00007 All rights reserved. 00008 See Copyright.txt or http://www.kitware.com/Copyright.htm for details. 00009 00010 This software is distributed WITHOUT ANY WARRANTY; without even 00011 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 00012 PURPOSE. See the above copyright notice for more information. 00013 00014 =========================================================================*/ 00023 #ifndef __vtkJVMManager_h 00024 #define __vtkJVMManager_h 00025 00026 #include "vtkObject.h" 00027 00028 #include <jni.h> // For JNI types 00029 00030 class vtkJVMManagerInternal; 00031 class vtkStringArray; 00032 00033 //BTX 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 //ETX 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 //BTX 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 //ETX 00138 00139 bool ExceptionRaised(); 00140 void DescribeException(); 00141 00142 protected: 00143 vtkJVMManager(); 00144 ~vtkJVMManager(); 00145 00146 //BTX 00147 vtkJVMManagerInternal* Internal; 00148 static vtkStringArray* ClassPaths; 00149 static vtkStringArray* LibraryPaths; 00150 unsigned int MaximumHeapSizeMB; 00151 //ETX 00152 00153 private: 00154 vtkJVMManager(const vtkJVMManager&); // Not implemented. 00155 void operator=(const vtkJVMManager&); // Not implemented. 00156 }; 00157 00158 #endif 00159