/* * $Id: xdtp_java.cpp,v 1.2 2005/10/06 11:57:44 ozawa Exp $ * * Copyright 2005- ONGS Inc. * * author: Masanori OZAWA (ozawa@ongs.co.jp) * version: $Revision: 1.2 $ * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY ONGS INC ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL ONGS INC OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * The views and conclusions contained in the software and documentation are * those of the authors and should not be interpreted as representing official * policies, either expressed or implied, of the ONGS Inc. * */ #include #include #include "xdtptypes.h" #include "XDTPTransform.h" #include "xdtp_java.h" using namespace XDTP; static bool glib_init = false; static jfieldID xdtp_native_object_id = NULL; static jclass nullpointerexception_class = NULL; static jclass string_class = NULL; static Glib::ustring javastr2glibstr(JNIEnv *pEnv, jstring string) { Glib::ustring result; const char* utf = pEnv->GetStringUTFChars(string, NULL); if (utf) { result = utf; pEnv->ReleaseStringUTFChars(string, utf); } return result; } static jstring glibstr2javastr(JNIEnv *pEnv, const Glib::ustring& string) { return pEnv->NewStringUTF(string.c_str()); } static void throwException(JNIEnv *pEnv) { if (!nullpointerexception_class) { nullpointerexception_class = pEnv->FindClass("java/lang/NullPointerException"); if (!nullpointerexception_class) return; } pEnv->ThrowNew(nullpointerexception_class, "XDTPTransform: native object is null."); } static XDTPTransform* getXDTPTransform(JNIEnv *pEnv, jobject obj) { if (!xdtp_native_object_id) { jclass clazz = pEnv->GetObjectClass(obj); xdtp_native_object_id = pEnv->GetFieldID(clazz , "native_object", "I"); if (!xdtp_native_object_id) return NULL; } XDTPTransform* result = (XDTPTransform*)pEnv->GetIntField(obj, xdtp_native_object_id); if (!result) throwException(pEnv); return result; } static jobjectArray createStringArray(JNIEnv *pEnv, int length) { if (!string_class) { string_class = pEnv->FindClass("java/lang/String"); if (!string_class) return NULL; } return pEnv->NewObjectArray(length, string_class, pEnv->NewStringUTF("")); } static jobjectArray stdstringlist2javastringarray(JNIEnv *pEnv, const StringList& list) { jobjectArray array = createStringArray(pEnv, list.size()); if (!array) { return NULL; } int count; StringList::const_iterator iter = list.begin(); StringList::const_iterator end = list.end(); for (count = 0; iter != end; count++, iter++) { pEnv->SetObjectArrayElement(array, count, glibstr2javastr(pEnv, *iter)); } return array; } /* * Class: jp_co_ongs_xdtp_transform_XDTPTransform * Method: initialize * Signature: ()Z */ JNIEXPORT jboolean JNICALL Java_jp_co_ongs_xdtp_transform_XDTPTransform_initialize (JNIEnv *pEnv, jobject obj) { XDTPTransform* pXDTP = getXDTPTransform(pEnv, obj); if (!pXDTP) return false; return (pXDTP->initialize() ? JNI_TRUE : JNI_FALSE); } /* * Class: jp_co_ongs_xdtp_transform_XDTPTransform * Method: uninitialize * Signature: ()V */ JNIEXPORT void JNICALL Java_jp_co_ongs_xdtp_transform_XDTPTransform_uninitialize (JNIEnv *pEnv, jobject obj) { XDTPTransform* pXDTP = getXDTPTransform(pEnv, obj); if (!pXDTP) return; pXDTP->uninitialize(); } /* * Class: jp_co_ongs_xdtp_transform_XDTPTransform * Method: transform * Signature: (Ljava/lang/String;Ljava/lang/String;)Z */ JNIEXPORT jboolean JNICALL Java_jp_co_ongs_xdtp_transform_XDTPTransform_transform (JNIEnv *pEnv, jobject obj, jstring input, jstring output) { XDTPTransform* pXDTP = getXDTPTransform(pEnv, obj); if (!pXDTP) return false; Glib::ustring in = javastr2glibstr(pEnv, input); Glib::ustring out = javastr2glibstr(pEnv, output); bool result = false; try { result = pXDTP->transform(in, out); } catch (...) { result = false; } return (result ? JNI_TRUE : JNI_FALSE); } /* * Class: jp_co_ongs_xdtp_transform_XDTPTransform * Method: showErrorMsg * Signature: ()V */ JNIEXPORT void JNICALL Java_jp_co_ongs_xdtp_transform_XDTPTransform_showErrorMsg (JNIEnv *pEnv, jobject obj) { XDTPTransform* pXDTP = getXDTPTransform(pEnv, obj); if (!pXDTP) return; pXDTP->showErrorMsg(stderr); } /* * Class: jp_co_ongs_xdtp_transform_XDTPTransform * Method: skipXMLCheck * Signature: (Z)V */ JNIEXPORT void JNICALL Java_jp_co_ongs_xdtp_transform_XDTPTransform_skipXMLCheck (JNIEnv *pEnv, jobject obj, jboolean check) { XDTPTransform* pXDTP = getXDTPTransform(pEnv, obj); if (!pXDTP) return; pXDTP->skipXMLCheck(check == JNI_TRUE ? true : false); } /* * Class: jp_co_ongs_xdtp_transform_XDTPTransform * Method: isXMLCheck * Signature: ()Z */ JNIEXPORT jboolean JNICALL Java_jp_co_ongs_xdtp_transform_XDTPTransform_isXMLCheck (JNIEnv *pEnv, jobject obj) { XDTPTransform* pXDTP = getXDTPTransform(pEnv, obj); if (!pXDTP) return false; return (pXDTP->isXMLCheck() ? JNI_TRUE : JNI_FALSE); } /* * Class: jp_co_ongs_xdtp_transform_XDTPTransform * Method: addXSLFile * Signature: (Ljava/lang/String;Z)V */ JNIEXPORT void JNICALL Java_jp_co_ongs_xdtp_transform_XDTPTransform_addXSLFile (JNIEnv *pEnv, jobject obj, jstring path, jboolean useOutput) { XDTPTransform* pXDTP = getXDTPTransform(pEnv, obj); if (!pXDTP) return; Glib::ustring xsl = javastr2glibstr(pEnv, path); pXDTP->addXSLFile(xsl, (useOutput == JNI_TRUE ? true : false)); } /* * Class: jp_co_ongs_xdtp_transform_XDTPTransform * Method: clearXSLFile * Signature: ()V */ JNIEXPORT void JNICALL Java_jp_co_ongs_xdtp_transform_XDTPTransform_clearXSLFile (JNIEnv *pEnv, jobject obj) { XDTPTransform* pXDTP = getXDTPTransform(pEnv, obj); if (!pXDTP) return; pXDTP->clearXSLFile(); } /* * Class: jp_co_ongs_xdtp_transform_XDTPTransform * Method: getXSLFileList * Signature: ()[Ljava/lang/String; */ JNIEXPORT jobjectArray JNICALL Java_jp_co_ongs_xdtp_transform_XDTPTransform_getXSLFileList (JNIEnv *pEnv, jobject obj) { XDTPTransform* pXDTP = getXDTPTransform(pEnv, obj); if (!pXDTP) return NULL; return stdstringlist2javastringarray(pEnv, pXDTP->getXSLFileList()); } /* * Class: jp_co_ongs_xdtp_transform_XDTPTransform * Method: addXDTPModule * Signature: (Ljava/lang/String;)V */ JNIEXPORT void JNICALL Java_jp_co_ongs_xdtp_transform_XDTPTransform_addXDTPModule (JNIEnv *pEnv, jobject obj, jstring path) { XDTPTransform* pXDTP = getXDTPTransform(pEnv, obj); if (!pXDTP) return; Glib::ustring module = javastr2glibstr(pEnv, path); pXDTP->addXDTPModule(module); } /* * Class: jp_co_ongs_xdtp_transform_XDTPTransform * Method: clearXDTPModule * Signature: ()V */ JNIEXPORT void JNICALL Java_jp_co_ongs_xdtp_transform_XDTPTransform_clearXDTPModule (JNIEnv *pEnv, jobject obj) { XDTPTransform* pXDTP = getXDTPTransform(pEnv, obj); if (!pXDTP) return; pXDTP->clearXDTPModule(); } /* * Class: jp_co_ongs_xdtp_transform_XDTPTransform * Method: getXDTPModuleList * Signature: ()[Ljava/lang/String; */ JNIEXPORT jobjectArray JNICALL Java_jp_co_ongs_xdtp_transform_XDTPTransform_getXDTPModuleList (JNIEnv *pEnv, jobject obj) { XDTPTransform* pXDTP = getXDTPTransform(pEnv, obj); if (!pXDTP) return NULL; return stdstringlist2javastringarray(pEnv, pXDTP->getXDTPModuleList()); } /* * Class: jp_co_ongs_xdtp_transform_XDTPTransform * Method: addOption * Signature: (Ljava/lang/String;)V */ JNIEXPORT void JNICALL Java_jp_co_ongs_xdtp_transform_XDTPTransform_addOption (JNIEnv *pEnv, jobject obj, jstring option) { XDTPTransform* pXDTP = getXDTPTransform(pEnv, obj); if (!pXDTP) return; Glib::ustring opt = javastr2glibstr(pEnv, option); pXDTP->addOption(opt); } /* * Class: jp_co_ongs_xdtp_transform_XDTPTransform * Method: clearOption * Signature: ()V */ JNIEXPORT void JNICALL Java_jp_co_ongs_xdtp_transform_XDTPTransform_clearOption (JNIEnv *pEnv, jobject obj) { XDTPTransform* pXDTP = getXDTPTransform(pEnv, obj); if (!pXDTP) return; pXDTP->clearOption(); } /* * Class: jp_co_ongs_xdtp_transform_XDTPTransform * Method: getOptionList * Signature: ()[Ljava/lang/String; */ JNIEXPORT jobjectArray JNICALL Java_jp_co_ongs_xdtp_transform_XDTPTransform_getOptionList (JNIEnv *pEnv, jobject obj) { XDTPTransform* pXDTP = getXDTPTransform(pEnv, obj); if (!pXDTP) return NULL; return stdstringlist2javastringarray(pEnv, pXDTP->getOptionList()); } /* * Class: jp_co_ongs_xdtp_transform_XDTPTransform * Method: setOutputType * Signature: (Ljava/lang/String;)V */ JNIEXPORT void JNICALL Java_jp_co_ongs_xdtp_transform_XDTPTransform_setOutputType (JNIEnv *pEnv, jobject obj, jstring type) { XDTPTransform* pXDTP = getXDTPTransform(pEnv, obj); if (!pXDTP) return; Glib::ustring outtype = javastr2glibstr(pEnv, type); pXDTP->setOutputType(outtype); } /* * Class: jp_co_ongs_xdtp_transform_XDTPTransform * Method: getOutputType * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_jp_co_ongs_xdtp_transform_XDTPTransform_getOutputType (JNIEnv *pEnv, jobject obj) { XDTPTransform* pXDTP = getXDTPTransform(pEnv, obj); if (!pXDTP) return NULL; return glibstr2javastr(pEnv, pXDTP->getOutputType()); } /* * Class: jp_co_ongs_xdtp_transform_XDTPTransform * Method: setVerboseMode * Signature: (I)V */ JNIEXPORT void JNICALL Java_jp_co_ongs_xdtp_transform_XDTPTransform_setVerboseMode (JNIEnv *pEnv, jobject obj, jint verbose) { XDTPTransform* pXDTP = getXDTPTransform(pEnv, obj); if (!pXDTP) return; pXDTP->setVerboseMode(verbose); } /* * Class: jp_co_ongs_xdtp_transform_XDTPTransform * Method: getVerboseMode * Signature: ()I */ JNIEXPORT jint JNICALL Java_jp_co_ongs_xdtp_transform_XDTPTransform_getVerboseMode (JNIEnv *pEnv, jobject obj) { XDTPTransform* pXDTP = getXDTPTransform(pEnv, obj); if (!pXDTP) return 0; return (pXDTP->getVerboseMode()); } /* * Class: jp_co_ongs_xdtp_transform_XDTPTransform * Method: setInputEncoding * Signature: (Ljava/lang/String;)V */ JNIEXPORT void JNICALL Java_jp_co_ongs_xdtp_transform_XDTPTransform_setInputEncoding (JNIEnv *pEnv, jobject obj, jstring inputEncoding) { XDTPTransform* pXDTP = getXDTPTransform(pEnv, obj); if (!pXDTP) return; Glib::ustring encoding = javastr2glibstr(pEnv, inputEncoding); pXDTP->setInputEncoding(encoding); } /* * Class: jp_co_ongs_xdtp_transform_XDTPTransform * Method: getInputEncoding * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_jp_co_ongs_xdtp_transform_XDTPTransform_getInputEncoding (JNIEnv *pEnv, jobject obj) { XDTPTransform* pXDTP = getXDTPTransform(pEnv, obj); if (!pXDTP) return NULL; return glibstr2javastr(pEnv, pXDTP->getInputEncoding()); } /* * Class: jp_co_ongs_xdtp_transform_XDTPTransform * Method: setOutputEncoding * Signature: (Ljava/lang/String;)V */ JNIEXPORT void JNICALL Java_jp_co_ongs_xdtp_transform_XDTPTransform_setOutputEncoding (JNIEnv *pEnv, jobject obj, jstring outputEncoding) { XDTPTransform* pXDTP = getXDTPTransform(pEnv, obj); if (!pXDTP) return; Glib::ustring encoding = javastr2glibstr(pEnv, outputEncoding); pXDTP->setOutputEncoding(encoding); } /* * Class: jp_co_ongs_xdtp_transform_XDTPTransform * Method: getOutputEncoding * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_jp_co_ongs_xdtp_transform_XDTPTransform_getOutputEncoding (JNIEnv *pEnv, jobject obj) { XDTPTransform* pXDTP = getXDTPTransform(pEnv, obj); if (!pXDTP) return NULL; return glibstr2javastr(pEnv, pXDTP->getOutputEncoding()); } /* * Class: jp_co_ongs_xdtp_transform_XDTPTransform * Method: createNativeObject * Signature: ()I */ JNIEXPORT jint JNICALL Java_jp_co_ongs_xdtp_transform_XDTPTransform_createNativeObject (JNIEnv *pEnv, jclass clazz) { if (!glib_init) { Glib::init(); glib_init = true; } return (jint)(new XDTPTransform); } /* * Class: jp_co_ongs_xdtp_transform_XDTPTransform * Method: destroyNativeObject * Signature: (I)V */ JNIEXPORT void JNICALL Java_jp_co_ongs_xdtp_transform_XDTPTransform_destroyNativeObject (JNIEnv *pEnv, jclass clazz, jint obj) { XDTPTransform *pObj = (XDTPTransform*)obj; if (obj) delete pObj; }