softwarecontainer  0.18.0-739e8d7 2017-05-04
dbusgatewayparser.cpp
1 /*
2  * Copyright (C) 2016-2017 Pelagicore AB
3  *
4  * Permission to use, copy, modify, and/or distribute this software for
5  * any purpose with or without fee is hereby granted, provided that the
6  * above copyright notice and this permission notice appear in all copies.
7  *
8  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
9  * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
10  * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR
11  * BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES
12  * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
13  * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
14  * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
15  * SOFTWARE.
16  *
17  * For further information see LICENSE
18  */
19 
20 #include "gateway/dbus/dbusgatewayparser.h"
21 #include "gateway/gatewayparsererror.h"
22 
23 namespace softwarecontainer {
24 
25 bool DBusGatewayParser::parseDBusConfig(const json_t *element,
26  const char *key,
27  json_t *config)
28 {
29  log_debug() << "Parsing element for " << key;
30  json_t *configExists = json_object_get(element, key);
31  if (nullptr == configExists) {
32  // This is not a fatal error - not providing the key for one of the buses is OK.
33  log_warning() << key << " was not found in config.";
34  return false;
35  }
36 
37  if (!json_is_array(configExists)) {
38  throwWithLog(logging::StringBuilder() << "Value for " << key << " is not an array");
39  }
40 
41  for (unsigned int i = 0; i < json_array_size(configExists); i++) {
42  json_t *child = json_array_get(configExists, i);
43  if (!json_is_object(child)) {
44  throwWithLog("JSON array element is not an object!");
45  } else {
46  json_array_append(config, json_deep_copy(child));
47  }
48  }
49 
50  return true;
51 }
52 
53 void DBusGatewayParser::throwWithLog(std::string message)
54 {
55  log_error() << message;
56  throw GatewayParserError(message);
57 }
58 
59 } // namespace softwarecontainer
Developers guide to adding a config item: