diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 00000000..8e01c3cb --- /dev/null +++ b/.editorconfig @@ -0,0 +1,1168 @@ +[*] +charset = utf-8 +end_of_line = lf +indent_size = 4 +indent_style = space +insert_final_newline = false +max_line_length = 120 +tab_width = 4 +ij_continuation_indent_size = 8 +ij_formatter_off_tag = @formatter:off +ij_formatter_on_tag = @formatter:on +ij_formatter_tags_enabled = false +ij_smart_tabs = false +ij_visual_guides = none +ij_wrap_on_typing = false + +[*.css] +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_block_comment_add_space = false +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] +indent_size = 2 +ij_gherkin_keep_indents_on_empty_lines = false + +[*.gsp] +ij_gsp_keep_indents_on_empty_lines = false + +[*.haml] +indent_size = 2 +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 = false +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 = true +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 = true +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 = off +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 = off +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 = false +ij_java_binary_operation_wrap = off +ij_java_blank_lines_after_anonymous_class_header = 0 +ij_java_blank_lines_after_class_header = 0 +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_add_space = false +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 = off +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 = 99 +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 = never +ij_java_doc_add_blank_line_after_description = true +ij_java_doc_add_blank_line_after_param_comments = false +ij_java_doc_add_blank_line_after_return = false +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 = false +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 = off +ij_java_field_annotation_wrap = split_into_lines +ij_java_finally_on_new_line = false +ij_java_for_brace_force = never +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 = off +ij_java_generate_final_locals = false +ij_java_generate_final_parameters = false +ij_java_if_brace_force = never +ij_java_imports_layout = *, |, java.**, javax.**, |, $* +ij_java_indent_case_from_switch = true +ij_java_insert_inner_class_imports = false +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 = 2 +ij_java_keep_blank_lines_in_declarations = 2 +ij_java_keep_builder_methods_indents = false +ij_java_keep_control_statement_in_one_line = true +ij_java_keep_first_column_comment = false +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 = true +ij_java_line_comment_at_first_column = false +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 = off +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 = off +ij_java_modifier_list_wrap = false +ij_java_names_count_to_use_import_on_demand = 99 +ij_java_new_line_after_lparen_in_record_header = false +ij_java_packages_to_use_import_on_demand = java.awt.*, javax.swing.* +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 = false +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 = false +ij_java_ternary_operation_wrap = off +ij_java_test_name_suffix = Test +ij_java_throws_keyword_wrap = off +ij_java_throws_list_wrap = off +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 = off +ij_java_visibility = public +ij_java_while_brace_force = never +ij_java_while_on_new_line = false +ij_java_wrap_comments = false +ij_java_wrap_first_method_in_call_chain = false +ij_java_wrap_long_lines = false + +[*.less] +indent_size = 2 +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_block_comment_add_space = false +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_line_comment_add_space = false +ij_less_line_comment_at_first_column = 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] +indent_size = 2 +tab_width = 2 +ij_continuation_indent_size = 4 +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] +indent_size = 2 +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_line_comment_add_space = false +ij_sass_line_comment_at_first_column = 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] +indent_size = 2 +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_block_comment_add_space = false +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_line_comment_add_space = false +ij_scss_line_comment_at_first_column = 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] +indent_size = 2 +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 + +[{*.ant,*.fxml,*.jhm,*.jnlp,*.jrxml,*.pom,*.rng,*.tld,*.wadl,*.wsdd,*.wsdl,*.xjb,*.xml,*.xsd,*.xsl,*.xslt,*.xul}] +ij_xml_align_attributes = true +ij_xml_align_text = false +ij_xml_attribute_wrap = normal +ij_xml_block_comment_add_space = false +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 +ij_xml_use_custom_settings = false + +[{*.ats,*.cts,*.mts,*.ts}] +ij_continuation_indent_size = 4 +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_block_comment_add_space = false +ij_typescript_block_comment_at_first_column = true +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 = true +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}] +indent_size = 2 +tab_width = 2 +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_continuation_indent_size = 4 +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 = true +ij_javascript_align_multiline_parameters = true +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 = off +ij_javascript_assignment_wrap = off +ij_javascript_binary_operation_sign_on_next_line = false +ij_javascript_binary_operation_wrap = off +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_block_comment_add_space = false +ij_javascript_block_comment_at_first_column = true +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 = off +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 = never +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 = never +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 = off +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 = never +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 = true +ij_javascript_indent_package_children = 0 +ij_javascript_jsx_attribute_value = braces +ij_javascript_keep_blank_lines_in_code = 2 +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 = off +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 = false +ij_javascript_ternary_operation_wrap = off +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 = never +ij_javascript_while_on_new_line = false +ij_javascript_wrap_comments = false + +[{*.ft,*.vm,*.vsl}] +ij_vtl_keep_indents_on_empty_lines = false + +[{*.gant,*.gradle,*.groovy,*.gson,*.gy}] +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_add_space = false +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_record_parentheses = false +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 + +[{*.gradle.kts,*.kt,*.kts,*.main.kts,*.space.kts}] +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 = normal +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_add_space = false +ij_kotlin_block_comment_at_first_column = true +ij_kotlin_call_parameters_new_line_after_left_paren = true +ij_kotlin_call_parameters_right_paren_on_new_line = true +ij_kotlin_call_parameters_wrap = on_every_item +ij_kotlin_catch_on_new_line = false +ij_kotlin_class_annotation_wrap = split_into_lines +ij_kotlin_code_style_defaults = KOTLIN_OFFICIAL +ij_kotlin_continuation_indent_for_chained_calls = false +ij_kotlin_continuation_indent_for_expression_bodies = false +ij_kotlin_continuation_indent_in_argument_lists = false +ij_kotlin_continuation_indent_in_elvis = false +ij_kotlin_continuation_indent_in_if_conditions = false +ij_kotlin_continuation_indent_in_parameter_lists = false +ij_kotlin_continuation_indent_in_supertype_lists = false +ij_kotlin_else_on_new_line = false +ij_kotlin_enum_constants_wrap = off +ij_kotlin_extends_list_wrap = normal +ij_kotlin_field_annotation_wrap = split_into_lines +ij_kotlin_finally_on_new_line = false +ij_kotlin_if_rparen_on_new_line = true +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 = normal +ij_kotlin_method_parameters_new_line_after_left_paren = true +ij_kotlin_method_parameters_right_paren_on_new_line = true +ij_kotlin_method_parameters_wrap = on_every_item +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 = 1 +ij_kotlin_wrap_first_method_in_call_chain = false + +[{*.har,*.jsb2,*.jsb3,*.json,.babelrc,.eslintrc,.stylelintrc,bowerrc,jest.config}] +indent_size = 2 +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 + +[{*.hcl,*.nomad}] +indent_size = 2 +ij_hcl_array_wrapping = 2 +ij_hcl_keep_blank_lines_in_code = 2 +ij_hcl_keep_indents_on_empty_lines = false +ij_hcl_keep_line_breaks = true +ij_hcl_object_wrapping = 2 +ij_hcl_property_alignment = 0 +ij_hcl_property_line_commenter_character = 0 +ij_hcl_space_after_comma = true +ij_hcl_space_before_comma = false +ij_hcl_spaces_around_assignment_operators = true +ij_hcl_spaces_within_braces = false +ij_hcl_spaces_within_brackets = false +ij_hcl_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_add_space = false +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}] +ij_jsp_jsp_prefer_comma_separated_import_list = false +ij_jsp_keep_indents_on_empty_lines = false + +[{*.jspx,*.tagx}] +ij_jspx_keep_indents_on_empty_lines = false + +[{*.markdown,*.md}] +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}] +indent_size = 2 +tab_width = 2 +ij_continuation_indent_size = 4 +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 + +[{*.tf,*.tfvars}] +indent_size = 2 +ij_hcl-terraform_array_wrapping = 2 +ij_hcl-terraform_keep_blank_lines_in_code = 2 +ij_hcl-terraform_keep_indents_on_empty_lines = false +ij_hcl-terraform_keep_line_breaks = true +ij_hcl-terraform_object_wrapping = 2 +ij_hcl-terraform_property_alignment = 0 +ij_hcl-terraform_property_line_commenter_character = 0 +ij_hcl-terraform_space_after_comma = true +ij_hcl-terraform_space_before_comma = false +ij_hcl-terraform_spaces_around_assignment_operators = true +ij_hcl-terraform_spaces_within_braces = false +ij_hcl-terraform_spaces_within_brackets = false +ij_hcl-terraform_wrap_long_lines = false + +[{*.yaml,*.yml}] +indent_size = 2 +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/conforming/pom.xml b/conforming/pom.xml index a37f55c8..4f86afaf 100644 --- a/conforming/pom.xml +++ b/conforming/pom.xml @@ -239,6 +239,11 @@ + + org.apache.maven.plugins + maven-checkstyle-plugin + + diff --git a/conforming/src/gen/java/org/eclipse/tractusx/agents/conforming/api/AgentApi.java b/conforming/src/gen/java/org/eclipse/tractusx/agents/conforming/api/AgentApi.java index 16534f45..fffe04ab 100644 --- a/conforming/src/gen/java/org/eclipse/tractusx/agents/conforming/api/AgentApi.java +++ b/conforming/src/gen/java/org/eclipse/tractusx/agents/conforming/api/AgentApi.java @@ -16,51 +16,67 @@ // SPDX-License-Identifier: Apache-2.0 package org.eclipse.tractusx.agents.conforming.api; -import org.eclipse.tractusx.agents.conforming.model.CxWarning; -import org.eclipse.tractusx.agents.conforming.model.XmlResultset; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.enums.ParameterIn; import io.swagger.v3.oas.annotations.headers.Header; -import io.swagger.v3.oas.annotations.responses.ApiResponses; -import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; - +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.responses.ApiResponses; +import org.eclipse.tractusx.agents.conforming.model.CxWarning; import org.eclipse.tractusx.agents.conforming.model.JsonResultset; +import org.eclipse.tractusx.agents.conforming.model.XmlResultset; import java.util.List; - -import javax.ws.rs.core.*; -import javax.ws.rs.*; +import javax.ws.rs.Consumes; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; +import javax.ws.rs.core.Application; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.HttpHeaders; +import javax.ws.rs.core.Request; +import javax.ws.rs.core.Response; +import javax.ws.rs.core.SecurityContext; +import javax.ws.rs.core.UriInfo; @Path("/") -@javax.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.JavaJerseyServerCodegen", date = "2023-03-23T11:28:11.277776230Z[GMT]")public abstract class AgentApi { +@javax.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.JavaJerseyServerCodegen", date = "2023-03-23T11:28:11.277776230Z[GMT]") +public abstract class AgentApi { - @Context public SecurityContext securityContext; - @Context public Application application; - @Context public HttpHeaders headers; - @Context public Request request; - @Context public Response response; - @Context public UriInfo uri; + @Context + public SecurityContext securityContext; + @Context + public Application application; + @Context + public HttpHeaders headers; + @Context + public Request request; + @Context + public Response response; + @Context + public UriInfo uri; @GET @Produces({ "application/sparql-results+json", - "application/sparql-results+xml" + "application/sparql-results+xml" }) - @Operation(summary = "Invoke a Skill or Query (Simple)", description = "", tags={ "agent" }) + @Operation(summary = "Invoke a Skill or Query (Simple)", description = "", tags = { "agent" }) @ApiResponses(value = { @ApiResponse(responseCode = "200", description = "The SparQL query has been processed successfully.", content = { @Content(mediaType = "application/sparql-results+json", schema = @Schema(implementation = JsonResultset.class)), @Content(mediaType = "application/sparql-results+xml", schema = @Schema(implementation = XmlResultset.class)) - }), + }), @ApiResponse(responseCode = "203", description = "The SparQL query has been processed successfully but warnings did occur.", - headers = { @Header(name="cx_warnings",schema=@Schema(type="array",implementation=CxWarning.class))}, - content = { - @Content(mediaType = "application/sparql-results+json", schema = @Schema(implementation = JsonResultset.class)), - @Content(mediaType = "application/sparql-results+xml", schema = @Schema(implementation = XmlResultset.class)) - }), + headers = { @Header(name = "cx_warnings", schema = @Schema(type = "array", implementation = CxWarning.class)) }, + content = { + @Content(mediaType = "application/sparql-results+json", schema = @Schema(implementation = JsonResultset.class)), + @Content(mediaType = "application/sparql-results+xml", schema = @Schema(implementation = XmlResultset.class)) + }), @ApiResponse(responseCode = "400", description = "Bad request or malformed SPARQL"), @ApiResponse(responseCode = "500", description = "Fatal error") }) @@ -72,15 +88,15 @@ public abstract Response getAgent( @Parameter(in = ParameterIn.QUERY, description = "The SPARQL query") @QueryParam("query") String query, @Parameter(in = ParameterIn.QUERY, description = "A sample bound parameter 'vin' which opens a new input tuple") - @QueryParam("(vin") String _vin, + @QueryParam("(vin") String vin, @Parameter(in = ParameterIn.QUERY, description = "A sample multi-bound parameter 'troubleCode' which closes the tuple") @QueryParam("troubleCode") List troubleCode) - throws org.eclipse.tractusx.agents.conforming.api.NotFoundException; + throws org.eclipse.tractusx.agents.conforming.api.NotFoundException; @POST @Consumes({ "application/sparql-results+json", "application/sparql-results+xml", "application/sparql-query" }) @Produces({ "application/sparql-results+json", "application/sparql-results+xml" }) - @Operation(summary = "Invoke a Skill or Query (Flexible)", description = "", tags={ "agent" }) + @Operation(summary = "Invoke a Skill or Query (Flexible)", description = "", tags = { "agent" }) @ApiResponses(value = { @ApiResponse(responseCode = "200", description = "The SparQL query has been processed successfully.", content = { @@ -88,7 +104,7 @@ public abstract Response getAgent( @Content(mediaType = "application/sparql-results+xml", schema = @Schema(implementation = XmlResultset.class)) }), @ApiResponse(responseCode = "203", description = "The SparQL query has been processed successfully but warnings did occur.", - headers = { @Header(name="cx_warnings",schema=@Schema(type="array",implementation=CxWarning.class))}, + headers = { @Header(name = "cx_warnings", schema = @Schema(type = "array", implementation = CxWarning.class)) }, content = { @Content(mediaType = "application/sparql-results+json", schema = @Schema(implementation = JsonResultset.class)), @Content(mediaType = "application/sparql-results+xml", schema = @Schema(implementation = XmlResultset.class)) @@ -97,7 +113,7 @@ public abstract Response getAgent( @ApiResponse(responseCode = "500", description = "Fatal error") }) public abstract Response postAgent( - @Parameter(in = ParameterIn.DEFAULT, description = "The body either contains the query or a binding data set when a skill is invoked" ,required=true) + @Parameter(in = ParameterIn.DEFAULT, description = "The body either contains the query or a binding data set when a skill is invoked", required = true) Object body, @Parameter(in = ParameterIn.QUERY, description = "The Target Asset of the Query (targets the complete dataspace if empty)") @QueryParam("asset") String asset, @@ -106,25 +122,25 @@ public abstract Response postAgent( @Parameter(in = ParameterIn.QUERY, description = "The SPARQL query") @QueryParam("query") String query, @Parameter(in = ParameterIn.QUERY, description = "A sample bound parameter 'vin' which opens a new input tuple") - @QueryParam("(vin") String _vin, + @QueryParam("(vin") String vin, @Parameter(in = ParameterIn.QUERY, description = "A sample multi-bound parameter 'troubleCode' which closes the tuple") @QueryParam("troubleCode") List troubleCode) - throws org.eclipse.tractusx.agents.conforming.api.NotFoundException; + throws org.eclipse.tractusx.agents.conforming.api.NotFoundException; @POST @Path("/skill") @Consumes({ "application/sparql-query" }) - @Operation(summary = "Register a Skill", description = "", tags={ "agent" }) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "Skill has been registered"), - @ApiResponse(responseCode = "204", description = "Skill has been updated"), - @ApiResponse(responseCode = "400", description = "Bad request or malformed SPARQL"), - @ApiResponse(responseCode = "500", description = "Fatal error") }) + @Operation(summary = "Register a Skill", description = "", tags = { "agent" }) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "Skill has been registered"), + @ApiResponse(responseCode = "204", description = "Skill has been updated"), + @ApiResponse(responseCode = "400", description = "Bad request or malformed SPARQL"), + @ApiResponse(responseCode = "500", description = "Fatal error") }) public abstract Response postSkill( - @Parameter(in = ParameterIn.DEFAULT, description = "The body either contains the parameterized query" ,required=true) + @Parameter(in = ParameterIn.DEFAULT, description = "The body either contains the parameterized query", required = true) String body, - @Parameter(in = ParameterIn.QUERY, description = "The Target Asset of the Query (targets the complete dataspace if empty)",required=true) + @Parameter(in = ParameterIn.QUERY, description = "The Target Asset of the Query (targets the complete dataspace if empty)", required = true) @QueryParam("asset") String asset) - throws NotFoundException; + throws org.eclipse.tractusx.agents.conforming.api.NotFoundException; } diff --git a/conforming/src/gen/java/org/eclipse/tractusx/agents/conforming/api/ApiException.java b/conforming/src/gen/java/org/eclipse/tractusx/agents/conforming/api/ApiException.java index 43bb4231..76185042 100644 --- a/conforming/src/gen/java/org/eclipse/tractusx/agents/conforming/api/ApiException.java +++ b/conforming/src/gen/java/org/eclipse/tractusx/agents/conforming/api/ApiException.java @@ -16,9 +16,11 @@ // SPDX-License-Identifier: Apache-2.0 package org.eclipse.tractusx.agents.conforming.api; -@javax.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.JavaJerseyServerCodegen", date = "2023-03-23T11:28:11.277776230Z[GMT]")public class ApiException extends Exception{ +@javax.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.JavaJerseyServerCodegen", date = "2023-03-23T11:28:11.277776230Z[GMT]") +public class ApiException extends Exception { private int code; - public ApiException (int code, String msg) { + + public ApiException(int code, String msg) { super(msg); this.code = code; } diff --git a/conforming/src/gen/java/org/eclipse/tractusx/agents/conforming/api/ApiOriginFilter.java b/conforming/src/gen/java/org/eclipse/tractusx/agents/conforming/api/ApiOriginFilter.java index 129d143d..3c408643 100644 --- a/conforming/src/gen/java/org/eclipse/tractusx/agents/conforming/api/ApiOriginFilter.java +++ b/conforming/src/gen/java/org/eclipse/tractusx/agents/conforming/api/ApiOriginFilter.java @@ -17,14 +17,22 @@ package org.eclipse.tractusx.agents.conforming.api; import java.io.IOException; - -import javax.servlet.*; +import javax.servlet.FilterChain; +import javax.servlet.FilterConfig; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletResponse; -@javax.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.JavaJerseyServerCodegen", date = "2023-03-23T11:28:11.277776230Z[GMT]")public class ApiOriginFilter implements javax.servlet.Filter { +@javax.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.JavaJerseyServerCodegen", date = "2023-03-23T11:28:11.277776230Z[GMT]") +public class ApiOriginFilter implements javax.servlet.Filter { + @Override + public void init(FilterConfig filterConfig) throws ServletException { + } + @Override public void doFilter(ServletRequest request, ServletResponse response, - FilterChain chain) throws IOException, ServletException { + FilterChain chain) throws IOException, ServletException { HttpServletResponse res = (HttpServletResponse) response; res.addHeader("Access-Control-Allow-Origin", "*"); res.addHeader("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT"); @@ -33,8 +41,6 @@ public void doFilter(ServletRequest request, ServletResponse response, } @Override - public void destroy() {} - - @Override - public void init(FilterConfig filterConfig) throws ServletException {} + public void destroy() { + } } \ No newline at end of file diff --git a/conforming/src/gen/java/org/eclipse/tractusx/agents/conforming/api/JsonProvider.java b/conforming/src/gen/java/org/eclipse/tractusx/agents/conforming/api/JsonProvider.java index c9b57feb..17f537a5 100644 --- a/conforming/src/gen/java/org/eclipse/tractusx/agents/conforming/api/JsonProvider.java +++ b/conforming/src/gen/java/org/eclipse/tractusx/agents/conforming/api/JsonProvider.java @@ -19,40 +19,40 @@ import com.fasterxml.jackson.databind.ObjectMapper; import org.eclipse.tractusx.agents.conforming.ConformingAgent; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.lang.annotation.Annotation; +import java.lang.reflect.Type; import javax.ws.rs.WebApplicationException; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.MultivaluedMap; import javax.ws.rs.ext.MessageBodyReader; import javax.ws.rs.ext.MessageBodyWriter; import javax.ws.rs.ext.Provider; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.lang.annotation.Annotation; -import java.lang.reflect.Type; @Provider public class JsonProvider implements MessageBodyReader, MessageBodyWriter { - ObjectMapper objectMapper=new ObjectMapper(); + ObjectMapper objectMapper = new ObjectMapper(); @Override - public boolean isReadable(Class aClass, Type type, Annotation[] annotations, MediaType mediaType) { + public boolean isReadable(Class aclass, Type type, Annotation[] annotations, MediaType mediaType) { return mediaType.isCompatible(ConformingAgent.srj); } @Override - public Object readFrom(Class aClass, Type type, Annotation[] annotations, MediaType mediaType, MultivaluedMap multivaluedMap, InputStream inputStream) throws IOException, WebApplicationException { + public Object readFrom(Class aclass, Type type, Annotation[] annotations, MediaType mediaType, MultivaluedMap multivaluedMap, InputStream inputStream) throws IOException, WebApplicationException { return objectMapper.readTree(inputStream); } @Override - public boolean isWriteable(Class aClass, Type type, Annotation[] annotations, MediaType mediaType) { + public boolean isWriteable(Class aclass, Type type, Annotation[] annotations, MediaType mediaType) { return mediaType.isCompatible(ConformingAgent.srj); } @Override - public void writeTo(Object o, Class aClass, Type type, Annotation[] annotations, MediaType mediaType, MultivaluedMap multivaluedMap, OutputStream outputStream) throws IOException, WebApplicationException { - objectMapper.writeValue(outputStream,o); + public void writeTo(Object o, Class aclass, Type type, Annotation[] annotations, MediaType mediaType, MultivaluedMap multivaluedMap, OutputStream outputStream) throws IOException, WebApplicationException { + objectMapper.writeValue(outputStream, o); } } diff --git a/conforming/src/gen/java/org/eclipse/tractusx/agents/conforming/api/NotFoundException.java b/conforming/src/gen/java/org/eclipse/tractusx/agents/conforming/api/NotFoundException.java index 16575b47..7d3eff04 100644 --- a/conforming/src/gen/java/org/eclipse/tractusx/agents/conforming/api/NotFoundException.java +++ b/conforming/src/gen/java/org/eclipse/tractusx/agents/conforming/api/NotFoundException.java @@ -16,9 +16,11 @@ // SPDX-License-Identifier: Apache-2.0 package org.eclipse.tractusx.agents.conforming.api; -@javax.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.JavaJerseyServerCodegen", date = "2023-03-23T11:28:11.277776230Z[GMT]")public class NotFoundException extends ApiException { +@javax.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.JavaJerseyServerCodegen", date = "2023-03-23T11:28:11.277776230Z[GMT]") +public class NotFoundException extends ApiException { private int code; - public NotFoundException (int code, String msg) { + + public NotFoundException(int code, String msg) { super(code, msg); this.code = code; } diff --git a/conforming/src/gen/java/org/eclipse/tractusx/agents/conforming/api/RFC3339DateFormat.java b/conforming/src/gen/java/org/eclipse/tractusx/agents/conforming/api/Rfc3339DateFormat.java similarity index 95% rename from conforming/src/gen/java/org/eclipse/tractusx/agents/conforming/api/RFC3339DateFormat.java rename to conforming/src/gen/java/org/eclipse/tractusx/agents/conforming/api/Rfc3339DateFormat.java index b734f402..837e0eda 100644 --- a/conforming/src/gen/java/org/eclipse/tractusx/agents/conforming/api/RFC3339DateFormat.java +++ b/conforming/src/gen/java/org/eclipse/tractusx/agents/conforming/api/Rfc3339DateFormat.java @@ -22,7 +22,7 @@ import java.text.FieldPosition; import java.util.Date; -public class RFC3339DateFormat extends ISO8601DateFormat { +public class Rfc3339DateFormat extends ISO8601DateFormat { // Same as ISO8601DateFormat but serializing milliseconds. @Override diff --git a/conforming/src/gen/java/org/eclipse/tractusx/agents/conforming/api/SparqlProvider.java b/conforming/src/gen/java/org/eclipse/tractusx/agents/conforming/api/SparqlProvider.java index 72a0ba55..ba8e044e 100644 --- a/conforming/src/gen/java/org/eclipse/tractusx/agents/conforming/api/SparqlProvider.java +++ b/conforming/src/gen/java/org/eclipse/tractusx/agents/conforming/api/SparqlProvider.java @@ -19,41 +19,46 @@ import com.fasterxml.jackson.databind.ObjectMapper; import org.eclipse.tractusx.agents.conforming.ConformingAgent; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.io.OutputStreamWriter; +import java.lang.annotation.Annotation; +import java.lang.reflect.Type; +import java.util.stream.Collectors; import javax.ws.rs.WebApplicationException; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.MultivaluedMap; import javax.ws.rs.ext.MessageBodyReader; import javax.ws.rs.ext.MessageBodyWriter; import javax.ws.rs.ext.Provider; -import java.io.*; -import java.lang.annotation.Annotation; -import java.lang.reflect.Type; -import java.util.stream.Collectors; @Provider public class SparqlProvider implements MessageBodyReader, MessageBodyWriter { - ObjectMapper objectMapper=new ObjectMapper(); + ObjectMapper objectMapper = new ObjectMapper(); @Override - public boolean isReadable(Class aClass, Type type, Annotation[] annotations, MediaType mediaType) { + public boolean isReadable(Class aclass, Type type, Annotation[] annotations, MediaType mediaType) { return mediaType.isCompatible(ConformingAgent.sq); } @Override - public Object readFrom(Class aClass, Type type, Annotation[] annotations, MediaType mediaType, MultivaluedMap multivaluedMap, InputStream inputStream) throws IOException, WebApplicationException { - try (BufferedReader reader=new BufferedReader(new InputStreamReader(inputStream))) { + public Object readFrom(Class aclass, Type type, Annotation[] annotations, MediaType mediaType, MultivaluedMap multivaluedMap, InputStream inputStream) throws IOException, WebApplicationException { + try (BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream))) { return reader.lines().collect(Collectors.joining("\n")); } } @Override - public boolean isWriteable(Class aClass, Type type, Annotation[] annotations, MediaType mediaType) { + public boolean isWriteable(Class aclass, Type type, Annotation[] annotations, MediaType mediaType) { return mediaType.isCompatible(ConformingAgent.sq); } @Override - public void writeTo(Object o, Class aClass, Type type, Annotation[] annotations, MediaType mediaType, MultivaluedMap multivaluedMap, OutputStream outputStream) throws IOException, WebApplicationException { + public void writeTo(Object o, Class aclass, Type type, Annotation[] annotations, MediaType mediaType, MultivaluedMap multivaluedMap, OutputStream outputStream) throws IOException, WebApplicationException { new OutputStreamWriter(outputStream).append(String.valueOf(o)); } } diff --git a/conforming/src/gen/java/org/eclipse/tractusx/agents/conforming/api/StringUtil.java b/conforming/src/gen/java/org/eclipse/tractusx/agents/conforming/api/StringUtil.java index a07b8133..7e189347 100644 --- a/conforming/src/gen/java/org/eclipse/tractusx/agents/conforming/api/StringUtil.java +++ b/conforming/src/gen/java/org/eclipse/tractusx/agents/conforming/api/StringUtil.java @@ -16,42 +16,43 @@ // SPDX-License-Identifier: Apache-2.0 package org.eclipse.tractusx.agents.conforming.api; -@javax.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.JavaJerseyServerCodegen", date = "2023-03-23T11:28:11.277776230Z[GMT]")public class StringUtil { - /** - * Check if the given array contains the given value (with case-insensitive comparison). - * - * @param array The array - * @param value The value to search - * @return true if the array contains the value - */ - public static boolean containsIgnoreCase(String[] array, String value) { - for (String str : array) { - if (value == null && str == null) return true; - if (value != null && value.equalsIgnoreCase(str)) return true; +@javax.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.JavaJerseyServerCodegen", date = "2023-03-23T11:28:11.277776230Z[GMT]") +public class StringUtil { + /** + * Check if the given array contains the given value (with case-insensitive comparison). + * + * @param array The array + * @param value The value to search + * @return true if the array contains the value + */ + public static boolean containsIgnoreCase(String[] array, String value) { + for (String str : array) { + if (value == null && str == null) return true; + if (value != null && value.equalsIgnoreCase(str)) return true; + } + return false; } - return false; - } - /** - * Join an array of strings with the given separator. - *

- * Note: This might be replaced by utility method from commons-lang or guava someday - * if one of those libraries is added as dependency. - *

- * - * @param array The array of strings - * @param separator The separator - * @return the resulting string - */ - public static String join(String[] array, String separator) { - int len = array.length; - if (len == 0) return ""; + /** + * Join an array of strings with the given separator. + *

+ * Note: This might be replaced by utility method from commons-lang or guava someday + * if one of those libraries is added as dependency. + *

+ * + * @param array The array of strings + * @param separator The separator + * @return the resulting string + */ + public static String join(String[] array, String separator) { + int len = array.length; + if (len == 0) return ""; - StringBuilder out = new StringBuilder(); - out.append(array[0]); - for (int i = 1; i < len; i++) { - out.append(separator).append(array[i]); + StringBuilder out = new StringBuilder(); + out.append(array[0]); + for (int i = 1; i < len; i++) { + out.append(separator).append(array[i]); + } + return out.toString(); } - return out.toString(); - } } diff --git a/conforming/src/gen/java/org/eclipse/tractusx/agents/conforming/api/XmlProvider.java b/conforming/src/gen/java/org/eclipse/tractusx/agents/conforming/api/XmlProvider.java index e8706dbc..4e6aba56 100644 --- a/conforming/src/gen/java/org/eclipse/tractusx/agents/conforming/api/XmlProvider.java +++ b/conforming/src/gen/java/org/eclipse/tractusx/agents/conforming/api/XmlProvider.java @@ -21,6 +21,11 @@ import org.xml.sax.InputSource; import org.xml.sax.SAXException; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.lang.annotation.Annotation; +import java.lang.reflect.Type; import javax.ws.rs.WebApplicationException; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.MultivaluedMap; @@ -35,11 +40,6 @@ import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.lang.annotation.Annotation; -import java.lang.reflect.Type; /** * This class provides a MessageBodyReader and MessageBodyWriter for XML content type. @@ -49,37 +49,37 @@ public class XmlProvider implements MessageBodyReader, MessageBodyWriter { @Override - public boolean isReadable(Class aClass, Type type, Annotation[] annotations, MediaType mediaType) { + public boolean isReadable(Class aclass, Type type, Annotation[] annotations, MediaType mediaType) { return mediaType.isCompatible(ConformingAgent.srx); } @Override - public Object readFrom(Class aClass, Type type, Annotation[] annotations, MediaType mediaType, MultivaluedMap multivaluedMap, InputStream inputStream) throws IOException, WebApplicationException { + public Object readFrom(Class aclass, Type type, Annotation[] annotations, MediaType mediaType, MultivaluedMap multivaluedMap, InputStream inputStream) throws IOException, WebApplicationException { try { - DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance(); + DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true); - DocumentBuilder parser= factory.newDocumentBuilder(); + DocumentBuilder parser = factory.newDocumentBuilder(); return parser.parse(new InputSource(inputStream)); } catch (ParserConfigurationException | SAXException e) { - throw new IOException("Could not xml parse message body",e); + throw new IOException("Could not xml parse message body", e); } } @Override - public boolean isWriteable(Class aClass, Type type, Annotation[] annotations, MediaType mediaType) { + public boolean isWriteable(Class aclass, Type type, Annotation[] annotations, MediaType mediaType) { return mediaType.isCompatible(ConformingAgent.srx); } @Override - public void writeTo(Object o, Class aClass, Type type, Annotation[] annotations, MediaType mediaType, MultivaluedMap multivaluedMap, OutputStream outputStream) throws IOException, WebApplicationException { + public void writeTo(Object o, Class aclass, Type type, Annotation[] annotations, MediaType mediaType, MultivaluedMap multivaluedMap, OutputStream outputStream) throws IOException, WebApplicationException { try { TransformerFactory factory = TransformerFactory.newInstance(); - factory.setAttribute("http://javax.xml.XMLConstants/property/accessExternalDTD",""); - factory.setAttribute("http://javax.xml.XMLConstants/property/accessExternalStylesheet",""); + factory.setAttribute("http://javax.xml.XMLConstants/property/accessExternalDTD", ""); + factory.setAttribute("http://javax.xml.XMLConstants/property/accessExternalStylesheet", ""); Transformer transformer = factory.newTransformer(); - transformer.transform(new DOMSource((Document) o),new StreamResult(outputStream)); + transformer.transform(new DOMSource((Document) o), new StreamResult(outputStream)); } catch (TransformerException e) { - throw new IOException("Cannot render xml body",e); + throw new IOException("Cannot render xml body", e); } } } diff --git a/conforming/src/gen/java/org/eclipse/tractusx/agents/conforming/model/CxWarning.java b/conforming/src/gen/java/org/eclipse/tractusx/agents/conforming/model/CxWarning.java index e2d49380..13e32aad 100644 --- a/conforming/src/gen/java/org/eclipse/tractusx/agents/conforming/model/CxWarning.java +++ b/conforming/src/gen/java/org/eclipse/tractusx/agents/conforming/model/CxWarning.java @@ -16,193 +16,199 @@ // SPDX-License-Identifier: Apache-2.0 package org.eclipse.tractusx.agents.conforming.model; -import java.util.Objects; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; +import java.util.Objects; + /** * CxWarning */ -@javax.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.JavaJerseyServerCodegen", date = "2023-03-23T11:28:11.277776230Z[GMT]")public class CxWarning { - @JsonProperty("source-tenant") - private String sourceTenant = null; - - @JsonProperty("source-asset") - private String sourceAsset = null; - - @JsonProperty("target-tenant") - private String targetTenant = null; - - @JsonProperty("target-asset") - private String targetAsset = null; - - @JsonProperty("problem") - private String problem = null; - - @JsonProperty("context") - private String context = null; - - public CxWarning sourceTenant(String sourceTenant) { - this.sourceTenant = sourceTenant; - return this; - } - - /** - * Get sourceTenant - * @return sourceTenant - **/ - @JsonProperty("source-tenant") - @Schema(description = "") - public String getSourceTenant() { - return sourceTenant; - } - - public void setSourceTenant(String sourceTenant) { - this.sourceTenant = sourceTenant; - } - - public CxWarning sourceAsset(String sourceAsset) { - this.sourceAsset = sourceAsset; - return this; - } - - /** - * Get sourceAsset - * @return sourceAsset - **/ - @JsonProperty("source-asset") - @Schema(description = "") - public String getSourceAsset() { - return sourceAsset; - } - - public void setSourceAsset(String sourceAsset) { - this.sourceAsset = sourceAsset; - } - - public CxWarning targetTenant(String targetTenant) { - this.targetTenant = targetTenant; - return this; - } - - /** - * Get targetTenant - * @return targetTenant - **/ - @JsonProperty("target-tenant") - @Schema(description = "") - public String getTargetTenant() { - return targetTenant; - } - - public void setTargetTenant(String targetTenant) { - this.targetTenant = targetTenant; - } - - public CxWarning targetAsset(String targetAsset) { - this.targetAsset = targetAsset; - return this; - } - - /** - * Get targetAsset - * @return targetAsset - **/ - @JsonProperty("target-asset") - @Schema(description = "") - public String getTargetAsset() { - return targetAsset; - } - - public void setTargetAsset(String targetAsset) { - this.targetAsset = targetAsset; - } - - public CxWarning problem(String problem) { - this.problem = problem; - return this; - } - - /** - * Get problem - * @return problem - **/ - @JsonProperty("problem") - @Schema(description = "") - public String getProblem() { - return problem; - } - - public void setProblem(String problem) { - this.problem = problem; - } - - public CxWarning context(String context) { - this.context = context; - return this; - } - - /** - * Get context - * @return context - **/ - @JsonProperty("context") - @Schema(description = "") - public String getContext() { - return context; - } - - public void setContext(String context) { - this.context = context; - } - - - @Override - public boolean equals(java.lang.Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - CxWarning cxWarning = (CxWarning) o; - return Objects.equals(this.sourceTenant, cxWarning.sourceTenant) && - Objects.equals(this.sourceAsset, cxWarning.sourceAsset) && - Objects.equals(this.targetTenant, cxWarning.targetTenant) && - Objects.equals(this.targetAsset, cxWarning.targetAsset) && - Objects.equals(this.problem, cxWarning.problem) && - Objects.equals(this.context, cxWarning.context); - } - - @Override - public int hashCode() { - return Objects.hash(sourceTenant, sourceAsset, targetTenant, targetAsset, problem, context); - } - - - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append("class CxWarning {\n"); - - sb.append(" sourceTenant: ").append(toIndentedString(sourceTenant)).append("\n"); - sb.append(" sourceAsset: ").append(toIndentedString(sourceAsset)).append("\n"); - sb.append(" targetTenant: ").append(toIndentedString(targetTenant)).append("\n"); - sb.append(" targetAsset: ").append(toIndentedString(targetAsset)).append("\n"); - sb.append(" problem: ").append(toIndentedString(problem)).append("\n"); - sb.append(" context: ").append(toIndentedString(context)).append("\n"); - sb.append("}"); - return sb.toString(); - } - - /** - * Convert the given object to string with each line indented by 4 spaces - * (except the first line). - */ - private String toIndentedString(java.lang.Object o) { - if (o == null) { - return "null"; - } - return o.toString().replace("\n", "\n "); - } +@javax.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.JavaJerseyServerCodegen", date = "2023-03-23T11:28:11.277776230Z[GMT]") +public class CxWarning { + @JsonProperty("source-tenant") + private String sourceTenant = null; + + @JsonProperty("source-asset") + private String sourceAsset = null; + + @JsonProperty("target-tenant") + private String targetTenant = null; + + @JsonProperty("target-asset") + private String targetAsset = null; + + @JsonProperty("problem") + private String problem = null; + + @JsonProperty("context") + private String context = null; + + public CxWarning sourceTenant(String sourceTenant) { + this.sourceTenant = sourceTenant; + return this; + } + + /** + * Get sourceTenant + * + * @return sourceTenant + **/ + @JsonProperty("source-tenant") + @Schema(description = "") + public String getSourceTenant() { + return sourceTenant; + } + + public void setSourceTenant(String sourceTenant) { + this.sourceTenant = sourceTenant; + } + + public CxWarning sourceAsset(String sourceAsset) { + this.sourceAsset = sourceAsset; + return this; + } + + /** + * Get sourceAsset + * + * @return sourceAsset + **/ + @JsonProperty("source-asset") + @Schema(description = "") + public String getSourceAsset() { + return sourceAsset; + } + + public void setSourceAsset(String sourceAsset) { + this.sourceAsset = sourceAsset; + } + + public CxWarning targetTenant(String targetTenant) { + this.targetTenant = targetTenant; + return this; + } + + /** + * Get targetTenant + * + * @return targetTenant + **/ + @JsonProperty("target-tenant") + @Schema(description = "") + public String getTargetTenant() { + return targetTenant; + } + + public void setTargetTenant(String targetTenant) { + this.targetTenant = targetTenant; + } + + public CxWarning targetAsset(String targetAsset) { + this.targetAsset = targetAsset; + return this; + } + + /** + * Get targetAsset + * + * @return targetAsset + **/ + @JsonProperty("target-asset") + @Schema(description = "") + public String getTargetAsset() { + return targetAsset; + } + + public void setTargetAsset(String targetAsset) { + this.targetAsset = targetAsset; + } + + public CxWarning problem(String problem) { + this.problem = problem; + return this; + } + + /** + * Get problem + * + * @return problem + **/ + @JsonProperty("problem") + @Schema(description = "") + public String getProblem() { + return problem; + } + + public void setProblem(String problem) { + this.problem = problem; + } + + public CxWarning context(String context) { + this.context = context; + return this; + } + + /** + * Get context + * + * @return context + **/ + @JsonProperty("context") + @Schema(description = "") + public String getContext() { + return context; + } + + public void setContext(String context) { + this.context = context; + } + + @Override + public int hashCode() { + return Objects.hash(sourceTenant, sourceAsset, targetTenant, targetAsset, problem, context); + } + + @Override + public boolean equals(java.lang.Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + CxWarning cxWarning = (CxWarning) o; + return Objects.equals(this.sourceTenant, cxWarning.sourceTenant) && + Objects.equals(this.sourceAsset, cxWarning.sourceAsset) && + Objects.equals(this.targetTenant, cxWarning.targetTenant) && + Objects.equals(this.targetAsset, cxWarning.targetAsset) && + Objects.equals(this.problem, cxWarning.problem) && + Objects.equals(this.context, cxWarning.context); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class CxWarning {\n"); + + sb.append(" sourceTenant: ").append(toIndentedString(sourceTenant)).append("\n"); + sb.append(" sourceAsset: ").append(toIndentedString(sourceAsset)).append("\n"); + sb.append(" targetTenant: ").append(toIndentedString(targetTenant)).append("\n"); + sb.append(" targetAsset: ").append(toIndentedString(targetAsset)).append("\n"); + sb.append(" problem: ").append(toIndentedString(problem)).append("\n"); + sb.append(" context: ").append(toIndentedString(context)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(java.lang.Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } } diff --git a/conforming/src/gen/java/org/eclipse/tractusx/agents/conforming/model/JsonResultset.java b/conforming/src/gen/java/org/eclipse/tractusx/agents/conforming/model/JsonResultset.java index 84f0684f..fe84983c 100644 --- a/conforming/src/gen/java/org/eclipse/tractusx/agents/conforming/model/JsonResultset.java +++ b/conforming/src/gen/java/org/eclipse/tractusx/agents/conforming/model/JsonResultset.java @@ -16,101 +16,102 @@ // SPDX-License-Identifier: Apache-2.0 package org.eclipse.tractusx.agents.conforming.model; -import java.util.Objects; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; +import java.util.Objects; import javax.validation.Valid; /** * JsonResultset */ -@javax.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.JavaJerseyServerCodegen", date = "2023-03-23T11:28:11.277776230Z[GMT]")public class JsonResultset { - @JsonProperty("head") - private JsonResultsetHead head = null; - - @JsonProperty("results") - private JsonResultsetResults results = null; +@javax.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.JavaJerseyServerCodegen", date = "2023-03-23T11:28:11.277776230Z[GMT]") +public class JsonResultset { + @JsonProperty("head") + private JsonResultsetHead head = null; - public JsonResultset head(JsonResultsetHead head) { - this.head = head; - return this; - } + @JsonProperty("results") + private JsonResultsetResults results = null; - /** - * Get head - * @return head - **/ - @JsonProperty("head") - @Schema(description = "") - @Valid - public JsonResultsetHead getHead() { - return head; - } - - public void setHead(JsonResultsetHead head) { - this.head = head; - } + public JsonResultset head(JsonResultsetHead head) { + this.head = head; + return this; + } - public JsonResultset results(JsonResultsetResults results) { - this.results = results; - return this; - } + /** + * Get head + * + * @return head + **/ + @JsonProperty("head") + @Schema(description = "") + @Valid + public JsonResultsetHead getHead() { + return head; + } - /** - * Get results - * @return results - **/ - @JsonProperty("results") - @Schema(description = "") - @Valid - public JsonResultsetResults getResults() { - return results; - } + public void setHead(JsonResultsetHead head) { + this.head = head; + } - public void setResults(JsonResultsetResults results) { - this.results = results; - } + public JsonResultset results(JsonResultsetResults results) { + this.results = results; + return this; + } + /** + * Get results + * + * @return results + **/ + @JsonProperty("results") + @Schema(description = "") + @Valid + public JsonResultsetResults getResults() { + return results; + } - @Override - public boolean equals(java.lang.Object o) { - if (this == o) { - return true; + public void setResults(JsonResultsetResults results) { + this.results = results; } - if (o == null || getClass() != o.getClass()) { - return false; + + @Override + public int hashCode() { + return Objects.hash(head, results); } - JsonResultset jsonResultset = (JsonResultset) o; - return Objects.equals(this.head, jsonResultset.head) && - Objects.equals(this.results, jsonResultset.results); - } - @Override - public int hashCode() { - return Objects.hash(head, results); - } + @Override + public boolean equals(java.lang.Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + JsonResultset jsonResultset = (JsonResultset) o; + return Objects.equals(this.head, jsonResultset.head) && + Objects.equals(this.results, jsonResultset.results); + } + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class JsonResultset {\n"); - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append("class JsonResultset {\n"); - - sb.append(" head: ").append(toIndentedString(head)).append("\n"); - sb.append(" results: ").append(toIndentedString(results)).append("\n"); - sb.append("}"); - return sb.toString(); - } + sb.append(" head: ").append(toIndentedString(head)).append("\n"); + sb.append(" results: ").append(toIndentedString(results)).append("\n"); + sb.append("}"); + return sb.toString(); + } - /** - * Convert the given object to string with each line indented by 4 spaces - * (except the first line). - */ - private String toIndentedString(java.lang.Object o) { - if (o == null) { - return "null"; + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(java.lang.Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); } - return o.toString().replace("\n", "\n "); - } } diff --git a/conforming/src/gen/java/org/eclipse/tractusx/agents/conforming/model/JsonResultsetHead.java b/conforming/src/gen/java/org/eclipse/tractusx/agents/conforming/model/JsonResultsetHead.java index 327ad3f0..0cf5ddfc 100644 --- a/conforming/src/gen/java/org/eclipse/tractusx/agents/conforming/model/JsonResultsetHead.java +++ b/conforming/src/gen/java/org/eclipse/tractusx/agents/conforming/model/JsonResultsetHead.java @@ -16,83 +16,84 @@ // SPDX-License-Identifier: Apache-2.0 package org.eclipse.tractusx.agents.conforming.model; -import java.util.Objects; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; + import java.util.ArrayList; import java.util.List; +import java.util.Objects; /** * JsonResultsetHead */ -@javax.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.JavaJerseyServerCodegen", date = "2023-03-23T11:28:11.277776230Z[GMT]")public class JsonResultsetHead { - @JsonProperty("vars") - private List vars = null; +@javax.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.JavaJerseyServerCodegen", date = "2023-03-23T11:28:11.277776230Z[GMT]") +public class JsonResultsetHead { + @JsonProperty("vars") + private List vars = null; - public JsonResultsetHead vars(List vars) { - this.vars = vars; - return this; - } - - public JsonResultsetHead addVarsItem(String varsItem) { - if (this.vars == null) { - this.vars = new ArrayList(); + public JsonResultsetHead vars(List vars) { + this.vars = vars; + return this; } - this.vars.add(varsItem); - return this; - } - - /** - * Get vars - * @return vars - **/ - @JsonProperty("vars") - @Schema(description = "") - public List getVars() { - return vars; - } - public void setVars(List vars) { - this.vars = vars; - } + public JsonResultsetHead addVarsItem(String varsItem) { + if (this.vars == null) { + this.vars = new ArrayList(); + } + this.vars.add(varsItem); + return this; + } + /** + * Get vars + * + * @return vars + **/ + @JsonProperty("vars") + @Schema(description = "") + public List getVars() { + return vars; + } - @Override - public boolean equals(java.lang.Object o) { - if (this == o) { - return true; + public void setVars(List vars) { + this.vars = vars; } - if (o == null || getClass() != o.getClass()) { - return false; + + @Override + public int hashCode() { + return Objects.hash(vars); } - JsonResultsetHead jsonResultsetHead = (JsonResultsetHead) o; - return Objects.equals(this.vars, jsonResultsetHead.vars); - } - @Override - public int hashCode() { - return Objects.hash(vars); - } + @Override + public boolean equals(java.lang.Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + JsonResultsetHead jsonResultsetHead = (JsonResultsetHead) o; + return Objects.equals(this.vars, jsonResultsetHead.vars); + } + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class JsonResultsetHead {\n"); - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append("class JsonResultsetHead {\n"); - - sb.append(" vars: ").append(toIndentedString(vars)).append("\n"); - sb.append("}"); - return sb.toString(); - } + sb.append(" vars: ").append(toIndentedString(vars)).append("\n"); + sb.append("}"); + return sb.toString(); + } - /** - * Convert the given object to string with each line indented by 4 spaces - * (except the first line). - */ - private String toIndentedString(java.lang.Object o) { - if (o == null) { - return "null"; + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(java.lang.Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); } - return o.toString().replace("\n", "\n "); - } } diff --git a/conforming/src/gen/java/org/eclipse/tractusx/agents/conforming/model/JsonResultsetResults.java b/conforming/src/gen/java/org/eclipse/tractusx/agents/conforming/model/JsonResultsetResults.java index 1622f6dc..f62d99e0 100644 --- a/conforming/src/gen/java/org/eclipse/tractusx/agents/conforming/model/JsonResultsetResults.java +++ b/conforming/src/gen/java/org/eclipse/tractusx/agents/conforming/model/JsonResultsetResults.java @@ -16,83 +16,84 @@ // SPDX-License-Identifier: Apache-2.0 package org.eclipse.tractusx.agents.conforming.model; -import java.util.Objects; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; + import java.util.ArrayList; import java.util.List; +import java.util.Objects; /** * JsonResultsetResults */ -@javax.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.JavaJerseyServerCodegen", date = "2023-03-23T11:28:11.277776230Z[GMT]")public class JsonResultsetResults { - @JsonProperty("bindings") - private List bindings = null; +@javax.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.JavaJerseyServerCodegen", date = "2023-03-23T11:28:11.277776230Z[GMT]") +public class JsonResultsetResults { + @JsonProperty("bindings") + private List bindings = null; - public JsonResultsetResults bindings(List bindings) { - this.bindings = bindings; - return this; - } - - public JsonResultsetResults addBindingsItem(Object bindingsItem) { - if (this.bindings == null) { - this.bindings = new ArrayList(); + public JsonResultsetResults bindings(List bindings) { + this.bindings = bindings; + return this; } - this.bindings.add(bindingsItem); - return this; - } - - /** - * Get bindings - * @return bindings - **/ - @JsonProperty("bindings") - @Schema(description = "") - public List getBindings() { - return bindings; - } - public void setBindings(List bindings) { - this.bindings = bindings; - } + public JsonResultsetResults addBindingsItem(Object bindingsItem) { + if (this.bindings == null) { + this.bindings = new ArrayList(); + } + this.bindings.add(bindingsItem); + return this; + } + /** + * Get bindings + * + * @return bindings + **/ + @JsonProperty("bindings") + @Schema(description = "") + public List getBindings() { + return bindings; + } - @Override - public boolean equals(java.lang.Object o) { - if (this == o) { - return true; + public void setBindings(List bindings) { + this.bindings = bindings; } - if (o == null || getClass() != o.getClass()) { - return false; + + @Override + public int hashCode() { + return Objects.hash(bindings); } - JsonResultsetResults jsonResultsetResults = (JsonResultsetResults) o; - return Objects.equals(this.bindings, jsonResultsetResults.bindings); - } - @Override - public int hashCode() { - return Objects.hash(bindings); - } + @Override + public boolean equals(java.lang.Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + JsonResultsetResults jsonResultsetResults = (JsonResultsetResults) o; + return Objects.equals(this.bindings, jsonResultsetResults.bindings); + } + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class JsonResultsetResults {\n"); - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append("class JsonResultsetResults {\n"); - - sb.append(" bindings: ").append(toIndentedString(bindings)).append("\n"); - sb.append("}"); - return sb.toString(); - } + sb.append(" bindings: ").append(toIndentedString(bindings)).append("\n"); + sb.append("}"); + return sb.toString(); + } - /** - * Convert the given object to string with each line indented by 4 spaces - * (except the first line). - */ - private String toIndentedString(java.lang.Object o) { - if (o == null) { - return "null"; + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(java.lang.Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); } - return o.toString().replace("\n", "\n "); - } } diff --git a/conforming/src/gen/java/org/eclipse/tractusx/agents/conforming/model/XmlResultset.java b/conforming/src/gen/java/org/eclipse/tractusx/agents/conforming/model/XmlResultset.java index b7b82037..5eb1c77d 100644 --- a/conforming/src/gen/java/org/eclipse/tractusx/agents/conforming/model/XmlResultset.java +++ b/conforming/src/gen/java/org/eclipse/tractusx/agents/conforming/model/XmlResultset.java @@ -16,101 +16,102 @@ // SPDX-License-Identifier: Apache-2.0 package org.eclipse.tractusx.agents.conforming.model; -import java.util.Objects; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; +import java.util.Objects; import javax.validation.Valid; /** * XmlResultset */ -@javax.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.JavaJerseyServerCodegen", date = "2023-03-23T11:28:11.277776230Z[GMT]")public class XmlResultset { - @JsonProperty("head") - private XmlResultsetHead head = null; - - @JsonProperty("results") - private XmlResultsetResults results = null; +@javax.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.JavaJerseyServerCodegen", date = "2023-03-23T11:28:11.277776230Z[GMT]") +public class XmlResultset { + @JsonProperty("head") + private XmlResultsetHead head = null; - public XmlResultset head(XmlResultsetHead head) { - this.head = head; - return this; - } + @JsonProperty("results") + private XmlResultsetResults results = null; - /** - * Get head - * @return head - **/ - @JsonProperty("head") - @Schema(description = "") - @Valid - public XmlResultsetHead getHead() { - return head; - } - - public void setHead(XmlResultsetHead head) { - this.head = head; - } + public XmlResultset head(XmlResultsetHead head) { + this.head = head; + return this; + } - public XmlResultset results(XmlResultsetResults results) { - this.results = results; - return this; - } + /** + * Get head + * + * @return head + **/ + @JsonProperty("head") + @Schema(description = "") + @Valid + public XmlResultsetHead getHead() { + return head; + } - /** - * Get results - * @return results - **/ - @JsonProperty("results") - @Schema(description = "") - @Valid - public XmlResultsetResults getResults() { - return results; - } + public void setHead(XmlResultsetHead head) { + this.head = head; + } - public void setResults(XmlResultsetResults results) { - this.results = results; - } + public XmlResultset results(XmlResultsetResults results) { + this.results = results; + return this; + } + /** + * Get results + * + * @return results + **/ + @JsonProperty("results") + @Schema(description = "") + @Valid + public XmlResultsetResults getResults() { + return results; + } - @Override - public boolean equals(java.lang.Object o) { - if (this == o) { - return true; + public void setResults(XmlResultsetResults results) { + this.results = results; } - if (o == null || getClass() != o.getClass()) { - return false; + + @Override + public int hashCode() { + return Objects.hash(head, results); } - XmlResultset xmlResultset = (XmlResultset) o; - return Objects.equals(this.head, xmlResultset.head) && - Objects.equals(this.results, xmlResultset.results); - } - @Override - public int hashCode() { - return Objects.hash(head, results); - } + @Override + public boolean equals(java.lang.Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + XmlResultset xmlResultset = (XmlResultset) o; + return Objects.equals(this.head, xmlResultset.head) && + Objects.equals(this.results, xmlResultset.results); + } + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class XmlResultset {\n"); - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append("class XmlResultset {\n"); - - sb.append(" head: ").append(toIndentedString(head)).append("\n"); - sb.append(" results: ").append(toIndentedString(results)).append("\n"); - sb.append("}"); - return sb.toString(); - } + sb.append(" head: ").append(toIndentedString(head)).append("\n"); + sb.append(" results: ").append(toIndentedString(results)).append("\n"); + sb.append("}"); + return sb.toString(); + } - /** - * Convert the given object to string with each line indented by 4 spaces - * (except the first line). - */ - private String toIndentedString(java.lang.Object o) { - if (o == null) { - return "null"; + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(java.lang.Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); } - return o.toString().replace("\n", "\n "); - } } diff --git a/conforming/src/gen/java/org/eclipse/tractusx/agents/conforming/model/XmlResultsetHead.java b/conforming/src/gen/java/org/eclipse/tractusx/agents/conforming/model/XmlResultsetHead.java index bfbdc368..d2b67052 100644 --- a/conforming/src/gen/java/org/eclipse/tractusx/agents/conforming/model/XmlResultsetHead.java +++ b/conforming/src/gen/java/org/eclipse/tractusx/agents/conforming/model/XmlResultsetHead.java @@ -16,68 +16,69 @@ // SPDX-License-Identifier: Apache-2.0 package org.eclipse.tractusx.agents.conforming.model; -import java.util.Objects; import com.fasterxml.jackson.annotation.JsonProperty; -import java.util.List; import java.util.ArrayList; +import java.util.List; +import java.util.Objects; /** * XmlResultsetHead */ -@javax.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.JavaJerseyServerCodegen", date = "2023-03-23T11:28:11.277776230Z[GMT]")public class XmlResultsetHead { - @JsonProperty("variable") - private List variables = new ArrayList<>(); - - public XmlResultsetHead addVariable(XmlResultsetHeadVariable variable) { - this.variables.add(variable); - return this; - } +@javax.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.JavaJerseyServerCodegen", date = "2023-03-23T11:28:11.277776230Z[GMT]") +public class XmlResultsetHead { + @JsonProperty("variable") + private List variables = new ArrayList<>(); - /** - * Get variables - * @return variables - **/ - public List getVariables() { - return variables; - } + public XmlResultsetHead addVariable(XmlResultsetHeadVariable variable) { + this.variables.add(variable); + return this; + } - @Override - public boolean equals(java.lang.Object o) { - if (this == o) { - return true; + /** + * Get variables + * + * @return variables + **/ + public List getVariables() { + return variables; } - if (o == null || getClass() != o.getClass()) { - return false; + + @Override + public int hashCode() { + return Objects.hash(variables); } - XmlResultsetHead xmlResultsetHead = (XmlResultsetHead) o; - return Objects.equals(this.variables, xmlResultsetHead.variables); - } - @Override - public int hashCode() { - return Objects.hash(variables); - } + @Override + public boolean equals(java.lang.Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + XmlResultsetHead xmlResultsetHead = (XmlResultsetHead) o; + return Objects.equals(this.variables, xmlResultsetHead.variables); + } + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class XmlResultsetHead {\n"); - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append("class XmlResultsetHead {\n"); - - sb.append(" variable: ").append(toIndentedString(variables)).append("\n"); - sb.append("}"); - return sb.toString(); - } + sb.append(" variable: ").append(toIndentedString(variables)).append("\n"); + sb.append("}"); + return sb.toString(); + } - /** - * Convert the given object to string with each line indented by 4 spaces - * (except the first line). - */ - private String toIndentedString(java.lang.Object o) { - if (o == null) { - return "null"; + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(java.lang.Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); } - return o.toString().replace("\n", "\n "); - } } diff --git a/conforming/src/gen/java/org/eclipse/tractusx/agents/conforming/model/XmlResultsetHeadVariable.java b/conforming/src/gen/java/org/eclipse/tractusx/agents/conforming/model/XmlResultsetHeadVariable.java index 49a4ecdb..040a0bb1 100644 --- a/conforming/src/gen/java/org/eclipse/tractusx/agents/conforming/model/XmlResultsetHeadVariable.java +++ b/conforming/src/gen/java/org/eclipse/tractusx/agents/conforming/model/XmlResultsetHeadVariable.java @@ -16,73 +16,74 @@ // SPDX-License-Identifier: Apache-2.0 package org.eclipse.tractusx.agents.conforming.model; -import java.util.Objects; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; +import java.util.Objects; + /** * XmlResultsetHeadVariable */ -@javax.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.JavaJerseyServerCodegen", date = "2023-03-23T11:28:11.277776230Z[GMT]")public class XmlResultsetHeadVariable { - @JsonProperty("name") - private String name = null; - - public XmlResultsetHeadVariable name(String name) { - this.name = name; - return this; - } - - /** - * Get name - * @return name - **/ - @JsonProperty("name") - @Schema(description = "") - public String getName() { - return name; - } +@javax.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.JavaJerseyServerCodegen", date = "2023-03-23T11:28:11.277776230Z[GMT]") +public class XmlResultsetHeadVariable { + @JsonProperty("name") + private String name = null; - public void setName(String name) { - this.name = name; - } + public XmlResultsetHeadVariable name(String name) { + this.name = name; + return this; + } + /** + * Get name + * + * @return name + **/ + @JsonProperty("name") + @Schema(description = "") + public String getName() { + return name; + } - @Override - public boolean equals(java.lang.Object o) { - if (this == o) { - return true; + public void setName(String name) { + this.name = name; } - if (o == null || getClass() != o.getClass()) { - return false; + + @Override + public int hashCode() { + return Objects.hash(name); } - XmlResultsetHeadVariable xmlResultsetHeadVariable = (XmlResultsetHeadVariable) o; - return Objects.equals(this.name, xmlResultsetHeadVariable.name); - } - @Override - public int hashCode() { - return Objects.hash(name); - } + @Override + public boolean equals(java.lang.Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + XmlResultsetHeadVariable xmlResultsetHeadVariable = (XmlResultsetHeadVariable) o; + return Objects.equals(this.name, xmlResultsetHeadVariable.name); + } + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class XmlResultsetHeadVariable {\n"); - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append("class XmlResultsetHeadVariable {\n"); - - sb.append(" name: ").append(toIndentedString(name)).append("\n"); - sb.append("}"); - return sb.toString(); - } + sb.append(" name: ").append(toIndentedString(name)).append("\n"); + sb.append("}"); + return sb.toString(); + } - /** - * Convert the given object to string with each line indented by 4 spaces - * (except the first line). - */ - private String toIndentedString(java.lang.Object o) { - if (o == null) { - return "null"; + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(java.lang.Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); } - return o.toString().replace("\n", "\n "); - } } diff --git a/conforming/src/gen/java/org/eclipse/tractusx/agents/conforming/model/XmlResultsetResults.java b/conforming/src/gen/java/org/eclipse/tractusx/agents/conforming/model/XmlResultsetResults.java index aabfef0b..bb3e2c3d 100644 --- a/conforming/src/gen/java/org/eclipse/tractusx/agents/conforming/model/XmlResultsetResults.java +++ b/conforming/src/gen/java/org/eclipse/tractusx/agents/conforming/model/XmlResultsetResults.java @@ -16,69 +16,69 @@ // SPDX-License-Identifier: Apache-2.0 package org.eclipse.tractusx.agents.conforming.model; -import java.util.Objects; import com.fasterxml.jackson.annotation.JsonProperty; -import java.util.List; import java.util.ArrayList; +import java.util.List; +import java.util.Objects; /** * XmlResultsetResults */ -@javax.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.JavaJerseyServerCodegen", date = "2023-03-23T11:28:11.277776230Z[GMT]")public class XmlResultsetResults { - @JsonProperty("result") - private List results = new ArrayList<>(); - - public XmlResultsetResults addResult(XmlResultsetResultsResult result) { - this.results.add(result); - return this; - } - - /** - * Get result - * @return result - **/ - public List getResults() { - return results; - } +@javax.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.JavaJerseyServerCodegen", date = "2023-03-23T11:28:11.277776230Z[GMT]") +public class XmlResultsetResults { + @JsonProperty("result") + private List results = new ArrayList<>(); + public XmlResultsetResults addResult(XmlResultsetResultsResult result) { + this.results.add(result); + return this; + } - @Override - public boolean equals(java.lang.Object o) { - if (this == o) { - return true; + /** + * Get result + * + * @return result + **/ + public List getResults() { + return results; } - if (o == null || getClass() != o.getClass()) { - return false; + + @Override + public int hashCode() { + return Objects.hash(results); } - XmlResultsetResults xmlResultsetResults = (XmlResultsetResults) o; - return Objects.equals(this.results, xmlResultsetResults.results); - } - @Override - public int hashCode() { - return Objects.hash(results); - } + @Override + public boolean equals(java.lang.Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + XmlResultsetResults xmlResultsetResults = (XmlResultsetResults) o; + return Objects.equals(this.results, xmlResultsetResults.results); + } + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class XmlResultsetResults {\n"); - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append("class XmlResultsetResults {\n"); - - sb.append(" result: ").append(toIndentedString(results)).append("\n"); - sb.append("}"); - return sb.toString(); - } + sb.append(" result: ").append(toIndentedString(results)).append("\n"); + sb.append("}"); + return sb.toString(); + } - /** - * Convert the given object to string with each line indented by 4 spaces - * (except the first line). - */ - private String toIndentedString(java.lang.Object o) { - if (o == null) { - return "null"; + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(java.lang.Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); } - return o.toString().replace("\n", "\n "); - } } diff --git a/conforming/src/gen/java/org/eclipse/tractusx/agents/conforming/model/XmlResultsetResultsResult.java b/conforming/src/gen/java/org/eclipse/tractusx/agents/conforming/model/XmlResultsetResultsResult.java index 87bcb422..1a2d1eab 100644 --- a/conforming/src/gen/java/org/eclipse/tractusx/agents/conforming/model/XmlResultsetResultsResult.java +++ b/conforming/src/gen/java/org/eclipse/tractusx/agents/conforming/model/XmlResultsetResultsResult.java @@ -16,68 +16,69 @@ // SPDX-License-Identifier: Apache-2.0 package org.eclipse.tractusx.agents.conforming.model; -import java.util.Objects; import com.fasterxml.jackson.annotation.JsonProperty; -import java.util.List; import java.util.ArrayList; +import java.util.List; +import java.util.Objects; /** * XmlResultsetResultsResult */ -@javax.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.JavaJerseyServerCodegen", date = "2023-03-23T11:28:11.277776230Z[GMT]")public class XmlResultsetResultsResult { - @JsonProperty("binding") - private List bindings = new ArrayList<>(); - - public XmlResultsetResultsResult addBinding(XmlResultsetResultsResultBinding binding) { - this.bindings.add(binding); - return this; - } +@javax.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.JavaJerseyServerCodegen", date = "2023-03-23T11:28:11.277776230Z[GMT]") +public class XmlResultsetResultsResult { + @JsonProperty("binding") + private List bindings = new ArrayList<>(); - /** - * Get binding - * @return binding - **/ - public List getBindings() { - return bindings; - } + public XmlResultsetResultsResult addBinding(XmlResultsetResultsResultBinding binding) { + this.bindings.add(binding); + return this; + } - @Override - public boolean equals(java.lang.Object o) { - if (this == o) { - return true; + /** + * Get binding + * + * @return binding + **/ + public List getBindings() { + return bindings; } - if (o == null || getClass() != o.getClass()) { - return false; + + @Override + public int hashCode() { + return Objects.hash(bindings); } - XmlResultsetResultsResult xmlResultsetResultsResult = (XmlResultsetResultsResult) o; - return Objects.equals(this.bindings, xmlResultsetResultsResult.bindings); - } - @Override - public int hashCode() { - return Objects.hash(bindings); - } + @Override + public boolean equals(java.lang.Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + XmlResultsetResultsResult xmlResultsetResultsResult = (XmlResultsetResultsResult) o; + return Objects.equals(this.bindings, xmlResultsetResultsResult.bindings); + } + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class XmlResultsetResultsResult {\n"); - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append("class XmlResultsetResultsResult {\n"); - - sb.append(" binding: ").append(toIndentedString(bindings)).append("\n"); - sb.append("}"); - return sb.toString(); - } + sb.append(" binding: ").append(toIndentedString(bindings)).append("\n"); + sb.append("}"); + return sb.toString(); + } - /** - * Convert the given object to string with each line indented by 4 spaces - * (except the first line). - */ - private String toIndentedString(java.lang.Object o) { - if (o == null) { - return "null"; + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(java.lang.Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); } - return o.toString().replace("\n", "\n "); - } } diff --git a/conforming/src/gen/java/org/eclipse/tractusx/agents/conforming/model/XmlResultsetResultsResultBinding.java b/conforming/src/gen/java/org/eclipse/tractusx/agents/conforming/model/XmlResultsetResultsResultBinding.java index 666816ab..d6734908 100644 --- a/conforming/src/gen/java/org/eclipse/tractusx/agents/conforming/model/XmlResultsetResultsResultBinding.java +++ b/conforming/src/gen/java/org/eclipse/tractusx/agents/conforming/model/XmlResultsetResultsResultBinding.java @@ -16,121 +16,124 @@ // SPDX-License-Identifier: Apache-2.0 package org.eclipse.tractusx.agents.conforming.model; -import java.util.Objects; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; +import java.util.Objects; + /** * XmlResultsetResultsResultBinding */ -@javax.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.JavaJerseyServerCodegen", date = "2023-03-23T11:28:11.277776230Z[GMT]")public class XmlResultsetResultsResultBinding { - @JsonProperty("name") - private String name = null; - - @JsonProperty("literal") - private XmlResultsetResultsResultBindingLiteral literal = null; - - @JsonProperty("uri") - private String uri = null; - - public XmlResultsetResultsResultBinding name(String name) { - this.name = name; - return this; - } - - /** - * Get name - * @return name - **/ - @JsonProperty("name") - @Schema(description = "") - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public XmlResultsetResultsResultBinding literal(XmlResultsetResultsResultBindingLiteral literal) { - this.literal = literal; - return this; - } - - /** - * Get literal - * @return literal - **/ - @JsonProperty("literal") - @Schema(description = "") - public XmlResultsetResultsResultBindingLiteral getLiteral() { - return literal; - } - - public void setLiteral(XmlResultsetResultsResultBindingLiteral literal) { - this.literal = literal; - } - - public XmlResultsetResultsResultBinding uri(String uri) { - this.uri = uri; - return this; - } - - /** - * Get uri - * @return uri - **/ - @JsonProperty("uri") - @Schema(description = "") - public String getUri() { - return uri; - } - - public void setUri(String uri) { - this.uri = uri; - } - - - @Override - public boolean equals(java.lang.Object o) { - if (this == o) { - return true; +@javax.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.JavaJerseyServerCodegen", date = "2023-03-23T11:28:11.277776230Z[GMT]") +public class XmlResultsetResultsResultBinding { + @JsonProperty("name") + private String name = null; + + @JsonProperty("literal") + private XmlResultsetResultsResultBindingLiteral literal = null; + + @JsonProperty("uri") + private String uri = null; + + public XmlResultsetResultsResultBinding name(String name) { + this.name = name; + return this; + } + + /** + * Get name + * + * @return name + **/ + @JsonProperty("name") + @Schema(description = "") + public String getName() { + return name; } - if (o == null || getClass() != o.getClass()) { - return false; + + public void setName(String name) { + this.name = name; + } + + public XmlResultsetResultsResultBinding literal(XmlResultsetResultsResultBindingLiteral literal) { + this.literal = literal; + return this; + } + + /** + * Get literal + * + * @return literal + **/ + @JsonProperty("literal") + @Schema(description = "") + public XmlResultsetResultsResultBindingLiteral getLiteral() { + return literal; + } + + public void setLiteral(XmlResultsetResultsResultBindingLiteral literal) { + this.literal = literal; } - XmlResultsetResultsResultBinding xmlResultsetResultsResultBinding = (XmlResultsetResultsResultBinding) o; - return Objects.equals(this.name, xmlResultsetResultsResultBinding.name) && - Objects.equals(this.literal, xmlResultsetResultsResultBinding.literal) && - Objects.equals(this.uri, xmlResultsetResultsResultBinding.uri); - } - - @Override - public int hashCode() { - return Objects.hash(name, literal, uri); - } - - - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append("class XmlResultsetResultsResultBinding {\n"); - - sb.append(" name: ").append(toIndentedString(name)).append("\n"); - sb.append(" literal: ").append(toIndentedString(literal)).append("\n"); - sb.append(" uri: ").append(toIndentedString(uri)).append("\n"); - sb.append("}"); - return sb.toString(); - } - - /** - * Convert the given object to string with each line indented by 4 spaces - * (except the first line). - */ - private String toIndentedString(java.lang.Object o) { - if (o == null) { - return "null"; + + public XmlResultsetResultsResultBinding uri(String uri) { + this.uri = uri; + return this; + } + + /** + * Get uri + * + * @return uri + **/ + @JsonProperty("uri") + @Schema(description = "") + public String getUri() { + return uri; + } + + public void setUri(String uri) { + this.uri = uri; + } + + @Override + public int hashCode() { + return Objects.hash(name, literal, uri); + } + + @Override + public boolean equals(java.lang.Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + XmlResultsetResultsResultBinding xmlResultsetResultsResultBinding = (XmlResultsetResultsResultBinding) o; + return Objects.equals(this.name, xmlResultsetResultsResultBinding.name) && + Objects.equals(this.literal, xmlResultsetResultsResultBinding.literal) && + Objects.equals(this.uri, xmlResultsetResultsResultBinding.uri); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class XmlResultsetResultsResultBinding {\n"); + + sb.append(" name: ").append(toIndentedString(name)).append("\n"); + sb.append(" literal: ").append(toIndentedString(literal)).append("\n"); + sb.append(" uri: ").append(toIndentedString(uri)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(java.lang.Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); } - return o.toString().replace("\n", "\n "); - } } diff --git a/conforming/src/gen/java/org/eclipse/tractusx/agents/conforming/model/XmlResultsetResultsResultBindingLiteral.java b/conforming/src/gen/java/org/eclipse/tractusx/agents/conforming/model/XmlResultsetResultsResultBindingLiteral.java index 9f55717b..8a13276e 100644 --- a/conforming/src/gen/java/org/eclipse/tractusx/agents/conforming/model/XmlResultsetResultsResultBindingLiteral.java +++ b/conforming/src/gen/java/org/eclipse/tractusx/agents/conforming/model/XmlResultsetResultsResultBindingLiteral.java @@ -16,15 +16,17 @@ // SPDX-License-Identifier: Apache-2.0 package org.eclipse.tractusx.agents.conforming.model; -import java.util.Objects; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlText; import io.swagger.v3.oas.annotations.media.Schema; +import java.util.Objects; + /** * XmlResultsetResultsResultBindingLiteral */ -@javax.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.JavaJerseyServerCodegen", date = "2023-03-24T17:09:51.803733265Z[GMT]")public class XmlResultsetResultsResultBindingLiteral { +@javax.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.JavaJerseyServerCodegen", date = "2023-03-24T17:09:51.803733265Z[GMT]") +public class XmlResultsetResultsResultBindingLiteral { @JsonProperty("xml:lang") private String xmllang = null; @@ -42,6 +44,7 @@ public XmlResultsetResultsResultBindingLiteral xmllang(String xmllang) { /** * Get xmllang + * * @return xmllang **/ @JsonProperty("xml:lang") @@ -61,6 +64,7 @@ public XmlResultsetResultsResultBindingLiteral datatype(String datatype) { /** * Get datatype + * * @return datatype **/ @JsonProperty("datatype") @@ -80,6 +84,7 @@ public XmlResultsetResultsResultBindingLiteral value(String value) { /** * Get value + * * @return value **/ @JsonProperty("value") @@ -93,6 +98,10 @@ public void setValue(String value) { this.value = value; } + @Override + public int hashCode() { + return Objects.hash(xmllang, datatype, value); + } @Override public boolean equals(java.lang.Object o) { @@ -108,12 +117,6 @@ public boolean equals(java.lang.Object o) { Objects.equals(this.value, xmlResultsetResultsResultBindingLiteral.value); } - @Override - public int hashCode() { - return Objects.hash(xmllang, datatype, value); - } - - @Override public String toString() { StringBuilder sb = new StringBuilder(); diff --git a/conforming/src/main/java/org/eclipse/tractusx/agents/conforming/BindingAgent.java b/conforming/src/main/java/org/eclipse/tractusx/agents/conforming/BindingAgent.java index 8a47100d..c978e84b 100644 --- a/conforming/src/main/java/org/eclipse/tractusx/agents/conforming/BindingAgent.java +++ b/conforming/src/main/java/org/eclipse/tractusx/agents/conforming/BindingAgent.java @@ -16,15 +16,14 @@ // SPDX-License-Identifier: Apache-2.0 package org.eclipse.tractusx.agents.conforming; +import org.eclipse.rdf4j.query.parser.ParsedQuery; +import org.eclipse.rdf4j.query.parser.sparql.SPARQLParser; import org.eclipse.tractusx.agents.conforming.api.NotFoundException; +import java.util.List; import javax.validation.constraints.NotNull; import javax.ws.rs.Path; import javax.ws.rs.core.Response; -import java.util.List; - -import org.eclipse.rdf4j.query.parser.ParsedQuery; -import org.eclipse.rdf4j.query.parser.sparql.SPARQLParser; /** * Implements a standard binding agent @@ -37,31 +36,31 @@ public BindingAgent() { } @Override - public Response getAgent(String asset, String queryLn, String query, String _vin, List troubleCode) throws NotFoundException { - if(query==null) { - return annotate(Response.status(400,"{ \"error\":400, \"reason\":\"KA-BIND: query parameter must be set\" }")); + public Response getAgent(String asset, String queryLn, String query, String vin, List troubleCode) throws NotFoundException { + if (query == null) { + return annotate(Response.status(400, "{ \"error\":400, \"reason\":\"KA-BIND: query parameter must be set\" }")); } SPARQLParser parser = new SPARQLParser(); - ParsedQuery sparql=parser.parseQuery(query,uri.getAbsolutePath().toString()); + ParsedQuery sparql = parser.parseQuery(query, uri.getAbsolutePath().toString()); try { sparql.getTupleExpr().visit(new BindingProfileChecker()); - } catch(Exception e) { - return annotate(Response.status(400,"{ \"error\":400, \"reason\":\""+e.getMessage()+"\" }")); + } catch (Exception e) { + return annotate(Response.status(400, "{ \"error\":400, \"reason\":\"" + e.getMessage() + "\" }")); } - return super.getAgent(asset,queryLn, query,_vin,troubleCode); + return super.getAgent(asset, queryLn, query, vin, troubleCode); } @Override - public Response postAgent(Object body, String asset, String queryLn, String query, String _vin, List troubleCode) throws NotFoundException { - if(body==null || String.valueOf(body).isEmpty()) { - return annotate(Response.status(400,"{ \"error\":400, \"reason\":\"KA-BIND: query parameter must be set\" }")); + public Response postAgent(Object body, String asset, String queryLn, String query, String vin, List troubleCode) throws NotFoundException { + if (body == null || String.valueOf(body).isEmpty()) { + return annotate(Response.status(400, "{ \"error\":400, \"reason\":\"KA-BIND: query parameter must be set\" }")); } - return super.postAgent(body,asset,queryLn,query,_vin,troubleCode); + return super.postAgent(body, asset, queryLn, query, vin, troubleCode); } @Override public Response postSkill(String body, @NotNull String asset) throws NotFoundException { - return annotate(Response.status(404,"{ \"error\":404, \"reason\":\"KA-BIND: does not support skills\" }")); + return annotate(Response.status(404, "{ \"error\":404, \"reason\":\"KA-BIND: does not support skills\" }")); } } diff --git a/conforming/src/main/java/org/eclipse/tractusx/agents/conforming/BindingProfileChecker.java b/conforming/src/main/java/org/eclipse/tractusx/agents/conforming/BindingProfileChecker.java index d7661403..15172662 100644 --- a/conforming/src/main/java/org/eclipse/tractusx/agents/conforming/BindingProfileChecker.java +++ b/conforming/src/main/java/org/eclipse/tractusx/agents/conforming/BindingProfileChecker.java @@ -16,21 +16,20 @@ // SPDX-License-Identifier: Apache-2.0 package org.eclipse.tractusx.agents.conforming; -import org.eclipse.rdf4j.model.IRI; import org.eclipse.rdf4j.query.algebra.StatementPattern; import org.eclipse.rdf4j.query.algebra.helpers.AbstractQueryModelVisitor; public class BindingProfileChecker extends AbstractQueryModelVisitor { @Override public void meet(StatementPattern node) throws Exception { - if(!node.getPredicateVar().isConstant()) { + if (!node.getPredicateVar().isConstant()) { throw new Exception("Predicate must be not constant."); } - if(!node.getPredicateVar().getValue().isIRI()) { + if (!node.getPredicateVar().getValue().isIRI()) { throw new Exception("Predicate must be IRI."); } - if("http://www.w3.org/1999/02/22-rdf-syntax-ns#type".equals(node.getPredicateVar().getValue().stringValue())) { - if(!node.getObjectVar().isConstant()) { + if ("http://www.w3.org/1999/02/22-rdf-syntax-ns#type".equals(node.getPredicateVar().getValue().stringValue())) { + if (!node.getObjectVar().isConstant()) { throw new Exception("Object of rdf:type must be constant."); } } diff --git a/conforming/src/main/java/org/eclipse/tractusx/agents/conforming/Bootstrap.java b/conforming/src/main/java/org/eclipse/tractusx/agents/conforming/Bootstrap.java index af496dc7..c8e1794c 100644 --- a/conforming/src/main/java/org/eclipse/tractusx/agents/conforming/Bootstrap.java +++ b/conforming/src/main/java/org/eclipse/tractusx/agents/conforming/Bootstrap.java @@ -16,35 +16,35 @@ // SPDX-License-Identifier: Apache-2.0 package org.eclipse.tractusx.agents.conforming; -import org.eclipse.tractusx.agents.conforming.api.JsonProvider; -import org.eclipse.tractusx.agents.conforming.api.SparqlProvider; -import org.eclipse.tractusx.agents.conforming.api.XmlProvider; import io.swagger.v3.oas.annotations.OpenAPIDefinition; import io.swagger.v3.oas.annotations.info.Contact; import io.swagger.v3.oas.annotations.info.Info; import io.swagger.v3.oas.annotations.info.License; +import org.eclipse.tractusx.agents.conforming.api.JsonProvider; +import org.eclipse.tractusx.agents.conforming.api.SparqlProvider; +import org.eclipse.tractusx.agents.conforming.api.XmlProvider; import org.glassfish.jersey.media.multipart.MultiPartFeature; import org.glassfish.jersey.server.ResourceConfig; import org.glassfish.jersey.simple.SimpleContainerFactory; import org.glassfish.jersey.simple.SimpleServer; import sun.misc.Signal; -import javax.ws.rs.core.UriBuilder; import java.io.IOException; import java.net.URI; +import javax.ws.rs.core.UriBuilder; @OpenAPIDefinition( - info = @Info( - title = "Swagger Server", - version = "0.8.7", - description = "# Motivation This API is designed along the [W3C SPARQL 1.1](https://www.w3.org/TR/sparql11-query/) specification. It represents the core interface of the Catena-X Knowledge Agents (CX KA) Architecture to enable federated (i.e. distributed, but independent) and sovereign (i.e. collaborative, but controlled and secured) data processing over GAIA-X/IDS dataspaces. For that purpose, this API is used in three different functions/building blocks of CX KA: 1. As a Consumer-facing entrypoint into the dataspace (the so-called Matchmaking Agent). 2. As a Provider-facing callback from the dataspace into the backend (the so-called Binding Agent). 3. As an intermediate Transfer protocol between \"Sinks\" representing SPARQL Remote Service Contexts (=sub queries/routines) and the corresponding \"Sources\" representing backend-bound SPARQL Graph Contexts. These Sinks and Sources are to be implemented using the EDC (Eclipse Dataspace Components) framework. For each of these three functions, a particular \"profile\" of this API (here: a fragment or variant of the full-blown SPARQL 1.1 specification) is employed: 1. The KA-MATCH profile allows to call federated SPARQL logic as stored procedures (so-called Skills) based on a rich set of meta-data (ontology) 2. The KA-BIND profile allows to delegate non-federated and data-focussed SPARQL sub-queries by compiling them into native backend API calls (e.g. in SQL or REST). 3. The KA-TRANSFER profile allows to wrap (and unwrap) well-defined header and protocol information from SPARQL into the generic payload of the EDC Http transfer. This API is already designed with alternative query protocols (such as GRAPHQL or Federated SQL) in mind. # Examples ## Invoke a Locally-Stored Parameterized Skill (Simple) ``` curl --location '${KA-MATCH}/agent?asset=urn%3Acx%3ASkill%3Aconsumer%3ALifetime&(vin=WBAAL31029PZ00001&troubleCode=P0746&troubleCode=P0745)&(vin=WBAAL31029PZ00002&troubleCode=P0744)&(vin=WBAAL31029PZ00003&troubleCode=P0743)' \\ --header 'Authorization: Basic ${UuencodedUsernameColonPassword}' ``` ## Invoke a Dataspace-Stored Parameterized Skill (Flexible) ``` curl --location '${KA-MATCH}/agent?asset=${EDC-BUSINESSPARTNER}%23urn%3Acx%3ASkill%3Aconsumer%3ALifetime' \\ --header 'Content-Type: application/sparql-results+json' \\ --header 'Authorization: Basic ${UuencodedUsernameColonPassword}' \\ --data '{ \"head\": { \"vars\": [ \"vin\", \"troubleCode\" ] }, \"results\": { \"bindings\": [ { \"vin\": { \"type\": \"literal\", \"value\": \"WBAAL31029PZ00001\" }, \"troubleCode\": { \"type\": \"literal\", \"value\": \"P0746\" } }, { \"vin\": { \"type\": \"literal\", \"value\": \"WBAAL31029PZ00001\" }, \"troubleCode\": { \"type\": \"literal\", \"value\": \"P0745\" } }, { \"vin\": { \"type\": \"literal\", \"value\": \"WBAAL31029PZ00002\" }, \"troubleCode\": { \"type\": \"literal\", \"value\": \"P0744\" } } ] } }' ``` ## Register a Parameterized Skill ``` curl --location '${KA-MATCH}/agent/skill?asset=urn%3Acx%3ASkill%3Aconsumer%3ALifetime' \\ --header 'Content-Type: application/sparql-query' \\ --header 'Authorization: Basic ${UuencodedUsernameColonPassword}' \\ --data-raw 'PREFIX xsd: PREFIX rdf: PREFIX rdfs: PREFIX cx: ############################################################################################ # Catena-X Knowledge Agents Sample Federated Skill # Realizes a 5-Step Business Process # \"Remaining Useful Life Prognosis based on Diagnosis TroubleCodes\" ############################################################################################ # Preconditions: # - A Contract Offering from OEM (e.g. BMW) to CONSUMER (e.g. ADAC) # - VIN-VAN Conversion # - DTC Analysis/Resolution (including the READING of PartType and Description) # - Serial Part & SUPPLIER Lookup # - A Contract Offering from SUPPLIER (e.g. ZF) to OEM # - Telematics data (including the PROPAGATION of LoadSpectrum) # - RUL Prognosis Invocation (including the DISTRIBUTION of RUL results) ############################################################################################ #### # 5. Project the actual output of the Skill on CONSUMER side #### SELECT ?van ?troubleCode ?description ?affectedPart ?distanceKm ?timeDays ?vin WHERE { #### # 1. The CONSUMER detects a trouble code on a car in his fleet #### VALUES (?vin ?troubleCode) { (\"@vin\"^^xsd:string \"@troubleCode\"^^xsd:string) }. #### # 2. The CONSUMER looks up the OEM (connector) associated to the VIN # using the Federated Data Catalogue (Catalogue=Default Graph) #### ?oem cx:isIssuerOfVehicleIdentificationNumber ?vin; cx:hasConnector ?oemConnector. ?oemConnector cx:offersAsset ?diagnoseAsset. ?diagnoseAsset rdf:type ; rdfs:isDefinedBy . #### # 3. The CONSUMER delegates the following logic to the OEM (connector) #### SERVICE ?oemConnector { #### # 3.1 The OEM (e.g. BMW) anomyzes the VIN into an anomymous (VAN) node #. and gets some master data with it #### ?van cx:isAnonymousVehicle ?vin; cx:hasRegistration ?registration. #### # 3.2 The OEM analyzes the DTC-affected part type (Diagnosis Graph) #### GRAPH ?diagnoseAsset { ?Dtc rdf:type cx:DTC; cx:Code ?troubleCode; cx:affects [ cx:EnDenomination ?partType ]; cx:Description ?description. } # OEM#Diagnosis context #### # 3.3 The OEM obtains fresh telematics/load-spectrum data for the vehicle # focussed to the problematic partType (Telematics Graph) #### ?van cx:latestMileageReceived ?mileage; cx:latestDetailReceived ?telematicsDetail. ?telematicsDetail cx:hasPartType ?partType; cx:hasLoadSpectrum ?loadSpectrum. #### # 3.4 The OEM looks up the serialized part of the VAN (Traceability Graph) # and the supplier address in the dataspace #### ?serializedPart cx:isComponentOf+ ?van; cx:hasPartType ?partType; cx:hasName ?affectedPart; cx:hasSupplier [ cx:hasConnector ?tieraConnector ]. ?tieraConnector cx:offersAsset ?prognosisAsset. ?prognosisAsset rdfs:isDefinedBy . #### # 4. The OEM (and not the CONSUMER) delegates to the SUPPLIER (connector) # which means that load spectrum data etc is only exchanged using their # contract and between their connectors. #### SERVICE ?tieraConnector { #### # 4.1 The SUPPLIER adds additional measurement information #### ?telematicsDetail cx:hasFile ?loadSpectrumFile; cx:hasHeader ?loadSpectrumHeader. #### # 4.2 The SUPPLIER invokes a prognosis model associated the part type using the load-spectrum data #### GRAPH ?prognosisAsset { ?invocation rdf:type cx:LifetimePrognosis; # <--General vehicle info cx:loadCollectiveMileage ?mileage; cx:loadCollectiveRegistrationDate ?registration; # <--Part Info from the OEM cx:loadCollectiveComponent ?affectedPart; cx:loadCollectiveBody ?loadSpectrum; # <--Additional info from the SUPPLIER cx:loadCollectiveFile ?loadSpectrumFile; cx:loadCollectiveHeader ?loadSpectrumHeader; # -->the actual prognosis output cx:remainingDistance ?distanceKm; cx:remainingTime ?timeDays. } # SUPPLIER#Prognosis context } # SUPPLIER context } # OEM context # now we do reporting/operationalising on the CONSUMER side } ORDER BY ?remainingDistance LIMIT 5' ``` ## Invoke an Ad-hoc Query ``` curl --location '${KA-BIND}/agent' \\ --header 'Content-Type: application/sparql-query' \\ --header 'Authorization: Basic ${UuencodedUsernameColonPassword}' \\ --data-raw 'PREFIX xsd: PREFIX rdf: PREFIX rdfs: PREFIX cx: # Sample Graph Context that is Delegated/Instantiated to a Binding Agent Call SELECT ?partType ?description WHERE { VALUES (?troubleCode) { (\"P0745\"^^xsd:string) (\"P0746\"^^xsd:string) }. ?Dtc rdf:type cx:DTC; cx:Code ?troubleCode; cx:affects [ cx:EnDenomination ?partType ]; cx:Description ?description. } ``` ", - termsOfService = "http://catenax.io", - contact = @Contact(email = "info@catenax.io"), - license = @License( - name = "Eclipse Public License", - url = "https://www.eclipse.org/legal/epl-2.0/" + info = @Info( + title = "Swagger Server", + version = "0.8.7", + description = "# Motivation This API is designed along the [W3C SPARQL 1.1](https://www.w3.org/TR/sparql11-query/) specification. It represents the core interface of the Catena-X Knowledge Agents (CX KA) Architecture to enable federated (i.e. distributed, but independent) and sovereign (i.e. collaborative, but controlled and secured) data processing over GAIA-X/IDS dataspaces. For that purpose, this API is used in three different functions/building blocks of CX KA: 1. As a Consumer-facing entrypoint into the dataspace (the so-called Matchmaking Agent). 2. As a Provider-facing callback from the dataspace into the backend (the so-called Binding Agent). 3. As an intermediate Transfer protocol between \"Sinks\" representing SPARQL Remote Service Contexts (=sub queries/routines) and the corresponding \"Sources\" representing backend-bound SPARQL Graph Contexts. These Sinks and Sources are to be implemented using the EDC (Eclipse Dataspace Components) framework. For each of these three functions, a particular \"profile\" of this API (here: a fragment or variant of the full-blown SPARQL 1.1 specification) is employed: 1. The KA-MATCH profile allows to call federated SPARQL logic as stored procedures (so-called Skills) based on a rich set of meta-data (ontology) 2. The KA-BIND profile allows to delegate non-federated and data-focussed SPARQL sub-queries by compiling them into native backend API calls (e.g. in SQL or REST). 3. The KA-TRANSFER profile allows to wrap (and unwrap) well-defined header and protocol information from SPARQL into the generic payload of the EDC Http transfer. This API is already designed with alternative query protocols (such as GRAPHQL or Federated SQL) in mind. # Examples ## Invoke a Locally-Stored Parameterized Skill (Simple) ``` curl --location '${KA-MATCH}/agent?asset=urn%3Acx%3ASkill%3Aconsumer%3ALifetime&(vin=WBAAL31029PZ00001&troubleCode=P0746&troubleCode=P0745)&(vin=WBAAL31029PZ00002&troubleCode=P0744)&(vin=WBAAL31029PZ00003&troubleCode=P0743)' \\ --header 'Authorization: Basic ${UuencodedUsernameColonPassword}' ``` ## Invoke a Dataspace-Stored Parameterized Skill (Flexible) ``` curl --location '${KA-MATCH}/agent?asset=${EDC-BUSINESSPARTNER}%23urn%3Acx%3ASkill%3Aconsumer%3ALifetime' \\ --header 'Content-Type: application/sparql-results+json' \\ --header 'Authorization: Basic ${UuencodedUsernameColonPassword}' \\ --data '{ \"head\": { \"vars\": [ \"vin\", \"troubleCode\" ] }, \"results\": { \"bindings\": [ { \"vin\": { \"type\": \"literal\", \"value\": \"WBAAL31029PZ00001\" }, \"troubleCode\": { \"type\": \"literal\", \"value\": \"P0746\" } }, { \"vin\": { \"type\": \"literal\", \"value\": \"WBAAL31029PZ00001\" }, \"troubleCode\": { \"type\": \"literal\", \"value\": \"P0745\" } }, { \"vin\": { \"type\": \"literal\", \"value\": \"WBAAL31029PZ00002\" }, \"troubleCode\": { \"type\": \"literal\", \"value\": \"P0744\" } } ] } }' ``` ## Register a Parameterized Skill ``` curl --location '${KA-MATCH}/agent/skill?asset=urn%3Acx%3ASkill%3Aconsumer%3ALifetime' \\ --header 'Content-Type: application/sparql-query' \\ --header 'Authorization: Basic ${UuencodedUsernameColonPassword}' \\ --data-raw 'PREFIX xsd: PREFIX rdf: PREFIX rdfs: PREFIX cx: ############################################################################################ # Catena-X Knowledge Agents Sample Federated Skill # Realizes a 5-Step Business Process # \"Remaining Useful Life Prognosis based on Diagnosis TroubleCodes\" ############################################################################################ # Preconditions: # - A Contract Offering from OEM (e.g. BMW) to CONSUMER (e.g. ADAC) # - VIN-VAN Conversion # - DTC Analysis/Resolution (including the READING of PartType and Description) # - Serial Part & SUPPLIER Lookup # - A Contract Offering from SUPPLIER (e.g. ZF) to OEM # - Telematics data (including the PROPAGATION of LoadSpectrum) # - RUL Prognosis Invocation (including the DISTRIBUTION of RUL results) ############################################################################################ #### # 5. Project the actual output of the Skill on CONSUMER side #### SELECT ?van ?troubleCode ?description ?affectedPart ?distanceKm ?timeDays ?vin WHERE { #### # 1. The CONSUMER detects a trouble code on a car in his fleet #### VALUES (?vin ?troubleCode) { (\"@vin\"^^xsd:string \"@troubleCode\"^^xsd:string) }. #### # 2. The CONSUMER looks up the OEM (connector) associated to the VIN # using the Federated Data Catalogue (Catalogue=Default Graph) #### ?oem cx:isIssuerOfVehicleIdentificationNumber ?vin; cx:hasConnector ?oemConnector. ?oemConnector cx:offersAsset ?diagnoseAsset. ?diagnoseAsset rdf:type ; rdfs:isDefinedBy . #### # 3. The CONSUMER delegates the following logic to the OEM (connector) #### SERVICE ?oemConnector { #### # 3.1 The OEM (e.g. BMW) anomyzes the VIN into an anomymous (VAN) node #. and gets some master data with it #### ?van cx:isAnonymousVehicle ?vin; cx:hasRegistration ?registration. #### # 3.2 The OEM analyzes the DTC-affected part type (Diagnosis Graph) #### GRAPH ?diagnoseAsset { ?Dtc rdf:type cx:DTC; cx:Code ?troubleCode; cx:affects [ cx:EnDenomination ?partType ]; cx:Description ?description. } # OEM#Diagnosis context #### # 3.3 The OEM obtains fresh telematics/load-spectrum data for the vehicle # focussed to the problematic partType (Telematics Graph) #### ?van cx:latestMileageReceived ?mileage; cx:latestDetailReceived ?telematicsDetail. ?telematicsDetail cx:hasPartType ?partType; cx:hasLoadSpectrum ?loadSpectrum. #### # 3.4 The OEM looks up the serialized part of the VAN (Traceability Graph) # and the supplier address in the dataspace #### ?serializedPart cx:isComponentOf+ ?van; cx:hasPartType ?partType; cx:hasName ?affectedPart; cx:hasSupplier [ cx:hasConnector ?tieraConnector ]. ?tieraConnector cx:offersAsset ?prognosisAsset. ?prognosisAsset rdfs:isDefinedBy . #### # 4. The OEM (and not the CONSUMER) delegates to the SUPPLIER (connector) # which means that load spectrum data etc is only exchanged using their # contract and between their connectors. #### SERVICE ?tieraConnector { #### # 4.1 The SUPPLIER adds additional measurement information #### ?telematicsDetail cx:hasFile ?loadSpectrumFile; cx:hasHeader ?loadSpectrumHeader. #### # 4.2 The SUPPLIER invokes a prognosis model associated the part type using the load-spectrum data #### GRAPH ?prognosisAsset { ?invocation rdf:type cx:LifetimePrognosis; # <--General vehicle info cx:loadCollectiveMileage ?mileage; cx:loadCollectiveRegistrationDate ?registration; # <--Part Info from the OEM cx:loadCollectiveComponent ?affectedPart; cx:loadCollectiveBody ?loadSpectrum; # <--Additional info from the SUPPLIER cx:loadCollectiveFile ?loadSpectrumFile; cx:loadCollectiveHeader ?loadSpectrumHeader; # -->the actual prognosis output cx:remainingDistance ?distanceKm; cx:remainingTime ?timeDays. } # SUPPLIER#Prognosis context } # SUPPLIER context } # OEM context # now we do reporting/operationalising on the CONSUMER side } ORDER BY ?remainingDistance LIMIT 5' ``` ## Invoke an Ad-hoc Query ``` curl --location '${KA-BIND}/agent' \\ --header 'Content-Type: application/sparql-query' \\ --header 'Authorization: Basic ${UuencodedUsernameColonPassword}' \\ --data-raw 'PREFIX xsd: PREFIX rdf: PREFIX rdfs: PREFIX cx: # Sample Graph Context that is Delegated/Instantiated to a Binding Agent Call SELECT ?partType ?description WHERE { VALUES (?troubleCode) { (\"P0745\"^^xsd:string) (\"P0746\"^^xsd:string) }. ?Dtc rdf:type cx:DTC; cx:Code ?troubleCode; cx:affects [ cx:EnDenomination ?partType ]; cx:Description ?description. } ``` ", + termsOfService = "http://catenax.io", + contact = @Contact(email = "info@catenax.io"), + license = @License( + name = "Eclipse Public License", + url = "https://www.eclipse.org/legal/epl-2.0/" + ) ) - ) ) public class Bootstrap { @@ -52,7 +52,6 @@ public class Bootstrap { /** * Starts Grizzly HTTP server exposing JAX-RS resources defined in this application. - * @return Grizzly HTTP server. */ public Bootstrap() { handleSignal("TERM"); @@ -72,8 +71,9 @@ public Bootstrap() { /** * Main method. - * @param args - * @throws IOException + * + * @param args arguments + * @throws IOException in case some strange things happen */ public static void main(String[] args) throws IOException { new Bootstrap(); @@ -87,7 +87,7 @@ public static void main(String[] args) throws IOException { } } - private void shutdown() { + private void shutdown() { System.out.println("Shutdown initiated"); try { server.close(); @@ -99,10 +99,10 @@ private void shutdown() { private void handleSignal(String name) { Signal signal = new Signal(name); - Signal.handle(signal, Signal -> { + Signal.handle(signal, signalEvent -> { System.out.println("Signal received: " + signal.getName()); if ("TERM".equals(signal.getName())) { - shutdown(); + shutdown(); } }); } diff --git a/conforming/src/main/java/org/eclipse/tractusx/agents/conforming/ConformingAgent.java b/conforming/src/main/java/org/eclipse/tractusx/agents/conforming/ConformingAgent.java index c7539260..67c58f91 100644 --- a/conforming/src/main/java/org/eclipse/tractusx/agents/conforming/ConformingAgent.java +++ b/conforming/src/main/java/org/eclipse/tractusx/agents/conforming/ConformingAgent.java @@ -17,20 +17,19 @@ package org.eclipse.tractusx.agents.conforming; import org.eclipse.tractusx.agents.conforming.api.AgentApi; +import org.eclipse.tractusx.agents.conforming.api.NotFoundException; import java.util.List; import java.util.Map; import java.util.concurrent.atomic.AtomicReference; import java.util.regex.Matcher; - -import org.eclipse.tractusx.agents.conforming.api.NotFoundException; - -import javax.ws.rs.core.*; -import javax.validation.constraints.*; +import javax.validation.constraints.NotNull; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; public class ConformingAgent extends AgentApi { - public static String emptyJson="{\n" + + public static String emptyJson = "{\n" + " \"head\": {\n" + " \"vars\": [\n" + " ]\n" + @@ -41,7 +40,7 @@ public class ConformingAgent extends AgentApi { " }\n" + "}"; - public static String simpleJson="{\n" + + public static String simpleJson = "{\n" + " \"head\": {\n" + " \"vars\": [\n" + " \"subject\",\n" + @@ -71,7 +70,7 @@ public class ConformingAgent extends AgentApi { " }\n" + "}"; - public static String simpleBindJson="{\n" + + public static String simpleBindJson = "{\n" + " \"head\": {\n" + " \"vars\": [\n" + " \"subject\",\n" + @@ -106,7 +105,7 @@ public class ConformingAgent extends AgentApi { " }\n" + "}"; - public static String emptyXml="\n" + + public static String emptyXml = "\n" + "\n" + " \n" + " \n" + @@ -114,7 +113,7 @@ public class ConformingAgent extends AgentApi { " \n" + ""; - public static String simpleXml="\n" + + public static String simpleXml = "\n" + "\n" + " \n" + " \n" + @@ -136,7 +135,7 @@ public class ConformingAgent extends AgentApi { " \n" + ""; - public static String simpleBindXml="\n" + + public static String simpleBindXml = "\n" + "\n" + " \n" + " \n" + @@ -166,12 +165,65 @@ public class ConformingAgent extends AgentApi { public static MediaType srx = MediaType.valueOf("application/sparql-results+xml"); public static MediaType sq = MediaType.valueOf("application/sparql-query"); - public boolean useSimple=true; - public int status=200; + public boolean useSimple = true; + public int status = 200; public String warnings = "[ { \"source-tenant\": \"BPNL00000003CQI9\", \"target-tenant\": \"BPNL00000003COJN\", \"target-asset\": \"urn:cx:GraphAsset#TestAsset\", \"problem\": \"Could not access graph.\", \"context\": \"SPARQL-QUERY 1027\" } ]"; + java.util.regex.Pattern pattern = java.util.regex.Pattern.compile("\\?(binding[0-9]+)"); + + @Override + public Response getAgent(String asset, String queryLn, String query, String vin, List troubleCode) throws NotFoundException { + MediaType resultType = getDefaultResultType(); + if (resultType == null) { + return annotate(Response.status(400, "KA-BIND/KA-MATCH: Only supports application/sparql-results+json|xml compatible Accept header")); + } + String bindingVar = null; + if (query != null) { + Matcher matcher = pattern.matcher(query); + if (matcher.find()) { + bindingVar = matcher.group(1); + } + } + return annotate(compute(resultType, bindingVar)); + } + + @Override + public Response postAgent(Object body, String asset, String queryLn, String query, String vin, List troubleCode) throws NotFoundException { + MediaType resultType = getDefaultResultType(); + if (resultType == null) { + return annotate(Response.status(400, "KA-BIND/KA-MATCH: Only supports application/sparql-results+json|xml compatible Accept header")); + } + MediaType bodyType = MediaType.valueOf(headers.getHeaderString("Content-Type")); + if (!bodyType.isCompatible(sq) && !bodyType.isCompatible(srj) && !bodyType.isCompatible(srx)) { + return annotate(Response.status(400, "KA-BIND/KA-MATCH postAgent only accepts application/sparql-query|results+json|xml in body.")); + } + String bindingVar = null; + String toCheck = query; + if (query == null) { + toCheck = String.valueOf(body); + } + if (toCheck != null) { + Matcher matcher = pattern.matcher(toCheck); + if (matcher.find()) { + bindingVar = matcher.group(1); + } + } + return annotate(compute(resultType, bindingVar)); + } + + @Override + public Response postSkill(String body, @NotNull String asset) throws NotFoundException { + if (asset.length() == 0) { + return Response.status(400, "KA-BIND/KA-MATCH postSkill requires a non-empty asset name.").build(); + } + MediaType bodyType = MediaType.valueOf(headers.getHeaderString("Content-Type")); + if (body != null || body.isEmpty() || !bodyType.isCompatible(sq)) { + return Response.status(400, "KA-BIND/KA-MATCH postSkill only accepts application/sparql-query|results+json|xml in body.").build(); + } + return Response.ok().build(); + } protected MediaType getDefaultResultType() { - if(headers.getHeaderString("Accept")!=null) { + if (headers.getHeaderString("Accept") != null) { String[] compartments = headers.getHeaderString("Accept").split(","); for (String compartment : compartments) { String[] qualifiers = compartment.split(";"); @@ -182,8 +234,8 @@ protected MediaType getDefaultResultType() { } else if (wantedEncoding.isCompatible(srx)) { return srx; } - } catch(IllegalArgumentException iae) { - System.err.printf("Warning: Ingoring unsupported accepted mediatype %s%n",qualifiers[0]); + } catch (IllegalArgumentException iae) { + System.err.printf("Warning: Ingoring unsupported accepted mediatype %s%n", qualifiers[0]); } } return null; @@ -191,45 +243,48 @@ protected MediaType getDefaultResultType() { return srj; } - /** produces a standard response */ - protected Map computeBody(MediaType resultType, String bindingVar) { + /** + * produces a standard response + */ + protected Map computeBody(MediaType resultType, String bindingVar) { String target; - if(useSimple) { - if(resultType.isCompatible(srj)) { + if (useSimple) { + if (resultType.isCompatible(srj)) { target = getSimpleJson(bindingVar); } else { - target=getSimpleXml(bindingVar); + target = getSimpleXml(bindingVar); } } else { - if(resultType.isCompatible(srj)) { - target=emptyJson; + if (resultType.isCompatible(srj)) { + target = emptyJson; } else { - target=emptyXml; + target = emptyXml; } } - return Map.of(resultType.toString(),target.getBytes()); + return Map.of(resultType.toString(), target.getBytes()); } - protected String getSimpleJson(String bindingVar) { - if(bindingVar!=null) { - return simpleBindJson.replaceAll("bindingVar",bindingVar); + if (bindingVar != null) { + return simpleBindJson.replaceAll("bindingVar", bindingVar); } return simpleJson; } protected String getSimpleXml(String bindingVar) { - if(bindingVar!=null) { + if (bindingVar != null) { return simpleBindXml.replaceAll("bindingVar", bindingVar); } else { return simpleXml; } } - /** produces a standard response */ + /** + * produces a standard response + */ protected Response.ResponseBuilder compute(MediaType resultType, String bindingVar) { - AtomicReference response= new AtomicReference<>(Response.status(status)); - Map body=computeBody(resultType, bindingVar); + AtomicReference response = new AtomicReference<>(Response.status(status)); + Map body = computeBody(resultType, bindingVar); body.forEach((key, value) -> response.set(response.get().type(key).entity(value))); return response.get(); } @@ -237,58 +292,4 @@ protected Response.ResponseBuilder compute(MediaType resultType, String bindingV protected Response annotate(Response.ResponseBuilder builder) { return builder.build(); } - - java.util.regex.Pattern pattern= java.util.regex.Pattern.compile("\\?(binding[0-9]+)"); - - @Override - public Response getAgent(String asset, String queryLn, String query, String _vin, List troubleCode) throws NotFoundException { - MediaType resultType=getDefaultResultType(); - if(resultType==null) { - return annotate(Response.status(400,"KA-BIND/KA-MATCH: Only supports application/sparql-results+json|xml compatible Accept header")); - } - String bindingVar=null; - if(query!=null) { - Matcher matcher=pattern.matcher(query); - if(matcher.find()) { - bindingVar=matcher.group(1); - } - } - return annotate(compute(resultType,bindingVar)); - } - - @Override - public Response postAgent(Object body, String asset, String queryLn, String query, String _vin, List troubleCode) throws NotFoundException { - MediaType resultType=getDefaultResultType(); - if(resultType==null) { - return annotate(Response.status(400,"KA-BIND/KA-MATCH: Only supports application/sparql-results+json|xml compatible Accept header")); - } - MediaType bodyType=MediaType.valueOf(headers.getHeaderString("Content-Type")); - if(!bodyType.isCompatible(sq) && !bodyType.isCompatible(srj) && !bodyType.isCompatible(srx)) { - return annotate(Response.status(400,"KA-BIND/KA-MATCH postAgent only accepts application/sparql-query|results+json|xml in body.")); - } - String bindingVar=null; - String toCheck=query; - if(query==null) { - toCheck=String.valueOf(body); - } - if(toCheck!=null) { - Matcher matcher=pattern.matcher(toCheck); - if(matcher.find()) { - bindingVar=matcher.group(1); - } - } - return annotate(compute(resultType,bindingVar)); - } - - @Override - public Response postSkill(String body, @NotNull String asset) throws NotFoundException { - if(asset.length()==0) { - return Response.status(400,"KA-BIND/KA-MATCH postSkill requires a non-empty asset name.").build(); - } - MediaType bodyType=MediaType.valueOf(headers.getHeaderString("Content-Type")); - if(body!=null || body.isEmpty() || !bodyType.isCompatible(sq)) { - return Response.status(400,"KA-BIND/KA-MATCH postSkill only accepts application/sparql-query|results+json|xml in body.").build(); - } - return Response.ok().build(); - } } diff --git a/conforming/src/main/java/org/eclipse/tractusx/agents/conforming/MatchmakingAgent.java b/conforming/src/main/java/org/eclipse/tractusx/agents/conforming/MatchmakingAgent.java index 80673386..009a2936 100644 --- a/conforming/src/main/java/org/eclipse/tractusx/agents/conforming/MatchmakingAgent.java +++ b/conforming/src/main/java/org/eclipse/tractusx/agents/conforming/MatchmakingAgent.java @@ -18,9 +18,9 @@ import org.eclipse.tractusx.agents.conforming.api.NotFoundException; +import java.util.List; import javax.ws.rs.Path; import javax.ws.rs.core.Response; -import java.util.List; /** * Implements a standard matchmaking agent @@ -29,29 +29,29 @@ public class MatchmakingAgent extends ConformingAgent { public MatchmakingAgent() { - status=203; + status = 203; } @Override - protected Response annotate(Response.ResponseBuilder builder) { - return builder.header("cx_warnings",warnings) - .header("Access-Control-Expose-Headers","cx_warnings, content-length, content-type") - .build(); + public Response getAgent(String asset, String queryLn, String query, String vin, List troubleCode) throws NotFoundException { + if (query == null && asset == null) { + return annotate(Response.status(400, "{ \"error\":400, \"reason\":\"KA-MATCH: query or asset parameter must be set\" }")); + } + return super.getAgent(asset, queryLn, query, vin, troubleCode); } @Override - public Response getAgent(String asset, String queryLn, String query, String _vin, List troubleCode) throws NotFoundException { - if(query==null && asset==null) { - return annotate(Response.status(400,"{ \"error\":400, \"reason\":\"KA-MATCH: query or asset parameter must be set\" }")); + public Response postAgent(Object body, String asset, String queryLn, String query, String vin, List troubleCode) throws NotFoundException { + if ((body == null || String.valueOf(body).isEmpty()) && asset == null) { + return annotate(Response.status(400, "{ \"error\":400, \"reason\":\"KA-BIND: body or asset parameter must be set\" }")); } - return super.getAgent(asset,queryLn,query,_vin,troubleCode); + return super.postAgent(body, asset, queryLn, query, vin, troubleCode); } @Override - public Response postAgent(Object body, String asset, String queryLn, String query, String _vin, List troubleCode) throws NotFoundException { - if((body==null || String.valueOf(body).isEmpty()) && asset == null) { - return annotate(Response.status(400,"{ \"error\":400, \"reason\":\"KA-BIND: body or asset parameter must be set\" }")); - } - return super.postAgent(body, asset, queryLn, query, _vin,troubleCode); + protected Response annotate(Response.ResponseBuilder builder) { + return builder.header("cx_warnings", warnings) + .header("Access-Control-Expose-Headers", "cx_warnings, content-length, content-type") + .build(); } } diff --git a/conforming/src/main/java/org/eclipse/tractusx/agents/conforming/TransferAgent.java b/conforming/src/main/java/org/eclipse/tractusx/agents/conforming/TransferAgent.java index df8b771b..1dbd7407 100644 --- a/conforming/src/main/java/org/eclipse/tractusx/agents/conforming/TransferAgent.java +++ b/conforming/src/main/java/org/eclipse/tractusx/agents/conforming/TransferAgent.java @@ -19,12 +19,12 @@ import org.eclipse.tractusx.agents.conforming.api.NotFoundException; import org.glassfish.jersey.media.multipart.FormDataMultiPart; - +import java.util.List; import javax.annotation.PostConstruct; import javax.validation.constraints.NotNull; import javax.ws.rs.Path; -import javax.ws.rs.core.*; -import java.util.List; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; /** * Implements a standard transfer agent @@ -32,24 +32,43 @@ @Path("/transfer") public class TransferAgent extends ConformingAgent { - /** the actual delegator to use */ - ConformingAgent delegator=new MatchmakingAgent(); + /** + * the actual delegator to use + */ + ConformingAgent delegator = new MatchmakingAgent(); @PostConstruct public void init() { delegator.application = application; delegator.securityContext = securityContext; delegator.headers = headers; - delegator.request=request; - delegator.response=response; - delegator.uri=uri; + delegator.request = request; + delegator.response = response; + delegator.uri = uri; + } + + @Override + public Response getAgent(String asset, String queryLn, String query, String vin, List troubleCode) throws NotFoundException { + Response intermediate = delegator.getAgent(asset, queryLn, query, vin, troubleCode); + return compute(intermediate); + } + + @Override + public Response postAgent(Object body, String asset, String queryLn, String query, String vin, List troubleCode) throws NotFoundException { + Response intermediate = delegator.postAgent(body, asset, queryLn, query, vin, troubleCode); + return compute(intermediate); + } + + @Override + public Response postSkill(String body, @NotNull String asset) throws NotFoundException { + return Response.status(404, "{ \"error\":404, \"reason\":\"KA-BIND: does not support skills\" }").build(); } @Override protected MediaType getDefaultResultType() { - if(this.uri.getQueryParameters().containsKey("cx_accepts")) { - List allCompartments=this.uri.getQueryParameters().get("cx_accepts"); - for(String compartments : allCompartments) { + if (this.uri.getQueryParameters().containsKey("cx_accepts")) { + List allCompartments = this.uri.getQueryParameters().get("cx_accepts"); + for (String compartments : allCompartments) { for (String compartment : compartments.split(",")) { String[] qualifiers = compartment.split(";"); try { @@ -60,6 +79,7 @@ protected MediaType getDefaultResultType() { return srx; } } catch (IllegalArgumentException iae) { + // we simply return null then } } } @@ -68,37 +88,22 @@ protected MediaType getDefaultResultType() { return srj; } - /** produces a standard response */ + /** + * produces a standard response + */ protected Response compute(Response delegateResponse) { - Response.ResponseBuilder response= Response.status(delegateResponse.getStatus()).type(MediaType.MULTIPART_FORM_DATA); + Response.ResponseBuilder response = Response.status(delegateResponse.getStatus()).type(MediaType.MULTIPART_FORM_DATA); FormDataMultiPart mpe = new FormDataMultiPart(); - if(delegateResponse.hasEntity()) { + if (delegateResponse.hasEntity()) { mpe.bodyPart(delegateResponse.getEntity(), delegateResponse.getMediaType()); } - if(delegateResponse.getHeaders().containsKey("cx_warnings")) { + if (delegateResponse.getHeaders().containsKey("cx_warnings")) { mpe.bodyPart(delegateResponse.getHeaderString("cx_warnings"), MediaType.APPLICATION_JSON_TYPE); } - if(mpe.getBodyParts().size()>0) { - response=response.entity(mpe); + if (mpe.getBodyParts().size() > 0) { + response = response.entity(mpe); } return response.build(); } - @Override - public Response getAgent(String asset, String queryLn, String query, String _vin, List troubleCode) throws NotFoundException { - Response intermediate=delegator.getAgent(asset,queryLn,query,_vin,troubleCode); - return compute(intermediate); - } - - @Override - public Response postAgent(Object body, String asset, String queryLn, String query, String _vin, List troubleCode) throws NotFoundException { - Response intermediate=delegator.postAgent(body, asset, queryLn, query, _vin, troubleCode); - return compute(intermediate); - } - - @Override - public Response postSkill(String body, @NotNull String asset) throws NotFoundException { - return Response.status(404,"{ \"error\":404, \"reason\":\"KA-BIND: does not support skills\" }").build(); - } - } diff --git a/conforming/src/test/java/org/eclipse/tractusx/agents/conforming/BindingAgentTest.java b/conforming/src/test/java/org/eclipse/tractusx/agents/conforming/BindingAgentTest.java index 75d9fdb8..b967b7ea 100644 --- a/conforming/src/test/java/org/eclipse/tractusx/agents/conforming/BindingAgentTest.java +++ b/conforming/src/test/java/org/eclipse/tractusx/agents/conforming/BindingAgentTest.java @@ -23,7 +23,7 @@ import javax.ws.rs.core.Application; import javax.ws.rs.core.Response; -import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * Tests the standard binding agent. this is not a test for conformance! + @@ -34,8 +34,8 @@ public class BindingAgentTest extends ConformingAgentTest { @Test public void testSkillGet() { - final Response response = target(getPath()).queryParam("asset","urn:cx:SkillAsset#Test").request().get(); - assertTrue(response.getStatus()>=400 && response.getStatus()<500,"KA-BIND: Should not be possible to get information without query"); + final Response response = target(getPath()).queryParam("asset", "urn:cx:SkillAsset#Test").request().get(); + assertTrue(response.getStatus() >= 400 && response.getStatus() < 500, "KA-BIND: Should not be possible to get information without query"); } /** @@ -43,8 +43,8 @@ public void testSkillGet() { */ @Test public void testGetUnboundPredicate() { - final Response response = target(getPath()).queryParam("query","SELECT%20%3Fsubject%20%3Fpredicate%20%3Fobject%20WHERE%20%7B%20%3Fsubject%20%3Fpredicate%20%3Fobject.%7D").request().get(); - assertTrue(response.getStatus()>=400 && response.getStatus()<500,"KA-BIND: Should not be possible to query unbound predicates."); + final Response response = target(getPath()).queryParam("query", "SELECT%20%3Fsubject%20%3Fpredicate%20%3Fobject%20WHERE%20%7B%20%3Fsubject%20%3Fpredicate%20%3Fobject.%7D").request().get(); + assertTrue(response.getStatus() >= 400 && response.getStatus() < 500, "KA-BIND: Should not be possible to query unbound predicates."); } /** @@ -52,8 +52,8 @@ public void testGetUnboundPredicate() { */ @Test public void testGetUnboundRdfTypeObject() { - final Response response = target(getPath()).queryParam("query","SELECT%20%3Fsubject%20%3Fpredicate%20%3Fobject%20WHERE%20%7B%20%3Fsubject%20%3Chttp%3A%2F%2Fwww.w3.org%2F1999%2F02%2F22-rdf-syntax-ns%23type%3E%20%3Fobject.%7D").request().get(); - assertTrue(response.getStatus()>=400 && response.getStatus()<500,"KA-BIND: Should not be possible to query unbound rdf:type objects."); + final Response response = target(getPath()).queryParam("query", "SELECT%20%3Fsubject%20%3Fpredicate%20%3Fobject%20WHERE%20%7B%20%3Fsubject%20%3Chttp%3A%2F%2Fwww.w3.org%2F1999%2F02%2F22-rdf-syntax-ns%23type%3E%20%3Fobject.%7D").request().get(); + assertTrue(response.getStatus() >= 400 && response.getStatus() < 500, "KA-BIND: Should not be possible to query unbound rdf:type objects."); } /** @@ -61,11 +61,11 @@ public void testGetUnboundRdfTypeObject() { */ @Test public void testPostSkill() { - final Response response = target(getPath()+"/skill") - .queryParam("asset","urn:cx:SkillAsset#Test") + final Response response = target(getPath() + "/skill") + .queryParam("asset", "urn:cx:SkillAsset#Test") .request() - .post(Entity.entity("SELECT%20%3Fsubject%20%3Fpredicate%20%3Fobject%20WHERE%20%7B%20%3Fsubject%20%3Fpredicate%20%3Fobject.%7D","application/sparql-query")); - assertTrue(response.getStatus()>=400 && response.getStatus()<500,"KA-BIND: Should not be possible to set skills."); + .post(Entity.entity("SELECT%20%3Fsubject%20%3Fpredicate%20%3Fobject%20WHERE%20%7B%20%3Fsubject%20%3Fpredicate%20%3Fobject.%7D", "application/sparql-query")); + assertTrue(response.getStatus() >= 400 && response.getStatus() < 500, "KA-BIND: Should not be possible to set skills."); } @Override diff --git a/conforming/src/test/java/org/eclipse/tractusx/agents/conforming/ConformingAgentTest.java b/conforming/src/test/java/org/eclipse/tractusx/agents/conforming/ConformingAgentTest.java index 70d65436..8cfbab8f 100644 --- a/conforming/src/test/java/org/eclipse/tractusx/agents/conforming/ConformingAgentTest.java +++ b/conforming/src/test/java/org/eclipse/tractusx/agents/conforming/ConformingAgentTest.java @@ -16,12 +16,6 @@ // SPDX-License-Identifier: Apache-2.0 package org.eclipse.tractusx.agents.conforming; -import javax.ws.rs.client.Entity; -import javax.ws.rs.core.Response; -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; - import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import org.eclipse.tractusx.agents.conforming.api.JsonProvider; @@ -32,7 +26,6 @@ import org.glassfish.jersey.media.multipart.internal.MultiPartReaderClientSide; import org.glassfish.jersey.test.DeploymentContext; import org.glassfish.jersey.test.JerseyTest; - import org.junit.jupiter.api.Test; import org.w3c.dom.Document; import org.w3c.dom.Element; @@ -41,8 +34,14 @@ import java.io.IOException; import java.io.StringReader; +import javax.ws.rs.client.Entity; +import javax.ws.rs.core.Response; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; -import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * Tests the conforming agents themselves @@ -50,26 +49,7 @@ */ public abstract class ConformingAgentTest extends JerseyTest { - protected abstract String getPath(); - protected ObjectMapper objectMapper=new ObjectMapper(); - - - @Override - protected void configureClient(ClientConfig config) { - super.configureClient(config); - config.register(MultiPartReaderClientSide.class); - } - - @Override - protected DeploymentContext configureDeployment() { - DeploymentContext context = super.configureDeployment(); - context.getResourceConfig().register(JsonProvider.class); - context.getResourceConfig().register(XmlProvider.class); - context.getResourceConfig().register(SparqlProvider.class); - context.getResourceConfig().packages("org.glassfish.jersey.examples.multipart") - .register(MultiPartFeature.class); - return context; - } + protected ObjectMapper objectMapper = new ObjectMapper(); /** * you cannot invoke without query or skill asset definition @@ -77,7 +57,7 @@ protected DeploymentContext configureDeployment() { @Test public void testUnderspecifiedGet() { final Response response = target(getPath()).request().get(); - assertTrue(response.getStatus()>=400 && response.getStatus()<500,"KA-BIND/KA-MATCH: Should not be possible to get information without query or skill asset"); + assertTrue(response.getStatus() >= 400 && response.getStatus() < 500, "KA-BIND/KA-MATCH: Should not be possible to get information without query or skill asset"); } /** @@ -85,8 +65,8 @@ public void testUnderspecifiedGet() { */ @Test public void testUnderspecifiedPost() { - final Response response = target(getPath()).request().post(Entity.entity("","application/sparql-results+json")); - assertTrue(response.getStatus()>=400 && response.getStatus()<500, "KA-BIND/KA-MATCH: Should not be possible to post information without query or skill asset"); + final Response response = target(getPath()).request().post(Entity.entity("", "application/sparql-results+json")); + assertTrue(response.getStatus() >= 400 && response.getStatus() < 500, "KA-BIND/KA-MATCH: Should not be possible to post information without query or skill asset"); } /** @@ -94,11 +74,11 @@ public void testUnderspecifiedPost() { */ @Test public void testBindGet() throws IOException { - Response response =target(getPath()) - .queryParam("query","SELECT%20%3Fsubject%20%3Fpredicate%20%3Fobject%20WHERE%20%7B%20%3Fsubject%20%20%3Fobject.%7D") + Response response = target(getPath()) + .queryParam("query", "SELECT%20%3Fsubject%20%3Fpredicate%20%3Fobject%20WHERE%20%7B%20%3Fsubject%20%20%3Fobject.%7D") .request() .get(); - assertTrue(response.getStatus()>=200 && response.getStatus()<300,"Successful get json request"); + assertTrue(response.getStatus() >= 200 && response.getStatus() < 300, "Successful get json request"); testJsonResultSet(response); } @@ -108,14 +88,33 @@ public void testBindGet() throws IOException { @Test public void testBindGetXml() throws IOException, ParserConfigurationException, SAXException { Response response = target(getPath()) - .queryParam("query","SELECT%20%3Fsubject%20%3Fpredicate%20%3Fobject%20WHERE%20%7B%20%3Fsubject%20%20%3Fobject.%7D") + .queryParam("query", "SELECT%20%3Fsubject%20%3Fpredicate%20%3Fobject%20WHERE%20%7B%20%3Fsubject%20%20%3Fobject.%7D") .request() .accept("application/sparql-results+xml") .get(); - assertTrue(response.getStatus()>=200 && response.getStatus()<300,"Successful get xml request"); + assertTrue(response.getStatus() >= 200 && response.getStatus() < 300, "Successful get xml request"); testXmlResultSet(response); } + protected abstract String getPath(); + + @Override + protected DeploymentContext configureDeployment() { + DeploymentContext context = super.configureDeployment(); + context.getResourceConfig().register(JsonProvider.class); + context.getResourceConfig().register(XmlProvider.class); + context.getResourceConfig().register(SparqlProvider.class); + context.getResourceConfig().packages("org.glassfish.jersey.examples.multipart") + .register(MultiPartFeature.class); + return context; + } + + @Override + protected void configureClient(ClientConfig config) { + super.configureClient(config); + config.register(MultiPartReaderClientSide.class); + } + protected String getEntity(Response response) { return response.readEntity(String.class); } @@ -126,29 +125,29 @@ protected int getNumberVars() { protected void testJsonResultSet(Response response) throws IOException { String content = getEntity(response); - JsonNode node=objectMapper.readTree(content); - assertEquals(getNumberVars(),node.get("head").get("vars").size(),"Got three variables"); - assertEquals(1,node.get("results").get("bindings").size(),"got one result"); - assertEquals(getNumberVars(),node.get("results").get("bindings").get(0).size(),"got 3 bindings"); + JsonNode node = objectMapper.readTree(content); + assertEquals(getNumberVars(), node.get("head").get("vars").size(), "Got three variables"); + assertEquals(1, node.get("results").get("bindings").size(), "got one result"); + assertEquals(getNumberVars(), node.get("results").get("bindings").get(0).size(), "got 3 bindings"); } protected void testXmlResultSet(Response response) throws IOException { - DocumentBuilder builder= null; + DocumentBuilder builder = null; try { builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); } catch (ParserConfigurationException e) { - throw new IOException("Could not get Xml parser",e); + throw new IOException("Could not get Xml parser", e); } String content = getEntity(response); - Document document= null; + Document document = null; try { document = builder.parse(new InputSource(new StringReader(content))); } catch (SAXException e) { - throw new IOException("Cannot parse XML",e); + throw new IOException("Cannot parse XML", e); } - assertEquals(getNumberVars(),((Element) document.getDocumentElement().getElementsByTagName("head").item(0)).getElementsByTagName("variable").getLength(),"Got three variables"); - assertEquals(1,((Element) document.getDocumentElement().getElementsByTagName("results").item(0)).getElementsByTagName("result").getLength(),"got one result"); - assertEquals(getNumberVars(),((Element)((Element) document.getDocumentElement().getElementsByTagName("results").item(0)).getElementsByTagName("result").item(0)).getElementsByTagName("binding").getLength(),"got 3 bindings"); + assertEquals(getNumberVars(), ((Element) document.getDocumentElement().getElementsByTagName("head").item(0)).getElementsByTagName("variable").getLength(), "Got three variables"); + assertEquals(1, ((Element) document.getDocumentElement().getElementsByTagName("results").item(0)).getElementsByTagName("result").getLength(), "got one result"); + assertEquals(getNumberVars(), ((Element) ((Element) document.getDocumentElement().getElementsByTagName("results").item(0)).getElementsByTagName("result").item(0)).getElementsByTagName("binding").getLength(), "got 3 bindings"); } /** diff --git a/conforming/src/test/java/org/eclipse/tractusx/agents/conforming/MatchmakingAgentTest.java b/conforming/src/test/java/org/eclipse/tractusx/agents/conforming/MatchmakingAgentTest.java index 9a8e0cb5..0f6e7906 100644 --- a/conforming/src/test/java/org/eclipse/tractusx/agents/conforming/MatchmakingAgentTest.java +++ b/conforming/src/test/java/org/eclipse/tractusx/agents/conforming/MatchmakingAgentTest.java @@ -19,13 +19,12 @@ import org.glassfish.jersey.server.ResourceConfig; import org.junit.jupiter.api.Test; +import java.io.IOException; import javax.ws.rs.client.Entity; import javax.ws.rs.core.Application; import javax.ws.rs.core.Response; -import java.io.IOException; - -import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * Tests the standard matchmaking agent. this is not a test for conformance! + @@ -35,50 +34,45 @@ public class MatchmakingAgentTest extends ConformingAgentTest { - @Override - protected int getNumberVars() { - return 3; - } - @Test public void testMatchSkillGet() throws IOException { - Response response =target(getPath()).queryParam("asset","urn:cx:SkillAsset#Test").request().get(); - assertTrue(response.getStatus()>=200 && response.getStatus()<300,"Successful get json request"); + Response response = target(getPath()).queryParam("asset", "urn:cx:SkillAsset#Test").request().get(); + assertTrue(response.getStatus() >= 200 && response.getStatus() < 300, "Successful get json request"); testJsonResultSet(response); } @Test public void testMatchSkillPost() throws IOException { - Response response =target(getPath()).queryParam("asset","urn:cx:SkillAsset#Test").request(). - post(Entity.entity(ConformingAgent.emptyJson,"application/sparql-results+json")); - assertTrue(response.getStatus()>=200 && response.getStatus()<300,"Successful post skill request"); + Response response = target(getPath()).queryParam("asset", "urn:cx:SkillAsset#Test").request(). + post(Entity.entity(ConformingAgent.emptyJson, "application/sparql-results+json")); + assertTrue(response.getStatus() >= 200 && response.getStatus() < 300, "Successful post skill request"); testJsonResultSet(response); } @Test public void testMatchSkillPostXml() throws IOException { - Response response =target(getPath()).queryParam("asset","urn:cx:SkillAsset#Test").request() + Response response = target(getPath()).queryParam("asset", "urn:cx:SkillAsset#Test").request() .accept("application/sparql-results+xml") - .post(Entity.entity(ConformingAgent.emptyXml,"application/sparql-results+xml")); - assertTrue(response.getStatus()>=200 && response.getStatus()<300,"Successful post skill xml request"); + .post(Entity.entity(ConformingAgent.emptyXml, "application/sparql-results+xml")); + assertTrue(response.getStatus() >= 200 && response.getStatus() < 300, "Successful post skill xml request"); testXmlResultSet(response); } @Test public void testMatchSkillPostJsonXml() throws IOException { - Response response =target(getPath()).queryParam("asset","urn:cx:SkillAsset#Test").request() + Response response = target(getPath()).queryParam("asset", "urn:cx:SkillAsset#Test").request() .accept("application/sparql-results+json") - .post(Entity.entity(ConformingAgent.emptyXml,"application/sparql-results+xml")); - assertTrue(response.getStatus()>=200 && response.getStatus()<300,"Successful post skill json request"); + .post(Entity.entity(ConformingAgent.emptyXml, "application/sparql-results+xml")); + assertTrue(response.getStatus() >= 200 && response.getStatus() < 300, "Successful post skill json request"); testJsonResultSet(response); } @Test public void testMatchSkillPostXmlJson() throws IOException { - Response response =target(getPath()).queryParam("asset","urn:cx:SkillAsset#Test").request() + Response response = target(getPath()).queryParam("asset", "urn:cx:SkillAsset#Test").request() .accept("application/sparql-results+xml") - .post(Entity.entity(ConformingAgent.emptyJson,"application/sparql-results+json")); - assertTrue(response.getStatus()>=200 && response.getStatus()<300,"Successful post skill xml request"); + .post(Entity.entity(ConformingAgent.emptyJson, "application/sparql-results+json")); + assertTrue(response.getStatus() >= 200 && response.getStatus() < 300, "Successful post skill xml request"); testXmlResultSet(response); } @@ -87,6 +81,11 @@ protected String getPath() { return "/match"; } + @Override + protected int getNumberVars() { + return 3; + } + @Override protected Application configure() { return new ResourceConfig(MatchmakingAgent.class); diff --git a/conforming/src/test/java/org/eclipse/tractusx/agents/conforming/TransferAgentTest.java b/conforming/src/test/java/org/eclipse/tractusx/agents/conforming/TransferAgentTest.java index 8ba81c52..074cc963 100644 --- a/conforming/src/test/java/org/eclipse/tractusx/agents/conforming/TransferAgentTest.java +++ b/conforming/src/test/java/org/eclipse/tractusx/agents/conforming/TransferAgentTest.java @@ -22,8 +22,6 @@ import javax.ws.rs.core.Application; import javax.ws.rs.core.Response; -import static org.junit.jupiter.api.Assertions.assertEquals; - /** * Tests the standard transfer agent. this is not a test for conformance! + * It is rather a test for "exactness" such that the implementation tested can serve @@ -32,7 +30,8 @@ public class TransferAgentTest extends MatchmakingAgentTest { - @Override protected String getEntity(Response response) { + @Override + protected String getEntity(Response response) { return response.readEntity(FormDataMultiPart.class).getBodyParts().get(0).getEntityAs(String.class); } diff --git a/pom.xml b/pom.xml index 42aba9a1..2aa15041 100644 --- a/pom.xml +++ b/pom.xml @@ -97,7 +97,7 @@ org.eclipse.dash license-tool-plugin - 0.0.1-SNAPSHOT + 1.0.3-SNAPSHOT automotive.tractusx DEPENDENCIES @@ -198,16 +198,24 @@ 2.4 - com.diffplug.spotless - spotless-maven-plugin - 2.36.0 + org.apache.maven.plugins + maven-checkstyle-plugin + 3.3.0 + + ${session.executionRootDirectory}/resources/tx-checkstyle-config.xml + + config_loc=${session.executionRootDirectory}/resources + + true + true + false + - format - process-sources + validate + validate check - apply diff --git a/provisioning/README.md b/provisioning/README.md index 4ec120ec..ddb32f8b 100644 --- a/provisioning/README.md +++ b/provisioning/README.md @@ -64,7 +64,7 @@ Tractus-X focusses on not only accessing traditional SQL databases, such as [Pos * The ability to add additional schema meta-data via properties. Typically, data virtualization platforms do not define/expose any primary or foreign keys. But Ontop builds its optimization techniques on these definitions. Therefore, you might "simulate" the existance of such keys by entering additional properties. For that purpose, you should configure an instance of the [KeyAwareDremioDBMetadataProvider](src/main/java/it/unibz/inf/ontop/dbschema/impl/KeyAwareDremioDBMetadataProvider.java) ```console -com.dremio.jdbc.Driver-metadataProvider = it.unibz.inf.ontop.dbschema.impl.KeyAwareDremioDBMetadataProvider +com.dremio.jdbc.Driver-metadataProvider = it.unibz.inf.ontop.dbschema.impl.KeyAwareDremioDbMetadataProvider com.dremio.jdbc.Driver-schemas = HI_TEST_OEM, TRACE_TEST_OEM com.dremio.jdbc.Driver-tables.HI_TEST_OEM = CX_RUL_SerialPartTypization_Vehicle,CX_RUL_SerialPartTypization_Component,CX_RUL_AssemblyPartRelationship,CX_RUL_LoadCollective com.dremio.jdbc.Driver-unique.HI_TEST_OEM.CX_RUL_SerialPartTypization_Vehicle = UC_VEHICLE diff --git a/provisioning/pom.xml b/provisioning/pom.xml index 3c2db48a..d70b9a6f 100644 --- a/provisioning/pom.xml +++ b/provisioning/pom.xml @@ -170,6 +170,10 @@ + + org.apache.maven.plugins + maven-checkstyle-plugin + diff --git a/provisioning/src/main/java/it/unibz/inf/ontop/dbschema/impl/AdditionalKeyMetadata.java b/provisioning/src/main/java/it/unibz/inf/ontop/dbschema/impl/AdditionalKeyMetadata.java index f81c1053..572dbc03 100644 --- a/provisioning/src/main/java/it/unibz/inf/ontop/dbschema/impl/AdditionalKeyMetadata.java +++ b/provisioning/src/main/java/it/unibz/inf/ontop/dbschema/impl/AdditionalKeyMetadata.java @@ -29,7 +29,7 @@ public class AdditionalKeyMetadata { - protected final Map> primaryKeys=new HashMap<>(); + protected final Map> primaryKeys = new HashMap<>(); public Map> getPrimaryKeys() { return primaryKeys; @@ -47,10 +47,10 @@ public Map> getForeignKeyTargets() { return foreignKeyTargets; } - protected final Map>> uniqueKeys=new HashMap<>(); - protected final Map>> foreignKeys=new HashMap<>(); - protected final Map> foreignKeyTargets=new HashMap<>(); - protected final Map> foreignKeyUniques=new HashMap<>(); + protected final Map>> uniqueKeys = new HashMap<>(); + protected final Map>> foreignKeys = new HashMap<>(); + protected final Map> foreignKeyTargets = new HashMap<>(); + protected final Map> foreignKeyUniques = new HashMap<>(); protected final String jdbcDriver; public Map> getForeignKeyUniques() { @@ -58,63 +58,63 @@ public Map> getForeignKeyUniques() { } public AdditionalKeyMetadata(OntopModelSettings settings, QuotedIDFactory idFactory) { - jdbcDriver=settings.getProperty("jdbc.driver").orElse(""); - Stream schemas=settings.getProperty(jdbcDriver+"-schemas").stream(). - flatMap(prop -> Arrays.stream(prop.split(","))).filter(schema -> !schema.isEmpty()); + jdbcDriver = settings.getProperty("jdbc.driver").orElse(""); + Stream schemas = settings.getProperty(jdbcDriver + "-schemas").stream() + .flatMap(prop -> Arrays.stream(prop.split(","))).filter(schema -> !schema.isEmpty()); schemas.forEach(schema -> { - Stream tables=settings.getProperty(jdbcDriver+"-tables."+schema).stream(). - flatMap(prop -> Arrays.stream(prop.split(","))).filter(table -> !table.isEmpty()); + Stream tables = settings.getProperty(jdbcDriver + "-tables." + schema).stream() + .flatMap(prop -> Arrays.stream(prop.split(","))).filter(table -> !table.isEmpty()); tables.forEach(table -> { - Stream columns = settings.getProperty(jdbcDriver+"-primary."+schema+"."+table).stream(). - flatMap(prop -> Arrays.stream(prop.split(","))).filter(column -> !column.isEmpty()).map(idFactory::createAttributeID); - List pkColumns= columns.collect(Collectors.toList()); - if(!pkColumns.isEmpty()) { - primaryKeys.put(schema+"."+table,pkColumns); + Stream columns = settings.getProperty(jdbcDriver + "-primary." + schema + "." + table).stream() + .flatMap(prop -> Arrays.stream(prop.split(","))).filter(column -> !column.isEmpty()).map(idFactory::createAttributeID); + List pkColumns = columns.collect(Collectors.toList()); + if (!pkColumns.isEmpty()) { + primaryKeys.put(schema + "." + table, pkColumns); } - Stream constraints = settings.getProperty(jdbcDriver+"-unique."+schema+"."+table).stream(). - flatMap(prop -> Arrays.stream(prop.split(","))).filter(constraint -> !constraint.isEmpty()); - Map> uniques=new HashMap<>(); - constraints.forEach( constraint -> { - Stream constraintColumns = settings.getProperty(jdbcDriver+"-constraint."+constraint).stream(). - flatMap(prop -> Arrays.stream(prop.split(","))).filter(column -> !column.isEmpty()).map(idFactory::createAttributeID); + Stream constraints = settings.getProperty(jdbcDriver + "-unique." + schema + "." + table).stream() + .flatMap(prop -> Arrays.stream(prop.split(","))).filter(constraint -> !constraint.isEmpty()); + Map> uniques = new HashMap<>(); + constraints.forEach(constraint -> { + Stream constraintColumns = settings.getProperty(jdbcDriver + "-constraint." + constraint).stream() + .flatMap(prop -> Arrays.stream(prop.split(","))).filter(column -> !column.isEmpty()).map(idFactory::createAttributeID); List ucColumns = constraintColumns.collect(Collectors.toList()); - if(!ucColumns.isEmpty()) { - uniques.put(constraint,ucColumns); + if (!ucColumns.isEmpty()) { + uniques.put(constraint, ucColumns); } }); - if(!uniques.isEmpty()) { - uniqueKeys.put(schema+"."+table,uniques); + if (!uniques.isEmpty()) { + uniqueKeys.put(schema + "." + table, uniques); } - Stream fconstraints = settings.getProperty(jdbcDriver+"-foreign."+schema+"."+table).stream(). - flatMap(prop -> Arrays.stream(prop.split(","))).filter(constraint -> !constraint.isEmpty()); - Map> foreigns=new HashMap<>(); - Map targets=new HashMap<>(); - Map funiques=new HashMap<>(); - fconstraints.forEach( constraint -> { - String def=settings.getProperty(jdbcDriver+"-constraint."+constraint).orElse(""); - int colonIndex=def.indexOf(":"); - if(colonIndex>0) { + Stream fconstraints = settings.getProperty(jdbcDriver + "-foreign." + schema + "." + table).stream() + .flatMap(prop -> Arrays.stream(prop.split(","))).filter(constraint -> !constraint.isEmpty()); + Map> foreigns = new HashMap<>(); + Map targets = new HashMap<>(); + Map funiques = new HashMap<>(); + fconstraints.forEach(constraint -> { + String def = settings.getProperty(jdbcDriver + "-constraint." + constraint).orElse(""); + int colonIndex = def.indexOf(":"); + if (colonIndex > 0) { String target = def.substring(colonIndex + 1); def = def.substring(0, colonIndex); - int plusIndex=target.indexOf("+"); - if(plusIndex>0) { - String uniqueRef=target.substring(plusIndex+1); - target=target.substring(0,plusIndex); - Stream constraintColumns = Arrays.stream(def.split(",")). - flatMap(prop -> Arrays.stream(prop.split(","))).filter(column -> !column.isEmpty()).map(idFactory::createAttributeID); + int plusIndex = target.indexOf("+"); + if (plusIndex > 0) { + String uniqueRef = target.substring(plusIndex + 1); + target = target.substring(0, plusIndex); + Stream constraintColumns = Arrays.stream(def.split(",")) + .flatMap(prop -> Arrays.stream(prop.split(","))).filter(column -> !column.isEmpty()).map(idFactory::createAttributeID); List fcColumns = constraintColumns.collect(Collectors.toList()); if (!fcColumns.isEmpty()) { foreigns.put(constraint, fcColumns); targets.put(constraint, target); - funiques.put(constraint,uniqueRef); + funiques.put(constraint, uniqueRef); } } } }); - if(!foreigns.isEmpty()) { - foreignKeys.put(schema+"."+table,foreigns); - foreignKeyTargets.put(schema+"."+table,targets); - foreignKeyUniques.put(schema+"."+table,funiques); + if (!foreigns.isEmpty()) { + foreignKeys.put(schema + "." + table, foreigns); + foreignKeyTargets.put(schema + "." + table, targets); + foreignKeyUniques.put(schema + "." + table, funiques); } }); }); diff --git a/provisioning/src/main/java/it/unibz/inf/ontop/dbschema/impl/DruidMetadataProvider.java b/provisioning/src/main/java/it/unibz/inf/ontop/dbschema/impl/DruidMetadataProvider.java index 163682de..d9a79c9a 100644 --- a/provisioning/src/main/java/it/unibz/inf/ontop/dbschema/impl/DruidMetadataProvider.java +++ b/provisioning/src/main/java/it/unibz/inf/ontop/dbschema/impl/DruidMetadataProvider.java @@ -18,11 +18,13 @@ import com.google.inject.assistedinject.Assisted; import com.google.inject.assistedinject.AssistedInject; -import java.sql.*; -import it.unibz.inf.ontop.injection.CoreSingletons; +import it.unibz.inf.ontop.dbschema.RelationID; import it.unibz.inf.ontop.exception.MetadataExtractionException; +import it.unibz.inf.ontop.injection.CoreSingletons; -import it.unibz.inf.ontop.dbschema.*; +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.SQLException; /** * Ontop MetadataProvider which adapts the @@ -42,6 +44,7 @@ public DruidMetadataProvider(@Assisted Connection connection, CoreSingletons cor /** * we do not use schema and catalogue names in the OBDA defitions + * * @param rs resultset * @param catalogNameColumn catalog - will be named "druid" * @param schemaNameColumn schema - will be named "druid" diff --git a/provisioning/src/main/java/it/unibz/inf/ontop/dbschema/impl/KeyAwareDremioDBMetadataProvider.java b/provisioning/src/main/java/it/unibz/inf/ontop/dbschema/impl/KeyAwareDremioDbMetadataProvider.java similarity index 70% rename from provisioning/src/main/java/it/unibz/inf/ontop/dbschema/impl/KeyAwareDremioDBMetadataProvider.java rename to provisioning/src/main/java/it/unibz/inf/ontop/dbschema/impl/KeyAwareDremioDbMetadataProvider.java index 4f5d8aba..2c98ee02 100644 --- a/provisioning/src/main/java/it/unibz/inf/ontop/dbschema/impl/KeyAwareDremioDBMetadataProvider.java +++ b/provisioning/src/main/java/it/unibz/inf/ontop/dbschema/impl/KeyAwareDremioDbMetadataProvider.java @@ -19,7 +19,14 @@ import com.google.common.collect.ImmutableList; import com.google.inject.assistedinject.Assisted; import com.google.inject.assistedinject.AssistedInject; -import it.unibz.inf.ontop.dbschema.*; +import it.unibz.inf.ontop.dbschema.AttributeNotFoundException; +import it.unibz.inf.ontop.dbschema.ForeignKeyConstraint; +import it.unibz.inf.ontop.dbschema.MetadataLookup; +import it.unibz.inf.ontop.dbschema.NamedRelationDefinition; +import it.unibz.inf.ontop.dbschema.QuotedID; +import it.unibz.inf.ontop.dbschema.RelationDefinition; +import it.unibz.inf.ontop.dbschema.RelationID; +import it.unibz.inf.ontop.dbschema.UniqueConstraint; import it.unibz.inf.ontop.exception.MetadataExtractionException; import it.unibz.inf.ontop.exception.RelationNotFoundInMetadataException; import it.unibz.inf.ontop.injection.CoreSingletons; @@ -31,29 +38,32 @@ import java.sql.DatabaseMetaData; import java.sql.ResultSet; import java.sql.SQLException; -import java.util.*; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; /** * metadata provider which may mimique primary and foreign keys from * the config */ -public class KeyAwareDremioDBMetadataProvider extends DremioDBMetadataProvider { +public class KeyAwareDremioDbMetadataProvider extends DremioDBMetadataProvider { protected final OntopModelSettings dremioSettings; protected final AdditionalKeyMetadata additionalKeyMetadata; @AssistedInject - public KeyAwareDremioDBMetadataProvider(@Assisted Connection connection, CoreSingletons coreSingletons) throws MetadataExtractionException { - super(connection,coreSingletons); - dremioSettings=coreSingletons.getSettings(); - additionalKeyMetadata=new AdditionalKeyMetadata(dremioSettings,rawIdFactory); + public KeyAwareDremioDbMetadataProvider(@Assisted Connection connection, CoreSingletons coreSingletons) throws MetadataExtractionException { + super(connection, coreSingletons); + dremioSettings = coreSingletons.getSettings(); + additionalKeyMetadata = new AdditionalKeyMetadata(dremioSettings, rawIdFactory); } @Override public NamedRelationDefinition getRelation(RelationID id0) throws MetadataExtractionException { DBTypeFactory dbTypeFactory = dbParameters.getDBTypeFactory(); RelationID id = getCanonicalRelationId(id0); - List pkCols=additionalKeyMetadata.getPrimaryKeys().get(getRelationSchema(id)+"."+getRelationName(id)); + List pkCols = additionalKeyMetadata.getPrimaryKeys().get(getRelationSchema(id) + "." + getRelationName(id)); try (ResultSet rs = metadata.getColumns( getRelationCatalog(id), // catalog is not escaped escapeRelationIdComponentPattern(getRelationSchema(id)), @@ -62,8 +72,8 @@ public NamedRelationDefinition getRelation(RelationID id0) throws MetadataExtrac Map relations = new HashMap<>(); while (rs.next()) { - RelationID extractedId = getRelationID(rs, "TABLE_CAT", "TABLE_SCHEM","TABLE_NAME"); - checkSameRelationID(extractedId, id,"getColumns"); + RelationID extractedId = getRelationID(rs, "TABLE_CAT", "TABLE_SCHEM", "TABLE_NAME"); + checkSameRelationID(extractedId, id, "getColumns"); RelationDefinition.AttributeListBuilder builder = relations.computeIfAbsent(extractedId, i -> DatabaseTableDefinition.attributeListBuilder()); @@ -71,9 +81,9 @@ public NamedRelationDefinition getRelation(RelationID id0) throws MetadataExtrac QuotedID attributeId = rawIdFactory.createAttributeID(rs.getString("COLUMN_NAME")); // columnNoNulls, columnNullable, columnNullableUnknown boolean isNullable = rs.getInt("NULLABLE") != DatabaseMetaData.columnNoNulls; - if(pkCols!=null) { - if(pkCols.contains(attributeId)) { - isNullable=false; + if (pkCols != null) { + if (pkCols.contains(attributeId)) { + isNullable = false; } } String typeName = rs.getString("TYPE_NAME"); @@ -92,8 +102,7 @@ public NamedRelationDefinition getRelation(RelationID id0) throws MetadataExtrac throw relations.isEmpty() ? new RelationNotFoundInMetadataException(id, getRelationIDs()) : new MetadataExtractionException("Cannot resolve ambiguous relation id: " + id + ": " + relations.keySet()); - } - catch (SQLException e) { + } catch (SQLException e) { throw new MetadataExtractionException(e); } } @@ -105,9 +114,7 @@ public void insertIntegrityConstraints(NamedRelationDefinition relation, Metadat //patchPrimaryKey(relation); patchUniqueAttributes(relation); patchForeignKeys(relation, metadataLookup); - } - catch ( - SQLException e) { + } catch (SQLException e) { throw new MetadataExtractionException(e); } } @@ -129,8 +136,8 @@ public void insertIntegrityConstraints(NamedRelationDefinition relation, Metadat private void patchUniqueAttributes(NamedRelationDefinition relation) throws MetadataExtractionException, SQLException { RelationID id = getCanonicalRelationId(relation.getID()); - Map> constraints = additionalKeyMetadata.getUniqueKeys().get(getRelationSchema(id)+"."+getRelationName(id)); - if(constraints!=null) { + Map> constraints = additionalKeyMetadata.getUniqueKeys().get(getRelationSchema(id) + "." + getRelationName(id)); + if (constraints != null) { for (Map.Entry> constraint : constraints.entrySet()) { UniqueConstraint.Builder builder = UniqueConstraint.builder(relation, constraint.getKey()); try { @@ -147,24 +154,24 @@ private void patchUniqueAttributes(NamedRelationDefinition relation) throws Meta private void patchForeignKeys(NamedRelationDefinition relation, MetadataLookup dbMetadata) throws MetadataExtractionException, SQLException { RelationID id = getCanonicalRelationId(relation.getID()); - Map> foreigns=additionalKeyMetadata.getForeignKeys().get(getRelationSchema(id)+"."+getRelationName(id)); - Map targets=additionalKeyMetadata.getForeignKeyTargets().get(getRelationSchema(id)+"."+getRelationName(id)); - Map uniques=additionalKeyMetadata.getForeignKeyUniques().get(getRelationSchema(id)+"."+getRelationName(id)); - if(foreigns!=null) { + Map> foreigns = additionalKeyMetadata.getForeignKeys().get(getRelationSchema(id) + "." + getRelationName(id)); + Map targets = additionalKeyMetadata.getForeignKeyTargets().get(getRelationSchema(id) + "." + getRelationName(id)); + Map uniques = additionalKeyMetadata.getForeignKeyUniques().get(getRelationSchema(id) + "." + getRelationName(id)); + if (foreigns != null) { for (Map.Entry> constraint : foreigns.entrySet()) { - String refTable=targets.get(constraint.getKey()); - List pkIdComponents=new ArrayList<>(id.getComponents()); + String refTable = targets.get(constraint.getKey()); + List pkIdComponents = new ArrayList<>(id.getComponents()); pkIdComponents.remove(0); - pkIdComponents.add(0,rawIdFactory.createAttributeID(refTable)); - RelationID pkId= new RelationIDImpl(new ImmutableList.Builder().addAll(pkIdComponents).build()); + pkIdComponents.add(0, rawIdFactory.createAttributeID(refTable)); + RelationID pkId = new RelationIDImpl(new ImmutableList.Builder().addAll(pkIdComponents).build()); NamedRelationDefinition ref = dbMetadata.getRelation(pkId); - ForeignKeyConstraint.Builder builder=ForeignKeyConstraint.builder(constraint.getKey(), relation, ref); + ForeignKeyConstraint.Builder builder = ForeignKeyConstraint.builder(constraint.getKey(), relation, ref); - List atts=constraint.getValue(); - List uatts=additionalKeyMetadata.getUniqueKeys().get(getRelationSchema(id)+"."+refTable).get(uniques.get(constraint.getKey())); + List atts = constraint.getValue(); + List uatts = additionalKeyMetadata.getUniqueKeys().get(getRelationSchema(id) + "." + refTable).get(uniques.get(constraint.getKey())); try { - for(int count=0;count - + + org.apache.maven.plugins + maven-checkstyle-plugin + diff --git a/remoting/src/main/java/org/eclipse/tractusx/agents/remoting/Application.java b/remoting/src/main/java/org/eclipse/tractusx/agents/remoting/Application.java index d74b6b7e..2b2655eb 100644 --- a/remoting/src/main/java/org/eclipse/tractusx/agents/remoting/Application.java +++ b/remoting/src/main/java/org/eclipse/tractusx/agents/remoting/Application.java @@ -24,7 +24,11 @@ import org.eclipse.rdf4j.repository.Repository; import org.eclipse.rdf4j.repository.RepositoryConnection; import org.eclipse.rdf4j.repository.sail.SailRepository; -import org.eclipse.tractusx.agents.remoting.config.*; +import org.eclipse.tractusx.agents.remoting.config.ArgumentConfig; +import org.eclipse.tractusx.agents.remoting.config.RemotingSailConfig; +import org.eclipse.tractusx.agents.remoting.config.ResultConfig; +import org.eclipse.tractusx.agents.remoting.config.ReturnValueConfig; +import org.eclipse.tractusx.agents.remoting.config.ServiceConfig; import java.util.Arrays; @@ -41,28 +45,29 @@ public class Application { @Override public String toString() { - return super.toString()+"/application"; + return super.toString() + "/application"; } /** * main logic sets up the rdf4j server programatically. + * * @param args command line args */ - public static void main(String[] args) { - RemotingSailConfig rsc=new RemotingSailConfig(RemotingSailFactory.SAIL_TYPE); - ServiceConfig ic=new ServiceConfig(); - rsc.putService("https://www.w3id.org/catenax/ontology/prognosis#Invocation",ic); + public static void main(String[] args) { + RemotingSailConfig rsc = new RemotingSailConfig(RemotingSailFactory.SAIL_TYPE); + ServiceConfig ic = new ServiceConfig(); + rsc.putService("https://www.w3id.org/catenax/ontology/prognosis#Invocation", ic); ic.setTargetUri("class:io.catenax.knowledge.agents.remoting.TestFunction#test"); - ArgumentConfig ac=new ArgumentConfig(); + ArgumentConfig ac = new ArgumentConfig(); ac.setArgumentName("arg0"); - ic.getArguments().put("https://www.w3id.org/catenax/ontology/prognosis#input-1",ac); - ac=new ArgumentConfig(); + ic.getArguments().put("https://www.w3id.org/catenax/ontology/prognosis#input-1", ac); + ac = new ArgumentConfig(); ac.setArgumentName("arg1"); - ic.getArguments().put("https://www.w3id.org/catenax/ontology/prognosis#input-2",ac); - ReturnValueConfig rvc=new ReturnValueConfig(); - ResultConfig rc=new ResultConfig(); - rc.getOutputs().put("https://www.w3id.org/catenax/ontology/prognosis#output",rvc); + ic.getArguments().put("https://www.w3id.org/catenax/ontology/prognosis#input-2", ac); + ReturnValueConfig rvc = new ReturnValueConfig(); + ResultConfig rc = new ResultConfig(); + rc.getOutputs().put("https://www.w3id.org/catenax/ontology/prognosis#output", rvc); ic.setResult(rc); ic.setResultName("https://www.w3id.org/catenax/ontology/prognosis#Result"); @@ -70,22 +75,22 @@ public static void main(String[] args) { Repository rep = new SailRepository(new RemotingSail(rsc)); try (RepositoryConnection conn = rep.getConnection()) { - TupleQuery query=(TupleQuery) conn.prepareQuery(QueryLanguage.SPARQL, - "PREFIX cx: "+ - "PREFIX xsd: "+ - "PREFIX prognosis: "+ - "SELECT ?output "+ - "WHERE { "+ - "?invocation a prognosis:Invocation; "+ - " prognosis:input-1 \"1\"^^xsd:string; "+ - " prognosis:input-2 \"2\"^^xsd:string; "+ - " prognosis:output ?output. "+ - "}"); + TupleQuery query = (TupleQuery) conn.prepareQuery(QueryLanguage.SPARQL, + "PREFIX cx: " + + "PREFIX xsd: " + + "PREFIX prognosis: " + + "SELECT ?output " + + "WHERE { " + + "?invocation a prognosis:Invocation; " + + " prognosis:input-1 \"1\"^^xsd:string; " + + " prognosis:input-2 \"2\"^^xsd:string; " + + " prognosis:output ?output. " + + "}"); final TupleQueryResult result = query.evaluate(); - final String[] names = result.getBindingNames().toArray(new String[0]); - System.out.println("Got variables "+Arrays.toString(names)); - java.util.List bindings = Iterations.asList(result); - System.out.println("Got bindings "+Arrays.toString(bindings.toArray(new BindingSet[0]))); + final String[] names = result.getBindingNames().toArray(new String[0]); + System.out.println("Got variables " + Arrays.toString(names)); + java.util.List bindings = Iterations.asList(result); + System.out.println("Got bindings " + Arrays.toString(bindings.toArray(new BindingSet[0]))); } } } \ No newline at end of file diff --git a/remoting/src/main/java/org/eclipse/tractusx/agents/remoting/IBindingHost.java b/remoting/src/main/java/org/eclipse/tractusx/agents/remoting/BindingHost.java similarity index 97% rename from remoting/src/main/java/org/eclipse/tractusx/agents/remoting/IBindingHost.java rename to remoting/src/main/java/org/eclipse/tractusx/agents/remoting/BindingHost.java index 54c8d036..fb2f7cae 100644 --- a/remoting/src/main/java/org/eclipse/tractusx/agents/remoting/IBindingHost.java +++ b/remoting/src/main/java/org/eclipse/tractusx/agents/remoting/BindingHost.java @@ -26,9 +26,10 @@ * which holds information about the bound * variables and the incoming/outgoing tuples */ -public interface IBindingHost { +public interface BindingHost { Set getVariables(); + Collection getBindings(); } diff --git a/remoting/src/main/java/org/eclipse/tractusx/agents/remoting/Invocation.java b/remoting/src/main/java/org/eclipse/tractusx/agents/remoting/Invocation.java index fc6b5caf..62d1a835 100644 --- a/remoting/src/main/java/org/eclipse/tractusx/agents/remoting/Invocation.java +++ b/remoting/src/main/java/org/eclipse/tractusx/agents/remoting/Invocation.java @@ -16,33 +16,13 @@ // SPDX-License-Identifier: Apache-2.0 package org.eclipse.tractusx.agents.remoting; -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.io.StringWriter; -import java.lang.reflect.Array; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.lang.reflect.Parameter; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.*; -import java.util.concurrent.atomic.AtomicBoolean; -import java.util.regex.Matcher; -import java.util.regex.Pattern; -import java.util.stream.Collectors; - -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.transform.OutputKeys; -import javax.xml.transform.Transformer; -import javax.xml.transform.TransformerException; -import javax.xml.transform.TransformerFactory; -import javax.xml.transform.dom.DOMSource; -import javax.xml.transform.stream.StreamResult; - +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectReader; import com.fasterxml.jackson.databind.SerializationFeature; import com.fasterxml.jackson.databind.node.ArrayNode; +import com.fasterxml.jackson.databind.node.ObjectNode; import org.apache.http.Header; import org.apache.http.HttpEntity; import org.apache.http.client.methods.CloseableHttpResponse; @@ -62,21 +42,44 @@ import org.eclipse.rdf4j.query.algebra.Var; import org.eclipse.rdf4j.sail.SailException; import org.eclipse.tractusx.agents.remoting.callback.CallbackController; +import org.eclipse.tractusx.agents.remoting.callback.CallbackToken; import org.eclipse.tractusx.agents.remoting.config.ArgumentComparator; import org.eclipse.tractusx.agents.remoting.config.ArgumentConfig; import org.eclipse.tractusx.agents.remoting.config.ReturnValueConfig; import org.eclipse.tractusx.agents.remoting.config.ServiceConfig; import org.eclipse.tractusx.agents.remoting.util.BatchKey; -import org.eclipse.tractusx.agents.remoting.callback.CallbackToken; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.w3c.dom.Element; import org.w3c.dom.NodeList; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ObjectNode; +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.StringWriter; +import java.lang.reflect.Array; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.lang.reflect.Parameter; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.stream.Collectors; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.transform.OutputKeys; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerException; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.stream.StreamResult; /** * Implements a (batch) invocation and represents an instance of the rdf:type cx-fx:Function @@ -88,36 +91,53 @@ public class Invocation { protected static Logger logger = LoggerFactory.getLogger(Invocation.class); - public static Pattern ARGUMENT_PATTERN=Pattern.compile("\\{(?[^\\{\\}]*)\\}"); + public static final Pattern ARGUMENT_PATTERN = Pattern.compile("\\{(?[^\\{\\}]*)\\}"); - /** the config of the service invoked */ + /** + * the config of the service invoked + */ public ServiceConfig service = null; - /** unique key for the invocation */ + /** + * unique key for the invocation + */ public IRI key = null; - /** start time */ + /** + * start time + */ public long startTime = -1; - /** end time of the invocation */ + /** + * end time of the invocation + */ public long endTime = -1; - /** success code */ + /** + * success code + */ public int success = 0; - /** input bindings */ + /** + * input bindings + */ public Map inputs = new HashMap<>(); - /** output bindings */ + /** + * output bindings + */ public Map outputs = new HashMap<>(); - /** the connection */ + /** + * the connection + */ protected final RemotingSailConnection connection; - public static ObjectMapper objectMapper=new ObjectMapper(); + public static ObjectMapper objectMapper = new ObjectMapper(); static { objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.sssX")); objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); } - public static SimpleDateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd"); + public static SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); /** * creates a new invocaiton + * * @param connection the sourrounding graph connection */ public Invocation(RemotingSailConnection connection) { @@ -126,94 +146,95 @@ public Invocation(RemotingSailConnection connection) { /** * converter from the literal to the type system + * * @param binding value to convert - * @param target class to convert to + * @param target class to convert to * @return converted value */ - public static Target convertToObject(Value binding, Class target) throws SailException { + public static TARGET convertToObject(Value binding, Class target) throws SailException { if (target.isAssignableFrom(String.class)) { - return (Target) binding.stringValue(); + return (TARGET) binding.stringValue(); } else if (target.isAssignableFrom(int.class)) { try { - return (Target) Integer.valueOf(Integer.parseInt(binding.stringValue())); - } catch(NumberFormatException nfe) { + return (TARGET) Integer.valueOf(Integer.parseInt(binding.stringValue())); + } catch (NumberFormatException nfe) { throw new SailException(String.format("Conversion from %s to %s failed.", binding, target), nfe); } } else if (target.isAssignableFrom(long.class)) { try { - return (Target) Long.valueOf(Long.parseLong(binding.stringValue())); - } catch(NumberFormatException nfe) { + return (TARGET) Long.valueOf(Long.parseLong(binding.stringValue())); + } catch (NumberFormatException nfe) { throw new SailException(String.format("Conversion from %s to %s failed.", binding, target), nfe); } } else if (target.isAssignableFrom(double.class)) { try { - return (Target) Double.valueOf(Double.parseDouble(binding.stringValue())); - } catch(NumberFormatException nfe) { + return (TARGET) Double.valueOf(Double.parseDouble(binding.stringValue())); + } catch (NumberFormatException nfe) { throw new SailException(String.format("Conversion from %s to %s failed.", binding, target), nfe); } } else if (target.isAssignableFrom(float.class)) { try { - return (Target) Float.valueOf(Float.parseFloat(binding.stringValue())); - } catch(NumberFormatException nfe) { + return (TARGET) Float.valueOf(Float.parseFloat(binding.stringValue())); + } catch (NumberFormatException nfe) { throw new SailException(String.format("Conversion from %s to %s failed.", binding, target), nfe); } } else if (target.isAssignableFrom(JsonNode.class)) { - if(binding.isLiteral()) { - IRI dataType=((Literal) binding).getDatatype(); - String dataTypeName=dataType.stringValue(); - switch(dataTypeName) { + if (binding.isLiteral()) { + IRI dataType = ((Literal) binding).getDatatype(); + String dataTypeName = dataType.stringValue(); + switch (dataTypeName) { case "http://www.w3.org/2001/XMLSchema#string": - return (Target) objectMapper.getNodeFactory().textNode(binding.stringValue()); + return (TARGET) objectMapper.getNodeFactory().textNode(binding.stringValue()); case "http://www.w3.org/2001/XMLSchema#int": try { - return (Target) objectMapper.getNodeFactory().numberNode(Integer.valueOf(binding.stringValue())); - } catch(NumberFormatException nfe) { - throw new SailException(String.format("Could not convert %s to datatype %s.", binding.stringValue(),dataTypeName),nfe); + return (TARGET) objectMapper.getNodeFactory().numberNode(Integer.valueOf(binding.stringValue())); + } catch (NumberFormatException nfe) { + throw new SailException(String.format("Could not convert %s to datatype %s.", binding.stringValue(), dataTypeName), nfe); } case "http://www.w3.org/2001/XMLSchema#long": try { - return (Target) objectMapper.getNodeFactory().numberNode(Long.valueOf(binding.stringValue())); - } catch(NumberFormatException nfe) { - throw new SailException(String.format("Could not convert %s to datatype %s.", binding.stringValue(),dataTypeName),nfe); + return (TARGET) objectMapper.getNodeFactory().numberNode(Long.valueOf(binding.stringValue())); + } catch (NumberFormatException nfe) { + throw new SailException(String.format("Could not convert %s to datatype %s.", binding.stringValue(), dataTypeName), nfe); } case "http://www.w3.org/2001/XMLSchema#double": try { - return (Target) objectMapper.getNodeFactory().numberNode(Double.valueOf(binding.stringValue())); - } catch(NumberFormatException nfe) { - throw new SailException(String.format("Could not convert %s to datatype %s.", binding.stringValue(),dataTypeName),nfe); + return (TARGET) objectMapper.getNodeFactory().numberNode(Double.valueOf(binding.stringValue())); + } catch (NumberFormatException nfe) { + throw new SailException(String.format("Could not convert %s to datatype %s.", binding.stringValue(), dataTypeName), nfe); } case "http://www.w3.org/2001/XMLSchema#float": try { - return (Target) objectMapper.getNodeFactory().numberNode(Float.valueOf(binding.stringValue())); - } catch(NumberFormatException nfe) { - throw new SailException(String.format("Could not convert %s to datatype %s.", binding.stringValue(),dataTypeName),nfe); + return (TARGET) objectMapper.getNodeFactory().numberNode(Float.valueOf(binding.stringValue())); + } catch (NumberFormatException nfe) { + throw new SailException(String.format("Could not convert %s to datatype %s.", binding.stringValue(), dataTypeName), nfe); } case "http://www.w3.org/2001/XMLSchema#dateTime": try { - return (Target) objectMapper.getNodeFactory().textNode(objectMapper.getDateFormat().format(objectMapper.getDateFormat().parse(binding.stringValue()))); - } catch(ParseException pe) { - throw new SailException(String.format("Could not convert %s to json date.", binding),pe); + return (TARGET) objectMapper.getNodeFactory().textNode(objectMapper.getDateFormat().format(objectMapper.getDateFormat().parse(binding.stringValue()))); + } catch (ParseException pe) { + throw new SailException(String.format("Could not convert %s to json date.", binding), pe); } case "http://www.w3.org/2001/XMLSchema#date": try { - return (Target) objectMapper.getNodeFactory().textNode(dateFormat.format(dateFormat.parse(binding.stringValue()))); - } catch(ParseException pe) { - throw new SailException(String.format("Could not convert %s to json date.", binding),pe); + return (TARGET) objectMapper.getNodeFactory().textNode(dateFormat.format(dateFormat.parse(binding.stringValue()))); + } catch (ParseException pe) { + throw new SailException(String.format("Could not convert %s to json date.", binding), pe); } case "https://json-schema.org/draft/2020-12/schema#Object": try { - String representation=binding.stringValue(); + String representation = binding.stringValue(); // remove UTF8 linefeeds. - representation=representation.replace("\\x0A",""); - return (Target) objectMapper.readTree(representation); - } catch(JsonProcessingException jpe) { - throw new SailException(String.format("Could not convert %s to json object.", binding),jpe); + representation = representation.replace("\\x0A", ""); + return (TARGET) objectMapper.readTree(representation); + } catch (JsonProcessingException jpe) { + throw new SailException(String.format("Could not convert %s to json object.", binding), jpe); } default: - throw new SailException(String.format("Could not convert %s of data type %s.", binding,dataTypeName)); + throw new SailException(String.format("Could not convert %s of data type %s.", binding, dataTypeName)); } - } else if(binding.isIRI()) { - return (Target) objectMapper.getNodeFactory().textNode(binding.stringValue()); + } else if (binding.isIRI()) { + return (TARGET) objectMapper.getNodeFactory().textNode(binding.stringValue()); } else { throw new SailException(String.format("Could not convert %s.", binding)); } @@ -223,13 +244,14 @@ public static Target convertToObject(Value binding, Class targe @Override public String toString() { - return super.toString()+"/invocation"; + return super.toString() + "/invocation"; } /** * traverse path + * * @param source object - * @param path under source + * @param path under source * @return path object, will be source if path is empty */ public static Object traversePath(Object source, String... path) throws SailException { @@ -251,10 +273,10 @@ public static Object traversePath(Object source, String... path) throws SailExce } } else if (source instanceof JsonNode) { JsonNode node = (JsonNode) source; - if (!hasField(node,elem)) { + if (!hasField(node, elem)) { throw new SailException(String.format("No such path %s under object %s", elem, source)); } - source = getField(node,elem); + source = getField(node, elem); } else { throw new SailException(String.format("Cannot access path %s under object %s", elem, source)); } @@ -265,27 +287,28 @@ public static Object traversePath(Object source, String... path) throws SailExce /** * provide a string rep for a given object - * @param source - * @return string rep - * @throws SailException + * + * @param source to convert + * @return string representation of source + * @throws SailException in case con version cannot be done */ public static String convertObjectToString(Object source) throws SailException { - if(source instanceof JsonNode) { - JsonNode node=(JsonNode) source; + if (source instanceof JsonNode) { + JsonNode node = (JsonNode) source; if (node.isNumber() || node.isTextual()) { return node.asText(); } else { try { return objectMapper.writeValueAsString(node); - } catch(JsonProcessingException jpe) { + } catch (JsonProcessingException jpe) { throw new SailException(jpe); } } - } else if(source instanceof Element) { + } else if (source instanceof Element) { try { TransformerFactory transFactory = TransformerFactory.newInstance(); - transFactory.setAttribute("http://javax.xml.XMLConstants/property/accessExternalDTD",""); - transFactory.setAttribute("http://javax.xml.XMLConstants/property/accessExternalStylesheet",""); + transFactory.setAttribute("http://javax.xml.XMLConstants/property/accessExternalDTD", ""); + transFactory.setAttribute("http://javax.xml.XMLConstants/property/accessExternalStylesheet", ""); Transformer transformer = transFactory.newTransformer(); StringWriter buffer = new StringWriter(); transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes"); @@ -301,15 +324,16 @@ public static String convertObjectToString(Object source) throws SailException { /** * converter from the type system to a literal - * @param target internal rep + * + * @param target internal rep * @param resultKey eventual batch selector - * @param output config name to use for mapping + * @param output config name to use for mapping * @return mapped value - * @throws SailException + * @throws SailException in case the conversion cannot be done */ public Value convertOutputToValue(Object target, String resultKey, IRI output) throws SailException { if (service.getResult().getOutputProperty() != null) { - String[] resultPath=service.getResult().getOutputProperty().split("\\."); + String[] resultPath = service.getResult().getOutputProperty().split("\\."); target = traversePath(target, resultPath); } ReturnValueConfig cf = service.getResult().getOutputs().get(output.stringValue()); @@ -318,9 +342,9 @@ public Value convertOutputToValue(Object target, String resultKey, IRI output) t } if (resultKey != null) { if (target.getClass().isArray()) { - if(service.getResult().getResultIdProperty()!=null) { - String[] resultPath=service.getResult().getResultIdProperty().split("\\."); - target=Arrays.stream(((Object[]) target)).filter( tt -> resultKey.equals(convertObjectToString(traversePath(tt,resultPath)))) + if (service.getResult().getResultIdProperty() != null) { + String[] resultPath = service.getResult().getResultIdProperty().split("\\."); + target = Arrays.stream(((Object[]) target)).filter(tt -> resultKey.equals(convertObjectToString(traversePath(tt, resultPath)))) .findFirst().get(); } else { try { @@ -330,19 +354,19 @@ public Value convertOutputToValue(Object target, String resultKey, IRI output) t } } } else if (target instanceof ArrayNode) { - if(service.getResult().getResultIdProperty()!=null) { - String[] resultPath=service.getResult().getResultIdProperty().split("\\."); - ArrayNode array=(ArrayNode) target; - boolean found=false; - for(int count=0;count> batches; batches = produceBatches(host); - for (int batchCount=0; batches.hasNext(); batchCount++) { + for (int batchCount = 0; batches.hasNext(); batchCount++) { Collection batch = batches.next(); - final String[] url = {ourl}; + final String[] url = { ourl }; switch (service.getMethod()) { case "GET": boolean isFirst = true; @@ -502,7 +528,7 @@ public void executeRest(RemotingSailConnection connection, IBindingHost host) th } } isFirst = false; - final boolean[] isFirstArg = {true}; + final boolean[] isFirstArg = { true }; service.getArguments().entrySet().stream().sorted(new ArgumentComparator()).forEach(argument -> { if (logger.isTraceEnabled()) { logger.trace(String.format("About to process argument %s %s", argument.getKey(), argument.getValue())); @@ -531,8 +557,8 @@ public void executeRest(RemotingSailConnection connection, IBindingHost host) th logger.trace(String.format("Instantiated REST call target with parameters to %s ", url[0])); } final HttpGet httpget = new HttpGet(url[0]); - if(service.getAuthentication()!=null) { - httpget.addHeader(service.getAuthentication().getAuthKey(),service.getAuthentication().getAuthCode()); + if (service.getAuthentication() != null) { + httpget.addHeader(service.getAuthentication().getAuthKey(), service.getAuthentication().getAuthCode()); } if (logger.isDebugEnabled()) { @@ -566,33 +592,33 @@ public void executeRest(RemotingSailConnection connection, IBindingHost host) th } } - final ObjectNode finalinput=input; + final ObjectNode finalinput = input; for (MutableBindingSet binding : batch) { - AtomicBoolean isCorrect= new AtomicBoolean(true); + AtomicBoolean isCorrect = new AtomicBoolean(true); service.getArguments().entrySet().stream().sorted(new ArgumentComparator()).forEach(argument -> { if (logger.isTraceEnabled()) { logger.trace(String.format("About to process argument %s %s", argument.getKey(), argument.getValue())); } processArgument(objectMapper, finalinput, binding, isCorrect, argument.getKey(), argument.getValue()); }); - if(isCorrect.get()) { + if (isCorrect.get()) { array.add(input); } } - String invocationId=key.stringValue()+String.format("&batch=%d",batchCount); + String invocationId = key.stringValue() + String.format("&batch=%d", batchCount); if (service.getInvocationIdProperty() != null) { if (!message.isObject()) { throw new SailException(String.format("Cannot use invocationIdProperty in batch mode without inputProperty.")); } else { - setNode(objectMapper,((ObjectNode) message), service.getInvocationIdProperty(), objectMapper.getNodeFactory().textNode(invocationId)); + setNode(objectMapper, ((ObjectNode) message), service.getInvocationIdProperty(), objectMapper.getNodeFactory().textNode(invocationId)); } } - if(service.getCallbackProperty() !=null) { - setNode(objectMapper,((ObjectNode) message), service.getCallbackProperty(),objectMapper.getNodeFactory().textNode(connection.remotingSail.config.getCallbackAddress())); - if(service.getResult().getCallbackProperty() !=null) { - asyncToken= CallbackController.register(service.getResult().getCallbackProperty(),invocationId); + if (service.getCallbackProperty() != null) { + setNode(objectMapper, ((ObjectNode) message), service.getCallbackProperty(), objectMapper.getNodeFactory().textNode(connection.remotingSail.config.getCallbackAddress())); + if (service.getResult().getCallbackProperty() != null) { + asyncToken = CallbackController.register(service.getResult().getCallbackProperty(), invocationId); } } @@ -601,13 +627,13 @@ public void executeRest(RemotingSailConnection connection, IBindingHost host) th } final HttpPost httppost = new HttpPost(url[0]); - httppost.addHeader("accept","application/json"); - if(service.getAuthentication() !=null) { + httppost.addHeader("accept", "application/json"); + if (service.getAuthentication() != null) { httppost.addHeader(service.getAuthentication().getAuthKey(), service.getAuthentication().getAuthCode()); } if (service.getMethod().equals("POST-JSON")) { - httppost.addHeader("Content-Type","application/json"); + httppost.addHeader("Content-Type", "application/json"); httppost.setEntity(new StringEntity(objectMapper.writeValueAsString(body))); } else { MultipartEntityBuilder mpeb = MultipartEntityBuilder.create(); @@ -660,19 +686,19 @@ public void executeRest(RemotingSailConnection connection, IBindingHost host) th result = EntityUtils.toString(entity); } - if(asyncToken!=null) { - result=CallbackController.synchronize(asyncToken); + if (asyncToken != null) { + result = CallbackController.synchronize(asyncToken); } - if(result==null) { + if (result == null) { logger.warn(String.format("Did not get any response.")); - success=Math.max(success,500); + success = Math.max(success, 500); } else { for (MutableBindingSet binding : batch) { String key = null; if (service.getResult().getCorrelationInput() != null) { - key = resolve(binding, service.getResult().getCorrelationInput(),null,String.class); - } else if(service.getBatch() >1) { + key = resolve(binding, service.getResult().getCorrelationInput(), null, String.class); + } else if (service.getBatch() > 1) { key = "0"; } for (Map.Entry output : outputs.entrySet()) { @@ -681,67 +707,69 @@ public void executeRest(RemotingSailConnection connection, IBindingHost host) th } } } catch (Exception e) { - logger.warn(String.format("Got an exception %s when processing invocation results of %s. Ignoring.",e,ourl)); - success=Math.max(success,500); + logger.warn(String.format("Got an exception %s when processing invocation results of %s. Ignoring.", e, ourl)); + success = Math.max(success, 500); } } else { - logger.warn(String.format("Got an unsuccessful status %d from invoking %s. Ignoring.",lsuccess,ourl)); - success = Math.max(lsuccess,success); + logger.warn(String.format("Got an unsuccessful status %d from invoking %s. Ignoring.", lsuccess, ourl)); + success = Math.max(lsuccess, success); } } - } catch(IOException ioe){ - logger.warn(String.format("Got an exception %s when processing invocation. Ignoring.",ioe)); - success = Math.max(500,success); + } catch (IOException ioe) { + logger.warn(String.format("Got an exception %s when processing invocation. Ignoring.", ioe)); + success = Math.max(500, success); } } /** * processes an argument binding into the output - * @param objectMapper json factory - * @param finalinput complete output - * @param binding current binding - * @param isCorrect wrapper around correctness flag - * @param argumentKey key to the argument + * + * @param objectMapper json factory + * @param finalinput complete output + * @param binding current binding + * @param isCorrect wrapper around correctness flag + * @param argumentKey key to the argument * @param argumentConfig config of the argument */ protected void processArgument(ObjectMapper objectMapper, ObjectNode finalinput, MutableBindingSet binding, AtomicBoolean isCorrect, String argumentKey, ArgumentConfig argumentConfig) { JsonNode render = resolve(binding, argumentKey, (JsonNode) argumentConfig.getDefaultValue(), JsonNode.class); - if(render!=null) { - String paths= argumentConfig.getArgumentName(); - Matcher matcher=ARGUMENT_PATTERN.matcher(paths); - StringBuilder resultPaths=new StringBuilder(); - int end=0; - while(matcher.find()) { - resultPaths.append(paths.substring(end,matcher.start())); - String result=resolve(binding,matcher.group("arg"),"",String.class); + if (render != null) { + String paths = argumentConfig.getArgumentName(); + Matcher matcher = ARGUMENT_PATTERN.matcher(paths); + StringBuilder resultPaths = new StringBuilder(); + int end = 0; + while (matcher.find()) { + resultPaths.append(paths.substring(end, matcher.start())); + String result = resolve(binding, matcher.group("arg"), "", String.class); resultPaths.append(result); - end=matcher.end(); + end = matcher.end(); } resultPaths.append(paths.substring(end)); setNode(objectMapper, finalinput, resultPaths.toString(), render); } else { - if(argumentConfig.isMandatory()) { - // TODO optional arguments - logger.warn(String.format("Mandatory argument %s has no binding. Leaving the hole tuple.", argumentKey)); - isCorrect.set(false); + if (argumentConfig.isMandatory()) { + // TODO optional arguments + logger.warn(String.format("Mandatory argument %s has no binding. Leaving the hole tuple.", argumentKey)); + isCorrect.set(false); } } } /** * resolves a given input predicate against a binding - * @param binding the binding - * @param input predicate as uri string - * @param defaultValue a possible default value - * @param forClass target class to convert binding into + * + * @param binding the binding + * @param input predicate as uri string + * @param defaultValue a possible default value + * @param forClass target class to convert binding into + * @param template type * @return found binding of predicate, null if not bound - * @param */ - private TargetClass resolve(MutableBindingSet binding, String input, TargetClass defaultValue, Class forClass) { + private TARGET resolve(MutableBindingSet binding, String input, TARGET defaultValue, Class forClass) { String key; Var variable = inputs.get(input); - Value value=null; - if(variable!=null) { + Value value = null; + if (variable != null) { if (variable.hasValue()) { value = variable.getValue(); } else { @@ -749,18 +777,19 @@ private TargetClass resolve(MutableBindingSet binding, String inpu } } - if(value!=null) { + if (value != null) { return convertToObject(value, forClass); } - if (defaultValue!=null) { - if(JsonNode.class.isAssignableFrom(forClass)) { + if (defaultValue != null) { + if (JsonNode.class.isAssignableFrom(forClass)) { try { - return (TargetClass) objectMapper.readTree(objectMapper.writeValueAsString(defaultValue)); + return (TARGET) objectMapper.readTree(objectMapper.writeValueAsString(defaultValue)); } catch (JsonProcessingException e) { + // jump to default case } } - return (TargetClass) defaultValue; + return (TARGET) defaultValue; } return null; @@ -768,22 +797,23 @@ private TargetClass resolve(MutableBindingSet binding, String inpu /** * produces a set of batches to call + * * @param host binding host * @return an iterator over the batches as collections of bindingsets */ - protected Iterator> produceBatches(IBindingHost host) { - var batchGroup= service.getArguments().entrySet().stream().filter(argument -> argument.getValue().isFormsBatchGroup()). - collect(Collectors.toList()); - final Map> batches=new HashMap<>(); - long bindingCount=0; - for(MutableBindingSet binding : host.getBindings()) { + protected Iterator> produceBatches(BindingHost host) { + var batchGroup = service.getArguments().entrySet().stream().filter(argument -> argument.getValue().isFormsBatchGroup()) + .collect(Collectors.toList()); + final Map> batches = new HashMap<>(); + long bindingCount = 0; + for (MutableBindingSet binding : host.getBindings()) { bindingCount++; Object key; - if(batchGroup.isEmpty()) { - if(service.getBatch() >1) { - key=bindingCount / service.getBatch(); + if (batchGroup.isEmpty()) { + if (service.getBatch() > 1) { + key = bindingCount / service.getBatch(); } else { - key=bindingCount; + key = bindingCount; } } else { key = new BatchKey(batchGroup.stream().map( @@ -794,8 +824,8 @@ protected Iterator> produceBatches(IBindingHost ho if (batches.containsKey(key)) { targetCollection = batches.get(key); } else { - targetCollection = new ArrayList<>(); - batches.put(key, targetCollection); + targetCollection = new ArrayList<>(); + batches.put(key, targetCollection); } targetCollection.add(binding); } @@ -804,41 +834,42 @@ protected Iterator> produceBatches(IBindingHost ho /** * sets a given node under a possible recursive path + * * @param objectMapper factory - * @param finalInput target subject - * @param pathSpec a path sepcification - * @param render the target object + * @param finalInput target subject + * @param pathSpec a path sepcification + * @param render the target object */ public static void setNode(ObjectMapper objectMapper, ObjectNode finalInput, String pathSpec, JsonNode render) { String[] pathNames = pathSpec.split(","); - for(String pathName : pathNames) { + for (String pathName : pathNames) { String[] argPath = pathName.split("\\."); JsonNode traverse = finalInput; int depth = 0; - if (argPath.length==depth) { + if (argPath.length == depth) { // https://jira.catena-x.net/browse/TEST-1170 make sure top-level updates are also merged and not overwritten ObjectReader updater = objectMapper.readerForUpdating(finalInput); try { - render=updater.readValue(render); + render = updater.readValue(render); } catch (IOException e) { throw new RuntimeException(e); } - finalInput.setAll((ObjectNode)render); + finalInput.setAll((ObjectNode) render); return; } for (String argField : argPath) { if (depth != argPath.length - 1) { if (hasField(traverse, argField)) { JsonNode next = getField(traverse, argField); - if (next==null || (!next.isArray() && !next.isObject()) ) { + if (next == null || (!next.isArray() && !next.isObject())) { throw new SailException(String - .format("Field %s was occupied by a non-object object", argField,next)); + .format("Field %s was occupied by a non-object object", argField, next)); } else { traverse = next; } } else { ObjectNode next = objectMapper.createObjectNode(); - setObject(objectMapper,traverse,argField,next); + setObject(objectMapper, traverse, argField, next); traverse = next; } } else { @@ -851,6 +882,7 @@ public static void setNode(ObjectMapper objectMapper, ObjectNode finalInput, Str /** * accesses a certain field + * * @param traverse object or array * @param argField field name or index * @return embedded object @@ -861,6 +893,7 @@ public static JsonNode getField(JsonNode traverse, String argField) { /** * checks whether this node has a certain field + * * @param traverse object or array * @param argField field name or index * @return existance of the field @@ -871,14 +904,15 @@ public static boolean hasField(JsonNode traverse, String argField) { /** * sets the given object into the given single-level path into a given subject + * * @param objectMapper factory - * @param render target object - * @param traverse target subject - * @param argField target field + * @param render target object + * @param traverse target subject + * @param argField target field */ public static void setObject(ObjectMapper objectMapper, JsonNode traverse, String argField, JsonNode render) { - if(traverse.isObject()) { - if(traverse.has(argField)) { + if (traverse.isObject()) { + if (traverse.has(argField)) { ObjectReader updater = objectMapper.readerForUpdating(traverse.get(argField)); try { render = updater.readValue(render); @@ -887,13 +921,13 @@ public static void setObject(ObjectMapper objectMapper, JsonNode traverse, Strin } } ((ObjectNode) traverse).set(argField, render); - } else if(traverse.isArray()) { - ArrayNode traverseArray=(ArrayNode) traverse; - int targetIndex=Integer.valueOf(argField); - while(traverseArray.size() output : outputs.entrySet()) { - binding.addBinding(output.getKey().getName(),convertOutputToValue(result,null,output.getValue())); + for (Map.Entry output : outputs.entrySet()) { + binding.addBinding(output.getKey().getName(), convertOutputToValue(result, null, output.getValue())); } } catch (Exception e) { - logger.warn(String.format("Invocation to %s (method %s) resulted in exception %s",targetInstance,targetMethod,e)); - success = Math.max(500,success); + logger.warn(String.format("Invocation to %s (method %s) resulted in exception %s", targetInstance, targetMethod, e)); + success = Math.max(500, success); } } } diff --git a/remoting/src/main/java/org/eclipse/tractusx/agents/remoting/QueryExecutor.java b/remoting/src/main/java/org/eclipse/tractusx/agents/remoting/QueryExecutor.java index c143b15c..0b958105 100644 --- a/remoting/src/main/java/org/eclipse/tractusx/agents/remoting/QueryExecutor.java +++ b/remoting/src/main/java/org/eclipse/tractusx/agents/remoting/QueryExecutor.java @@ -16,90 +16,186 @@ // SPDX-License-Identifier: Apache-2.0 package org.eclipse.tractusx.agents.remoting; +import org.eclipse.rdf4j.model.IRI; +import org.eclipse.rdf4j.model.Value; import org.eclipse.rdf4j.query.BindingSet; import org.eclipse.rdf4j.query.MutableBindingSet; -import org.eclipse.rdf4j.query.algebra.*; -import org.eclipse.rdf4j.sail.SailException; -import org.eclipse.rdf4j.model.IRI; +import org.eclipse.rdf4j.query.algebra.Add; +import org.eclipse.rdf4j.query.algebra.AggregateFunctionCall; +import org.eclipse.rdf4j.query.algebra.And; +import org.eclipse.rdf4j.query.algebra.ArbitraryLengthPath; +import org.eclipse.rdf4j.query.algebra.Avg; +import org.eclipse.rdf4j.query.algebra.BNodeGenerator; +import org.eclipse.rdf4j.query.algebra.BindingSetAssignment; +import org.eclipse.rdf4j.query.algebra.Bound; +import org.eclipse.rdf4j.query.algebra.Clear; +import org.eclipse.rdf4j.query.algebra.Coalesce; +import org.eclipse.rdf4j.query.algebra.Compare; +import org.eclipse.rdf4j.query.algebra.CompareAll; +import org.eclipse.rdf4j.query.algebra.CompareAny; +import org.eclipse.rdf4j.query.algebra.Copy; +import org.eclipse.rdf4j.query.algebra.Count; +import org.eclipse.rdf4j.query.algebra.Create; +import org.eclipse.rdf4j.query.algebra.Datatype; +import org.eclipse.rdf4j.query.algebra.DeleteData; +import org.eclipse.rdf4j.query.algebra.DescribeOperator; +import org.eclipse.rdf4j.query.algebra.Difference; +import org.eclipse.rdf4j.query.algebra.Distinct; +import org.eclipse.rdf4j.query.algebra.EmptySet; +import org.eclipse.rdf4j.query.algebra.Exists; +import org.eclipse.rdf4j.query.algebra.Extension; +import org.eclipse.rdf4j.query.algebra.ExtensionElem; +import org.eclipse.rdf4j.query.algebra.Filter; +import org.eclipse.rdf4j.query.algebra.FunctionCall; +import org.eclipse.rdf4j.query.algebra.Group; +import org.eclipse.rdf4j.query.algebra.GroupConcat; +import org.eclipse.rdf4j.query.algebra.GroupElem; +import org.eclipse.rdf4j.query.algebra.IRIFunction; +import org.eclipse.rdf4j.query.algebra.If; +import org.eclipse.rdf4j.query.algebra.In; +import org.eclipse.rdf4j.query.algebra.InsertData; +import org.eclipse.rdf4j.query.algebra.Intersection; +import org.eclipse.rdf4j.query.algebra.IsBNode; +import org.eclipse.rdf4j.query.algebra.IsLiteral; +import org.eclipse.rdf4j.query.algebra.IsNumeric; +import org.eclipse.rdf4j.query.algebra.IsResource; +import org.eclipse.rdf4j.query.algebra.IsURI; +import org.eclipse.rdf4j.query.algebra.Join; +import org.eclipse.rdf4j.query.algebra.Label; +import org.eclipse.rdf4j.query.algebra.Lang; +import org.eclipse.rdf4j.query.algebra.LangMatches; +import org.eclipse.rdf4j.query.algebra.LeftJoin; +import org.eclipse.rdf4j.query.algebra.Like; +import org.eclipse.rdf4j.query.algebra.ListMemberOperator; +import org.eclipse.rdf4j.query.algebra.Load; +import org.eclipse.rdf4j.query.algebra.LocalName; +import org.eclipse.rdf4j.query.algebra.MathExpr; +import org.eclipse.rdf4j.query.algebra.Max; +import org.eclipse.rdf4j.query.algebra.Min; +import org.eclipse.rdf4j.query.algebra.Modify; +import org.eclipse.rdf4j.query.algebra.Move; +import org.eclipse.rdf4j.query.algebra.MultiProjection; +import org.eclipse.rdf4j.query.algebra.Namespace; +import org.eclipse.rdf4j.query.algebra.Not; +import org.eclipse.rdf4j.query.algebra.Or; +import org.eclipse.rdf4j.query.algebra.Order; +import org.eclipse.rdf4j.query.algebra.OrderElem; +import org.eclipse.rdf4j.query.algebra.Projection; +import org.eclipse.rdf4j.query.algebra.ProjectionElem; +import org.eclipse.rdf4j.query.algebra.ProjectionElemList; +import org.eclipse.rdf4j.query.algebra.QueryModelNode; +import org.eclipse.rdf4j.query.algebra.QueryModelVisitor; +import org.eclipse.rdf4j.query.algebra.QueryRoot; +import org.eclipse.rdf4j.query.algebra.Reduced; +import org.eclipse.rdf4j.query.algebra.Regex; +import org.eclipse.rdf4j.query.algebra.SameTerm; +import org.eclipse.rdf4j.query.algebra.Sample; +import org.eclipse.rdf4j.query.algebra.Service; +import org.eclipse.rdf4j.query.algebra.SingletonSet; +import org.eclipse.rdf4j.query.algebra.Slice; +import org.eclipse.rdf4j.query.algebra.StatementPattern; +import org.eclipse.rdf4j.query.algebra.Str; +import org.eclipse.rdf4j.query.algebra.Sum; +import org.eclipse.rdf4j.query.algebra.TripleRef; +import org.eclipse.rdf4j.query.algebra.Union; +import org.eclipse.rdf4j.query.algebra.ValueConstant; +import org.eclipse.rdf4j.query.algebra.ValueExprTripleRef; +import org.eclipse.rdf4j.query.algebra.Var; +import org.eclipse.rdf4j.query.algebra.ZeroLengthPath; import org.eclipse.rdf4j.query.impl.MapBindingSet; -import org.eclipse.rdf4j.model.Value; - +import org.eclipse.rdf4j.sail.SailException; import org.eclipse.tractusx.agents.remoting.config.ServiceConfig; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.*; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; /** - * The query processing is done while visiting + * The query processing is done while visiting */ @SuppressWarnings("removal") -public class QueryExecutor implements QueryModelVisitor, IBindingHost { +public class QueryExecutor implements QueryModelVisitor, BindingHost { - /** the state */ - protected Map invocations= new HashMap<>(); + /** + * the state + */ + protected Map invocations = new HashMap<>(); - /** bindings and results */ - final protected Set variables=new HashSet<>(); - final protected List bindings= new ArrayList<>(); - final protected Map outputVariables=new HashMap<>(); + /** + * bindings and results + */ + protected final Set variables = new HashSet<>(); + protected final List bindings = new ArrayList<>(); + protected final Map outputVariables = new HashMap<>(); - /** the logger */ + /** + * the logger + */ protected Logger logger = LoggerFactory.getLogger(getClass()); - /** the connection */ - protected RemotingSailConnection connection; + /** + * the connection + */ + protected RemotingSailConnection connection; /** * create a new visitor + * * @param connection the sail connection */ - public QueryExecutor(RemotingSailConnection connection) { - this.connection=connection; - } + public QueryExecutor(RemotingSailConnection connection) { + this.connection = connection; + } @Override public String toString() { - return super.toString()+"/visitor"; + return super.toString() + "/visitor"; } @Override - public void meet(QueryRoot node) throws SailException { - logger.debug(String.format("Visiting a query root %s",node.getClass())); - node.getArg().visit(this); + public void meet(QueryRoot node) throws SailException { + logger.debug(String.format("Visiting a query root %s", node.getClass())); + node.getArg().visit(this); } @Override - public void meet(Add node) throws SailException { - throw new SailException(String.format("No support for %s",node)); + public void meet(Add node) throws SailException { + throw new SailException(String.format("No support for %s", node)); } @Override - public void meet(And node) throws SailException { - throw new SailException(String.format("No support for %s",node)); + public void meet(And node) throws SailException { + throw new SailException(String.format("No support for %s", node)); } @Override - public void meet(ArbitraryLengthPath node) throws SailException { - throw new SailException(String.format("No support for %s",node)); + public void meet(ArbitraryLengthPath node) throws SailException { + throw new SailException(String.format("No support for %s", node)); } @Override - public void meet(Avg node) throws SailException { - throw new SailException(String.format("No support for %s",node)); + public void meet(Avg node) throws SailException { + throw new SailException(String.format("No support for %s", node)); } /** * convert a binding set to a mutable version + * * @param bs the binding set * @return mutable binding set */ protected MutableBindingSet makeMutable(BindingSet bs) { - if(bs instanceof MutableBindingSet) { + if (bs instanceof MutableBindingSet) { return (MutableBindingSet) bs; } else { - MutableBindingSet mbs=new MapBindingSet(); - for(String binding : bs.getBindingNames()) { + MutableBindingSet mbs = new MapBindingSet(); + for (String binding : bs.getBindingNames()) { mbs.addBinding(bs.getBinding(binding)); } return mbs; @@ -107,215 +203,215 @@ protected MutableBindingSet makeMutable(BindingSet bs) { } @Override - public void meet(BindingSetAssignment node) throws SailException { + public void meet(BindingSetAssignment node) throws SailException { variables.addAll(node.getBindingNames()); - if(bindings.isEmpty()) { - node.getBindingSets().forEach( binding -> bindings.add(makeMutable(binding))); + if (bindings.isEmpty()) { + node.getBindingSets().forEach(binding -> bindings.add(makeMutable(binding))); } else { - bindings.forEach( binding -> node.getBindingSets().forEach(joinBindings -> joinBindings.forEach(binding::addBinding))); + bindings.forEach(binding -> node.getBindingSets().forEach(joinBindings -> joinBindings.forEach(binding::addBinding))); } } @Override - public void meet(BNodeGenerator node) throws SailException { - throw new SailException(String.format("No support for %s",node)); + public void meet(BNodeGenerator node) throws SailException { + throw new SailException(String.format("No support for %s", node)); } @Override - public void meet(Bound node) throws SailException { - throw new SailException(String.format("No support for %s",node)); + public void meet(Bound node) throws SailException { + throw new SailException(String.format("No support for %s", node)); } @Override - public void meet(Clear node) throws SailException { - throw new SailException(String.format("No support for %s",node)); + public void meet(Clear node) throws SailException { + throw new SailException(String.format("No support for %s", node)); } @Override - public void meet(Coalesce node) throws SailException { - throw new SailException(String.format("No support for %s",node)); + public void meet(Coalesce node) throws SailException { + throw new SailException(String.format("No support for %s", node)); } @Override - public void meet(Compare node) throws SailException { - throw new SailException(String.format("No support for %s",node)); + public void meet(Compare node) throws SailException { + throw new SailException(String.format("No support for %s", node)); } @Override - public void meet(CompareAll node) throws SailException { - throw new SailException(String.format("No support for %s",node)); + public void meet(CompareAll node) throws SailException { + throw new SailException(String.format("No support for %s", node)); } @Override - public void meet(CompareAny node) throws SailException { - throw new SailException(String.format("No support for %s",node)); + public void meet(CompareAny node) throws SailException { + throw new SailException(String.format("No support for %s", node)); } @Override - public void meet(DescribeOperator node) throws SailException { - throw new SailException(String.format("No support for %s",node)); + public void meet(DescribeOperator node) throws SailException { + throw new SailException(String.format("No support for %s", node)); } @Override - public void meet(Copy node) throws SailException { - throw new SailException(String.format("No support for %s",node)); + public void meet(Copy node) throws SailException { + throw new SailException(String.format("No support for %s", node)); } @Override - public void meet(Count node) throws SailException { - throw new SailException(String.format("No support for %s",node)); + public void meet(Count node) throws SailException { + throw new SailException(String.format("No support for %s", node)); } @Override - public void meet(Create node) throws SailException { - throw new SailException(String.format("No support for %s",node)); + public void meet(Create node) throws SailException { + throw new SailException(String.format("No support for %s", node)); } @Override - public void meet(Datatype node) throws SailException { - throw new SailException(String.format("No support for %s",node)); + public void meet(Datatype node) throws SailException { + throw new SailException(String.format("No support for %s", node)); } @Override - public void meet(DeleteData node) throws SailException { - throw new SailException(String.format("No support for %s",node)); + public void meet(DeleteData node) throws SailException { + throw new SailException(String.format("No support for %s", node)); } @Override - public void meet(Difference node) throws SailException { - throw new SailException(String.format("No support for %s",node)); + public void meet(Difference node) throws SailException { + throw new SailException(String.format("No support for %s", node)); } @Override - public void meet(Distinct node) throws SailException { - throw new SailException(String.format("No support for %s",node)); + public void meet(Distinct node) throws SailException { + throw new SailException(String.format("No support for %s", node)); } @Override - public void meet(EmptySet node) throws SailException { - throw new SailException(String.format("No support for %s",node)); + public void meet(EmptySet node) throws SailException { + throw new SailException(String.format("No support for %s", node)); } @Override - public void meet(Exists node) throws SailException { - throw new SailException(String.format("No support for %s",node)); + public void meet(Exists node) throws SailException { + throw new SailException(String.format("No support for %s", node)); } @Override - public void meet(Extension node) throws SailException { - throw new SailException(String.format("No support for %s",node)); + public void meet(Extension node) throws SailException { + throw new SailException(String.format("No support for %s", node)); } @Override - public void meet(ExtensionElem node) throws SailException { - throw new SailException(String.format("No support for %s",node)); + public void meet(ExtensionElem node) throws SailException { + throw new SailException(String.format("No support for %s", node)); } @Override - public void meet(Filter node) throws SailException { - throw new SailException(String.format("No support for %s",node)); + public void meet(Filter node) throws SailException { + throw new SailException(String.format("No support for %s", node)); } @Override - public void meet(FunctionCall node) throws SailException { - throw new SailException(String.format("No support for %s",node)); + public void meet(FunctionCall node) throws SailException { + throw new SailException(String.format("No support for %s", node)); } @Override public void meet(AggregateFunctionCall node) throws SailException { - throw new SailException(String.format("No support for %s",node)); + throw new SailException(String.format("No support for %s", node)); } @Override - public void meet(Group node) throws SailException { - throw new SailException(String.format("No support for %s",node)); + public void meet(Group node) throws SailException { + throw new SailException(String.format("No support for %s", node)); } @Override - public void meet(GroupConcat node) throws SailException { - throw new SailException(String.format("No support for %s",node)); + public void meet(GroupConcat node) throws SailException { + throw new SailException(String.format("No support for %s", node)); } @Override - public void meet(GroupElem node) throws SailException { - throw new SailException(String.format("No support for %s",node)); + public void meet(GroupElem node) throws SailException { + throw new SailException(String.format("No support for %s", node)); } @Override - public void meet(If node) throws SailException { - throw new SailException(String.format("No support for %s",node)); + public void meet(If node) throws SailException { + throw new SailException(String.format("No support for %s", node)); } @Override - public void meet(In node) throws SailException { - throw new SailException(String.format("No support for %s",node)); + public void meet(In node) throws SailException { + throw new SailException(String.format("No support for %s", node)); } @Override - public void meet(InsertData node) throws SailException { - throw new SailException(String.format("No support for %s",node)); + public void meet(InsertData node) throws SailException { + throw new SailException(String.format("No support for %s", node)); } @Override - public void meet(Intersection node) throws SailException { - throw new SailException(String.format("No support for %s",node)); + public void meet(Intersection node) throws SailException { + throw new SailException(String.format("No support for %s", node)); } @Override - public void meet(IRIFunction node) throws SailException { - throw new SailException(String.format("No support for %s",node)); + public void meet(IRIFunction node) throws SailException { + throw new SailException(String.format("No support for %s", node)); } @Override - public void meet(IsBNode node) throws SailException { - throw new SailException(String.format("No support for %s",node)); + public void meet(IsBNode node) throws SailException { + throw new SailException(String.format("No support for %s", node)); } @Override - public void meet(IsLiteral node) throws SailException { - throw new SailException(String.format("No support for %s",node)); + public void meet(IsLiteral node) throws SailException { + throw new SailException(String.format("No support for %s", node)); } @Override public void meet(IsNumeric node) throws SailException { - throw new SailException(String.format("No support for %s",node)); + throw new SailException(String.format("No support for %s", node)); } @Override - public void meet(IsResource node) throws SailException { - throw new SailException(String.format("No support for %s",node)); + public void meet(IsResource node) throws SailException { + throw new SailException(String.format("No support for %s", node)); } @Override - public void meet(IsURI node) throws SailException { - throw new SailException(String.format("No support for %s",node)); + public void meet(IsURI node) throws SailException { + throw new SailException(String.format("No support for %s", node)); } @Override - public void meet(Join node) throws SailException { - logger.debug(String.format("Visiting a join %s",node.getClass())); + public void meet(Join node) throws SailException { + logger.debug(String.format("Visiting a join %s", node.getClass())); node.getLeftArg().visit(this); node.getRightArg().visit(this); } @Override - public void meet(Label node) throws SailException { - throw new SailException(String.format("No support for %s",node)); + public void meet(Label node) throws SailException { + throw new SailException(String.format("No support for %s", node)); } @Override - public void meet(Lang node) throws SailException { - throw new SailException(String.format("No support for %s",node)); + public void meet(Lang node) throws SailException { + throw new SailException(String.format("No support for %s", node)); } @Override - public void meet(LangMatches node) throws SailException { - throw new SailException(String.format("No support for %s",node)); + public void meet(LangMatches node) throws SailException { + throw new SailException(String.format("No support for %s", node)); } @Override - public void meet(LeftJoin node) throws SailException { - throw new SailException(String.format("No support for %s",node)); + public void meet(LeftJoin node) throws SailException { + throw new SailException(String.format("No support for %s", node)); } @Override @@ -324,259 +420,262 @@ public void meet(Like like) throws SailException { } @Override - public void meet(Load node) throws SailException { - throw new SailException(String.format("No support for %s",node)); + public void meet(Load node) throws SailException { + throw new SailException(String.format("No support for %s", node)); } @Override - public void meet(LocalName node) throws SailException { - throw new SailException(String.format("No support for %s",node)); + public void meet(LocalName node) throws SailException { + throw new SailException(String.format("No support for %s", node)); } @Override - public void meet(MathExpr node) throws SailException { - throw new SailException(String.format("No support for %s",node)); + public void meet(MathExpr node) throws SailException { + throw new SailException(String.format("No support for %s", node)); } @Override - public void meet(Max node) throws SailException { - throw new SailException(String.format("No support for %s",node)); + public void meet(Max node) throws SailException { + throw new SailException(String.format("No support for %s", node)); } @Override - public void meet(Min node) throws SailException { - throw new SailException(String.format("No support for %s",node)); + public void meet(Min node) throws SailException { + throw new SailException(String.format("No support for %s", node)); } @Override - public void meet(Modify node) throws SailException { - throw new SailException(String.format("No support for %s",node)); + public void meet(Modify node) throws SailException { + throw new SailException(String.format("No support for %s", node)); } @Override - public void meet(Move node) throws SailException { - throw new SailException(String.format("No support for %s",node)); + public void meet(Move node) throws SailException { + throw new SailException(String.format("No support for %s", node)); } @Override - public void meet(MultiProjection node) throws SailException { - throw new SailException(String.format("No support for %s",node)); + public void meet(MultiProjection node) throws SailException { + throw new SailException(String.format("No support for %s", node)); } @Override - public void meet(Namespace node) throws SailException { - throw new SailException(String.format("No support for %s",node)); + public void meet(Namespace node) throws SailException { + throw new SailException(String.format("No support for %s", node)); } @Override - public void meet(Not node) throws SailException { - throw new SailException(String.format("No support for %s",node)); + public void meet(Not node) throws SailException { + throw new SailException(String.format("No support for %s", node)); } @Override - public void meet(Or node) throws SailException { - throw new SailException(String.format("No support for %s",node)); + public void meet(Or node) throws SailException { + throw new SailException(String.format("No support for %s", node)); } @Override - public void meet(Order node) throws SailException { - throw new SailException(String.format("No support for %s",node)); + public void meet(Order node) throws SailException { + throw new SailException(String.format("No support for %s", node)); } @Override - public void meet(OrderElem node) throws SailException { - throw new SailException(String.format("No support for %s",node)); + public void meet(OrderElem node) throws SailException { + throw new SailException(String.format("No support for %s", node)); } @Override - public void meet(Projection node) throws SailException { - logger.debug(String.format("Visiting a projection %s",node.getClass())); - node.getArg().visit(this); - for(Invocation invocation : invocations.values()) { - invocation.execute(connection,this); + public void meet(Projection node) throws SailException { + logger.debug(String.format("Visiting a projection %s", node.getClass())); + node.getArg().visit(this); + for (Invocation invocation : invocations.values()) { + invocation.execute(connection, this); } - node.getProjectionElemList().visit(this); + node.getProjectionElemList().visit(this); } @Override - public void meet(ProjectionElem node) throws SailException { - logger.debug(String.format("Visiting a projection element %s",node.getClass())); - String targetName=node.getTargetName(); - if(targetName==null) { - targetName=node.getSourceName(); + public void meet(ProjectionElem node) throws SailException { + logger.debug(String.format("Visiting a projection element %s", node.getClass())); + String targetName = node.getTargetName(); + if (targetName == null) { + targetName = node.getSourceName(); } - outputVariables.put(node.getSourceName(),targetName); + outputVariables.put(node.getSourceName(), targetName); } @Override public void meet(ProjectionElemList node) throws SailException { - logger.debug(String.format("Visiting a projection list %s",node.getClass())); + logger.debug(String.format("Visiting a projection list %s", node.getClass())); node.visitChildren(this); } @Override - public void meet(Reduced node) throws SailException { - throw new SailException(String.format("No support for %s",node)); + public void meet(Reduced node) throws SailException { + throw new SailException(String.format("No support for %s", node)); } @Override - public void meet(Regex node) throws SailException { - throw new SailException(String.format("No support for %s",node)); + public void meet(Regex node) throws SailException { + throw new SailException(String.format("No support for %s", node)); } @Override - public void meet(SameTerm node) throws SailException { - throw new SailException(String.format("No support for %s",node)); + public void meet(SameTerm node) throws SailException { + throw new SailException(String.format("No support for %s", node)); } @Override - public void meet(Sample node) throws SailException { - throw new SailException(String.format("No support for %s",node)); + public void meet(Sample node) throws SailException { + throw new SailException(String.format("No support for %s", node)); } @Override - public void meet(Service node) throws SailException { - throw new SailException(String.format("No support for %s",node)); + public void meet(Service node) throws SailException { + throw new SailException(String.format("No support for %s", node)); } @Override - public void meet(SingletonSet node) throws SailException { - throw new SailException(String.format("No support for %s",node)); + public void meet(SingletonSet node) throws SailException { + throw new SailException(String.format("No support for %s", node)); } @Override - public void meet(Slice node) throws SailException { - throw new SailException(String.format("No support for %s",node)); + public void meet(Slice node) throws SailException { + throw new SailException(String.format("No support for %s", node)); } @Override - public void meet(StatementPattern statement) throws SailException { - Var predicate=statement.getPredicateVar(); + public void meet(StatementPattern statement) throws SailException { + Var predicate = statement.getPredicateVar(); Var object = statement.getObjectVar(); - if(bindings.isEmpty()) { + if (bindings.isEmpty()) { bindings.add(new MapBindingSet()); } - if(!predicate.hasValue() || !predicate.getValue().isIRI()) { - throw new SailException(String.format("No support for non-IRI predicate binding %s",predicate)); - } else if("http://www.w3.org/1999/02/22-rdf-syntax-ns#type".equals(predicate.getValue().stringValue())) { - if(!object.hasValue() || !object.getValue().isIRI()) { - throw new SailException(String.format("No support for non-IRI invocation type binding %s",object)); + if (!predicate.hasValue() || !predicate.getValue().isIRI()) { + throw new SailException(String.format("No support for non-IRI predicate binding %s", predicate)); + } else if ("http://www.w3.org/1999/02/22-rdf-syntax-ns#type".equals(predicate.getValue().stringValue())) { + if (!object.hasValue() || !object.getValue().isIRI()) { + throw new SailException(String.format("No support for non-IRI invocation type binding %s", object)); } - IRI objectIRI = (IRI) object.getValue(); + IRI objectIri = (IRI) object.getValue(); // TODO lookup configuration Var subject = statement.getSubjectVar(); - if(!subject.hasValue() ) { - String key=String.format("?invocation=%d",connection.remotingSail.getNextId()); - IRI invocationIri=connection.remotingSail.getValueFactory().createIRI(objectIRI.getNamespace(),key); - for(MutableBindingSet binding : bindings) { - binding.addBinding(subject.getName(),invocationIri); + if (!subject.hasValue()) { + String key = String.format("?invocation=%d", connection.remotingSail.getNextId()); + IRI invocationIri = connection.remotingSail.getValueFactory().createIRI(objectIri.getNamespace(), key); + for (MutableBindingSet binding : bindings) { + binding.addBinding(subject.getName(), invocationIri); } - subject=new Var(subject.getName(),invocationIri); + subject = new Var(subject.getName(), invocationIri); } else { - if(!subject.getValue().isIRI()) { - throw new SailException(String.format("No support for non-IRI invocation subject binding %s",subject)); + if (!subject.getValue().isIRI()) { + throw new SailException(String.format("No support for non-IRI invocation subject binding %s", subject)); } - if(!((IRI)subject.getValue()).getNamespace().equals(objectIRI.getNamespace())) { - throw new SailException(String.format("No support for non-IRI invocation subject binding %s",subject)); + if (!((IRI) subject.getValue()).getNamespace().equals(objectIri.getNamespace())) { + throw new SailException(String.format("No support for non-IRI invocation subject binding %s", subject)); } } - ServiceConfig ic=connection.remotingSail.config.getService(objectIRI.stringValue()); - if(ic==null) { - throw new SailException(String.format("Function %s was not configured. Only got keys %s",objectIRI,connection.remotingSail.config.listServices())); + ServiceConfig ic = connection.remotingSail.config.getService(objectIri.stringValue()); + if (ic == null) { + throw new SailException(String.format("Function %s was not configured. Only got keys %s", objectIri, connection.remotingSail.config.listServices())); } Invocation invocation = invocations.get(subject.getValue()); - if(invocation!=null) { - if(!invocation.service.equals(ic)) { - throw new SailException(String.format("Could not rebind invocation %s with type %s to type %s",subject.getValue(),invocation.service,object.getValue())); + if (invocation != null) { + if (!invocation.service.equals(ic)) { + throw new SailException(String.format("Could not rebind invocation %s with type %s to type %s", subject.getValue(), invocation.service, object.getValue())); } } else { - invocation=new Invocation(connection); - invocation.service=ic; - invocation.key=(IRI) bindings.get(0).getBinding(subject.getName()).getValue(); - logger.debug(String.format("Registering a new invocation %s for service type %s",subject.getValue(),invocation.service)); - invocations.put(subject.getValue(),invocation); + invocation = new Invocation(connection); + invocation.service = ic; + invocation.key = (IRI) bindings.get(0).getBinding(subject.getName()).getValue(); + logger.debug(String.format("Registering a new invocation %s for service type %s", subject.getValue(), invocation.service)); + invocations.put(subject.getValue(), invocation); } } else { Var subject = statement.getSubjectVar(); - if(!subject.hasValue()) { - if(!bindings.get(0).hasBinding(subject.getName())) { - throw new SailException(String.format("Subject variable %s not bound to invocation or result.",subject.getName())); - } - subject=new Var(subject.getName(),bindings.get(0).getValue(subject.getName())); + if (!subject.hasValue()) { + if (!bindings.get(0).hasBinding(subject.getName())) { + throw new SailException(String.format("Subject variable %s not bound to invocation or result.", subject.getName())); + } + subject = new Var(subject.getName(), bindings.get(0).getValue(subject.getName())); } - if(!invocations.containsKey(subject.getValue())) { - throw new SailException(String.format("Trying to bind argument predicate %s to non existent invocation %s. Maybe you need to switch statement order such that rdf:type precedes any other bindings.",predicate.getValue().stringValue(),subject)); + if (!invocations.containsKey(subject.getValue())) { + throw new SailException(String.format("Trying to bind argument predicate %s to non existent invocation %s. " + + "Maybe you need to switch statement order such that rdf:type precedes any other bindings.", predicate.getValue().stringValue(), subject)); } - Invocation invocation=invocations.get(subject.getValue()); - IRI argument=(IRI) predicate.getValue(); - if(invocation.service.getResult().getOutputs().containsKey(argument.stringValue())) { - invocation.outputs.put(object,argument); - } else if(invocation.service.getArguments().containsKey(argument.stringValue())) { - invocation.inputs.put(argument.stringValue(),object); + Invocation invocation = invocations.get(subject.getValue()); + IRI argument = (IRI) predicate.getValue(); + if (invocation.service.getResult().getOutputs().containsKey(argument.stringValue())) { + invocation.outputs.put(object, argument); + } else if (invocation.service.getArguments().containsKey(argument.stringValue())) { + invocation.inputs.put(argument.stringValue(), object); } else { - throw new SailException(String.format("Predicate %s is neither output nor input predicate for invocation %s",argument,subject)); + throw new SailException(String.format("Predicate %s is neither output nor input predicate for invocation %s", argument, subject)); } } } @Override - public void meet(Str node) throws SailException { - throw new SailException(String.format("No support for %s",node)); + public void meet(Str node) throws SailException { + throw new SailException(String.format("No support for %s", node)); } @Override - public void meet(Sum node) throws SailException { - throw new SailException(String.format("No support for %s",node)); + public void meet(Sum node) throws SailException { + throw new SailException(String.format("No support for %s", node)); } @Override - public void meet(Union node) throws SailException { - throw new SailException(String.format("No support for %s",node)); + public void meet(Union node) throws SailException { + throw new SailException(String.format("No support for %s", node)); } @Override - public void meet(ValueConstant node) throws SailException { - throw new SailException(String.format("No support for %s",node)); + public void meet(ValueConstant node) throws SailException { + throw new SailException(String.format("No support for %s", node)); } - @Override - public void meet(ListMemberOperator node) throws SailException { - throw new SailException(String.format("No support for %s",node)); + @Override + public void meet(ListMemberOperator node) throws SailException { + throw new SailException(String.format("No support for %s", node)); } @Override - public void meet(Var node) throws SailException { - throw new SailException(String.format("No support for %s",node)); + public void meet(Var node) throws SailException { + throw new SailException(String.format("No support for %s", node)); } @Override - public void meet(ZeroLengthPath node) throws SailException { - throw new SailException(String.format("No support for %s",node)); + public void meet(ZeroLengthPath node) throws SailException { + throw new SailException(String.format("No support for %s", node)); } - /** - * @implNote This temporary default method is only supplied as a stop-gap for backward compatibility. Concrete - * implementations are expected to override. - * @since 3.2.0 - */ + /** + * visit tripleref + * + * @implNote This temporary default method is only supplied as a stop-gap for backward compatibility. Concrete implementations are expected to override. + * @since 3.2.0 + */ @Override - public void meet(TripleRef node) throws SailException { - throw new SailException(String.format("No support for %s",node)); + public void meet(TripleRef node) throws SailException { + throw new SailException(String.format("No support for %s", node)); } - /** - * @implNote This temporary default method is only supplied as a stop-gap for backward compatibility. Concrete - * implementations are expected to override. - * @since 3.2.0 - */ + /** + * visit a valueexpr + * + * @implNote This temporary default method is only supplied as a stop-gap for backward compatibility. Concrete implementations are expected to override. + * @since 3.2.0 + */ @Override - public void meet(ValueExprTripleRef node) throws SailException { - throw new SailException(String.format("No support for %s",node)); + public void meet(ValueExprTripleRef node) throws SailException { + throw new SailException(String.format("No support for %s", node)); } @Override - public void meetOther(QueryModelNode node) throws SailException { - throw new SailException(String.format("No support for %s",node)); + public void meetOther(QueryModelNode node) throws SailException { + throw new SailException(String.format("No support for %s", node)); } @Override diff --git a/remoting/src/main/java/org/eclipse/tractusx/agents/remoting/RemotingSail.java b/remoting/src/main/java/org/eclipse/tractusx/agents/remoting/RemotingSail.java index 649d6a2b..0ff1c663 100644 --- a/remoting/src/main/java/org/eclipse/tractusx/agents/remoting/RemotingSail.java +++ b/remoting/src/main/java/org/eclipse/tractusx/agents/remoting/RemotingSail.java @@ -16,11 +16,9 @@ // SPDX-License-Identifier: Apache-2.0 package org.eclipse.tractusx.agents.remoting; -import org.eclipse.rdf4j.model.*; - -import org.eclipse.rdf4j.sail.helpers.AbstractSail; +import org.eclipse.rdf4j.model.ValueFactory; import org.eclipse.rdf4j.sail.SailException; - +import org.eclipse.rdf4j.sail.helpers.AbstractSail; import org.eclipse.tractusx.agents.remoting.config.RemotingSailConfig; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -30,27 +28,33 @@ */ public class RemotingSail extends AbstractSail { - public int count=0; + public int count = 0; - /** the logger */ + /** + * the logger + */ protected Logger logger = LoggerFactory.getLogger(getClass()); - /** the remoting target */ + /** + * the remoting target + */ protected RemotingSailConfig config; /** * creates the remoting sail + * * @param config config of the services */ public RemotingSail(RemotingSailConfig config) { - this.config=config; - if(logger.isDebugEnabled()) { - logger.debug(String.format("Starting remoting inference on config %s",this.config)); - } + this.config = config; + if (logger.isDebugEnabled()) { + logger.debug(String.format("Starting remoting inference on config %s", this.config)); + } } /** * creates the next invocation id + * * @return current invocation id */ public int getNextId() { @@ -59,7 +63,7 @@ public int getNextId() { @Override public String toString() { - return super.toString()+"/sail"; + return super.toString() + "/sail"; } /** @@ -68,8 +72,8 @@ public String toString() { */ @Override protected RemotingSailConnection getConnectionInternal() throws SailException { - if(logger.isTraceEnabled()) { - logger.trace(String.format("returning a new remoting connection to config %s",this.config)); + if (logger.isTraceEnabled()) { + logger.trace(String.format("returning a new remoting connection to config %s", this.config)); } return new RemotingSailConnection(this); } @@ -79,8 +83,8 @@ protected RemotingSailConnection getConnectionInternal() throws SailException { */ @Override protected void shutDownInternal() { - if(logger.isTraceEnabled()) { - logger.trace(String.format("shutting down remoting to %s",this.config)); + if (logger.isTraceEnabled()) { + logger.trace(String.format("shutting down remoting to %s", this.config)); } } diff --git a/remoting/src/main/java/org/eclipse/tractusx/agents/remoting/RemotingSailConnection.java b/remoting/src/main/java/org/eclipse/tractusx/agents/remoting/RemotingSailConnection.java index 6300102b..8c05d2be 100644 --- a/remoting/src/main/java/org/eclipse/tractusx/agents/remoting/RemotingSailConnection.java +++ b/remoting/src/main/java/org/eclipse/tractusx/agents/remoting/RemotingSailConnection.java @@ -16,51 +16,69 @@ // SPDX-License-Identifier: Apache-2.0 package org.eclipse.tractusx.agents.remoting; -import org.eclipse.rdf4j.query.*; -import org.eclipse.rdf4j.query.impl.ListBindingSet; -import org.eclipse.rdf4j.sail.helpers.AbstractSailConnection; -import org.eclipse.rdf4j.common.iteration.CloseableIteration; -import org.eclipse.rdf4j.sail.SailException; -import org.eclipse.rdf4j.model.*; -import org.eclipse.rdf4j.query.algebra.TupleExpr; import org.eclipse.rdf4j.common.iteration.AbstractCloseableIteration; +import org.eclipse.rdf4j.common.iteration.CloseableIteration; +import org.eclipse.rdf4j.model.IRI; +import org.eclipse.rdf4j.model.Namespace; +import org.eclipse.rdf4j.model.Resource; +import org.eclipse.rdf4j.model.Statement; +import org.eclipse.rdf4j.model.Value; import org.eclipse.rdf4j.model.impl.SimpleNamespace; - +import org.eclipse.rdf4j.query.BindingSet; +import org.eclipse.rdf4j.query.Dataset; +import org.eclipse.rdf4j.query.QueryEvaluationException; +import org.eclipse.rdf4j.query.algebra.TupleExpr; +import org.eclipse.rdf4j.query.impl.ListBindingSet; +import org.eclipse.rdf4j.sail.SailException; +import org.eclipse.rdf4j.sail.helpers.AbstractSailConnection; import org.eclipse.tractusx.agents.remoting.util.BatchKey; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.*; -import java.util.stream.Collectors; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set; /** * Implements a connection to a remote service * This is the main magic for hiding functions as graphs. */ public class RemotingSailConnection extends AbstractSailConnection { - /** logger */ - protected Logger logger = LoggerFactory .getLogger(getClass()); - /** namespaces map */ - protected Map namespaces=new HashMap<>(); - /** link to the sail / service wrapper */ + /** + * logger + */ + protected Logger logger = LoggerFactory.getLogger(getClass()); + /** + * namespaces map + */ + protected Map namespaces = new HashMap<>(); + /** + * link to the sail / service wrapper + */ protected RemotingSail remotingSail; /** * creates a new connection + * * @param remotingSail the remoting sail (just a wrapper around the config, since it keeps no state) */ public RemotingSailConnection(RemotingSail remotingSail) { super(remotingSail); - this.remotingSail=remotingSail; - if(logger.isInfoEnabled()) { - logger.info(String.format("Creating a new connection to the remoting sail %s wrapping config %s",remotingSail,remotingSail.config)); + this.remotingSail = remotingSail; + if (logger.isInfoEnabled()) { + logger.info(String.format("Creating a new connection to the remoting sail %s wrapping config %s", remotingSail, remotingSail.config)); } } @Override public String toString() { - return super.toString()+"/connection"; + return super.toString() + "/connection"; } /** @@ -68,8 +86,8 @@ public String toString() { */ @Override protected void clearNamespacesInternal() { - if(logger.isDebugEnabled()) { - logger.debug(String.format("Clearing connection namespaces to the remoting sail %s wrapping config %s",remotingSail,remotingSail.config)); + if (logger.isDebugEnabled()) { + logger.debug(String.format("Clearing connection namespaces to the remoting sail %s wrapping config %s", remotingSail, remotingSail.config)); } namespaces.clear(); } @@ -79,10 +97,10 @@ protected void clearNamespacesInternal() { */ @Override protected void removeNamespaceInternal(String prefix) { - String oldValue=namespaces.remove(prefix); - if(logger.isDebugEnabled()) { - logger.debug(String.format("Removed namespace prefix %s (previous value %s) to the remoting sail %s wrapping config %s",prefix,oldValue,remotingSail,remotingSail.config)); - } + String oldValue = namespaces.remove(prefix); + if (logger.isDebugEnabled()) { + logger.debug(String.format("Removed namespace prefix %s (previous value %s) to the remoting sail %s wrapping config %s", prefix, oldValue, remotingSail, remotingSail.config)); + } } /** @@ -90,9 +108,9 @@ protected void removeNamespaceInternal(String prefix) { */ @Override protected void setNamespaceInternal(String prefix, String value) { - String oldValue=namespaces.put(prefix,value); - if(logger.isDebugEnabled()) { - logger.debug(String.format("Set namespace prefix %s to value %s (previous value was %s) to the remoting sail %s wrapping config %s",prefix,value,oldValue,remotingSail,remotingSail.config)); + String oldValue = namespaces.put(prefix, value); + if (logger.isDebugEnabled()) { + logger.debug(String.format("Set namespace prefix %s to value %s (previous value was %s) to the remoting sail %s wrapping config %s", prefix, value, oldValue, remotingSail, remotingSail.config)); } } @@ -101,9 +119,9 @@ protected void setNamespaceInternal(String prefix, String value) { */ @Override protected String getNamespaceInternal(String prefix) { - String value= namespaces.get(prefix); - if(logger.isDebugEnabled()) { - logger.debug(String.format("Resolve namespace prefix %s to value %s to the remoting sail %s wrapping config %s",prefix,value,remotingSail,remotingSail.config)); + String value = namespaces.get(prefix); + if (logger.isDebugEnabled()) { + logger.debug(String.format("Resolve namespace prefix %s to value %s to the remoting sail %s wrapping config %s", prefix, value, remotingSail, remotingSail.config)); } return value; } @@ -113,11 +131,11 @@ protected String getNamespaceInternal(String prefix) { */ @Override protected CloseableIteration getNamespacesInternal() { - if(logger.isDebugEnabled()) { - logger.debug(String.format("Iterate namespaces to the remoting sail %s wrapping config %s",remotingSail,remotingSail.config)); + if (logger.isDebugEnabled()) { + logger.debug(String.format("Iterate namespaces to the remoting sail %s wrapping config %s", remotingSail, remotingSail.config)); } return new AbstractCloseableIteration<>() { - protected final java.util.Iterator> iterator=namespaces.entrySet().iterator(); + protected final java.util.Iterator> iterator = namespaces.entrySet().iterator(); @Override public void remove() { @@ -126,8 +144,8 @@ public void remove() { @Override public Namespace next() { - java.util.Map.Entry nextEntry=iterator.next(); - return new SimpleNamespace(nextEntry.getKey(),nextEntry.getValue()); + java.util.Map.Entry nextEntry = iterator.next(); + return new SimpleNamespace(nextEntry.getKey(), nextEntry.getValue()); } @Override @@ -142,8 +160,8 @@ public boolean hasNext() { */ @Override protected void closeInternal() throws SailException { - if(logger.isInfoEnabled()) { - logger.info(String.format("Closing connection to the remoting sail %s wrapping config %s",remotingSail,remotingSail.config)); + if (logger.isInfoEnabled()) { + logger.info(String.format("Closing connection to the remoting sail %s wrapping config %s", remotingSail, remotingSail.config)); } } @@ -151,102 +169,104 @@ protected void closeInternal() throws SailException { * is that the actual query part? */ @Override - protected CloseableIteration evaluateInternal( - TupleExpr tupleExpr, Dataset dataset, BindingSet bindings, boolean includeInferred) throws SailException { - if(logger.isInfoEnabled()) { - logger.info(String.format("Evaluating tuples %s on dataset %s and bindings %s (including inferred %b) connection to the remoting sail %s wrapping config %s",tupleExpr,dataset,bindings,includeInferred,remotingSail,remotingSail.config)); - } - QueryExecutor visitor=new QueryExecutor(this); - tupleExpr.visit(visitor); - final Set> distincts=new HashSet<>(); - visitor.bindings.forEach( binding -> { - BatchKey key = new BatchKey<>(visitor.outputVariables.values().stream().map(binding::getValue).toArray(Value[]::new)); - distincts.add(key); - }); - List keys= new ArrayList(visitor.outputVariables.keySet()); - final Iterator allBindings=distincts.stream().map( key -> new ListBindingSet(keys,key.getComponents())).iterator(); - - return new AbstractCloseableIteration() { - - @Override - public void remove() { - allBindings.remove(); - } - - @Override - public BindingSet next() { - return allBindings.next(); - } - - @Override - public boolean hasNext() { - return allBindings.hasNext(); - } - }; + protected CloseableIteration evaluateInternal( + TupleExpr tupleExpr, Dataset dataset, BindingSet bindings, boolean includeInferred) throws SailException { + if (logger.isInfoEnabled()) { + logger.info(String.format("Evaluating tuples %s on dataset %s and bindings %s (including inferred %b) " + + "connection to the remoting sail %s wrapping config %s", tupleExpr, dataset, bindings, includeInferred, remotingSail, remotingSail.config)); + } + QueryExecutor visitor = new QueryExecutor(this); + tupleExpr.visit(visitor); + final Set> distincts = new HashSet<>(); + visitor.bindings.forEach(binding -> { + BatchKey key = new BatchKey<>(visitor.outputVariables.values().stream().map(binding::getValue).toArray(Value[]::new)); + distincts.add(key); + }); + List keys = new ArrayList(visitor.outputVariables.keySet()); + final Iterator allBindings = distincts.stream().map(key -> new ListBindingSet(keys, key.getComponents())).iterator(); + + return new AbstractCloseableIteration() { + + @Override + public void remove() { + allBindings.remove(); } + @Override + public BindingSet next() { + return allBindings.next(); + } + + @Override + public boolean hasNext() { + return allBindings.hasNext(); + } + }; + } + /** * iterate resources (graphs?) */ @Override - protected CloseableIteration getContextIDsInternal() - throws SailException { - if(logger.isInfoEnabled()) { - logger.info(String.format("Iterating resources for connection on remoting sail %s wrapping config %s",remotingSail,remotingSail.config)); - } - return new AbstractCloseableIteration<>() { - - @Override - public void remove() { - } - - @Override - public Resource next() { - return null; - } - - @Override - public boolean hasNext() { - return false; - } - }; + protected CloseableIteration getContextIDsInternal() + throws SailException { + if (logger.isInfoEnabled()) { + logger.info(String.format("Iterating resources for connection on remoting sail %s wrapping config %s", remotingSail, remotingSail.config)); + } + return new AbstractCloseableIteration<>() { + + @Override + public void remove() { + } + + @Override + public Resource next() { + return null; } + @Override + public boolean hasNext() { + return false; + } + }; + } + /** * return all statements */ @Override - protected CloseableIteration getStatementsInternal(Resource subj, - IRI pred, Value obj, boolean includeInferred, Resource... contexts) throws SailException { - if(logger.isInfoEnabled()) { - logger.info(String.format("Returning all statements on subject %s for predicate %s and object %s (including inferred %b) in contexts %s for connection to the remoting sail %s wrapping config %s",subj,pred,obj,includeInferred,Arrays.toString(contexts),remotingSail,remotingSail.config)); - } - return new AbstractCloseableIteration<>() { - - @Override - public void remove() { - } - - @Override - public Statement next() { - return null; - } - - @Override - public boolean hasNext() { - return false; - } - }; + protected CloseableIteration getStatementsInternal(Resource subj, + IRI pred, Value obj, boolean includeInferred, Resource... contexts) throws SailException { + if (logger.isInfoEnabled()) { + logger.info(String.format("Returning all statements on subject %s for predicate %s and object %s (including inferred %b) " + + "in contexts %s for connection to the remoting sail %s wrapping config %s", subj, pred, obj, includeInferred, Arrays.toString(contexts), remotingSail, remotingSail.config)); } + return new AbstractCloseableIteration<>() { + + @Override + public void remove() { + } + + @Override + public Statement next() { + return null; + } + + @Override + public boolean hasNext() { + return false; + } + }; + } /** * compute graph sizes */ @Override - protected long sizeInternal(Resource... contexts) throws SailException { - if(logger.isInfoEnabled()) { - logger.info(String.format("Returning siteo for contexts %s for connection to the remoting sail %s wrapping config %s",Arrays.toString(contexts),remotingSail,remotingSail.config)); + protected long sizeInternal(Resource... contexts) throws SailException { + if (logger.isInfoEnabled()) { + logger.info(String.format("Returning siteo for contexts %s for connection to the remoting sail %s wrapping config %s", Arrays.toString(contexts), remotingSail, remotingSail.config)); } return -1; } @@ -255,9 +275,9 @@ protected long sizeInternal(Resource... contexts) throws SailException { * compute graph sizes */ @Override - protected void startTransactionInternal() throws SailException { - if(logger.isInfoEnabled()) { - logger.info(String.format("Start transaction on connection to the remoting sail %s wrapping config %s",remotingSail,remotingSail.config)); + protected void startTransactionInternal() throws SailException { + if (logger.isInfoEnabled()) { + logger.info(String.format("Start transaction on connection to the remoting sail %s wrapping config %s", remotingSail, remotingSail.config)); } } @@ -265,9 +285,9 @@ protected void startTransactionInternal() throws SailException { * compute graph sizes */ @Override - protected void commitInternal() throws SailException { - if(logger.isInfoEnabled()) { - logger.info(String.format("Commit transaction on connection to the remoting sail %s wrapping config %s",remotingSail,remotingSail.config)); + protected void commitInternal() throws SailException { + if (logger.isInfoEnabled()) { + logger.info(String.format("Commit transaction on connection to the remoting sail %s wrapping config %s", remotingSail, remotingSail.config)); } } @@ -275,9 +295,9 @@ protected void commitInternal() throws SailException { * compute graph sizes */ @Override - protected void rollbackInternal() throws SailException { - if(logger.isInfoEnabled()) { - logger.info(String.format("Rollback transaction on connection to the remoting sail %s wrapping config %s",remotingSail,remotingSail.config)); + protected void rollbackInternal() throws SailException { + if (logger.isInfoEnabled()) { + logger.info(String.format("Rollback transaction on connection to the remoting sail %s wrapping config %s", remotingSail, remotingSail.config)); } } @@ -285,25 +305,27 @@ protected void rollbackInternal() throws SailException { * adds a statement */ @Override - protected void addStatementInternal(Resource subj, IRI pred, Value obj, Resource... contexts) - throws SailException { - if(logger.isInfoEnabled()) { - logger.info(String.format("Adding statements on subject %s for predicate %s and object %s in contexts %s for connection to the remoting sail %s wrapping config %s",subj,pred,obj,Arrays.toString(contexts),remotingSail,remotingSail.config)); - } + protected void addStatementInternal(Resource subj, IRI pred, Value obj, Resource... contexts) + throws SailException { + if (logger.isInfoEnabled()) { + logger.info(String.format("Adding statements on subject %s for predicate %s and object %s in contexts %s " + + "for connection to the remoting sail %s wrapping config %s", subj, pred, obj, Arrays.toString(contexts), remotingSail, remotingSail.config)); + } } @Override - protected void removeStatementsInternal(Resource subj, IRI pred, Value obj, Resource... contexts) - throws SailException { - if(logger.isInfoEnabled()) { - logger.info(String.format("Remove statements on subject %s for predicate %s and object %s in contexts %s for connection to the remoting sail %s wrapping config %s",subj,pred,obj,Arrays.toString(contexts),remotingSail,remotingSail.config)); - } + protected void removeStatementsInternal(Resource subj, IRI pred, Value obj, Resource... contexts) + throws SailException { + if (logger.isInfoEnabled()) { + logger.info(String.format("Remove statements on subject %s for predicate %s and object %s in contexts %s " + + "for connection to the remoting sail %s wrapping config %s", subj, pred, obj, Arrays.toString(contexts), remotingSail, remotingSail.config)); + } } - + @Override protected void clearInternal(Resource... contexts) throws SailException { - if(logger.isInfoEnabled()) { - logger.info(String.format("Clearcontexts %s for connection to the remoting sail %s wrapping config %s",Arrays.toString(contexts),remotingSail,remotingSail.config)); + if (logger.isInfoEnabled()) { + logger.info(String.format("Clearcontexts %s for connection to the remoting sail %s wrapping config %s", Arrays.toString(contexts), remotingSail, remotingSail.config)); } } diff --git a/remoting/src/main/java/org/eclipse/tractusx/agents/remoting/RemotingSailFactory.java b/remoting/src/main/java/org/eclipse/tractusx/agents/remoting/RemotingSailFactory.java index fee5ab83..621d5972 100644 --- a/remoting/src/main/java/org/eclipse/tractusx/agents/remoting/RemotingSailFactory.java +++ b/remoting/src/main/java/org/eclipse/tractusx/agents/remoting/RemotingSailFactory.java @@ -17,9 +17,9 @@ package org.eclipse.tractusx.agents.remoting; import org.eclipse.rdf4j.sail.Sail; +import org.eclipse.rdf4j.sail.config.SailConfigException; import org.eclipse.rdf4j.sail.config.SailFactory; import org.eclipse.rdf4j.sail.config.SailImplConfig; -import org.eclipse.rdf4j.sail.config.SailConfigException; import org.eclipse.tractusx.agents.remoting.config.RemotingSailConfig; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -39,19 +39,19 @@ public class RemotingSailFactory implements SailFactory { * hardcoded sail type */ public static final String SAIL_TYPE = "org.eclipse.tractusx.agents:Remoting"; - + /** * createst the factory */ public RemotingSailFactory() { - if(logger.isDebugEnabled()) { - logger.debug(String.format("Creating a Remoting SAIL factory for SAIL type %s. Usually OSGI configuration has been successful at this point.",SAIL_TYPE)); + if (logger.isDebugEnabled()) { + logger.debug(String.format("Creating a Remoting SAIL factory for SAIL type %s. Usually OSGI configuration has been successful at this point.", SAIL_TYPE)); } } @Override public String toString() { - return super.toString()+"/factory"; + return super.toString() + "/factory"; } /** @@ -67,7 +67,7 @@ public String getSailType() { */ @Override public SailImplConfig getConfig() { - if(logger.isTraceEnabled()) { + if (logger.isTraceEnabled()) { logger.trace("Creating a Remoting SAIL configuration."); } return new RemotingSailConfig(); @@ -78,17 +78,16 @@ public SailImplConfig getConfig() { */ @Override public Sail getSail(SailImplConfig originalConfig) throws SailConfigException { - if(logger.isDebugEnabled()) { - logger.debug("About to creating a Remoting SAIL from configuration "+originalConfig); + if (logger.isDebugEnabled()) { + logger.debug("About to creating a Remoting SAIL from configuration " + originalConfig); } if (!(originalConfig instanceof RemotingSailConfig)) { throw new SailConfigException( - "Wrong config type: " - + originalConfig.getClass().getCanonicalName() + ". "); + "Wrong config type: " + originalConfig.getClass().getCanonicalName() + ". "); } - RemotingSailConfig config = (RemotingSailConfig)originalConfig; + RemotingSailConfig config = (RemotingSailConfig) originalConfig; RemotingSail sail = new RemotingSail(config); return sail; - + } } \ No newline at end of file diff --git a/remoting/src/main/java/org/eclipse/tractusx/agents/remoting/callback/CallbackController.java b/remoting/src/main/java/org/eclipse/tractusx/agents/remoting/callback/CallbackController.java index fa43dd42..be11b8db 100644 --- a/remoting/src/main/java/org/eclipse/tractusx/agents/remoting/callback/CallbackController.java +++ b/remoting/src/main/java/org/eclipse/tractusx/agents/remoting/callback/CallbackController.java @@ -25,13 +25,13 @@ import org.springframework.web.servlet.ModelAndView; import org.xml.sax.SAXException; -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; import java.io.IOException; import java.util.HashMap; import java.util.Map; import java.util.concurrent.atomic.AtomicReference; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; /** * a controller for receiving and synchronizing on @@ -41,23 +41,24 @@ @RequestMapping("/callback") public class CallbackController implements org.springframework.web.servlet.mvc.Controller { - public static ObjectMapper objectMapper=new ObjectMapper(); + public static ObjectMapper objectMapper = new ObjectMapper(); - public static final Map> pending=new HashMap<>(); + public static final Map> PENDING = new HashMap<>(); /** * registers a new asynchronous call + * * @param responsePath the path where to look for call ids in the response - * @param callId id of the call/response + * @param callId id of the call/response * @return an atomic reference for the result */ public static CallbackToken register(String responsePath, String callId) { - CallbackToken token=new CallbackToken(responsePath,callId); - synchronized (pending) { - AtomicReference result = pending.get(token); - if(result==null) { - result=new AtomicReference<>(); - pending.put(token,result); + CallbackToken token = new CallbackToken(responsePath, callId); + synchronized (PENDING) { + AtomicReference result = PENDING.get(token); + if (result == null) { + result = new AtomicReference<>(); + PENDING.put(token, result); } } return token; @@ -65,23 +66,25 @@ public static CallbackToken register(String responsePath, String callId) { /** * synchronizes on the given asynchronous call + * * @param token of the call * @return asynchronous result */ public static Object synchronize(CallbackToken token) { AtomicReference result; - synchronized(pending) { - result=pending.get(token); + synchronized (PENDING) { + result = PENDING.get(token); } - if(result==null) { + if (result == null) { return null; } - int maxrounds=2; - synchronized(result) { - while(result.get()==null && 0> callbacks : pending.entrySet()) { - String[] paths=callbacks.getKey().getResponsePath().split("\\."); - String callId= Invocation.convertObjectToString(Invocation.traversePath(callback, paths)); - if(callbacks.getKey().getCallId().equals(callId)) { + synchronized (PENDING) { + for (Map.Entry> callbacks : PENDING.entrySet()) { + String[] paths = callbacks.getKey().getResponsePath().split("\\."); + String callId = Invocation.convertObjectToString(Invocation.traversePath(callback, paths)); + if (callbacks.getKey().getCallId().equals(callId)) { callbacks.getValue().set(callback); - synchronized(callbacks.getValue()) { + synchronized (callbacks.getValue()) { callbacks.getValue().notify(); } } } } response.setStatus(200); - } catch(IOException | ParserConfigurationException | SAXException jpe) { + } catch (IOException | ParserConfigurationException | SAXException jpe) { response.setStatus(400); } return null; diff --git a/remoting/src/main/java/org/eclipse/tractusx/agents/remoting/callback/CallbackToken.java b/remoting/src/main/java/org/eclipse/tractusx/agents/remoting/callback/CallbackToken.java index a22cbcfd..cba9d377 100644 --- a/remoting/src/main/java/org/eclipse/tractusx/agents/remoting/callback/CallbackToken.java +++ b/remoting/src/main/java/org/eclipse/tractusx/agents/remoting/callback/CallbackToken.java @@ -28,15 +28,18 @@ public class CallbackToken { /** * create a new token + * * @param responsePath the path where we expect call id in the response - * @param callId the callid to look for + * @param callId the callid to look for */ public CallbackToken(String responsePath, String callId) { - this.responsePath=responsePath; - this.callId=callId; + this.responsePath = responsePath; + this.callId = callId; } /** + * access + * * @return associated call id */ public String getCallId() { @@ -44,6 +47,8 @@ public String getCallId() { } /** + * access + * * @return associated response path */ public String getResponsePath() { @@ -53,11 +58,11 @@ public String getResponsePath() { @Override public boolean equals(Object obj) { return super.equals(obj) || (obj instanceof CallbackToken && - responsePath.equals(((CallbackToken) obj).responsePath) && callId.equals(((CallbackToken) obj).callId)); + responsePath.equals(((CallbackToken) obj).responsePath) && callId.equals(((CallbackToken) obj).callId)); } @Override public int hashCode() { - return responsePath.hashCode()*callId.hashCode(); + return responsePath.hashCode() * callId.hashCode(); } } diff --git a/remoting/src/main/java/org/eclipse/tractusx/agents/remoting/config/ArgumentComparator.java b/remoting/src/main/java/org/eclipse/tractusx/agents/remoting/config/ArgumentComparator.java index 22bfd0c1..cc3620af 100644 --- a/remoting/src/main/java/org/eclipse/tractusx/agents/remoting/config/ArgumentComparator.java +++ b/remoting/src/main/java/org/eclipse/tractusx/agents/remoting/config/ArgumentComparator.java @@ -26,11 +26,12 @@ public class ArgumentComparator implements Comparator o1, Map.Entry o2) { - return Integer.compare(o1.getValue().getPriority(),o2.getValue().getPriority()); + return Integer.compare(o1.getValue().getPriority(), o2.getValue().getPriority()); } } diff --git a/remoting/src/main/java/org/eclipse/tractusx/agents/remoting/config/ArgumentConfig.java b/remoting/src/main/java/org/eclipse/tractusx/agents/remoting/config/ArgumentConfig.java index cbdf04fc..3531d297 100644 --- a/remoting/src/main/java/org/eclipse/tractusx/agents/remoting/config/ArgumentConfig.java +++ b/remoting/src/main/java/org/eclipse/tractusx/agents/remoting/config/ArgumentConfig.java @@ -22,22 +22,24 @@ * represents the config of an argument */ public class ArgumentConfig { - /** name of the argument */ - protected String argumentName; + /** + * name of the argument + */ + protected String argumentName; /** * whether it is mandatory */ - protected boolean mandatory=true; + protected boolean mandatory = true; /** * an optional default value */ - protected Object defaultValue; + protected Object defaultValue; /** * whether the argument forms a batch group */ - protected boolean formsBatchGroup=false; + protected boolean formsBatchGroup = false; /** * the priority with which the argument is processed @@ -45,6 +47,8 @@ public class ArgumentConfig { protected int priority = 100; /** + * access + * * @return argument reference */ public String getArgumentName() { @@ -53,6 +57,7 @@ public String getArgumentName() { /** * sets + * * @param argumentName reference */ public void setArgumentName(String argumentName) { @@ -60,6 +65,8 @@ public void setArgumentName(String argumentName) { } /** + * access + * * @return whether this argument is mandatory */ public boolean isMandatory() { @@ -67,6 +74,8 @@ public boolean isMandatory() { } /** + * access + * * @return the default value of the argument if not bound */ public Object getDefaultValue() { @@ -74,6 +83,8 @@ public Object getDefaultValue() { } /** + * access + * * @return whether this argument should form a batch group */ public boolean isFormsBatchGroup() { @@ -81,6 +92,8 @@ public boolean isFormsBatchGroup() { } /** + * access + * * @return the processing priority of the argument */ public int getPriority() { @@ -89,18 +102,19 @@ public int getPriority() { /** * validate the argument + * * @param context validation context * @throws SailConfigException if validation was unsuccessful */ public void validate(String context) throws SailConfigException { - if (argumentName==null || argumentName.length()==0) { - throw new SailConfigException(String.format("Only support named arguments %s.",context)); - } - } + if (argumentName == null || argumentName.length() == 0) { + throw new SailConfigException(String.format("Only support named arguments %s.", context)); + } + } + + @Override + public String toString() { + return super.toString() + "/argument(" + String.valueOf(mandatory) + ")"; + } - @Override - public String toString() { - return super.toString()+"/argument("+String.valueOf(mandatory)+")"; - } - } diff --git a/remoting/src/main/java/org/eclipse/tractusx/agents/remoting/config/AuthenticationConfig.java b/remoting/src/main/java/org/eclipse/tractusx/agents/remoting/config/AuthenticationConfig.java index fef6eecf..934b1a93 100644 --- a/remoting/src/main/java/org/eclipse/tractusx/agents/remoting/config/AuthenticationConfig.java +++ b/remoting/src/main/java/org/eclipse/tractusx/agents/remoting/config/AuthenticationConfig.java @@ -23,29 +23,36 @@ * from the config graph of the remoting SAIL repo. */ public class AuthenticationConfig { - - /** auth key (defaults to Authorization) */ + + /** + * auth key (defaults to Authorization) + */ protected String authKey = "Authorization"; - /** actual auth code */ + /** + * actual auth code + */ protected String authCode = null; - + @Override public String toString() { - return super.toString()+"/authentication"; - } + return super.toString() + "/authentication"; + } /** * Validates the authentication config + * * @throws SailConfigException in case validation is unsuccessful */ public void validate(String context) throws SailConfigException { - if (authCode==null || authCode.length() == 0) { - throw new SailConfigException(String.format("Authentication code in %s is not provided",context)); + if (authCode == null || authCode.length() == 0) { + throw new SailConfigException(String.format("Authentication code in %s is not provided", context)); } } /** + * access + * * @return configured auth key */ public String getAuthKey() { @@ -53,6 +60,8 @@ public String getAuthKey() { } /** + * access + * * @return configured auth code */ public String getAuthCode() { diff --git a/remoting/src/main/java/org/eclipse/tractusx/agents/remoting/config/RemotingSailConfig.java b/remoting/src/main/java/org/eclipse/tractusx/agents/remoting/config/RemotingSailConfig.java index b06793d4..610da98d 100644 --- a/remoting/src/main/java/org/eclipse/tractusx/agents/remoting/config/RemotingSailConfig.java +++ b/remoting/src/main/java/org/eclipse/tractusx/agents/remoting/config/RemotingSailConfig.java @@ -17,18 +17,20 @@ package org.eclipse.tractusx.agents.remoting.config; import com.fasterxml.jackson.databind.JsonNode; -import org.eclipse.rdf4j.sail.config.AbstractSailImplConfig; -import org.eclipse.rdf4j.sail.config.SailConfigException; -import org.eclipse.rdf4j.model.*; +import org.eclipse.rdf4j.model.IRI; +import org.eclipse.rdf4j.model.Model; +import org.eclipse.rdf4j.model.Resource; +import org.eclipse.rdf4j.model.ValueFactory; import org.eclipse.rdf4j.model.impl.SimpleValueFactory; import org.eclipse.rdf4j.model.util.Models; - +import org.eclipse.rdf4j.sail.config.AbstractSailImplConfig; +import org.eclipse.rdf4j.sail.config.SailConfigException; import org.eclipse.tractusx.agents.remoting.Invocation; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.Map; import java.util.HashMap; +import java.util.Map; import java.util.Set; /** @@ -36,81 +38,85 @@ * inference service needs to know to expose its capabilities. */ public class RemotingSailConfig extends AbstractSailImplConfig { - /** logger */ + /** + * logger + */ protected Logger logger = LoggerFactory.getLogger(getClass()); /** * constants */ - public static String CONFIG_NAMESPACE="https://w3id.org/catenax/ontology/function#"; - public static String COMMON_NAMESPACE="https://w3id.org/catenax/ontology/common#"; - public static String CALLBACK_NAME="callbackAddress"; - public static String FUNCTION_NAME="Function"; - public static String AUTHENTICATION_CODE="authenticationCode"; - public static String AUTHENTICATION_KEY="authenticationKey"; - public static String RESULT_NAME="Result"; - public static String ARGUMENT_NAME="Argument"; - public static String INPUT_ATTRIBUTE="input"; - public static String RESULT_ATTRIBUTE="result"; - public static String BATCH_ATTRIBUTE="batch"; - public static String CALLBACK_ATTRIBUTE="callbackProperty"; - public static String INVOCATION_ID_ATTRIBUTE="invocationIdProperty"; - public static String INPUT_PROPERTY_ATTRIBUTE="inputProperty"; - public static String RESULT_ID_ATTRIBUTE="resultIdProperty"; - public static String CORRELATION_INPUT_ATTRIBUTE="correlationInput"; - public static String OUTPUT_PROPERTY_ATTRIBUTE="outputProperty"; - public static String ARGUMENT_ATTRIBUTE="argumentName"; - public static String MANDATORY_ATTRIBUTE="mandatory"; - public static String DEFAULT_ATTRIBUTE="default"; - public static String GROUP_ATTRIBUTE="formsBatchGroup"; - public static String PRIORITY_ATTRIBUTE="priority"; - public static String PATH_ATTRIBUTE="valuePath"; - public static String TYPE_RELATION="dataType"; - public static String OUTPUT_ATTRIBUTE="output"; - public static String INVOCATION_PROPERTY="supportsInvocation"; - public static String URL_ATTRIBUTE="targetUri"; - public static String METHOD_ATTRIBUTE="invocationMethod"; + public static final String CONFIG_NAMESPACE = "https://w3id.org/catenax/ontology/function#"; + public static final String COMMON_NAMESPACE = "https://w3id.org/catenax/ontology/common#"; + public static final String CALLBACK_NAME = "callbackAddress"; + public static final String FUNCTION_NAME = "Function"; + public static final String AUTHENTICATION_CODE = "authenticationCode"; + public static final String AUTHENTICATION_KEY = "authenticationKey"; + public static final String RESULT_NAME = "Result"; + public static final String ARGUMENT_NAME = "Argument"; + public static final String INPUT_ATTRIBUTE = "input"; + public static final String RESULT_ATTRIBUTE = "result"; + public static final String BATCH_ATTRIBUTE = "batch"; + public static final String CALLBACK_ATTRIBUTE = "callbackProperty"; + public static final String INVOCATION_ID_ATTRIBUTE = "invocationIdProperty"; + public static final String INPUT_PROPERTY_ATTRIBUTE = "inputProperty"; + public static final String RESULT_ID_ATTRIBUTE = "resultIdProperty"; + public static final String CORRELATION_INPUT_ATTRIBUTE = "correlationInput"; + public static final String OUTPUT_PROPERTY_ATTRIBUTE = "outputProperty"; + public static final String ARGUMENT_ATTRIBUTE = "argumentName"; + public static final String MANDATORY_ATTRIBUTE = "mandatory"; + public static final String DEFAULT_ATTRIBUTE = "default"; + public static final String GROUP_ATTRIBUTE = "formsBatchGroup"; + public static final String PRIORITY_ATTRIBUTE = "priority"; + public static final String PATH_ATTRIBUTE = "valuePath"; + public static final String TYPE_RELATION = "dataType"; + public static final String OUTPUT_ATTRIBUTE = "output"; + public static final String INVOCATION_PROPERTY = "supportsInvocation"; + public static final String URL_ATTRIBUTE = "targetUri"; + public static final String METHOD_ATTRIBUTE = "invocationMethod"; - /** when interacting with parser/exporter */ + /** + * when interacting with parser/exporter + */ protected ValueFactory vf = SimpleValueFactory.getInstance(); /** * iri for predicate */ - protected IRI SUPPORTS_INVOCATION_PREDICATE=vf.createIRI(CONFIG_NAMESPACE,INVOCATION_PROPERTY); - protected IRI CALLBACK_ADDRESS_PREDICATE=vf.createIRI(CONFIG_NAMESPACE,CALLBACK_NAME); - protected IRI TARGET_URI_PREDICATE=vf.createIRI(CONFIG_NAMESPACE, URL_ATTRIBUTE); - protected IRI INVOCATION_METHOD_PREDICATE=vf.createIRI(CONFIG_NAMESPACE, METHOD_ATTRIBUTE); - protected IRI INPUT_PREDICATE=vf.createIRI(CONFIG_NAMESPACE, INPUT_ATTRIBUTE); - protected IRI OUTPUT_PREDICATE=vf.createIRI(CONFIG_NAMESPACE, OUTPUT_ATTRIBUTE); - protected IRI RESULT_PREDICATE=vf.createIRI(CONFIG_NAMESPACE, RESULT_ATTRIBUTE); - protected IRI ARGUMENT_NAME_PREDICATE=vf.createIRI(CONFIG_NAMESPACE, ARGUMENT_ATTRIBUTE); - protected IRI MANDATORY_PREDICATE=vf.createIRI(CONFIG_NAMESPACE, MANDATORY_ATTRIBUTE); - protected IRI DEFAULT_PREDICATE=vf.createIRI(CONFIG_NAMESPACE, DEFAULT_ATTRIBUTE); + protected IRI supportsInvocationPredicate = vf.createIRI(CONFIG_NAMESPACE, INVOCATION_PROPERTY); + protected IRI callbackAddressPredicate = vf.createIRI(CONFIG_NAMESPACE, CALLBACK_NAME); + protected IRI targetUriPredicate = vf.createIRI(CONFIG_NAMESPACE, URL_ATTRIBUTE); + protected IRI invocationMethodPredicate = vf.createIRI(CONFIG_NAMESPACE, METHOD_ATTRIBUTE); + protected IRI inputPredicate = vf.createIRI(CONFIG_NAMESPACE, INPUT_ATTRIBUTE); + protected IRI outputPredicate = vf.createIRI(CONFIG_NAMESPACE, OUTPUT_ATTRIBUTE); + protected IRI resultPredicate = vf.createIRI(CONFIG_NAMESPACE, RESULT_ATTRIBUTE); + protected IRI argumentNamePredicate = vf.createIRI(CONFIG_NAMESPACE, ARGUMENT_ATTRIBUTE); + protected IRI mandatoryPredicate = vf.createIRI(CONFIG_NAMESPACE, MANDATORY_ATTRIBUTE); + protected IRI defaultPredicate = vf.createIRI(CONFIG_NAMESPACE, DEFAULT_ATTRIBUTE); - protected IRI GROUP_PREDICATE=vf.createIRI(CONFIG_NAMESPACE, GROUP_ATTRIBUTE); - protected IRI PRIORITY_PREDICATE=vf.createIRI(CONFIG_NAMESPACE, PRIORITY_ATTRIBUTE); - protected IRI RETURN_PATH_PREDICATE=vf.createIRI(CONFIG_NAMESPACE, PATH_ATTRIBUTE); - protected IRI BATCH_PREDICATE=vf.createIRI(CONFIG_NAMESPACE, BATCH_ATTRIBUTE); - protected IRI CALLBACK_PREDICATE=vf.createIRI(CONFIG_NAMESPACE, CALLBACK_ATTRIBUTE); - protected IRI INVOCATION_ID_PREDICATE=vf.createIRI(CONFIG_NAMESPACE, INVOCATION_ID_ATTRIBUTE); - protected IRI RESULT_ID_PREDICATE=vf.createIRI(CONFIG_NAMESPACE, RESULT_ID_ATTRIBUTE); - protected IRI CORRELATION_INPUT_PREDICATE=vf.createIRI(CONFIG_NAMESPACE, CORRELATION_INPUT_ATTRIBUTE); - protected IRI INPUT_PROPERTY_PREDICATE=vf.createIRI(CONFIG_NAMESPACE, INPUT_PROPERTY_ATTRIBUTE); - protected IRI OUTPUT_PROPERTY_PREDICATE=vf.createIRI(CONFIG_NAMESPACE, OUTPUT_PROPERTY_ATTRIBUTE); - protected IRI DATA_TYPE_PREDICATE=vf.createIRI(CONFIG_NAMESPACE, TYPE_RELATION); - protected IRI A_PREDICATE=vf.createIRI("http://www.w3.org/1999/02/22-rdf-syntax-ns#","type"); - protected IRI FUNCTION_CLASS=vf.createIRI(CONFIG_NAMESPACE,FUNCTION_NAME); - protected IRI RESULT_CLASS=vf.createIRI(CONFIG_NAMESPACE,RESULT_NAME); - protected IRI ARGUMENT_CLASS=vf.createIRI(CONFIG_NAMESPACE,ARGUMENT_NAME); - protected IRI AUTHENTICATION_CODE_PREDICATE=vf.createIRI(COMMON_NAMESPACE,AUTHENTICATION_CODE); - protected IRI AUTHENTICATION_KEY_PREDICATE=vf.createIRI(COMMON_NAMESPACE,AUTHENTICATION_KEY); + protected IRI groupPredicate = vf.createIRI(CONFIG_NAMESPACE, GROUP_ATTRIBUTE); + protected IRI priorityPredicate = vf.createIRI(CONFIG_NAMESPACE, PRIORITY_ATTRIBUTE); + protected IRI returnPathPredicate = vf.createIRI(CONFIG_NAMESPACE, PATH_ATTRIBUTE); + protected IRI batchPredicate = vf.createIRI(CONFIG_NAMESPACE, BATCH_ATTRIBUTE); + protected IRI callbackPredicate = vf.createIRI(CONFIG_NAMESPACE, CALLBACK_ATTRIBUTE); + protected IRI invocationIdPredicate = vf.createIRI(CONFIG_NAMESPACE, INVOCATION_ID_ATTRIBUTE); + protected IRI resultIdPredicate = vf.createIRI(CONFIG_NAMESPACE, RESULT_ID_ATTRIBUTE); + protected IRI correlationInputPredicate = vf.createIRI(CONFIG_NAMESPACE, CORRELATION_INPUT_ATTRIBUTE); + protected IRI inputPropertyPredicate = vf.createIRI(CONFIG_NAMESPACE, INPUT_PROPERTY_ATTRIBUTE); + protected IRI outputPropertyPredicate = vf.createIRI(CONFIG_NAMESPACE, OUTPUT_PROPERTY_ATTRIBUTE); + protected IRI dataTypePredicate = vf.createIRI(CONFIG_NAMESPACE, TYPE_RELATION); + protected IRI apredicate = vf.createIRI("http://www.w3.org/1999/02/22-rdf-syntax-ns#", "type"); + protected IRI functionClass = vf.createIRI(CONFIG_NAMESPACE, FUNCTION_NAME); + protected IRI resultClass = vf.createIRI(CONFIG_NAMESPACE, RESULT_NAME); + protected IRI argumentClass = vf.createIRI(CONFIG_NAMESPACE, ARGUMENT_NAME); + protected IRI authenticationCodePredicate = vf.createIRI(COMMON_NAMESPACE, AUTHENTICATION_CODE); + protected IRI authenticationKeyPredicate = vf.createIRI(COMMON_NAMESPACE, AUTHENTICATION_KEY); /** * keeps a list of invocation configs */ - protected Map services =new HashMap<>(); + protected Map services = new HashMap<>(); String callbackAddress; @@ -126,13 +132,14 @@ public String getCallbackAddress() { * create a new config */ public RemotingSailConfig() { - if(logger.isDebugEnabled()) { + if (logger.isDebugEnabled()) { logger.debug("Creating new remoting SAIL config."); - } + } } /** * gets a service config + * * @param iri of the service * @return service config */ @@ -142,15 +149,17 @@ public ServiceConfig getService(String iri) { /** * registers a service config - * @param iri service name + * + * @param iri service name * @param service config */ public void putService(String iri, ServiceConfig service) { - services.put(iri,service); + services.put(iri, service); } /** * lists services + * * @return set of irirs */ public Set listServices() { @@ -162,14 +171,14 @@ public Set listServices() { */ public RemotingSailConfig(String type) { super(type); - if(logger.isDebugEnabled()) { - logger.debug(String.format("Creating new remoting SAIL config for type %s.",type)); - } + if (logger.isDebugEnabled()) { + logger.debug(String.format("Creating new remoting SAIL config for type %s.", type)); + } } @Override public String toString() { - return super.toString()+"/config"; + return super.toString() + "/config"; } /** @@ -177,14 +186,14 @@ public String toString() { */ @Override public void validate() throws SailConfigException { - if(logger.isDebugEnabled()) { + if (logger.isDebugEnabled()) { logger.debug("About to validate."); - } + } super.validate(); - for(Map.Entry configs: services.entrySet()) { - if(configs.getValue().callbackProperty!=null) { - if(callbackAddress==null) { - throw new SailConfigException(String.format("There should be a repository-wide callbackAddress configured when service %s has a callbackProperty.",configs.getKey())); + for (Map.Entry configs : services.entrySet()) { + if (configs.getValue().callbackProperty != null) { + if (callbackAddress == null) { + throw new SailConfigException(String.format("There should be a repository-wide callbackAddress configured when service %s has a callbackProperty.", configs.getKey())); } } configs.getValue().validate(configs.getKey()); @@ -196,176 +205,176 @@ public void validate() throws SailConfigException { */ @Override public Resource export(Model model) { - if(logger.isDebugEnabled()) { - logger.debug(String.format("About to export to model %s.",model)); - } + if (logger.isDebugEnabled()) { + logger.debug(String.format("About to export to model %s.", model)); + } Resource repoNode = super.export(model); - if(callbackAddress!=null) { - model.add(repoNode,CALLBACK_ADDRESS_PREDICATE, vf.createIRI(callbackAddress)); + if (callbackAddress != null) { + model.add(repoNode, callbackAddressPredicate, vf.createIRI(callbackAddress)); } - for(Map.Entry func : services.entrySet()) { + for (Map.Entry func : services.entrySet()) { IRI functionNode = vf.createIRI(func.getKey()); - model.add(repoNode,SUPPORTS_INVOCATION_PREDICATE,functionNode); - model.add(functionNode,A_PREDICATE,FUNCTION_CLASS); - model.add(functionNode,TARGET_URI_PREDICATE,vf.createLiteral(func.getValue().targetUri)); - model.add(functionNode,INVOCATION_METHOD_PREDICATE,vf.createLiteral(func.getValue().method)); - model.add(functionNode,BATCH_PREDICATE,vf.createLiteral(func.getValue().batch)); - if(func.getValue().callbackProperty!=null) { - model.add(functionNode,CALLBACK_PREDICATE,vf.createLiteral(func.getValue().callbackProperty)); + model.add(repoNode, supportsInvocationPredicate, functionNode); + model.add(functionNode, apredicate, functionClass); + model.add(functionNode, targetUriPredicate, vf.createLiteral(func.getValue().targetUri)); + model.add(functionNode, invocationMethodPredicate, vf.createLiteral(func.getValue().method)); + model.add(functionNode, batchPredicate, vf.createLiteral(func.getValue().batch)); + if (func.getValue().callbackProperty != null) { + model.add(functionNode, callbackPredicate, vf.createLiteral(func.getValue().callbackProperty)); } - if(func.getValue().inputProperty!=null) { - model.add(functionNode,INPUT_PROPERTY_PREDICATE,vf.createLiteral(func.getValue().inputProperty)); + if (func.getValue().inputProperty != null) { + model.add(functionNode, inputPropertyPredicate, vf.createLiteral(func.getValue().inputProperty)); } - if(func.getValue().invocationIdProperty!=null) { - model.add(functionNode,INVOCATION_ID_PREDICATE,vf.createLiteral(func.getValue().invocationIdProperty)); + if (func.getValue().invocationIdProperty != null) { + model.add(functionNode, invocationIdPredicate, vf.createLiteral(func.getValue().invocationIdProperty)); } - if(func.getValue().authentication!=null) { - model.add(functionNode,AUTHENTICATION_CODE_PREDICATE,vf.createLiteral(func.getValue().authentication.authCode)); - model.add(functionNode,AUTHENTICATION_KEY_PREDICATE,vf.createLiteral(func.getValue().authentication.authKey)); + if (func.getValue().authentication != null) { + model.add(functionNode, authenticationCodePredicate, vf.createLiteral(func.getValue().authentication.authCode)); + model.add(functionNode, authenticationKeyPredicate, vf.createLiteral(func.getValue().authentication.authKey)); } - for(Map.Entry arg: func.getValue().arguments.entrySet()) { + for (Map.Entry arg : func.getValue().arguments.entrySet()) { IRI argumentNode = vf.createIRI(arg.getKey()); - model.add(functionNode,INPUT_PREDICATE,argumentNode); - model.add(argumentNode,A_PREDICATE,ARGUMENT_CLASS); - model.add(argumentNode,ARGUMENT_NAME_PREDICATE,vf.createLiteral(arg.getValue().argumentName)); - model.add(argumentNode,MANDATORY_PREDICATE,vf.createLiteral(arg.getValue().mandatory)); - model.add(argumentNode,PRIORITY_PREDICATE,vf.createLiteral(arg.getValue().priority)); - model.add(argumentNode,GROUP_PREDICATE,vf.createLiteral(arg.getValue().formsBatchGroup)); - model.add(argumentNode,DEFAULT_PREDICATE, Invocation.convertOutputToValue(arg.getValue().defaultValue,vf,"","https://json-schema.org/draft/2020-12/schema#Object")); + model.add(functionNode, inputPredicate, argumentNode); + model.add(argumentNode, apredicate, argumentClass); + model.add(argumentNode, argumentNamePredicate, vf.createLiteral(arg.getValue().argumentName)); + model.add(argumentNode, mandatoryPredicate, vf.createLiteral(arg.getValue().mandatory)); + model.add(argumentNode, priorityPredicate, vf.createLiteral(arg.getValue().priority)); + model.add(argumentNode, groupPredicate, vf.createLiteral(arg.getValue().formsBatchGroup)); + model.add(argumentNode, defaultPredicate, Invocation.convertOutputToValue(arg.getValue().defaultValue, vf, "", "https://json-schema.org/draft/2020-12/schema#Object")); } IRI resultNode = vf.createIRI(func.getValue().resultName); - model.add(functionNode,RESULT_PREDICATE,resultNode); - model.add(resultNode,A_PREDICATE,RESULT_CLASS); - ResultConfig result=func.getValue().result; - if(result.callbackProperty!=null) { - model.add(resultNode,CALLBACK_PREDICATE,vf.createLiteral(result.callbackProperty)); + model.add(functionNode, resultPredicate, resultNode); + model.add(resultNode, apredicate, resultClass); + ResultConfig result = func.getValue().result; + if (result.callbackProperty != null) { + model.add(resultNode, callbackPredicate, vf.createLiteral(result.callbackProperty)); } - if(result.outputProperty!=null) { - model.add(resultNode,OUTPUT_PROPERTY_PREDICATE,vf.createLiteral(result.outputProperty)); + if (result.outputProperty != null) { + model.add(resultNode, outputPropertyPredicate, vf.createLiteral(result.outputProperty)); } - if(result.resultIdProperty!=null) { - model.add(functionNode,INVOCATION_ID_PREDICATE,vf.createLiteral(result.resultIdProperty)); + if (result.resultIdProperty != null) { + model.add(functionNode, invocationIdPredicate, vf.createLiteral(result.resultIdProperty)); } - if(result.correlationInput!=null) { - model.add(functionNode,CORRELATION_INPUT_PREDICATE,vf.createLiteral(result.correlationInput)); + if (result.correlationInput != null) { + model.add(functionNode, correlationInputPredicate, vf.createLiteral(result.correlationInput)); } - for(Map.Entry arg: result.outputs.entrySet()) { + for (Map.Entry arg : result.outputs.entrySet()) { IRI argumentNode = vf.createIRI(arg.getKey()); - model.add(functionNode,OUTPUT_PREDICATE,argumentNode); - model.add(argumentNode,A_PREDICATE,ARGUMENT_CLASS); - model.add(argumentNode,RETURN_PATH_PREDICATE,vf.createLiteral(arg.getValue().path)); - model.add(argumentNode,DATA_TYPE_PREDICATE,vf.createIRI(arg.getValue().dataType)); + model.add(functionNode, outputPredicate, argumentNode); + model.add(argumentNode, apredicate, argumentClass); + model.add(argumentNode, returnPathPredicate, vf.createLiteral(arg.getValue().path)); + model.add(argumentNode, dataTypePredicate, vf.createIRI(arg.getValue().dataType)); } } return repoNode; } - /** - * parse the config - */ + /** + * parse the config + */ @Override public void parse(Model model, Resource implNode) throws SailConfigException { - if(logger.isDebugEnabled()) { - logger.debug(String.format("About to parse from model %s and resource %s.",model,implNode)); - } + if (logger.isDebugEnabled()) { + logger.debug(String.format("About to parse from model %s and resource %s.", model, implNode)); + } super.parse(model, implNode); - model.getStatements(implNode,CALLBACK_ADDRESS_PREDICATE,null).forEach(statement -> callbackAddress=statement.getObject().stringValue()); - model.getStatements(implNode,SUPPORTS_INVOCATION_PREDICATE,null).forEach(statement -> { - if(logger.isDebugEnabled()) { - logger.debug(String.format("About to process function from statement %s.",statement)); - } - if(!statement.getObject(). isIRI()) { - throw new SailConfigException(String.format("Object of the %s predicate must be IRI but was %s",SUPPORTS_INVOCATION_PREDICATE,statement.getObject())); + model.getStatements(implNode, callbackAddressPredicate, null).forEach(statement -> callbackAddress = statement.getObject().stringValue()); + model.getStatements(implNode, supportsInvocationPredicate, null).forEach(statement -> { + if (logger.isDebugEnabled()) { + logger.debug(String.format("About to process function from statement %s.", statement)); } - IRI functionNode=(IRI) statement.getObject(); - ServiceConfig ic=new ServiceConfig(); - services.put(functionNode.stringValue(),ic); - Models.objectLiteral(model.filter(functionNode,TARGET_URI_PREDICATE,null)). - ifPresent(targetUri -> ic.targetUri=targetUri.stringValue()); - Models.objectLiteral(model.filter(functionNode,INVOCATION_METHOD_PREDICATE,null)). - ifPresent(invocationMethod -> ic.method=invocationMethod.stringValue()); - Models.objectLiteral(model.filter(functionNode,BATCH_PREDICATE,null)). - ifPresent(batch -> ic.batch=batch.longValue()); - Models.objectLiteral(model.filter(functionNode,CALLBACK_PREDICATE,null)). - ifPresent(async -> ic.callbackProperty=async.stringValue()); - Models.objectLiteral(model.filter(functionNode,INPUT_PROPERTY_PREDICATE,null)). - ifPresent(ip -> ic.inputProperty=ip.stringValue()); - Models.objectLiteral(model.filter(functionNode,INVOCATION_ID_PREDICATE,null)). - ifPresent(iid -> ic.invocationIdProperty=iid.stringValue()); - Models.objectLiteral(model.filter(functionNode,AUTHENTICATION_KEY_PREDICATE,null)). - ifPresent(authKey -> { - if(ic.authentication==null) { - ic.authentication=new AuthenticationConfig(); - } - ic.authentication.authKey=authKey.stringValue(); - }); - Models.objectLiteral(model.filter(functionNode,AUTHENTICATION_CODE_PREDICATE,null)). - ifPresent(authCode -> { - if(ic.authentication==null) { - ic.authentication=new AuthenticationConfig(); - } - ic.authentication.authCode=authCode.stringValue(); - }); - model.getStatements(functionNode,INPUT_PREDICATE,null).forEach( + if (!statement.getObject().isIRI()) { + throw new SailConfigException(String.format("Object of the %s predicate must be IRI but was %s", supportsInvocationPredicate, statement.getObject())); + } + IRI functionNode = (IRI) statement.getObject(); + ServiceConfig ic = new ServiceConfig(); + services.put(functionNode.stringValue(), ic); + Models.objectLiteral(model.filter(functionNode, targetUriPredicate, null)) + .ifPresent(targetUri -> ic.targetUri = targetUri.stringValue()); + Models.objectLiteral(model.filter(functionNode, invocationMethodPredicate, null)) + .ifPresent(invocationMethod -> ic.method = invocationMethod.stringValue()); + Models.objectLiteral(model.filter(functionNode, batchPredicate, null)) + .ifPresent(batch -> ic.batch = batch.longValue()); + Models.objectLiteral(model.filter(functionNode, callbackPredicate, null)) + .ifPresent(async -> ic.callbackProperty = async.stringValue()); + Models.objectLiteral(model.filter(functionNode, inputPropertyPredicate, null)) + .ifPresent(ip -> ic.inputProperty = ip.stringValue()); + Models.objectLiteral(model.filter(functionNode, invocationIdPredicate, null)) + .ifPresent(iid -> ic.invocationIdProperty = iid.stringValue()); + Models.objectLiteral(model.filter(functionNode, authenticationKeyPredicate, null)) + .ifPresent(authKey -> { + if (ic.authentication == null) { + ic.authentication = new AuthenticationConfig(); + } + ic.authentication.authKey = authKey.stringValue(); + }); + Models.objectLiteral(model.filter(functionNode, authenticationCodePredicate, null)) + .ifPresent(authCode -> { + if (ic.authentication == null) { + ic.authentication = new AuthenticationConfig(); + } + ic.authentication.authCode = authCode.stringValue(); + }); + model.getStatements(functionNode, inputPredicate, null).forEach( argumentStatement -> { - if(logger.isDebugEnabled()) { - logger.debug(String.format("About to process argument from statement %s.",argumentStatement)); - } - if(!argumentStatement.getObject().isIRI()) { - throw new SailConfigException(String.format("Object of the %s predicate must be IRI but was %s",INPUT_PREDICATE,argumentStatement.getObject())); + if (logger.isDebugEnabled()) { + logger.debug(String.format("About to process argument from statement %s.", argumentStatement)); } - IRI argumentNode=(IRI) argumentStatement.getObject(); - ArgumentConfig ac=new ArgumentConfig(); - ic.arguments.put(argumentNode.stringValue(),ac); - Models.objectLiteral(model.filter(argumentNode,ARGUMENT_NAME_PREDICATE,null)). - ifPresent(argumentName -> ac.argumentName=argumentName.stringValue()); - Models.objectLiteral(model.filter(argumentNode,MANDATORY_PREDICATE,null)). - ifPresent(mandatory -> ac.mandatory=Boolean.parseBoolean(mandatory.stringValue())); - Models.objectLiteral(model.filter(argumentNode,PRIORITY_PREDICATE,null)). - ifPresent(priority -> ac.priority=Integer.parseInt(priority.stringValue())); - Models.objectLiteral(model.filter(argumentNode,GROUP_PREDICATE,null)). - ifPresent(group -> ac.formsBatchGroup=Boolean.parseBoolean(group.stringValue())); - Models.objectLiteral(model.filter(argumentNode,DEFAULT_PREDICATE,null)). - ifPresent(def -> ac.defaultValue=Invocation.convertToObject(def, JsonNode.class)); - } - ); - Models.objectIRI(model.filter(functionNode,RESULT_PREDICATE,null)). - ifPresent(result -> { - if(logger.isDebugEnabled()) { - logger.debug(String.format("About to process result %s.",result)); + if (!argumentStatement.getObject().isIRI()) { + throw new SailConfigException(String.format("Object of the %s predicate must be IRI but was %s", inputPredicate, argumentStatement.getObject())); + } + IRI argumentNode = (IRI) argumentStatement.getObject(); + ArgumentConfig ac = new ArgumentConfig(); + ic.arguments.put(argumentNode.stringValue(), ac); + Models.objectLiteral(model.filter(argumentNode, argumentNamePredicate, null)) + .ifPresent(argumentName -> ac.argumentName = argumentName.stringValue()); + Models.objectLiteral(model.filter(argumentNode, mandatoryPredicate, null)) + .ifPresent(mandatory -> ac.mandatory = Boolean.parseBoolean(mandatory.stringValue())); + Models.objectLiteral(model.filter(argumentNode, priorityPredicate, null)) + .ifPresent(priority -> ac.priority = Integer.parseInt(priority.stringValue())); + Models.objectLiteral(model.filter(argumentNode, groupPredicate, null)) + .ifPresent(group -> ac.formsBatchGroup = Boolean.parseBoolean(group.stringValue())); + Models.objectLiteral(model.filter(argumentNode, defaultPredicate, null)) + .ifPresent(def -> ac.defaultValue = Invocation.convertToObject(def, JsonNode.class)); } - ic.resultName=result.stringValue(); - ResultConfig rc=new ResultConfig(); - ic.result=rc; - Models.objectLiteral(model.filter(result,OUTPUT_PROPERTY_PREDICATE,null)). - ifPresent(op -> rc.outputProperty=op.stringValue()); - Models.objectLiteral(model.filter(result,RESULT_ID_PREDICATE,null)). - ifPresent(rid -> rc.resultIdProperty=rid.stringValue()); - Models.objectIRI(model.filter(result,CORRELATION_INPUT_PREDICATE,null)). - ifPresent(rid -> rc.correlationInput=rid.stringValue()); - Models.objectLiteral(model.filter(result,CALLBACK_PREDICATE,null)). - ifPresent(async -> rc.callbackProperty=async.stringValue()); - model.getStatements(result,OUTPUT_PREDICATE,null).forEach( - outputStatement -> { - if(logger.isDebugEnabled()) { - logger.debug(String.format("About to process output from statement %s.",outputStatement)); - } - if(!outputStatement.getObject().isIRI()) { - throw new SailConfigException(String.format("Object of the %s predicate must be IRI but was %s",INPUT_PREDICATE,outputStatement.getObject())); - } - IRI outputNode=(IRI) outputStatement.getObject(); - ReturnValueConfig rvc=new ReturnValueConfig(); - rc.outputs.put(outputNode.stringValue(),rvc); - Models.objectLiteral(model.filter(outputNode,RETURN_PATH_PREDICATE,null)). - ifPresent(path -> rvc.path=path.stringValue()); - Models.objectIRI(model.filter(outputNode,DATA_TYPE_PREDICATE,null)). - ifPresent(dataType -> rvc.dataType=dataType.stringValue()); + ); + Models.objectIRI(model.filter(functionNode, resultPredicate, null)) + .ifPresent(result -> { + if (logger.isDebugEnabled()) { + logger.debug(String.format("About to process result %s.", result)); } - ); - - }); + ic.resultName = result.stringValue(); + ResultConfig rc = new ResultConfig(); + ic.result = rc; + Models.objectLiteral(model.filter(result, outputPropertyPredicate, null)) + .ifPresent(op -> rc.outputProperty = op.stringValue()); + Models.objectLiteral(model.filter(result, resultIdPredicate, null)) + .ifPresent(rid -> rc.resultIdProperty = rid.stringValue()); + Models.objectIRI(model.filter(result, correlationInputPredicate, null)) + .ifPresent(rid -> rc.correlationInput = rid.stringValue()); + Models.objectLiteral(model.filter(result, callbackPredicate, null)) + .ifPresent(async -> rc.callbackProperty = async.stringValue()); + model.getStatements(result, outputPredicate, null).forEach( + outputStatement -> { + if (logger.isDebugEnabled()) { + logger.debug(String.format("About to process output from statement %s.", outputStatement)); + } + if (!outputStatement.getObject().isIRI()) { + throw new SailConfigException(String.format("Object of the %s predicate must be IRI but was %s", inputPredicate, outputStatement.getObject())); + } + IRI outputNode = (IRI) outputStatement.getObject(); + ReturnValueConfig rvc = new ReturnValueConfig(); + rc.outputs.put(outputNode.stringValue(), rvc); + Models.objectLiteral(model.filter(outputNode, returnPathPredicate, null)) + .ifPresent(path -> rvc.path = path.stringValue()); + Models.objectIRI(model.filter(outputNode, dataTypePredicate, null)) + .ifPresent(dataType -> rvc.dataType = dataType.stringValue()); + } + ); + + }); + - }); } diff --git a/remoting/src/main/java/org/eclipse/tractusx/agents/remoting/config/ResultConfig.java b/remoting/src/main/java/org/eclipse/tractusx/agents/remoting/config/ResultConfig.java index bb327500..5619dccc 100644 --- a/remoting/src/main/java/org/eclipse/tractusx/agents/remoting/config/ResultConfig.java +++ b/remoting/src/main/java/org/eclipse/tractusx/agents/remoting/config/ResultConfig.java @@ -31,10 +31,14 @@ public class ResultConfig { */ protected Map outputs = new java.util.HashMap<>(); - /** prefix for all the output paths */ - String outputProperty=null; - /** where the id of the result can be found */ - String resultIdProperty=null; + /** + * prefix for all the output paths + */ + String outputProperty = null; + /** + * where the id of the result can be found + */ + String resultIdProperty = null; public Map getOutputs() { return outputs; @@ -56,21 +60,22 @@ public String getCallbackProperty() { return callbackProperty; } - String correlationInput=null; - String callbackProperty=null; + String correlationInput = null; + String callbackProperty = null; + - @Override public String toString() { - return super.toString()+"/service"; - } + return super.toString() + "/service"; + } /** * Validates the invocation config + * * @throws SailConfigException if validation is not successful */ public void validate(String context) throws SailConfigException { - if(context==null) { + if (context == null) { throw new SailConfigException("Result Config must have a context"); } for (Map.Entry arg : outputs.entrySet()) { diff --git a/remoting/src/main/java/org/eclipse/tractusx/agents/remoting/config/ReturnValueConfig.java b/remoting/src/main/java/org/eclipse/tractusx/agents/remoting/config/ReturnValueConfig.java index 59e82d67..1b0cf952 100644 --- a/remoting/src/main/java/org/eclipse/tractusx/agents/remoting/config/ReturnValueConfig.java +++ b/remoting/src/main/java/org/eclipse/tractusx/agents/remoting/config/ReturnValueConfig.java @@ -22,21 +22,23 @@ * represents the config of a return value */ public class ReturnValueConfig { - /** path of the return value, defaults to empty */ - protected String path=""; - /** - * default data type is string - */ - protected String dataType="http://www.w3.org/2001/XMLSchema#string"; + /** + * path of the return value, defaults to empty + */ + protected String path = ""; + /** + * default data type is string + */ + protected String dataType = "http://www.w3.org/2001/XMLSchema#string"; - @Override - public String toString() { - return super.toString()+"/return"; - } + @Override + public String toString() { + return super.toString() + "/return"; + } - public void validate(String context) throws SailConfigException { - switch(dataType) { + public void validate(String context) throws SailConfigException { + switch (dataType) { case "http://www.w3.org/2001/XMLSchema#double": break; case "http://www.w3.org/2001/XMLSchema#int": @@ -52,9 +54,9 @@ public void validate(String context) throws SailConfigException { case "https://json-schema.org/draft/2020-12/schema#Object": break; default: - throw new SailConfigException(String.format("Data type %s is not supported in return value %s.",dataType,context)); - } - } + throw new SailConfigException(String.format("Data type %s is not supported in return value %s.", dataType, context)); + } + } public String getPath() { return path; diff --git a/remoting/src/main/java/org/eclipse/tractusx/agents/remoting/config/ServiceConfig.java b/remoting/src/main/java/org/eclipse/tractusx/agents/remoting/config/ServiceConfig.java index 4d8376cd..a814de77 100644 --- a/remoting/src/main/java/org/eclipse/tractusx/agents/remoting/config/ServiceConfig.java +++ b/remoting/src/main/java/org/eclipse/tractusx/agents/remoting/config/ServiceConfig.java @@ -27,29 +27,45 @@ * from the config graph of the remoting SAIL repo. */ public class ServiceConfig { - /** regexp to check invocation */ + /** + * regexp to check invocation + */ public static Pattern classPattern = Pattern.compile( "(?class):(?[a-zA-Z0-9\\.]+)#(?[a-zA-Z0-9]+)|(?https?)://(?[a-zA-Z0-9\\.:/%#\\-]+)"); - /** url of the target service */ + /** + * url of the target service + */ protected String targetUri = null; - /** method for the invocation, maybe POST or POST-MF, GET or INVOKE */ + /** + * method for the invocation, maybe POST or POST-MF, GET or INVOKE + */ protected String method = null; - /** a matcher for the targetUri containing regex groups/bindings */ + /** + * a matcher for the targetUri containing regex groups/bindings + */ protected Matcher matcher = null; - /** the maximal batch size */ + /** + * the maximal batch size + */ protected long batch = 1; - /** whether it is an asynchronous call */ + /** + * whether it is an asynchronous call + */ protected String callbackProperty; - /** prefix to attach to all properties */ + /** + * prefix to attach to all properties + */ protected String inputProperty; - /** whether and where to put a unique invocation id */ + /** + * whether and where to put a unique invocation id + */ protected String invocationIdProperty; /** @@ -62,12 +78,15 @@ public class ServiceConfig { */ protected Map arguments = new java.util.HashMap(); - /** the result */ - String resultName=null; - ResultConfig result=null; + /** + * the result + */ + String resultName = null; + ResultConfig result = null; /** * sets + * * @param targetUri reference */ public void setTargetUri(String targetUri) { @@ -76,6 +95,7 @@ public void setTargetUri(String targetUri) { /** * sets + * * @param resultName reference */ public void setResultName(String resultName) { @@ -84,6 +104,7 @@ public void setResultName(String resultName) { /** * sets + * * @param result config */ public void setResult(ResultConfig result) { @@ -91,6 +112,8 @@ public void setResult(ResultConfig result) { } /** + * access + * * @return invocation method (POST-JSON, POST-JSON-MF, GET, ...) */ public String getMethod() { @@ -98,6 +121,8 @@ public String getMethod() { } /** + * access + * * @return the matcher that parsed the target uri and provides parsing components */ public Matcher getMatcher() { @@ -105,6 +130,8 @@ public Matcher getMatcher() { } /** + * access + * * @return maximal batch size */ public long getBatch() { @@ -112,6 +139,8 @@ public long getBatch() { } /** + * access + * * @return callback property to set callback address to */ public String getCallbackProperty() { @@ -119,6 +148,8 @@ public String getCallbackProperty() { } /** + * access + * * @return property which contains the actual request data */ public String getInputProperty() { @@ -126,6 +157,8 @@ public String getInputProperty() { } /** + * access + * * @return property which should host the invocation id */ public String getInvocationIdProperty() { @@ -133,6 +166,8 @@ public String getInvocationIdProperty() { } /** + * access + * * @return authentication info */ public AuthenticationConfig getAuthentication() { @@ -140,6 +175,8 @@ public AuthenticationConfig getAuthentication() { } /** + * access + * * @return map of iri to argument configurations */ public Map getArguments() { @@ -147,6 +184,8 @@ public Map getArguments() { } /** + * access + * * @return result reference */ public String getResultName() { @@ -154,6 +193,8 @@ public String getResultName() { } /** + * access + * * @return result config */ public ResultConfig getResult() { @@ -162,16 +203,17 @@ public ResultConfig getResult() { @Override public String toString() { - return super.toString()+"/service"; - } + return super.toString() + "/service"; + } /** * Validates the invocation config + * * @throws SailConfigException if validation is unsuccessful */ public void validate(String context) throws SailConfigException { if (targetUri == null || targetUri.length() == 0) { - throw new SailConfigException(String.format("Service URL in invocation %s is not provided",context)); + throw new SailConfigException(String.format("Service URL in invocation %s is not provided", context)); } matcher = classPattern.matcher(targetUri); if (!matcher.matches()) { @@ -190,7 +232,7 @@ public void validate(String context) throws SailConfigException { case "INVOKE": if (matcher.group("classType") == null) { throw new SailConfigException(String.format( - "INVOKE Method can onl be used with class-type service URLs but was %s.", targetUri)); + "INVOKE Method can only be used with class-type service URLs but was %s.", targetUri)); } break; case "POST-JSON": @@ -200,25 +242,27 @@ public void validate(String context) throws SailConfigException { throw new SailConfigException(String.format( "%s Method can only be used with REST service URLs but was %s.", method, targetUri)); } - + break; + default: + break; } } - if(callbackProperty!=null) { - if(result.callbackProperty==null) { + if (callbackProperty != null) { + if (result.callbackProperty == null) { throw new SailConfigException("There should be a result callbackProperty configured when the invocation callbackProperty is set."); } } for (Map.Entry arg : arguments.entrySet()) { arg.getValue().validate(arg.getKey()); } - if(resultName==null || result==null) { + if (resultName == null || result == null) { throw new SailConfigException(String.format( - "There was no result configured for the invocation.")); + "There was no result configured for the invocation.")); } else { result.validate(resultName); } - if(authentication!=null) { + if (authentication != null) { authentication.validate(context); } } diff --git a/remoting/src/main/java/org/eclipse/tractusx/agents/remoting/test/TestFunction.java b/remoting/src/main/java/org/eclipse/tractusx/agents/remoting/test/TestFunction.java index 8880e05c..3a497bdd 100644 --- a/remoting/src/main/java/org/eclipse/tractusx/agents/remoting/test/TestFunction.java +++ b/remoting/src/main/java/org/eclipse/tractusx/agents/remoting/test/TestFunction.java @@ -24,13 +24,13 @@ public class TestFunction { @Override public String toString() { - return super.toString()+"/test"; + return super.toString() + "/test"; } /** * test method to expose */ - public int test(int operator1,int operator2) { - return operator1+operator2; - } + public int test(int operator1, int operator2) { + return operator1 + operator2; + } } diff --git a/remoting/src/main/java/org/eclipse/tractusx/agents/remoting/util/BatchKey.java b/remoting/src/main/java/org/eclipse/tractusx/agents/remoting/util/BatchKey.java index 88a2074f..0c17ed0c 100644 --- a/remoting/src/main/java/org/eclipse/tractusx/agents/remoting/util/BatchKey.java +++ b/remoting/src/main/java/org/eclipse/tractusx/agents/remoting/util/BatchKey.java @@ -21,27 +21,28 @@ /** * implements a compound key based on individual hash codes */ -public class BatchKey { +public class BatchKey { - TargetClass[] components; + TARGET[] components; - public TargetClass[] getComponents() { + public TARGET[] getComponents() { return components; } /** * create a new batch key + * * @param theComponents of the batch key */ - public BatchKey(TargetClass... theComponents) { - this.components=theComponents; + public BatchKey(TARGET... theComponents) { + this.components = theComponents; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; - BatchKey batchKey = (BatchKey) o; + BatchKey batchKey = (BatchKey) o; return Arrays.equals(components, batchKey.components); } diff --git a/resources/suppressions.xml b/resources/suppressions.xml new file mode 100644 index 00000000..6a89b011 --- /dev/null +++ b/resources/suppressions.xml @@ -0,0 +1,22 @@ + + + + + + + + diff --git a/resources/tx-checkstyle-config.xml b/resources/tx-checkstyle-config.xml new file mode 100644 index 00000000..cdce3485 --- /dev/null +++ b/resources/tx-checkstyle-config.xml @@ -0,0 +1,436 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/tx-codestyle.xml b/resources/tx-codestyle.xml new file mode 100644 index 00000000..43925d55 --- /dev/null +++ b/resources/tx-codestyle.xml @@ -0,0 +1,337 @@ + + + + + + + + + + + + + + \ No newline at end of file