From d23bf76c32321eb47cc2adccc16d592fd5ed8285 Mon Sep 17 00:00:00 2001 From: Andrzej Surdej Date: Tue, 2 Oct 2012 16:13:25 +0200 Subject: [PATCH] wrt-plugins-installer clean up Removed unnecessary code from wrt-plugins-installer. [Issue#] LINUXNGWAP-399 [Problem] Due to moving installation of plugins from installer to wrt-plugins-common there were lot of unused code [Cause] N/A [Solution] Clean up code. To verify build package, do 'wrt_reset_all.sh' and then 'wrt-plugins-installer' Tizen plugins should be installed (around 40). Change-Id: I6019608e145953ea48902873a1da1352f5742f3e --- src/plugins-installer/CMakeLists.txt | 87 +-- src/plugins-installer/commons/wrt_error.h | 139 ---- .../configuration_parser/deny_all_parser.h | 42 - .../configuration_parser/element_parser.h | 91 --- .../configuration_parser/ignoring_parser.h | 43 -- .../configuration_parser/libiriwrapper.h | 46 -- .../configuration_parser/root_parser.h | 88 --- .../configuration_parser/widget_parser.h | 111 --- src/plugins-installer/jobs/job.cpp | 105 --- src/plugins-installer/jobs/job.h | 67 -- src/plugins-installer/jobs/job_base.h | 113 --- src/plugins-installer/jobs/job_exception_base.h | 100 --- .../jobs/plugin_install/job_plugin_install.cpp | 95 --- .../jobs/plugin_install/job_plugin_install.h | 83 -- .../jobs/plugin_install/plugin_install_task.cpp | 444 ----------- .../jobs/plugin_install/plugin_install_task.h | 72 -- .../jobs/plugin_install/plugin_installer_context.h | 62 -- .../jobs/plugin_install/plugin_installer_errors.h | 59 -- .../jobs/plugin_install/plugin_installer_struct.h | 45 -- .../jobs/widget_install/widget_install_errors.h | 97 --- .../jobs/widget_install/widget_installer_struct.h | 121 --- .../logic/installer_controller.cpp | 107 --- src/plugins-installer/logic/installer_controller.h | 149 ---- src/plugins-installer/logic/installer_logic.cpp | 259 ------- src/plugins-installer/logic/installer_logic.h | 78 -- src/plugins-installer/misc/feature_logic.cpp | 108 --- src/plugins-installer/misc/feature_logic.h | 99 --- src/plugins-installer/misc/libxml_utils.cpp | 54 -- src/plugins-installer/misc/libxml_utils.h | 58 -- src/plugins-installer/misc/wac_widget_id.cpp | 100 --- src/plugins-installer/misc/wac_widget_id.h | 42 - src/plugins-installer/misc/widget_location.cpp | 174 ----- src/plugins-installer/misc/widget_location.h | 182 ----- src/plugins-installer/plugin_installer.cpp | 691 +++++++++++++++++ src/plugins-installer/plugin_installer.h | 96 +++ .../parser_runner.h => plugin_installer_errors.h} | 39 +- ...wrt_common_types.h => plugin_installer_types.h} | 24 +- .../plugin_install => }/plugin_metafile_reader.cpp | 0 .../plugin_install => }/plugin_metafile_reader.h | 0 .../{jobs/plugin_install => }/plugin_objects.cpp | 6 + .../{jobs/plugin_install => }/plugin_objects.h | 0 src/plugins-installer/plugin_utils.cpp | 89 +++ .../{wrt-installer => }/plugin_utils.h | 26 +- src/plugins-installer/wrt-installer/CMakeLists.txt | 72 -- .../installer_callbacks_translate.cpp | 282 ------- .../wrt-installer/installer_callbacks_translate.h | 87 --- .../wrt-installer/installer_main_thread.cpp | 77 -- .../wrt-installer/installer_main_thread.h | 45 -- .../wrt-installer/language_subtag_rst_tree.cpp | 170 ---- .../wrt-installer/language_subtag_rst_tree.h | 47 -- .../wrt-installer/option_parser.cpp | 57 -- .../wrt-installer/option_parser.h | 39 - .../wrt-installer/plugin_utils.cpp | 156 ---- .../wrt-installer/wrt_installer.cpp | 854 --------------------- .../wrt-installer/wrt_installer.h | 156 ---- .../wrt-installer/wrt_installer_api.cpp | 606 --------------- .../wrt-installer/wrt_installer_api.h | 338 -------- src/plugins-installer/wrt-installer/wrt_type.h | 254 ------ src/plugins-installer/wrt_plugins_installer.cpp | 41 + 59 files changed, 986 insertions(+), 6786 deletions(-) mode change 100755 => 100644 src/plugins-installer/CMakeLists.txt delete mode 100644 src/plugins-installer/commons/wrt_error.h delete mode 100644 src/plugins-installer/configuration_parser/deny_all_parser.h delete mode 100644 src/plugins-installer/configuration_parser/element_parser.h delete mode 100644 src/plugins-installer/configuration_parser/ignoring_parser.h delete mode 100644 src/plugins-installer/configuration_parser/libiriwrapper.h delete mode 100644 src/plugins-installer/configuration_parser/root_parser.h delete mode 100755 src/plugins-installer/configuration_parser/widget_parser.h delete mode 100644 src/plugins-installer/jobs/job.cpp delete mode 100644 src/plugins-installer/jobs/job.h delete mode 100644 src/plugins-installer/jobs/job_base.h delete mode 100644 src/plugins-installer/jobs/job_exception_base.h delete mode 100644 src/plugins-installer/jobs/plugin_install/job_plugin_install.cpp delete mode 100644 src/plugins-installer/jobs/plugin_install/job_plugin_install.h delete mode 100644 src/plugins-installer/jobs/plugin_install/plugin_install_task.cpp delete mode 100644 src/plugins-installer/jobs/plugin_install/plugin_install_task.h delete mode 100644 src/plugins-installer/jobs/plugin_install/plugin_installer_context.h delete mode 100644 src/plugins-installer/jobs/plugin_install/plugin_installer_errors.h delete mode 100644 src/plugins-installer/jobs/plugin_install/plugin_installer_struct.h delete mode 100644 src/plugins-installer/jobs/widget_install/widget_install_errors.h delete mode 100755 src/plugins-installer/jobs/widget_install/widget_installer_struct.h delete mode 100644 src/plugins-installer/logic/installer_controller.cpp delete mode 100644 src/plugins-installer/logic/installer_controller.h delete mode 100644 src/plugins-installer/logic/installer_logic.cpp delete mode 100644 src/plugins-installer/logic/installer_logic.h delete mode 100644 src/plugins-installer/misc/feature_logic.cpp delete mode 100644 src/plugins-installer/misc/feature_logic.h delete mode 100644 src/plugins-installer/misc/libxml_utils.cpp delete mode 100644 src/plugins-installer/misc/libxml_utils.h delete mode 100644 src/plugins-installer/misc/wac_widget_id.cpp delete mode 100644 src/plugins-installer/misc/wac_widget_id.h delete mode 100644 src/plugins-installer/misc/widget_location.cpp delete mode 100644 src/plugins-installer/misc/widget_location.h create mode 100644 src/plugins-installer/plugin_installer.cpp create mode 100644 src/plugins-installer/plugin_installer.h rename src/plugins-installer/{configuration_parser/parser_runner.h => plugin_installer_errors.h} (52%) rename src/plugins-installer/{commons/wrt_common_types.h => plugin_installer_types.h} (73%) rename src/plugins-installer/{jobs/plugin_install => }/plugin_metafile_reader.cpp (100%) rename src/plugins-installer/{jobs/plugin_install => }/plugin_metafile_reader.h (100%) rename src/plugins-installer/{jobs/plugin_install => }/plugin_objects.cpp (93%) rename src/plugins-installer/{jobs/plugin_install => }/plugin_objects.h (100%) create mode 100644 src/plugins-installer/plugin_utils.cpp rename src/plugins-installer/{wrt-installer => }/plugin_utils.h (60%) delete mode 100644 src/plugins-installer/wrt-installer/CMakeLists.txt delete mode 100644 src/plugins-installer/wrt-installer/installer_callbacks_translate.cpp delete mode 100644 src/plugins-installer/wrt-installer/installer_callbacks_translate.h delete mode 100755 src/plugins-installer/wrt-installer/installer_main_thread.cpp delete mode 100755 src/plugins-installer/wrt-installer/installer_main_thread.h delete mode 100644 src/plugins-installer/wrt-installer/language_subtag_rst_tree.cpp delete mode 100644 src/plugins-installer/wrt-installer/language_subtag_rst_tree.h delete mode 100644 src/plugins-installer/wrt-installer/option_parser.cpp delete mode 100644 src/plugins-installer/wrt-installer/option_parser.h delete mode 100644 src/plugins-installer/wrt-installer/plugin_utils.cpp delete mode 100644 src/plugins-installer/wrt-installer/wrt_installer.cpp delete mode 100644 src/plugins-installer/wrt-installer/wrt_installer.h delete mode 100755 src/plugins-installer/wrt-installer/wrt_installer_api.cpp delete mode 100755 src/plugins-installer/wrt-installer/wrt_installer_api.h delete mode 100755 src/plugins-installer/wrt-installer/wrt_type.h create mode 100644 src/plugins-installer/wrt_plugins_installer.cpp diff --git a/src/plugins-installer/CMakeLists.txt b/src/plugins-installer/CMakeLists.txt old mode 100755 new mode 100644 index fe1abe5..4fcb46d --- a/src/plugins-installer/CMakeLists.txt +++ b/src/plugins-installer/CMakeLists.txt @@ -14,75 +14,56 @@ # # # @file CMakeLists.txt -# @author Lukasz Wrzosek (l.wrzosek@samsung.com) -# @version 1.0 +# @author Andrzej Surdej (a.surdej@samsung.com) +# @version 1.0 # -SET(TARGET_INSTALLER "wrt-plugins-installer") -SET(TARGET_INSTALLER_STATIC "wrt-installer_static") +SET(TARGET_PLUGINS_INSTALLER "wrt-plugins-installer") -SET(INSTALLER_SRC_DIR - ${PROJECT_SOURCE_DIR}/src/plugins-installer - ) - -SET(INSTALLER_JOBS - ${INSTALLER_SRC_DIR}/jobs - ) - -SET(INSTALLER_INCLUDES - ${INSTALLER_SRC_DIR} - ${INSTALLER_SRC_DIR}/logic - ${INSTALLER_SRC_DIR}/jobs - ${INSTALLER_SRC_DIR}/jobs/plugin_install - # ${INSTALLER_SRC_DIR}/jobs/widget_install - #${INSTALLER_SRC_DIR}/jobs/widget_uninstall - ${INSTALLER_SRC_DIR}/misc - ${INSTALLER_SRC_DIR}/configuration_parser - ${INSTALLER_SRC_DIR}/wrt-installer - ${INSTALLER_SRC_DIR}/commons - # ${INSTALLER_SRC_DIR}/pkg-manager +SET(WRT_PLUGINS_INSTALLER_SRC_DIR + ${CMAKE_CURRENT_SOURCE_DIR} ) -SET(INSTALLER_SOURCES - ${INSTALLER_JOBS}/job.cpp - ${INSTALLER_JOBS}/plugin_install/job_plugin_install.cpp - ${INSTALLER_JOBS}/plugin_install/plugin_install_task.cpp - ${INSTALLER_JOBS}/plugin_install/plugin_objects.cpp - ${INSTALLER_JOBS}/plugin_install/plugin_metafile_reader.cpp - ${INSTALLER_SRC_DIR}/logic/installer_logic.cpp - ${INSTALLER_SRC_DIR}/logic/installer_controller.cpp - ${INSTALLER_SRC_DIR}/misc/libxml_utils.cpp - ) - -PKG_CHECK_MODULES(INSTALLER_STATIC_DEP +PKG_CHECK_MODULES(PLUGINS_INSTALLER_DEPS libxml-2.0 cert-svc-vcore - dpl-event-efl + dpl-efl dpl-wrt-dao-rw libpcrecpp REQUIRED - ) +) INCLUDE_DIRECTORIES( - ${INSTALLER_DEP_INCLUDES} - ${INSTALLER_INCLUDES} - ${INSTALLER_STATIC_DEP_INCLUDE_DIRS} + ${WRT_PLUGINS_INSTALLER_SRC_DIR} + ${PLUGINS_INSTALLER_INCLUDES} + ${PLUGINS_INSTALLER_DEPS_INCLUDE_DIRS} ${PLUGINS_API_SUPPORT_DIRS} - ) +) -ADD_LIBRARY(${TARGET_INSTALLER_STATIC} STATIC - ${INSTALLER_SOURCES} - ) +SET(WRT_PLUGINS_INSTALLER_SOURCES + ${WRT_PLUGINS_INSTALLER_SRC_DIR}/wrt_plugins_installer.cpp + ${WRT_PLUGINS_INSTALLER_SRC_DIR}/plugin_installer.cpp + ${WRT_PLUGINS_INSTALLER_SRC_DIR}/plugin_utils.cpp + ${WRT_PLUGINS_INSTALLER_SRC_DIR}/plugin_objects.cpp + ${WRT_PLUGINS_INSTALLER_SRC_DIR}/plugin_metafile_reader.cpp +) + +ADD_DEFINITIONS(${PLUGINS_INSTALLER_DEPS_CFLAGS}) +ADD_DEFINITIONS(${PLUGINS_INSTALLER_DEPS_CFLAGS_OTHERS}) -ADD_DEFINITIONS(${INSTALLER_STATIC_DEP_CFLAGS}) -ADD_DEFINITIONS(${INSTALLER_STATIC_DEP_CFLAGS_OTHERS}) +ADD_EXECUTABLE(${TARGET_PLUGINS_INSTALLER} + ${WRT_PLUGINS_INSTALLER_SOURCES} +) -TARGET_LINK_LIBRARIES(${TARGET_INSTALLER_STATIC} - ${INSTALLER_STATIC_DEP_LIBRARIES} +TARGET_LINK_LIBRARIES(${TARGET_PLUGINS_INSTALLER} + ${PLUGINS_INSTALLER_DEPS_LIBRARIES} ${TARGET_PLUGINS_API_SUPPORT} "-ldl" - ) +) -SET_TARGET_PROPERTIES(${TARGET_INSTALLER_STATIC} PROPERTIES - COMPILE_FLAGS -fPIC) +SET_TARGET_PROPERTIES(${TARGET_PLUGINS_INSTALLER} PROPERTIES + LINK_FLAGS "-Wl,--as-needed -Wl,--hash-style=both -Wl" + BUILD_WITH_INSTALL_RPATH ON + INSTALL_RPATH_USE_LINK_PATH ON +) -ADD_SUBDIRECTORY(wrt-installer) +INSTALL(TARGETS ${TARGET_PLUGINS_INSTALLER} DESTINATION bin) diff --git a/src/plugins-installer/commons/wrt_error.h b/src/plugins-installer/commons/wrt_error.h deleted file mode 100644 index 22599f3..0000000 --- a/src/plugins-installer/commons/wrt_error.h +++ /dev/null @@ -1,139 +0,0 @@ -/* - * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved - * - * 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. - */ -/** - * This file contains the declaration of the error codes of Widget. - * - * @file wrt_error.h - * @author MaQuan (jason.ma@samsung.com) - * @version 0.7 - * @brief This file contains the declaration of the error codes of Widget. - */ - -#ifndef _WRT_ERROR_H_ -#define _WRT_ERROR_H_ - -#ifndef WRT_ERROR_MASKL8 -#define WRT_ERROR_MASKL8 0xFF -#endif - -#ifndef WRT_SET_IDENT -#define WRT_SET_IDENT(X) (X & WRT_ERROR_MASKL8) -#endif - -#ifndef WRT_ERROR_SET -#define WRT_ERROR_SET(X) ((X & WRT_ERROR_MASKL8) << 8) -#endif - -#define WRT_MID_ERRCODE 0x10000 + WRT_SET_IDENT(5) - -/*typedef */ enum -{ - WRT_GENERAL_ERRCODE = WRT_MID_ERRCODE + WRT_SET_IDENT(0), - WRT_CONFIG_ERRCODE = WRT_MID_ERRCODE + WRT_SET_IDENT(1), - WRT_DOMAIN_ERRCODE = WRT_MID_ERRCODE + WRT_SET_IDENT(2), - WRT_JS_EXT_ERRCODE = WRT_MID_ERRCODE + WRT_SET_IDENT(3), - WRT_WM_ERRCODE = WRT_MID_ERRCODE + WRT_SET_IDENT(4), - WRT_PLUGIN_ERRCODE = WRT_MID_ERRCODE + WRT_SET_IDENT(5), - //_ACE support - WRT_SAI_ERRCODE = WRT_MID_ERRCODE + WRT_SET_IDENT(6) -}; - -/** - * WRT error code description - * - * @ WRT_SUCCESS - * There is no error with WRT operations. - * - * @ WRT_ERR_UNKNOW - * An unknow error happened to WRT. - * - * @ WRT_ERR_INVALID_ARG - * Invalid arguments are passed into WRT functions. - * - * @ WRT_ERR_OUT_MEMORY - * No memory space available for WRT. - * - * @ WRT_ERR_NO_DISK_SPACE - * There is no disk space for widget applications. - * - * - * - * - */ -enum WrtError -{ - /* General errors */ - WRT_SUCCESS = WRT_GENERAL_ERRCODE + WRT_ERROR_SET(0x01), - WRT_ERR_UNKNOWN = WRT_GENERAL_ERRCODE + WRT_ERROR_SET(0x02), - WRT_ERR_INVALID_ARG = WRT_GENERAL_ERRCODE + WRT_ERROR_SET(0x03), - WRT_ERR_OUT_OF_MEMORY = WRT_GENERAL_ERRCODE + WRT_ERROR_SET(0x04), - WRT_ERR_NO_DISK_SPACE = WRT_GENERAL_ERRCODE + WRT_ERROR_SET(0x05), - - /* Configuration */ - WRT_CONF_ERR_GCONF_FAILURE = WRT_CONFIG_ERRCODE + WRT_ERROR_SET(0x01), - WRT_CONF_ERR_OBJ_MISSING = WRT_CONFIG_ERRCODE + WRT_ERROR_SET(0x02), - WRT_CONF_ERR_OBJ_EXIST = WRT_CONFIG_ERRCODE + WRT_ERROR_SET(0x03), - WRT_CONF_ERR_START_FILE_MISSING = WRT_CONFIG_ERRCODE + WRT_ERROR_SET(0x04), - WRT_CONF_ERR_EMDB_FAILURE = WRT_CONFIG_ERRCODE + WRT_ERROR_SET(0x05), - WRT_CONF_ERR_EMDB_NO_RECORD = WRT_CONFIG_ERRCODE + WRT_ERROR_SET(0x06), - - /* Domain */ - WRT_DOMAIN_ERR_CREATE_JS_RT = WRT_DOMAIN_ERRCODE + WRT_ERROR_SET(0x01), - WRT_DOMAIN_ERR_MSG_QUEUE = WRT_DOMAIN_ERRCODE + WRT_ERROR_SET(0x02), - - /* Widget manager*/ - WRT_WM_ERR_NOT_INSTALLED = WRT_WM_ERRCODE + WRT_ERROR_SET(0x01), - WRT_WM_ERR_HIGH_VER_INSTALLED = WRT_WM_ERRCODE + WRT_ERROR_SET(0x02), - WRT_WM_ERR_LOW_VER_INSTALLED = WRT_WM_ERRCODE + WRT_ERROR_SET(0x03), - WRT_WM_ERR_INVALID_ARCHIVE = WRT_WM_ERRCODE + WRT_ERROR_SET(0x04), - WRT_WM_ERR_INVALID_CERTIFICATION = WRT_WM_ERRCODE + WRT_ERROR_SET(0x05), - WRT_WM_ERR_NULL_CERTIFICATION = WRT_WM_ERRCODE + WRT_ERROR_SET(0x06), - WRT_WM_ERR_INSTALLATION_CANCEL = WRT_WM_ERRCODE + WRT_ERROR_SET(0x07), - WRT_WM_ERR_ALREADY_INSTALLED = WRT_WM_ERRCODE + WRT_ERROR_SET(0x08), - WRT_WM_ERR_INSTALL_FAILED = WRT_WM_ERRCODE + WRT_ERROR_SET(0x09), - WRT_WM_ERR_DELETE_BY_SERVER = WRT_WM_ERRCODE + WRT_ERROR_SET(0x0a), - WRT_WM_ERR_DEINSTALLATION_CANCEL = WRT_WM_ERRCODE + WRT_ERROR_SET(0x0b), - WRT_WM_ERR_INCORRECT_UPDATE_INFO = WRT_WM_ERRCODE + WRT_ERROR_SET(0x0c), - WRT_WM_ERR_UNREG_FAILED = WRT_WM_ERRCODE + WRT_ERROR_SET(0x0d), - WRT_WM_ERR_REMOVE_FILES_FAILED = WRT_WM_ERRCODE + WRT_ERROR_SET(0x0e), - WRT_WM_ERR_ALREADY_LATEST = WRT_WM_ERRCODE + WRT_ERROR_SET(0x0f), - WRT_WM_ERR_UPDATE_CANCEL = WRT_WM_ERRCODE + WRT_ERROR_SET(0x10), - WRT_WM_ERR_INVALID_APP_ID = WRT_WM_ERRCODE + WRT_ERROR_SET(0x11), - - /* Access Control Manager */ - WRT_SAI_ERR_INIT_ACE_FAILED = WRT_SAI_ERRCODE + WRT_ERROR_SET(0x01) -}; - -namespace CommonError { -enum Type -{ - WrtSuccess, ///< Success - - HandleNotFound, ///< Widget handle was not found - AlreadyRunning, ///< Widget is already running - AlreadyStopped, ///< Widget is already stopped - InvalidLanguage, ///< Widget is invalid in current locales - StillAuthorizing, ///< Widget is still autorizing and has not yet finished it - EarlyKilled, ///< Widget was early killed during launch - AccessDenied, ///< Access denied from ACE - CertificateRevoked, ///< Some certificate was revoked. - /// Widget is not allowed to run. - - Unknown ///< Temporary error. Try to not use this. -}; -} -#endif /* _WRT_ERROR_H_ */ - diff --git a/src/plugins-installer/configuration_parser/deny_all_parser.h b/src/plugins-installer/configuration_parser/deny_all_parser.h deleted file mode 100644 index 2d45707..0000000 --- a/src/plugins-installer/configuration_parser/deny_all_parser.h +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved - * - * 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 deny_all_parser.h - * @author Lukasz Wrzosek (l.wrzosek@samsung.com) - * @version 0.1 - * @brief - */ -#ifndef DENY_ALL_PARSER_H -#define DENY_ALL_PARSER_H - -#include "element_parser.h" - -struct DenyAllParser : public ElementParser -{ - static ElementParserPtr Create(); - virtual void Accept(const Element& /*element*/); - virtual void Accept(const XmlAttribute& /*attribute*/); - virtual void Accept(const Text& /*text*/); - virtual void Verify() - { - } - virtual ActionFunc GetElementParser(const DPL::String& ns, - const DPL::String& name); - - DenyAllParser(); -}; - -#endif // DENY_ALL_PARSER_H diff --git a/src/plugins-installer/configuration_parser/element_parser.h b/src/plugins-installer/configuration_parser/element_parser.h deleted file mode 100644 index dc843b6..0000000 --- a/src/plugins-installer/configuration_parser/element_parser.h +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved - * - * 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 element_parser.h - * @author Lukasz Wrzosek (l.wrzosek@samsung.com) - * @version 0.1 - * @brief - */ -#ifndef ELEMENT_PARSER_H_ -#define ELEMENT_PARSER_H_ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -struct XmlAttribute -{ - DPL::String prefix; - DPL::String name; - DPL::String value; - DPL::String ns; - DPL::String lang; -}; - -struct Element -{ - DPL::String name; - DPL::String value; - DPL::String ns; - DPL::String lang; -}; - -struct Text -{ - DPL::String value; - DPL::String ns; - DPL::String lang; -}; - -class ElementParser; - -typedef DPL::SharedPtr ElementParserPtr; - -class ElementParser : public DPL::EnableSharedFromThis -{ - public: - class Exception - { - public: - DECLARE_EXCEPTION_TYPE(DPL::Exception, Base) - DECLARE_EXCEPTION_TYPE(Base, ParseError) - }; - typedef DPL::FastDelegate0 ActionFunc; - typedef std::map FuncMap; - - virtual void Accept(const Element&) = 0; - virtual void Accept(const XmlAttribute&) = 0; - virtual void Accept(const Text&) = 0; - virtual void Verify() = 0; - virtual ActionFunc GetElementParser(const DPL::String &ns, - const DPL::String &name) = 0; - virtual ~ElementParser() - { - } - - protected: - ElementParser() - { - } -}; - -#endif // ELEMENT_PARSER_H_ diff --git a/src/plugins-installer/configuration_parser/ignoring_parser.h b/src/plugins-installer/configuration_parser/ignoring_parser.h deleted file mode 100644 index 9f1f6d5..0000000 --- a/src/plugins-installer/configuration_parser/ignoring_parser.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved - * - * 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 ignoring_parser.h - * @author Lukasz Wrzosek (l.wrzosek@samsung.com) - * @version 0.1 - * @brief - */ -#ifndef IGNORING_PARSER_H_ -#define IGNORING_PARSER_H_ - -#include "element_parser.h" - -struct IgnoringParser : public ElementParser -{ - static ElementParserPtr Create(); - virtual ActionFunc GetElementParser(const DPL::String& ns, - const DPL::String& name); - virtual void Accept(const Element&); - virtual void Accept(const Text&); - virtual void Accept(const XmlAttribute&); - virtual void Verify(); - - IgnoringParser(); - - private: - ElementParserPtr Reuse(); -}; - -#endif // IGNORING_PARSER_H_ diff --git a/src/plugins-installer/configuration_parser/libiriwrapper.h b/src/plugins-installer/configuration_parser/libiriwrapper.h deleted file mode 100644 index 1029059..0000000 --- a/src/plugins-installer/configuration_parser/libiriwrapper.h +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved - * - * 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 libiriwrapper.cpp - * @author Piotr Marcinkiewicz (p.marcinkiew@samsung.com - * @version 0.1 - * @brief Libiri parser wrapper - */ - -#ifndef _WRT_ENGINE_SRC_INSTALLERCORE_CONFIGURATION_PARSER_LIBIRIWRAPPER_H_ -#define _WRT_ENGINE_SRC_INSTALLERCORE_CONFIGURATION_PARSER_LIBIRIWRAPPER_H_ - -#include -#include - -//TODO: Design and implement new IRI manager class -// -namespace LibIri { -struct Wrapper -{ - Wrapper(const char* aIri); - ~Wrapper(); - iri_t *m_Iri; - //! \brief Returns true if iri is valid - bool Validate(); -}; - -std::ostream & operator<<(std::ostream& a_stream, - const Wrapper& a_wrapper); -} //namespace LibIri - -#endif // _WRT_ENGINE_SRC_INSTALLERCORE_CONFIGURATION_PARSER_LIBIRIWRAPPER_H_ - diff --git a/src/plugins-installer/configuration_parser/root_parser.h b/src/plugins-installer/configuration_parser/root_parser.h deleted file mode 100644 index 3f4a86b..0000000 --- a/src/plugins-installer/configuration_parser/root_parser.h +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved - * - * 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 root_parser.h - * @author Lukasz Wrzosek (l.wrzosek@samsung.com) - * @version 0.1 - * @brief - */ -#ifndef _WRT_ENGINE_SRC_INSTALLERCORE_CONFIGURATION_PARSER_ROOT_PARSER_H_ -#define _WRT_ENGINE_SRC_INSTALLERCORE_CONFIGURATION_PARSER_ROOT_PARSER_H_ - -#include -#include "element_parser.h" - -template -class RootParser : public ElementParser -{ - public: - typedef typename ta_Parser::Data Data; - virtual ActionFunc GetElementParser(const DPL::String& /*ns*/, - const DPL::String& name) - { - if (name == m_tag) { - return DPL::MakeDelegate(this, - &RootParser::OnWidgetElement); - } else { - ThrowMsg(Exception::ParseError, - name << " != " << m_tag); - } - } - - RootParser(Data data, - const DPL::String& tag) : - m_data(data), - m_tag(tag) - { - } - - virtual ~RootParser() - { - } - - virtual void Accept(const Element& /*element*/) - { - LogDebug("element"); - } - - virtual void Accept(const XmlAttribute& /*attribute*/) - { - LogDebug("attribute"); - } - - virtual void Accept(const Text& /*text*/) - { - LogDebug("text"); - } - - virtual void Verify() - { - LogDebug(""); - } - - private: - - ElementParserPtr OnWidgetElement() - { - typedef ta_Parser Parser; - return ElementParserPtr(new Parser(this->m_data)); - } - - Data m_data; - const DPL::String& m_tag; -}; - -#endif // _WRT_ENGINE_SRC_INSTALLERCORE_CONFIGURATION_PARSER_ROOT_PARSER_H_ diff --git a/src/plugins-installer/configuration_parser/widget_parser.h b/src/plugins-installer/configuration_parser/widget_parser.h deleted file mode 100755 index 6ea2ffb..0000000 --- a/src/plugins-installer/configuration_parser/widget_parser.h +++ /dev/null @@ -1,111 +0,0 @@ -/* - * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved - * - * 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. - */ - /** - * This file have been implemented in compliance with W3C WARP SPEC. - * but there are some patent issue between W3C WARP SPEC and APPLE. - * so if you want to use this file, refer to the README file in root directory - */ -/** - * @file widget_parser.h - * @author Lukasz Wrzosek (l.wrzosek@samsung.com) - * @version 0.1 - * @brief - */ -#ifndef WIDGET_PARSER_H_ -#define WIDGET_PARSER_H_ - -#include "element_parser.h" -#include -#include -#include -#include - -namespace ConfigurationNamespace { -static const DPL::String W3CWidgetNamespaceName = - L"http://www.w3.org/ns/widgets"; -static const DPL::String WacWidgetNamespaceNameForLinkElement = - L"http://wacapps.net/ns/widgets#"; -static const DPL::String WacWidgetNamespaceName = - L"http://wacapps.net/ns/widgets"; -static const DPL::String TizenWebAppNamespaceName = - L"http://tizen.org/ns/widgets"; -} - -namespace PluginsPrefix { -const char * const W3CPluginsPrefix = "http://www.w3.org/"; -const char * const WACPluginsPrefix = "http://wacapps.net/api/"; -const char * const TIZENPluginsPrefix = "http://tizen.org/api/"; -} - -namespace Unicode { -enum Direction -{ - LRE, - RLE, - LRO, - RLO, - EMPTY -}; -} - -class WidgetParser : public ElementParser -{ - public: - ElementParserPtr OnNameElement(); - ElementParserPtr OnDescriptionElement(); - ElementParserPtr OnAuthorElement(); - ElementParserPtr OnLicenseElement(); - ElementParserPtr OnIconElement(); - ElementParserPtr OnContentElement(); - ElementParserPtr OnFeatureElement(); - ElementParserPtr OnPreferenceElement(); - ElementParserPtr OnAccessElement(); - ElementParserPtr OnFlashElement(); - ElementParserPtr OnLinkElement(); - ElementParserPtr OnSettingElement(); - ElementParserPtr OnServiceElement(); - ElementParserPtr OnApplicationElement(); - ElementParserPtr OnSplashElement(); - ElementParserPtr OnBackgroundElement(); - - virtual ActionFunc GetElementParser(const DPL::String& ns, - const DPL::String& name); - - virtual void Accept(const Element&); - virtual void Accept(const Text&); - virtual void Accept(const XmlAttribute&); - virtual void Verify(); - - //Typedef used by RootParser - typedef WrtDB::ConfigParserData& Data; - - WidgetParser(Data&); - - private: - Data& m_data; - Unicode::Direction m_textDirection; - FuncMap m_map; - DPL::Optional m_version; - DPL::Optional m_minVersion; - std::list m_windowModes; - DPL::Optional m_defaultlocale; - std::map m_nameSpaces; -}; - -struct IconParser; -struct ContentParser; - -#endif // WIDGET_PARSER_H_ diff --git a/src/plugins-installer/jobs/job.cpp b/src/plugins-installer/jobs/job.cpp deleted file mode 100644 index 64903b2..0000000 --- a/src/plugins-installer/jobs/job.cpp +++ /dev/null @@ -1,105 +0,0 @@ -/* - * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved - * - * 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. - */ -#include -#include - -namespace Jobs { -Job::Job(InstallationType installType) : - m_installationType(installType), - m_UndoType(false), - m_paused(false) -{ -} - -InstallationType Job::GetInstallationType() const -{ - return m_installationType; -} - -bool Job::GetUndoType() const -{ - return m_UndoType; -} - -void Job::SetUndoType(bool flag) -{ - m_UndoType = flag; -} - -bool Job::IsPaused() const -{ - return m_paused; -} - -void Job::SetPaused(bool paused) -{ - if (paused) { - Pause(); - } else { - Resume(); - } -} - -void Job::Pause() -{ - if (m_paused) { - return; - } - - // Pause - m_paused = true; -} - -void Job::Resume() -{ - if (!m_paused) { - return; - } - - // Continue - m_paused = false; - - // Trigger next steps - CONTROLLER_POST_EVENT(Logic::InstallerController, - InstallerControllerEvents::NextStepEvent(this)); -} - -void Job::SetJobHandle(JobHandle handle) -{ - m_handle = handle; -} - -JobHandle Job::GetJobHandle() const -{ - return m_handle; -} - -void Job::SendProgress() -{ -} - -void Job::SendFinishedSuccess() -{ -} - -void Job::SendFinishedFailure() -{ -} - -void Job::SaveExceptionData(const Jobs::JobExceptionBase&) -{ -} -} //namespace Jobs diff --git a/src/plugins-installer/jobs/job.h b/src/plugins-installer/jobs/job.h deleted file mode 100644 index 877a966..0000000 --- a/src/plugins-installer/jobs/job.h +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved - * - * 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. - */ -#ifndef INSTALLER_MODEL_H -#define INSTALLER_MODEL_H - -#include - -namespace Jobs { -class JobExceptionBase; -/** - * @brief Defines installation and uninstallation type. - */ -enum InstallationType -{ - Installation, ///< defines install process - Uninstallation, ///< defines uninstall process - PluginInstallation ///< defines plugin installation process -}; - -typedef int JobHandle; - -class Job : - public DPL::TaskList -{ - public: - Job(InstallationType installType); - - InstallationType GetInstallationType() const; - - // Undo - void SetUndoType(bool flag); - bool GetUndoType() const; - - // Pause/resume support - bool IsPaused() const; - void SetPaused(bool paused); - void Pause(); - void Resume(); - void SetJobHandle(JobHandle handle); - JobHandle GetJobHandle() const; - virtual void SendProgress(); - virtual void SendFinishedSuccess(); - virtual void SendFinishedFailure(); - - virtual void SaveExceptionData(const Jobs::JobExceptionBase&); - private: - JobHandle m_handle; - InstallationType m_installationType; - bool m_UndoType; //TODO change name to m_AbortStarted - bool m_paused; -}; -} //namespace Jobs - -#endif // INSTALLER_MODEL_H diff --git a/src/plugins-installer/jobs/job_base.h b/src/plugins-installer/jobs/job_base.h deleted file mode 100644 index 86e1746..0000000 --- a/src/plugins-installer/jobs/job_base.h +++ /dev/null @@ -1,113 +0,0 @@ -/* - * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved - * - * 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. - */ -#ifndef SRC_INSTALLER_CORE_JOBS_JOB_BASE_H -#define SRC_INSTALLER_CORE_JOBS_JOB_BASE_H - -#include - -typedef std::string ProgressDescription; -typedef float ProgressPercent; - -namespace Jobs { -template -class JobProgressBase -{ - protected: - bool m_progressFlag; - ProgressDescription m_progresDescription; - ProgressPercent m_progresPercent; - - public: - JobProgressBase() : m_progressFlag(false), - m_progresPercent(0.0) - { - } - - void SetProgressFlag(bool flag) - { - m_progressFlag = flag; - } - bool GetProgressFlag() const - { - return m_progressFlag; - } - - ProgressDescription GetProgressDescription() const - { - return m_progresDescription; - } - - ProgressPercent GetProgressPercent() const - { - return m_progresPercent; - } - - void UpdateProgress(T_InstallationStep step, - ProgressDescription const &description) - { - m_progresPercent = - ((static_cast(step) + 1.0) / - static_cast(lastElement)) * 100; - m_progresDescription = description; - } -}; - -template -class JobContextBase -{ - public: - JobContextBase(const T_JobStruct& jobStruct) : - m_jobStruct(jobStruct) - { - } - - T_JobStruct getInstallerStruct() const - { - return m_jobStruct; - } //TODO RENAME - - protected: - T_JobStruct m_jobStruct; -}; - -template -struct JobCallbacksBase -{ - T_finishedCb finishedCallback; - T_progressCb progressCallback; - void *userParam; - - // It must be empty-constructible as a parameter of generic event - JobCallbacksBase() : - finishedCallback(0), - progressCallback(0), - userParam(0) - { - } - - JobCallbacksBase(T_finishedCb finished, - T_progressCb progress, - void *param) : - finishedCallback(finished), - progressCallback(progress), - userParam(param) - { - } -}; -} //namespace Jobs - -#endif // SRC_INSTALLER_CORE_JOBS_JOB_BASE_H diff --git a/src/plugins-installer/jobs/job_exception_base.h b/src/plugins-installer/jobs/job_exception_base.h deleted file mode 100644 index 3f12a2d..0000000 --- a/src/plugins-installer/jobs/job_exception_base.h +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved - * - * 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 job_exception_base.h - * @author Pawel Sikorski (p.sikorski@samgsung.com) - * @version - * @brief - */ - -#include - -#ifndef SRC_INSTALLER_CORE_JOBS_JOB_EXCEPTION_BASE_H_ -#define SRC_INSTALLER_CORE_JOBS_JOB_EXCEPTION_BASE_H_ - -#define DECLARE_JOB_EXCEPTION_BASE(Base, Class, Param) \ - class Class : \ - public Base { \ - public: \ - Class(const char *path, \ - const char *function, \ - int line, \ - const std::string & message = std::string()) : \ - Base(path, function, line, message) \ - { \ - m_className = # Class; \ - m_param = Param; \ - } \ - \ - Class(const char *path, \ - const char *function, \ - int line, \ - const Exception &reason, \ - const std::string & message = std::string()) : \ - Base(path, function, line, reason, message) \ - { \ - m_className = # Class; \ - m_param = Param; \ - } \ - \ - virtual int getParam() const \ - { \ - return m_param; \ - } \ - protected: \ - int m_param; \ - }; -//TODO template for m_param - -#define DECLARE_JOB_EXCEPTION(Base, Class, Param) \ - class Class : \ - public Base { \ - public: \ - Class(const char *path, \ - const char *function, \ - int line, \ - const std::string & message = std::string()) : \ - Base(path, function, line, message) \ - { \ - m_className = # Class; \ - m_param = Param; \ - } \ - \ - Class(const char *path, \ - const char *function, \ - int line, \ - const Exception &reason, \ - const std::string & message = std::string()) : \ - Base(path, function, line, reason, message) \ - { \ - m_className = # Class; \ - m_param = Param; \ - } \ - \ - virtual int getParam() const \ - { \ - return m_param; \ - } \ - }; -//TODO template for m_param - -//TODO maybe use DPL:: DECLARE_EXCEPTION_TYPE instead of creating own - -namespace Jobs { -DECLARE_JOB_EXCEPTION_BASE(DPL::Exception, JobExceptionBase, 0) -} - -#endif /* SRC_INSTALLER_CORE_JOBS_JOB_EXCEPTION_BASE_H_ */ diff --git a/src/plugins-installer/jobs/plugin_install/job_plugin_install.cpp b/src/plugins-installer/jobs/plugin_install/job_plugin_install.cpp deleted file mode 100644 index 8bf52ff..0000000 --- a/src/plugins-installer/jobs/plugin_install/job_plugin_install.cpp +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved - * - * 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 job_plugin_install.cpp - * @author Pawel Sikorski (p.sikorski@samgsung.com) - * @version - * @brief - */ -#include -#include -#include //TODO remove - -//#include -#include "plugin_objects.h" - -namespace Jobs { -namespace PluginInstall { -JobPluginInstall::JobPluginInstall(std::string const &pluginPath, - const PluginInstallerStruct &installerStruct) : - Job(PluginInstallation), - JobContextBase(installerStruct) -{ - // - // Init installer context - // - m_context.pluginFilePath = pluginPath; - m_context.pluginHandle = INVALID_HANDLE; - m_context.installationCompleted = false; - - m_context.installerTask = this; - // - // Create main installation tasks - // - AddTask(new PluginInstallTask(&m_context)); -} - -void JobPluginInstall::SendProgress() -{ - if (GetProgressFlag() && getInstallerStruct().progressCallback != NULL) { - LogDebug("Call Plugin install progressCallback"); - getInstallerStruct().progressCallback(getInstallerStruct().userParam, - GetProgressPercent(), GetProgressDescription()); - } -} - -void JobPluginInstall::SendFinishedSuccess() -{ - PluginHandle handle = getNewPluginHandle(); - - if (handle != Jobs::PluginInstall::JobPluginInstall::INVALID_HANDLE && - isReadyToInstall()) - { - LogDebug("Call Plugin install success finishedCallback"); - getInstallerStruct().finishedCallback(getInstallerStruct().userParam, - Exceptions::Success); - } else { - LogDebug("Call Plugin install waiting finishedCallback"); - getInstallerStruct().finishedCallback(getInstallerStruct().userParam, - Exceptions::InstallationWaiting); - - LogInfo("Installation: " << getFilePath() << - " NOT possible"); - } -} - -void JobPluginInstall::SendFinishedFailure() -{ - LogError("Error in plugin installation step: " << m_exceptionCaught); - LogError("Message: " << m_exceptionMessage); - - LogDebug("Call Plugin install failure finishedCallback"); - getInstallerStruct().finishedCallback(getInstallerStruct().userParam, - m_exceptionCaught); -} - -void JobPluginInstall::SaveExceptionData(const Jobs::JobExceptionBase &e) -{ - m_exceptionCaught = static_cast(e.getParam()); - m_exceptionMessage = e.GetMessage(); -} -} //namespace Jobs -} //namespace PluginInstall diff --git a/src/plugins-installer/jobs/plugin_install/job_plugin_install.h b/src/plugins-installer/jobs/plugin_install/job_plugin_install.h deleted file mode 100644 index a7fde44..0000000 --- a/src/plugins-installer/jobs/plugin_install/job_plugin_install.h +++ /dev/null @@ -1,83 +0,0 @@ -/* - * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved - * - * 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 job_plugin_install.h - * @author Pawel Sikorski (p.sikorski@samgsung.com) - * @version - * @brief - */ - -#ifndef WRT_SRC_INSTALLER_CORE_JOB_JOB_PLUGIN_INSTALL_H_ -#define WRT_SRC_INSTALLER_CORE_JOB_JOB_PLUGIN_INSTALL_H_ - -//SYSTEM INCLUDES -#include - -//WRT INCLUDES -#include -#include -#include -#include - -namespace Jobs { -namespace PluginInstall { -class JobPluginInstall : - public Job, - public JobProgressBase, - public JobContextBase -{ - public: - static const WrtDB::DbPluginHandle INVALID_HANDLE = -1; - - public: - /** - * @brief Automaticaly sets installation process - */ - JobPluginInstall(std::string const &pluginPath, - const PluginInstallerStruct &installerStruct); - - WrtDB::DbPluginHandle getNewPluginHandle() const - { - return m_context.pluginHandle; - } - std::string getFilePath() const - { - return m_context.pluginFilePath; - } - bool isReadyToInstall() const - { - return m_context.installationCompleted; - } - - void SendProgress(); - void SendFinishedSuccess(); - void SendFinishedFailure(); - void SaveExceptionData(const Jobs::JobExceptionBase &e); - private: - //TODO move somewhere this attribute - //(as it is in all Jobs...) - PluginInstallerContext m_context; - - //TODO move it to base class of all jobs - //maybe separate JobBase class for this? - Exceptions::Type m_exceptionCaught; - std::string m_exceptionMessage; -}; -} //namespace Jobs -} //namespace PluginInstall - -#endif /* WRT_SRC_INSTALLER_CORE_JOB_JOB_PLUGIN_INSTALL_H_ */ diff --git a/src/plugins-installer/jobs/plugin_install/plugin_install_task.cpp b/src/plugins-installer/jobs/plugin_install/plugin_install_task.cpp deleted file mode 100644 index 7bf4558..0000000 --- a/src/plugins-installer/jobs/plugin_install/plugin_install_task.cpp +++ /dev/null @@ -1,444 +0,0 @@ -/* - * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved - * - * 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 install_one_task.cpp - * @author Pawel Sikorski (p.sikorski@samgsung.com) - * @author Grzegorz Krawczyk (g.krawczyk@samgsung.com) - * @version - * @brief - */ - -//SYSTEM INCLUDES -#include -#include -#include - -//WRT INCLUDES -#include -#include -#include -#include "plugin_install_task.h" -#include "job_plugin_install.h" -#include "plugin_installer_errors.h" -#include "plugin_metafile_reader.h" -#include -#include -#include -#include -#include "plugin_objects.h" - -#include -#include -#include -#include -#include - -using namespace WrtDB; -using namespace WrtPluginsApi; - -namespace { -const std::string DIRECTORY_SEPARATOR = std::string("/"); -} - -#define SET_PLUGIN_INSTALL_PROGRESS(step, desc) \ - m_context->installerTask->UpdateProgress( \ - PluginInstallerContext::step, desc); - -#define DISABLE_IF_PLUGIN_WITHOUT_LIB() \ - if(m_pluginInfo.m_libraryName.empty()) \ - { \ - LogWarning("Plugin without library."); \ - return; \ - } - -namespace Jobs { -namespace PluginInstall { - -PluginInstallTask::PluginInstallTask(PluginInstallerContext *inCont) : - DPL::TaskDecl(this), - m_context(inCont), - m_dataFromConfigXML(true) -{ - AddStep(&PluginInstallTask::stepCheckPluginPath); - AddStep(&PluginInstallTask::stepParseConfigFile); - AddStep(&PluginInstallTask::stepFindPluginLibrary); - AddStep(&PluginInstallTask::stepCheckIfAlreadyInstalled); - AddStep(&PluginInstallTask::stepLoadPluginLibrary); - AddStep(&PluginInstallTask::stepRegisterPlugin); - AddStep(&PluginInstallTask::stepRegisterFeatures); - AddStep(&PluginInstallTask::stepRegisterPluginObjects); - AddStep(&PluginInstallTask::stepResolvePluginDependencies); - - SET_PLUGIN_INSTALL_PROGRESS(START, "Installation initialized"); -} - -PluginInstallTask::~PluginInstallTask() -{ -} - -void PluginInstallTask::stepCheckPluginPath() -{ - LogInfo("Plugin installation: step CheckPluginPath"); - - struct stat tmp; - - if (-1 == stat(m_context->pluginFilePath.c_str(), &tmp)) { - ThrowMsg(Exceptions::PluginPathFailed, - "Stat function failed"); - } - - if (!S_ISDIR(tmp.st_mode)) { - ThrowMsg(Exceptions::PluginPathFailed, - "Invalid Directory"); - } - - SET_PLUGIN_INSTALL_PROGRESS(PLUGIN_PATH, "Path to plugin verified"); -} - -void PluginInstallTask::stepParseConfigFile() -{ - LogInfo("Plugin installation: step parse config file"); - - struct stat tmp; - - std::string filename = m_context->pluginFilePath + DIRECTORY_SEPARATOR + - std::string(GlobalConfig::GetPluginMetafileName()); - - if (-1 == stat(filename.c_str(), &tmp)) { - m_dataFromConfigXML = false; - return; - } - - LogInfo("Plugin Config file::" << filename); - - Try - { - PluginMetafileReader reader; - reader.initialize(filename); - reader.read(m_pluginInfo); - - FOREACH(it, m_pluginInfo.m_featureContainer) - { - LogDebug("Parsed feature : " << it->m_name); - FOREACH (devCap, it->m_deviceCapabilities) { - LogDebug(" | DevCap : " << *devCap); - } - } - - SET_PLUGIN_INSTALL_PROGRESS(PLUGIN_PATH, "Config file analyzed"); - } - Catch(ValidationCore::ParserSchemaException::Base) - { - LogError("Error during file processing " << filename); - ThrowMsg(Exceptions::PluginMetafileFailed, - "Metafile error"); - } -} - -void PluginInstallTask::stepFindPluginLibrary() -{ - if (m_dataFromConfigXML) - { - return; - } - LogDebug("Plugin installation: step find plugin library"); - std::string pluginPath = m_context->pluginFilePath; - size_t indexpos = pluginPath.find_last_of('/'); - - if (std::string::npos == indexpos) - { - indexpos = 0; - } - else - { - indexpos += 1; // move after '/' - } - - std::string libName = pluginPath.substr(indexpos); - libName = GlobalConfig::GetPluginPrefix() + libName + GlobalConfig::GetPluginSuffix(); - LogDebug("Plugin .so: " << libName); - m_pluginInfo.m_libraryName = libName; -} - -void PluginInstallTask::stepCheckIfAlreadyInstalled() -{ - if (PluginDAO::isPluginInstalled(m_pluginInfo.m_libraryName)) { - ThrowMsg(Exceptions::PluginAlreadyInstalled, - "Plugin already installed"); - } - - SET_PLUGIN_INSTALL_PROGRESS(PLUGIN_EXISTS_CHECK, "Check if plugin exist"); -} - -void PluginInstallTask::stepLoadPluginLibrary() -{ - LogInfo("Plugin installation: step load library"); - - DISABLE_IF_PLUGIN_WITHOUT_LIB() - - std::string filename = m_context->pluginFilePath + DIRECTORY_SEPARATOR + - m_pluginInfo.m_libraryName; - - LogDebug("Loading plugin: " << filename); - - void *dlHandle = dlopen(filename.c_str(), RTLD_NOW); - if (dlHandle == NULL ) { - LogError( - "Failed to load plugin: " << filename << - ". Reason: " << dlerror()); - ThrowMsg(Exceptions::PluginLibraryError, "Library error"); - } - - //TODO move it out - PluginRegistry registry; - - Plugin* plugin; - - Try{ - plugin = registry.GetPlugin(filename); - } - Catch(DPL::Exception) - { - LogError("Loading library failed " << filename); - ThrowMsg(Exceptions::PluginLibraryError, "Library error"); - } - - if(!plugin) - { - LogError("Failed to open library" << filename); - ThrowMsg(Exceptions::PluginLibraryError, "Library error"); - } - - m_libraryObjects = PluginObjectsPtr(new PluginObjects()); - - LogInfo("#####"); - LogInfo("##### Plugin: " << filename << " supports new plugin API"); - LogInfo("#####"); - - FOREACH(o, *plugin->GetObjects()) - { - m_libraryObjects->addObjects(CAST(*o)->GetParentName(), - CAST(*o)->GetName()); - - LogDebug("[Parent << Object] " << CAST(*o)->GetParentName() - << " << " - << CAST(*o)->GetName()); - - registerObjects(plugin->GetObjects()); - } - - - if (!m_dataFromConfigXML) - { - ExportedApi* entryPoint = - static_cast(dlsym(dlHandle, GetExportedSymbolName())); - if (NULL == entryPoint) - { - LogError("Error: " << dlerror()); - ThrowMsg(Exceptions::PluginLibraryError, "Library error"); - } - - // obtain feature -> dev-cap mapping - feature_mapping_interface_t mappingInterface = { NULL, NULL, NULL }; - entryPoint->GetProvidedFeatures(&mappingInterface); - - if (!mappingInterface.featGetter || !mappingInterface.release || - !mappingInterface.dcGetter) - { - LogError("Failed to obtain mapping interface from .so"); - ThrowMsg(Exceptions::PluginLibraryError, "Library error"); - } - - feature_mapping_t* devcapMapping = mappingInterface.featGetter(); - - LogDebug("Getting mapping from features to device capabilities"); - - for (size_t i = 0; i < devcapMapping->featuresCount; ++i) - { - PluginMetafileData::Feature feature; - feature.m_name = devcapMapping->features[i].feature_name; - - LogDebug("Feature: " << feature.m_name); - - const devcaps_t* dc = - mappingInterface.dcGetter(devcapMapping, - devcapMapping->features[i].feature_name); - - LogDebug("device=cap: " << dc); - - if (dc) - { - LogDebug("devcaps count: " << dc->devCapsCount); - - for (size_t j = 0; j < dc->devCapsCount; ++j) - { - LogDebug("devcap: " << dc->deviceCaps[j]); - feature.m_deviceCapabilities.insert(dc->deviceCaps[j]); - } - } - - m_pluginInfo.m_featureContainer.insert(feature); - } - - mappingInterface.release(devcapMapping); - } - - // Unload library - if (dlclose(dlHandle) != 0) { - LogError("Cannot close plugin handle"); - } else { - LogDebug("Library is unloaded"); - } - - // Load export table - LogDebug("Library successfuly loaded and parsed"); - - SET_PLUGIN_INSTALL_PROGRESS(LOADING_LIBRARY, "Library loaded and analyzed"); -} - -void PluginInstallTask::stepRegisterPlugin() -{ - LogInfo("Plugin installation: step register Plugin"); - - m_pluginHandle = - PluginDAO::registerPlugin(m_pluginInfo, m_context->pluginFilePath); - - SET_PLUGIN_INSTALL_PROGRESS(REGISTER_PLUGIN, "Plugin registered"); -} - -void PluginInstallTask::stepRegisterFeatures() -{ - LogInfo("Plugin installation: step register features"); - - FOREACH(it, m_pluginInfo.m_featureContainer) - { - LogError("PluginHandle: " << m_pluginHandle); - FeatureDAO::RegisterFeature(*it, m_pluginHandle); - } - SET_PLUGIN_INSTALL_PROGRESS(REGISTER_FEATURES, "Features registered"); -} - -void PluginInstallTask::stepRegisterPluginObjects() -{ - LogInfo("Plugin installation: step register objects"); - - DISABLE_IF_PLUGIN_WITHOUT_LIB() - - //register implemented objects - PluginObjects::ObjectsPtr objects = - m_libraryObjects->getImplementedObject(); - - FOREACH(it, *objects) - { - PluginDAO::registerPluginImplementedObject(*it, m_pluginHandle); - } - - //register requiredObjects - objects = m_libraryObjects->getDependentObjects(); - - FOREACH(it, *objects) - { - if (m_libraryObjects->hasObject(*it)) { - LogDebug("Dependency from the same library. ignored"); - continue; - } - - PluginDAO::registerPluginRequiredObject(*it, m_pluginHandle); - } - - SET_PLUGIN_INSTALL_PROGRESS(REGISTER_OBJECTS, "Plugin Objects registered"); -} - -void PluginInstallTask::stepResolvePluginDependencies() -{ - LogInfo("Plugin installation: step resolve dependencies "); - - //DISABLE_IF_PLUGIN_WITHOUT_LIB - if(m_pluginInfo.m_libraryName.empty()) - { - PluginDAO::setPluginInstallationStatus(m_pluginHandle, - PluginDAO::INSTALLATION_COMPLETED); - //Installation completed - m_context->pluginHandle = m_pluginHandle; - m_context->installationCompleted = true; - LogWarning("Plugin without library."); - return; - } - - PluginHandleSetPtr handles = PluginHandleSetPtr(new PluginHandleSet); - - DbPluginHandle handle = INVALID_PLUGIN_HANDLE; - - //register requiredObjects - FOREACH(it, *(m_libraryObjects->getDependentObjects())) - { - if (m_libraryObjects->hasObject(*it)) { - LogDebug("Dependency from the same library. ignored"); - continue; - } - - handle = PluginDAO::getPluginHandleForImplementedObject(*it); - if (handle == INVALID_PLUGIN_HANDLE) { - LogError("Library implementing: " << *it << " NOT FOUND"); - PluginDAO::setPluginInstallationStatus( - m_pluginHandle, - PluginDAO::INSTALLATION_WAITING); - return; - } - - handles->insert(handle); - } - - PluginDAO::registerPluginLibrariesDependencies(m_pluginHandle, handles); - - PluginDAO::setPluginInstallationStatus(m_pluginHandle, - PluginDAO::INSTALLATION_COMPLETED); - - //Installation completed - m_context->pluginHandle = m_pluginHandle; - m_context->installationCompleted = true; - - SET_PLUGIN_INSTALL_PROGRESS(RESOLVE_DEPENDENCIES, "Dependencies resolved"); -} - -void PluginInstallTask::registerObjects(const IObjectsListPtr& objects) -{ - LogDebug("registerObjects invoked"); - - FOREACH(o, *objects) - { - auto children = CAST(*o)->GetChildren(); - - if(children) - { - FOREACH(c, *children) - { - m_libraryObjects->addObjects(CAST(*o)->GetName(), - CAST(*c)->GetName()); - - LogDebug("[Parent << Object] " << CAST(*c)->GetName() - << " << " - << CAST(*o)->GetName()); - } - - registerObjects(children); - } - } -} - -#undef SET_PLUGIN_INSTALL_PROGRESS -} //namespace Jobs -} //namespace PluginInstall diff --git a/src/plugins-installer/jobs/plugin_install/plugin_install_task.h b/src/plugins-installer/jobs/plugin_install/plugin_install_task.h deleted file mode 100644 index 47c6e22..0000000 --- a/src/plugins-installer/jobs/plugin_install/plugin_install_task.h +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved - * - * 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 install.h - * @author Pawel Sikorski (p.sikorski@samgsung.com) - * @author Grzegorz Krawczyk (g.krawczyk@samgsung.com) - * @version - * @brief - */ - -#ifndef INSTALL_H_ -#define INSTALL_H_ - -//WRT INCLUDES -#include -#include "plugin_installer_context.h" -#include "plugin_objects.h" -#include - -namespace Jobs { -namespace PluginInstall { -class PluginInstallTask : - public DPL::TaskDecl -{ - public: - PluginInstallTask(PluginInstallerContext *inCont); - virtual ~PluginInstallTask(); - - private: - //data - PluginInstallerContext *m_context; - - //PluginMetafile - WrtDB::PluginMetafileData m_pluginInfo; - - //Plugin LibraryObjects - PluginObjectsPtr m_libraryObjects; - - WrtDB::DbPluginHandle m_pluginHandle; - - bool m_dataFromConfigXML; - - //steps - void stepCheckPluginPath(); - void stepFindPluginLibrary(); - void stepParseConfigFile(); - void stepCheckIfAlreadyInstalled(); - void stepLoadPluginLibrary(); - void stepRegisterPlugin(); - void stepRegisterFeatures(); - void stepRegisterPluginObjects(); - void stepResolvePluginDependencies(); - - void registerObjects(const WrtPluginsApi::IObjectsListPtr& objects); -}; -} //namespace Jobs -} //namespace PluginInstall - -#endif /* INSTALL_H_ */ diff --git a/src/plugins-installer/jobs/plugin_install/plugin_installer_context.h b/src/plugins-installer/jobs/plugin_install/plugin_installer_context.h deleted file mode 100644 index fbdc30d..0000000 --- a/src/plugins-installer/jobs/plugin_install/plugin_installer_context.h +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved - * - * 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 plugin_installer_structs.h - * @author Pawel Sikorski (p.sikorski@samgsung.com) - * @version - * @brief Definition file of plugin installer tasks data structures - */ -#ifndef WRT_SRC_INSTALLERCORE_PLUGININSTALLERTASKS_PLUGININSTALLERCONTEXT_H_ -#define WRT_SRC_INSTALLERCORE_PLUGININSTALLERTASKS_PLUGININSTALLERCONTEXT_H_ - -#include -#include - -using namespace WrtDB; - -namespace Jobs { -namespace PluginInstall { -class JobPluginInstall; -} -} - -struct PluginInstallerContext -{ - enum PluginInstallStep - { - START, - PLUGIN_PATH, - CONFIG_FILE, - PLUGIN_EXISTS_CHECK, - LOADING_LIBRARY, - REGISTER_PLUGIN, - REGISTER_FEATURES, - REGISTER_OBJECTS, - RESOLVE_DEPENDENCIES, - PLUGIN_INSTALL_END - }; - - std::string pluginFilePath; ///< plugin directory - WrtDB::DbPluginHandle pluginHandle; - // if this value is true the plugin model may be created - // if not plugin installation has failed from some reason - bool installationCompleted; - - //used to set installation progress - Jobs::PluginInstall::JobPluginInstall* installerTask; -}; - -#endif // WRT_SRC_INSTALLERCORE_PLUGININSTALLERTASKS_PLUGININSTALLERCONTEXT_H_ diff --git a/src/plugins-installer/jobs/plugin_install/plugin_installer_errors.h b/src/plugins-installer/jobs/plugin_install/plugin_installer_errors.h deleted file mode 100644 index 35f0353..0000000 --- a/src/plugins-installer/jobs/plugin_install/plugin_installer_errors.h +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved - * - * 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 plugin_installer_errors.h - * @author Pawel Sikorski (p.sikorski@samgsung.com) - * @author Grzegorz Krawczyk (g.krawczyk@samgsung.com) - * @version - * @brief - */ - -#ifndef \ - WRT_SRC_INSTALLER_CORE_PLUGIN_INSTALLER_TASKS_PLUGIN_INSTALLER_ERRORS_H_ -#define \ - WRT_SRC_INSTALLER_CORE_PLUGIN_INSTALLER_TASKS_PLUGIN_INSTALLER_ERRORS_H_ - -#include - -namespace Jobs { -namespace PluginInstall { -namespace Exceptions { -enum Type -{ - Success, ///< Success - - WrongPluginPath, ///< ? - MetafileError, ///< ? - AlreadyInstalled, ///< ? - LoadingLibraryError, ///< Loading library by dlopen failed. - /// It may be caused by missing symbols - InstallationWaiting, /// Installation failed due to dependencies - Unknown ///< Temporary error. Try to not use this. -}; - -DECLARE_JOB_EXCEPTION_BASE(JobExceptionBase, Base, Unknown) -DECLARE_JOB_EXCEPTION(Base, PluginPathFailed, WrongPluginPath) -DECLARE_JOB_EXCEPTION(Base, PluginMetafileFailed, MetafileError) -DECLARE_JOB_EXCEPTION(Base, PluginAlreadyInstalled, AlreadyInstalled) -DECLARE_JOB_EXCEPTION(Base, PluginLibraryError, LoadingLibraryError) -DECLARE_JOB_EXCEPTION(Base, InstallationWaitingError, InstallationWaiting) -DECLARE_JOB_EXCEPTION(Base, UnknownError, Unknown) -} //namespace -} //namespace -} //namespace - -#endif /* WRT_SRC_INSTALLER_CORE_PLUGIN_INSTALLER_TASKS_PLUGIN_INSTALLER_ERRORS_H_ */ - diff --git a/src/plugins-installer/jobs/plugin_install/plugin_installer_struct.h b/src/plugins-installer/jobs/plugin_install/plugin_installer_struct.h deleted file mode 100644 index ef69d6f..0000000 --- a/src/plugins-installer/jobs/plugin_install/plugin_installer_struct.h +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved - * - * 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 plugin_installer_struct.h - * @author Przemyslaw Dobrowolski (p.dobrowolsk@samsung.com) - * @author Grzegorz Krawczyk (g.krawczyk@samsung.com) - * @version 1.0 - * @brief Implementation file for widget installer struct - */ -#ifndef WRT_SRC_INSTALLER_CORE_PLUGIN_INSTALLER_PLUGIN_INSTALLER_STRUCT_H_ -#define WRT_SRC_INSTALLER_CORE_PLUGIN_INSTALLER_PLUGIN_INSTALLER_STRUCT_H_ - -#include -#include - -//Plugin Installer typedefs -typedef void (*PluginInstallerFinishedCallback)( - void *userParam, - Jobs::PluginInstall::Exceptions::Type); - -//installer progress -typedef void (*PluginInstallerProgressCallback)( - void *userParam, - ProgressPercent percent, - const ProgressDescription &description); - -//Plugin Installetion Struct -typedef Jobs::JobCallbacksBase -PluginInstallerStruct; - -#endif // WRT_SRC_INSTALLER_CORE_PLUGIN_INSTALLER_PLUGIN_INSTALLER_STRUCT_H_ diff --git a/src/plugins-installer/jobs/widget_install/widget_install_errors.h b/src/plugins-installer/jobs/widget_install/widget_install_errors.h deleted file mode 100644 index 7e3d66f..0000000 --- a/src/plugins-installer/jobs/widget_install/widget_install_errors.h +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved - * - * 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 installer_errors.h - * @author Pawel Sikorski (p.sikorski@samgsung.com) - * @version - * @brief - */ - -#ifndef INSTALLER_ERRORS_H_ -#define INSTALLER_ERRORS_H_ - -#include -#include - -//TODO SafeException(...) - -namespace Jobs { -namespace WidgetInstall { -namespace Exceptions { -enum Type -{ - Success, ///< Success - - ErrorInvalidWidgetPackage, ///< ? - ErrorWidgetDoesNotExist, ///< ? - ErrorAreadyUninstalling, ///< Widget is already being uninstalled - ErrorOutOfDiskSpace, ///< ? - ErrorInvalidPackage, ///< Widget signature is invalid. - ErrorAlreadyInstalled, ///< ? - ErrorInternal, ///< ? - ErrorNotAllowed, ///< Widget installation or update not allowed - ///< because violation of policy ocurred - ErrorDeferred, ///< Widget installation was deferred and will be continued when possible - ErrorDatabaseFailure, ///< Failure in database - ErrorRemovingFolderFailure, ///< Failure in removing existing widget folder - ErrorInstallOspServcie, ///< Failure in installing osp service - ErrorUpdateWidget, ///< Failure in widget update. - ErrorUnknown ///< Temporary error. Try to not use this. -}; - -DECLARE_JOB_EXCEPTION_BASE(JobExceptionBase, Base, ErrorUnknown) - -// PREPARE -DECLARE_JOB_EXCEPTION(Base, NotAllowed, ErrorNotAllowed) -DECLARE_JOB_EXCEPTION(Base, Deferred, ErrorDeferred) -DECLARE_JOB_EXCEPTION(Base, InvalidWidgetUrl, ErrorInvalidWidgetPackage) - -//UNZIP -DECLARE_JOB_EXCEPTION(Base, OpenZipFailed, ErrorInvalidWidgetPackage) -DECLARE_JOB_EXCEPTION(Base, GetZipGlobalInfoFailed, ErrorInvalidWidgetPackage) -DECLARE_JOB_EXCEPTION(Base, ZipEmpty, ErrorInvalidWidgetPackage) -DECLARE_JOB_EXCEPTION(Base, GetZippedFileInfoFailed, ErrorInvalidWidgetPackage) -DECLARE_JOB_EXCEPTION(Base, ZippedFileVersionTooNew, ErrorInvalidWidgetPackage) -DECLARE_JOB_EXCEPTION(Base, ExtractFileFailed, ErrorInvalidWidgetPackage) -DECLARE_JOB_EXCEPTION(Base, OutOfDiskSpace, ErrorOutOfDiskSpace) -DECLARE_JOB_EXCEPTION(Base, InternalError, ErrorInternal) - -//CERTIFY -DECLARE_JOB_EXCEPTION(Base, InvalidPackage, ErrorInvalidPackage) - -//WCONFIG -DECLARE_JOB_EXCEPTION(Base, WidgetConfigFileInvalid, ErrorInvalidWidgetPackage) -DECLARE_JOB_EXCEPTION(Base, NotInstalled, ErrorInvalidWidgetPackage) -DECLARE_JOB_EXCEPTION(Base, InstallationFailed, ErrorInvalidWidgetPackage) -DECLARE_JOB_EXCEPTION(Base, AlreadyInstalled, ErrorAlreadyInstalled) -DECLARE_JOB_EXCEPTION(Base, UnknownError, ErrorUnknown) -DECLARE_JOB_EXCEPTION(Base, DatabaseFailure, ErrorDatabaseFailure) -DECLARE_JOB_EXCEPTION(Base, RemovingFolderFailure, ErrorRemovingFolderFailure) - -DECLARE_JOB_EXCEPTION(Base, CopyIconFailed, ErrorUnknown) - -// Installation osp service -DECLARE_JOB_EXCEPTION(Base, RequestInstallOspsvc, ErrorInstallOspServcie) -DECLARE_JOB_EXCEPTION(Base, InstallOspsvcFailed, ErrorInstallOspServcie) -//UPDATE -DECLARE_JOB_EXCEPTION(Base, BackupFailed, ErrorUpdateWidget) -DECLARE_JOB_EXCEPTION(Base, InsertNewWidgetFailed, ErrorUpdateWidget) -DECLARE_JOB_EXCEPTION(Base, RemoveBackupFailed, ErrorUpdateWidget) -} //namespace -} //namespace -} //namespace - -#endif /* INSTALLER_ERRORS_H_ */ diff --git a/src/plugins-installer/jobs/widget_install/widget_installer_struct.h b/src/plugins-installer/jobs/widget_install/widget_installer_struct.h deleted file mode 100755 index 74d1f24..0000000 --- a/src/plugins-installer/jobs/widget_install/widget_installer_struct.h +++ /dev/null @@ -1,121 +0,0 @@ -/* - * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved - * - * 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 widget_installer_struct.h - * @author Przemyslaw Dobrowolski (p.dobrowolsk@samsung.com) - * @author Grzegorz Krawczyk (g.krawczyk@samsung.com) - * @version 1.0 - * @brief Implementation file for widget installer struct - */ -#ifndef WRT_SRC_INSTALLER_CORE_INSTALLER_TASKS_WIDGET_INSTALLER_STRUCT_H_ -#define WRT_SRC_INSTALLER_CORE_INSTALLER_TASKS_WIDGET_INSTALLER_STRUCT_H_ - -//SYSTEM INCLUDES -#include - -//WRT INCLUDES -#include -#include -#include -#include - -//Widget Installer typedefs -typedef void (*InstallerFinishedCallback)( - void *userParam, - WidgetHandle, - Jobs::WidgetInstall::Exceptions::Type); - -typedef void (*InstallerProgressCallback)(void *userParam, - ProgressPercent percent, - const ProgressDescription &); - -namespace WidgetUpdateMode { -enum Type -{ - Zero = 0, - - // Bits - NotInstalled = 1 << 0, - IncomingVersionNotStd = 1 << 1, - ExistingVersionNotStd = 1 << 2, - BothVersionsNotStd = 1 << 3, - ExistingVersionOlder = 1 << 4, - ExistingVersionEqual = 1 << 5, - ExistingVersionNewer = 1 << 6, - - // Policies - PolicyNeverUpdate = NotInstalled, - - PolicyWac = NotInstalled | - ExistingVersionOlder, - - PolicyAlwaysInstall = NotInstalled | - IncomingVersionNotStd | - ExistingVersionNotStd | - BothVersionsNotStd | - ExistingVersionOlder | - ExistingVersionEqual | - ExistingVersionNewer, - - PolicyForceInstall = PolicyAlwaysInstall -}; - -inline Type operator | (const Type &a, - const Type &b) -{ - return static_cast(static_cast(a) | - static_cast(b)); -} - -inline Type operator & (const Type &a, - const Type &b) -{ - return static_cast(static_cast(a) & - static_cast(b)); -} -} - -//TODO into namespace -//InstallationStruct -typedef Jobs::JobCallbacksBase -WidgetInstallCallbackBase; - -//Widget Installation Struct -struct WidgetInstallationStruct : public WidgetInstallCallbackBase -{ - WidgetUpdateMode::Type updateMode; - bool m_quiet; - - // It must be empty-constructible as a parameter of generic event - WidgetInstallationStruct() : updateMode(WidgetUpdateMode::Zero), - m_quiet(true) - { - } - - WidgetInstallationStruct(InstallerFinishedCallback finished, - InstallerProgressCallback progress, - void *param, - WidgetUpdateMode::Type mode, - bool quiet) : - WidgetInstallCallbackBase(finished, progress, param), - updateMode(mode), - m_quiet(quiet) - { - } -}; - -#endif // WRT_SRC_INSTALLER_CORE_INSTALLER_TASKS_WIDGET_INSTALLER_STRUCT_H_ diff --git a/src/plugins-installer/logic/installer_controller.cpp b/src/plugins-installer/logic/installer_controller.cpp deleted file mode 100644 index 61be7f2..0000000 --- a/src/plugins-installer/logic/installer_controller.cpp +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved - * - * 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. - */ -#include "installer_controller.h" -#include -#include - -IMPLEMENT_SINGLETON(Logic::InstallerController) - -namespace Logic -{ - -InstallerController::InstallerController() -{ -} - -//void InstallerController::OnEventReceived( -// const InstallerControllerEvents::InstallWidgetEvent &event) -//{ -// std::string fileName = event.GetArg0(); -// WidgetInstallationStruct installerStruct = event.GetArg1(); -// Jobs::JobHandle handle = -// m_installerLogic.InstallWidget(fileName, installerStruct); -// -// //TODO return handle to API -// (void)handle; -//} - -void InstallerController::OnEventReceived( - const InstallerControllerEvents::InstallPluginEvent &event) -{ - std::string dirName = event.GetArg0(); - PluginInstallerStruct installerStruct = event.GetArg1(); - - Jobs::JobHandle handle = - m_installerLogic.InstallPlugin(dirName, installerStruct); - - //TODO return handle to API - (void)handle; -} - -//void InstallerController::OnEventReceived( -// const InstallerControllerEvents::UninstallWidgetEvent &event) -//{ -// WidgetHandle widgetHandle = event.GetArg0(); -// WidgetUninstallationStruct uninstallerStruct = event.GetArg1(); -// Jobs::JobHandle handle = -// m_installerLogic.UninstallWidget(widgetHandle, uninstallerStruct); -// -// //TODO return handle to API -// (void)handle; -//} - -Eina_Bool InstallerController::AddNextStep(void *data) -{ - Jobs::Job* model = static_cast(data); - CONTROLLER_POST_EVENT(InstallerController, - InstallerControllerEvents::NextStepEvent(model)); - - return ECORE_CALLBACK_CANCEL; -} - -void InstallerController::OnEventReceived( - const InstallerControllerEvents::NextStepEvent &event) -{ - Jobs::Job* model = event.GetArg0(); - Assert(model != NULL); - - if (m_installerLogic.NextStep(model)) { - ecore_idler_add(AddNextStep, model); - } -} - -//void InstallerController::OnEventReceived( -// const InstallerControllerEvents::InstallDeferredWidgetPackagesEvent & -// event) -//{ -// (void)event; -// m_installerLogic.InstallDeferredWidgetPackages(); -//} - -void InstallerController::OnEventReceived( - const InstallerControllerEvents::InitializeEvent & /*event*/) -{ - m_installerLogic.Initialize(); -} - -void InstallerController::OnEventReceived( - const InstallerControllerEvents::TerminateEvent & /*event*/) -{ - m_installerLogic.Terminate(); -} - -} //Logic - diff --git a/src/plugins-installer/logic/installer_controller.h b/src/plugins-installer/logic/installer_controller.h deleted file mode 100644 index 7e8520c..0000000 --- a/src/plugins-installer/logic/installer_controller.h +++ /dev/null @@ -1,149 +0,0 @@ -/* - * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved - * - * 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. - */ -#ifndef WRT_SRC_INSTALLER_CORE_INSTALLER_CONTROLLER_H_ -#define WRT_SRC_INSTALLER_CORE_INSTALLER_CONTROLLER_H_ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -/** - * @brief holds events send to InstallControler - */ -namespace InstallerControllerEvents { -/** - * @brief Event for inicieting instalation process. - * - * This event holds std::string witch should be path to widget package - */ -//DECLARE_GENERIC_EVENT_2(InstallWidgetEvent, -// std::string, -// WidgetInstallationStruct) // (zipFileName, installerStruct) - -/** - * @brief Event for iniciating plugin instalation process. - * This event holds std::string witch should be path to plugin directory - * and PluginInstallerStruct which contain - * StatusCallack, progressCallback and private data for callbacks - */ -DECLARE_GENERIC_EVENT_2(InstallPluginEvent, std::string, PluginInstallerStruct) - -/** - * @brief Event for inicietig widget uninstallation. - * - * WidgetHandler is used to point witch widget shuld be uninstalled - */ -//DECLARE_GENERIC_EVENT_2(UninstallWidgetEvent, -// WidgetHandle, -// WidgetUninstallationStruct) -// -/** - * @brief Event for pushing installation process forward. - */ -DECLARE_GENERIC_EVENT_1(NextStepEvent, Jobs::Job *) - -//DECLARE_GENERIC_EVENT_0(InstallDeferredWidgetPackagesEvent) - -DECLARE_GENERIC_EVENT_0(InitializeEvent) -DECLARE_GENERIC_EVENT_0(TerminateEvent) - -} // namespace InstallerEvents - - -namespace Logic { - -/** - * @brief Controls Widget installation - * - * Main Controler of wiget installation/uninstallation, this is also used - * for pushing forward each of processes. - * It waits for three events: - *
    - *
  • InstallWidgetEvent
  • - *
  • UninstallWidgetEvent
  • - *
  • NextStepEvent
  • - *
- */ - -typedef DPL::TypeListDecl< -// InstallerControllerEvents::InstallWidgetEvent, - InstallerControllerEvents::InstallPluginEvent, -// InstallerControllerEvents::UninstallWidgetEvent, - InstallerControllerEvents::NextStepEvent, -// InstallerControllerEvents::InstallDeferredWidgetPackagesEvent, - InstallerControllerEvents::InitializeEvent, - InstallerControllerEvents::TerminateEvent>::Type -InstallerControllerEventsSet; - -class InstallerController : public DPL::Event::Controller -{ - protected: - /** - * @brief Executed on InstallWidgetEvent received. - */ -// virtual void OnEventReceived( -// const InstallerControllerEvents::InstallWidgetEvent &event); -// - /** - * @brief Executed on InstallPluginEvent received. - */ - virtual void OnEventReceived( - const InstallerControllerEvents::InstallPluginEvent &event); - - /** - * @brief Executed on UninstallWidgetEvent received. - */ -// virtual void OnEventReceived( -// const InstallerControllerEvents::UninstallWidgetEvent &event); - /** - * @brief Executed on NextStepEvent received. - */ - virtual void OnEventReceived( - const InstallerControllerEvents::NextStepEvent &event); - -// virtual void OnEventReceived( -// const InstallerControllerEvents::InstallDeferredWidgetPackagesEvent -// &event); - - virtual void OnEventReceived( - const InstallerControllerEvents::InitializeEvent &event); - virtual void OnEventReceived( - const InstallerControllerEvents::TerminateEvent &event); - - private: - // Embedded logic - Logic::InstallerLogic m_installerLogic; - - InstallerController(); - - static Eina_Bool AddNextStep(void *data); - - friend class DPL::Singleton; -}; - -typedef DPL::Singleton InstallerControllerSingleton; - -} - -#endif // INSTALLER_CONTROLLER_H diff --git a/src/plugins-installer/logic/installer_logic.cpp b/src/plugins-installer/logic/installer_logic.cpp deleted file mode 100644 index 9d763c1..0000000 --- a/src/plugins-installer/logic/installer_logic.cpp +++ /dev/null @@ -1,259 +0,0 @@ -/* - * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved - * - * 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. - */ -#include -#include -#include -#include -#include -#include -#include -#include -#include - -using namespace WrtDB; - -namespace Logic { - -InstallerLogic::InstallerLogic() : - m_NextHandle(0) -{ -} - -InstallerLogic::~InstallerLogic() -{ - Assert(m_jobs.empty() && "There are still running jobs"); - //FIXME what should be done here? -} - -void InstallerLogic::Initialize() -{ - LogDebug("Done"); -} - -void InstallerLogic::Terminate() -{ - //TODO how to delete, if it is still running, paused and so on - FOREACH(it, m_jobs) - { - it->second->SetPaused(true); //FIXME this is not enough! - } - - LogDebug("Done"); -} - -Jobs::JobHandle InstallerLogic::AddAndStartJob(Jobs::Job *job) -{ - Jobs::JobHandle handle = GetNewJobHandle(); - job->SetJobHandle(handle); - - m_jobs.insert(std::make_pair(handle, job)); - - //Start job - CONTROLLER_POST_EVENT(InstallerController, - InstallerControllerEvents::NextStepEvent(job)); - - return handle; -} - -//InstallWidget, UninstallWidget InstallPlugin method are almost the same -// But each Job has different constructor, so creating new Job is specific -// i.e. widgetHandle, path etc... -//Jobs::JobHandle InstallerLogic::InstallWidget(std::string const & widgetPath, -// const WidgetInstallationStruct &installerStruct) -//{ -// LogDebug("New Widget Installation:"); -// -// Jobs::Job *job = -// new Jobs::WidgetInstall::JobWidgetInstall(widgetPath, installerStruct); -// -// return AddAndStartJob(job); -//} -// -//Jobs::JobHandle InstallerLogic::UninstallWidget(WidgetHandle widgetHandle, -// const WidgetUninstallationStruct &uninstallerStruct) -//{ -// LogDebug("New Widget Uninstallation"); -// -// Jobs::Job *job = -// new Jobs::WidgetUninstall::JobWidgetUninstall(widgetHandle, -// uninstallerStruct); -// -// return AddAndStartJob(job); -//} - -Jobs::JobHandle InstallerLogic::InstallPlugin(std::string const & pluginPath, - const PluginInstallerStruct &installerStruct) -{ - LogDebug("New Plugin Installation"); - - Jobs::Job *job = - new Jobs::PluginInstall::JobPluginInstall(pluginPath, installerStruct); - - return AddAndStartJob(job); -} - -#define TRANSLATE_JOB_EXCEPTION() \ - _rethrown_exception.getParam() -#define TRANSLATE_JOB_MESSAGE() \ - _rethrown_exception.GetMessage() - -bool InstallerLogic::NextStep(Jobs::Job *job) -{ - Try { - bool stepSucceded = job->NextStep(); - - job->SendProgress(); - - if (stepSucceded) { - return !job->IsPaused(); - } - - if (!job->GetUndoType()) { - //job successfully finished - - //send finished callback - job->SendFinishedSuccess(); - - switch (job->GetInstallationType()) { - case Jobs::PluginInstallation: - //todo move it somewhere - InstallWaitingPlugins(); - break; - default: //because of warning - break; - } - } else { - //job abort process completed - job->SendFinishedFailure(); - } - - //clean job - m_jobs.erase(job->GetJobHandle()); - delete job; - - return false; - } - catch (Jobs::JobExceptionBase &exc) { - //start revert job - LogInfo("Exception occured: " << exc.getParam() << - ". Reverting job..."); - bool hasAbortSteps = job->Abort(); - job->SetUndoType(true); - job->SaveExceptionData(exc); - - if (!hasAbortSteps) { - //no AbortSteps - job->SendFinishedFailure(); - - //clean job - m_jobs.erase(job->GetJobHandle()); - delete job; - } - return hasAbortSteps; - } -} - -//TODO this should be moved somewhere...when it should take place? after widget -//is closing? -//void InstallerLogic::InstallDeferredWidgetPackages() -//{ -// LogWarning("Not implemented"); -// // LogInfo("Installing deferred widget packages..."); -// // -// // WidgetPackageList packages = GlobalDAO::GetDefferedWidgetPackageInstallationList(); -// // -// // LogInfo(packages.size() << " widget package(s) to install"); -// // -// // // Make a copy of widget packages to install, because some -// // // widget packages may still fail because they are running -// // m_packagesToInstall = packages; -// // -// // // Start processing -// // InstallSingleDeferredPackage(); -//} -// -//void InstallerLogic::InstallSingleDeferredPackage() -//{ -// LogWarning("Not implemented"); -// // if (m_packagesToInstall.empty()) -// // return; -// // -// // // Take single package -// // DPL::String widgetPackage = m_packagesToInstall.front(); -// // m_packagesToInstall.pop_front(); -// // -// // // Remove it from DB -// // GlobalDAO::RemoveDefferedWidgetPackageInstallation(widgetPackage); -// // -// // // Begin installation -// // LogInfo("Installing deferred widget package: " << widgetPackage); -// // -// // // Post installation -// // CONTROLLER_POST_EVENT( -// // InstallerController, InstallerControllerEvents::InstallWidgetEvent( -// // DPL::ToUTF8String(widgetPackage).c_str(), WidgetInstallationStruct( -// // &DummyInstallCallback, &DummyProgressCallback, NULL, -// // WidgetUpdateMode::PolicyWac))); -//} - -void InstallerLogic::InstallWaitingPlugins() -{ - PluginHandleSetPtr waitingPlugins; - - waitingPlugins = - PluginDAO::getPluginHandleByStatus(PluginDAO::INSTALLATION_WAITING); - - FOREACH(it, *waitingPlugins) - { - resolvePluginDependencies(*it); - } -} - -bool InstallerLogic::resolvePluginDependencies(PluginHandle handle) -{ - PluginHandleSetPtr dependencies(new PluginHandleSet); - - PluginObjects::ObjectsPtr requiredObjects = - PluginDAO::getRequiredObjectsForPluginHandle(handle); - - PluginHandle depHandle = - Jobs::PluginInstall::JobPluginInstall::INVALID_HANDLE; - - FOREACH(requiredObject, *requiredObjects) - { - depHandle = - PluginDAO::getPluginHandleForImplementedObject(*requiredObject); - - if (depHandle == - Jobs::PluginInstall::JobPluginInstall::INVALID_HANDLE) { - LogError("Library implementing: " << - *requiredObject << " NOT FOUND"); - - //PluginDAO::SetPluginInstallationStatus(INSTALLATION_WAITING); - return false; - } - dependencies->insert(depHandle); - } - - PluginDAO::registerPluginLibrariesDependencies(handle, dependencies); - PluginDAO::setPluginInstallationStatus(handle, - PluginDAO::INSTALLATION_COMPLETED); - - return true; -} - -} - diff --git a/src/plugins-installer/logic/installer_logic.h b/src/plugins-installer/logic/installer_logic.h deleted file mode 100644 index ec9677e..0000000 --- a/src/plugins-installer/logic/installer_logic.h +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved - * - * 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. - */ -#ifndef WRT_SRC_INSTALLER_CORE_INSTALLER_LOGIC_H_ -#define WRT_SRC_INSTALLER_CORE_INSTALLER_LOGIC_H_ - -#include -#include -#include -#include -#include -#include - -namespace Logic { - -class InstallerLogic -{ - typedef std::map JobsContainer; - JobsContainer m_jobs; - -// void InstallDeferredWidgetPackages(); -// void InstallSingleDeferredPackage(); - - void InstallWaitingPlugins(); - bool resolvePluginDependencies(PluginHandle handle); - - Jobs::JobHandle m_NextHandle; - Jobs::JobHandle GetNewJobHandle() - { - return m_NextHandle++; - } - Jobs::JobHandle AddAndStartJob(Jobs::Job *job); - public: - virtual ~InstallerLogic(); - - void Initialize(); - - void Terminate(); - -// Jobs::JobHandle InstallWidget(std::string const & widgetPath, -// const WidgetInstallationStruct &installerStruct); -// -// Jobs::JobHandle UninstallWidget(WidgetHandle widgetHandle, -// const WidgetUninstallationStruct &uninstallerStruct); -// - Jobs::JobHandle InstallPlugin(std::string const & pluginPath, - const PluginInstallerStruct &installerStruct); - - bool NextStep(Jobs::Job* installModel); - - //TODO implement me - bool AbortJob(const Jobs::JobHandle & /*handle*/) - { - LogWarning("Not implemented"); - return true; - } - - private: - InstallerLogic(); - - friend class InstallerController; -}; - -} - -#endif // INSTALLER_LOGIC_H diff --git a/src/plugins-installer/misc/feature_logic.cpp b/src/plugins-installer/misc/feature_logic.cpp deleted file mode 100644 index 0c2f161..0000000 --- a/src/plugins-installer/misc/feature_logic.cpp +++ /dev/null @@ -1,108 +0,0 @@ -/* - * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved - * - * 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. - */ - -#include "feature_logic.h" - -#include - -#include -#include -#include -#include -#include -#include -#include - -namespace Jobs { -namespace WidgetInstall { - -FeatureLogic::FeatureLogic(WidgetHandle handle) - : m_rejected(false) -{ - WrtDB::WidgetDAOReadOnly widgetDao(handle); - WidgetFeatureSet featureSet = widgetDao.getFeaturesList(); - FOREACH(it, featureSet) { - LogInfo("Feature name : " << it->name); - WrtDB::DeviceCapabilitySet dcs = - WrtDB::GlobalDAOReadOnly::GetDeviceCapability(it->name); - FOREACH (devCap, dcs) { - LogInfo("--- dev cap : " << *devCap); - } - Feature feature(*it, dcs); - m_featureList.push_back(feature); - } - m_currentFeature = m_featureList.begin(); - - // ok we must set iterator on the first processable node - if (!isProcessable()) { - next(); - } -} - -bool FeatureLogic::isDone() const -{ - return m_currentFeature == m_featureList.end(); -} - -bool FeatureLogic::next() -{ - while (!isDone()) { - if (m_currentFeature->currentCap != m_currentFeature->devCapSet.end()) { - m_currentFeature->currentCap++; - } else { - ++m_currentFeature; - } - // we moved pointer - if (isProcessable()) { - return true; - } - } - return false; -} - - -void FeatureLogic::setAceResponse(bool allowed) -{ - Assert(isProcessable() && "Wrong usage"); - if (!allowed) { - m_currentFeature->rejected = true; - if (m_currentFeature->required) { - m_rejected = true; - } - } -} - -DPL::String FeatureLogic::getDevice() const -{ - return *(m_currentFeature->currentCap); -} - -bool FeatureLogic::isProcessable() const -{ - if (isDone()) { - return false; - } - - if (m_currentFeature->currentCap == m_currentFeature->devCapSet.end()) { - return false; - } - - return true; -} - -} // namespace WidgetInstall -} // namespace Jobs - diff --git a/src/plugins-installer/misc/feature_logic.h b/src/plugins-installer/misc/feature_logic.h deleted file mode 100644 index 5a95628..0000000 --- a/src/plugins-installer/misc/feature_logic.h +++ /dev/null @@ -1,99 +0,0 @@ -/* - * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved - * - * 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. - */ - -#ifndef SRC_INSTALLER_MISC_FEATURE_LOGIC -#define SRC_INSTALLER_MISC_FEATURE_LOGIC - -#include -#include - -#include -#include -#include - -#include -#include - -namespace Jobs { -namespace WidgetInstall { - -class FeatureLogic : DPL::Noncopyable { - public: - - FeatureLogic(WidgetHandle handle); - - bool isDone() const; - - bool next(); - - void setAceResponse(bool allowed); - - DPL::String getDevice() const; - - bool isRejected(void) const - { - return m_rejected; - } - - struct Feature : public WidgetFeature { - WrtDB::DeviceCapabilitySet devCapSet; - WrtDB::DeviceCapabilitySet::const_iterator currentCap; - - Feature(const WidgetFeature &wf, const WrtDB::DeviceCapabilitySet &set) - : WidgetFeature(wf) - , devCapSet(set) - { - currentCap = devCapSet.begin(); - } - - explicit Feature(const Feature &second) : WidgetFeature(second) - { - devCapSet = second.devCapSet; - currentCap = devCapSet.find(*second.currentCap); - rejected = second.rejected; - } - private: - void operator=(const Feature &second) { - name = second.name; - devCapSet = second.devCapSet; - required = second.required; - rejected = second.rejected; - pluginId = second.pluginId; - params = second.params; - currentCap = devCapSet.find(*second.currentCap); - } - }; - - typedef std::list FeatureList; - typedef FeatureList::const_iterator FeatureIterator; - - FeatureIterator resultBegin() { return m_featureList.begin(); } - FeatureIterator resultEnd() { return m_featureList.end(); } - - private: - bool isProcessable() const; - - FeatureList m_featureList; - FeatureList::iterator m_currentFeature; - bool m_rejected; -}; - -typedef DPL::SharedPtr FeatureLogicPtr; - -} // namespace WidgetInstall -} // namespace Jobs - -#endif // SRC_INSTALLER_MISC_FEATURE_LOGIC diff --git a/src/plugins-installer/misc/libxml_utils.cpp b/src/plugins-installer/misc/libxml_utils.cpp deleted file mode 100644 index 61aa5cc..0000000 --- a/src/plugins-installer/misc/libxml_utils.cpp +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved - * - * 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 libxml_utils.cpp - * @author Tomasz Iwanek (t.iwanek@samsung.com) - */ - -#include "libxml_utils.h" - -#include - -IMPLEMENT_SINGLETON(LibxmlUtils) - -LibxmlUtils::LibxmlUtils() : isInitialized(false) -{ -} - -LibxmlUtils::~LibxmlUtils() -{ - if(isInitialized) - { - LogDebug("Libxml - cleaning"); - // Cleanup function for the XML library. - xmlCleanupParser(); - //this is to debug memory for regression tests - xmlMemoryDump(); - } -} - -void LibxmlUtils::init() -{ - if(!isInitialized) - { - LIBXML_TEST_VERSION - isInitialized = true; - LogDebug("Libxml have been initialized"); - } - LogDebug("Libxml already initialized"); -} - - diff --git a/src/plugins-installer/misc/libxml_utils.h b/src/plugins-installer/misc/libxml_utils.h deleted file mode 100644 index d662bc7..0000000 --- a/src/plugins-installer/misc/libxml_utils.h +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved - * - * 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 libxml_utils.h - * @author Tomasz Iwanek (t.iwanek@samsung.com) - */ - -#ifndef LIBXML_UTILS_H -#define LIBXML_UTILS_H - -#include -#include - -#include -#include -#include -#include - -/** - * @brief The LibxmlUtils class - * - * Singleton for assurence for libxml2 initialization - * - * Use: LibxmlUtils::Instance().init(); to initialize library - * - */ -class LibxmlUtils -{ -public: - DECLARE_EXCEPTION_TYPE(DPL::Exception, Base) - DECLARE_EXCEPTION_TYPE(Base, Libxml2Error) - - LibxmlUtils(); - ~LibxmlUtils(); - - void init(); -private: - bool isInitialized; - - friend class DPL::Singleton; -}; - -typedef DPL::Singleton LibxmlSingleton; - -#endif // LIBXML_UTILS_H diff --git a/src/plugins-installer/misc/wac_widget_id.cpp b/src/plugins-installer/misc/wac_widget_id.cpp deleted file mode 100644 index bc1f128..0000000 --- a/src/plugins-installer/misc/wac_widget_id.cpp +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved - * - * 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 - * @author Bartlomiej Grzelewski (b.grzelewski@samsung.com) - * @version 1.0 - * @brief - */ -#include "wac_widget_id.h" - -#include -#include - -#include -#include - -#include -#include - -namespace { -const char *SCHEME_HTTP = "http"; -const char *SCHEME_HTTPS = "https"; -} - -WacWidgetId::WacWidgetId(const DPL::OptionalString &widgetId) : - m_schemaMatch(false) -{ - if (!widgetId.IsNull()) { - std::string wid = DPL::ToUTF8String(*widgetId); - parse(wid.c_str()); - } -} - -bool WacWidgetId::matchHost(const DPL::String &second) const -{ - LogDebug("m_schemaMatch is: " << m_schemaMatch); - if (!m_schemaMatch) { - return false; - } - - LogDebug("Matching DNS identity: " << m_host << - " " << DPL::ToUTF8String(second)); - - return m_host == DPL::ToUTF8String(second); -} - -void WacWidgetId::parse(const char *url) -{ - LogDebug("Widget id to parse: " << url); - - std::unique_ptr > - iri(iri_parse(url), iri_destroy); - - if (!iri.get()) { - LogDebug("Error in parsing widget id."); - return; // m_schemaMatch == false; - } - - std::string scheme; - - if (iri.get()->scheme) { - scheme = iri.get()->scheme; - } else { - LogWarning("Error. No scheme in widget id."); - return; // m_schemaMatch == false; - } - - // should we support HTTP and HTTPS? wac says nothing - // std::transform(m_scheme.begin(), m_scheme.end(), m_scheme.begin(), tolower); - - // We only match "http" and "https" schemas - if ((scheme != SCHEME_HTTP) && (scheme != SCHEME_HTTPS)) { - LogWarning("Unknown scheme in widget id." << scheme); - return; // m_schemaMatch == false; - } else { - m_schemaMatch = true; - } - - if (iri.get()->host) { - m_host = iri.get()->host; - LogDebug("Host has been set to: " << m_host); - } - - // What to do when host is empty? No info in wac documentation. - - // Any post processing algorithm? No info in wac documentation. -} diff --git a/src/plugins-installer/misc/wac_widget_id.h b/src/plugins-installer/misc/wac_widget_id.h deleted file mode 100644 index dba5f36..0000000 --- a/src/plugins-installer/misc/wac_widget_id.h +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved - * - * 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 - * @author Bartlomiej Grzelewski (b.grzelewski@samsung.com) - * @version 1.0 - * @brief - */ -#ifndef WRT_ENGINE_SRC_INSTALLER_CORE_MISC_WAC_WIDGET_ID_H -#define WRT_ENGINE_SRC_INSTALLER_CORE_MISC_WAC_WIDGET_ID_H - -#include -#include - -class WacWidgetId -{ - public: - explicit WacWidgetId(const DPL::OptionalString &widgetId); - bool matchHost(const DPL::String &second) const; - - private: - void parse(const char *url); - - bool m_schemaMatch; - std::string m_host; -}; - -#endif // WRT_ENGINE_SRC_INSTALLER_CORE_MISC_WAC_WIDGET_ID_H - diff --git a/src/plugins-installer/misc/widget_location.cpp b/src/plugins-installer/misc/widget_location.cpp deleted file mode 100644 index ff8db8c..0000000 --- a/src/plugins-installer/misc/widget_location.cpp +++ /dev/null @@ -1,174 +0,0 @@ -/* - * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved - * - * 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 widget_location.cpp - * @author Iwanek Tomasz (t.iwanek@smasung.com) - */ -#include "widget_location.h" - -#include -#include -#include -#include -#include -#include - -#include - - -WidgetLocation::DirectoryDeletor::DirectoryDeletor() -{ - m_dirpath = Jobs::WidgetInstall::createTempPath(); -} - -WidgetLocation::DirectoryDeletor::~DirectoryDeletor() -{ - LogDebug("Removing widget installation temporary directory: " << m_dirpath.c_str()); - WrtUtilRemove(m_dirpath); -} - -std::string WidgetLocation::DirectoryDeletor::getTempPath() const -{ - return m_dirpath; -} - -WidgetLocation::WidgetLocation() : m_browser(false) -{ -} - -WidgetLocation::WidgetLocation(const std::string & widgetname) : m_pkgname(widgetname), m_browser(false) -{ -} - -WidgetLocation::~WidgetLocation() -{ -} - -WidgetLocation::WidgetLocation(const std::string & widgetname, - std::string sourcePath, - bool browserRequest, - WrtDB::PkgType t): - m_pkgname(widgetname), - m_widgetSource(sourcePath), - m_browser(browserRequest), - m_type(t), - m_temp(new WidgetLocation::DirectoryDeletor()) -{ -} - -// TODO cache all these paths -std::string WidgetLocation::getInstallationDir() const -{ - return std::string(WrtDB::GlobalConfig::GetUserInstalledWidgetPath()); -} - -std::string WidgetLocation::getPackageInstallationDir() const -{ - return std::string(WrtDB::GlobalConfig::GetUserInstalledWidgetPath()) + "/" - + m_pkgname; -} - -std::string WidgetLocation::getSourceDir() const -{ - return std::string(WrtDB::GlobalConfig::GetUserInstalledWidgetPath()) + "/" - + m_pkgname + WrtDB::GlobalConfig::GetWidgetSrcPath(); -} - -std::string WidgetLocation::getBinaryDir() const -{ - return std::string(WrtDB::GlobalConfig::GetUserInstalledWidgetPath()) + "/" - + m_pkgname + WrtDB::GlobalConfig::GetUserWidgetExecPath(); -} - -std::string WidgetLocation::getBackupDir() const -{ - return getPackageInstallationDir() + "/backup"; -} - -std::string WidgetLocation::getBackupSourceDir() const -{ - return getBackupDir() + WrtDB::GlobalConfig::GetWidgetSrcPath(); -} - -std::string WidgetLocation::getBackupBinaryDir() const -{ - return getBackupDir() + WrtDB::GlobalConfig::GetUserWidgetExecPath(); -} - -std::string WidgetLocation::getTemporaryPackageDir() const -{ - return m_temp->getTempPath(); -} - -bool WidgetLocation::browserRequest() const -{ - return m_browser; -} - -std::string WidgetLocation::getTemporaryRootDir() const -{ - if(m_type == WrtDB::PKG_TYPE_TIZEN_WITHSVCAPP) - { - return getTemporaryPackageDir() + WrtDB::GlobalConfig::GetWidgetSrcPath(); - } - else - { - return getTemporaryPackageDir(); - } -} - -std::string WidgetLocation::getConfigurationDir() const -{ - if(m_browser) - { - std::string path = "."; - int index = m_widgetSource.find_last_of("\\/"); - if (index != std::string::npos) - { - path = m_widgetSource.substr(0, index); - } - return path; - } - else - { - return getTemporaryRootDir(); - } -} - -std::string WidgetLocation::getInstalledIconPath() const -{ - return m_iconPath; -} - -std::string WidgetLocation::getWidgetSource() const -{ - return m_widgetSource; -} - -void WidgetLocation::setIconTargetFilenameForLocale(const std::string & icon) -{ - m_iconPath = icon; -} - -void WidgetLocation::registerExternalLocation(const std::string & file) -{ - m_externals.push_back(file); -} - -WrtDB::ExternalLocationList WidgetLocation::listExternalLocations() const -{ - return m_externals; -} diff --git a/src/plugins-installer/misc/widget_location.h b/src/plugins-installer/misc/widget_location.h deleted file mode 100644 index 2f20bcd..0000000 --- a/src/plugins-installer/misc/widget_location.h +++ /dev/null @@ -1,182 +0,0 @@ -/* - * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved - * - * 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 widget_location.h - * @author Iwanek Tomasz (t.iwanek@smasung.com) - */ -#ifndef WRT_INSTALLER_SRC_MISC_WIDGET_LOCATION_H -#define WRT_INSTALLER_SRC_MISC_WIDGET_LOCATION_H - -#include - -#include -#include -#include - -/** - * @brief The WidgetLocation class - * - * Object that stores locations of several files/directories according - * to package name - * - * Current package layout (of installed package) is following: - * - * /opt/apps/[package_name] - * \_____________ /data - * \_____________ /bin - * \_____________ /bin/[id_of_installed_package] - * \_____________ /res/wgt/ - * \___ config.xml - * \___ [widgets_archive_content] - * - * 1) Normal Widget - * Developer provides content of res/wgt directory (package contains that directory as root). - * - * 2) For OSP Service Hybrid App is actually a bit different: - * Root is OSP Service directory, WebApp content is located in [root]/res/wgt - * - * Temporary directory is directory when widget is placed at the begining - * of installation process. After parsing process of config.xml, destination directory is created. - */ -class WidgetLocation -{ - class DirectoryDeletor - { - public: - DirectoryDeletor(); - ~DirectoryDeletor(); - std::string getTempPath() const; - private: - std::string m_dirpath; - }; - -public: - DECLARE_EXCEPTION_TYPE(DPL::Exception, Base) - DECLARE_EXCEPTION_TYPE(Base, NoTemporaryPath) - /** - * @brief WidgetLocation - * - * Creates useless object. Needed by DPL::Optional - */ - WidgetLocation(); - /** - * @brief WidgetLocation Builds paths for widget location during uninstallation - * - * Uninstallation process needs only installed package directory. - * - * @param widgetname name of widget - */ - WidgetLocation(const std::string & widgetname); - /** - * @brief WidgetLocation Builds paths for widget location during installation - * - * @param widgetname name of widget - * @param browserRequest is browser Request - * @param sourcePath given source path - * @param t declaraced type of widget if type is needed - * - * In destruction removes temporary directory - */ - WidgetLocation(const std::string & widgetname, std::string sourcePath, - bool browserRequest = false, WrtDB::PkgType t = WrtDB::PKG_TYPE_TIZEN_WEBAPP); - ~WidgetLocation(); - - // Installed paths - std::string getInstallationDir() const; // /opt/apps - std::string getPackageInstallationDir() const; // /opt/apps/[package] - std::string getSourceDir() const; // /opt/apps/[package]/res/wgt - std::string getBinaryDir() const; // /opt/apps/[package]/bin - std::string getBackupDir() const; // /opt/apps/[package]/backup - std::string getBackupSourceDir() const; // /opt/apps/[package]/backup/res/wgt - std::string getBackupBinaryDir() const; // /opt/apps/[package]/backup/bin - - bool browserRequest() const; - - // Temporary paths - /** - * @brief getTemporaryRootDir - * @return value of root for developer's provide package (root of unpacked .wgt file) - */ - std::string getTemporaryPackageDir() const; - /** - * @brief getTemporaryRootDir - * - * Value of this will differs according to type of installed widget. - * - * @return value of root for content in temporary directory to be copied into 'res/wgt' - */ - std::string getTemporaryRootDir() const; - /** - * @brief getConfigurationDir Returns rott directory for configuration requirements - * - * 1) For packed widgets it is just root of unpacked sources - * 2) For browser installation it is directory name of widget passed to installer - * - * @return configuration directory - */ - std::string getConfigurationDir() const; - - //icons - /** - * @brief setIconTargetFilenameForLocale set installed ion path according to locale - * @param icon path of application icon - */ - void setIconTargetFilenameForLocale(const std::string &icon); - /** - * @brief getIconTargetFilename gets icon path suffix for locale - * @param languageTag language tag - * @return value of suffix of path - */ - DPL::String getIconTargetFilename(const DPL::String& languageTag) const; - /** - * @brief getIconTargetFilename gets icon full path - * @param languageTag language tag - * @return value of full path - */ - std::string getInstalledIconPath() const; - - /** - * @brief getWidgetSourcePath return widget's source path given to installer - * @return value of source path - */ - std::string getWidgetSource() const; - - //external files - /** - * @brief registerExternalFile Registers file for database registration - * @param file - * - * Registered file will be stored in database and removed automatically a - * - * @return - */ - void registerExternalLocation(const std::string & file); - /** - * @brief listExternalFile list all file to be registered - */ - WrtDB::ExternalLocationList listExternalLocations() const; - -private: - std::string m_widgetSource; // Source widget zip file/widget url - bool m_browser; // is browser request installation - std::string m_pkgname; //name of package - std::string m_iconPath; //installed icon path - WrtDB::PkgType m_type; - DPL::SharedPtr m_temp; //directory - WrtDB::ExternalLocationList m_externals; -}; - -#endif // WRT_INSTALLER_SRC_MISC_WIDGET_LOCATION_H diff --git a/src/plugins-installer/plugin_installer.cpp b/src/plugins-installer/plugin_installer.cpp new file mode 100644 index 0000000..a2c668d --- /dev/null +++ b/src/plugins-installer/plugin_installer.cpp @@ -0,0 +1,691 @@ +/* + * Copyright (c) 2012 Samsung Electronics Co., Ltd All Rights Reserved + * + * 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 plugin_installer.cpp + * @author Andrzej Surdej(a.surdej@samgsung.com) + * @version + * @brief + */ + +#include "plugin_installer.h" + +#include +#include +#include +#include + +#include +#include + +#include "plugin_objects.h" +#include "plugin_metafile_reader.h" +#include "plugin_installer_errors.h" + +#include +#include +//#include +#include +#include + +#include + +#include +#include +#include +#include +#include +#include +#include + +#include + +using namespace WrtDB; +using namespace WrtPluginsApi; + +IMPLEMENT_SINGLETON(PluginsInstaller) + +namespace { +const std::string DIRECTORY_SEPARATOR = std::string("/"); +} + +const int PluginsInstaller::INSTALLATION_ERROR = -1; + +PluginsInstaller::PluginsInstaller() + : m_initialized(false) +{ + LogInfo("PluginsInstaller created."); +} +PluginsInstaller::~PluginsInstaller() +{ + LogInfo("PluginsInstaller destroyed."); +} + +void PluginsInstaller::checkDatabaseTablesExistance() +{ + if (!WrtDB::WrtDatabase::CheckTableExist("FeaturesList") || + !WrtDB::WrtDatabase::CheckTableExist("PluginProperties") || + !WrtDB::WrtDatabase::CheckTableExist("PluginDependencies") || + !WrtDB::WrtDatabase::CheckTableExist("PluginImplementedObjects") || + !WrtDB::WrtDatabase::CheckTableExist("PluginRequiredObjects") || + !WrtDB::WrtDatabase::CheckTableExist("DeviceCapabilities") || + !WrtDB::WrtDatabase::CheckTableExist("FeatureDeviceCapProxy")) + { + LogError("Wrong database. Required tables not exist."); + deinitialize(); + Assert(false && "Wrong database. Required tables not exist."); + } +} + +bool PluginsInstaller::initialize() +{ + LogDebug("Initializing required systems."); + + // Check paths + if (!PluginUtils::checkPaths()) { + return false; + } + // Initialize ValidationCore - this must be done before AttachDatabases + ValidationCore::VCoreInit( + std::string(GlobalConfig::GetFingerprintListFile()), + std::string(GlobalConfig::GetFingerprintListSchema()), + std::string(GlobalConfig::GetVCoreDatabaseFilePath())); + + xmlInitParser(); + WrtDB::WrtDatabase::attachToThreadRW(); + ValidationCore::AttachToThreadRW(); + checkDatabaseTablesExistance(); + LogDebug("Initialized."); + m_initialized = true; + return true; +} + +void PluginsInstaller::deinitialize() +{ + LogDebug("Shuting systems down."); + m_initialized = false; + ValidationCore::DetachFromThread(); + WrtDB::WrtDatabase::detachFromThread(); + ValidationCore::VCoreDeinit(); + xmlCleanupParser(); + LogDebug("Done"); +} + +PluginsInstaller::ReturnStatus PluginsInstaller::installPlugin( + const std::string& libPath) +{ + if (!m_initialized) { + LogError("Plugins installer not initialized."); + return ReturnStatus::NotInitialized; + } + LogInfo("Plugin installation started. Checking path: " << libPath); + + if (!PluginUtils::checkPath(libPath)) + return ReturnStatus::WrongPluginPath; + + LogInfo("Plugin path ok. Searching for config file..."); + + std::string metaFileName = libPath + DIRECTORY_SEPARATOR + + std::string(WrtDB::GlobalConfig::GetPluginMetafileName()); + if (PluginUtils::checkFileExistance(metaFileName)) + { + return installPluginFromMetafile(libPath, metaFileName); + } + + PluginMetafileData pluginInfo; + pluginInfo.m_libraryName = getLibraryName(libPath); + + LogInfo("Config file done. Lib name: " << pluginInfo.m_libraryName + << ". Searching for installed plugin..."); + + if (WrtDB::PluginDAO::isPluginInstalled(pluginInfo.m_libraryName)) { + LogInfo("Plugin already installed."); + return ReturnStatus::AlreadyInstalled; + } + LogInfo("Plugin not installed. Loading library file..."); + + PluginObjectsPtr libraryObjects; + PluginHandle pluginHandle; + + std::string filename = libPath + DIRECTORY_SEPARATOR + + pluginInfo.m_libraryName; + + LogDebug("Loading plugin: " << filename); + + Plugin* plugin; + Try + { + plugin = m_registry.GetPlugin(filename); + } + Catch(DPL::Exception) { + LogError("Loading library failed " << filename); + return ReturnStatus::LoadingLibraryError; + } + libraryObjects = PluginObjectsPtr(new PluginObjects()); + + LogInfo("#####"); + LogInfo("##### Plugin: " << filename << " supports new plugin API"); + LogInfo("#####"); + + FOREACH(o, *plugin->GetObjects()) { + libraryObjects->addObjects(CAST(*o)->GetParentName(), + CAST(*o)->GetName()); + + LogDebug("[Parent << Object] " << CAST(*o)->GetParentName() + << " << " + << CAST(*o)->GetName()); + + registerObjects(libraryObjects, plugin->GetObjects()); + } + + if (!fillMappingInterfaces(pluginInfo, filename)) { + m_registry.RemovePlugin(filename, *plugin); + return ReturnStatus::LoadingLibraryError; + } + + LogInfo("Library loaded. Registering plugin..."); + + Try + { + pluginHandle = + PluginDAO::registerPlugin(pluginInfo, libPath); + + LogInfo("Plugin registered. Registering features..."); + + FOREACH(it, pluginInfo.m_featureContainer) + { + LogError("PluginHandle: " << pluginHandle); + FeatureDAO::RegisterFeature(*it, pluginHandle); + } + + LogInfo("Features registered. Registering objects..."); + + registerPluginObjects(pluginHandle, libraryObjects); + + LogInfo("Registration done. Resolving dependencies..."); + + //TODO: can it be replaced with resolvePluginDependencies(handle) + if (!registerAndUpdateInstallation(pluginHandle, libraryObjects)) + return ReturnStatus::InstallationWaiting; + } Catch (DPL::Exception) { + LogError("Failed to make database entry."); + return ReturnStatus::DatabaseError; + } + + LogInfo("Plugin installed successfully."); + return ReturnStatus::Success; +} + +PluginObjectsPtr PluginsInstaller::loadLibraryFromMetafile( + const std::string& libName) const +{ + LogInfo("Loading library: " << libName); + + void *dlHandle = dlopen(libName.c_str(), RTLD_NOW); + if (dlHandle == NULL ) { + LogError( + "Failed to load plugin: " << libName << + ". Reason: " << dlerror()); + ThrowMsg(PluginInstall::Exceptions::LibraryException, "Library error"); + } + + const js_entity_definition_t *rawEntityList = NULL; + get_widget_entity_map_proc *getWidgetEntityMapProcPtr = NULL; + + getWidgetEntityMapProcPtr = + reinterpret_cast(dlsym(dlHandle, + PLUGIN_GET_CLASS_MAP_PROC_NAME)); + + if (getWidgetEntityMapProcPtr) { + rawEntityList = (*getWidgetEntityMapProcPtr)(); + } else { + rawEntityList = + static_cast(dlsym(dlHandle, + PLUGIN_CLASS_MAP_NAME)); + } + + if (rawEntityList == NULL) { + dlclose(dlHandle); + LogError("Failed to read class name" << libName); + ThrowMsg(PluginInstall::Exceptions::LibraryException, "Library error"); + } + + PluginObjectsPtr libraryObjects = PluginObjectsPtr(new PluginObjects()); + const js_entity_definition_t *rawEntityListIterator = rawEntityList; + + LogInfo("#####"); + LogInfo("##### Plugin: " << libName << " is using deprecated API"); + LogInfo("#####"); + + while (rawEntityListIterator->parent_name != NULL && + rawEntityListIterator->object_name != NULL) + { + LogInfo("##### [" << rawEntityListIterator->object_name << "]: "); + LogInfo("##### Parent: " << rawEntityListIterator->parent_name); + LogInfo("#####"); + + libraryObjects->addObjects(rawEntityListIterator->parent_name, + rawEntityListIterator->object_name); + + ++rawEntityListIterator; + } + + // Unload library + if (dlclose(dlHandle) != 0) { + LogError("Cannot close plugin handle"); + } else { + LogDebug("Library is unloaded"); + } + + // Load export table + LogDebug("Library successfuly loaded and parsed"); + + return libraryObjects; +} + + +PluginsInstaller::ReturnStatus PluginsInstaller::installPluginFromMetafile( + const std::string& path, const std::string& metaFilePath) +{ + if (!m_initialized) { + LogError("Plugins installer not initialized."); + return ReturnStatus::NotInitialized; + } + OptionalPluginMetafileData pluginData; + Try + { + pluginData = parseMetafile(metaFilePath); + } + Catch (PluginInstall::Exceptions::XMLFileParsingException) + { + LogError("Parsing metafile failed."); + return ReturnStatus::MetafileError; + } + if (pluginData.IsNull()) { + return ReturnStatus::MetafileError; + } + + if (WrtDB::PluginDAO::isPluginInstalled(pluginData->m_libraryName)) { + LogInfo("Plugin already installed."); + return ReturnStatus::AlreadyInstalled; + } + Try { + + LogError("path is: " << path << ", libraryName: " << pluginData->m_libraryName); + PluginObjectsPtr objects = loadLibraryFromMetafile( + path + DIRECTORY_SEPARATOR + pluginData->m_libraryName); + + PluginHandle pluginHandle = + PluginDAO::registerPlugin(*pluginData, path); + + LogInfo("Plugin registered. Registering features..."); + + FOREACH(it, pluginData->m_featureContainer) + { + LogError("PluginHandle: " << pluginHandle); + FeatureDAO::RegisterFeature(*it, pluginHandle); + } + + LogInfo("Features registered. Registering objects..."); + + registerPluginObjects(pluginHandle, objects); + + LogInfo("Objects registered. Finishing..."); + + if (!registerAndUpdateInstallation(pluginHandle, objects)) + return ReturnStatus::InstallationWaiting; + } Catch (DPL::Exception) { + LogError("Failed to make database entry."); + return ReturnStatus::DatabaseError; + } + + LogInfo("Plugin installed successfully."); + return ReturnStatus::Success; +} + +int PluginsInstaller::installAllPlugins() +{ + if (!m_initialized) { + LogError("Plugins installer not initialized."); + return INSTALLATION_ERROR; + } + LogDebug("Installing plugins ..."); + + std::string PLUGIN_PATH = std::string(GlobalConfig::GetDevicePluginPath()); + + DIR *dir; + dir = opendir(PLUGIN_PATH.c_str()); + + if (!dir) { + return INSTALLATION_ERROR; + } + + LogInfo("Plugin DIRECTORY IS" << PLUGIN_PATH); + struct dirent* libdir; + + errno = 0; + + std::list pluginsPaths; + + while ((libdir = readdir(dir)) != 0) { + if (strcmp(libdir->d_name, ".") == 0 || + strcmp(libdir->d_name, "..") == 0) { + continue; + } + + std::string path = PLUGIN_PATH; + path += "/"; + path += libdir->d_name; + + struct stat tmp; + + if (stat(path.c_str(), &tmp) == -1) { + LogError("Failed to open file" << path); + continue; + } + + if (!S_ISDIR(tmp.st_mode)) { + LogError("Not a directory" << path); + continue; + } + + LogDebug("Found plugin at " << path); + pluginsPaths.push_back(path); + } + + if (-1 == TEMP_FAILURE_RETRY(closedir(dir))) { + LogError("Failed to close dir: " << PLUGIN_PATH); + } + + LogDebug("Plugins to install: " << pluginsPaths.size()); + + for (int k = 0; k <= pluginsPaths.size(); ++k) + printf(" "); + printf("]\r["); + int installedPluginsCount = 0; + ReturnStatus ret = ReturnStatus::Unknown; + FOREACH(it, pluginsPaths) { + LogInfo("Preparing to plugin installation: " << *it); + ret = installPlugin(*it); + if (ReturnStatus::Success == ret) { + ++installedPluginsCount; + LogInfo("Plugin " << *it << " installed."); + } else if (ReturnStatus::InstallationWaiting == ret) { + LogWarning("Plugin not installed. Waiting for dependency"); + } else { + LogError("Plugin installation failed"); + } + printf("#"); + fflush(stdout); + } + printf("\n"); + installedPluginsCount += installWaitingPlugins(); + m_registry.UnloadAll(); + LogInfo("Installed " << installedPluginsCount + << " plugins of total: " << pluginsPaths.size()); + return installedPluginsCount; +} + +int PluginsInstaller::installWaitingPlugins() +{ + PluginHandleSetPtr waitingPlugins; + + waitingPlugins = + PluginDAO::getPluginHandleByStatus(PluginDAO::INSTALLATION_WAITING); + + int pluginsInstalled = 0; + FOREACH(it, *waitingPlugins) + { + if (resolvePluginDependencies(*it)) + ++pluginsInstalled; + } + return pluginsInstalled; +} + +bool PluginsInstaller::resolvePluginDependencies(PluginHandle handle) +{ + PluginHandleSetPtr dependencies(new PluginHandleSet); + + PluginObjects::ObjectsPtr requiredObjects = + PluginDAO::getRequiredObjectsForPluginHandle(handle); + + PluginHandle depHandle = INVALID_PLUGIN_HANDLE; + + FOREACH(requiredObject, *requiredObjects) + { + depHandle = + PluginDAO::getPluginHandleForImplementedObject(*requiredObject); + + if (INVALID_PLUGIN_HANDLE == depHandle) { + LogError("Library implementing: " << + *requiredObject << " NOT FOUND"); + return false; + } + dependencies->insert(depHandle); + } + + PluginDAO::registerPluginLibrariesDependencies(handle, dependencies); + PluginDAO::setPluginInstallationStatus(handle, + PluginDAO::INSTALLATION_COMPLETED); + + return true; +} + +void PluginsInstaller::registerObjects(const PluginObjectsPtr& libObj, + const IObjectsListPtr& objects) const +{ + LogDebug("registerObjects invoked"); + + FOREACH(o, *objects) + { + auto children = CAST(*o)->GetChildren(); + + if(children) + { + FOREACH(c, *children) + { + libObj->addObjects(CAST(*o)->GetName(), CAST(*c)->GetName()); + + LogDebug("[Parent << Object] " << CAST(*c)->GetName() + << " << " + << CAST(*o)->GetName()); + } + + registerObjects(libObj, children); + } + } +} + + +PluginsInstaller::OptionalPluginMetafileData PluginsInstaller::parseMetafile( + const std::string& path) const +{ + LogInfo("Plugin Config file::" << path); + Try + { + PluginMetafileData pluginInfo; + PluginMetafileReader reader; + reader.initialize(path); + reader.read(pluginInfo); + + FOREACH(it, pluginInfo.m_featureContainer) { + LogDebug("Parsed feature : " << it->m_name); + + FOREACH(devCap, it->m_deviceCapabilities) { + LogDebug(" | DevCap : " << *devCap); + } + } + return OptionalPluginMetafileData(pluginInfo); + } + Catch(ValidationCore::ParserSchemaException::Base) { + LogError("Error during file processing " << path); + ThrowMsg(PluginInstall::Exceptions::XMLFileParsingException, + "Parsing metafile failed"); + } +} + +std::string PluginsInstaller::getLibraryName(const std::string& dirPath) const +{ + std::string pluginPath = dirPath; + size_t indexpos = pluginPath.find_last_of('/'); + + if (std::string::npos == indexpos) + { + indexpos = 0; + } + else + { + indexpos += 1; // move after '/' + } + + std::string libName = pluginPath.substr(indexpos); + libName = WrtDB::GlobalConfig::GetPluginPrefix() + libName + + WrtDB::GlobalConfig::GetPluginSuffix(); + LogDebug("Plugin .so: " << libName); + return libName; +} + +bool PluginsInstaller::registerAndUpdateInstallation( + const WrtDB::DbPluginHandle& pluginHandle, + const PluginObjectsPtr& libraries) +{ + PluginHandleSetPtr handles = PluginHandleSetPtr(new PluginHandleSet); + + DbPluginHandle handle = INVALID_PLUGIN_HANDLE; + + //register requiredObjects + FOREACH(it, *(libraries->getDependentObjects())) + { + if (libraries->hasObject(*it)) { + LogDebug("Dependency from the same library. ignored"); + continue; + } + + handle = PluginDAO::getPluginHandleForImplementedObject(*it); + if (handle == INVALID_PLUGIN_HANDLE) { + LogError("Library implementing: " << *it << " NOT FOUND"); + PluginDAO::setPluginInstallationStatus( + pluginHandle, + PluginDAO::INSTALLATION_WAITING); + return false; + } + + handles->insert(handle); + } + + PluginDAO::registerPluginLibrariesDependencies(pluginHandle, handles); + + PluginDAO::setPluginInstallationStatus(pluginHandle, + PluginDAO::INSTALLATION_COMPLETED); + return true; +} + +bool PluginsInstaller::fillMappingInterfaces(PluginMetafileData& pluginData, + const std::string& filename) +{ + void *dlHandle = dlopen(filename.c_str(), RTLD_NOW); + if (dlHandle == NULL) { + LogError("Failed to load plugin: " << filename << ". Reason: " << dlerror()); + return false; + } + Try + { + ExportedApi* entryPoint = + static_cast (dlsym(dlHandle, GetExportedSymbolName())); + if (NULL == entryPoint) { + LogError("Error: " << dlerror()); + ThrowMsg(PluginInstall::Exceptions::LibraryException, "Library error"); + } + + // obtain feature -> dev-cap mapping + feature_mapping_interface_t mappingInterface = {NULL, NULL, NULL}; + entryPoint->GetProvidedFeatures(&mappingInterface); + + if (!mappingInterface.featGetter || !mappingInterface.release || + !mappingInterface.dcGetter) { + LogError("Failed to obtain mapping interface from .so"); + ThrowMsg(PluginInstall::Exceptions::LibraryException, "Library error"); + } + + feature_mapping_t* devcapMapping = mappingInterface.featGetter(); + + LogDebug("Getting mapping from features to device capabilities"); + + for (size_t i = 0; i < devcapMapping->featuresCount; ++i) { + PluginMetafileData::Feature feature; + feature.m_name = devcapMapping->features[i].feature_name; + + LogDebug("Feature: " << feature.m_name); + + const devcaps_t* dc = + mappingInterface.dcGetter(devcapMapping, + devcapMapping->features[i].feature_name); + + LogDebug("device=cap: " << dc); + + if (dc) { + LogDebug("devcaps count: " << dc->devCapsCount); + + for (size_t j = 0; j < dc->devCapsCount; ++j) { + LogDebug("devcap: " << dc->deviceCaps[j]); + feature.m_deviceCapabilities.insert(dc->deviceCaps[j]); + } + } + + pluginData.m_featureContainer.insert(feature); + } + + mappingInterface.release(devcapMapping); + } Catch (PluginInstall::Exceptions::PluginsInstallerException) + { + LogError("Exception while feature mapping"); + dlclose(dlHandle); + return false; + } + + // Unload library + if (dlclose(dlHandle) != 0) { + LogError("Cannot close plugin handle"); + } else { + LogDebug("Library is unloaded"); + } + return true; +} + +void PluginsInstaller::registerPluginObjects(const WrtDB::DbPluginHandle& handle, + const PluginObjectsPtr libObjects) const +{ + //register implemented objects + PluginObjects::ObjectsPtr objects = + libObjects->getImplementedObject(); + + FOREACH(it, *objects) + { + WrtDB::PluginDAO::registerPluginImplementedObject(*it, handle); + } + + //register requiredObjects + objects = libObjects->getDependentObjects(); + + FOREACH(it, *objects) + { + if (libObjects->hasObject(*it)) { + LogDebug("Dependency from the same library. ignored"); + continue; + } + WrtDB::PluginDAO::registerPluginRequiredObject(*it, handle); + } +} + diff --git a/src/plugins-installer/plugin_installer.h b/src/plugins-installer/plugin_installer.h new file mode 100644 index 0000000..899be3c --- /dev/null +++ b/src/plugins-installer/plugin_installer.h @@ -0,0 +1,96 @@ +/* + * Copyright (c) 2012 Samsung Electronics Co., Ltd All Rights Reserved + * + * 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 plugin_installer.h + * @author Andrzej Surdej(a.surdej@samgsung.com) + * @version + * @brief + */ + +#ifndef WRT_PLUGINS_INSTALLER_PLUGIN_INSTALLER_H +#define WRT_PLUGINS_INSTALLER_PLUGIN_INSTALLER_H + +#include +#include +#include +#include +#include + +#include + +class PluginsInstaller +{ +public: + static const int INSTALLATION_ERROR; + enum class ReturnStatus + { + Success, ///< Success + + NotInitialized, ///< Singleton not initialized + WrongPluginPath, ///< ? + MetafileError, ///< ? + AlreadyInstalled, ///< ? + LoadingLibraryError, ///< Loading library by dlopen failed. + /// It may be caused by missing symbols + InstallationWaiting, /// Installation failed due to dependencies + DatabaseError, /// Unable to update database + Unknown ///< Temporary error. Try to not use this. + }; + + bool initialize(); + int installAllPlugins(); + void deinitialize(); + + ReturnStatus installPlugin(const std::string& libPath); + ReturnStatus installPluginFromMetafile(const std::string& libPath, + const std::string& metaFilePath); + + int installWaitingPlugins(); + bool resolvePluginDependencies(PluginHandle handle); + + bool isInitialized(); +private: + friend class DPL::Singleton; + + PluginsInstaller(); + virtual ~PluginsInstaller(); + + void registerObjects(const PluginObjectsPtr& libObj, + const WrtPluginsApi::IObjectsListPtr& objects) const; + + typedef DPL::Optional OptionalPluginMetafileData; + OptionalPluginMetafileData parseMetafile(const std::string& path) const; + + std::string getLibraryName(const std::string& dirPath) const; + bool registerAndUpdateInstallation(const PluginHandle& pluginHandle, + const PluginObjectsPtr& libraries); + bool fillMappingInterfaces(WrtDB::PluginMetafileData& pluginData, + const std::string& filename); + void registerPluginObjects(const PluginHandle& handle, + const PluginObjectsPtr libObjects) const; + void checkDatabaseTablesExistance(); + PluginObjectsPtr loadLibraryFromMetafile(const std::string& libName) const; + + WrtPluginsApi::PluginRegistry m_registry; + bool m_initialized; + bool m_reinstall; +}; + +typedef DPL::Singleton PluginsInstallerSingleton; + + +#endif /* WRT_PLUGINS_INSTALLER_PLUGIN_INSTALLER_H */ + diff --git a/src/plugins-installer/configuration_parser/parser_runner.h b/src/plugins-installer/plugin_installer_errors.h similarity index 52% rename from src/plugins-installer/configuration_parser/parser_runner.h rename to src/plugins-installer/plugin_installer_errors.h index 1176165..55aa39b 100644 --- a/src/plugins-installer/configuration_parser/parser_runner.h +++ b/src/plugins-installer/plugin_installer_errors.h @@ -14,34 +14,27 @@ * limitations under the License. */ /** - * @file parser_runner.h - * @author Lukasz Wrzosek (l.wrzosek@samsung.com) - * @version 0.1 + * @file plugin_installer_errors.h + * @author Pawel Sikorski (p.sikorski@samgsung.com) + * @author Grzegorz Krawczyk (g.krawczyk@samgsung.com) + * @version * @brief */ -#ifndef PARSER_RUNNER_H_ -#define PARSER_RUNNER_H_ -#include -#include -#include -#include "element_parser.h" +#ifndef WRT_PLUGINS_INSTALLER_PLUGIN_INSTALLER_ERRORS_H +#define WRT_PLUGINS_INSTALLER_PLUGIN_INSTALLER_ERRORS_H -class ParserRunner : private DPL::Noncopyable -{ - public: - void Parse(const std::string& filename, - ElementParserPtr root); - void Parse(DPL::AbstractInput *input, - ElementParserPtr root); +#include - ParserRunner(); - ~ParserRunner(); +namespace PluginInstall { +namespace Exceptions { - private: - class Impl; - Impl* m_impl; -}; +DECLARE_EXCEPTION_TYPE(DPL::Exception, PluginsInstallerException) +DECLARE_EXCEPTION_TYPE(PluginsInstallerException, LibraryException) +DECLARE_EXCEPTION_TYPE(PluginsInstallerException, XMLFileParsingException) -#endif // PARSER_RUNNER_H_ +} //namespace +} //namespace + +#endif /* WRT_PLUGINS_INSTALLER_PLUGIN_INSTALLER_ERRORS_H */ diff --git a/src/plugins-installer/commons/wrt_common_types.h b/src/plugins-installer/plugin_installer_types.h similarity index 73% rename from src/plugins-installer/commons/wrt_common_types.h rename to src/plugins-installer/plugin_installer_types.h index 9b80c8a..ae3a5db 100644 --- a/src/plugins-installer/commons/wrt_common_types.h +++ b/src/plugins-installer/plugin_installer_types.h @@ -13,24 +13,18 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -/* - * plugin_common_types.h - * - * Author: Soyoung Kim(sy037.kim@samsung.com) +/** + * @file plugin_installer_types.h + * @author Andrzej Surdej (a.surdej@samgsung.com) + * @version + * @brief */ -#ifndef PLUGIN_COMMON_TYPES_H -#define PLUGIN_COMMON_TYPES_H +#ifndef WRT_PLUGINS_INSTALLER_PLUGIN_INSTALLER_TYPES_H +#define WRT_PLUGINS_INSTALLER_PLUGIN_INSTALLER_TYPES_H -#include #include -/** -* Widget version is optional -*/ -typedef DPL::Optional OptionalWidgetVersion; - - /* Define db type */ typedef WrtDB::DbWidgetHandle WidgetHandle; typedef WrtDB::DbWidgetHandleList WidgetHandleList; @@ -38,8 +32,6 @@ typedef WrtDB::DbWidgetHandleList WidgetHandleList; typedef WrtDB::DbWidgetFeature WidgetFeature; typedef WrtDB::DbWidgetFeatureSet WidgetFeatureSet; -typedef WrtDB::DbWidgetSize WidgetSize; - typedef WrtDB::DbPluginHandle PluginHandle; -#endif /* PLUGIN_COMMON_TYPES_H */ +#endif /* WRT_PLUGINS_INSTALLER_PLUGIN_INSTALLER_TYPES_H */ diff --git a/src/plugins-installer/jobs/plugin_install/plugin_metafile_reader.cpp b/src/plugins-installer/plugin_metafile_reader.cpp similarity index 100% rename from src/plugins-installer/jobs/plugin_install/plugin_metafile_reader.cpp rename to src/plugins-installer/plugin_metafile_reader.cpp diff --git a/src/plugins-installer/jobs/plugin_install/plugin_metafile_reader.h b/src/plugins-installer/plugin_metafile_reader.h similarity index 100% rename from src/plugins-installer/jobs/plugin_install/plugin_metafile_reader.h rename to src/plugins-installer/plugin_metafile_reader.h diff --git a/src/plugins-installer/jobs/plugin_install/plugin_objects.cpp b/src/plugins-installer/plugin_objects.cpp similarity index 93% rename from src/plugins-installer/jobs/plugin_install/plugin_objects.cpp rename to src/plugins-installer/plugin_objects.cpp index 55e6ad3..2ded4f5 100644 --- a/src/plugins-installer/jobs/plugin_install/plugin_objects.cpp +++ b/src/plugins-installer/plugin_objects.cpp @@ -27,6 +27,7 @@ namespace { const char* SEPARATOR = "."; const std::string GLOBAL_OBJECT_NAME = WrtPluginsApi::IObject::WINDOW_OBJECT(); +const std::string OLD_GLOBAL_OBJECT_NAME = "GLOBAL_OBJECT"; std::string normalizeName(const std::string& objectName) { @@ -39,6 +40,11 @@ std::string normalizeName(const std::string& objectName) GLOBAL_OBJECT_NAME)) { return objectName; } + if (!objectName.compare(0, OLD_GLOBAL_OBJECT_NAME.size(), + OLD_GLOBAL_OBJECT_NAME)) + { + return GLOBAL_OBJECT_NAME; + } //each object in storage has name started from $GLOBAL_OBJECT_NAME$ return GLOBAL_OBJECT_NAME + std::string(SEPARATOR) + objectName; diff --git a/src/plugins-installer/jobs/plugin_install/plugin_objects.h b/src/plugins-installer/plugin_objects.h similarity index 100% rename from src/plugins-installer/jobs/plugin_install/plugin_objects.h rename to src/plugins-installer/plugin_objects.h diff --git a/src/plugins-installer/plugin_utils.cpp b/src/plugins-installer/plugin_utils.cpp new file mode 100644 index 0000000..dbf50ae --- /dev/null +++ b/src/plugins-installer/plugin_utils.cpp @@ -0,0 +1,89 @@ +/* + * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved + * + * 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 plugin-utils.cpp + * @author + * @version 1.0 + * @brief Header file for plugin util + */ + +#include "plugin_utils.h" +#include +#include +#include +#include + +using namespace WrtDB; + +namespace PluginUtils { + +//checks if file exists and is regular file +bool checkFileExistance(const std::string& filename) +{ + struct stat tmp; + + if (0 == stat(filename.c_str(), &tmp) && S_ISREG(tmp.st_mode)) { + return true; + } + return false; +} + +std::string cutOffFileName(const std::string& path) { + size_t found = path.find_last_of("/"); + if (found == std::string::npos) { + return path; + } else { + return path.substr(0, found); + } +} + +bool checkPath(const std::string& path) { + struct stat st; + if (0 == stat(path.c_str(), &st) && S_ISDIR(st.st_mode)) { + return true; + } + LogError("Cannot access directory [ " << path << " ]"); + return false; +} + +bool checkPaths() +{ + bool if_ok = true; + if_ok &= (checkPath(cutOffFileName( + GlobalConfig::GetWrtDatabaseFilePath()))); + if (!if_ok) { + LogError( + "Path <" << GlobalConfig::GetWrtDatabaseFilePath() << + "> does not exist."); + } + + if_ok &= (checkPath(GlobalConfig::GetDevicePluginPath())); + if (!if_ok) { + LogError( + "Path <" << GlobalConfig::GetDevicePluginPath() << + "> does not exist."); + } + + if_ok &= (checkPath(GlobalConfig::GetUserInstalledWidgetPath())); + if (!if_ok) { + LogError( + "Path <" << GlobalConfig::GetUserInstalledWidgetPath() << + "> does not exist."); + } + return if_ok; +} + +} //namespace PluginUtils diff --git a/src/plugins-installer/wrt-installer/plugin_utils.h b/src/plugins-installer/plugin_utils.h similarity index 60% rename from src/plugins-installer/wrt-installer/plugin_utils.h rename to src/plugins-installer/plugin_utils.h index 3ba7303..3109ab3 100755 --- a/src/plugins-installer/wrt-installer/plugin_utils.h +++ b/src/plugins-installer/plugin_utils.h @@ -23,31 +23,15 @@ #define PLUGIN_UTILS_H #include -#include -#include +#include namespace PluginUtils { -struct FileState -{ - enum Type - { - FILE_EXISTS, - FILE_EXISTS_NOT_REGULAR, - FILE_NOT_EXISTS, - FILE_READ_DATA_ERROR - }; -}; -typedef std::list PluginPathList; -typedef std::shared_ptr PluginPathListPtr; +bool checkFileExistance(const std::string& filename); -bool lockPluginInstallation(); -bool unlockPluginInstallation(); -bool checkPluginInstallationRequired(); -bool removeInstallationRequiredFlag(); -FileState::Type checkFile(const std::string& filename); -bool removeFile(const std::string& filename); -PluginPathListPtr getPluginPaths(); +std::string cutOffFileName(const std::string& path); +bool checkPath(const std::string& path); +bool checkPaths(); } #endif // PLUGIN_UTILS_H diff --git a/src/plugins-installer/wrt-installer/CMakeLists.txt b/src/plugins-installer/wrt-installer/CMakeLists.txt deleted file mode 100644 index 994a44d..0000000 --- a/src/plugins-installer/wrt-installer/CMakeLists.txt +++ /dev/null @@ -1,72 +0,0 @@ -# Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved -# -# 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 CMakeLists.txt -# @author Lukasz Wrzosek (l.wrzosek@samsung.com) -# @version 1.0 -# - -SET(WRT_INSTALLER_DIR - ${INSTALLER_SRC_DIR}/wrt-installer - ) - -#SET(PKG_MANAGER_DIR -# ${INSTALLER_SRC_DIR}/pkg-manager -# ) - -SET(WRT_INSTALLER_SOURCES - ${WRT_INSTALLER_DIR}/wrt_installer.cpp - ${WRT_INSTALLER_DIR}/wrt_installer_api.cpp - ${WRT_INSTALLER_DIR}/installer_callbacks_translate.cpp - ${WRT_INSTALLER_DIR}/plugin_utils.cpp - ${WRT_INSTALLER_DIR}/language_subtag_rst_tree.cpp - ${WRT_INSTALLER_DIR}/installer_main_thread.cpp - ${WRT_INSTALLER_DIR}/option_parser.cpp - # ${PKG_MANAGER_DIR}/pkgmgr_signal.cpp -) - -PKG_CHECK_MODULES(WRT_INSTALLER_DEPS - # pkgmgr-installer - libpcrecpp - # ace-install - REQUIRED) - -INCLUDE_DIRECTORIES( - # ${PKG_MANAGER_DIR} - ${WRT_INSTALLER_DEP_INCLUDES} - ${WRT_INSTALLER_INCLUDES} - ${WRT_INSTALLER_DEPS_INCLUDE_DIRS} -) - -ADD_EXECUTABLE(${TARGET_INSTALLER} - ${TARGET_INSTALLER_STATIC_SRC} - ${WRT_INSTALLER_SOURCES} -) - -ADD_DEFINITIONS(${WRT_INSTALLER_DEPS_CFLAGS}) - -TARGET_LINK_LIBRARIES(${TARGET_INSTALLER} - ${TARGET_INSTALLER_STATIC} - ${WRT_INSTALLER_DEPS_LIBRARIES} -) - - -SET_TARGET_PROPERTIES(${TARGET_INSTALLER} PROPERTIES - LINK_FLAGS "-Wl,--as-needed -Wl,--hash-style=both -Wl" - BUILD_WITH_INSTALL_RPATH ON - INSTALL_RPATH_USE_LINK_PATH ON -) - -INSTALL(TARGETS ${TARGET_INSTALLER} DESTINATION bin) diff --git a/src/plugins-installer/wrt-installer/installer_callbacks_translate.cpp b/src/plugins-installer/wrt-installer/installer_callbacks_translate.cpp deleted file mode 100644 index 978daa5..0000000 --- a/src/plugins-installer/wrt-installer/installer_callbacks_translate.cpp +++ /dev/null @@ -1,282 +0,0 @@ -/* - * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved - * - * 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 api_callbacks_translate.h - * @author Pawel Sikorski (p.sikorski@samsung.com) - * @version 1.0 - * @brief Source file for api callbacks translate functions - */ - -#include -#include - -namespace InstallerCallbacksTranslate { -WrtErrStatus TranslateError(CommonError::Type status) -{ - switch (status) { - case CommonError::WrtSuccess: - return WRT_SUCCESS; - - case CommonError::HandleNotFound: - return WRT_ERROR_HANDLE_NOT_FOUND; - - case CommonError::AlreadyRunning: - return WRT_ERROR_ALREADY_RUNNING; - - case CommonError::InvalidLanguage: - return WRT_ERROR_INVALID_LANGUAGE; - - case CommonError::AlreadyStopped: - return WRT_ERROR_ALREADY_STOPPED; - - case CommonError::StillAuthorizing: - return WRT_ERROR_STILL_AUTHORIZING; - - case CommonError::EarlyKilled: - return WRT_ERROR_EARLY_KILLED; - - case CommonError::AccessDenied: - return WRT_ERROR_ACCESS_DENIED; - - default: - LogError("Untranslatable error: " << status); - return WRT_ERROR_INTERNAL; - } -} - -void StatusCallback(int widget_handle, - CommonError::Type result, - void *data) -{ - LogDebug("StatusCallback called " << widget_handle << " | " << result); - Assert(data != NULL); - - WrtErrStatus error = TranslateError(result); - StatusCallbackStruct* statusCallbackStruct = - static_cast(data); - - if (statusCallbackStruct->status_callback) { - statusCallbackStruct->status_callback(widget_handle, - error, - statusCallbackStruct->userdata); - } else { - LogInfo("StatusCallback: ignoring NULL callback pointer"); - } - - delete statusCallbackStruct; -} - -//// callback for finished install -//void installFinishedCallback(void *userParam, -// WidgetHandle widget_handle, -// Jobs::WidgetInstall::Exceptions::Type status) -//{ -// Assert(userParam != NULL); -// -// StatusCallbackStruct *apiStr = -// static_cast(userParam); -// -// if (apiStr->status_callback) { -// // Translate error -// WrtErrStatus errorStatus; -// -// switch (status) { -// case Jobs::WidgetInstall::Exceptions::Success: -// errorStatus = WRT_SUCCESS; -// break; -// -// case Jobs::WidgetInstall::Exceptions::ErrorInvalidWidgetPackage: -// errorStatus = WRT_INSTALLER_ERROR_INVALID_WIDGET_PACKAGE; -// break; -// -// case Jobs::WidgetInstall::Exceptions::ErrorWidgetDoesNotExist: -// errorStatus = WRT_INSTALLER_ERROR_WIDGET_DOES_NOT_EXIST; -// break; -// -// case Jobs::WidgetInstall::Exceptions::ErrorFactoryWidget: -// errorStatus = WRT_INSTALLER_ERROR_FACTORY_WIDGET; -// break; -// -// case Jobs::WidgetInstall::Exceptions::ErrorAreadyUninstalling: -// errorStatus = WRT_INSTALLER_ERROR_ALREADY_UNINSTALLING; -// break; -// -// case Jobs::WidgetInstall::Exceptions::ErrorOutOfDiskSpace: -// errorStatus = WRT_INSTALLER_ERROR_OUT_OUT_DISK_SPACE; -// break; -// -// case Jobs::WidgetInstall::Exceptions::ErrorInvalidPackage: -// errorStatus = WRT_INSTALLER_ERROR_INVALID_CERTIFICATE; -// break; -// -// case Jobs::WidgetInstall::Exceptions::ErrorAlreadyInstalled: -// errorStatus = WRT_INSTALLER_ERROR_ALREADY_INSTALLED; -// break; -// -// case Jobs::WidgetInstall::Exceptions::ErrorInternal: -// errorStatus = WRT_INSTALLER_ERROR_INTERNAL; -// break; -// -// case Jobs::WidgetInstall::Exceptions::ErrorNotAllowed: -// errorStatus = WRT_INSTALLER_ERROR_NOT_ALLOWED; -// break; -// -// case Jobs::WidgetInstall::Exceptions::ErrorDeferred: -// errorStatus = WRT_INSTALLER_ERROR_DEFERRED; -// break; -// -// case Jobs::WidgetInstall::Exceptions::ErrorDatabaseFailure: -// errorStatus = WRT_INSTALLER_ERROR_DATABASE_FAILURE; -// break; -// -// case Jobs::WidgetInstall::Exceptions::ErrorInstallOspServcie: -// errorStatus = WRT_INSTALLER_ERROR_OSPSVC; -// break; -// -// case Jobs::WidgetInstall::Exceptions::ErrorUnknown: -// errorStatus = WRT_INSTALLER_ERROR_UNKNOWN; -// break; -// -// default: -// errorStatus = WRT_INSTALLER_ERROR_UNKNOWN; -// break; -// } -// -// // Callback -// apiStr->status_callback(widget_handle, errorStatus, apiStr->userdata); -// } else { -// LogInfo("installFinishedCallback: No callback"); -// } -//} - -// callback for finished install -//void uninstallFinishedCallback(void *userParam, -// WidgetHandle widget_handle, -// Jobs::WidgetUninstall::Exceptions::Type status) -//{ -// Assert(userParam != NULL); -// -// StatusCallbackStruct *apiStr = -// static_cast(userParam); -// -// if (apiStr->status_callback) { -// // Translate error -// WrtErrStatus errorStatus; -// -// switch (status) { -// case Jobs::WidgetUninstall::Exceptions::Success: -// errorStatus = WRT_SUCCESS; -// break; -// -// case Jobs::WidgetUninstall::Exceptions::ErrorAlreadyUninstalling: -// errorStatus = WRT_INSTALLER_ERROR_ALREADY_UNINSTALLING; -// break; -// -// case Jobs::WidgetUninstall::Exceptions::ErrorWidgetDoesNotExist: -// errorStatus = WRT_INSTALLER_ERROR_WIDGET_DOES_NOT_EXIST; -// break; -// -// case Jobs::WidgetUninstall::Exceptions::ErrorDatabaseFailure: -// errorStatus = WRT_INSTALLER_ERROR_DATABASE_FAILURE; -// break; -// -// case Jobs::WidgetUninstall::Exceptions::ErrorUninstallOspSvcFailed: -// errorStatus = WRT_INSTALLER_ERROR_OSPSVC; -// break; -// -// case Jobs::WidgetUninstall::Exceptions::ErrorUnknown: -// errorStatus = WRT_INSTALLER_ERROR_UNKNOWN; -// break; -// -// default: -// errorStatus = WRT_INSTALLER_ERROR_UNKNOWN; -// break; -// } -// -// // Callback -// apiStr->status_callback(widget_handle, errorStatus, apiStr->userdata); -// } else { -// LogInfo("uninstallFinishedCallback: No callback"); -// } -//} - -void pluginInstallFinishedCallback(void *userParam, - Jobs::PluginInstall::Exceptions::Type status) -{ - Assert(userParam); - - PluginStatusCallbackStruct *apiStr = - static_cast(userParam); - - if (apiStr->statusCallback) { - // Translate error - WrtErrStatus errorStatus; - - switch (status) { - case Jobs::PluginInstall::Exceptions::Success: - errorStatus = WRT_SUCCESS; - break; - case Jobs::PluginInstall::Exceptions::WrongPluginPath: - errorStatus = WRT_PLUGIN_INSTALLER_ERROR_WRONG_PATH; - break; - case Jobs::PluginInstall::Exceptions::MetafileError: - errorStatus = WRT_PLUGIN_INSTALLER_ERROR_METAFILE; - break; - case Jobs::PluginInstall::Exceptions::AlreadyInstalled: - errorStatus = WRT_PLUGIN_INSTALLER_ERROR_ALREADY_INSTALLED; - break; - case Jobs::PluginInstall::Exceptions::LoadingLibraryError: - errorStatus = WRT_PLUGIN_INSTALLER_ERROR_LIBRARY_ERROR; - break; - case Jobs::PluginInstall::Exceptions::InstallationWaiting: - errorStatus = WRT_PLUGIN_INSTALLER_ERROR_WAITING; - break; - default: - errorStatus = WRT_INSTALLER_ERROR_UNKNOWN; - break; - } - - apiStr->statusCallback(errorStatus, apiStr->userdata); - } else { - LogInfo("PluginInstallFinishedCallback: No callback"); - } - - delete apiStr; -} - -// callback for progress of install OR uninstall -void installProgressCallback(void *userParam, - ProgressPercent percent, - const ProgressDescription &description) -{ - Assert(userParam != NULL); - - StatusCallbackStruct *apiStr = - static_cast(userParam); - - if (apiStr->progress_callback) { - //CALLBACK EXEC - LogInfo("Entered " << percent << "% " << description); - apiStr->progress_callback(static_cast(percent), - description.c_str(), - apiStr->userdata); - } else { - LogInfo("installProgressCallback: ignoring NULL callback pointer"); - } -} - -} //namespace - diff --git a/src/plugins-installer/wrt-installer/installer_callbacks_translate.h b/src/plugins-installer/wrt-installer/installer_callbacks_translate.h deleted file mode 100644 index 224aee9..0000000 --- a/src/plugins-installer/wrt-installer/installer_callbacks_translate.h +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved - * - * 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 api_callbacks_translate.h - * @author Pawel Sikorski (p.sikorski@samsung.com) - * @version 1.0 - * @brief Header file for api callbacks translate functions - */ -#ifndef WRT_SRC_API_API_CALLBACKS_TRANSLATE_H_ -#define WRT_SRC_API_API_CALLBACKS_TRANSLATE_H_ - -#include -#include -//#include -//#include -#include -#include - -namespace InstallerCallbacksTranslate { -struct StatusCallbackStruct -{ - void* userdata; - WrtInstallerStatusCallback status_callback; - WrtProgressCallback progress_callback; - - StatusCallbackStruct(void* u, - WrtInstallerStatusCallback s, - WrtProgressCallback p) : - userdata(u), - status_callback(s), - progress_callback(p) - { - } -}; - -struct PluginStatusCallbackStruct -{ - void* userdata; - WrtPluginInstallerStatusCallback statusCallback; - WrtProgressCallback progressCallback; - - PluginStatusCallbackStruct(void* u, - WrtPluginInstallerStatusCallback s, - WrtProgressCallback p) : - userdata(u), - statusCallback(s), - progressCallback(p) - { - } -}; - -void StatusCallback(int widget_handle, - CommonError::Type result, - void *data); - -//void installFinishedCallback(void *userParam, -// WidgetHandle widget_handle, -// Jobs::WidgetInstall::Exceptions::Type status); -// -//void uninstallFinishedCallback(void *userParam, -// WidgetHandle widget_handle, -// Jobs::WidgetUninstall::Exceptions::Type status); - -void pluginInstallFinishedCallback(void *userParam, - Jobs::PluginInstall::Exceptions::Type status); - -// callback for progress of install OR uninstall -void installProgressCallback(void *userParam, - ProgressPercent percent, - const ProgressDescription &description); - -} //namespace - -#endif /* WRT_SRC_API_API_CALLBACKS_TRANSLATE_H_ */ diff --git a/src/plugins-installer/wrt-installer/installer_main_thread.cpp b/src/plugins-installer/wrt-installer/installer_main_thread.cpp deleted file mode 100755 index 4977dca..0000000 --- a/src/plugins-installer/wrt-installer/installer_main_thread.cpp +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved - * - * 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 installer_main_thread.cpp - * @author Krzysztof Jackiewicz (k.jackiewicz@samsung.com) - * @version 1.0 - */ - -#include "installer_main_thread.h" -#include -#include -#include -#include -#include -#include -//#include -//#include -//#include - -IMPLEMENT_SINGLETON(InstallerMainThread) - -using namespace WrtDB; -//using namespace DPL::Popup; - -InstallerMainThread::InstallerMainThread() : m_attached(false) { -} - -InstallerMainThread::~InstallerMainThread() { - Assert(!m_attached); -} - -void InstallerMainThread::AttachDatabases() -{ - Assert(!m_attached); - // Attach databases - ValidationCore::AttachToThreadRW(); -// ace_return_t ret = ace_install_initialize(); -// Assert(ACE_OK == ret); // to be changed to exception in the future - WrtDB::WrtDatabase::attachToThreadRW(); - m_attached = true; -} - -void InstallerMainThread::DetachDatabases() -{ - Assert(m_attached); - m_attached = false; - // Detach databases - ValidationCore::DetachFromThread(); -// ace_return_t ret = ace_install_shutdown(); -// Assert(ACE_OK == ret); // to be changed to exception in the future - WrtDB::WrtDatabase::detachFromThread(); -} - -void InstallerMainThread::TouchArchitecture() -{ - // Touch controller - Logic::InstallerControllerSingleton::Instance().Touch(); -} - -void InstallerMainThread::TouchArchitectureOnlyInstaller() -{ - // Touch controller - Logic::InstallerControllerSingleton::Instance().Touch(); -} diff --git a/src/plugins-installer/wrt-installer/installer_main_thread.h b/src/plugins-installer/wrt-installer/installer_main_thread.h deleted file mode 100755 index 67c1937..0000000 --- a/src/plugins-installer/wrt-installer/installer_main_thread.h +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved - * - * 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 installer_main_thread.h - * @author Krzysztof Jackiewicz (k.jackiewicz@samsung.com) - * @version 1.0 - */ - -#ifndef INSTALLER_MAINTHREAD_H_ -#define INSTALLER_MAINTHREAD_H_ - -#include - -class InstallerMainThread { - public: - void AttachDatabases(); - void DetachDatabases(); - void TouchArchitecture(); - void TouchArchitectureOnlyInstaller(); - - private: - friend class DPL::Singleton; - - InstallerMainThread(); - virtual ~InstallerMainThread(); - - bool m_attached; -}; - -typedef DPL::Singleton InstallerMainThreadSingleton; - -#endif /* INSTALLER_MAINTHREAD_H_ */ diff --git a/src/plugins-installer/wrt-installer/language_subtag_rst_tree.cpp b/src/plugins-installer/wrt-installer/language_subtag_rst_tree.cpp deleted file mode 100644 index 119d5c6..0000000 --- a/src/plugins-installer/wrt-installer/language_subtag_rst_tree.cpp +++ /dev/null @@ -1,170 +0,0 @@ -/* - * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved - * - * 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 language_subtag_rst_tree.cpp - * @author Lukasz Wrzosek (l.wrzosek@samsung.com) - * @version 1.0 - */ -#include -#include -#include -#include -#include -#include -#include -#include -#include -IMPLEMENT_SINGLETON(LanguageSubtagRstTree) - -bool LanguageSubtagRstTree::ValidateLanguageTag(const std::string &tag_input) -{ - std::string tag = tag_input; - std::transform(tag.begin(), tag.end(), tag.begin(), &tolower); - - std::vector parts; - DPL::Tokenize(DPL::FromUTF8String(tag), - '-', - std::back_inserter(parts), - false); - std::vector::iterator token = parts.begin(); - if (token == parts.end()) { - return false; - } - if (WrtDB::GlobalDAOReadOnly::IsValidSubTag(*token, RECORD_TYPE_LANGUAGE)) { - ++token; - } else { - return false; - } - - if (token == parts.end()) { - return true; - } - if (WrtDB::GlobalDAOReadOnly::IsValidSubTag(*token, RECORD_TYPE_EXTLANG)) { - ++token; - } - - if (token == parts.end()) { - return true; - } - if (WrtDB::GlobalDAOReadOnly::IsValidSubTag(*token, RECORD_TYPE_SCRIPT)) { - ++token; - } - - if (token == parts.end()) { - return true; - } - if (WrtDB::GlobalDAOReadOnly::IsValidSubTag(*token, RECORD_TYPE_REGION)) { - ++token; - } - - if (token == parts.end()) { - return true; - } - while (token != parts.end()) { - if (WrtDB::GlobalDAOReadOnly::IsValidSubTag( - *token, RECORD_TYPE_VARIANT)) - { - ++token; - } else { - break; - } - } - - //'u' - unicode extension - only one BCP47 extension is registered. - //TODO: unicode extension should be also validated (l.wrzosek) - if (token == parts.end()) { - return true; - } - if (*token == L"u") { - ++token; - bool one_or_more = false; - while (token != parts.end() && - token->size() > 1 && - token->size() <= 8) { - one_or_more = true; - ++token; - } - if (!one_or_more) { - return false; - } - } - - //'x' - privateuse - if (token == parts.end()) { - return true; - } - if (*token == L"x") { - ++token; - bool one_or_more = false; - while (token != parts.end() && - !token->empty() && - token->size() <= 8) { - one_or_more = true; - ++token; - } - if (!one_or_more) { - return false; - } - } - - if (token == parts.end()) { - return true; - } - - //Try private use now: - token = parts.begin(); - if (*token == L"x") { - ++token; - bool one_or_more = false; - while (token != parts.end() && - !token->empty() && - token->size() <= 8) { - one_or_more = true; - ++token; - } - return one_or_more; - } - - //grandfathered is always rejected - return false; -} - -#define TEST_LANG(str, cond) \ - if (LanguageSubtagRstTreeSingleton::Instance().\ - ValidateLanguageTag(str) == cond) {\ - LogDebug("Good validate status for lang: " << str);\ - } else {\ - LogError("Wrong validate status for lang: " << str\ - << ", should be " << cond);\ - } - -void LanguageSubtagRstTree::Initialize() -{ - /* Temporarily added unit test. Commented out due to performance drop. - TEST_LANG("zh", true); - TEST_LANG("esx-al", true); - TEST_LANG("zh-Hant", true); - TEST_LANG("zh-Hant-CN", true); - TEST_LANG("zh-Hant-CN-x-private1-private2", true); - TEST_LANG("plxxx", false); - TEST_LANG("pl-x-private111", false); - TEST_LANG("x-private1", false); //do not support pure private ones - TEST_LANG("x-private22", false); - TEST_LANG("i-private22", false); //do not support i-* - */ -} - -#undef TEST_LANG diff --git a/src/plugins-installer/wrt-installer/language_subtag_rst_tree.h b/src/plugins-installer/wrt-installer/language_subtag_rst_tree.h deleted file mode 100644 index b057059..0000000 --- a/src/plugins-installer/wrt-installer/language_subtag_rst_tree.h +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved - * - * 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 language_subtag_rst_tree.h - * @author Lukasz Wrzosek (l.wrzosek@samsung.com) - * @version 1.0 - */ -#ifndef LANGUAGE_SUBTAG_RST_TREE_H -#define LANGUAGE_SUBTAG_RST_TREE_H - -#include -#include -#include -class LanguageSubtagRstTree : DPL::Noncopyable -{ - public: - void Initialize(); - bool ValidateLanguageTag(const std::string &tag); -}; - -typedef DPL::Singleton LanguageSubtagRstTreeSingleton; - -enum iana_record_types_e -{ - RECORD_TYPE_LANGUAGE, - RECORD_TYPE_SCRIPT, - RECORD_TYPE_REGION, - RECORD_TYPE_VARIANT, - RECORD_TYPE_GRANDFATHERED, - RECORD_TYPE_REDUNDANT, - RECORD_TYPE_EXTLANG -}; - -#endif //LANGUAGE_SUBTAG_RST_TREE_H diff --git a/src/plugins-installer/wrt-installer/option_parser.cpp b/src/plugins-installer/wrt-installer/option_parser.cpp deleted file mode 100644 index 334fbb4..0000000 --- a/src/plugins-installer/wrt-installer/option_parser.cpp +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved - * - * 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 option_parser.cpp - * @author Zbigniew Kostrzewa (z.kostrzewa@samsung.com) - * @brief Implementation file for OptionParser. - */ - -#include -#include -#include -#include "option_parser.h" - -DPL::OptionalString OptionParser::QueryOption(int argc, - char* argv[], - const std::string& name) -{ - DPL::OptionalString result; - - std::vector args(argv, (argv + argc)); - - auto it = std::find_if(args.begin(), - args.end(), - [&name](const std::string& option){ - return (option == name); - }); - - if (it != args.end()) - { - std::string value; - while ((++it != args.end()) && !IsOption(*it)) - { - value += *it + " "; - } - result = DPL::FromUTF8String(value); - } - - return result; -} - -bool OptionParser::IsOption(const std::string& name) -{ - return (name.find('-') == 0); -} diff --git a/src/plugins-installer/wrt-installer/option_parser.h b/src/plugins-installer/wrt-installer/option_parser.h deleted file mode 100644 index 599bc59..0000000 --- a/src/plugins-installer/wrt-installer/option_parser.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved - * - * 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 option_parser.h - * @author Zbigniew Kostrzewa (z.kostrzewa@samsung.com) - * @brief Header file for OptionParser. - */ - -#ifndef WRT_INSTALLER_SRC_WRT_INSTALLER_OPTION_PARSER_H_ -#define WRT_INSTALLER_SRC_WRT_INSTALLER_OPTION_PARSER_H_ - -#include -#include - -class OptionParser -{ -public: - static DPL::OptionalString QueryOption(int argc, - char* argv[], - const std::string& name); - -private: - static bool IsOption(const std::string& name); -}; - -#endif diff --git a/src/plugins-installer/wrt-installer/plugin_utils.cpp b/src/plugins-installer/wrt-installer/plugin_utils.cpp deleted file mode 100644 index 1cf1120..0000000 --- a/src/plugins-installer/wrt-installer/plugin_utils.cpp +++ /dev/null @@ -1,156 +0,0 @@ -/* - * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved - * - * 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 plugin-utils.cpp - * @author - * @version 1.0 - * @brief Header file for plugin util - */ - -#include "plugin_utils.h" -#include -#include -#include -#include -#include -#include - -using namespace WrtDB; - -namespace PluginUtils { -const char PLUGIN_INSTALL_SEMAPHORE[] = "/.wrt_plugin_install_lock"; - -static DPL::Semaphore semaphore(PLUGIN_INSTALL_SEMAPHORE); - -bool lockPluginInstallation() -{ - Try { - semaphore.Lock(); - return true; - } - Catch(DPL::Semaphore::Exception::Base){ - return false; - } -} - -bool unlockPluginInstallation() -{ - Try { - semaphore.Unlock(); - return true; - } - Catch(DPL::Semaphore::Exception::Base){ - return false; - } -} - -bool checkPluginInstallationRequired() -{ - std::string installRequest = - std::string(GlobalConfig::GetPluginInstallInitializerName()); - - FileState::Type installationRequest = - checkFile(installRequest); - - switch (installationRequest) { - case FileState::FILE_EXISTS: - return true; - case FileState::FILE_NOT_EXISTS: - return false; - default: - LogWarning("Opening installation request file failed"); - return false; - } -} - -bool removeInstallationRequiredFlag() -{ - std::string installRequest = - std::string(GlobalConfig::GetPluginInstallInitializerName()); - - return removeFile(installRequest); -} - -//checks if file exists and is regular file -FileState::Type checkFile(const std::string& filename) -{ - struct stat tmp; - - if (-1 == stat(filename.c_str(), &tmp)) { - if (ENOENT == errno) { - return FileState::FILE_NOT_EXISTS; - } - return FileState::FILE_READ_DATA_ERROR; - } else if (!S_ISREG(tmp.st_mode)) { - return FileState::FILE_EXISTS_NOT_REGULAR; - } - return FileState::FILE_EXISTS; -} - -bool removeFile(const std::string& filename) -{ - if (0 != unlink(filename.c_str())) { - return false; - } - - return true; -} - -PluginPathListPtr getPluginPaths() -{ - PluginPathListPtr pluginsPaths; - std::string PLUGIN_PATH = std::string(GlobalConfig::GetDevicePluginPath()); - LogInfo("Plugin DIRECTORY IS" << PLUGIN_PATH); - - DIR *dir; - dir = opendir(PLUGIN_PATH.c_str()); - if (dir) { - struct dirent* libdir; - - errno = 0; - - pluginsPaths.reset(new PluginPathList()); - while ((libdir = readdir(dir)) != 0) { - if (strcmp(libdir->d_name, ".") == 0 || - strcmp(libdir->d_name, "..") == 0) { - continue; - } - - std::string path = PLUGIN_PATH; - path += "/"; - path += libdir->d_name; - - struct stat tmp; - - if (stat(path.c_str(), &tmp) == -1) { - LogError("Failed to open file" << path); - continue; - } - - if (!S_ISDIR(tmp.st_mode)) { - LogError("Not a directory" << path); - continue; - } - - pluginsPaths->push_back(path); - } - if (-1 == TEMP_FAILURE_RETRY(closedir(dir))) { - LogError("Failed to close dir: " << dir); - } - } - return pluginsPaths; -} -} //namespace PluginUtils diff --git a/src/plugins-installer/wrt-installer/wrt_installer.cpp b/src/plugins-installer/wrt-installer/wrt_installer.cpp deleted file mode 100644 index 11f5467..0000000 --- a/src/plugins-installer/wrt-installer/wrt_installer.cpp +++ /dev/null @@ -1,854 +0,0 @@ -/* - * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved - * - * 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 wrt_installer.cpp - * @version 1.0 - * @brief Implementation file for installer - */ - -#include "wrt_installer.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "option_parser.h" -#include -#include -#include -//#include - -#define NOFILE_CNT_FOR_INSTALLER 9999 - -using namespace WrtDB; - -namespace { // anonymous -const char AUL_ARG_KEY[] = "widget_arg"; -const char * const PKGMGR_INSTALL_MSG = "Install widget"; -const char * const PKGMGR_UNINSTALL_MSG = "Uninstall widget"; - -const double BASE_LAYOUT_W = 720.0f; -const double BASE_LAYOUT_H = 1280.0f; - -const char * const CONFIG_XML = "config.xml"; - -struct PluginInstallerData -{ - void* wrtInstaller; - std::string pluginPath; -}; -} // namespace anonymous - -WrtInstaller::WrtInstaller(int argc, char **argv) : - Application(argc, argv, "backend", false), - DPL::TaskDecl(this), - m_packagePath(), - m_handle(-1), - m_initialized(false), - m_numPluginsToInstall(0), - m_totalPlugins(0), - m_returnStatus(-1), -// m_installByPkgmgr(false), - m_quiet(true), -// m_popup(NULL), - m_startupPluginInstallation(false) -{ - Touch(); - LogDebug("App Created"); -} - -WrtInstaller::~WrtInstaller() -{ - LogDebug("App Finished"); -} - -void WrtInstaller::OnStop() -{ - LogInfo("Stopping Dummy Client"); -} - -void WrtInstaller::OnCreate() -{ - LogInfo("Creating DummyClient"); - - AddStep(&WrtInstaller::initStep); - - std::string arg = m_argv[0]; - - if (arg.empty()) { - return showHelpAndQuit(); - } - - installNewPlugins(); - - if (arg.find("wrt-installer") != std::string::npos) - { - if (m_argc <= 1) { - return showHelpAndQuit(); - } - - arg = m_argv[1]; - if (arg == "-h" || arg == "--help") { - if (m_argc != 2) { - return showHelpAndQuit(); - } - - // Just show help - return showHelpAndQuit(); - } else if (arg == "-p" || arg == "--install-plugins") { - if (m_argc != 2) { - return showHelpAndQuit(); - } - if (!m_startupPluginInstallation) { - AddStep(&WrtInstaller::installPluginsStep); - } else { - LogInfo("Plugin installation alredy started"); - } - } - else - { - LogError("Unknown option"); - return showHelpAndQuit(); - } - } - - AddStep(&WrtInstaller::shutdownStep); - DPL::Event::ControllerEventHandler< - WRTInstallerNS::NextStepEvent>::PostEvent( - WRTInstallerNS::NextStepEvent()); -} - -//void WrtInstaller::OnReset(bundle *b) -//{ -// const char * bundledVal = bundle_get_val(b, AUL_ARG_KEY); -// if (bundledVal != NULL) { -// m_bundleValue = bundledVal; -// LogInfo("Bundled value for (" << AUL_ARG_KEY << ") key received: " << -// m_bundleValue); -// } -//} - -int WrtInstaller::getReturnStatus() const -{ - if (!m_returnStatus) { - return RE_SUCCESS; - } else { - return RE_FAIL; - } -} - -void WrtInstaller::OnTerminate() -{ - LogDebug("Wrt Shutdown now"); - PluginUtils::unlockPluginInstallation(); - if (m_initialized) { - wrt_installer_shutdown(); - } -// delete m_popup; -} - -void WrtInstaller::showHelpAndQuit() -{ - printf("Usage: wrt-installer [OPTION]... [WIDGET: ID/NAME/GUID/PATH]...\n" - "Operate with WebRuntime daemon: install, uninstall" - " and launch widgets.\n" - "Query list of installed widgets and setup up debugging support.\n" - "\n" - "Exactly one option must be selected.\n" - "Mandatory arguments to long options are mandatory for short " - "options too.\n" - " -h, --help show this help\n" - " -p, --install-plugins install plugins\n" - "\n"); - - Quit(); -} - -void WrtInstaller::OnEventReceived(const WRTInstallerNS::QuitEvent& /*event*/) -{ - LogDebug("Quiting"); - - if (m_initialized) { - LogDebug("Wrt Shutdown now"); - SwitchToStep(&WrtInstaller::shutdownStep); - DPL::Event::ControllerEventHandler::PostEvent( - WRTInstallerNS::NextStepEvent()); - } else { - LogDebug("Quiting application"); - return Quit(); - } -} - -void WrtInstaller::OnEventReceived( - const WRTInstallerNS::NextStepEvent& /*event*/) -{ - LogDebug("Executing next step"); - NextStep(); -} - -void WrtInstaller::OnEventReceived( - const WRTInstallerNS::InstallPluginEvent& /*event*/) -{ - PluginInstallerData* privateData = new PluginInstallerData; - privateData->wrtInstaller = this; - - if (m_pluginsPaths) { - privateData->pluginPath = m_pluginsPaths->front(); - m_pluginsPaths->pop_front(); - - wrt_install_plugin(privateData->pluginPath.c_str(), - static_cast(privateData), - &staticWrtPluginInstallationCallback, - &staticWrtPluginInstallProgressCb); - } else { - delete privateData; - } -} - -void WrtInstaller::initStep() -{ - wrt_installer_init(this, staticWrtInitCallback); -} - -//void WrtInstaller::installStep() -//{ -// LogDebug("Installing widget ..."); -// DPL::ScopedFree packagePath(canonicalize_file_name( -// m_packagePath.c_str())); -// -// wrt_install_widget(packagePath ? packagePath.Get() : m_packagePath.c_str(), -// this, &staticWrtStatusCallback, -// (!m_quiet || m_installByPkgmgr) -// ? &staticWrtInstallProgressCallback : NULL, -// m_installPolicy, -// m_quiet); -//} - -void WrtInstaller::installPluginsStep() -{ - LogDebug("Installing plugins ..."); - - if (m_startupPluginInstallation) { - LogInfo("Plugin installation started because new plugin package found"); - } else if (!PluginUtils::lockPluginInstallation()) { - LogError("Failed to open plugin installation lock file" - " Plugins are currently installed by other process"); - staticWrtPluginInstallationCallback(WRT_PLUGIN_INSTALLER_ERROR_LOCK, - this); - return; - } - - PluginUtils::PluginPathListPtr pluginPaths = PluginUtils::getPluginPaths(); - if (!pluginPaths) { - return; - } - - //set nb of plugins to install - //this value indicate how many callbacks are expected - m_numPluginsToInstall = pluginPaths->size(); - LogInfo("Plugins to install: " << m_numPluginsToInstall); - m_pluginsPaths = pluginPaths; - - m_totalPlugins = m_numPluginsToInstall; - DPL::Event::ControllerEventHandler - ::PostEvent(WRTInstallerNS::InstallPluginEvent()); -} - -//void WrtInstaller::uninstallStep() -//{ -// LogDebug("Uninstalling widget ..."); -// wrt_uninstall_widget(m_handle, this, &staticWrtStatusCallback, -// (!m_quiet || m_installByPkgmgr) -// ? &staticWrtUninstallProgressCallback : NULL); -//} - -//void WrtInstaller::uninstallPkgNameStep() -//{ -// LogDebug("Uninstalling widget ..."); -// WrtErrStatus status = wrt_get_widget_by_pkgname(m_name, &m_handle); -// if (status == WRT_SUCCESS) { -// LogDebug("Get Widget Handle by package name : " << m_handle); -// wrt_uninstall_widget(m_handle, this, &staticWrtStatusCallback, -// (!m_quiet || m_installByPkgmgr) -// ? &staticWrtUninstallProgressCallback : NULL); -// } else { -// printf("failed: can not uninstall widget\n"); -// LogError("Fail to uninstalling widget... "); -// m_returnStatus = -1; -// DPL::Event::ControllerEventHandler::PostEvent( -// WRTInstallerNS::QuitEvent()); -// } -//} - -//void WrtInstaller::uninstallGuidStep() -//{ -// LogDebug("Uninstalling widget ..."); -// WrtErrStatus status = wrt_get_widget_by_guid(m_name, &m_handle); -// if (status == WRT_SUCCESS) { -// LogDebug("Get Widget Handle by guid : " << m_handle); -// wrt_uninstall_widget(m_handle, this, &staticWrtStatusCallback, -// !m_quiet ? &staticWrtUninstallProgressCallback : NULL); -// } else { -// printf("failed: can not uninstall widget\n"); -// LogError("Fail to uninstalling widget... "); -// m_returnStatus = -1; -// DPL::Event::ControllerEventHandler::PostEvent( -// WRTInstallerNS::QuitEvent()); -// } -//} -// -//void WrtInstaller::unistallWgtFileStep() -//{ -// LogDebug("Uninstalling widget ..."); -// -// Try { -// // Parse config -// ParserRunner parser; -// ConfigParserData configInfo; -// -// // Open zip file -// DPL::ScopedPtr zipFile( -// new DPL::ZipInput(m_packagePath)); -// -// // Open config.xml file -// DPL::ScopedPtr configFile( -// zipFile->OpenFile(CONFIG_XML)); -// -// // Extract config -// DPL::BinaryQueue buffer; -// DPL::AbstractWaitableInputAdapter inputAdapter(configFile.Get()); -// DPL::AbstractWaitableOutputAdapter outputAdapter(&buffer); -// DPL::Copy(&inputAdapter, &outputAdapter); -// parser.Parse(&buffer, -// ElementParserPtr( -// new RootParser(configInfo, -// DPL::FromUTF32String( -// L"widget")))); -// -// DPL::OptionalString widgetGUID = configInfo.widget_id; -// -// std::string guid = DPL::ToUTF8String(*widgetGUID); -// -// WrtErrStatus status = wrt_get_widget_by_guid(guid, &m_handle); -// if (status == WRT_SUCCESS) { -// LogDebug("Get Widget Handle by guid : " << m_handle); -// wrt_uninstall_widget(m_handle, this, &staticWrtStatusCallback, -// !m_quiet ? &staticWrtUninstallProgressCallback : NULL); -// } else { -// LogError("Fail to uninstalling widget... "); -// m_returnStatus = -1; -// DPL::Event::ControllerEventHandler::PostEvent( -// WRTInstallerNS::QuitEvent()); -// } -// } -// Catch(DPL::ZipInput::Exception::OpenFailed) -// { -// LogError("Failed to open widget package"); -// printf("failed: widget package does not exist\n"); -// m_returnStatus = -1; -// DPL::Event::ControllerEventHandler::PostEvent( -// WRTInstallerNS::QuitEvent()); -// } -// Catch(DPL::ZipInput::Exception::OpenFileFailed) -// { -// printf("failed: widget config file does not exist\n"); -// LogError("Failed to open config.xml file"); -// m_returnStatus = -1; -// DPL::Event::ControllerEventHandler::PostEvent( -// WRTInstallerNS::QuitEvent()); -// } -// Catch(ElementParser::Exception::ParseError) -// { -// printf("failed: can not parse config file\n"); -// LogError("Failed to parse config.xml file"); -// m_returnStatus = -1; -// DPL::Event::ControllerEventHandler::PostEvent( -// WRTInstallerNS::QuitEvent()); -// } -//} - -void WrtInstaller::shutdownStep() -{ - LogDebug("Closing Wrt connection ..."); - if (m_initialized) { - wrt_installer_shutdown(); - m_initialized = false; - DPL::Event::ControllerEventHandler::PostEvent( - WRTInstallerNS::QuitEvent()); - } -} - -void WrtInstaller::staticWrtInitCallback(WrtErrStatus status, - void* userdata) -{ - WrtInstaller *This = static_cast(userdata); - Assert(This); - - if (status == WRT_SUCCESS) { - LogDebug("Init succesfull"); - This->m_initialized = true; - This->m_returnStatus = 0; - -// if (!This->m_quiet) { -// This->m_popup = new InstallerPopup; -// This->m_popup->init(); -// } - - This->DPL::Event::ControllerEventHandler - ::PostEvent(WRTInstallerNS::NextStepEvent()); - } else { - LogError("Init unsuccesfull"); - This->m_returnStatus = -1; - This->DPL::Event::ControllerEventHandler::PostEvent( - WRTInstallerNS::QuitEvent()); - } -} -// -//void WrtInstaller::staticWrtStatusCallback(int handle, -// WrtErrStatus status, -// void* userdata) -//{ -// WrtInstaller *This = static_cast(userdata); -// Assert(This); -// -// Step current = This->GetCurrentStep(); -// DPL::String resultMsg; -// std::string printMsg; -// -// if (current == &WrtInstaller::installStep) -// { -// resultMsg = DPL::FromUTF8String(PKGMGR_INSTALL_MSG); -// printMsg = "installed"; -// } else if (current == &WrtInstaller::uninstallStep || -// current == &WrtInstaller::uninstallPkgNameStep || -// current == &WrtInstaller::uninstallGuidStep || -// current == &WrtInstaller::unistallWgtFileStep) -// { -// resultMsg = DPL::FromUTF8String(PKGMGR_UNINSTALL_MSG); -// printMsg = "uninstalled"; -// } -// -// if (WRT_SUCCESS != status) { -// // Failure -// LogDebug("Step failed"); -// This->m_returnStatus = -1; -// -// if (!This->m_quiet) { -// resultMsg += L" : " + DPL::FromUTF8String(PKGMGR_END_FAILURE); -// This->m_popup->showPopup(This, resultMsg, failResultCallback); -// } else { -// This->DPL::Event::ControllerEventHandler -// ::PostEvent(WRTInstallerNS::QuitEvent()); -// } -// -// switch (status) { -// case WRT_INSTALLER_ERROR_INVALID_WIDGET_PACKAGE: -// This->m_returnStatus = 1; //this status is specific -// printf("failed: invalid widget package\n"); -// break; -// -// case WRT_INSTALLER_ERROR_WIDGET_DOES_NOT_EXIST: -// printf("failed: widget package does not exist\n"); -// break; -// -// case WRT_INSTALLER_ERROR_FACTORY_WIDGET: -// printf("failed: factory widget\n"); -// break; -// -// case WRT_INSTALLER_ERROR_ALREADY_UNINSTALLING: -// printf("failed: already uninstalling\n"); -// break; -// -// case WRT_INSTALLER_ERROR_OUT_OUT_DISK_SPACE: -// printf("failed: out of disk space\n"); -// break; -// -// case WRT_INSTALLER_ERROR_INVALID_CERTIFICATE: -// printf("failed: invalid certificate\n"); -// break; -// -// case WRT_INSTALLER_ERROR_ALREADY_INSTALLED: -// printf("failed: already installed\n"); -// break; -// -// case WRT_INSTALLER_ERROR_INTERNAL: -// printf("failed: internal error\n"); -// break; -// -// case WRT_INSTALLER_ERROR_NOT_ALLOWED: -// printf("failed: installation or update not allowed; invalid" -// " mode\n"); -// break; -// -// case WRT_INSTALLER_ERROR_DEFERRED: -// printf("deferred: widget update will continue after the widget" -// " has been stopped\n"); -// break; -// -// case WRT_INSTALLER_ERROR_DATABASE_FAILURE: -// printf("failed: database failure\n"); -// break; -// -// case WRT_INSTALLER_ERROR_OSPSVC: -// printf("failed: during installation or uninstallation osp service\n"); -// break; -// -// case WRT_INSTALLER_ERROR_UNKNOWN: -// printf("failed: unknown error\n"); -// break; -// -// default: -// break; -// } -// } else { -// -// printf("%s : %d\n", printMsg.c_str(), handle); -// LogDebug("Status succesfull"); -// This->m_handle = handle; -// This->m_returnStatus = 0; -// resultMsg += L" : " + DPL::FromUTF8String(PKGMGR_END_SUCCESS); -// -// if (!This->m_quiet) { -// This->m_popup->showPopup(This, resultMsg, showResultCallback); -// } else { -// This->DPL::Event::ControllerEventHandler -// ::PostEvent(WRTInstallerNS::NextStepEvent()); -// } -// } -//} - -void WrtInstaller::staticWrtPluginInstallationCallback(WrtErrStatus status, - void* userdata) -{ - Assert(userdata); - - PluginInstallerData* data = static_cast(userdata); - - WrtInstaller *This = static_cast(data->wrtInstaller); - - std::string path = std::string(data->pluginPath); - delete data; - - This->m_numPluginsToInstall--; - LogDebug("Plugins to install: " << This->m_numPluginsToInstall); - - if (This->m_numPluginsToInstall < 1) { - LogDebug("All plugins installation completed"); - - //remove installation request - if (!PluginUtils::removeInstallationRequiredFlag()) { - LogInfo("Failed to remove file initializing plugin installation"); - } - - //remove lock file - if (!PluginUtils::unlockPluginInstallation()) { - LogInfo("Failed to remove installation lock"); - } - -// if (!This->m_quiet) { -// This->m_popup->init(); -// elm_progressbar_value_set(This->m_popup->m_progressbar, 100.0); -// evas_object_show(This->m_popup->m_popup); -// } - - This->DPL::Event::ControllerEventHandler - ::PostEvent(WRTInstallerNS::NextStepEvent()); - } else { -// if (!This->m_quiet) { -// This->m_popup->init(); -// float percent = (This->m_totalPlugins - This->m_numPluginsToInstall)/(float)This->m_totalPlugins; -// elm_progressbar_value_set(This->m_popup->m_progressbar, percent); -// evas_object_show(This->m_popup->m_popup); -// } - - This->DPL::Event::ControllerEventHandler::PostEvent( - WRTInstallerNS::InstallPluginEvent()); - } - - if (WRT_SUCCESS == status) { - This->m_returnStatus = 0; - LogDebug("One plugin Installation succesfull: " << path); - return; - } - - // Failure - LogWarning("One of the plugins installation failed!: " << path); - - if (WRT_PLUGIN_INSTALLER_ERROR_WAITING == status) { - LogInfo("Plugin installation is waiting for dependencies"); - } - - switch (status) { - case WRT_PLUGIN_INSTALLER_ERROR_WRONG_PATH: - LogError("failed: wrong path to plugin directory\n"); - break; - - case WRT_PLUGIN_INSTALLER_ERROR_METAFILE: - LogError("failed: plugin metafile error\n"); - break; - - case WRT_PLUGIN_INSTALLER_ERROR_ALREADY_INSTALLED: - LogError("failed: plugin already installed\n"); - break; - - case WRT_PLUGIN_INSTALLER_ERROR_LIBRARY_ERROR: - LogError("failed: plugin library: missing symbols or structures\n"); - break; - - case WRT_PLUGIN_INSTALLER_ERROR_UNKNOWN: - LogError("failed: unknown error\n"); - break; - - default: - break; - } -} - -void WrtInstaller::staticWrtPluginInstallProgressCb(float percent, - const char* description, - void* userdata) -{ - PluginInstallerData* data = static_cast(userdata); - - std::string path = std::string(data->pluginPath); - - LogInfo("Plugin Installation: " << path << - " progress: " << percent << - "description " << description); -} - -//void WrtInstaller::staticWrtInstallProgressCallback(float percent, -// const char* description, void* userdata) -//{ -// WrtInstaller *This = static_cast(userdata); -// std::stringstream percentStr; -// LogInfo(" progress: " << percent << -// " description: " << description); -// -// if (!This->m_quiet) { -// This->m_popup->init(); -// elm_progressbar_value_set(This->m_popup->m_progressbar, percent/100.0); -// evas_object_show(This->m_popup->m_popup); -// } -//} -//void WrtInstaller::staticWrtUninstallProgressCallback(float percent, -// const char* description, void* userdata) -//{ -// WrtInstaller *This = static_cast(userdata); -// std::stringstream percentStr; -// LogInfo(" progress: " << percent << -// " description: " << description); -// -// if (!This->m_quiet) { -// This->m_popup->init(); -// elm_progressbar_value_set(This->m_popup->m_progressbar, percent/100.0); -// evas_object_show(This->m_popup->m_popup); -// } -//} - -#if 0 -WrtInstaller::InstallerPopup::InstallerPopup() : - m_win(NULL), - m_popup(NULL), - m_progressbar(NULL) -{ -} - -WrtInstaller::InstallerPopup::~InstallerPopup() -{ - LogDebug("App Finished"); -} - -void WrtInstaller::InstallerPopup::init() -{ - LogDebug("Window Init"); - - if (m_win == NULL) { - // create window - m_win = createWin("wrt-installer"); - - // create popup - m_popup = elm_popup_add(m_win); - - // create progressbar - m_progressbar = elm_progressbar_add(m_popup); - elm_object_style_set(m_progressbar, "list_progress"); - elm_progressbar_horizontal_set(m_progressbar, EINA_TRUE); - evas_object_size_hint_align_set(m_progressbar, EVAS_HINT_FILL, - EVAS_HINT_FILL); - evas_object_size_hint_weight_set(m_progressbar, EVAS_HINT_EXPAND, - EVAS_HINT_EXPAND); - elm_object_content_set(m_popup, m_progressbar); - elm_progressbar_value_set(m_progressbar, 0.0); - evas_object_show(m_progressbar); - - evas_object_show(m_popup); - evas_object_show(m_win); - } -} - -Evas_Object* WrtInstaller::InstallerPopup::createWin(const char *name) -{ - Evas_Object *win; - win = elm_win_add(NULL, name, ELM_WIN_DIALOG_BASIC); - - int w, h; - if(!win) - return NULL; - - elm_win_alpha_set(win, EINA_TRUE); - elm_win_title_set(win, name); - elm_win_borderless_set(win, EINA_TRUE); - elm_win_raise(win); - - ecore_x_window_size_get(ecore_x_window_root_first_get(), &w, &h); - evas_object_resize(win, w, h); - return win; -} - -void WrtInstaller::InstallerPopup::showPopup(void* userdata, - const DPL::String& pkgMsg, - ShowResultCallback callback) -{ - Evas_Object *btn; - - - LogDebug("Result Popup Created"); - evas_object_del(m_popup); - m_popup = NULL; - - m_popup = elm_popup_add(m_win); - if (!m_popup) - return; - - btn = elm_button_add(m_popup); - if (!btn) { - evas_object_del(m_popup); - return; - } - elm_object_text_set(btn, "OK"); - evas_object_smart_callback_add(btn, "clicked", callback, userdata); - elm_object_part_content_set(m_popup, "button1", btn); - elm_object_part_text_set(m_popup, "title,text", "RESULT"); - elm_object_text_set(m_popup, DPL::ToUTF8String(pkgMsg).c_str()); - - evas_object_show(m_popup); - evas_object_show(m_win); - -} -#endif - -//void WrtInstaller::showResultCallback(void *data, Evas_Object* /*obj*/, -// void* /*event_info*/) -//{ -// WrtInstaller *This = static_cast(data); -// Assert(This); -// -// This->DPL::Event::ControllerEventHandler -// ::PostEvent(WRTInstallerNS::NextStepEvent()); -//} -// -//void WrtInstaller::failResultCallback(void *data, Evas_Object* /*obj*/, -// void* /*event_info*/) -//{ -// WrtInstaller *This = static_cast(data); -// Assert(This); -// -// This->DPL::Event::ControllerEventHandler -// ::PostEvent(WRTInstallerNS::QuitEvent()); -//} - -void WrtInstaller::installNewPlugins() -{ - LogDebug("Install new plugins"); - - if (!PluginUtils::lockPluginInstallation()) { - LogInfo("Lock NOT created"); - return; - } - - if (!PluginUtils::checkPluginInstallationRequired()) { - LogDebug("Plugin installation not required"); - PluginUtils::unlockPluginInstallation(); - return; - } - - m_startupPluginInstallation = true; - AddStep(&WrtInstaller::installPluginsStep); -} - -int main(int argc, char *argv[]) -{ - // Output on stdout will be flushed after every newline character, - // even if it is redirected to a pipe. This is useful for running - // from a script and parsing output. - // (Standard behavior of stdlib is to use full buffering when - // redirected to a pipe, which means even after an end of line - // the output may not be flushed). - setlinebuf(stdout); - - // Check and re-set the file open limitation - struct rlimit rlim; - if (getrlimit(RLIMIT_NOFILE, &rlim) != -1) { - LogDebug("RLIMIT_NOFILE sft(" << rlim.rlim_cur << ")" ); - LogDebug("RLIMIT_NOFILE hrd(" << rlim.rlim_max << ")" ); - - if (rlim.rlim_cur < NOFILE_CNT_FOR_INSTALLER) { - rlim.rlim_cur = NOFILE_CNT_FOR_INSTALLER; - rlim.rlim_max = NOFILE_CNT_FOR_INSTALLER; - if (setrlimit(RLIMIT_NOFILE, &rlim) == -1) { - LogError("setrlimit is fail!!"); - } - } - } else { - LogError("getrlimit is fail!!"); - } - - // set evas backend type for emulator - // popup isn't showed in the emulator, - // if backend isn't set to SW backend -// if (GlobalSettings::IsEmulator()) { -// if (setenv("ELM_ENGINE", "x11", 1)) { -// LogDebug("Enable backend"); -// } -// } - - WrtInstaller app(argc, argv); - int ret = app.Exec(); - LogDebug("App returned: " << ret); - ret = app.getReturnStatus(); - LogDebug("WrtInstaller returned: " << ret); - return ret; -} diff --git a/src/plugins-installer/wrt-installer/wrt_installer.h b/src/plugins-installer/wrt-installer/wrt_installer.h deleted file mode 100644 index f81981d..0000000 --- a/src/plugins-installer/wrt-installer/wrt_installer.h +++ /dev/null @@ -1,156 +0,0 @@ -/* - * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved - * - * 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 wrt_installer.h - * @version 1.0 - * @brief Implementation file for installer - */ -#ifndef WRT_CLIENT_H -#define WRT_CLIENT_H - -#include -#include -#include -#include -#include -#include -#include -#include -//#include -#include -#include "plugin_utils.h" -//#include - -namespace WRTInstallerNS { //anonymous -DECLARE_GENERIC_EVENT_0(QuitEvent) -DECLARE_GENERIC_EVENT_0(NextStepEvent) -DECLARE_GENERIC_EVENT_0(InstallPluginEvent) -} - -typedef void (*ShowResultCallback)(void *data, Evas_Object *obj, - void *event_info); - -enum ReturnValue -{ - RE_SUCCESS, - RE_FAIL -}; - -class WrtInstaller : - public DPL::Application, - private DPL::Event::Controller::Type>, - public DPL::TaskDecl -{ - public: - WrtInstaller(int argc, - char **argv); - virtual ~WrtInstaller(); - - - int getReturnStatus() const; - - class InstallerPopup - { - public: - InstallerPopup(); - virtual ~InstallerPopup(); - - void init(); - Evas_Object* createWin(const char* name); - void showPopup(void* userdata, const DPL::String& pkgMsg, - ShowResultCallback callback); - - Evas_Object* m_win; - Evas_Object* m_popup; - Evas_Object* m_progressbar; - }; - - protected: - virtual void OnStop(); - virtual void OnCreate(); -// virtual void OnReset(bundle *b); - virtual void OnTerminate(); - - private: - void showHelpAndQuit(); - - // Events - virtual void OnEventReceived(const WRTInstallerNS::QuitEvent &event); - virtual void OnEventReceived(const WRTInstallerNS::NextStepEvent& event); - virtual void OnEventReceived(const WRTInstallerNS::InstallPluginEvent& event); - - // Installation steps - void initStep(); -// void installStep(); - void installNewPlugins(); - void installPluginsStep(); -// void uninstallStep(); -// void uninstallPkgNameStep(); -// void uninstallGuidStep(); -// void unistallWgtFileStep(); - void shutdownStep(); - void registerCallbackStep(); -// void queryListStep(); - - - // Static callbacks - static void staticWrtInitCallback(WrtErrStatus status, - void* userdata); -// static void staticWrtStatusCallback(int handle, -// WrtErrStatus status, -// void* userdata); - static void staticWrtPluginInstallationCallback(WrtErrStatus status, - void* userdata); - static void staticWrtPluginInstallProgressCb(float percent, - const char* description, - void* userdata); -// static void staticWrtInstallProgressCallback(float percent, -// const char* description, -// void* userdata); -// -// static void staticWrtUninstallProgressCallback(float percent, -// const char* description, -// void* userdata); -// -// static void showResultCallback(void *data, Evas_Object *obj, -// void *event_info); -// static void failResultCallback(void *data, Evas_Object *obj, -// void *event_info); - - // Private data - wrt_widget_install_mode_e m_installPolicy; - std::string m_bundleValue; - std::string m_packagePath; - int m_handle; - std::string m_name; - bool m_initialized; - size_t m_numPluginsToInstall; - size_t m_totalPlugins; - int m_returnStatus; -// bool m_installByPkgmgr; - bool m_quiet; - InstallerPopup *m_popup; - bool m_startupPluginInstallation; - std::string m_webAppConfig; - std::string m_webAppIcon; - - typedef std::list PluginPathList; - PluginUtils::PluginPathListPtr m_pluginsPaths; -}; -#endif // WRT_CLIENT_H diff --git a/src/plugins-installer/wrt-installer/wrt_installer_api.cpp b/src/plugins-installer/wrt-installer/wrt_installer_api.cpp deleted file mode 100755 index 3043acd..0000000 --- a/src/plugins-installer/wrt-installer/wrt_installer_api.cpp +++ /dev/null @@ -1,606 +0,0 @@ -/* - * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved - * - * 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 wrt_installer_api.cpp - * @author Chung Jihoon (jihoon.chung@samsung.com) - * @version 1.0 - * @brief This file contains definitions of wrt installer api - */ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "plugin_utils.h" - -using namespace WrtDB; - -#undef TRUE -#undef FALSE -#define TRUE 0 -#define FALSE -1 - -#ifdef __cplusplus - -#define EXPORT_API __attribute__((visibility("default"))) -extern "C" -{ -#endif -// inline WidgetUpdateMode::Type translateWidgetUpdateMode( -// wrt_widget_update_mode_t updateMode) -// { -// WidgetUpdateMode::Type result = WidgetUpdateMode::Zero; -// -// if (updateMode & WRT_WIM_NOT_INSTALLED) { -// result = result | WidgetUpdateMode::NotInstalled; -// } -// -// if (updateMode & WRT_WIM_INCOMING_VERSION_NOT_STD) { -// result = result | WidgetUpdateMode::IncomingVersionNotStd; -// } -// -// if (updateMode & WRT_WIM_EXISTING_VERSION_NOT_STD) { -// result = result | WidgetUpdateMode::ExistingVersionNotStd; -// } -// -// if (updateMode & WRT_WIM_BOTH_VERSIONS_NOT_STD) { -// result = result | WidgetUpdateMode::BothVersionsNotStd; -// } -// -// if (updateMode & WRT_WIM_EXISTING_VERSION_OLDER) { -// result = result | WidgetUpdateMode::ExistingVersionOlder; -// } -// -// if (updateMode & WRT_WIM_EXISTING_VERSION_EQUAL) { -// result = result | WidgetUpdateMode::ExistingVersionEqual; -// } -// -// if (updateMode & WRT_WIM_EXISTING_VERSION_NEWER) { -// result = result | WidgetUpdateMode::ExistingVersionNewer; -// } -// -// return result; -// } -// -// void localizationSetting() -// { -// char* lang = vconf_get_str(VCONFKEY_LANGSET); -// if (!lang) { -// LogError("Cannot get locale settings from vconf"); -// } else { -// LogDebug("Language set to: " << lang); -// -// using namespace LocalizationUtils; -// -// LanguageTagsList list; -// list.push_back(DPL::FromUTF8String(lang)); -// SetSystemLanguageTags(list); -// -// LogDebug("LanguageChanged to " << lang); -// } -// } - - const char PLUGIN_INSTALL_SEMAPHORE[] = "/.wrt_plugin_install_lock"; - static int wrt_count_plugin; - - static std::string cutOffFileName(const std::string& path) - { - size_t found = path.find_last_of("/"); - if (found == std::string::npos) { - return path; - } else { - return path.substr(0, found); - } - } - - static bool checkPath(const std::string& path) - { - struct stat st; - if (0 == stat(path.c_str(), &st) && S_ISDIR(st.st_mode)) { - return true; - } - LogError("Cannot access directory [ " << path << " ]"); - return false; - } - - static bool checkPaths() - { - bool if_ok = true; - if_ok &= (checkPath(cutOffFileName( - GlobalConfig::GetWrtDatabaseFilePath()))); - if (!if_ok) { - LogError( - "Path <" << GlobalConfig::GetWrtDatabaseFilePath() << - "> does not exist."); - } - - if_ok &= (checkPath(GlobalConfig::GetDevicePluginPath())); - if (!if_ok) { - LogError( - "Path <" << GlobalConfig::GetDevicePluginPath() << - "> does not exist."); - } - - if_ok &= (checkPath(GlobalConfig::GetUserInstalledWidgetPath())); - if (!if_ok) { - LogError( - "Path <" << GlobalConfig::GetUserInstalledWidgetPath() << - "> does not exist."); - } - return if_ok; - } - - void plugin_install_status_cb(WrtErrStatus status, - void* userparam) - { - Assert(userparam); - - wrt_plugin_data *plugin_data = static_cast(userparam); - - if (--wrt_count_plugin < 1) { - LogDebug("All plugins installation completed"); - - LogDebug("Call SetAllinstallpluginsCallback"); - plugin_data->plugin_installed_cb(plugin_data->user_data); - } - - if (status == WRT_SUCCESS) { - LogInfo( - "plugin installation is successful: " << - plugin_data->plugin_path); - return; - } - - LogError("Fail to install plugin : " << plugin_data->plugin_path); - - switch (status) { - case WRT_PLUGIN_INSTALLER_ERROR_WRONG_PATH: - LogError("Failed : Plugin install path is wrong"); - break; - case WRT_PLUGIN_INSTALLER_ERROR_METAFILE: - LogError("Failed : Plugin Metafile Error"); - break; - case WRT_PLUGIN_INSTALLER_ERROR_ALREADY_INSTALLED: - LogError("Failed : This Plugin is already installed"); - break; - case WRT_PLUGIN_INSTALLER_ERROR_LIBRARY_ERROR: - LogError("Failed : Library Error. Missing symbol or structures"); - break; - case WRT_PLUGIN_INSTALLER_ERROR_WAITING: - LogError("Failed : Waiting for plugin dependencies"); - break; - case WRT_PLUGIN_INSTALLER_ERROR_LOCK: - LogError("Failed : Lock Error"); - break; - case WRT_PLUGIN_INSTALLER_ERROR_UNKNOWN: - LogError("Failed : Unkown Error"); - break; - default: - break; - } - } - - void plugin_install_progress_cb(float percent, - const char* description, - void* userdata) - { - char *plugin_path = static_cast(userdata); - - LogInfo("Install plugin : " << plugin_path << - ", Progress : " << percent << - ", Description : " << description); - } - - EXPORT_API int wrt_installer_init(void *userdata, - WrtInstallerInitCallback callback) - { - // Set DPL/LOG MID - DPL::Log::LogSystemSingleton::Instance().SetTag("WRT"); - - try - { - LogInfo("[WRT-API] INITIALIZING WRT INSTALLER..."); - LogInfo("[WRT-API] BUILD: " << __TIMESTAMP__); - - // Touch InstallerController Singleton - InstallerMainThreadSingleton::Instance().TouchArchitecture(); - - // Check paths - if (!checkPaths()) { - if (callback) { - callback(WRT_ERROR_NO_PATH, userdata); - } - return TRUE; - } - - // Initialize ValidationCore - this must be done before AttachDatabases - ValidationCore::VCoreInit( - std::string(GlobalConfig::GetFingerprintListFile()), - std::string(GlobalConfig::GetFingerprintListSchema()), - std::string(GlobalConfig::GetVCoreDatabaseFilePath())); - - InstallerMainThreadSingleton::Instance().AttachDatabases(); - - //checking for correct DB version -// if (!WrtDB::WrtDatabase::CheckTableExist(DB_CHECKSUM_STR)) { -// LogError("WRONG VERSION OF WRT DATABASE"); -// Assert(false && "WRONG VERSION OF WRT DATABASE"); -// return FALSE; -// } - LogWarning("Database check not implemented!"); - - LogInfo("Prepare libxml2 to work in multithreaded program."); - xmlInitParser(); - - // Initialize Language Subtag registry - LanguageSubtagRstTreeSingleton::Instance().Initialize(); -// localizationSetting(); - - // Installer init - CONTROLLER_POST_SYNC_EVENT( - Logic::InstallerController, - InstallerControllerEvents:: - InitializeEvent()); - - // Install deferred widget packages -// CONTROLLER_POST_EVENT( -// Logic::InstallerController, -// InstallerControllerEvents:: -// InstallDeferredWidgetPackagesEvent()); - - if (callback) { - LogInfo("[WRT-API] WRT INSTALLER INITIALIZATION CALLBACK"); - callback(WRT_SUCCESS, userdata); - } - } - catch (const DPL::Exception& ex) - { - LogError("Internal Error during Init:"); - DPL::Exception::DisplayKnownException(ex); - if (callback) { - callback(WRT_ERROR_INTERNAL, userdata); - } - return FALSE; - } - // OK - return TRUE; - } - - EXPORT_API void wrt_installer_shutdown() - { - try - { - LogInfo("[WRT-API] DEINITIALIZING WRT INSTALLER..."); - - // Installer termination - CONTROLLER_POST_SYNC_EVENT( - Logic::InstallerController, - InstallerControllerEvents:: - TerminateEvent()); - - InstallerMainThreadSingleton::Instance().DetachDatabases(); - - // This must be done after DetachDatabase - ValidationCore::VCoreDeinit(); - - // Global deinit check - LogInfo("Cleanup libxml2 global values."); - xmlCleanupParser(); - - } - catch (const DPL::Exception& ex) - { - LogError("Internal Error during Shutdown:"); - DPL::Exception::DisplayKnownException(ex); - } - } - -// EXPORT_API void wrt_install_widget(const char *path, -// void* userdata, -// WrtInstallerStatusCallback status_cb, -// WrtProgressCallback progress_cb, -// wrt_widget_update_mode_t update_mode, -// bool quiet) -// { -// UNHANDLED_EXCEPTION_HANDLER_BEGIN -// { -// LogInfo("[WRT-API] INSTALL WIDGET: " << path); -// // Post installation event -// CONTROLLER_POST_EVENT( -// Logic::InstallerController, -// InstallerControllerEvents::InstallWidgetEvent( -// path, WidgetInstallationStruct( -// InstallerCallbacksTranslate::installFinishedCallback, -// InstallerCallbacksTranslate::installProgressCallback, -// new InstallerCallbacksTranslate::StatusCallbackStruct( -// userdata, status_cb, progress_cb), -// translateWidgetUpdateMode(update_mode), -// quiet))); -// } -// UNHANDLED_EXCEPTION_HANDLER_END -// } -// -// EXPORT_API void wrt_uninstall_widget(int widget_handle, -// void* userdata, -// WrtInstallerStatusCallback status_cb, -// WrtProgressCallback progress_cb) -// { -// UNHANDLED_EXCEPTION_HANDLER_BEGIN -// { -// LogInfo("[WRT-API] UNINSTALL WIDGET: " << widget_handle); -// // Post uninstallation event -// CONTROLLER_POST_EVENT( -// Logic::InstallerController, -// InstallerControllerEvents::UninstallWidgetEvent( -// widget_handle, -// WidgetUninstallationStruct( -// InstallerCallbacksTranslate::uninstallFinishedCallback, -// InstallerCallbacksTranslate::installProgressCallback, -// new InstallerCallbacksTranslate::StatusCallbackStruct( -// userdata, status_cb, progress_cb)))); -// } -// UNHANDLED_EXCEPTION_HANDLER_END -// } - - EXPORT_API void wrt_install_plugin( - const char *pluginDir, - void *user_param, - WrtPluginInstallerStatusCallback status_cb, - WrtProgressCallback progress_cb) - { - UNHANDLED_EXCEPTION_HANDLER_BEGIN - { - LogInfo("[WRT-API] INSTALL PLUGIN: " << pluginDir); - //Private data for status callback - //Resource is free in pluginInstallFinishedCallback - InstallerCallbacksTranslate::PluginStatusCallbackStruct* - callbackStruct = - new InstallerCallbacksTranslate::PluginStatusCallbackStruct( - user_param, status_cb, progress_cb); - - CONTROLLER_POST_EVENT( - Logic::InstallerController, - InstallerControllerEvents::InstallPluginEvent( - std::string(pluginDir), - PluginInstallerStruct( - InstallerCallbacksTranslate:: - pluginInstallFinishedCallback, - InstallerCallbacksTranslate:: - installProgressCallback, callbackStruct))); - } - UNHANDLED_EXCEPTION_HANDLER_END - } - - EXPORT_API void wrt_install_all_plugins( - WrtAllPluginInstalledCallback installed_cb, - void *user_param) - { - UNHANDLED_EXCEPTION_HANDLER_BEGIN - { - std::string installRequest = - std::string(GlobalConfig::GetPluginInstallInitializerName()); - - LogDebug("Install new plugins"); - - Try { - DPL::Semaphore lock(PLUGIN_INSTALL_SEMAPHORE); - } - Catch(DPL::Semaphore::Exception::Base){ - LogError("Failed to create installation lock"); - return; - } - - struct stat tmp; - - if (-1 == stat(installRequest.c_str(), &tmp) || - !S_ISREG(tmp.st_mode)) - { - if (ENOENT == errno) { - LogDebug("Plugin installation not required"); - - LogDebug("Call SetAllinstallPluginCallback"); - installed_cb(user_param); - - DPL::Semaphore::Remove(PLUGIN_INSTALL_SEMAPHORE); - return; - } - LogWarning("Opening installation request file failed"); - } - - PluginUtils::PluginPathListPtr pluginPaths = - PluginUtils::getPluginPaths(); - if (!pluginPaths) { - DPL::Semaphore::Remove(PLUGIN_INSTALL_SEMAPHORE); - return; - } - - wrt_count_plugin = pluginPaths->size(); - - for (auto it = pluginPaths->begin(); it != pluginPaths->end(); ++it) { - wrt_plugin_data *plugin_data = new wrt_plugin_data; - - plugin_data->plugin_installed_cb = installed_cb; - plugin_data->plugin_path = const_cast(it->c_str()); - plugin_data->user_data = user_param; - - wrt_install_plugin( - it->c_str(), static_cast(plugin_data), - plugin_install_status_cb, - plugin_install_progress_cb); - } - - if (0 != unlink(installRequest.c_str())) { - LogError("Failed to remove file initializing plugin " - "installation"); - } - - Try { - DPL::Semaphore::Remove(PLUGIN_INSTALL_SEMAPHORE); - } - Catch(DPL::Semaphore::Exception::Base){ - LogInfo("Failed to remove installation lock"); - } - } - UNHANDLED_EXCEPTION_HANDLER_END - } - - EXPORT_API int wrt_installer_init_for_tests(void *userdata, - WrtInstallerInitCallback callback) - { - // Set DPL/LOG MID - DPL::Log::LogSystemSingleton::Instance().SetTag("WRT"); - - try - { - LogInfo("[WRT-API] INITIALIZING WRT INSTALLER..."); - LogInfo("[WRT-API] BUILD: " << __TIMESTAMP__); - - // Touch InstallerController Singleton - InstallerMainThreadSingleton::Instance(). - TouchArchitectureOnlyInstaller(); - - // Check paths - if (!checkPaths()) { - if (callback) { - callback(WRT_ERROR_NO_PATH, userdata); - } - return TRUE; - } - - CONTROLLER_POST_SYNC_EVENT( - Logic::InstallerController, - InstallerControllerEvents:: - InitializeEvent()); - - if (callback) { - LogInfo("[WRT-API] WRT INSTALLER INITIALIZATION CALLBACK"); - callback(WRT_SUCCESS, userdata); - } - } - catch (const DPL::Exception& ex) - { - LogError("Internal Error during Init:"); - DPL::Exception::DisplayKnownException(ex); - if (callback) { - callback(WRT_ERROR_INTERNAL, userdata); - } - return FALSE; - } - - // OK - return TRUE; - } - - EXPORT_API void wrt_installer_shutdown_for_tests() - { - try - { - LogInfo("[WRT-API] DEINITIALIZING WRT INSTALLER..."); - - // Installer termination - CONTROLLER_POST_SYNC_EVENT( - Logic::InstallerController, - InstallerControllerEvents:: - TerminateEvent()); - - // Global deinit check - LogInfo("Cleanup libxml2 global values."); - xmlCleanupParser(); - } - catch (const DPL::Exception& ex) - { - LogError("Internal Error during Shutdown:"); - DPL::Exception::DisplayKnownException(ex); - } - } - - EXPORT_API WrtErrStatus wrt_get_widget_by_pkgname(const std::string pkgname, - int *widget_handle) - { - try - { - LogInfo("[WRT-API] GETTING WIDGET HANDLE BY PKG NAME : " - << pkgname); - - WidgetHandle handle = WidgetDAOReadOnly::getHandle( - DPL::FromASCIIString(pkgname)); - *widget_handle = static_cast(handle); - return WRT_SUCCESS; - } - catch (WidgetDAOReadOnly::Exception::WidgetNotExist) - { - LogError("Error package name is not found"); - return WRT_ERROR_PKGNAME_NOT_FOUND; - } - catch (const DPL::Exception& ex) - { - LogError("Internal Error during get widget id by package name"); - DPL::Exception::DisplayKnownException(ex); - return WRT_ERROR_INTERNAL; - } - } - - EXPORT_API WrtErrStatus wrt_get_widget_by_guid(const std::string guid, - int *widget_handle) - { - try - { - LogInfo("[WRT-API] GETTING WIDGET HANDLE BY WidgetID : " - << guid); - - WidgetGUID widget_guid = DPL::FromUTF8String(guid); - WidgetHandle handle = WidgetDAOReadOnly::getHandle(widget_guid); - *widget_handle = static_cast(handle); - return WRT_SUCCESS; - } - catch (WidgetDAOReadOnly::Exception::WidgetNotExist) - { - LogError("Error package name is not found"); - return WRT_ERROR_PKGNAME_NOT_FOUND; - } - catch (const DPL::Exception& ex) - { - LogError("Internal Error during get widget id by package name"); - DPL::Exception::DisplayKnownException(ex); - return WRT_ERROR_INTERNAL; - } - } -#ifdef __cplusplus -} -#endif diff --git a/src/plugins-installer/wrt-installer/wrt_installer_api.h b/src/plugins-installer/wrt-installer/wrt_installer_api.h deleted file mode 100755 index 8d8a814..0000000 --- a/src/plugins-installer/wrt-installer/wrt_installer_api.h +++ /dev/null @@ -1,338 +0,0 @@ -/* - * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved - * - * 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 wrt_installer_api.h - * @author Chung Jihoon (jihoon.chung@samsung.com) - * @version 1.0 - * @brief This file contains declarations of wrt_installer_api - */ - -/* - * @defgroup wrt_engine_group WebRunTime engine Library - * @ingroup internet_FW - * Functions to APIs to access wrt-engine - */ - -#ifndef WRT_INSTALLER_API_H_ -#define WRT_INSTALLER_API_H_ - -#include -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * Callback function type invoked after async init function - */ -typedef void (*WrtInstallerInitCallback)(WrtErrStatus status, - void *data); - -/** - * Callback function type invoked after async functions - */ -typedef void (*WrtPluginInstallerStatusCallback)(WrtErrStatus status, - void *data); - -/** - * Callback function type invoked after async functions - */ -typedef void (*WrtInstallerStatusCallback)(int widget_handle, - WrtErrStatus status, - void *data); - -/** - * Callback function type invoked after async functions - */ -typedef void (*WrtProgressCallback)(float percent, - const char *description, - void *data); - -/** - * Callback function type invoked when all plugin installations are finished - */ -typedef void (*WrtAllPluginInstalledCallback)(void *userdata); - -typedef struct -{ - WrtAllPluginInstalledCallback plugin_installed_cb; - char *plugin_path; - void *user_data; -} wrt_plugin_data; - -/** - * @fn int wrt_installer_init(void *userdata, WrtInstallerInitCallback callback) - * @brief Initializes WRT - * - * This method is used to initialize wrt-engine. - * It connects to database, initializes webkit, widget and plugin logic. - * - * @param [in] userdata - User parameters to be passed to the callback - * @param [in] callback - The callback function that is launched, after - * wrt initialization. - * The callback is called in the context of the - * application's main loop. - * - * @return 0 on success, -1 on failure - * - * Sample code: - * @code - * int main (int argc, char *argv[]) - * { - * init_loop(argc, argv); - * printf("Initializing WRT"); - * wrt_init(NULL, &init_cb); - * - * wait_for_wrt_init(); - * printf("Starting tests"); - * - * int status = DPL_TestRunnerSingleton_Instance().ExecTestRunner(argc, - * argv); - * - * wrt_installer_shutdown(); - * quit_loop(); - * return status; - * } - * @endcode - * - * @see wrt_installer_shutdown - */ -typedef enum wrt_widget_install_mode_e -{ - /** - * Raw install bit flags - */ - WRT_WIM_NOT_INSTALLED = (1 << 0), - WRT_WIM_INCOMING_VERSION_NOT_STD = (1 << 1), - WRT_WIM_EXISTING_VERSION_NOT_STD = (1 << 2), - WRT_WIM_BOTH_VERSIONS_NOT_STD = (1 << 3), - WRT_WIM_EXISTING_VERSION_OLDER = (1 << 4), - WRT_WIM_EXISTING_VERSION_EQUAL = (1 << 5), - WRT_WIM_EXISTING_VERSION_NEWER = (1 << 6), - - /** - * Update default policies - */ - - /* Never update policy - */ - WRT_WIM_POLICY_NEVER_UPDATE = WRT_WIM_NOT_INSTALLED, - - /* WAC update policy - */ - WRT_WIM_POLICY_WAC = WRT_WIM_NOT_INSTALLED | - WRT_WIM_EXISTING_VERSION_OLDER, - - /* Always update policy - */ - WRT_WIM_POLICY_ALWAYS_INSTALL = WRT_WIM_NOT_INSTALLED | - WRT_WIM_INCOMING_VERSION_NOT_STD | - WRT_WIM_EXISTING_VERSION_NOT_STD | - WRT_WIM_BOTH_VERSIONS_NOT_STD | - WRT_WIM_EXISTING_VERSION_OLDER | - WRT_WIM_EXISTING_VERSION_EQUAL | - WRT_WIM_EXISTING_VERSION_NEWER, - - /* Force install policy - */ - WRT_WIM_POLICY_FORCE_INSTALL = WRT_WIM_POLICY_ALWAYS_INSTALL -} wrt_widget_update_mode_t; - -int wrt_installer_init(void *userdata, - WrtInstallerInitCallback callback); - -/** - * @fn void wrt_installer_shutdown(void) - * @brief Deinitializes WRT - * - * This method is used to deinitialize wrt-engine. - * It deinitializes widget logic, plugin logic, shuts down connection to - * database, switchs back to single thread and does deinit checks. - * - * @return nothing - * - * Sample code: - * @code - * int main (int argc, char *argv[]) - * { - * init_loop(argc, argv); - * printf("Initializing WRT"); - * wrt_init(NULL, &init_cb); - * - * wait_for_wrt_init(); - * printf("Starting tests"); - * - * int status = DPL_TestRunnerSingleton_Instance().ExecTestRunner(argc, - * argv); - * - * wrt_installer_shutdown(); - * quit_loop(); - * return status; - * } - * @endcode - * - * @see wrt_init - */ -void wrt_installer_shutdown(void); - -/** - * @fn void wrt_install_widget(const char *widget_package_path, - * void *user_parameter, - * WrtInstallerStatusCallback status_callback, - * WrtProgressCallback progress_callback, - * wrt_widget_update_mode_t update_mode); - * - * @brief Installs widget from given path - * - * This method is used to install widget from a given path. - * - * @param [in] widget_package_path Path of the widget package. - * @param [in] user_parameter User parameters to be passed to the callback - * @param [in] status_cb Call to this one will be done at the end of - * operation - * The callback is called in the context of the - * application's - * @param [in] progress_cb Callback function to get data of install - * progress - * If you don't want to get progress data, this - * should be NULL - * @param [in] install_mode Installation mode - * @return Nothing (status returned in callback). - * - * Sample code: - * @code - * wrt_install_widget(path.c_str(), - * NULL, - * install_cb, - * progress_cb, - * WRT_WIM_POLICY_WAC); - * @endcode - * - * @see wrt_installer_uninstall_widget - */ -void wrt_install_widget(const char *path, - void *user_parameter, - WrtInstallerStatusCallback status_callback, - WrtProgressCallback progress_callback, - wrt_widget_update_mode_t update_mode, - bool quiet); - -/** - * @fn void wrt_installer_uninstall_widget (int widget_handle, - * void* userdata, - * WrtInstallerStatusCallback cb) - * @brief Uninstalls widget using its id - * - * This method is used to uninstall the widget specified by its handle. - * The callback function is called when the uninstall operation is done. - * - * @param [in] widget_handle - widget id - * @param [in] userdata - user parameters to be passed to the callback - * @param [in] status_cb - Call to this one will be done at the end of - * operation - * The callback is called in the context of the - application's - * @param [in] progress_cb - Callback function to get data of install progress - * If you don't want to get progress data, this - * should be NULL - * - * @return nothing (status returned in callback). - * - * Sample code: - * @code //TODO SAMPLE - * wrt_installer_uninstall_widget( appId, NULL, uninstall_cb, progress_cb); - * @endcode - * - * @see wrt_installer_install_widget - */ -void wrt_uninstall_widget (int widget_handle, - void* userdata, - WrtInstallerStatusCallback status_cb, - WrtProgressCallback progress_cb); - -/** - * @fn void wrt_install_plugin(const char *pluginDirectory, - * void *userData, - * WrtInstallerStatusCallback statusCallback, - * WrtProgressCallback progressCallback) - * - * @brief Installs plugin from given path - * - * This method installs new plugin from specified location and calls a callback - * function when the operation is done. - * - * @param [in] pluginDirectory - plugin directory - * @param [in] userData - user parameters to be passed to the callback - * @param [in] statusCallback - user callback to call after installation - * @param [in] progressCallback - user callback to call when plugin - * installation progress has changed - * - * @return nothing (status returned in callback). - * - * Sample code: - * @code - * wrt_install_plugin("/usr/lib/wrt-plugins/",NULL,NULL,NULL); - * @endcode - * - * @see wrt_install_plugin - */ -void wrt_install_plugin(const char *pluginDirectory, - void *userData, - WrtPluginInstallerStatusCallback statusCallback, - WrtProgressCallback progressCallback); - -/** - * @brief To install plugins for first excution - * - * This method install plugins - * - * @return nothing - */ -void wrt_install_all_plugins(WrtAllPluginInstalledCallback installed_cb, - void *user_param); - -/** - * @brief To initialize for tests - * - * This method is wrt init for tests - * - * @return int - */ -int wrt_installer_init_for_tests(void *userdata, - WrtInstallerInitCallback callback); - -/** - * @brief To shutdown for tests - * - * This method is wrt shutdown for tests - * - * @return int - */ -void wrt_installer_shutdown_for_tests(); - -WrtErrStatus wrt_get_widget_by_pkgname(const std::string pkgname, - int *widget_handle); - -WrtErrStatus wrt_get_widget_by_guid(const std::string guid, - int *widget_handle); -#ifdef __cplusplus -} -#endif - -#endif /* WRT_INSTALLER_API_H_ */ diff --git a/src/plugins-installer/wrt-installer/wrt_type.h b/src/plugins-installer/wrt-installer/wrt_type.h deleted file mode 100755 index 8e5abb7..0000000 --- a/src/plugins-installer/wrt-installer/wrt_type.h +++ /dev/null @@ -1,254 +0,0 @@ -/* - * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved - * - * 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 wrt_type.h - * @author jihoon Chung (jihoon.Chung@samsung.com) - * @version 1.0 - * @brief This file contains declarations of wrt api - */ - -/* - * @defgroup wrt_engine_group WebRunTime engine Library - * @ingroup internet_FW - * Functions to APIs to access wrt-engine - */ - -#ifndef WRT_TYPE_H_ -#define WRT_TYPE_H_ - -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -#define WRT_DEPRECATED __attribute__((deprecated)) - -typedef enum -{ - /* Generic success */ - WRT_SUCCESS = 0, /*< Success*/ - WRT_ALREADY_INIT, /*< Wrt already initialized*/ - WRT_UPDATE_NEED, /*< Widget data has been updated*/ - WRT_SHUTDOWN, /*InstallAllPlugins(); - * - * if (This->m_argc == 2) - * wrt_install_widget(This->m_argv[1], This, InstallCallback); - * } - * else if(wrt_has_failed(status)) - * printf("[LAUNCH-WIDGET] INITIALIZATION HAS FAILED"); - * } - * @endcode - * - * @see wrt_has_failed - */ -inline bool wrt_has_succeded(WrtErrStatus err) -{ - return (err >= 0); -} - -/** - * @fn inline bool wrt_has_failed(WrtErrStatus err) - * @brief Checks whether call failed - * - * This function checks whether call failed. - * If call failed it returns TRUE. - * - * @param [in] err WrtErrStatus to check - * - * @return Result of the test - * @retval TRUE - the call failed - * @retval FALSE - the call was successful - * - * Sample code: - * @code - * static void InitCallback(WrtErrStatus status, void *data) - * { - * MyApplication *This = (MyApplication *)(data); - * - * printf("[LAUNCH-WIDGET] init callback"); - * - * if (wrt_has_succeded(status) && status!=WRT_UPDATE_NEED) - * { - * This->InstallAllPlugins(); - * - * if (This->m_argc == 2) - * wrt_install_widget(This->m_argv[1], This, InstallCallback); - * } - * else if(wrt_has_failed(status)) - * printf("[LAUNCH-WIDGET] INITIALIZATION HAS FAILED"); - * } - * @endcode - * - * @see wrt_has_succeded - */ -inline bool wrt_has_failed(WrtErrStatus err) -{ - return (err < 0); -} - -namespace CommonError { -enum Type -{ - WrtSuccess, ///< Success - - HandleNotFound, ///< Widget handle was not found - AlreadyRunning, ///< Widget is already running - AlreadyStopped, ///< Widget is already stopped - InvalidLanguage, ///< Widget is invalid in current locales - StillAuthorizing, ///< Widget is still autorizing and has not yet finished it - EarlyKilled, ///< Widget was early killed during launch - AccessDenied, ///< Access denied from ACE - CertificateRevoked, ///< Some certificate was revoked. - /// Widget is not allowed to run. - - Unknown ///< Temporary error. Try to not use this. -}; -} - -#ifdef __cplusplus -} -#endif - -#endif /* WRT_TYPE_H_ */ diff --git a/src/plugins-installer/wrt_plugins_installer.cpp b/src/plugins-installer/wrt_plugins_installer.cpp new file mode 100644 index 0000000..5f78b72 --- /dev/null +++ b/src/plugins-installer/wrt_plugins_installer.cpp @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2012 Samsung Electronics Co., Ltd All Rights Reserved + * + * 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 wrt_plugins_installer.cpp + * @author Andrzej Surdej(a.surdej@gmail.com) + * @version 1.0 + * @brief Main file for plugins installer + */ + +#include +#include +#include +#include + +int main(int argc, char *argv[]) +{ + DPL::Log::LogSystemSingleton::Instance().SetTag("PLUGINS_INSTALLER"); + LogInfo("Plugins installation started."); + + printf("Installing plugins...\n"); + PluginsInstallerSingleton::Instance().initialize(); + int installed = + PluginsInstallerSingleton::Instance().installAllPlugins(); + PluginsInstallerSingleton::Instance().deinitialize(); + printf("Completed: %d plugins installed.\n", installed); + + LogInfo("All plugins installed successfuly"); + return 0; +} -- 2.7.4