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