diff --git a/api/roc_api.ecf b/api/roc_api.ecf
index abec5e6..ab56bd2 100644
--- a/api/roc_api.ecf
+++ b/api/roc_api.ecf
@@ -16,7 +16,7 @@
-
+
diff --git a/persistence/persistence.ecf b/persistence/implementation/mysql/persistence_mysql.ecf
similarity index 81%
rename from persistence/persistence.ecf
rename to persistence/implementation/mysql/persistence_mysql.ecf
index e3b2f16..c3190a8 100644
--- a/persistence/persistence.ecf
+++ b/persistence/implementation/mysql/persistence_mysql.ecf
@@ -1,6 +1,6 @@
-
-
+
+
diff --git a/persistence/scripts/Readme.txt b/persistence/implementation/mysql/scripts/Readme.txt
similarity index 100%
rename from persistence/scripts/Readme.txt
rename to persistence/implementation/mysql/scripts/Readme.txt
diff --git a/persistence/scripts/create_database.sql b/persistence/implementation/mysql/scripts/create_database.sql
similarity index 97%
rename from persistence/scripts/create_database.sql
rename to persistence/implementation/mysql/scripts/create_database.sql
index 06d4fd0..55dffb4 100644
--- a/persistence/scripts/create_database.sql
+++ b/persistence/implementation/mysql/scripts/create_database.sql
@@ -12,7 +12,7 @@ USE `cms` ;
-- Table `cms`.`nodes`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `cms`.`nodes` (
- `id` SMALLINT(5) UNSIGNED NOT NULL AUTO_INCREMENT,
+ `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`publication_date` DATE NOT NULL,
`creation_date` DATE NOT NULL,
`modification_date` DATE NOT NULL,
@@ -59,7 +59,7 @@ DEFAULT CHARACTER SET = latin1;
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `cms`.`users_nodes` (
`users_id` INT(10) UNSIGNED NOT NULL,
- `nodes_id` SMALLINT(5) UNSIGNED NOT NULL,
+ `nodes_id` INT(10) UNSIGNED NOT NULL,
PRIMARY KEY (`users_id`, `nodes_id`),
INDEX `fk_users_has_nodes_nodes1_idx` (`nodes_id` ASC),
INDEX `fk_users_has_nodes_users_idx` (`users_id` ASC),
diff --git a/persistence/scripts/tables.sql b/persistence/implementation/mysql/scripts/tables.sql
similarity index 100%
rename from persistence/scripts/tables.sql
rename to persistence/implementation/mysql/scripts/tables.sql
diff --git a/persistence/src/cms_storage_mysql.e b/persistence/implementation/mysql/src/cms_storage_mysql.e
similarity index 100%
rename from persistence/src/cms_storage_mysql.e
rename to persistence/implementation/mysql/src/cms_storage_mysql.e
diff --git a/persistence/src/database/data_parameters_names.e b/persistence/implementation/mysql/src/database/data_parameters_names.e
similarity index 100%
rename from persistence/src/database/data_parameters_names.e
rename to persistence/implementation/mysql/src/database/data_parameters_names.e
diff --git a/persistence/src/database/database_config.e b/persistence/implementation/mysql/src/database/database_config.e
similarity index 100%
rename from persistence/src/database/database_config.e
rename to persistence/implementation/mysql/src/database/database_config.e
diff --git a/persistence/src/database/database_connection.e b/persistence/implementation/mysql/src/database/database_connection.e
similarity index 100%
rename from persistence/src/database/database_connection.e
rename to persistence/implementation/mysql/src/database/database_connection.e
diff --git a/persistence/src/database/database_connection_mysql.e b/persistence/implementation/mysql/src/database/database_connection_mysql.e
similarity index 100%
rename from persistence/src/database/database_connection_mysql.e
rename to persistence/implementation/mysql/src/database/database_connection_mysql.e
diff --git a/persistence/src/database/database_connection_null.e b/persistence/implementation/mysql/src/database/database_connection_null.e
similarity index 100%
rename from persistence/src/database/database_connection_null.e
rename to persistence/implementation/mysql/src/database/database_connection_null.e
diff --git a/persistence/src/database/database_handler.e b/persistence/implementation/mysql/src/database/database_handler.e
similarity index 100%
rename from persistence/src/database/database_handler.e
rename to persistence/implementation/mysql/src/database/database_handler.e
diff --git a/persistence/src/database/database_handler_impl.e b/persistence/implementation/mysql/src/database/database_handler_impl.e
similarity index 100%
rename from persistence/src/database/database_handler_impl.e
rename to persistence/implementation/mysql/src/database/database_handler_impl.e
diff --git a/persistence/src/database/database_iteration_cursor.e b/persistence/implementation/mysql/src/database/database_iteration_cursor.e
similarity index 100%
rename from persistence/src/database/database_iteration_cursor.e
rename to persistence/implementation/mysql/src/database/database_iteration_cursor.e
diff --git a/persistence/src/database/database_null.e b/persistence/implementation/mysql/src/database/database_null.e
similarity index 100%
rename from persistence/src/database/database_null.e
rename to persistence/implementation/mysql/src/database/database_null.e
diff --git a/persistence/src/database/database_query.e b/persistence/implementation/mysql/src/database/database_query.e
similarity index 100%
rename from persistence/src/database/database_query.e
rename to persistence/implementation/mysql/src/database/database_query.e
diff --git a/persistence/src/database/database_sql_server_encoder.e b/persistence/implementation/mysql/src/database/database_sql_server_encoder.e
similarity index 100%
rename from persistence/src/database/database_sql_server_encoder.e
rename to persistence/implementation/mysql/src/database/database_sql_server_encoder.e
diff --git a/persistence/src/database/database_store_procedure.e b/persistence/implementation/mysql/src/database/database_store_procedure.e
similarity index 100%
rename from persistence/src/database/database_store_procedure.e
rename to persistence/implementation/mysql/src/database/database_store_procedure.e
diff --git a/persistence/src/database/parameter_name_helper.e b/persistence/implementation/mysql/src/database/parameter_name_helper.e
similarity index 100%
rename from persistence/src/database/parameter_name_helper.e
rename to persistence/implementation/mysql/src/database/parameter_name_helper.e
diff --git a/persistence/src/model/cms_node.e b/persistence/implementation/mysql/src/model/cms_node.e
similarity index 100%
rename from persistence/src/model/cms_node.e
rename to persistence/implementation/mysql/src/model/cms_node.e
diff --git a/persistence/src/model/cms_user.e b/persistence/implementation/mysql/src/model/cms_user.e
similarity index 100%
rename from persistence/src/model/cms_user.e
rename to persistence/implementation/mysql/src/model/cms_user.e
diff --git a/persistence/src/provider/node_data_provider.e b/persistence/implementation/mysql/src/provider/node_data_provider.e
similarity index 100%
rename from persistence/src/provider/node_data_provider.e
rename to persistence/implementation/mysql/src/provider/node_data_provider.e
diff --git a/persistence/src/provider/user_data_provider.e b/persistence/implementation/mysql/src/provider/user_data_provider.e
similarity index 100%
rename from persistence/src/provider/user_data_provider.e
rename to persistence/implementation/mysql/src/provider/user_data_provider.e
diff --git a/persistence/src/security/security_provider.e b/persistence/implementation/mysql/src/security/security_provider.e
similarity index 100%
rename from persistence/src/security/security_provider.e
rename to persistence/implementation/mysql/src/security/security_provider.e
diff --git a/persistence/src/string_helper.e b/persistence/implementation/mysql/src/string_helper.e
similarity index 100%
rename from persistence/src/string_helper.e
rename to persistence/implementation/mysql/src/string_helper.e
diff --git a/persistence/tests/application.e b/persistence/implementation/mysql/tests/application.e
similarity index 100%
rename from persistence/tests/application.e
rename to persistence/implementation/mysql/tests/application.e
diff --git a/persistence/implementation/mysql/tests/nodes/node_test_set.e b/persistence/implementation/mysql/tests/nodes/node_test_set.e
new file mode 100644
index 0000000..b7146ee
--- /dev/null
+++ b/persistence/implementation/mysql/tests/nodes/node_test_set.e
@@ -0,0 +1,26 @@
+note
+ description: "[
+ Eiffel tests that can be executed by testing tool.
+ ]"
+ author: "EiffelStudio test wizard"
+ date: "$Date$"
+ revision: "$Revision$"
+ testing: "type/manual"
+
+class
+ NODE_TEST_SET
+
+inherit
+ EQA_TEST_SET
+
+feature -- Test routines
+
+ new_test_routine
+ -- New test routine
+ do
+ assert ("not_implemented", False)
+ end
+
+end
+
+
diff --git a/persistence/tests/tests.ecf b/persistence/implementation/mysql/tests/tests.ecf
similarity index 93%
rename from persistence/tests/tests.ecf
rename to persistence/implementation/mysql/tests/tests.ecf
index 30118d7..cf85bf2 100644
--- a/persistence/tests/tests.ecf
+++ b/persistence/implementation/mysql/tests/tests.ecf
@@ -8,7 +8,7 @@
-
+
diff --git a/persistence/implementation/mysql/tests/users/user_test_set.e b/persistence/implementation/mysql/tests/users/user_test_set.e
new file mode 100644
index 0000000..6b06e9f
--- /dev/null
+++ b/persistence/implementation/mysql/tests/users/user_test_set.e
@@ -0,0 +1,78 @@
+note
+ description: "[
+ Eiffel tests that can be executed by testing tool.
+ ]"
+ author: "EiffelStudio test wizard"
+ date: "$Date$"
+ revision: "$Revision$"
+ testing: "type/manual"
+
+class
+ USER_TEST_SET
+
+inherit
+ EQA_TEST_SET
+ redefine
+ on_prepare,
+ on_clean
+ select
+ default_create
+ end
+ ABSTRACT_DB_TEST
+ rename
+ default_create as default_db_test
+ end
+
+
+feature {NONE} -- Events
+
+ on_prepare
+ --
+ do
+ (create {CLEAN_DB}).clean_db(connection)
+ user_provider.new_user ("admin", "admin","admin@admin.com")
+ end
+
+ on_clean
+ --
+ do
+ end
+
+feature -- Test routines
+
+ test_user_exist
+ -- User admin exist
+ do
+ assert ("Not void", attached user_provider.user_by_email ("admin@admin.com"))
+ assert ("Not void", attached user_provider.user (1))
+ assert ("Not void", attached user_provider.user_by_name ("admin"))
+ end
+
+ test_user_not_exist
+ -- Uset test does not exist.
+ do
+ assert ("Void", user_provider.user_by_email ("test@admin.com") = Void)
+ assert ("Void", user_provider.user(2) = Void )
+ assert ("Void", user_provider.user_by_name ("test") = Void)
+ end
+
+ test_new_user
+ do
+ user_provider.new_user ("test", "test","test@admin.com")
+ assert ("Not void", attached user_provider.user_by_email ("test@admin.com"))
+ assert ("Not void", attached user_provider.user (2))
+ assert ("Not void", attached user_provider.user (2) as l_user and then l_user.id = 2 and then l_user.name ~ "test")
+ assert ("Not void", attached user_provider.user_by_name ("test"))
+ end
+
+
+feature {NONE} -- Implementation
+
+ user_provider: USER_DATA_PROVIDER
+ -- user provider.
+ once
+ create Result.make (connection)
+ end
+end
+
+
diff --git a/persistence/implementation/mysql/tests/util/abstract_db_test.e b/persistence/implementation/mysql/tests/util/abstract_db_test.e
new file mode 100644
index 0000000..0e23859
--- /dev/null
+++ b/persistence/implementation/mysql/tests/util/abstract_db_test.e
@@ -0,0 +1,17 @@
+note
+ description: "Summary description for {ABSTRACT_DB_TEST}."
+ date: "$Date$"
+ revision: "$Revision$"
+
+class
+ ABSTRACT_DB_TEST
+
+
+feature -- Database connection
+
+ connection: DATABASE_CONNECTION_MYSQL
+ -- MYSQL database connection
+ once
+ create Result.login_with_schema ("cms_dev", "root", "")
+ end
+end
diff --git a/persistence/implementation/mysql/tests/util/clean_db.e b/persistence/implementation/mysql/tests/util/clean_db.e
new file mode 100644
index 0000000..ef00839
--- /dev/null
+++ b/persistence/implementation/mysql/tests/util/clean_db.e
@@ -0,0 +1,66 @@
+note
+ description: "[
+ Setting up database tests
+ 1. Put the database in a known state before running your test suite.
+ 2. Data reinitialization. For testing in developer sandboxes, something that you should do every time you rebuild the system, you may want to forgo dropping and rebuilding the database in favor of simply reinitializing the source data.
+ You can do this either by erasing all existing data and then inserting the initial data vales back into the database, or you can simple run updates to reset the data values.
+ The first approach is less risky and may even be faster for large amounts of data. - See more at: http://www.agiledata.org/essays/databaseTesting.html#sthash.6yVp35g8.dpuf
+ ]"
+
+ date: "$Date$"
+ revision: "$Revision$"
+ EIS: "name=Database Testing", "src=http://www.agiledata.org/essays/databaseTesting.html", "protocol=uri"
+
+class
+ CLEAN_DB
+
+feature
+
+ clean_db (a_connection: DATABASE_CONNECTION)
+ -- Clean db test.
+ local
+ l_parameters: STRING_TABLE[STRING]
+ do
+ create l_parameters.make (0)
+
+ db_handler(a_connection).set_query (create {DATABASE_QUERY}.data_reader (Sql_delete_nodes, l_parameters))
+ db_handler(a_connection).execute_change
+
+ -- Clean Users
+ db_handler(a_connection).set_query (create {DATABASE_QUERY}.data_reader (Sql_delete_users, l_parameters))
+ db_handler(a_connection).execute_change
+
+ -- Reset Autoincremente
+ db_handler(a_connection).set_query (create {DATABASE_QUERY}.data_reader (Rest_users_autoincrement, l_parameters))
+ db_handler(a_connection).execute_change
+
+ db_handler(a_connection).set_query (create {DATABASE_QUERY}.data_reader (Rest_nodes_autoincrement, l_parameters))
+ db_handler(a_connection).execute_change
+ end
+
+
+
+feature -- Database Hanlder
+
+ db_handler (a_connection: DATABASE_CONNECTION): DATABASE_HANDLER
+ -- Db handler
+ once
+ create {DATABASE_HANDLER_IMPL} Result.make (a_connection)
+ end
+
+
+feature -- Sql delete queries
+
+ Sql_delete_users: STRING = "delete from Users"
+ -- Clean Users.
+
+ Sql_delete_nodes: STRING = "delete from Nodes"
+ -- Clean Nodes.
+
+ Rest_users_autoincrement: STRING = "ALTER TABLE Users AUTO_INCREMENT = 1"
+ -- reset autoincrement
+
+ Rest_nodes_autoincrement: STRING = "ALTER TABLE Nodes AUTO_INCREMENT = 1"
+ -- reset autoincrement.
+
+end
diff --git a/persistence/src/cms_storage.e b/persistence/interface/cms_storage.e
similarity index 100%
rename from persistence/src/cms_storage.e
rename to persistence/interface/cms_storage.e