Implement the DeleteAll interface

Implement the xyz.openbmc_project.Collection.DeleteAll
interface to delete all logging entries.

Change-Id: I007dd8408ebb4e30bf3d3a3c431d747248620aa4
Signed-off-by: Matt Spinler <spinler@us.ibm.com>
diff --git a/delete_all.hpp b/delete_all.hpp
new file mode 100644
index 0000000..9cca2fd
--- /dev/null
+++ b/delete_all.hpp
@@ -0,0 +1,56 @@
+#pragma once
+
+#include "interfaces.hpp"
+#include "manager.hpp"
+
+namespace ibm
+{
+namespace logging
+{
+
+/**
+ *  @class Delete
+ *
+ *  Implements the xyz.openbmc_project.Collect.DeleteAll interface
+ *  that will delete all ibm-logging entries.
+ */
+class DeleteAll : public DeleteAllObject
+{
+  public:
+    DeleteAll() = delete;
+    DeleteAll(const DeleteAll&) = delete;
+    DeleteAll& operator=(const DeleteAll&) = delete;
+    DeleteAll(DeleteAll&&) = default;
+    DeleteAll& operator=(DeleteAll&&) = default;
+    virtual ~DeleteAll() = default;
+
+    /**
+     * Constructor
+     *
+     * @param[in] bus - the D-Bus bus object
+     * @param[in] path - the object path
+     * @param[in] manager - the Manager object
+     */
+    DeleteAll(sdbusplus::bus::bus& bus, const std::string& path,
+              Manager& manager) :
+        DeleteAllObject(bus, path.c_str()),
+        manager(manager)
+    {
+    }
+
+    /**
+     * The Delete D-Bus method
+     */
+    inline void deleteAll() override
+    {
+        manager.eraseAll();
+    }
+
+  private:
+    /**
+     * The Manager object
+     */
+    Manager& manager;
+};
+}
+}
diff --git a/interfaces.hpp b/interfaces.hpp
index b889cbb..e5e8293 100644
--- a/interfaces.hpp
+++ b/interfaces.hpp
@@ -2,6 +2,7 @@
 
 #include <com/ibm/Logging/Policy/server.hpp>
 #include <xyz/openbmc_project/Object/Delete/server.hpp>
+#include <xyz/openbmc_project/Collection/DeleteAll/server.hpp>
 
 namespace ibm
 {
@@ -14,6 +15,10 @@
 using DeleteInterface = sdbusplus::xyz::openbmc_project::Object::server::Delete;
 using DeleteObject = ServerObject<DeleteInterface>;
 
+using DeleteAllInterface =
+    sdbusplus::xyz::openbmc_project::Collection::server::DeleteAll;
+using DeleteAllObject = ServerObject<DeleteAllInterface>;
+
 using PolicyInterface = sdbusplus::com::ibm::Logging::server::Policy;
 using PolicyObject = ServerObject<PolicyInterface>;
 
diff --git a/main.cpp b/main.cpp
index 5a2870d..7a65f09 100644
--- a/main.cpp
+++ b/main.cpp
@@ -15,6 +15,7 @@
  */
 #include <sdbusplus/bus.hpp>
 #include <sdbusplus/server/manager.hpp>
+#include "delete_all.hpp"
 #include "manager.hpp"
 #include "config.h"
 
@@ -25,6 +26,7 @@
     sdbusplus::server::manager::manager objManager(bus, LOGGING_PATH);
 
     ibm::logging::Manager manager{bus};
+    ibm::logging::DeleteAll da{bus, LOGGING_PATH, manager};
 
     bus.request_name(IBM_LOGGING_BUSNAME);
 
diff --git a/manager.cpp b/manager.cpp
index d47b3ad..45982fc 100644
--- a/manager.cpp
+++ b/manager.cpp
@@ -84,6 +84,11 @@
     }
 }
 
+void Manager::eraseAll()
+{
+    entries.clear();
+}
+
 void Manager::addInterface(const std::string& objectPath, InterfaceType type,
                            std::experimental::any& object)
 {
diff --git a/manager.hpp b/manager.hpp
index 69d9479..0320b0c 100644
--- a/manager.hpp
+++ b/manager.hpp
@@ -49,6 +49,11 @@
      */
     void erase(const std::string& objectPath);
 
+    /**
+     * Erases all entries
+     */
+    void eraseAll();
+
   private:
     /**
      * The callback for an interfaces added signal