1 #pragma once
2 
3 #include <sdbusplus/bus.hpp>
4 #include "xyz/openbmc_project/Software/Version/server.hpp"
5 #include "xyz/openbmc_project/Object/Delete/server.hpp"
6 #include "xyz/openbmc_project/Common/FilePath/server.hpp"
7 
8 namespace openpower
9 {
10 namespace software
11 {
12 namespace updater
13 {
14 
15 class ItemUpdater;
16 
17 using VersionInherit = sdbusplus::server::object::object<
18         sdbusplus::xyz::openbmc_project::Software::server::Version,
19         sdbusplus::xyz::openbmc_project::Object::server::Delete,
20         sdbusplus::xyz::openbmc_project::Common::server::FilePath>;
21 
22 /** @class Version
23  *  @brief OpenBMC version software management implementation.
24  *  @details A concrete implementation for xyz.openbmc_project.Software.Version
25  *  D-Bus API.
26  */
27 class Version : public VersionInherit
28 {
29     public:
30         /** @brief Constructs Version Software Manager.
31          *
32          * @param[in] bus            - The D-Bus bus object
33          * @param[in] objPath        - The D-Bus object path
34          * @param[in] versionString  - The version string
35          * @param[in] versionPurpose - The version purpose
36          * @param[in] filePath       - The image filesystem path
37          * @param[in] parent         - The version's parent
38          */
39         Version(sdbusplus::bus::bus& bus,
40                 const std::string& objPath,
41                 const std::string& versionString,
42                 VersionPurpose versionPurpose,
43                 const std::string& filePath,
44                 ItemUpdater& parent) :
45                         VersionInherit(bus, (objPath).c_str(), true),
46                         parent(parent)
47         {
48             // Set properties.
49             purpose(versionPurpose);
50             version(versionString);
51             path(filePath);
52 
53             // Emit deferred signal.
54             emit_object_added();
55         }
56 
57         /**
58          * @brief Read the manifest file to get the value of the key.
59          *
60          * @param[in] filePath - The path to the file which contains the value
61          *                       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         /**
71          * @brief Calculate the version id from the version string.
72          *
73          * @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).
77          *
78          * @return The id.
79          */
80         static std::string getId(const std::string& version);
81 
82         /** @brief Deletes the D-Bus object and removes image.
83          *
84          */
85         void delete_() override;
86 
87     private:
88         ItemUpdater& parent;
89 
90 };
91 
92 } // namespace updater
93 } // namespace software
94 } // namespace openpower
95