blob: d2c0624c680fa96aed44ec806e165fc098f92d0b [file] [log] [blame]
Saqib Khance148702017-06-11 12:01:58 -05001#pragma once
2
3#include <sdbusplus/bus.hpp>
4#include "xyz/openbmc_project/Software/Version/server.hpp"
Leonel Gonzalez9c8adfa2017-07-12 11:08:40 -05005#include "xyz/openbmc_project/Object/Delete/server.hpp"
Saqib Khance148702017-06-11 12:01:58 -05006#include "xyz/openbmc_project/Common/FilePath/server.hpp"
7
8namespace openpower
9{
10namespace software
11{
12namespace updater
13{
14
Leonel Gonzalez9c8adfa2017-07-12 11:08:40 -050015class ItemUpdater;
16
Saqib Khance148702017-06-11 12:01:58 -050017using VersionInherit = sdbusplus::server::object::object<
Gunnar Millsb78dfa52017-09-21 16:05:22 -050018 sdbusplus::xyz::openbmc_project::Software::server::Version,
19 sdbusplus::xyz::openbmc_project::Object::server::Delete,
20 sdbusplus::xyz::openbmc_project::Common::server::FilePath>;
Saqib Khance148702017-06-11 12:01:58 -050021
22/** @class Version
23 * @brief OpenBMC version software management implementation.
24 * @details A concrete implementation for xyz.openbmc_project.Software.Version
Gunnar Millsb78dfa52017-09-21 16:05:22 -050025 * D-Bus API.
Saqib Khance148702017-06-11 12:01:58 -050026 */
27class Version : public VersionInherit
28{
29 public:
30 /** @brief Constructs Version Software Manager.
31 *
Gunnar Millsb78dfa52017-09-21 16:05:22 -050032 * @param[in] bus - The D-Bus bus object
33 * @param[in] objPath - The D-Bus object path
34 * @param[in] versionString - The version string
Saqib Khance148702017-06-11 12:01:58 -050035 * @param[in] versionPurpose - The version purpose
36 * @param[in] filePath - The image filesystem path
Leonel Gonzalez9c8adfa2017-07-12 11:08:40 -050037 * @param[in] parent - The version's parent
Saqib Khance148702017-06-11 12:01:58 -050038 */
39 Version(sdbusplus::bus::bus& bus,
40 const std::string& objPath,
Gunnar Millsb78dfa52017-09-21 16:05:22 -050041 const std::string& versionString,
Saqib Khance148702017-06-11 12:01:58 -050042 VersionPurpose versionPurpose,
Leonel Gonzalez9c8adfa2017-07-12 11:08:40 -050043 const std::string& filePath,
Gunnar Millsb78dfa52017-09-21 16:05:22 -050044 ItemUpdater& parent) :
45 VersionInherit(bus, (objPath).c_str(), true),
46 parent(parent)
Saqib Khance148702017-06-11 12:01:58 -050047 {
48 // Set properties.
49 purpose(versionPurpose);
Gunnar Millsb78dfa52017-09-21 16:05:22 -050050 version(versionString);
Saqib Khance148702017-06-11 12:01:58 -050051 path(filePath);
52
53 // Emit deferred signal.
54 emit_object_added();
55 }
Saqib Khan167601b2017-06-18 23:33:46 -050056
57 /**
58 * @brief Read the manifest file to get the value of the key.
59 *
Gunnar Millsb78dfa52017-09-21 16:05:22 -050060 * @param[in] filePath - The path to the file which contains the value
Saqib Khan167601b2017-06-18 23:33:46 -050061 * of keys.
62 * @param[in] keys - A map of keys with empty values.
63 *
64 * @return The map of keys with filled values.
65 **/
66 static std::map<std::string, std::string> getValue(
67 const std::string& filePath,
68 std::map<std::string, std::string> keys);
69
70 /**
Gunnar Millsb78dfa52017-09-21 16:05:22 -050071 * @brief Calculate the version id from the version string.
Saqib Khan167601b2017-06-18 23:33:46 -050072 *
Gunnar Millsb78dfa52017-09-21 16:05:22 -050073 * @details The version id is a unique 8 hexadecimal digit id
74 * calculated from the version string.
75 *
76 * @param[in] version - The image version string (e.g. v1.99.10-19).
Saqib Khan167601b2017-06-18 23:33:46 -050077 *
78 * @return The id.
79 */
80 static std::string getId(const std::string& version);
Leonel Gonzalez9c8adfa2017-07-12 11:08:40 -050081
Gunnar Millsb78dfa52017-09-21 16:05:22 -050082 /** @brief Deletes the D-Bus object and removes image.
Leonel Gonzalez9c8adfa2017-07-12 11:08:40 -050083 *
84 */
85 void delete_() override;
86
87 private:
88 ItemUpdater& parent;
89
Saqib Khance148702017-06-11 12:01:58 -050090};
91
92} // namespace updater
93} // namespace software
94} // namespace openpower