void copyToHcpElement(JNIEnv * Env, hcp_tResult const& result, jobject& Destination) { static const char* destClass = "com/husqvarnagroup/connectivity/HcpElement"; static const char* setFamilyName = "setFamily"; static const char* setFamilySig = "(Ljava/lang/String;)V"; static const char* setCommandName = "setCommand"; static const char* setCommandSig = "(Ljava/lang/String;)V"; static const char* putName = "put"; static const char* putSig = "(Ljava/lang/String;Ljava/lang/Object;)V"; jclass java_class = Env->FindClass(destClass); if(java_class != NULL) { jmethodID setFamily = Env->GetMethodID(java_class, setFamilyName, setFamilySig); if(setFamily != NULL) { jmethodID setCommand = Env->GetMethodID(java_class, setCommandName, setCommandSig); if(setCommand != NULL) { jmethodID put = Env->GetMethodID(java_class, putName, putSig); if(put != NULL) { auto family = toJString(Env,result.family); auto command = toJString(Env,result.command); { Env->CallObjectMethod(Destination, setFamily, family); Env->CallObjectMethod(Destination, setCommand, command); } for(hcp_Size_t i = 0;i < result.parameterCount; i++) { static const hcp_Size_t offset = sizeof(hcp_tParameter); hcp_tParameter* parameter = (hcp_tParameter*)((hcp_Size_t)result.parameters + i*offset); jobject value = HcpJNI_NewObject(Env, parameter); auto key = toJString(Env,parameter->template_->name); { Env->CallObjectMethod(Destination, put, key, value); } Env->DeleteLocalRef(value); } } else { throw noSuchMethodError(destClass, putName, putSig); } } else { throw noSuchMethodError(destClass,setCommandName, setCommandSig); } } else { throw noSuchMethodError(destClass,setFamilyName, setFamilySig); } } else { throw noClassDefError(destClass); } }
JString JDouble::toJStringF(double r, int w, int f) { if (w <= 0) return toJString(r); JBlock buf(50, 0), format(50, 0); sprintf(format, "%%%d.%dlf", w, f); sprintf(buf, format, r); return JString(buf); }
JString JComplex::toJStringF(const jcomplex& c, int w, int f) { if (w <= 0) return toJString(c); JBlock buf(50, 0), format(50, 0); sprintf(format, "%%%d.%dlf,%%%d.%dlfi", w, f, w, f); sprintf(buf, format, c.r, c.i); return JString(buf); }
boolean JFileProperty::edit(int x, int y) { JString ov = value; if (JFileBox::create(JString("Property Edit for ")+ toJString(), value, type, x, y) == JMessageBox::OK) { check(); } return (value != ov); }
JString JDouble::toJString() { return toJString(value);}
JString JComplex::toJString() { return toJString(value);}
static jobject HcpJNI_NewObject(JNIEnv * env, const hcp_tParameter* pParameter) { jobject value = NULL; hcp_tParameter* parameter = (hcp_tParameter*)pParameter; switch(parameter->template_->type) { case HCP_FLOAT_ID: { jclass cls = env->FindClass( "java/lang/Float"); jmethodID id = env->GetMethodID( cls, "<init>", "(F)V"); value = env->NewObject(cls, id, (jfloat)parameter->value.f); } break; case HCP_BOOLEAN_ID: { jclass cls = env->FindClass( "java/lang/Boolean"); jmethodID id = env->GetMethodID( cls, "<init>", "(Z)V"); value = env->NewObject(cls, id, (jboolean)parameter->value.b); } break; case HCP_SIZET_ID: { jclass cls = env->FindClass( "java/lang/Long"); jmethodID id = env->GetMethodID( cls, "<init>", "(J)V"); value = env->NewObject(cls, id, (jlong)parameter->value.sz); } break; case HCP_UINT8_ID: { jclass cls = env->FindClass( "java/lang/Integer"); jmethodID id = env->GetMethodID( cls, "<init>", "(I)V"); value = env->NewObject(cls, id, (jint)parameter->value.u8); } break; case HCP_INT8_ID: { jclass cls = env->FindClass( "java/lang/Byte"); jmethodID id = env->GetMethodID( cls, "<init>", "(B)V"); value = env->NewObject(cls, id, (jbyte)parameter->value.s8); } break; case HCP_UINT16_ID: { jclass cls = env->FindClass( "java/lang/Integer"); jmethodID id = env->GetMethodID( cls, "<init>", "(I)V"); value = env->NewObject(cls, id, (jint)parameter->value.u16); } break; case HCP_INT16_ID: { jclass cls = env->FindClass( "java/lang/Short"); jmethodID id = env->GetMethodID( cls, "<init>", "(S)V"); value = env->NewObject(cls, id, (jshort)parameter->value.i16); } break; case HCP_UINT32_ID: { jclass cls = env->FindClass( "java/lang/Long"); jmethodID id = env->GetMethodID( cls, "<init>", "(J)V"); value = env->NewObject(cls, id, (jlong)parameter->value.u32); } break; case HCP_INT32_ID: { jclass cls = env->FindClass( "java/lang/Integer"); jmethodID id = env->GetMethodID( cls, "<init>", "(I)V"); value = env->NewObject(cls, id, (jint)parameter->value.i32); } break; case HCP_UINT64_ID: { jclass cls = env->FindClass( "java/lang/Long"); jmethodID id = env->GetMethodID( cls, "<init>", "(J)V"); value = env->NewObject(cls, id, (jlong)parameter->value.u64); } break; case HCP_INT64_ID: { jclass cls = env->FindClass( "java/lang/Long"); jmethodID id = env->GetMethodID( cls, "<init>", "(J)V"); value = env->NewObject(cls, id, (jlong)parameter->value.i64); } break; case HCP_STRING_ID: { value = toJString(env, parameter->value.str); } break; case HCP_DOUBLE_ID: { jclass cls = env->FindClass( "java/lang/Double"); jmethodID id = env->GetMethodID( cls, "<init>", "(D)V"); value = env->NewObject(cls, id, (jdouble)parameter->value.d); } break; case HCP_BLOB_ID: { hcp_tBlob* blob = ¶meter->value.blb; //value = env->NewBooleanArray( blob->length); value = env->NewByteArray( blob->length); if(value != NULL) { env->SetByteArrayRegion( (jbyteArray)value, 0, blob->length, reinterpret_cast<jbyte*>(blob->value)); } } break; case HCP_UNIXTIME_ID: { jclass cls = env->FindClass( "java/lang/Long"); jmethodID id = env->GetMethodID( cls, "<init>", "(J)V"); value = env->NewObject(cls, id, (jlong)parameter->value.time); } break; case HCP_SIMPLEVERSION_ID: { jclass cls = env->FindClass( "java/lang/Integer"); jmethodID id = env->GetMethodID( cls, "<init>", "(I)V"); value = env->NewObject(cls, id, (jint)parameter->value.version); } break; default : { value = NULL; } break; } return value; }