diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 0000000..2ccc4ff
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,1154 @@
+[*]
+charset = utf-8
+end_of_line = lf
+indent_size = 2
+indent_style = space
+insert_final_newline = true
+max_line_length = 160
+tab_width = 2
+ij_continuation_indent_size = 4
+ij_formatter_off_tag = @formatter:off
+ij_formatter_on_tag = @formatter:on
+ij_formatter_tags_enabled = true
+ij_smart_tabs = false
+ij_visual_guides = none
+ij_wrap_on_typing = false
+
+[*.bib]
+indent_size = 4
+tab_width = 4
+ij_continuation_indent_size = 8
+ij_bibtex_keep_first_column_comment = true
+ij_bibtex_keep_indents_on_empty_lines = false
+ij_bibtex_wrap_long_lines = false
+
+[*.css]
+indent_size = 4
+tab_width = 4
+ij_continuation_indent_size = 8
+ij_css_align_closing_brace_with_properties = false
+ij_css_blank_lines_around_nested_selector = 1
+ij_css_blank_lines_between_blocks = 1
+ij_css_brace_placement = end_of_line
+ij_css_enforce_quotes_on_format = false
+ij_css_hex_color_long_format = false
+ij_css_hex_color_lower_case = false
+ij_css_hex_color_short_format = false
+ij_css_hex_color_upper_case = false
+ij_css_keep_blank_lines_in_code = 2
+ij_css_keep_indents_on_empty_lines = false
+ij_css_keep_single_line_blocks = false
+ij_css_properties_order = font,font-family,font-size,font-weight,font-style,font-variant,font-size-adjust,font-stretch,line-height,position,z-index,top,right,bottom,left,display,visibility,float,clear,overflow,overflow-x,overflow-y,clip,zoom,align-content,align-items,align-self,flex,flex-flow,flex-basis,flex-direction,flex-grow,flex-shrink,flex-wrap,justify-content,order,box-sizing,width,min-width,max-width,height,min-height,max-height,margin,margin-top,margin-right,margin-bottom,margin-left,padding,padding-top,padding-right,padding-bottom,padding-left,table-layout,empty-cells,caption-side,border-spacing,border-collapse,list-style,list-style-position,list-style-type,list-style-image,content,quotes,counter-reset,counter-increment,resize,cursor,user-select,nav-index,nav-up,nav-right,nav-down,nav-left,transition,transition-delay,transition-timing-function,transition-duration,transition-property,transform,transform-origin,animation,animation-name,animation-duration,animation-play-state,animation-timing-function,animation-delay,animation-iteration-count,animation-direction,text-align,text-align-last,vertical-align,white-space,text-decoration,text-emphasis,text-emphasis-color,text-emphasis-style,text-emphasis-position,text-indent,text-justify,letter-spacing,word-spacing,text-outline,text-transform,text-wrap,text-overflow,text-overflow-ellipsis,text-overflow-mode,word-wrap,word-break,tab-size,hyphens,pointer-events,opacity,color,border,border-width,border-style,border-color,border-top,border-top-width,border-top-style,border-top-color,border-right,border-right-width,border-right-style,border-right-color,border-bottom,border-bottom-width,border-bottom-style,border-bottom-color,border-left,border-left-width,border-left-style,border-left-color,border-radius,border-top-left-radius,border-top-right-radius,border-bottom-right-radius,border-bottom-left-radius,border-image,border-image-source,border-image-slice,border-image-width,border-image-outset,border-image-repeat,outline,outline-width,outline-style,outline-color,outline-offset,background,background-color,background-image,background-repeat,background-attachment,background-position,background-position-x,background-position-y,background-clip,background-origin,background-size,box-decoration-break,box-shadow,text-shadow
+ij_css_space_after_colon = true
+ij_css_space_before_opening_brace = true
+ij_css_use_double_quotes = true
+ij_css_value_alignment = do_not_align
+
+[*.feature]
+tab_width = 4
+ij_continuation_indent_size = 8
+ij_gherkin_keep_indents_on_empty_lines = false
+
+[*.gsp]
+indent_size = 4
+tab_width = 4
+ij_continuation_indent_size = 8
+ij_gsp_keep_indents_on_empty_lines = false
+
+[*.haml]
+tab_width = 4
+ij_continuation_indent_size = 8
+ij_haml_keep_indents_on_empty_lines = false
+
+[*.java]
+ij_java_align_consecutive_assignments = false
+ij_java_align_consecutive_variable_declarations = false
+ij_java_align_group_field_declarations = false
+ij_java_align_multiline_annotation_parameters = false
+ij_java_align_multiline_array_initializer_expression = false
+ij_java_align_multiline_assignment = false
+ij_java_align_multiline_binary_operation = false
+ij_java_align_multiline_chained_methods = true
+ij_java_align_multiline_extends_list = false
+ij_java_align_multiline_for = true
+ij_java_align_multiline_method_parentheses = false
+ij_java_align_multiline_parameters = false
+ij_java_align_multiline_parameters_in_calls = false
+ij_java_align_multiline_parenthesized_expression = false
+ij_java_align_multiline_records = true
+ij_java_align_multiline_resources = false
+ij_java_align_multiline_ternary_operation = false
+ij_java_align_multiline_text_blocks = false
+ij_java_align_multiline_throws_list = false
+ij_java_align_subsequent_simple_methods = false
+ij_java_align_throws_keyword = false
+ij_java_annotation_parameter_wrap = on_every_item
+ij_java_array_initializer_new_line_after_left_brace = false
+ij_java_array_initializer_right_brace_on_new_line = false
+ij_java_array_initializer_wrap = normal
+ij_java_assert_statement_colon_on_next_line = false
+ij_java_assert_statement_wrap = off
+ij_java_assignment_wrap = off
+ij_java_binary_operation_sign_on_next_line = true
+ij_java_binary_operation_wrap = normal
+ij_java_blank_lines_after_anonymous_class_header = 0
+ij_java_blank_lines_after_class_header = 1
+ij_java_blank_lines_after_imports = 1
+ij_java_blank_lines_after_package = 1
+ij_java_blank_lines_around_class = 1
+ij_java_blank_lines_around_field = 0
+ij_java_blank_lines_around_field_in_interface = 0
+ij_java_blank_lines_around_initializer = 1
+ij_java_blank_lines_around_method = 1
+ij_java_blank_lines_around_method_in_interface = 1
+ij_java_blank_lines_before_class_end = 0
+ij_java_blank_lines_before_imports = 1
+ij_java_blank_lines_before_method_body = 0
+ij_java_blank_lines_before_package = 0
+ij_java_block_brace_style = end_of_line
+ij_java_block_comment_at_first_column = true
+ij_java_builder_methods = none
+ij_java_call_parameters_new_line_after_left_paren = false
+ij_java_call_parameters_right_paren_on_new_line = false
+ij_java_call_parameters_wrap = normal
+ij_java_case_statement_on_separate_line = true
+ij_java_catch_on_new_line = false
+ij_java_class_annotation_wrap = split_into_lines
+ij_java_class_brace_style = end_of_line
+ij_java_class_count_to_use_import_on_demand = 999
+ij_java_class_names_in_javadoc = 1
+ij_java_do_not_indent_top_level_class_members = false
+ij_java_do_not_wrap_after_single_annotation = false
+ij_java_do_while_brace_force = always
+ij_java_doc_add_blank_line_after_description = true
+ij_java_doc_add_blank_line_after_param_comments = true
+ij_java_doc_add_blank_line_after_return = true
+ij_java_doc_add_p_tag_on_empty_lines = true
+ij_java_doc_align_exception_comments = true
+ij_java_doc_align_param_comments = true
+ij_java_doc_do_not_wrap_if_one_line = true
+ij_java_doc_enable_formatting = true
+ij_java_doc_enable_leading_asterisks = true
+ij_java_doc_indent_on_continuation = false
+ij_java_doc_keep_empty_lines = true
+ij_java_doc_keep_empty_parameter_tag = true
+ij_java_doc_keep_empty_return_tag = true
+ij_java_doc_keep_empty_throws_tag = true
+ij_java_doc_keep_invalid_tags = true
+ij_java_doc_param_description_on_new_line = false
+ij_java_doc_preserve_line_breaks = false
+ij_java_doc_use_throws_not_exception_tag = true
+ij_java_else_on_new_line = false
+ij_java_entity_dd_suffix = EJB
+ij_java_entity_eb_suffix = Bean
+ij_java_entity_hi_suffix = Home
+ij_java_entity_lhi_prefix = Local
+ij_java_entity_lhi_suffix = Home
+ij_java_entity_li_prefix = Local
+ij_java_entity_pk_class = java.lang.String
+ij_java_entity_vo_suffix = VO
+ij_java_enum_constants_wrap = off
+ij_java_extends_keyword_wrap = off
+ij_java_extends_list_wrap = normal
+ij_java_field_annotation_wrap = split_into_lines
+ij_java_finally_on_new_line = false
+ij_java_for_brace_force = always
+ij_java_for_statement_new_line_after_left_paren = false
+ij_java_for_statement_right_paren_on_new_line = false
+ij_java_for_statement_wrap = normal
+ij_java_generate_final_locals = false
+ij_java_generate_final_parameters = false
+ij_java_if_brace_force = always
+ij_java_imports_layout = $*,|,*
+ij_java_indent_case_from_switch = true
+ij_java_insert_inner_class_imports = true
+ij_java_insert_override_annotation = true
+ij_java_keep_blank_lines_before_right_brace = 2
+ij_java_keep_blank_lines_between_package_declaration_and_header = 2
+ij_java_keep_blank_lines_in_code = 1
+ij_java_keep_blank_lines_in_declarations = 2
+ij_java_keep_builder_methods_indents = false
+ij_java_keep_control_statement_in_one_line = false
+ij_java_keep_first_column_comment = true
+ij_java_keep_indents_on_empty_lines = false
+ij_java_keep_line_breaks = true
+ij_java_keep_multiple_expressions_in_one_line = false
+ij_java_keep_simple_blocks_in_one_line = false
+ij_java_keep_simple_classes_in_one_line = false
+ij_java_keep_simple_lambdas_in_one_line = false
+ij_java_keep_simple_methods_in_one_line = false
+ij_java_label_indent_absolute = false
+ij_java_label_indent_size = 0
+ij_java_lambda_brace_style = end_of_line
+ij_java_layout_static_imports_separately = true
+ij_java_line_comment_add_space = false
+ij_java_line_comment_at_first_column = true
+ij_java_message_dd_suffix = EJB
+ij_java_message_eb_suffix = Bean
+ij_java_method_annotation_wrap = split_into_lines
+ij_java_method_brace_style = end_of_line
+ij_java_method_call_chain_wrap = normal
+ij_java_method_parameters_new_line_after_left_paren = false
+ij_java_method_parameters_right_paren_on_new_line = false
+ij_java_method_parameters_wrap = normal
+ij_java_modifier_list_wrap = false
+ij_java_names_count_to_use_import_on_demand = 999
+ij_java_new_line_after_lparen_in_record_header = false
+ij_java_parameter_annotation_wrap = off
+ij_java_parentheses_expression_new_line_after_left_paren = false
+ij_java_parentheses_expression_right_paren_on_new_line = false
+ij_java_place_assignment_sign_on_next_line = false
+ij_java_prefer_longer_names = true
+ij_java_prefer_parameters_wrap = false
+ij_java_record_components_wrap = normal
+ij_java_repeat_synchronized = true
+ij_java_replace_instanceof_and_cast = false
+ij_java_replace_null_check = true
+ij_java_replace_sum_lambda_with_method_ref = true
+ij_java_resource_list_new_line_after_left_paren = false
+ij_java_resource_list_right_paren_on_new_line = false
+ij_java_resource_list_wrap = off
+ij_java_rparen_on_new_line_in_record_header = false
+ij_java_session_dd_suffix = EJB
+ij_java_session_eb_suffix = Bean
+ij_java_session_hi_suffix = Home
+ij_java_session_lhi_prefix = Local
+ij_java_session_lhi_suffix = Home
+ij_java_session_li_prefix = Local
+ij_java_session_si_suffix = Service
+ij_java_space_after_closing_angle_bracket_in_type_argument = false
+ij_java_space_after_colon = true
+ij_java_space_after_comma = true
+ij_java_space_after_comma_in_type_arguments = true
+ij_java_space_after_for_semicolon = true
+ij_java_space_after_quest = true
+ij_java_space_after_type_cast = true
+ij_java_space_before_annotation_array_initializer_left_brace = false
+ij_java_space_before_annotation_parameter_list = false
+ij_java_space_before_array_initializer_left_brace = true
+ij_java_space_before_catch_keyword = true
+ij_java_space_before_catch_left_brace = true
+ij_java_space_before_catch_parentheses = true
+ij_java_space_before_class_left_brace = true
+ij_java_space_before_colon = true
+ij_java_space_before_colon_in_foreach = true
+ij_java_space_before_comma = false
+ij_java_space_before_do_left_brace = true
+ij_java_space_before_else_keyword = true
+ij_java_space_before_else_left_brace = true
+ij_java_space_before_finally_keyword = true
+ij_java_space_before_finally_left_brace = true
+ij_java_space_before_for_left_brace = true
+ij_java_space_before_for_parentheses = true
+ij_java_space_before_for_semicolon = false
+ij_java_space_before_if_left_brace = true
+ij_java_space_before_if_parentheses = true
+ij_java_space_before_method_call_parentheses = false
+ij_java_space_before_method_left_brace = true
+ij_java_space_before_method_parentheses = false
+ij_java_space_before_opening_angle_bracket_in_type_parameter = false
+ij_java_space_before_quest = true
+ij_java_space_before_switch_left_brace = true
+ij_java_space_before_switch_parentheses = true
+ij_java_space_before_synchronized_left_brace = true
+ij_java_space_before_synchronized_parentheses = true
+ij_java_space_before_try_left_brace = true
+ij_java_space_before_try_parentheses = true
+ij_java_space_before_type_parameter_list = false
+ij_java_space_before_while_keyword = true
+ij_java_space_before_while_left_brace = true
+ij_java_space_before_while_parentheses = true
+ij_java_space_inside_one_line_enum_braces = false
+ij_java_space_within_empty_array_initializer_braces = false
+ij_java_space_within_empty_method_call_parentheses = false
+ij_java_space_within_empty_method_parentheses = false
+ij_java_spaces_around_additive_operators = true
+ij_java_spaces_around_assignment_operators = true
+ij_java_spaces_around_bitwise_operators = true
+ij_java_spaces_around_equality_operators = true
+ij_java_spaces_around_lambda_arrow = true
+ij_java_spaces_around_logical_operators = true
+ij_java_spaces_around_method_ref_dbl_colon = false
+ij_java_spaces_around_multiplicative_operators = true
+ij_java_spaces_around_relational_operators = true
+ij_java_spaces_around_shift_operators = true
+ij_java_spaces_around_type_bounds_in_type_parameters = true
+ij_java_spaces_around_unary_operator = false
+ij_java_spaces_within_angle_brackets = false
+ij_java_spaces_within_annotation_parentheses = false
+ij_java_spaces_within_array_initializer_braces = true
+ij_java_spaces_within_braces = false
+ij_java_spaces_within_brackets = false
+ij_java_spaces_within_cast_parentheses = false
+ij_java_spaces_within_catch_parentheses = false
+ij_java_spaces_within_for_parentheses = false
+ij_java_spaces_within_if_parentheses = false
+ij_java_spaces_within_method_call_parentheses = false
+ij_java_spaces_within_method_parentheses = false
+ij_java_spaces_within_parentheses = false
+ij_java_spaces_within_record_header = false
+ij_java_spaces_within_switch_parentheses = false
+ij_java_spaces_within_synchronized_parentheses = false
+ij_java_spaces_within_try_parentheses = false
+ij_java_spaces_within_while_parentheses = false
+ij_java_special_else_if_treatment = true
+ij_java_subclass_name_suffix = Impl
+ij_java_ternary_operation_signs_on_next_line = true
+ij_java_ternary_operation_wrap = normal
+ij_java_test_name_suffix = Test
+ij_java_throws_keyword_wrap = normal
+ij_java_throws_list_wrap = normal
+ij_java_use_external_annotations = false
+ij_java_use_fq_class_names = false
+ij_java_use_relative_indents = false
+ij_java_use_single_class_imports = true
+ij_java_variable_annotation_wrap = split_into_lines
+ij_java_visibility = public
+ij_java_while_brace_force = always
+ij_java_while_on_new_line = false
+ij_java_wrap_comments = true
+ij_java_wrap_first_method_in_call_chain = false
+ij_java_wrap_long_lines = false
+
+[*.less]
+tab_width = 4
+ij_continuation_indent_size = 8
+ij_less_align_closing_brace_with_properties = false
+ij_less_blank_lines_around_nested_selector = 1
+ij_less_blank_lines_between_blocks = 1
+ij_less_brace_placement = 0
+ij_less_enforce_quotes_on_format = false
+ij_less_hex_color_long_format = false
+ij_less_hex_color_lower_case = false
+ij_less_hex_color_short_format = false
+ij_less_hex_color_upper_case = false
+ij_less_keep_blank_lines_in_code = 2
+ij_less_keep_indents_on_empty_lines = false
+ij_less_keep_single_line_blocks = false
+ij_less_properties_order = font,font-family,font-size,font-weight,font-style,font-variant,font-size-adjust,font-stretch,line-height,position,z-index,top,right,bottom,left,display,visibility,float,clear,overflow,overflow-x,overflow-y,clip,zoom,align-content,align-items,align-self,flex,flex-flow,flex-basis,flex-direction,flex-grow,flex-shrink,flex-wrap,justify-content,order,box-sizing,width,min-width,max-width,height,min-height,max-height,margin,margin-top,margin-right,margin-bottom,margin-left,padding,padding-top,padding-right,padding-bottom,padding-left,table-layout,empty-cells,caption-side,border-spacing,border-collapse,list-style,list-style-position,list-style-type,list-style-image,content,quotes,counter-reset,counter-increment,resize,cursor,user-select,nav-index,nav-up,nav-right,nav-down,nav-left,transition,transition-delay,transition-timing-function,transition-duration,transition-property,transform,transform-origin,animation,animation-name,animation-duration,animation-play-state,animation-timing-function,animation-delay,animation-iteration-count,animation-direction,text-align,text-align-last,vertical-align,white-space,text-decoration,text-emphasis,text-emphasis-color,text-emphasis-style,text-emphasis-position,text-indent,text-justify,letter-spacing,word-spacing,text-outline,text-transform,text-wrap,text-overflow,text-overflow-ellipsis,text-overflow-mode,word-wrap,word-break,tab-size,hyphens,pointer-events,opacity,color,border,border-width,border-style,border-color,border-top,border-top-width,border-top-style,border-top-color,border-right,border-right-width,border-right-style,border-right-color,border-bottom,border-bottom-width,border-bottom-style,border-bottom-color,border-left,border-left-width,border-left-style,border-left-color,border-radius,border-top-left-radius,border-top-right-radius,border-bottom-right-radius,border-bottom-left-radius,border-image,border-image-source,border-image-slice,border-image-width,border-image-outset,border-image-repeat,outline,outline-width,outline-style,outline-color,outline-offset,background,background-color,background-image,background-repeat,background-attachment,background-position,background-position-x,background-position-y,background-clip,background-origin,background-size,box-decoration-break,box-shadow,text-shadow
+ij_less_space_after_colon = true
+ij_less_space_before_opening_brace = true
+ij_less_use_double_quotes = true
+ij_less_value_alignment = 0
+
+[*.proto]
+ij_continuation_indent_size = 2
+ij_protobuf_keep_blank_lines_in_code = 2
+ij_protobuf_keep_indents_on_empty_lines = false
+ij_protobuf_keep_line_breaks = true
+ij_protobuf_space_after_comma = true
+ij_protobuf_space_before_comma = false
+ij_protobuf_spaces_around_assignment_operators = true
+ij_protobuf_spaces_within_braces = false
+ij_protobuf_spaces_within_brackets = false
+
+[*.sass]
+ij_sass_align_closing_brace_with_properties = false
+ij_sass_blank_lines_around_nested_selector = 1
+ij_sass_blank_lines_between_blocks = 1
+ij_sass_brace_placement = 0
+ij_sass_enforce_quotes_on_format = false
+ij_sass_hex_color_long_format = false
+ij_sass_hex_color_lower_case = false
+ij_sass_hex_color_short_format = false
+ij_sass_hex_color_upper_case = false
+ij_sass_keep_blank_lines_in_code = 2
+ij_sass_keep_indents_on_empty_lines = false
+ij_sass_keep_single_line_blocks = false
+ij_sass_properties_order = font,font-family,font-size,font-weight,font-style,font-variant,font-size-adjust,font-stretch,line-height,position,z-index,top,right,bottom,left,display,visibility,float,clear,overflow,overflow-x,overflow-y,clip,zoom,align-content,align-items,align-self,flex,flex-flow,flex-basis,flex-direction,flex-grow,flex-shrink,flex-wrap,justify-content,order,box-sizing,width,min-width,max-width,height,min-height,max-height,margin,margin-top,margin-right,margin-bottom,margin-left,padding,padding-top,padding-right,padding-bottom,padding-left,table-layout,empty-cells,caption-side,border-spacing,border-collapse,list-style,list-style-position,list-style-type,list-style-image,content,quotes,counter-reset,counter-increment,resize,cursor,user-select,nav-index,nav-up,nav-right,nav-down,nav-left,transition,transition-delay,transition-timing-function,transition-duration,transition-property,transform,transform-origin,animation,animation-name,animation-duration,animation-play-state,animation-timing-function,animation-delay,animation-iteration-count,animation-direction,text-align,text-align-last,vertical-align,white-space,text-decoration,text-emphasis,text-emphasis-color,text-emphasis-style,text-emphasis-position,text-indent,text-justify,letter-spacing,word-spacing,text-outline,text-transform,text-wrap,text-overflow,text-overflow-ellipsis,text-overflow-mode,word-wrap,word-break,tab-size,hyphens,pointer-events,opacity,color,border,border-width,border-style,border-color,border-top,border-top-width,border-top-style,border-top-color,border-right,border-right-width,border-right-style,border-right-color,border-bottom,border-bottom-width,border-bottom-style,border-bottom-color,border-left,border-left-width,border-left-style,border-left-color,border-radius,border-top-left-radius,border-top-right-radius,border-bottom-right-radius,border-bottom-left-radius,border-image,border-image-source,border-image-slice,border-image-width,border-image-outset,border-image-repeat,outline,outline-width,outline-style,outline-color,outline-offset,background,background-color,background-image,background-repeat,background-attachment,background-position,background-position-x,background-position-y,background-clip,background-origin,background-size,box-decoration-break,box-shadow,text-shadow
+ij_sass_space_after_colon = true
+ij_sass_space_before_opening_brace = true
+ij_sass_use_double_quotes = true
+ij_sass_value_alignment = 0
+
+[*.scss]
+ij_scss_align_closing_brace_with_properties = false
+ij_scss_blank_lines_around_nested_selector = 1
+ij_scss_blank_lines_between_blocks = 1
+ij_scss_brace_placement = 0
+ij_scss_enforce_quotes_on_format = false
+ij_scss_hex_color_long_format = false
+ij_scss_hex_color_lower_case = false
+ij_scss_hex_color_short_format = false
+ij_scss_hex_color_upper_case = false
+ij_scss_keep_blank_lines_in_code = 2
+ij_scss_keep_indents_on_empty_lines = false
+ij_scss_keep_single_line_blocks = false
+ij_scss_properties_order = font,font-family,font-size,font-weight,font-style,font-variant,font-size-adjust,font-stretch,line-height,position,z-index,top,right,bottom,left,display,visibility,float,clear,overflow,overflow-x,overflow-y,clip,zoom,align-content,align-items,align-self,flex,flex-flow,flex-basis,flex-direction,flex-grow,flex-shrink,flex-wrap,justify-content,order,box-sizing,width,min-width,max-width,height,min-height,max-height,margin,margin-top,margin-right,margin-bottom,margin-left,padding,padding-top,padding-right,padding-bottom,padding-left,table-layout,empty-cells,caption-side,border-spacing,border-collapse,list-style,list-style-position,list-style-type,list-style-image,content,quotes,counter-reset,counter-increment,resize,cursor,user-select,nav-index,nav-up,nav-right,nav-down,nav-left,transition,transition-delay,transition-timing-function,transition-duration,transition-property,transform,transform-origin,animation,animation-name,animation-duration,animation-play-state,animation-timing-function,animation-delay,animation-iteration-count,animation-direction,text-align,text-align-last,vertical-align,white-space,text-decoration,text-emphasis,text-emphasis-color,text-emphasis-style,text-emphasis-position,text-indent,text-justify,letter-spacing,word-spacing,text-outline,text-transform,text-wrap,text-overflow,text-overflow-ellipsis,text-overflow-mode,word-wrap,word-break,tab-size,hyphens,pointer-events,opacity,color,border,border-width,border-style,border-color,border-top,border-top-width,border-top-style,border-top-color,border-right,border-right-width,border-right-style,border-right-color,border-bottom,border-bottom-width,border-bottom-style,border-bottom-color,border-left,border-left-width,border-left-style,border-left-color,border-radius,border-top-left-radius,border-top-right-radius,border-bottom-right-radius,border-bottom-left-radius,border-image,border-image-source,border-image-slice,border-image-width,border-image-outset,border-image-repeat,outline,outline-width,outline-style,outline-color,outline-offset,background,background-color,background-image,background-repeat,background-attachment,background-position,background-position-x,background-position-y,background-clip,background-origin,background-size,box-decoration-break,box-shadow,text-shadow
+ij_scss_space_after_colon = true
+ij_scss_space_before_opening_brace = true
+ij_scss_use_double_quotes = true
+ij_scss_value_alignment = 0
+
+[*.styl]
+tab_width = 4
+ij_continuation_indent_size = 8
+ij_stylus_align_closing_brace_with_properties = false
+ij_stylus_blank_lines_around_nested_selector = 1
+ij_stylus_blank_lines_between_blocks = 1
+ij_stylus_brace_placement = 0
+ij_stylus_enforce_quotes_on_format = false
+ij_stylus_hex_color_long_format = false
+ij_stylus_hex_color_lower_case = false
+ij_stylus_hex_color_short_format = false
+ij_stylus_hex_color_upper_case = false
+ij_stylus_keep_blank_lines_in_code = 2
+ij_stylus_keep_indents_on_empty_lines = false
+ij_stylus_keep_single_line_blocks = false
+ij_stylus_properties_order = font,font-family,font-size,font-weight,font-style,font-variant,font-size-adjust,font-stretch,line-height,position,z-index,top,right,bottom,left,display,visibility,float,clear,overflow,overflow-x,overflow-y,clip,zoom,align-content,align-items,align-self,flex,flex-flow,flex-basis,flex-direction,flex-grow,flex-shrink,flex-wrap,justify-content,order,box-sizing,width,min-width,max-width,height,min-height,max-height,margin,margin-top,margin-right,margin-bottom,margin-left,padding,padding-top,padding-right,padding-bottom,padding-left,table-layout,empty-cells,caption-side,border-spacing,border-collapse,list-style,list-style-position,list-style-type,list-style-image,content,quotes,counter-reset,counter-increment,resize,cursor,user-select,nav-index,nav-up,nav-right,nav-down,nav-left,transition,transition-delay,transition-timing-function,transition-duration,transition-property,transform,transform-origin,animation,animation-name,animation-duration,animation-play-state,animation-timing-function,animation-delay,animation-iteration-count,animation-direction,text-align,text-align-last,vertical-align,white-space,text-decoration,text-emphasis,text-emphasis-color,text-emphasis-style,text-emphasis-position,text-indent,text-justify,letter-spacing,word-spacing,text-outline,text-transform,text-wrap,text-overflow,text-overflow-ellipsis,text-overflow-mode,word-wrap,word-break,tab-size,hyphens,pointer-events,opacity,color,border,border-width,border-style,border-color,border-top,border-top-width,border-top-style,border-top-color,border-right,border-right-width,border-right-style,border-right-color,border-bottom,border-bottom-width,border-bottom-style,border-bottom-color,border-left,border-left-width,border-left-style,border-left-color,border-radius,border-top-left-radius,border-top-right-radius,border-bottom-right-radius,border-bottom-left-radius,border-image,border-image-source,border-image-slice,border-image-width,border-image-outset,border-image-repeat,outline,outline-width,outline-style,outline-color,outline-offset,background,background-color,background-image,background-repeat,background-attachment,background-position,background-position-x,background-position-y,background-clip,background-origin,background-size,box-decoration-break,box-shadow,text-shadow
+ij_stylus_space_after_colon = true
+ij_stylus_space_before_opening_brace = true
+ij_stylus_use_double_quotes = true
+ij_stylus_value_alignment = 0
+
+[.editorconfig]
+ij_editorconfig_align_group_field_declarations = false
+ij_editorconfig_space_after_colon = false
+ij_editorconfig_space_after_comma = true
+ij_editorconfig_space_before_colon = false
+ij_editorconfig_space_before_comma = false
+ij_editorconfig_spaces_around_assignment_operators = true
+
+[{*.ad,*.adoc,*.asciidoc,.asciidoctorconfig}]
+ij_asciidoc_blank_lines_after_header = 1
+ij_asciidoc_blank_lines_keep_after_header = 1
+ij_asciidoc_formatting_enabled = true
+ij_asciidoc_one_sentence_per_line = true
+
+[{*.ant,*.fxml,*.jhm,*.jnlp,*.jrxml,*.pom,*.rng,*.tld,*.wadl,*.wsdd,*.wsdl,*.xjb,*.xml,*.xsd,*.xsl,*.xslt,*.xul}]
+ij_continuation_indent_size = 2
+ij_xml_align_attributes = false
+ij_xml_align_text = false
+ij_xml_attribute_wrap = normal
+ij_xml_block_comment_at_first_column = true
+ij_xml_keep_blank_lines = 2
+ij_xml_keep_indents_on_empty_lines = false
+ij_xml_keep_line_breaks = true
+ij_xml_keep_line_breaks_in_text = true
+ij_xml_keep_whitespaces = false
+ij_xml_keep_whitespaces_around_cdata = preserve
+ij_xml_keep_whitespaces_inside_cdata = false
+ij_xml_line_comment_at_first_column = true
+ij_xml_space_after_tag_name = false
+ij_xml_space_around_equals_in_attribute = false
+ij_xml_space_inside_empty_tag = false
+ij_xml_text_wrap = normal
+
+[{*.ats,*.ts,timers}]
+ij_typescript_align_imports = false
+ij_typescript_align_multiline_array_initializer_expression = false
+ij_typescript_align_multiline_binary_operation = false
+ij_typescript_align_multiline_chained_methods = false
+ij_typescript_align_multiline_extends_list = false
+ij_typescript_align_multiline_for = true
+ij_typescript_align_multiline_parameters = true
+ij_typescript_align_multiline_parameters_in_calls = false
+ij_typescript_align_multiline_ternary_operation = false
+ij_typescript_align_object_properties = 0
+ij_typescript_align_union_types = false
+ij_typescript_align_var_statements = 0
+ij_typescript_array_initializer_new_line_after_left_brace = false
+ij_typescript_array_initializer_right_brace_on_new_line = false
+ij_typescript_array_initializer_wrap = off
+ij_typescript_assignment_wrap = off
+ij_typescript_binary_operation_sign_on_next_line = false
+ij_typescript_binary_operation_wrap = off
+ij_typescript_blacklist_imports = rxjs/Rx,node_modules/**,**/node_modules/**,@angular/material,@angular/material/typings/**
+ij_typescript_blank_lines_after_imports = 1
+ij_typescript_blank_lines_around_class = 1
+ij_typescript_blank_lines_around_field = 0
+ij_typescript_blank_lines_around_field_in_interface = 0
+ij_typescript_blank_lines_around_function = 1
+ij_typescript_blank_lines_around_method = 1
+ij_typescript_blank_lines_around_method_in_interface = 1
+ij_typescript_block_brace_style = end_of_line
+ij_typescript_call_parameters_new_line_after_left_paren = false
+ij_typescript_call_parameters_right_paren_on_new_line = false
+ij_typescript_call_parameters_wrap = off
+ij_typescript_catch_on_new_line = false
+ij_typescript_chained_call_dot_on_new_line = true
+ij_typescript_class_brace_style = end_of_line
+ij_typescript_comma_on_new_line = false
+ij_typescript_do_while_brace_force = never
+ij_typescript_else_on_new_line = false
+ij_typescript_enforce_trailing_comma = keep
+ij_typescript_extends_keyword_wrap = off
+ij_typescript_extends_list_wrap = off
+ij_typescript_field_prefix = _
+ij_typescript_file_name_style = relaxed
+ij_typescript_finally_on_new_line = false
+ij_typescript_for_brace_force = never
+ij_typescript_for_statement_new_line_after_left_paren = false
+ij_typescript_for_statement_right_paren_on_new_line = false
+ij_typescript_for_statement_wrap = off
+ij_typescript_force_quote_style = false
+ij_typescript_force_semicolon_style = false
+ij_typescript_function_expression_brace_style = end_of_line
+ij_typescript_if_brace_force = never
+ij_typescript_import_merge_members = global
+ij_typescript_import_prefer_absolute_path = global
+ij_typescript_import_sort_members = true
+ij_typescript_import_sort_module_name = false
+ij_typescript_import_use_node_resolution = true
+ij_typescript_imports_wrap = on_every_item
+ij_typescript_indent_case_from_switch = true
+ij_typescript_indent_chained_calls = false
+ij_typescript_indent_package_children = 0
+ij_typescript_jsdoc_include_types = false
+ij_typescript_jsx_attribute_value = braces
+ij_typescript_keep_blank_lines_in_code = 2
+ij_typescript_keep_first_column_comment = true
+ij_typescript_keep_indents_on_empty_lines = false
+ij_typescript_keep_line_breaks = true
+ij_typescript_keep_simple_blocks_in_one_line = false
+ij_typescript_keep_simple_methods_in_one_line = false
+ij_typescript_line_comment_add_space = true
+ij_typescript_line_comment_at_first_column = false
+ij_typescript_method_brace_style = end_of_line
+ij_typescript_method_call_chain_wrap = off
+ij_typescript_method_parameters_new_line_after_left_paren = false
+ij_typescript_method_parameters_right_paren_on_new_line = false
+ij_typescript_method_parameters_wrap = off
+ij_typescript_object_literal_wrap = on_every_item
+ij_typescript_parentheses_expression_new_line_after_left_paren = false
+ij_typescript_parentheses_expression_right_paren_on_new_line = false
+ij_typescript_place_assignment_sign_on_next_line = false
+ij_typescript_prefer_as_type_cast = false
+ij_typescript_prefer_explicit_types_function_expression_returns = false
+ij_typescript_prefer_explicit_types_function_returns = false
+ij_typescript_prefer_explicit_types_vars_fields = false
+ij_typescript_prefer_parameters_wrap = false
+ij_typescript_reformat_c_style_comments = false
+ij_typescript_space_after_colon = true
+ij_typescript_space_after_comma = true
+ij_typescript_space_after_dots_in_rest_parameter = false
+ij_typescript_space_after_generator_mult = true
+ij_typescript_space_after_property_colon = true
+ij_typescript_space_after_quest = true
+ij_typescript_space_after_type_colon = true
+ij_typescript_space_after_unary_not = false
+ij_typescript_space_before_async_arrow_lparen = true
+ij_typescript_space_before_catch_keyword = true
+ij_typescript_space_before_catch_left_brace = true
+ij_typescript_space_before_catch_parentheses = true
+ij_typescript_space_before_class_lbrace = true
+ij_typescript_space_before_class_left_brace = true
+ij_typescript_space_before_colon = true
+ij_typescript_space_before_comma = false
+ij_typescript_space_before_do_left_brace = true
+ij_typescript_space_before_else_keyword = true
+ij_typescript_space_before_else_left_brace = true
+ij_typescript_space_before_finally_keyword = true
+ij_typescript_space_before_finally_left_brace = true
+ij_typescript_space_before_for_left_brace = true
+ij_typescript_space_before_for_parentheses = true
+ij_typescript_space_before_for_semicolon = false
+ij_typescript_space_before_function_left_parenth = true
+ij_typescript_space_before_generator_mult = false
+ij_typescript_space_before_if_left_brace = true
+ij_typescript_space_before_if_parentheses = true
+ij_typescript_space_before_method_call_parentheses = false
+ij_typescript_space_before_method_left_brace = true
+ij_typescript_space_before_method_parentheses = false
+ij_typescript_space_before_property_colon = false
+ij_typescript_space_before_quest = true
+ij_typescript_space_before_switch_left_brace = true
+ij_typescript_space_before_switch_parentheses = true
+ij_typescript_space_before_try_left_brace = true
+ij_typescript_space_before_type_colon = false
+ij_typescript_space_before_unary_not = false
+ij_typescript_space_before_while_keyword = true
+ij_typescript_space_before_while_left_brace = true
+ij_typescript_space_before_while_parentheses = true
+ij_typescript_spaces_around_additive_operators = true
+ij_typescript_spaces_around_arrow_function_operator = true
+ij_typescript_spaces_around_assignment_operators = true
+ij_typescript_spaces_around_bitwise_operators = true
+ij_typescript_spaces_around_equality_operators = true
+ij_typescript_spaces_around_logical_operators = true
+ij_typescript_spaces_around_multiplicative_operators = true
+ij_typescript_spaces_around_relational_operators = true
+ij_typescript_spaces_around_shift_operators = true
+ij_typescript_spaces_around_unary_operator = false
+ij_typescript_spaces_within_array_initializer_brackets = false
+ij_typescript_spaces_within_brackets = false
+ij_typescript_spaces_within_catch_parentheses = false
+ij_typescript_spaces_within_for_parentheses = false
+ij_typescript_spaces_within_if_parentheses = false
+ij_typescript_spaces_within_imports = false
+ij_typescript_spaces_within_interpolation_expressions = false
+ij_typescript_spaces_within_method_call_parentheses = false
+ij_typescript_spaces_within_method_parentheses = false
+ij_typescript_spaces_within_object_literal_braces = false
+ij_typescript_spaces_within_object_type_braces = true
+ij_typescript_spaces_within_parentheses = false
+ij_typescript_spaces_within_switch_parentheses = false
+ij_typescript_spaces_within_type_assertion = false
+ij_typescript_spaces_within_union_types = true
+ij_typescript_spaces_within_while_parentheses = false
+ij_typescript_special_else_if_treatment = true
+ij_typescript_ternary_operation_signs_on_next_line = false
+ij_typescript_ternary_operation_wrap = off
+ij_typescript_union_types_wrap = on_every_item
+ij_typescript_use_chained_calls_group_indents = false
+ij_typescript_use_double_quotes = true
+ij_typescript_use_explicit_js_extension = global
+ij_typescript_use_path_mapping = always
+ij_typescript_use_public_modifier = false
+ij_typescript_use_semicolon_after_statement = true
+ij_typescript_var_declaration_wrap = normal
+ij_typescript_while_brace_force = never
+ij_typescript_while_on_new_line = false
+ij_typescript_wrap_comments = false
+
+[{*.bash,*.sh,*.zsh}]
+ij_shell_binary_ops_start_line = false
+ij_shell_keep_column_alignment_padding = false
+ij_shell_minify_program = false
+ij_shell_redirect_followed_by_space = false
+ij_shell_switch_cases_indented = false
+ij_shell_use_unix_line_separator = true
+
+[{*.cjs,*.js}]
+ij_javascript_align_imports = false
+ij_javascript_align_multiline_array_initializer_expression = false
+ij_javascript_align_multiline_binary_operation = false
+ij_javascript_align_multiline_chained_methods = false
+ij_javascript_align_multiline_extends_list = false
+ij_javascript_align_multiline_for = false
+ij_javascript_align_multiline_parameters = false
+ij_javascript_align_multiline_parameters_in_calls = false
+ij_javascript_align_multiline_ternary_operation = false
+ij_javascript_align_object_properties = 0
+ij_javascript_align_union_types = false
+ij_javascript_align_var_statements = 0
+ij_javascript_array_initializer_new_line_after_left_brace = false
+ij_javascript_array_initializer_right_brace_on_new_line = false
+ij_javascript_array_initializer_wrap = normal
+ij_javascript_assignment_wrap = off
+ij_javascript_binary_operation_sign_on_next_line = true
+ij_javascript_binary_operation_wrap = normal
+ij_javascript_blacklist_imports = rxjs/Rx,node_modules/**,**/node_modules/**,@angular/material,@angular/material/typings/**
+ij_javascript_blank_lines_after_imports = 1
+ij_javascript_blank_lines_around_class = 1
+ij_javascript_blank_lines_around_field = 0
+ij_javascript_blank_lines_around_function = 1
+ij_javascript_blank_lines_around_method = 1
+ij_javascript_block_brace_style = end_of_line
+ij_javascript_call_parameters_new_line_after_left_paren = false
+ij_javascript_call_parameters_right_paren_on_new_line = false
+ij_javascript_call_parameters_wrap = normal
+ij_javascript_catch_on_new_line = false
+ij_javascript_chained_call_dot_on_new_line = true
+ij_javascript_class_brace_style = end_of_line
+ij_javascript_comma_on_new_line = false
+ij_javascript_do_while_brace_force = always
+ij_javascript_else_on_new_line = false
+ij_javascript_enforce_trailing_comma = keep
+ij_javascript_extends_keyword_wrap = off
+ij_javascript_extends_list_wrap = off
+ij_javascript_field_prefix = _
+ij_javascript_file_name_style = relaxed
+ij_javascript_finally_on_new_line = false
+ij_javascript_for_brace_force = always
+ij_javascript_for_statement_new_line_after_left_paren = false
+ij_javascript_for_statement_right_paren_on_new_line = false
+ij_javascript_for_statement_wrap = normal
+ij_javascript_force_quote_style = false
+ij_javascript_force_semicolon_style = false
+ij_javascript_function_expression_brace_style = end_of_line
+ij_javascript_if_brace_force = always
+ij_javascript_import_merge_members = global
+ij_javascript_import_prefer_absolute_path = global
+ij_javascript_import_sort_members = true
+ij_javascript_import_sort_module_name = false
+ij_javascript_import_use_node_resolution = true
+ij_javascript_imports_wrap = on_every_item
+ij_javascript_indent_case_from_switch = true
+ij_javascript_indent_chained_calls = false
+ij_javascript_indent_package_children = 0
+ij_javascript_jsx_attribute_value = braces
+ij_javascript_keep_blank_lines_in_code = 1
+ij_javascript_keep_first_column_comment = true
+ij_javascript_keep_indents_on_empty_lines = false
+ij_javascript_keep_line_breaks = true
+ij_javascript_keep_simple_blocks_in_one_line = false
+ij_javascript_keep_simple_methods_in_one_line = false
+ij_javascript_line_comment_add_space = true
+ij_javascript_line_comment_at_first_column = false
+ij_javascript_method_brace_style = end_of_line
+ij_javascript_method_call_chain_wrap = off
+ij_javascript_method_parameters_new_line_after_left_paren = false
+ij_javascript_method_parameters_right_paren_on_new_line = false
+ij_javascript_method_parameters_wrap = normal
+ij_javascript_object_literal_wrap = on_every_item
+ij_javascript_parentheses_expression_new_line_after_left_paren = false
+ij_javascript_parentheses_expression_right_paren_on_new_line = false
+ij_javascript_place_assignment_sign_on_next_line = false
+ij_javascript_prefer_as_type_cast = false
+ij_javascript_prefer_explicit_types_function_expression_returns = false
+ij_javascript_prefer_explicit_types_function_returns = false
+ij_javascript_prefer_explicit_types_vars_fields = false
+ij_javascript_prefer_parameters_wrap = false
+ij_javascript_reformat_c_style_comments = false
+ij_javascript_space_after_colon = true
+ij_javascript_space_after_comma = true
+ij_javascript_space_after_dots_in_rest_parameter = false
+ij_javascript_space_after_generator_mult = true
+ij_javascript_space_after_property_colon = true
+ij_javascript_space_after_quest = true
+ij_javascript_space_after_type_colon = true
+ij_javascript_space_after_unary_not = false
+ij_javascript_space_before_async_arrow_lparen = true
+ij_javascript_space_before_catch_keyword = true
+ij_javascript_space_before_catch_left_brace = true
+ij_javascript_space_before_catch_parentheses = true
+ij_javascript_space_before_class_lbrace = true
+ij_javascript_space_before_class_left_brace = true
+ij_javascript_space_before_colon = true
+ij_javascript_space_before_comma = false
+ij_javascript_space_before_do_left_brace = true
+ij_javascript_space_before_else_keyword = true
+ij_javascript_space_before_else_left_brace = true
+ij_javascript_space_before_finally_keyword = true
+ij_javascript_space_before_finally_left_brace = true
+ij_javascript_space_before_for_left_brace = true
+ij_javascript_space_before_for_parentheses = true
+ij_javascript_space_before_for_semicolon = false
+ij_javascript_space_before_function_left_parenth = true
+ij_javascript_space_before_generator_mult = false
+ij_javascript_space_before_if_left_brace = true
+ij_javascript_space_before_if_parentheses = true
+ij_javascript_space_before_method_call_parentheses = false
+ij_javascript_space_before_method_left_brace = true
+ij_javascript_space_before_method_parentheses = false
+ij_javascript_space_before_property_colon = false
+ij_javascript_space_before_quest = true
+ij_javascript_space_before_switch_left_brace = true
+ij_javascript_space_before_switch_parentheses = true
+ij_javascript_space_before_try_left_brace = true
+ij_javascript_space_before_type_colon = false
+ij_javascript_space_before_unary_not = false
+ij_javascript_space_before_while_keyword = true
+ij_javascript_space_before_while_left_brace = true
+ij_javascript_space_before_while_parentheses = true
+ij_javascript_spaces_around_additive_operators = true
+ij_javascript_spaces_around_arrow_function_operator = true
+ij_javascript_spaces_around_assignment_operators = true
+ij_javascript_spaces_around_bitwise_operators = true
+ij_javascript_spaces_around_equality_operators = true
+ij_javascript_spaces_around_logical_operators = true
+ij_javascript_spaces_around_multiplicative_operators = true
+ij_javascript_spaces_around_relational_operators = true
+ij_javascript_spaces_around_shift_operators = true
+ij_javascript_spaces_around_unary_operator = false
+ij_javascript_spaces_within_array_initializer_brackets = false
+ij_javascript_spaces_within_brackets = false
+ij_javascript_spaces_within_catch_parentheses = false
+ij_javascript_spaces_within_for_parentheses = false
+ij_javascript_spaces_within_if_parentheses = false
+ij_javascript_spaces_within_imports = false
+ij_javascript_spaces_within_interpolation_expressions = false
+ij_javascript_spaces_within_method_call_parentheses = false
+ij_javascript_spaces_within_method_parentheses = false
+ij_javascript_spaces_within_object_literal_braces = false
+ij_javascript_spaces_within_object_type_braces = true
+ij_javascript_spaces_within_parentheses = false
+ij_javascript_spaces_within_switch_parentheses = false
+ij_javascript_spaces_within_type_assertion = false
+ij_javascript_spaces_within_union_types = true
+ij_javascript_spaces_within_while_parentheses = false
+ij_javascript_special_else_if_treatment = true
+ij_javascript_ternary_operation_signs_on_next_line = true
+ij_javascript_ternary_operation_wrap = normal
+ij_javascript_union_types_wrap = on_every_item
+ij_javascript_use_chained_calls_group_indents = false
+ij_javascript_use_double_quotes = true
+ij_javascript_use_explicit_js_extension = global
+ij_javascript_use_path_mapping = always
+ij_javascript_use_public_modifier = false
+ij_javascript_use_semicolon_after_statement = true
+ij_javascript_var_declaration_wrap = normal
+ij_javascript_while_brace_force = always
+ij_javascript_while_on_new_line = false
+ij_javascript_wrap_comments = false
+
+[{*.ft,*.vm,*.vsl}]
+indent_size = 4
+tab_width = 4
+ij_continuation_indent_size = 8
+ij_vtl_keep_indents_on_empty_lines = false
+
+[{*.gant,*.gradle,*.groovy,*.gson,*.gy}]
+indent_size = 4
+tab_width = 4
+ij_continuation_indent_size = 8
+ij_groovy_align_group_field_declarations = false
+ij_groovy_align_multiline_array_initializer_expression = false
+ij_groovy_align_multiline_assignment = false
+ij_groovy_align_multiline_binary_operation = false
+ij_groovy_align_multiline_chained_methods = false
+ij_groovy_align_multiline_extends_list = false
+ij_groovy_align_multiline_for = true
+ij_groovy_align_multiline_list_or_map = true
+ij_groovy_align_multiline_method_parentheses = false
+ij_groovy_align_multiline_parameters = true
+ij_groovy_align_multiline_parameters_in_calls = false
+ij_groovy_align_multiline_resources = true
+ij_groovy_align_multiline_ternary_operation = false
+ij_groovy_align_multiline_throws_list = false
+ij_groovy_align_named_args_in_map = true
+ij_groovy_align_throws_keyword = false
+ij_groovy_array_initializer_new_line_after_left_brace = false
+ij_groovy_array_initializer_right_brace_on_new_line = false
+ij_groovy_array_initializer_wrap = off
+ij_groovy_assert_statement_wrap = off
+ij_groovy_assignment_wrap = off
+ij_groovy_binary_operation_wrap = off
+ij_groovy_blank_lines_after_class_header = 0
+ij_groovy_blank_lines_after_imports = 1
+ij_groovy_blank_lines_after_package = 1
+ij_groovy_blank_lines_around_class = 1
+ij_groovy_blank_lines_around_field = 0
+ij_groovy_blank_lines_around_field_in_interface = 0
+ij_groovy_blank_lines_around_method = 1
+ij_groovy_blank_lines_around_method_in_interface = 1
+ij_groovy_blank_lines_before_imports = 1
+ij_groovy_blank_lines_before_method_body = 0
+ij_groovy_blank_lines_before_package = 0
+ij_groovy_block_brace_style = end_of_line
+ij_groovy_block_comment_at_first_column = true
+ij_groovy_call_parameters_new_line_after_left_paren = false
+ij_groovy_call_parameters_right_paren_on_new_line = false
+ij_groovy_call_parameters_wrap = off
+ij_groovy_catch_on_new_line = false
+ij_groovy_class_annotation_wrap = split_into_lines
+ij_groovy_class_brace_style = end_of_line
+ij_groovy_class_count_to_use_import_on_demand = 5
+ij_groovy_do_while_brace_force = never
+ij_groovy_else_on_new_line = false
+ij_groovy_enum_constants_wrap = off
+ij_groovy_extends_keyword_wrap = off
+ij_groovy_extends_list_wrap = off
+ij_groovy_field_annotation_wrap = split_into_lines
+ij_groovy_finally_on_new_line = false
+ij_groovy_for_brace_force = never
+ij_groovy_for_statement_new_line_after_left_paren = false
+ij_groovy_for_statement_right_paren_on_new_line = false
+ij_groovy_for_statement_wrap = off
+ij_groovy_if_brace_force = never
+ij_groovy_import_annotation_wrap = 2
+ij_groovy_imports_layout = *,|,javax.**,java.**,|,$*
+ij_groovy_indent_case_from_switch = true
+ij_groovy_indent_label_blocks = true
+ij_groovy_insert_inner_class_imports = false
+ij_groovy_keep_blank_lines_before_right_brace = 2
+ij_groovy_keep_blank_lines_in_code = 2
+ij_groovy_keep_blank_lines_in_declarations = 2
+ij_groovy_keep_control_statement_in_one_line = true
+ij_groovy_keep_first_column_comment = true
+ij_groovy_keep_indents_on_empty_lines = false
+ij_groovy_keep_line_breaks = true
+ij_groovy_keep_multiple_expressions_in_one_line = false
+ij_groovy_keep_simple_blocks_in_one_line = false
+ij_groovy_keep_simple_classes_in_one_line = true
+ij_groovy_keep_simple_lambdas_in_one_line = true
+ij_groovy_keep_simple_methods_in_one_line = true
+ij_groovy_label_indent_absolute = false
+ij_groovy_label_indent_size = 0
+ij_groovy_lambda_brace_style = end_of_line
+ij_groovy_layout_static_imports_separately = true
+ij_groovy_line_comment_add_space = false
+ij_groovy_line_comment_at_first_column = true
+ij_groovy_method_annotation_wrap = split_into_lines
+ij_groovy_method_brace_style = end_of_line
+ij_groovy_method_call_chain_wrap = off
+ij_groovy_method_parameters_new_line_after_left_paren = false
+ij_groovy_method_parameters_right_paren_on_new_line = false
+ij_groovy_method_parameters_wrap = off
+ij_groovy_modifier_list_wrap = false
+ij_groovy_names_count_to_use_import_on_demand = 3
+ij_groovy_parameter_annotation_wrap = off
+ij_groovy_parentheses_expression_new_line_after_left_paren = false
+ij_groovy_parentheses_expression_right_paren_on_new_line = false
+ij_groovy_prefer_parameters_wrap = false
+ij_groovy_resource_list_new_line_after_left_paren = false
+ij_groovy_resource_list_right_paren_on_new_line = false
+ij_groovy_resource_list_wrap = off
+ij_groovy_space_after_assert_separator = true
+ij_groovy_space_after_colon = true
+ij_groovy_space_after_comma = true
+ij_groovy_space_after_comma_in_type_arguments = true
+ij_groovy_space_after_for_semicolon = true
+ij_groovy_space_after_quest = true
+ij_groovy_space_after_type_cast = true
+ij_groovy_space_before_annotation_parameter_list = false
+ij_groovy_space_before_array_initializer_left_brace = false
+ij_groovy_space_before_assert_separator = false
+ij_groovy_space_before_catch_keyword = true
+ij_groovy_space_before_catch_left_brace = true
+ij_groovy_space_before_catch_parentheses = true
+ij_groovy_space_before_class_left_brace = true
+ij_groovy_space_before_closure_left_brace = true
+ij_groovy_space_before_colon = true
+ij_groovy_space_before_comma = false
+ij_groovy_space_before_do_left_brace = true
+ij_groovy_space_before_else_keyword = true
+ij_groovy_space_before_else_left_brace = true
+ij_groovy_space_before_finally_keyword = true
+ij_groovy_space_before_finally_left_brace = true
+ij_groovy_space_before_for_left_brace = true
+ij_groovy_space_before_for_parentheses = true
+ij_groovy_space_before_for_semicolon = false
+ij_groovy_space_before_if_left_brace = true
+ij_groovy_space_before_if_parentheses = true
+ij_groovy_space_before_method_call_parentheses = false
+ij_groovy_space_before_method_left_brace = true
+ij_groovy_space_before_method_parentheses = false
+ij_groovy_space_before_quest = true
+ij_groovy_space_before_switch_left_brace = true
+ij_groovy_space_before_switch_parentheses = true
+ij_groovy_space_before_synchronized_left_brace = true
+ij_groovy_space_before_synchronized_parentheses = true
+ij_groovy_space_before_try_left_brace = true
+ij_groovy_space_before_try_parentheses = true
+ij_groovy_space_before_while_keyword = true
+ij_groovy_space_before_while_left_brace = true
+ij_groovy_space_before_while_parentheses = true
+ij_groovy_space_in_named_argument = true
+ij_groovy_space_in_named_argument_before_colon = false
+ij_groovy_space_within_empty_array_initializer_braces = false
+ij_groovy_space_within_empty_method_call_parentheses = false
+ij_groovy_spaces_around_additive_operators = true
+ij_groovy_spaces_around_assignment_operators = true
+ij_groovy_spaces_around_bitwise_operators = true
+ij_groovy_spaces_around_equality_operators = true
+ij_groovy_spaces_around_lambda_arrow = true
+ij_groovy_spaces_around_logical_operators = true
+ij_groovy_spaces_around_multiplicative_operators = true
+ij_groovy_spaces_around_regex_operators = true
+ij_groovy_spaces_around_relational_operators = true
+ij_groovy_spaces_around_shift_operators = true
+ij_groovy_spaces_within_annotation_parentheses = false
+ij_groovy_spaces_within_array_initializer_braces = false
+ij_groovy_spaces_within_braces = true
+ij_groovy_spaces_within_brackets = false
+ij_groovy_spaces_within_cast_parentheses = false
+ij_groovy_spaces_within_catch_parentheses = false
+ij_groovy_spaces_within_for_parentheses = false
+ij_groovy_spaces_within_gstring_injection_braces = false
+ij_groovy_spaces_within_if_parentheses = false
+ij_groovy_spaces_within_list_or_map = false
+ij_groovy_spaces_within_method_call_parentheses = false
+ij_groovy_spaces_within_method_parentheses = false
+ij_groovy_spaces_within_parentheses = false
+ij_groovy_spaces_within_switch_parentheses = false
+ij_groovy_spaces_within_synchronized_parentheses = false
+ij_groovy_spaces_within_try_parentheses = false
+ij_groovy_spaces_within_tuple_expression = false
+ij_groovy_spaces_within_while_parentheses = false
+ij_groovy_special_else_if_treatment = true
+ij_groovy_ternary_operation_wrap = off
+ij_groovy_throws_keyword_wrap = off
+ij_groovy_throws_list_wrap = off
+ij_groovy_use_flying_geese_braces = false
+ij_groovy_use_fq_class_names = false
+ij_groovy_use_fq_class_names_in_javadoc = true
+ij_groovy_use_relative_indents = false
+ij_groovy_use_single_class_imports = true
+ij_groovy_variable_annotation_wrap = off
+ij_groovy_while_brace_force = never
+ij_groovy_while_on_new_line = false
+ij_groovy_wrap_chain_calls_after_dot = false
+ij_groovy_wrap_long_lines = false
+
+[{*.glstex,*.tex}]
+indent_size = 4
+tab_width = 4
+ij_continuation_indent_size = 8
+ij_latex_keep_first_column_comment = true
+ij_latex_keep_indents_on_empty_lines = false
+ij_latex_line_comment_add_space = false
+ij_latex_line_comment_at_first_column = true
+ij_latex_wrap_long_lines = false
+
+[{*.gradle.kts,*.kt,*.kts,*.main.kts,*.space.kts}]
+indent_size = 4
+tab_width = 4
+ij_continuation_indent_size = 8
+ij_kotlin_align_in_columns_case_branch = false
+ij_kotlin_align_multiline_binary_operation = false
+ij_kotlin_align_multiline_extends_list = false
+ij_kotlin_align_multiline_method_parentheses = false
+ij_kotlin_align_multiline_parameters = true
+ij_kotlin_align_multiline_parameters_in_calls = false
+ij_kotlin_allow_trailing_comma = false
+ij_kotlin_allow_trailing_comma_on_call_site = false
+ij_kotlin_assignment_wrap = off
+ij_kotlin_blank_lines_after_class_header = 0
+ij_kotlin_blank_lines_around_block_when_branches = 0
+ij_kotlin_blank_lines_before_declaration_with_comment_or_annotation_on_separate_line = 1
+ij_kotlin_block_comment_at_first_column = true
+ij_kotlin_call_parameters_new_line_after_left_paren = false
+ij_kotlin_call_parameters_right_paren_on_new_line = false
+ij_kotlin_call_parameters_wrap = off
+ij_kotlin_catch_on_new_line = false
+ij_kotlin_class_annotation_wrap = split_into_lines
+ij_kotlin_continuation_indent_for_chained_calls = true
+ij_kotlin_continuation_indent_for_expression_bodies = true
+ij_kotlin_continuation_indent_in_argument_lists = true
+ij_kotlin_continuation_indent_in_elvis = true
+ij_kotlin_continuation_indent_in_if_conditions = true
+ij_kotlin_continuation_indent_in_parameter_lists = true
+ij_kotlin_continuation_indent_in_supertype_lists = true
+ij_kotlin_else_on_new_line = false
+ij_kotlin_enum_constants_wrap = off
+ij_kotlin_extends_list_wrap = off
+ij_kotlin_field_annotation_wrap = split_into_lines
+ij_kotlin_finally_on_new_line = false
+ij_kotlin_if_rparen_on_new_line = false
+ij_kotlin_import_nested_classes = false
+ij_kotlin_imports_layout = *,java.**,javax.**,kotlin.**,^
+ij_kotlin_insert_whitespaces_in_simple_one_line_method = true
+ij_kotlin_keep_blank_lines_before_right_brace = 2
+ij_kotlin_keep_blank_lines_in_code = 2
+ij_kotlin_keep_blank_lines_in_declarations = 2
+ij_kotlin_keep_first_column_comment = true
+ij_kotlin_keep_indents_on_empty_lines = false
+ij_kotlin_keep_line_breaks = true
+ij_kotlin_lbrace_on_next_line = false
+ij_kotlin_line_comment_add_space = false
+ij_kotlin_line_comment_at_first_column = true
+ij_kotlin_method_annotation_wrap = split_into_lines
+ij_kotlin_method_call_chain_wrap = off
+ij_kotlin_method_parameters_new_line_after_left_paren = false
+ij_kotlin_method_parameters_right_paren_on_new_line = false
+ij_kotlin_method_parameters_wrap = off
+ij_kotlin_name_count_to_use_star_import = 5
+ij_kotlin_name_count_to_use_star_import_for_members = 3
+ij_kotlin_packages_to_use_import_on_demand = java.util.*,kotlinx.android.synthetic.**,io.ktor.**
+ij_kotlin_parameter_annotation_wrap = off
+ij_kotlin_space_after_comma = true
+ij_kotlin_space_after_extend_colon = true
+ij_kotlin_space_after_type_colon = true
+ij_kotlin_space_before_catch_parentheses = true
+ij_kotlin_space_before_comma = false
+ij_kotlin_space_before_extend_colon = true
+ij_kotlin_space_before_for_parentheses = true
+ij_kotlin_space_before_if_parentheses = true
+ij_kotlin_space_before_lambda_arrow = true
+ij_kotlin_space_before_type_colon = false
+ij_kotlin_space_before_when_parentheses = true
+ij_kotlin_space_before_while_parentheses = true
+ij_kotlin_spaces_around_additive_operators = true
+ij_kotlin_spaces_around_assignment_operators = true
+ij_kotlin_spaces_around_equality_operators = true
+ij_kotlin_spaces_around_function_type_arrow = true
+ij_kotlin_spaces_around_logical_operators = true
+ij_kotlin_spaces_around_multiplicative_operators = true
+ij_kotlin_spaces_around_range = false
+ij_kotlin_spaces_around_relational_operators = true
+ij_kotlin_spaces_around_unary_operator = false
+ij_kotlin_spaces_around_when_arrow = true
+ij_kotlin_variable_annotation_wrap = off
+ij_kotlin_while_on_new_line = false
+ij_kotlin_wrap_elvis_expressions = 1
+ij_kotlin_wrap_expression_body_functions = 0
+ij_kotlin_wrap_first_method_in_call_chain = false
+
+[{*.har,*.jsb2,*.jsb3,*.json,.babelrc,.eslintrc,.stylelintrc,bowerrc,jest.config}]
+ij_json_keep_blank_lines_in_code = 0
+ij_json_keep_indents_on_empty_lines = false
+ij_json_keep_line_breaks = true
+ij_json_space_after_colon = true
+ij_json_space_after_comma = true
+ij_json_space_before_colon = true
+ij_json_space_before_comma = false
+ij_json_spaces_within_braces = false
+ij_json_spaces_within_brackets = false
+ij_json_wrap_long_lines = false
+
+[{*.htm,*.html,*.ng,*.sht,*.shtm,*.shtml}]
+ij_html_add_new_line_before_tags = body,div,p,form,h1,h2,h3
+ij_html_align_attributes = true
+ij_html_align_text = false
+ij_html_attribute_wrap = normal
+ij_html_block_comment_at_first_column = true
+ij_html_do_not_align_children_of_min_lines = 0
+ij_html_do_not_break_if_inline_tags = title,h1,h2,h3,h4,h5,h6,p
+ij_html_do_not_indent_children_of_tags = html,body,thead,tbody,tfoot
+ij_html_enforce_quotes = false
+ij_html_inline_tags = a,abbr,acronym,b,basefont,bdo,big,br,cite,cite,code,dfn,em,font,i,img,input,kbd,label,q,s,samp,select,small,span,strike,strong,sub,sup,textarea,tt,u,var
+ij_html_keep_blank_lines = 2
+ij_html_keep_indents_on_empty_lines = false
+ij_html_keep_line_breaks = true
+ij_html_keep_line_breaks_in_text = true
+ij_html_keep_whitespaces = false
+ij_html_keep_whitespaces_inside = span,pre,textarea
+ij_html_line_comment_at_first_column = true
+ij_html_new_line_after_last_attribute = never
+ij_html_new_line_before_first_attribute = never
+ij_html_quote_style = double
+ij_html_remove_new_line_before_tags = br
+ij_html_space_after_tag_name = false
+ij_html_space_around_equality_in_attribute = false
+ij_html_space_inside_empty_tag = false
+ij_html_text_wrap = normal
+
+[{*.jsf,*.jsp,*.jspf,*.tag,*.tagf,*.xjsp}]
+indent_size = 4
+tab_width = 4
+ij_continuation_indent_size = 8
+ij_jsp_jsp_prefer_comma_separated_import_list = false
+ij_jsp_keep_indents_on_empty_lines = false
+
+[{*.jspx,*.tagx}]
+indent_size = 4
+tab_width = 4
+ij_continuation_indent_size = 8
+ij_jspx_keep_indents_on_empty_lines = false
+
+[{*.markdown,*.md}]
+indent_size = 4
+tab_width = 4
+ij_continuation_indent_size = 8
+ij_markdown_force_one_space_after_blockquote_symbol = true
+ij_markdown_force_one_space_after_header_symbol = true
+ij_markdown_force_one_space_after_list_bullet = true
+ij_markdown_force_one_space_between_words = true
+ij_markdown_keep_indents_on_empty_lines = false
+ij_markdown_max_lines_around_block_elements = 1
+ij_markdown_max_lines_around_header = 1
+ij_markdown_max_lines_between_paragraphs = 1
+ij_markdown_min_lines_around_block_elements = 1
+ij_markdown_min_lines_around_header = 1
+ij_markdown_min_lines_between_paragraphs = 1
+
+[{*.pb,*.textproto}]
+ij_prototext_keep_blank_lines_in_code = 2
+ij_prototext_keep_indents_on_empty_lines = false
+ij_prototext_keep_line_breaks = true
+ij_prototext_space_after_colon = true
+ij_prototext_space_after_comma = true
+ij_prototext_space_before_colon = false
+ij_prototext_space_before_comma = false
+ij_prototext_spaces_within_braces = true
+ij_prototext_spaces_within_brackets = false
+
+[{*.properties,spring.handlers,spring.schemas}]
+ij_properties_align_group_field_declarations = false
+ij_properties_keep_blank_lines = false
+ij_properties_key_value_delimiter = equals
+ij_properties_spaces_around_key_value_delimiter = false
+
+[{*.yaml,*.yml}]
+ij_yaml_align_values_properties = do_not_align
+ij_yaml_autoinsert_sequence_marker = true
+ij_yaml_block_mapping_on_new_line = false
+ij_yaml_indent_sequence_value = true
+ij_yaml_keep_indents_on_empty_lines = false
+ij_yaml_keep_line_breaks = true
+ij_yaml_sequence_on_new_line = false
+ij_yaml_space_before_colon = false
+ij_yaml_spaces_within_braces = true
+ij_yaml_spaces_within_brackets = true
diff --git a/db/pom.xml b/db/pom.xml
index 477b138..9e7ec1c 100644
--- a/db/pom.xml
+++ b/db/pom.xml
@@ -62,7 +62,7 @@ limitations under the License.
org.slf4j
- slf4j-log4j12
+ slf4j-jdk14
test
@@ -95,4 +95,4 @@ limitations under the License.
-
\ No newline at end of file
+
diff --git a/db/src/main/java/de/muehlencord/shared/db/AbstractController.java b/db/src/main/java/de/muehlencord/shared/db/AbstractController.java
index 1679c7e..af0269f 100644
--- a/db/src/main/java/de/muehlencord/shared/db/AbstractController.java
+++ b/db/src/main/java/de/muehlencord/shared/db/AbstractController.java
@@ -42,7 +42,7 @@ public abstract class AbstractController extends CommonA
private final Class entityClass;
- public AbstractController(Class clazz) {
+ protected AbstractController(Class clazz) {
this.entityClass = clazz;
}
@@ -68,24 +68,21 @@ public abstract class AbstractController extends CommonA
*/
@Lock(LockType.READ)
public T find(Object id, String... subGraphItems) {
- EntityGraph graph = this.em.createEntityGraph(entityClass);
+ EntityGraph graph = this.em.createEntityGraph(entityClass);
for (String subGraphItem : subGraphItems) {
graph.addSubgraph(subGraphItem);
}
- Map hints = new HashMap<>();
+ Map hints = new HashMap<>();
hints.put("javax.persistence.loadgraph", graph);
- T entity = (T) em.find(entityClass, id, hints);
- return entity;
+ return em.find(entityClass, id, hints);
}
@Lock(LockType.READ)
- public List find(String queryName, Map parameterMap) throws ControllerException {
+ public List find(String queryName, Map parameterMap) {
Query query = em.createNamedQuery(queryName);
- parameterMap.entrySet().forEach((entry) -> {
- query.setParameter(entry.getKey(), entry.getValue());
- });
+ parameterMap.entrySet().forEach(entry -> query.setParameter(entry.getKey(), entry.getValue()));
return query.getResultList();
}
diff --git a/db/src/main/java/de/muehlencord/shared/db/AuditListener.java b/db/src/main/java/de/muehlencord/shared/db/AuditListener.java
index 4188591..a62a968 100644
--- a/db/src/main/java/de/muehlencord/shared/db/AuditListener.java
+++ b/db/src/main/java/de/muehlencord/shared/db/AuditListener.java
@@ -1,4 +1,4 @@
-/*
+/*
* Copyright 2019 Joern Muehlencord (joern@muehlencord.de).
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -15,52 +15,50 @@
*/
package de.muehlencord.shared.db;
-import de.muehlencord.shared.util.DateUtil;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
-import java.util.Date;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Does not work, cannot Spring independent inject current username - implemented in AbstractController manually
+ *
* @author Joern Muehlencord (joern@muehlencord.de)
*/
public class AuditListener {
- private static final Logger LOGGER = LoggerFactory.getLogger(AuditListener.class);
+ private static final Logger logger = LoggerFactory.getLogger(AuditListener.class);
-// @PrePersist
- public void prePersist(Auditable auditable) {
- Audit audit = auditable.getAudit();
+ // @PrePersist
+ public void prePersist(Auditable auditable) {
+ Audit audit = auditable.getAudit();
- if (audit == null) {
- audit = new Audit();
- auditable.setAudit(audit);
- }
+ if (audit == null) {
+ audit = new Audit();
+ auditable.setAudit(audit);
+ }
- LocalDateTime now = LocalDateTime.now(ZoneOffset.UTC);
- audit.setCreatedOn(now);
- audit.setLastUpdatedOn(now);
+ LocalDateTime now = LocalDateTime.now(ZoneOffset.UTC);
+ audit.setCreatedOn(now);
+ audit.setLastUpdatedOn(now);
// audit.setCreatedBy(LoggedUser.get()); // TODO where to get the user from
- if (LOGGER.isDebugEnabled()) {
- LOGGER.debug("prePersist executed");
- }
-
+ if (logger.isDebugEnabled()) {
+ logger.debug("prePersist executed");
}
-// @PreUpdate
- public void preUpdate(Auditable auditable) {
- Audit audit = auditable.getAudit();
+ }
- LocalDateTime now = LocalDateTime.now(ZoneOffset.UTC);
-// Date now = DateUtil.getCurrentTimeInUTC();
- audit.setLastUpdatedOn(now);
-// audit.setUpdatedBy(LoggedUser.get()); // TODO where to get the user from
- if (LOGGER.isDebugEnabled()) {
- LOGGER.debug("preUpdate executed");
- }
+ // @PreUpdate
+ public void preUpdate(Auditable auditable) {
+ Audit audit = auditable.getAudit();
+ // TODO where to get the user from
+ LocalDateTime now = LocalDateTime.now(ZoneOffset.UTC);
+ audit.setLastUpdatedOn(now);
+ if (logger.isDebugEnabled()) {
+ logger.debug("preUpdate executed");
}
+ }
+
}
diff --git a/db/src/main/resources/log4j.xml b/db/src/main/resources/log4j.xml
deleted file mode 100644
index b9c3be9..0000000
--- a/db/src/main/resources/log4j.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/jeeutil/src/main/java/de/muehlencord/shared/jeeutil/restexfw/APIErrorResponse.java b/jeeutil/src/main/java/de/muehlencord/shared/jeeutil/restexfw/APIErrorResponse.java
index 6d315ab..814ada4 100644
--- a/jeeutil/src/main/java/de/muehlencord/shared/jeeutil/restexfw/APIErrorResponse.java
+++ b/jeeutil/src/main/java/de/muehlencord/shared/jeeutil/restexfw/APIErrorResponse.java
@@ -60,14 +60,14 @@ public class APIErrorResponse {
this.rootCause = rootCauseMessage;
}
- public APIErrorResponse(Exception exception, Locale locale) {
+ public APIErrorResponse(Exception exception) {
this.status = Response.Status.INTERNAL_SERVER_ERROR;
this.errorCode = "0";
this.message = exception.getLocalizedMessage();
this.rootCause = null;
}
- public APIErrorResponse(Exception exception, Locale locale, Throwable th) {
+ public APIErrorResponse(Exception exception, Throwable th) {
this.status = Response.Status.INTERNAL_SERVER_ERROR;
this.errorCode = "0";
this.message = exception.getLocalizedMessage();
diff --git a/jeeutil/src/main/java/de/muehlencord/shared/jeeutil/restexfw/APIException.java b/jeeutil/src/main/java/de/muehlencord/shared/jeeutil/restexfw/APIException.java
index f55258b..12bdce7 100644
--- a/jeeutil/src/main/java/de/muehlencord/shared/jeeutil/restexfw/APIException.java
+++ b/jeeutil/src/main/java/de/muehlencord/shared/jeeutil/restexfw/APIException.java
@@ -31,7 +31,7 @@ public class APIException extends RuntimeException {
public static final String HTTP_HEADER_X_ROOT_CAUSE = "X-Root-Cause";
private static final long serialVersionUID = -4356132354448841938L;
- private final Response httpResponse;
+ private final transient Response httpResponse;
public APIException(APIError apiError, Locale locale) {
httpResponse = createHttpResponse(new APIErrorResponse(apiError, locale));
@@ -49,8 +49,8 @@ public class APIException extends RuntimeException {
httpResponse = createHttpResponse(new APIErrorResponse(apiError, new Locale(locale), rootCause));
}
- public APIException(Exception exception, Locale locale) {
- httpResponse = createHttpResponse(new APIErrorResponse(exception, locale));
+ public APIException(Exception exception) {
+ httpResponse = createHttpResponse(new APIErrorResponse(exception));
}
public Response getHttpResponse() {
diff --git a/jeeutil/src/main/java/de/muehlencord/shared/jeeutil/restexfw/APIExceptionInterceptor.java b/jeeutil/src/main/java/de/muehlencord/shared/jeeutil/restexfw/APIExceptionInterceptor.java
index e774836..b4c031b 100644
--- a/jeeutil/src/main/java/de/muehlencord/shared/jeeutil/restexfw/APIExceptionInterceptor.java
+++ b/jeeutil/src/main/java/de/muehlencord/shared/jeeutil/restexfw/APIExceptionInterceptor.java
@@ -1,4 +1,4 @@
-/*
+/*
* Copyright 2019 Joern Muehlencord (joern@muehlencord.de).
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -25,46 +25,41 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
- *
* @author Joern Muehlencord (joern@muehlencord.de)
*/
public class APIExceptionInterceptor {
- private static final Logger LOGGER = LoggerFactory.getLogger(APIExceptionInterceptor.class);
+ private static final Logger logger = LoggerFactory.getLogger(APIExceptionInterceptor.class);
- @Inject
- Locale locale;
+ @Inject
+ Locale locale;
- @AroundInvoke
- public Object handleException(InvocationContext context) {
- Object proceedResponse;
- try {
- // continue to execute context
- // if an exception is thrown during processing, this is passed in to the catch block below
- proceedResponse = context.proceed();
- } catch (Exception ex) {
- if (LOGGER.isDebugEnabled()) {
- LOGGER.debug(ex.getMessage());
- LOGGER.debug("Detailed stacktrace", new Object[]{ex});
- }
-
- Response errorResponse;
- if (ex instanceof APIException) {
- errorResponse = ((APIException) ex).getHttpResponse();
- } else if (ex.getCause() instanceof APIException) {
- errorResponse = ((APIException) ex.getCause()).getHttpResponse();
- } else if (ex instanceof ConstraintViolationException) {
- // this exception is handled via the ConstraintViolationMapper
- throw (ConstraintViolationException) ex;
- } else if (ex.getCause() instanceof ConstraintViolationException) {
- // this exception is handled via the ConstraintViolationMapper
- throw (ConstraintViolationException) ex.getCause();
- } else {
- errorResponse = new APIException(ex, locale).getHttpResponse();
- }
- return errorResponse;
- }
- return proceedResponse;
+ @AroundInvoke
+ public Object handleException(InvocationContext context) {
+ Object proceedResponse;
+ try {
+ // continue to execute context
+ // if an exception is thrown during processing, this is passed in to the catch block below
+ proceedResponse = context.proceed();
+ } catch (Exception ex) {
+ logger.debug(ex.getMessage(), ex);
+ Response errorResponse;
+ if (ex instanceof APIException) {
+ errorResponse = ((APIException) ex).getHttpResponse();
+ } else if (ex.getCause() instanceof APIException) {
+ errorResponse = ((APIException) ex.getCause()).getHttpResponse();
+ } else if (ex instanceof ConstraintViolationException) {
+ // this exception is handled via the ConstraintViolationMapper
+ throw (ConstraintViolationException) ex;
+ } else if (ex.getCause() instanceof ConstraintViolationException) {
+ // this exception is handled via the ConstraintViolationMapper
+ throw (ConstraintViolationException) ex.getCause();
+ } else {
+ errorResponse = new APIException(ex).getHttpResponse();
+ }
+ return errorResponse;
}
+ return proceedResponse;
+ }
}
diff --git a/network/pom.xml b/network/pom.xml
index cfed573..8ff595f 100644
--- a/network/pom.xml
+++ b/network/pom.xml
@@ -1,4 +1,3 @@
-
-
- 4.0.0
+
+ shared-network
- de.muehlencord.shared
- shared-network
+
+ ${project.artifactId}
+
+
+
+ junit-jupiter-engine
+ org.junit.jupiter
+ test
+
+
+ slf4j-api
+ org.slf4j
+ provided
+
+
+ slf4j-jdk14
+ org.slf4j
+ test
+
+
+ shared-util
+ de.muehlencord.shared
+ jar
+
+
+
+ javax.mail
+ com.sun.mail
+
+
+ ews-java-api
+ com.microsoft.ews-java-api
+
+
+
+ commons-net
+ commons-net
+ compile
+
+
+
+ jaxws-api
+ javax.xml.ws
+ test
+ 2.3.1
+
+
+ de.muehlencord.shared
+ 4.0.0
+ shared-network
+
+ jar
+
+
+ shared
+ de.muehlencord
1.2-SNAPSHOT
- jar
- shared-network
-
-
- shared
- de.muehlencord
- 1.2-SNAPSHOT
-
-
- http://maven.apache.org
-
- UTF-8
-
-
-
- ${project.artifactId}
-
+
+
+ UTF-8
+
-
-
- org.junit.jupiter
- junit-jupiter-engine
- test
-
-
- org.slf4j
- slf4j-api
- provided
-
-
- org.slf4j
- slf4j-log4j12
- test
-
-
- de.muehlencord.shared
- shared-util
- jar
-
-
-
- com.sun.mail
- javax.mail
-
-
- com.microsoft.ews-java-api
- ews-java-api
-
-
-
- commons-net
- commons-net
- compile
-
-
-
- javax.xml.ws
- jaxws-api
- 2.3.1
- test
-
-
+ http://maven.apache.org
+
+ 1.2-SNAPSHOT
diff --git a/network/src/main/java/de/muehlencord/shared/network/CidrTool.java b/network/src/main/java/de/muehlencord/shared/network/CidrTool.java
index a67ad0f..8c14978 100644
--- a/network/src/main/java/de/muehlencord/shared/network/CidrTool.java
+++ b/network/src/main/java/de/muehlencord/shared/network/CidrTool.java
@@ -1,4 +1,4 @@
-/*
+/*
* Copyright 2019 Joern Muehlencord (joern@muehlencord.de).
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -19,74 +19,77 @@ import static java.lang.Long.valueOf;
import static java.lang.Math.floor;
import static java.lang.Math.log;
import static java.lang.Math.pow;
+
import java.util.ArrayList;
import java.util.List;
/**
- *
* @author Joern Muehlencord (joern@muehlencord.de)
*/
public class CidrTool {
-
- public static List rangeToCidrList(String startIp, String endIp) {
- long start = ipToLong(startIp);
- long end = ipToLong(endIp);
- ArrayList pairs = new ArrayList<>();
- while (end >= start) {
- byte maxsize = 32;
- while (maxsize > 0) {
- long mask = CIDR2MASK[ maxsize - 1];
- long maskedBase = start & mask;
+ private static final int[] CIDR2MASK = new int[]{0x00000000, 0x80000000,
+ 0xC0000000, 0xE0000000, 0xF0000000, 0xF8000000, 0xFC000000,
+ 0xFE000000, 0xFF000000, 0xFF800000, 0xFFC00000, 0xFFE00000,
+ 0xFFF00000, 0xFFF80000, 0xFFFC0000, 0xFFFE0000, 0xFFFF0000,
+ 0xFFFF8000, 0xFFFFC000, 0xFFFFE000, 0xFFFFF000, 0xFFFFF800,
+ 0xFFFFFC00, 0xFFFFFE00, 0xFFFFFF00, 0xFFFFFF80, 0xFFFFFFC0,
+ 0xFFFFFFE0, 0xFFFFFFF0, 0xFFFFFFF8, 0xFFFFFFFC, 0xFFFFFFFE,
+ 0xFFFFFFFF};
- if (maskedBase != start) {
- break;
- }
+ private CidrTool() {
+ // hide constructor
+ }
- maxsize--;
- }
- double x = log(end - start + 1) / log(2);
- byte maxdiff = (byte) (32 - floor(x));
- if (maxsize < maxdiff) {
- maxsize = maxdiff;
- }
- String ip = longToIP(start);
- pairs.add(ip + "/" + maxsize);
- start += pow(2, (32 - maxsize));
- }
- return pairs;
- }
-
-
- private static final int[] CIDR2MASK = new int[]{0x00000000, 0x80000000,
- 0xC0000000, 0xE0000000, 0xF0000000, 0xF8000000, 0xFC000000,
- 0xFE000000, 0xFF000000, 0xFF800000, 0xFFC00000, 0xFFE00000,
- 0xFFF00000, 0xFFF80000, 0xFFFC0000, 0xFFFE0000, 0xFFFF0000,
- 0xFFFF8000, 0xFFFFC000, 0xFFFFE000, 0xFFFFF000, 0xFFFFF800,
- 0xFFFFFC00, 0xFFFFFE00, 0xFFFFFF00, 0xFFFFFF80, 0xFFFFFFC0,
- 0xFFFFFFE0, 0xFFFFFFF0, 0xFFFFFFF8, 0xFFFFFFFC, 0xFFFFFFFE,
- 0xFFFFFFFF};
+ public static List rangeToCidrList(String startIp, String endIp) {
+ long start = ipToLong(startIp);
+ long end = ipToLong(endIp);
- private static long ipToLong(String strIP) {
- long[] ip = new long[4];
- String[] ipSec = strIP.split("\\.");
- for (int k = 0; k < 4; k++) {
- ip[k] = valueOf(ipSec[k]);
+ ArrayList pairs = new ArrayList<>();
+ while (end >= start) {
+ byte maxsize = 32;
+ while (maxsize > 0) {
+ long mask = CIDR2MASK[maxsize - 1];
+ long maskedBase = start & mask;
+
+ if (maskedBase != start) {
+ break;
}
- return (ip[0] << 24) + (ip[1] << 16) + (ip[2] << 8) + ip[3];
+ maxsize--;
+ }
+ double x = log(end - start + 1D) / log(2);
+ byte maxdiff = (byte) (32 - floor(x));
+ if (maxsize < maxdiff) {
+ maxsize = maxdiff;
+ }
+ String ip = longToIP(start);
+ pairs.add(ip + "/" + maxsize);
+ start += pow(2, (32 - maxsize));
+ }
+ return pairs;
+ }
+
+ private static long ipToLong(String strIP) {
+ long[] ip = new long[4];
+ String[] ipSec = strIP.split("\\.");
+ for (int k = 0; k < 4; k++) {
+ ip[k] = valueOf(ipSec[k]);
}
- private static String longToIP(long longIP) {
- StringBuilder sb = new StringBuilder("");
- sb.append(String.valueOf(longIP >>> 24));
- sb.append(".");
- sb.append(String.valueOf((longIP & 0x00FFFFFF) >>> 16));
- sb.append(".");
- sb.append(String.valueOf((longIP & 0x0000FFFF) >>> 8));
- sb.append(".");
- sb.append(String.valueOf(longIP & 0x000000FF));
+ return (ip[0] << 24) + (ip[1] << 16) + (ip[2] << 8) + ip[3];
+ }
- return sb.toString();
- }
+ private static String longToIP(long longIP) {
+ StringBuilder sb = new StringBuilder("");
+ sb.append(String.valueOf(longIP >>> 24));
+ sb.append(".");
+ sb.append(String.valueOf((longIP & 0x00FFFFFF) >>> 16));
+ sb.append(".");
+ sb.append(String.valueOf((longIP & 0x0000FFFF) >>> 8));
+ sb.append(".");
+ sb.append(String.valueOf(longIP & 0x000000FF));
+
+ return sb.toString();
+ }
}
diff --git a/network/src/main/java/de/muehlencord/shared/network/whois/ArinWhoisParser.java b/network/src/main/java/de/muehlencord/shared/network/whois/ArinWhoisParser.java
index 6c1bb8a..910c2d4 100644
--- a/network/src/main/java/de/muehlencord/shared/network/whois/ArinWhoisParser.java
+++ b/network/src/main/java/de/muehlencord/shared/network/whois/ArinWhoisParser.java
@@ -17,6 +17,7 @@ package de.muehlencord.shared.network.whois;
import static de.muehlencord.shared.network.CidrTool.rangeToCidrList;
import static de.muehlencord.shared.util.StringUtil.getValueBetweenKeywords;
+
import java.text.ParseException;
import java.util.Map;
import org.slf4j.Logger;
@@ -31,7 +32,12 @@ public class ArinWhoisParser extends AbstractWhoisParser implements WhoisParser
/**
* logger object
*/
- private final static Logger LOGGER = LoggerFactory.getLogger(DefaultWhoisParser.class);
+ private static final Logger logger = LoggerFactory.getLogger(ArinWhoisParser.class);
+
+ private static final String START_STRING = "# start";
+ private static final String END_STRING = "# end";
+ private static final String NET_RANGE = "NetRange:";
+ private static final String ORG_NAME = "OrgName:";
/**
* information to be returned
*/
@@ -41,19 +47,19 @@ public class ArinWhoisParser extends AbstractWhoisParser implements WhoisParser
public WhoisInformation parseWhoIsString(String whoisString) throws WhoisException {
whoisInformation = new WhoisInformation();
whoisInformation.setResponseString(whoisString);
- if (whoisString.contains("# start")) { // multiple values
+ if (whoisString.contains(START_STRING)) {
String multipleWhoisString = whoisString;
- while (multipleWhoisString.contains("# start")) {
+ while (multipleWhoisString.contains(START_STRING)) {
String whoisPartString;
try {
- whoisPartString = getValueBetweenKeywords(multipleWhoisString, "# start", "# end");
+ whoisPartString = getValueBetweenKeywords(multipleWhoisString, START_STRING, END_STRING);
} catch (ParseException ex) {
throw new WhoisException("Error while reading whois part elements. Reason: " + ex.getMessage(), ex);
}
analyse(whoisPartString);
- multipleWhoisString = multipleWhoisString.substring(multipleWhoisString.indexOf("# end") + 4);
+ multipleWhoisString = multipleWhoisString.substring(multipleWhoisString.indexOf(END_STRING) + 4);
}
} else {
@@ -78,11 +84,11 @@ public class ArinWhoisParser extends AbstractWhoisParser implements WhoisParser
}
private void analyseBlock(String block) throws WhoisException {
- LOGGER.debug("Start analysing block");
- LOGGER.debug("\n---\n" + block + "\n---\n");
+ logger.debug("Start analysing block");
+ logger.debug("\n---\n{}\n---\n", block);
- if ((block == null) || (block.equals("")) || (!block.contains(" "))) {
- LOGGER.debug("Skippig empty block");
+ if ((block == null) || (!block.contains(" "))) {
+ logger.debug("Skipping empty block");
return;
}
@@ -98,23 +104,24 @@ public class ArinWhoisParser extends AbstractWhoisParser implements WhoisParser
switch (startString) {
- case "NetRange:":
- if (valueMap.containsKey("NetRange:")) {
- String netRange = valueMap.get("NetRange:");
- // convert inetnum to CDIR
- String[] ipAddresses = netRange.split(" "); // TODO - what happens if not 3 parts are found
+ case NET_RANGE:
+ if (valueMap.containsKey(NET_RANGE)) {
+ String netRange = valueMap.get(NET_RANGE);
+ // convert inetnum to CDIR
+ // TODO - what happens if not 3 parts are found
+ String[] ipAddresses = netRange.split(" ");
// FIXME add CDIR notation support
String startIpAddress = ipAddresses[0];
String endIPAddress = ipAddresses[2];
whoisInformation.addNetwork(rangeToCidrList(startIpAddress, endIPAddress));
- LOGGER.info("Network:" + whoisInformation.getNetwork().toString());
+ logger.info("Network: {}", whoisInformation.getNetwork());
} else {
throw new WhoisException("Cannot identify netrange value");
}
break;
- case "OrgName:":
- String orgName = getValue("OrgName:", valueMap);
+ case ORG_NAME:
+ String orgName = getValue(ORG_NAME, valueMap);
String orgId = getValue("OrgId:", valueMap);
String country = getValue("Country:", valueMap);
@@ -125,23 +132,23 @@ public class ArinWhoisParser extends AbstractWhoisParser implements WhoisParser
orgId = orgName;
}
whoisInformation.setNetworkInformation(new NetworkInformation(orgName, orgId, country));
- LOGGER.info("Networkinformation:" + whoisInformation.getNetworkInformation().toString());
+ logger.info("Networkinformation: {}", whoisInformation.getNetworkInformation());
break;
case "OrgAbuseHandle:":
// TODO add abuse handler
- LOGGER.info("Skipping OrgAbuseHandle block");
+ logger.info("Skipping OrgAbuseHandle block");
break;
case "OrgTechHandle:":
// admin person of network server belongs to
- LOGGER.info("Skipping OrgTechHandle block");
+ logger.info("Skipping OrgTechHandle block");
break;
case "#":
- LOGGER.info("Skipping comment block");
+ logger.info("Skipping comment block");
break;
default:
- LOGGER.info("Unknown block found");
+ logger.info("Unknown block found");
}
}
}
diff --git a/network/src/main/java/de/muehlencord/shared/network/whois/DefaultWhoisParser.java b/network/src/main/java/de/muehlencord/shared/network/whois/DefaultWhoisParser.java
index f7a35ae..dd6840e 100644
--- a/network/src/main/java/de/muehlencord/shared/network/whois/DefaultWhoisParser.java
+++ b/network/src/main/java/de/muehlencord/shared/network/whois/DefaultWhoisParser.java
@@ -16,6 +16,7 @@
package de.muehlencord.shared.network.whois;
import static de.muehlencord.shared.network.CidrTool.rangeToCidrList;
+
import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -29,7 +30,7 @@ public class DefaultWhoisParser extends AbstractWhoisParser implements WhoisPars
/**
* logger object
*/
- private final static Logger LOGGER = LoggerFactory.getLogger(DefaultWhoisParser.class);
+ private static final Logger logger = LoggerFactory.getLogger(DefaultWhoisParser.class);
/**
* information to be returned
*/
@@ -56,11 +57,11 @@ public class DefaultWhoisParser extends AbstractWhoisParser implements WhoisPars
}
private void analyseBlock(String block) throws WhoisException {
- LOGGER.debug("Start analysing block");
- LOGGER.debug("\n---\n" + block + "\n---\n");
+ logger.debug("Start analysing block");
+ logger.debug("\n---\n{}\n---\n", block);
- if ((block == null) || (block.equals("")) || (!block.contains(" "))) {
- LOGGER.debug("Skippig empty block");
+ if ((block == null) || (!block.contains(" "))) {
+ logger.debug("Skipping empty block");
return;
}
@@ -76,17 +77,17 @@ public class DefaultWhoisParser extends AbstractWhoisParser implements WhoisPars
case "inetnum:":
String inetnum = getValue("inetnum:", valueMap);
String country = getValue("country:", valueMap);
- String netname = getValue("descr:", valueMap);
- String descr = getValue("netname:", valueMap);
- String parent = getValue("parent:", valueMap);
+ String netname = getValue("netname:", valueMap);
+ String descr = getValue("descr:", valueMap);
if ((inetnum == null) || (country == null)) {
throw new WhoisException("Cannot identify inetnum and/or country value");
}
if (inetnum.contains(" ")) {
- // convert inetnum to CDIR
- String[] ipAddresses = inetnum.split(" "); // TODO - what happens if not 3 parts are found
+ // convert inetnum to CDIR
+ // TODO - what happens if not 3 parts are found
+ String[] ipAddresses = inetnum.split(" ");
// FIXME add CDIR notation support
String startIpAddress = ipAddresses[0];
String endIPAddress = ipAddresses[2];
@@ -95,15 +96,7 @@ public class DefaultWhoisParser extends AbstractWhoisParser implements WhoisPars
whoisInformation.addNetwork(inetnum);
}
- /*
- if (parent != null) {
- whoisInformation.addRootNetwork(parent);
- LOGGER.info("Root network by parent" + whoisInformation.getRootNetwork().toString());
- break;
- }
-*/
-
- LOGGER.info("Network:" + whoisInformation.getNetwork().toString());
+ logger.info("Network: {}", whoisInformation.getNetwork());
whoisInformation.setNetworkInformation(new NetworkInformation(netname, descr, country));
break;
@@ -111,26 +104,26 @@ public class DefaultWhoisParser extends AbstractWhoisParser implements WhoisPars
// get information on level-2 network
String route = getValue("route:", valueMap);
whoisInformation.addRootNetwork(route);
- LOGGER.info("Root network " + whoisInformation.getRootNetwork().toString());
+ logger.info("Root network: {}", whoisInformation.getRootNetwork());
break;
case "role:":
// admin company of network server belongs to
- LOGGER.info("Skipping role block");
+ logger.info("Skipping role block");
break;
case "person:":
// admin person of network server belongs to
- LOGGER.info("Skipping person block");
+ logger.info("Skipping person block");
break;
case "% Information":
case "% Note:":
case "% This":
case "%":
- LOGGER.info("Skipping comment block");
+ logger.info("Skipping comment block");
break;
default:
- LOGGER.info("Unknown block found");
- LOGGER.error(block);
+ logger.info("Unknown block found");
+ logger.error(block);
}
}
}
diff --git a/network/src/test/java/de/muehlencord/shared/network/whois/DefaultWhoisParserTest.java b/network/src/test/java/de/muehlencord/shared/network/whois/DefaultWhoisParserTest.java
new file mode 100644
index 0000000..90a51af
--- /dev/null
+++ b/network/src/test/java/de/muehlencord/shared/network/whois/DefaultWhoisParserTest.java
@@ -0,0 +1,28 @@
+package de.muehlencord.shared.network.whois;
+
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+
+import de.muehlencord.shared.network.BaseTest;
+import org.junit.jupiter.api.Test;
+
+/**
+ * test the default implementation
+ *
+ * @author Joern Muehlencord, 2021-09-22
+ * @since 1.2.0
+ */
+class DefaultWhoisParserTest extends BaseTest {
+
+ @Test
+ void parseWhoIsString() throws Exception {
+ String whoisInformation = this.readContentFromFile("90.63.251.1.txt");
+ DefaultWhoisParser parser = new DefaultWhoisParser();
+ WhoisInformation information = parser.parseWhoIsString(whoisInformation);
+ assertNotNull (information);
+ information.validate();
+ System.out.println ("parseWhoIsString");
+ System.out.println (information.getNetworkInformation().toString());
+ System.out.println (information.getNetwork().toString());
+ System.out.println (information.getRootNetwork().toString());
+ }
+}
diff --git a/network/src/test/resources/de/muehlencord/shared/network/90.63.251.1.txt b/network/src/test/resources/de/muehlencord/shared/network/90.63.251.1.txt
new file mode 100644
index 0000000..45ee135
--- /dev/null
+++ b/network/src/test/resources/de/muehlencord/shared/network/90.63.251.1.txt
@@ -0,0 +1,53 @@
+% This is the RIPE Database query service.
+% The objects are in RPSL format.
+%
+% The RIPE Database is subject to Terms and Conditions.
+% See http://www.ripe.net/db/support/db-terms-conditions.pdf
+
+% Note: this output has been filtered.
+% To receive output for a database update, use the "-B" flag.
+
+% Information related to '90.63.251.0 - 90.63.251.255'
+
+% Abuse contact for '90.63.251.0 - 90.63.251.255' is 'gestionip.ft@orange.com'
+
+inetnum: 90.63.251.0 - 90.63.251.255
+netname: IP2000-ADSL-BAS
+descr: LNAUB658 Aubervilliers Bloc 1
+country: FR
+admin-c: WITR1-RIPE
+tech-c: WITR1-RIPE
+status: ASSIGNED PA
+remarks: for hacking, spamming or security problems send mail to
+remarks: abuse@orange.fr
+mnt-by: FT-BRX
+created: 2015-10-09T11:39:49Z
+last-modified: 2019-10-07T13:05:05Z
+source: RIPE
+
+role: Wanadoo France Technical Role
+address: FRANCE TELECOM/SCR
+address: 48 rue Camille Desmoulins
+address: 92791 ISSY LES MOULINEAUX CEDEX 9
+address: FR
+phone: +33 1 58 88 50 00
+abuse-mailbox: abuse@orange.fr
+admin-c: BRX1-RIPE
+tech-c: BRX1-RIPE
+nic-hdl: WITR1-RIPE
+mnt-by: FT-BRX
+created: 2001-12-04T17:57:08Z
+last-modified: 2013-07-16T14:09:50Z
+source: RIPE # Filtered
+
+% Information related to '90.63.192.0/18AS3215'
+
+route: 90.63.192.0/18
+descr: France Telecom IP2000-ADSL-BAS
+origin: AS3215
+mnt-by: FT-BRX
+created: 2012-12-11T10:12:42Z
+last-modified: 2012-12-11T10:12:42Z
+source: RIPE
+
+% This query was served by the RIPE Database Query Service version 1.101 (ANGUS)
diff --git a/network/src/test/resources/log4j.xml b/network/src/test/resources/log4j.xml
deleted file mode 100644
index e8de847..0000000
--- a/network/src/test/resources/log4j.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/poi-util/pom.xml b/poi-util/pom.xml
index 0caa566..0686089 100644
--- a/poi-util/pom.xml
+++ b/poi-util/pom.xml
@@ -15,41 +15,42 @@ See the License for the specific language governing permissions and
limitations under the License.
-->
-
- 4.0.0
-
- de.muehlencord.shared
- shared-poi-util
+
+ shared-poi-util
+
+
+
+ poi-ooxml
+ org.apache.poi
+
+
+ shared-util
+ de.muehlencord.shared
+
+
+ slf4j-api
+ org.slf4j
+ provided
+
+
+ slf4j-jdk14
+ org.slf4j
+ provided
+
+
+ de.muehlencord.shared
+ 4.0.0
+ shared-poi-util
+
+ jar
+
+
+ shared
+ de.muehlencord
1.2-SNAPSHOT
- jar
-
-
- de.muehlencord
- shared
- 1.2-SNAPSHOT
-
-
- shared-poi-util
-
-
-
-
- org.apache.poi
- poi-ooxml
-
-
- de.muehlencord.shared
- shared-util
-
-
- org.slf4j
- slf4j-api
- provided
-
-
- org.slf4j
- slf4j-log4j12
- provided
-
-
-
\ No newline at end of file
+
+
+
+ 1.2-SNAPSHOT
+
diff --git a/pom.xml b/pom.xml
index ed20ee7..5efeacf 100644
--- a/pom.xml
+++ b/pom.xml
@@ -15,393 +15,397 @@ See the License for the specific language governing permissions and
limitations under the License.
-->
-
- 4.0.0
- de.muehlencord
- shared
- 1.2-SNAPSHOT
- pom
- shared
-
-
- configuration
- network
- util
- jeeutil
- shiro-faces
- poi-util
- db
-
-
-
- scm:git:https://jomu.timelord.de/git/jomu/shared/
- scm:git:https://jomu.timelord.de/git/jomu/shared/
- https://jomu.timelord.de/git/jomu/shared/
- HEAD
-
-
-
- Gitea
- https://jomu.timelord.de/git/jomu/shared/issues
-
-
-
-
- Apache License, Version 2.0
- http://www.apache.org/licenses/LICENSE-2.0
- repo
-
-
-
-
-
- Joern Muehlencord
- joern@muehlencord.de
-
-
-
-
-
- ossrh
- https://oss.sonatype.org/content/repositories/snapshots
-
-
- ossrh
- https://oss.sonatype.org/service/local/staging/deploy/maven2/
-
-
-
-
-
- UTF-8
- 11
- 11
-
-
-
-
-
- de.muehlencord.shared
- shared-db
- 1.2-SNAPSHOT
- ejb
-
-
- de.muehlencord.shared
- shared-shiro-faces
- 1.2-SNAPSHOT
-
-
- de.muehlencord.shared
- shared-util
- 1.2-SNAPSHOT
-
-
- de.muehlencord.shared
- shared-jeeutil
- 1.2-SNAPSHOT
-
-
- commons-codec
- commons-codec
- 1.15
-
-
- commons-net
- commons-net
- 3.6
-
-
- org.apache.commons
- commons-lang3
- 3.11
-
-
- commons-io
- commons-io
- 2.8.0
-
-
- org.slf4j
- slf4j-api
- 1.7.30
-
-
- org.slf4j
- slf4j-log4j12
- 1.7.30
-
-
- org.slf4j
- jcl-over-slf4j
- 1.7.30
-
-
-
- com.sun.mail
- javax.mail
- 1.6.2
-
-
- com.microsoft.ews-java-api
- ews-java-api
- 2.0
-
-
- com.google.code.gson
- gson
- 2.8.6
-
-
- com.fasterxml.jackson.core
- jackson-annotations
- 2.11.3
- jar
-
-
- com.fasterxml.jackson.core
- jackson-databind
- 2.11.3
- jar
-
-
- com.fasterxml.jackson.datatype
- jackson-datatype-jsr310
- 2.11.3
-
-
- org.apache.shiro
- shiro-core
- 1.7.1
-
-
- org.apache.shiro
- shiro-web
- 1.7.1
-
-
- javax
- javaee-api
- 8.0.1
-
-
- javax
- javaee-web-api
- 8.0.1
- provided
-
-
- com.lambdaworks
- scrypt
- 1.4.0
-
-
- org.bouncycastle
- bcprov-jdk15on
- 1.68
-
-
-
- org.hibernate
- hibernate-core
- 5.4.23.Final
- jar
-
-
- org.primefaces
- primefaces
- 8.0
-
-
- com.github.adminfaces
- admin-template
- 1.2.0
-
-
- org.omnifaces
- omnifaces
- 3.4.1
-
-
- org.apache.poi
- poi-ooxml
- 5.0.0
-
-
- io.fusionauth
- fusionauth-jwt
- 4.1.0
-
+
+ shared
+
+
+
+
+
+ maven-compiler-plugin
+
+ true
+ ${maven.compiler.source}
+ ${maven.compiler.target}
+
+ org.apache.maven.plugins
+ 3.8.1
+
-
-
- org.projectlombok
- lombok
- provided
- 1.18.16
-
-
-
-
- org.junit.jupiter
- junit-jupiter-engine
- 5.7.0
- test
-
-
-
-
-
-
-
- release
-
-
-
-
- org.sonatype.plugins
- nexus-staging-maven-plugin
- 1.6.8
- true
-
- ossrh
- https://oss.sonatype.org/
- true
-
-
-
-
-
- org.apache.maven.plugins
- maven-source-plugin
- 3.1.0
-
-
- attach-sources
-
- jar-no-fork
-
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-javadoc-plugin
- 3.1.1
-
-
- attach-javadocs
-
- jar
-
-
-
-
-
-
-
- org.codehaus.mojo
- license-maven-plugin
- 1.14
-
-
- download-licenses
- generate-resources
-
- download-licenses
- add-third-party
-
-
- ${licenses.dir}
- ${licenses.dir}
-
- The Apache Software License, Version 2.0|Apache 2|Apache License, Version 2.0|Apache Public License 2.0
-
-
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-gpg-plugin
- 1.6
-
-
- sign-artifacts
- verify
-
- sign
-
-
-
-
- 993245E2EC7608BB
-
-
-
-
-
-
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
- 3.8.1
-
- ${maven.compiler.source}
- ${maven.compiler.target}
- true
-
-
-
-
-
- org.apache.maven.plugins
- maven-ejb-plugin
- 3.0.1
-
-
-
-
- maven-release-plugin
- 2.5.3
-
-
-
-
- org.apache.maven.plugins
- maven-surefire-plugin
- 2.22.2
-
-
-
-
-
+
+
+ maven-ejb-plugin
+ org.apache.maven.plugins
+ 3.0.1
+
+
+
+
+ maven-release-plugin
+ 2.5.3
+
+
+
+
+ maven-surefire-plugin
+ org.apache.maven.plugins
+ 2.22.2
+
+
+
+
+
+
+
+ maven-compiler-plugin
+ org.apache.maven.plugins
+
+
+ maven-release-plugin
+
+ v@{project.version}
+
+ 2.5.3
+
+
+ maven-surefire-plugin
+ org.apache.maven.plugins
+
+
+
+
+
+
+ shared-db
+ de.muehlencord.shared
+ ejb
+ ${project.version}
+
+
+ shared-shiro-faces
+ de.muehlencord.shared
+ ${project.version}
+
+
+ shared-util
+ de.muehlencord.shared
+ ${project.version}
+
+
+ shared-jeeutil
+ de.muehlencord.shared
+ ${project.version}
+
+
+ commons-codec
+ commons-codec
+ 1.15
+
+
+ commons-net
+ commons-net
+ 3.8.0
+
+
+ commons-lang3
+ org.apache.commons
+ 3.12.0
+
+
+ commons-io
+ commons-io
+ 2.11.0
+
+
+ slf4j-api
+ org.slf4j
+ ${slf4j.version}
+
+
+ slf4j-jdk14
+ org.slf4j
+ ${slf4j.version}
+
+
+ jcl-over-slf4j
+ org.slf4j
+ ${slf4j.version}
+
+
+
+ javax.mail
+ com.sun.mail
+ 1.6.2
+
+
+ ews-java-api
+ com.microsoft.ews-java-api
+ 2.0
+
+
+ gson
+ com.google.code.gson
+ 2.8.9
+
+
+ jackson-annotations
+ com.fasterxml.jackson.core
+ jar
+ ${jackson.version}
+
+
+ jackson-databind
+ com.fasterxml.jackson.core
+ jar
+ ${jackson.version}
+
+
+ jackson-datatype-jsr310
+ com.fasterxml.jackson.datatype
+ ${jackson.version}
+
+
+ shiro-core
+ org.apache.shiro
+ 1.7.1
+
+
+ shiro-web
+ org.apache.shiro
+ 1.7.1
+
+
+ javaee-api
+ javax
+ 8.0.1
+
+
+ javaee-web-api
+ javax
+ provided
+ 8.0.1
+
+
+ scrypt
+ com.lambdaworks
+ 1.4.0
+
+
+ bcprov-jdk15on
+ org.bouncycastle
+ 1.68
+
+
+
+ hibernate-core
+ org.hibernate
+ jar
+ 5.4.23.Final
+
+
+ primefaces
+ org.primefaces
+ 10.0.0
+
+
+ admin-template
+ com.github.adminfaces
+ 1.3.0
+
+
+ omnifaces
+ org.omnifaces
+ 3.4.1
+
+
+ poi-ooxml
+ org.apache.poi
+ 5.0.0
+
+
+ fusionauth-jwt
+ io.fusionauth
+ 4.1.0
+
+
+
+
+ lombok
+ org.projectlombok
+ provided
+ 1.18.22
+
+
+
+
+ junit-jupiter-engine
+ org.junit.jupiter
+ test
+ 5.8.1
+
+
+
+
+
+ joern@muehlencord.de
+ Joern Muehlencord
+
+
+
+
+ ossrh
+ https://oss.sonatype.org/service/local/staging/deploy/maven2/
+
+
+ ossrh
+ https://oss.sonatype.org/content/repositories/snapshots
+
+
+ de.muehlencord
+
+
+ Gitea
+ https://jomu.timelord.de/git/jomu/shared/issues
+
+
+
+
+ repo
+ Apache License, Version 2.0
+ http://www.apache.org/licenses/LICENSE-2.0
+
+
+
+ 4.0.0
+
+
+ configuration
+ network
+ util
+ jeeutil
+ shiro-faces
+ poi-util
+ db
+
+
+ shared
+
+ pom
+
+
+
+
-
- org.apache.maven.plugins
- maven-compiler-plugin
-
-
- maven-release-plugin
- 2.5.3
+
+
+ nexus-staging-maven-plugin
+
+ true
+ https://oss.sonatype.org/
+ ossrh
+
+ true
+ org.sonatype.plugins
+ 1.6.8
+
+
+
+
+ maven-source-plugin
+
+
+
+ jar-no-fork
+
+ attach-sources
+
+
+ org.apache.maven.plugins
+ 3.1.0
+
+
+
+
+ maven-javadoc-plugin
+
+
+
+ jar
+
+ attach-javadocs
+
+
+ org.apache.maven.plugins
+ 3.1.1
+
+
+
+
+ license-maven-plugin
+
+
- v@{project.version}
+
+ The Apache Software License, Version 2.0|Apache 2|Apache License, Version 2.0|Apache Public License 2.0
+
+ ${licenses.dir}
+ ${licenses.dir}
-
-
- org.apache.maven.plugins
- maven-surefire-plugin
-
+
+ download-licenses
+ add-third-party
+
+ download-licenses
+ generate-resources
+
+
+ org.codehaus.mojo
+ 1.14
+
+
+
+
+ maven-gpg-plugin
+
+ 993245E2EC7608BB
+
+
+
+
+ sign
+
+ sign-artifacts
+ verify
+
+
+ org.apache.maven.plugins
+ 1.6
+
-
-
+
+ release
+
+
+
+
+
+ 2.13.0
+ 11
+ 11
+
+ UTF-8
+ 1.7.32
+
+
+
+
+ scm:git:https://jomu.timelord.de/git/jomu/shared/
+ scm:git:https://jomu.timelord.de/git/jomu/shared/
+ HEAD
+ https://jomu.timelord.de/git/jomu/shared/
+
+
+ 1.2-SNAPSHOT
+
diff --git a/shiro-faces/src/main/java/de/muehlencord/shirofaces/tags/AbstractAccessControlTag.java b/shiro-faces/src/main/java/de/muehlencord/shirofaces/tags/AbstractAccessControlTag.java
index 7a663ca..3a2230d 100644
--- a/shiro-faces/src/main/java/de/muehlencord/shirofaces/tags/AbstractAccessControlTag.java
+++ b/shiro-faces/src/main/java/de/muehlencord/shirofaces/tags/AbstractAccessControlTag.java
@@ -28,7 +28,7 @@ public abstract class AbstractAccessControlTag extends AbstractTag {
protected TagAttribute attribute;
- public AbstractAccessControlTag(TagConfig config) {
+ protected AbstractAccessControlTag(TagConfig config) {
super(config);
}
diff --git a/shiro-faces/src/main/java/de/muehlencord/shirofaces/tags/AbstractAuthenticationTag.java b/shiro-faces/src/main/java/de/muehlencord/shirofaces/tags/AbstractAuthenticationTag.java
index 7c240cf..a7665ad 100644
--- a/shiro-faces/src/main/java/de/muehlencord/shirofaces/tags/AbstractAuthenticationTag.java
+++ b/shiro-faces/src/main/java/de/muehlencord/shirofaces/tags/AbstractAuthenticationTag.java
@@ -1,4 +1,4 @@
-/*
+/*
* Copyright 2019 Joern Muehlencord (joern@muehlencord.de).
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -19,42 +19,41 @@ import java.io.IOException;
import javax.faces.component.UIComponent;
import javax.faces.view.facelets.FaceletContext;
import javax.faces.view.facelets.TagConfig;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
- *
* @author Joern Muehlencord (joern@muehlencord.de)
*/
public abstract class AbstractAuthenticationTag extends AbstractTag {
- protected AbstractAuthenticationTag(TagConfig config) {
- super(config);
- }
-
- protected abstract boolean isAuthenticated();
-
- protected boolean applyTagHandler() {
- if (isAuthenticated()) {
- if (LOGGER.isTraceEnabled()) {
- LOGGER.trace("Authentication verified, tag will be evaluated");
- }
- return true;
- } else {
- if (LOGGER.isTraceEnabled()) {
- LOGGER.trace ("Authentifaction verification failed, tag will not be evaluated");
- }
- return false;
- }
- }
+ private static final Logger logger = LoggerFactory.getLogger(AbstractAuthenticationTag.class);
- @Override
- public void apply(FaceletContext fc, UIComponent uic) throws IOException {
- if (applyTagHandler()) {
- this.nextHandler.apply(fc, uic);
- }
+ protected AbstractAuthenticationTag(TagConfig config) {
+ super(config);
+ }
+
+ protected abstract boolean isAuthenticated();
+
+ protected boolean applyTagHandler() {
+ if (isAuthenticated()) {
+ if (logger.isTraceEnabled()) {
+ logger.trace("Authentication verified, tag will be evaluated");
+ }
+ return true;
+ } else {
+ if (logger.isTraceEnabled()) {
+ logger.trace("Authentifaction verification failed, tag will not be evaluated");
+ }
+ return false;
}
-
-
-
-
-
+ }
+
+ @Override
+ public void apply(FaceletContext fc, UIComponent uic) throws IOException {
+ if (applyTagHandler()) {
+ this.nextHandler.apply(fc, uic);
+ }
+ }
+
}
diff --git a/shiro-faces/src/main/java/de/muehlencord/shirofaces/tags/AbstractTag.java b/shiro-faces/src/main/java/de/muehlencord/shirofaces/tags/AbstractTag.java
index d0cf797..355da1c 100644
--- a/shiro-faces/src/main/java/de/muehlencord/shirofaces/tags/AbstractTag.java
+++ b/shiro-faces/src/main/java/de/muehlencord/shirofaces/tags/AbstractTag.java
@@ -19,8 +19,6 @@ import javax.faces.view.facelets.TagConfig;
import javax.faces.view.facelets.TagHandler;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.subject.Subject;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
/**
*
@@ -28,9 +26,7 @@ import org.slf4j.LoggerFactory;
*/
public abstract class AbstractTag extends TagHandler {
- protected static final Logger LOGGER = LoggerFactory.getLogger(AbstractTag.class);
-
- public AbstractTag(TagConfig config) {
+ protected AbstractTag(TagConfig config) {
super(config);
}
diff --git a/util/src/main/java/de/muehlencord/shared/util/StreamUtils.java b/util/src/main/java/de/muehlencord/shared/util/StreamUtils.java
index 07a97fb..eb3dd69 100644
--- a/util/src/main/java/de/muehlencord/shared/util/StreamUtils.java
+++ b/util/src/main/java/de/muehlencord/shared/util/StreamUtils.java
@@ -24,29 +24,28 @@ import java.util.stream.Collector;
import java.util.stream.Collectors;
/**
- *
* @author Joern Muehlencord (joern@muehlencord.de)
*/
-public class StreamUtils {
+public interface StreamUtils {
- public static Collector singletonCollector() {
- return getCollectorFunction(getListTSingleFunction());
- }
+ default Collector singletonCollector() {
+ return getCollectorFunction(getListTSingleFunction());
+ }
- private static Collector getCollectorFunction(Function, T> listTFunction) {
- return Collectors.collectingAndThen(Collectors.toList(), listTFunction);
- }
+ default Collector getCollectorFunction(Function, T> listTFunction) {
+ return Collectors.collectingAndThen(Collectors.toList(), listTFunction);
+ }
- private static Function, T> getListTSingleFunction() {
- return list -> {
- if (list == null) {
- throw new IllegalStateException("List must not be null");
- }
- if (list.size() != 1) {
- throw new IllegalStateException("List contains not exactly one element (size=" + list.size() + ")");
- }
- return list.get(0);
- };
- }
+ default Function, T> getListTSingleFunction() {
+ return list -> {
+ if (list == null) {
+ throw new IllegalStateException("List must not be null");
+ }
+ if (list.size() != 1) {
+ throw new IllegalStateException("List contains not exactly one element (size=" + list.size() + ")");
+ }
+ return list.get(0);
+ };
+ }
}
diff --git a/util/src/main/java/de/muehlencord/shared/util/StringEncodingException.java b/util/src/main/java/de/muehlencord/shared/util/StringEncodingException.java
index 8012850..a770ab5 100644
--- a/util/src/main/java/de/muehlencord/shared/util/StringEncodingException.java
+++ b/util/src/main/java/de/muehlencord/shared/util/StringEncodingException.java
@@ -21,7 +21,7 @@ package de.muehlencord.shared.util;
*/
public class StringEncodingException extends Exception {
- protected final static String DEFAULT_MSG = "An encoding exception occurred";
+ protected static final String DEFAULT_MSG = "An encoding exception occurred";
/**
* Creates a new instance of
diff --git a/util/src/test/java/de/muehlencord/shared/util/StringEncodingExceptionTest.java b/util/src/test/java/de/muehlencord/shared/util/StringEncodingExceptionTest.java
index 3f73dd5..f0dab3e 100644
--- a/util/src/test/java/de/muehlencord/shared/util/StringEncodingExceptionTest.java
+++ b/util/src/test/java/de/muehlencord/shared/util/StringEncodingExceptionTest.java
@@ -1,4 +1,4 @@
-/*
+/*
* Copyright 2019 Joern Muehlencord (joern@muehlencord.de).
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -15,38 +15,38 @@
*/
package de.muehlencord.shared.util;
-import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
import org.junit.jupiter.api.Test;
/**
- *
* @author Joern Muehlencord (joern@muehlencord.de)
*/
-public class StringEncodingExceptionTest {
-
+class StringEncodingExceptionTest {
+
+
+ @Test
+ void testDefaultConstructor() {
+ StringEncodingException ex = new StringEncodingException();
+ assertEquals(StringEncodingException.DEFAULT_MSG, ex.getMessage());
+ }
+
+ @Test
+ void testMessageConstructor() {
+ String msg = "Test message";
+ StringEncodingException ex = new StringEncodingException(msg);
+ assertEquals(ex.getMessage(), msg);
+ }
+
+
+ @Test
+ void testRootcauseConstructor() {
+ String msg = "Test message";
+ StringEncodingException rootCause = new StringEncodingException();
+ StringEncodingException ex = new StringEncodingException(msg, rootCause);
+ assertEquals(ex.getMessage(), msg);
+ assertEquals(ex.getCause(), rootCause);
+ }
+
- @Test
- public void testDefaultConstructor() {
- StringEncodingException ex = new StringEncodingException();
- assertTrue (ex.getMessage().equals (StringEncodingException.DEFAULT_MSG));
- }
-
- @Test
- public void testMessageConstructor() {
- String msg = "Test message";
- StringEncodingException ex = new StringEncodingException(msg);
- assertTrue (ex.getMessage().equals (msg));
- }
-
-
- @Test
- public void testRootcauseConstructor() {
- String msg = "Test message";
- StringEncodingException rootCause = new StringEncodingException();
- StringEncodingException ex = new StringEncodingException(msg, rootCause);
- assertTrue (ex.getMessage().equals (msg));
- assertTrue (ex.getCause().equals (rootCause));
- }
-
-
}