Made persistence design more flexible, and no requirement on mysql by default.

This commit is contained in:
2015-01-19 19:20:42 +01:00
parent db9e40cec4
commit 4dcc1b0e04
15 changed files with 167 additions and 53 deletions

View File

@@ -1,166 +0,0 @@
note
description: "Summary description for {CMS_STORAGE_NULL}."
date: "$Date$"
revision: "$Revision$"
class
CMS_STORAGE_NULL
inherit
CMS_STORAGE
redefine
default_create
select
default_create
end
REFACTORING_HELPER
rename
default_create as default_create_rh
end
feature -- Initialization
default_create
do
create error_handler.make
end
feature -- Access: user
has_user: BOOLEAN
-- Has any user?
do
end
all_users: LIST [CMS_USER]
do
create {ARRAYED_LIST[CMS_USER]} Result.make (0)
end
user_by_id (a_id: like {CMS_USER}.id): detachable CMS_USER
do
end
user_by_name (a_name: like {CMS_USER}.name): detachable CMS_USER
do
end
user_by_email (a_email: like {CMS_USER}.email): detachable CMS_USER
do
end
is_valid_credential (l_auth_login, l_auth_password: READABLE_STRING_32): BOOLEAN
do
end
feature -- User Nodes
user_collaborator_nodes (a_id: like {CMS_USER}.id): LIST[CMS_NODE]
-- Possible list of nodes where the user identified by `a_id', is a collaborator.
do
create {ARRAYED_LIST[CMS_NODE]} Result.make (0)
end
user_author_nodes (a_id: like {CMS_USER}.id): LIST[CMS_NODE]
-- Possible list of nodes where the user identified by `a_id', is the author.
do
create {ARRAYED_LIST[CMS_NODE]} Result.make (0)
end
feature -- Change: user
save_user (a_user: CMS_USER)
-- Add a new user `a_user'.
do
end
feature -- Access: roles and permissions
user_role_by_id (a_id: like {CMS_USER_ROLE}.id): detachable CMS_USER_ROLE
do
end
user_roles: LIST [CMS_USER_ROLE]
do
create {ARRAYED_LIST[CMS_USER_ROLE]} Result.make (0)
end
feature -- Change: roles and permissions
save_user_role (a_user_role: CMS_USER_ROLE)
do
end
feature -- Access: node
nodes: LIST[CMS_NODE]
-- List of nodes.
do
create {ARRAYED_LIST[CMS_NODE]} Result.make (0)
end
recent_nodes (a_lower: INTEGER; a_count: INTEGER): LIST [CMS_NODE]
-- List of the `a_count' most recent nodes, starting from `a_lower'.
do
create {ARRAYED_LIST[CMS_NODE]} Result.make (0)
end
node (a_id: INTEGER_64): detachable CMS_NODE
-- <Precursor>
do
end
node_author (a_id: like {CMS_NODE}.id): detachable CMS_USER
-- Node's author. if any.
do
end
node_collaborators (a_id: like {CMS_NODE}.id): LIST [CMS_USER]
-- Possible list of node's collaborator.
do
create {ARRAYED_LIST[CMS_USER]} Result.make (0)
end
feature -- Node
save_node (a_node: CMS_NODE)
-- Add a new node
do
end
delete_node (a_id: INTEGER_64)
-- <Precursor>
do
end
update_node (a_id: like {CMS_NODE}.id; a_node: CMS_NODE)
-- <Precursor>
do
end
update_node_title (a_id: like {CMS_NODE}.id; a_node_id: like {CMS_NODE}.id; a_title: READABLE_STRING_32)
-- <Precursor>
do
end
update_node_summary (a_id: like {CMS_NODE}.id; a_node_id: like {CMS_NODE}.id; a_summary: READABLE_STRING_32)
-- <Precursor>
do
end
update_node_content (a_id: like {CMS_NODE}.id; a_node_id: like {CMS_NODE}.id; a_content: READABLE_STRING_32)
-- <Precursor>
do
end
feature -- User
new_user (a_user: CMS_USER)
-- Add a new user `a_user'.
do
end
end

View File

@@ -45,14 +45,14 @@ feature -- Functionality Store Procedures
execute_store_reader
-- Execute a `store' to read data.
require
store_not_void: store /= void
store_not_void: store /= Void
deferred
end
execute_store_writer
-- Execute a `store' to write data.
require
store_not_void: store /= void
store_not_void: store /= Void
deferred
end
@@ -61,14 +61,14 @@ feature -- SQL Queries
execute_query
-- Execute sql query, the read data from the database.
require
query_not_void: query /= void
query_not_void: query /= Void
deferred
end
execute_change
-- Execute sql query that update/add data.
require
query_not_void: query /= void
query_not_void: query /= Void
deferred
end

View File

@@ -7,6 +7,7 @@
</option>
<setting name="console_application" value="true"/>
<library name="base" location="$ISE_LIBRARY\library\base\base-safe.ecf"/>
<library name="cms" location="..\..\..\..\cms-safe.ecf"/>
<library name="crypto" location="$ISE_LIBRARY\unstable\library\text\encryption\crypto\crypto-safe.ecf"/>
<library name="encoder" location="$ISE_LIBRARY\contrib\library\web\framework\ewf\text\encoder\encoder-safe.ecf"/>
<library name="error" location="$ISE_LIBRARY\contrib\library\utility\general\error\error-safe.ecf"/>
@@ -23,7 +24,6 @@
<exclude>/database/database_connection_odbc.e</exclude>
</file_rule>
</cluster>
<cluster name="interface" location="..\..\interface\" recursive="true"/>
<cluster name="persistence_mysql" location=".\src\" recursive="true">
<file_rule>
<exclude>/EIFGENs$</exclude>

View File

@@ -0,0 +1,35 @@
note
description: "[
Objects that ...
]"
author: "$Author$"
date: "$Date$"
revision: "$Revision$"
class
CMS_STORAGE_MYSQL_BUILDER
inherit
CMS_STORAGE_BUILDER
create
make
feature {NONE} -- Initialization
make
-- Initialize `Current'.
do
end
feature -- Factory
storage (a_setup: CMS_SETUP): detachable CMS_STORAGE_MYSQL
do
if attached (create {APPLICATION_JSON_CONFIGURATION_HELPER}).new_database_configuration (a_setup.layout.application_config_path) as l_database_config then
create Result.make (create {DATABASE_CONNECTION_MYSQL}.login_with_connection_string (l_database_config.connection_string))
end
end
end

View File

@@ -1,261 +0,0 @@
note
description : "[
CMS interface to storage
]"
date : "$Date$"
revision : "$Revision$"
deferred class
CMS_STORAGE
inherit
SHARED_LOGGER
feature {NONE} -- Initialization
initialize
do
end
feature -- Error Handling
error_handler: ERROR_HANDLER
-- Error handler.
feature -- Access: user
has_user: BOOLEAN
-- Has any user?
deferred
end
all_users: LIST [CMS_USER]
-- Possible list of users.
deferred
end
user_by_id (a_id: like {CMS_USER}.id): detachable CMS_USER
-- User with id `a_id', if any.
require
a_id > 0
deferred
ensure
same_id: Result /= Void implies Result.id = a_id
password: Result /= Void implies Result.password /= Void
end
user_by_name (a_name: like {CMS_USER}.name): detachable CMS_USER
-- User with name `a_name', if any.
require
a_name /= Void and then not a_name.is_empty
deferred
ensure
same_name: Result /= Void implies a_name ~ Result.name
password: Result /= Void implies Result.password /= Void
end
user_by_email (a_email: like {CMS_USER}.email): detachable CMS_USER
-- User with name `a_email', if any.
deferred
ensure
same_email: Result /= Void implies a_email ~ Result.email
password: Result /= Void implies Result.password /= Void
end
is_valid_credential (a_u, a_p: READABLE_STRING_32): BOOLEAN
-- Does account with username `a_username' and password `a_password' exist?
deferred
end
feature -- User Nodes
user_collaborator_nodes (a_id: like {CMS_USER}.id): LIST[CMS_NODE]
-- Possible list of nodes where the user identified by `a_id', is a collaborator.
require
a_id > 0
deferred
end
user_author_nodes (a_id: like {CMS_USER}.id): LIST[CMS_NODE]
-- Possible list of nodes where the user identified by `a_id', is the author.
require
a_id > 0
deferred
end
feature -- Change: user
save_user (a_user: CMS_USER)
-- Save user `a_user'.
deferred
end
feature -- Access: roles and permissions
user_has_permission (u: detachable CMS_USER; s: detachable READABLE_STRING_8): BOOLEAN
-- Anonymous or user `u' has permission for `s' ?
--| `s' could be "create page",
do
-- if s = Void then
-- Result := True
-- elseif u = Void then
---- Result := user_role_has_permission (anonymous_user_role, s)
-- else
-- Result := user_role_has_permission (authenticated_user_role, s)
-- if not Result and attached u.roles as l_roles then
-- across
-- l_roles as r
-- until
-- Result
-- loop
-- if attached user_role_by_id (r.item) as ur then
-- Result := user_role_has_permission (ur, s)
-- end
-- end
-- end
-- end
end
user_role_has_permission (a_role: CMS_USER_ROLE; s: READABLE_STRING_8): BOOLEAN
do
Result := a_role.has_permission (s)
end
user_role_by_id (a_id: like {CMS_USER_ROLE}.id): detachable CMS_USER_ROLE
-- User role by id `a_id', if any.
deferred
end
user_roles: LIST [CMS_USER_ROLE]
-- Possible list of user roles.
deferred
end
feature -- Change: roles and permissions
save_user_role (a_user_role: CMS_USER_ROLE)
-- Save user role `a_user_role'
deferred
end
feature -- Email
-- save_email (a_email: NOTIFICATION_EMAIL)
-- deferred
-- end
--feature -- Log
-- recent_logs (a_lower: INTEGER; a_count: INTEGER): LIST [CMS_LOG]
-- deferred
-- end
-- log (a_id: like {CMS_LOG}.id): detachable CMS_LOG
-- require
-- a_id > 0
-- deferred
-- end
-- save_log (a_log: CMS_LOG)
-- deferred
-- end
feature -- Access: Node
recent_nodes (a_lower: INTEGER; a_count: INTEGER): LIST [CMS_NODE]
-- List of recent `a_count' nodes with an offset of `lower'.
deferred
end
node (a_id: INTEGER_64): detachable CMS_NODE
-- Retrieve node by id `a_id', if any.
require
a_id > 0
deferred
end
node_author (a_id: like {CMS_NODE}.id): detachable CMS_USER
-- Node's author. if any.
require
valid_node: a_id >0
deferred
end
node_collaborators (a_id: like {CMS_NODE}.id): LIST [CMS_USER]
-- Possible list of node's collaborator.
require
valid_node: a_id > 0
deferred
end
feature -- Change: Node
save_node (a_node: CMS_NODE)
-- Save node `a_node'.
require
valid_user: attached a_node.author as l_author and then l_author.id > 0
deferred
end
delete_node (a_id: INTEGER_64)
-- Remove node by id `a_id'.
require
valid_node_id: a_id > 0
deferred
end
update_node (a_id: like {CMS_USER}.id; a_node: CMS_NODE)
-- Update node content `a_node'.
-- The user `a_id' is an existing or new collaborator.
require
valid_node_id: a_node.id > 0
valid_user_id: a_id > 0
deferred
end
update_node_title (a_id: like {CMS_USER}.id; a_node_id: like {CMS_NODE}.id; a_title: READABLE_STRING_32)
-- Update node title to `a_title', node identified by id `a_node_id'.
-- The user `a_id' is an existing or new collaborator.
require
valid_node_id: a_node_id > 0
valid_user_id: a_id > 0
deferred
end
update_node_summary (a_id: like {CMS_USER}.id; a_node_id: like {CMS_NODE}.id; a_summary: READABLE_STRING_32)
-- Update node summary to `a_summary', node identified by id `a_node_id'.
-- The user `a_id' is an existing or new collaborator.
require
valid_id: a_node_id > 0
deferred
end
update_node_content (a_id: like {CMS_USER}.id; a_node_id: like {CMS_NODE}.id; a_content: READABLE_STRING_32)
-- Update node content to `a_content', node identified by id `a_node_id'.
-- The user `a_id' is an existing or new collaborator.
require
valid_id: a_node_id > 0
valid_user_id: a_id > 0
deferred
end
--feature -- Misc
-- set_custom_value (a_name: READABLE_STRING_8; a_value: attached like custom_value; a_type: READABLE_STRING_8)
-- -- Save data `a_name:a_value' for type `a_type'
-- deferred
-- end
-- custom_value (a_name: READABLE_STRING_8; a_type: READABLE_STRING_8): detachable TABLE_ITERABLE [READABLE_STRING_8, STRING_8]
-- -- Data for name `a_name' and type `a_type'.
-- deferred
-- end
-- custom_value_names_where (a_where_key, a_where_value: READABLE_STRING_8; a_type: READABLE_STRING_8): detachable LIST [READABLE_STRING_8]
-- -- Names where custom value has item `a_where_key' same as `a_where_value' for type `a_type'.
-- deferred
-- end
end