Fixed installer couldn't add account to manifest file
[platform/framework/web/wrt-installer.git] / src / jobs / widget_install / manifest.cpp
old mode 100755 (executable)
new mode 100644 (file)
index 98adb96..977f58e
 
 namespace Jobs {
 namespace WidgetInstall {
-
 void writeElement(xmlTextWriterPtr writer, const char * name, DPL::String body)
 {
     int state = xmlTextWriterWriteElement(writer, BAD_CAST name,
-            BAD_CAST DPL::ToUTF8String(body).c_str());
-    if (state < 0)
-    {
+                                          BAD_CAST DPL::ToUTF8String(
+                                              body).c_str());
+    if (state < 0) {
         ThrowMsg(LibxmlUtils::Libxml2Error, "xmlTextWriterWriteElement failed");
     }
 }
@@ -39,9 +38,8 @@ void writeElement(xmlTextWriterPtr writer, const char * name, DPL::String body)
 void writeText(xmlTextWriterPtr writer, DPL::String text)
 {
     int state = xmlTextWriterWriteString(writer,
-            BAD_CAST DPL::ToUTF8String(text).c_str());
-    if (state < 0)
-    {
+                                         BAD_CAST DPL::ToUTF8String(text).c_str());
+    if (state < 0) {
         ThrowMsg(LibxmlUtils::Libxml2Error, "xmlTextWriterWriteText failed");
     }
 }
@@ -49,15 +47,17 @@ void writeText(xmlTextWriterPtr writer, DPL::String text)
 void writeElement(xmlTextWriterPtr writer, const char * name, const char * body)
 {
     int state = xmlTextWriterWriteElement(writer, BAD_CAST name, BAD_CAST body);
-    if (state < 0)
-    {
+    if (state < 0) {
         ThrowMsg(LibxmlUtils::Libxml2Error, "xmlTextWriterWriteElement failed");
     }
 }
 
-void writeElementWithOneAttribute(xmlTextWriterPtr writer, const char * name,
-        DPL::String body, const char * nameAttr, DPL::String bodyAttr,
-        bool condition = true)
+void writeElementWithOneAttribute(xmlTextWriterPtr writer,
+                                  const char * name,
+                                  DPL::String body,
+                                  const char * nameAttr,
+                                  DPL::String bodyAttr,
+                                  bool condition = true)
 {
     startElement(writer, name);
     writeAttribute(writer, nameAttr, bodyAttr, condition);
@@ -68,8 +68,7 @@ void writeElementWithOneAttribute(xmlTextWriterPtr writer, const char * name,
 void startElement(xmlTextWriterPtr writer, const char * name)
 {
     int state = xmlTextWriterStartElement(writer, BAD_CAST name);
-    if (state < 0)
-    {
+    if (state < 0) {
         ThrowMsg(LibxmlUtils::Libxml2Error, "xmlTextWriterStartElement failed");
     }
 }
@@ -77,34 +76,42 @@ void startElement(xmlTextWriterPtr writer, const char * name)
 void endElement(xmlTextWriterPtr writer)
 {
     int state = xmlTextWriterEndElement(writer);
-    if (state < 0)
-    {
+    if (state < 0) {
         ThrowMsg(LibxmlUtils::Libxml2Error, "xmlTextWriterEndElement failed");
     }
 }
 
-void writeAttribute(xmlTextWriterPtr writer, const char * name, DPL::String body,
-        bool condition = true)
+void writeAttribute(xmlTextWriterPtr writer,
+                    const char * name,
+                    DPL::String body,
+                    bool condition = true)
 {
-    if (!condition)
+    if (!condition) {
         return;
+    }
     int state = xmlTextWriterWriteAttribute(writer, BAD_CAST name,
-            BAD_CAST DPL::ToUTF8String(body).c_str());
-    if (state < 0)
-    {
-        ThrowMsg(LibxmlUtils::Libxml2Error, "xmlTextWriterWriteAttribute failed");
+                                            BAD_CAST DPL::ToUTF8String(
+                                                body).c_str());
+    if (state < 0) {
+        ThrowMsg(LibxmlUtils::Libxml2Error,
+                 "xmlTextWriterWriteAttribute failed");
     }
 }
 
-void writeAttribute(xmlTextWriterPtr writer, const char * name, const char * body,
-        bool condition = true)
+void writeAttribute(xmlTextWriterPtr writer,
+                    const char * name,
+                    const char * body,
+                    bool condition = true)
 {
-    if (!condition)
+    if (!condition) {
         return;
-    int state = xmlTextWriterWriteAttribute(writer, BAD_CAST name, BAD_CAST body);
-    if (state < 0)
-    {
-        ThrowMsg(LibxmlUtils::Libxml2Error, "xmlTextWriterWriteAttribute failed");
+    }
+    int state = xmlTextWriterWriteAttribute(writer,
+                                            BAD_CAST name,
+                                            BAD_CAST body);
+    if (state < 0) {
+        ThrowMsg(LibxmlUtils::Libxml2Error,
+                 "xmlTextWriterWriteAttribute failed");
     }
 }
 
@@ -112,28 +119,28 @@ void Manifest::generate(DPL::String filename)
 {
     xmlTextWriterPtr writer;
     int state;
-    writer = xmlNewTextWriterFilename(DPL::ToUTF8String(filename).c_str(), 0); //compression set to 0
-    if (writer == NULL)
+
+    //compression set to 0
+    writer = xmlNewTextWriterFilename(DPL::ToUTF8String(filename).c_str(), 0);
+
+    if (writer == NULL) {
         ThrowMsg(LibxmlUtils::Libxml2Error, "xmlNewTextWriterFilename failed");
-    state = xmlTextWriterSetIndent (writer, 1);
-    if (state < 0)
-    {
+    }
+    state = xmlTextWriterSetIndent(writer, 1);
+    if (state < 0) {
         ThrowMsg(LibxmlUtils::Libxml2Error, "xmlTextWriterSetIndent failed");
     }
 
     state = xmlTextWriterStartDocument(writer, NULL, "utf-8", NULL);
-    if (state < 0)
-    {
+    if (state < 0) {
         ThrowMsg(LibxmlUtils::Libxml2Error, "xmlTextWriterStartDocument failed");
     }
     this->serialize(writer);
     state = xmlTextWriterEndDocument(writer);
-    if (state < 0)
-    {
+    if (state < 0) {
         ThrowMsg(LibxmlUtils::Libxml2Error, "xmlTextWriterEndDocument failed");
     }
-    if (writer != NULL)
-    {
+    if (writer != NULL) {
         xmlFreeTextWriter(writer);
         writer = NULL;
     }
@@ -147,19 +154,21 @@ void Manifest::serialize(xmlTextWriterPtr writer)
         writeAttribute(writer, "package", this->package);
         writeAttribute(writer, "type", this->type);
         writeAttribute(writer, "version", this->version);
-        if (!this->installLocation.IsNull())
-            writeAttribute(writer, "install-location", (*this->installLocation),
-                    (*this->installLocation).empty());
+        if (!this->installLocation.IsNull()) {
+            writeAttribute(writer, "install-location", (*this->installLocation));
+        }
+        writeAttribute(writer, "storeclient-id", this->storeClientId,
+                !this->storeClientId.empty());
 
         FOREACH(l, this->label)
         {
             writeElementWithOneAttribute(writer, "label", l->getString(),
-                    "xml:lang", l->getLang(), l->hasLang());
+                                         "xml:lang", l->getLang(), l->hasLang());
         }
         FOREACH(i, this->icon)
         {
             writeElementWithOneAttribute(writer, "icon", i->getString(),
-                    "xml:lang", i->getLang(), i->hasLang());
+                                         "xml:lang", i->getLang(), i->hasLang());
         }
         FOREACH(a, this->author)
         {
@@ -168,15 +177,31 @@ void Manifest::serialize(xmlTextWriterPtr writer)
         FOREACH(d, this->description)
         {
             writeElementWithOneAttribute(writer, "description", d->getString(),
-                    "xml:lang", d->getLang(), d->hasLang());
+                                         "xml:lang", d->getLang(), d->hasLang());
         }
         //FOREACH(c, this->compatibility) { c->serialize(writer); }
         //FOREACH(d, this->deviceProfile) { d->serialize(writer); }
-        FOREACH(s, this->serviceApplication) { s->serialize(writer); }
-        FOREACH(u, this->uiApplication) { u->serialize(writer); }
-        FOREACH(i, this->imeApplication) { i->serialize(writer); }
+        FOREACH(s, this->serviceApplication) {
+            s->serialize(writer);
+        }
+        FOREACH(u, this->uiApplication) {
+            u->serialize(writer);
+        }
+        FOREACH(i, this->imeApplication) {
+            i->serialize(writer);
+        }
         //FOREACH(f, this->font) { f->serialize(writer); }
-        FOREACH(l, this->livebox) { l->serialize(writer); }
+        FOREACH(l, this->livebox) {
+            l->serialize(writer);
+        }
+        FOREACH(acc, this->account)
+        {
+            acc->serialize(writer);
+        }
+
+        if (!this->privileges.isEmpty()) {
+            this->privileges.serialize(writer);
+        }
     }
     endElement(writer);
 }
@@ -195,21 +220,24 @@ void ServiceApplication::serialize(xmlTextWriterPtr writer)
 {
     startElement(writer, "service-application");
     writeAttribute(writer, "appid", this->appid);
-    writeAttribute(writer, "auto-restart", (!this->autoRestart.IsNull() &&
-            (*this->autoRestart)) ? "true" : "false");
+    writeAttribute(writer, "auto-restart",
+                   (!this->autoRestart.IsNull() &&
+                    (*this->autoRestart)) ? "true" :
+                   "false");
     writeAttribute(writer, "exec", this->exec);
     writeAttribute(writer, "on-boot", (!this->onBoot.IsNull() &&
-            (*this->onBoot)) ? "true" : "false");
+                                       (*this->onBoot)) ? "true" : "false");
     writeAttribute(writer, "type", this->type);
     FOREACH(l, this->label)
     {
-        writeElementWithOneAttribute(writer, "label", l->getString(), "xml:lang",
-                l->getLang(), l->hasLang());
+        writeElementWithOneAttribute(writer, "label",
+                                     l->getString(), "xml:lang",
+                                     l->getLang(), l->hasLang());
     }
     FOREACH(i, this->icon)
     {
         writeElementWithOneAttribute(writer, "icon", i->getString(), "xml:lang",
-                i->getLang(), i->hasLang());
+                                     i->getLang(), i->hasLang());
     }
     FOREACH(a, this->appControl)
     {
@@ -223,25 +251,34 @@ void UiApplication::serialize(xmlTextWriterPtr writer)
     startElement(writer, "ui-application");
     writeAttribute(writer, "appid", this->appid);
     writeAttribute(writer, "exec", this->exec);
-    if (!this->multiple.IsNull())
+    if (!this->multiple.IsNull()) {
         writeAttribute(writer, "multiple", (*this->multiple) ? "true" : "false");
-    if (!this->nodisplay.IsNull())
-        writeAttribute(writer, "nodisplay", (*this->nodisplay) ? "true" : "false");
-    if (!this->taskmanage.IsNull())
-        writeAttribute(writer, "taskmanage", (*this->taskmanage) ? "true" : "false");
+    }
+    if (!this->nodisplay.IsNull()) {
+        writeAttribute(writer,
+                       "nodisplay",
+                       (*this->nodisplay) ? "true" : "false");
+    }
+    if (!this->taskmanage.IsNull()) {
+        writeAttribute(writer,
+                       "taskmanage",
+                       (*this->taskmanage) ? "true" : "false");
+    }
     writeAttribute(writer, "type", this->type);
     writeAttribute(writer, "extraid", this->extraid);
-    if (!this->categories.IsNull())
+    if (!this->categories.IsNull()) {
         writeAttribute(writer, "categories", (*this->categories));
+    }
     FOREACH(l, this->label)
     {
-        writeElementWithOneAttribute(writer, "label", l->getString(), "xml:lang",
-                l->getLang(), l->hasLang());
+        writeElementWithOneAttribute(writer, "label",
+                                     l->getString(), "xml:lang",
+                                     l->getLang(), l->hasLang());
     }
     FOREACH(i, this->icon)
     {
         writeElementWithOneAttribute(writer, "icon", i->getString(), "xml:lang",
-                i->getLang(), i->hasLang());
+                                     i->getLang(), i->hasLang());
     }
     FOREACH(a, this->appControl)
     {
@@ -253,6 +290,9 @@ void UiApplication::serialize(xmlTextWriterPtr writer)
         writeAttribute(writer, "name", *c);
         endElement(writer);
     }
+    FOREACH(m, this->metadata) {
+        m->serialize(writer);
+    }
     endElement(writer);
 }
 
@@ -261,20 +301,25 @@ void ImeApplication::serialize(xmlTextWriterPtr writer)
     startElement(writer, "ime-application");
     writeAttribute(writer, "appid", this->appid);
     writeAttribute(writer, "exec", this->exec);
-    if (!this->multiple.IsNull())
+    if (!this->multiple.IsNull()) {
         writeAttribute(writer, "multiple", (*this->multiple) ? "true" : "false");
-    if (!this->nodisplay.IsNull())
-        writeAttribute(writer, "nodisplay", (*this->nodisplay) ? "true" : "false");
+    }
+    if (!this->nodisplay.IsNull()) {
+        writeAttribute(writer,
+                       "nodisplay",
+                       (*this->nodisplay) ? "true" : "false");
+    }
     writeAttribute(writer, "type", this->type);
     FOREACH(l, this->label)
     {
-        writeElementWithOneAttribute(writer, "label", l->getString(), "xml:lang",
-                l->getLang(), l->hasLang());
+        writeElementWithOneAttribute(writer, "label",
+                                     l->getString(), "xml:lang",
+                                     l->getLang(), l->hasLang());
     }
     FOREACH(i, this->icon)
     {
         writeElementWithOneAttribute(writer, "icon", i->getString(), "xml:lang",
-                i->getLang(), i->hasLang());
+                                     i->getLang(), i->hasLang());
     }
     endElement(writer);
 }
@@ -306,15 +351,15 @@ void AppControl::serialize(xmlTextWriterPtr writer)
 void LiveBox::serialize(xmlTextWriterPtr writer)
 {
     startElement(writer, "livebox");
-    if(!this->liveboxId.empty()) {
+    if (!this->liveboxId.empty()) {
         writeAttribute(writer, "appid", this->liveboxId);
     }
 
-    if(!this->primary.empty()) {
+    if (!this->primary.empty()) {
         writeAttribute(writer, "primary", this->primary);
     }
 
-    if(!this->updatePeriod.empty()) {
+    if (!this->updatePeriod.empty()) {
         writeAttribute(writer, "period", this->updatePeriod);
     }
 
@@ -322,36 +367,61 @@ void LiveBox::serialize(xmlTextWriterPtr writer)
     writeAttribute(writer, "network", "true");
     writeAttribute(writer, "nodisplay", "false");
 
-    if(!this->label.empty()) {
-        startElement(writer, "label");
-        writeText(writer, this->label);
-        endElement(writer);
+    if (!this->label.empty()) {
+        int defaultLabelChk = 0;
+        FOREACH(m, this->label)
+        {
+            std::pair<DPL::String, DPL::String> boxLabel = *m;
+            startElement(writer, "label");
+            if (!boxLabel.first.empty()) {
+                writeAttribute(writer, "xml:lang", boxLabel.first);
+            } else {
+                defaultLabelChk++;
+            }
+            writeText(writer, boxLabel.second);
+            endElement(writer);
+        }
+        if(!defaultLabelChk) {
+            startElement(writer, "label");
+            writeText(writer, DPL::FromUTF8String("NO NAME"));
+            endElement(writer);
+        }
     }
-
-    if(!this->icon.empty()) {
+    if (!this->icon.empty()) {
         startElement(writer, "icon");
         writeText(writer, this->icon);
         endElement(writer);
     }
 
-    if(!this->autoLaunch.empty()) {
+    if (!this->autoLaunch.empty()) {
         startElement(writer, "launch");
         writeText(writer, this->autoLaunch);
         endElement(writer);
     }
 
-    if(!this->box.boxSrc.empty() && !this->box.boxSize.empty())
+    if (!this->box.boxSrc.empty() &&
+        !this->box.boxMouseEvent.empty() &&
+        !this->box.boxSize.empty())
     {
         startElement(writer, "box");
         writeAttribute(writer, "type", "buffer");
+        writeAttribute(writer, "mouse_event", this->box.boxMouseEvent);
+        writeAttribute(writer, "touch_effect", this->box.boxTouchEffect);
 
-        FOREACH(m, this->box.boxSize)
+        FOREACH(it, this->box.boxSize)
         {
-            std::pair<DPL::String, DPL::String> boxSize = *m;
             startElement(writer, "size");
-            if(!boxSize.second.empty())
-                writeAttribute(writer, "preview", boxSize.second);
-            writeText(writer, boxSize.first);
+            if (!(*it).m_preview.empty()) {
+                writeAttribute(writer, "preview", (*it).m_preview);
+            }
+            if (!(*it).m_useDecoration.empty()) {
+                writeAttribute(writer, "need_frame", (*it).m_useDecoration);
+            } else {
+                // default value of use-decoration is "true"
+                writeAttribute(writer, "need_frame", DPL::String(L"true"));
+            }
+
+            writeText(writer, (*it).m_size);
             endElement(writer);
         }
 
@@ -361,12 +431,16 @@ void LiveBox::serialize(xmlTextWriterPtr writer)
 
         endElement(writer);
 
-        if(!this->box.pdSrc.empty() && ! this->box.pdWidth.empty() && ! this->box.pdHeight.empty()) {
+        if (!this->box.pdSrc.empty() &&
+            !this->box.pdWidth.empty() &&
+            !this->box.pdHeight.empty())
+        {
             startElement(writer, "pd");
             writeAttribute(writer, "type", "buffer");
 
             startElement(writer, "size");
-            DPL::String pdSize = this->box.pdWidth+DPL::String(L"x")+this->box.pdHeight;
+            DPL::String pdSize = this->box.pdWidth + DPL::String(L"x") +
+                this->box.pdHeight;
             writeText(writer, pdSize);
             endElement(writer);
 
@@ -381,5 +455,61 @@ void LiveBox::serialize(xmlTextWriterPtr writer)
     endElement(writer);
 }
 
+void Account::serialize(xmlTextWriterPtr writer)
+{
+    startElement(writer, "account");
+    {
+        startElement(writer, "account-provider");
+        writeAttribute(writer, "appid", this->provider.appid);
+        writeAttribute(writer, "multiple-accounts-support",
+                this->provider.multiAccount);
+
+        FOREACH(i, this->provider.icon)
+        {
+            startElement(writer, "icon");
+            writeAttribute(writer, "section", i->first);
+            writeText(writer, i->second);
+            endElement(writer);
+        }
+        FOREACH(n, this->provider.name)
+        {
+            writeElementWithOneAttribute(writer, "label",
+                    n->getString(), "xml:lang",
+                    n->getLang(), n->hasLang());
+        }
+        FOREACH(c, this->provider.capability)
+        {
+            startElement(writer, "capability");
+            writeText(writer, *c);
+            endElement(writer);
+        }
+        endElement(writer);
+    }
+    endElement(writer);
+}
+
+void Privilege::serialize(xmlTextWriterPtr writer)
+{
+    startElement(writer, "privileges");
+    {
+        FOREACH(it, this->name)
+        {
+            startElement(writer, "privilege");
+            writeText(writer, *it);
+            endElement(writer);
+        }
+    }
+    endElement(writer);
+}
+
+void Metadata::serialize(xmlTextWriterPtr writer)
+{
+    startElement(writer, "metadata");
+    writeAttribute(writer, "key", *this->key);
+    if (!this->value.IsNull()) {
+        writeAttribute(writer, "value", *this->value);
+    }
+    endElement(writer);
+}
 } //namespace Jobs
 } //namespace WidgetInstall