implementation appcontrols.
authorDongeup Ham <dongeup.ham@samsung.com>
Mon, 7 Jan 2013 07:25:37 +0000 (16:25 +0900)
committerDongeup Ham <dongeup.ham@samsung.com>
Mon, 7 Jan 2013 07:25:37 +0000 (16:25 +0900)
Change-Id: I814938ba7156023f20baa5f152964f9b4d3952b1
Signed-off-by: Dongeup Ham <dongeup.ham@samsung.com>
CMakeLists.txt
inc/InstallerDefs.h
src/Context/InstallationContextData.cpp
src/Context/InstallationContextData.h
src/XmlHandler/ManifestGenerator.cpp
src/XmlHandler/ManifestHandler.cpp
src/XmlHandler/ManifestHandler.h
src/XmlHandler/Parser/ManifestAppControlsParser.cpp [new file with mode: 0755]
src/XmlHandler/Parser/ManifestAppControlsParser.h [new file with mode: 0755]
src/XmlHandler/Parser/ManifestLiveboxesParser.cpp

index 3d13070..8b88653 100755 (executable)
@@ -63,6 +63,7 @@ SET (${this_target}_SOURCE_FILES
        src/XmlHandler/PrivilegeHandler.cpp
        src/XmlHandler/Parser/ManifestParser.cpp
        src/XmlHandler/Parser/ManifestAccountsParser.cpp
+       src/XmlHandler/Parser/ManifestAppControlsParser.cpp
        src/XmlHandler/Parser/ManifestLiveboxesParser.cpp
        src/backend/backend.cpp
        src/Util/InstallerUtil.cpp
index 76591b4..7a989b0 100755 (executable)
@@ -21,7 +21,7 @@
 #ifndef _INSTALLER_DEFS_H_
 #define _INSTALLER_DEFS_H_
 
-#define OSP_INSTALLER_VERSION "osp-installer version=20130107.1"
+#define OSP_INSTALLER_VERSION "osp-installer version=20130107.2"
 
 #define DIR_BIN                                L"/bin"
 #define DIR_INFO                       L"/info"
index 986b436..23b4d1c 100755 (executable)
@@ -30,17 +30,27 @@ using namespace Tizen::App::Package;
 
 
 AppControlData::AppControlData()
-:__pOperationDataList(null)
+:__pOperationList(null)
+,__pMimeTypeList(null)
+,__pUriList(null)
+
 {
-       __pOperationDataList = new (std::nothrow) ArrayListT<OperationData*>;
+       __pOperationList = new (std::nothrow) ArrayListT<String*>;
+       __pMimeTypeList = new (std::nothrow) ArrayListT<String*>;
+       __pUriList = new (std::nothrow) ArrayListT<String*>;
 }
 
 AppControlData::~AppControlData()
 {
-       __pOperationDataList->RemoveAll();
-       delete __pOperationDataList;
-}
+       __pOperationList->RemoveAll();
+       delete __pOperationList;
+
+       __pMimeTypeList->RemoveAll();
+       delete __pMimeTypeList;
 
+       __pUriList->RemoveAll();
+       delete __pUriList;
+}
 
 AccountData::AccountData()
 :__pNameList(null)
@@ -120,16 +130,16 @@ LiveboxData::GetIcon(void) const
 }
 
 result
-LiveboxData::SetName(const String& name)
+LiveboxData::SetProviderName(const String& providerName)
 {
-       __name = name;
+       __providerName = providerName;
        return E_SUCCESS;
 }
 
 const String&
-LiveboxData::GetName(void) const
+LiveboxData::GetProviderName(void) const
 {
-       return __name;
+       return __providerName;
 }
 
 result
@@ -223,12 +233,13 @@ ContentData::GetNameList(void) const
 
 AppData::AppData()
 :__pCategoryList(null)
-,__pAppControlData(null)
 ,__pAccountDataList(null)
+,__pAppControlDataList(null)
+,__legacyAppControls(false)
 {
        __pCategoryList = new (std::nothrow) ArrayListT<String*>;
-       __pAppControlData = new (std::nothrow) AppControlData;
        __pAccountDataList = new (std::nothrow) ArrayListT<AccountData*>;
+       __pAppControlDataList = new (std::nothrow) ArrayListT<AppControlData*>;
 }
 
 AppData::~AppData()
@@ -236,8 +247,9 @@ AppData::~AppData()
        __pCategoryList->RemoveAll();
        delete __pCategoryList;
 
-       delete __pAppControlData;
-
        __pAccountDataList->RemoveAll();
        delete __pAccountDataList;
+
+       __pAppControlDataList->RemoveAll();
+       delete __pAppControlDataList;
 }
index efe552f..e118ae4 100755 (executable)
 
 #include "InstallerDefs.h"
 
-
-class OperationData
-       : public Tizen::Base::Object
-{
-public:
-       OperationData(){};
-       virtual ~OperationData(){};
-
-       Tizen::Base::String __id;
-       Tizen::Base::String __mimeType;
-       Tizen::Base::String __uri;
-};
-
-
-class AppControlData
-       : public Tizen::Base::Object
-{
-public:
-       AppControlData();
-       virtual ~AppControlData();
-
-       Tizen::Base::Collection::IListT<OperationData*>* __pOperationDataList;
-};
-
-
-class AccountData
-       : public Tizen::Base::Object
-{
-public:
-       AccountData();
-       virtual ~AccountData();
-
-       Tizen::Base::String __providerId;
-       Tizen::Base::String __multipleAccountsSupport;
-       Tizen::Base::String __accountIcon;
-       Tizen::Base::String __accountSmallIcon;
-       Tizen::Base::Collection::HashMap* __pNameList;
-};
-
-
 class LiveboxData
        : public Tizen::Base::Object
 {
@@ -84,8 +44,8 @@ public:
        result SetIcon(const Tizen::Base::String& icon);
        const Tizen::Base::String& GetIcon(void) const;
 
-       result SetName(const Tizen::Base::String& name);
-       const Tizen::Base::String& GetName(void) const;
+       result SetProviderName(const Tizen::Base::String& providerName);
+       const Tizen::Base::String& GetProviderName(void) const;
 
        result AddName(const Tizen::Base::String& language, const Tizen::Base::String& name);
        Tizen::Base::Collection::HashMap* GetNameList(void) const;
@@ -103,7 +63,7 @@ private:
        long long __updatePeriod;
        Tizen::Base::String __popupEnabled;
        Tizen::Base::String __icon;
-       Tizen::Base::String __name;
+       Tizen::Base::String __providerName;
 
        Tizen::Base::Collection::HashMap* __pNameList;
        Tizen::Base::Collection::ArrayList* __pSizeList;
@@ -111,6 +71,34 @@ private:
 };
 
 
+class AccountData
+       : public Tizen::Base::Object
+{
+public:
+       AccountData();
+       virtual ~AccountData();
+
+       Tizen::Base::String __providerId;
+       Tizen::Base::String __multipleAccountsSupport;
+       Tizen::Base::String __accountIcon;
+       Tizen::Base::String __accountSmallIcon;
+       Tizen::Base::Collection::HashMap* __pNameList;
+};
+
+
+class AppControlData
+       : public Tizen::Base::Object
+{
+public:
+       AppControlData();
+       virtual ~AppControlData();
+
+       Tizen::Base::Collection::IListT<Tizen::Base::String*>* __pOperationList;
+       Tizen::Base::Collection::IListT<Tizen::Base::String*>* __pMimeTypeList;
+       Tizen::Base::Collection::IListT<Tizen::Base::String*>* __pUriList;
+};
+
+
 class ContentData
        : public Tizen::Base::Object
 {
@@ -146,10 +134,12 @@ public:
        AppData();
        virtual ~AppData();
 
-       Tizen::Base::Collection::IListT<Tizen::Base::String*>* __pCategoryList;
-       AppControlData* __pAppControlData;
        Tizen::Base::String name;
+       Tizen::Base::Collection::IListT<Tizen::Base::String*>* __pCategoryList;
        Tizen::Base::Collection::IListT<AccountData*>* __pAccountDataList;
+       Tizen::Base::Collection::IListT<AppControlData*>* __pAppControlDataList;
+
+       bool __legacyAppControls;
 
 private:
 };
index 1434954..d82cefc 100755 (executable)
@@ -264,7 +264,7 @@ ManifestGenerator::WriteLiveboxes(_PackageAppInfoImpl* pAppInfoImpl) const
 
                __pWriter->StartElement("livebox");
 
-               __pWriter->WriteAttribute("appid", pAppInfoImpl->GetPackageName() + "." + pLiveboxData->GetName() );
+               __pWriter->WriteAttribute("appid", pAppInfoImpl->GetPackageName() + "." + pLiveboxData->GetProviderName());
                __pWriter->WriteAttribute("period", period);
                __pWriter->WriteAttribute("pinup", "false");
 
@@ -279,16 +279,6 @@ ManifestGenerator::WriteLiveboxes(_PackageAppInfoImpl* pAppInfoImpl) const
 
                WriteLanguageValue(pLiveboxNameList, label);
 
-//             if (pLiveboxData->GetIcon().IsEmpty() == false)
-//             {
-//                     String liveboxIcon;
-//                     liveboxIcon.Format(1024, L"%ls%ls/%ls", pPackageInfoImpl->GetAppRootPath().GetPointer(), DIR_SHARED_RES, pLiveboxData->GetIcon().GetPointer());
-//
-//                     __pWriter->StartElement("icon");
-//                     __pWriter->WriteString(liveboxIcon);
-//                     __pWriter->EndElement();
-//             }
-
                String menuIcon = pAppInfoImpl->GetMainmenuIcon();
                if (menuIcon.IsEmpty() == false)
                {
@@ -628,8 +618,22 @@ ManifestGenerator::WriteApp(int index, Tizen::App::Package::_PackageAppInfoImpl*
                __pWriter->EndElement();
        }
 
-       WriteAppControl(pAppInfoImpl);
-       WriteAppControl(index);
+       IListT<AppData*>* pAppDataList = __pContext->__pAppDataList;
+       TryReturn(pAppDataList, false, "[osp-installer] pAppDataList is null");
+
+       AppData* pAppData = null;
+       pAppDataList->GetAt(index, pAppData);
+       TryReturn(pAppData, false, "[osp-installer] pAppData is null");
+
+       if (pAppData->__legacyAppControls == true)
+       {
+               AppLogTag(OSP_INSTALLER, "Write(): AppControls spec is legacy");
+               WriteAppControl(pAppInfoImpl);
+       }
+       else
+       {
+               WriteAppControl(index);
+       }
 
        __pWriter->EndElement();
 
@@ -699,41 +703,61 @@ ManifestGenerator::WriteAppControl(int index)
        pAppDataList->GetAt(index, pAppData);
        TryReturn(pAppData, false, "[osp-installer] pAppData is null");
 
-       if (pAppData->__pAppControlData)
+       IListT<AppControlData*>* pAppControlDataList = pAppData->__pAppControlDataList;
+       TryReturn(pAppControlDataList, false, "[osp-installer] pAppControlDataList is null");
+
+       for (int i = 0; i < pAppControlDataList->GetCount(); i++)
        {
-               if (pAppData->__pAppControlData->__pOperationDataList)
+               __pWriter->StartElement("application-service");
+
+               AppControlData* pAppControlData = null;
+               pAppControlDataList->GetAt(i, pAppControlData);
+               TryReturn(pAppControlData, false, "[osp-installer] pAppControlData is null");
+
+               IListT<String*>* pOperationList = pAppControlData->__pOperationList;
+               TryReturn(pOperationList, false, "[osp-installer] pOperationList is null");
+               for (int sub = 0; sub < pOperationList->GetCount(); sub++)
                {
-                       int operationCount = pAppData->__pAppControlData->__pOperationDataList->GetCount();
+                       String* pOperation = null;
+                       pOperationList->GetAt(sub, pOperation);
+                       TryReturn(pOperation, false, "[osp-installer] pOperation is null");
 
-                       for (int i = 0; i < operationCount; i++)
-                       {
-                               OperationData* pOperationData = null;
-                               pAppData->__pAppControlData->__pOperationDataList->GetAt(i, pOperationData);
+                       __pWriter->StartElement("operation");
+                       __pWriter->WriteAttribute("name", *pOperation);
+                       __pWriter->EndElement();        // end of "operation"
+               }
 
-                               if (pOperationData == null) continue;
+               IListT<String*>* pMimeTypeList = pAppControlData->__pMimeTypeList;
+               TryReturn(pMimeTypeList, false, "[osp-installer] pMimeTypeList is null");
+               for (int sub = 0; sub < pMimeTypeList->GetCount(); sub++)
+               {
+                       String* pMimeType = null;
+                       pMimeTypeList->GetAt(sub, pMimeType);
+                       TryReturn(pMimeType, false, "[osp-installer] pMimeType is null");
 
-                               __pWriter->StartElement("application-service");
-                               __pWriter->StartElement("operation");
-                               __pWriter->WriteAttribute("name", pOperationData->__id);
-                               __pWriter->EndElement();        // end of "operation"
+                       if (pMimeType->IsEmpty() == true) continue;
 
-                               if (pOperationData->__uri.IsEmpty() == false)
-                               {
-                                       __pWriter->StartElement("uri");
-                                       __pWriter->WriteAttribute("name", pOperationData->__uri);
-                                       __pWriter->EndElement();
-                               }
+                       __pWriter->StartElement("mime");
+                       __pWriter->WriteAttribute("name", *pMimeType);
+                       __pWriter->EndElement();        // end of "mime"
+               }
 
-                               if (pOperationData->__mimeType.IsEmpty() == false)
-                               {
-                                       __pWriter->StartElement("mime");
-                                       __pWriter->WriteAttribute("name", pOperationData->__mimeType);
-                                       __pWriter->EndElement();
-                               }
+               IListT<String*>* pUriList = pAppControlData->__pUriList;
+               TryReturn(pUriList, false, "[osp-installer] pUriList is null");
+               for (int sub = 0; sub < pUriList->GetCount(); sub++)
+               {
+                       String* pUri = null;
+                       pUriList->GetAt(sub, pUri);
+                       TryReturn(pUri, false, "[osp-installer] pUri is null");
 
-                               __pWriter->EndElement();        // end of ""application-service""
-                       }
+                       if (pUri->IsEmpty() == true) continue;
+
+                       __pWriter->StartElement("uri");
+                       __pWriter->WriteAttribute("name", *pUri);
+                       __pWriter->EndElement();        // end of "uri"
                }
+
+               __pWriter->EndElement();        // end of "application-service"
        }
 
        return true;
index 6e23824..223cbc5 100755 (executable)
@@ -27,8 +27,9 @@
 #include "ManifestHandler.h"
 #include "PrivilegeHandler.h"
 #include "InstallerUtil.h"
-#include "ManifestAccountsParser.h"
 #include "ManifestLiveboxesParser.h"
+#include "ManifestAccountsParser.h"
+#include "ManifestAppControlsParser.h"
 
 using namespace Tizen::Base;
 using namespace Tizen::Base::Collection;
@@ -60,8 +61,7 @@ ManifestHandler::ManifestHandler(void)
 ,__isDefaultName(false)
 ,__isDefaultAppDetected(false)
 ,__pAppData(null)
-,__pSubModeAppControlData(null)
-,__pOperationData(null)
+,__pSubModeAppControlDataList(null)
 ,__isParserMode(false)
 {
 }
@@ -135,18 +135,6 @@ ManifestHandler::OnStartElement(const char *pName)
        {
                status = OnDataControlStartElement();
        }
-       else if (strcasecmp(pName, "AppControl") == 0)
-       {
-               status = OnAppControlStartElement();
-       }
-       else if (strcasecmp(pName, "Capability") == 0)
-       {
-               status = OnCapabilityStartElement();
-       }
-       else if (strcasecmp(pName, "Resolution") == 0)
-       {
-               status = OnResolutionStartElement();
-       }
        else if (strcasecmp(pName, "Privileges") == 0)
        {
                status = OnPrivilegesStartElement();
@@ -171,10 +159,6 @@ ManifestHandler::OnStartElement(const char *pName)
        {
                status = OnContentStartElement();
        }
-       else if (strcasecmp(pName, "Operation") == 0)
-       {
-               status = OnOperationStartElement();
-       }
        else if (strcasecmp(pName, "Liveboxes") == 0)
        {
                status = OnLiveboxesStartElement(pName);
@@ -183,6 +167,10 @@ ManifestHandler::OnStartElement(const char *pName)
        {
                status = OnAccountsStartElement(pName);
        }
+       else if (strcasecmp(pName, "AppControls") == 0)
+       {
+               status = OnAppControlsStartElement(pName);
+       }
 
        if (!status)
        {
@@ -205,13 +193,17 @@ ManifestHandler::OnEndElement(const char *pName)
                TryReturn(__pParser, false, "[osp-installer] __pParser is null");
                __pParser->OnEndElement(pName);
 
-               if (strcasecmp(pName, "Accounts") == 0)
+               if (strcasecmp(pName, "Liveboxes") == 0)
+               {
+                       status = OnLiveboxesEndElement();
+               }
+               else if (strcasecmp(pName, "Accounts") == 0)
                {
                        status = OnAccountsEndElement();
                }
-               else if (strcasecmp(pName, "Liveboxes") == 0)
+               else if (strcasecmp(pName, "AppControls") == 0)
                {
-                       status = OnLiveboxesEndElement();
+                       status = OnAppControlsEndElement();
                }
 
                return status;
@@ -229,10 +221,6 @@ ManifestHandler::OnEndElement(const char *pName)
        {
                status = OnServiceAppEndElement();
        }
-       else if (strcasecmp(pName, "AppControl") == 0)
-       {
-               status = OnAppControlEndElement();
-       }
        else if (strcasecmp(pName, "DataControl") == 0)
        {
                status = OnDataControlEndElement();
@@ -249,14 +237,6 @@ ManifestHandler::OnEndElement(const char *pName)
        {
                status = OnNotificationEndElement();
        }
-       else if (strcasecmp(pName, "Capability") == 0)
-       {
-               status = OnCapabilityEndElement();
-       }
-       else if (strcasecmp(pName, "Resolution") == 0)
-       {
-               status = OnResolutionEndElement();
-       }
        else if (strcasecmp(pName, "Apps") == 0)
        {
                status = OnAppsEndElement();
@@ -281,10 +261,6 @@ ManifestHandler::OnEndElement(const char *pName)
        {
                status = OnManifestEndElement();
        }
-       else if (strcasecmp(pName, "Operation") == 0)
-       {
-               status = OnOperationEndElement();
-       }
 
        if (!status)
        {
@@ -372,14 +348,6 @@ ManifestHandler::OnCharacters(const char *pCharacters)
        {
                status = OnCategoryValue(pCharacters);
        }
-       else if (strcasecmp(pName, "MimeType") == 0)
-       {
-               status = OnMimeTypeValue(pCharacters);
-       }
-       else if (strcasecmp(pName, "Uri") == 0)
-       {
-               status = OnUriValue(pCharacters);
-       }
 
        if (!status)
        {
@@ -579,109 +547,6 @@ ManifestHandler::OnUiThemeStartElement(void)
        return true;
 }
 
-bool
-ManifestHandler::OnAppControlStartElement(void)
-{
-       XmlAttribute *pAttr = null;
-       char *pAttrValue1 = null;
-       char *pAttrValue2 = null;
-
-       pAttr = GetAttribute();
-       TryReturn(pAttr, true, "[osp-installer] pAttr is null");
-
-       pAttrValue1 = pAttr->Find("ProviderId");
-       TryReturn(pAttrValue1, true, "[osp-installer] pAttrValue1 is null");
-
-       pAttrValue2 = pAttr->Find("Category");
-       TryReturn(pAttrValue2, true, "[osp-installer] pAttrValue2 is null");
-
-       __pAppControlInfoImpl = new (std::nothrow) _AppControlInfoImpl;
-       TryReturn(__pAppControlInfoImpl, false, "[osp-installer] __pAppControlInfoImpl is null");
-
-       __pAppControlInfoImpl->SetProviderId(pAttrValue1);
-       __pAppControlInfoImpl->SetCategory(pAttrValue2);
-
-       AppLogTag(OSP_INSTALLER, "<AppControl ProviderId=\"%s\" Category=\"%s\">", pAttrValue1, pAttrValue2);
-
-       return true;
-}
-
-bool
-ManifestHandler::OnCapabilityStartElement(void)
-{
-       XmlAttribute *pAttr = null;
-       char *pAttrValue = null;
-
-       pAttr = GetAttribute();
-       TryReturn(pAttr, true, "[osp-installer] pAttr is null");
-
-       pAttrValue = pAttr->Find("OperationId");
-       TryReturn(pAttrValue, true, "[osp-installer] pAttrValue1 is null");
-
-       __pAppControlCapabilityInfoImpl = new (std::nothrow) _AppControlCapabilityInfoImpl;
-       TryReturn(__pAppControlCapabilityInfoImpl, false, "[osp-installer] __pAppControlCapabilityInfoImpl is null");
-
-       __pAppControlCapabilityInfoImpl->SetOperationId(pAttrValue);
-
-       AppLogTag(OSP_INSTALLER, "<Capability OperationId=\"%s\">", pAttrValue);
-
-       return true;
-}
-
-bool
-ManifestHandler::OnResolutionStartElement(void)
-{
-       XmlAttribute *pAttr = null;
-       char *pAttrValue1 = null;
-       char *pAttrValue2 = null;
-
-       pAttr = GetAttribute();
-       TryReturn(pAttr, true, "[osp-installer] pAttr is null");
-
-       pAttrValue1 = pAttr->Find("MimeType");
-       pAttrValue2 = pAttr->Find("UriScheme");
-
-       __pAppControlResolutionInfoImpl = new (std::nothrow) _AppControlResolutionInfoImpl;
-       TryReturn(__pAppControlResolutionInfoImpl, false, "[osp-installer] __pAppControlResolutionInfoImpl is null");
-
-       if (pAttrValue1)
-       {
-               String* pMimeType = new (std::nothrow) String(pAttrValue1);
-               __pAppControlResolutionInfoImpl->SetMimeType(pMimeType);
-       }
-
-       if (pAttrValue2)
-       {
-               String* pUriScheme = new (std::nothrow) String(pAttrValue2);
-               __pAppControlResolutionInfoImpl->SetUriScheme(pUriScheme);
-       }
-
-       AppLogTag(OSP_INSTALLER, "<Resolution MimeType=\"%s\" UriScheme=\"%s\">", pAttrValue1, pAttrValue2);
-
-       return true;
-}
-
-bool
-ManifestHandler::OnOperationStartElement(void)
-{
-       XmlAttribute *pAttr = null;
-       char *pId = null;
-
-       pAttr = GetAttribute();
-       TryReturn(pAttr, true, "[osp-installer] pAttr is null");
-
-       pId = pAttr->Find("Id");
-       TryReturn(pId, true, "[osp-installer] pId is null");
-
-       __pOperationData = new (std::nothrow) OperationData;
-       TryReturn(__pOperationData, false, "[osp-installer] __pOperationData is null");
-
-       __pOperationData->__id = pId;
-
-       AppLogTag(OSP_INSTALLER, "<Operation Id=\"%s\">", pId);
-
-       return true;
-}
 
 bool
 ManifestHandler::OnDataControlStartElement(void)
@@ -783,6 +648,19 @@ ManifestHandler::OnAccountsStartElement(const char *pName)
 }
 
 bool
+ManifestHandler::OnAppControlsStartElement(const char *pName)
+{
+       __pParser = new (std::nothrow) ManifestAppControlsParser;
+       TryReturn(__pParser, false, "[osp-installer] __pParser is null");
+
+       __isParserMode = true;
+       AppLogTag(OSP_INSTALLER, "------------------------------------------");
+       __pParser->Construct(this);
+
+       return __pParser->OnStartElement(pName);
+}
+
+bool
 ManifestHandler::OnPrivilegesEndElement(void)
 {
        if (__pContext->IsVerificationMode() == false)
@@ -818,6 +696,12 @@ ManifestHandler::OnUiAppEndElement(void)
 
        __isDefaultName = false;
 
+       if (__pContext->__isSubMode == true)
+       {
+               __pSubModeAppControlDataList = __pAppData->__pAppControlDataList;
+               __pAppData->__pAppControlDataList = null;
+       }
+
        __pContext->__pAppDataList->Add(__pAppData);
        __pAppData = null;
 
@@ -834,6 +718,12 @@ ManifestHandler::OnServiceAppEndElement(void)
 
        __isDefaultName = false;
 
+       if (__pContext->__isSubMode == true)
+       {
+               __pSubModeAppControlDataList = __pAppData->__pAppControlDataList;
+               __pAppData->__pAppControlDataList = null;
+       }
+
        __pContext->__pAppDataList->Add(__pAppData);
        __pAppData = null;
 
@@ -850,8 +740,8 @@ ManifestHandler::OnAppsEndElement(void)
                __pAppData = new (std::nothrow) AppData;
                TryReturn(__pAppData, false, "[osp-installer] __pAppData is null");
 
-               __pAppData->__pAppControlData = __pSubModeAppControlData;
-               __pSubModeAppControlData = null;
+               __pAppData->__pAppControlDataList = __pSubModeAppControlDataList;
+               __pSubModeAppControlDataList = null;
 
                __pContext->__pAppDataList->Add(__pAppData);
        }
@@ -870,53 +760,6 @@ ManifestHandler::OnIconsEndElement(void)
 }
 
 bool
-ManifestHandler::OnAppControlEndElement(void)
-{
-       __pPackageAppInfoImpl->AddAppControl(__pAppControlInfoImpl);
-       __pAppControlInfoImpl = null;
-       AppLogTag(OSP_INSTALLER, "</AppControl>");
-
-       if (__pContext->__isSubMode == true)
-       {
-               __pSubModeAppControlData = __pAppData->__pAppControlData;
-               __pAppData->__pAppControlData = null;
-       }
-
-       return true;
-}
-
-bool
-ManifestHandler::OnCapabilityEndElement(void)
-{
-       if (__pAppControlInfoImpl)
-       {
-               __pAppControlInfoImpl->AddCapability(__pAppControlCapabilityInfoImpl);
-               __pAppControlCapabilityInfoImpl = null;
-       }
-       AppLogTag(OSP_INSTALLER, "</Capability>");
-
-       return true;
-}
-
-bool
-ManifestHandler::OnResolutionEndElement(void)
-{
-       __pAppControlCapabilityInfoImpl->AddResolution(__pAppControlResolutionInfoImpl);
-       __pAppControlResolutionInfoImpl = null;
-       AppLogTag(OSP_INSTALLER, "</Resolution>");
-
-       return true;
-}
-
-bool
-ManifestHandler::OnOperationEndElement(void)
-{
-       __pAppData->__pAppControlData->__pOperationDataList->Add(__pOperationData);
-
-       return true;
-}
-
-bool
 ManifestHandler::OnDataControlEndElement(void)
 {
        __pPackageAppInfoImpl->AddDataControl(__pDataControlInfoImpl);
@@ -977,6 +820,16 @@ ManifestHandler::OnContentEndElement(void)
 }
 
 bool
+ManifestHandler::OnLiveboxesEndElement(void)
+{
+       delete __pParser;
+       __isParserMode = false;
+       AppLogTag(OSP_INSTALLER, "------------------------------------------");
+
+       return true;
+}
+
+bool
 ManifestHandler::OnAccountsEndElement(void)
 {
        delete __pParser;
@@ -987,7 +840,7 @@ ManifestHandler::OnAccountsEndElement(void)
 }
 
 bool
-ManifestHandler::OnLiveboxesEndElement(void)
+ManifestHandler::OnAppControlsEndElement(void)
 {
        delete __pParser;
        __isParserMode = false;
@@ -1335,25 +1188,6 @@ ManifestHandler::OnCategoryValue(const char *pCharacters)
 }
 
 bool
-ManifestHandler::OnMimeTypeValue(const char* pCharacters)
-{
-       __pOperationData->__mimeType = pCharacters;
-
-       AppLogTag(OSP_INSTALLER, "<MimeType>%s</MimeType>", pCharacters);
-       return true;
-}
-
-bool
-ManifestHandler::OnUriValue(const char* pCharacters)
-{
-       __pOperationData->__uri = pCharacters;
-
-       AppLogTag(OSP_INSTALLER, "<Uri>%s</Uri>", pCharacters);
-       return true;
-
-}
-
-bool
 ManifestHandler::FindElement(const char *pName)
 {
        bool res = false;
index e2ef45d..1a3e0a7 100755 (executable)
@@ -78,8 +78,10 @@ private:
        bool OnContentsStartElement(void);
        bool OnContentStartElement(void);
 
+       // Parsers
        bool OnLiveboxesStartElement(const char *pName);
        bool OnAccountsStartElement(const char *pName);
+       bool OnAppControlsStartElement(const char *pName);
 
        // EndElement
        bool OnPrivilegesEndElement(void);
@@ -90,10 +92,6 @@ private:
        bool OnUiScalabilityEndElement(void);
        bool OnUiThemeEndElement(void);
 
-       bool OnAppControlEndElement(void);
-       bool OnCapabilityEndElement(void);
-       bool OnResolutionEndElement(void);
-       bool OnOperationEndElement(void);
        bool OnDataControlEndElement(void);
        bool OnDataControlTypeEndElement(void);
        bool OnConditionEndElement(void);
@@ -102,8 +100,10 @@ private:
        bool OnContentsEndElement(void);
        bool OnContentEndElement(void);
 
+       // Parsers
        bool OnLiveboxesEndElement(void);
        bool OnAccountsEndElement(void);
+       bool OnAppControlsEndElement(void);
 
        bool OnManifestEndElement(void);
 
@@ -161,12 +161,13 @@ private:
        bool __isDefaultAppDetected;
 
        AppData* __pAppData;
-       AppControlData* __pSubModeAppControlData;
-       OperationData* __pOperationData;
+       Tizen::Base::Collection::IListT<AppControlData*>* __pSubModeAppControlDataList;
 
        bool __isParserMode;
        ManifestParser* __pParser;
 
+       friend class ManifestAppControlsParser;
+
 }; // ManifestHandler
 
 #endif // _MANIFEST_HANDLER_H_
diff --git a/src/XmlHandler/Parser/ManifestAppControlsParser.cpp b/src/XmlHandler/Parser/ManifestAppControlsParser.cpp
new file mode 100755 (executable)
index 0000000..44ab921
--- /dev/null
@@ -0,0 +1,398 @@
+//
+// Open Service Platform
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT  WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+/**
+ * @file       ManifestAppControlsParser.cpp
+ * @brief      This is the implementation file for %ManifestAppControlsParser class.
+ */
+
+#include <FIoFile.h>
+#include <FSys_SystemInfoImpl.h>
+#include <FAppPkg_PackageInfoImpl.h>
+#include <FBase_StringConverter.h>
+
+#include "ManifestAppControlsParser.h"
+#include "InstallerUtil.h"
+#include "InstallationContext.h"
+#include "ManifestHandler.h"
+
+using namespace Tizen::Base;
+using namespace Tizen::Base::Collection;
+using namespace Tizen::Base::Utility;
+using namespace Tizen::App::Package;
+using namespace Tizen::Io;
+using namespace Tizen::System;
+
+ManifestAppControlsParser::ManifestAppControlsParser(void)
+:__pContext(null)
+,__pAppControlData(null)
+,__legacyAppControls(false)
+{
+}
+
+ManifestAppControlsParser::~ManifestAppControlsParser(void)
+{
+       delete __pAppControlData;
+}
+
+bool
+ManifestAppControlsParser::OnStartElement(const char *pName)
+{
+       TryReturn(pName, true, "[osp-installer] pName is null");
+       bool status = true;
+
+       if (strcasecmp(pName, "AppControls") == 0)
+       {
+               status = OnAppControlsStartElement();
+       }
+       else if (strcasecmp(pName, "AppControl") == 0)
+       {
+               status = OnAppControlStartElement();
+       }
+       else if (strcasecmp(pName, "Capability") == 0)
+       {
+               status = OnCapabilityStartElement();
+       }
+       else if (strcasecmp(pName, "Resolution") == 0)
+       {
+               status = OnResolutionStartElement();
+       }
+
+       return status;
+}
+
+bool
+ManifestAppControlsParser::OnEndElement(const char *pName)
+{
+       TryReturn(pName, true, "[osp-installer] pName is null");
+       bool status = true;
+
+       if (strcasecmp(pName, "AppControls") == 0)
+       {
+               status = OnAppControlsEndElement();
+       }
+       else if (strcasecmp(pName, "AppControl") == 0)
+       {
+               status = OnAppControlEndElement();
+       }
+       else if (strcasecmp(pName, "Capability") == 0)
+       {
+               status = OnCapabilityEndElement();
+       }
+       else if (strcasecmp(pName, "Resolution") == 0)
+       {
+               status = OnResolutionEndElement();
+       }
+
+       return true;
+}
+
+bool
+ManifestAppControlsParser::OnCharacters(const char *pCharacters)
+{
+       TryReturn(pCharacters, true, "[osp-installer] pCharacters is null");
+       bool status = true;
+
+       ManifestHandler* pHandler = GetHandler();
+       TryReturn(pHandler, false, "[osp-installer] pHandler is null");
+
+       char *pName = pHandler->GetElementName();
+       TryReturn(pName, false, "[osp-installer] pName is null");
+
+       if (strcasecmp(pName, "Operation") == 0)
+       {
+               status = OnOperationValue(pCharacters);
+       }
+       else if (strcasecmp(pName, "MimeType") == 0)
+       {
+               status = OnMimeTypeValue(pCharacters);
+       }
+       else if (strcasecmp(pName, "Uri") == 0)
+       {
+               status = OnUriValue(pCharacters);
+       }
+
+       return true;
+}
+
+bool
+ManifestAppControlsParser::OnAppControlsStartElement(void)
+{
+       ManifestHandler* __pHandler = GetHandler();
+       TryReturn(__pHandler, false, "[osp-installer] __pHandler is null");
+
+       __pContext = __pHandler->GetContext();
+       TryReturn(__pContext, false, "[osp-installer] __pContext is null");
+
+       AppLogTag(OSP_INSTALLER, "  <AppControls>");
+       return true;
+}
+
+bool
+ManifestAppControlsParser::OnAppControlStartElement(void)
+{
+       ManifestHandler* pHandler = GetHandler();
+       TryReturn(pHandler, false, "[osp-installer] pHandler is null");
+
+       AppData* pAppData = pHandler->GetAppData();
+       TryReturn(pAppData, false, "[osp-installer] pAppData is null");
+
+       AppLogTag(OSP_INSTALLER, "  <AppControl>");
+
+       XmlAttribute *pAttr = pHandler->GetAttribute();
+       if (pAttr == null)
+       {
+               __pAppControlData = new (std::nothrow) AppControlData;
+               TryReturn(__pAppControlData, false, "[osp-installer] __pAppControlData is null");
+               __legacyAppControls = false;
+
+               return true;
+       }
+
+       pHandler->__pAppControlInfoImpl = new (std::nothrow) _AppControlInfoImpl;
+       TryReturn(pHandler->__pAppControlInfoImpl, false, "[osp-installer] pHandler->__pAppControlInfoImpl is null");
+
+       char* pProviderId = pAttr->Find("ProviderId");
+       if (pProviderId)
+       {
+               AppLogTag(OSP_INSTALLER, "   - ProviderId=%s", pProviderId);
+               pHandler->__pAppControlInfoImpl->SetProviderId(pProviderId);
+               __legacyAppControls = true;
+       }
+
+       char* pCategory = pAttr->Find("Category");
+       if (pCategory)
+       {
+               AppLogTag(OSP_INSTALLER, "   - Category=%s", pCategory);
+               pHandler->__pAppControlInfoImpl->SetCategory(pCategory);
+       }
+
+       return true;
+}
+
+bool
+ManifestAppControlsParser::OnCapabilityStartElement(void)
+{
+       if (__legacyAppControls == false)
+       {
+               return true;
+       }
+
+       ManifestHandler* pHandler = GetHandler();
+       TryReturn(pHandler, false, "[osp-installer] pHandler is null");
+
+       XmlAttribute *pAttr = pHandler->GetAttribute();
+       TryReturn(pAttr, true, "[osp-installer] pAttr is null");
+
+       AppLogTag(OSP_INSTALLER, "  <Capability>");
+
+       char* pOperationId = pAttr->Find("OperationId");
+       if (pOperationId)
+       {
+               AppLogTag(OSP_INSTALLER, "   - OperationId=%s", pOperationId);
+
+               pHandler->__pAppControlCapabilityInfoImpl = new (std::nothrow) _AppControlCapabilityInfoImpl;
+               TryReturn(pHandler->__pAppControlCapabilityInfoImpl, false, "[osp-installer] pHandler->__pAppControlCapabilityInfoImpl is null");
+
+               pHandler->__pAppControlCapabilityInfoImpl->SetOperationId(pOperationId);
+       }
+
+       return true;
+}
+
+bool
+ManifestAppControlsParser::OnResolutionStartElement(void)
+{
+       if (__legacyAppControls == false)
+       {
+               return true;
+       }
+
+       ManifestHandler* pHandler = GetHandler();
+       TryReturn(pHandler, false, "[osp-installer] pHandler is null");
+
+       XmlAttribute *pAttr = pHandler->GetAttribute();
+       TryReturn(pAttr, true, "[osp-installer] pAttr is null");
+
+       pHandler->__pAppControlResolutionInfoImpl = new (std::nothrow) _AppControlResolutionInfoImpl;
+       TryReturn(pHandler->__pAppControlResolutionInfoImpl, false, "[osp-installer] pHandler->__pAppControlResolutionInfoImpl is null");
+
+       AppLogTag(OSP_INSTALLER, "  <Resolution>");
+
+       char* pMimeType = pAttr->Find("MimeType");
+       if (pMimeType)
+       {
+               AppLogTag(OSP_INSTALLER, "   - MimeType=%s", pMimeType);
+               pHandler->__pAppControlResolutionInfoImpl->SetMimeType(new (std::nothrow) String(pMimeType));
+       }
+
+       char* pUriScheme = pAttr->Find("UriScheme");
+       if (pUriScheme)
+       {
+               AppLogTag(OSP_INSTALLER, "   - UriScheme=%s", pUriScheme);
+               pHandler->__pAppControlResolutionInfoImpl->SetUriScheme(new (std::nothrow) String(pUriScheme));
+       }
+
+       return true;
+}
+
+bool
+ManifestAppControlsParser::OnAppControlsEndElement(void)
+{
+       ManifestHandler* pHandler = GetHandler();
+       TryReturn(pHandler, false, "[osp-installer] pHandler is null");
+
+       AppData* pAppData = pHandler->GetAppData();
+       TryReturn(pAppData, false, "[osp-installer] pAppData is null");
+
+       pAppData->__legacyAppControls = __legacyAppControls;
+       AppLogTag(OSP_INSTALLER, "  </AppControls>");
+
+       if (pAppData->__legacyAppControls == true)
+       {
+               AppLogTag(OSP_INSTALLER, "  AppControls spec is legacy");
+       }
+
+       return true;
+}
+
+bool
+ManifestAppControlsParser::OnAppControlEndElement(void)
+{
+       ManifestHandler* pHandler = GetHandler();
+       TryReturn(pHandler, false, "[osp-installer] pHandler is null");
+
+       AppData* pAppData = pHandler->GetAppData();
+       TryReturn(pAppData, false, "[osp-installer] pAppData is null");
+
+       AppLogTag(OSP_INSTALLER, "  </AppControl>");
+
+       if (__legacyAppControls == true)
+       {
+               pHandler->__pPackageAppInfoImpl->AddAppControl(pHandler->__pAppControlInfoImpl);
+               pHandler->__pAppControlInfoImpl = null;
+       }
+       else
+       {
+               pAppData->__pAppControlDataList->Add(__pAppControlData);
+               __pAppControlData = null;
+       }
+
+       return true;
+}
+
+bool
+ManifestAppControlsParser::OnCapabilityEndElement(void)
+{
+       if (__legacyAppControls == false)
+       {
+               return true;
+       }
+
+       ManifestHandler* pHandler = GetHandler();
+       TryReturn(pHandler, false, "[osp-installer] pHandler is null");
+
+       if (pHandler->__pAppControlInfoImpl)
+       {
+               pHandler->__pAppControlInfoImpl->AddCapability(pHandler->__pAppControlCapabilityInfoImpl);
+               pHandler->__pAppControlCapabilityInfoImpl = null;
+       }
+       AppLogTag(OSP_INSTALLER, "  </Capability>");
+
+       return true;
+}
+
+bool
+ManifestAppControlsParser::OnResolutionEndElement(void)
+{
+       if (__legacyAppControls == false)
+       {
+               return true;
+       }
+
+       ManifestHandler* pHandler = GetHandler();
+       TryReturn(pHandler, false, "[osp-installer] pHandler is null");
+
+       pHandler->__pAppControlCapabilityInfoImpl->AddResolution(pHandler->__pAppControlResolutionInfoImpl);
+       pHandler->__pAppControlResolutionInfoImpl = null;
+
+       AppLogTag(OSP_INSTALLER, "  </Resolution>");
+
+       return true;
+}
+
+bool
+ManifestAppControlsParser::OnOperationValue(const char* pCharacters)
+{
+       if (__legacyAppControls == true)
+       {
+               return true;
+       }
+
+       if (pCharacters && pCharacters[0])
+       {
+               String* pStr = new (std::nothrow) String(pCharacters);
+               if (__pAppControlData->__pOperationList->Contains(pStr) == false)
+               {
+                       AppLogTag(OSP_INSTALLER, "  <Operation>%s</Operation>", pCharacters);
+                       __pAppControlData->__pOperationList->Add(pStr);
+               }
+       }
+
+       return true;
+}
+
+bool
+ManifestAppControlsParser::OnMimeTypeValue(const char* pCharacters)
+{
+       if (__legacyAppControls == true)
+       {
+               return true;
+       }
+
+       if (pCharacters && pCharacters[0])
+       {
+               String* pStr = new (std::nothrow) String(pCharacters);
+               if (__pAppControlData->__pMimeTypeList->Contains(pStr) == false)
+               {
+                       AppLogTag(OSP_INSTALLER, "  <MimeType>%s</MimeType>", pCharacters);
+                       __pAppControlData->__pMimeTypeList->Add(pStr);
+               }
+       }
+
+       return true;
+}
+
+bool
+ManifestAppControlsParser::OnUriValue(const char* pCharacters)
+{
+       if (__legacyAppControls == true)
+       {
+               return true;
+       }
+
+       if (pCharacters && pCharacters[0])
+       {
+               String* pStr = new (std::nothrow) String(pCharacters);
+               if (__pAppControlData->__pUriList->Contains(pStr) == false)
+               {
+                       AppLogTag(OSP_INSTALLER, "  <Uri>%s</Uri>", pCharacters);
+                       __pAppControlData->__pUriList->Add(pStr);
+               }
+       }
+
+       return true;
+}
diff --git a/src/XmlHandler/Parser/ManifestAppControlsParser.h b/src/XmlHandler/Parser/ManifestAppControlsParser.h
new file mode 100755 (executable)
index 0000000..52ab0cd
--- /dev/null
@@ -0,0 +1,76 @@
+//
+// Open Service Platform
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT  WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+/**
+ * @file ManifestAppControlsParser.h
+ * @brief      This is the header file for the %ManifestAppControlsParser class.
+ *
+ * This header file contains the declarations of the %ManifestAppControlsParser class.
+ */
+#ifndef _MANIFEST_APPCONTROLS_PARSER_H_
+#define _MANIFEST_APPCONTROLS_PARSER_H_
+
+#include <FBaseString.h>
+
+#include <FAppPkg_PackageInfoImpl.h>
+
+#include "ManifestParser.h"
+#include "InstallationContext.h"
+
+/**
+ * @class              ManifestAppControlsParser
+ * @brief              This class represents the class of ManifestAppControlsParser.
+ * @since              1.0
+ *
+ * This class represents the class of ManifestAppControlsParser.
+ *
+ */
+class ManifestAppControlsParser
+       : public ManifestParser
+{
+public:
+       ManifestAppControlsParser(void);
+       virtual ~ManifestAppControlsParser(void);
+
+       virtual bool OnStartElement(const char *pName);
+       virtual bool OnEndElement(const char *pName);
+       virtual bool OnCharacters(const char *pCharacters);
+
+private:
+       bool OnAppControlsStartElement(void);
+       bool OnAppControlStartElement(void);
+       bool OnCapabilityStartElement(void);
+       bool OnResolutionStartElement(void);
+
+       bool OnAppControlsEndElement(void);
+       bool OnAppControlEndElement(void);
+
+       bool OnCapabilityEndElement(void);
+       bool OnResolutionEndElement(void);
+
+       bool OnOperationValue(const char* pCharacters);
+       bool OnMimeTypeValue(const char* pCharacters);
+       bool OnUriValue(const char* pCharacters);
+
+private:
+       InstallationContext* __pContext;
+       AppControlData* __pAppControlData;
+
+       bool __legacyAppControls;
+
+}; // ManifestAppControlsParser
+
+#endif // _MANIFEST_APPCONTROLS_PARSER_H_
index ce03cbc..726c9c3 100755 (executable)
@@ -151,7 +151,7 @@ ManifestLiveboxesParser::OnLiveboxStartElement(void)
        char *pProviderName = pAttr->Find("ProviderName");
        if (pProviderName)
        {
-               __pLiveboxData->SetName(pProviderName);
+               __pLiveboxData->SetProviderName(pProviderName);
                AppLogTag(OSP_INSTALLER, "   - ProviderName=%s", pProviderName);
        }