Imported Upstream version 1.1.0
[platform/upstream/iotivity.git] / service / simulator / java / jni / simulator_resource_utils_jni.cpp
1 /******************************************************************
2  *
3  * Copyright 2015 Samsung Electronics All Rights Reserved.
4  *
5  *
6  *
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
10  *
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  *
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.
18  *
19  ******************************************************************/
20
21 #include "simulator_resource_utils_jni.h"
22 #include "simulator_utils_jni.h"
23 #include "jni_sharedobject_holder.h"
24 #include "jni_vector.h"
25
26 jobject CreateSingleResource(JNIEnv *env, SimulatorResourceSP singleResource)
27 {
28     if (!singleResource)
29         return nullptr;
30
31     auto *objectHolder = JniSharedObjectHolder<SimulatorResource>::create(singleResource);
32     if (!objectHolder)
33         return nullptr;
34
35     static jmethodID simulatorSingleResourceCtor = env->GetMethodID(
36                 gSimulatorClassRefs.simulatorSingleResourceCls, "<init>", "(J)V");
37
38     jobject resource = (jobject) env->NewObject(gSimulatorClassRefs.simulatorSingleResourceCls,
39                        simulatorSingleResourceCtor, reinterpret_cast<jlong>(objectHolder));
40     if (!resource)
41     {
42         delete objectHolder;
43         return nullptr;
44     }
45
46     return resource;
47 }
48
49 jobject CreateCollectionResource(JNIEnv *env, SimulatorResourceSP collectionResource)
50 {
51     if (!collectionResource)
52         return nullptr;
53
54     auto *objectHolder = JniSharedObjectHolder<SimulatorResource>::create(collectionResource);
55     if (!objectHolder)
56         return nullptr;
57
58     static jmethodID simulatorCollectionResourceCtor = env->GetMethodID(
59                 gSimulatorClassRefs.simulatorCollectionResourceCls, "<init>", "(J)V");
60     jobject resource = (jobject) env->NewObject(gSimulatorClassRefs.simulatorCollectionResourceCls,
61                        simulatorCollectionResourceCtor, reinterpret_cast<jlong>(objectHolder));
62     if (!resource)
63     {
64         delete objectHolder;
65         return nullptr;
66     }
67
68     return resource;
69 }
70
71 jobject CreateSimulatorResource(JNIEnv *env, SimulatorResourceSP resource)
72 {
73     if (!resource)
74         return nullptr;
75
76     if (SimulatorResource::Type::COLLECTION_RESOURCE == resource->getType())
77         return CreateCollectionResource(env, resource);
78     return CreateSingleResource(env, resource);
79 }
80
81 jobject CreateSimulatorResourceVector(JNIEnv *env, std::vector<SimulatorResourceSP> &resources)
82 {
83     if (!resources.size())
84         return nullptr;
85
86     jobject vectorObject = JniVector(env).toJava();
87     if (!vectorObject)
88         return nullptr;
89
90     static jmethodID addMethod = env->GetMethodID(gSimulatorClassRefs.vectorCls,
91                                  "add", "(Ljava/lang/Object;)Z");
92
93     for (auto &resource : resources)
94         env->CallBooleanMethod(vectorObject, addMethod, CreateSimulatorResource(env, resource));
95
96     return vectorObject;
97 }
98
99 jobject CreateSimulatorRemoteResource(JNIEnv *env, SimulatorRemoteResourceSP &remoteResource)
100 {
101     if (!remoteResource)
102         return nullptr;
103
104     auto *objectHolder = JniSharedObjectHolder<SimulatorRemoteResource>::create(remoteResource);
105     if (!objectHolder)
106         return nullptr;
107
108     static jmethodID simulatorRemoteResourceCtor = env->GetMethodID(
109                 gSimulatorClassRefs.simulatorRemoteResourceCls, "<init>", "(J)V");
110
111     jobject resource = (jobject) env->NewObject(gSimulatorClassRefs.simulatorRemoteResourceCls,
112                        simulatorRemoteResourceCtor, reinterpret_cast<jlong>(objectHolder));
113     if (!resource)
114     {
115         delete objectHolder;
116         return nullptr;
117     }
118
119     // Setting all required fields
120     static jfieldID uriID = env->GetFieldID(gSimulatorClassRefs.simulatorRemoteResourceCls,
121                                             "mUri", "Ljava/lang/String;");
122     static jfieldID connTypeID = env->GetFieldID(gSimulatorClassRefs.simulatorRemoteResourceCls,
123                                  "mConnType", "I");
124     static jfieldID hostID = env->GetFieldID(gSimulatorClassRefs.simulatorRemoteResourceCls,
125                              "mHost", "Ljava/lang/String;");
126     static jfieldID uidID = env->GetFieldID(gSimulatorClassRefs.simulatorRemoteResourceCls,
127                                             "mId", "Ljava/lang/String;");
128     static jfieldID resTypesID = env->GetFieldID(gSimulatorClassRefs.simulatorRemoteResourceCls,
129                                  "mResTypes", "Ljava/util/Vector;");
130     static jfieldID interfacesID = env->GetFieldID(gSimulatorClassRefs.simulatorRemoteResourceCls,
131                                    "mResInterfaces", "Ljava/util/Vector;");
132     static jfieldID isObservableID = env->GetFieldID(gSimulatorClassRefs.simulatorRemoteResourceCls,
133                                      "mIsObservable", "Z");
134
135     jstring uri = env->NewStringUTF(remoteResource->getURI().c_str());
136     env->SetObjectField(resource, uriID, uri);
137
138     jint connType = remoteResource->getConnectivityType();
139     env->SetIntField(resource, connTypeID, connType);
140
141     jstring host = env->NewStringUTF(remoteResource->getHost().c_str());
142     env->SetObjectField(resource, hostID, host);
143
144     jstring uid = env->NewStringUTF(remoteResource->getID().c_str());
145     env->SetObjectField(resource, uidID, uid);
146
147     std::vector<std::string> resourceTypes = remoteResource->getResourceTypes();
148     jobject ResTypes = JniVector(env).toJava(resourceTypes);
149     env->SetObjectField(resource, resTypesID, ResTypes);
150
151     std::vector<std::string> interfaceTypes = remoteResource->getInterface();
152     jobject resInterfaces = JniVector(env).toJava(interfaceTypes);
153     env->SetObjectField(resource, interfacesID, resInterfaces);
154
155     env->SetBooleanField(resource, isObservableID, remoteResource->isObservable());
156
157     return resource;
158 }