Utilize extracted i18n db in LanguageSubtagRstTree.
[platform/framework/web/wrt-installer.git] / src / wrt-installer / language_subtag_rst_tree.cpp
index 8bf901f..291c67d 100644 (file)
 #include <dpl/log/log.h>
 #include <dpl/db/orm.h>
 #include <dpl/string.h>
-#include <dpl/wrt-dao-ro/global_dao_read_only.h>
+#include <dpl/scope_guard.h>
+#include <wrt-commons/i18n-dao-ro/i18n_dao_read_only.h>
+#include <wrt-commons/i18n-dao-ro/i18n_database.h>
 #include <iterator>
 #include <vector>
 #include <ctype.h>
 #include <dpl/singleton_impl.h>
 IMPLEMENT_SINGLETON(LanguageSubtagRstTree)
 
+namespace I18nDAOReadOnly = I18n::DB::I18nDAOReadOnly;
+
 bool LanguageSubtagRstTree::ValidateLanguageTag(const std::string &tag_input)
 {
     std::string tag = tag_input;
@@ -40,57 +44,82 @@ bool LanguageSubtagRstTree::ValidateLanguageTag(const std::string &tag_input)
                   std::back_inserter(parts),
                   false);
     std::vector<DPL::String>::iterator token = parts.begin();
-    if (token == parts.end()) {
+    if (token == parts.end())
+    {
         return false;
     }
-    if (WrtDB::GlobalDAOReadOnly::IsValidSubTag(*token,
-                                                RECORD_TYPE_LANGUAGE))
+
+    I18n::DB::Interface::attachDatabaseRO();
+    DPL_SCOPE_EXIT()
+    {
+        I18n::DB::Interface::detachDatabase();
+    };
+
+    if (I18nDAOReadOnly::IsValidSubTag(*token, RECORD_TYPE_LANGUAGE))
     {
         ++token;
-    } else {
+    }
+    else
+    {
         return false;
     }
 
-    if (token == parts.end()) {
+    if (token == parts.end())
+    {
         return true;
     }
-    if (WrtDB::GlobalDAOReadOnly::IsValidSubTag(*token, RECORD_TYPE_EXTLANG)) {
+
+    if (I18nDAOReadOnly::IsValidSubTag(*token, RECORD_TYPE_EXTLANG))
+    {
         ++token;
     }
 
-    if (token == parts.end()) {
+    if (token == parts.end())
+    {
         return true;
     }
-    if (WrtDB::GlobalDAOReadOnly::IsValidSubTag(*token, RECORD_TYPE_SCRIPT)) {
+
+    if (I18nDAOReadOnly::IsValidSubTag(*token, RECORD_TYPE_SCRIPT))
+    {
         ++token;
     }
 
-    if (token == parts.end()) {
+    if (token == parts.end())
+    {
         return true;
     }
-    if (WrtDB::GlobalDAOReadOnly::IsValidSubTag(*token, RECORD_TYPE_REGION)) {
+
+    if (I18nDAOReadOnly::IsValidSubTag(*token, RECORD_TYPE_REGION))
+    {
         ++token;
     }
 
-    if (token == parts.end()) {
+    if (token == parts.end())
+    {
         return true;
     }
-    while (token != parts.end()) {
-        if (WrtDB::GlobalDAOReadOnly::IsValidSubTag(
-                *token, RECORD_TYPE_VARIANT))
+
+    while (token != parts.end())
+    {
+        if (I18nDAOReadOnly::IsValidSubTag(*token, RECORD_TYPE_VARIANT))
         {
             ++token;
-        } else {
+        }
+        else
+        {
             break;
         }
     }
 
     //'u' - unicode extension - only one BCP47 extension is registered.
     //TODO: unicode extension should be also validated (l.wrzosek)
-    if (token == parts.end()) {
+    if (token == parts.end())
+    {
         return true;
     }
-    if (*token == L"u") {
+
+    if (*token == L"u")
+    {
         ++token;
         bool one_or_more = false;
         while (token != parts.end() &&
@@ -100,16 +129,20 @@ bool LanguageSubtagRstTree::ValidateLanguageTag(const std::string &tag_input)
             one_or_more = true;
             ++token;
         }
-        if (!one_or_more) {
+        if (!one_or_more)
+        {
             return false;
         }
     }
 
     //'x' - privateuse
-    if (token == parts.end()) {
+    if (token == parts.end())
+    {
         return true;
     }
-    if (*token == L"x") {
+
+    if (*token == L"x")
+    {
         ++token;
         bool one_or_more = false;
         while (token != parts.end() &&
@@ -119,18 +152,21 @@ bool LanguageSubtagRstTree::ValidateLanguageTag(const std::string &tag_input)
             one_or_more = true;
             ++token;
         }
-        if (!one_or_more) {
+        if (!one_or_more)
+        {
             return false;
         }
     }
 
-    if (token == parts.end()) {
+    if (token == parts.end())
+    {
         return true;
     }
 
     //Try private use now:
     token = parts.begin();
-    if (*token == L"x") {
+    if (*token == L"x")
+    {
         ++token;
         bool one_or_more = false;
         while (token != parts.end() &&