Use $ORIGIN for rpath
[apps/agl-service-windowmanager.git] / src / json_helper.cpp
index 8c4274d..4b35952 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2017 Mentor Graphics Development (Deutschland) GmbH
+ * Copyright (c) 2017 TOYOTA MOTOR CORPORATION
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * limitations under the License.
  */
 
+
 #include "json_helper.hpp"
+#include "hmi-debug.h"
 
-#include <json.h>
 
 json_object *to_json(compositor::surface_properties const &s) {
    // auto j = json::object({
@@ -100,3 +101,120 @@ json_object *to_json(std::vector<uint32_t> const &v) {
    }
    return a;
 }
+
+namespace jh {
+
+const char* getStringFromJson(json_object* obj, const char* key) {
+    if ((nullptr == obj) || (nullptr == key)) {
+        HMI_ERROR("wm:jh", "Argument is nullptr!!!");
+        return nullptr;
+    }
+
+    json_object* tmp;
+    if (!json_object_object_get_ex(obj, key, &tmp)) {
+        HMI_DEBUG("wm:jh", "Not found key \"%s\"", key);
+        return nullptr;
+    }
+
+    return json_object_get_string(tmp);
+}
+
+int getIntFromJson(json_object* obj, const char* key) {
+    if ((nullptr == obj) || (nullptr == key)) {
+        HMI_ERROR("wm:jh", "Argument is nullptr!!!");
+        return 0;
+    }
+
+    json_object* tmp;
+    if (!json_object_object_get_ex(obj, key, &tmp)) {
+        HMI_DEBUG("wm:jh", "Not found key \"%s\"", key);
+        return 0;
+    }
+
+    return json_object_get_int(tmp);
+}
+
+double getDoubleFromJson(json_object* obj, const char* key) {
+    if ((nullptr == obj) || (nullptr == key)) {
+        HMI_ERROR("wm:jh", "Argument is nullptr!!!");
+        return 0;
+    }
+
+    json_object* tmp;
+    if (!json_object_object_get_ex(obj, key, &tmp)) {
+        HMI_DEBUG("wm:jh", "Not found key \"%s\"", key);
+        return 0;
+    }
+
+    return json_object_get_double(tmp);
+}
+
+json_bool getBoolFromJson(json_object* obj, const char* key) {
+    if ((nullptr == obj) || (nullptr == key)) {
+        HMI_ERROR("wm:jh", "Argument is nullptr!!!");
+        return 0;
+    }
+
+    json_object* tmp;
+    if (!json_object_object_get_ex(obj, key, &tmp)) {
+        HMI_DEBUG("wm:jh", "Not found key \"%s\"", key);
+        return 0;
+    }
+
+    return json_object_get_boolean(tmp);
+}
+
+int inputJsonFilie(const char* file, json_object** obj) {
+    const int input_size = 128;
+    int ret = -1;
+
+    if ((nullptr == file) || (nullptr == obj)) {
+        HMI_ERROR("wm:jh", "Argument is nullptr!!!");
+        return ret;
+    }
+
+    HMI_DEBUG("wm:jh", "Input file: %s", file);
+
+    // Open json file
+    FILE *fp = fopen(file, "rb");
+    if (nullptr == fp) {
+        HMI_ERROR("wm:jh", "Could not open file");
+        return ret;
+    }
+
+    // Parse file data
+    struct json_tokener *tokener = json_tokener_new();
+    enum json_tokener_error json_error;
+    char buffer[input_size];
+    int block_cnt = 1;
+    while (1) {
+        size_t len = fread(buffer, sizeof(char), input_size, fp);
+        *obj = json_tokener_parse_ex(tokener, buffer, len);
+        if (nullptr != *obj) {
+            HMI_DEBUG("wm:jh", "File input is success");
+            ret = 0;
+            break;
+        }
+
+        json_error = json_tokener_get_error(tokener);
+        if ((json_tokener_continue != json_error)
+            || (input_size > len)) {
+            HMI_ERROR("wm:jh", "Failed to parse file (byte:%d err:%s)",
+                      (input_size * block_cnt), json_tokener_error_desc(json_error));
+            HMI_ERROR("wm:jh", "\n%s", buffer);
+            *obj = nullptr;
+            break;
+        }
+        block_cnt++;
+    }
+
+    // Close json file
+    fclose(fp);
+
+    // Free json_tokener
+    json_tokener_free(tokener);
+
+    return ret;
+}
+
+} // namespace jh