Initialize Tizen 2.3
[framework/web/wrt-installer.git] / src_wearable / logic / installer_controller.h
1 /*
2  * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
3  *
4  *    Licensed under the Apache License, Version 2.0 (the "License");
5  *    you may not use this file except in compliance with the License.
6  *    You may obtain a copy of the License at
7  *
8  *        http://www.apache.org/licenses/LICENSE-2.0
9  *
10  *    Unless required by applicable law or agreed to in writing, software
11  *    distributed under the License is distributed on an "AS IS" BASIS,
12  *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  *    See the License for the specific language governing permissions and
14  *    limitations under the License.
15  */
16 #ifndef WRT_SRC_INSTALLER_CORE_INSTALLER_CONTROLLER_H_
17 #define WRT_SRC_INSTALLER_CORE_INSTALLER_CONTROLLER_H_
18
19 #include <dpl/singleton.h>
20 #include <dpl/event/controller.h>
21 #include <dpl/generic_event.h>
22 #include <string>
23 #include <map>
24 #include <dpl/task.h>
25 #include <dpl/type_list.h>
26 #include <widget_install/widget_installer_struct.h>
27 #include <installer_logic.h>
28 #include <job.h>
29
30 /**
31  * @brief holds events send to InstallControler
32  */
33 namespace InstallerControllerEvents {
34 /**
35  * @brief Event for inicieting instalation process.
36  *
37  * This event holds std::string witch should be path to widget package
38  */
39 DECLARE_GENERIC_EVENT_3(InstallWidgetEvent,
40             std::string,              // zipFileName
41             std::string,              // package id
42             Jobs::WidgetInstall::WidgetInstallationStruct) // installerStruct
43
44 /**
45  * @brief Event for iniciating plugin instalation process.
46  * This event holds std::string witch should be path to plugin directory
47  * and PluginInstallerStruct which contain
48  * StatusCallack, progressCallback and private data for callbacks
49  */
50 DECLARE_GENERIC_EVENT_2(InstallPluginEvent, std::string, PluginInstallerStruct)
51
52 /**
53  * @brief Event for inicietig widget uninstallation.
54  *
55  * tizen id is used to point witch widget shuld be uninstalled
56  */
57 DECLARE_GENERIC_EVENT_2(UninstallWidgetEvent,
58                         std::string,
59                         WidgetUninstallationStruct)
60
61 /**
62  * @brief Event for pushing installation process forward.
63  */
64 DECLARE_GENERIC_EVENT_1(NextStepEvent, Jobs::Job *)
65
66 DECLARE_GENERIC_EVENT_0(InitializeEvent)
67 DECLARE_GENERIC_EVENT_0(TerminateEvent)
68 } // namespace InstallerEvents
69
70 namespace Logic {
71 /**
72  * @brief Controls Widget installation
73  *
74  * Main Controler of wiget installation/uninstallation, this is also used
75  * for pushing forward each of processes.
76  * It waits for three events:
77  * <ul>
78  *     <li>InstallWidgetEvent</li>
79  *     <li>UninstallWidgetEvent</li>
80  *     <li>NextStepEvent</li>
81  * </ul>
82  */
83
84 typedef DPL::TypeListDecl<
85     InstallerControllerEvents::InstallWidgetEvent,
86     InstallerControllerEvents::InstallPluginEvent,
87     InstallerControllerEvents::UninstallWidgetEvent,
88     InstallerControllerEvents::NextStepEvent,
89     InstallerControllerEvents::InitializeEvent,
90     InstallerControllerEvents::TerminateEvent>::Type
91 InstallerControllerEventsSet;
92
93 class InstallerController : public DPL::Event::Controller<
94         InstallerControllerEventsSet>
95 {
96   protected:
97     /**
98      * @brief Executed on InstallWidgetEvent received.
99      */
100     virtual void OnEventReceived(
101         const InstallerControllerEvents::InstallWidgetEvent &event);
102
103     /**
104      * @brief Executed on InstallPluginEvent received.
105      */
106     virtual void OnEventReceived(
107         const InstallerControllerEvents::InstallPluginEvent &event);
108
109     /**
110      * @brief Executed on UninstallWidgetEvent received.
111      */
112     virtual void OnEventReceived(
113         const InstallerControllerEvents::UninstallWidgetEvent &event);
114     /**
115      * @brief Executed on NextStepEvent received.
116      */
117     virtual void OnEventReceived(
118         const InstallerControllerEvents::NextStepEvent &event);
119
120     virtual void OnEventReceived(
121         const InstallerControllerEvents::InitializeEvent &event);
122     virtual void OnEventReceived(
123         const InstallerControllerEvents::TerminateEvent &event);
124
125   private:
126     // Embedded logic
127     Logic::InstallerLogic m_installerLogic;
128
129     InstallerController();
130
131     static Eina_Bool AddNextStep(void *data);
132
133     friend class DPL::Singleton<InstallerController>;
134 };
135
136 typedef DPL::Singleton<InstallerController> InstallerControllerSingleton;
137 }
138
139 #endif // INSTALLER_CONTROLLER_H