1 /******************************************************************
3 * Copyright 2015 Samsung Electronics All Rights Reserved.
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
19 ******************************************************************/
21 #include "simulator_manager_jni.h"
22 #include "simulator_resource_server_jni.h"
23 #include "simulator_common_jni.h"
24 #include "simulator_manager.h"
25 #include "simulator_remote_resource_jni.h"
26 #include "simulator_resource_model_jni.h"
27 #include "simulator_device_info_jni.h"
28 #include "simulator_platform_info_jni.h"
29 #include "simulator_resource_jni_util.h"
30 #include "simulator_jni_utils.h"
32 SimulatorClassRefs gSimulatorClassRefs;
38 std::unique_lock<std::mutex> lock(gEnvMutex);
43 jint ret = gvm->GetEnv((void **)&env, JNI_VERSION_1_6);
49 if (0 == gvm->AttachCurrentThread((void **)&env, NULL))
58 std::unique_lock<std::mutex> lock(gEnvMutex);
61 gvm->DetachCurrentThread();
64 class JNILogger : public ILogger
67 void setJavaLogger(JNIEnv *env, jobject logger)
69 m_logger = env->NewWeakGlobalRef(logger);
72 void write(std::string time, ILogger::Level level, std::string message)
74 JNIEnv *env = getEnv();
78 jobject logger = env->NewLocalRef(m_logger);
85 jclass loggerCls = env->GetObjectClass(logger);
92 jmethodID writeMId = env->GetMethodID(loggerCls, "write",
93 "(Ljava/lang/String;ILjava/lang/String;)V");
100 jstring msg = env->NewStringUTF(message.c_str());
101 jstring timeStr = env->NewStringUTF(time.c_str());
102 env->CallVoidMethod(logger, writeMId, timeStr, static_cast<jint>(level), msg);
103 env->DeleteLocalRef(msg);
104 env->DeleteLocalRef(timeStr);
113 jobject SimulatorRemoteResourceToJava(JNIEnv *env, jlong resource)
115 jmethodID constructor = env->GetMethodID(gSimulatorClassRefs.classSimulatorRemoteResource, "<init>",
117 if (NULL == constructor)
122 jobject resourceObj = (jobject) env->NewObject(gSimulatorClassRefs.classSimulatorRemoteResource,
123 constructor, resource);
124 if (NULL == resourceObj)
132 class JNIFoundResourceListener
135 void setJavaFoundResourceListener(JNIEnv *env, jobject listener)
137 m_listener = env->NewWeakGlobalRef(listener);
140 void onFoundResource(std::shared_ptr<SimulatorRemoteResource> resource)
142 JNIEnv *env = getEnv();
146 jobject foundResourceListener = env->NewLocalRef(m_listener);
147 if (!foundResourceListener)
153 jclass foundResourceCls = env->GetObjectClass(foundResourceListener);
154 if (!foundResourceCls)
160 jmethodID foundResourceMId = env->GetMethodID(foundResourceCls, "onResourceCallback",
161 "(Lorg/oic/simulator/clientcontroller/SimulatorRemoteResource;)V");
162 if (!foundResourceMId)
168 JniSimulatorRemoteResource *jniSimulatorResource = new JniSimulatorRemoteResource(resource);
169 if (!jniSimulatorResource)
175 jobject simulatorResource = SimulatorRemoteResourceToJava(env,
176 reinterpret_cast<jlong>(jniSimulatorResource));
178 jfieldID fieldID = env->GetFieldID(gSimulatorClassRefs.classSimulatorRemoteResource, "mUri",
179 "Ljava/lang/String;");
180 jstring jUri = env->NewStringUTF(resource->getURI().c_str());
181 env->SetObjectField(simulatorResource, fieldID, jUri);
183 fieldID = env->GetFieldID(gSimulatorClassRefs.classSimulatorRemoteResource, "mConnType", "I");
184 jint jConnType = resource->getConnectivityType();
185 env->SetIntField(simulatorResource, fieldID, jConnType);
187 fieldID = env->GetFieldID(gSimulatorClassRefs.classSimulatorRemoteResource, "mHost",
188 "Ljava/lang/String;");
189 jstring jHost = env->NewStringUTF(resource->getHost().c_str());
190 env->SetObjectField(simulatorResource, fieldID, jHost);
192 fieldID = env->GetFieldID(gSimulatorClassRefs.classSimulatorRemoteResource, "mId",
193 "Ljava/lang/String;");
194 jstring jUid = env->NewStringUTF(resource->getID().c_str());
195 env->SetObjectField(simulatorResource, fieldID, jUid);
197 fieldID = env->GetFieldID(gSimulatorClassRefs.classSimulatorRemoteResource, "mResTypes",
198 "Ljava/util/LinkedList;");
199 std::vector<std::string> resourceTypes = resource->getResourceTypes();
200 jobject jResTypes = convertStringVectorToJavaList(env, resourceTypes);
201 env->SetObjectField(simulatorResource, fieldID, jResTypes);
203 fieldID = env->GetFieldID(gSimulatorClassRefs.classSimulatorRemoteResource, "mResInterfaces",
204 "Ljava/util/LinkedList;");
205 std::vector<std::string> interfaceTypes = resource->getResourceInterfaces();
206 jobject jResInterfaces = convertStringVectorToJavaList(env, interfaceTypes);
207 env->SetObjectField(simulatorResource, fieldID, jResInterfaces);
209 fieldID = env->GetFieldID(gSimulatorClassRefs.classSimulatorRemoteResource, "mIsObservable", "Z");
210 env->SetBooleanField(simulatorResource, fieldID, resource->isObservable());
212 env->CallVoidMethod(foundResourceListener, foundResourceMId, simulatorResource);
213 if ((env)->ExceptionCheck())
215 delete jniSimulatorResource;
228 void onResourceModelChange(jweak jlistenerRef, const std::string &uri,
229 const SimulatorResourceModel &resModel)
231 JNIEnv *env = getEnv();
235 jobject modelChangeListener = env->NewLocalRef(jlistenerRef);
236 if (!modelChangeListener)
242 jclass modelChangeCls = env->GetObjectClass(modelChangeListener);
249 jmethodID foundModelChangeMId = env->GetMethodID(modelChangeCls, "onResourceModelChanged",
250 "(Ljava/lang/String;Lorg/oic/simulator/SimulatorResourceModel;)V");
251 if (!foundModelChangeMId)
257 JSimulatorResourceModel *jniModel = new JSimulatorResourceModel(resModel);
264 jobject jModel = JSimulatorResourceModel::toJava(env, reinterpret_cast<jlong>(jniModel));
265 jstring jUri = env->NewStringUTF(uri.c_str());
266 env->CallVoidMethod(modelChangeListener, foundModelChangeMId, jUri, jModel);
267 if ((env)->ExceptionCheck())
274 env->DeleteLocalRef(jUri);
280 JNIEXPORT jobject JNICALL
281 Java_org_oic_simulator_SimulatorManagerNativeInterface_createResource
282 (JNIEnv *env, jclass object, jstring configPath, jobject listener)
286 throwInvalidArgsException(env, SIMULATOR_INVALID_PARAM,
287 "Configuration file path is empty!");
293 throwInvalidArgsException(env, SIMULATOR_INVALID_CALLBACK,
294 "Resource model change callback not set!");
298 jweak jlistenerRef = env->NewWeakGlobalRef(listener);
299 SimulatorResourceServer::ResourceModelChangedCB callback = [jlistenerRef](const std::string & uri,
300 const SimulatorResourceModel & resModel)
302 onResourceModelChange(jlistenerRef, uri, resModel);
305 const char *configPathCStr = env->GetStringUTFChars(configPath, NULL);
306 SimulatorResourceServerSP resource = NULL;
309 resource = SimulatorManager::getInstance()->createResource(
310 configPathCStr, callback);
311 if (nullptr == resource)
314 env->ReleaseStringUTFChars(configPath, configPathCStr);
318 catch (InvalidArgsException &e)
320 throwInvalidArgsException(env, e.code(), e.what());
323 catch (SimulatorException &e)
325 throwSimulatorException(env, e.code(), e.what());
330 throwSimulatorException(env, SIMULATOR_ERROR, "Unknown Exception");
334 JniSimulatorResource *jniSimResource = new JniSimulatorResource(resource);
335 jobject jSimulatorResource = JniSimulatorResource::toJava(env,
336 reinterpret_cast<jlong>(jniSimResource));
338 jniSimResource->setResourceInfo(env, jSimulatorResource);
341 env->ReleaseStringUTFChars(configPath, configPathCStr);
342 return jSimulatorResource;
345 JNIEXPORT jobjectArray JNICALL
346 Java_org_oic_simulator_SimulatorManagerNativeInterface_createResources
347 (JNIEnv *env, jclass object, jstring configPath, jint count, jobject listener)
351 throwInvalidArgsException(env, SIMULATOR_INVALID_PARAM,
352 "Configuration file path is empty!");
358 throwInvalidArgsException(env, SIMULATOR_INVALID_CALLBACK,
359 "Resource model change callback not set!");
363 jweak jlistenerRef = env->NewWeakGlobalRef(listener);
364 SimulatorResourceServer::ResourceModelChangedCB callback = [jlistenerRef](const std::string & uri,
365 const SimulatorResourceModel & resModel)
367 onResourceModelChange(jlistenerRef, uri, resModel);
370 const char *configPathCStr = env->GetStringUTFChars(configPath, NULL);
371 std::vector<SimulatorResourceServerSP> resources;
374 resources = SimulatorManager::getInstance()->createResource(configPathCStr, count, callback);
376 catch (InvalidArgsException &e)
378 throwInvalidArgsException(env, e.code(), e.what());
381 catch (SimulatorException &e)
383 throwSimulatorException(env, e.code(), e.what());
388 throwSimulatorException(env, SIMULATOR_ERROR, "Unknown Exception");
392 // Construct the object array and send it java layer
393 jobjectArray resourceArray = env->NewObjectArray(resources.size(),
394 gSimulatorClassRefs.classSimulatorResource, NULL);
397 for (size_t i = 0; i < resources.size(); i++)
399 JniSimulatorResource *jniSimResource = new JniSimulatorResource(resources[i]);
400 jobject jSimulatorResource = JniSimulatorResource::toJava(env,
401 reinterpret_cast<jlong>(jniSimResource));
402 jniSimResource->setResourceInfo(env, jSimulatorResource);
403 env->SetObjectArrayElement(resourceArray, i, jSimulatorResource);
408 env->ReleaseStringUTFChars(configPath, configPathCStr);
409 return resourceArray;
412 JNIEXPORT void JNICALL
413 Java_org_oic_simulator_SimulatorManagerNativeInterface_deleteResource
414 (JNIEnv *env, jclass object, jobject jResource)
418 throwInvalidArgsException(env, SIMULATOR_INVALID_PARAM,
419 "No resource has been passed!");
423 SimulatorResourceServerSP resource =
424 JniSimulatorResource::getJniSimulatorResourceSP(env, jResource);
427 throwSimulatorException(env, SIMULATOR_BAD_OBJECT,
428 "Simulator resource not found!");
434 SimulatorManager::getInstance()->deleteResource(resource);
436 catch (InvalidArgsException &e)
438 throwInvalidArgsException(env, e.code(), e.what());
442 throwSimulatorException(env, SIMULATOR_ERROR, "Unknown Exception");
446 JNIEXPORT void JNICALL
447 Java_org_oic_simulator_SimulatorManagerNativeInterface_deleteResources
448 (JNIEnv *env, jclass object, jstring resourceType)
451 const char *typeCStr = NULL;
454 typeCStr = env->GetStringUTFChars(resourceType, NULL);
460 SimulatorManager::getInstance()->deleteResource(type);
464 throwSimulatorException(env, SIMULATOR_ERROR, "Unknown Exception");
469 env->ReleaseStringUTFChars(resourceType, typeCStr);
472 JNIEXPORT void JNICALL
473 Java_org_oic_simulator_SimulatorManagerNativeInterface_findResource
474 (JNIEnv *env, jobject object, jstring jResourceType, jobject jListener)
478 throwInvalidArgsException(env, SIMULATOR_INVALID_CALLBACK, "Invalid callback!");
482 const char *typeCStr = NULL;
483 std::string resourceType;
486 typeCStr = env->GetStringUTFChars(jResourceType, NULL);
487 resourceType = typeCStr;
490 JNIFoundResourceListener *resourceListener = new JNIFoundResourceListener();
491 resourceListener->setJavaFoundResourceListener(env, jListener);
497 SimulatorManager::getInstance()->findResource(
498 std::bind(&JNIFoundResourceListener::onFoundResource,
499 resourceListener, std::placeholders::_1));
503 SimulatorManager::getInstance()->findResource(resourceType,
504 std::bind(&JNIFoundResourceListener::onFoundResource,
505 resourceListener, std::placeholders::_1));
509 catch (InvalidArgsException &e)
511 throwInvalidArgsException(env, e.code(), e.what());
514 catch (SimulatorException &e)
516 throwSimulatorException(env, e.code(), e.what());
521 throwSimulatorException(env, SIMULATOR_ERROR, "Unknown Exception");
526 env->ReleaseStringUTFChars(jResourceType, typeCStr);
530 JNIEXPORT void JNICALL
531 Java_org_oic_simulator_SimulatorManagerNativeInterface_setLogger
532 (JNIEnv *env, jclass object, jobject logger)
534 static std::shared_ptr<JNILogger> target(new JNILogger());
535 target->setJavaLogger(env, logger);
536 SimulatorManager::getInstance()->setLogger(target);
539 JNIEXPORT void JNICALL
540 Java_org_oic_simulator_SimulatorManagerNativeInterface_setDeviceInfo
541 (JNIEnv *env, jobject interfaceObject, jstring deviceInfo)
545 throwInvalidArgsException(env, SIMULATOR_INVALID_PARAM, "Invalid device info!");
549 const char *deviceName = env->GetStringUTFChars(deviceInfo, NULL);
553 SimulatorManager::getInstance()->setDeviceInfo(deviceName);
555 catch (InvalidArgsException &e)
557 throwInvalidArgsException(env, e.code(), e.what());
559 catch (SimulatorException &e)
561 throwSimulatorException(env, e.code(), e.what());
565 throwSimulatorException(env, SIMULATOR_ERROR, "Unknown Exception");
569 env->ReleaseStringUTFChars(deviceInfo, deviceName);
572 JNIEXPORT void JNICALL
573 Java_org_oic_simulator_SimulatorManagerNativeInterface_getDeviceInfo
574 (JNIEnv *env, jobject interfaceObject, jobject jListener)
578 throwInvalidArgsException(env, SIMULATOR_INVALID_CALLBACK, "Invalid callback!");
582 JniDeviceInfoListener *deviceInfoListener = new JniDeviceInfoListener(env, jListener);
583 DeviceInfoCallback callback = std::bind([deviceInfoListener](DeviceInfo & deviceInfo)
585 deviceInfoListener->onDeviceInfoReceived(deviceInfo);
586 delete deviceInfoListener;
587 }, std::placeholders::_1);
591 SimulatorManager::getInstance()->getDeviceInfo(callback);
593 catch (InvalidArgsException &e)
595 throwInvalidArgsException(env, e.code(), e.what());
597 catch (SimulatorException &e)
599 throwSimulatorException(env, e.code(), e.what());
603 throwSimulatorException(env, SIMULATOR_ERROR, "Unknown Exception");
608 JNIEXPORT void JNICALL
609 Java_org_oic_simulator_SimulatorManagerNativeInterface_setPlatformInfo
610 (JNIEnv *env, jobject interfaceObject, jobject jPlatformInfo)
614 throwInvalidArgsException(env, SIMULATOR_INVALID_PARAM, "Invalid platform info!");
618 JPlatformInfo jniPlatformInfo(env);
621 PlatformInfo platformInfo = jniPlatformInfo.toCPP(jPlatformInfo);
622 SimulatorManager::getInstance()->setPlatformInfo(platformInfo);
624 catch (SimulatorException &e)
626 throwSimulatorException(env, e.code(), e.what());
630 throwSimulatorException(env, SIMULATOR_ERROR, "Unknown Exception");
635 JNIEXPORT void JNICALL
636 Java_org_oic_simulator_SimulatorManagerNativeInterface_getPlatformInfo
637 (JNIEnv *env, jobject interfaceObject, jobject jListener)
641 throwInvalidArgsException(env, SIMULATOR_INVALID_CALLBACK, "Invalid callback!");
645 JniPlatformInfoListener *platformInfoListener = new JniPlatformInfoListener(env, jListener);
646 PlatformInfoCallback callback = std::bind([platformInfoListener](PlatformInfo & platformInfo)
648 platformInfoListener->onPlatformInfoReceived(platformInfo);
649 delete platformInfoListener;
650 }, std::placeholders::_1);
654 SimulatorManager::getInstance()->getPlatformInfo(callback);
656 catch (InvalidArgsException &e)
658 throwInvalidArgsException(env, e.code(), e.what());
660 catch (SimulatorException &e)
662 throwSimulatorException(env, e.code(), e.what());
666 throwSimulatorException(env, SIMULATOR_ERROR, "Unknown Exception");
671 static bool getClassRef(JNIEnv *env, const char *className, jclass &classRef)
673 jclass localClassRef = nullptr;
674 localClassRef = env->FindClass(className);
678 classRef = (jclass)env->NewGlobalRef(localClassRef);
679 env->DeleteLocalRef(localClassRef);
686 JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved)
694 if (JNI_OK != vm->GetEnv((void **) &env, JNI_VERSION_1_6))
699 // Get the class references
700 if (false == getClassRef(env, "java/lang/Object", gSimulatorClassRefs.classObject))
705 if (false == getClassRef(env, "java/lang/Integer", gSimulatorClassRefs.classInteger))
710 if (false == getClassRef(env, "java/lang/Double", gSimulatorClassRefs.classDouble))
715 if (false == getClassRef(env, "java/lang/String", gSimulatorClassRefs.classString))
720 if (false == getClassRef(env, "java/util/HashMap", gSimulatorClassRefs.classHashMap))
725 if (false == getClassRef(env, "java/util/Vector", gSimulatorClassRefs.classVector))
730 if (false == getClassRef(env, "java/util/Map", gSimulatorClassRefs.classMap))
735 if (false == getClassRef(env, "java/util/Map$Entry", gSimulatorClassRefs.classMapEntry))
740 if (false == getClassRef(env, "java/util/Set", gSimulatorClassRefs.classSet))
745 if (false == getClassRef(env, "java/util/Iterator", gSimulatorClassRefs.classIterator))
750 if (false == getClassRef(env, "java/util/LinkedList", gSimulatorClassRefs.classLinkedList))
755 if (false == getClassRef(env, "org/oic/simulator/serviceprovider/SimulatorResourceServer",
756 gSimulatorClassRefs.classSimulatorResource))
761 if (false == getClassRef(env, "org/oic/simulator/SimulatorResourceModel",
762 gSimulatorClassRefs.classSimulatorResourceModel))
767 if (false == getClassRef(env, "org/oic/simulator/ResourceAttribute",
768 gSimulatorClassRefs.classResourceAttribute))
773 if (false == getClassRef(env, "org/oic/simulator/clientcontroller/SimulatorRemoteResource",
774 gSimulatorClassRefs.classSimulatorRemoteResource))
779 if (false == getClassRef(env, "org/oic/simulator/serviceprovider/ObserverInfo",
780 gSimulatorClassRefs.classObserverInfo))
785 if (false == getClassRef(env, "org/oic/simulator/DeviceInfo",
786 gSimulatorClassRefs.classDeviceInfo))
791 if (false == getClassRef(env, "org/oic/simulator/PlatformInfo",
792 gSimulatorClassRefs.classPlatformInfo))
797 if (false == getClassRef(env, "org/oic/simulator/SimulatorException",
798 gSimulatorClassRefs.classSimulatorException))
803 if (false == getClassRef(env, "org/oic/simulator/InvalidArgsException",
804 gSimulatorClassRefs.classInvalidArgsException))
809 if (false == getClassRef(env, "org/oic/simulator/NoSupportException",
810 gSimulatorClassRefs.classNoSupportException))
815 if (false == getClassRef(env, "org/oic/simulator/OperationInProgressException",
816 gSimulatorClassRefs.classOperationInProgressException))
821 // Get the reference to methods
822 gSimulatorClassRefs.classIntegerCtor = env->GetMethodID(gSimulatorClassRefs.classInteger, "<init>",
824 if (!gSimulatorClassRefs.classIntegerCtor)
827 gSimulatorClassRefs.classDoubleCtor = env->GetMethodID(gSimulatorClassRefs.classDouble, "<init>",
829 if (!gSimulatorClassRefs.classDoubleCtor)
832 gSimulatorClassRefs.classHashMapCtor = env->GetMethodID(gSimulatorClassRefs.classHashMap, "<init>",
834 if (!gSimulatorClassRefs.classHashMapCtor)
837 gSimulatorClassRefs.classHashMapPut = env->GetMethodID(gSimulatorClassRefs.classHashMap, "put",
838 "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;");
839 if (!gSimulatorClassRefs.classHashMapPut)
842 gSimulatorClassRefs.classVectorCtor = env->GetMethodID(gSimulatorClassRefs.classVector, "<init>",
844 if (!gSimulatorClassRefs.classVectorCtor)
847 gSimulatorClassRefs.classVectorAddElement = env->GetMethodID(gSimulatorClassRefs.classVector,
849 "(Ljava/lang/Object;)V");
850 if (!gSimulatorClassRefs.classVectorAddElement)
853 gSimulatorClassRefs.classMapEntrySet = env->GetMethodID(
854 gSimulatorClassRefs.classMap, "entrySet", "()Ljava/util/Set;");
855 if (!gSimulatorClassRefs.classMapEntrySet)
858 gSimulatorClassRefs.classMapGetKey = env->GetMethodID(
859 gSimulatorClassRefs.classMapEntry, "getKey", "()Ljava/lang/Object;");
860 if (!gSimulatorClassRefs.classMapGetKey)
863 gSimulatorClassRefs.classMapGetValue = env->GetMethodID(
864 gSimulatorClassRefs.classMapEntry, "getValue", "()Ljava/lang/Object;");
865 if (!gSimulatorClassRefs.classMapGetValue)
868 gSimulatorClassRefs.classIteratorId = env->GetMethodID(
869 gSimulatorClassRefs.classSet, "iterator", "()Ljava/util/Iterator;");
870 if (!gSimulatorClassRefs.classIteratorId)
873 gSimulatorClassRefs.classHasNextId = env->GetMethodID(
874 gSimulatorClassRefs.classIterator, "hasNext", "()Z");
875 if (!gSimulatorClassRefs.classHasNextId)
878 gSimulatorClassRefs.classNextId = env->GetMethodID(
879 gSimulatorClassRefs.classIterator, "next", "()Ljava/lang/Object;");
880 if (!gSimulatorClassRefs.classNextId)
883 gSimulatorClassRefs.classLinkedListCtor = env->GetMethodID(gSimulatorClassRefs.classLinkedList,
885 if (!gSimulatorClassRefs.classLinkedListCtor)
888 gSimulatorClassRefs.classLinkedListAddObject = env->GetMethodID(gSimulatorClassRefs.classLinkedList,
889 "add", "(Ljava/lang/Object;)Z");
890 if (!gSimulatorClassRefs.classLinkedListAddObject)
893 gSimulatorClassRefs.classSimulatorResourceCtor = env->GetMethodID(
894 gSimulatorClassRefs.classSimulatorResource, "<init>", "(J)V");
895 if (!gSimulatorClassRefs.classSimulatorResourceCtor)
898 gSimulatorClassRefs.classSimulatorResourceModelCtor = env->GetMethodID(
899 gSimulatorClassRefs.classSimulatorResourceModel, "<init>", "(J)V");
900 if (!gSimulatorClassRefs.classSimulatorResourceModelCtor)
903 gSimulatorClassRefs.classResourceAttributeCtor = env->GetMethodID(
904 gSimulatorClassRefs.classResourceAttribute, "<init>", "()V");
905 if (!gSimulatorClassRefs.classResourceAttributeCtor)
908 gSimulatorClassRefs.classResourceAttributeSetRange = env->GetMethodID(
909 gSimulatorClassRefs.classResourceAttribute, "setRange", "(II)V");
910 if (!gSimulatorClassRefs.classResourceAttributeSetRange)
913 gSimulatorClassRefs.classSimulatorResourceModelId = env->GetMethodID(
914 gSimulatorClassRefs.classSimulatorResourceModel, "<init>", "(J)V");
915 if (!gSimulatorClassRefs.classSimulatorResourceModelId)
918 gSimulatorClassRefs.classObserverInfoCtor = env->GetMethodID(
919 gSimulatorClassRefs.classObserverInfo, "<init>",
920 "(ILjava/lang/String;I)V");
921 if (!gSimulatorClassRefs.classObserverInfoCtor)
924 gSimulatorClassRefs.classSimulatorExceptionCtor = env->GetMethodID(
925 gSimulatorClassRefs.classSimulatorException, "<init>",
926 "(ILjava/lang/String;)V");
927 if (!gSimulatorClassRefs.classSimulatorExceptionCtor)
930 gSimulatorClassRefs.classInvalidArgsExceptionCtor = env->GetMethodID(
931 gSimulatorClassRefs.classInvalidArgsException, "<init>",
932 "(ILjava/lang/String;)V");
933 if (!gSimulatorClassRefs.classInvalidArgsExceptionCtor)
936 gSimulatorClassRefs.classNoSupportExceptionCtor = env->GetMethodID(
937 gSimulatorClassRefs.classNoSupportException, "<init>",
938 "(ILjava/lang/String;)V");
939 if (!gSimulatorClassRefs.classNoSupportExceptionCtor)
942 gSimulatorClassRefs.classOperationInProgressExceptionCtor = env->GetMethodID(
943 gSimulatorClassRefs.classOperationInProgressException, "<init>",
944 "(ILjava/lang/String;)V");
945 if (!gSimulatorClassRefs.classOperationInProgressExceptionCtor)
949 return JNI_VERSION_1_6;
952 JNIEXPORT void JNICALL JNI_OnUnload(JavaVM *vm, void *reserved)