Add configuration file over-ride mechanism 63/19663/3 6.99.4 7.90.0 guppy/6.99.4 guppy_6.99.4 halibut/7.90.0 halibut_7.90.0
authorScott Murray <scott.murray@konsulko.com>
Tue, 18 Dec 2018 17:43:42 +0000 (12:43 -0500)
committerScott Murray <scott.murray@konsulko.com>
Thu, 17 Jan 2019 21:24:17 +0000 (21:24 +0000)
Reusing the windowmanager on the cluster demo platform requires
modifications to the layers.json, areas.json, etc. configuration files.
To allow this without breaking potential shared package feeds by
building two versions, add a mechanism to allow over-riding the
configuration files present in the widget with files in the directory
/etc/xdg/windowmanager.  Affected code has been refactored to use a new
common configuration file path determination helper function to reduce
duplication.

Cherry-picked from flounder branch with rework to accommodate changes
in master branch.

Bug-AGL: SPEC-1805

Change-Id: Ib0014756fe684167950ddac534ea2363a1b6e7c3
Signed-off-by: Scott Murray <scott.murray@konsulko.com>
policy_manager/policy_manager.cpp
src/util.cpp
src/util.hpp
src/wm_layer_control.cpp

index 1c6995b..90256bb 100644 (file)
@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2018 TOYOTA MOTOR CORPORATION
+ * Copyright (c) 2018 Konsulko Group
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -729,20 +730,7 @@ int PolicyManager::setStateTransitionProcessToSystemd(int event_id, uint64_t del
 
 int PolicyManager::loadRoleDb()
 {
-    std::string file_name;
-
-    // Get afm application installed dir
-    char const *afm_app_install_dir = getenv("AFM_APP_INSTALL_DIR");
-    HMI_DEBUG("afm_app_install_dir:%s", afm_app_install_dir);
-
-    if (!afm_app_install_dir)
-    {
-        HMI_ERROR("AFM_APP_INSTALL_DIR is not defined");
-    }
-    else
-    {
-        file_name = std::string(afm_app_install_dir) + std::string("/etc/roles.db");
-    }
+    std::string file_name(get_file_path("roles.db"));
 
     // Load roles.db
     json_object *json_obj;
@@ -832,19 +820,7 @@ int PolicyManager::loadStateDb()
 {
     HMI_DEBUG("Call");
 
-    // Get afm application installed dir
-    char const *afm_app_install_dir = getenv("AFM_APP_INSTALL_DIR");
-    HMI_DEBUG("afm_app_install_dir:%s", afm_app_install_dir);
-
-    std::string file_name;
-    if (!afm_app_install_dir)
-    {
-        HMI_ERROR("AFM_APP_INSTALL_DIR is not defined");
-    }
-    else
-    {
-        file_name = std::string(afm_app_install_dir) + std::string("/etc/states.db");
-    }
+    std::string file_name(get_file_path("states.db"));
 
     // Load states.db
     json_object *json_obj;
index eb6425d..f26a4a1 100644 (file)
@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2017 TOYOTA MOTOR CORPORATION
+ * Copyright (c) 2018 Konsulko Group
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -20,6 +21,7 @@
 #include <stdio.h>
 #include <stdarg.h>
 #include <stdlib.h>
+#include <fstream>
 
 #include <unistd.h>
 
@@ -140,3 +142,37 @@ void _DUMP(enum LOG_LEVEL level, const char *log, ...)
     va_end(args);
     free(message);
 }
+
+std::string get_file_path(const char *file_name, const char *root_path)
+{
+    char const *default_base_path = root_path;
+    std::string path("");
+
+    if(!file_name) {
+        return path;
+    }
+
+    if (!default_base_path) {
+        default_base_path = getenv("AFM_APP_INSTALL_DIR");
+        if (!default_base_path) {
+            HMI_ERROR("AFM_APP_INSTALL_DIR is not defined");
+        }
+    }
+    if (default_base_path) {
+        path = default_base_path;
+        path.append("/etc/");
+        path.append(file_name);
+    }
+
+    // Check for over-ride in /etc/xdg/windowmanager
+    std::string override_path("/etc/xdg/windowmanager/");
+    override_path.append(file_name);
+    std::ifstream i(override_path);
+    if (i.good()) {
+        path = override_path;
+    }
+    i.close();
+
+    HMI_INFO("Using %s", path.c_str());
+    return path;
+}
index 65b29e0..36e556c 100644 (file)
@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2017 TOYOTA MOTOR CORPORATION
+ * Copyright (c) 2018 Konsulko Group
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -117,4 +118,7 @@ class rectangle
     long _bottom;
 };
 
+// Configuration file path helper
+std::string get_file_path(const char *file_name, const char *root_path = NULL);
+
 #endif // !WM_UTIL_HPP
index 17443de..6c9aa6c 100644 (file)
@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2017 TOYOTA MOTOR CORPORATION
+ * Copyright (c) 2018 Konsulko Group
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -21,8 +22,8 @@
 #include "request.hpp"
 #include "json_helper.hpp"
 
-#define LC_AREA_PATH "/etc/areas.json"
-#define LC_LAYER_SETTING_PATH "/etc/layers.json"
+#define LC_AREA_FILE "areas.json"
+#define LC_LAYER_SETTING_FILE "layers.json"
 #define LC_DEFAULT_AREA "fullscreen"
 #define BACK_GROUND_LAYER "BackGroundLayer"
 
@@ -58,8 +59,8 @@ static void layerCallback_static(t_ilm_layer layer,
 
 LayerControl::LayerControl(const std::string& root)
 {
-    string area_path = root + LC_AREA_PATH;
-    string layer_path= root + LC_LAYER_SETTING_PATH;
+    string area_path(get_file_path(LC_AREA_FILE, root.c_str()));
+    string layer_path(get_file_path(LC_LAYER_SETTING_FILE, root.c_str()));
     // load layers.setting.json
     WMError ret = this->loadLayerSetting(layer_path);
     assert(ret == WMError::SUCCESS);
@@ -640,4 +641,4 @@ bool LayerControl::moveForeGround(const shared_ptr<WMClient> client)
     return ret;
 }
 
-} // namespace wm
\ No newline at end of file
+} // namespace wm