Moved Callout class logic to Resolution classes

This simplified the confusion between the Callout and Resolution classes
because there was a lot of overlap.

Signed-off-by: Zane Shelley <zshelle@us.ibm.com>
Change-Id: Iea0fb30a1577869ebfe5b2b195fee832a694adb5
diff --git a/analyzer/callout.hpp b/analyzer/callout.hpp
new file mode 100644
index 0000000..cee3dd1
--- /dev/null
+++ b/analyzer/callout.hpp
@@ -0,0 +1,115 @@
+#pragma once
+
+#include <string>
+
+namespace analyzer
+{
+
+namespace callout
+{
+
+/** @brief All callouts will have a priority indicating when to issue the
+ *         required service action. */
+class Priority
+{
+  public:
+    /** Serivce is mandatory. */
+    static const Priority HIGH;
+
+    /** Serivce medium priority callouts one at a time, in order, until the
+     *  issue is resolved. */
+    static const Priority MED;
+
+    /** Same as MED, except replace all A's as a group. */
+    static const Priority MED_A;
+
+    /** Same as MED, except replace all A's as a group. */
+    static const Priority MED_B;
+
+    /** Same as MED, except replace all A's as a group. */
+    static const Priority MED_C;
+
+    /** If servicing all high and medium priority callouts did not resolve
+     *  the issue, service low priority callouts one at a time, in order,
+     *  until the issue is resolved. */
+    static const Priority LOW;
+
+  private:
+    /**
+     * @brief Constructor from components.
+     *
+     * At the moment, the priority values for the callout list user data
+     * section are different from the priority values hard-coded in the
+     * registry. Therefore, two different values must be stored.
+     *
+     * @param i_registry The string representation of a priority used in
+     *                   registry callouts.
+     * @param i_userData The string representation of a priority used in user
+     *                   data callouts.
+     */
+    Priority(const std::string& i_registry, const std::string& i_userData) :
+        iv_registry(i_registry), iv_userData(i_userData)
+    {}
+
+  private:
+    /** The string representation of a priority used in registry callouts. */
+    const std::string iv_registry;
+
+    /** The string representation of a priority used in user data callouts. */
+    const std::string iv_userData;
+
+  public:
+    /** iv_registry accessor */
+    const std::string& getRegistryString() const
+    {
+        return iv_registry;
+    }
+
+    /** iv_userData accessor */
+    const std::string& getUserDataString() const
+    {
+        return iv_userData;
+    }
+};
+
+// clang-format off
+inline const Priority Priority::HIGH {"high",          "H"};
+inline const Priority Priority::MED  {"medium",        "M"};
+inline const Priority Priority::MED_A{"medium_group_A","A"};
+inline const Priority Priority::MED_B{"medium_group_B","B"};
+inline const Priority Priority::MED_C{"medium_group_C","C"};
+inline const Priority Priority::LOW  {"low",           "L"};
+// clang-format on
+
+/** @brief Container class for procedure callout service actions. */
+class Procedure
+{
+  public:
+    /** Contact next level support. */
+    static const Procedure NEXTLVL;
+
+  private:
+    /**
+     * @brief Constructor from components.
+     * @param i_string The string representation of the procedure used for
+     *                 callouts.
+     */
+    explicit Procedure(const std::string& i_string) : iv_string(i_string) {}
+
+  private:
+    /** The string representation of the procedure used for callouts. */
+    const std::string iv_string;
+
+  public:
+    /** iv_string accessor */
+    std::string getString() const
+    {
+        return iv_string;
+    }
+};
+
+inline const Procedure Procedure::NEXTLVL{"NEXTLVL"};
+
+} // namespace callout
+
+} // namespace analyzer