a5cf6e84965a1d1835ed7e7ae57e7fd25c22bf2a
[platform/upstream/iotivity.git] / service / resource-container / examples / android / RCSampleServerApp / app / src / main / java / org / iotivity / service / sample / container / ResourceContainer.java
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 package org.iotivity.service.sample.container;
22
23 import android.content.Context;
24 import android.content.pm.ApplicationInfo;
25 import android.content.pm.PackageManager;
26 import android.os.Message;
27
28 import android.os.PowerManager;
29 import android.util.Log;
30
31 import org.iotivity.service.resourcecontainer.RcsBundleInfo;
32 import org.iotivity.service.resourcecontainer.RcsResourceContainer;
33
34 import java.util.HashMap;
35 import java.util.Iterator;
36 import java.util.List;
37 import java.util.Map;
38
39 import dalvik.system.DexFile;
40
41 /**
42  * For calling the Resource Container APIs as per user selection on UI and for
43  * updating the UI
44  *
45  * It contains all the Resource Container APIs.
46  */
47 public class ResourceContainer {
48
49     private RcsResourceContainer             containerInstance;
50     public static String                     logMessage;
51
52     private static ResourceContainerActivity resourceContainerActivityInstance;
53     private static Message                   msg;
54     public static boolean                    startBundleFlag;
55     private static boolean                   isStarted     = false;
56     public static boolean                    isInitialized = false;
57     PowerManager pm = null;
58     PowerManager.WakeLock wl = null;
59
60
61
62     // constructor
63     public ResourceContainer() {
64         resourceContainerActivityInstance = ResourceContainerActivity
65                 .getResourceContainerActivityObj();
66         containerInstance = new RcsResourceContainer(
67                 resourceContainerActivityInstance.getApplicationContext());
68         pm = (PowerManager) resourceContainerActivityInstance.getApplicationContext().
69                 getSystemService(Context.POWER_SERVICE);
70     }
71
72     // Start Container
73     public void startContainer(String sdCardPath) {
74
75         String configFile = sdCardPath + "/ResourceContainerConfig.xml";
76         Log.i("startContainer : config path : ", configFile);
77
78         if (!isStarted) {
79             wl = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK,
80                     "ResourceContainer sample");
81             wl.acquire();
82             containerInstance.startContainer(configFile);
83             isStarted = true;
84             logMessage = "Container Started ";
85
86             ResourceContainerActivity.setMessageLog(logMessage);
87             msg = Message.obtain();
88             msg.what = 1;
89             resourceContainerActivityInstance.getHandler().sendMessage(msg);
90
91             msg = Message.obtain();
92             msg.what = 0;
93             resourceContainerActivityInstance.getHandler().sendMessage(msg);
94         }
95     }
96
97     // Stop Container
98     public void stopContainer() {
99
100         if (isStarted) {
101             containerInstance.stopContainer();
102             logMessage = "Container stopped";
103             isStarted = false;
104             wl.release();
105         } else {
106             logMessage = "Container not started";
107         }
108
109         ResourceContainerActivity.setMessageLog(logMessage);
110         msg = Message.obtain();
111         msg.what = 1;
112         resourceContainerActivityInstance.getHandler().sendMessage(msg);
113     }
114
115     // List Bundle Resources
116     public void listDIBundleResources() {
117
118         List<String> bundleResources = containerInstance
119                 .listBundleResources("oic.bundle.discomfortIndexSensor");
120         Iterator<String> it = bundleResources.iterator();
121         logMessage = "";
122
123         if (0 == bundleResources.size()) {
124             logMessage = logMessage + "No resource found in the bundle" + "\n";
125         } else {
126             while (it.hasNext()) {
127                 String element = (String) it.next();
128                 logMessage = logMessage + element + "\n";
129             }
130         }
131         ResourceContainerActivity.setMessageLog(logMessage);
132         msg = Message.obtain();
133         msg.what = 1;
134         resourceContainerActivityInstance.getHandler().sendMessage(msg);
135     }
136
137     // List Bundles
138     public void listBundles() {
139
140         List<RcsBundleInfo> bundleList = containerInstance.listBundles();
141         Iterator<RcsBundleInfo> it = bundleList.iterator();
142         int i = 0;
143         logMessage = "";
144         logMessage = logMessage + "size of bundleList : " + bundleList.size()
145                 + "\n\n";
146
147         while (it.hasNext()) {
148             i++;
149             RcsBundleInfo object = (RcsBundleInfo) it.next();
150             logMessage += "Bundle : " + i + " -: \n";
151             logMessage += "ID : " + object.getID() + "\n";
152             logMessage += "Lib Path: " + object.getPath() + "\n";
153             if (!(object.getVersion().equalsIgnoreCase("")))
154                 logMessage += "version : " + object.getVersion() + "\n\n";
155             else
156                 logMessage += "\n";
157         }
158         ResourceContainerActivity.setMessageLog(logMessage);
159         msg = Message.obtain();
160         msg.what = 1;
161         resourceContainerActivityInstance.getHandler().sendMessage(msg);
162     }
163
164     // Add BMI Bundles
165     public void addBMIBundle() {
166         Map<String, String> bundleParams = null;
167         List<RcsBundleInfo> bundleList = containerInstance.listBundles();
168         if (1 < bundleList.size()) {
169             logMessage = "Bundle already added" + "\n";
170
171         } else {
172             for (int i = 0; i < 2; i++) {
173                 containerInstance
174                         .addBundle(
175                                 "oic.bundle.BMISensor",
176                                 "xyz",
177                                 "data/data/org.iotivity.service.sample.server/files/libBMISensorBundle.so",
178                                 "bmisensor", bundleParams);
179             }
180
181             logMessage = "bundle to add : " + "\n";
182             logMessage = logMessage + "ID :" + "oic.bundle.BMISensor" + "\n";
183             logMessage = logMessage + "Uri: " + "xyz" + "\n";
184             logMessage = logMessage
185                     + "Path : "
186                     + "data/data/org.iotivity.service.sample.server/files/libBMISensorBundle.so"
187                     + "\n\n";
188             logMessage = logMessage + "bundle added successfully" + "\n";
189         }
190
191         ResourceContainerActivity.setMessageLog(logMessage);
192         msg = Message.obtain();
193         msg.what = 1;
194         resourceContainerActivityInstance.getHandler().sendMessage(msg);
195     }
196
197     // Remove Bundle BMI
198     public void removeBMIBundle() {
199
200         List<RcsBundleInfo> bundleList = containerInstance.listBundles();
201         if (1 == bundleList.size()) {
202             logMessage = "BMI Bundle not added" + "\n";
203
204         } else {
205
206             for (int i = 0; i < 2; i++) {
207                 containerInstance.removeBundle("oic.bundle.BMISensor");
208             }
209             startBundleFlag = false;
210             logMessage = "bundle to remove : " + "\n";
211             logMessage = logMessage + "ID :" + "oic.bundle.BMISensor" + "\n\n";
212             logMessage = logMessage + " bundle removed  successfully" + "\n";
213         }
214         ResourceContainerActivity.setMessageLog(logMessage);
215         msg = Message.obtain();
216         msg.what = 1;
217         resourceContainerActivityInstance.getHandler().sendMessage(msg);
218     }
219
220     // Start Bundle BMI
221     public void startBMIBundle() {
222
223         List<RcsBundleInfo> bundleList = containerInstance.listBundles();
224         if (1 == bundleList.size()) {
225             logMessage = "BMI bundle not added" + "\n";
226         } else if (true == startBundleFlag) {
227             logMessage = "Bundle already started" + "\n";
228         } else {
229             startBundleFlag = true;
230             containerInstance.startBundle("oic.bundle.BMISensor");
231
232             logMessage = " bundle to start" + "\n";
233             logMessage += " ID : oic.bundle.BMISensor" + "\n\n";
234             logMessage += " bundle started successfully" + "\n";
235         }
236         ResourceContainerActivity.setMessageLog(logMessage);
237         msg = Message.obtain();
238         msg.what = 1;
239         resourceContainerActivityInstance.getHandler().sendMessage(msg);
240     }
241
242     // Stop Bundle BMI
243     public void stopBMIBundle() {
244
245         if (false == startBundleFlag) {
246             logMessage = "Bundle is not Started" + "\n";
247         } else {
248
249             List<RcsBundleInfo> bundleList = containerInstance.listBundles();
250             if (0 == bundleList.size()) {
251                 logMessage = "No bundle to Stop" + "\n";
252
253             } else {
254                 containerInstance.stopBundle("oic.bundle.BMISensor");
255                 startBundleFlag = false;
256                 logMessage = " bundle to stop" + "\n";
257                 logMessage = logMessage + " ID : oic.bundle.BMISensor" + "\n\n";
258                 logMessage = logMessage + " bundle stopped successfully" + "\n";
259             }
260         }
261
262         ResourceContainerActivity.setMessageLog(logMessage);
263         msg = Message.obtain();
264         msg.what = 1;
265         resourceContainerActivityInstance.getHandler().sendMessage(msg);
266     }
267
268     // Add Resource Configuration DI
269     public void addDIResourceConfig() {
270
271         List<RcsBundleInfo> bundleList = containerInstance.listBundles();
272         List<String> bundleResources = containerInstance
273                 .listBundleResources("oic.bundle.discomfortIndexSensor");
274
275         if (0 == bundleList.size()) {
276             logMessage = "No bundle found" + "\n";
277         } else if ((0 == bundleList.size()) && (0 == bundleResources.size())) {
278
279             logMessage = "No bundle found" + "\n";
280         } else {
281
282             Map<String, String> params = new HashMap<String, String>();
283             params.put("resourceType", "oic.r.sensor");
284             params.put("address",
285                     "http://192.168.0.2/api/newdeveloper/sensor/22");
286             containerInstance.addResourceConfig(
287                     "oic.bundle.discomfortIndexSensor", "", params);
288             logMessage = "resource added successfully" + "\n";
289         }
290         ResourceContainerActivity.setMessageLog(logMessage);
291         msg = Message.obtain();
292         msg.what = 1;
293         resourceContainerActivityInstance.getHandler().sendMessage(msg);
294     }
295
296     // Remove Resource Configuration DI
297     public void removeDIResourceConfig() {
298
299         List<String> bundleResources = containerInstance
300                 .listBundleResources("oic.bundle.discomfortIndexSensor");
301         if (bundleResources.size() >= 1) {
302             String element = bundleResources.get(0);
303             containerInstance.removeResourceConfig(
304                     "oic.bundle.discomfortIndexSensor", element);
305             Message msg;
306             logMessage = "resource removed successfully: \n" + element + "\n";
307             ResourceContainerActivity.setMessageLog(logMessage);
308             msg = Message.obtain();
309             msg.what = 1;
310             resourceContainerActivityInstance.getHandler().sendMessage(msg);
311         } else {
312             logMessage = "No resource to remove" + "\n";
313             ResourceContainerActivity.setMessageLog(logMessage);
314             msg = Message.obtain();
315             msg.what = 1;
316             resourceContainerActivityInstance.getHandler().sendMessage(msg);
317         }
318     }
319
320     // Add Resource Configuration BMI
321     public void addBMIResourceConfig() {
322
323         if (false == startBundleFlag) {
324             logMessage = "Bundle is not started" + "\n";
325         } else {
326             List<RcsBundleInfo> bundleList = containerInstance.listBundles();
327             List<String> bundleResources = containerInstance
328                     .listBundleResources("oic.bundle.BMISensor");
329
330             if (0 == bundleList.size()) {
331                 logMessage = "No bundle found" + "\n";
332             } else if ((0 == bundleList.size())
333                     && (0 == bundleResources.size())) {
334
335                 logMessage = "No bundle found" + "\n";
336             } else {
337
338                 Map<String, String> params = new HashMap<String, String>();
339                 params.put("resourceType", "oic.r.sensor");
340                 params.put("address",
341                         "http://192.168.0.2/api/newdeveloper/sensor/22");
342                 containerInstance.addResourceConfig("oic.bundle.BMISensor", "",
343                         params);
344                 logMessage = "resource added successfully" + "\n";
345             }
346         }
347         ResourceContainerActivity.setMessageLog(logMessage);
348         msg = Message.obtain();
349         msg.what = 1;
350         resourceContainerActivityInstance.getHandler().sendMessage(msg);
351     }
352
353     // Remove Resource Configuration BMI
354     public void removeBMIResourceConfig() {
355
356         if (false == startBundleFlag) {
357             logMessage = "Bundle is not started" + "\n";
358
359         } else {
360             List<String> bundleResources = containerInstance
361                     .listBundleResources("oic.bundle.BMISensor");
362             if (bundleResources.size() >= 1) {
363                 String element = bundleResources.get(0);
364                 containerInstance.removeResourceConfig("oic.bundle.BMISensor",
365                         element);
366                 Message msg;
367                 logMessage = "resource removed successfully: \n" + element
368                         + "\n";
369
370             } else {
371                 logMessage = "No resource to remove" + "\n";
372             }
373         }
374         ResourceContainerActivity.setMessageLog(logMessage);
375         msg = Message.obtain();
376         msg.what = 1;
377         resourceContainerActivityInstance.getHandler().sendMessage(msg);
378     }
379
380     // List Bundle Resources
381     public void listBMIBundleResources() {
382
383         if (false == startBundleFlag) {
384             logMessage = "Bundle is not started" + "\n";
385
386         } else {
387             List<String> bundleResources = containerInstance
388                     .listBundleResources("oic.bundle.BMISensor");
389             Iterator<String> it = bundleResources.iterator();
390             logMessage = "";
391
392             if (0 == bundleResources.size()) {
393                 logMessage = logMessage + "No resource found in the bundle"
394                         + "\n";
395             } else {
396                 while (it.hasNext()) {
397                     String element = (String) it.next();
398                     logMessage = logMessage + element + "\n";
399                 }
400             }
401
402         }
403         ResourceContainerActivity.setMessageLog(logMessage);
404         msg = Message.obtain();
405         msg.what = 1;
406         resourceContainerActivityInstance.getHandler().sendMessage(msg);
407     }
408
409     public void addAndroidResource(){
410         logMessage = "Add android resource " + "\n";
411         ResourceContainerActivity.setMessageLog(logMessage);
412         msg = Message.obtain();
413         msg.what = 1;
414         resourceContainerActivityInstance.getHandler().sendMessage(msg);
415         //containerInstance.registerAndroidResource("testBundle", testResource);
416     }
417 }