From: Junghoon Park Date: Tue, 14 Jan 2020 06:24:21 +0000 (+0900) Subject: Make Type as a class X-Git-Tag: submit/tizen/20201231.025220~6 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=38ffa17c6e5456b1cc1571c84cbd01926ea1b801;p=platform%2Fcore%2Fappfw%2Fcomponent-based-application.git Make Type as a class - 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 --- diff --git a/component_based/base/component.cc b/component_based/base/component.cc index 577f2f6..7b3862e 100644 --- a/component_based/base/component.cc +++ b/component_based/base/component.cc @@ -28,10 +28,9 @@ 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)); diff --git a/component_based/base/component.h b/component_based/base/component.h index 8353ff5..cebbfe8 100644 --- a/component_based/base/component.h +++ b/component_based/base/component.h @@ -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 GetType() const { + return std::unique_ptr(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); diff --git a/component_based/base/component_implementation.h b/component_based/base/component_implementation.h index 57d431b..b7165d4 100644 --- a/component_based/base/component_implementation.h +++ b/component_based/base/component_implementation.h @@ -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 sys_ev_; diff --git a/component_based/base/frame_component.cc b/component_based/base/frame_component.cc index 1c3ef52..d000872 100644 --- a/component_based/base/frame_component.cc +++ b/component_based/base/frame_component.cc @@ -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; diff --git a/component_based/base/frame_component.h b/component_based/base/frame_component.h index 26125df..89031a5 100644 --- a/component_based/base/frame_component.h +++ b/component_based/base/frame_component.h @@ -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 GetType() const override { + return std::unique_ptr(new FrameType()); + } + bool OnBaseCreate() override; void OnBaseDestroy() override; void OnBaseStart(AppControl control, bool restarted) override; diff --git a/component_based/base/service_component.cc b/component_based/base/service_component.cc index 1963462..a61be06 100644 --- a/component_based/base/service_component.cc +++ b/component_based/base/service_component.cc @@ -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; diff --git a/component_based/base/service_component.h b/component_based/base/service_component.h index 5e2f1ef..90247c8 100644 --- a/component_based/base/service_component.h +++ b/component_based/base/service_component.h @@ -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 GetType() const override { + return std::unique_ptr(new ServiceType()); + } + bool OnBaseCreate() override; void OnBaseDestroy() override; void OnBaseStart(AppControl control, bool restarted) override; diff --git a/component_based/base/stub.cc b/component_based/base/stub.cc index 1d95b29..d6ed031 100644 --- a/component_based/base/stub.cc +++ b/component_based/base/stub.cc @@ -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 Create(std::string comp_id, std::string inst_id) override { return std::unique_ptr( - 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(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); diff --git a/component_based/efl_base/stub.cc b/component_based/efl_base/stub.cc index 6f731a2..75fdafd 100755 --- a/component_based/efl_base/stub.cc +++ b/component_based/efl_base/stub.cc @@ -526,7 +526,8 @@ extern "C" EXPORT_API int frame_component_get_display_status( component_based::Component* component = static_cast(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(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; } diff --git a/unit_tests/src/base/test_component_based_component.cc b/unit_tests/src/base/test_component_based_component.cc index c86b3eb..c50e659 100644 --- a/unit_tests/src/base/test_component_based_component.cc +++ b/unit_tests/src/base/test_component_based_component.cc @@ -127,7 +127,7 @@ TEST_F(ComponentTest, TestComponentClass) { __fake_app_control_add_action_handler; std::unique_ptr 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"));