Make Type as a class 75/222375/2
authorJunghoon Park <jh9216.park@samsung.com>
Tue, 14 Jan 2020 06:24:21 +0000 (15:24 +0900)
committerJunghoon Park <jh9216.park@samsung.com>
Wed, 2 Dec 2020 23:47:04 +0000 (23:47 +0000)
- Class 'Component' should not be modified even though a new component is added.
- To do this, we need to make a class 'Type' to abstract.

Change-Id: I6cfb98540626a1630c01dc094119e0a188bda17e
Signed-off-by: Junghoon Park <jh9216.park@samsung.com>
component_based/base/component.cc
component_based/base/component.h
component_based/base/component_implementation.h
component_based/base/frame_component.cc
component_based/base/frame_component.h
component_based/base/service_component.cc
component_based/base/service_component.h
component_based/base/stub.cc
component_based/efl_base/stub.cc
unit_tests/src/base/test_component_based_component.cc

index 577f2f6b3ab9f810b0a9a8ccc519572fbaae276a..7b3862e987854bce7f9630a53eb548dd48c924da 100644 (file)
 
 namespace component_based {
 
-Component::Impl::Impl(Component* parent, Component::Type type,
-                      std::string comp_id, std::string inst_id)
-  : parent_(parent), type_(std::move(type)),
-    comp_id_(std::move(comp_id)), inst_id_(std::move(inst_id)),
+Component::Impl::Impl(Component* parent, std::string comp_id,
+    std::string inst_id)
+  : parent_(parent), comp_id_(std::move(comp_id)), inst_id_(std::move(inst_id)),
     sys_ev_(new internal::SystemEvent(this)) {
   auto& mgr = internal::ComponentManager::GetInst();
   if (mgr.IsSingleInstance(inst_id_))
@@ -327,10 +326,8 @@ AppControl Component::Impl::Send(AppControl control) {
   }
 }
 
-Component::Component(Component::Type type, std::string comp_id,
-                     std::string inst_id)
-  : impl_(new Impl(this, std::move(type), std::move(comp_id),
-                   std::move(inst_id))) {
+Component::Component(std::string comp_id, std::string inst_id)
+  : impl_(new Impl(this, std::move(comp_id), std::move(inst_id))) {
 }
 
 Component::~Component() = default;
@@ -348,10 +345,6 @@ void Component::Finish() {
   mgr.ExitAtIdle(impl_->GetInstanceID());
 }
 
-Component::Type Component::GetType() {
-  return impl_->GetType();
-}
-
 void Component::RegisterAction(std::string app_control_name) {
   try {
     impl_->RegisterAction(std::move(app_control_name));
index 8353ff5ece3596ca15a7af8672c22098f2b7545d..cebbfe8b0a20d00f0af901f6b5849147922326e3 100644 (file)
@@ -46,9 +46,15 @@ class EXPORT_API Component {
     Dying,
   };
 
-  enum class Type {
-    Frame,
-    Service,
+  class Type {
+   public:
+    virtual int GetHash() const {
+      return 0;
+    }
+
+    virtual std::string GetName() const {
+      return "base";
+    }
   };
 
   class Factory {
@@ -57,7 +63,7 @@ class EXPORT_API Component {
                                               std::string inst_id) = 0;
   };
 
-  Component(Type type, std::string comp_id, std::string inst_id);
+  Component(std::string comp_id, std::string inst_id);
   virtual ~Component();
 
   virtual bool OnBaseCreate();
@@ -76,11 +82,13 @@ class EXPORT_API Component {
   virtual void OnBaseLowBattery(LowBattery::Status status);
   virtual void OnBaseLowMemory(LowMemory::Status status);
   virtual void OnBaseSuspendedStateChanged(SuspendedState::State state);
+  virtual std::unique_ptr<Type> GetType() const {
+    return std::unique_ptr<Type>(new Type());
+  }
 
   std::string GetComponentID();
   std::string GetInstanceID();
   void Finish();
-  Type GetType();
   void RegisterAction(std::string app_control_name);
   bool DeregisterAction(std::string app_control_name);
   void SendAsync(AppControl control, AppControl::IEventListener* ev);
index 57d431b149dca175a56a340a438edae75e11c50f..b7165d42fae636d5c51691e050ec997fa526c9f2 100644 (file)
@@ -58,10 +58,6 @@ class Component::Impl : internal::ComponentManager::IEventListener,
   void RegisterAction(std::string app_control_name);
   bool DeregisterAction(std::string app_control_name);
 
-  const Component::Type& GetType() {
-    return type_;
-  }
-
   const std::string& GetComponentID() {
     return comp_id_;
   }
@@ -81,12 +77,10 @@ class Component::Impl : internal::ComponentManager::IEventListener,
 
  private:
   friend class Component;
-  Impl(Component* parent, Component::Type type,
-       std::string comp_id, std::string inst_id);
+  Impl(Component* parent, std::string comp_id, std::string inst_id);
 
  private:
   Component* parent_;
-  Component::Type type_;
   std::string comp_id_;
   std::string inst_id_;
   std::unique_ptr<internal::SystemEvent> sys_ev_;
index 1c3ef52123e5d3be986c3a1b58645bef895f1376..d000872659e4e028322c5191bb85610031370486 100644 (file)
@@ -27,8 +27,7 @@
 namespace component_based {
 
 FrameComponent::FrameComponent(std::string comp_id, std::string inst_id)
-  : Component::Component(Component::Type::Frame, std::move(comp_id),
-                         std::move(inst_id)) {
+  : Component::Component(std::move(comp_id), std::move(inst_id)) {
 }
 
 FrameComponent::~FrameComponent() = default;
index 26125df24a831e1fbb38001f4a2459dc6887d47a..89031a5ec66bc85de2dfc371187a53f3f92b46dd 100644 (file)
@@ -46,12 +46,31 @@ class EXPORT_API FrameComponent : public Component {
     Off,
   };
 
+  class FrameType : public Type {
+   public:
+    enum {
+      Hash = 0x1111
+    };
+
+    int GetHash() const override {
+      return Hash;
+    }
+
+    std::string GetName() const override {
+      return "frame";
+    }
+  };
+
   FrameComponent(std::string comp_id, std::string inst_id);
   virtual ~FrameComponent();
 
   DisplayStatus GetDisplayStatus();
   const IWindow* GetWindow();
 
+  std::unique_ptr<Type> GetType() const override {
+    return std::unique_ptr<Type>(new FrameType());
+  }
+
   bool OnBaseCreate() override;
   void OnBaseDestroy() override;
   void OnBaseStart(AppControl control, bool restarted) override;
index 19634624043ace0ddaeb5bc811d8dcf1d31baf55..a61be0638c20a4d8fb5730e7fad86f91ecd545bb 100644 (file)
@@ -22,8 +22,7 @@
 namespace component_based {
 
 ServiceComponent::ServiceComponent(std::string comp_id, std::string inst_id)
-  : Component::Component(Component::Type::Service, std::move(comp_id),
-                         std::move(inst_id)) {
+  : Component::Component(std::move(comp_id), std::move(inst_id)) {
 }
 
 ServiceComponent::~ServiceComponent() = default;
index 5e2f1ef89eec64edb33028c5aa997675bd657314..90247c8400b1c69a11867121de1034cad4bc309a 100644 (file)
@@ -39,9 +39,28 @@ class EXPORT_API ServiceComponent : public Component {
     }
   };
 
+  class ServiceType : public Type {
+   public:
+    enum {
+      Hash = 0x2222
+    };
+
+    int GetHash() const override {
+      return Hash;
+    }
+
+    std::string GetName() const override {
+      return "service";
+    }
+  };
+
   ServiceComponent(std::string comp_id, std::string inst_id);
   virtual ~ServiceComponent();
 
+  std::unique_ptr<Type> GetType() const override {
+    return std::unique_ptr<Type>(new ServiceType());
+  }
+
   bool OnBaseCreate() override;
   void OnBaseDestroy() override;
   void OnBaseStart(AppControl control, bool restarted) override;
index 1d95b298842442d787a7caad2c3e7be14942bf00..d6ed031ec51d89bdf23f97526aabba657f8f27e8 100644 (file)
@@ -160,32 +160,28 @@ class StubBaseComponent : public component_based::Component {
  public:
   class Factory : public component_based::Component::Factory {
    public:
-    Factory(component_type_e type, base_component_lifecycle_callback_s cb, void* user_data)
-      : type_(type), cb_(cb), user_data_(user_data) {
+    Factory(base_component_lifecycle_callback_s cb, void* user_data)
+      : cb_(cb), user_data_(user_data) {
     }
 
     std::unique_ptr<component_based::Component> Create(std::string comp_id,
         std::string inst_id) override {
       return std::unique_ptr<component_based::Component>(
-          new (std::nothrow) StubBaseComponent(type_,
-            std::move(comp_id), std::move(inst_id), cb_, user_data_));
+          new (std::nothrow) StubBaseComponent(std::move(comp_id),
+              std::move(inst_id), cb_, user_data_));
     }
 
    private:
-    component_type_e type_;
     base_component_lifecycle_callback_s cb_;
     void* user_data_;
   };
 
-  StubBaseComponent(component_type_e type, std::string comp_id,
-                     std::string inst_id,
-                     base_component_lifecycle_callback_s cb,
-                     void* user_data)
-    : component_based::Component((component_based::Component::Type)type,
-      std::move(comp_id),
-      std::move(inst_id)),
-      cb_(cb),
-      user_data_(user_data) {
+  StubBaseComponent(std::string comp_id,
+                    std::string inst_id,
+                    base_component_lifecycle_callback_s cb,
+                    void* user_data)
+    : component_based::Component(std::move(comp_id), std::move(inst_id)),
+      cb_(cb), user_data_(user_data) {
   }
 
   ~StubBaseComponent() = default;
@@ -564,7 +560,8 @@ extern "C" EXPORT_API int base_frame_get_display_status(
 
   component_based::Component* component =
       static_cast<component_based::Component*>(context);
-  if (component->GetType() != component_based::Component::Type::Frame) {
+  if (component->GetType()->GetHash() !=
+      component_based::FrameComponent::FrameType::Hash) {
     LOGE("Invalid parameter");
     return COMPONENT_ERROR_INVALID_PARAMETER;
   }
@@ -732,7 +729,7 @@ component_based_app_base_add_base_component(
   }
 
   ::StubBaseComponent::Factory* factory =
-      new (std::nothrow) ::StubBaseComponent::Factory(type, *callback, user_data);
+      new (std::nothrow) ::StubBaseComponent::Factory(*callback, user_data);
   if (factory == nullptr) {
     LOGE("Out of memory");
     set_last_result(APP_ERROR_OUT_OF_MEMORY);
index 6f731a254068ce358a05088d2c9101d72deae13c..75fdafd62385f3c4817326f77f69e223e70be908 100755 (executable)
@@ -526,7 +526,8 @@ extern "C" EXPORT_API int frame_component_get_display_status(
 
   component_based::Component* component =
       static_cast<component_based::Component*>(context);
-  if (component->GetType() != component_based::Component::Type::Frame) {
+  if (component->GetType()->GetHash() !=
+      component_based::FrameComponent::FrameType::Hash) {
     LOGE("Invalid parameter");
     return COMPONENT_ERROR_INVALID_PARAMETER;
   }
@@ -559,7 +560,8 @@ extern "C" EXPORT_API int frame_component_get_window(
 
   component_based::Component* component =
       static_cast<component_based::Component*>(context);
-  if (component->GetType() != component_based::Component::Type::Frame) {
+  if (component->GetType()->GetHash() !=
+      component_based::FrameComponent::FrameType::Hash) {
     LOGE("Invalid parameter");
     return COMPONENT_ERROR_INVALID_PARAMETER;
   }
index c86b3eba601d97c704310c07c1476210ef6a7496..c50e659ce0d1601b884114fd3a6e81d5210a3ded 100644 (file)
@@ -127,7 +127,7 @@ TEST_F(ComponentTest, TestComponentClass) {
     __fake_app_control_add_action_handler;
 
   std::unique_ptr<component_based::Component> fc(
-      new component_based::Component(component_based::Component::Type::Frame, std::string("comp_id"),
+      new component_based::Component(std::string("comp_id"),
       std::string("inst_id")));
 
   std::string cid = fc->GetComponentID();
@@ -136,8 +136,8 @@ TEST_F(ComponentTest, TestComponentClass) {
   std::string iid = fc->GetInstanceID();
   EXPECT_EQ(iid, "inst_id");
 
-  component_based::Component::Type type = fc->GetType();
-  EXPECT_EQ(type, component_based::Component::Type::Frame);
+  auto type = fc->GetType();
+  EXPECT_EQ(type->GetName(), "base");
   fc->Finish();
 
   fc->RegisterAction(std::string("action"));