Imported Upstream version 0.9.2
[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
71 static Elm_Object_Item *oicapp_append_separator(Evas_Object *genlist,
72         oicapp_data *ad)
73 {
74     Elm_Object_Item *item = NULL;
75
76     item = elm_genlist_item_append(genlist, &ad->itc_seperator, NULL, NULL,
77                                    ELM_GENLIST_ITEM_NONE, NULL, NULL);
78     //elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
79
80     return item;
81 }
82
83 static void _win_del(void *data, Evas_Object *obj, void *event)
84 {
85     DBG("test _win_del()");
86
87     elm_exit();
88 }
89
90 static Evas_Object *oicapp_create_win(const char *name)
91 {
92     Evas_Object *eo;
93     int w, h;
94
95     eo = elm_win_add(NULL, name, ELM_WIN_BASIC);
96     if (eo)
97     {
98         elm_win_title_set(eo, name);
99         elm_win_borderless_set(eo, EINA_TRUE);
100         evas_object_smart_callback_add(eo, "delete,request", _win_del, NULL);
101         ecore_x_window_size_get(ecore_x_window_root_first_get(), &w, &h);
102         evas_object_resize(eo, w, h);
103         elm_win_indicator_mode_set(eo, ELM_WIN_INDICATOR_SHOW);
104         elm_win_indicator_opacity_set(eo, ELM_WIN_INDICATOR_OPAQUE);
105     }
106
107     evas_object_show(eo);
108
109     return eo;
110 }
111
112 static Evas_Object *oicapp_create_bg(Evas_Object *parent)
113 {
114     Evas_Object *bg;
115
116     bg = elm_bg_add(parent);
117     evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
118     elm_win_resize_object_add(parent, bg);
119     //elm_object_part_content_set(parent, "elm.swallow.bg", bg);
120     evas_object_show(bg);
121
122     return bg;
123 }
124
125 static Evas_Object *oicapp_create_base_layout(Evas_Object *parent)
126 {
127     Evas_Object *base;
128
129     base = elm_layout_add(parent);
130     elm_layout_theme_set(base, "layout", "application", "default");
131     evas_object_size_hint_weight_set(base, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
132     evas_object_show(base);
133
134     return base;
135 }
136
137 void __gl_realized_cb(void *data, Evas_Object *obj, void *event_info)
138 {
139     Elm_Object_Item *item = (Elm_Object_Item *)event_info;
140     /*
141         list_item = elm_object_item_data_get(item);
142         if (NULL == list_item)
143         {
144             elm_object_item_signal_emit(item, "elm,state,center", "");
145             return;
146         }
147         if (list_item->group_style == OICAPP_GENLIST_GRP_TOP)
148             elm_object_item_signal_emit(item, "elm,state,top", "");
149         else if (list_item->group_style == OICAPP_GENLIST_GRP_CENTER)
150             elm_object_item_signal_emit(item, "elm,state,center", "");
151         else if (list_item->group_style == OICAPP_GENLIST_GRP_BOTTOM)
152             elm_object_item_signal_emit(item, "elm,state,bottom", "");
153         else
154     */
155     elm_object_item_signal_emit(item, "elm,state,normal", "");
156 }
157
158
159 static Evas_Object *oicapp_create_genlist(Evas_Object *parent)
160 {
161     Evas_Object *genlist;
162
163     genlist = elm_genlist_add(parent);
164     if (NULL == genlist)
165     {
166         ERR("elm_genlist_add() Fail");
167         return NULL;
168     }
169
170     elm_object_style_set(genlist, "dialogue");
171     elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
172     evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
173     evas_object_show(genlist);
174
175     evas_object_smart_callback_add(genlist, "realized", __gl_realized_cb, NULL);
176
177     return genlist;
178 }
179
180 static Elm_Object_Item *_gl_append_item(oicapp_data *ad, Elm_Genlist_Item_Class *itc)
181 {
182     Elm_Object_Item *item;
183
184     item = elm_genlist_item_append(ad->genlist, itc, ad, NULL,
185                                    ELM_GENLIST_ITEM_NONE, NULL, NULL);
186
187     elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
188
189     return item;
190 }
191
192 static void oicapp_append_contents(oicapp_data *ad)
193 {
194     Elm_Object_Item *item;
195     /*
196     oicapp_append_separator(ad->genlist, ad);
197
198     _gl_append_item(ad, &ad->itc_edit);
199
200     oicapp_append_separator(ad->genlist, ad);
201
202     _gl_append_item(ad, &ad->itc_btn);
203
204     oicapp_append_separator(ad->genlist, ad);
205
206     item = _gl_append_item(ad, &ad->itc_multiline);
207     ad->item_multiline = item;
208
209     oicapp_append_separator(ad->genlist, ad);
210     */
211     oicapp_append_separator(ad->genlist, ad);
212
213     elm_genlist_item_append(ad->genlist, &ad->itc_edit, ad, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
214
215     oicapp_append_separator(ad->genlist, ad);
216
217     elm_genlist_item_append(ad->genlist, &ad->itc_btn, ad, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
218
219     oicapp_append_separator(ad->genlist, ad);
220
221     oicapp_append_separator(ad->genlist, ad);
222
223     oicapp_append_separator(ad->genlist, ad);
224
225     item = _gl_append_item(ad, &ad->itc_multiline);
226
227     ad->item_multiline = item;
228
229     oicapp_append_separator(ad->genlist, ad);
230 }
231
232 static Evas_Object *oicapp_create_conform(Evas_Object *win)
233 {
234     Evas_Object *conform = NULL;
235     conform = elm_conformant_add(win);
236
237     evas_object_size_hint_weight_set(conform, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
238     elm_win_resize_object_add(win, conform);
239     evas_object_show(conform);
240
241     Evas_Object *bg_indicator = elm_bg_add(conform);
242     elm_object_style_set(bg_indicator, "indicator/headerbg");
243     elm_object_part_content_set(conform, "elm.swallow.indicator_bg", bg_indicator);
244     evas_object_show(bg_indicator);
245
246     return conform;
247 }
248
249 static Eina_Bool _back_cb(void *data, Elm_Object_Item *item)
250 {
251     elm_exit();
252
253     return EINA_FALSE;
254 }
255
256 static char *_gl_multiline_text_get(void *data, Evas_Object *obj, const char *part)
257 {
258     oicapp_data *ad = (oicapp_data *)data;
259
260     if (ad->output_msg)
261         return strdup(ad->output_msg);
262     else
263         return strdup("");
264 }
265
266 static void _btn_clicked(void *data, Evas_Object *obj, void *event_info)
267 {
268     oicapp_data *ad = (oicapp_data *)data;
269
270     std::string str = std::string(ad->input_msg);
271
272     std::string strGT = "&gt;";
273
274     std::string strLT = "&lt;";
275
276     std::size_t foundGT = str.find(strGT);
277
278     std::size_t foundLT = str.find(strLT);
279
280     std::stringstream sstream;
281
282     if (foundGT != std::string::npos)
283     {
284         str.replace(foundGT, strGT.length(), ">");
285     }
286
287     if (foundLT != std::string::npos)
288     {
289         str.replace(foundLT, strLT.length(), "<");
290     }
291
292     RegisterQuery(str, g_SSMClientListener, g_CQID);
293
294     sstream << "Query executed! cqid = " << g_CQID << std::ends;
295
296     oicapp_util_put_msg(ad, sstream.str().c_str());
297
298     ERR("button clicked(%s)", ad->input_msg);
299 }
300
301 static Evas_Object *_gl_btn_content_get(void *data, Evas_Object *obj,
302                                         const char *part)
303 {
304     Evas_Object *button;
305     oicapp_data *ad = (oicapp_data *)data;
306
307     button = elm_button_add(obj);
308     //elm_object_style_set(button, "");
309     elm_object_part_text_set(button, NULL, "Send Query");
310     evas_object_propagate_events_set(button, EINA_FALSE);
311     evas_object_smart_callback_add(button, "clicked", _btn_clicked, ad);
312
313     return button;
314 }
315
316 static void _edit_unfocused(void *data, Evas_Object *obj, void *event_info)
317 {
318     oicapp_data *ad = (oicapp_data *)data;
319
320     ad->input_msg = strdup(elm_entry_entry_get(obj));
321
322     DBG("Clicked : %s", ad->input_msg);
323
324 }
325 static Evas_Object *_gl_edit_content_get(void *data, Evas_Object *obj,
326         const char *part)
327 {
328     oicapp_data *ad = (oicapp_data *)data;
329
330     Evas_Object *entry = ea_editfield_add(obj, EA_EDITFIELD_MULTILINE);
331     ea_editfield_clear_button_disabled_set(entry, EINA_TRUE);
332     elm_entry_entry_set(entry, ad->input_msg);
333     evas_object_smart_callback_add(entry, "unfocused", _edit_unfocused, ad);
334
335     return entry;
336 }
337
338 static char *_item_Text_get(void *data, Evas_Object *obj, const char *part)
339 {
340     char *buf =
341         "subscribe Device.DiscomfortIndexSensor if Device.DiscomfortIndexSensor.discomfortIndex > 0";
342
343     return strdup(buf);
344 }
345
346 static inline void oicapp_init_itcs(oicapp_data *ad)
347 {
348     ad->itc_seperator.item_style = "dialogue/separator";
349     ad->itc_seperator.func.text_get = NULL;
350     ad->itc_seperator.func.content_get = NULL;
351     ad->itc_seperator.func.state_get = NULL;
352     ad->itc_seperator.func.del = NULL;
353
354     ad->itc_edit.item_style = "dialogue/editfield";
355     ad->itc_edit.func.text_get = _item_Text_get;
356     ad->itc_edit.func.content_get = _gl_edit_content_get;
357     ad->itc_edit.func.state_get = NULL;
358     ad->itc_edit.func.del = NULL;
359
360     ad->itc_btn.item_style = "dialogue/1icon";
361     ad->itc_btn.func.text_get = NULL;
362     ad->itc_btn.func.content_get = _gl_btn_content_get;
363     ad->itc_btn.func.state_get = NULL;
364     ad->itc_btn.func.del = NULL;
365
366     ad->itc_multiline.item_style = "multiline/1text";
367     ad->itc_multiline.func.text_get = _gl_multiline_text_get;
368     ad->itc_multiline.func.content_get = NULL;
369     ad->itc_multiline.func.state_get = NULL;
370     ad->itc_multiline.func.del = NULL;
371 }
372
373 static int oicapp_create(void *data)
374 {
375     oicapp_data *ad = (oicapp_data *)data;
376     Elm_Object_Item *it;
377
378     g_ad = (oicapp_data *)data;
379
380     oicapp_init_itcs(ad);
381
382     /* create window */
383     ad->win = oicapp_create_win(PACKAGE);
384     if (NULL == ad->win)
385         return -1;
386
387     ad->bg = oicapp_create_bg(ad->win);
388     if (NULL == ad->bg)
389         return -1;
390
391     ad->conform = oicapp_create_conform(ad->win);
392     if (NULL == ad->conform)
393         return -1;
394
395     /* create layout */
396     ad->base = oicapp_create_base_layout(ad->conform);
397     if (NULL == ad->base)
398         return -1;
399     elm_object_content_set(ad->conform, ad->base);
400
401     ad->navi = elm_naviframe_add(ad->base);
402     elm_object_part_content_set(ad->base, "elm.swallow.content", ad->navi);
403     ea_object_event_callback_add(ad->navi, EA_CALLBACK_BACK, ea_naviframe_back_cb, NULL);
404
405     ad->genlist = oicapp_create_genlist(ad->navi);
406
407     it = elm_naviframe_item_push(ad->navi, "SSM Tester", NULL, NULL, ad->genlist, NULL);
408     elm_naviframe_item_pop_cb_set(it, _back_cb, ad);
409
410     ad->ip_addr = oicapp_util_wifi();
411     if (NULL == ad->ip_addr)
412     {
413         ERR("wifi is not connected");
414         oicapp_fail_popup(ad, (char *)"Error", (char *)"No WIFI connection", 3);
415     }
416     else
417     {
418         INFO("IP Address = %s", ad->ip_addr);
419     }
420
421     oicapp_append_contents(ad);
422
423     return 0;
424 }
425
426 static int oicapp_terminate(void *data)
427 {
428     oicapp_data *ad = (oicapp_data *)data;
429
430     if (g_CQID != 9999)
431         UnregisterQuery(g_CQID);
432
433     if (ad->win)
434         evas_object_del(ad->win);
435
436     free(ad->ip_addr);
437     free(ad->output_msg);
438     return 0;
439 }
440
441 static int oicapp_pause(void *data)
442 {
443     return 0;
444 }
445
446 static int oicapp_resume(void *data)
447 {
448     /*
449     static int tmpCnt = 0;
450     oicapp_data *ad = (oicapp_data *)data;
451     char buf[1024];
452
453     snprintf(buf, sizeof(buf), "Test %d", tmpCnt++);
454
455     oicapp_util_put_msg(ad, buf);
456     */
457     return 0;
458 }
459
460 static int oicapp_reset(bundle *b, void *data)
461 {
462     oicapp_data *ad = (oicapp_data *)data;
463
464     if (ad->win)
465         elm_win_activate(ad->win);
466
467     return 0;
468 }
469
470 int main(int argc, char *argv[])
471 {
472     oicapp_data ad;
473
474     /*
475     struct appcore_ops ops = {
476         .create = oicapp_create,
477         .terminate = oicapp_terminate,
478         .pause = oicapp_pause,
479         .resume = oicapp_resume,
480         .reset = oicapp_reset,
481     };*/
482
483     appcore_ops ops;
484
485     ops.create = oicapp_create;
486     ops.terminate = oicapp_terminate;
487     ops.pause = oicapp_pause;
488     ops.resume = oicapp_resume;
489     ops.reset = oicapp_reset;
490
491     memset(&ad, 0x0, sizeof(oicapp_data));
492     ops.data = &ad;
493
494     return appcore_efl_main(PACKAGE, &argc, &argv, &ops);
495 }
496
497