JScript::JScript(ScriptNode *node) { if (0 < node->getNUrls()) { JNIEnv *jniEnv = getJniEnv(); SceneGraph *sg = node->getSceneGraph(); // get script class char buffer[1024]; // Class IDs mNodeObjectClassID = jniEnv->FindClass(getClassName(node->getUrl(0), buffer)); #if defined(CX3D_SUPPORT_URL) if (mNodeObjectClassID == NULL) { if (sg->getUrlStream(node->getUrl(0))) { mNodeObjectClassID = jniEnv->FindClass(getClassName(sg->getUrlOutputFilename(), buffer)); sg->deleteUrlOutputFilename(); } } #endif if (!mNodeObjectClassID) return; // MethodIDs jclass classid = getNodeObjectClassID(); mInitMethodID = jniEnv->GetMethodID(classid, "<init>", "()V"); mSetNameMethodID = jniEnv->GetMethodID(classid, "setName", "(Ljava/lang/String;)V"); mAddEventInMethodID = jniEnv->GetMethodID(classid, "addEventIn", "(Ljava/lang/String;Lvrml/Field;)V"); mAddEventOutMethodID = jniEnv->GetMethodID(classid, "addEventOut", "(Ljava/lang/String;Lvrml/Field;)V"); mAddFieldMethodID = jniEnv->GetMethodID(classid, "addField", "(Ljava/lang/String;Lvrml/Field;)V"); mAddExposedFieldMethodID = jniEnv->GetMethodID(classid, "addExposedField", "(Ljava/lang/String;Lvrml/Field;)V"); mGetEventInMethodID = jniEnv->GetMethodID(classid, "getEventIn", "(Ljava/lang/String;)Lvrml/Field;"); mGetEventOutMethodID = jniEnv->GetMethodID(classid, "getEventOut", "(Ljava/lang/String;)Lvrml/Field;"); mGetFieldMethodID = jniEnv->GetMethodID(classid, "getField", "(Ljava/lang/String;)Lvrml/Field;"); mGetExposedFieldMethodID = jniEnv->GetMethodID(classid, "getExposedField", "(Ljava/lang/String;)Lvrml/Field;"); mGetNEventInMethodID = jniEnv->GetMethodID(classid, "getNEventIn", "()I"); mGetNEventOutMethodID = jniEnv->GetMethodID(classid, "getNEventOut", "()I"); mGetNFieldsMethodID = jniEnv->GetMethodID(classid, "getNFields", "()I"); mGetNExposedFieldsMethodID = jniEnv->GetMethodID(classid, "getNExposedFields", "()I"); // MethodIDs mInitializeMethodID = jniEnv->GetMethodID(classid, "initialize", "()V"); mShutdownMethodID = jniEnv->GetMethodID(classid, "shutdown", "()V"); mProcessEventMethodID = jniEnv->GetMethodID(classid, "processEvent", "(Lvrml/Event;)V"); assert(mInitMethodID); assert(mGetEventInMethodID && mGetEventOutMethodID && mGetFieldMethodID); assert(mInitializeMethodID && mShutdownMethodID && mProcessEventMethodID); /* assert(mSetNameMethodID); assert(mAddEventInMethodID && mAddEventOutMethodID && mAddFieldMethodID && mAddExposedFieldMethodID); assert(mGetExposedFieldMethodID); assert(mGetNEventInMethodID && mGetNEventOutMethodID && mGetNFieldsMethodID && mGetNExposedFieldsMethodID); */ // Create object jobject object = jniEnv->NewObject(classid, getInitMethodID()); setNodeObject(object); addFields(node); assert(object); initialize(); } else { mNodeObjectClassID = NULL; mInitMethodID = NULL; mSetNameMethodID = NULL; mAddEventInMethodID = NULL; mAddEventOutMethodID = NULL; mAddFieldMethodID = NULL; mAddExposedFieldMethodID = NULL; mGetEventInMethodID = NULL; mGetEventOutMethodID = NULL; mGetFieldMethodID = NULL; mGetExposedFieldMethodID = NULL; setNodeObject(NULL); } }