1 #include "FindElementCommand.h"
3 #include "ISearchable.h"
8 #include "UiSelector.h"
12 FindElementCommand::FindElementCommand(const ::aurum::ReqFindElement* request,
13 ::aurum::RspFindElement* response)
14 : mRequest{request}, mResponse{response}
16 mObjMap = ObjectMapper::getInstance();
18 std::shared_ptr<ISearchable> FindElementCommand::getSearchableTop(void)
20 std::shared_ptr<ISearchable> searchableObj{nullptr};
22 if (mRequest->_automationid_case() != 0) {
23 searchableObj = mObjMap->getElement(mRequest->elementid());
25 if (!searchableObj) searchableObj = UiDevice::getInstance();
30 std::vector<std::shared_ptr<UiSelector>> FindElementCommand::getSelectors(void)
32 auto sel = std::make_shared<UiSelector>();
34 if(mRequest->_automationid_case()) sel->id(mRequest->automationid());
35 if(mRequest->_textfield_case()) sel->text(mRequest->textfield());
36 if(mRequest->_widgettype_case()) sel->type(mRequest->widgettype());
37 if(mRequest->_widgetstyle_case()) sel->style(mRequest->widgetstyle());
38 if(mRequest->_ischecked_case()) sel->isChecked(mRequest->ischecked());
39 if(mRequest->_ischeckable_case()) sel->isCheckable(mRequest->ischeckable());
40 if(mRequest->_isclickable_case()) sel->isClickable(mRequest->isclickable());
41 if(mRequest->_isenabled_case()) sel->isEnabled(mRequest->isenabled());
42 if(mRequest->_isfocused_case()) sel->isFocused(mRequest->isfocused());
43 if(mRequest->_isfocusable_case()) sel->isFocusable(mRequest->isfocusable());
44 if(mRequest->_isscrollable_case()) sel->isScrollable(mRequest->isscrollable());
45 if(mRequest->_isselected_case()) sel->isSelected(mRequest->isselected());
46 if(mRequest->_isshowing_case()) sel->isShowing(mRequest->isshowing());
47 if(mRequest->_isactive_case()) sel->isActive(mRequest->isactive());
48 if(mRequest->_mindepth_case()) sel->minDepth(mRequest->mindepth());
49 if(mRequest->_maxdepth_case()) sel->maxDepth(mRequest->maxdepth());
51 return std::vector<std::shared_ptr<UiSelector>>{sel};
54 ::grpc::Status FindElementCommand::execute()
56 LOG_SCOPE_F(INFO, "findElement --------------- ");
57 auto searchableObj = getSearchableTop();
58 auto selectors = getSelectors();
60 std::vector<std::shared_ptr<UiObject>> founds = {};
62 for ( auto &sel : selectors ) {
63 auto ret = searchableObj->findObjects(sel);
64 std::move(std::begin(ret), std::end(ret), std::back_inserter(founds));
67 if (founds.size() > 0) {
68 for (auto& found : founds) {
69 UiObject* obj = found.get();
70 std::string key = mObjMap->addElement(std::move(found));
71 LOG_F(INFO, "found object : %s key:%s",
72 obj->getResourceName().c_str(), key.c_str());
73 ::aurum::Element* elm = mResponse->add_elements();
74 elm->set_elementid(key);
76 mResponse->set_status(::aurum::RspStatus::OK);
79 return grpc::Status::OK;