From c94e5391e98b1cad353bb896c4b5fe6355663901 Mon Sep 17 00:00:00 2001 From: Jocelyn Fiat Date: Wed, 8 Oct 2014 14:24:49 +0200 Subject: [PATCH 1/4] Layout: got rid of onces per thread function. Renamed `launch_cms' as `initialize_cms' which reflects better the implementation. Minor cosmetic or warning changes. --- cms/src/configuration/cms_configuration.e | 4 - cms/src/configuration/cms_default_setup.e | 1 - cms/src/configuration/cms_layout.e | 28 ++++- cms/src/modules/cms_module.e | 4 +- cms/src/service/cms_service.e | 1 - cms/src/theme/smarty_theme/smarty_cms_theme.e | 30 ++++-- examples/roc_api/roc_api.ecf | 10 +- examples/roc_api/src/ewf_roc_server.e | 6 +- layout/src/application_layout.e | 101 +++++++++++++++--- .../database/database_iteration_cursor.e | 2 +- 10 files changed, 139 insertions(+), 48 deletions(-) diff --git a/cms/src/configuration/cms_configuration.e b/cms/src/configuration/cms_configuration.e index b6f6b12..99de5c4 100644 --- a/cms/src/configuration/cms_configuration.e +++ b/cms/src/configuration/cms_configuration.e @@ -16,8 +16,6 @@ feature {NONE} -- Initialization make (a_layout: CMS_LAYOUT) -- Initialize `Current'. - local - p: PATH do layout := a_layout create options.make_equal (10) @@ -169,8 +167,6 @@ feature -- Change end get_root_location - local - utf: UTF_CONVERTER do root_location := layout.www_path end diff --git a/cms/src/configuration/cms_default_setup.e b/cms/src/configuration/cms_default_setup.e index dac8deb..ccac309 100644 --- a/cms/src/configuration/cms_default_setup.e +++ b/cms/src/configuration/cms_default_setup.e @@ -93,7 +93,6 @@ feature {NONE} -- Initialization build_api_service local - dn: PATH l_database: DATABASE_CONNECTION do to_implement ("Refactor database setup") diff --git a/cms/src/configuration/cms_layout.e b/cms/src/configuration/cms_layout.e index b48684e..3037b5b 100644 --- a/cms/src/configuration/cms_layout.e +++ b/cms/src/configuration/cms_layout.e @@ -19,14 +19,34 @@ feature -- Access theme_path: PATH -- Directory for templates (HTML, etc). - once - Result := www_path.extended ("theme") + local + p: detachable PATH + do + p := internal_theme_path + if p = Void then + p := www_path.extended ("theme") + internal_theme_path := p + end + Result := p end cms_config_ini_path: PATH -- Database Configuration file path. - once - Result := config_path.extended ("cms.ini") + local + p: detachable PATH + do + p := internal_cms_config_ini_path + if p = Void then + p := config_path.extended ("cms.ini") + internal_cms_config_ini_path := p + end + Result := p end +feature {NONE} -- Implementation + + internal_theme_path: detachable like theme_path + + internal_cms_config_ini_path: detachable like cms_config_ini_path + end diff --git a/cms/src/modules/cms_module.e b/cms/src/modules/cms_module.e index 3979fff..63c433b 100644 --- a/cms/src/modules/cms_module.e +++ b/cms/src/modules/cms_module.e @@ -27,7 +27,7 @@ feature -- Router feature -- Filter - filters: detachable LIST[WSF_FILTER] + filters: detachable LIST [WSF_FILTER] -- Possibly list of Filter's module. feature -- Element Change: Filter @@ -39,7 +39,7 @@ feature -- Element Change: Filter do l_filters := filters if l_filters = Void then - create {ARRAYED_LIST[WSF_FILTER]}l_filters.make (1) + create {ARRAYED_LIST [WSF_FILTER]} l_filters.make (1) filters := l_filters end l_filters.force (a_filter) diff --git a/cms/src/service/cms_service.e b/cms/src/service/cms_service.e index a14a96e..252c9ed 100644 --- a/cms/src/service/cms_service.e +++ b/cms/src/service/cms_service.e @@ -136,7 +136,6 @@ feature -- Filters -- Create `filter'. local f, l_filter: detachable WSF_FILTER - fh: WSF_CUSTOM_HEADER_FILTER do l_filter := Void -- Maintenance diff --git a/cms/src/theme/smarty_theme/smarty_cms_theme.e b/cms/src/theme/smarty_theme/smarty_cms_theme.e index f315f57..2b2e6a4 100644 --- a/cms/src/theme/smarty_theme/smarty_cms_theme.e +++ b/cms/src/theme/smarty_theme/smarty_cms_theme.e @@ -45,19 +45,25 @@ feature -- Access local i: INTEGER utf: UTF_CONVERTER - once - if attached information.regions as tb and then not tb.is_empty then - i := 1 - create Result.make_filled ("", i, i + tb.count - 1) - across - tb as ic - loop - Result.force (utf.utf_32_string_to_utf_8_string_8 (ic.key), i) -- NOTE: UTF-8 encoded ! - i := i + 1 + l_regions: like internal_regions + do + l_regions := internal_regions + if l_regions = Void then + if attached information.regions as tb and then not tb.is_empty then + i := 1 + create l_regions.make_filled ("", i, i + tb.count - 1) + across + tb as ic + loop + l_regions.force (utf.utf_32_string_to_utf_8_string_8 (ic.key), i) -- NOTE: UTF-8 encoded ! + i := i + 1 + end + else + l_regions := <<"header", "content", "footer", "first_sidebar", "second_sidebar">> end - else - Result := <<"header", "content", "footer", "first_sidebar", "second_sidebar">> + internaL_regions := l_regions end + Result := l_regions end page_template: SMARTY_CMS_PAGE_TEMPLATE @@ -87,6 +93,8 @@ feature -- Conversion feature {NONE} -- Internal + internal_regions: detachable like regions + internal_page_template: detachable like page_template invariant diff --git a/examples/roc_api/roc_api.ecf b/examples/roc_api/roc_api.ecf index 2cf8d79..fb9f85c 100644 --- a/examples/roc_api/roc_api.ecf +++ b/examples/roc_api/roc_api.ecf @@ -9,15 +9,11 @@ - - - - - - - + + + diff --git a/examples/roc_api/src/ewf_roc_server.e b/examples/roc_api/src/ewf_roc_server.e index e4a0425..e4eccea 100644 --- a/examples/roc_api/src/ewf_roc_server.e +++ b/examples/roc_api/src/ewf_roc_server.e @@ -43,7 +43,7 @@ feature {NONE} -- Initialization do Precursor service_options := create {WSF_SERVICE_LAUNCHER_OPTIONS_FROM_INI}.make_from_file ("roc.ini") - launch_cms (cms_setup) + initialize_cms (cms_setup) end feature -- Service @@ -115,11 +115,11 @@ feature -- CMS Initialization setup_storage (Result) end - launch_cms (a_setup: CMS_SETUP) + initialize_cms (a_setup: CMS_SETUP) local cms: CMS_SERVICE do - log.write_debug (generator + ".launch_cms") + log.write_debug (generator + ".initialize_cms") create cms.make (a_setup) cms_service := cms end diff --git a/layout/src/application_layout.e b/layout/src/application_layout.e index 6108602..a76e3d3 100644 --- a/layout/src/application_layout.e +++ b/layout/src/application_layout.e @@ -36,45 +36,118 @@ feature -- Access: internal config_path: PATH -- Configuration file path. - once - Result := path.extended ("config") + local + p: detachable PATH + do + p := internal_config_path + if p = Void then + p := path.extended ("config") + internal_config_path := p + end + Result := p end application_config_path: PATH -- Database Configuration file path. - once - Result := config_path.extended ("application_configuration.json") + local + p: detachable PATH + do + p := internal_application_config_path + if p = Void then + p := config_path.extended ("application_configuration.json") + internal_application_config_path := p + end + Result := p end logs_path: PATH -- Directory for logs. - once - Result := path.extended ("logs") + local + p: detachable PATH + do + p := internal_logs_path + if p = Void then + p := path.extended ("logs") + internal_logs_path := p + end + Result := p end documentation_path: PATH -- Directory for API documentation. - once - Result := path.extended ("doc") + local + p: detachable PATH + do + p := internal_documentation_path + if p = Void then + p := path.extended ("doc") + internal_documentation_path := p + end + Result := p end www_path: PATH -- Directory for www. - once - Result := path.extended ("www") + local + p: detachable PATH + do + p := internal_www_path + if p = Void then + p := path.extended ("www") + internal_www_path := p + end + Result := p end assets_path: PATH -- Directory for public assets. -- css, images, js. - once - Result := path.extended ("www").extended ("assets") + local + p: detachable PATH + do + p := internal_assets_path + if p = Void then + p := www_path.extended ("assets") + internal_assets_path := p + end + Result := p end template_path: PATH -- Directory for templates (HTML, etc). - once - Result := www_path.extended ("template") + local + p: detachable PATH + do + p := internal_template_path + if p = Void then + p := www_path.extended ("template") + internal_template_path := p + end + Result := p end +feature {NONE} -- Implementation + + internal_config_path: detachable like config_path + -- Configuration file path. + + internal_application_config_path: detachable like application_config_path + -- Database Configuration file path. + + internal_logs_path: detachable like logs_path + -- Directory for logs. + + internal_documentation_path: detachable like documentation_path + -- Directory for API documentation. + + internal_www_path: detachable like www_path + -- Directory for www. + + internal_assets_path: detachable like assets_path + -- Directory for public assets. + -- css, images, js. + + internal_template_path: detachable like template_path + -- Directory for templates (HTML, etc). + end diff --git a/persistence/implementation/common/database/database_iteration_cursor.e b/persistence/implementation/common/database/database_iteration_cursor.e index 7c0f073..f38d844 100644 --- a/persistence/implementation/common/database/database_iteration_cursor.e +++ b/persistence/implementation/common/database/database_iteration_cursor.e @@ -80,7 +80,7 @@ feature -- Cursor feature -- Action - action: FUNCTION [ANY, detachable TUPLE [], G] + action: FUNCTION [ANY, detachable TUPLE, G] -- Agent to create a new item of type G. feature {NONE} -- Implementation From 965b0e9f7d99daf046c73a5afe4ccaf33266d9c5 Mon Sep 17 00:00:00 2001 From: jvelilla Date: Tue, 7 Oct 2014 17:52:13 -0300 Subject: [PATCH 2/4] Added CMS_MODULE_CONFIGURATOR. Added a default implementation of CMS_MODULE_CONGIRATOR. Updated CMS_SERVICE, to use the new CMS_MODULE_CONFIGURATOR. Updated Example. --- cms/src/configuration/cms_default_setup.e | 47 ++-------------- cms/src/configuration/cms_setup.e | 7 --- cms/src/modules/cms_module_configurator.e | 30 +++++++++++ .../default/cms_default_module_configurator.e | 53 +++++++++++++++++++ cms/src/service/cms_service.e | 37 ++++++++++--- examples/roc_api/src/ewf_roc_server.e | 13 +++-- 6 files changed, 128 insertions(+), 59 deletions(-) create mode 100644 cms/src/modules/cms_module_configurator.e create mode 100644 cms/src/modules/default/cms_default_module_configurator.e diff --git a/cms/src/configuration/cms_default_setup.e b/cms/src/configuration/cms_default_setup.e index ccac309..79ed020 100644 --- a/cms/src/configuration/cms_default_setup.e +++ b/cms/src/configuration/cms_default_setup.e @@ -12,13 +12,18 @@ inherit REFACTORING_HELPER create make + feature {NONE} -- Initialization make (a_layout: CMS_LAYOUT) do layout := a_layout create configuration.make (layout) + configure + end + configure + do site_id := configuration.site_id site_url := configuration.site_url ("") site_name := configuration.site_name ("EWF::CMS") @@ -35,20 +40,14 @@ feature {NONE} -- Initialization initialize end - initialize do build_api_service - build_auth_engine build_mailer - build_modules end feature -- Access - modules: ARRAYED_LIST [CMS_MODULE] - -- List of possible modules - is_html: BOOLEAN -- do @@ -63,34 +62,6 @@ feature -- Access end -feature {NONE} -- Initialization - - build_modules - -- Core modules. (User, Admin, Node) - -- At the moment only node is supported. - local - m: CMS_MODULE - do - create modules.make (3) - --- -- Core --- create {USER_MODULE} m.make --- m.enable --- modules.extend (m) - --- create {ADMIN_MODULE} m.make --- m.enable --- modules.extend (m) - - create {NODE_MODULE} m.make (Current) - m.enable - modules.extend (m) - - create {BASIC_AUTH_MODULE} m.make (Current) - m.enable - modules.extend (m) - end - build_api_service local l_database: DATABASE_CONNECTION @@ -115,12 +86,4 @@ feature {NONE} -- Initialization to_implement ("Not implemented mailer") end -feature -- Change - - add_module (m: CMS_MODULE) - -- Add a module `m' to the list of modules `modules'. - do - modules.force (m) - end - end diff --git a/cms/src/configuration/cms_setup.e b/cms/src/configuration/cms_setup.e index a9f8327..f3bf51d 100644 --- a/cms/src/configuration/cms_setup.e +++ b/cms/src/configuration/cms_setup.e @@ -17,13 +17,6 @@ feature -- Access api_service: CMS_API_SERVICE -- cms api service. - modules: LIST[CMS_MODULE] - -- Possible list of modules. - -- |If we remove Modules from setup. - -- |we can let the CMS_SERVICE define the basic modules. - deferred - end - is_html: BOOLEAN -- api with progresive enhacements css and js, server side rendering. deferred diff --git a/cms/src/modules/cms_module_configurator.e b/cms/src/modules/cms_module_configurator.e new file mode 100644 index 0000000..c8fe906 --- /dev/null +++ b/cms/src/modules/cms_module_configurator.e @@ -0,0 +1,30 @@ +note + description: "Summary description for {CMS_MODULE_CONFIGURATOR}." + author: "" + date: "$Date$" + revision: "$Revision$" + +deferred class + CMS_MODULE_CONFIGURATOR + +feature -- Access + + modules: LIST[CMS_MODULE] + -- Possible list of modules. + deferred + end + +feature -- Add Module + + add_module (a_module: CMS_MODULE) + -- Add module + do + modules.force (a_module) + end + + remove_module (a_module: CMS_MODULE) + -- Remove module + do + modules.prune (a_module) + end +end diff --git a/cms/src/modules/default/cms_default_module_configurator.e b/cms/src/modules/default/cms_default_module_configurator.e new file mode 100644 index 0000000..85132eb --- /dev/null +++ b/cms/src/modules/default/cms_default_module_configurator.e @@ -0,0 +1,53 @@ +note + description: "Summary description for {CMS_DEFAULT_MODULE_CONFIGURATOR}." + author: "" + date: "$Date$" + revision: "$Revision$" + +class + CMS_DEFAULT_MODULE_CONFIGURATOR + +inherit + + CMS_MODULE_CONFIGURATOR + +create + make + +feature {NONE} -- Initialization + + make (a_setup: CMS_SETUP) + do + build_modules (a_setup) + end + +feature -- Access + + modules: ARRAYED_LIST [CMS_MODULE] + -- List of possible modules + + +feature -- Configuration + + build_modules (a_setup: CMS_SETUP) + -- Core modules. (User, Admin, Node) + -- At the moment only node is supported. + local + m: CMS_MODULE + do + create modules.make (3) +-- -- Core +-- create {USER_MODULE} m.make (a_setup) +-- m.enable +-- modules.extend (m) + +-- create {ADMIN_MODULE} m.make (a_setup) +-- m.enable +-- modules.extend (m) + + create {NODE_MODULE} m.make (a_setup) + m.enable + modules.extend (m) + end + +end diff --git a/cms/src/service/cms_service.e b/cms/src/service/cms_service.e index 252c9ed..43ccad4 100644 --- a/cms/src/service/cms_service.e +++ b/cms/src/service/cms_service.e @@ -37,16 +37,34 @@ inherit SHARED_LOGGER create - make + make, + make_with_module_configurator feature {NONE} -- Initialization make (a_setup: CMS_SETUP) + -- Build a a default service with a CMS_DEFAULT_MODULE_CONFIGURATOR do setup := a_setup configuration := a_setup.configuration - modules := a_setup.modules + create {CMS_DEFAULT_MODULE_CONFIGURATOR} modules.make (a_setup) create {ARRAYED_LIST[WSF_FILTER]} filters.make (0) + initialize + end + + make_with_module_configurator (a_setup: CMS_SETUP; a_module_configurator: CMS_MODULE_CONFIGURATOR) + -- Build a a default service with a custom CMS_MODULE_CONFIGURATOR + do + setup := a_setup + configuration := a_setup.configuration + modules := a_module_configurator + create {ARRAYED_LIST[WSF_FILTER]} filters.make (0) + initialize + end + + + initialize + do initialize_users initialize_auth_engine initialize_mailer @@ -75,7 +93,7 @@ feature {NONE} -- Initialization do log.write_debug (generator + ".initialize_modules") across - modules as m + modules.modules as m loop if m.item.is_enabled then router.import (m.item.router) @@ -178,13 +196,20 @@ feature -- Access -- CMS configuration. -- | Maybe we can compute it (using `setup') instead of using memory. - modules: LIST [CMS_MODULE] - -- List of possible modules. - -- | Maybe we can compute it (using `setup') instead of using memory. + modules: CMS_MODULE_CONFIGURATOR + -- Configurator of possible modules. filters: LIST[WSF_FILTER] -- List of possible filters. +feature -- Element Change: Modules + + add_module (a_module: CMS_MODULE) + -- Add a module `a_module' to the module configurator `a_module'. + do + modules.add_module (a_module) + end + feature -- Execution execute_default (req: WSF_REQUEST; res: WSF_RESPONSE) diff --git a/examples/roc_api/src/ewf_roc_server.e b/examples/roc_api/src/ewf_roc_server.e index e4eccea..caf08b2 100644 --- a/examples/roc_api/src/ewf_roc_server.e +++ b/examples/roc_api/src/ewf_roc_server.e @@ -111,7 +111,6 @@ feature -- CMS Initialization create layout.make_default end create Result.make (layout) - setup_modules (Result) setup_storage (Result) end @@ -121,20 +120,26 @@ feature -- CMS Initialization do log.write_debug (generator + ".initialize_cms") create cms.make (a_setup) + setup_modules (cms) cms_service := cms end feature -- CMS setup - setup_modules (a_setup: CMS_SETUP) + setup_modules (a_service: CMS_SERVICE) -- Setup modules to be added to the CMS ecosystem. + local + m: CMS_MODULE do - to_implement ("To implement custom modules") + + create {NODE_MODULE} m.make (a_service.setup) + m.enable + a_service.add_module (m) end setup_storage (a_setup: CMS_SETUP) do - + to_implement ("To implement custom storage") end end From 51e105840954ba1ddcf8b65d4531565f9a7e933b Mon Sep 17 00:00:00 2001 From: Jocelyn Fiat Date: Wed, 8 Oct 2014 17:04:34 +0200 Subject: [PATCH 3/4] Redesign part of CMS_MODULE, and implementation. Prepare the module before creating the service. Remove the possibility to add module after the creation of the service. Renamed CMS_MODULE_CONFIGURATOR as CMS_MODULE_COLLECTION. --- cms/src/configuration/cms_default_setup.e | 31 ++-- cms/src/configuration/cms_setup.e | 30 +--- .../modules/basic_auth/basic_auth_module.e | 44 +++--- .../basic_auth/filter/basic_auth_filter.e | 2 +- cms/src/modules/cms_module.e | 19 +-- cms/src/modules/cms_module_collection.e | 64 ++++++++ cms/src/modules/cms_module_configurator.e | 30 ---- ...ator.e => cms_default_module_collection.e} | 29 ++-- cms/src/modules/node/node_module.e | 55 +++---- cms/src/service/cms_api_service.e | 7 +- cms/src/service/cms_service.e | 137 ++++++++++-------- examples/roc_api/src/ewf_roc_server.e | 17 ++- 12 files changed, 245 insertions(+), 220 deletions(-) create mode 100644 cms/src/modules/cms_module_collection.e delete mode 100644 cms/src/modules/cms_module_configurator.e rename cms/src/modules/default/{cms_default_module_configurator.e => cms_default_module_collection.e} (63%) diff --git a/cms/src/configuration/cms_default_setup.e b/cms/src/configuration/cms_default_setup.e index 79ed020..015f35b 100644 --- a/cms/src/configuration/cms_default_setup.e +++ b/cms/src/configuration/cms_default_setup.e @@ -12,14 +12,21 @@ inherit REFACTORING_HELPER create make - + feature {NONE} -- Initialization make (a_layout: CMS_LAYOUT) do layout := a_layout create configuration.make (layout) + initialize + end + + initialize + do configure + build_api_service + build_mailer end configure @@ -36,14 +43,6 @@ feature {NONE} -- Initialization compute_theme_location compute_theme_resource_location - - initialize - end - - initialize - do - build_api_service - build_mailer end feature -- Access @@ -86,4 +85,18 @@ feature -- Access to_implement ("Not implemented mailer") end +feature -- Compute location + + compute_theme_location + do + theme_location := themes_location.extended (theme_name) + end + + compute_theme_resource_location + -- assets (js, css, images, etc) + -- Not used at the moment. + do + theme_resource_location := theme_location + end + end diff --git a/cms/src/configuration/cms_setup.e b/cms/src/configuration/cms_setup.e index f3bf51d..244c940 100644 --- a/cms/src/configuration/cms_setup.e +++ b/cms/src/configuration/cms_setup.e @@ -9,21 +9,21 @@ deferred class feature -- Access configuration: CMS_CONFIGURATION - -- cms configuration. + -- cms configuration. layout: CMS_LAYOUT - -- CMS layout. + -- CMS layout. api_service: CMS_API_SERVICE - -- cms api service. + -- cms api service. is_html: BOOLEAN - -- api with progresive enhacements css and js, server side rendering. + -- api with progressive enhancements css and js, server side rendering. deferred end is_web: BOOLEAN - -- web: Web Site with progresive enhacements css and js and Ajax calls. + -- web: Web Site with progressive enhancements css and js and Ajax calls. deferred end @@ -43,14 +43,14 @@ feature -- Access: Site files_location: PATH -feature -- Access:Theme +feature -- Access: Theme themes_location: PATH theme_location: PATH theme_resource_location: PATH - -- + -- theme_information_location: PATH -- theme informations. @@ -59,20 +59,6 @@ feature -- Access:Theme end theme_name: READABLE_STRING_32 - -- theme name - -feature -- Compute location - - compute_theme_location - do - theme_location := themes_location.extended (theme_name) - end - - compute_theme_resource_location - -- assets (js, css, images, etc) - -- Not used at the moment. - do - theme_resource_location := theme_location - end + -- theme name end diff --git a/cms/src/modules/basic_auth/basic_auth_module.e b/cms/src/modules/basic_auth/basic_auth_module.e index 855c4e3..2c589d1 100644 --- a/cms/src/modules/basic_auth/basic_auth_module.e +++ b/cms/src/modules/basic_auth/basic_auth_module.e @@ -9,6 +9,9 @@ class inherit CMS_MODULE + redefine + filters + end create make @@ -22,39 +25,34 @@ feature {NONE} -- Initialization description := "Service to manage basic authentication" package := "core" config := a_config - setup_router - setup_filter - enable end -feature -- Access - - router: WSF_ROUTER - -- Node router. - config: CMS_SETUP -- Node configuration. -feature -- Implementation +feature -- Access: router - setup_router - -- Setup `router'. + router: WSF_ROUTER + -- Node router. do - create router.make (2) - configure_api_login - configure_api_logoff + create Result.make (2) + configure_api_login (Result) + configure_api_logoff (Result) end - setup_filter - -- Setup `filter'. +feature -- Access: filter + + filters: detachable LIST [WSF_FILTER] + -- Possibly list of Filter's module. do - add_filter (create {CORS_FILTER}) - add_filter (create {BASIC_AUTH_FILTER}.make (config)) + create {ARRAYED_LIST [WSF_FILTER]} Result.make (2) + Result.extend (create {CORS_FILTER}) + Result.extend (create {BASIC_AUTH_FILTER}.make (config)) end -feature -- Configure Node Resources Routes +feature {NONE} -- Implementation: routes - configure_api_login + configure_api_login (a_router: WSF_ROUTER) local l_bal_handler: BASIC_AUTH_LOGIN_HANDLER l_methods: WSF_REQUEST_METHODS @@ -62,10 +60,10 @@ feature -- Configure Node Resources Routes create l_bal_handler.make (config) create l_methods l_methods.enable_get - router.handle_with_request_methods ("/basic_auth_login", l_bal_handler, l_methods) + a_router.handle_with_request_methods ("/basic_auth_login", l_bal_handler, l_methods) end - configure_api_logoff + configure_api_logoff (a_router: WSF_ROUTER) local l_bal_handler: BASIC_AUTH_LOGOFF_HANDLER l_methods: WSF_REQUEST_METHODS @@ -73,7 +71,7 @@ feature -- Configure Node Resources Routes create l_bal_handler.make (config) create l_methods l_methods.enable_get - router.handle_with_request_methods ("/basic_auth_logoff", l_bal_handler, l_methods) + a_router.handle_with_request_methods ("/basic_auth_logoff", l_bal_handler, l_methods) end end diff --git a/cms/src/modules/basic_auth/filter/basic_auth_filter.e b/cms/src/modules/basic_auth/filter/basic_auth_filter.e index 1b4502b..d5abd0a 100644 --- a/cms/src/modules/basic_auth/filter/basic_auth_filter.e +++ b/cms/src/modules/basic_auth/filter/basic_auth_filter.e @@ -31,7 +31,7 @@ feature -- Basic operations -- A valid user if (attached l_auth.type as l_auth_type and then l_auth_type.is_case_insensitive_equal_general ("basic")) and then attached l_auth.login as l_auth_login and then attached l_auth.password as l_auth_password then - if api_service.login_valid (l_auth_login, l_auth_password) then + if api_service.is_valid_credential (l_auth_login, l_auth_password) then if attached api_service.user_by_name (l_auth_login) as l_user then req.set_execution_variable ("user", l_user) execute_next (req, res) diff --git a/cms/src/modules/cms_module.e b/cms/src/modules/cms_module.e index 63c433b..a58805e 100644 --- a/cms/src/modules/cms_module.e +++ b/cms/src/modules/cms_module.e @@ -22,27 +22,18 @@ feature -- Router router: WSF_ROUTER -- Router configuration. + require + is_enabled: is_enabled deferred end feature -- Filter filters: detachable LIST [WSF_FILTER] - -- Possibly list of Filter's module. - -feature -- Element Change: Filter - - add_filter (a_filter: WSF_FILTER) - -- Add a filter `a_filter' to the list of module filters `filters'. - local - l_filters: like filters + -- Optional list of filter for Current module. + require + is_enabled: is_enabled do - l_filters := filters - if l_filters = Void then - create {ARRAYED_LIST [WSF_FILTER]} l_filters.make (1) - filters := l_filters - end - l_filters.force (a_filter) end feature -- Settings diff --git a/cms/src/modules/cms_module_collection.e b/cms/src/modules/cms_module_collection.e new file mode 100644 index 0000000..a7f94d2 --- /dev/null +++ b/cms/src/modules/cms_module_collection.e @@ -0,0 +1,64 @@ +note + description: "Summary description for {CMS_MODULE_COLLECTION}." + author: "" + date: "$Date$" + revision: "$Revision$" + +class + CMS_MODULE_COLLECTION + +inherit + ITERABLE [CMS_MODULE] + +create + make + +feature {NONE} -- Initialization + + make (nb: INTEGER) + do + create modules.make (nb) + end + +feature -- Access + + new_cursor: INDEXABLE_ITERATION_CURSOR [CMS_MODULE] + -- + do + Result := modules.new_cursor + end + +feature -- Status report + + has (a_module: CMS_MODULE): BOOLEAN + -- Has `a_module'? + do + Result := modules.has (a_module) + end + + count: INTEGER + -- Number of modules. + do + Result := modules.count + end + +feature -- Element change + + extend (a_module: CMS_MODULE) + -- Add module + do + modules.force (a_module) + end + + remove (a_module: CMS_MODULE) + -- Remove module + do + modules.prune_all (a_module) + end + +feature {NONE} -- Implementation + + modules: ARRAYED_LIST [CMS_MODULE] + -- List of available modules. + +end diff --git a/cms/src/modules/cms_module_configurator.e b/cms/src/modules/cms_module_configurator.e deleted file mode 100644 index c8fe906..0000000 --- a/cms/src/modules/cms_module_configurator.e +++ /dev/null @@ -1,30 +0,0 @@ -note - description: "Summary description for {CMS_MODULE_CONFIGURATOR}." - author: "" - date: "$Date$" - revision: "$Revision$" - -deferred class - CMS_MODULE_CONFIGURATOR - -feature -- Access - - modules: LIST[CMS_MODULE] - -- Possible list of modules. - deferred - end - -feature -- Add Module - - add_module (a_module: CMS_MODULE) - -- Add module - do - modules.force (a_module) - end - - remove_module (a_module: CMS_MODULE) - -- Remove module - do - modules.prune (a_module) - end -end diff --git a/cms/src/modules/default/cms_default_module_configurator.e b/cms/src/modules/default/cms_default_module_collection.e similarity index 63% rename from cms/src/modules/default/cms_default_module_configurator.e rename to cms/src/modules/default/cms_default_module_collection.e index 85132eb..24047bb 100644 --- a/cms/src/modules/default/cms_default_module_configurator.e +++ b/cms/src/modules/default/cms_default_module_collection.e @@ -1,15 +1,17 @@ note - description: "Summary description for {CMS_DEFAULT_MODULE_CONFIGURATOR}." + description: "Summary description for {CMS_DEFAULT_MODULE_COLLECTION}." author: "" date: "$Date$" revision: "$Revision$" class - CMS_DEFAULT_MODULE_CONFIGURATOR + CMS_DEFAULT_MODULE_COLLECTION inherit - - CMS_MODULE_CONFIGURATOR + CMS_MODULE_COLLECTION + rename + make as make_with_capacity + end create make @@ -18,15 +20,10 @@ feature {NONE} -- Initialization make (a_setup: CMS_SETUP) do + make_with_capacity (3) build_modules (a_setup) end -feature -- Access - - modules: ARRAYED_LIST [CMS_MODULE] - -- List of possible modules - - feature -- Configuration build_modules (a_setup: CMS_SETUP) @@ -35,19 +32,23 @@ feature -- Configuration local m: CMS_MODULE do - create modules.make (3) -- -- Core -- create {USER_MODULE} m.make (a_setup) -- m.enable --- modules.extend (m) +-- extend (m) -- create {ADMIN_MODULE} m.make (a_setup) -- m.enable --- modules.extend (m) +-- extend (m) + + + create {BASIC_AUTH_MODULE} m.make (a_setup) + m.enable + extend (m) create {NODE_MODULE} m.make (a_setup) m.enable - modules.extend (m) + extend (m) end end diff --git a/cms/src/modules/node/node_module.e b/cms/src/modules/node/node_module.e index 9e8a805..683a8c0 100644 --- a/cms/src/modules/node/node_module.e +++ b/cms/src/modules/node/node_module.e @@ -16,40 +16,34 @@ create feature {NONE} -- Initialization make (a_config: CMS_SETUP) + -- Create Current module, disabled by default. do name := "node" version := "1.0" description := "Service to manage content based on 'node'" package := "core" config := a_config - setup_router - enable end -feature -- Access - - router: WSF_ROUTER - -- Node router. - config: CMS_SETUP - -- Node configuration. + -- Node configuration. -feature -- Implementation +feature -- Access: router - setup_router - -- Setup `router'. + router: WSF_ROUTER + -- Node router. do - create router.make (5) - configure_api_node - configure_api_nodes - configure_api_node_title - configure_api_node_summary - configure_api_node_content + create Result.make (5) + configure_api_node (Result) + configure_api_nodes (Result) + configure_api_node_title (Result) + configure_api_node_summary (Result) + configure_api_node_content (Result) end -feature -- Configure Node Resources Routes +feature {NONE} -- Implementation: routes - configure_api_node + configure_api_node (a_router: WSF_ROUTER) local l_node_handler: NODE_HANDLER l_methods: WSF_REQUEST_METHODS @@ -59,7 +53,7 @@ feature -- Configure Node Resources Routes l_methods.enable_get l_methods.enable_post l_methods.enable_put - router.handle_with_request_methods ("/node", l_node_handler, l_methods) + a_router.handle_with_request_methods ("/node", l_node_handler, l_methods) create l_node_handler.make (config) create l_methods @@ -67,11 +61,10 @@ feature -- Configure Node Resources Routes l_methods.enable_post l_methods.enable_put l_methods.enable_delete - router.handle_with_request_methods ("/node/{id}", l_node_handler, l_methods) + a_router.handle_with_request_methods ("/node/{id}", l_node_handler, l_methods) end - - configure_api_nodes + configure_api_nodes (a_router: WSF_ROUTER) local l_nodes_handler: NODES_HANDLER l_methods: WSF_REQUEST_METHODS @@ -79,11 +72,10 @@ feature -- Configure Node Resources Routes create l_nodes_handler.make (config) create l_methods l_methods.enable_get - router.handle_with_request_methods ("/nodes", l_nodes_handler, l_methods) + a_router.handle_with_request_methods ("/nodes", l_nodes_handler, l_methods) end - - configure_api_node_summary + configure_api_node_summary (a_router: WSF_ROUTER) local l_report_handler: NODE_SUMMARY_HANDLER l_methods: WSF_REQUEST_METHODS @@ -93,11 +85,11 @@ feature -- Configure Node Resources Routes l_methods.enable_get l_methods.enable_post l_methods.enable_put - router.handle_with_request_methods ("/node/{id}/summary", l_report_handler, l_methods) + a_router.handle_with_request_methods ("/node/{id}/summary", l_report_handler, l_methods) end - configure_api_node_title + configure_api_node_title (a_router: WSF_ROUTER) local l_report_handler: NODE_TITLE_HANDLER l_methods: WSF_REQUEST_METHODS @@ -107,11 +99,10 @@ feature -- Configure Node Resources Routes l_methods.enable_get l_methods.enable_post l_methods.enable_put - router.handle_with_request_methods ("/node/{id}/title", l_report_handler, l_methods) + a_router.handle_with_request_methods ("/node/{id}/title", l_report_handler, l_methods) end - - configure_api_node_content + configure_api_node_content (a_router: WSF_ROUTER) local l_report_handler: NODE_CONTENT_HANDLER l_methods: WSF_REQUEST_METHODS @@ -121,7 +112,7 @@ feature -- Configure Node Resources Routes l_methods.enable_get l_methods.enable_post l_methods.enable_put - router.handle_with_request_methods ("/node/{id}/content", l_report_handler, l_methods) + a_router.handle_with_request_methods ("/node/{id}/content", l_report_handler, l_methods) end end diff --git a/cms/src/service/cms_api_service.e b/cms/src/service/cms_api_service.e index 547d4c6..c7b69ff 100644 --- a/cms/src/service/cms_api_service.e +++ b/cms/src/service/cms_api_service.e @@ -12,8 +12,8 @@ inherit REFACTORING_HELPER -create make - +create + make feature -- Initialize @@ -28,7 +28,7 @@ feature -- Initialize feature -- Access - login_valid (l_auth_login, l_auth_password: READABLE_STRING_32): BOOLEAN + is_valid_credential (l_auth_login, l_auth_password: READABLE_STRING_32): BOOLEAN local l_security: SECURITY_PROVIDER do @@ -57,7 +57,6 @@ feature -- Access: Node Result := storage.node (a_id) end - feature -- Change: Node new_node (a_node: CMS_NODE) diff --git a/cms/src/service/cms_service.e b/cms/src/service/cms_service.e index 43ccad4..7dc0314 100644 --- a/cms/src/service/cms_service.e +++ b/cms/src/service/cms_service.e @@ -37,79 +37,88 @@ inherit SHARED_LOGGER create - make, - make_with_module_configurator + make feature {NONE} -- Initialization - make (a_setup: CMS_SETUP) - -- Build a a default service with a CMS_DEFAULT_MODULE_CONFIGURATOR + make (a_setup: CMS_SETUP; a_modules: CMS_MODULE_COLLECTION) + -- Build a a default service with a custom list of modules `a_modules' do setup := a_setup configuration := a_setup.configuration - create {CMS_DEFAULT_MODULE_CONFIGURATOR} modules.make (a_setup) - create {ARRAYED_LIST[WSF_FILTER]} filters.make (0) + modules := a_modules initialize end - make_with_module_configurator (a_setup: CMS_SETUP; a_module_configurator: CMS_MODULE_CONFIGURATOR) - -- Build a a default service with a custom CMS_MODULE_CONFIGURATOR - do - setup := a_setup - configuration := a_setup.configuration - modules := a_module_configurator - create {ARRAYED_LIST[WSF_FILTER]} filters.make (0) - initialize - end - - initialize + -- Initialize various parts of the CMS service. do + initialize_modules initialize_users initialize_auth_engine initialize_mailer initialize_router - initialize_modules initialize_filter end + initialize_modules + -- Intialize modules and keep only enabled modules. + local + l_module: CMS_MODULE + coll: CMS_MODULE_COLLECTION + do + log.write_debug (generator + ".initialize_modules") + create coll.make (modules.count) + across + modules as ic + loop + l_module := ic.item + if l_module.is_enabled then + coll.extend (l_module) + end + end + modules := coll + ensure + only_enabled_modules: across modules as ic all ic.item.is_enabled end + end + initialize_users + -- Initialize users. do end initialize_mailer + -- Initialize mailer engine. do to_implement ("To Implement mailer") end - setup_router - do - configure_api_root - end - - initialize_modules - -- Intialize modules, import router definitions - -- from enabled modules. - do - log.write_debug (generator + ".initialize_modules") - across - modules.modules as m - loop - if m.item.is_enabled then - router.import (m.item.router) - end - if attached m.item.filters as l_m_filters then - filters.append (l_m_filters) - end - end - configure_api_file_handler - end - initialize_auth_engine do to_implement ("To Implement authentication engine") end +feature -- Settings: router + + setup_router + -- + local + l_module: CMS_MODULE + do + log.write_debug (generator + ".setup_router") + -- Configure root of api handler. + configure_api_root + + -- Include routes from modules. + across + modules as ic + loop + l_module := ic.item + router.import (l_module.router) + end + -- Configure files handler. + configure_api_file_handler + end configure_api_root local @@ -143,7 +152,6 @@ feature -- Execute Filter execute_filter (req: WSF_REQUEST; res: WSF_RESPONSE) -- Execute the filter. do - res.put_header_line ("Date: " + (create {HTTP_DATE}.make_now_utc).string) execute_service (req, res) end @@ -154,17 +162,29 @@ feature -- Filters -- Create `filter'. local f, l_filter: detachable WSF_FILTER + l_module: CMS_MODULE do + log.write_debug (generator + ".create_filter") l_filter := Void -- Maintenance create {WSF_MAINTENANCE_FILTER} f f.set_next (l_filter) l_filter := f - if attached filters as l_filters then - across l_filters as c loop - c.item.set_next (l_filter) - l_filter := c.item + -- Include filters from modules + across + modules as ic + loop + l_module := ic.item + if + l_module.is_enabled and then + attached l_module.filters as l_m_filters + then + across l_m_filters as f_ic loop + f := f_ic.item + f.set_next (l_filter) + l_filter := f + end end end @@ -176,6 +196,8 @@ feature -- Filters local f: WSF_FILTER do + log.write_debug (generator + ".setup_filter") + from f := filter until @@ -190,36 +212,23 @@ feature -- Filters feature -- Access setup: CMS_SETUP - -- CMS setup. + -- CMS setup. configuration: CMS_CONFIGURATION - -- CMS configuration. - -- | Maybe we can compute it (using `setup') instead of using memory. + -- CMS configuration. + --| Maybe we can compute it (using `setup') instead of using memory. - modules: CMS_MODULE_CONFIGURATOR - -- Configurator of possible modules. - - filters: LIST[WSF_FILTER] - -- List of possible filters. - -feature -- Element Change: Modules - - add_module (a_module: CMS_MODULE) - -- Add a module `a_module' to the module configurator `a_module'. - do - modules.add_module (a_module) - end + modules: CMS_MODULE_COLLECTION + -- Configurator of possible modules. feature -- Execution execute_default (req: WSF_REQUEST; res: WSF_RESPONSE) -- Default request handler if no other are relevant - local do fixme ("To Implement") end - note copyright: "2011-2014, Jocelyn Fiat, Eiffel Software and others" license: "Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)" diff --git a/examples/roc_api/src/ewf_roc_server.e b/examples/roc_api/src/ewf_roc_server.e index caf08b2..50c1524 100644 --- a/examples/roc_api/src/ewf_roc_server.e +++ b/examples/roc_api/src/ewf_roc_server.e @@ -117,24 +117,27 @@ feature -- CMS Initialization initialize_cms (a_setup: CMS_SETUP) local cms: CMS_SERVICE + l_modules: CMS_MODULE_COLLECTION do log.write_debug (generator + ".initialize_cms") - create cms.make (a_setup) - setup_modules (cms) + + create {CMS_DEFAULT_MODULE_COLLECTION} l_modules.make (a_setup) + setup_modules (l_modules, a_setup) + + create cms.make (a_setup, l_modules) cms_service := cms end feature -- CMS setup - setup_modules (a_service: CMS_SERVICE) - -- Setup modules to be added to the CMS ecosystem. + setup_modules (a_modules: CMS_MODULE_COLLECTION; a_setup: CMS_SETUP) + -- Setup modules to be added to the available modules. local m: CMS_MODULE do - - create {NODE_MODULE} m.make (a_service.setup) + create {NODE_MODULE} m.make (a_setup) m.enable - a_service.add_module (m) + a_modules.extend (m) end setup_storage (a_setup: CMS_SETUP) From 6fc38272fe3f371c0d63cfc38b40bba4842434d9 Mon Sep 17 00:00:00 2001 From: Jocelyn Fiat Date: Wed, 8 Oct 2014 19:32:30 +0200 Subject: [PATCH 4/4] Merged back list of available modules in CMS_SETUP. --- cms/src/configuration/cms_custom_setup.e | 1 + cms/src/configuration/cms_default_setup.e | 29 ++++++++++ cms/src/configuration/cms_setup.e | 5 ++ .../default/cms_default_module_collection.e | 54 ------------------- cms/src/modules/node/node_module.e | 2 +- cms/src/service/cms_service.e | 15 +++--- examples/roc_api/src/ewf_roc_server.e | 11 ++-- 7 files changed, 48 insertions(+), 69 deletions(-) delete mode 100644 cms/src/modules/default/cms_default_module_collection.e diff --git a/cms/src/configuration/cms_custom_setup.e b/cms/src/configuration/cms_custom_setup.e index c8640b1..7aec82a 100644 --- a/cms/src/configuration/cms_custom_setup.e +++ b/cms/src/configuration/cms_custom_setup.e @@ -11,4 +11,5 @@ inherit create make + end diff --git a/cms/src/configuration/cms_default_setup.e b/cms/src/configuration/cms_default_setup.e index 015f35b..e1bf624 100644 --- a/cms/src/configuration/cms_default_setup.e +++ b/cms/src/configuration/cms_default_setup.e @@ -25,8 +25,11 @@ feature {NONE} -- Initialization initialize do configure + create modules.make (3) build_api_service build_mailer + + initialize_modules end configure @@ -45,8 +48,34 @@ feature {NONE} -- Initialization compute_theme_resource_location end + initialize_modules + local + m: CMS_MODULE + do +-- -- Core +-- create {USER_MODULE} m.make (Current) +-- m.enable +-- modules.extend (m) + +-- create {ADMIN_MODULE} m.make (Current) +-- m.enable +-- modules.extend (m) + + + create {BASIC_AUTH_MODULE} m.make (Current) + m.enable + modules.extend (m) + + create {NODE_MODULE} m.make (Current) + m.enable + modules.extend (m) + end + feature -- Access + modules: CMS_MODULE_COLLECTION + -- + is_html: BOOLEAN -- do diff --git a/cms/src/configuration/cms_setup.e b/cms/src/configuration/cms_setup.e index 244c940..f0af327 100644 --- a/cms/src/configuration/cms_setup.e +++ b/cms/src/configuration/cms_setup.e @@ -27,6 +27,11 @@ feature -- Access deferred end + modules: CMS_MODULE_COLLECTION + -- List of available modules. + deferred + end + feature -- Access: Site site_id: READABLE_STRING_8 diff --git a/cms/src/modules/default/cms_default_module_collection.e b/cms/src/modules/default/cms_default_module_collection.e deleted file mode 100644 index 24047bb..0000000 --- a/cms/src/modules/default/cms_default_module_collection.e +++ /dev/null @@ -1,54 +0,0 @@ -note - description: "Summary description for {CMS_DEFAULT_MODULE_COLLECTION}." - author: "" - date: "$Date$" - revision: "$Revision$" - -class - CMS_DEFAULT_MODULE_COLLECTION - -inherit - CMS_MODULE_COLLECTION - rename - make as make_with_capacity - end - -create - make - -feature {NONE} -- Initialization - - make (a_setup: CMS_SETUP) - do - make_with_capacity (3) - build_modules (a_setup) - end - -feature -- Configuration - - build_modules (a_setup: CMS_SETUP) - -- Core modules. (User, Admin, Node) - -- At the moment only node is supported. - local - m: CMS_MODULE - do --- -- Core --- create {USER_MODULE} m.make (a_setup) --- m.enable --- extend (m) - --- create {ADMIN_MODULE} m.make (a_setup) --- m.enable --- extend (m) - - - create {BASIC_AUTH_MODULE} m.make (a_setup) - m.enable - extend (m) - - create {NODE_MODULE} m.make (a_setup) - m.enable - extend (m) - end - -end diff --git a/cms/src/modules/node/node_module.e b/cms/src/modules/node/node_module.e index 683a8c0..1ecaea3 100644 --- a/cms/src/modules/node/node_module.e +++ b/cms/src/modules/node/node_module.e @@ -1,5 +1,5 @@ note - description: "Summary description for {CMS_MODULE}." + description: "CMS module that bring support for NODE management." date: "$Date$" revision: "$Revision$" diff --git a/cms/src/service/cms_service.e b/cms/src/service/cms_service.e index 7dc0314..37a4759 100644 --- a/cms/src/service/cms_service.e +++ b/cms/src/service/cms_service.e @@ -41,12 +41,11 @@ create feature {NONE} -- Initialization - make (a_setup: CMS_SETUP; a_modules: CMS_MODULE_COLLECTION) - -- Build a a default service with a custom list of modules `a_modules' + make (a_setup: CMS_SETUP) + -- Build a CMS service with `a_setup' configuration. do setup := a_setup configuration := a_setup.configuration - modules := a_modules initialize end @@ -65,19 +64,19 @@ feature {NONE} -- Initialization -- Intialize modules and keep only enabled modules. local l_module: CMS_MODULE - coll: CMS_MODULE_COLLECTION + l_available_modules: CMS_MODULE_COLLECTION do log.write_debug (generator + ".initialize_modules") - create coll.make (modules.count) + l_available_modules := setup.modules + create modules.make (l_available_modules.count) across - modules as ic + l_available_modules as ic loop l_module := ic.item if l_module.is_enabled then - coll.extend (l_module) + modules.extend (l_module) end end - modules := coll ensure only_enabled_modules: across modules as ic all ic.item.is_enabled end end diff --git a/examples/roc_api/src/ewf_roc_server.e b/examples/roc_api/src/ewf_roc_server.e index 50c1524..1e02a20 100644 --- a/examples/roc_api/src/ewf_roc_server.e +++ b/examples/roc_api/src/ewf_roc_server.e @@ -121,23 +121,22 @@ feature -- CMS Initialization do log.write_debug (generator + ".initialize_cms") - create {CMS_DEFAULT_MODULE_COLLECTION} l_modules.make (a_setup) - setup_modules (l_modules, a_setup) + setup_modules (a_setup) - create cms.make (a_setup, l_modules) + create cms.make (a_setup) cms_service := cms end feature -- CMS setup - setup_modules (a_modules: CMS_MODULE_COLLECTION; a_setup: CMS_SETUP) - -- Setup modules to be added to the available modules. + setup_modules (a_setup: CMS_SETUP) + -- Setup additional modules. local m: CMS_MODULE do create {NODE_MODULE} m.make (a_setup) m.enable - a_modules.extend (m) + a_setup.modules.extend (m) end setup_storage (a_setup: CMS_SETUP)