2005/5/9

     
 

acdk_java_AcdkObject.cpp

artefaktur
// -*- mode:C++; tab-width:2; c-basic-offset:2; indent-tabs-mode:nil -*- 
//
// Copyright (C) 2000-2005 by Roger Rene Kommer / artefaktur, Kassel, Germany.
// 
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public License (LGPL).
// 
// 
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the 
// License ACDK-FreeLicense document enclosed in the distribution
// for more for more details.
// This file is part of the Artefaktur Component Development Kit:
//                         ACDK
// 
// Please refer to
// - http://www.acdk.de
// - http://www.artefaktur.com
// - http://acdk.sourceforge.net
// for more information.
// 
// $Header: /cvsroot/acdk/acdk/acdk_java/src/acdk/java/acdk_java_AcdkObject.cpp,v 1.12 2005/04/20 08:56:10 kommer Exp $
#include <acdk.h>
#include <acdk/lang/System.h>
#include <acdk/lang/dmi/AcdkStdWeakTypeDmiClient.h>
#include "jniext.h"
#include "JavaObject.h"

#include "acdk_java_AcdkObject.h"
#include "acdk2java.h"

using namespace ::acdk::java;

#ifdef __cplusplus
extern "C" {
#endif
/FONT>
extern "C" JNIEXPORT 


inline
void initAcdk(JNIEnv* env, jclass cls)
{
  static bool initialized = false;
  if (initialized == true)
    return;

  initialized = true;
  System::getSystem();
}

//::acdk::lang::dmi::AcdkStdWeakTypeDmiClient jTypeConverter(true, false);
JNIEXPORT jint JNICALL Java_acdk_java_AcdkObject_newAcdkObject
  (JNIEnv* env, jclass cls, jstring clsname, jobjectArray args)
{
  try {
    initAcdk(env, cls);

    JString classname(env, clsname);
    JObjectArray arguments(env, args);
    ScriptVarArray sargs(arguments.size());
    java2acdk(env, arguments, sargs);
    acdk::lang::Object obj = (acdk::lang::Object)Object::New(classname.toString(), sargs);
    if (obj != Nil)
      obj->addRef();
    return (int)obj.impl();
  } catch (RThrowable ex) {
    mapException(env, ex);
    return 0;
  }
}
/*
jobject JNICALL Java_acdk_java_AcdkObject_New
  (JNIEnv *env, jclass cls, jstring clsname, jobjectArray args)
{
  try {
    initAcdk(env, cls);

    JString classname(env, clsname);
    JObjectArray arguments(env, args);
    ScriptVarArray sargs(arguments.size());
    java2acdk(env, arguments, sargs);
    acdk::lang::Object obj = Object::New(classname.toString(), sargs);
    return createNewAcdkObject(env, cls, obj);

  } catch (RThrowable ex) {
    mapException(env, ex);
    return 0;
  }
  return 0;
}
*/

/*
 * Class:     acdk_java_AcdkObject
 * Method:    peek
 * Signature: (Ljava/lang/String;)Ljava/lang/acdk::lang::Object;
 */
JNIEXPORT jobject JNICALL Java_acdk_java_AcdkObject_peek
  (JNIEnv* env, jobject jobj, jstring mname)
{
  try {
    JString membername(env, mname);
    acdk::lang::Object* obj = getObjectHandle(env, jobj);
    ScriptVar erg = obj->peek(membername.toString());
    return acdk2jobject(env, erg);
  } catch (RThrowable ex) {
    mapException(env, ex);
    return 0;
  }
}

/*
 * Class:     acdk_java_AcdkObject
 * Method:    poke
 * Signature: (Ljava/lang/String;Ljava/lang/acdk::lang::Object;)V
 */
JNIEXPORT void JNICALL Java_acdk_java_AcdkObject_poke
  (JNIEnv* env, jobject jobj, jstring mname, jobject v)
{
  try {
    //initAcdk();
    JString membername(env, mname);
    acdk::lang::Object* obj = getObjectHandle(env, jobj);
    ScriptVar sv;
    java2acdk(env, v, sv);
    obj->poke(membername.toString(), sv);
  } catch (RThrowable ex) {
    mapException(env, ex);
  }
}

/*
 * Class:     acdk_java_AcdkObject
 * Method:    invoke
 * Signature: (Ljava/lang/String;[Ljava/lang/acdk::lang::Object;)Ljava/lang/acdk::lang::Object;
 */
JNIEXPORT jobject JNICALL Java_acdk_java_AcdkObject_invoke
  (JNIEnv* env, jobject jobj, jstring jmethodn, jobjectArray jargs)
{
  try {
    //initAcdk();
    JObjectArray arguments(env, jargs);
    ScriptVarArray sargs(arguments.size());
    java2acdk(env, arguments, sargs);
    acdk::lang::Object* obj = getObjectHandle(env, jobj);
    JString methodname(env, jmethodn);
    if (obj == 0)
    {
      // ### ex
    }
    
    ScriptVar sv = obj->invokeMethod(methodname.toString(), sargs, JavaObject::gJavaDmiClient, Nil);
    return acdk2jobject(env, sv);
  } catch (RThrowable ex) {
    mapException(env, ex);
    return 0;
  }
}

/*
 * Class:     acdk_java_AcdkObject
 * Method:    peek_static
 * Signature: (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/acdk::lang::Object;
 */
JNIEXPORT jobject JNICALL Java_acdk_java_AcdkObject_peek_1static
  (JNIEnv *env, jclass jcls, jstring clsname, jstring mname)
{
  try {
    //initAcdk();
    JString classname(env, clsname);
    JString membername(env, mname);
    ScriptVar sv = Object::peek_static(classname.toString(), membername.toString());
    return acdk2jobject(env, sv);
  } catch (RThrowable ex) {
    mapException(env, ex);
    return 0;
  }
}

/*
 * Class:     acdk_java_AcdkObject
 * Method:    poke_static
 * Signature: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/acdk::lang::Object;)V
 */
JNIEXPORT void JNICALL Java_acdk_java_AcdkObject_poke_1static
  (JNIEnv* env, jclass jcls, jstring clsname, jstring mname, jobject v)
{
  try {
    initAcdk(env, jcls);
    JString classname(env, clsname);
    JString membername(env, mname);
    ScriptVar sv;
    java2acdk(env, v, sv);
    acdk::lang::Object::poke_static(classname.toString(), membername.toString(), sv);
  } catch (RThrowable ex) {
    mapException(env, ex);
  }
}


/*
 * Class:     acdk_java_AcdkObject
 * Method:    invoke_static
 * Signature: (Ljava/lang/String;Ljava/lang/String;[Ljava/lang/acdk::lang::Object;)Ljava/lang/acdk::lang::Object;
 */
JNIEXPORT jobject JNICALL Java_acdk_java_AcdkObject_invoke_1static
  (JNIEnv* env, jclass jcls, jstring clsname, jstring mname, jobjectArray jargs)
{
  try {
    initAcdk(env, jcls);
    JString classname(env, clsname);
    JString methodname(env, mname);
    JObjectArray arguments(env, jargs);
    ScriptVarArray sargs(arguments.size());
    java2acdk(env, arguments, sargs);
    ScriptVar erg = Object::invokeStaticMethod(classname.toString(), methodname.toString(), sargs, JavaObject::gJavaDmiClient, Nil);
    return acdk2jobject(env, erg);
  } catch (RThrowable ex) {
    mapException(env, ex);
    return 0;
  }
}

JNIEXPORT void JNICALL 
Java_acdk_java_AcdkObject_dispose(JNIEnv* env, jobject jobj)
{
  acdk::lang::Object* obj = getObjectHandle(env, jobj);
  if (obj == 0)
    return;
  
  setObjectHandle(env, jobj, Nil);
  obj->releaseRef();
}


#ifdef __cplusplus
}
#endif
/FONT>