JavaContext.h++

Go to the documentation of this file.
00001 /* ---------------------------------------------------------------------------
00002    commonc++ - A C++ Common Class Library
00003    Copyright (C) 2005-2009  Mark A Lindner
00004 
00005    This file is part of commonc++.
00006 
00007    This library is free software; you can redistribute it and/or
00008    modify it under the terms of the GNU Library General Public
00009    License as published by the Free Software Foundation; either
00010    version 2 of the License, or (at your option) any later version.
00011 
00012    This library is distributed in the hope that it will be useful,
00013    but WITHOUT ANY WARRANTY; without even the implied warranty of
00014    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00015    Library General Public License for more details.
00016 
00017    You should have received a copy of the GNU Library General Public
00018    License along with this library; if not, write to the Free
00019    Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
00020    ---------------------------------------------------------------------------
00021 */
00022 
00023 #ifndef __ccxx_JavaContext_h
00024 #define __ccxx_JavaContext_h
00025 
00026 #include <commonc++/Common.h++>
00027 #include <commonc++/Exception.h++>
00028 #include <commonc++/String.h++>
00029 #include <commonc++/JavaException.h++>
00030 
00031 #include <jni.h>
00032 #include <cstdarg>
00033 
00034 namespace ccxx {
00035 
00036 class JavaVirtualMachine; // fwd decl
00037 
00043 struct JavaNativeMethod
00044 {
00046   String signature;
00047 
00049   void *function;
00050 };
00051 
00069 class COMMONCPPJVM_API JavaContext
00070 {
00071   friend class JavaVirtualMachine;
00072 
00073   public:
00074 
00080   JavaContext(JNIEnv *env);
00081 
00084   ~JavaContext();
00085 
00093   static String encodeType(const String &type);
00094 
00111   static bool parseSignature(const String &signature, String& method,
00112                              String& descriptor, bool &isStatic);
00113 
00123   jclass findClass(const String &name) throw(JavaException);
00124 
00137   jmethodID findMethod(jclass clazz, const String &signature)
00138     throw(JavaException);
00139 
00148   jobject createObject(jclass clazz, jmethodID constructor, ...)
00149     throw(JavaException);
00150 
00160   jobject createObjectVA(jclass clazz, jmethodID constructor, va_list args)
00161     throw(JavaException);
00162 
00171   void callVoidMethod(jobject object, jmethodID method, ...)
00172     throw(JavaException);
00173 
00183   jobject callObjectMethod(jobject object, jmethodID method, ...)
00184     throw(JavaException);
00185 
00195   String callStringMethod(jobject object, jmethodID method, ...)
00196     throw(JavaException);
00197 
00207   WString callWStringMethod(jobject object, jmethodID method, ...)
00208     throw(JavaException);
00209 
00219   jboolean callBooleanMethod(jobject object, jmethodID method, ...)
00220     throw(JavaException);
00221 
00231   jbyte callByteMethod(jobject object, jmethodID method, ...)
00232     throw(JavaException);
00233 
00243   jchar callCharMethod(jobject object, jmethodID method, ...)
00244     throw(JavaException);
00245 
00255   jshort callShortMethod(jobject object, jmethodID method, ...)
00256     throw(JavaException);
00257 
00267   jint callIntMethod(jobject object, jmethodID method, ...)
00268     throw(JavaException);
00269 
00279   jlong callLongMethod(jobject object, jmethodID method, ...)
00280     throw(JavaException);
00281 
00291   jfloat callFloatMethod(jobject object, jmethodID method, ...)
00292     throw(JavaException);
00293 
00303   jdouble callDoubleMethod(jobject object, jmethodID method, ...)
00304     throw(JavaException);
00305 
00315   void callNonvirtualVoidMethod(jobject object, jclass clazz,
00316                                 jmethodID method, ...)
00317     throw(JavaException);
00318 
00329   jobject callNonvirtualObjectMethod(jobject object, jclass clazz,
00330                                      jmethodID method, ...)
00331     throw(JavaException);
00332 
00343   jboolean callNonvirtualBooleanMethod(jobject object, jclass clazz,
00344                                        jmethodID method, ...)
00345     throw(JavaException);
00346 
00357   jbyte callNonvirtualByteMethod(jobject object, jclass clazz,
00358                                  jmethodID method, ...)
00359     throw(JavaException);
00360 
00371   jchar callNonvirtualCharMethod(jobject object, jclass clazz,
00372                                  jmethodID method, ...)
00373     throw(JavaException);
00374 
00385   jshort callNonvirtualShortMethod(jobject object, jclass clazz,
00386                                    jmethodID method, ...)
00387     throw(JavaException);
00388 
00399   jint callNonvirtualIntMethod(jobject object, jclass clazz,
00400                                jmethodID method, ...)
00401     throw(JavaException);
00402 
00413   jlong callNonvirtualLongMethod(jobject object, jclass clazz,
00414                                  jmethodID method, ...)
00415     throw(JavaException);
00416 
00427   jfloat callNonvirtualFloatMethod(jobject object, jclass clazz,
00428                                    jmethodID method, ...)
00429     throw(JavaException);
00430 
00441   jdouble callNonvirtualDoubleMethod(jobject object, jclass clazz,
00442                                      jmethodID method, ...)
00443     throw(JavaException);
00444 
00454   void callStaticVoidMethod(jclass clazz, jmethodID method, ...)
00455     throw(JavaException);
00456 
00466   jobject callStaticObjectMethod(jclass clazz, jmethodID method, ...)
00467     throw(JavaException);
00468 
00478   String callStaticStringMethod(jclass clazz, jmethodID method, ...)
00479     throw(JavaException);
00480 
00490   WString callStaticWStringMethod(jclass clazz, jmethodID method, ...)
00491     throw(JavaException);
00492 
00502   jboolean callStaticBooleanMethod(jclass clazz, jmethodID method, ...)
00503     throw(JavaException);
00504 
00514   jbyte callStaticByteMethod(jclass clazz, jmethodID method, ...)
00515     throw(JavaException);
00516 
00526   jchar callStaticCharMethod(jclass clazz, jmethodID method, ...)
00527     throw(JavaException);
00528 
00538   jshort callStaticShortMethod(jclass clazz, jmethodID method, ...)
00539     throw(JavaException);
00540 
00550   jint callStaticIntMethod(jclass clazz, jmethodID method, ...)
00551     throw(JavaException);
00552 
00562   jlong callStaticLongMethod(jclass clazz, jmethodID method, ...)
00563     throw(JavaException);
00564 
00574   jfloat callStaticFloatMethod(jclass clazz, jmethodID method, ...)
00575     throw(JavaException);
00576 
00586   jdouble callStaticDoubleMethod(jclass clazz, jmethodID method, ...)
00587     throw(JavaException);
00588 
00597   bool checkException(bool verbose = false);
00598 
00603   void clearException() throw();
00604 
00611   jthrowable getException() throw();
00612 
00620   bool throwException(jclass exception, const String &message);
00621 
00632   jfieldID findField(jclass clazz, const String &signature)
00633     throw(JavaException);
00634 
00643   jobject getObjectField(jobject object, jfieldID field) throw(JavaException);
00644 
00653   jboolean getBooleanField(jobject object, jfieldID field)
00654     throw(JavaException);
00655 
00664   jbyte getByteField(jobject object, jfieldID field) throw(JavaException);
00665 
00674   jchar getCharField(jobject object, jfieldID field) throw(JavaException);
00675 
00684   jshort getShortField(jobject object, jfieldID field) throw(JavaException);
00685 
00694   jint getIntField(jobject object, jfieldID field) throw(JavaException);
00695 
00704   jlong getLongField(jobject object, jfieldID field) throw(JavaException);
00705 
00714   jfloat getFloatField(jobject object, jfieldID field) throw(JavaException);
00715 
00724   jdouble getDoubleField(jobject object, jfieldID field) throw(JavaException);
00725 
00734   String getStringField(jobject object, jfieldID field) throw(JavaException);
00735 
00744   WString getWStringField(jobject object, jfieldID field) throw(JavaException);
00745 
00754   jobject getStaticObjectField(jclass clazz, jfieldID field)
00755     throw(JavaException);
00756 
00765   jboolean getStaticBooleanField(jclass clazz, jfieldID field)
00766     throw(JavaException);
00767 
00776   jbyte getStaticByteField(jclass clazz, jfieldID field) throw(JavaException);
00777 
00786   jchar getStaticCharField(jclass clazz, jfieldID field) throw(JavaException);
00787 
00796   jshort getStaticShortField(jclass clazz, jfieldID field)
00797     throw(JavaException);
00798 
00807   jint getStaticIntField(jclass clazz, jfieldID field) throw(JavaException);
00808 
00817   jlong getStaticLongField(jclass clazz, jfieldID field) throw(JavaException);
00818 
00827   jfloat getStaticFloatField(jclass clazz, jfieldID field)
00828     throw(JavaException);
00829 
00838   jdouble getStaticDoubleField(jclass clazz, jfieldID field)
00839     throw(JavaException);
00840 
00849   String getStaticStringField(jclass clazz, jfieldID field)
00850     throw(JavaException);
00851 
00860   WString getStaticWStringField(jclass clazz, jfieldID field)
00861     throw(JavaException);
00862 
00871   void setObjectField(jobject object, jfieldID field, jobject value)
00872     throw(JavaException);
00873 
00882   void setBooleanField(jobject object, jfieldID field, jboolean value)
00883     throw(JavaException);
00884 
00893   void setByteField(jobject object, jfieldID field, jbyte value)
00894     throw(JavaException);
00895 
00904   void setCharField(jobject object, jfieldID field, jchar value)
00905     throw(JavaException);
00906 
00915   void setShortField(jobject object, jfieldID field, jshort value)
00916     throw(JavaException);
00917 
00926   void setIntField(jobject object, jfieldID field, jint value)
00927     throw(JavaException);
00928 
00937   void setLongField(jobject object, jfieldID field, jlong value)
00938     throw(JavaException);
00939 
00948   void setFloatField(jobject object, jfieldID field, jfloat value)
00949     throw(JavaException);
00950 
00959   void setDoubleField(jobject object, jfieldID field, jdouble value)
00960     throw(JavaException);
00961 
00970   void setStringField(jobject object, jfieldID field, const String &value)
00971     throw(JavaException);
00972 
00981   void setWStringField(jobject object, jfieldID field, const WString &value)
00982     throw(JavaException);
00983 
00992   void setStaticObjectField(jclass clazz, jfieldID field, jobject value)
00993     throw(JavaException);
00994 
01003   void setStaticBooleanField(jclass clazz, jfieldID field, jboolean value)
01004     throw(JavaException);
01005 
01014   void setStaticByteField(jclass clazz, jfieldID field, jbyte value)
01015     throw(JavaException);
01016 
01025   void setStaticCharField(jclass clazz, jfieldID field, jchar value)
01026     throw(JavaException);
01027 
01036   void setStaticShortField(jclass clazz, jfieldID field, jshort value)
01037     throw(JavaException);
01038 
01047   void setStaticIntField(jclass clazz, jfieldID field, jint value)
01048     throw(JavaException);
01049 
01058   void setStaticLongField(jclass clazz, jfieldID field, jlong value)
01059     throw(JavaException);
01060 
01069   void setStaticFloatField(jclass clazz, jfieldID field, jfloat value)
01070     throw(JavaException);
01071 
01080   void setStaticDoubleField(jclass clazz, jfieldID field, jdouble value)
01081     throw(JavaException);
01082 
01090   jbyteArray createByteArray(uint_t length)
01091     throw(JavaException);
01092 
01101   void setObjectArrayElement(jobjectArray array, uint_t index, jobject value)
01102     throw(JavaException);
01103 
01112   jobject getObjectArrayElement(jobjectArray array, uint_t index)
01113     throw(JavaException);
01114 
01122   uint_t getArrayLength(jarray array) throw(JavaException);
01123 
01133   jobject createDirectByteBuffer(byte_t *buf, size_t size)
01134     throw(JavaException);
01135 
01146   void *getDirectBufferRegion(jobject buf, uint64_t &size);
01147 
01155   jobject createLocalRef(jobject object) throw(JavaException);
01156 
01162   void deleteLocalRef(jobject ref);
01163 
01170   void ensureLocalCapacity(size_t capacity) throw(JavaException);
01171 
01179   jobject createGlobalRef(jobject object) throw(JavaException);
01180 
01186   void deleteGlobalRef(jobject ref);
01187 
01195   String decodeString(jstring str) throw(JavaException);
01196 
01204   WString decodeWString(jstring str) throw(JavaException);
01205 
01213   jstring encodeString(const String &str) throw(JavaException);
01214 
01222   jstring encodeWString(const WString &str) throw(JavaException);
01223 
01230   size_t getStringLength(jstring str);
01231 
01246   void *getArrayData(jarray array, size_t &length, bool *isCopy = NULL)
01247     throw(JavaException);
01248 
01256   void releaseArrayData(jarray array, void *data);
01257 
01266   jbyteArray createByteArray(const byte_t *data, size_t length)
01267     throw(JavaException);
01268 
01279   jarray createObjectArray(jclass type, size_t length,
01280                            jobject initialValue = NULL)
01281     throw(JavaException);
01282 
01291   bool isSameObject(jobject object1, jobject object2);
01292 
01302   bool isInstanceOf(jobject object, jclass clazz);
01303 
01312   bool isAssignableFrom(jclass clazz1, jclass clazz2);
01313 
01320   jclass getClassForObject(jobject object);
01321 
01329   jclass getSuperclass(jclass clazz);
01330 
01338   void enterMonitor(jobject object) throw(JavaException);
01339 
01346   void exitMonitor(jobject object) throw(JavaException);
01347 
01356   void registerNativeMethods(jclass clazz, const JavaNativeMethod methods[])
01357     throw(JavaException);
01358 
01364   void unregisterNativeMethods(jclass clazz);
01365 
01372   void pushLocalFrame(uint_t capacity = 8) throw(JavaException);
01373 
01378   void popLocalFrame();
01379 
01382   inline bool isVerbose() const throw()
01383   { return(_verbose); }
01384 
01385   private:
01386 
01387   void setVerbose(bool verbose) throw()
01388   { _verbose = verbose; }
01389 
01390   void setJVM(JavaVirtualMachine *jvm) throw()
01391   { _jvm = jvm; }
01392 
01393   JNIEnv *_env;
01394   JavaVirtualMachine *_jvm;
01395   bool _verbose;
01396 };
01397 
01398 }; // namespace ccxx
01399 
01400 #endif // __ccxx_JavaContext_hxx
01401 
01402 /* end of header file */
Generated on Fri Sep 3 23:47:34 2010 for libcommonc++ by  doxygen 1.6.3