示例#1
0
jobjectArray rho_cast_helper<jobjectArray, VALUE>::operator()(JNIEnv *env, VALUE value)
{
    RAWTRACE("rho_cast<jobjectArray, VALUE>");

    if (!initConvertor(env))
        return 0;

    if (NIL_P(value))
        return 0;

    if(TYPE(value) == T_ARRAY)
    {
        int size = RARRAY_LEN(value);
        jobjectArray jArray = env->NewObjectArray(size, clsString, 0);

        if (!jArray)
            return 0;

        for (int i = 0; i < size; ++i)
        {
            jhstring jhElement = rho_cast<jstring>(env, rb_ary_entry(value, i));
            env->SetObjectArrayElement(jArray, i, jhElement.get());
        }
        return jArray;
    }

    RAWLOG_ERROR1("rho_cast<jobjectArray, VALUE>: wrong type of VALUE: %d", TYPE(value));
    return 0;
}
示例#2
0
jobjectArray rho_cast_helper<jobjectArray, VALUE>::operator()(JNIEnv *env, VALUE value)
{
    RAWTRACE("rho_cast<jobjectArray, VALUE>");

    if (!initConvertor(env))
        return 0;

    if (NIL_P(value))
        return 0;

    if(TYPE(value) == RUBY_T_ARRAY)
    {
        int size = RARRAY_LEN(value);
        jobjectArray jArray = env->NewObjectArray(size, clsString, 0);

        if(env->ExceptionCheck() == JNI_TRUE)
        {
            rho::String message = rho::common::clearException(env);
            RAWLOG_ERROR(message.c_str());
            return 0;
        }

        for (int i = 0; i < size; ++i)
        {
            jhstring jhElement = rho_cast<jstring>(env, rb_ary_entry(value, i));
            env->SetObjectArrayElement(jArray, i, jhElement.get());
        }
        return jArray;
    }

    RAWLOG_ERROR1("rho_cast<jobjectArray, VALUE>: wrong type of VALUE: %d", TYPE(value));
    return 0;
}
示例#3
0
VALUE rho_cast_helper<VALUE, jobject>::operator()(JNIEnv *env, jobject obj)
{
    if (env->IsSameObject(obj, NULL) == JNI_TRUE)
        return Qnil;

    if (!initConvertor(env))
    {
        env->ThrowNew(getJNIClass(RHODES_JAVA_CLASS_RUNTIME_EXCEPTION), "Java <=> Ruby conversion initialization failed");
        return Qnil;
    }

    if (env->IsInstanceOf(obj, clsString))
    {
        const char *str = env->GetStringUTFChars(static_cast<jstring>(obj), JNI_FALSE);
        VALUE res = rho_ruby_create_string(str);
        env->ReleaseStringUTFChars(static_cast<jstring>(obj), str);
        return res;
    }

    if (env->IsInstanceOf(obj, clsMap))
        return convertJavaMapToRubyHash(env, obj);

    RAWLOG_ERROR("rho_cast<VALUE, jobject>: unknown type of value");
    return Qnil;
}
示例#4
0
HStringMap
rho_cast_helper<HStringMap, jobject>::operator()(JNIEnv *env, jobject jObj)
{
    RAWTRACE("rho_cast<HStringMap, jobject>");

    value_type result(new value_type::element_type);

    if (!initConvertor(env)) return value_type(0);

    jhobject jSet = env->CallObjectMethod(jObj, midMapKeySet);
    if (!jSet) return value_type(0);
    jhobject jIterator = env->CallObjectMethod(jSet.get(), midSetIterator);
    if (!jIterator) return value_type(0);

    while(env->CallBooleanMethod(jIterator.get(), midIteratorHasNext))
    {
            jhstring jkey = static_cast<jstring>(env->CallObjectMethod(jIterator.get(), midIteratorNext));
            jhstring jval = static_cast<jstring>(env->CallObjectMethod(jObj, midMapGet, jkey.get()));

            std::string key = rho_cast<std::string>(env, jkey);
            std::string val = rho_cast<std::string>(env, jval);

            result->put(key, val);
    }
    return result;
}
示例#5
0
jobject rho_cast_helper<jobject, rho::Vector<std::string> >::operator()(JNIEnv* env, const rho::Vector<std::string>& stringVector)
{
    RAWTRACE("rho_cast<jobject, HStringVector>");

    if (!initConvertor(env)) return 0;

    jobject jArray = env->NewObject(clsArrayList, midArrayList);
    if(!jArray) return 0;

    for(std::vector<std::string>::const_iterator iter = stringVector.begin(); iter != stringVector.end(); ++iter)
    {
        jhstring jhItem = rho_cast<jstring>(env, *iter);
        env->CallBooleanMethod(jArray, midArrayListAdd, jhItem.get());
    }
    return jArray;
}
示例#6
0
jobject rho_cast_helper<jobject, VALUE>::operator()(JNIEnv *env, VALUE value)
{
    RAWTRACE("rho_cast<jobject, VALUE>");

    if (NIL_P(value))
        return 0;

    if (!initConvertor(env))
        return 0;

    switch(TYPE(value))
    {
    case RUBY_T_SYMBOL:
        value = rb_funcall(value, rb_intern("to_s"), 0);
    case RUBY_T_STRING:
        RAWTRACE("Convert to String object");
        return env->NewStringUTF(RSTRING_PTR(value));
    case RUBY_T_ARRAY:
        RAWTRACE("Convert to Collection object");
        return convertRubyArrayToJavaCollection(value);
    case RUBY_T_HASH:
        RAWTRACE("Convert to Map object");
        return convertRubyHashToJavaMap(value);
    case RUBY_T_TRUE:
        RAWTRACE("Convert to TRUE Boolean obeject");
        return RhoJniConvertor::getBooleanObject(true);
    case RUBY_T_FALSE:
        RAWTRACE("Convert to FALSE Boolean object");
        return RhoJniConvertor::getBooleanObject(false);
    case RUBY_T_FIXNUM:
    case RUBY_T_BIGNUM:
        RAWTRACE("Convert to Integer object");
        return RhoJniConvertor::getIntegerObject(NUM2LONG(value));
    case RUBY_T_FLOAT:
    case RUBY_T_RATIONAL:
        RAWTRACE("Convert to Double object");
        return RhoJniConvertor::getDoubleObject(NUM2DBL(value));
    }

    RAWLOG_ERROR1("rho_cast<jobject, VALUE>: wrong type of VALUE: %d", TYPE(value));
    return 0;
}
示例#7
0
jobject PropertyMapConvertor<VALUE>::convertToPropertyMap(JNIEnv *env, VALUE value)
{
    if (NIL_P(value))
        return 0;

    if (!initConvertor(env))
        return 0;

    m_jObject = env->NewObject(clsHashMap, midHashMap);
    if(env->ExceptionCheck() == JNI_TRUE)
    {
        rho::String message = rho::common::clearException(env);
        RAWLOG_ERROR(message.c_str());
        return 0;
    }

    rho_ruby_enum_hash(value, rubyHashElementToProperty, this);

    return m_jObject;
}
示例#8
0
HStringVector
rho_cast_helper<HStringVector, jobject>::operator ()(JNIEnv *env, jobject jList)
{
    RAWTRACE("rho_cast<HStringVector, jobject>");

    value_type result(new value_type::element_type);

    if (!initConvertor(env)) return value_type(0);

    jhobject jhIterator = env->CallObjectMethod(jList, midCollectionIterator);
    if (!jhIterator) return value_type(0);

    while(env->CallBooleanMethod(jhIterator.get(), midIteratorHasNext))
    {
        jhstring jhVal = static_cast<jstring>(env->CallObjectMethod(jhIterator.get(), midIteratorNext));
        std::string val = rho_cast<std::string>(env, jhVal);
        result->push_back(val);
    }
    return result;
}