iotivity 0.9.0
[platform/upstream/iotivity.git] / service / soft-sensor-manager / SampleApp / tizen / SSMTesterApp / oic-sample / src / oicapp-test.cpp
1 /*
2  * Copyright (c) 2014 Samsung Electronics, Inc.
3  * All rights reserved.
4  *
5  * This software is a confidential and proprietary information
6  * of Samsung Electronics, Inc. ("Confidential Information").  You
7  * shall not disclose such Confidential Information and shall use
8  * it only in accordance with the terms of the license agreement
9  * you entered into with Samsung Electronics.
10  */
11
12 #include <appcore-efl.h>
13 #include <Ecore_X.h>
14 #include <efl_assist.h>
15
16 #include <string>
17 #include <sstream>
18
19 #include "oicapp-test.h"
20 #include "oicapp-utils.h"
21
22 #include "SSMInterface.h"
23
24 using namespace OIC;
25
26 static oicapp_data *g_ad = NULL;
27
28 int g_CQID = 9999;
29
30 class CQueryEngineEvent : public IQueryEngineEvent
31 {
32     public:
33
34         SSMRESULT onQueryEngineEvent(int cqid, IDataReader *pResult)
35         {
36             std::stringstream sstream;
37
38             int     dataCount = 0;
39             IModelData      *pModelData = NULL;
40             std::vector<std::string>        affectedModels;
41
42             pResult->getAffectedModels(&affectedModels);
43
44             for (std::vector<std::string>::iterator itor = affectedModels.begin();
45                  itor != affectedModels.end(); ++itor)
46             {
47                 printf("Printing %s\n", itor->c_str());
48                 pResult->getModelDataCount(*itor, &dataCount);
49                 for (int i = 0; i < dataCount; i++)
50                 {
51                     pResult->getModelData(*itor, i, &pModelData);
52                     printf("dataId: %d\n", pModelData->getDataId());
53                     for (int j = 0; j < pModelData->getPropertyCount(); j++)
54                     {
55                         sstream << "Type: " << pModelData->getPropertyName(j).c_str() <<
56                                 " Value: " << pModelData->getPropertyValue(j).c_str() << "<br>";
57                     }
58                 }
59             }
60
61             sstream << std::ends;
62
63             oicapp_util_put_msg(g_ad, sstream.str().c_str());
64
65             return SSM_S_OK;
66         }
67 };
68
69 CQueryEngineEvent   *g_SSMClientListener = new CQueryEngineEvent();
70 SSMInterface        *g_SSMClient = new SSMInterface();
71
72 static Elm_Object_Item *oicapp_append_separator(Evas_Object *genlist,
73         oicapp_data *ad)
74 {
75     Elm_Object_Item *item = NULL;
76
77     item = elm_genlist_item_append(genlist, &ad->itc_seperator, NULL, NULL,
78                                    ELM_GENLIST_ITEM_NONE, NULL, NULL);
79     //elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
80
81     return item;
82 }
83
84 static void _win_del(void *data, Evas_Object *obj, void *event)
85 {
86     DBG("test _win_del()");
87
88     elm_exit();
89 }
90
91 static Evas_Object *oicapp_create_win(const char *name)
92 {
93     Evas_Object *eo;
94     int w, h;
95
96     eo = elm_win_add(NULL, name, ELM_WIN_BASIC);
97     if (eo)
98     {
99         elm_win_title_set(eo, name);
100         elm_win_borderless_set(eo, EINA_TRUE);
101         evas_object_smart_callback_add(eo, "delete,request", _win_del, NULL);
102         ecore_x_window_size_get(ecore_x_window_root_first_get(), &w, &h);
103         evas_object_resize(eo, w, h);
104         elm_win_indicator_mode_set(eo, ELM_WIN_INDICATOR_SHOW);
105         elm_win_indicator_opacity_set(eo, ELM_WIN_INDICATOR_OPAQUE);
106     }
107
108     evas_object_show(eo);
109
110     return eo;
111 }
112
113 static Evas_Object *oicapp_create_bg(Evas_Object *parent)
114 {
115     Evas_Object *bg;
116
117     bg = elm_bg_add(parent);
118     evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
119     elm_win_resize_object_add(parent, bg);
120     //elm_object_part_content_set(parent, "elm.swallow.bg", bg);
121     evas_object_show(bg);
122
123     return bg;
124 }
125
126 static Evas_Object *oicapp_create_base_layout(Evas_Object *parent)
127 {
128     Evas_Object *base;
129
130     base = elm_layout_add(parent);
131     elm_layout_theme_set(base, "layout", "application", "default");
132     evas_object_size_hint_weight_set(base, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
133     evas_object_show(base);
134
135     return base;
136 }
137
138 void __gl_realized_cb(void *data, Evas_Object *obj, void *event_info)
139 {
140     Elm_Object_Item *item = (Elm_Object_Item *)event_info;
141     /*
142         list_item = elm_object_item_data_get(item);
143         if (NULL == list_item)
144         {
145             elm_object_item_signal_emit(item, "elm,state,center", "");
146             return;
147         }
148         if (list_item->group_style == OICAPP_GENLIST_GRP_TOP)
149             elm_object_item_signal_emit(item, "elm,state,top", "");
150         else if (list_item->group_style == OICAPP_GENLIST_GRP_CENTER)
151             elm_object_item_signal_emit(item, "elm,state,center", "");
152         else if (list_item->group_style == OICAPP_GENLIST_GRP_BOTTOM)
153             elm_object_item_signal_emit(item, "elm,state,bottom", "");
154         else
155     */
156     elm_object_item_signal_emit(item, "elm,state,normal", "");
157 }
158
159
160 static Evas_Object *oicapp_create_genlist(Evas_Object *parent)
161 {
162     Evas_Object *genlist;
163
164     genlist = elm_genlist_add(parent);
165     if (NULL == genlist)
166     {
167         ERR("elm_genlist_add() Fail");
168         return NULL;
169     }
170
171     elm_object_style_set(genlist, "dialogue");
172     elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
173     evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
174     evas_object_show(genlist);
175
176     evas_object_smart_callback_add(genlist, "realized", __gl_realized_cb, NULL);
177
178     return genlist;
179 }
180
181 static Elm_Object_Item *_gl_append_item(oicapp_data *ad, Elm_Genlist_Item_Class *itc)
182 {
183     Elm_Object_Item *item;
184
185     item = elm_genlist_item_append(ad->genlist, itc, ad, NULL,
186                                    ELM_GENLIST_ITEM_NONE, NULL, NULL);
187
188     elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
189
190     return item;
191 }
192
193 static void oicapp_append_contents(oicapp_data *ad)
194 {
195     Elm_Object_Item *item;
196     /*
197     oicapp_append_separator(ad->genlist, ad);
198
199     _gl_append_item(ad, &ad->itc_edit);
200
201     oicapp_append_separator(ad->genlist, ad);
202
203     _gl_append_item(ad, &ad->itc_btn);
204
205     oicapp_append_separator(ad->genlist, ad);
206
207     item = _gl_append_item(ad, &ad->itc_multiline);
208     ad->item_multiline = item;
209
210     oicapp_append_separator(ad->genlist, ad);
211     */
212     oicapp_append_separator(ad->genlist, ad);
213
214     elm_genlist_item_append(ad->genlist, &ad->itc_edit, ad, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
215
216     oicapp_append_separator(ad->genlist, ad);
217
218     elm_genlist_item_append(ad->genlist, &ad->itc_btn, ad, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
219
220     oicapp_append_separator(ad->genlist, ad);
221
222     oicapp_append_separator(ad->genlist, ad);
223
224     oicapp_append_separator(ad->genlist, ad);
225
226     item = _gl_append_item(ad, &ad->itc_multiline);
227
228     ad->item_multiline = item;
229
230     oicapp_append_separator(ad->genlist, ad);
231 }
232
233 static Evas_Object *oicapp_create_conform(Evas_Object *win)
234 {
235     Evas_Object *conform = NULL;
236     conform = elm_conformant_add(win);
237
238     evas_object_size_hint_weight_set(conform, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
239     elm_win_resize_object_add(win, conform);
240     evas_object_show(conform);
241
242     Evas_Object *bg_indicator = elm_bg_add(conform);
243     elm_object_style_set(bg_indicator, "indicator/headerbg");
244     elm_object_part_content_set(conform, "elm.swallow.indicator_bg", bg_indicator);
245     evas_object_show(bg_indicator);
246
247     return conform;
248 }
249
250 static Eina_Bool _back_cb(void *data, Elm_Object_Item *item)
251 {
252     elm_exit();
253
254     return EINA_FALSE;
255 }
256
257 static char *_gl_multiline_text_get(void *data, Evas_Object *obj, const char *part)
258 {
259     oicapp_data *ad = (oicapp_data *)data;
260
261     if (ad->output_msg)
262         return strdup(ad->output_msg);
263     else
264         return strdup("");
265 }
266
267 static void _btn_clicked(void *data, Evas_Object *obj, void *event_info)
268 {
269     oicapp_data *ad = (oicapp_data *)data;
270
271     std::string str = std::string(ad->input_msg);
272
273     std::string strGT = "&gt;";
274
275     std::string strLT = "&lt;";
276
277     std::size_t foundGT = str.find(strGT);
278
279     std::size_t foundLT = str.find(strLT);
280
281     std::stringstream sstream;
282
283     if (foundGT != std::string::npos)
284     {
285         str.replace(foundGT, strGT.length(), ">");
286     }
287
288     if (foundLT != std::string::npos)
289     {
290         str.replace(foundLT, strLT.length(), "<");
291     }
292
293     g_SSMClient->registerQuery(str, g_SSMClientListener, g_CQID);
294
295     sstream << "Query executed! cqid = " << g_CQID << std::ends;
296
297     oicapp_util_put_msg(ad, sstream.str().c_str());
298
299     ERR("button clicked(%s)", ad->input_msg);
300 }
301
302 static Evas_Object *_gl_btn_content_get(void *data, Evas_Object *obj,
303                                         const char *part)
304 {
305     Evas_Object *button;
306     oicapp_data *ad = (oicapp_data *)data;
307
308     button = elm_button_add(obj);
309     //elm_object_style_set(button, "");
310     elm_object_part_text_set(button, NULL, "Send Query");
311     evas_object_propagate_events_set(button, EINA_FALSE);
312     evas_object_smart_callback_add(button, "clicked", _btn_clicked, ad);
313
314     return button;
315 }
316
317 static void _edit_unfocused(void *data, Evas_Object *obj, void *event_info)
318 {
319     oicapp_data *ad = (oicapp_data *)data;
320
321     ad->input_msg = strdup(elm_entry_entry_get(obj));
322
323     DBG("Clicked : %s", ad->input_msg);
324
325 }
326 static Evas_Object *_gl_edit_content_get(void *data, Evas_Object *obj,
327         const char *part)
328 {
329     oicapp_data *ad = (oicapp_data *)data;
330
331     Evas_Object *entry = ea_editfield_add(obj, EA_EDITFIELD_MULTILINE);
332     ea_editfield_clear_button_disabled_set(entry, EINA_TRUE);
333     elm_entry_entry_set(entry, ad->input_msg);
334     evas_object_smart_callback_add(entry, "unfocused", _edit_unfocused, ad);
335
336     return entry;
337 }
338
339 static char *_item_Text_get(void *data, Evas_Object *obj, const char *part)
340 {
341     char *buf =
342         "subscribe Device.DiscomfortIndexSensor if Device.DiscomfortIndexSensor.discomfortIndex > 0";
343
344     return strdup(buf);
345 }
346
347 static inline void oicapp_init_itcs(oicapp_data *ad)
348 {
349     ad->itc_seperator.item_style = "dialogue/separator";
350     ad->itc_seperator.func.text_get = NULL;
351     ad->itc_seperator.func.content_get = NULL;
352     ad->itc_seperator.func.state_get = NULL;
353     ad->itc_seperator.func.del = NULL;
354
355     ad->itc_edit.item_style = "dialogue/editfield";
356     ad->itc_edit.func.text_get = _item_Text_get;
357     ad->itc_edit.func.content_get = _gl_edit_content_get;
358     ad->itc_edit.func.state_get = NULL;
359     ad->itc_edit.func.del = NULL;
360
361     ad->itc_btn.item_style = "dialogue/1icon";
362     ad->itc_btn.func.text_get = NULL;
363     ad->itc_btn.func.content_get = _gl_btn_content_get;
364     ad->itc_btn.func.state_get = NULL;
365     ad->itc_btn.func.del = NULL;
366
367     ad->itc_multiline.item_style = "multiline/1text";
368     ad->itc_multiline.func.text_get = _gl_multiline_text_get;
369     ad->itc_multiline.func.content_get = NULL;
370     ad->itc_multiline.func.state_get = NULL;
371     ad->itc_multiline.func.del = NULL;
372 }
373
374 static int oicapp_create(void *data)
375 {
376     oicapp_data *ad = (oicapp_data *)data;
377     Elm_Object_Item *it;
378
379     g_ad = (oicapp_data *)data;
380
381     oicapp_init_itcs(ad);
382
383     /* create window */
384     ad->win = oicapp_create_win(PACKAGE);
385     if (NULL == ad->win)
386         return -1;
387
388     ad->bg = oicapp_create_bg(ad->win);
389     if (NULL == ad->bg)
390         return -1;
391
392     ad->conform = oicapp_create_conform(ad->win);
393     if (NULL == ad->conform)
394         return -1;
395
396     /* create layout */
397     ad->base = oicapp_create_base_layout(ad->conform);
398     if (NULL == ad->base)
399         return -1;
400     elm_object_content_set(ad->conform, ad->base);
401
402     ad->navi = elm_naviframe_add(ad->base);
403     elm_object_part_content_set(ad->base, "elm.swallow.content", ad->navi);
404     ea_object_event_callback_add(ad->navi, EA_CALLBACK_BACK, ea_naviframe_back_cb, NULL);
405
406     ad->genlist = oicapp_create_genlist(ad->navi);
407
408     it = elm_naviframe_item_push(ad->navi, "SSM Tester", NULL, NULL, ad->genlist, NULL);
409     elm_naviframe_item_pop_cb_set(it, _back_cb, ad);
410
411     ad->ip_addr = oicapp_util_wifi();
412     if (NULL == ad->ip_addr)
413     {
414         ERR("wifi is not connected");
415         oicapp_fail_popup(ad, (char *)"Error", (char *)"No WIFI connection", 3);
416     }
417     else
418     {
419         INFO("IP Address = %s", ad->ip_addr);
420     }
421
422     oicapp_append_contents(ad);
423
424     return 0;
425 }
426
427 static int oicapp_terminate(void *data)
428 {
429     oicapp_data *ad = (oicapp_data *)data;
430
431     if (g_CQID != 9999)
432         g_SSMClient->unregisterQuery(g_CQID);
433
434     if (ad->win)
435         evas_object_del(ad->win);
436
437     free(ad->ip_addr);
438     free(ad->output_msg);
439     return 0;
440 }
441
442 static int oicapp_pause(void *data)
443 {
444     return 0;
445 }
446
447 static int oicapp_resume(void *data)
448 {
449     /*
450     static int tmpCnt = 0;
451     oicapp_data *ad = (oicapp_data *)data;
452     char buf[1024];
453
454     snprintf(buf, sizeof(buf), "Test %d", tmpCnt++);
455
456     oicapp_util_put_msg(ad, buf);
457     */
458     return 0;
459 }
460
461 static int oicapp_reset(bundle *b, void *data)
462 {
463     oicapp_data *ad = (oicapp_data *)data;
464
465     if (ad->win)
466         elm_win_activate(ad->win);
467
468     return 0;
469 }
470
471 int main(int argc, char *argv[])
472 {
473     oicapp_data ad;
474
475     /*
476     struct appcore_ops ops = {
477         .create = oicapp_create,
478         .terminate = oicapp_terminate,
479         .pause = oicapp_pause,
480         .resume = oicapp_resume,
481         .reset = oicapp_reset,
482     };*/
483
484     appcore_ops ops;
485
486     ops.create = oicapp_create;
487     ops.terminate = oicapp_terminate;
488     ops.pause = oicapp_pause;
489     ops.resume = oicapp_resume;
490     ops.reset = oicapp_reset;
491
492     memset(&ad, 0x0, sizeof(oicapp_data));
493     ops.data = &ad;
494
495     return appcore_efl_main(PACKAGE, &argc, &argv, &ops);
496 }
497