VTK
dox/Graphics/vtkJVMManager.h
Go to the documentation of this file.
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