blob: 1aff7e0d639a89453f2367f78ced17933c9ddfee [file] [log] [blame]
#pragma once
#include "config.h"
#include <sdbusplus/bus.hpp>
namespace phosphor
{
namespace inventory
{
namespace manager
{
namespace associations
{
/**
* @class Manager
*
* @brief This class provides the ability to add org.openbmc.Associations
* interfaces on inventory D-Bus objects, based on a definition in a
* JSON file.
*
* The purpose for this is to be able to associate other D-Bus paths
* with the inventory items they relate to.
*
* For example, a card temperature sensor D-Bus object can be associated
* with the D-Bus object for that card's inventory entry so that some
* code can tie them together.
*/
class Manager
{
public:
Manager() = delete;
~Manager() = default;
Manager(const Manager&) = delete;
Manager& operator=(const Manager&) = delete;
Manager(Manager&&) = delete;
Manager& operator=(Manager&&) = delete;
/**
* @brief Constructor
*
* @param[in] bus - sdbusplus object
* @param[in] jsonPath - path to the JSON File that contains associations
*/
Manager(sdbusplus::bus::bus& bus, const std::string& jsonPath);
/**
* @brief Constructor
*
* @param[in] bus - sdbusplus object
*/
explicit Manager(sdbusplus::bus::bus& bus) :
Manager(bus, ASSOCIATIONS_FILE_PATH)
{
}
/**
* @brief Creates any association D-Bus interfaces required based on
* the JSON associations definition for the object path passed
* in.
*
* Called after PIM creates a new inventory D-Bus interface on objectPath.
*
* @param[in] objectPath - the D-Bus object path to check for associations
*/
void createAssociations(const std::string& objectPath);
private:
/**
* @brief The sdbusplus bus object.
*/
sdbusplus::bus::bus& _bus;
/**
* @brief The path to the associations JSON File.
*/
const std::string _jsonFile;
};
} // namespace associations
} // namespace manager
} // namespace inventory
} // namespace phosphor