blob: e100d71a4bfe33924ca20320428bb456f1c02a79 [file] [log] [blame]
/**
* Copyright © 2020 IBM Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "group.hpp"
#include <nlohmann/json.hpp>
#include <phosphor-logging/log.hpp>
namespace phosphor::fan::control::json
{
using json = nlohmann::json;
using namespace phosphor::logging;
std::set<std::string> Group::_allMembers{};
Group::Group(const json& jsonObj) : ConfigBase(jsonObj), _service("")
{
setMembers(jsonObj);
// Setting the group's service name is optional
if (jsonObj.contains("service"))
{
setService(jsonObj);
}
}
Group::Group(const Group& origObj) : ConfigBase(origObj)
{
// Copy everything from the original Group object
_members = origObj._members;
_service = origObj._service;
_interface = origObj.getInterface();
_property = origObj.getProperty();
_type = origObj.getType();
_value = origObj.getValue();
}
void Group::setMembers(const json& jsonObj)
{
if (!jsonObj.contains("members"))
{
log<level::ERR>("Missing required group's members",
entry("JSON=%s", jsonObj.dump().c_str()));
throw std::runtime_error("Missing required group's members");
}
for (const auto& member : jsonObj["members"])
{
_members.emplace_back(member.get<std::string>());
}
_allMembers.insert(_members.begin(), _members.end());
}
void Group::setService(const json& jsonObj)
{
_service = jsonObj["service"].get<std::string>();
}
} // namespace phosphor::fan::control::json