bootstrap: Modify the id for object management as giving by atspi 45/261945/7 submit/tizen/20210811.053854
authorWoochanlee <wc0917.lee@samsung.com>
Thu, 29 Jul 2021 09:27:28 +0000 (18:27 +0900)
committerWoochanlee <wc0917.lee@samsung.com>
Wed, 4 Aug 2021 03:31:14 +0000 (12:31 +0900)
The bootstrap was managed by the object that was granted by its own.
Unified by the id granted by atspi, it removes unnecessary operation.

ABI break - i deleted id in proto. script can't use id anymore.

Change-Id: Ic6e3e8a18a2fe35b152c86b2214c0037b0ad6f81

org.tizen.aurum-bootstrap/inc/ObjectMapper.h
org.tizen.aurum-bootstrap/src/Commands/DumpObjectTreeCommand.cc
org.tizen.aurum-bootstrap/src/Commands/FindElementCommand.cc
org.tizen.aurum-bootstrap/src/ObjectMapper.cc
protocol/aurum.proto

index 7f4f651a95f962d148e2594540051323789f24c5..7a1b33fb74642d7966d65287239638ce350043db 100644 (file)
@@ -8,7 +8,6 @@
 class ObjectMapper {
 private:
     std::map<std::string, std::shared_ptr<UiObject>> mObjectMap;
-    std::map<std::string, std::string> mObjectMapReverse;
     unsigned long long                               mObjCounter;
 
 private:
@@ -20,12 +19,7 @@ public:
 public:
     static ObjectMapper *getInstance();
     std::string addElement(std::shared_ptr<UiObject> object);
-
-    std::shared_ptr<UiObject> getElement(const std::string key);
-    std::string getElement(std::shared_ptr<UiObject> object);
-
-    bool removeElement(const std::string key);
-    bool removeElement(std::shared_ptr<UiObject> object);
-
+    std::shared_ptr<UiObject> getElement(const std::string elementId);
+    bool removeElement(const std::string elementId);
     void cleanUp();
 };
index 47008f3b6c775d9a712e08772c084b64d58144c8..013af313f5e9b86c78402023e05b4f6078319845 100644 (file)
@@ -16,14 +16,12 @@ DumpObjectTreeCommand::DumpObjectTreeCommand(const ::aurum::ReqDumpObjectTree *r
 void DumpObjectTreeCommand::traverse(::aurum::Element *root, std::shared_ptr<Node> node, int depth)
 {
     if (!node->mNode) return;
-    std::string key{};
     std::shared_ptr<UiObject> obj = node->mNode;
 
-    key = mObjMap->getElement(obj);
-    if (key.length() <= 0)
-        key = mObjMap->addElement(obj);
+    if (mObjMap->getElement(obj->getId()) == nullptr)
+        mObjMap->addElement(std::move(obj));
 
-    root->set_elementid(key);
+    root->set_elementid(obj->getId());
 
     ::aurum::Rect *rect = root->mutable_geometry();
     const Rect<int> &size = obj->getScreenBoundingBox();
@@ -43,7 +41,6 @@ void DumpObjectTreeCommand::traverse(::aurum::Element *root, std::shared_ptr<Nod
     root->set_widget_style(obj->getElementStyle());
 
     root->set_text(obj->getText());
-    root->set_id(obj->getId());
     root->set_automationid(obj->getAutomationId());
     root->set_package(obj->getApplicationPackage());
     root->set_role(obj->getRole());
index 53023836c3cefb2198861dc55e9322750b5e8310..62230e3825e43f599b1cccfef8a29a1a705d3594 100644 (file)
@@ -28,7 +28,8 @@ std::vector<std::shared_ptr<UiSelector>> FindElementCommand::getSelectors(void)
 {
     auto sel = std::make_shared<UiSelector>();
 
-    if(mRequest->_automationid_case())    sel->id(mRequest->automationid());
+    if(mRequest->_elementid_case())       sel->id(mRequest->elementid());
+    if(mRequest->_automationid_case())    sel->automationid(mRequest->automationid());
     if(mRequest->_textfield_case())       sel->text(mRequest->textfield());
     if(mRequest->_widgettype_case())      sel->type(mRequest->widgettype());
     if(mRequest->_widgetstyle_case())     sel->style(mRequest->widgetstyle());
@@ -65,14 +66,13 @@ std::vector<std::shared_ptr<UiSelector>> FindElementCommand::getSelectors(void)
     if (founds.size() > 0) {
         for (auto& found : founds) {
             UiObject *obj = found.get();
-            std::string key{};
-            key = mObjMap->getElement(found);
-            if (key.length() <= 0)
-              key = mObjMap->addElement(std::move(found));
-            LOGI("found object : %s key:%s",
-                  obj->getAutomationId().c_str(), key.c_str());
+            if (mObjMap->getElement(obj->getId()) == nullptr)
+                mObjMap->addElement(std::move(found));
+            LOGI("found object : %p elementId:%s",
+                obj, obj->getId().c_str());
+
             ::aurum::Element *elm = mResponse->add_elements();
-            elm->set_elementid(key);
+            elm->set_elementid(obj->getId());
             elm->set_package(obj->getApplicationPackage());
 
             ::aurum::Rect *rect = elm->mutable_geometry();
@@ -93,7 +93,6 @@ std::vector<std::shared_ptr<UiSelector>> FindElementCommand::getSelectors(void)
             elm->set_widget_style(obj->getElementStyle());
 
             elm->set_text(obj->getText());
-            elm->set_id(obj->getId());
             elm->set_automationid(obj->getAutomationId());
             elm->set_package(obj->getApplicationPackage());
             elm->set_role(obj->getRole());
index 40c68d131027cc613eb973d5deda3dc00a8c2b9e..0dc09e3d66bcc919a609b2e874abd2dd0638ecbc 100644 (file)
@@ -4,7 +4,7 @@
 #include <algorithm>
 #include <sstream>
 
-ObjectMapper::ObjectMapper() : mObjectMap{}, mObjectMapReverse{}, mObjCounter{0} {}
+ObjectMapper::ObjectMapper() : mObjectMap{}, mObjCounter{0} {}
 
 ObjectMapper::~ObjectMapper() {}
 
@@ -16,73 +16,39 @@ ObjectMapper *ObjectMapper::getInstance()
 
 std::string ObjectMapper::addElement(std::shared_ptr<UiObject> object)
 {
-    ++mObjCounter;
-    std::string key = std::to_string(mObjCounter);
-    mObjectMap[key] = object;
     std::string value = object->getId();
-    mObjectMapReverse[value] = key;
-    LOGI("addElement %p as key %s, id %s", object.get(), key.c_str(), value.c_str());
-    return key;
+    mObjectMap[value] = object;
+    LOGI("addElement %p, id %s", object.get(), value.c_str());
+    return value;
 }
 
-std::shared_ptr<UiObject> ObjectMapper::getElement(std::string key)
+std::shared_ptr<UiObject> ObjectMapper::getElement(std::string elementId)
 {
-    LOGI("getElement for key(%s)", key.c_str());
-    unsigned long long keyCnt = (unsigned long long)std::stoll(key); // this key is a result of calling std:to_string(mObjCounter)
-    if (keyCnt <= 0 || keyCnt > mObjCounter) return nullptr;
-    if (mObjectMap.count(key)) {
-        std::shared_ptr<UiObject> obj = mObjectMap[key];
+    LOGI("getElement for elementId(%s)", elementId.c_str());
+    if (mObjectMap.count(elementId)) {
+        std::shared_ptr<UiObject> obj = mObjectMap[elementId];
         obj->refresh();
         LOGI("succeeded");
         return obj;
     }
-    LOGI("key is not exist in mObjectMap");
+    LOGI("Id(%s) is not exist in mObjectMap", elementId.c_str());
     return nullptr;
 }
 
-std::string ObjectMapper::getElement(std::shared_ptr<UiObject> object)
+bool ObjectMapper::removeElement(const std::string elementId)
 {
-    LOGI("getElement for object(%p)", object.get());
-    std::string value = object->getId();
-    if (mObjectMapReverse.count(value)) {
-        LOGI("succeeded");
-        return mObjectMapReverse[value];
-    }
-    LOGI("object is not exist in mObjectMapReverse");
-    return std::string{""};
-}
-
-bool ObjectMapper::removeElement(const std::string key)
-{
-    LOGI("removeElement for key(%s)", key.c_str());
-    std::shared_ptr<UiObject> obj = getElement(key);
+    LOGI("removeElement for Id(%s)", elementId.c_str());
+    std::shared_ptr<UiObject> obj = getElement(elementId);
     if (obj) {
-        std::string value = obj->getId();
-        if (mObjectMap.erase(key) && mObjectMapReverse.erase(value))
+        if (mObjectMap.erase(elementId))
             return true;
     }
     return false;
 }
 
-bool ObjectMapper::removeElement(std::shared_ptr<UiObject> object)
-{
-    LOGI("removeElement for object(%p)", object.get());
-    std::string key = getElement(object);
-    if (key.empty()) return false;
-    return removeElement(key);
-}
-
 void ObjectMapper::cleanUp()
 {
     LOGI("clean up object map");
-    for(auto iter = mObjectMapReverse.begin(); iter != mObjectMapReverse.end(); ) {
-        auto obj = mObjectMap[iter->second];
-        if (obj && !obj->isValid()) {
-            iter = mObjectMapReverse.erase(iter);
-        } else {
-            ++iter;
-        }
-    }
     for(auto iter = mObjectMap.begin(); iter != mObjectMap.end(); ) {
         if (!iter->second->isValid()) {
             iter = mObjectMap.erase(iter);
index 0f4f93298a9e0b148aeb8d0b31d096b12d6e5e2d..d26d27246e74a5c9c031c38611e5cf2072206f8a 100644 (file)
@@ -57,7 +57,6 @@ message Element {
    string widget_style = 6;
 
    string text = 7;
-   string id = 8;
    string automationId = 9;
    string package = 10;
    string role = 11;