JavaContext.h++

Go to the documentation of this file.
00001 /* ---------------------------------------------------------------------------
00002    commonc++ - A C++ Common Class Library
00003    Copyright (C) 2005-2012  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_hxx
00024 #define __ccxx_JavaContext_hxx
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 
00079   JavaContext(JNIEnv *env);
00080 
00082   ~JavaContext();
00083 
00090   static String encodeType(const String &type);
00091 
00107   static bool parseSignature(const String &signature, String& method,
00108                              String& descriptor, bool &isStatic);
00109 
00118   jclass findClass(const String &name) throw(JavaException);
00119 
00131   jmethodID findMethod(jclass clazz, const String &signature)
00132     throw(JavaException);
00133 
00141   jobject createObject(jclass clazz, jmethodID constructor, ...)
00142     throw(JavaException);
00143 
00152   jobject createObjectVA(jclass clazz, jmethodID constructor, va_list args)
00153     throw(JavaException);
00154 
00162   void callVoidMethod(jobject object, jmethodID method, ...)
00163     throw(JavaException);
00164 
00173   jobject callObjectMethod(jobject object, jmethodID method, ...)
00174     throw(JavaException);
00175 
00184   String callStringMethod(jobject object, jmethodID method, ...)
00185     throw(JavaException);
00186 
00195   WString callWStringMethod(jobject object, jmethodID method, ...)
00196     throw(JavaException);
00197 
00206   bool callBooleanMethod(jobject object, jmethodID method, ...)
00207     throw(JavaException);
00208 
00217   byte_t callByteMethod(jobject object, jmethodID method, ...)
00218     throw(JavaException);
00219 
00228   char16_t callCharMethod(jobject object, jmethodID method, ...)
00229     throw(JavaException);
00230 
00239   int16_t callShortMethod(jobject object, jmethodID method, ...)
00240     throw(JavaException);
00241 
00250   int32_t callIntMethod(jobject object, jmethodID method, ...)
00251     throw(JavaException);
00252 
00261   int64_t callLongMethod(jobject object, jmethodID method, ...)
00262     throw(JavaException);
00263 
00272   float callFloatMethod(jobject object, jmethodID method, ...)
00273     throw(JavaException);
00274 
00283   double callDoubleMethod(jobject object, jmethodID method, ...)
00284     throw(JavaException);
00285 
00294   void callNonvirtualVoidMethod(jobject object, jclass clazz,
00295                                 jmethodID method, ...)
00296     throw(JavaException);
00297 
00307   jobject callNonvirtualObjectMethod(jobject object, jclass clazz,
00308                                      jmethodID method, ...)
00309     throw(JavaException);
00310 
00320   bool callNonvirtualBooleanMethod(jobject object, jclass clazz,
00321                                    jmethodID method, ...)
00322     throw(JavaException);
00323 
00333   byte_t callNonvirtualByteMethod(jobject object, jclass clazz,
00334                                   jmethodID method, ...)
00335     throw(JavaException);
00336 
00346   char16_t callNonvirtualCharMethod(jobject object, jclass clazz,
00347                                     jmethodID method, ...)
00348     throw(JavaException);
00349 
00359   int16_t callNonvirtualShortMethod(jobject object, jclass clazz,
00360                                     jmethodID method, ...)
00361     throw(JavaException);
00362 
00372   int32_t callNonvirtualIntMethod(jobject object, jclass clazz,
00373                                   jmethodID method, ...)
00374     throw(JavaException);
00375 
00385   int64_t callNonvirtualLongMethod(jobject object, jclass clazz,
00386                                    jmethodID method, ...)
00387     throw(JavaException);
00388 
00398   float callNonvirtualFloatMethod(jobject object, jclass clazz,
00399                                   jmethodID method, ...)
00400     throw(JavaException);
00401 
00411   double callNonvirtualDoubleMethod(jobject object, jclass clazz,
00412                                     jmethodID method, ...)
00413     throw(JavaException);
00414 
00423   void callStaticVoidMethod(jclass clazz, jmethodID method, ...)
00424     throw(JavaException);
00425 
00434   jobject callStaticObjectMethod(jclass clazz, jmethodID method, ...)
00435     throw(JavaException);
00436 
00445   String callStaticStringMethod(jclass clazz, jmethodID method, ...)
00446     throw(JavaException);
00447 
00456   WString callStaticWStringMethod(jclass clazz, jmethodID method, ...)
00457     throw(JavaException);
00458 
00467   bool callStaticBooleanMethod(jclass clazz, jmethodID method, ...)
00468     throw(JavaException);
00469 
00478   byte_t callStaticByteMethod(jclass clazz, jmethodID method, ...)
00479     throw(JavaException);
00480 
00489   char16_t callStaticCharMethod(jclass clazz, jmethodID method, ...)
00490     throw(JavaException);
00491 
00500   int16_t callStaticShortMethod(jclass clazz, jmethodID method, ...)
00501     throw(JavaException);
00502 
00511   int32_t callStaticIntMethod(jclass clazz, jmethodID method, ...)
00512     throw(JavaException);
00513 
00522   int64_t callStaticLongMethod(jclass clazz, jmethodID method, ...)
00523     throw(JavaException);
00524 
00533   float callStaticFloatMethod(jclass clazz, jmethodID method, ...)
00534     throw(JavaException);
00535 
00544   double callStaticDoubleMethod(jclass clazz, jmethodID method, ...)
00545     throw(JavaException);
00546 
00554   bool checkException(bool verbose = false);
00555 
00559   void clearException() throw();
00560 
00566   jthrowable getException() throw();
00567 
00574   bool throwException(jclass exception, const String &message);
00575 
00585   jfieldID findField(jclass clazz, const String &signature)
00586     throw(JavaException);
00587 
00595   jobject getObjectField(jobject object, jfieldID field) throw(JavaException);
00596 
00604   bool getBooleanField(jobject object, jfieldID field) throw(JavaException);
00605 
00613   byte_t getByteField(jobject object, jfieldID field) throw(JavaException);
00614 
00622   char16_t getCharField(jobject object, jfieldID field) throw(JavaException);
00623 
00631   int16_t getShortField(jobject object, jfieldID field) throw(JavaException);
00632 
00640   int32_t getIntField(jobject object, jfieldID field) throw(JavaException);
00641 
00649   int64_t getLongField(jobject object, jfieldID field) throw(JavaException);
00650 
00658   float getFloatField(jobject object, jfieldID field) throw(JavaException);
00659 
00667   double getDoubleField(jobject object, jfieldID field) throw(JavaException);
00668 
00676   String getStringField(jobject object, jfieldID field) throw(JavaException);
00677 
00685   WString getWStringField(jobject object, jfieldID field) throw(JavaException);
00686 
00694   jobject getStaticObjectField(jclass clazz, jfieldID field)
00695     throw(JavaException);
00696 
00704   bool getStaticBooleanField(jclass clazz, jfieldID field)
00705     throw(JavaException);
00706 
00714   byte_t getStaticByteField(jclass clazz, jfieldID field) throw(JavaException);
00715 
00723   char16_t getStaticCharField(jclass clazz, jfieldID field)
00724     throw(JavaException);
00725 
00733   int16_t getStaticShortField(jclass clazz, jfieldID field)
00734     throw(JavaException);
00735 
00743   int32_t getStaticIntField(jclass clazz, jfieldID field) throw(JavaException);
00744 
00752   int64_t getStaticLongField(jclass clazz, jfieldID field)
00753     throw(JavaException);
00754 
00762   float getStaticFloatField(jclass clazz, jfieldID field)
00763     throw(JavaException);
00764 
00772   double getStaticDoubleField(jclass clazz, jfieldID field)
00773     throw(JavaException);
00774 
00782   String getStaticStringField(jclass clazz, jfieldID field)
00783     throw(JavaException);
00784 
00792   WString getStaticWStringField(jclass clazz, jfieldID field)
00793     throw(JavaException);
00794 
00802   void setObjectField(jobject object, jfieldID field, jobject value)
00803     throw(JavaException);
00804 
00812   void setBooleanField(jobject object, jfieldID field, bool value)
00813     throw(JavaException);
00814 
00822   void setByteField(jobject object, jfieldID field, byte_t value)
00823     throw(JavaException);
00824 
00832   void setCharField(jobject object, jfieldID field, char16_t value)
00833     throw(JavaException);
00834 
00842   void setShortField(jobject object, jfieldID field, int16_t value)
00843     throw(JavaException);
00844 
00852   void setIntField(jobject object, jfieldID field, int32_t value)
00853     throw(JavaException);
00854 
00862   void setLongField(jobject object, jfieldID field, int64_t value)
00863     throw(JavaException);
00864 
00872   void setFloatField(jobject object, jfieldID field, float value)
00873     throw(JavaException);
00874 
00882   void setDoubleField(jobject object, jfieldID field, double value)
00883     throw(JavaException);
00884 
00892   void setStringField(jobject object, jfieldID field, const String &value)
00893     throw(JavaException);
00894 
00902   void setWStringField(jobject object, jfieldID field, const WString &value)
00903     throw(JavaException);
00904 
00912   void setStaticObjectField(jclass clazz, jfieldID field, jobject value)
00913     throw(JavaException);
00914 
00922   void setStaticBooleanField(jclass clazz, jfieldID field, bool value)
00923     throw(JavaException);
00924 
00932   void setStaticByteField(jclass clazz, jfieldID field, byte_t value)
00933     throw(JavaException);
00934 
00942   void setStaticCharField(jclass clazz, jfieldID field, char16_t value)
00943     throw(JavaException);
00944 
00952   void setStaticShortField(jclass clazz, jfieldID field, int16_t value)
00953     throw(JavaException);
00954 
00962   void setStaticIntField(jclass clazz, jfieldID field, int32_t value)
00963     throw(JavaException);
00964 
00972   void setStaticLongField(jclass clazz, jfieldID field, int64_t value)
00973     throw(JavaException);
00974 
00982   void setStaticFloatField(jclass clazz, jfieldID field, float value)
00983     throw(JavaException);
00984 
00992   void setStaticDoubleField(jclass clazz, jfieldID field, double value)
00993     throw(JavaException);
00994 
01001   jbyteArray createByteArray(uint_t length)
01002     throw(JavaException);
01003 
01011   void setObjectArrayElement(jobjectArray array, uint_t index, jobject value)
01012     throw(JavaException);
01013 
01021   jobject getObjectArrayElement(jobjectArray array, uint_t index)
01022     throw(JavaException);
01023 
01030   uint_t getArrayLength(jarray array) throw(JavaException);
01031 
01040   jobject createDirectByteBuffer(byte_t *buf, size_t size)
01041     throw(JavaException);
01042 
01052   void *getDirectBufferRegion(jobject buf, uint64_t &size);
01053 
01060   jobject createLocalRef(jobject object) throw(JavaException);
01061 
01066   void deleteLocalRef(jobject ref);
01067 
01073   void ensureLocalCapacity(uint_t capacity) throw(JavaException);
01074 
01081   jobject createGlobalRef(jobject object) throw(JavaException);
01082 
01087   void deleteGlobalRef(jobject ref);
01088 
01095   String decodeString(jstring str) throw(JavaException);
01096 
01103   WString decodeWString(jstring str) throw(JavaException);
01104 
01111   jstring encodeString(const String &str) throw(JavaException);
01112 
01119   jstring encodeWString(const WString &str) throw(JavaException);
01120 
01126   uint_t getStringLength(jstring str);
01127 
01141   void *getArrayData(jarray array, uint_t &length, bool *isCopy = NULL)
01142     throw(JavaException);
01143 
01150   void releaseArrayData(jarray array, void *data);
01151 
01159   jbyteArray createByteArray(const byte_t *data, size_t length)
01160     throw(JavaException);
01161 
01171   jarray createObjectArray(jclass type, uint_t length,
01172                            jobject initialValue = NULL)
01173     throw(JavaException);
01174 
01182   bool isSameObject(jobject object1, jobject object2);
01183 
01192   bool isInstanceOf(jobject object, jclass clazz);
01193 
01201   bool isAssignableFrom(jclass clazz1, jclass clazz2);
01202 
01208   jclass getClassForObject(jobject object);
01209 
01216   jclass getSuperclass(jclass clazz);
01217 
01224   void enterMonitor(jobject object) throw(JavaException);
01225 
01231   void exitMonitor(jobject object) throw(JavaException);
01232 
01240   void registerNativeMethods(jclass clazz, const JavaNativeMethod methods[])
01241     throw(JavaException);
01242 
01247   void unregisterNativeMethods(jclass clazz);
01248 
01254   void pushLocalFrame(uint_t capacity = 8) throw(JavaException);
01255 
01259   void popLocalFrame();
01260 
01262   inline bool isVerbose() const throw()
01263   { return(_verbose); }
01264 
01265   private:
01266 
01267   void attach(JavaVirtualMachine *jvm, JNIEnv* env, bool verbose) throw();
01268   void detach() throw();
01269   inline bool isAttached() const throw()
01270   { return(_env != NULL); }
01271 
01272   inline JNIEnv *getEnv() const throw()
01273   { return(_env); }
01274 
01275   JavaVirtualMachine *_jvm;
01276   JNIEnv *_env;
01277   bool _verbose;
01278 };
01279 
01280 }; // namespace ccxx
01281 
01282 #endif // __ccxx_JavaContext_hxx
01283 
01284 /* end of header file */
Generated on Sat Nov 26 16:49:07 2011 for libcommonc++ by  doxygen 1.6.3