diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..b26911b --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__ch_qos_logback_logback_classic_1_1_11.xml b/.idea/libraries/Maven__ch_qos_logback_logback_classic_1_1_11.xml new file mode 100644 index 0000000..c6ea67e --- /dev/null +++ b/.idea/libraries/Maven__ch_qos_logback_logback_classic_1_1_11.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__ch_qos_logback_logback_core_1_1_11.xml b/.idea/libraries/Maven__ch_qos_logback_logback_core_1_1_11.xml new file mode 100644 index 0000000..f538e36 --- /dev/null +++ b/.idea/libraries/Maven__ch_qos_logback_logback_core_1_1_11.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_annotations_2_8_0.xml b/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_annotations_2_8_0.xml new file mode 100644 index 0000000..49b4ec7 --- /dev/null +++ b/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_annotations_2_8_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_core_2_8_8.xml b/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_core_2_8_8.xml new file mode 100644 index 0000000..dc8e04d --- /dev/null +++ b/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_core_2_8_8.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_databind_2_8_8.xml b/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_databind_2_8_8.xml new file mode 100644 index 0000000..247589e --- /dev/null +++ b/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_databind_2_8_8.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_fasterxml_jackson_datatype_jackson_datatype_jsr310_2_8_8.xml b/.idea/libraries/Maven__com_fasterxml_jackson_datatype_jackson_datatype_jsr310_2_8_8.xml new file mode 100644 index 0000000..b61be33 --- /dev/null +++ b/.idea/libraries/Maven__com_fasterxml_jackson_datatype_jackson_datatype_jsr310_2_8_8.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_idrawings_transport_idrawings_dto_1_0_SNAPSHOT.xml b/.idea/libraries/Maven__com_idrawings_transport_idrawings_dto_1_0_SNAPSHOT.xml new file mode 100644 index 0000000..11c53e2 --- /dev/null +++ b/.idea/libraries/Maven__com_idrawings_transport_idrawings_dto_1_0_SNAPSHOT.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_jayway_jsonpath_json_path_2_2_0.xml b/.idea/libraries/Maven__com_jayway_jsonpath_json_path_2_2_0.xml new file mode 100644 index 0000000..578b079 --- /dev/null +++ b/.idea/libraries/Maven__com_jayway_jsonpath_json_path_2_2_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_jfoenix_jfoenix_1_0_0.xml b/.idea/libraries/Maven__com_jfoenix_jfoenix_1_0_0.xml new file mode 100644 index 0000000..b0c0b5d --- /dev/null +++ b/.idea/libraries/Maven__com_jfoenix_jfoenix_1_0_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_vaadin_external_google_android_json_0_0_20131108_vaadin1.xml b/.idea/libraries/Maven__com_vaadin_external_google_android_json_0_0_20131108_vaadin1.xml new file mode 100644 index 0000000..b8581a6 --- /dev/null +++ b/.idea/libraries/Maven__com_vaadin_external_google_android_json_0_0_20131108_vaadin1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__junit_junit_4_12.xml b/.idea/libraries/Maven__junit_junit_4_12.xml new file mode 100644 index 0000000..d411041 --- /dev/null +++ b/.idea/libraries/Maven__junit_junit_4_12.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__net_minidev_accessors_smart_1_1.xml b/.idea/libraries/Maven__net_minidev_accessors_smart_1_1.xml new file mode 100644 index 0000000..88d626e --- /dev/null +++ b/.idea/libraries/Maven__net_minidev_accessors_smart_1_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__net_minidev_json_smart_2_2_1.xml b/.idea/libraries/Maven__net_minidev_json_smart_2_2_1.xml new file mode 100644 index 0000000..6c692c8 --- /dev/null +++ b/.idea/libraries/Maven__net_minidev_json_smart_2_2_1.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_assertj_assertj_core_2_6_0.xml b/.idea/libraries/Maven__org_assertj_assertj_core_2_6_0.xml new file mode 100644 index 0000000..58bdc9a --- /dev/null +++ b/.idea/libraries/Maven__org_assertj_assertj_core_2_6_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_controlsfx_controlsfx_8_40_12.xml b/.idea/libraries/Maven__org_controlsfx_controlsfx_8_40_12.xml new file mode 100644 index 0000000..f79bab9 --- /dev/null +++ b/.idea/libraries/Maven__org_controlsfx_controlsfx_8_40_12.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml b/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml new file mode 100644 index 0000000..f58bbc1 --- /dev/null +++ b/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_hamcrest_hamcrest_library_1_3.xml b/.idea/libraries/Maven__org_hamcrest_hamcrest_library_1_3.xml new file mode 100644 index 0000000..78dbe45 --- /dev/null +++ b/.idea/libraries/Maven__org_hamcrest_hamcrest_library_1_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_jfxtras_jfxtras_agenda_8_0_r5.xml b/.idea/libraries/Maven__org_jfxtras_jfxtras_agenda_8_0_r5.xml new file mode 100644 index 0000000..8feae96 --- /dev/null +++ b/.idea/libraries/Maven__org_jfxtras_jfxtras_agenda_8_0_r5.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_jfxtras_jfxtras_common_8_0_r5.xml b/.idea/libraries/Maven__org_jfxtras_jfxtras_common_8_0_r5.xml new file mode 100644 index 0000000..cd4f2e1 --- /dev/null +++ b/.idea/libraries/Maven__org_jfxtras_jfxtras_common_8_0_r5.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_jfxtras_jfxtras_controls_8_0_r5.xml b/.idea/libraries/Maven__org_jfxtras_jfxtras_controls_8_0_r5.xml new file mode 100644 index 0000000..b7ffe58 --- /dev/null +++ b/.idea/libraries/Maven__org_jfxtras_jfxtras_controls_8_0_r5.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_jfxtras_jfxtras_fxml_8_0_r5.xml b/.idea/libraries/Maven__org_jfxtras_jfxtras_fxml_8_0_r5.xml new file mode 100644 index 0000000..8959165 --- /dev/null +++ b/.idea/libraries/Maven__org_jfxtras_jfxtras_fxml_8_0_r5.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_jfxtras_jfxtras_labs_8_0_r5.xml b/.idea/libraries/Maven__org_jfxtras_jfxtras_labs_8_0_r5.xml new file mode 100644 index 0000000..f358340 --- /dev/null +++ b/.idea/libraries/Maven__org_jfxtras_jfxtras_labs_8_0_r5.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_jfxtras_jfxtras_window_8_0_r5.xml b/.idea/libraries/Maven__org_jfxtras_jfxtras_window_8_0_r5.xml new file mode 100644 index 0000000..feed375 --- /dev/null +++ b/.idea/libraries/Maven__org_jfxtras_jfxtras_window_8_0_r5.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_mockito_mockito_core_1_10_19.xml b/.idea/libraries/Maven__org_mockito_mockito_core_1_10_19.xml new file mode 100644 index 0000000..a523703 --- /dev/null +++ b/.idea/libraries/Maven__org_mockito_mockito_core_1_10_19.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_objenesis_objenesis_2_1.xml b/.idea/libraries/Maven__org_objenesis_objenesis_2_1.xml new file mode 100644 index 0000000..7ab319b --- /dev/null +++ b/.idea/libraries/Maven__org_objenesis_objenesis_2_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_ow2_asm_asm_5_0_3.xml b/.idea/libraries/Maven__org_ow2_asm_asm_5_0_3.xml new file mode 100644 index 0000000..da69f6c --- /dev/null +++ b/.idea/libraries/Maven__org_ow2_asm_asm_5_0_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_skyscreamer_jsonassert_1_4_0.xml b/.idea/libraries/Maven__org_skyscreamer_jsonassert_1_4_0.xml new file mode 100644 index 0000000..f86d2c8 --- /dev/null +++ b/.idea/libraries/Maven__org_skyscreamer_jsonassert_1_4_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_slf4j_jcl_over_slf4j_1_7_25.xml b/.idea/libraries/Maven__org_slf4j_jcl_over_slf4j_1_7_25.xml new file mode 100644 index 0000000..bae9949 --- /dev/null +++ b/.idea/libraries/Maven__org_slf4j_jcl_over_slf4j_1_7_25.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_slf4j_jul_to_slf4j_1_7_25.xml b/.idea/libraries/Maven__org_slf4j_jul_to_slf4j_1_7_25.xml new file mode 100644 index 0000000..6073e53 --- /dev/null +++ b/.idea/libraries/Maven__org_slf4j_jul_to_slf4j_1_7_25.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_slf4j_log4j_over_slf4j_1_7_25.xml b/.idea/libraries/Maven__org_slf4j_log4j_over_slf4j_1_7_25.xml new file mode 100644 index 0000000..a14ac63 --- /dev/null +++ b/.idea/libraries/Maven__org_slf4j_log4j_over_slf4j_1_7_25.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_slf4j_slf4j_api_1_7_25.xml b/.idea/libraries/Maven__org_slf4j_slf4j_api_1_7_25.xml new file mode 100644 index 0000000..20e8163 --- /dev/null +++ b/.idea/libraries/Maven__org_slf4j_slf4j_api_1_7_25.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_1_5_3_RELEASE.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_1_5_3_RELEASE.xml new file mode 100644 index 0000000..f739d39 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_1_5_3_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_autoconfigure_1_5_3_RELEASE.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_autoconfigure_1_5_3_RELEASE.xml new file mode 100644 index 0000000..5eb4732 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_autoconfigure_1_5_3_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_1_5_3_RELEASE.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_1_5_3_RELEASE.xml new file mode 100644 index 0000000..b3f44c0 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_1_5_3_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_logging_1_5_3_RELEASE.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_logging_1_5_3_RELEASE.xml new file mode 100644 index 0000000..996c9fd --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_logging_1_5_3_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_security_1_5_3_RELEASE.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_security_1_5_3_RELEASE.xml new file mode 100644 index 0000000..86b1175 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_security_1_5_3_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_test_1_5_3_RELEASE.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_test_1_5_3_RELEASE.xml new file mode 100644 index 0000000..c64fd94 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_test_1_5_3_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_test_1_5_3_RELEASE.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_test_1_5_3_RELEASE.xml new file mode 100644 index 0000000..f212266 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_test_1_5_3_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_test_autoconfigure_1_5_3_RELEASE.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_test_autoconfigure_1_5_3_RELEASE.xml new file mode 100644 index 0000000..28a0a1d --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_test_autoconfigure_1_5_3_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_security_spring_security_config_4_2_2_RELEASE.xml b/.idea/libraries/Maven__org_springframework_security_spring_security_config_4_2_2_RELEASE.xml new file mode 100644 index 0000000..481256a --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_security_spring_security_config_4_2_2_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_security_spring_security_core_4_2_2_RELEASE.xml b/.idea/libraries/Maven__org_springframework_security_spring_security_core_4_2_2_RELEASE.xml new file mode 100644 index 0000000..de3b485 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_security_spring_security_core_4_2_2_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_security_spring_security_web_4_2_2_RELEASE.xml b/.idea/libraries/Maven__org_springframework_security_spring_security_web_4_2_2_RELEASE.xml new file mode 100644 index 0000000..78888a9 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_security_spring_security_web_4_2_2_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_aop_4_3_8_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_aop_4_3_8_RELEASE.xml new file mode 100644 index 0000000..659aa93 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_spring_aop_4_3_8_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_beans_4_3_8_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_beans_4_3_8_RELEASE.xml new file mode 100644 index 0000000..39b5701 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_spring_beans_4_3_8_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_context_4_3_8_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_context_4_3_8_RELEASE.xml new file mode 100644 index 0000000..36db229 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_spring_context_4_3_8_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_core_4_3_8_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_core_4_3_8_RELEASE.xml new file mode 100644 index 0000000..3ab7fea --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_spring_core_4_3_8_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_expression_4_3_8_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_expression_4_3_8_RELEASE.xml new file mode 100644 index 0000000..2fff822 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_spring_expression_4_3_8_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_test_4_3_8_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_test_4_3_8_RELEASE.xml new file mode 100644 index 0000000..885179d --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_spring_test_4_3_8_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_web_4_3_8_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_web_4_3_8_RELEASE.xml new file mode 100644 index 0000000..8409a49 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_spring_web_4_3_8_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_yaml_snakeyaml_1_17.xml b/.idea/libraries/Maven__org_yaml_snakeyaml_1_17.xml new file mode 100644 index 0000000..20e2920 --- /dev/null +++ b/.idea/libraries/Maven__org_yaml_snakeyaml_1_17.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..f4cb030 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml new file mode 100644 index 0000000..e96534f --- /dev/null +++ b/.idea/uiDesigner.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/IDrawings_Desktop.iml b/IDrawings_Desktop.iml new file mode 100644 index 0000000..b6546fe --- /dev/null +++ b/IDrawings_Desktop.iml @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml index 15d47c7..c70eaf7 100644 --- a/pom.xml +++ b/pom.xml @@ -3,18 +3,16 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - com.mvp.java - JavaLoggingSpringMongo_Tutorial + com.idrawings.desktop + drawing-seller-desctop 0.0.1-SNAPSHOT jar - JavaLoggingSpringMongo_Tutorial - org.springframework.boot spring-boot-starter-parent - 1.4.0.RELEASE - + 1.5.3.RELEASE + @@ -27,21 +25,68 @@ org.springframework.boot spring-boot-starter-security - + + org.springframework + spring-web + + + com.fasterxml.jackson.core + jackson-databind + org.springframework.boot spring-boot-starter-test test + + com.fasterxml.jackson.datatype + jackson-datatype-jsr310 + - org.springframework.data - spring-data-mongodb + org.apache.commons + commons-lang3 + 3.5 + compile + + + + + org.controlsfx + controlsfx + 8.40.12 - org.mongodb - mongodb-driver-async - 3.0.4 + com.jfoenix + jfoenix + 1.0.0 + + + org.jfxtras + jfxtras-controls + 8.0-r5 + + + org.jfxtras + jfxtras-common + 8.0-r5 + + + org.jfxtras + jfxtras-window + 8.0-r5 + + + org.jfxtras + jfxtras-labs + 8.0-r5 + + + + + com.idrawings.transport + idrawings-dto + 1.0-SNAPSHOT @@ -51,16 +96,14 @@ org.springframework.boot spring-boot-maven-plugin - - org.apache.maven.plugins - maven-compiler-plugin - 2.3.2 - - true - - + + + + + + + + - - diff --git a/src/main/java/com/idrawings/desktop/Main.java b/src/main/java/com/idrawings/desktop/Main.java new file mode 100644 index 0000000..3d830db --- /dev/null +++ b/src/main/java/com/idrawings/desktop/Main.java @@ -0,0 +1,86 @@ +package com.idrawings.desktop; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.datatype.jsr310.JSR310Module; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +import com.idrawings.desktop.service.LocalDateDeserializer; +import com.idrawings.desktop.service.LocalDateSerializer; +import javafx.application.Application; +import javafx.fxml.FXMLLoader; +import javafx.scene.Parent; +import javafx.scene.Scene; +import javafx.scene.image.Image; +import javafx.stage.Stage; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.builder.SpringApplicationBuilder; +import org.springframework.boot.web.client.RestTemplateBuilder; +import org.springframework.context.ConfigurableApplicationContext; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Primary; +import org.springframework.web.client.RestTemplate; + +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; + +import static java.time.format.DateTimeFormatter.ofPattern; + +@SpringBootApplication +public class Main extends Application { + + private ConfigurableApplicationContext springContext; + private Parent rootNode; + public static final DateTimeFormatter FORMATTER = ofPattern("dd::MM::yyyy"); + + @Bean + @Primary + public ObjectMapper serializingObjectMapper() { + ObjectMapper objectMapper = new ObjectMapper(); + JavaTimeModule javaTimeModule = new JavaTimeModule(); + javaTimeModule.addSerializer(LocalDate.class, new LocalDateSerializer()); + javaTimeModule.addDeserializer(LocalDate.class, new LocalDateDeserializer()); + objectMapper.registerModule(javaTimeModule); + return objectMapper; + } + + public static void main(final String[] args) { + Application.launch(args); + } + + @Override + public void init() throws Exception { + springContext = bootstrapSpringApplicationContext(); + FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/fxml/MainContainer.fxml")); + fxmlLoader.setControllerFactory(springContext::getBean); + rootNode = fxmlLoader.load(); + } + + private ConfigurableApplicationContext bootstrapSpringApplicationContext() { + SpringApplicationBuilder builder = new SpringApplicationBuilder(Main.class); + String[] args = getParameters().getRaw().stream().toArray(String[]::new); + builder.headless(false); + return builder.run(args); + } + + @Bean + public RestTemplate restTemplate(RestTemplateBuilder builder) { + return builder.build(); + } + + @Override + public void start(Stage stage) throws Exception { + stage.setScene(new Scene(rootNode)); + stage.setTitle("Drawings seller 2.0"); + stage.setWidth(1200); + stage.setHeight(800); + stage.centerOnScreen(); + stage.getIcons().add(new Image("/favicon/Icon.png")); + stage.getScene().getStylesheets().add("styles/style.css"); + stage.show(); + } + + @Override + public void stop() throws Exception { + springContext.close(); + } +} \ No newline at end of file diff --git a/src/main/java/com/idrawings/desktop/controllers/DocumentSearchController.java b/src/main/java/com/idrawings/desktop/controllers/DocumentSearchController.java new file mode 100644 index 0000000..a3caba3 --- /dev/null +++ b/src/main/java/com/idrawings/desktop/controllers/DocumentSearchController.java @@ -0,0 +1,153 @@ +package com.idrawings.desktop.controllers; + +import com.idrawings.desktop.domain.FilterCriteria; +import com.idrawings.desktop.domain.TableItem; + +import com.idrawings.dto.document.DocumentDTO; +import com.idrawings.dto.drawing.StampDTO; +import javafx.beans.property.SimpleBooleanProperty; +import javafx.beans.property.SimpleStringProperty; +import javafx.beans.value.ObservableValue; +import javafx.collections.FXCollections; +import javafx.collections.ListChangeListener; +import javafx.collections.ObservableList; +import javafx.fxml.FXML; +import javafx.scene.control.*; +import javafx.scene.control.cell.CheckBoxListCell; +import javafx.scene.control.cell.PropertyValueFactory; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +/** + * Created by White Stream on 30.05.2017. + */ +@Component +public class DocumentSearchController { + + private Map> map = new LinkedHashMap<>(); + + @FXML + private ListView drawingsList; + @FXML + private TableView drawingInfoTable; + @FXML + private TableColumn key, value; + + @FXML + private TextField author; + @FXML + private TextField checked; + @FXML + private TextField code; + @FXML + private TextField name; + @FXML + private TextField material; + @FXML + private TextField organization; + @FXML + private TextField weight; + @FXML + private TextField text; + @FXML + private TextField size; + @FXML + private TextField table; + + @FXML + private void reset() { + author.setText(""); + checked.setText(""); + code.setText(""); + name.setText(""); + material.setText(""); + organization.setText(""); + weight.setText(""); + text.setText(""); + size.setText(""); + table.setText(""); + } + + @FXML + private void initialize() { + key.setCellValueFactory(new PropertyValueFactory<>("key")); + value.setCellValueFactory(new PropertyValueFactory<>("value")); + drawingsList.getSelectionModel().setSelectionMode(SelectionMode.SINGLE); + setListeners(); + } + + private FilterCriteria getFilterCriteria() { + FilterCriteria filterCriteria = new FilterCriteria(); + + filterCriteria.setAuthor(author.getText()); + filterCriteria.setChecked(checked.getText()); + filterCriteria.setCode(code.getText()); + filterCriteria.setName(name.getText()); + filterCriteria.setMaterial(material.getText()); + filterCriteria.setOrganization(organization.getText()); + filterCriteria.setWeight(weight.getText()); + filterCriteria.setText(text.getText()); + filterCriteria.setSize(size.getText()); + filterCriteria.setTable(table.getText()); + + return filterCriteria; + } + + public void addDrawingToList(DocumentDTO file) { + map.put(file, new SimpleBooleanProperty(false)); + drawingsList.setCellFactory(CheckBoxListCell.forListView(map::get)); + drawingsList.getItems().add(file); + } + + private void setListeners() { + drawingsList.getSelectionModel().getSelectedItems().addListener((ListChangeListener) c -> { + drawingInfoTable.setItems(getInitialTableData(drawingsList.getSelectionModel().getSelectedItem())); + }); + } + + private ObservableList getInitialTableData(DocumentDTO selectedFile) { + if (selectedFile == null) { + return FXCollections.emptyObservableList(); + } + + StampDTO stamp = selectedFile.getStampDTO(); + + List list = new ArrayList<>(); + list.add(new TableItem(new SimpleStringProperty("Наименование изделия"), new SimpleStringProperty(stamp.getKsStPartNumber()))); + list.add(new TableItem(new SimpleStringProperty("Обозначение документа"), new SimpleStringProperty(stamp.getKsStDescription()))); + list.add(new TableItem(new SimpleStringProperty("Обозначение материала"), new SimpleStringProperty(stamp.getKsStMaterial()))); + list.add(new TableItem(new SimpleStringProperty("Масса изделия"), new SimpleStringProperty(stamp.getKsStMass()))); + list.add(new TableItem(new SimpleStringProperty("Масштаб"), new SimpleStringProperty(stamp.getKsStScale()))); + list.add(new TableItem(new SimpleStringProperty("Номер листа"), new SimpleStringProperty(stamp.getKsStSheetNumber()))); + list.add(new TableItem(new SimpleStringProperty("Количество листов"), new SimpleStringProperty(stamp.getKsStNumberOfSheets()))); + list.add(new TableItem(new SimpleStringProperty("Индекс предприятия"), new SimpleStringProperty(stamp.getKsStCompany()))); + list.add(new TableItem(new SimpleStringProperty("Характер работы"), new SimpleStringProperty(stamp.getKsStTypeOfWork()))); + list.add(new TableItem(new SimpleStringProperty("Литера документа (графа 1)"), new SimpleStringProperty(stamp.getKsStDocumentLetter1()))); + list.add(new TableItem(new SimpleStringProperty("Литера документа (графа 2)"), new SimpleStringProperty(stamp.getKsStDocumentLetter2()))); + list.add(new TableItem(new SimpleStringProperty("Литера документа (графа 3)"), new SimpleStringProperty(stamp.getKsStDocumentLetter3()))); + list.add(new TableItem(new SimpleStringProperty("Имя файла (полное)"), new SimpleStringProperty(stamp.getKsStFullFileName()))); + list.add(new TableItem(new SimpleStringProperty("Имя файла (короткое)"), new SimpleStringProperty(stamp.getKsStShortFileName()))); + list.add(new TableItem(new SimpleStringProperty("Строка обозначения и дефис"), new SimpleStringProperty(stamp.getKsStMarkingLine()))); + list.add(new TableItem(new SimpleStringProperty("Наименование документа"), new SimpleStringProperty(stamp.getKsStDocumentName()))); + list.add(new TableItem(new SimpleStringProperty("Код документа"), new SimpleStringProperty(stamp.getKsStDocumentCode()))); + list.add(new TableItem(new SimpleStringProperty("Код ОКП"), new SimpleStringProperty(stamp.getKsStOKPCode()))); + list.add(new TableItem(new SimpleStringProperty("Фамилия разработавшего"), new SimpleStringProperty(stamp.getKsStAuthor()))); + list.add(new TableItem(new SimpleStringProperty("Фамилия проверившего"), new SimpleStringProperty(stamp.getKsStCheckedBy()))); + list.add(new TableItem(new SimpleStringProperty("Фамилия тех.контр"), new SimpleStringProperty(stamp.getKsStMfgApprovedBy()))); + list.add(new TableItem(new SimpleStringProperty("Фамилия вып.работу"), new SimpleStringProperty(stamp.getKsStDesigner()))); + list.add(new TableItem(new SimpleStringProperty("Фамилия норм.контр"), new SimpleStringProperty(stamp.getKsStRateOfInspection()))); + list.add(new TableItem(new SimpleStringProperty("Фамилия утверждающего"), new SimpleStringProperty(stamp.getKsStApprovedBy()))); + list.add(new TableItem(new SimpleStringProperty("Дата окончания разработки"), new SimpleStringProperty(stamp.getKsStEndDesignDate()))); + list.add(new TableItem(new SimpleStringProperty("Дата проверки"), new SimpleStringProperty(stamp.getKsStCheckedDate()))); + list.add(new TableItem(new SimpleStringProperty("Дата тех.контр"), new SimpleStringProperty(stamp.getKsStMfgApprovedDate()))); + list.add(new TableItem(new SimpleStringProperty("Дата выполнения"), new SimpleStringProperty(stamp.getKsStExecutionDate()))); + list.add(new TableItem(new SimpleStringProperty("Дата норм.контр"), new SimpleStringProperty(stamp.getKsStRateOfInspectionDate()))); + list.add(new TableItem(new SimpleStringProperty("Дата утверждения"), new SimpleStringProperty(stamp.getKsStApprovedDate()))); + + return FXCollections.observableList(list); + } +} diff --git a/src/main/java/com/idrawings/desktop/controllers/FilesSearchTabController.java b/src/main/java/com/idrawings/desktop/controllers/FilesSearchTabController.java new file mode 100644 index 0000000..49cbad0 --- /dev/null +++ b/src/main/java/com/idrawings/desktop/controllers/FilesSearchTabController.java @@ -0,0 +1,228 @@ +package com.idrawings.desktop.controllers; + +import com.idrawings.desktop.domain.FileSearchCriteria; +import com.idrawings.desktop.domain.TableItem; +import com.idrawings.desktop.service.RestClient; +import com.idrawings.dto.enums.FileFormat; +import com.idrawings.dto.file.LocalFileDTO; +import javafx.beans.property.SimpleBooleanProperty; +import javafx.beans.property.SimpleStringProperty; +import javafx.beans.value.ObservableValue; +import javafx.collections.FXCollections; +import javafx.collections.ListChangeListener; +import javafx.collections.ObservableList; +import javafx.fxml.FXML; +import javafx.scene.control.*; +import javafx.scene.control.cell.CheckBoxListCell; +import javafx.scene.control.cell.PropertyValueFactory; +import javafx.util.Callback; +import jfxtras.labs.scene.control.BigDecimalField; +import org.controlsfx.control.CheckComboBox; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.util.*; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.LinkedBlockingQueue; + +import static java.io.File.listRoots; +import static java.util.stream.Stream.of; + +@Component +public class FilesSearchTabController { + + private static final int FIRST_ELEMENT = 0; + + @Value("${rest.date.template}") + private String dateTemplate; + + @Autowired + private RestClient restClient; + @Autowired + private MainController mainController; + @Autowired + private DocumentSearchController documentSearchController; + + private Map> map = new LinkedHashMap<>(); + + @FXML + private ListView fileList; + @FXML + private TableView fileInfoTable; + @FXML + private TableColumn key, value; + @FXML + private CheckComboBox discMultiCheckBox; + @FXML + private CheckComboBox formatMultiCheckBox; + @FXML + private TextField partOfFileName, partOfFilePath; + @FXML + private DatePicker creationDateFrom, creationDateUntil; + @FXML + private DatePicker lastModifiedDateFrom, lastModifiedDateUntil; + @FXML + private DatePicker lastAccessDateFrom, lastAccessDateUntil; + @FXML + private BigDecimalField fileSizeFrom, fileSizeUntil; + @FXML + private Button index; + + @FXML + private void readData() { + List files = new LinkedList<>(); + for (LocalFileDTO key : map.keySet()) { + if (map.get(key).getValue()) { + files.add(key); + } + } + + restClient.getDataFromFile(files).forEach(f -> documentSearchController.addDrawingToList(f)); + } + + @FXML + private void initialize() { + key.setCellValueFactory(new PropertyValueFactory<>("key")); + value.setCellValueFactory(new PropertyValueFactory<>("value")); + fileList.getSelectionModel().setSelectionMode(SelectionMode.SINGLE); + formatMultiCheckBox.getItems().addAll(FileFormat.getAll()); + formatMultiCheckBox.getCheckModel().check(FIRST_ELEMENT); + discMultiCheckBox.getItems().addAll(of(listRoots()).map(file -> file.getAbsolutePath().substring(0, 1)).sorted().toArray(String[]::new)); + discMultiCheckBox.getCheckModel().check(FIRST_ELEMENT); + fileSizeUntil.setNumber(new BigDecimal(0)); + fileSizeFrom.setNumber(new BigDecimal(0)); + fileSizeFrom.setMinValue(new BigDecimal(0)); + fileSizeUntil.setMinValue(new BigDecimal(0)); + initIndexButton(); + setListeners(); + } + + private void setListeners() { + ObservableList checkedList = fileList.getSelectionModel().getSelectedItems(); + checkedList.addListener((ListChangeListener) c -> { + fileInfoTable.setItems(getInitialTableData(fileList.getSelectionModel().getSelectedItem())); + }); + } + + private ObservableList getInitialTableData(LocalFileDTO selectedFile) { + if (selectedFile == null) { + return FXCollections.emptyObservableList(); + } + List list = new ArrayList<>(); + + list.add(new TableItem(new SimpleStringProperty("ID"), new SimpleStringProperty(selectedFile.getId().toString()))); + list.add(new TableItem(new SimpleStringProperty("Название файла"), new SimpleStringProperty(selectedFile.getName()))); + list.add(new TableItem(new SimpleStringProperty("Формат"), new SimpleStringProperty(selectedFile.getExtension()))); + list.add(new TableItem(new SimpleStringProperty("Путь к файлу"), new SimpleStringProperty(selectedFile.getPath()))); + list.add(new TableItem(new SimpleStringProperty("Размер"), new SimpleStringProperty("151 КБ (154 760 байт)"))); + list.add(new TableItem(new SimpleStringProperty("Владелец"), new SimpleStringProperty(selectedFile.getSize().toString()))); + list.add(new TableItem(new SimpleStringProperty("Дата создания"), new SimpleStringProperty(selectedFile.getCreationDate().toString()))); + list.add(new TableItem(new SimpleStringProperty("Дата изменения"), new SimpleStringProperty(selectedFile.getModifiedDate().toString()))); + list.add(new TableItem(new SimpleStringProperty("Дата открытия"), new SimpleStringProperty(selectedFile.getAccessDate().toString()))); + list.add(new TableItem(new SimpleStringProperty("Программа"), new SimpleStringProperty("Kompac"))); + list.add(new TableItem(new SimpleStringProperty("Тип файла"), new SimpleStringProperty("KОМПАС-Чертеж"))); + list.add(new TableItem(new SimpleStringProperty("Атрибуты"), new SimpleStringProperty("А"))); + + return FXCollections.observableList(list); + } + + @FXML + private void findFiles() { + Collection resultList = restClient.findFiles(getCriteria()); + + mainController.setTotalFilesCount(resultList.size() + ""); + mainController.setTotalFilesSize(resultList.stream().mapToLong(LocalFileDTO::getSize).sum() + ""); + + resultList.forEach(file -> map.put(file, new SimpleBooleanProperty(false))); + fileList.setCellFactory(CheckBoxListCell.forListView(map::get)); + fileList.getItems().addAll(resultList); + } + + private FileSearchCriteria getCriteria() { + FileSearchCriteria criteria = new FileSearchCriteria(); + criteria.setDiscs(discMultiCheckBox.getCheckModel().getCheckedItems()); + criteria.setFormats(formatMultiCheckBox.getCheckModel().getCheckedItems()); + criteria.setPartOfFileName(partOfFileName.getText()); + criteria.setPathOfPFilePath(partOfFilePath.getText()); + criteria.setCreationDateFrom(formatDate(creationDateFrom.getValue())); + criteria.setCreationDateUntil(formatDate(creationDateUntil.getValue())); + criteria.setLastModifiedDateFrom(formatDate(lastModifiedDateFrom.getValue())); + criteria.setLastModifiedDateUntil(formatDate(lastModifiedDateUntil.getValue())); + criteria.setLastAccessDateFrom(formatDate(lastAccessDateFrom.getValue())); + criteria.setLastAccessDateUntil(formatDate(lastAccessDateUntil.getValue())); + criteria.setFileSizeFrom(fileSizeFrom.getNumber()); + criteria.setFileSizeUntil(fileSizeUntil.getNumber()); + return criteria; + } + + private String formatDate(LocalDate date) { + return date == null ? null : date.format(DateTimeFormatter.ofPattern(dateTemplate)); + } + + + @FXML + private void processIndex() { + if (index.getText().equals("Обновить индекс")) { + restClient.updateIndex(); + index.setText(""); + } else { + restClient.createIndex(); + index.setText("Обновить индекс"); + } + } + + private void initIndexButton() { + if (!restClient.getFilesCountInIndex().equals(BigDecimal.ZERO)) { + index.setText("Обновить индекс"); + } else { + index.setText("Создать индекс"); + } + } + + @FXML + private void resetParameters() { + discMultiCheckBox.getCheckModel().clearChecks(); + discMultiCheckBox.getCheckModel().check(FIRST_ELEMENT); + formatMultiCheckBox.getCheckModel().clearChecks(); + formatMultiCheckBox.getCheckModel().check(FIRST_ELEMENT); + partOfFileName.clear(); + partOfFilePath.clear(); + creationDateFrom.setValue(null); + creationDateUntil.setValue(null); + lastAccessDateFrom.setValue(null); + lastAccessDateUntil.setValue(null); + lastModifiedDateFrom.setValue(null); + lastModifiedDateUntil.setValue(null); + fileSizeUntil.setNumber(new BigDecimal(0)); + fileSizeFrom.setNumber(new BigDecimal(0)); + } + + @FXML + private void checkAll() { + fileList.getItems().forEach(e -> map.put(e, new SimpleBooleanProperty(true))); + fileList.getItems().clear(); + fileList.getItems().addAll(map.keySet()); + Callback> itemToBoolean = map::get; + fileList.setCellFactory(CheckBoxListCell.forListView(itemToBoolean)); + mainController.setSelectedFilesCount(fileList.getItems().size() + ""); + } + + @FXML + private void uncheckedAll() { + fileList.getItems().forEach(e -> map.put(e, new SimpleBooleanProperty(false))); + fileList.getItems().clear(); + fileList.getItems().addAll(map.keySet()); + Callback> itemToBoolean = map::get; + fileList.setCellFactory(CheckBoxListCell.forListView(itemToBoolean)); + mainController.setSelectedFilesCount(0 + ""); + } + + @FXML + private void cleanTable() { + fileList.getItems().clear(); + } +} \ No newline at end of file diff --git a/src/main/java/com/idrawings/desktop/controllers/MainController.java b/src/main/java/com/idrawings/desktop/controllers/MainController.java new file mode 100644 index 0000000..bec6fc0 --- /dev/null +++ b/src/main/java/com/idrawings/desktop/controllers/MainController.java @@ -0,0 +1,48 @@ +package com.idrawings.desktop.controllers; + +import com.idrawings.dto.file.LocalFileDTO; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.fxml.FXML; +import javafx.scene.control.Label; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * Created by Admin on 27.05.2017. + */ +@Component +public class MainController { + + private ObservableList localFileObservableList = FXCollections.observableArrayList(); + + @Autowired + private DocumentSearchController documentSearchController; + + @FXML + private Label totalFilesCount; + @FXML + private Label totalFilesSize; + @FXML + private Label selectedFilesCount; + + + public void setTotalFilesCount(String totalFilesCount) { + this.totalFilesCount.setText(totalFilesCount); + } + + public void setTotalFilesSize(String totalFilesSize) { + this.totalFilesSize.setText(totalFilesSize); + } + + public void setSelectedFilesCount(String selectedFilesCount) { + this.selectedFilesCount.setText(selectedFilesCount); + } + + public ObservableList getLocalFileObservableList() { + return localFileObservableList; + } + +} diff --git a/src/main/java/com/idrawings/desktop/domain/FileSearchCriteria.java b/src/main/java/com/idrawings/desktop/domain/FileSearchCriteria.java new file mode 100644 index 0000000..d5ea8bd --- /dev/null +++ b/src/main/java/com/idrawings/desktop/domain/FileSearchCriteria.java @@ -0,0 +1,135 @@ +package com.idrawings.desktop.domain; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; + +import java.math.BigDecimal; +import java.util.List; + +/** + * Created by White Stream on 30.05.2017. + */ +@JsonSerialize +public class FileSearchCriteria { + private List discs; + private List formats; + private String partOfFileName; + private String pathOfPFilePath; + private String creationDateFrom, creationDateUntil; + private String lastModifiedDateFrom, lastModifiedDateUntil; + private String lastAccessDateFrom, lastAccessDateUntil; + private BigDecimal fileSizeFrom, fileSizeUntil; + + public List getDiscs() { + return discs; + } + + public void setDiscs(List discs) { + this.discs = discs; + } + + public List getFormats() { + return formats; + } + + public void setFormats(List formats) { + this.formats = formats; + } + + public String getPartOfFileName() { + return partOfFileName; + } + + public void setPartOfFileName(String partOfFileName) { + this.partOfFileName = partOfFileName; + } + + public String getPathOfPFilePath() { + return pathOfPFilePath; + } + + public void setPathOfPFilePath(String pathOfPFilePath) { + this.pathOfPFilePath = pathOfPFilePath; + } + + public String getCreationDateFrom() { + return creationDateFrom; + } + + public void setCreationDateFrom(String creationDateFrom) { + this.creationDateFrom = creationDateFrom; + } + + public String getCreationDateUntil() { + return creationDateUntil; + } + + public void setCreationDateUntil(String creationDateUntil) { + this.creationDateUntil = creationDateUntil; + } + + public String getLastModifiedDateFrom() { + return lastModifiedDateFrom; + } + + public void setLastModifiedDateFrom(String lastModifiedDateFrom) { + this.lastModifiedDateFrom = lastModifiedDateFrom; + } + + public String getLastModifiedDateUntil() { + return lastModifiedDateUntil; + } + + public void setLastModifiedDateUntil(String lastModifiedDateUntil) { + this.lastModifiedDateUntil = lastModifiedDateUntil; + } + + public String getLastAccessDateFrom() { + return lastAccessDateFrom; + } + + public void setLastAccessDateFrom(String lastAccessDateFrom) { + this.lastAccessDateFrom = lastAccessDateFrom; + } + + public String getLastAccessDateUntil() { + return lastAccessDateUntil; + } + + public void setLastAccessDateUntil(String lastAccessDateUntil) { + this.lastAccessDateUntil = lastAccessDateUntil; + } + + public BigDecimal getFileSizeFrom() { + return fileSizeFrom; + } + + public void setFileSizeFrom(BigDecimal fileSizeFrom) { + this.fileSizeFrom = fileSizeFrom; + } + + public BigDecimal getFileSizeUntil() { + return fileSizeUntil; + } + + public void setFileSizeUntil(BigDecimal fileSizeUntil) { + this.fileSizeUntil = fileSizeUntil; + } + + @Override + public String toString() { + return "FileSearchCriteria{" + + "discs=" + discs + + ", formats=" + formats + + ", partOfFileName='" + partOfFileName + '\'' + + ", pathOfPFilePath='" + pathOfPFilePath + '\'' + + ", creationDateFrom=" + creationDateFrom + + ", creationDateUntil=" + creationDateUntil + + ", lastModifiedDateFrom=" + lastModifiedDateFrom + + ", lastModifiedDateUntil=" + lastModifiedDateUntil + + ", lastAccessDateFrom=" + lastAccessDateFrom + + ", lastAccessDateUntil=" + lastAccessDateUntil + + ", fileSizeFrom=" + fileSizeFrom + + ", fileSizeUntil=" + fileSizeUntil + + '}'; + } +} diff --git a/src/main/java/com/idrawings/desktop/domain/FilterCriteria.java b/src/main/java/com/idrawings/desktop/domain/FilterCriteria.java new file mode 100644 index 0000000..66753b8 --- /dev/null +++ b/src/main/java/com/idrawings/desktop/domain/FilterCriteria.java @@ -0,0 +1,97 @@ +package com.idrawings.desktop.domain; + +/** + * Created by White Stream on 30.05.2017. + */ +public class FilterCriteria { + private String author = ""; + private String checked = ""; + private String code = ""; + private String name = ""; + private String material = ""; + private String organization = ""; + private String weight = ""; + private String text = ""; + private String size = ""; + private String table = ""; + + public String getAuthor() { + return author; + } + + public void setAuthor(String author) { + this.author = author; + } + + public String getChecked() { + return checked; + } + + public void setChecked(String checked) { + this.checked = checked; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getMaterial() { + return material; + } + + public void setMaterial(String material) { + this.material = material; + } + + public String getOrganization() { + return organization; + } + + public void setOrganization(String organization) { + this.organization = organization; + } + + public String getWeight() { + return weight; + } + + public void setWeight(String weight) { + this.weight = weight; + } + + public String getText() { + return text; + } + + public void setText(String text) { + this.text = text; + } + + public String getSize() { + return size; + } + + public void setSize(String size) { + this.size = size; + } + + public String getTable() { + return table; + } + + public void setTable(String table) { + this.table = table; + } +} diff --git a/src/main/java/com/idrawings/desktop/domain/TableItem.java b/src/main/java/com/idrawings/desktop/domain/TableItem.java new file mode 100644 index 0000000..91767c2 --- /dev/null +++ b/src/main/java/com/idrawings/desktop/domain/TableItem.java @@ -0,0 +1,40 @@ +package com.idrawings.desktop.domain; + +import javafx.beans.property.SimpleStringProperty; + +/** + * Created by White Stream on 30.05.2017. + */ +public class TableItem { + private SimpleStringProperty key; + private SimpleStringProperty value; + + public TableItem(SimpleStringProperty key, SimpleStringProperty value) { + this.key = key; + this.value = value; + } + + public String getKey() { + return key.get(); + } + + public SimpleStringProperty keyProperty() { + return key; + } + + public void setKey(String key) { + this.key.set(key); + } + + public String getValue() { + return value.get(); + } + + public SimpleStringProperty valueProperty() { + return value; + } + + public void setValue(String value) { + this.value.set(value); + } +} diff --git a/src/main/java/com/idrawings/desktop/domain/filter/DrawingFilter.java b/src/main/java/com/idrawings/desktop/domain/filter/DrawingFilter.java new file mode 100644 index 0000000..dc1109c --- /dev/null +++ b/src/main/java/com/idrawings/desktop/domain/filter/DrawingFilter.java @@ -0,0 +1,27 @@ +package com.idrawings.desktop.domain.filter; + + +import com.idrawings.desktop.domain.FilterCriteria; +import com.idrawings.desktop.domain.filter.chainmodule.*; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; + +/** + * Created by White Stream on 16.04.2017. + */ +public class DrawingFilter { + public ObservableList filter(ObservableList drawingsList, FilterCriteria filterCriteria) { + + FilterChain filterChain = new AuthorFilter(new CheckedFilter(new CodeFilter(new WeightFilter(new MaterialFilter(new NameFilter(new OrganizationFilter(new SizeFilter(new TableFilter(new TextFilter(new EndFilter(filterCriteria))))))))))); + + ObservableList result = FXCollections.observableArrayList(); + + for (DocumentDTO documentDTO : drawingsList){ + if (filterChain.filter(documentDTO)) { + result.add(documentDTO); + } + } + + return result; + } +} diff --git a/src/main/java/com/idrawings/desktop/domain/filter/chainmodule/AuthorFilter.java b/src/main/java/com/idrawings/desktop/domain/filter/chainmodule/AuthorFilter.java new file mode 100644 index 0000000..34fe441 --- /dev/null +++ b/src/main/java/com/idrawings/desktop/domain/filter/chainmodule/AuthorFilter.java @@ -0,0 +1,20 @@ +package com.idrawings.desktop.domain.filter.chainmodule; + +import static org.apache.commons.lang3.StringUtils.defaultString; + +/** + * Created by White Stream on 16.04.2017. + */ +public class AuthorFilter extends FilterChain { + + public AuthorFilter(FilterChain nextChain) { + super(nextChain, nextChain.getCriteria()); + } + + @Override + public boolean filter(DocumentDTO documentDTO) { + return defaultString(criteria.getAuthor()).isEmpty() ? + nextChain.filter(documentDTO) : + isFiltered(documentDTO.getStampDTO().getKsStAuthor(), criteria.getAuthor()) && nextChain.filter(documentDTO); + } +} diff --git a/src/main/java/com/idrawings/desktop/domain/filter/chainmodule/CheckedFilter.java b/src/main/java/com/idrawings/desktop/domain/filter/chainmodule/CheckedFilter.java new file mode 100644 index 0000000..dad496e --- /dev/null +++ b/src/main/java/com/idrawings/desktop/domain/filter/chainmodule/CheckedFilter.java @@ -0,0 +1,17 @@ +package com.idrawings.desktop.domain.filter.chainmodule; + +import static org.apache.commons.lang3.StringUtils.defaultString; + +/** + * Created by White Stream on 16.04.2017. + */ +public class CheckedFilter extends FilterChain { + public CheckedFilter(FilterChain nextChain) { + super(nextChain, nextChain.getCriteria()); + } + + @Override + public boolean filter(DocumentDTO documentDTO) { + return defaultString(criteria.getChecked()).isEmpty() ? nextChain.filter(documentDTO) : isFiltered(documentDTO.getStampDTO().getKsStCheckedBy(), criteria.getChecked()) && nextChain.filter(documentDTO); + } +} diff --git a/src/main/java/com/idrawings/desktop/domain/filter/chainmodule/CodeFilter.java b/src/main/java/com/idrawings/desktop/domain/filter/chainmodule/CodeFilter.java new file mode 100644 index 0000000..149ad02 --- /dev/null +++ b/src/main/java/com/idrawings/desktop/domain/filter/chainmodule/CodeFilter.java @@ -0,0 +1,17 @@ +package com.idrawings.desktop.domain.filter.chainmodule; + +import static org.apache.commons.lang3.StringUtils.defaultString; + +/** + * Created by White Stream on 16.04.2017. + */ +public class CodeFilter extends FilterChain { + public CodeFilter(FilterChain nextChain) { + super(nextChain, nextChain.getCriteria()); + } + + @Override + public boolean filter(DocumentDTO documentDTO) { + return defaultString(criteria.getCode()).isEmpty() ? nextChain.filter(documentDTO) : isFiltered(documentDTO.getStampDTO().getKsStDescription(), criteria.getCode()) && nextChain.filter(documentDTO); + } +} diff --git a/src/main/java/com/idrawings/desktop/domain/filter/chainmodule/DocumentDTO.java b/src/main/java/com/idrawings/desktop/domain/filter/chainmodule/DocumentDTO.java new file mode 100644 index 0000000..a917bd2 --- /dev/null +++ b/src/main/java/com/idrawings/desktop/domain/filter/chainmodule/DocumentDTO.java @@ -0,0 +1,29 @@ +package com.idrawings.desktop.domain.filter.chainmodule; + +import java.util.List; + +/** + * Created by White Stream on 30.05.2017. + */ +public class DocumentDTO { + private List documentSizes; + private List documentTables; + private StampDTO stampDTO; + private List documentTexts; + + public List getDocumentSizes() { + return documentSizes; + } + + public List getDocumentTables() { + return documentTables; + } + + public StampDTO getStampDTO() { + return stampDTO; + } + + public List getDocumentTexts() { + return documentTexts; + } +} diff --git a/src/main/java/com/idrawings/desktop/domain/filter/chainmodule/EndFilter.java b/src/main/java/com/idrawings/desktop/domain/filter/chainmodule/EndFilter.java new file mode 100644 index 0000000..a8cb8c5 --- /dev/null +++ b/src/main/java/com/idrawings/desktop/domain/filter/chainmodule/EndFilter.java @@ -0,0 +1,19 @@ +package com.idrawings.desktop.domain.filter.chainmodule; + + +import com.idrawings.desktop.domain.FilterCriteria; + +/** + * Created by White Stream on 16.04.2017. + */ +public class EndFilter extends FilterChain { + + public EndFilter(FilterCriteria criteria) { + super(null, criteria); + } + + @Override + public boolean filter(DocumentDTO documentDTO) { + return true; + } +} diff --git a/src/main/java/com/idrawings/desktop/domain/filter/chainmodule/FilterChain.java b/src/main/java/com/idrawings/desktop/domain/filter/chainmodule/FilterChain.java new file mode 100644 index 0000000..18e6f9b --- /dev/null +++ b/src/main/java/com/idrawings/desktop/domain/filter/chainmodule/FilterChain.java @@ -0,0 +1,27 @@ +package com.idrawings.desktop.domain.filter.chainmodule; + + +import com.idrawings.desktop.domain.FilterCriteria; + +/** + * Created by Admin on 25.02.2017. + */ +public abstract class FilterChain { + protected FilterChain nextChain; + protected FilterCriteria criteria; + + public FilterChain(FilterChain nextChain, FilterCriteria criteria) { + this.nextChain = nextChain; + this.criteria = criteria; + } + + boolean isFiltered(String authorDrawing, String authorFilter){ + return authorDrawing.toLowerCase().contains(authorFilter.toLowerCase()); + } + + public abstract boolean filter(DocumentDTO documentDTO); + + public FilterCriteria getCriteria() { + return criteria; + } +} diff --git a/src/main/java/com/idrawings/desktop/domain/filter/chainmodule/MaterialFilter.java b/src/main/java/com/idrawings/desktop/domain/filter/chainmodule/MaterialFilter.java new file mode 100644 index 0000000..debf1e6 --- /dev/null +++ b/src/main/java/com/idrawings/desktop/domain/filter/chainmodule/MaterialFilter.java @@ -0,0 +1,17 @@ +package com.idrawings.desktop.domain.filter.chainmodule; + +import static org.apache.commons.lang3.StringUtils.defaultString; + +/** + * Created by White Stream on 16.04.2017. + */ +public class MaterialFilter extends FilterChain { + public MaterialFilter(FilterChain nextChain) { + super(nextChain, nextChain.getCriteria()); + } + + @Override + public boolean filter(DocumentDTO documentDTO) { + return defaultString(criteria.getMaterial()).isEmpty() ? nextChain.filter(documentDTO) : isFiltered(documentDTO.getStampDTO().getKsStMaterial(), criteria.getMaterial()) && nextChain.filter(documentDTO); + } +} diff --git a/src/main/java/com/idrawings/desktop/domain/filter/chainmodule/NameFilter.java b/src/main/java/com/idrawings/desktop/domain/filter/chainmodule/NameFilter.java new file mode 100644 index 0000000..6f8890d --- /dev/null +++ b/src/main/java/com/idrawings/desktop/domain/filter/chainmodule/NameFilter.java @@ -0,0 +1,17 @@ +package com.idrawings.desktop.domain.filter.chainmodule; + +import static org.apache.commons.lang3.StringUtils.defaultString; + +/** + * Created by White Stream on 16.04.2017. + */ +public class NameFilter extends FilterChain { + public NameFilter(FilterChain nextChain) { + super(nextChain, nextChain.getCriteria()); + } + + @Override + public boolean filter(DocumentDTO documentDTO) { + return defaultString(criteria.getName()).isEmpty() ? nextChain.filter(documentDTO) : isFiltered(documentDTO.getStampDTO().getKsStPartNumber(), criteria.getName()) && nextChain.filter(documentDTO); + } +} diff --git a/src/main/java/com/idrawings/desktop/domain/filter/chainmodule/OrganizationFilter.java b/src/main/java/com/idrawings/desktop/domain/filter/chainmodule/OrganizationFilter.java new file mode 100644 index 0000000..ff252a1 --- /dev/null +++ b/src/main/java/com/idrawings/desktop/domain/filter/chainmodule/OrganizationFilter.java @@ -0,0 +1,17 @@ +package com.idrawings.desktop.domain.filter.chainmodule; + +import static org.apache.commons.lang3.StringUtils.defaultString; + +/** + * Created by White Stream on 16.04.2017. + */ +public class OrganizationFilter extends FilterChain { + public OrganizationFilter(FilterChain nextChain) { + super(nextChain, nextChain.getCriteria()); + } + + @Override + public boolean filter(DocumentDTO documentDTO) { + return defaultString(criteria.getOrganization()).isEmpty() ? nextChain.filter(documentDTO) : isFiltered(documentDTO.getStampDTO().getKsStCompany(), criteria.getOrganization()) && nextChain.filter(documentDTO); + } +} diff --git a/src/main/java/com/idrawings/desktop/domain/filter/chainmodule/SizeFilter.java b/src/main/java/com/idrawings/desktop/domain/filter/chainmodule/SizeFilter.java new file mode 100644 index 0000000..b13aafb --- /dev/null +++ b/src/main/java/com/idrawings/desktop/domain/filter/chainmodule/SizeFilter.java @@ -0,0 +1,24 @@ +package com.idrawings.desktop.domain.filter.chainmodule; + + +import java.util.List; + +import static org.apache.commons.lang3.StringUtils.defaultString; + +/** + * Created by White Stream on 16.04.2017. + */ +public class SizeFilter extends FilterChain { + public SizeFilter(FilterChain nextChain) { + super(nextChain, nextChain.getCriteria()); + } + + @Override + public boolean filter(DocumentDTO documentDTO) { + return defaultString(criteria.getSize()).isEmpty() ? nextChain.filter(documentDTO) : isFiltered(documentDTO.getDocumentSizes(), criteria.getSize()); + } + + private boolean isFiltered(List sizes, String pattern){ + return sizes.stream().anyMatch(s -> s.toLowerCase().contains(pattern.toLowerCase())); + } +} diff --git a/src/main/java/com/idrawings/desktop/domain/filter/chainmodule/StampDTO.java b/src/main/java/com/idrawings/desktop/domain/filter/chainmodule/StampDTO.java new file mode 100644 index 0000000..af243dd --- /dev/null +++ b/src/main/java/com/idrawings/desktop/domain/filter/chainmodule/StampDTO.java @@ -0,0 +1,42 @@ +package com.idrawings.desktop.domain.filter.chainmodule; + +/** + * Created by White Stream on 30.05.2017. + */ +public class StampDTO { + private String ksStAuthor; + private String ksStCheckedBy; + private String ksStCompany; + private String ksStMass; + private String ksStPartNumber; + private String ksStMaterial; + private String ksStDescription; + + public String getKsStAuthor() { + return ksStAuthor; + } + + public String getKsStCheckedBy() { + return ksStCheckedBy; + } + + public String getKsStCompany() { + return ksStCompany; + } + + public String getKsStMass() { + return ksStMass; + } + + public String getKsStPartNumber() { + return ksStPartNumber; + } + + public String getKsStMaterial() { + return ksStMaterial; + } + + public String getKsStDescription() { + return ksStDescription; + } +} diff --git a/src/main/java/com/idrawings/desktop/domain/filter/chainmodule/TableFilter.java b/src/main/java/com/idrawings/desktop/domain/filter/chainmodule/TableFilter.java new file mode 100644 index 0000000..86262e6 --- /dev/null +++ b/src/main/java/com/idrawings/desktop/domain/filter/chainmodule/TableFilter.java @@ -0,0 +1,21 @@ +package com.idrawings.desktop.domain.filter.chainmodule; + +import java.util.List; + +/** + * Created by White Stream on 16.04.2017. + */ +public class TableFilter extends FilterChain { + public TableFilter(FilterChain nextChain) { + super(nextChain, nextChain.getCriteria()); + } + + @Override + public boolean filter(DocumentDTO documentDTO) { + return criteria.getTable().isEmpty() ? nextChain.filter(documentDTO) : isFiltered(documentDTO.getDocumentTables(), criteria.getTable()); + } + + private boolean isFiltered(List tablesEntries, String pattern){ + return tablesEntries.stream().anyMatch(s -> s.toLowerCase().contains(pattern.toLowerCase())); + } +} diff --git a/src/main/java/com/idrawings/desktop/domain/filter/chainmodule/TextFilter.java b/src/main/java/com/idrawings/desktop/domain/filter/chainmodule/TextFilter.java new file mode 100644 index 0000000..0f512a5 --- /dev/null +++ b/src/main/java/com/idrawings/desktop/domain/filter/chainmodule/TextFilter.java @@ -0,0 +1,21 @@ +package com.idrawings.desktop.domain.filter.chainmodule; + +import java.util.List; + +/** + * Created by White Stream on 16.04.2017. + */ +public class TextFilter extends FilterChain { + public TextFilter(FilterChain nextChain) { + super(nextChain, nextChain.getCriteria()); + } + + @Override + public boolean filter(DocumentDTO documentDTO) { + return criteria.getText().isEmpty() ? nextChain.filter(documentDTO) : isFiltered(documentDTO.getDocumentTexts(), criteria.getText()); + } + + private boolean isFiltered(List texts, String pattern){ + return texts.stream().anyMatch(s -> s.toLowerCase().contains(pattern.toLowerCase())); + } +} diff --git a/src/main/java/com/idrawings/desktop/domain/filter/chainmodule/WeightFilter.java b/src/main/java/com/idrawings/desktop/domain/filter/chainmodule/WeightFilter.java new file mode 100644 index 0000000..3611a31 --- /dev/null +++ b/src/main/java/com/idrawings/desktop/domain/filter/chainmodule/WeightFilter.java @@ -0,0 +1,19 @@ +package com.idrawings.desktop.domain.filter.chainmodule; + +import static org.apache.commons.lang3.StringUtils.defaultString; + +/** + * Created by White Stream on 16.04.2017. + */ +public class WeightFilter extends FilterChain { + public WeightFilter(FilterChain nextChain) { + super(nextChain, nextChain.getCriteria()); + } + + @Override + public boolean filter(DocumentDTO documentDTO) { + return defaultString(criteria.getWeight()).isEmpty() ? + nextChain.filter(documentDTO) : + isFiltered(documentDTO.getStampDTO().getKsStMass(), criteria.getWeight()) && nextChain.filter(documentDTO); + } +} diff --git a/src/main/java/com/idrawings/desktop/service/LocalDateDeserializer.java b/src/main/java/com/idrawings/desktop/service/LocalDateDeserializer.java new file mode 100644 index 0000000..9c2cf6b --- /dev/null +++ b/src/main/java/com/idrawings/desktop/service/LocalDateDeserializer.java @@ -0,0 +1,21 @@ +package com.idrawings.desktop.service; + +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonDeserializer; + +import java.io.IOException; +import java.time.LocalDate; + +import static com.idrawings.desktop.Main.FORMATTER; + +/** + * Created by White Stream on 30.05.2017. + */ +public class LocalDateDeserializer extends JsonDeserializer { + + @Override + public LocalDate deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { + return LocalDate.parse(p.getValueAsString(), FORMATTER); + } +} \ No newline at end of file diff --git a/src/main/java/com/idrawings/desktop/service/LocalDateSerializer.java b/src/main/java/com/idrawings/desktop/service/LocalDateSerializer.java new file mode 100644 index 0000000..5667702 --- /dev/null +++ b/src/main/java/com/idrawings/desktop/service/LocalDateSerializer.java @@ -0,0 +1,21 @@ +package com.idrawings.desktop.service; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.SerializerProvider; + +import java.io.IOException; +import java.time.LocalDate; + +import static com.idrawings.desktop.Main.FORMATTER; + +/** + * Created by White Stream on 30.05.2017. + */ +public class LocalDateSerializer extends JsonSerializer { + + @Override + public void serialize(LocalDate value, JsonGenerator gen, SerializerProvider serializers) throws IOException { + gen.writeString(value.format(FORMATTER)); + } +} diff --git a/src/main/java/com/idrawings/desktop/service/RestClient.java b/src/main/java/com/idrawings/desktop/service/RestClient.java new file mode 100644 index 0000000..4c7a627 --- /dev/null +++ b/src/main/java/com/idrawings/desktop/service/RestClient.java @@ -0,0 +1,93 @@ +package com.idrawings.desktop.service; + +import com.idrawings.desktop.domain.FileSearchCriteria; +import com.idrawings.dto.document.DocumentDTO; +import com.idrawings.dto.file.LocalFileDTO; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.ParameterizedTypeReference; +import org.springframework.http.*; +import org.springframework.stereotype.Service; +import org.springframework.web.client.AsyncRestTemplate; +import org.springframework.web.client.RestTemplate; +import org.springframework.web.util.UriComponentsBuilder; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.Future; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * Created by White Stream on 13.05.2017. + */ +@Service +public class RestClient { + + @Autowired + private RestTemplate restTemplate; + + private AsyncRestTemplate asyncRestTemplate = new AsyncRestTemplate(); + + private final static String FILE_SEARCH_SERVICE = "http://localhost:5001"; + private final static String KOMPAS_SERVICE = "http://localhost:5500"; + + + public BigDecimal getFilesCountInIndex() { + return restTemplate.getForObject(FILE_SEARCH_SERVICE + "/files/count", BigDecimal.class); + } + + public void createIndex() { + restTemplate.put(FILE_SEARCH_SERVICE + "/files", String.class); + } + + public void updateIndex() { + cleanIndex(); + createIndex(); + } + + private void cleanIndex() { + restTemplate.delete(FILE_SEARCH_SERVICE + "/files"); + } + + public List findFiles(FileSearchCriteria criteria) { + HttpHeaders headers = new HttpHeaders(); + headers.set("Accept", MediaType.APPLICATION_JSON_VALUE); + + ParameterizedTypeReference> typeReference = new ParameterizedTypeReference>() { + }; + + UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(FILE_SEARCH_SERVICE + "/files/search") + .queryParam("discs", criteria.getDiscs().stream().collect(Collectors.joining(","))) + .queryParam("formats", criteria.getFormats().stream().collect(Collectors.joining(","))) + .queryParam("partOfFileName", criteria.getPartOfFileName()) + .queryParam("pathOfPFilePath", criteria.getPathOfPFilePath()) + .queryParam("creationDateFrom", criteria.getCreationDateFrom()) + .queryParam("creationDateUntil", criteria.getCreationDateUntil()) + .queryParam("lastModifiedDateFrom", criteria.getLastModifiedDateFrom()) + .queryParam("lastModifiedDateUntil", criteria.getLastModifiedDateUntil()) + .queryParam("lastAccessDateFrom", criteria.getLastAccessDateFrom()) + .queryParam("lastAccessDateUntil", criteria.getLastAccessDateUntil()) + .queryParam("fileSizeFrom", criteria.getFileSizeFrom()) + .queryParam("fileSizeUntil", criteria.getFileSizeUntil()); + + HttpEntity entity = new HttpEntity<>(headers); + ResponseEntity> rateResponse = restTemplate.exchange(builder.build().encode().toUri(), HttpMethod.GET, entity, typeReference); + + return rateResponse.getBody(); + } + + public List getDataFromFile(List localFileDTO) { + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + + List personList = localFileDTO.stream().map(LocalFileDTO::getPath).collect(Collectors.toList()); + + HttpEntity requestEntity = new HttpEntity<>(personList, headers); + ResponseEntity> rateResponse = restTemplate.exchange(KOMPAS_SERVICE + "/drawings", HttpMethod.POST, requestEntity, new ParameterizedTypeReference>() { + }); + + return rateResponse.getBody(); + } +} \ No newline at end of file diff --git a/src/main/java/com/mvp/java/Main.java b/src/main/java/com/mvp/java/Main.java deleted file mode 100644 index 6d12f9e..0000000 --- a/src/main/java/com/mvp/java/Main.java +++ /dev/null @@ -1,74 +0,0 @@ -package com.mvp.java; - -import javafx.application.Application; -import javafx.fxml.FXMLLoader; -import javafx.scene.Parent; -import javafx.scene.Scene; -import javafx.stage.Stage; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.context.ConfigurableApplicationContext; - -@SpringBootApplication -public class Main extends Application { - - private ConfigurableApplicationContext springContext; - private Parent rootNode; - - public static void main(final String[] args) { - Application.launch(args); - } - - @Override - public void init() throws Exception { - springContext = bootstrapSpringApplicationContext(); - FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/fxml/Main.fxml")); - fxmlLoader.setControllerFactory(springContext::getBean); - rootNode = fxmlLoader.load(); - } - - /** - * Bootstraps the Spring container via Spring Boot entry point. Registers - * all the Spring Beans via either @Configuration, @Component during - * scanning. Gets any parameters past into the application from command line - * (if any). - */ - private ConfigurableApplicationContext bootstrapSpringApplicationContext() { - SpringApplicationBuilder builder = new SpringApplicationBuilder(Main.class); - String[] args = getParameters().getRaw().stream().toArray(String[]::new); - builder.headless(false); //needed for TestFX integration testing or eles will get a java.awt.HeadlessException during tests - return builder.run(args); - } - - @Override - public void start(Stage stage) throws Exception { - stage.setScene(new Scene(rootNode)); - stage.setTitle("NASA Missions Database"); - stage.centerOnScreen(); - stage.getScene().getStylesheets().add("style.css"); - stage.show(); - - } - - @Override - public void stop() throws Exception { - springContext.close(); - } - -} - -//Options ... -//gets called for each Controller that you want DI. If you put a println -//in before the return, you can see which Controller gets DI by spring -//via good old anonymous class -// loader.setControllerFactory(new Callback, Object>() { -// @Override -// public Object call(Class clazz) { -// return springContext.getBean(clazz); -// } -// }); -// via lambda -// loader.setControllerFactory((clazz) -> springContext.getBean(clazz)); -// via method reference -// loader.setControllerFactory(springContext::getBean); diff --git a/src/main/java/com/mvp/java/controllers/ConsoleTabController.java b/src/main/java/com/mvp/java/controllers/ConsoleTabController.java deleted file mode 100644 index e9f13d2..0000000 --- a/src/main/java/com/mvp/java/controllers/ConsoleTabController.java +++ /dev/null @@ -1,69 +0,0 @@ -package com.mvp.java.controllers; - -import com.mvp.java.services.MissionsService; -import java.io.IOException; -import javafx.collections.FXCollections; -import javafx.collections.ObservableList; -import javafx.fxml.FXML; -import javafx.scene.control.ListView; -import javafx.scene.control.TextArea; -import javafx.scene.input.MouseEvent; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -@Component -public class ConsoleTabController { - private static final Logger LOG = LoggerFactory.getLogger(ConsoleTabController.class); - - @FXML - private TextArea missionOverviewText; - @FXML - private ListView missionsList; - - @Autowired - MissionsService service; - - public void initialize() { - ObservableList missions = FXCollections.observableArrayList("Apollo", "Shuttle", "Skylab", "BoomMission!"); - missionsList.setItems(missions); - } - - @FXML - private void onMouseClicked(MouseEvent event) { - missionOverviewText.clear(); - String selectedItem = missionsList.getSelectionModel().getSelectedItem(); - - if (selectedItem == null) { - String msg = "User clicked on bad area of list"; - LOG.warn(msg, new NullPointerException(msg)); - return; - } - - missionOverviewText.positionCaret(0); - missionOverviewText.appendText(getInfo(selectedItem)); - } - - public String getInfo(String selectedItem) { - String missionInfo = null; - - try { - missionInfo = service.getMissionInfo(selectedItem); - LOG.info("Sucessfully retrieved mission info for " + selectedItem + "\n"); - } catch (Exception exception) { - LOG.error("Could not retrieve mission info!", exception); - } - - return missionInfo; - } - - public TextArea getMissionOverviewText() { - return missionOverviewText; - } - - public ListView getMissionsList() { - return missionsList; - } - -} diff --git a/src/main/java/com/mvp/java/controllers/MongoLoggerController.java b/src/main/java/com/mvp/java/controllers/MongoLoggerController.java deleted file mode 100644 index 7efc0be..0000000 --- a/src/main/java/com/mvp/java/controllers/MongoLoggerController.java +++ /dev/null @@ -1,234 +0,0 @@ -package com.mvp.java.controllers; - -import com.mvp.java.logging.cellfactory.LogCellFactory; -import com.mvp.java.logging.cellfactory.LogExceptionCellFactory; -import com.mvp.java.logging.LogRecord; -import java.time.DateTimeException; -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.LocalTime; -import java.time.format.DateTimeFormatter; -import java.util.Date; -import java.util.List; -import java.util.Objects; -import java.util.Optional; -import javafx.collections.FXCollections; -import javafx.collections.ObservableList; -import javafx.event.ActionEvent; -import javafx.fxml.FXML; -import javafx.scene.control.Button; -import javafx.scene.control.ComboBox; -import javafx.scene.control.DatePicker; -import javafx.scene.control.Label; -import javafx.scene.control.SingleSelectionModel; -import javafx.scene.control.TableColumn; -import javafx.scene.control.TableView; -import javafx.scene.control.TextField; -import javafx.scene.control.cell.PropertyValueFactory; -import javafx.scene.layout.AnchorPane; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.data.mongodb.core.MongoTemplate; -import org.springframework.data.mongodb.core.query.Criteria; -import org.springframework.data.mongodb.core.query.Query; -import org.springframework.stereotype.Controller; - -@Controller -public class MongoLoggerController { - - private final MongoTemplate template; - private final ObservableList tableViewData = FXCollections.observableArrayList(); - - @FXML - private ComboBox loggerLevelComboBox; - @FXML - private TextField logMessageTextField; - @FXML - private TextField loggerNameTextField; - @FXML - private TextField exceptionTextField; - @FXML - private TextField threadTextField; - @FXML - private Button searchButton; - @FXML - private TableView logTableView; - @FXML - private TableColumn timestampCol; - @FXML - private TableColumn messageCol; - @FXML - private TableColumn loggerCol; - @FXML - private TableColumn exceptionCol; - @FXML - private TableColumn threadCol; - @FXML - private Label totalLogCountLabel; - @FXML - private Button clearAllButton; - @FXML - private DatePicker startDatePicker; - @FXML - private DatePicker endDatePicker; - @FXML - private TextField startTime; - @FXML - private AnchorPane queryAnchorPane; - @FXML - private TextField endTime; - - public void initialize() { - logTableView.setItems(tableViewData); - - loggerLevelComboBox.getItems().addAll("ALL", "TRACE", "DEBUG", "INFO", "WARN", "ERROR"); - loggerLevelComboBox.getSelectionModel().select("INFO"); - timestampCol.setCellValueFactory(new PropertyValueFactory<>("timestamp")); - messageCol.setCellValueFactory(new PropertyValueFactory<>("message")); - loggerCol.setCellValueFactory(new PropertyValueFactory<>("logger")); - exceptionCol.setCellValueFactory(new PropertyValueFactory<>("exception")); - threadCol.setCellValueFactory(new PropertyValueFactory<>("thread")); - - messageCol.setCellFactory(new LogCellFactory(100)); - exceptionCol.setCellFactory(new LogExceptionCellFactory()); - - } - - @Autowired - public MongoLoggerController(MongoTemplate mongoTemplate) { - this.template = mongoTemplate; - } - - @FXML - private void searchAction(ActionEvent event) { - logTableView.getItems().clear(); - Query queryWithCriteria = buildQuery(); - findAllWithCriteria(queryWithCriteria); - } - - private Query buildQuery() { - final Query query = new Query(); - - getUserCriteriaFromTextField(logMessageTextField).ifPresent((String messageSearch) -> { - query.addCriteria(Criteria.where("message").regex(messageSearch, "i")); // i= Case-insensitive - }); - getUserCriteriaFromTextField(loggerNameTextField).ifPresent((String loggerSearch) -> { - query.addCriteria(Criteria.where("logger").regex(loggerSearch, "i")); - }); - getUserCriteriaFromTextField(threadTextField).ifPresent((String threadSearch) -> { - query.addCriteria(Criteria.where("thread").regex(threadSearch, "i")); - }); - getUserCriteriaFromTextField(exceptionTextField).ifPresent((String exceptionSearch) -> { - query.addCriteria(Criteria.where("exception").regex(exceptionSearch, "i")); - }); - getLogLevelUserInput().ifPresent((String logLevelSearch) -> { - if (!logLevelSearch.equals("ALL")) { - query.addCriteria(Criteria.where("level").is(logLevelSearch)); - } - }); - - getDateTimeUserCriteria(startDatePicker, startTime).ifPresent((LocalDateTime fromDateTime) -> { - Criteria dateRangeCriteria = Criteria.where("timestamp").gte(fromDateTime); - getDateTimeUserCriteria(endDatePicker, endTime).ifPresent((LocalDateTime toDateTime) -> { - dateRangeCriteria.lt(toDateTime); - }); - query.addCriteria(dateRangeCriteria); - }); - - return query; - } - - private void findAllWithCriteria(final Query queryWithCriteria) { - final List results = template.find(queryWithCriteria, LogRecord.class, "log"); - writeMongoQueryToLabel(results, queryWithCriteria); - - for (LogRecord log : results) { - tableViewData.add(log); - } - } - - private void writeMongoQueryToLabel(final List results, final Query queryWithCriteria) { - final StringBuffer statusLabelText = new StringBuffer(300); - - statusLabelText.append("Record Count: ") - .append(results.size()) - .append(" [ for query string: ") - .append(queryWithCriteria) - .append("]"); - totalLogCountLabel.setText(statusLabelText.toString()); - } - - private Optional getLogLevelUserInput() { - int selectedIndex = loggerLevelComboBox.getSelectionModel().getSelectedIndex(); - SingleSelectionModel selectionModel = loggerLevelComboBox.getSelectionModel(); - - if (selectionModel.getSelectedIndex() < 0) { - return Optional.empty(); - } - - return Optional.of(selectionModel.getSelectedItem()); - } - - private Optional getUserCriteriaFromTextField(final TextField textField) { - String text = textField.getText(); - if (Objects.nonNull(text) && !text.isEmpty()) { - return Optional.of(text); - } - return Optional.empty(); - } - - private Optional getUserCriteriaFromDateField(final DatePicker dateTimeTextField) { - LocalDate date = dateTimeTextField.getValue(); - if (Objects.nonNull(date)) { - return Optional.of(date); - } - return Optional.empty(); - } - - private Optional getUserCriteriaFromTimeField(final TextField timeTextField) { - String time = timeTextField.getText(); - - if (Objects.nonNull(time) && !time.isEmpty()) { - LocalTime localTime = null; - try { - localTime = LocalTime.parse(time, DateTimeFormatter.ISO_LOCAL_TIME); - } catch (DateTimeException ex) { - totalLogCountLabel.setText("Invalid Time format [" + time + "] specified"); - return Optional.empty(); - } - return Optional.of(localTime); - } - return Optional.empty(); - } - - private Optional getDateTimeUserCriteria(DatePicker datePicker, TextField timeTextField) { - Optional dateOptional = getUserCriteriaFromDateField(datePicker); - Optional timeOptional = getUserCriteriaFromTimeField(timeTextField); - LocalDate date; - LocalTime time; - - if (dateOptional.isPresent()) { - date = dateOptional.get(); - if (timeOptional.isPresent()) { - time = timeOptional.get(); - return Optional.of(date.atTime(time)); - } - return Optional.of(date.atTime(LocalTime.MIDNIGHT)); - } - return Optional.empty(); - } - - @FXML - private void clearAllonAction(ActionEvent event) { - this.logMessageTextField.clear(); - this.loggerNameTextField.clear(); - this.exceptionTextField.clear(); - this.exceptionTextField.clear(); - this.threadTextField.clear(); - this.startDatePicker.setValue(null); - this.endDatePicker.setValue(null); - this.startTime.clear(); - this.endTime.clear(); - this.loggerLevelComboBox.getSelectionModel().clearSelection(); - } - -} diff --git a/src/main/java/com/mvp/java/logging/LogRecord.java b/src/main/java/com/mvp/java/logging/LogRecord.java deleted file mode 100644 index b62365c..0000000 --- a/src/main/java/com/mvp/java/logging/LogRecord.java +++ /dev/null @@ -1,92 +0,0 @@ -package com.mvp.java.logging; - -import java.util.Date; -import java.util.List; -import org.springframework.data.annotation.Id; -import org.springframework.data.mongodb.core.mapping.Document; - -/** - * Used in Mapping the Log record from Java Object to Mongo DBObject and back. - */ -@Document -public class LogRecord { - @Id private String mongoId; - private String level; - private String logger; - private String thread; - private String message; - private String exception; - private List stacktrace; - - private Date timestamp; - - public String getMongoId() { - return mongoId; - } - - public void setMongoId(String mongoId) { - this.mongoId = mongoId; - } - - public String getLevel() { - return level; - } - - public void setLevel(String level) { - this.level = level; - } - - public String getLogger() { - return logger; - } - - public void setLogger(String logger) { - this.logger = logger; - } - - public String getThread() { - return thread; - } - - public void setThread(String thread) { - this.thread = thread; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public String getException() { - return exception; - } - - public void setException(String exception) { - this.exception = exception; - } - - public Date getTimestamp() { - return timestamp; - } - - public void setTimestamp(Date timestamp) { - this.timestamp = timestamp; - } - - public List getStacktrace() { - return stacktrace; - } - - public void setStacktrace(List stacktrace) { - this.stacktrace = stacktrace; - } - - @Override - public String toString() { - return "LogRecord{" + "mongoId=" + mongoId + ", level=" + level + ", logger=" + logger + ", thread=" + thread + ", message=" + message + ", exception=" + exception + ", stacktrace=" + stacktrace + ", timestamp=" + timestamp + '}'; - } - -} diff --git a/src/main/java/com/mvp/java/logging/MongoLogAppenderAsync.java b/src/main/java/com/mvp/java/logging/MongoLogAppenderAsync.java deleted file mode 100644 index 5f6968a..0000000 --- a/src/main/java/com/mvp/java/logging/MongoLogAppenderAsync.java +++ /dev/null @@ -1,137 +0,0 @@ -package com.mvp.java.logging; - -import ch.qos.logback.classic.spi.ILoggingEvent; -import ch.qos.logback.classic.spi.IThrowableProxy; -import ch.qos.logback.classic.spi.ThrowableProxyUtil; -import ch.qos.logback.core.CoreConstants; -import ch.qos.logback.core.UnsynchronizedAppenderBase; -import com.mongodb.ConnectionString; -import com.mongodb.async.SingleResultCallback; -import com.mongodb.async.client.MongoClient; -import com.mongodb.async.client.MongoClients; -import com.mongodb.async.client.MongoCollection; -import com.mongodb.async.client.MongoDatabase; -import java.util.Arrays; -import java.util.Date; -import java.util.List; -import java.util.Objects; -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.atomic.AtomicReference; -import org.bson.Document; - -public class MongoLogAppenderAsync extends UnsynchronizedAppenderBase { - - private MongoClient client; - private ConnectionString connectionString; - - @Override - public void start() { - try { - client = MongoClients.create(connectionString); //doesn't actually create any connections yet - waitForInitialConnection(); - super.start(); - } catch (Exception ex) { - addError("The following exception occured when attempting to start Appender", ex); - } - System.out.println("Connection to MongoDB confirmed."); - } - - @Override - public void stop() { - if (client != null) { - client.close(); - } - super.stop(); - } - - public void setConnectionString(String uri) { - if (uri == null) { - addError("MongoDB URI cannot be null. Specify one in the logback config file."); - return; - } - this.connectionString = new ConnectionString(uri); - } - - @Override - protected void append(ILoggingEvent evt) { - if (Objects.isNull(evt)) { - return; - } - Document log = convertEventIntoDocumentForLogging(evt); - MongoDatabase database = client.getDatabase(connectionString.getDatabase()); - MongoCollection logCollection = database.getCollection(connectionString.getCollection()); - logCollection.insertOne(log, callbackWhenFinishedInsert()); - } - - /* - * ************************************************************************* - ******************************* PRIVATE *********************************** - * ************************************************************************* - */ - private Document convertEventIntoDocumentForLogging(ILoggingEvent evt) { - Document log = new Document(); - log.put("logger", evt.getLoggerName()); - log.put("timestamp", new Date(evt.getTimeStamp())); - log.put("level", String.valueOf(evt.getLevel())); - log.put("thread", evt.getThreadName()); - log.put("message", evt.getFormattedMessage()); - - IThrowableProxy throwableProxy = evt.getThrowableProxy(); - if (Objects.nonNull(throwableProxy)) { - addThrowabletoLog(throwableProxy, log); - } - return log; - } - - private void addThrowabletoLog(final IThrowableProxy throwableProxy, final Document log) { - String proxyAsString = ThrowableProxyUtil.asString(throwableProxy); - List stackTrace = Arrays.asList(proxyAsString.replace("\t", ""). - split(CoreConstants.LINE_SEPARATOR)); - final int stackTraceSize = stackTrace.size(); - if (stackTraceSize > 0) { - log.put("exception", stackTrace.get(0)); - } - if (stackTraceSize > 1) { - log.put("stacktrace", stackTrace.subList(1, stackTraceSize)); - } - } - - private void waitForInitialConnection() throws InterruptedException { - final CountDownLatch latch = new CountDownLatch(1); - final AtomicReference callbackThrowable = new AtomicReference<>(); - - System.out.println("++++++++++++++++ MONGO +++++++++++++++++++++++"); - System.out.format("Connecting to Mongo with connection string [%s]\n", connectionString.getConnectionString()); - - client.listDatabaseNames().forEach((dbName) -> { - }, callbackWhenFinishedListingDbNames(latch, callbackThrowable)); - latch.await(); - - if (Objects.nonNull(callbackThrowable.get())) { - System.out.format("Unable to connect to MongoDB. \nError [%s]\n", callbackThrowable.get()); - System.exit(1); - } - } - - /* - * ************************************************************************* - ***************************** CALL BACKS ********************************** - * ************************************************************************* - */ - private SingleResultCallback callbackWhenFinishedInsert() { - return (final Void result, final Throwable thowable) -> { - if (Objects.nonNull(thowable)) { - addWarn("Unable to log message", thowable); - } - }; - } - - private SingleResultCallback callbackWhenFinishedListingDbNames(CountDownLatch latch, AtomicReference callbackThrowable) { - return (final Void result, final Throwable throwable) -> { - if (Objects.nonNull(throwable)) { - callbackThrowable.set(throwable); - } - latch.countDown(); - }; - } -} diff --git a/src/main/java/com/mvp/java/logging/cellfactory/LogCellFactory.java b/src/main/java/com/mvp/java/logging/cellfactory/LogCellFactory.java deleted file mode 100644 index b76f0a7..0000000 --- a/src/main/java/com/mvp/java/logging/cellfactory/LogCellFactory.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.mvp.java.logging.cellfactory; - -import com.mvp.java.logging.LogRecord; -import java.util.Objects; -import javafx.scene.control.Button; -import javafx.scene.control.TableCell; -import javafx.scene.control.TableColumn; -import javafx.util.Callback; - -/** - * Custom CEll Factory to display logging info. with a cell. determine if the - * message is longer than allowed and if so, break it up into in the table - * (without scrolling horizontally) - */ -public class LogCellFactory implements Callback, TableCell> { - final int MAX_CHARS_PER_LINE ; - - public LogCellFactory(int MAX_CHARS_PER_LINE) { - this.MAX_CHARS_PER_LINE = MAX_CHARS_PER_LINE; - } - - @Override - public TableCell call(TableColumn param) { - return new TableCell() { - - @Override - protected void updateItem(String message, boolean isCellEmpty) { - super.updateItem(message, isCellEmpty); - if (Objects.isNull(message) || isCellEmpty) { - setText(""); - return; - } - setText(formatString(message)); - } - }; - } - - private String formatString(String textToFormat) { - StringBuilder text = new StringBuilder(textToFormat); - int positionOfInsert = 0; - for (int currentLineNum = 1; ((text.length() - positionOfInsert) > MAX_CHARS_PER_LINE); currentLineNum++) { - positionOfInsert = MAX_CHARS_PER_LINE * currentLineNum; - text.insert(positionOfInsert, '\n'); - } - return text.toString(); - - } - -} diff --git a/src/main/java/com/mvp/java/logging/cellfactory/LogExceptionCellFactory.java b/src/main/java/com/mvp/java/logging/cellfactory/LogExceptionCellFactory.java deleted file mode 100644 index 0cc9200..0000000 --- a/src/main/java/com/mvp/java/logging/cellfactory/LogExceptionCellFactory.java +++ /dev/null @@ -1,95 +0,0 @@ -package com.mvp.java.logging.cellfactory; - -import com.mvp.java.logging.LogRecord; -import java.util.Objects; -import javafx.event.ActionEvent; -import javafx.event.EventHandler; -import javafx.scene.control.Alert; -import javafx.scene.control.Alert.AlertType; -import javafx.scene.control.Button; -import javafx.scene.control.Label; -import javafx.scene.control.TableCell; -import javafx.scene.control.TableColumn; -import javafx.scene.control.TextArea; -import javafx.scene.layout.GridPane; -import javafx.scene.layout.Priority; -import javafx.util.Callback; - -/** - * Custom CEll Factory to display logging exception info within a cell. - */ -public class LogExceptionCellFactory implements Callback, TableCell> { - - @Override - public TableCell call(TableColumn tableColumn) { - final TableCell cell = new TableCell() { - - @Override - protected void updateItem(String exception, boolean isCellEmpty) { - super.updateItem(exception, isCellEmpty); - - if (Objects.isNull(exception) || isCellEmpty) { - setGraphic(null); - setText(""); - return; - } - LogRecord logRecordItem = (LogRecord) getTableRow().getItem(); - Button exceptionButton = new Button("View"); - exceptionButton.setOnAction(new ButtonHandler(exception, logRecordItem)); - setGraphic(exceptionButton); - setText(""); - } - }; - - return cell; - - } - - private class ButtonHandler implements EventHandler { - - final private String exception; - final private LogRecord selectedItem; - - ButtonHandler(String exception, LogRecord selectedItem) { - this.exception = exception; - this.selectedItem = selectedItem; - } - - @Override - public void handle(ActionEvent event) { - - if (Objects.isNull(selectedItem)) { - return; - } - Alert alert = new Alert(AlertType.INFORMATION); - alert.setTitle("Exception Info"); - alert.setHeaderText(exception); - String stacktrace = String.join("\n", selectedItem.getStacktrace()); - - TextArea stacktraceTextArea = createTextArea(stacktrace); - GridPane expandableStackTrace = createExpandableContent(stacktraceTextArea, alert); - alert.getDialogPane().setExpandableContent(expandableStackTrace); - - alert.showAndWait(); - } - - private GridPane createExpandableContent(TextArea stacktraceTextArea, Alert alert) { - GridPane expandableStackTrace = new GridPane(); - expandableStackTrace.setMaxWidth(Double.MAX_VALUE); - expandableStackTrace.add(new Label("Stacktrace ..."), 0, 0); - expandableStackTrace.add(stacktraceTextArea, 0, 1); - return expandableStackTrace; - } - - private TextArea createTextArea(String stacktrace) { - TextArea stacktraceTextArea = new TextArea(stacktrace); - stacktraceTextArea.setEditable(false); - stacktraceTextArea.setWrapText(true); - stacktraceTextArea.setMaxWidth(Double.MAX_VALUE); - stacktraceTextArea.setMaxHeight(Double.MAX_VALUE); - GridPane.setVgrow(stacktraceTextArea, Priority.ALWAYS); - GridPane.setHgrow(stacktraceTextArea, Priority.ALWAYS); - return stacktraceTextArea; - } - } -} diff --git a/src/main/java/com/mvp/java/services/MissionsService.java b/src/main/java/com/mvp/java/services/MissionsService.java deleted file mode 100644 index c5ccf69..0000000 --- a/src/main/java/com/mvp/java/services/MissionsService.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.mvp.java.services; - -import java.io.BufferedReader; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.stereotype.Service; - -@Service -public class MissionsService { - - @Value(("${specs.dir}")) - private String specsPath; - - public String getMissionInfo(String missionName) throws IOException { - final StringBuilder fileContents = new StringBuilder(2000); - InputStream is = null; - try { - is = this.getClass().getResourceAsStream(specsPath + missionName); - } catch (Exception e) { - throw new FileNotFoundException("unknown mission specified"); - } - - try (BufferedReader br = new BufferedReader(new InputStreamReader(is))) { - String line; - while ((line = br.readLine()) != null) { - fileContents.append(line).append("\n"); - } - } - return fileContents.toString(); - } -} diff --git a/src/main/java/com/mvp/java/spring/config/AppJavaConfig.java b/src/main/java/com/mvp/java/spring/config/AppJavaConfig.java deleted file mode 100644 index b4bcd74..0000000 --- a/src/main/java/com/mvp/java/spring/config/AppJavaConfig.java +++ /dev/null @@ -1,23 +0,0 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -package com.mvp.java.spring.config; - -import java.io.PrintWriter; -import java.io.StringWriter; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Scope; - -@Configuration -public class AppJavaConfig { - - @Bean(name = "stringPrintWriter") @Scope("prototype") - public PrintWriter printWriter(){ - // useful when dumping stack trace to file - return new PrintWriter(new StringWriter()); - } - -} diff --git a/src/main/java/com/mvp/java/spring/config/MongoConfig.java b/src/main/java/com/mvp/java/spring/config/MongoConfig.java deleted file mode 100644 index b3038e1..0000000 --- a/src/main/java/com/mvp/java/spring/config/MongoConfig.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.mvp.java.spring.config; - -import com.mongodb.MongoClient; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.data.mongodb.MongoDbFactory; -import org.springframework.data.mongodb.core.MongoTemplate; -import org.springframework.data.mongodb.core.SimpleMongoDbFactory; - -@Configuration -public class MongoConfig { - - @Bean - public MongoDbFactory mongoDbFactory() throws Exception { - MongoClient mongoClient = new MongoClient("localhost", 27017); - return new SimpleMongoDbFactory(mongoClient, "test"); - } - - @Bean - public MongoTemplate mongoTemplate() throws Exception { - MongoTemplate mongoTemplate = new MongoTemplate(mongoDbFactory()); - return mongoTemplate; - - } -} diff --git a/src/main/java/outline b/src/main/java/outline deleted file mode 100644 index 5ce3f49..0000000 --- a/src/main/java/outline +++ /dev/null @@ -1,5 +0,0 @@ -Advanced Java Logging with Spring Data and MongoDB -=================================================== -- Problem with File Logging -- Why MongoDB? -- Why Spring Data? \ No newline at end of file diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index c917f22..e68c402 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1 +1,3 @@ -specs.dir=/specs/ \ No newline at end of file +spring.jackson.serialization.WRITE_DATES_AS_TIMESTAMPS = false +server.port = 5600 +rest.date.template = yyyy-MM-dd diff --git a/src/main/resources/favicon/Icon.png b/src/main/resources/favicon/Icon.png new file mode 100644 index 0000000..1b99679 Binary files /dev/null and b/src/main/resources/favicon/Icon.png differ diff --git a/src/main/resources/fxml/Main.fxml b/src/main/resources/fxml/Main.fxml deleted file mode 100644 index f646b6a..0000000 --- a/src/main/resources/fxml/Main.fxml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/src/main/resources/fxml/MainContainer.fxml b/src/main/resources/fxml/MainContainer.fxml new file mode 100644 index 0000000..3fd3236 --- /dev/null +++ b/src/main/resources/fxml/MainContainer.fxml @@ -0,0 +1,95 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/fxml/outline b/src/main/resources/fxml/outline deleted file mode 100644 index e5d649a..0000000 --- a/src/main/resources/fxml/outline +++ /dev/null @@ -1,18 +0,0 @@ -TestFX 3 ( extends GuiTest , @Override getRootNode()) -What is TestFX 4? - - more in line with JavaFX bootstrapping (extends ApplicationTest) - - ApplicationTest extends FxRobot (clickon, write , drag etc ..sim user actions ) - implements ApplicationFixture (init, start, stop) - - launch(Class ..) - - can use othertesting frameworks, not just Junit - - new node query API. - - Java 8 lambdas - - headless testing using Monocle (thus can use on CI server configurations ) - -POM - alpha 4.0.4 March 2016 (> 1 year) -- SpringApplicationBuilder.headless(false) - - public static void verifyThat(NodeQuery nodeQuery, - Predicate nodePredicate) { - verifyThatImpl(emptyReason(), toNode(nodeQuery), toNodeMatcher(nodePredicate)); - } diff --git a/src/main/resources/fxml/tabs/ConsoleTab.fxml b/src/main/resources/fxml/tabs/ConsoleTab.fxml deleted file mode 100644 index f36ff91..0000000 --- a/src/main/resources/fxml/tabs/ConsoleTab.fxml +++ /dev/null @@ -1,63 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/main/resources/fxml/tabs/DrawingsInfoTab.fxml b/src/main/resources/fxml/tabs/DrawingsInfoTab.fxml new file mode 100644 index 0000000..84e4593 --- /dev/null +++ b/src/main/resources/fxml/tabs/DrawingsInfoTab.fxml @@ -0,0 +1,181 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/fxml/tabs/MongoLoggerTab.fxml b/src/main/resources/fxml/tabs/MongoLoggerTab.fxml deleted file mode 100644 index a412e83..0000000 --- a/src/main/resources/fxml/tabs/MongoLoggerTab.fxml +++ /dev/null @@ -1,56 +0,0 @@ - - - - - - - - - - - - - - - - -