libaurum: apply smart pointer wider and extract impl out
[platform/core/uifw/aurum.git] / org.tizen.aurum-bootstrap / src / Commands / ClickCommand.cc
1 #include "ClickCommand.h"
2
3 #include "UiObject.h"
4 #include "UiDevice.h"
5
6 #include <loguru.hpp>
7
8 ClickCommand::ClickCommand(const ::aurum::ReqClick* request,
9                            ::aurum::RspClick*       response)
10     : mRequest{request}, mResponse{response}
11 {
12 }
13
14 ::grpc::Status ClickCommand::execute()
15 {
16    return grpc::Status::CANCELLED;
17 }
18
19 std::unique_ptr<ClickCommand> ClickCommand::createCommand(const ::aurum::ReqClick* request, ::aurum::RspClick* response)
20 {
21     ::aurum::ReqClick_RequestType type = request->type();
22
23     if (type == ::aurum::ReqClick_RequestType::ReqClick_RequestType_ELEMENTID)
24         return std::make_unique<ClickElementCommand>(request, response);
25     else if (type == ::aurum::ReqClick_RequestType::ReqClick_RequestType_COORD)
26         return std::make_unique<ClickCoordCommand>(request, response);
27     else if (type == ::aurum::ReqClick_RequestType::ReqClick_RequestType_ATSPI)
28         return std::make_unique<ClickAtspiCommand>(request, response);
29     else
30         return std::make_unique<ClickCommand>(request, response);
31 }
32
33 ::grpc::Status ClickElementCommand::execute()
34 {
35     ObjectMapper* mObjMap = ObjectMapper::getInstance();
36     std::shared_ptr<UiObject> obj = mObjMap->getElement(mRequest->elementid());
37     LOG_SCOPE_F(INFO, "ClickElementCommand execute %p", obj);
38
39     if (obj) {
40         obj->click();
41         mResponse->set_status(::aurum::RspStatus::OK);
42     } else
43         mResponse->set_status(::aurum::RspStatus::ERROR);
44
45     return grpc::Status::OK;
46 }
47
48 ::grpc::Status ClickCoordCommand::execute()
49 {
50     std::shared_ptr<UiDevice> obj = UiDevice::getInstance();
51     const ::aurum::Point& point = mRequest->coordination();
52     LOG_SCOPE_F(INFO, "ClickCoordCommand execute %p @ (%d, %d)", obj.get(), point.x(), point.y());
53     obj->click(point.x(), point.y());
54     mResponse->set_status(::aurum::RspStatus::OK);
55     return grpc::Status::OK;
56 }
57
58 ::grpc::Status ClickAtspiCommand::execute()
59 {
60     ObjectMapper* mObjMap = ObjectMapper::getInstance();
61     std::shared_ptr<UiObject> obj = mObjMap->getElement(mRequest->elementid());
62
63     LOG_SCOPE_F(INFO, "ClickAtspiCommand execute %p", obj);
64
65     if (obj) {
66         if (obj->DoAtspiActivate()) mResponse->set_status(::aurum::RspStatus::OK);
67         else mResponse->set_status(::aurum::RspStatus::ERROR);
68     } else {
69         mResponse->set_status(::aurum::RspStatus::ERROR);
70     }
71
72     return grpc::Status::OK;
73 }