Block different type installation with same pkgid
[platform/core/appfw/app-installers.git] / src / common / pkgmgr_interface.h
index 9cc52e6..e085018 100644 (file)
 #include <boost/optional/optional.hpp>
 #include <manifest_parser/utils/logging.h>
 #include <pkgmgr_installer.h>
+
+#include <map>
 #include <memory>
 #include <string>
 
 #include "common/app_query_interface.h"
-#include "common/request.h"
 #include "common/utils/macros.h"
+#include "common/utils/request.h"
 
 namespace common_installer {
 
@@ -40,6 +42,8 @@ typedef std::shared_ptr<PkgMgrInterface> PkgMgrPtr;
  */
 class PkgmgrInstallerInterface {
  public:
+  virtual ~PkgmgrInstallerInterface() = default;
+
   virtual bool CreatePkgMgrInstaller(pkgmgr_installer** installer,
                              InstallationMode* mode) = 0;
   virtual bool ShouldCreateSignal() const = 0;
@@ -64,11 +68,39 @@ class PkgmgrInstaller : public PkgmgrInstallerInterface {
 class PkgMgrInterface {
  public:
   /**
+   * Set current AppQueryInterface for request
+   *
+   * \param idx index of request
+   *
+   * \return True if setting was success. Otherwise, return false
+   */
+  bool SetAppQueryInterface(int idx);
+
+  /**
+   * Add AppQueryInterface for request
+   *
+   * \param idx index of request
+   * \param interface AppQueryInterface for request
+   */
+  void AddAppQueryInterface(int idx,
+      std::shared_ptr<AppQueryInterface> interface);
+
+  /**
+   * Get AppQueryInterface for current request
+   *
+   * \return AppQueryInterface ptr if current AppQueryInterface exist.
+   *         Otherwise, return null shared_ptr
+   */
+  std::shared_ptr<AppQueryInterface> GetAppQueryInterface();
+
+  /**
    * Returns Request type passed from pkgmgr_installer
    *
+   * \param idx index of request
+   *
    * \return request type retrieved from pkgmgr_installer
    */
-  RequestType GetRequestType() const;
+  RequestType GetRequestType(int idx = 0) const;
 
   /**
    * Returns uid passed from pkgmgr_installer
@@ -80,9 +112,11 @@ class PkgMgrInterface {
   /**
    * Returns Request info passed from pkgmgr_installer
    *
+   * \param idx index of request
+   *
    * \return request info retrieved from pkgmgr_installer
    */
-  std::string GetRequestInfo() const;
+  std::string GetRequestInfo(int idx = 0) const;
 
   /**
    * Creates PkgMgrInterface
@@ -97,7 +131,7 @@ class PkgMgrInterface {
    */
   static PkgMgrPtr Create(int argc, char** argv,
         PkgmgrInstallerInterface* pkgmgr_installer_interface,
-        AppQueryInterface* interface = nullptr);
+        std::shared_ptr<AppQueryInterface> interface = nullptr);
 
   /**
   * Returns TEP path passed from pkgmgr_installer
@@ -186,6 +220,27 @@ class PkgMgrInterface {
   bool GetIsSkipCheckReference() const;
 
   /**
+   * Returns True if the request is skip optimization. Otherwise, return false;
+   *
+   * \return True if the request is skip optimization. Otherwise, return false;
+   */
+  bool GetSkipOptimization() const;
+
+  /**
+   * Returns the number of request info count.
+   *
+   * \return The number of request info count.
+   */
+  int GetRequestInfoCount() const;
+
+  /**
+   * Returns whether recovery mode is set to cleanup or not.
+   *
+   * \return True if recovery mode is set to cleanup. Otherwise, return false.
+   */
+  bool GetRecoveryCleanup() const;
+
+  /**
    * Get Raw pointer to pkgmgr_installer object
    * NOTE: It should not be used (PkgMgrInterface can destroy it
    *
@@ -212,7 +267,7 @@ class PkgMgrInterface {
 
  private:
   explicit PkgMgrInterface(PkgmgrInstallerInterface* pkgmgr_installer_interface,
-                           AppQueryInterface* interface)
+                           std::shared_ptr<AppQueryInterface> interface)
       : pi_(nullptr),
         install_mode_(InstallationMode::ONLINE),
         is_app_installed_(boost::none),
@@ -225,7 +280,8 @@ class PkgMgrInterface {
   mutable boost::optional<bool> is_app_installed_;
   PkgmgrInstallerInterface* pkgmgr_installer_interface_;
 
-  AppQueryInterface* query_interface_;
+  std::shared_ptr<AppQueryInterface> query_interface_;
+  std::map<int, std::shared_ptr<AppQueryInterface>> query_interface_map_;
 
   SCOPE_LOG_TAG(PkgMgrInterface)
   DISALLOW_COPY_AND_ASSIGN(PkgMgrInterface);