From b4f6fbb189d5a2ad892f5d8164702fad67fcd68b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Graczyk?= <224301@edu.p.lodz.pl> Date: Thu, 15 Apr 2021 21:06:51 +0200 Subject: [PATCH] Final version added. --- .idea/.gitignore | 8 + .idea/.name | 1 + .idea/compiler.xml | 19 + .idea/encodings.xml | 8 + .idea/jarRepositories.xml | 20 + .idea/libraries/Maven__antlr_antlr_2_7_2.xml | 13 + ..._ch_ethz_ganymed_ganymed_ssh2_build210.xml | 13 + ...n__classworlds_classworlds_1_1_alpha_2.xml | 13 + .../Maven__com_fasterxml_classmate_1_5_1.xml | 13 + .../Maven__com_ibm_icu_icu4j_61_1.xml | 13 + ...un_istack_istack_commons_runtime_3_0_7.xml | 13 + ...sun_xml_fastinfoset_FastInfoset_1_2_15.xml | 13 + ...mons_beanutils_commons_beanutils_1_9_2.xml | 13 + ...Maven__commons_chain_commons_chain_1_1.xml | 13 + ...Maven__commons_codec_commons_codec_1_6.xml | 13 + ...ns_collections_commons_collections_3_1.xml | 13 + ...ommons_digester_commons_digester_1_8_1.xml | 13 + .../Maven__commons_io_commons_io_2_2.xml | 13 + .../Maven__commons_lang_commons_lang_2_6.xml | 13 + ...n__commons_logging_commons_logging_1_2.xml | 13 + ...ommons_validator_commons_validator_1_6.xml | 13 + .idea/libraries/Maven__dom4j_dom4j_1_1.xml | 13 + ..._activation_javax_activation_api_1_2_0.xml | 13 + ..._persistence_javax_persistence_api_2_2.xml | 13 + .../Maven__javax_xml_bind_jaxb_api_2_3_1.xml | 13 + .idea/libraries/Maven__junit_junit_3_8_1.xml | 13 + ...Maven__net_bytebuddy_byte_buddy_1_10_7.xml | 13 + ...layout_org_abego_treelayout_core_1_0_3.xml | 13 + .idea/libraries/Maven__org_antlr_ST4_4_3.xml | 13 + .../Maven__org_antlr_antlr4_4_8_1.xml | 13 + .../Maven__org_antlr_antlr4_runtime_4_8_1.xml | 13 + .../Maven__org_antlr_antlr_runtime_3_5_2.xml | 13 + .../Maven__org_apache_bcel_bcel_6_2.xml | 13 + ...__org_apache_commons_commons_lang3_3_5.xml | 13 + ...apache_httpcomponents_httpclient_4_0_2.xml | 13 + ...g_apache_httpcomponents_httpcore_4_0_1.xml | 13 + ..._apache_logging_log4j_log4j_api_2_13_3.xml | 13 + ...apache_logging_log4j_log4j_core_2_13_3.xml | 13 + ..._org_apache_maven_doxia_doxia_core_1_8.xml | 13 + ...ven_doxia_doxia_decoration_model_1_8_1.xml | 13 + ...en_doxia_doxia_integration_tools_1_8_1.xml | 13 + ...ache_maven_doxia_doxia_logging_api_1_8.xml | 13 + ...che_maven_doxia_doxia_module_xhtml_1_8.xml | 13 + ..._apache_maven_doxia_doxia_sink_api_1_8.xml | 13 + ..._maven_doxia_doxia_site_renderer_1_8_1.xml | 13 + ...che_maven_doxia_doxia_skin_model_1_8_1.xml | 13 + ...apache_maven_maven_aether_provider_3_0.xml | 13 + ...n__org_apache_maven_maven_artifact_3_0.xml | 13 + ...Maven__org_apache_maven_maven_core_3_0.xml | 13 + ...aven__org_apache_maven_maven_model_3_0.xml | 13 + ...g_apache_maven_maven_model_builder_3_0.xml | 13 + ..._org_apache_maven_maven_plugin_api_3_0.xml | 13 + ...he_maven_maven_repository_metadata_3_0.xml | 13 + ...n__org_apache_maven_maven_settings_3_0.xml | 13 + ...pache_maven_maven_settings_builder_3_0.xml | 13 + ...aven_project_info_reports_plugin_3_0_0.xml | 13 + ...aven_reporting_maven_reporting_api_3_0.xml | 13 + ...n_reporting_maven_reporting_impl_3_0_0.xml | 13 + ..._apache_maven_scm_maven_scm_api_1_10_0.xml | 13 + ...en_scm_maven_scm_manager_plexus_1_10_0.xml | 13 + ..._maven_scm_provider_cvs_commons_1_10_0.xml | 13 + ...n_scm_maven_scm_provider_cvsexe_1_10_0.xml | 13 + ..._scm_maven_scm_provider_cvsjava_1_10_0.xml | 13 + ..._maven_scm_provider_git_commons_1_10_0.xml | 13 + ...n_scm_maven_scm_provider_gitexe_1_10_0.xml | 13 + ...maven_scm_maven_scm_provider_hg_1_10_0.xml | 13 + ...scm_maven_scm_provider_perforce_1_10_0.xml | 13 + ...scm_maven_scm_provider_starteam_1_10_0.xml | 13 + ..._maven_scm_provider_svn_commons_1_10_0.xml | 13 + ...n_scm_maven_scm_provider_svnexe_1_10_0.xml | 13 + ...n_shared_maven_artifact_transfer_0_9_1.xml | 13 + ...ed_maven_common_artifact_filters_3_0_1.xml | 13 + ...maven_shared_maven_dependency_tree_2_2.xml | 13 + ...ache_maven_shared_maven_shared_jar_1_2.xml | 13 + ..._maven_shared_maven_shared_utils_3_2_0.xml | 13 + ...ven_wagon_wagon_http_lightweight_3_1_0.xml | 13 + ...he_maven_wagon_wagon_http_shared_3_1_0.xml | 13 + ...e_maven_wagon_wagon_provider_api_3_1_0.xml | 13 + ...n__org_apache_struts_struts_core_1_3_8.xml | 13 + ..._org_apache_struts_struts_taglib_1_3_8.xml | 13 + ...__org_apache_struts_struts_tiles_1_3_8.xml | 13 + ...aven__org_apache_velocity_velocity_1_7.xml | 13 + ...org_apache_velocity_velocity_tools_2_0.xml | 13 + ..._org_apiguardian_apiguardian_api_1_1_0.xml | 13 + ...dehaus_plexus_plexus_classworlds_2_2_3.xml | 13 + ...xus_plexus_component_annotations_1_5_5.xml | 13 + ...s_plexus_container_default_1_0_alpha_8.xml | 13 + ..._org_codehaus_plexus_plexus_digest_1_0.xml | 13 + ...odehaus_plexus_plexus_i18n_1_0_beta_10.xml | 13 + ...ehaus_plexus_plexus_interpolation_1_25.xml | 13 + ...org_codehaus_plexus_plexus_utils_3_1_0.xml | 13 + ...rg_codehaus_plexus_plexus_velocity_1_2.xml | 13 + .../Maven__org_dom4j_dom4j_2_1_3.xml | 13 + ...rg_eclipse_aether_aether_util_0_9_0_M2.xml | 13 + .../Maven__org_glassfish_javax_json_1_0_4.xml | 13 + ..._org_glassfish_jaxb_jaxb_runtime_2_3_1.xml | 13 + .../Maven__org_glassfish_jaxb_txw2_2_3_1.xml | 13 + ...ernate_commons_annotations_5_1_0_Final.xml | 13 + ...ernate_orm_hibernate_core_6_0_0_Alpha5.xml | 13 + ...ven__org_javassist_javassist_3_24_0_GA.xml | 13 + .../Maven__org_jboss_jandex_2_1_1_Final.xml | 13 + ...boss_logging_jboss_logging_3_3_2_Final.xml | 13 + ...s_transaction_api_1_2_spec_1_1_1_Final.xml | 13 + .../Maven__org_jsoup_jsoup_1_11_2.xml | 13 + ..._junit_jupiter_junit_jupiter_api_5_6_0.xml | 13 + ...nit_jupiter_junit_jupiter_api_5_7_0_M1.xml | 13 + ...nit_jupiter_junit_jupiter_engine_5_6_0.xml | 13 + ..._platform_junit_platform_commons_1_6_0.xml | 13 + ...atform_junit_platform_commons_1_7_0_M1.xml | 13 + ...t_platform_junit_platform_engine_1_6_0.xml | 13 + .../Maven__org_jvnet_staxex_stax_ex_1_8.xml | 13 + ...n__org_netbeans_lib_cvsclient_20060125.xml | 13 + ...Maven__org_openjfx_javafx_base_15_ea_3.xml | 13 + ...n__org_openjfx_javafx_base_win_15_ea_3.xml | 13 + ...n__org_openjfx_javafx_controls_15_ea_3.xml | 13 + ...rg_openjfx_javafx_controls_win_15_ea_3.xml | 13 + ...Maven__org_openjfx_javafx_fxml_15_ea_3.xml | 13 + ...n__org_openjfx_javafx_fxml_win_15_ea_3.xml | 13 + ...n__org_openjfx_javafx_graphics_15_ea_3.xml | 13 + ...rg_openjfx_javafx_graphics_win_15_ea_3.xml | 13 + ...Maven__org_opentest4j_opentest4j_1_2_0.xml | 13 + ...org_postgresql_postgresql_42_2_12_jre7.xml | 13 + .../Maven__org_slf4j_slf4j_api_1_7_5.xml | 13 + ...en__org_sonatype_aether_aether_api_1_7.xml | 13 + ...n__org_sonatype_aether_aether_impl_1_7.xml | 13 + ...en__org_sonatype_aether_aether_spi_1_7.xml | 13 + ...n__org_sonatype_aether_aether_util_1_7.xml | 13 + ..._org_sonatype_plexus_plexus_cipher_1_4.xml | 13 + ...atype_plexus_plexus_sec_dispatcher_1_3.xml | 13 + ...g_sonatype_sisu_sisu_guice_noaop_2_1_7.xml | 13 + ...g_sonatype_sisu_sisu_inject_bean_1_4_2.xml | 13 + ...sonatype_sisu_sisu_inject_plexus_1_4_2.xml | 13 + .idea/libraries/Maven__oro_oro_2_0_8.xml | 13 + .../libraries/Maven__sslext_sslext_1_2_0.xml | 13 + .idea/misc.xml | 11 + .idea/modules.xml | 10 + .idea/vcs.xml | 6 + Model/ModelProject.iml | 143 ++++ Model/checkstyle2020.xml | 254 +++++++ Model/pom.xml | 190 +++++ Model/src/main/java/module-info.java | 22 + Model/src/main/java/sudoku/consts/Consts.java | 20 + Model/src/main/java/sudoku/dao/Dao.java | 10 + .../java/sudoku/dao/FileSudokuBoardDao.java | 56 ++ .../java/sudoku/dao/JpaSudokuBoardDao.java | 95 +++ .../sudoku/dao/SudokuBoardDaoFactory.java | 17 + .../src/main/java/sudoku/database/Board.java | 80 ++ .../java/sudoku/database/DatabaseManager.java | 77 ++ .../ContainerOutOfBoundsException.java | 11 + .../exceptions/FieldOutOfBoundsException.java | 11 + .../InvalidContainerLengthException.java | 11 + .../InvalidFieldValueException.java | 11 + .../exceptions/NullContainerException.java | 11 + .../sudoku/exceptions/ReadBoardException.java | 11 + .../exceptions/SudokuBoardDaoException.java | 11 + .../exceptions/SudokuBoardException.java | 11 + .../exceptions/SudokuContainerException.java | 11 + .../exceptions/WriteBoardException.java | 11 + .../main/java/sudoku/gamestate/BoardType.java | 6 + .../sudoku/gamestate/CoordinatesWrapper.java | 27 + .../java/sudoku/gamestate/Difficulty.java | 17 + .../main/java/sudoku/gamestate/GameState.java | 129 ++++ .../main/java/sudoku/model/SudokuBoard.java | 240 ++++++ .../src/main/java/sudoku/model/SudokuBox.java | 16 + .../main/java/sudoku/model/SudokuColumn.java | 15 + .../java/sudoku/model/SudokuContainer.java | 86 +++ .../main/java/sudoku/model/SudokuField.java | 68 ++ .../src/main/java/sudoku/model/SudokuRow.java | 16 + .../solver/BacktrackingSudokuSolver.java | 84 +++ .../main/java/sudoku/solver/SudokuSolver.java | 10 + .../sudoku/dao/FileSudokuBoardDaoTest.java | 56 ++ .../java/sudoku/gamestate/GameStateTest.java | 25 + .../java/sudoku/model/SudokuBoardTest.java | 165 +++++ .../sudoku/model/SudokuContainerTest.java | 113 +++ .../java/sudoku/model/SudokuFieldTest.java | 84 +++ .../solver/BacktrackingSudokuSolverTest.java | 74 ++ SudokuGameProject.iml | 12 + View/SudokuView.iml | 153 ++++ View/pom.xml | 73 ++ View/src/main/java/module-info.java | 13 + View/src/main/java/view/Authors_en.java | 16 + View/src/main/java/view/Authors_pl.java | 16 + View/src/main/java/view/GameController.java | 274 +++++++ View/src/main/java/view/Launcher.java | 7 + View/src/main/java/view/LoadController.java | 168 +++++ View/src/main/java/view/Main.java | 46 ++ View/src/main/java/view/MenuController.java | 93 +++ View/src/main/java/view/SaveController.java | 125 ++++ .../exceptions/IOLanguageFileException.java | 11 + .../IllegalDifficultyException.java | 11 + .../main/resources/META-INF/persistence.xml | 18 + View/src/main/resources/Scenes/game.fxml | 682 ++++++++++++++++++ View/src/main/resources/Scenes/load_menu.fxml | 128 ++++ View/src/main/resources/Scenes/main_menu.fxml | 155 ++++ View/src/main/resources/Scenes/save_menu.fxml | 117 +++ View/src/main/resources/Styles/game_style.css | 43 ++ .../main/resources/Styles/load_save_style.css | 15 + .../main/resources/Styles/main_menu_style.css | 60 ++ View/src/main/resources/log4j2.xml | 19 + .../src/main/resources/textGame_en.properties | 13 + .../src/main/resources/textGame_pl.properties | 13 + .../src/main/resources/textLoad_en.properties | 19 + .../src/main/resources/textLoad_pl.properties | 19 + .../src/main/resources/textMenu_en.properties | 6 + .../src/main/resources/textMenu_pl.properties | 6 + .../src/main/resources/textSave_en.properties | 15 + .../src/main/resources/textSave_pl.properties | 15 + pom.xml | 20 + 208 files changed, 6446 insertions(+) create mode 100644 .idea/.gitignore create mode 100644 .idea/.name create mode 100644 .idea/compiler.xml create mode 100644 .idea/encodings.xml create mode 100644 .idea/jarRepositories.xml create mode 100644 .idea/libraries/Maven__antlr_antlr_2_7_2.xml create mode 100644 .idea/libraries/Maven__ch_ethz_ganymed_ganymed_ssh2_build210.xml create mode 100644 .idea/libraries/Maven__classworlds_classworlds_1_1_alpha_2.xml create mode 100644 .idea/libraries/Maven__com_fasterxml_classmate_1_5_1.xml create mode 100644 .idea/libraries/Maven__com_ibm_icu_icu4j_61_1.xml create mode 100644 .idea/libraries/Maven__com_sun_istack_istack_commons_runtime_3_0_7.xml create mode 100644 .idea/libraries/Maven__com_sun_xml_fastinfoset_FastInfoset_1_2_15.xml create mode 100644 .idea/libraries/Maven__commons_beanutils_commons_beanutils_1_9_2.xml create mode 100644 .idea/libraries/Maven__commons_chain_commons_chain_1_1.xml create mode 100644 .idea/libraries/Maven__commons_codec_commons_codec_1_6.xml create mode 100644 .idea/libraries/Maven__commons_collections_commons_collections_3_1.xml create mode 100644 .idea/libraries/Maven__commons_digester_commons_digester_1_8_1.xml create mode 100644 .idea/libraries/Maven__commons_io_commons_io_2_2.xml create mode 100644 .idea/libraries/Maven__commons_lang_commons_lang_2_6.xml create mode 100644 .idea/libraries/Maven__commons_logging_commons_logging_1_2.xml create mode 100644 .idea/libraries/Maven__commons_validator_commons_validator_1_6.xml create mode 100644 .idea/libraries/Maven__dom4j_dom4j_1_1.xml create mode 100644 .idea/libraries/Maven__javax_activation_javax_activation_api_1_2_0.xml create mode 100644 .idea/libraries/Maven__javax_persistence_javax_persistence_api_2_2.xml create mode 100644 .idea/libraries/Maven__javax_xml_bind_jaxb_api_2_3_1.xml create mode 100644 .idea/libraries/Maven__junit_junit_3_8_1.xml create mode 100644 .idea/libraries/Maven__net_bytebuddy_byte_buddy_1_10_7.xml create mode 100644 .idea/libraries/Maven__org_abego_treelayout_org_abego_treelayout_core_1_0_3.xml create mode 100644 .idea/libraries/Maven__org_antlr_ST4_4_3.xml create mode 100644 .idea/libraries/Maven__org_antlr_antlr4_4_8_1.xml create mode 100644 .idea/libraries/Maven__org_antlr_antlr4_runtime_4_8_1.xml create mode 100644 .idea/libraries/Maven__org_antlr_antlr_runtime_3_5_2.xml create mode 100644 .idea/libraries/Maven__org_apache_bcel_bcel_6_2.xml create mode 100644 .idea/libraries/Maven__org_apache_commons_commons_lang3_3_5.xml create mode 100644 .idea/libraries/Maven__org_apache_httpcomponents_httpclient_4_0_2.xml create mode 100644 .idea/libraries/Maven__org_apache_httpcomponents_httpcore_4_0_1.xml create mode 100644 .idea/libraries/Maven__org_apache_logging_log4j_log4j_api_2_13_3.xml create mode 100644 .idea/libraries/Maven__org_apache_logging_log4j_log4j_core_2_13_3.xml create mode 100644 .idea/libraries/Maven__org_apache_maven_doxia_doxia_core_1_8.xml create mode 100644 .idea/libraries/Maven__org_apache_maven_doxia_doxia_decoration_model_1_8_1.xml create mode 100644 .idea/libraries/Maven__org_apache_maven_doxia_doxia_integration_tools_1_8_1.xml create mode 100644 .idea/libraries/Maven__org_apache_maven_doxia_doxia_logging_api_1_8.xml create mode 100644 .idea/libraries/Maven__org_apache_maven_doxia_doxia_module_xhtml_1_8.xml create mode 100644 .idea/libraries/Maven__org_apache_maven_doxia_doxia_sink_api_1_8.xml create mode 100644 .idea/libraries/Maven__org_apache_maven_doxia_doxia_site_renderer_1_8_1.xml create mode 100644 .idea/libraries/Maven__org_apache_maven_doxia_doxia_skin_model_1_8_1.xml create mode 100644 .idea/libraries/Maven__org_apache_maven_maven_aether_provider_3_0.xml create mode 100644 .idea/libraries/Maven__org_apache_maven_maven_artifact_3_0.xml create mode 100644 .idea/libraries/Maven__org_apache_maven_maven_core_3_0.xml create mode 100644 .idea/libraries/Maven__org_apache_maven_maven_model_3_0.xml create mode 100644 .idea/libraries/Maven__org_apache_maven_maven_model_builder_3_0.xml create mode 100644 .idea/libraries/Maven__org_apache_maven_maven_plugin_api_3_0.xml create mode 100644 .idea/libraries/Maven__org_apache_maven_maven_repository_metadata_3_0.xml create mode 100644 .idea/libraries/Maven__org_apache_maven_maven_settings_3_0.xml create mode 100644 .idea/libraries/Maven__org_apache_maven_maven_settings_builder_3_0.xml create mode 100644 .idea/libraries/Maven__org_apache_maven_plugins_maven_project_info_reports_plugin_3_0_0.xml create mode 100644 .idea/libraries/Maven__org_apache_maven_reporting_maven_reporting_api_3_0.xml create mode 100644 .idea/libraries/Maven__org_apache_maven_reporting_maven_reporting_impl_3_0_0.xml create mode 100644 .idea/libraries/Maven__org_apache_maven_scm_maven_scm_api_1_10_0.xml create mode 100644 .idea/libraries/Maven__org_apache_maven_scm_maven_scm_manager_plexus_1_10_0.xml create mode 100644 .idea/libraries/Maven__org_apache_maven_scm_maven_scm_provider_cvs_commons_1_10_0.xml create mode 100644 .idea/libraries/Maven__org_apache_maven_scm_maven_scm_provider_cvsexe_1_10_0.xml create mode 100644 .idea/libraries/Maven__org_apache_maven_scm_maven_scm_provider_cvsjava_1_10_0.xml create mode 100644 .idea/libraries/Maven__org_apache_maven_scm_maven_scm_provider_git_commons_1_10_0.xml create mode 100644 .idea/libraries/Maven__org_apache_maven_scm_maven_scm_provider_gitexe_1_10_0.xml create mode 100644 .idea/libraries/Maven__org_apache_maven_scm_maven_scm_provider_hg_1_10_0.xml create mode 100644 .idea/libraries/Maven__org_apache_maven_scm_maven_scm_provider_perforce_1_10_0.xml create mode 100644 .idea/libraries/Maven__org_apache_maven_scm_maven_scm_provider_starteam_1_10_0.xml create mode 100644 .idea/libraries/Maven__org_apache_maven_scm_maven_scm_provider_svn_commons_1_10_0.xml create mode 100644 .idea/libraries/Maven__org_apache_maven_scm_maven_scm_provider_svnexe_1_10_0.xml create mode 100644 .idea/libraries/Maven__org_apache_maven_shared_maven_artifact_transfer_0_9_1.xml create mode 100644 .idea/libraries/Maven__org_apache_maven_shared_maven_common_artifact_filters_3_0_1.xml create mode 100644 .idea/libraries/Maven__org_apache_maven_shared_maven_dependency_tree_2_2.xml create mode 100644 .idea/libraries/Maven__org_apache_maven_shared_maven_shared_jar_1_2.xml create mode 100644 .idea/libraries/Maven__org_apache_maven_shared_maven_shared_utils_3_2_0.xml create mode 100644 .idea/libraries/Maven__org_apache_maven_wagon_wagon_http_lightweight_3_1_0.xml create mode 100644 .idea/libraries/Maven__org_apache_maven_wagon_wagon_http_shared_3_1_0.xml create mode 100644 .idea/libraries/Maven__org_apache_maven_wagon_wagon_provider_api_3_1_0.xml create mode 100644 .idea/libraries/Maven__org_apache_struts_struts_core_1_3_8.xml create mode 100644 .idea/libraries/Maven__org_apache_struts_struts_taglib_1_3_8.xml create mode 100644 .idea/libraries/Maven__org_apache_struts_struts_tiles_1_3_8.xml create mode 100644 .idea/libraries/Maven__org_apache_velocity_velocity_1_7.xml create mode 100644 .idea/libraries/Maven__org_apache_velocity_velocity_tools_2_0.xml create mode 100644 .idea/libraries/Maven__org_apiguardian_apiguardian_api_1_1_0.xml create mode 100644 .idea/libraries/Maven__org_codehaus_plexus_plexus_classworlds_2_2_3.xml create mode 100644 .idea/libraries/Maven__org_codehaus_plexus_plexus_component_annotations_1_5_5.xml create mode 100644 .idea/libraries/Maven__org_codehaus_plexus_plexus_container_default_1_0_alpha_8.xml create mode 100644 .idea/libraries/Maven__org_codehaus_plexus_plexus_digest_1_0.xml create mode 100644 .idea/libraries/Maven__org_codehaus_plexus_plexus_i18n_1_0_beta_10.xml create mode 100644 .idea/libraries/Maven__org_codehaus_plexus_plexus_interpolation_1_25.xml create mode 100644 .idea/libraries/Maven__org_codehaus_plexus_plexus_utils_3_1_0.xml create mode 100644 .idea/libraries/Maven__org_codehaus_plexus_plexus_velocity_1_2.xml create mode 100644 .idea/libraries/Maven__org_dom4j_dom4j_2_1_3.xml create mode 100644 .idea/libraries/Maven__org_eclipse_aether_aether_util_0_9_0_M2.xml create mode 100644 .idea/libraries/Maven__org_glassfish_javax_json_1_0_4.xml create mode 100644 .idea/libraries/Maven__org_glassfish_jaxb_jaxb_runtime_2_3_1.xml create mode 100644 .idea/libraries/Maven__org_glassfish_jaxb_txw2_2_3_1.xml create mode 100644 .idea/libraries/Maven__org_hibernate_common_hibernate_commons_annotations_5_1_0_Final.xml create mode 100644 .idea/libraries/Maven__org_hibernate_orm_hibernate_core_6_0_0_Alpha5.xml create mode 100644 .idea/libraries/Maven__org_javassist_javassist_3_24_0_GA.xml create mode 100644 .idea/libraries/Maven__org_jboss_jandex_2_1_1_Final.xml create mode 100644 .idea/libraries/Maven__org_jboss_logging_jboss_logging_3_3_2_Final.xml create mode 100644 .idea/libraries/Maven__org_jboss_spec_javax_transaction_jboss_transaction_api_1_2_spec_1_1_1_Final.xml create mode 100644 .idea/libraries/Maven__org_jsoup_jsoup_1_11_2.xml create mode 100644 .idea/libraries/Maven__org_junit_jupiter_junit_jupiter_api_5_6_0.xml create mode 100644 .idea/libraries/Maven__org_junit_jupiter_junit_jupiter_api_5_7_0_M1.xml create mode 100644 .idea/libraries/Maven__org_junit_jupiter_junit_jupiter_engine_5_6_0.xml create mode 100644 .idea/libraries/Maven__org_junit_platform_junit_platform_commons_1_6_0.xml create mode 100644 .idea/libraries/Maven__org_junit_platform_junit_platform_commons_1_7_0_M1.xml create mode 100644 .idea/libraries/Maven__org_junit_platform_junit_platform_engine_1_6_0.xml create mode 100644 .idea/libraries/Maven__org_jvnet_staxex_stax_ex_1_8.xml create mode 100644 .idea/libraries/Maven__org_netbeans_lib_cvsclient_20060125.xml create mode 100644 .idea/libraries/Maven__org_openjfx_javafx_base_15_ea_3.xml create mode 100644 .idea/libraries/Maven__org_openjfx_javafx_base_win_15_ea_3.xml create mode 100644 .idea/libraries/Maven__org_openjfx_javafx_controls_15_ea_3.xml create mode 100644 .idea/libraries/Maven__org_openjfx_javafx_controls_win_15_ea_3.xml create mode 100644 .idea/libraries/Maven__org_openjfx_javafx_fxml_15_ea_3.xml create mode 100644 .idea/libraries/Maven__org_openjfx_javafx_fxml_win_15_ea_3.xml create mode 100644 .idea/libraries/Maven__org_openjfx_javafx_graphics_15_ea_3.xml create mode 100644 .idea/libraries/Maven__org_openjfx_javafx_graphics_win_15_ea_3.xml create mode 100644 .idea/libraries/Maven__org_opentest4j_opentest4j_1_2_0.xml create mode 100644 .idea/libraries/Maven__org_postgresql_postgresql_42_2_12_jre7.xml create mode 100644 .idea/libraries/Maven__org_slf4j_slf4j_api_1_7_5.xml create mode 100644 .idea/libraries/Maven__org_sonatype_aether_aether_api_1_7.xml create mode 100644 .idea/libraries/Maven__org_sonatype_aether_aether_impl_1_7.xml create mode 100644 .idea/libraries/Maven__org_sonatype_aether_aether_spi_1_7.xml create mode 100644 .idea/libraries/Maven__org_sonatype_aether_aether_util_1_7.xml create mode 100644 .idea/libraries/Maven__org_sonatype_plexus_plexus_cipher_1_4.xml create mode 100644 .idea/libraries/Maven__org_sonatype_plexus_plexus_sec_dispatcher_1_3.xml create mode 100644 .idea/libraries/Maven__org_sonatype_sisu_sisu_guice_noaop_2_1_7.xml create mode 100644 .idea/libraries/Maven__org_sonatype_sisu_sisu_inject_bean_1_4_2.xml create mode 100644 .idea/libraries/Maven__org_sonatype_sisu_sisu_inject_plexus_1_4_2.xml create mode 100644 .idea/libraries/Maven__oro_oro_2_0_8.xml create mode 100644 .idea/libraries/Maven__sslext_sslext_1_2_0.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/vcs.xml create mode 100644 Model/ModelProject.iml create mode 100644 Model/checkstyle2020.xml create mode 100644 Model/pom.xml create mode 100644 Model/src/main/java/module-info.java create mode 100644 Model/src/main/java/sudoku/consts/Consts.java create mode 100644 Model/src/main/java/sudoku/dao/Dao.java create mode 100644 Model/src/main/java/sudoku/dao/FileSudokuBoardDao.java create mode 100644 Model/src/main/java/sudoku/dao/JpaSudokuBoardDao.java create mode 100644 Model/src/main/java/sudoku/dao/SudokuBoardDaoFactory.java create mode 100644 Model/src/main/java/sudoku/database/Board.java create mode 100644 Model/src/main/java/sudoku/database/DatabaseManager.java create mode 100644 Model/src/main/java/sudoku/exceptions/ContainerOutOfBoundsException.java create mode 100644 Model/src/main/java/sudoku/exceptions/FieldOutOfBoundsException.java create mode 100644 Model/src/main/java/sudoku/exceptions/InvalidContainerLengthException.java create mode 100644 Model/src/main/java/sudoku/exceptions/InvalidFieldValueException.java create mode 100644 Model/src/main/java/sudoku/exceptions/NullContainerException.java create mode 100644 Model/src/main/java/sudoku/exceptions/ReadBoardException.java create mode 100644 Model/src/main/java/sudoku/exceptions/SudokuBoardDaoException.java create mode 100644 Model/src/main/java/sudoku/exceptions/SudokuBoardException.java create mode 100644 Model/src/main/java/sudoku/exceptions/SudokuContainerException.java create mode 100644 Model/src/main/java/sudoku/exceptions/WriteBoardException.java create mode 100644 Model/src/main/java/sudoku/gamestate/BoardType.java create mode 100644 Model/src/main/java/sudoku/gamestate/CoordinatesWrapper.java create mode 100644 Model/src/main/java/sudoku/gamestate/Difficulty.java create mode 100644 Model/src/main/java/sudoku/gamestate/GameState.java create mode 100644 Model/src/main/java/sudoku/model/SudokuBoard.java create mode 100644 Model/src/main/java/sudoku/model/SudokuBox.java create mode 100644 Model/src/main/java/sudoku/model/SudokuColumn.java create mode 100644 Model/src/main/java/sudoku/model/SudokuContainer.java create mode 100644 Model/src/main/java/sudoku/model/SudokuField.java create mode 100644 Model/src/main/java/sudoku/model/SudokuRow.java create mode 100644 Model/src/main/java/sudoku/solver/BacktrackingSudokuSolver.java create mode 100644 Model/src/main/java/sudoku/solver/SudokuSolver.java create mode 100644 Model/src/test/java/sudoku/dao/FileSudokuBoardDaoTest.java create mode 100644 Model/src/test/java/sudoku/gamestate/GameStateTest.java create mode 100644 Model/src/test/java/sudoku/model/SudokuBoardTest.java create mode 100644 Model/src/test/java/sudoku/model/SudokuContainerTest.java create mode 100644 Model/src/test/java/sudoku/model/SudokuFieldTest.java create mode 100644 Model/src/test/java/sudoku/solver/BacktrackingSudokuSolverTest.java create mode 100644 SudokuGameProject.iml create mode 100644 View/SudokuView.iml create mode 100644 View/pom.xml create mode 100644 View/src/main/java/module-info.java create mode 100644 View/src/main/java/view/Authors_en.java create mode 100644 View/src/main/java/view/Authors_pl.java create mode 100644 View/src/main/java/view/GameController.java create mode 100644 View/src/main/java/view/Launcher.java create mode 100644 View/src/main/java/view/LoadController.java create mode 100644 View/src/main/java/view/Main.java create mode 100644 View/src/main/java/view/MenuController.java create mode 100644 View/src/main/java/view/SaveController.java create mode 100644 View/src/main/java/view/exceptions/IOLanguageFileException.java create mode 100644 View/src/main/java/view/exceptions/IllegalDifficultyException.java create mode 100644 View/src/main/resources/META-INF/persistence.xml create mode 100644 View/src/main/resources/Scenes/game.fxml create mode 100644 View/src/main/resources/Scenes/load_menu.fxml create mode 100644 View/src/main/resources/Scenes/main_menu.fxml create mode 100644 View/src/main/resources/Scenes/save_menu.fxml create mode 100644 View/src/main/resources/Styles/game_style.css create mode 100644 View/src/main/resources/Styles/load_save_style.css create mode 100644 View/src/main/resources/Styles/main_menu_style.css create mode 100644 View/src/main/resources/log4j2.xml create mode 100644 View/src/main/resources/textGame_en.properties create mode 100644 View/src/main/resources/textGame_pl.properties create mode 100644 View/src/main/resources/textLoad_en.properties create mode 100644 View/src/main/resources/textLoad_pl.properties create mode 100644 View/src/main/resources/textMenu_en.properties create mode 100644 View/src/main/resources/textMenu_pl.properties create mode 100644 View/src/main/resources/textSave_en.properties create mode 100644 View/src/main/resources/textSave_pl.properties create mode 100644 pom.xml diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..8eb324a --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Datasource local storage ignored files +/../../../../../../../../:\Users\Bartek\Desktop\BitBucket\programowanie-komponentowe\Sudoku\.idea/dataSources/ +/dataSources.local.xml +# Editor-based HTTP Client requests +/httpRequests/ diff --git a/.idea/.name b/.idea/.name new file mode 100644 index 0000000..13793f7 --- /dev/null +++ b/.idea/.name @@ -0,0 +1 @@ +SudokuGameProject \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..cb26965 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..0850a91 --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml new file mode 100644 index 0000000..712ab9d --- /dev/null +++ b/.idea/jarRepositories.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__antlr_antlr_2_7_2.xml b/.idea/libraries/Maven__antlr_antlr_2_7_2.xml new file mode 100644 index 0000000..76a587b --- /dev/null +++ b/.idea/libraries/Maven__antlr_antlr_2_7_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__ch_ethz_ganymed_ganymed_ssh2_build210.xml b/.idea/libraries/Maven__ch_ethz_ganymed_ganymed_ssh2_build210.xml new file mode 100644 index 0000000..1c86a46 --- /dev/null +++ b/.idea/libraries/Maven__ch_ethz_ganymed_ganymed_ssh2_build210.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__classworlds_classworlds_1_1_alpha_2.xml b/.idea/libraries/Maven__classworlds_classworlds_1_1_alpha_2.xml new file mode 100644 index 0000000..c99448d --- /dev/null +++ b/.idea/libraries/Maven__classworlds_classworlds_1_1_alpha_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_fasterxml_classmate_1_5_1.xml b/.idea/libraries/Maven__com_fasterxml_classmate_1_5_1.xml new file mode 100644 index 0000000..bc7d7fd --- /dev/null +++ b/.idea/libraries/Maven__com_fasterxml_classmate_1_5_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_ibm_icu_icu4j_61_1.xml b/.idea/libraries/Maven__com_ibm_icu_icu4j_61_1.xml new file mode 100644 index 0000000..425700e --- /dev/null +++ b/.idea/libraries/Maven__com_ibm_icu_icu4j_61_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_sun_istack_istack_commons_runtime_3_0_7.xml b/.idea/libraries/Maven__com_sun_istack_istack_commons_runtime_3_0_7.xml new file mode 100644 index 0000000..4d7e82e --- /dev/null +++ b/.idea/libraries/Maven__com_sun_istack_istack_commons_runtime_3_0_7.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_sun_xml_fastinfoset_FastInfoset_1_2_15.xml b/.idea/libraries/Maven__com_sun_xml_fastinfoset_FastInfoset_1_2_15.xml new file mode 100644 index 0000000..de27a39 --- /dev/null +++ b/.idea/libraries/Maven__com_sun_xml_fastinfoset_FastInfoset_1_2_15.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__commons_beanutils_commons_beanutils_1_9_2.xml b/.idea/libraries/Maven__commons_beanutils_commons_beanutils_1_9_2.xml new file mode 100644 index 0000000..9c245b9 --- /dev/null +++ b/.idea/libraries/Maven__commons_beanutils_commons_beanutils_1_9_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__commons_chain_commons_chain_1_1.xml b/.idea/libraries/Maven__commons_chain_commons_chain_1_1.xml new file mode 100644 index 0000000..38653c2 --- /dev/null +++ b/.idea/libraries/Maven__commons_chain_commons_chain_1_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__commons_codec_commons_codec_1_6.xml b/.idea/libraries/Maven__commons_codec_commons_codec_1_6.xml new file mode 100644 index 0000000..e8a6a9f --- /dev/null +++ b/.idea/libraries/Maven__commons_codec_commons_codec_1_6.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__commons_collections_commons_collections_3_1.xml b/.idea/libraries/Maven__commons_collections_commons_collections_3_1.xml new file mode 100644 index 0000000..01dd005 --- /dev/null +++ b/.idea/libraries/Maven__commons_collections_commons_collections_3_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__commons_digester_commons_digester_1_8_1.xml b/.idea/libraries/Maven__commons_digester_commons_digester_1_8_1.xml new file mode 100644 index 0000000..0716b7f --- /dev/null +++ b/.idea/libraries/Maven__commons_digester_commons_digester_1_8_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__commons_io_commons_io_2_2.xml b/.idea/libraries/Maven__commons_io_commons_io_2_2.xml new file mode 100644 index 0000000..f8084ec --- /dev/null +++ b/.idea/libraries/Maven__commons_io_commons_io_2_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__commons_lang_commons_lang_2_6.xml b/.idea/libraries/Maven__commons_lang_commons_lang_2_6.xml new file mode 100644 index 0000000..2ec8376 --- /dev/null +++ b/.idea/libraries/Maven__commons_lang_commons_lang_2_6.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__commons_logging_commons_logging_1_2.xml b/.idea/libraries/Maven__commons_logging_commons_logging_1_2.xml new file mode 100644 index 0000000..eab40b3 --- /dev/null +++ b/.idea/libraries/Maven__commons_logging_commons_logging_1_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__commons_validator_commons_validator_1_6.xml b/.idea/libraries/Maven__commons_validator_commons_validator_1_6.xml new file mode 100644 index 0000000..80e2bb5 --- /dev/null +++ b/.idea/libraries/Maven__commons_validator_commons_validator_1_6.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__dom4j_dom4j_1_1.xml b/.idea/libraries/Maven__dom4j_dom4j_1_1.xml new file mode 100644 index 0000000..4968206 --- /dev/null +++ b/.idea/libraries/Maven__dom4j_dom4j_1_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__javax_activation_javax_activation_api_1_2_0.xml b/.idea/libraries/Maven__javax_activation_javax_activation_api_1_2_0.xml new file mode 100644 index 0000000..ff49512 --- /dev/null +++ b/.idea/libraries/Maven__javax_activation_javax_activation_api_1_2_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__javax_persistence_javax_persistence_api_2_2.xml b/.idea/libraries/Maven__javax_persistence_javax_persistence_api_2_2.xml new file mode 100644 index 0000000..b7d39c6 --- /dev/null +++ b/.idea/libraries/Maven__javax_persistence_javax_persistence_api_2_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__javax_xml_bind_jaxb_api_2_3_1.xml b/.idea/libraries/Maven__javax_xml_bind_jaxb_api_2_3_1.xml new file mode 100644 index 0000000..059f88f --- /dev/null +++ b/.idea/libraries/Maven__javax_xml_bind_jaxb_api_2_3_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__junit_junit_3_8_1.xml b/.idea/libraries/Maven__junit_junit_3_8_1.xml new file mode 100644 index 0000000..71b2993 --- /dev/null +++ b/.idea/libraries/Maven__junit_junit_3_8_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__net_bytebuddy_byte_buddy_1_10_7.xml b/.idea/libraries/Maven__net_bytebuddy_byte_buddy_1_10_7.xml new file mode 100644 index 0000000..5589596 --- /dev/null +++ b/.idea/libraries/Maven__net_bytebuddy_byte_buddy_1_10_7.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_abego_treelayout_org_abego_treelayout_core_1_0_3.xml b/.idea/libraries/Maven__org_abego_treelayout_org_abego_treelayout_core_1_0_3.xml new file mode 100644 index 0000000..7add102 --- /dev/null +++ b/.idea/libraries/Maven__org_abego_treelayout_org_abego_treelayout_core_1_0_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_antlr_ST4_4_3.xml b/.idea/libraries/Maven__org_antlr_ST4_4_3.xml new file mode 100644 index 0000000..7cc44a6 --- /dev/null +++ b/.idea/libraries/Maven__org_antlr_ST4_4_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_antlr_antlr4_4_8_1.xml b/.idea/libraries/Maven__org_antlr_antlr4_4_8_1.xml new file mode 100644 index 0000000..4d1ad8e --- /dev/null +++ b/.idea/libraries/Maven__org_antlr_antlr4_4_8_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_antlr_antlr4_runtime_4_8_1.xml b/.idea/libraries/Maven__org_antlr_antlr4_runtime_4_8_1.xml new file mode 100644 index 0000000..1e79170 --- /dev/null +++ b/.idea/libraries/Maven__org_antlr_antlr4_runtime_4_8_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_antlr_antlr_runtime_3_5_2.xml b/.idea/libraries/Maven__org_antlr_antlr_runtime_3_5_2.xml new file mode 100644 index 0000000..4fc5cbb --- /dev/null +++ b/.idea/libraries/Maven__org_antlr_antlr_runtime_3_5_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_bcel_bcel_6_2.xml b/.idea/libraries/Maven__org_apache_bcel_bcel_6_2.xml new file mode 100644 index 0000000..ce96b73 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_bcel_bcel_6_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_commons_commons_lang3_3_5.xml b/.idea/libraries/Maven__org_apache_commons_commons_lang3_3_5.xml new file mode 100644 index 0000000..666266c --- /dev/null +++ b/.idea/libraries/Maven__org_apache_commons_commons_lang3_3_5.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_httpcomponents_httpclient_4_0_2.xml b/.idea/libraries/Maven__org_apache_httpcomponents_httpclient_4_0_2.xml new file mode 100644 index 0000000..3d4c6f3 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_httpcomponents_httpclient_4_0_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_httpcomponents_httpcore_4_0_1.xml b/.idea/libraries/Maven__org_apache_httpcomponents_httpcore_4_0_1.xml new file mode 100644 index 0000000..eee5c06 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_httpcomponents_httpcore_4_0_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_logging_log4j_log4j_api_2_13_3.xml b/.idea/libraries/Maven__org_apache_logging_log4j_log4j_api_2_13_3.xml new file mode 100644 index 0000000..8ad4996 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_logging_log4j_log4j_api_2_13_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_logging_log4j_log4j_core_2_13_3.xml b/.idea/libraries/Maven__org_apache_logging_log4j_log4j_core_2_13_3.xml new file mode 100644 index 0000000..1bd11c6 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_logging_log4j_log4j_core_2_13_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_maven_doxia_doxia_core_1_8.xml b/.idea/libraries/Maven__org_apache_maven_doxia_doxia_core_1_8.xml new file mode 100644 index 0000000..f0c2850 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_maven_doxia_doxia_core_1_8.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_maven_doxia_doxia_decoration_model_1_8_1.xml b/.idea/libraries/Maven__org_apache_maven_doxia_doxia_decoration_model_1_8_1.xml new file mode 100644 index 0000000..d7591e4 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_maven_doxia_doxia_decoration_model_1_8_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_maven_doxia_doxia_integration_tools_1_8_1.xml b/.idea/libraries/Maven__org_apache_maven_doxia_doxia_integration_tools_1_8_1.xml new file mode 100644 index 0000000..e64dd42 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_maven_doxia_doxia_integration_tools_1_8_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_maven_doxia_doxia_logging_api_1_8.xml b/.idea/libraries/Maven__org_apache_maven_doxia_doxia_logging_api_1_8.xml new file mode 100644 index 0000000..fc4d632 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_maven_doxia_doxia_logging_api_1_8.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_maven_doxia_doxia_module_xhtml_1_8.xml b/.idea/libraries/Maven__org_apache_maven_doxia_doxia_module_xhtml_1_8.xml new file mode 100644 index 0000000..e7efe21 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_maven_doxia_doxia_module_xhtml_1_8.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_maven_doxia_doxia_sink_api_1_8.xml b/.idea/libraries/Maven__org_apache_maven_doxia_doxia_sink_api_1_8.xml new file mode 100644 index 0000000..7d06ded --- /dev/null +++ b/.idea/libraries/Maven__org_apache_maven_doxia_doxia_sink_api_1_8.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_maven_doxia_doxia_site_renderer_1_8_1.xml b/.idea/libraries/Maven__org_apache_maven_doxia_doxia_site_renderer_1_8_1.xml new file mode 100644 index 0000000..4d4d0a8 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_maven_doxia_doxia_site_renderer_1_8_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_maven_doxia_doxia_skin_model_1_8_1.xml b/.idea/libraries/Maven__org_apache_maven_doxia_doxia_skin_model_1_8_1.xml new file mode 100644 index 0000000..7c0e3c9 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_maven_doxia_doxia_skin_model_1_8_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_maven_maven_aether_provider_3_0.xml b/.idea/libraries/Maven__org_apache_maven_maven_aether_provider_3_0.xml new file mode 100644 index 0000000..c567901 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_maven_maven_aether_provider_3_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_maven_maven_artifact_3_0.xml b/.idea/libraries/Maven__org_apache_maven_maven_artifact_3_0.xml new file mode 100644 index 0000000..4afa3ba --- /dev/null +++ b/.idea/libraries/Maven__org_apache_maven_maven_artifact_3_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_maven_maven_core_3_0.xml b/.idea/libraries/Maven__org_apache_maven_maven_core_3_0.xml new file mode 100644 index 0000000..6dea887 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_maven_maven_core_3_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_maven_maven_model_3_0.xml b/.idea/libraries/Maven__org_apache_maven_maven_model_3_0.xml new file mode 100644 index 0000000..9235b64 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_maven_maven_model_3_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_maven_maven_model_builder_3_0.xml b/.idea/libraries/Maven__org_apache_maven_maven_model_builder_3_0.xml new file mode 100644 index 0000000..39c8f37 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_maven_maven_model_builder_3_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_maven_maven_plugin_api_3_0.xml b/.idea/libraries/Maven__org_apache_maven_maven_plugin_api_3_0.xml new file mode 100644 index 0000000..91f8ba2 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_maven_maven_plugin_api_3_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_maven_maven_repository_metadata_3_0.xml b/.idea/libraries/Maven__org_apache_maven_maven_repository_metadata_3_0.xml new file mode 100644 index 0000000..c8cc3a0 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_maven_maven_repository_metadata_3_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_maven_maven_settings_3_0.xml b/.idea/libraries/Maven__org_apache_maven_maven_settings_3_0.xml new file mode 100644 index 0000000..33b8760 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_maven_maven_settings_3_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_maven_maven_settings_builder_3_0.xml b/.idea/libraries/Maven__org_apache_maven_maven_settings_builder_3_0.xml new file mode 100644 index 0000000..9637cf3 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_maven_maven_settings_builder_3_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_maven_plugins_maven_project_info_reports_plugin_3_0_0.xml b/.idea/libraries/Maven__org_apache_maven_plugins_maven_project_info_reports_plugin_3_0_0.xml new file mode 100644 index 0000000..c70d62e --- /dev/null +++ b/.idea/libraries/Maven__org_apache_maven_plugins_maven_project_info_reports_plugin_3_0_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_maven_reporting_maven_reporting_api_3_0.xml b/.idea/libraries/Maven__org_apache_maven_reporting_maven_reporting_api_3_0.xml new file mode 100644 index 0000000..a654238 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_maven_reporting_maven_reporting_api_3_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_maven_reporting_maven_reporting_impl_3_0_0.xml b/.idea/libraries/Maven__org_apache_maven_reporting_maven_reporting_impl_3_0_0.xml new file mode 100644 index 0000000..56d073d --- /dev/null +++ b/.idea/libraries/Maven__org_apache_maven_reporting_maven_reporting_impl_3_0_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_maven_scm_maven_scm_api_1_10_0.xml b/.idea/libraries/Maven__org_apache_maven_scm_maven_scm_api_1_10_0.xml new file mode 100644 index 0000000..5c66cf1 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_maven_scm_maven_scm_api_1_10_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_maven_scm_maven_scm_manager_plexus_1_10_0.xml b/.idea/libraries/Maven__org_apache_maven_scm_maven_scm_manager_plexus_1_10_0.xml new file mode 100644 index 0000000..5eba73f --- /dev/null +++ b/.idea/libraries/Maven__org_apache_maven_scm_maven_scm_manager_plexus_1_10_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_maven_scm_maven_scm_provider_cvs_commons_1_10_0.xml b/.idea/libraries/Maven__org_apache_maven_scm_maven_scm_provider_cvs_commons_1_10_0.xml new file mode 100644 index 0000000..b3482ed --- /dev/null +++ b/.idea/libraries/Maven__org_apache_maven_scm_maven_scm_provider_cvs_commons_1_10_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_maven_scm_maven_scm_provider_cvsexe_1_10_0.xml b/.idea/libraries/Maven__org_apache_maven_scm_maven_scm_provider_cvsexe_1_10_0.xml new file mode 100644 index 0000000..7b09931 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_maven_scm_maven_scm_provider_cvsexe_1_10_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_maven_scm_maven_scm_provider_cvsjava_1_10_0.xml b/.idea/libraries/Maven__org_apache_maven_scm_maven_scm_provider_cvsjava_1_10_0.xml new file mode 100644 index 0000000..a922021 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_maven_scm_maven_scm_provider_cvsjava_1_10_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_maven_scm_maven_scm_provider_git_commons_1_10_0.xml b/.idea/libraries/Maven__org_apache_maven_scm_maven_scm_provider_git_commons_1_10_0.xml new file mode 100644 index 0000000..3c2ec94 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_maven_scm_maven_scm_provider_git_commons_1_10_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_maven_scm_maven_scm_provider_gitexe_1_10_0.xml b/.idea/libraries/Maven__org_apache_maven_scm_maven_scm_provider_gitexe_1_10_0.xml new file mode 100644 index 0000000..d8d5c7f --- /dev/null +++ b/.idea/libraries/Maven__org_apache_maven_scm_maven_scm_provider_gitexe_1_10_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_maven_scm_maven_scm_provider_hg_1_10_0.xml b/.idea/libraries/Maven__org_apache_maven_scm_maven_scm_provider_hg_1_10_0.xml new file mode 100644 index 0000000..32ab75a --- /dev/null +++ b/.idea/libraries/Maven__org_apache_maven_scm_maven_scm_provider_hg_1_10_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_maven_scm_maven_scm_provider_perforce_1_10_0.xml b/.idea/libraries/Maven__org_apache_maven_scm_maven_scm_provider_perforce_1_10_0.xml new file mode 100644 index 0000000..f688fb6 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_maven_scm_maven_scm_provider_perforce_1_10_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_maven_scm_maven_scm_provider_starteam_1_10_0.xml b/.idea/libraries/Maven__org_apache_maven_scm_maven_scm_provider_starteam_1_10_0.xml new file mode 100644 index 0000000..6c9ed52 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_maven_scm_maven_scm_provider_starteam_1_10_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_maven_scm_maven_scm_provider_svn_commons_1_10_0.xml b/.idea/libraries/Maven__org_apache_maven_scm_maven_scm_provider_svn_commons_1_10_0.xml new file mode 100644 index 0000000..ecc0078 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_maven_scm_maven_scm_provider_svn_commons_1_10_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_maven_scm_maven_scm_provider_svnexe_1_10_0.xml b/.idea/libraries/Maven__org_apache_maven_scm_maven_scm_provider_svnexe_1_10_0.xml new file mode 100644 index 0000000..74bb696 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_maven_scm_maven_scm_provider_svnexe_1_10_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_maven_shared_maven_artifact_transfer_0_9_1.xml b/.idea/libraries/Maven__org_apache_maven_shared_maven_artifact_transfer_0_9_1.xml new file mode 100644 index 0000000..d75821b --- /dev/null +++ b/.idea/libraries/Maven__org_apache_maven_shared_maven_artifact_transfer_0_9_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_maven_shared_maven_common_artifact_filters_3_0_1.xml b/.idea/libraries/Maven__org_apache_maven_shared_maven_common_artifact_filters_3_0_1.xml new file mode 100644 index 0000000..086ccf2 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_maven_shared_maven_common_artifact_filters_3_0_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_maven_shared_maven_dependency_tree_2_2.xml b/.idea/libraries/Maven__org_apache_maven_shared_maven_dependency_tree_2_2.xml new file mode 100644 index 0000000..e3be745 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_maven_shared_maven_dependency_tree_2_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_maven_shared_maven_shared_jar_1_2.xml b/.idea/libraries/Maven__org_apache_maven_shared_maven_shared_jar_1_2.xml new file mode 100644 index 0000000..5e5dfac --- /dev/null +++ b/.idea/libraries/Maven__org_apache_maven_shared_maven_shared_jar_1_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_maven_shared_maven_shared_utils_3_2_0.xml b/.idea/libraries/Maven__org_apache_maven_shared_maven_shared_utils_3_2_0.xml new file mode 100644 index 0000000..3b8af59 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_maven_shared_maven_shared_utils_3_2_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_maven_wagon_wagon_http_lightweight_3_1_0.xml b/.idea/libraries/Maven__org_apache_maven_wagon_wagon_http_lightweight_3_1_0.xml new file mode 100644 index 0000000..dfd9682 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_maven_wagon_wagon_http_lightweight_3_1_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_maven_wagon_wagon_http_shared_3_1_0.xml b/.idea/libraries/Maven__org_apache_maven_wagon_wagon_http_shared_3_1_0.xml new file mode 100644 index 0000000..a44a6b8 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_maven_wagon_wagon_http_shared_3_1_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_maven_wagon_wagon_provider_api_3_1_0.xml b/.idea/libraries/Maven__org_apache_maven_wagon_wagon_provider_api_3_1_0.xml new file mode 100644 index 0000000..aec6b68 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_maven_wagon_wagon_provider_api_3_1_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_struts_struts_core_1_3_8.xml b/.idea/libraries/Maven__org_apache_struts_struts_core_1_3_8.xml new file mode 100644 index 0000000..072320e --- /dev/null +++ b/.idea/libraries/Maven__org_apache_struts_struts_core_1_3_8.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_struts_struts_taglib_1_3_8.xml b/.idea/libraries/Maven__org_apache_struts_struts_taglib_1_3_8.xml new file mode 100644 index 0000000..9674c05 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_struts_struts_taglib_1_3_8.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_struts_struts_tiles_1_3_8.xml b/.idea/libraries/Maven__org_apache_struts_struts_tiles_1_3_8.xml new file mode 100644 index 0000000..e4c6c81 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_struts_struts_tiles_1_3_8.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_velocity_velocity_1_7.xml b/.idea/libraries/Maven__org_apache_velocity_velocity_1_7.xml new file mode 100644 index 0000000..7a2914a --- /dev/null +++ b/.idea/libraries/Maven__org_apache_velocity_velocity_1_7.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_velocity_velocity_tools_2_0.xml b/.idea/libraries/Maven__org_apache_velocity_velocity_tools_2_0.xml new file mode 100644 index 0000000..2e6b0aa --- /dev/null +++ b/.idea/libraries/Maven__org_apache_velocity_velocity_tools_2_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apiguardian_apiguardian_api_1_1_0.xml b/.idea/libraries/Maven__org_apiguardian_apiguardian_api_1_1_0.xml new file mode 100644 index 0000000..f854ab0 --- /dev/null +++ b/.idea/libraries/Maven__org_apiguardian_apiguardian_api_1_1_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_codehaus_plexus_plexus_classworlds_2_2_3.xml b/.idea/libraries/Maven__org_codehaus_plexus_plexus_classworlds_2_2_3.xml new file mode 100644 index 0000000..6990532 --- /dev/null +++ b/.idea/libraries/Maven__org_codehaus_plexus_plexus_classworlds_2_2_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_codehaus_plexus_plexus_component_annotations_1_5_5.xml b/.idea/libraries/Maven__org_codehaus_plexus_plexus_component_annotations_1_5_5.xml new file mode 100644 index 0000000..9292317 --- /dev/null +++ b/.idea/libraries/Maven__org_codehaus_plexus_plexus_component_annotations_1_5_5.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_codehaus_plexus_plexus_container_default_1_0_alpha_8.xml b/.idea/libraries/Maven__org_codehaus_plexus_plexus_container_default_1_0_alpha_8.xml new file mode 100644 index 0000000..79f0b67 --- /dev/null +++ b/.idea/libraries/Maven__org_codehaus_plexus_plexus_container_default_1_0_alpha_8.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_codehaus_plexus_plexus_digest_1_0.xml b/.idea/libraries/Maven__org_codehaus_plexus_plexus_digest_1_0.xml new file mode 100644 index 0000000..8a32cec --- /dev/null +++ b/.idea/libraries/Maven__org_codehaus_plexus_plexus_digest_1_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_codehaus_plexus_plexus_i18n_1_0_beta_10.xml b/.idea/libraries/Maven__org_codehaus_plexus_plexus_i18n_1_0_beta_10.xml new file mode 100644 index 0000000..1e9e5fb --- /dev/null +++ b/.idea/libraries/Maven__org_codehaus_plexus_plexus_i18n_1_0_beta_10.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_codehaus_plexus_plexus_interpolation_1_25.xml b/.idea/libraries/Maven__org_codehaus_plexus_plexus_interpolation_1_25.xml new file mode 100644 index 0000000..1dfea54 --- /dev/null +++ b/.idea/libraries/Maven__org_codehaus_plexus_plexus_interpolation_1_25.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_codehaus_plexus_plexus_utils_3_1_0.xml b/.idea/libraries/Maven__org_codehaus_plexus_plexus_utils_3_1_0.xml new file mode 100644 index 0000000..fde1e03 --- /dev/null +++ b/.idea/libraries/Maven__org_codehaus_plexus_plexus_utils_3_1_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_codehaus_plexus_plexus_velocity_1_2.xml b/.idea/libraries/Maven__org_codehaus_plexus_plexus_velocity_1_2.xml new file mode 100644 index 0000000..5540313 --- /dev/null +++ b/.idea/libraries/Maven__org_codehaus_plexus_plexus_velocity_1_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_dom4j_dom4j_2_1_3.xml b/.idea/libraries/Maven__org_dom4j_dom4j_2_1_3.xml new file mode 100644 index 0000000..10fb46a --- /dev/null +++ b/.idea/libraries/Maven__org_dom4j_dom4j_2_1_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_eclipse_aether_aether_util_0_9_0_M2.xml b/.idea/libraries/Maven__org_eclipse_aether_aether_util_0_9_0_M2.xml new file mode 100644 index 0000000..459a75f --- /dev/null +++ b/.idea/libraries/Maven__org_eclipse_aether_aether_util_0_9_0_M2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_glassfish_javax_json_1_0_4.xml b/.idea/libraries/Maven__org_glassfish_javax_json_1_0_4.xml new file mode 100644 index 0000000..7fbea5f --- /dev/null +++ b/.idea/libraries/Maven__org_glassfish_javax_json_1_0_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_glassfish_jaxb_jaxb_runtime_2_3_1.xml b/.idea/libraries/Maven__org_glassfish_jaxb_jaxb_runtime_2_3_1.xml new file mode 100644 index 0000000..0c7a80a --- /dev/null +++ b/.idea/libraries/Maven__org_glassfish_jaxb_jaxb_runtime_2_3_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_glassfish_jaxb_txw2_2_3_1.xml b/.idea/libraries/Maven__org_glassfish_jaxb_txw2_2_3_1.xml new file mode 100644 index 0000000..638d937 --- /dev/null +++ b/.idea/libraries/Maven__org_glassfish_jaxb_txw2_2_3_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_hibernate_common_hibernate_commons_annotations_5_1_0_Final.xml b/.idea/libraries/Maven__org_hibernate_common_hibernate_commons_annotations_5_1_0_Final.xml new file mode 100644 index 0000000..1fd775b --- /dev/null +++ b/.idea/libraries/Maven__org_hibernate_common_hibernate_commons_annotations_5_1_0_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_hibernate_orm_hibernate_core_6_0_0_Alpha5.xml b/.idea/libraries/Maven__org_hibernate_orm_hibernate_core_6_0_0_Alpha5.xml new file mode 100644 index 0000000..18100f6 --- /dev/null +++ b/.idea/libraries/Maven__org_hibernate_orm_hibernate_core_6_0_0_Alpha5.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_javassist_javassist_3_24_0_GA.xml b/.idea/libraries/Maven__org_javassist_javassist_3_24_0_GA.xml new file mode 100644 index 0000000..a9de551 --- /dev/null +++ b/.idea/libraries/Maven__org_javassist_javassist_3_24_0_GA.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_jboss_jandex_2_1_1_Final.xml b/.idea/libraries/Maven__org_jboss_jandex_2_1_1_Final.xml new file mode 100644 index 0000000..a8bf358 --- /dev/null +++ b/.idea/libraries/Maven__org_jboss_jandex_2_1_1_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_jboss_logging_jboss_logging_3_3_2_Final.xml b/.idea/libraries/Maven__org_jboss_logging_jboss_logging_3_3_2_Final.xml new file mode 100644 index 0000000..5f7dd01 --- /dev/null +++ b/.idea/libraries/Maven__org_jboss_logging_jboss_logging_3_3_2_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_jboss_spec_javax_transaction_jboss_transaction_api_1_2_spec_1_1_1_Final.xml b/.idea/libraries/Maven__org_jboss_spec_javax_transaction_jboss_transaction_api_1_2_spec_1_1_1_Final.xml new file mode 100644 index 0000000..ec03510 --- /dev/null +++ b/.idea/libraries/Maven__org_jboss_spec_javax_transaction_jboss_transaction_api_1_2_spec_1_1_1_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_jsoup_jsoup_1_11_2.xml b/.idea/libraries/Maven__org_jsoup_jsoup_1_11_2.xml new file mode 100644 index 0000000..b65481f --- /dev/null +++ b/.idea/libraries/Maven__org_jsoup_jsoup_1_11_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_api_5_6_0.xml b/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_api_5_6_0.xml new file mode 100644 index 0000000..be380a5 --- /dev/null +++ b/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_api_5_6_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_api_5_7_0_M1.xml b/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_api_5_7_0_M1.xml new file mode 100644 index 0000000..356bfd3 --- /dev/null +++ b/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_api_5_7_0_M1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_engine_5_6_0.xml b/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_engine_5_6_0.xml new file mode 100644 index 0000000..227bc44 --- /dev/null +++ b/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_engine_5_6_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_junit_platform_junit_platform_commons_1_6_0.xml b/.idea/libraries/Maven__org_junit_platform_junit_platform_commons_1_6_0.xml new file mode 100644 index 0000000..8e5d3f2 --- /dev/null +++ b/.idea/libraries/Maven__org_junit_platform_junit_platform_commons_1_6_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_junit_platform_junit_platform_commons_1_7_0_M1.xml b/.idea/libraries/Maven__org_junit_platform_junit_platform_commons_1_7_0_M1.xml new file mode 100644 index 0000000..cea43ce --- /dev/null +++ b/.idea/libraries/Maven__org_junit_platform_junit_platform_commons_1_7_0_M1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_junit_platform_junit_platform_engine_1_6_0.xml b/.idea/libraries/Maven__org_junit_platform_junit_platform_engine_1_6_0.xml new file mode 100644 index 0000000..2f36d10 --- /dev/null +++ b/.idea/libraries/Maven__org_junit_platform_junit_platform_engine_1_6_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_jvnet_staxex_stax_ex_1_8.xml b/.idea/libraries/Maven__org_jvnet_staxex_stax_ex_1_8.xml new file mode 100644 index 0000000..ee8e8ef --- /dev/null +++ b/.idea/libraries/Maven__org_jvnet_staxex_stax_ex_1_8.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_netbeans_lib_cvsclient_20060125.xml b/.idea/libraries/Maven__org_netbeans_lib_cvsclient_20060125.xml new file mode 100644 index 0000000..ec7897a --- /dev/null +++ b/.idea/libraries/Maven__org_netbeans_lib_cvsclient_20060125.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_openjfx_javafx_base_15_ea_3.xml b/.idea/libraries/Maven__org_openjfx_javafx_base_15_ea_3.xml new file mode 100644 index 0000000..4e71137 --- /dev/null +++ b/.idea/libraries/Maven__org_openjfx_javafx_base_15_ea_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_openjfx_javafx_base_win_15_ea_3.xml b/.idea/libraries/Maven__org_openjfx_javafx_base_win_15_ea_3.xml new file mode 100644 index 0000000..d788134 --- /dev/null +++ b/.idea/libraries/Maven__org_openjfx_javafx_base_win_15_ea_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_openjfx_javafx_controls_15_ea_3.xml b/.idea/libraries/Maven__org_openjfx_javafx_controls_15_ea_3.xml new file mode 100644 index 0000000..f83ac91 --- /dev/null +++ b/.idea/libraries/Maven__org_openjfx_javafx_controls_15_ea_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_openjfx_javafx_controls_win_15_ea_3.xml b/.idea/libraries/Maven__org_openjfx_javafx_controls_win_15_ea_3.xml new file mode 100644 index 0000000..d881ee9 --- /dev/null +++ b/.idea/libraries/Maven__org_openjfx_javafx_controls_win_15_ea_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_openjfx_javafx_fxml_15_ea_3.xml b/.idea/libraries/Maven__org_openjfx_javafx_fxml_15_ea_3.xml new file mode 100644 index 0000000..44c975e --- /dev/null +++ b/.idea/libraries/Maven__org_openjfx_javafx_fxml_15_ea_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_openjfx_javafx_fxml_win_15_ea_3.xml b/.idea/libraries/Maven__org_openjfx_javafx_fxml_win_15_ea_3.xml new file mode 100644 index 0000000..70d6f14 --- /dev/null +++ b/.idea/libraries/Maven__org_openjfx_javafx_fxml_win_15_ea_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_openjfx_javafx_graphics_15_ea_3.xml b/.idea/libraries/Maven__org_openjfx_javafx_graphics_15_ea_3.xml new file mode 100644 index 0000000..9770cb9 --- /dev/null +++ b/.idea/libraries/Maven__org_openjfx_javafx_graphics_15_ea_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_openjfx_javafx_graphics_win_15_ea_3.xml b/.idea/libraries/Maven__org_openjfx_javafx_graphics_win_15_ea_3.xml new file mode 100644 index 0000000..ba000b0 --- /dev/null +++ b/.idea/libraries/Maven__org_openjfx_javafx_graphics_win_15_ea_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_opentest4j_opentest4j_1_2_0.xml b/.idea/libraries/Maven__org_opentest4j_opentest4j_1_2_0.xml new file mode 100644 index 0000000..fbc1b16 --- /dev/null +++ b/.idea/libraries/Maven__org_opentest4j_opentest4j_1_2_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_postgresql_postgresql_42_2_12_jre7.xml b/.idea/libraries/Maven__org_postgresql_postgresql_42_2_12_jre7.xml new file mode 100644 index 0000000..772d169 --- /dev/null +++ b/.idea/libraries/Maven__org_postgresql_postgresql_42_2_12_jre7.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_slf4j_slf4j_api_1_7_5.xml b/.idea/libraries/Maven__org_slf4j_slf4j_api_1_7_5.xml new file mode 100644 index 0000000..6f808f1 --- /dev/null +++ b/.idea/libraries/Maven__org_slf4j_slf4j_api_1_7_5.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_sonatype_aether_aether_api_1_7.xml b/.idea/libraries/Maven__org_sonatype_aether_aether_api_1_7.xml new file mode 100644 index 0000000..1388816 --- /dev/null +++ b/.idea/libraries/Maven__org_sonatype_aether_aether_api_1_7.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_sonatype_aether_aether_impl_1_7.xml b/.idea/libraries/Maven__org_sonatype_aether_aether_impl_1_7.xml new file mode 100644 index 0000000..508e3f4 --- /dev/null +++ b/.idea/libraries/Maven__org_sonatype_aether_aether_impl_1_7.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_sonatype_aether_aether_spi_1_7.xml b/.idea/libraries/Maven__org_sonatype_aether_aether_spi_1_7.xml new file mode 100644 index 0000000..d75c837 --- /dev/null +++ b/.idea/libraries/Maven__org_sonatype_aether_aether_spi_1_7.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_sonatype_aether_aether_util_1_7.xml b/.idea/libraries/Maven__org_sonatype_aether_aether_util_1_7.xml new file mode 100644 index 0000000..47b2dc9 --- /dev/null +++ b/.idea/libraries/Maven__org_sonatype_aether_aether_util_1_7.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_sonatype_plexus_plexus_cipher_1_4.xml b/.idea/libraries/Maven__org_sonatype_plexus_plexus_cipher_1_4.xml new file mode 100644 index 0000000..7316193 --- /dev/null +++ b/.idea/libraries/Maven__org_sonatype_plexus_plexus_cipher_1_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_sonatype_plexus_plexus_sec_dispatcher_1_3.xml b/.idea/libraries/Maven__org_sonatype_plexus_plexus_sec_dispatcher_1_3.xml new file mode 100644 index 0000000..bb61d0e --- /dev/null +++ b/.idea/libraries/Maven__org_sonatype_plexus_plexus_sec_dispatcher_1_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_sonatype_sisu_sisu_guice_noaop_2_1_7.xml b/.idea/libraries/Maven__org_sonatype_sisu_sisu_guice_noaop_2_1_7.xml new file mode 100644 index 0000000..b722b5a --- /dev/null +++ b/.idea/libraries/Maven__org_sonatype_sisu_sisu_guice_noaop_2_1_7.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_sonatype_sisu_sisu_inject_bean_1_4_2.xml b/.idea/libraries/Maven__org_sonatype_sisu_sisu_inject_bean_1_4_2.xml new file mode 100644 index 0000000..67fb880 --- /dev/null +++ b/.idea/libraries/Maven__org_sonatype_sisu_sisu_inject_bean_1_4_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_sonatype_sisu_sisu_inject_plexus_1_4_2.xml b/.idea/libraries/Maven__org_sonatype_sisu_sisu_inject_plexus_1_4_2.xml new file mode 100644 index 0000000..714626a --- /dev/null +++ b/.idea/libraries/Maven__org_sonatype_sisu_sisu_inject_plexus_1_4_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__oro_oro_2_0_8.xml b/.idea/libraries/Maven__oro_oro_2_0_8.xml new file mode 100644 index 0000000..25203a0 --- /dev/null +++ b/.idea/libraries/Maven__oro_oro_2_0_8.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__sslext_sslext_1_2_0.xml b/.idea/libraries/Maven__sslext_sslext_1_2_0.xml new file mode 100644 index 0000000..e8c7831 --- /dev/null +++ b/.idea/libraries/Maven__sslext_sslext_1_2_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..972ec8d --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,11 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..af49dbc --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..6c0b863 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Model/ModelProject.iml b/Model/ModelProject.iml new file mode 100644 index 0000000..bb89d2d --- /dev/null +++ b/Model/ModelProject.iml @@ -0,0 +1,143 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Model/checkstyle2020.xml b/Model/checkstyle2020.xml new file mode 100644 index 0000000..c8a7a7b --- /dev/null +++ b/Model/checkstyle2020.xml @@ -0,0 +1,254 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Model/pom.xml b/Model/pom.xml new file mode 100644 index 0000000..8bb5dc0 --- /dev/null +++ b/Model/pom.xml @@ -0,0 +1,190 @@ + + + 4.0.0 + + + 3107 + SudokuGameProject + 2.0 + + ModelProject + jar + SudokuModel + + + + + org.apache.maven.plugins + maven-project-info-reports-plugin + 3.0.0 + + + org.apache.maven.plugins + maven-checkstyle-plugin + 3.1.1 + + checkstyle2020.xml + UTF-8 + true + false + + + + + checkstyle + + + + + + org.jacoco + jacoco-maven-plugin + 0.8.5 + + + + report + + + + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.1 + + + org.apache.maven.plugins + maven-surefire-plugin + 3.0.0-M4 + + 0 + false + false + + + + org.apache.maven.plugins + maven-checkstyle-plugin + 3.1.1 + + **/module-info.java + checkstyle2020.xml + UTF-8 + true + true + false + + + + checkstyle + verify + + check + + + + + + com.puppycrawl.tools + checkstyle + 8.30 + + + + + org.jacoco + jacoco-maven-plugin + 0.8.5 + + + default-prepare-agent + + prepare-agent + + + + default-report + + report + + + + default-check + + check + + + + + BUNDLE + + + COMPLEXITY + COVEREDRATIO + 0.60 + + + + + + + + + + org.apache.maven.plugins + maven-site-plugin + 3.8.2 + + + + + + + org.junit.jupiter + junit-jupiter-engine + 5.6.0 + test + + + org.junit.jupiter + junit-jupiter-api + 5.6.0 + test + + + org.apache.maven.plugins + maven-project-info-reports-plugin + 3.0.0 + + + javax.persistence + javax.persistence-api + 2.2 + + + org.hibernate.orm + hibernate-core + 6.0.0.Alpha5 + + + org.postgresql + postgresql + 42.2.12.jre7 + + + + + UTF-8 + 11 + 11 + + + \ No newline at end of file diff --git a/Model/src/main/java/module-info.java b/Model/src/main/java/module-info.java new file mode 100644 index 0000000..8a197b6 --- /dev/null +++ b/Model/src/main/java/module-info.java @@ -0,0 +1,22 @@ +module Model { + requires java.persistence; + requires java.sql; + requires commons.lang3; + requires org.hibernate.orm.core; + + opens sudoku.consts; + opens sudoku.dao; + opens sudoku.database; + opens sudoku.exceptions; + opens sudoku.gamestate; + opens sudoku.model; + opens sudoku.solver; + + exports sudoku.consts; + exports sudoku.dao; + exports sudoku.database; + exports sudoku.exceptions; + exports sudoku.gamestate; + exports sudoku.model; + exports sudoku.solver; +} \ No newline at end of file diff --git a/Model/src/main/java/sudoku/consts/Consts.java b/Model/src/main/java/sudoku/consts/Consts.java new file mode 100644 index 0000000..ee752af --- /dev/null +++ b/Model/src/main/java/sudoku/consts/Consts.java @@ -0,0 +1,20 @@ +package sudoku.consts; + +public class Consts { + + private Consts() { + } + + public static final int UNINITIALIZED = 0; + public static final int MAX_VALUE = 9; + public static final int BOX_SIZE = 3; + public static final int SIZE = 9; + + public static final String ROW_OUT_OF_BOUNDS = "Array row index out of range (0-8) - "; + public static final String COL_OUT_OF_BOUNDS = "Array column index out of range (0-8) - "; + public static final String INVALID_LENGTH = "Array doesn't have required number of elements"; + public static final String INVALID_VALUE = "Value can't be less than 0 and more than 9"; + public static final String OUT_OF_BOUNDS = "One of provided indexes (x or y) is invalid"; + public static final String NULL_ELEMENT = "Array element cannot be null"; + public static final String NULL_ARRAY = "Provided array is null"; +} diff --git a/Model/src/main/java/sudoku/dao/Dao.java b/Model/src/main/java/sudoku/dao/Dao.java new file mode 100644 index 0000000..8507bf1 --- /dev/null +++ b/Model/src/main/java/sudoku/dao/Dao.java @@ -0,0 +1,10 @@ +package sudoku.dao; + +import sudoku.exceptions.ReadBoardException; +import sudoku.exceptions.WriteBoardException; + +public interface Dao { + T read() throws ReadBoardException; + + void write(T obj) throws WriteBoardException; +} diff --git a/Model/src/main/java/sudoku/dao/FileSudokuBoardDao.java b/Model/src/main/java/sudoku/dao/FileSudokuBoardDao.java new file mode 100644 index 0000000..c404a46 --- /dev/null +++ b/Model/src/main/java/sudoku/dao/FileSudokuBoardDao.java @@ -0,0 +1,56 @@ +package sudoku.dao; + +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import sudoku.exceptions.ReadBoardException; +import sudoku.exceptions.WriteBoardException; +import sudoku.model.SudokuBoard; + + +public class FileSudokuBoardDao implements Dao, AutoCloseable { + + private final String fileName; + + public FileSudokuBoardDao(String fileName) { + this.fileName = fileName; + } + + @Override + public SudokuBoard read() throws ReadBoardException { + SudokuBoard sudokuBoard; + try (FileInputStream fileInputStream = new FileInputStream(fileName)) { + ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream); + sudokuBoard = (SudokuBoard) objectInputStream.readObject(); + } catch (IOException | ClassNotFoundException exception) { + throw new ReadBoardException("PLACEHOLDER", exception); + } + return sudokuBoard; + } + + @Override + public void write(SudokuBoard obj) throws WriteBoardException { + try (FileOutputStream fileOutputStream = new FileOutputStream(fileName)) { + ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream); + objectOutputStream.writeObject(obj); + } catch (IOException exception) { + throw new WriteBoardException("PLACEHOLDER", exception); + } + } + + + @Override + public void close() { + //There is nothing to be released in this class + } + + //Uncommenting causes checkstyle error + /*@Override + public void finalize() throws Throwable { + //Deprecated since Java 9 + //There is nothing to be released in this class + super.finalize(); + }*/ +} diff --git a/Model/src/main/java/sudoku/dao/JpaSudokuBoardDao.java b/Model/src/main/java/sudoku/dao/JpaSudokuBoardDao.java new file mode 100644 index 0000000..943ca0d --- /dev/null +++ b/Model/src/main/java/sudoku/dao/JpaSudokuBoardDao.java @@ -0,0 +1,95 @@ +package sudoku.dao; + +import java.util.List; +import javax.persistence.EntityManager; +import javax.persistence.EntityManagerFactory; +import javax.persistence.Persistence; +import sudoku.database.Board; +import sudoku.exceptions.ReadBoardException; +import sudoku.exceptions.WriteBoardException; +import sudoku.model.SudokuBoard; + +public class JpaSudokuBoardDao implements Dao, AutoCloseable { + private final EntityManager entityManager; + private String name; + private Long id; + + private JpaSudokuBoardDao() { + EntityManagerFactory factory = Persistence.createEntityManagerFactory("unit"); + entityManager = factory.createEntityManager(); + } + + public JpaSudokuBoardDao(Long id) { + this(); + this.id = id; + } + + public JpaSudokuBoardDao(String name) { + this(); + this.name = name; + } + + @Override + public SudokuBoard read() throws ReadBoardException { + if (id != null) { + return getById(); + } else if (name != null) { + return getByName(); + } else { + throw new ReadBoardException("PLACEHOLDER", new IllegalArgumentException()); + } + } + + @Override + public void write(SudokuBoard obj) throws WriteBoardException { + if (name == null) { + throw new WriteBoardException(); + } + entityManager.getTransaction().begin(); + entityManager.persist(wrapSudokuBoard(obj)); + entityManager.getTransaction().commit(); + } + + private Board wrapSudokuBoard(SudokuBoard sudokuBoard) { + return new Board(sudokuBoard, name); + } + + private SudokuBoard getById() throws ReadBoardException { + try { + entityManager.getTransaction().begin(); + Board board = entityManager.find(Board.class, id); + entityManager.getTransaction().commit(); + if (board == null) { + return null; + } + return board.deserialize(); + + } catch (Exception exception) { + throw new ReadBoardException("PLACEHOLDER", exception); + } + } + + private SudokuBoard getByName() throws ReadBoardException { + try { + entityManager.getTransaction().begin(); + @SuppressWarnings("rawtypes") + List list = entityManager.createQuery( + "SELECT board FROM Board board WHERE board.name = :n" + ).setParameter("n", name).getResultList(); + + entityManager.getTransaction().commit(); + if (!list.isEmpty()) { + Board board = (Board) list.get(0); + return board.deserialize(); + } + return null; + } catch (Exception exception) { + throw new ReadBoardException("PLACEHOLDER", exception); + } + } + + @Override + public void close() { + entityManager.close(); + } +} diff --git a/Model/src/main/java/sudoku/dao/SudokuBoardDaoFactory.java b/Model/src/main/java/sudoku/dao/SudokuBoardDaoFactory.java new file mode 100644 index 0000000..e5f1207 --- /dev/null +++ b/Model/src/main/java/sudoku/dao/SudokuBoardDaoFactory.java @@ -0,0 +1,17 @@ +package sudoku.dao; + +import sudoku.model.SudokuBoard; + +public class SudokuBoardDaoFactory { + public Dao getFileDao(String fileName) { + return new FileSudokuBoardDao(fileName); + } + + public Dao getJpaDao(Long id) { + return new JpaSudokuBoardDao(id); + } + + public Dao getJpaDao(String name) { + return new JpaSudokuBoardDao(name); + } +} diff --git a/Model/src/main/java/sudoku/database/Board.java b/Model/src/main/java/sudoku/database/Board.java new file mode 100644 index 0000000..c714db6 --- /dev/null +++ b/Model/src/main/java/sudoku/database/Board.java @@ -0,0 +1,80 @@ +package sudoku.database; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.util.Objects; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Lob; +import javax.persistence.Table; +import sudoku.model.SudokuBoard; + +// Pisząc kwerendy istotne jest by NIE odwoływać się do nazwy tabeli, lecz nazwy encji (Board). + +@Entity +@Table(name = "board") +public class Board { + @Id + @GeneratedValue + private Long id; + + @Column(name = "name") + private String name; + + @Column(name = "difficulty") + private String difficulty; + + @Lob + @Column(name = "board") + private byte[] board; + + public Board() { + } + + public Board(SudokuBoard sudokuBoard, String name) { + this.name = name; + this.difficulty = sudokuBoard.getDifficulty().name(); + ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); + try { + ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream); + objectOutputStream.writeObject(Objects.requireNonNull(sudokuBoard)); + objectOutputStream.flush(); + board = byteArrayOutputStream.toByteArray(); + } catch (IOException exception) { + exception.printStackTrace(); + } + } + + public SudokuBoard deserialize() { + SudokuBoard sudokuBoard = null; + ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(board); + try { + ObjectInputStream objectInputStream = new ObjectInputStream(byteArrayInputStream); + sudokuBoard = (SudokuBoard) objectInputStream.readObject(); + } catch (IOException | ClassNotFoundException exception) { + exception.printStackTrace(); + } + return sudokuBoard; + } + + public Long getId() { + return id; + } + + public String getName() { + return name; + } + + public String getDifficulty() { + return difficulty; + } + + public byte[] getBoard() { + return board; + } +} diff --git a/Model/src/main/java/sudoku/database/DatabaseManager.java b/Model/src/main/java/sudoku/database/DatabaseManager.java new file mode 100644 index 0000000..833632a --- /dev/null +++ b/Model/src/main/java/sudoku/database/DatabaseManager.java @@ -0,0 +1,77 @@ +package sudoku.database; + +import java.util.List; +import javax.persistence.EntityManager; +import javax.persistence.EntityManagerFactory; +import javax.persistence.Persistence; + +public class DatabaseManager implements AutoCloseable { + private final EntityManager entityManager; + + public DatabaseManager() { + EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("unit"); + entityManager = entityManagerFactory.createEntityManager(); + } + + public String getNameFromId(long id) { + entityManager.getTransaction().begin(); + @SuppressWarnings("unchecked") + List results = entityManager.createQuery( + "SELECT name FROM Board board WHERE board.id = :i" + ).setParameter("i", id).getResultList(); + if (!results.isEmpty()) { + String name = results.get(0); + entityManager.getTransaction().commit(); + return name; + } + return ""; + } + + public boolean checkIfNameExists(String name) { + entityManager.getTransaction().begin(); + boolean empty = entityManager.createQuery( + "SELECT board FROM Board board WHERE board.name = :n" + ).setParameter("n", name).getResultList().isEmpty(); + entityManager.getTransaction().commit(); + return !empty; + } + + public List getAllEntries() { + entityManager.getTransaction().begin(); + @SuppressWarnings("unchecked") + List boards = entityManager.createQuery( + "SELECT board FROM Board board" + ).getResultList(); + entityManager.getTransaction().commit(); + return boards; + } + + public void removeData(String name) { + entityManager.getTransaction().begin(); + entityManager.createQuery("DELETE FROM Board WHERE name = :n") + .setParameter("n", name).executeUpdate(); + entityManager.getTransaction().commit(); + } + + public void removeAll() { + entityManager.getTransaction().begin(); + entityManager.createQuery("DELETE FROM Board").executeUpdate(); + entityManager.getTransaction().commit(); + } + + @Deprecated + public void addObject(Board board) { + entityManager.getTransaction().begin(); + entityManager.persist(board); + entityManager.getTransaction().commit(); + } + + public void releaseResources() { + entityManager.close(); + } + + @Override + public void close() { + releaseResources(); + } +} diff --git a/Model/src/main/java/sudoku/exceptions/ContainerOutOfBoundsException.java b/Model/src/main/java/sudoku/exceptions/ContainerOutOfBoundsException.java new file mode 100644 index 0000000..ed43d09 --- /dev/null +++ b/Model/src/main/java/sudoku/exceptions/ContainerOutOfBoundsException.java @@ -0,0 +1,11 @@ +package sudoku.exceptions; + +public class ContainerOutOfBoundsException extends SudokuBoardException { + public ContainerOutOfBoundsException() { + super(); + } + + public ContainerOutOfBoundsException(String message, Throwable cause) { + super(message, cause); + } +} diff --git a/Model/src/main/java/sudoku/exceptions/FieldOutOfBoundsException.java b/Model/src/main/java/sudoku/exceptions/FieldOutOfBoundsException.java new file mode 100644 index 0000000..1dac078 --- /dev/null +++ b/Model/src/main/java/sudoku/exceptions/FieldOutOfBoundsException.java @@ -0,0 +1,11 @@ +package sudoku.exceptions; + +public class FieldOutOfBoundsException extends SudokuBoardException { + public FieldOutOfBoundsException() { + super(); + } + + public FieldOutOfBoundsException(String message, Throwable cause) { + super(message, cause); + } +} diff --git a/Model/src/main/java/sudoku/exceptions/InvalidContainerLengthException.java b/Model/src/main/java/sudoku/exceptions/InvalidContainerLengthException.java new file mode 100644 index 0000000..e0de3a6 --- /dev/null +++ b/Model/src/main/java/sudoku/exceptions/InvalidContainerLengthException.java @@ -0,0 +1,11 @@ +package sudoku.exceptions; + +public class InvalidContainerLengthException extends SudokuContainerException { + public InvalidContainerLengthException() { + super(); + } + + public InvalidContainerLengthException(String message, Throwable cause) { + super(message, cause); + } +} diff --git a/Model/src/main/java/sudoku/exceptions/InvalidFieldValueException.java b/Model/src/main/java/sudoku/exceptions/InvalidFieldValueException.java new file mode 100644 index 0000000..768c0dc --- /dev/null +++ b/Model/src/main/java/sudoku/exceptions/InvalidFieldValueException.java @@ -0,0 +1,11 @@ +package sudoku.exceptions; + +public class InvalidFieldValueException extends Exception { + public InvalidFieldValueException() { + super(); + } + + public InvalidFieldValueException(String message, Throwable cause) { + super(message, cause); + } +} diff --git a/Model/src/main/java/sudoku/exceptions/NullContainerException.java b/Model/src/main/java/sudoku/exceptions/NullContainerException.java new file mode 100644 index 0000000..5b7dad1 --- /dev/null +++ b/Model/src/main/java/sudoku/exceptions/NullContainerException.java @@ -0,0 +1,11 @@ +package sudoku.exceptions; + +public class NullContainerException extends SudokuContainerException { + public NullContainerException() { + super(); + } + + public NullContainerException(String message, Throwable cause) { + super(message, cause); + } +} diff --git a/Model/src/main/java/sudoku/exceptions/ReadBoardException.java b/Model/src/main/java/sudoku/exceptions/ReadBoardException.java new file mode 100644 index 0000000..f1e1b24 --- /dev/null +++ b/Model/src/main/java/sudoku/exceptions/ReadBoardException.java @@ -0,0 +1,11 @@ +package sudoku.exceptions; + +public class ReadBoardException extends SudokuBoardDaoException { + public ReadBoardException() { + super(); + } + + public ReadBoardException(String message, Throwable cause) { + super(message, cause); + } +} diff --git a/Model/src/main/java/sudoku/exceptions/SudokuBoardDaoException.java b/Model/src/main/java/sudoku/exceptions/SudokuBoardDaoException.java new file mode 100644 index 0000000..d51048a --- /dev/null +++ b/Model/src/main/java/sudoku/exceptions/SudokuBoardDaoException.java @@ -0,0 +1,11 @@ +package sudoku.exceptions; + +public class SudokuBoardDaoException extends Exception { + public SudokuBoardDaoException() { + super(); + } + + public SudokuBoardDaoException(String message, Throwable cause) { + super(message, cause); + } +} diff --git a/Model/src/main/java/sudoku/exceptions/SudokuBoardException.java b/Model/src/main/java/sudoku/exceptions/SudokuBoardException.java new file mode 100644 index 0000000..122d61d --- /dev/null +++ b/Model/src/main/java/sudoku/exceptions/SudokuBoardException.java @@ -0,0 +1,11 @@ +package sudoku.exceptions; + +public class SudokuBoardException extends Exception { + public SudokuBoardException() { + super(); + } + + public SudokuBoardException(String message, Throwable cause) { + super(message, cause); + } +} diff --git a/Model/src/main/java/sudoku/exceptions/SudokuContainerException.java b/Model/src/main/java/sudoku/exceptions/SudokuContainerException.java new file mode 100644 index 0000000..03e6161 --- /dev/null +++ b/Model/src/main/java/sudoku/exceptions/SudokuContainerException.java @@ -0,0 +1,11 @@ +package sudoku.exceptions; + +public class SudokuContainerException extends Exception { + public SudokuContainerException() { + super(); + } + + public SudokuContainerException(String message, Throwable cause) { + super(message, cause); + } +} diff --git a/Model/src/main/java/sudoku/exceptions/WriteBoardException.java b/Model/src/main/java/sudoku/exceptions/WriteBoardException.java new file mode 100644 index 0000000..81dfeca --- /dev/null +++ b/Model/src/main/java/sudoku/exceptions/WriteBoardException.java @@ -0,0 +1,11 @@ +package sudoku.exceptions; + +public class WriteBoardException extends SudokuBoardDaoException { + public WriteBoardException() { + super(); + } + + public WriteBoardException(String message, Throwable cause) { + super(message, cause); + } +} diff --git a/Model/src/main/java/sudoku/gamestate/BoardType.java b/Model/src/main/java/sudoku/gamestate/BoardType.java new file mode 100644 index 0000000..81bec98 --- /dev/null +++ b/Model/src/main/java/sudoku/gamestate/BoardType.java @@ -0,0 +1,6 @@ +package sudoku.gamestate; + +public enum BoardType { + ORIGINAL, + USER +} diff --git a/Model/src/main/java/sudoku/gamestate/CoordinatesWrapper.java b/Model/src/main/java/sudoku/gamestate/CoordinatesWrapper.java new file mode 100644 index 0000000..eb2d896 --- /dev/null +++ b/Model/src/main/java/sudoku/gamestate/CoordinatesWrapper.java @@ -0,0 +1,27 @@ +package sudoku.gamestate; + +import java.io.Serializable; + +public class CoordinatesWrapper implements Serializable { + private final int crX; + private final int crY; + private final T obj; + + CoordinatesWrapper(int crX, int crY, T obj) { + this.crX = crX; + this.crY = crY; + this.obj = obj; + } + + public int getCrX() { + return crX; + } + + public int getCrY() { + return crY; + } + + public T getObj() { + return obj; + } +} diff --git a/Model/src/main/java/sudoku/gamestate/Difficulty.java b/Model/src/main/java/sudoku/gamestate/Difficulty.java new file mode 100644 index 0000000..025c9a7 --- /dev/null +++ b/Model/src/main/java/sudoku/gamestate/Difficulty.java @@ -0,0 +1,17 @@ +package sudoku.gamestate; + +public enum Difficulty { + EASY(60), + NORMAL(70), + HARD(75); + + private final int value; + + Difficulty(final int newValue) { + value = newValue; + } + + public int getValue() { + return value; + } +} diff --git a/Model/src/main/java/sudoku/gamestate/GameState.java b/Model/src/main/java/sudoku/gamestate/GameState.java new file mode 100644 index 0000000..71440b6 --- /dev/null +++ b/Model/src/main/java/sudoku/gamestate/GameState.java @@ -0,0 +1,129 @@ +package sudoku.gamestate; + +import java.util.Arrays; +import java.util.List; +import java.util.Random; +import sudoku.consts.Consts; +import sudoku.exceptions.FieldOutOfBoundsException; +import sudoku.exceptions.InvalidFieldValueException; +import sudoku.model.SudokuBoard; +import sudoku.model.SudokuField; +import sudoku.solver.BacktrackingSudokuSolver; + +public class GameState { + + private final SudokuBoard board; + private final String gameName; + + public GameState(Difficulty difficulty) throws + FieldOutOfBoundsException, InvalidFieldValueException { + this(difficulty, "Generic Game"); + } + + public GameState(SudokuBoard board, String gameName) { + this.board = board; + this.gameName = gameName; + if (board.getInitialValues() == null) { + prepareTable(); + } + } + + public GameState(Difficulty difficulty, String gameName) throws + FieldOutOfBoundsException, InvalidFieldValueException { + board = new SudokuBoard(new BacktrackingSudokuSolver(), difficulty); + board.solveGame(); + this.gameName = gameName; + prepareTable(); + } + + @SuppressWarnings("unchecked") + private void prepareTable() { + List[] userValues = new List[Consts.SIZE]; + SudokuField[] userFields; + for (int i = 0; i < Consts.SIZE; i++) { + userFields = new SudokuField[Consts.SIZE]; + for (int j = 0; j < Consts.SIZE; j++) { + userFields[j] = new SudokuField(); + try { + userFields[j].setFieldValue(board.getField(j, i, BoardType.ORIGINAL)); + } catch (InvalidFieldValueException | FieldOutOfBoundsException e) { + e.printStackTrace(); + } + } + userValues[i] = Arrays.asList(userFields); + } + randomize(Arrays.asList(userValues)); + } + + private void randomize(List> list) { + Random random = new Random(); + int indexX = random.nextInt(9); + int indexY = random.nextInt(9); + + for (byte i = 0; i < board.getDifficulty().getValue(); i++) { + try { + while (list.get(indexY).get(indexX).getFieldValue() == 0) { + indexX = random.nextInt(9); + indexY = random.nextInt(9); + } + list.get(indexY).get(indexX).setFieldValue(0); + + } catch (InvalidFieldValueException exception) { + exception.printStackTrace(); + } + } + board.setUserBoard(list); + generateInitialList(list); + } + + @SuppressWarnings("unchecked") + private void generateInitialList(List> list) { + int fieldCount = 81 - board.getDifficulty().getValue(); + CoordinatesWrapper[] wrappers = new CoordinatesWrapper[fieldCount]; + + int index = 0; + int value; + + for (int i = 0; i < 9; i++) { + for (int j = 0; j < 9; j++) { + value = list.get(i).get(j).getFieldValue(); + if (value != 0) { + wrappers[index] = new CoordinatesWrapper<>(j, i, value); + index++; + } + } + } + board.setInitialValues(Arrays.asList(wrappers)); + } + + public void reset() { + try { + for (int i = 0; i < 9; i++) { + for (int j = 0; j < 9; j++) { + board.setField(j, i, 0, BoardType.USER); + } + } + for (CoordinatesWrapper cw : board.getInitialValues()) { + board.setField(cw.getCrX(), cw.getCrY(), cw.getObj(), BoardType.USER); + } + } catch (FieldOutOfBoundsException | InvalidFieldValueException exception) { + exception.printStackTrace(); + } + } + + public boolean compareFields(int x, int y) throws FieldOutOfBoundsException { + return board.getField(x, y, BoardType.ORIGINAL) == board.getField(x, y, BoardType.USER); + } + + public SudokuBoard getBoard() { + return board; + } + + public Difficulty getDifficulty() { + return board.getDifficulty(); + } + + public String getGameName() { + return gameName; + } +} diff --git a/Model/src/main/java/sudoku/model/SudokuBoard.java b/Model/src/main/java/sudoku/model/SudokuBoard.java new file mode 100644 index 0000000..7b46dc0 --- /dev/null +++ b/Model/src/main/java/sudoku/model/SudokuBoard.java @@ -0,0 +1,240 @@ +package sudoku.model; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.io.Serializable; +import java.util.Arrays; +import java.util.List; +import java.util.Objects; +import org.apache.commons.lang3.builder.EqualsBuilder; +import org.apache.commons.lang3.builder.HashCodeBuilder; +import org.apache.commons.lang3.builder.ToStringBuilder; +import sudoku.consts.Consts; +import sudoku.exceptions.ContainerOutOfBoundsException; +import sudoku.exceptions.FieldOutOfBoundsException; +import sudoku.exceptions.InvalidFieldValueException; +import sudoku.exceptions.SudokuBoardException; +import sudoku.exceptions.SudokuContainerException; +import sudoku.gamestate.BoardType; +import sudoku.gamestate.CoordinatesWrapper; +import sudoku.gamestate.Difficulty; +import sudoku.solver.SudokuSolver; + +public class SudokuBoard implements Serializable, Cloneable { + + private final SudokuSolver sudokuSolver; + private final List> board; + private List> userBoard; + private List> initialValues; + private Difficulty difficulty; + + public SudokuBoard(SudokuSolver solver) { + @SuppressWarnings("unchecked") + List[] array = new List[Consts.SIZE]; + SudokuField[] fields; + for (int i = 0; i < Consts.SIZE; i++) { + fields = new SudokuField[Consts.SIZE]; + for (int j = 0; j < Consts.SIZE; j++) { + fields[j] = new SudokuField(); + } + array[i] = Arrays.asList(fields); + } + board = Arrays.asList(array); + sudokuSolver = Objects.requireNonNull(solver); + } + + public SudokuBoard(SudokuSolver solver, Difficulty difficulty) { + this(solver); + this.difficulty = difficulty; + prepare(); + } + + public void prepare() { + try { + solveGame(); + + } catch (FieldOutOfBoundsException | InvalidFieldValueException e) { + e.printStackTrace(); + } + } + + public void solveGame() throws FieldOutOfBoundsException, InvalidFieldValueException { + sudokuSolver.solve(this); + } + + public List> getInitialValues() { + return initialValues; + } + + public int getField(int x, int y, BoardType boardType) throws FieldOutOfBoundsException { + if (x < 0 || y < 0 || x >= Consts.SIZE || y >= Consts.SIZE) { + throw new FieldOutOfBoundsException( + Consts.OUT_OF_BOUNDS, + new ArrayIndexOutOfBoundsException() + ); + } + if (boardType == BoardType.ORIGINAL) { + return board.get(y).get(x).getFieldValue(); + } else { + return userBoard.get(y).get(x).getFieldValue(); + } + } + + public void setField(int x, int y, int value, BoardType boardType) throws + FieldOutOfBoundsException, InvalidFieldValueException { + if (x < 0 || y < 0 || x >= Consts.SIZE || y >= Consts.SIZE) { + throw new FieldOutOfBoundsException( + Consts.OUT_OF_BOUNDS, + new ArrayIndexOutOfBoundsException() + ); + } + if (boardType == BoardType.ORIGINAL) { + board.get(y).get(x).setFieldValue(value); + } else { + userBoard.get(y).get(x).setFieldValue(value); + } + } + + @SuppressWarnings("unused") + private boolean checkBoard() throws SudokuBoardException, SudokuContainerException { + for (int i = 0; i < Consts.SIZE; i++) { + if (!(getRow(i).verify() || getColumn(i).verify())) { + return false; + } + } + for (int i = 0; i < Consts.SIZE; i += Consts.BOX_SIZE) { + for (int j = 0; j < Consts.SIZE; j += Consts.BOX_SIZE) { + if (!getBox(i, j).verify()) { + return false; + } + } + } + return true; + } + + public SudokuRow getRow(int y) throws ContainerOutOfBoundsException, SudokuContainerException { + if (y < 0 || y > 8) { + throw new ContainerOutOfBoundsException( + Consts.ROW_OUT_OF_BOUNDS + " " + y, + new IllegalArgumentException() + ); + } + return new SudokuRow(board.get(y)); + } + + public SudokuColumn getColumn(int x) throws + ContainerOutOfBoundsException, SudokuContainerException { + if (x < 0 || x > 8) { + throw new ContainerOutOfBoundsException( + Consts.COL_OUT_OF_BOUNDS + " " + x, + new IllegalArgumentException() + ); + } + List column = Arrays.asList(new SudokuField[Consts.SIZE]); + for (int i = 0; i < Consts.SIZE; i++) { + column.set(i, board.get(i).get(x)); + } + return new SudokuColumn(column); + } + + public SudokuBox getBox(int x, int y) throws SudokuBoardException, SudokuContainerException { + if (x < 0 || x >= Consts.SIZE) { + throw new ContainerOutOfBoundsException( + Consts.COL_OUT_OF_BOUNDS + " " + x, + new IllegalArgumentException() + ); + } + if (y < 0 || y >= Consts.SIZE) { + throw new ContainerOutOfBoundsException( + Consts.ROW_OUT_OF_BOUNDS + " " + y, + new IllegalArgumentException() + ); + } + + List box = Arrays.asList(new SudokuField[Consts.SIZE]); + int k = 0; + //Get first indexes of box + int boxY = (y % Consts.BOX_SIZE) * Consts.BOX_SIZE; + int boxX = (x % Consts.BOX_SIZE) * Consts.BOX_SIZE; + for (int i = boxY; i < boxY + Consts.BOX_SIZE; i++) { + for (int j = boxX; j < boxX + Consts.BOX_SIZE; j++) { + box.set(k++, board.get(i).get(j)); + } + } + return new SudokuBox(box); + } + + public void setInitialValues(List> initialValues) { + this.initialValues = Objects.requireNonNull(initialValues); + } + + public void setUserBoard(List> userBoard) { + this.userBoard = Objects.requireNonNull(userBoard); + } + + public Difficulty getDifficulty() { + return difficulty; + } + + @Override + public final boolean equals(Object o) { + if (this == o) { + return true; + } + + if (o == null || getClass() != o.getClass()) { + return false; + } + + SudokuBoard that = (SudokuBoard) o; + + return new EqualsBuilder() + .append(board, that.board) + .isEquals(); + } + + @Override + public final int hashCode() { + return new HashCodeBuilder(17, 37) + .append(board) + .toHashCode(); + } + + @Override + public String toString() { + return new ToStringBuilder(this) + .append("sudokuSolver", sudokuSolver) + .append("board", board) + .toString(); + } + + @Override + @SuppressWarnings("all") + public SudokuBoard clone() { + + ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); + try { + ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream); + objectOutputStream.writeObject(this); + + ByteArrayInputStream byteArrayInputStream = + new ByteArrayInputStream(byteArrayOutputStream.toByteArray()); + ObjectInputStream objectInputStream = new ObjectInputStream(byteArrayInputStream); + try { + return (SudokuBoard) objectInputStream.readObject(); + } catch (ClassNotFoundException exception) { + return null; + } + } catch (IOException exception) { + return null; + } + + } + + public void setDifficulty(Difficulty difficulty) { + this.difficulty = difficulty; + } +} \ No newline at end of file diff --git a/Model/src/main/java/sudoku/model/SudokuBox.java b/Model/src/main/java/sudoku/model/SudokuBox.java new file mode 100644 index 0000000..ae8e986 --- /dev/null +++ b/Model/src/main/java/sudoku/model/SudokuBox.java @@ -0,0 +1,16 @@ +package sudoku.model; + +import java.util.List; +import sudoku.exceptions.SudokuContainerException; + +public class SudokuBox extends SudokuContainer { + + public SudokuBox(List values) throws SudokuContainerException { + super(values); + } + + @Override + protected SudokuBox clone() throws CloneNotSupportedException { + return (SudokuBox) super.clone(); + } +} diff --git a/Model/src/main/java/sudoku/model/SudokuColumn.java b/Model/src/main/java/sudoku/model/SudokuColumn.java new file mode 100644 index 0000000..f6cd73d --- /dev/null +++ b/Model/src/main/java/sudoku/model/SudokuColumn.java @@ -0,0 +1,15 @@ +package sudoku.model; + +import java.util.List; +import sudoku.exceptions.SudokuContainerException; + +public class SudokuColumn extends SudokuContainer { + public SudokuColumn(List values) throws SudokuContainerException { + super(values); + } + + @Override + protected SudokuColumn clone() throws CloneNotSupportedException { + return (SudokuColumn) super.clone(); + } +} diff --git a/Model/src/main/java/sudoku/model/SudokuContainer.java b/Model/src/main/java/sudoku/model/SudokuContainer.java new file mode 100644 index 0000000..c65814b --- /dev/null +++ b/Model/src/main/java/sudoku/model/SudokuContainer.java @@ -0,0 +1,86 @@ +package sudoku.model; + +import java.io.Serializable; +import java.security.InvalidParameterException; +import java.util.HashSet; +import java.util.List; +import java.util.Objects; +import org.apache.commons.lang3.builder.EqualsBuilder; +import org.apache.commons.lang3.builder.HashCodeBuilder; +import org.apache.commons.lang3.builder.ToStringBuilder; +import sudoku.consts.Consts; +import sudoku.exceptions.InvalidContainerLengthException; +import sudoku.exceptions.NullContainerException; +import sudoku.exceptions.SudokuContainerException; + +public abstract class SudokuContainer implements Serializable, Cloneable { + + protected final List values; + private final HashSet set = new HashSet<>(); + + public SudokuContainer(List values) throws SudokuContainerException { + try { + this.values = Objects.requireNonNull(values, Consts.NULL_ARRAY); + } catch (NullPointerException exception) { + throw new NullContainerException( + Consts.NULL_ARRAY, + exception + ); + } + if (values.size() != Consts.SIZE) { + throw new InvalidContainerLengthException( + Consts.INVALID_LENGTH, + new InvalidParameterException() + ); + } + for (SudokuField field : values) { + try { + Objects.requireNonNull(field, Consts.NULL_ELEMENT); + } catch (NullPointerException exception) { + throw new NullContainerException(Consts.NULL_ARRAY, exception); + } + } + } + + public boolean verify() { + set.clear(); + set.addAll(values); + return set.size() == Consts.SIZE; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + + if (o == null || getClass() != o.getClass()) { + return false; + } + + SudokuContainer that = (SudokuContainer) o; + + return new EqualsBuilder() + .append(values, that.values) + .isEquals(); + } + + @Override + public int hashCode() { + return new HashCodeBuilder(19, 41) + .append(values) + .toHashCode(); + } + + @Override + public String toString() { + return new ToStringBuilder(this) + .append("values", values) + .toString(); + } + + @Override + protected SudokuContainer clone() throws CloneNotSupportedException { + return (SudokuContainer) super.clone(); + } +} diff --git a/Model/src/main/java/sudoku/model/SudokuField.java b/Model/src/main/java/sudoku/model/SudokuField.java new file mode 100644 index 0000000..dcfc0da --- /dev/null +++ b/Model/src/main/java/sudoku/model/SudokuField.java @@ -0,0 +1,68 @@ +package sudoku.model; + +import java.io.Serializable; +import org.apache.commons.lang3.builder.EqualsBuilder; +import org.apache.commons.lang3.builder.HashCodeBuilder; +import org.apache.commons.lang3.builder.ToStringBuilder; +import sudoku.consts.Consts; +import sudoku.exceptions.InvalidFieldValueException; + +public class SudokuField implements Serializable, Cloneable, Comparable { + + private int value; + + public int getFieldValue() { + return value; + } + + public void setFieldValue(int value) throws InvalidFieldValueException { + if (value < 0 || value > Consts.MAX_VALUE) { + throw new InvalidFieldValueException( + Consts.INVALID_VALUE, + new IllegalArgumentException() + ); + } + this.value = value; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + + if (o == null || getClass() != o.getClass()) { + return false; + } + + SudokuField that = (SudokuField) o; + + return new EqualsBuilder() + .append(value, that.value) + .isEquals(); + } + + @Override + public int hashCode() { + return new HashCodeBuilder(13, 31) + .append(value) + .toHashCode(); + } + + @Override + public String toString() { + return new ToStringBuilder(this) + .append("value", value) + .toString(); + } + + @Override + protected SudokuField clone() throws CloneNotSupportedException { + return (SudokuField) super.clone(); + } + + @Override + public int compareTo(SudokuField o) { + return Integer.compare(this.getFieldValue(), o.getFieldValue()); + } +} \ No newline at end of file diff --git a/Model/src/main/java/sudoku/model/SudokuRow.java b/Model/src/main/java/sudoku/model/SudokuRow.java new file mode 100644 index 0000000..11ee6ba --- /dev/null +++ b/Model/src/main/java/sudoku/model/SudokuRow.java @@ -0,0 +1,16 @@ +package sudoku.model; + +import java.util.List; +import sudoku.exceptions.SudokuContainerException; + +public class SudokuRow extends SudokuContainer { + + public SudokuRow(List values) throws SudokuContainerException { + super(values); + } + + @Override + protected SudokuRow clone() throws CloneNotSupportedException { + return (SudokuRow) super.clone(); + } +} diff --git a/Model/src/main/java/sudoku/solver/BacktrackingSudokuSolver.java b/Model/src/main/java/sudoku/solver/BacktrackingSudokuSolver.java new file mode 100644 index 0000000..3740045 --- /dev/null +++ b/Model/src/main/java/sudoku/solver/BacktrackingSudokuSolver.java @@ -0,0 +1,84 @@ +package sudoku.solver; + +import java.util.ArrayList; +import java.util.Collections; +import sudoku.consts.Consts; +import sudoku.exceptions.FieldOutOfBoundsException; +import sudoku.exceptions.InvalidFieldValueException; +import sudoku.gamestate.BoardType; +import sudoku.model.SudokuBoard; + +public class BacktrackingSudokuSolver implements SudokuSolver { + + private final ArrayList values = makeList(); + + private ArrayList makeList() { + ArrayList list = new ArrayList<>(); + for (int i = 1; i <= Consts.SIZE; i++) { + list.add(i); + } + return list; + } + + private boolean isNumberValid(SudokuBoard board, int x, int y, int value) throws + FieldOutOfBoundsException { + for (int i = 0; i < Consts.SIZE; i++) { + if (board.getField(i, y, BoardType.ORIGINAL) == value + || board.getField(x, i, BoardType.ORIGINAL) == value) { + return false; + } + } + + int sectionSize = (int) Math.sqrt(Consts.SIZE); + int sectionFirstRow = x - x % sectionSize; + int sectionFirstCol = y - y % sectionSize; + + for (int i = sectionFirstRow; i < sectionFirstRow + sectionSize; i++) { + for (int j = sectionFirstCol; j < sectionFirstCol + sectionSize; j++) { + if (board.getField(i, j, BoardType.ORIGINAL) == value) { + return false; + } + } + } + + return true; + } + + private boolean backtrackingAlgorithm(SudokuBoard board, int x, int y) throws + FieldOutOfBoundsException, InvalidFieldValueException { + boolean valid = false; + + Collections.shuffle(values); + for (int i = 0; i < values.size() && !valid; i++) { + if (isNumberValid(board, x, y, values.get(i))) { + board.setField(x, y, values.get(i), BoardType.ORIGINAL); + if (x == Consts.SIZE - 1) { + if (y == Consts.SIZE - 1) { + return true; + } + valid = backtrackingAlgorithm(board, 0, y + 1); + } else { + valid = backtrackingAlgorithm(board, x + 1, y); + } + } + } + if (!valid) { + board.setField(x, y, Consts.UNINITIALIZED, BoardType.ORIGINAL); + return false; + } + return true; + } + + @Override + public void solve(SudokuBoard board) throws + FieldOutOfBoundsException, InvalidFieldValueException { + if (board.getField(0, 0, BoardType.ORIGINAL) != Consts.UNINITIALIZED) { + for (int i = 0; i < Consts.SIZE; i++) { + for (int j = 0; j < Consts.SIZE; j++) { + board.setField(j, i, Consts.UNINITIALIZED, BoardType.ORIGINAL); + } + } + } + backtrackingAlgorithm(board, 0, 0); + } +} \ No newline at end of file diff --git a/Model/src/main/java/sudoku/solver/SudokuSolver.java b/Model/src/main/java/sudoku/solver/SudokuSolver.java new file mode 100644 index 0000000..7b13083 --- /dev/null +++ b/Model/src/main/java/sudoku/solver/SudokuSolver.java @@ -0,0 +1,10 @@ +package sudoku.solver; + +import java.io.Serializable; +import sudoku.exceptions.FieldOutOfBoundsException; +import sudoku.exceptions.InvalidFieldValueException; +import sudoku.model.SudokuBoard; + +public interface SudokuSolver extends Serializable { + void solve(SudokuBoard board) throws FieldOutOfBoundsException, InvalidFieldValueException; +} diff --git a/Model/src/test/java/sudoku/dao/FileSudokuBoardDaoTest.java b/Model/src/test/java/sudoku/dao/FileSudokuBoardDaoTest.java new file mode 100644 index 0000000..d4ce1c0 --- /dev/null +++ b/Model/src/test/java/sudoku/dao/FileSudokuBoardDaoTest.java @@ -0,0 +1,56 @@ +package sudoku.dao; + +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; + +import java.io.File; +import sudoku.exceptions.FieldOutOfBoundsException; +import sudoku.exceptions.InvalidFieldValueException; +import sudoku.exceptions.ReadBoardException; +import sudoku.exceptions.WriteBoardException; +import sudoku.model.SudokuBoard; +import sudoku.solver.BacktrackingSudokuSolver; + +class FileSudokuBoardDaoTest { + private final static String fileName = "SavedBoard.board"; + private final static SudokuBoard board = new SudokuBoard(new BacktrackingSudokuSolver()); + private final Dao fileSudokuBoardDao = + new SudokuBoardDaoFactory().getFileDao(fileName); + + @BeforeAll + static void initialize() throws FieldOutOfBoundsException, InvalidFieldValueException { + board.solveGame(); + } + + @Test + void writeTest() throws WriteBoardException { + fileSudokuBoardDao.write(board); + File file = new File(fileName); + Assertions.assertTrue(file.exists()); + Assertions.assertTrue(file.length() > 0); + } + + @Test + void readTest() throws ReadBoardException { + SudokuBoard loadedBoard = fileSudokuBoardDao.read(); + Assertions.assertNotNull(loadedBoard); + Assertions.assertEquals(loadedBoard, board); + } + + @Test + void closeTest() { + try (FileSudokuBoardDao ignored = new FileSudokuBoardDao(fileName)) { + Assertions.assertTrue(true); + } + } + + @AfterAll + static void cleanup() { + File file = new File(fileName); + if (file.exists()) { + Assertions.assertTrue(file.delete()); + } + } +} \ No newline at end of file diff --git a/Model/src/test/java/sudoku/gamestate/GameStateTest.java b/Model/src/test/java/sudoku/gamestate/GameStateTest.java new file mode 100644 index 0000000..5ed1f1d --- /dev/null +++ b/Model/src/test/java/sudoku/gamestate/GameStateTest.java @@ -0,0 +1,25 @@ +package sudoku.gamestate; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import sudoku.exceptions.FieldOutOfBoundsException; +import sudoku.exceptions.InvalidFieldValueException; + +class GameStateTest { + + @Test + public void GameStateConstructionTest() throws FieldOutOfBoundsException, InvalidFieldValueException { + GameState gameState = new GameState(Difficulty.NORMAL); + byte zerosCount = 0; + + for (int i = 0; i < 9; i++) { + for (int j = 0; j < 9; j++) { + if (gameState.getBoard().getField(i, j, BoardType.USER) == 0) { + zerosCount++; + } + } + } + Assertions.assertEquals(Difficulty.NORMAL.getValue(), zerosCount); + } + +} \ No newline at end of file diff --git a/Model/src/test/java/sudoku/model/SudokuBoardTest.java b/Model/src/test/java/sudoku/model/SudokuBoardTest.java new file mode 100644 index 0000000..12cc5a7 --- /dev/null +++ b/Model/src/test/java/sudoku/model/SudokuBoardTest.java @@ -0,0 +1,165 @@ +package sudoku.model; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import sudoku.consts.Consts; +import sudoku.exceptions.ContainerOutOfBoundsException; +import sudoku.exceptions.FieldOutOfBoundsException; +import sudoku.exceptions.InvalidFieldValueException; +import sudoku.exceptions.SudokuBoardException; +import sudoku.exceptions.SudokuContainerException; +import sudoku.gamestate.BoardType; +import sudoku.solver.BacktrackingSudokuSolver; + +class SudokuBoardTest { + + private final SudokuBoard sudokuBoard = new SudokuBoard(new BacktrackingSudokuSolver()); + + @Test + public void getFieldTest() throws FieldOutOfBoundsException { + Assertions.assertThrows( + FieldOutOfBoundsException.class, + () -> sudokuBoard.getField(-1, 4, BoardType.ORIGINAL)); + + Assertions.assertEquals(sudokuBoard.getField(0, 0, BoardType.ORIGINAL), 0); + } + + @Test + public void setFieldTest() throws FieldOutOfBoundsException, InvalidFieldValueException { + Assertions.assertThrows( + FieldOutOfBoundsException.class, + () -> sudokuBoard.setField(-1, 4, 1, BoardType.ORIGINAL)); + + Assertions.assertThrows( + InvalidFieldValueException.class, + () -> sudokuBoard.setField(1, 4, -1, BoardType.ORIGINAL)); + + sudokuBoard.setField(0, 0, 1, BoardType.ORIGINAL); + Assertions.assertEquals(sudokuBoard.getField(0, 0, BoardType.ORIGINAL), 1); + } + + @Test + public void getColumnTest() throws ContainerOutOfBoundsException, SudokuContainerException { + Assertions.assertThrows( + ContainerOutOfBoundsException.class, + () -> sudokuBoard.getColumn(-1)); + + Assertions.assertThrows( + ContainerOutOfBoundsException.class, + () -> sudokuBoard.getColumn(9)); + + Assertions.assertNotEquals(sudokuBoard.getColumn(0).values.size(), 0); + + for (SudokuField f : sudokuBoard.getColumn(0).values) { + Assertions.assertEquals(f.getFieldValue(), 0); + } + } + + @Test + public void getRowTest() throws ContainerOutOfBoundsException, SudokuContainerException { + Assertions.assertThrows( + ContainerOutOfBoundsException.class, + () -> sudokuBoard.getRow(-1)); + + Assertions.assertThrows( + ContainerOutOfBoundsException.class, + () -> sudokuBoard.getRow(9)); + + for (SudokuField f : sudokuBoard.getRow(0).values) { + Assertions.assertEquals(f.getFieldValue(), 0); + } + } + + @Test + public void getBoxTest() throws SudokuBoardException, SudokuContainerException { + Assertions.assertThrows( + ContainerOutOfBoundsException.class, + () -> sudokuBoard.getBox(-1, 5)); + + Assertions.assertThrows( + ContainerOutOfBoundsException.class, + () -> sudokuBoard.getBox(5, -1)); + + Assertions.assertThrows( + ContainerOutOfBoundsException.class, + () -> sudokuBoard.getBox(9, 4)); + + Assertions.assertThrows( + ContainerOutOfBoundsException.class, + () -> sudokuBoard.getBox(5, 9)); + + for (SudokuField f : sudokuBoard.getBox(0, 0).values) { + Assertions.assertEquals(f.getFieldValue(), 0); + } + } + + @Test + public void equalsTest() throws FieldOutOfBoundsException, InvalidFieldValueException { + Assertions.assertNotEquals(sudokuBoard, null); + Assertions.assertNotEquals(sudokuBoard, new SudokuField()); + Assertions.assertEquals(sudokuBoard, sudokuBoard); + + sudokuBoard.setField(0, 0, 2, BoardType.ORIGINAL); + SudokuBoard newSudokuBoard = sudokuBoard; + Assertions.assertEquals(sudokuBoard, newSudokuBoard); + + newSudokuBoard = new SudokuBoard(new BacktrackingSudokuSolver()); + Assertions.assertNotEquals(sudokuBoard, newSudokuBoard); + + for (int i = 0; i < Consts.SIZE; i++) { + for (int j = 0; j < Consts.SIZE; j++) { + sudokuBoard.setField(i, j, 1, BoardType.ORIGINAL); + newSudokuBoard.setField(i, j, 1, BoardType.ORIGINAL); + } + } + Assertions.assertEquals(sudokuBoard, newSudokuBoard); + } + + @Test + public void hashCodeTest() throws FieldOutOfBoundsException, InvalidFieldValueException { + SudokuBoard newSudokuBoard = new SudokuBoard(new BacktrackingSudokuSolver()); + for (int i = 0; i < 9; i++) { + for (int j = 0; j < 9; j++) { + newSudokuBoard.setField(i, j, sudokuBoard.getField(i, j, BoardType.ORIGINAL), + BoardType.ORIGINAL); + } + } + + Assertions.assertEquals(sudokuBoard.hashCode(), newSudokuBoard.hashCode()); + + newSudokuBoard.setField(0, 0, 9, BoardType.ORIGINAL); + newSudokuBoard.setField(1, 0, 9, BoardType.ORIGINAL); + Assertions.assertNotEquals(sudokuBoard.hashCode(), newSudokuBoard.hashCode()); + } + + @Test + public void toStringTest() { + Assertions.assertEquals(sudokuBoard.toString(), sudokuBoard.toString()); + Assertions.assertNotEquals( + sudokuBoard.toString(), + new SudokuBoard(new BacktrackingSudokuSolver()).toString() + ); + } + + @Test + public void cloneTest() throws FieldOutOfBoundsException, InvalidFieldValueException { + sudokuBoard.solveGame(); + SudokuBoard clonedSudokuBoard = sudokuBoard.clone(); + for (int i = 0; i < 9; i++) { + for (int j = 0; j < 9; j++) { + Assertions.assertEquals( + sudokuBoard.getField(i, j, BoardType.ORIGINAL), + clonedSudokuBoard.getField(i, j, BoardType.ORIGINAL) + ); + } + } + + sudokuBoard.setField(0, 0, 3, BoardType.ORIGINAL); + clonedSudokuBoard.setField(0, 0, 4, BoardType.ORIGINAL); + + Assertions.assertNotEquals( + sudokuBoard.getField(0, 0, BoardType.ORIGINAL), + clonedSudokuBoard.getField(0, 0, BoardType.ORIGINAL) + ); + } +} \ No newline at end of file diff --git a/Model/src/test/java/sudoku/model/SudokuContainerTest.java b/Model/src/test/java/sudoku/model/SudokuContainerTest.java new file mode 100644 index 0000000..fc93252 --- /dev/null +++ b/Model/src/test/java/sudoku/model/SudokuContainerTest.java @@ -0,0 +1,113 @@ +package sudoku.model; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import java.util.Arrays; +import sudoku.exceptions.ContainerOutOfBoundsException; +import sudoku.exceptions.FieldOutOfBoundsException; +import sudoku.exceptions.InvalidContainerLengthException; +import sudoku.exceptions.InvalidFieldValueException; +import sudoku.exceptions.NullContainerException; +import sudoku.exceptions.SudokuBoardException; +import sudoku.exceptions.SudokuContainerException; +import sudoku.gamestate.BoardType; +import sudoku.solver.BacktrackingSudokuSolver; + +class SudokuContainerTest { + private final SudokuBoard testBoard = new SudokuBoard(new BacktrackingSudokuSolver()); + + @Test + public void constructorTest() { + Assertions.assertThrows( + NullContainerException.class, + () -> new SudokuColumn(null)); + + Assertions.assertThrows( + NullContainerException.class, + () -> new SudokuColumn(Arrays.asList(new SudokuField(), null, null, null, null, null, null, null, null))); + + Assertions.assertThrows( + InvalidContainerLengthException.class, + () -> new SudokuColumn(Arrays.asList(new SudokuField[4]))); + } + + @Test + public void verifyTest() throws SudokuContainerException, SudokuBoardException, InvalidFieldValueException { + SudokuBoard testBoard = new SudokuBoard(new BacktrackingSudokuSolver()); + + SudokuRow row = testBoard.getRow(0); + SudokuColumn column = testBoard.getColumn(0); + SudokuBox box = testBoard.getBox(0, 0); + + Assertions.assertFalse(row.verify()); + Assertions.assertFalse(column.verify()); + Assertions.assertFalse(box.verify()); + + testBoard.solveGame(); + row = testBoard.getRow(0); + column = testBoard.getColumn(0); + box = testBoard.getBox(0, 0); + + Assertions.assertTrue(row.verify()); + Assertions.assertTrue(column.verify()); + Assertions.assertTrue(box.verify()); + } + + @Test + public void equalsTest() throws SudokuContainerException, ContainerOutOfBoundsException, FieldOutOfBoundsException, InvalidFieldValueException { + SudokuRow firstRow = testBoard.getRow(0); + SudokuRow secondRow = testBoard.getRow(1); + SudokuColumn column = testBoard.getColumn(0); + + Assertions.assertEquals(firstRow, firstRow); + Assertions.assertNotEquals(firstRow, null); + Assertions.assertNotEquals(firstRow, column); + + Assertions.assertEquals(firstRow, secondRow); + + testBoard.setField(0, 0, 2, BoardType.ORIGINAL); + Assertions.assertNotEquals(firstRow, secondRow); + testBoard.setField(0, 1, 2, BoardType.ORIGINAL); + Assertions.assertEquals(firstRow, secondRow); + } + + @Test + public void hashCodeTest() throws FieldOutOfBoundsException, InvalidFieldValueException, SudokuContainerException, ContainerOutOfBoundsException { + testBoard.setField(0, 1, 5, BoardType.ORIGINAL); + + Assertions.assertEquals( + testBoard.getRow(0).hashCode(), + testBoard.getRow(0).hashCode()); + + Assertions.assertNotEquals( + testBoard.getRow(0).hashCode(), + testBoard.getRow(1).hashCode()); + } + + @Test + public void toStringTest() throws SudokuContainerException, ContainerOutOfBoundsException { + SudokuRow firstRow = testBoard.getRow(0); + SudokuRow secondRow = testBoard.getRow(1); + Assertions.assertEquals(firstRow.toString(), firstRow.toString()); + Assertions.assertNotEquals(firstRow.toString(), secondRow.toString()); + } + + @Test + public void cloneTest() throws CloneNotSupportedException, SudokuContainerException, ContainerOutOfBoundsException, FieldOutOfBoundsException, InvalidFieldValueException { + SudokuRow firstRow = testBoard.getRow(0); + SudokuRow clonedFirstRow = firstRow.clone(); + + int firstFieldValue = testBoard.getField(0, 0, BoardType.ORIGINAL); + int secondFieldValue = testBoard.getField(1, 0, BoardType.ORIGINAL); + + testBoard.setField(0, 0, 1, BoardType.ORIGINAL); + testBoard.setField(1, 0, 1, BoardType.ORIGINAL); + + Assertions.assertEquals(firstRow.verify(), clonedFirstRow.verify()); + + testBoard.setField(0, 0, firstFieldValue, BoardType.ORIGINAL); + testBoard.setField(1, 0, secondFieldValue, BoardType.ORIGINAL); + + Assertions.assertEquals(firstRow.verify(), clonedFirstRow.verify()); + } +} \ No newline at end of file diff --git a/Model/src/test/java/sudoku/model/SudokuFieldTest.java b/Model/src/test/java/sudoku/model/SudokuFieldTest.java new file mode 100644 index 0000000..c9eb5e4 --- /dev/null +++ b/Model/src/test/java/sudoku/model/SudokuFieldTest.java @@ -0,0 +1,84 @@ +package sudoku.model; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import sudoku.exceptions.InvalidFieldValueException; + +class SudokuFieldTest { + private SudokuField field = new SudokuField(); + private SudokuField newField = field; + + @Test + public void getFieldValueTest() { + Assertions.assertEquals(field.getFieldValue(), 0); + } + + @Test + public void setFieldValueTest() throws InvalidFieldValueException { + Assertions.assertThrows( + InvalidFieldValueException.class, + () -> field.setFieldValue(-1)); + + Assertions.assertThrows( + InvalidFieldValueException.class, + () -> field.setFieldValue(10)); + + field.setFieldValue(5); + Assertions.assertEquals(5, field.getFieldValue()); + } + + @Test + public void equalsTest() throws InvalidFieldValueException { + Assertions.assertNotEquals(field, null); + Assertions.assertEquals(field, field); + + Assertions.assertEquals(field, newField); + + newField = new SudokuField(); + field.setFieldValue(1); + Assertions.assertNotEquals(field, newField); + + newField.setFieldValue(1); + Assertions.assertEquals(field, newField); + } + + @Test + public void hashCodeTest() throws InvalidFieldValueException { + Assertions.assertEquals(field.hashCode(), newField.hashCode()); + + field = new SudokuField(); + field.setFieldValue(9); + newField.setFieldValue(9); + Assertions.assertEquals(field.hashCode(), newField.hashCode()); + + field.setFieldValue(8); + Assertions.assertNotEquals(field.hashCode(), newField.hashCode()); + } + + @Test + public void toStringTest() { + newField = new SudokuField(); + Assertions.assertEquals(field.toString(), field.toString()); + Assertions.assertNotEquals(field.toString(), newField.toString()); + } + + @Test + public void cloneTest() throws CloneNotSupportedException, InvalidFieldValueException { + newField.setFieldValue(7); + SudokuField testerField = newField.clone(); + testerField.setFieldValue(4); + Assertions.assertTrue(testerField.getFieldValue() != newField.getFieldValue()); + } + + @Test + public void compareToTest() throws InvalidFieldValueException { + newField.setFieldValue(5); + SudokuField testerField = new SudokuField(); + testerField.setFieldValue(4); + Assertions.assertEquals(newField.compareTo(testerField), 1); + testerField.setFieldValue(5); + Assertions.assertEquals(newField.compareTo(testerField), 0); + testerField.setFieldValue(6); + Assertions.assertEquals(newField.compareTo(testerField), -1); + } +} \ No newline at end of file diff --git a/Model/src/test/java/sudoku/solver/BacktrackingSudokuSolverTest.java b/Model/src/test/java/sudoku/solver/BacktrackingSudokuSolverTest.java new file mode 100644 index 0000000..2248ef3 --- /dev/null +++ b/Model/src/test/java/sudoku/solver/BacktrackingSudokuSolverTest.java @@ -0,0 +1,74 @@ +package sudoku.solver; + +import java.util.HashSet; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import sudoku.exceptions.FieldOutOfBoundsException; +import sudoku.exceptions.InvalidFieldValueException; +import sudoku.exceptions.SudokuBoardException; +import sudoku.exceptions.SudokuContainerException; +import sudoku.gamestate.BoardType; +import sudoku.model.SudokuBoard; + +class BacktrackingSudokuSolverTest { + private final SudokuBoard sudokuBoard = new SudokuBoard(new BacktrackingSudokuSolver()); + private final SudokuBoard boardOne = new SudokuBoard(new BacktrackingSudokuSolver()); + private final SudokuBoard boardTwo = new SudokuBoard(new BacktrackingSudokuSolver()); + + + @Test + void solveTest() throws SudokuBoardException, InvalidFieldValueException, SudokuContainerException { + sudokuBoard.solveGame(); + HashSet set = new HashSet<>(); + for (int k = 0; k < 2; k++) { + boolean row = k == 0; + for (int i = 0; i < 9; i++) { + for (int j = 0; j < 9; j++) { + Assertions.assertFalse(set.contains(sudokuBoard.getField(row ? j : i, row ? i : j, BoardType.ORIGINAL))); + set.add(sudokuBoard.getField(row ? j : i, row ? i : j, BoardType.ORIGINAL)); + } + set.clear(); + } + } + for (int k = 0; k < 3; k++) { + for (int i = (k * 3); i < 3 * (k + 1); i++) { + for (int l = 0; l < 3; l++) { + for (int j = (l * 3); j < 3 * (l + 1); j++) { + set.add(sudokuBoard.getField(j, i, BoardType.ORIGINAL)); + } + } + Assertions.assertEquals(9, set.size()); + set.clear(); + } + } + + sudokuBoard.solveGame(); + for (int i = 0; i < 9; i++) { + Assertions.assertTrue(sudokuBoard.getColumn(i).verify()); + Assertions.assertTrue(sudokuBoard.getRow(i).verify()); + } + for (int i = 0; i < 6; i += 3) { + for (int j = 0; j < 6; j += 3) { + Assertions.assertTrue(sudokuBoard.getBox(i, j).verify()); + } + } + } + + @Test + void boardsDifferencesTest() throws FieldOutOfBoundsException, InvalidFieldValueException { + boardOne.solveGame(); + boardTwo.solveGame(); + int differences = 0; + + for (int i = 0; i < 9; i++) { + for (int j = 0; j < 9; j++) { + if (boardOne.getField(j, i, BoardType.ORIGINAL) != boardTwo.getField(j, i, BoardType.ORIGINAL)) { + differences++; + } + } + } + + Assertions.assertTrue(differences > 0); + System.out.println("Boards have " + differences + " different cells"); + } +} \ No newline at end of file diff --git a/SudokuGameProject.iml b/SudokuGameProject.iml new file mode 100644 index 0000000..4fd5057 --- /dev/null +++ b/SudokuGameProject.iml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/View/SudokuView.iml b/View/SudokuView.iml new file mode 100644 index 0000000..fb40cca --- /dev/null +++ b/View/SudokuView.iml @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/View/pom.xml b/View/pom.xml new file mode 100644 index 0000000..dd2bca4 --- /dev/null +++ b/View/pom.xml @@ -0,0 +1,73 @@ + + + + SudokuGameProject + 3107 + 2.0 + + 4.0.0 + SudokuView + jar + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.1 + + + org.openjfx + javafx-maven-plugin + 0.0.4 + + view.Launcher + + + + + + + + org.openjfx + javafx-controls + 15-ea+3 + + + org.openjfx + javafx-fxml + 15-ea+3 + + + 3107 + ModelProject + 2.0 + compile + + + org.apache.logging.log4j + log4j-api + 2.13.3 + + + org.apache.logging.log4j + log4j-core + 2.13.3 + + + org.junit.jupiter + junit-jupiter-api + 5.7.0-M1 + test + + + + + UTF-8 + 11 + 11 + + + \ No newline at end of file diff --git a/View/src/main/java/module-info.java b/View/src/main/java/module-info.java new file mode 100644 index 0000000..54af1e4 --- /dev/null +++ b/View/src/main/java/module-info.java @@ -0,0 +1,13 @@ +module View { + requires Model; + requires java.sql; + requires java.desktop; + requires javafx.fxml; + requires javafx.controls; + requires org.apache.logging.log4j; + requires org.apache.logging.log4j.core; + + opens view; + exports view; + exports view.exceptions; +} \ No newline at end of file diff --git a/View/src/main/java/view/Authors_en.java b/View/src/main/java/view/Authors_en.java new file mode 100644 index 0000000..ec875aa --- /dev/null +++ b/View/src/main/java/view/Authors_en.java @@ -0,0 +1,16 @@ +package view; + +import java.util.ListResourceBundle; + +public class Authors_en extends ListResourceBundle { + + private final Object[][] contents = { + {"1", "Jakub Pietras"}, + {"2", "Bartłomiej Graczyk"} + }; + + @Override + protected Object[][] getContents() { + return contents; + } +} \ No newline at end of file diff --git a/View/src/main/java/view/Authors_pl.java b/View/src/main/java/view/Authors_pl.java new file mode 100644 index 0000000..7e7dcae --- /dev/null +++ b/View/src/main/java/view/Authors_pl.java @@ -0,0 +1,16 @@ +package view; + +import java.util.ListResourceBundle; + +public class Authors_pl extends ListResourceBundle { + + private final Object[][] contents = { + {"1", "Jakub Pietras"}, + {"2", "Bartłomiej Graczyk"} + }; + + @Override + protected Object[][] getContents() { + return contents; + } +} \ No newline at end of file diff --git a/View/src/main/java/view/GameController.java b/View/src/main/java/view/GameController.java new file mode 100644 index 0000000..223464c --- /dev/null +++ b/View/src/main/java/view/GameController.java @@ -0,0 +1,274 @@ +package view; + +import java.io.IOException; +import java.net.URL; +import java.util.Locale; +import java.util.ResourceBundle; +import java.util.Timer; +import java.util.TimerTask; +import javafx.collections.ObservableList; +import javafx.event.EventHandler; +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.fxml.Initializable; +import javafx.scene.Node; +import javafx.scene.Parent; +import javafx.scene.Scene; +import javafx.scene.control.TextField; +import javafx.scene.input.KeyEvent; +import javafx.scene.layout.GridPane; +import javafx.stage.Modality; +import javafx.stage.Stage; +import javax.swing.SwingUtilities; +import sudoku.exceptions.FieldOutOfBoundsException; +import sudoku.exceptions.InvalidFieldValueException; +import sudoku.gamestate.BoardType; +import sudoku.gamestate.Difficulty; +import sudoku.gamestate.GameState; +import sudoku.model.SudokuBoard; + +public class GameController implements Initializable { + + @FXML + GridPane gridPane; + + @FXML + TextField difficulty; + + @FXML + TextField gameName; + + @FXML + TextField elapsedTime; + + @FXML + TextField authors; + + private int i = 0; + + private ResourceBundle resourceBundle; + + private GameState gameState; + + @Override + public void initialize(URL url, ResourceBundle resourceBundle) { + this.resourceBundle = resourceBundle; + addCheckingToFields(); + authorsDisplay(); + } + + public void startup(Difficulty difficulty) { + Main.logger.info("Created new game, difficulty: " + difficulty.toString()); + try { + gameState = new GameState(difficulty); + } catch (FieldOutOfBoundsException | InvalidFieldValueException e) { + Main.logger.error("Error creating new GameState - invalid parameters"); + e.printStackTrace(); + } + resetGUI(difficulty); + timerDisplay(); + } + + private void resetGUI(Difficulty difficulty) { + displayGame(); + resetStyle(); + this.difficulty.setText(resourceBundle.getString("DifficultyLabel").concat(difficulty.name())); + gameName.setText(resourceBundle.getString("GameNameLabel").concat(gameState.getGameName())); + } + + @FXML + private void resetGame() { + gameState.reset(); + resetGUI(gameState.getDifficulty()); + } + + GameState getGameState() { + return gameState; + } + + void updateGameState(SudokuBoard sudokuBoard, String name) { + this.gameState = new GameState(sudokuBoard, name); + i = 0; + resetGUI(gameState.getDifficulty()); + } + + public void quitGameMode() throws IOException { + ResourceBundle bundle = ResourceBundle.getBundle("textMenu", resourceBundle.getLocale()); + FXMLLoader loader = new FXMLLoader(getClass().getClassLoader().getResource("Scenes/main_menu.fxml"), bundle); + Parent root = loader.load(); + Main.stage.setScene(new Scene(root)); + Main.logger.info("Game closed"); + } + + void displayGame() { + for (int i = 0; i < 9; i++) { + for (int j = 0; j < 9; j++) { + try { + setFieldValue(j, i, String.valueOf(gameState.getBoard().getField(j, i, BoardType.USER))); + } catch (FieldOutOfBoundsException e) { + Main.logger.error("Field indexes are wrong"); + e.printStackTrace(); + } + } + } + } + + private void addCheckingToFields() { + for (int i = 0; i < 9; i++) { + for (int j = 0; j < 9; j++) { + setFieldValidator(j, i, onFieldInput); + } + } + } + + public void newGame() { + resetStyle(); + try { + gameState = new GameState(gameState.getDifficulty(), "Sudoku"); + } catch (FieldOutOfBoundsException | InvalidFieldValueException e) { + Main.logger.error("Error creating new GameState - invalid parameters"); + e.printStackTrace(); + } + Main.logger.info("Created new game"); + displayGame(); + } + + private final EventHandler onFieldInput = keyEvent -> { + String input = keyEvent.getCharacter(); + TextField field = (TextField) keyEvent.getTarget(); + if (!input.matches("[1-9]") && !input.equals("") || field.getText().length() > 1) { + if (input.matches("[1-9]")) { + field.setText(input); + updateFields(); + } else { + field.setText(""); + } + } else { + updateFields(); + } + }; + + public void verify() throws FieldOutOfBoundsException, InvalidFieldValueException { + for (int i = 0; i < 9; i++) { + for (int j = 0; j < 9; j++) { + if (!getField(j, i).getText().equals("")) { + gameState.getBoard().setField(j, i, Integer.parseInt(getField(j, i).getText()), BoardType.USER); + } + getField(j, i).setStyle("-fx-text-fill: black;"); + if (!getField(j, i).getText().equals("") && !gameState.compareFields(j, i)) { + getField(j, i).setStyle("-fx-text-fill: red;"); + } + } + } + } + + public void solve() throws FieldOutOfBoundsException { + SudokuBoard board = gameState.getBoard(); + for (int i = 0; i < 9; i++) { + for (int j = 0; j < 9; j++) { + getField(j, i).setStyle("-fx-text-fill: black;"); + getField(j, i).setText(Integer.toString(board.getField(j, i, BoardType.ORIGINAL))); + } + } + Main.logger.info("Performed solve operation"); + } + + public void resetStyle() { + for (int i = 0; i < 9; i++) { + for (int j = 0; j < 9; j++) { + getField(j, i).setStyle("-fx-text-fill: black;"); + } + } + } + + public void openSaveBoardMenu() { + ResourceBundle bundle = ResourceBundle.getBundle("textSave", resourceBundle.getLocale()); + FXMLLoader loader = new FXMLLoader(getClass().getClassLoader().getResource("Scenes/save_menu.fxml"), bundle); + + try { + Parent root = loader.load(); + Stage stage = new Stage(); + SaveController saveController = loader.getController(); + saveController.startup(this); + stage.setScene(new Scene(root)); + stage.setTitle("Menu"); + stage.initModality(Modality.APPLICATION_MODAL); + stage.showAndWait(); + + } catch (IOException exception) { + exception.printStackTrace(); + } + } + + public void openLoadBoardMenu() { + ResourceBundle bundle = ResourceBundle.getBundle("textLoad", resourceBundle.getLocale()); + FXMLLoader loader = new FXMLLoader(getClass().getClassLoader().getResource("Scenes/load_menu.fxml"), bundle); + + try { + Parent root = loader.load(); + Stage stage = new Stage(); + LoadController loadController = loader.getController(); + loadController.startup(this); + stage.setScene(new Scene(root)); + stage.setTitle("Menu"); + stage.initModality(Modality.APPLICATION_MODAL); + stage.showAndWait(); + + } catch (IOException exception) { + exception.printStackTrace(); + } + } + + private void updateFields() { + try { + for (int i = 0; i < 9; i++) { + for (int j = 0; j < 9; j++) { + + String fieldValue = getField(j, i).getText(); + int boardIntValue = gameState.getBoard().getField(j, i, BoardType.USER); + String boardValue = Integer.toString(boardIntValue); + + if (!fieldValue.equals("") && !fieldValue.equals(boardValue)) { + int parsedValue = Integer.parseInt(fieldValue); + gameState.getBoard().setField(j, i, parsedValue, BoardType.USER); + return; + } + } + } + } catch (FieldOutOfBoundsException | InvalidFieldValueException exception) { + exception.printStackTrace(); + } + } + + private TextField getField(int x, int y) { + ObservableList subGrids = gridPane.getChildren(); + ObservableList boxFields = ((GridPane) subGrids.get(((y / 3) * 3) + (x / 3))).getChildren(); + return (TextField) (boxFields.get(((y % 3) * 3) + (x % 3))); + } + + private void setFieldValue(int x, int y, String value) { + getField(x, y).setText(!value.equals("0") ? value : ""); + } + + private void setFieldValidator(int x, int y, EventHandler validator) { + getField(x, y).setOnKeyTyped(validator); + } + + private void authorsDisplay() { + ResourceBundle authorsList = ResourceBundle.getBundle("view.Authors", Locale.getDefault()); + authors.setText(resourceBundle.getString("AuthorsLabel").concat( + authorsList.getObject("1") + " & " + authorsList.getObject("2"))); + } + + private void timerDisplay() { + Timer timer = new Timer(); + timer.scheduleAtFixedRate(new TimerTask() { + @Override + public void run() { + SwingUtilities.invokeLater( + () -> elapsedTime.setText(resourceBundle.getString("TimeLabel") + i++) + ); + } + }, 0, 1000); + } +} \ No newline at end of file diff --git a/View/src/main/java/view/Launcher.java b/View/src/main/java/view/Launcher.java new file mode 100644 index 0000000..a45b498 --- /dev/null +++ b/View/src/main/java/view/Launcher.java @@ -0,0 +1,7 @@ +package view; + +public class Launcher { + public static void main(String[] args) { + Main.main(args); + } +} diff --git a/View/src/main/java/view/LoadController.java b/View/src/main/java/view/LoadController.java new file mode 100644 index 0000000..26fc4dc --- /dev/null +++ b/View/src/main/java/view/LoadController.java @@ -0,0 +1,168 @@ +package view; + +import java.io.File; +import java.net.URL; +import java.util.List; +import java.util.ResourceBundle; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.event.ActionEvent; +import javafx.fxml.FXML; +import javafx.fxml.Initializable; +import javafx.scene.Node; +import javafx.scene.control.ListView; +import javafx.scene.control.TextField; +import javafx.stage.FileChooser; +import javafx.stage.Stage; +import sudoku.database.Board; +import sudoku.database.DatabaseManager; +import sudoku.dao.Dao; +import sudoku.model.SudokuBoard; +import sudoku.dao.SudokuBoardDaoFactory; +import sudoku.exceptions.ReadBoardException; + +public class LoadController implements Initializable { + private GameController gameController; + + @FXML + private TextField pathTextField; + + @FXML + private TextField status; + + @FXML + private TextField idField; + + @FXML + private TextField nameField; + + @FXML + private ListView listView; + + private ResourceBundle resourceBundle; + + @Override + public void initialize(URL url, ResourceBundle resourceBundle) { + this.resourceBundle = resourceBundle; + } + + public void startup(GameController gameController) { + this.gameController = gameController; + } + + @FXML + private void selectBoardFile() { + FileChooser fileChooser = new FileChooser(); + File file = fileChooser.showOpenDialog(Main.stage); + if (file != null) { + pathTextField.setText(file.getAbsolutePath()); + status.setText(resourceBundle.getString("file_selected")); + } else { + Main.logger.error("Wrong file or none selected"); + } + } + + @FXML + private void loadBoardFromFile() { + File file = new File(pathTextField.getText()); + if (file.exists()) { + String path = pathTextField.getText(); + Dao fileSudokuBoardDao = new SudokuBoardDaoFactory().getFileDao(path); + SudokuBoard board = null; + try { + board = fileSudokuBoardDao.read(); + status.setText(resourceBundle.getString("board_file_loaded")); + } catch (ReadBoardException exception) { + Main.logger.error("Could not read selected file"); + exception.printStackTrace(); + } + gameController.updateGameState(board, gameController.getGameState().getGameName()); + gameController.displayGame(); + + } else { + status.setText(resourceBundle.getString("board_file_failed")); + } + } + + @FXML + private void loadSelected() { + String selection = listView.getSelectionModel().getSelectedItem(); + if (selection != null) { + selection = selection.substring(0, selection.indexOf(' ')); + if (!idField.getText().equals(selection)) { + idField.setText(selection); + } else { + loadBoardById(); + idField.setText(""); + } + } + } + + @FXML + private void loadBoardById() { + DatabaseManager databaseManager = new DatabaseManager(); + + try { + long id = Long.parseLong(idField.getText()); + String gameName = databaseManager.getNameFromId(id); + Dao sudokuBoardDao = new SudokuBoardDaoFactory().getJpaDao(id); + SudokuBoard sudokuBoard = sudokuBoardDao.read(); + Main.logger.info(gameName); + + if (sudokuBoard != null) { + gameController.updateGameState(sudokuBoard, gameName); + status.setText(resourceBundle.getString("db_loaded")); + } else { + status.setText(resourceBundle.getString("no_record")); + } + } catch (NumberFormatException exception) { + status.setText(resourceBundle.getString("invalid_id")); + } catch (ReadBoardException exception) { + exception.printStackTrace(); + } + } + + @FXML + private void loadBoardByName() { + String gameName = nameField.getText(); + Dao sudokuBoardDao = new SudokuBoardDaoFactory().getJpaDao(gameName); + + try { + SudokuBoard sudokuBoard = sudokuBoardDao.read(); + if (sudokuBoard != null) { + gameController.updateGameState(sudokuBoard, gameName); + status.setText(resourceBundle.getString("db_loaded")); + } else { + status.setText(resourceBundle.getString("no_record")); + } + } catch (ReadBoardException exception) { + exception.printStackTrace(); + } + } + + @FXML + private void displayDatabaseEntries() { + DatabaseManager databaseManager = new DatabaseManager(); + List boards = databaseManager.getAllEntries(); + databaseManager.releaseResources(); + ObservableList results = FXCollections.observableArrayList(); + + for (Board board : boards) { + results.add(board.getId().toString() + " " + board.getName() + " " + board.getDifficulty()); + } + listView.setItems(results); + + if (results.isEmpty()) { + status.setText(resourceBundle.getString("no_results")); + } else { + status.setText(resourceBundle.getString("finished")); + } + } + + @FXML + private void returnToGame(ActionEvent event) { + Node source = (Node) event.getSource(); + Stage thisStage = (Stage) source.getScene().getWindow(); + thisStage.close(); + } +} \ No newline at end of file diff --git a/View/src/main/java/view/Main.java b/View/src/main/java/view/Main.java new file mode 100644 index 0000000..3c1c4d2 --- /dev/null +++ b/View/src/main/java/view/Main.java @@ -0,0 +1,46 @@ +package view; + +import java.util.Locale; +import java.util.Objects; +import java.util.ResourceBundle; + +import javafx.application.Application; +import javafx.fxml.FXMLLoader; +import javafx.scene.Parent; +import javafx.scene.Scene; +import javafx.stage.Stage; +import javafx.stage.WindowEvent; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class Main extends Application { + + static Stage stage; + static ResourceBundle resourceBundle; + final static Logger logger = LogManager.getLogger("Main"); + + public static void main(String[] args) { + launch(args); + } + + @Override + public void start(Stage primaryStage) { + try { + stage = primaryStage; + Locale locale = new Locale("en", "UK"); + resourceBundle = ResourceBundle.getBundle("textMenu", locale); + Parent root = FXMLLoader.load( + Objects.requireNonNull( + getClass().getClassLoader().getResource("Scenes/main_menu.fxml")), + resourceBundle + ); + primaryStage.setTitle("Sudoku"); + primaryStage.setScene(new Scene(root)); + primaryStage.getScene().getStylesheets().add("Styles/main_menu_style.css"); + primaryStage.setOnCloseRequest((WindowEvent we) -> System.exit(0)); + primaryStage.show(); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/View/src/main/java/view/MenuController.java b/View/src/main/java/view/MenuController.java new file mode 100644 index 0000000..25bae59 --- /dev/null +++ b/View/src/main/java/view/MenuController.java @@ -0,0 +1,93 @@ +package view; + +import java.io.IOException; +import java.net.URL; +import java.util.Locale; +import java.util.ResourceBundle; +import javafx.application.Platform; +import javafx.event.EventHandler; +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.fxml.Initializable; +import javafx.scene.Parent; +import javafx.scene.Scene; +import javafx.scene.control.Button; +import javafx.scene.control.RadioButton; +import javafx.scene.control.ToggleGroup; +import javafx.scene.input.MouseEvent; +import sudoku.gamestate.Difficulty; +import view.exceptions.IOLanguageFileException; +import view.exceptions.IllegalDifficultyException; + +public class MenuController implements Initializable { + + @FXML + Button enLang; + + @FXML + Button plLang; + + @FXML + private ToggleGroup difficultyGroup; + + private ResourceBundle resourceBundle; + + @FXML + private final EventHandler onLanguageSelect = actionEvent -> { + String lang = ((Button) actionEvent.getSource()).getText(); + try { + setLanguage(lang.toLowerCase()); + } catch (IOException e) { + Main.logger.error("Could not find language file"); + throw new IOLanguageFileException(resourceBundle.getString("NoLangFile"), e); + } + }; + + + @Override + public void initialize(URL url, ResourceBundle resourceBundle) { + this.resourceBundle = resourceBundle; + plLang.setOnMouseClicked(onLanguageSelect); + enLang.setOnMouseClicked(onLanguageSelect); + } + + public void startGame() throws IOException, IllegalDifficultyException { + Main.logger.info("Starting new game"); + ResourceBundle bundle = ResourceBundle.getBundle("textGame", resourceBundle.getLocale()); + FXMLLoader loader = new FXMLLoader(getClass().getClassLoader().getResource("Scenes/game.fxml"), bundle); + Difficulty difficulty; + String level = ((RadioButton) difficultyGroup.getSelectedToggle()).getText(); + if (level.equals((resourceBundle.getString("EasyRadioButton")))) { + difficulty = Difficulty.EASY; + } else if (level.equals((resourceBundle.getString("NormalRadioButton")))) { + difficulty = Difficulty.NORMAL; + } else if (level.equals((resourceBundle.getString("HardRadioButton")))) { + difficulty = Difficulty.HARD; + } else { + Main.logger.error("Invalid difficulty state"); + throw new IllegalDifficultyException( + bundle.getString("IllegalDifficulty") + difficultyGroup.getSelectedToggle().toString() + ); + } + Parent root = loader.load(); + GameController gameController = loader.getController(); + gameController.startup(difficulty); + Main.stage.setScene(new Scene(root)); + } + + private void setLanguage(String language) throws IOException { + Locale locale = new Locale(language); + Locale.setDefault(locale); + resourceBundle = ResourceBundle.getBundle("textMenu", locale); + + FXMLLoader loader = new FXMLLoader(getClass().getClassLoader().getResource("Scenes/main_menu.fxml"), resourceBundle); + Parent root = loader.load(); + Main.stage.setScene(new Scene(root)); + } + + public void quitApplication() { + Main.logger.info("Exiting application"); + Platform.exit(); + System.exit(0); + } +} diff --git a/View/src/main/java/view/SaveController.java b/View/src/main/java/view/SaveController.java new file mode 100644 index 0000000..555b39a --- /dev/null +++ b/View/src/main/java/view/SaveController.java @@ -0,0 +1,125 @@ +package view; + +import java.io.File; +import java.net.URL; +import java.util.List; +import java.util.ResourceBundle; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.event.ActionEvent; +import javafx.fxml.FXML; +import javafx.fxml.Initializable; +import javafx.scene.Node; +import javafx.scene.control.ListView; +import javafx.scene.control.TextField; +import javafx.stage.FileChooser; +import javafx.stage.Stage; +import sudoku.dao.Dao; +import sudoku.dao.SudokuBoardDaoFactory; +import sudoku.database.Board; +import sudoku.database.DatabaseManager; +import sudoku.exceptions.WriteBoardException; +import sudoku.model.SudokuBoard; + +public class SaveController implements Initializable { + private GameController gameController; + + @FXML + private TextField name; + + @FXML + private TextField status; + + @FXML + private ListView listView; + + private ResourceBundle resourceBundle; + + @Override + public void initialize(URL url, ResourceBundle resourceBundle) { + this.resourceBundle = resourceBundle; + } + + public void startup(GameController gameController) { + this.gameController = gameController; + } + + @FXML + private void saveBoardToFile() { + FileChooser fileChooser = new FileChooser(); + File file = fileChooser.showSaveDialog(Main.stage); + if (file != null) { + Dao fileSudokuBoardDao = new SudokuBoardDaoFactory().getFileDao(file.getAbsolutePath()); + try { + fileSudokuBoardDao.write(gameController.getGameState().getBoard()); + status.setText(resourceBundle.getString("saved_file")); + } catch (WriteBoardException e) { + Main.logger.error("Could not save board to selected file"); + e.printStackTrace(); + } + } + } + + @FXML + private void displayDatabaseEntries() { + DatabaseManager databaseManager = new DatabaseManager(); + List boards = databaseManager.getAllEntries(); + databaseManager.releaseResources(); + ObservableList results = FXCollections.observableArrayList(); + + for (Board board : boards) { + results.add(board.getId().toString() + " " + board.getName() + " " + board.getDifficulty()); + } + listView.setItems(results); + + if (results.isEmpty()) { + status.setText(resourceBundle.getString("no_results")); + } else { + status.setText(resourceBundle.getString("finished")); + } + } + + @FXML + private void deleteAllRecords() { + DatabaseManager databaseManager = new DatabaseManager(); + databaseManager.removeAll(); + databaseManager.releaseResources(); + displayDatabaseEntries(); + } + + @FXML + private void deleteNamedRecord() { + DatabaseManager databaseManager = new DatabaseManager(); + databaseManager.removeData(name.getText()); + databaseManager.releaseResources(); + displayDatabaseEntries(); + } + + @FXML + private void saveToDatabase() { + if (!name.getText().equals("")) { + DatabaseManager databaseManager = new DatabaseManager(); + + if (!databaseManager.checkIfNameExists(name.getText())) { + Dao sudokuBoardDao = new SudokuBoardDaoFactory().getJpaDao(name.getText()); + + try { + sudokuBoardDao.write(gameController.getGameState().getBoard()); + displayDatabaseEntries(); + status.setText(resourceBundle.getString("saved_database")); + } catch (WriteBoardException exception) { + exception.printStackTrace(); + } + } else { + status.setText(resourceBundle.getString("board_exists")); + } + } + } + + @FXML + private void returnToGame(ActionEvent event) { + Node source = (Node) event.getSource(); + Stage thisStage = (Stage) source.getScene().getWindow(); + thisStage.close(); + } +} diff --git a/View/src/main/java/view/exceptions/IOLanguageFileException.java b/View/src/main/java/view/exceptions/IOLanguageFileException.java new file mode 100644 index 0000000..a6fd62b --- /dev/null +++ b/View/src/main/java/view/exceptions/IOLanguageFileException.java @@ -0,0 +1,11 @@ +package view.exceptions; + +public class IOLanguageFileException extends RuntimeException { + public IOLanguageFileException() { + super(); + } + + public IOLanguageFileException(String message, Throwable cause) { + super(message, cause); + } +} diff --git a/View/src/main/java/view/exceptions/IllegalDifficultyException.java b/View/src/main/java/view/exceptions/IllegalDifficultyException.java new file mode 100644 index 0000000..da1d4f9 --- /dev/null +++ b/View/src/main/java/view/exceptions/IllegalDifficultyException.java @@ -0,0 +1,11 @@ +package view.exceptions; + +public class IllegalDifficultyException extends RuntimeException { + public IllegalDifficultyException() { + super(); + } + + public IllegalDifficultyException(String message) { + super(message); + } +} diff --git a/View/src/main/resources/META-INF/persistence.xml b/View/src/main/resources/META-INF/persistence.xml new file mode 100644 index 0000000..a75383d --- /dev/null +++ b/View/src/main/resources/META-INF/persistence.xml @@ -0,0 +1,18 @@ + + + + org.hibernate.jpa.HibernatePersistenceProvider + sudoku.database.Board + + + + + + + + + + + + \ No newline at end of file diff --git a/View/src/main/resources/Scenes/game.fxml b/View/src/main/resources/Scenes/game.fxml new file mode 100644 index 0000000..39bc275 --- /dev/null +++ b/View/src/main/resources/Scenes/game.fxml @@ -0,0 +1,682 @@ + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/View/src/main/resources/Scenes/load_menu.fxml b/View/src/main/resources/Scenes/load_menu.fxml new file mode 100644 index 0000000..6e3f904 --- /dev/null +++ b/View/src/main/resources/Scenes/load_menu.fxml @@ -0,0 +1,128 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/View/src/main/resources/Scenes/main_menu.fxml b/View/src/main/resources/Scenes/main_menu.fxml new file mode 100644 index 0000000..0866818 --- /dev/null +++ b/View/src/main/resources/Scenes/main_menu.fxml @@ -0,0 +1,155 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/View/src/main/resources/Scenes/save_menu.fxml b/View/src/main/resources/Scenes/save_menu.fxml new file mode 100644 index 0000000..606c591 --- /dev/null +++ b/View/src/main/resources/Scenes/save_menu.fxml @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/View/src/main/resources/Styles/game_style.css b/View/src/main/resources/Styles/game_style.css new file mode 100644 index 0000000..21d0d70 --- /dev/null +++ b/View/src/main/resources/Styles/game_style.css @@ -0,0 +1,43 @@ +.panel { + -fx-background-color: #505050; +} + +.active { + -fx-text-fill: #FAFAFA; + -fx-control-inner-background: #606060; + -fx-highlight-fill: null; + -fx-highlight-text-fill: null; + -fx-background-insets: 0, 0 0 0 0 ; + -fx-table-cell-border-color: #404040; + -fx-background-radius: 12 12 12 12; +} + +.logo { + -fx-text-fill: #FAFAFA; + -fx-control-inner-background: #CC2060; + -fx-highlight-fill: null; + -fx-highlight-text-fill: null; + -fx-background-insets: 0, 0 0 0 0 ; + -fx-table-cell-border-color: #404040; + -fx-background-radius: 16 16 16 16; +} + +.button { + -fx-background-color: #00AA99; + -fx-text-fill: #FAFAFA; + -fx-background-radius: 2 2 2 2; +} + +.button:pressed { + -fx-background-color: #CC2060; + -fx-text-fill: #FAFAFA; + -fx-background-radius: 2 2 2 2; +} + +.saturatedField { + -fx-background-color: #77CCAA; +} + +.desaturatedField { + -fx-background-color: #55AA88; +} \ No newline at end of file diff --git a/View/src/main/resources/Styles/load_save_style.css b/View/src/main/resources/Styles/load_save_style.css new file mode 100644 index 0000000..7401ce2 --- /dev/null +++ b/View/src/main/resources/Styles/load_save_style.css @@ -0,0 +1,15 @@ +.split-pane:horizontal > .split-pane-divider { + -fx-background-color: #555555; +} + +.button { + -fx-background-color: #00AA99; + -fx-text-fill: #FAFAFA; + -fx-background-radius: 2 2 2 2; +} + +.button:pressed { + -fx-background-color: #CC2060; + -fx-text-fill: #FAFAFA; + -fx-background-radius: 2 2 2 2; +} \ No newline at end of file diff --git a/View/src/main/resources/Styles/main_menu_style.css b/View/src/main/resources/Styles/main_menu_style.css new file mode 100644 index 0000000..e107bae --- /dev/null +++ b/View/src/main/resources/Styles/main_menu_style.css @@ -0,0 +1,60 @@ +.panel { + -fx-background-color: #404040; +} + +.button, .toggle-button { + -fx-background-color: #00AA99; + -fx-text-fill: #FAFAFA; +} + +.button:pressed, .toggle-button:selected { + -fx-background-color: #CC2060; + -fx-text-fill: #FAFAFA; +} + +.radio { + -fx-text-fill: #CCCCCC; +} + +.difficulty { + -fx-text-fill: #FAFAFA; + -fx-control-inner-background: #00AA99; + -fx-highlight-fill: null; + -fx-highlight-text-fill: null; + -fx-background-insets: 0, 0 0 0 0 ; + -fx-table-cell-border-color: #404040; + -fx-background-radius: 12 12 12 12; +} + +.logoUpper { + -fx-text-fill: #FAFAFA; + -fx-control-inner-background: #00AA99; + -fx-background-color: -fx-text-box-border, -fx-control-inner-background; + -fx-highlight-fill: null; + -fx-highlight-text-fill: null; + -fx-background-insets: 0, 0 0 0 0 ; + -fx-table-cell-border-color: #404040; + -fx-background-radius: 5 5 0 0; + -fx-effect: null; +} + +.logoDown { + -fx-text-fill: #FAFAFA; + -fx-control-inner-background: #00AA99; + -fx-background-color: -fx-text-box-border, -fx-control-inner-background; + -fx-highlight-fill: null; + -fx-highlight-text-fill: null; + -fx-background-insets: 0, 0 0 0 0 ; + -fx-table-cell-border-color: #404040; + -fx-background-radius: 0 0 5 5; + -fx-effect: null; +} + +.radio-button .radio { + -fx-background-color: #99CCAA; +} + +.radio-button:selected .radio .dot { + -fx-background-color: #CC2060; + -fx-background-insets: 0; +} \ No newline at end of file diff --git a/View/src/main/resources/log4j2.xml b/View/src/main/resources/log4j2.xml new file mode 100644 index 0000000..25cae49 --- /dev/null +++ b/View/src/main/resources/log4j2.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/View/src/main/resources/textGame_en.properties b/View/src/main/resources/textGame_en.properties new file mode 100644 index 0000000..6f90e39 --- /dev/null +++ b/View/src/main/resources/textGame_en.properties @@ -0,0 +1,13 @@ +AuthorsLabel=Authors: +CheckButton=Check +DifficultyLabel=Difficulty: +GameNameLabel=Game Name: +LoadBoardButton=Load Board +NewBoardButton=New Board +QuitButton=Quit +SaveBoardButton=Save Board +SolveButton=Solve +TimeLabel=Elapsed Time: +IllegalDifficulty=Provided difficulty level is illegal +NoLangFile=Could not find specified language file +Reset=Reset \ No newline at end of file diff --git a/View/src/main/resources/textGame_pl.properties b/View/src/main/resources/textGame_pl.properties new file mode 100644 index 0000000..2cf0e07 --- /dev/null +++ b/View/src/main/resources/textGame_pl.properties @@ -0,0 +1,13 @@ +AuthorsLabel=Autorzy: +CheckButton=Sprawd\u017a +DifficultyLabel=Poziom Trudno\u015bci: +GameNameLabel=Nazwa Gry: +LoadBoardButton=Wczytaj Plansz\u0119 +NewBoardButton=Nowa Plansza +QuitButton=Zamknij +SaveBoardButton=Zapisz Plansz\u0119 +SolveButton=Rozwi\u0105\u017c +TimeLabel=Czas: +IllegalDifficulty=Wybrano nielegalny poziom trudno\u015bci +NoLangFile=Nie znaleziono okre\u015blonego pliku z j\u0119zykowego +Reset=Reset \ No newline at end of file diff --git a/View/src/main/resources/textLoad_en.properties b/View/src/main/resources/textLoad_en.properties new file mode 100644 index 0000000..8b8afc0 --- /dev/null +++ b/View/src/main/resources/textLoad_en.properties @@ -0,0 +1,19 @@ +file=FILE +database=DATABASE +path=File Path +board_file=Select Board File +file_load=Load Board from File +return=Return to Game +id_num=ID +name=Name +display=Display Saved Boards +load_id=Load Board (ID) +load_name=Load Board (Name) +file_selected=File Selected +board_file_loaded=Board File Loaded +board_file_failed=File Error +no_results=DB Is Empty +finished=Finished +no_record=Board Not Found +invalid_id=Invalid ID +db_loaded=Board Fetched \ No newline at end of file diff --git a/View/src/main/resources/textLoad_pl.properties b/View/src/main/resources/textLoad_pl.properties new file mode 100644 index 0000000..baa156f --- /dev/null +++ b/View/src/main/resources/textLoad_pl.properties @@ -0,0 +1,19 @@ +file=PLIK +database=BAZA +path=\u015acie\u017cka do Pliku +board_file=Wybierz Plik z Plansz\u0105 +file_load=Wczytaj Plansz\u0119 z Pliku +return=Powr\u00f3t do Gry +id_num=ID +name=Nazwa +display=Wy\u015bwietl Zapisane Plansze +load_id=Wczytaj Plansz\u0119 (ID) +load_name=Wczytaj Plansz\u0119 (Name) +file_selected=Wybrano Plik +board_file_loaded=Plik Wczytany +board_file_failed=B\u0142\u0105d Pliku +no_results=Baza Jest Pusta +finished=Zako\u0144czono +no_record=Brak Planszy w Bazie +invalid_id=Niew\u0142a\u015bciwe ID +db_loaded=Plansza Pobrana \ No newline at end of file diff --git a/View/src/main/resources/textMenu_en.properties b/View/src/main/resources/textMenu_en.properties new file mode 100644 index 0000000..565f721 --- /dev/null +++ b/View/src/main/resources/textMenu_en.properties @@ -0,0 +1,6 @@ +DifficultyLabel=Difficulty Level +EasyRadioButton=Easy +HardRadioButton=Hard +NormalRadioButton=Normal +QuitButton=Quit +StartButton=Start Game \ No newline at end of file diff --git a/View/src/main/resources/textMenu_pl.properties b/View/src/main/resources/textMenu_pl.properties new file mode 100644 index 0000000..c61f9d4 --- /dev/null +++ b/View/src/main/resources/textMenu_pl.properties @@ -0,0 +1,6 @@ +DifficultyLabel=Poziom Trudno\u015Bci +EasyRadioButton=\u0141atwy +HardRadioButton=Trudny +NormalRadioButton=Normalny +QuitButton=Zako\u0144cz +StartButton=Rozpocznij Gr\u0119 \ No newline at end of file diff --git a/View/src/main/resources/textSave_en.properties b/View/src/main/resources/textSave_en.properties new file mode 100644 index 0000000..f8af3bb --- /dev/null +++ b/View/src/main/resources/textSave_en.properties @@ -0,0 +1,15 @@ +file=FILE +database=DATABASE +return=Return to Game +name=Name +display=Display Saved Boards +board_file=Save Board To File +board_file_failed=File Error +no_results=DB Is Empty +finished=Finished +delete_name=Delete Board +delete_all=Delete All Boards +saved_file=Saved Board To File +saved_database=Saved Board To Database +board_exists=Board With Same Name Exists +save_database=Save Board To Database \ No newline at end of file diff --git a/View/src/main/resources/textSave_pl.properties b/View/src/main/resources/textSave_pl.properties new file mode 100644 index 0000000..6fa8e5c --- /dev/null +++ b/View/src/main/resources/textSave_pl.properties @@ -0,0 +1,15 @@ +file=PLIK +database=BAZA +return=Powr\u00f3t do Gry +name=Nazwa +display=Wy\u015bwietl Zapisane Plansze +board_file=Zapisz Plansz\u0119 do Pliku +board_file_failed=B\u0142\u0105d Pliku +no_results=Baza Jest Pusta +finished=Zako\u0144czono +delete_name=Usu\u0144 Plansz\u0119 +delete_all=Usu\u0144 Wszystkie Plansze +saved_file=Zapisano Plansz\u0119 do Pliku +saved_database=Zapisano Plansz\u0119 w Bazie +board_exists=Nazwana Baza Ju\u017c Istnieje +save_database=Zapisz Plansz\u0119 w Bazie \ No newline at end of file diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..23eac2f --- /dev/null +++ b/pom.xml @@ -0,0 +1,20 @@ + + + 4.0.0 + + SudokuApp + 3107 + SudokuGameProject + 2.0 + pom + + Model + View + + + + UTF-8 + + \ No newline at end of file