/*
* $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 <stdio.h>
#include <locale.h>
#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;
}
syntax highlighted by Code2HTML, v. 0.9.1